/** * Bootstrap + re-exports for the markwhen projection layer. * * Two complementary projections: * - **Scheduled** (MarkwhenSourceFactory): "what's happening / will happen" — * events with explicit start/end (rCal, rSchedule). * - **Creations** (CreationEnumerator / CreationSpec): "what has been made" — * every CRDT record's birth moment across every rApp. This is what rPast * renders. Declared statically in `creation-specs.ts`. * * Call `initMarkwhen(loader)` once at server/client start. */ import { setDocLoader, type DocLoader } from './doc-loader'; import { registerMarkwhenSource } from './registry'; import { registerCreationEnumerator } from './creations'; import { createCreationEnumerator } from './universal-enumerator'; import { ALL_CREATION_SPECS } from './creation-specs'; // Scheduled-event adapters (keep alongside the creation log). import { rcalMarkwhenSource } from './sources/rcal'; import { rnotesMarkwhenSource } from './sources/rnotes'; export { projectSpace, listMarkwhenSources, getMarkwhenSource, registerMarkwhenSource } from './registry'; export { renderMarkwhen } from './projection'; export { enumerateCreations, registerCreationEnumerator, listCreationEnumerators, } from './creations'; export type { Creation, CreationEnumerator } from './creations'; export type { CreationSpec, CreationCollection } from './universal-enumerator'; export { createCreationEnumerator } from './universal-enumerator'; export type { MwEvent, MwSource, MwProjection, MarkwhenSourceFactory } from './types'; let initialized = false; export function initMarkwhen(loader: DocLoader): void { if (initialized) return; setDocLoader(loader); // Scheduled-event sources (rCal standalone timeline, etc.). registerMarkwhenSource(rcalMarkwhenSource); registerMarkwhenSource(rnotesMarkwhenSource); // Creation-log enumerators — the declarative universal pass. for (const spec of ALL_CREATION_SPECS) { registerCreationEnumerator(createCreationEnumerator(spec)); } initialized = true; }