videobook-engine 2.0.1 → 5.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/README.md +99 -68
  2. package/dist/artifacts.d.ts +4 -9
  3. package/dist/artifacts.d.ts.map +1 -1
  4. package/dist/artifacts.js +78 -138
  5. package/dist/artifacts.js.map +1 -1
  6. package/dist/books.d.ts +1 -1
  7. package/dist/books.d.ts.map +1 -1
  8. package/dist/books.js +18 -10
  9. package/dist/books.js.map +1 -1
  10. package/dist/cas.d.ts +27 -1
  11. package/dist/cas.d.ts.map +1 -1
  12. package/dist/cas.js +78 -6
  13. package/dist/cas.js.map +1 -1
  14. package/dist/catalog-metadata.d.ts +56 -0
  15. package/dist/catalog-metadata.d.ts.map +1 -0
  16. package/dist/catalog-metadata.js +42 -0
  17. package/dist/catalog-metadata.js.map +1 -0
  18. package/dist/communications.js +4 -2
  19. package/dist/communications.js.map +1 -1
  20. package/dist/context.d.ts +9 -6
  21. package/dist/context.d.ts.map +1 -1
  22. package/dist/context.js +42 -51
  23. package/dist/context.js.map +1 -1
  24. package/dist/domain.d.ts +39 -2
  25. package/dist/domain.d.ts.map +1 -1
  26. package/dist/domain.js +846 -64
  27. package/dist/domain.js.map +1 -1
  28. package/dist/edit-policy.d.ts +3 -0
  29. package/dist/edit-policy.d.ts.map +1 -0
  30. package/dist/edit-policy.js +6 -0
  31. package/dist/edit-policy.js.map +1 -0
  32. package/dist/edits.d.ts +10 -0
  33. package/dist/edits.d.ts.map +1 -0
  34. package/dist/edits.js +1392 -0
  35. package/dist/edits.js.map +1 -0
  36. package/dist/engine-types.d.ts +171 -86
  37. package/dist/engine-types.d.ts.map +1 -1
  38. package/dist/engine-types.js +32 -0
  39. package/dist/engine-types.js.map +1 -1
  40. package/dist/engine.d.ts +89 -26
  41. package/dist/engine.d.ts.map +1 -1
  42. package/dist/engine.js +27 -21
  43. package/dist/engine.js.map +1 -1
  44. package/dist/files.d.ts.map +1 -1
  45. package/dist/files.js +32 -28
  46. package/dist/files.js.map +1 -1
  47. package/dist/fork.d.ts +148 -0
  48. package/dist/fork.d.ts.map +1 -0
  49. package/dist/fork.js +602 -0
  50. package/dist/fork.js.map +1 -0
  51. package/dist/generations.d.ts +9 -0
  52. package/dist/generations.d.ts.map +1 -0
  53. package/dist/generations.js +175 -0
  54. package/dist/generations.js.map +1 -0
  55. package/dist/history.d.ts +2 -5
  56. package/dist/history.d.ts.map +1 -1
  57. package/dist/history.js +183 -640
  58. package/dist/history.js.map +1 -1
  59. package/dist/index.d.ts +21 -7
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +15 -5
  62. package/dist/index.js.map +1 -1
  63. package/dist/job-queue.d.ts +2 -0
  64. package/dist/job-queue.d.ts.map +1 -1
  65. package/dist/job-queue.js +29 -2
  66. package/dist/job-queue.js.map +1 -1
  67. package/dist/media.d.ts +3 -3
  68. package/dist/media.d.ts.map +1 -1
  69. package/dist/media.js +6 -5
  70. package/dist/media.js.map +1 -1
  71. package/dist/merge-policy.d.ts +83 -0
  72. package/dist/merge-policy.d.ts.map +1 -0
  73. package/dist/merge-policy.js +203 -0
  74. package/dist/merge-policy.js.map +1 -0
  75. package/dist/metadata.d.ts.map +1 -1
  76. package/dist/metadata.js +17 -23
  77. package/dist/metadata.js.map +1 -1
  78. package/dist/migration.d.ts +9 -0
  79. package/dist/migration.d.ts.map +1 -0
  80. package/dist/migration.js +564 -0
  81. package/dist/migration.js.map +1 -0
  82. package/dist/mvp-contract-fixtures.d.ts +244 -0
  83. package/dist/mvp-contract-fixtures.d.ts.map +1 -0
  84. package/dist/mvp-contract-fixtures.js +556 -0
  85. package/dist/mvp-contract-fixtures.js.map +1 -0
  86. package/dist/mvp-contracts.d.ts +761 -0
  87. package/dist/mvp-contracts.d.ts.map +1 -0
  88. package/dist/mvp-contracts.js +59 -0
  89. package/dist/mvp-contracts.js.map +1 -0
  90. package/dist/mvp-time.d.ts +54 -0
  91. package/dist/mvp-time.d.ts.map +1 -0
  92. package/dist/mvp-time.js +148 -0
  93. package/dist/mvp-time.js.map +1 -0
  94. package/dist/notebook/types.d.ts +85 -8
  95. package/dist/notebook/types.d.ts.map +1 -1
  96. package/dist/notebook-grid.d.ts +37 -0
  97. package/dist/notebook-grid.d.ts.map +1 -0
  98. package/dist/notebook-grid.js +160 -0
  99. package/dist/notebook-grid.js.map +1 -0
  100. package/dist/notebook-media-artifact.d.ts +23 -0
  101. package/dist/notebook-media-artifact.d.ts.map +1 -0
  102. package/dist/notebook-media-artifact.js +67 -0
  103. package/dist/notebook-media-artifact.js.map +1 -0
  104. package/dist/notebook-mentions.d.ts +20 -0
  105. package/dist/notebook-mentions.d.ts.map +1 -0
  106. package/dist/notebook-mentions.js +53 -0
  107. package/dist/notebook-mentions.js.map +1 -0
  108. package/dist/order-keys.d.ts +22 -0
  109. package/dist/order-keys.d.ts.map +1 -0
  110. package/dist/order-keys.js +262 -0
  111. package/dist/order-keys.js.map +1 -0
  112. package/dist/runtime-services.js +8 -11
  113. package/dist/runtime-services.js.map +1 -1
  114. package/dist/schema.d.ts +8 -5
  115. package/dist/schema.d.ts.map +1 -1
  116. package/dist/schema.js +624 -141
  117. package/dist/schema.js.map +1 -1
  118. package/dist/search-benchmark.d.ts +4 -0
  119. package/dist/search-benchmark.d.ts.map +1 -0
  120. package/dist/search-benchmark.js +144 -0
  121. package/dist/search-benchmark.js.map +1 -0
  122. package/dist/sequences.d.ts +20 -0
  123. package/dist/sequences.d.ts.map +1 -0
  124. package/dist/sequences.js +825 -0
  125. package/dist/sequences.js.map +1 -0
  126. package/dist/similarity.js +10 -10
  127. package/dist/similarity.js.map +1 -1
  128. package/dist/status.js +8 -10
  129. package/dist/status.js.map +1 -1
  130. package/dist/storage.d.ts +3 -1
  131. package/dist/storage.d.ts.map +1 -1
  132. package/dist/storage.js +388 -7
  133. package/dist/storage.js.map +1 -1
  134. package/dist/store.d.ts +64 -3
  135. package/dist/store.d.ts.map +1 -1
  136. package/dist/store.js +354 -68
  137. package/dist/store.js.map +1 -1
  138. package/dist/streams.d.ts +10 -0
  139. package/dist/streams.d.ts.map +1 -0
  140. package/dist/streams.js +183 -0
  141. package/dist/streams.js.map +1 -0
  142. package/dist/temporal-models.d.ts +48 -0
  143. package/dist/temporal-models.d.ts.map +1 -0
  144. package/dist/temporal-models.js +278 -0
  145. package/dist/temporal-models.js.map +1 -0
  146. package/dist/temporal-search.d.ts +29 -0
  147. package/dist/temporal-search.d.ts.map +1 -0
  148. package/dist/temporal-search.js +1551 -0
  149. package/dist/temporal-search.js.map +1 -0
  150. package/dist/transcripts.d.ts +16 -0
  151. package/dist/transcripts.d.ts.map +1 -0
  152. package/dist/transcripts.js +519 -0
  153. package/dist/transcripts.js.map +1 -0
  154. package/docs/engine-layout.md +345 -110
  155. package/docs/mvp-prd.md +918 -0
  156. package/fixtures/media/vancat.mp4 +0 -0
  157. package/fixtures/media/vancat_profile.jpg +0 -0
  158. package/fixtures/v5/contract-fixtures.json +1532 -0
  159. package/package.json +42 -5
  160. package/dist/history-types.d.ts +0 -74
  161. package/dist/history-types.d.ts.map +0 -1
  162. package/dist/history-types.js +0 -2
  163. package/dist/history-types.js.map +0 -1
  164. package/dist/resolver.d.ts +0 -15
  165. package/dist/resolver.d.ts.map +0 -1
  166. package/dist/resolver.js +0 -81
  167. package/dist/resolver.js.map +0 -1
  168. package/dist/timeline.d.ts +0 -9
  169. package/dist/timeline.d.ts.map +0 -1
  170. package/dist/timeline.js +0 -236
  171. package/dist/timeline.js.map +0 -1
package/package.json CHANGED
@@ -1,26 +1,55 @@
1
1
  {
2
2
  "name": "videobook-engine",
3
- "version": "2.0.1",
3
+ "version": "5.0.1",
4
4
  "description": "Dolt-native local-first storage engine for Videobook",
5
5
  "type": "module",
6
6
  "exports": {
7
7
  ".": {
8
8
  "import": "./dist/index.js",
9
9
  "types": "./dist/index.d.ts"
10
- }
10
+ },
11
+ "./artifact-names": {
12
+ "import": "./dist/artifact-names.js",
13
+ "types": "./dist/artifact-names.d.ts"
14
+ },
15
+ "./catalog-metadata": {
16
+ "import": "./dist/catalog-metadata.js",
17
+ "types": "./dist/catalog-metadata.d.ts"
18
+ },
19
+ "./edit-policy": {
20
+ "import": "./dist/edit-policy.js",
21
+ "types": "./dist/edit-policy.d.ts"
22
+ },
23
+ "./notebook-grid": {
24
+ "import": "./dist/notebook-grid.js",
25
+ "types": "./dist/notebook-grid.d.ts"
26
+ },
27
+ "./notebook-media-artifact": {
28
+ "import": "./dist/notebook-media-artifact.js",
29
+ "types": "./dist/notebook-media-artifact.d.ts"
30
+ },
31
+ "./notebook-mentions": {
32
+ "import": "./dist/notebook-mentions.js",
33
+ "types": "./dist/notebook-mentions.d.ts"
34
+ },
35
+ "./package.json": "./package.json",
36
+ "./fixtures/v5": "./fixtures/v5/contract-fixtures.json"
11
37
  },
12
38
  "main": "./dist/index.js",
13
39
  "types": "./dist/index.d.ts",
14
40
  "files": [
15
41
  "dist",
16
- "docs"
42
+ "docs",
43
+ "fixtures"
17
44
  ],
18
45
  "scripts": {
46
+ "benchmark:api": "tsx benchmarks/run-api-benchmark.ts",
47
+ "benchmark:api:smoke": "tsx benchmarks/run-api-benchmark.ts --quick",
19
48
  "clean": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"",
20
49
  "build": "npm run clean && tsc",
21
50
  "prepare": "npm run build",
22
51
  "prepack": "npm run build",
23
- "typecheck": "tsc --noEmit",
52
+ "typecheck": "tsc --noEmit && tsc -p tsconfig.benchmarks.json",
24
53
  "lint": "knip",
25
54
  "test": "vitest run",
26
55
  "test:watch": "vitest",
@@ -49,7 +78,15 @@
49
78
  "overrides": {
50
79
  "adm-zip": "0.6.0",
51
80
  "esbuild": "0.28.1",
52
- "postcss": "^8.5.10",
81
+ "postcss": "^8.5.23",
53
82
  "sharp": "0.35.3"
83
+ },
84
+ "allowScripts": {
85
+ "@dolthub/doltlite@0.11.37": true,
86
+ "esbuild@0.28.1": true,
87
+ "fsevents@2.3.3": true,
88
+ "onnxruntime-node@1.24.3": true,
89
+ "protobufjs@7.6.5": true,
90
+ "usearch@2.26.0": true
54
91
  }
55
92
  }
@@ -1,74 +0,0 @@
1
- import type { Revision, RevisionFileChange } from "./engine-types.js";
2
- import type { ArtifactKind } from "./engine-types.js";
3
- export type HistoryActionPhase = "requested" | "started" | "completed" | "failed" | "cancelled" | "conflicted";
4
- export type HistoryActionScope = "book" | "artifact" | "layout" | "external" | "system";
5
- export type HistoryArtifactKind = ArtifactKind | "unknown";
6
- export interface HistoryLayout {
7
- stage: number;
8
- column: number;
9
- }
10
- export interface HistoryActionEvent {
11
- id: string;
12
- revision: string;
13
- phase: HistoryActionPhase;
14
- date: string;
15
- details: Record<string, unknown>;
16
- files: string[];
17
- fileChanges: RevisionFileChange[];
18
- }
19
- export interface HistoryArtifactRef {
20
- id: string;
21
- slug: string;
22
- kind: HistoryArtifactKind;
23
- }
24
- export interface HistoryAction {
25
- id: string;
26
- operation: string;
27
- title: string;
28
- scope: HistoryActionScope;
29
- actor: string;
30
- lane: string;
31
- date: string;
32
- phase: HistoryActionPhase;
33
- baseRevision?: string;
34
- rebasedOver?: string;
35
- parentActionIds: string[];
36
- inputArtifacts: HistoryArtifactRef[];
37
- outputArtifacts: HistoryArtifactRef[];
38
- targetArtifactId?: string;
39
- targetActionId?: string;
40
- layout?: HistoryLayout;
41
- details: Record<string, unknown>;
42
- events: HistoryActionEvent[];
43
- }
44
- export interface HistoryActionPage {
45
- headRevision: string;
46
- actions: HistoryAction[];
47
- nextCursor?: string;
48
- }
49
- export interface GetHistoryActionsOptions {
50
- limit?: number;
51
- cursor?: string;
52
- }
53
- export interface RecordActionInput {
54
- actionId?: string;
55
- operation: string;
56
- phase?: HistoryActionPhase;
57
- scope?: HistoryActionScope;
58
- actor?: string;
59
- lane?: string;
60
- baseRevision?: string;
61
- parentActionIds?: string[];
62
- inputArtifactIds?: string[];
63
- outputArtifactIds?: string[];
64
- targetArtifactId?: string;
65
- targetActionId?: string;
66
- layout?: HistoryLayout;
67
- writeSet?: string[];
68
- details?: Record<string, unknown>;
69
- }
70
- export interface HistoryActionRevision {
71
- action: HistoryAction;
72
- revision: Revision;
73
- }
74
- //# sourceMappingURL=history-types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"history-types.d.ts","sourceRoot":"","sources":["../src/history-types.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=history-types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"history-types.js","sourceRoot":"","sources":["../src/history-types.ts"],"names":[],"mappings":""}
@@ -1,15 +0,0 @@
1
- import type { EngineError, ResolvedArtifact, Result } from "./engine-types.js";
2
- import { EngineContext } from "./context.js";
3
- export declare function createResolverApi(context: EngineContext): {
4
- parseTags: typeof parseArtifactTags;
5
- resolveAll: (text: string) => Promise<Result<{
6
- resolved: ResolvedArtifact[];
7
- unresolved: string[];
8
- }, EngineError>>;
9
- expandSlotRefs: typeof expandSlotRefs;
10
- };
11
- export declare function parseArtifactTags(text: string): string[];
12
- export declare function expandSlotRefs(text: string, slots: Array<{
13
- slug: string;
14
- }>): string;
15
- //# sourceMappingURL=resolver.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,WAAW,EACX,gBAAgB,EAChB,MAAM,EACP,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,aAAa,EAAY,MAAM,cAAc,CAAC;AAOvD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,aAAa;;uBAI5C,MAAM,KACX,OAAO,CACR,MAAM,CACJ;QAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,EACtD,WAAW,CACZ,CACF;;EAGJ;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAMxD;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAC7B,MAAM,CAKR"}
package/dist/resolver.js DELETED
@@ -1,81 +0,0 @@
1
- import * as path from "node:path";
2
- import { ok } from "./engine-types.js";
3
- import { resultOf } from "./context.js";
4
- import { createFilesApi } from "./files.js";
5
- import { findPrimaryMediaFile } from "./media.js";
6
- const TAG_PATTERN = /@([a-zA-Z0-9]+-[a-zA-Z0-9_-]+)/g;
7
- const SLOT_PATTERN = /@s(\d{2})/g;
8
- export function createResolverApi(context) {
9
- return {
10
- parseTags: parseArtifactTags,
11
- resolveAll: (text) => resolveAllArtifacts(context, text),
12
- expandSlotRefs,
13
- };
14
- }
15
- export function parseArtifactTags(text) {
16
- const tags = [];
17
- for (const match of text.matchAll(TAG_PATTERN)) {
18
- if (match[1])
19
- tags.push(match[1]);
20
- }
21
- return [...new Set(tags)];
22
- }
23
- export function expandSlotRefs(text, slots) {
24
- return text.replace(SLOT_PATTERN, (match, digits) => {
25
- const slot = slots[Number.parseInt(digits, 10) - 1];
26
- return slot?.slug ? `@${slot.slug}` : match;
27
- });
28
- }
29
- async function resolveAllArtifacts(context, text) {
30
- return resultOf(async () => {
31
- const tags = parseArtifactTags(text);
32
- if (tags.length === 0) {
33
- return ok({ resolved: [], unresolved: [] });
34
- }
35
- const rows = context.store.db
36
- .prepare(`SELECT artifact_id, slug, kind, created_at
37
- FROM artifacts`)
38
- .all();
39
- const bySlug = new Map(rows.map((row) => [row.slug, row]));
40
- const files = createFilesApi(context);
41
- const resolved = [];
42
- const unresolved = [];
43
- for (const tag of tags) {
44
- const candidates = [
45
- tag,
46
- `img-${tag}`,
47
- `vid-${tag}`,
48
- `aud-${tag}`,
49
- `script-${tag}`,
50
- `char-${tag}`,
51
- `prompt-${tag}`,
52
- `scene-${tag}`,
53
- ];
54
- const row = candidates
55
- .map((candidate) => bySlug.get(candidate))
56
- .find((candidate) => candidate !== undefined);
57
- if (!row) {
58
- unresolved.push(tag);
59
- continue;
60
- }
61
- const manifest = await files.manifest(row.artifact_id);
62
- if (!manifest.ok)
63
- return manifest;
64
- const primary = findPrimaryMediaFile(manifest.value.files, row.slug) ??
65
- manifest.value.files[0] ??
66
- null;
67
- resolved.push({
68
- tag: `@${tag}`,
69
- artifactId: row.artifact_id,
70
- artifactSlug: row.slug,
71
- artifactType: row.kind,
72
- filePath: primary
73
- ? path.join(manifest.value.path, primary.name)
74
- : null,
75
- workspacePath: manifest.value.path,
76
- });
77
- }
78
- return ok({ resolved, unresolved });
79
- });
80
- }
81
- //# sourceMappingURL=resolver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- import type { EngineError, Result, Timeline, TimelineInput } from "./engine-types.js";
2
- import { EngineContext } from "./context.js";
3
- export declare function createTimelineApi(context: EngineContext): {
4
- get: () => Timeline;
5
- getAtRevision: (revision: string) => Result<Timeline, EngineError>;
6
- set: (input: TimelineInput) => Promise<Result<Timeline, EngineError>>;
7
- reset: () => Promise<Result<Timeline, EngineError>>;
8
- };
9
- //# sourceMappingURL=timeline.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../src/timeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,MAAM,EACN,QAAQ,EAGR,aAAa,EAId,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,aAAa,EAGd,MAAM,cAAc,CAAC;AA6BtB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,aAAa;eAE3C,QAAQ;8BAEL,MAAM,KACf,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC;iBAGvB,aAAa,KACnB,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;iBAE9B,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;EAGpD"}
package/dist/timeline.js DELETED
@@ -1,236 +0,0 @@
1
- import { ok } from "./engine-types.js";
2
- import { resultOf, syncResultOf, } from "./context.js";
3
- import { assertUuidV7, newUuidV7 } from "./ids.js";
4
- import { EngineFault } from "./store.js";
5
- export function createTimelineApi(context) {
6
- return {
7
- get: () => readTimeline(context),
8
- getAtRevision: (revision) => syncResultOf(() => readTimeline(context, revision)),
9
- set: (input) => setTimeline(context, input),
10
- reset: () => resetTimeline(context),
11
- };
12
- }
13
- async function setTimeline(context, input) {
14
- return resultOf(async () => {
15
- validateRender(input.render);
16
- const slots = (input.slots ?? []).map((slot) => resolveSlot(context, slot));
17
- const audio = (input.audio ?? []).map((item) => resolveAudio(context, item));
18
- ensureUniqueIds(slots, "timeline slot");
19
- ensureUniqueIds(audio, "timeline audio");
20
- const bookId = context.bookRow().book_id;
21
- const mutation = await context.store.semantic({
22
- operation: "set_timeline",
23
- details: {
24
- render: input.render,
25
- slots: slots.length,
26
- audio: audio.length,
27
- },
28
- writeSet: [
29
- "timeline",
30
- ...slots.map((slot) => `timeline-slot:${slot.id}`),
31
- ...audio.map((item) => `timeline-audio:${item.id}`),
32
- ],
33
- }, ["timeline", "timeline_slots", "timeline_audio"], () => {
34
- context.store.db
35
- .prepare("UPDATE timeline SET render=? WHERE book_id=?")
36
- .run(input.render, bookId);
37
- synchronizeSlots(context, slots);
38
- synchronizeAudio(context, audio);
39
- });
40
- return ok(readTimeline(context), mutation.revision);
41
- });
42
- }
43
- async function resetTimeline(context) {
44
- return resultOf(async () => {
45
- const bookId = context.bookRow().book_id;
46
- const mutation = await context.store.semantic({
47
- operation: "reset_timeline",
48
- writeSet: ["timeline"],
49
- }, ["timeline", "timeline_slots", "timeline_audio"], () => {
50
- context.store.db.prepare("DELETE FROM timeline_slots").run();
51
- context.store.db.prepare("DELETE FROM timeline_audio").run();
52
- context.store.db
53
- .prepare("UPDATE timeline SET render='landscape' WHERE book_id=?")
54
- .run(bookId);
55
- });
56
- return ok(readTimeline(context), mutation.revision);
57
- });
58
- }
59
- function readTimeline(context, revision) {
60
- const source = revision ? "dolt_at_timeline(?)" : "timeline";
61
- const params = revision ? [revision] : [];
62
- const row = context.store.db
63
- .prepare(`SELECT book_id, render FROM ${source}`)
64
- .get(...params);
65
- if (!row) {
66
- throw new EngineFault({
67
- code: "NOT_FOUND",
68
- message: revision
69
- ? `Timeline not found at revision: ${revision}`
70
- : "Timeline not found",
71
- });
72
- }
73
- const slotSource = revision
74
- ? "dolt_at_timeline_slots(?)"
75
- : "timeline_slots";
76
- const audioSource = revision
77
- ? "dolt_at_timeline_audio(?)"
78
- : "timeline_audio";
79
- const slots = context.store.db
80
- .prepare(`SELECT slot_id, artifact_id, ordinal, volume,
81
- audio_fade_in, audio_fade_out
82
- FROM ${slotSource} ORDER BY ordinal, slot_id`)
83
- .all(...params);
84
- const audio = context.store.db
85
- .prepare(`SELECT audio_id, artifact_id, ordinal, start_frame,
86
- duration_frames, volume, fade_in, fade_out
87
- FROM ${audioSource} ORDER BY ordinal, audio_id`)
88
- .all(...params);
89
- return {
90
- bookId: row.book_id,
91
- render: row.render,
92
- slots: slots.map(slotFromRow),
93
- audio: audio.map(audioFromRow),
94
- };
95
- }
96
- function resolveSlot(context, input) {
97
- const id = input.id ?? newUuidV7();
98
- assertUuidV7(id, "Timeline slot ID");
99
- const artifactId = resolveArtifact(context, input.artifact, input.artifactId);
100
- optionalNonNegative(input.volume, "Timeline slot volume");
101
- optionalNonNegative(input.audioFadeIn, "Timeline slot audioFadeIn");
102
- optionalNonNegative(input.audioFadeOut, "Timeline slot audioFadeOut");
103
- return {
104
- id,
105
- artifactId,
106
- ...(input.volume === undefined ? {} : { volume: input.volume }),
107
- ...(input.audioFadeIn === undefined
108
- ? {}
109
- : { audioFadeIn: input.audioFadeIn }),
110
- ...(input.audioFadeOut === undefined
111
- ? {}
112
- : { audioFadeOut: input.audioFadeOut }),
113
- };
114
- }
115
- function resolveAudio(context, input) {
116
- const id = input.id ?? newUuidV7();
117
- assertUuidV7(id, "Timeline audio ID");
118
- const artifactId = resolveArtifact(context, input.artifact, input.artifactId);
119
- integerAtLeast(input.startFrame, 0, "Timeline audio startFrame");
120
- integerAtLeast(input.durationFrames, 1, "Timeline audio durationFrames");
121
- optionalNonNegative(input.volume, "Timeline audio volume");
122
- optionalNonNegative(input.fadeIn, "Timeline audio fadeIn");
123
- optionalNonNegative(input.fadeOut, "Timeline audio fadeOut");
124
- return {
125
- id,
126
- artifactId,
127
- startFrame: input.startFrame,
128
- durationFrames: input.durationFrames,
129
- ...(input.volume === undefined ? {} : { volume: input.volume }),
130
- ...(input.fadeIn === undefined ? {} : { fadeIn: input.fadeIn }),
131
- ...(input.fadeOut === undefined ? {} : { fadeOut: input.fadeOut }),
132
- };
133
- }
134
- function resolveArtifact(context, artifact, artifactId) {
135
- if (!artifact && !artifactId) {
136
- throw new Error("Timeline artifact reference is required");
137
- }
138
- const resolved = context.artifactRow(artifact ?? artifactId).artifact_id;
139
- if (artifact &&
140
- artifactId &&
141
- context.artifactRow(artifactId).artifact_id !== resolved) {
142
- throw new Error("Timeline artifact and artifactId must identify the same artifact");
143
- }
144
- return resolved;
145
- }
146
- function synchronizeSlots(context, slots) {
147
- deleteMissing(context, "timeline_slots", "slot_id", slots.map((slot) => slot.id));
148
- const upsert = context.store.db.prepare(`INSERT INTO timeline_slots(
149
- slot_id, artifact_id, ordinal, volume, audio_fade_in, audio_fade_out
150
- ) VALUES (?, ?, ?, ?, ?, ?)
151
- ON CONFLICT(slot_id) DO UPDATE SET
152
- artifact_id=excluded.artifact_id,
153
- ordinal=excluded.ordinal,
154
- volume=excluded.volume,
155
- audio_fade_in=excluded.audio_fade_in,
156
- audio_fade_out=excluded.audio_fade_out`);
157
- slots.forEach((slot, ordinal) => {
158
- upsert.run(slot.id, slot.artifactId, ordinal, slot.volume ?? null, slot.audioFadeIn ?? null, slot.audioFadeOut ?? null);
159
- });
160
- }
161
- function synchronizeAudio(context, audio) {
162
- deleteMissing(context, "timeline_audio", "audio_id", audio.map((item) => item.id));
163
- const upsert = context.store.db.prepare(`INSERT INTO timeline_audio(
164
- audio_id, artifact_id, ordinal, start_frame, duration_frames,
165
- volume, fade_in, fade_out
166
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
167
- ON CONFLICT(audio_id) DO UPDATE SET
168
- artifact_id=excluded.artifact_id,
169
- ordinal=excluded.ordinal,
170
- start_frame=excluded.start_frame,
171
- duration_frames=excluded.duration_frames,
172
- volume=excluded.volume,
173
- fade_in=excluded.fade_in,
174
- fade_out=excluded.fade_out`);
175
- audio.forEach((item, ordinal) => {
176
- upsert.run(item.id, item.artifactId, ordinal, item.startFrame, item.durationFrames, item.volume ?? null, item.fadeIn ?? null, item.fadeOut ?? null);
177
- });
178
- }
179
- function deleteMissing(context, table, idColumn, ids) {
180
- if (ids.length === 0) {
181
- context.store.db.prepare(`DELETE FROM ${table}`).run();
182
- return;
183
- }
184
- const placeholders = ids.map(() => "?").join(", ");
185
- context.store.db
186
- .prepare(`DELETE FROM ${table} WHERE ${idColumn} NOT IN (${placeholders})`)
187
- .run(...ids);
188
- }
189
- function slotFromRow(row) {
190
- return {
191
- id: row.slot_id,
192
- artifactId: row.artifact_id,
193
- ...(row.volume === null ? {} : { volume: row.volume }),
194
- ...(row.audio_fade_in === null
195
- ? {}
196
- : { audioFadeIn: row.audio_fade_in }),
197
- ...(row.audio_fade_out === null
198
- ? {}
199
- : { audioFadeOut: row.audio_fade_out }),
200
- };
201
- }
202
- function audioFromRow(row) {
203
- return {
204
- id: row.audio_id,
205
- artifactId: row.artifact_id,
206
- startFrame: row.start_frame,
207
- durationFrames: row.duration_frames,
208
- ...(row.volume === null ? {} : { volume: row.volume }),
209
- ...(row.fade_in === null ? {} : { fadeIn: row.fade_in }),
210
- ...(row.fade_out === null ? {} : { fadeOut: row.fade_out }),
211
- };
212
- }
213
- function ensureUniqueIds(items, label) {
214
- const seen = new Set();
215
- for (const item of items) {
216
- if (seen.has(item.id))
217
- throw new Error(`Duplicate ${label} ID: ${item.id}`);
218
- seen.add(item.id);
219
- }
220
- }
221
- function validateRender(value) {
222
- if (!["landscape", "portrait", "square"].includes(value)) {
223
- throw new Error(`Invalid timeline render: ${value}`);
224
- }
225
- }
226
- function optionalNonNegative(value, label) {
227
- if (value !== undefined && (!Number.isFinite(value) || value < 0)) {
228
- throw new Error(`${label} must be a non-negative finite number`);
229
- }
230
- }
231
- function integerAtLeast(value, minimum, label) {
232
- if (!Number.isInteger(value) || value < minimum) {
233
- throw new Error(`${label} must be an integer >= ${minimum}`);
234
- }
235
- }
236
- //# sourceMappingURL=timeline.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"timeline.js","sourceRoot":"","sources":["../src/timeline.ts"],"names":[],"mappings":"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"}