History
Streams export history from a repository source.
Basic Usage
Pass the async generator returned by repository.getExportHistory() as the source prop:
import { Directory } from 'renoun'
import { History } from 'renoun/components'
const directory = new Directory({
path: 'packages/renoun',
repository: {
path: 'https://github.com/souporserious/renoun',
ref: 'main',
},
})
export default async function Page() {
const repo = directory.getRepository()
const source = repo.getExportHistory()
return <History source={source} />
}History handles streaming + data projection. You provide UI via component slots.
Slots
| Slot | Purpose |
|---|---|
Root | Optional wrapper around all output |
Progress | Rendered while streaming |
Complete | Rendered once report is complete |
Exports | Wraps final export entries |
Export | Renders a single export entry |
Changes | Wraps changes for an export |
Change | Renders an individual change |
Custom Rendering
import { Directory } from 'renoun'
import { History, type HistoryComponents } from 'renoun/components'
const directory = new Directory({
path: 'packages/renoun',
repository: {
path: 'https://github.com/souporserious/renoun',
ref: 'main',
},
})
const repo = directory.getRepository()
const components: Partial<HistoryComponents> = {
Progress: ({ phase, commitsProcessed, totalCommits }) => (
<p>
{phase} ({commitsProcessed}/{totalCommits})
</p>
),
Complete: ({ exportCount, changeCount, children }) => (
<section>
<h2>
{exportCount} exports, {changeCount} changes
</h2>
{children}
</section>
),
Exports: ({ children }) => <ul>{children}</ul>,
Export: ({ entry, children }) => (
<li>
<strong>{entry.name}</strong>
{children}
</li>
),
Changes: ({ children }) => <ol>{children}</ol>,
Change: ({ change }) => <li>{change.kind}</li>,
}
export default async function Page() {
const source = repo.getExportHistory({ entry: 'src/index.ts' })
return <History source={source} components={components} />
}Entry Selection
Use selectEntries to project the final report before rendering:
import { Directory } from 'renoun'
import {
History,
getRecentlyAddedHistoryEntries,
type HistorySelectEntriesContext,
} from 'renoun/components'
const directory = new Directory({
path: 'packages/renoun',
repository: {
path: 'https://github.com/souporserious/renoun',
ref: 'main',
},
})
const repo = directory.getRepository()
const selectRecent = ({ report }: HistorySelectEntriesContext) =>
getRecentlyAddedHistoryEntries(report, { release: 'latest' })
export default async function Page() {
const source = repo.getExportHistory({ entry: 'src/index.ts' })
return <History source={source} selectEntries={selectRecent} />
}Helpers
-
getHistoryEntries(report)returns default sorted entries. -
getLatestHistoryRelease(report)returns the most recent release label found. -
getRecentlyAddedHistoryEntries(report, { release })filters toAddedchanges for a release ('latest'by default).
Streaming Model
History consumes the async generator one event at a time with recursive Suspense boundaries. Each progress yield is rendered via Progress; when complete, Complete receives the final report and projected entries.
API Reference
A single export entry derived from the final report.
Properties
| Property | Type | Modifiers |
|---|---|---|
| id | string | — |
The ID of the export. | ||
| name | string | — |
The name of the export. | ||
| filePath | string | — |
The file path of the export. | ||
| changes | Array<ExportChange> | — |
The changes made to the export. | ||
Properties
| Property | Type | Modifiers |
|---|---|---|
| phase | string | — |
Current processing phase. | ||
| elapsedMs | number | — |
Milliseconds elapsed since the operation started. | ||
| commitsProcessed | number | — |
Number of commits processed so far. | ||
| totalCommits | number | — |
Total number of commits to process. | ||
| exportCount | number | — |
Number of unique exports discovered so far. | ||
| changeCount | number | — |
Total number of changes discovered so far. | ||
Properties
| Property | Type | Modifiers |
|---|---|---|
| report | ExportHistoryReport | — |
Completed export history report. | ||
| elapsedMs | number | — |
Total milliseconds the operation took. | ||
| entries | Array<HistoryExportEntry> | — |
Final entries after | ||
| exportCount | number | — |
Total number of entries in | ||
| changeCount | number | — |
Total number of changes across | ||
| children | React.ReactNode | — |
Default rendered list output. | ||
Properties
| Property | Type | Modifiers |
|---|---|---|
| Exports | ComponentClass<{ entries: HistoryExportEntry[]; children: React.ReactNode; }, any> | FunctionComponent<{ entries: HistoryExportEntry[]; children: React.ReactNode; }> | — |
Wraps the final exports list. | ||
| Export | ComponentClass<{ entry: HistoryExportEntry; children: React.ReactNode; }, any> | FunctionComponent<{ entry: HistoryExportEntry; children: React.ReactNode; }> | — |
Renders a single export entry. | ||
| Changes | ComponentClass<{ entry: HistoryExportEntry; children: React.ReactNode; }, any> | FunctionComponent<{ entry: HistoryExportEntry; children: React.ReactNode; }> | — |
Wraps the changes list for an export entry. | ||
| Change | ComponentClass<{ entry: HistoryExportEntry; change: ExportChange; index: number; isLast: boolean; }, any> | FunctionComponent<{ entry: HistoryExportEntry; change: ExportChange; index: number; isLast: boolean; }> | — |
Renders a single change for an export entry. | ||
Extends
HistoryListComponentsProperties
| Property | Type | Modifiers |
|---|---|---|
| Root | ComponentClass<{ children: React.ReactNode; }, any> | FunctionComponent<{ children: React.ReactNode; }> | — |
Optional root wrapper around the entire component output. | ||
| Progress | React.ComponentType<HistoryProgressProps> | — |
Renders progress while streaming. | ||
| Complete | React.ComponentType<HistoryCompleteProps> | — |
Renders completion output with access to report + projected entries. | ||
| Exports | ComponentClass<{ entries: HistoryExportEntry[]; children: React.ReactNode; }, any> | FunctionComponent<{ entries: HistoryExportEntry[]; children: React.ReactNode; }> | — |
Wraps the final exports list. | ||
| Export | ComponentClass<{ entry: HistoryExportEntry; children: React.ReactNode; }, any> | FunctionComponent<{ entry: HistoryExportEntry; children: React.ReactNode; }> | — |
Renders a single export entry. | ||
| Changes | ComponentClass<{ entry: HistoryExportEntry; children: React.ReactNode; }, any> | FunctionComponent<{ entry: HistoryExportEntry; children: React.ReactNode; }> | — |
Wraps the changes list for an export entry. | ||
| Change | ComponentClass<{ entry: HistoryExportEntry; change: ExportChange; index: number; isLast: boolean; }, any> | FunctionComponent<{ entry: HistoryExportEntry; change: ExportChange; index: number; isLast: boolean; }> | — |
Renders a single change for an export entry. | ||
Properties
| Property | Type | Modifiers |
|---|---|---|
| report | ExportHistoryReport | — |
Completed report from the source. | ||
| entries | Array<HistoryExportEntry> | — |
Default entries derived from the report. | ||
Allows selecting/filtering/sorting final entries before rendering.
Useful for custom views such as “recently added in latest release” while keeping rendering fully slot-driven.
Type
HistorySelectEntriesProperties
| Property | Type | Modifiers |
|---|---|---|
| source | ExportHistoryGenerator | — |
The async generator returned by | ||
| components? | Partial<HistoryComponents> | — |
Override any default slot renderer. | ||
| selectEntries? | HistorySelectEntries | — |
Select/filter/sort final entries before rendering. | ||
Streams export history from a repository source.
Properties
HistoryPropsReturns
React.JSX.Element | Promise<React.JSX.Element>Modifiers
asyncCreates sorted history entries from a completed report.
Parameters
| Parameter | Type | Default Value |
|---|---|---|
| report | ExportHistoryReport | — |
Returns
Array<HistoryExportEntry>Finds the most recent release label present in a report.
Parameters
| Parameter | Type | Default Value |
|---|---|---|
| report | ExportHistoryReport | — |
Returns
string | undefinedProperties
| Property | Type | Modifiers |
|---|---|---|
| release? | string | — |
Release label to filter against. Defaults to | ||
Selects only “Added” changes for a specific release.
This is intended for views like “recently added in latest release”.
Parameters
| Parameter | Type | Default Value |
|---|---|---|
| report | ExportHistoryReport | — |
| options? | HistoryRecentlyAddedOptions | {} |
Returns
Array<HistoryExportEntry>