import { compileVisualArtifact as compileArtifact, type CompiledVisualArtifact, type CompileVisualArtifactOptions, } from "./artifact-compiler.ts"; import { renderVisualArtifactVideo as renderArtifactVideo, type RenderVisualArtifactVideoOptions, type RenderVisualArtifactVideoResult, } from "./artifact-video-renderer.ts"; import type { ArtifactHostOptions } from "./integration-types.ts"; import { materializeProjectModule, type MaterializeProjectModuleOptions, type MaterializedProjectModule, } from "./project-materializer.ts"; import { VisualTimelineRuntime, type VisualTimelineRuntimeOptions, } from "./visual-timeline-runtime.ts"; export interface ArtifactHost { compileVisualArtifact(options: CompileVisualArtifactOptions): Promise; materializeProjectModule(options: MaterializeProjectModuleOptions): Promise; createTimelineRuntime(options?: Omit): VisualTimelineRuntime; renderVisualArtifactVideo( input: CompiledVisualArtifact | CompileVisualArtifactOptions, options: RenderVisualArtifactVideoOptions, ): Promise; } /** Creates the SDK/render integration seam without introducing a Core → SDK dependency. */ export function createArtifactHost(options: ArtifactHostOptions): ArtifactHost { const integration = Object.freeze({ resolveAuthorImport: options.resolveAuthorImport }); const host: ArtifactHost = { compileVisualArtifact: (input) => compileArtifact(input, integration), materializeProjectModule: (input) => materializeProjectModule(input, integration), createTimelineRuntime: (runtimeOptions = {}) => new VisualTimelineRuntime({ ...runtimeOptions, resolveAuthorImport: integration.resolveAuthorImport, }), renderVisualArtifactVideo: (input, renderOptions) => renderArtifactVideo(input, renderOptions, integration), }; return Object.freeze(host); }