import { type SceneDocumentData } from "@skenora/contracts"; import type { EventPublisher } from "@skenora/events"; import type { ResourceResolver } from "@skenora/resources"; import type { RuntimeEventMap } from "./runtime-events.js"; export interface LoadDocumentOptions { signal?: AbortSignal; /** Strict rolls the complete projection back; best-effort keeps valid models. */ modelLoadPolicy?: "strict" | "best-effort"; } export interface RuntimeDocumentProjectionContext { readonly generation: number; readonly signal?: AbortSignal; readonly modelLoadPolicy: NonNullable; isCurrent(): boolean; } export type RuntimeDocumentProjector = (document: Readonly, resources: ResourceResolver, context: RuntimeDocumentProjectionContext) => Promise; /** * Owns document load generations, validation, lifecycle events, and rollback. * The injected projector owns only Babylon projection details. */ export declare class RuntimeDocumentCoordinator { #private; constructor(events: EventPublisher, resetProjection: () => void, project: RuntimeDocumentProjector, preflight?: (document: Readonly) => void); /** Advances only after valid input is accepted; invalid replacement leaves it unchanged. */ get generation(): number; load(input: Readonly, resources: ResourceResolver, options?: LoadDocumentOptions): Promise; dispose(): void; } //# sourceMappingURL=runtime-document-coordinator.d.ts.map