frameyard 0.4.0 → 0.6.0

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 (175) hide show
  1. package/CHANGELOG.md +101 -0
  2. package/GLOSSARY.md +156 -24
  3. package/README.md +103 -31
  4. package/dist/cli.js +112 -19
  5. package/dist/cli.js.map +1 -1
  6. package/dist/composition/adapter.d.ts +30 -0
  7. package/dist/composition/adapter.d.ts.map +1 -0
  8. package/dist/composition/adapter.js +2 -0
  9. package/dist/composition/adapter.js.map +1 -0
  10. package/dist/composition/animation.d.ts +19 -0
  11. package/dist/composition/animation.d.ts.map +1 -0
  12. package/dist/composition/animation.js +55 -0
  13. package/dist/composition/animation.js.map +1 -0
  14. package/dist/composition/attributes.d.ts +7 -0
  15. package/dist/composition/attributes.d.ts.map +1 -0
  16. package/dist/composition/attributes.js +24 -0
  17. package/dist/composition/attributes.js.map +1 -0
  18. package/dist/composition/descriptor.d.ts +30 -0
  19. package/dist/composition/descriptor.d.ts.map +1 -0
  20. package/dist/composition/descriptor.js +188 -0
  21. package/dist/composition/descriptor.js.map +1 -0
  22. package/dist/composition/diagnostics.d.ts +12 -0
  23. package/dist/composition/diagnostics.d.ts.map +1 -0
  24. package/dist/composition/diagnostics.js +38 -0
  25. package/dist/composition/diagnostics.js.map +1 -0
  26. package/dist/composition/index.d.ts +12 -0
  27. package/dist/composition/index.d.ts.map +1 -0
  28. package/dist/composition/index.js +7 -0
  29. package/dist/composition/index.js.map +1 -0
  30. package/dist/composition/media.d.ts +27 -0
  31. package/dist/composition/media.d.ts.map +1 -0
  32. package/dist/composition/media.js +162 -0
  33. package/dist/composition/media.js.map +1 -0
  34. package/dist/composition/paths.d.ts +5 -0
  35. package/dist/composition/paths.d.ts.map +1 -0
  36. package/dist/composition/paths.js +16 -0
  37. package/dist/composition/paths.js.map +1 -0
  38. package/dist/composition/transcripts.d.ts +19 -0
  39. package/dist/composition/transcripts.d.ts.map +1 -0
  40. package/dist/composition/transcripts.js +57 -0
  41. package/dist/composition/transcripts.js.map +1 -0
  42. package/dist/composition/walk.d.ts +10 -0
  43. package/dist/composition/walk.d.ts.map +1 -0
  44. package/dist/composition/walk.js +32 -0
  45. package/dist/composition/walk.js.map +1 -0
  46. package/dist/contracts.d.ts +14 -0
  47. package/dist/contracts.d.ts.map +1 -1
  48. package/dist/contracts.js.map +1 -1
  49. package/dist/errors.d.ts +1 -1
  50. package/dist/errors.d.ts.map +1 -1
  51. package/dist/errors.js.map +1 -1
  52. package/dist/html/document-adapter.d.ts +5 -0
  53. package/dist/html/document-adapter.d.ts.map +1 -0
  54. package/dist/html/document-adapter.js +17 -0
  55. package/dist/html/document-adapter.js.map +1 -0
  56. package/dist/html/parse.d.ts +2 -6
  57. package/dist/html/parse.d.ts.map +1 -1
  58. package/dist/html/parse.js.map +1 -1
  59. package/dist/html/validate.d.ts.map +1 -1
  60. package/dist/html/validate.js +92 -375
  61. package/dist/html/validate.js.map +1 -1
  62. package/dist/index.d.ts +2 -0
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +1 -0
  65. package/dist/index.js.map +1 -1
  66. package/dist/preview/main.d.ts.map +1 -1
  67. package/dist/preview/main.js +93 -13
  68. package/dist/preview/main.js.map +1 -1
  69. package/dist/preview/timeline-data.d.ts +85 -0
  70. package/dist/preview/timeline-data.d.ts.map +1 -0
  71. package/dist/preview/timeline-data.js +2 -0
  72. package/dist/preview/timeline-data.js.map +1 -0
  73. package/dist/preview/timeline-host.d.ts +19 -0
  74. package/dist/preview/timeline-host.d.ts.map +1 -0
  75. package/dist/preview/timeline-host.js +297 -0
  76. package/dist/preview/timeline-host.js.map +1 -0
  77. package/dist/preview/timeline-main.d.ts +17 -0
  78. package/dist/preview/timeline-main.d.ts.map +1 -0
  79. package/dist/preview/timeline-main.js +364 -0
  80. package/dist/preview/timeline-main.js.map +1 -0
  81. package/dist/project.d.ts +16 -1
  82. package/dist/project.d.ts.map +1 -1
  83. package/dist/project.js +81 -26
  84. package/dist/project.js.map +1 -1
  85. package/dist/renderer/browser.d.ts +2 -0
  86. package/dist/renderer/browser.d.ts.map +1 -1
  87. package/dist/renderer/browser.js +38 -6
  88. package/dist/renderer/browser.js.map +1 -1
  89. package/dist/renderer/ffmpeg.d.ts +61 -0
  90. package/dist/renderer/ffmpeg.d.ts.map +1 -1
  91. package/dist/renderer/ffmpeg.js +198 -0
  92. package/dist/renderer/ffmpeg.js.map +1 -1
  93. package/dist/renderer/index.d.ts.map +1 -1
  94. package/dist/renderer/index.js +18 -7
  95. package/dist/renderer/index.js.map +1 -1
  96. package/dist/renderer/timeline.d.ts +109 -0
  97. package/dist/renderer/timeline.d.ts.map +1 -0
  98. package/dist/renderer/timeline.js +984 -0
  99. package/dist/renderer/timeline.js.map +1 -0
  100. package/dist/runtime/document-adapter.d.ts +4 -0
  101. package/dist/runtime/document-adapter.d.ts.map +1 -0
  102. package/dist/runtime/document-adapter.js +19 -0
  103. package/dist/runtime/document-adapter.js.map +1 -0
  104. package/dist/runtime/host.d.ts +2 -0
  105. package/dist/runtime/host.d.ts.map +1 -1
  106. package/dist/runtime/host.js +78 -183
  107. package/dist/runtime/host.js.map +1 -1
  108. package/dist/runtime/media.d.ts.map +1 -1
  109. package/dist/runtime/media.js +19 -50
  110. package/dist/runtime/media.js.map +1 -1
  111. package/dist/scaffold.d.ts.map +1 -1
  112. package/dist/scaffold.js +93 -23
  113. package/dist/scaffold.js.map +1 -1
  114. package/dist/server/preview-html.d.ts.map +1 -1
  115. package/dist/server/preview-html.js +15 -1
  116. package/dist/server/preview-html.js.map +1 -1
  117. package/dist/server/server.d.ts.map +1 -1
  118. package/dist/server/server.js +39 -1
  119. package/dist/server/server.js.map +1 -1
  120. package/dist/server/timeline-preview-data.d.ts +4 -0
  121. package/dist/server/timeline-preview-data.d.ts.map +1 -0
  122. package/dist/server/timeline-preview-data.js +97 -0
  123. package/dist/server/timeline-preview-data.js.map +1 -0
  124. package/dist/server/timeline-preview-html.d.ts +4 -0
  125. package/dist/server/timeline-preview-html.d.ts.map +1 -0
  126. package/dist/server/timeline-preview-html.js +227 -0
  127. package/dist/server/timeline-preview-html.js.map +1 -0
  128. package/dist/timeline/plan.d.ts +32 -0
  129. package/dist/timeline/plan.d.ts.map +1 -0
  130. package/dist/timeline/plan.js +68 -0
  131. package/dist/timeline/plan.js.map +1 -0
  132. package/dist/timeline/resolve.d.ts +60 -0
  133. package/dist/timeline/resolve.d.ts.map +1 -0
  134. package/dist/timeline/resolve.js +523 -0
  135. package/dist/timeline/resolve.js.map +1 -0
  136. package/dist/timeline/schema.d.ts +71 -0
  137. package/dist/timeline/schema.d.ts.map +1 -0
  138. package/dist/timeline/schema.js +425 -0
  139. package/dist/timeline/schema.js.map +1 -0
  140. package/dist/version.d.ts +1 -1
  141. package/dist/version.js +1 -1
  142. package/docs/adr/0002-make-frame-and-props-the-only-animation-state.md +2 -0
  143. package/docs/adr/0005-keep-parallel-rendering-opt-in-and-frame-ordered.md +2 -0
  144. package/docs/adr/0006-seek-embedded-media-from-the-frame-clock.md +4 -0
  145. package/docs/adr/0007-make-html-documents-the-composition-unit.md +1 -1
  146. package/docs/adr/0008-share-the-composition-document-grammar.md +18 -0
  147. package/docs/adr/0009-composite-production-frames-in-software.md +37 -0
  148. package/docs/adr/0010-make-timelines-the-render-unit.md +24 -0
  149. package/docs/adr/0011-compose-timeline-frames-in-a-live-browser-host.md +22 -0
  150. package/docs/adr/0012-render-timelines-with-segmented-lossless-clip-intermediates.md +31 -0
  151. package/docs/v0.1-design.md +135 -85
  152. package/examples/demo/README.md +11 -4
  153. package/examples/demo/timelines/demo.timeline.json +12 -0
  154. package/examples/demo/video.config.js +4 -0
  155. package/examples/video/README.md +105 -0
  156. package/examples/video/assets/clip.mp4 +0 -0
  157. package/examples/video/assets/clip.webm +0 -0
  158. package/examples/video/compositions/video-mp4.html +362 -0
  159. package/examples/video/compositions/video-overlay.html +350 -0
  160. package/examples/video/compositions/video.html +362 -0
  161. package/examples/video/props/video-timeline.json +10 -0
  162. package/examples/video/props/video.json +8 -0
  163. package/examples/video/scripts/make-clip.sh +109 -0
  164. package/examples/video/timelines/video-timeline-mp4.timeline.json +44 -0
  165. package/examples/video/timelines/video-timeline.timeline.json +44 -0
  166. package/examples/video/video.config.js +12 -0
  167. package/examples/webgl/README.md +30 -0
  168. package/examples/webgl/compositions/webgl.controller.js +200 -0
  169. package/examples/webgl/compositions/webgl.html +215 -0
  170. package/examples/webgl/props/webgl.json +6 -0
  171. package/examples/webgl/video.config.js +5 -0
  172. package/package.json +4 -2
  173. package/skills/frameyard/SKILL.md +18 -13
  174. package/skills/frameyard/references/json-results.md +2 -2
  175. package/skills/frameyard/references/timelines.md +141 -0
@@ -0,0 +1,30 @@
1
+ export interface SourceLocation {
2
+ startLine: number;
3
+ startCol: number;
4
+ endLine: number;
5
+ endCol: number;
6
+ }
7
+ export interface DocumentAttribute {
8
+ name: string;
9
+ value: string;
10
+ }
11
+ /**
12
+ * A lazy view over an HTML document tree. The composition reader owns the
13
+ * traversal and rules; an adapter supplies the tree primitives for parse5 or
14
+ * the browser DOM.
15
+ */
16
+ export interface DocumentAdapter<Node> {
17
+ readonly root: Node;
18
+ isElement(node: Node): boolean;
19
+ /** Lowercase tag name for elements; empty for non-elements. */
20
+ tagName(node: Node): string;
21
+ attributes(node: Node): readonly DocumentAttribute[];
22
+ children(node: Node): readonly Node[];
23
+ /** Template content, or undefined when the node is not a template. */
24
+ templateContent(node: Node): readonly Node[] | undefined;
25
+ /** Text content, including descendants for elements. */
26
+ text(node: Node): string;
27
+ /** Source location when the adapter can supply one. */
28
+ location(node: Node, attribute?: string): SourceLocation | undefined;
29
+ }
30
+ //# sourceMappingURL=adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/composition/adapter.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe,CAAC,IAAI;IACnC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC;IAC/B,+DAA+D;IAC/D,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC;IAC5B,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,iBAAiB,EAAE,CAAC;IACrD,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,IAAI,EAAE,CAAC;IACtC,sEAAsE;IACtE,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,IAAI,EAAE,GAAG,SAAS,CAAC;IACzD,wDAAwD;IACxD,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC;IACzB,uDAAuD;IACvD,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAAC;CACtE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/composition/adapter.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ import type { CompositionDiagnostic } from "../contracts.js";
2
+ import type { DocumentAdapter } from "./adapter.js";
3
+ export interface AnimationDeclaration<Node> {
4
+ element: Node;
5
+ startFrame?: number;
6
+ durationInFrames?: number;
7
+ easing?: string;
8
+ attributes: readonly string[];
9
+ }
10
+ export interface ReadAnimationDeclarationsOptions {
11
+ path: string;
12
+ includeTemplateContent: boolean;
13
+ }
14
+ export interface AnimationDeclarations<Node> {
15
+ entries: AnimationDeclaration<Node>[];
16
+ diagnostics: CompositionDiagnostic[];
17
+ }
18
+ export declare function readAnimationDeclarations<Node>(adapter: DocumentAdapter<Node>, options: ReadAnimationDeclarationsOptions): AnimationDeclarations<Node>;
19
+ //# sourceMappingURL=animation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animation.d.ts","sourceRoot":"","sources":["../../src/composition/animation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAKpD,MAAM,WAAW,oBAAoB,CAAC,IAAI;IACxC,OAAO,EAAE,IAAI,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,gCAAgC;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,sBAAsB,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,qBAAqB,CAAC,IAAI;IACzC,OAAO,EAAE,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;IACtC,WAAW,EAAE,qBAAqB,EAAE,CAAC;CACtC;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAC5C,OAAO,EAAE,eAAe,CAAC,IAAI,CAAC,EAC9B,OAAO,EAAE,gCAAgC,GACxC,qBAAqB,CAAC,IAAI,CAAC,CA8E7B"}
@@ -0,0 +1,55 @@
1
+ import { isAnimationAttribute } from "./attributes.js";
2
+ import { attributeDetails, createDiagnostic } from "./diagnostics.js";
3
+ import { findElements, getAttribute } from "./walk.js";
4
+ export function readAnimationDeclarations(adapter, options) {
5
+ const diagnostics = [];
6
+ const entries = [];
7
+ const targets = findElements(adapter, (node) => adapter.attributes(node).some((attribute) => isAnimationAttribute(attribute.name)), options.includeTemplateContent);
8
+ for (const target of targets) {
9
+ const attributes = adapter
10
+ .attributes(target.node)
11
+ .filter((attribute) => isAnimationAttribute(attribute.name))
12
+ .map((attribute) => attribute.name);
13
+ let startFrame;
14
+ let durationInFrames;
15
+ let easing;
16
+ const start = getAttribute(adapter, target.node, "data-fy-anim-start");
17
+ if (start !== undefined) {
18
+ const value = Number(start);
19
+ if (!/^\d+$/.test(start.trim()) || !Number.isInteger(value) || value < 0) {
20
+ diagnostics.push(createDiagnostic("error", "ANIMATION_INVALID", "data-fy-anim-start must be a non-negative integer frame count.", attributeDetails(adapter, options.path, target.node, "data-fy-anim-start", { value: start })));
21
+ }
22
+ else {
23
+ startFrame = value;
24
+ }
25
+ }
26
+ const duration = getAttribute(adapter, target.node, "data-fy-anim-duration");
27
+ if (duration !== undefined) {
28
+ const value = Number(duration);
29
+ if (!/^\d+$/.test(duration.trim()) || !Number.isInteger(value) || value <= 0) {
30
+ diagnostics.push(createDiagnostic("error", "ANIMATION_INVALID", "data-fy-anim-duration must be a positive integer frame count.", attributeDetails(adapter, options.path, target.node, "data-fy-anim-duration", { value: duration })));
31
+ }
32
+ else {
33
+ durationInFrames = value;
34
+ }
35
+ }
36
+ const easingValue = getAttribute(adapter, target.node, "data-fy-anim-easing");
37
+ if (easingValue !== undefined) {
38
+ if (easingValue.trim().length === 0) {
39
+ diagnostics.push(createDiagnostic("error", "ANIMATION_INVALID", "data-fy-anim-easing must not be empty.", attributeDetails(adapter, options.path, target.node, "data-fy-anim-easing")));
40
+ }
41
+ else {
42
+ easing = easingValue;
43
+ }
44
+ }
45
+ entries.push({
46
+ element: target.node,
47
+ ...(startFrame !== undefined ? { startFrame } : {}),
48
+ ...(durationInFrames !== undefined ? { durationInFrames } : {}),
49
+ ...(easing !== undefined ? { easing } : {}),
50
+ attributes,
51
+ });
52
+ }
53
+ return { entries, diagnostics };
54
+ }
55
+ //# sourceMappingURL=animation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animation.js","sourceRoot":"","sources":["../../src/composition/animation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAoBvD,MAAM,UAAU,yBAAyB,CACvC,OAA8B,EAC9B,OAAyC;IAEzC,MAAM,WAAW,GAA4B,EAAE,CAAC;IAChD,MAAM,OAAO,GAAiC,EAAE,CAAC;IACjD,MAAM,OAAO,GAAG,YAAY,CAC1B,OAAO,EACP,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAC5F,OAAO,CAAC,sBAAsB,CAC/B,CAAC;IAEF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,OAAO;aACvB,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC;aACvB,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;aAC3D,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,UAA8B,CAAC;QACnC,IAAI,gBAAoC,CAAC;QACzC,IAAI,MAA0B,CAAC;QAE/B,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;QACvE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACzE,WAAW,CAAC,IAAI,CACd,gBAAgB,CACd,OAAO,EACP,mBAAmB,EACnB,gEAAgE,EAChE,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,oBAAoB,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAC7F,CACF,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,UAAU,GAAG,KAAK,CAAC;YACrB,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;QAC7E,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC/B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;gBAC7E,WAAW,CAAC,IAAI,CACd,gBAAgB,CACd,OAAO,EACP,mBAAmB,EACnB,+DAA+D,EAC/D,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,uBAAuB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CACnG,CACF,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,gBAAgB,GAAG,KAAK,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC;QAC9E,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACpC,WAAW,CAAC,IAAI,CACd,gBAAgB,CACd,OAAO,EACP,mBAAmB,EACnB,wCAAwC,EACxC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAC5E,CACF,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,WAAW,CAAC;YACvB,CAAC;QACH,CAAC;QAED,OAAO,CAAC,IAAI,CAAC;YACX,OAAO,EAAE,MAAM,CAAC,IAAI;YACpB,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnD,GAAG,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AAClC,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare const BINDING_ATTRIBUTES: readonly ["data-fy-text", "data-fy-if", "data-fy-repeat"];
2
+ export declare const ANIMATION_ATTRIBUTES: readonly ["data-fy-anim-start", "data-fy-anim-duration", "data-fy-anim-easing"];
3
+ export declare const MEDIA_ATTRIBUTES: readonly ["data-fy-start", "data-fy-trim", "data-fy-duration", "data-fy-volume", "data-fy-audio"];
4
+ export declare const KNOWN_DATA_FY_ATTRIBUTES: readonly ["data-fy", "data-fy-text", "data-fy-if", "data-fy-repeat", "data-fy-anim-start", "data-fy-anim-duration", "data-fy-anim-easing", "data-fy-start", "data-fy-trim", "data-fy-duration", "data-fy-volume", "data-fy-audio"];
5
+ export declare function isAnimationAttribute(name: string): boolean;
6
+ export declare function isMediaAttribute(name: string): boolean;
7
+ //# sourceMappingURL=attributes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attributes.d.ts","sourceRoot":"","sources":["../../src/composition/attributes.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,2DAA4D,CAAC;AAE5F,eAAO,MAAM,oBAAoB,iFAAkF,CAAC;AAEpH,eAAO,MAAM,gBAAgB,mGAMnB,CAAC;AAEX,eAAO,MAAM,wBAAwB,oOAK3B,CAAC;AAKX,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD"}
@@ -0,0 +1,24 @@
1
+ export const BINDING_ATTRIBUTES = ["data-fy-text", "data-fy-if", "data-fy-repeat"];
2
+ export const ANIMATION_ATTRIBUTES = ["data-fy-anim-start", "data-fy-anim-duration", "data-fy-anim-easing"];
3
+ export const MEDIA_ATTRIBUTES = [
4
+ "data-fy-start",
5
+ "data-fy-trim",
6
+ "data-fy-duration",
7
+ "data-fy-volume",
8
+ "data-fy-audio",
9
+ ];
10
+ export const KNOWN_DATA_FY_ATTRIBUTES = [
11
+ "data-fy",
12
+ ...BINDING_ATTRIBUTES,
13
+ ...ANIMATION_ATTRIBUTES,
14
+ ...MEDIA_ATTRIBUTES,
15
+ ];
16
+ const ANIMATION_SET = new Set(ANIMATION_ATTRIBUTES);
17
+ const MEDIA_SET = new Set(MEDIA_ATTRIBUTES);
18
+ export function isAnimationAttribute(name) {
19
+ return ANIMATION_SET.has(name);
20
+ }
21
+ export function isMediaAttribute(name) {
22
+ return MEDIA_SET.has(name);
23
+ }
24
+ //# sourceMappingURL=attributes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attributes.js","sourceRoot":"","sources":["../../src/composition/attributes.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,cAAc,EAAE,YAAY,EAAE,gBAAgB,CAAU,CAAC;AAE5F,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,oBAAoB,EAAE,uBAAuB,EAAE,qBAAqB,CAAU,CAAC;AAEpH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,eAAe;IACf,cAAc;IACd,kBAAkB;IAClB,gBAAgB;IAChB,eAAe;CACP,CAAC;AAEX,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,SAAS;IACT,GAAG,kBAAkB;IACrB,GAAG,oBAAoB;IACvB,GAAG,gBAAgB;CACX,CAAC;AAEX,MAAM,aAAa,GAAG,IAAI,GAAG,CAAS,oBAAoB,CAAC,CAAC;AAC5D,MAAM,SAAS,GAAG,IAAI,GAAG,CAAS,gBAAgB,CAAC,CAAC;AAEpD,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { type CompositionDiagnostic, type CompositionMetadata, type ControllerDeclaration, type Props } from "../contracts.js";
2
+ import type { DocumentAdapter } from "./adapter.js";
3
+ export interface CompositionDescriptor {
4
+ metadata: CompositionMetadata | null;
5
+ defaultProps: Readonly<Props>;
6
+ controller: ControllerDeclaration | null;
7
+ }
8
+ export interface CompositionDescriptorResult<Node> {
9
+ root: Node | null;
10
+ descriptor: CompositionDescriptor;
11
+ valid: boolean;
12
+ diagnostics: CompositionDiagnostic[];
13
+ }
14
+ export interface ReadCompositionDescriptorOptions {
15
+ /** Project-relative path to the composition document, used in diagnostics. */
16
+ path: string;
17
+ /**
18
+ * Resolves an external controller's authoring `src` to a project-relative
19
+ * path. The reader stays pure; the caller supplies the path world.
20
+ */
21
+ resolvePath(raw: string): string;
22
+ }
23
+ /**
24
+ * Reads the fixed facts of an HTML composition: metadata, default props, and
25
+ * the controller declaration. The reader is pure; the adapter supplies tree
26
+ * access and source locations, and the caller supplies controller path
27
+ * resolution.
28
+ */
29
+ export declare function readCompositionDescriptor<Node>(adapter: DocumentAdapter<Node>, options: ReadCompositionDescriptorOptions): CompositionDescriptorResult<Node>;
30
+ //# sourceMappingURL=descriptor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"descriptor.d.ts","sourceRoot":"","sources":["../../src/composition/descriptor.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,qBAAqB,EAE1B,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,KAAK,EACX,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAKpD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACrC,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9B,UAAU,EAAE,qBAAqB,GAAG,IAAI,CAAC;CAC1C;AAED,MAAM,WAAW,2BAA2B,CAAC,IAAI;IAC/C,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,UAAU,EAAE,qBAAqB,CAAC;IAClC,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,qBAAqB,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,gCAAgC;IAC/C,8EAA8E;IAC9E,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CAClC;AA+UD;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAC5C,OAAO,EAAE,eAAe,CAAC,IAAI,CAAC,EAC9B,OAAO,EAAE,gCAAgC,GACxC,2BAA2B,CAAC,IAAI,CAAC,CA2BnC"}
@@ -0,0 +1,188 @@
1
+ import { assertJsonSerializable, isPlainObject, mergeProps, } from "../contracts.js";
2
+ import { errorMessage } from "../errors.js";
3
+ import { attributeDetails, createDiagnostic, elementDetails, lineColumn, locationDetails } from "./diagnostics.js";
4
+ import { isLocalRelative } from "./paths.js";
5
+ import { findElements, getAttribute } from "./walk.js";
6
+ const METADATA_ATTRIBUTES = ["width", "height", "fps", "duration-in-frames"];
7
+ function readRoot(adapter, path) {
8
+ const diagnostics = [];
9
+ const roots = findElements(adapter, (node) => adapter.tagName(node) === "fy-composition");
10
+ if (roots.length === 0) {
11
+ diagnostics.push(createDiagnostic("error", "COMPOSITION_INVALID", "Composition document must contain one <fy-composition> root.", {
12
+ path,
13
+ }));
14
+ return { root: null, diagnostics };
15
+ }
16
+ for (const extra of roots.slice(1)) {
17
+ diagnostics.push(createDiagnostic("error", "COMPOSITION_INVALID", "Composition document must contain exactly one <fy-composition> root.", elementDetails(adapter, path, extra.node)));
18
+ }
19
+ const first = roots[0];
20
+ if (!first.ancestors.some((ancestor) => adapter.tagName(ancestor) === "body")) {
21
+ diagnostics.push(createDiagnostic("error", "COMPOSITION_INVALID", "The <fy-composition> root must be inside <body>.", elementDetails(adapter, path, first.node)));
22
+ }
23
+ if (first.inTemplate) {
24
+ diagnostics.push(createDiagnostic("error", "COMPOSITION_INVALID", "The <fy-composition> root must not be inside a <template>.", elementDetails(adapter, path, first.node)));
25
+ }
26
+ return { root: first.node, diagnostics };
27
+ }
28
+ function readPositiveInteger(adapter, path, root, attribute, diagnostics) {
29
+ const raw = getAttribute(adapter, root, attribute);
30
+ if (raw === undefined) {
31
+ diagnostics.push(createDiagnostic("error", "COMPOSITION_INVALID", `Missing required "${attribute}" attribute on <fy-composition>.`, attributeDetails(adapter, path, root, attribute)));
32
+ return null;
33
+ }
34
+ const value = Number(raw);
35
+ if (!/^\d+$/.test(raw.trim()) || !Number.isInteger(value) || value <= 0) {
36
+ diagnostics.push(createDiagnostic("error", "COMPOSITION_INVALID", `"${attribute}" must be a positive integer; received "${raw}".`, attributeDetails(adapter, path, root, attribute, { value: raw })));
37
+ return null;
38
+ }
39
+ return value;
40
+ }
41
+ function readPositiveNumber(adapter, path, root, attribute, diagnostics) {
42
+ const raw = getAttribute(adapter, root, attribute);
43
+ if (raw === undefined) {
44
+ diagnostics.push(createDiagnostic("error", "COMPOSITION_INVALID", `Missing required "${attribute}" attribute on <fy-composition>.`, attributeDetails(adapter, path, root, attribute)));
45
+ return null;
46
+ }
47
+ const value = Number(raw);
48
+ if (!Number.isFinite(value) || value <= 0) {
49
+ diagnostics.push(createDiagnostic("error", "COMPOSITION_INVALID", `"${attribute}" must be a positive number; received "${raw}".`, attributeDetails(adapter, path, root, attribute, { value: raw })));
50
+ return null;
51
+ }
52
+ return value;
53
+ }
54
+ function readMetadata(adapter, path, root) {
55
+ const diagnostics = [];
56
+ const values = new Map();
57
+ for (const attribute of METADATA_ATTRIBUTES) {
58
+ values.set(attribute, attribute === "fps"
59
+ ? readPositiveNumber(adapter, path, root, attribute, diagnostics)
60
+ : readPositiveInteger(adapter, path, root, attribute, diagnostics));
61
+ }
62
+ const width = values.get("width") ?? null;
63
+ const height = values.get("height") ?? null;
64
+ const fps = values.get("fps") ?? null;
65
+ const durationInFrames = values.get("duration-in-frames") ?? null;
66
+ return {
67
+ metadata: width !== null && height !== null && fps !== null && durationInFrames !== null
68
+ ? { width, height, fps, durationInFrames }
69
+ : null,
70
+ diagnostics,
71
+ };
72
+ }
73
+ function readDefaultProps(adapter, path) {
74
+ const diagnostics = [];
75
+ const blocks = findElements(adapter, (node) => adapter.tagName(node) === "script" &&
76
+ getAttribute(adapter, node, "type")?.toLowerCase() === "application/json" &&
77
+ getAttribute(adapter, node, "data-fy") === "props");
78
+ for (const extra of blocks.slice(1)) {
79
+ diagnostics.push(createDiagnostic("error", "PROPS_INVALID", 'A composition may contain at most one data-fy="props" block.', elementDetails(adapter, path, extra.node)));
80
+ }
81
+ const block = blocks[0];
82
+ if (!block) {
83
+ return { defaultProps: Object.freeze({}), diagnostics };
84
+ }
85
+ if (block.inTemplate) {
86
+ diagnostics.push(createDiagnostic("error", "PROPS_INVALID", 'The data-fy="props" block must not be inside a <template>.', elementDetails(adapter, path, block.node)));
87
+ }
88
+ try {
89
+ const parsed = JSON.parse(adapter.text(block.node));
90
+ if (!isPlainObject(parsed)) {
91
+ throw new Error('The data-fy="props" block must contain a JSON object.');
92
+ }
93
+ assertJsonSerializable(parsed, "defaultProps");
94
+ return { defaultProps: mergeProps(parsed, undefined), diagnostics };
95
+ }
96
+ catch (error) {
97
+ diagnostics.push(createDiagnostic("error", "PROPS_INVALID", `Invalid default props: ${errorMessage(error)}`, elementDetails(adapter, path, block.node)));
98
+ return { defaultProps: Object.freeze({}), diagnostics };
99
+ }
100
+ }
101
+ function readController(adapter, path, resolvePath) {
102
+ const diagnostics = [];
103
+ const blocks = findElements(adapter, (node) => adapter.tagName(node) === "script" && getAttribute(adapter, node, "type")?.toLowerCase() === "text/fy-controller");
104
+ for (const extra of blocks.slice(1)) {
105
+ diagnostics.push(createDiagnostic("error", "CONTROLLER_INVALID", "A composition may declare at most one controller.", elementDetails(adapter, path, extra.node)));
106
+ }
107
+ const block = blocks[0];
108
+ if (!block) {
109
+ return { controller: null, diagnostics };
110
+ }
111
+ if (block.inTemplate) {
112
+ diagnostics.push(createDiagnostic("error", "CONTROLLER_INVALID", "The controller block must not be inside a <template>.", elementDetails(adapter, path, block.node)));
113
+ }
114
+ const src = getAttribute(adapter, block.node, "src");
115
+ const source = adapter.text(block.node);
116
+ const hasSource = source.trim().length > 0;
117
+ if (src !== undefined && hasSource) {
118
+ diagnostics.push(createDiagnostic("error", "CONTROLLER_INVALID", "A controller must be either inline or external, not both.", attributeDetails(adapter, path, block.node, "src")));
119
+ return { controller: null, diagnostics };
120
+ }
121
+ if (src === undefined && !hasSource) {
122
+ diagnostics.push(createDiagnostic("error", "CONTROLLER_INVALID", "A controller must contain inline source or reference an external module with src.", elementDetails(adapter, path, block.node)));
123
+ return { controller: null, diagnostics };
124
+ }
125
+ if (src !== undefined) {
126
+ const location = adapter.location(block.node, "src") ?? adapter.location(block.node);
127
+ const pathDetails = {
128
+ path,
129
+ element: adapter.tagName(block.node),
130
+ attribute: "src",
131
+ ...locationDetails(location),
132
+ value: src,
133
+ };
134
+ if (!isLocalRelative(src)) {
135
+ diagnostics.push(createDiagnostic("error", "CONTROLLER_INVALID", `Controller path must be a local project file, not "${src}".`, pathDetails));
136
+ return { controller: { kind: "external", rawSrc: src, ...lineColumn(location) }, diagnostics };
137
+ }
138
+ let resolved;
139
+ try {
140
+ resolved = resolvePath(src);
141
+ }
142
+ catch (error) {
143
+ diagnostics.push(createDiagnostic("error", "CONTROLLER_INVALID", `Could not resolve controller path "${src}": ${errorMessage(error)}`, pathDetails));
144
+ return { controller: { kind: "external", rawSrc: src, ...lineColumn(location) }, diagnostics };
145
+ }
146
+ return {
147
+ controller: { kind: "external", rawSrc: src, src: resolved, ...lineColumn(location) },
148
+ diagnostics,
149
+ };
150
+ }
151
+ const textNode = adapter.children(block.node).find((child) => !adapter.isElement(child));
152
+ const location = textNode ? adapter.location(textNode) : adapter.location(block.node);
153
+ return {
154
+ controller: { kind: "inline", source, ...lineColumn(location) },
155
+ diagnostics,
156
+ };
157
+ }
158
+ /**
159
+ * Reads the fixed facts of an HTML composition: metadata, default props, and
160
+ * the controller declaration. The reader is pure; the adapter supplies tree
161
+ * access and source locations, and the caller supplies controller path
162
+ * resolution.
163
+ */
164
+ export function readCompositionDescriptor(adapter, options) {
165
+ const rootRead = readRoot(adapter, options.path);
166
+ const diagnostics = [...rootRead.diagnostics];
167
+ let metadata = null;
168
+ if (rootRead.root) {
169
+ const metadataRead = readMetadata(adapter, options.path, rootRead.root);
170
+ metadata = metadataRead.metadata;
171
+ diagnostics.push(...metadataRead.diagnostics);
172
+ }
173
+ const propsRead = readDefaultProps(adapter, options.path);
174
+ diagnostics.push(...propsRead.diagnostics);
175
+ const controllerRead = readController(adapter, options.path, options.resolvePath);
176
+ diagnostics.push(...controllerRead.diagnostics);
177
+ return {
178
+ root: rootRead.root,
179
+ descriptor: {
180
+ metadata,
181
+ defaultProps: propsRead.defaultProps,
182
+ controller: controllerRead.controller,
183
+ },
184
+ valid: !diagnostics.some((diagnostic) => diagnostic.severity === "error"),
185
+ diagnostics,
186
+ };
187
+ }
188
+ //# sourceMappingURL=descriptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"descriptor.js","sourceRoot":"","sources":["../../src/composition/descriptor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { CompositionDiagnostic, CompositionDiagnosticDetails, DiagnosticSeverity } from "../contracts.js";
2
+ import type { FrameyardErrorCode } from "../errors.js";
3
+ import type { DocumentAdapter, SourceLocation } from "./adapter.js";
4
+ export declare function createDiagnostic(severity: DiagnosticSeverity, code: FrameyardErrorCode, message: string, details: CompositionDiagnosticDetails): CompositionDiagnostic;
5
+ export declare function locationDetails(location: SourceLocation | undefined): CompositionDiagnosticDetails;
6
+ export declare function lineColumn(location: SourceLocation | undefined): {
7
+ line?: number;
8
+ column?: number;
9
+ };
10
+ export declare function elementDetails<Node>(adapter: DocumentAdapter<Node>, path: string, node: Node, extra?: CompositionDiagnosticDetails): CompositionDiagnosticDetails;
11
+ export declare function attributeDetails<Node>(adapter: DocumentAdapter<Node>, path: string, node: Node, attribute: string, extra?: CompositionDiagnosticDetails): CompositionDiagnosticDetails;
12
+ //# sourceMappingURL=diagnostics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/composition/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC/G,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEpE,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,kBAAkB,EAC5B,IAAI,EAAE,kBAAkB,EACxB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,4BAA4B,GACpC,qBAAqB,CAEvB;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,cAAc,GAAG,SAAS,GAAG,4BAA4B,CAUlG;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,cAAc,GAAG,SAAS,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAKnG;AAED,wBAAgB,cAAc,CAAC,IAAI,EACjC,OAAO,EAAE,eAAe,CAAC,IAAI,CAAC,EAC9B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,IAAI,EACV,KAAK,GAAE,4BAAiC,GACvC,4BAA4B,CAO9B;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EACnC,OAAO,EAAE,eAAe,CAAC,IAAI,CAAC,EAC9B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,MAAM,EACjB,KAAK,GAAE,4BAAiC,GACvC,4BAA4B,CAQ9B"}
@@ -0,0 +1,38 @@
1
+ export function createDiagnostic(severity, code, message, details) {
2
+ return { severity, code, message, details };
3
+ }
4
+ export function locationDetails(location) {
5
+ if (!location) {
6
+ return {};
7
+ }
8
+ return {
9
+ line: location.startLine,
10
+ column: location.startCol,
11
+ endLine: location.endLine,
12
+ endColumn: location.endCol,
13
+ };
14
+ }
15
+ export function lineColumn(location) {
16
+ if (!location) {
17
+ return {};
18
+ }
19
+ return { line: location.startLine, column: location.startCol };
20
+ }
21
+ export function elementDetails(adapter, path, node, extra = {}) {
22
+ return {
23
+ path,
24
+ element: adapter.tagName(node),
25
+ ...locationDetails(adapter.location(node)),
26
+ ...extra,
27
+ };
28
+ }
29
+ export function attributeDetails(adapter, path, node, attribute, extra = {}) {
30
+ return {
31
+ path,
32
+ element: adapter.tagName(node),
33
+ attribute,
34
+ ...locationDetails(adapter.location(node, attribute) ?? adapter.location(node)),
35
+ ...extra,
36
+ };
37
+ }
38
+ //# sourceMappingURL=diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/composition/diagnostics.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,gBAAgB,CAC9B,QAA4B,EAC5B,IAAwB,EACxB,OAAe,EACf,OAAqC;IAErC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAoC;IAClE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,SAAS;QACxB,MAAM,EAAE,QAAQ,CAAC,QAAQ;QACzB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,SAAS,EAAE,QAAQ,CAAC,MAAM;KAC3B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,QAAoC;IAC7D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,OAA8B,EAC9B,IAAY,EACZ,IAAU,EACV,QAAsC,EAAE;IAExC,OAAO;QACL,IAAI;QACJ,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;QAC9B,GAAG,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,KAAK;KACT,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,OAA8B,EAC9B,IAAY,EACZ,IAAU,EACV,SAAiB,EACjB,QAAsC,EAAE;IAExC,OAAO;QACL,IAAI;QACJ,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;QAC9B,SAAS;QACT,GAAG,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC/E,GAAG,KAAK;KACT,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ export { readCompositionDescriptor } from "./descriptor.js";
2
+ export type { CompositionDescriptor, CompositionDescriptorResult, ReadCompositionDescriptorOptions, } from "./descriptor.js";
3
+ export { readAnimationDeclarations } from "./animation.js";
4
+ export type { AnimationDeclaration, AnimationDeclarations, ReadAnimationDeclarationsOptions } from "./animation.js";
5
+ export { readMediaDeclarations, readMediaSpec } from "./media.js";
6
+ export type { MediaDeclaration, MediaDeclarations, MediaSpec, ReadMediaDeclarationsOptions } from "./media.js";
7
+ export { readTranscriptDeclarations } from "./transcripts.js";
8
+ export type { ReadTranscriptDeclarationsOptions, TranscriptDeclaration, TranscriptDeclarations, } from "./transcripts.js";
9
+ export { KNOWN_DATA_FY_ATTRIBUTES, isAnimationAttribute, isMediaAttribute } from "./attributes.js";
10
+ export type { DocumentAdapter, DocumentAttribute, SourceLocation } from "./adapter.js";
11
+ export { isLocalRelative, isRemote } from "./paths.js";
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/composition/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,YAAY,EACV,qBAAqB,EACrB,2BAA2B,EAC3B,gCAAgC,GACjC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,YAAY,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,gCAAgC,EAAE,MAAM,gBAAgB,CAAC;AACpH,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAClE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,SAAS,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAC/G,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAC9D,YAAY,EACV,iCAAiC,EACjC,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnG,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { readCompositionDescriptor } from "./descriptor.js";
2
+ export { readAnimationDeclarations } from "./animation.js";
3
+ export { readMediaDeclarations, readMediaSpec } from "./media.js";
4
+ export { readTranscriptDeclarations } from "./transcripts.js";
5
+ export { KNOWN_DATA_FY_ATTRIBUTES, isAnimationAttribute, isMediaAttribute } from "./attributes.js";
6
+ export { isLocalRelative, isRemote } from "./paths.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/composition/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAM5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAE3D,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAElE,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAM9D,OAAO,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnG,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { type CompositionDiagnostic, type Props, type ResolvedAudioClip } from "../contracts.js";
2
+ import type { DocumentAdapter } from "./adapter.js";
3
+ export interface MediaDeclaration<Node> {
4
+ clip: ResolvedAudioClip;
5
+ element: Node;
6
+ }
7
+ export interface MediaDeclarations<Node> {
8
+ audio: MediaDeclaration<Node>[];
9
+ embedded: MediaDeclaration<Node>[];
10
+ diagnostics: CompositionDiagnostic[];
11
+ }
12
+ export interface ReadMediaDeclarationsOptions {
13
+ path: string;
14
+ includeTemplateContent: boolean;
15
+ props: Readonly<Props>;
16
+ /** True after the host has applied bindings; the resolved src wins over the binding attribute. */
17
+ bindingsApplied?: boolean;
18
+ }
19
+ export interface MediaSpec {
20
+ startFrame: number;
21
+ trimStart: number;
22
+ trimDuration?: number;
23
+ volume: number;
24
+ }
25
+ export declare function readMediaSpec<Node>(adapter: DocumentAdapter<Node>, path: string, element: Node, diagnostics: CompositionDiagnostic[], defaultVolume?: number): MediaSpec | null;
26
+ export declare function readMediaDeclarations<Node>(adapter: DocumentAdapter<Node>, options: ReadMediaDeclarationsOptions): MediaDeclarations<Node>;
27
+ //# sourceMappingURL=media.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../src/composition/media.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,KAAK,qBAAqB,EAAE,KAAK,KAAK,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAErH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAMpD,MAAM,WAAW,gBAAgB,CAAC,IAAI;IACpC,IAAI,EAAE,iBAAiB,CAAC;IACxB,OAAO,EAAE,IAAI,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB,CAAC,IAAI;IACrC,KAAK,EAAE,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;IAChC,QAAQ,EAAE,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;IACnC,WAAW,EAAE,qBAAqB,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,sBAAsB,EAAE,OAAO,CAAC;IAChC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IACvB,kGAAkG;IAClG,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,aAAa,CAAC,IAAI,EAChC,OAAO,EAAE,eAAe,CAAC,IAAI,CAAC,EAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,IAAI,EACb,WAAW,EAAE,qBAAqB,EAAE,EACpC,aAAa,SAAI,GAChB,SAAS,GAAG,IAAI,CAqGlB;AAoED,wBAAgB,qBAAqB,CAAC,IAAI,EACxC,OAAO,EAAE,eAAe,CAAC,IAAI,CAAC,EAC9B,OAAO,EAAE,4BAA4B,GACpC,iBAAiB,CAAC,IAAI,CAAC,CAsGzB"}