@hyperframes/core 0.5.0-alpha.1 → 0.5.0-alpha.11

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 (63) hide show
  1. package/dist/compiler/compositionScoping.d.ts +3 -0
  2. package/dist/compiler/compositionScoping.d.ts.map +1 -0
  3. package/dist/compiler/compositionScoping.js +242 -0
  4. package/dist/compiler/compositionScoping.js.map +1 -0
  5. package/dist/compiler/htmlBundler.d.ts.map +1 -1
  6. package/dist/compiler/htmlBundler.js +53 -13
  7. package/dist/compiler/htmlBundler.js.map +1 -1
  8. package/dist/compiler/index.d.ts +1 -0
  9. package/dist/compiler/index.d.ts.map +1 -1
  10. package/dist/compiler/index.js +2 -0
  11. package/dist/compiler/index.js.map +1 -1
  12. package/dist/generated/runtime-inline.js +1 -1
  13. package/dist/generated/runtime-inline.js.map +1 -1
  14. package/dist/hyperframe.manifest.json +1 -1
  15. package/dist/hyperframe.runtime.iife.js +208 -7
  16. package/dist/hyperframe.runtime.mjs +208 -7
  17. package/dist/lint/context.d.ts.map +1 -1
  18. package/dist/lint/context.js +9 -1
  19. package/dist/lint/context.js.map +1 -1
  20. package/dist/lint/rules/captions.d.ts.map +1 -1
  21. package/dist/lint/rules/captions.js +2 -1
  22. package/dist/lint/rules/captions.js.map +1 -1
  23. package/dist/lint/rules/composition.d.ts.map +1 -1
  24. package/dist/lint/rules/composition.js +102 -20
  25. package/dist/lint/rules/composition.js.map +1 -1
  26. package/dist/lint/rules/core.d.ts.map +1 -1
  27. package/dist/lint/rules/core.js +44 -0
  28. package/dist/lint/rules/core.js.map +1 -1
  29. package/dist/lint/rules/media.d.ts.map +1 -1
  30. package/dist/lint/rules/media.js +101 -30
  31. package/dist/lint/rules/media.js.map +1 -1
  32. package/dist/lint/types.d.ts +4 -0
  33. package/dist/lint/types.d.ts.map +1 -1
  34. package/dist/registry/types.d.ts +4 -0
  35. package/dist/registry/types.d.ts.map +1 -1
  36. package/dist/registry/types.js.map +1 -1
  37. package/dist/studio-api/createStudioApi.d.ts.map +1 -1
  38. package/dist/studio-api/createStudioApi.js +2 -0
  39. package/dist/studio-api/createStudioApi.js.map +1 -1
  40. package/dist/studio-api/helpers/mime.d.ts +1 -0
  41. package/dist/studio-api/helpers/mime.d.ts.map +1 -1
  42. package/dist/studio-api/helpers/mime.js +6 -0
  43. package/dist/studio-api/helpers/mime.js.map +1 -1
  44. package/dist/studio-api/helpers/waveform.d.ts +5 -0
  45. package/dist/studio-api/helpers/waveform.d.ts.map +1 -0
  46. package/dist/studio-api/helpers/waveform.js +74 -0
  47. package/dist/studio-api/helpers/waveform.js.map +1 -0
  48. package/dist/studio-api/routes/files.d.ts.map +1 -1
  49. package/dist/studio-api/routes/files.js +7 -1
  50. package/dist/studio-api/routes/files.js.map +1 -1
  51. package/dist/studio-api/routes/projects.js +1 -1
  52. package/dist/studio-api/routes/projects.js.map +1 -1
  53. package/dist/studio-api/routes/thumbnail.d.ts.map +1 -1
  54. package/dist/studio-api/routes/thumbnail.js +10 -4
  55. package/dist/studio-api/routes/thumbnail.js.map +1 -1
  56. package/dist/studio-api/routes/waveform.d.ts +6 -0
  57. package/dist/studio-api/routes/waveform.d.ts.map +1 -0
  58. package/dist/studio-api/routes/waveform.js +43 -0
  59. package/dist/studio-api/routes/waveform.js.map +1 -0
  60. package/dist/studio-api/types.d.ts +2 -0
  61. package/dist/studio-api/types.d.ts.map +1 -1
  62. package/package.json +3 -2
  63. package/schemas/registry-item.json +8 -0
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/lint/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAU9E,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEvD,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;AAExC,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,OAAO,EAAE,uBAAuB,CAAC;CAClC,CAAC;AAGF,YAAY,EAAE,qBAAqB,EAAE,CAAC;AAEtC,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,uBAA4B,GAAG,WAAW,CAwBjG"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/lint/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAU9E,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEvD,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;AAExC,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,OAAO,EAAE,uBAAuB,CAAC;CAClC,CAAC;AAGF,YAAY,EAAE,qBAAqB,EAAE,CAAC;AAEtC,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,uBAA4B,GAAG,WAAW,CAgCjG"}
@@ -6,7 +6,15 @@ export function buildLintContext(html, options = {}) {
6
6
  if (templateMatch?.[1])
7
7
  source = templateMatch[1];
8
8
  const tags = extractOpenTags(source);
9
- const styles = extractBlocks(source, STYLE_BLOCK_PATTERN);
9
+ const styles = [
10
+ ...extractBlocks(source, STYLE_BLOCK_PATTERN),
11
+ ...(options.externalStyles ?? []).map((style) => ({
12
+ attrs: `href="${style.href}"`,
13
+ content: style.content,
14
+ raw: style.content,
15
+ index: -1,
16
+ })),
17
+ ];
10
18
  const scripts = extractBlocks(source, SCRIPT_BLOCK_PATTERN);
11
19
  const compositionIds = collectCompositionIds(tags);
12
20
  const rootTag = findRootTag(source);
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/lint/context.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,eAAe,EACf,WAAW,EACX,qBAAqB,EACrB,QAAQ,EACR,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,SAAS,CAAC;AAoBjB,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,UAAmC,EAAE;IAClF,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;IAC7B,IAAI,MAAM,GAAG,SAAS,CAAC;IACvB,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC5E,IAAI,aAAa,EAAE,CAAC,CAAC,CAAC;QAAE,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IAElD,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAC5D,MAAM,cAAc,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,iBAAiB,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE,qBAAqB,CAAC,CAAC;IAE9E,OAAO;QACL,MAAM;QACN,SAAS;QACT,IAAI;QACJ,MAAM;QACN,OAAO;QACP,cAAc;QACd,OAAO;QACP,iBAAiB;QACjB,OAAO;KACR,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/lint/context.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,eAAe,EACf,WAAW,EACX,qBAAqB,EACrB,QAAQ,EACR,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,SAAS,CAAC;AAoBjB,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,UAAmC,EAAE;IAClF,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;IAC7B,IAAI,MAAM,GAAG,SAAS,CAAC;IACvB,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC5E,IAAI,aAAa,EAAE,CAAC,CAAC,CAAC;QAAE,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IAElD,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG;QACb,GAAG,aAAa,CAAC,MAAM,EAAE,mBAAmB,CAAC;QAC7C,GAAG,CAAC,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAChD,KAAK,EAAE,SAAS,KAAK,CAAC,IAAI,GAAG;YAC7B,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,GAAG,EAAE,KAAK,CAAC,OAAO;YAClB,KAAK,EAAE,CAAC,CAAC;SACV,CAAC,CAAC;KACJ,CAAC;IACF,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAC5D,MAAM,cAAc,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,iBAAiB,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE,qBAAqB,CAAC,CAAC;IAE9E,OAAO;QACL,MAAM;QACN,SAAS;QACT,IAAI;QACJ,MAAM;QACN,OAAO;QACP,cAAc;QACd,OAAO;QACP,iBAAiB;QACjB,OAAO;KACR,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"captions.d.ts","sourceRoot":"","sources":["../../../src/lint/rules/captions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAErE,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,WAAW,KAAK,qBAAqB,EAAE,CAkO7E,CAAC"}
1
+ {"version":3,"file":"captions.d.ts","sourceRoot":"","sources":["../../../src/lint/rules/captions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAErE,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,WAAW,KAAK,qBAAqB,EAAE,CAmO7E,CAAC"}
@@ -6,7 +6,8 @@ export const captionRules = [
6
6
  const content = script.content;
7
7
  const hasExitTween = /\.to\s*\([^,]+,\s*\{[^}]*opacity\s*:\s*0/.test(content);
8
8
  const hasHardKill = /\.set\s*\([^,]+,\s*\{[^}]*(?:visibility\s*:\s*["']hidden["']|opacity\s*:\s*0)/.test(content);
9
- const hasCaptionLoop = /forEach|\.forEach\s*\(/.test(content) && /createElement|caption|group|cg-/.test(content);
9
+ const hasCaptionLoop = /forEach|\.forEach\s*\(/.test(content) &&
10
+ /karaoke|caption[-_]?(?:group|word|line|block)|cg-/.test(content);
10
11
  if (hasCaptionLoop && hasExitTween && !hasHardKill) {
11
12
  findings.push({
12
13
  code: "caption_exit_missing_hard_kill",
@@ -1 +1 @@
1
- {"version":3,"file":"captions.js","sourceRoot":"","sources":["../../../src/lint/rules/captions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"captions.js","sourceRoot":"","sources":["../../../src/lint/rules/captions.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"composition.d.ts","sourceRoot":"","sources":["../../../src/lint/rules/composition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAGrE,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,WAAW,KAAK,qBAAqB,EAAE,CAuSjF,CAAC"}
1
+ {"version":3,"file":"composition.d.ts","sourceRoot":"","sources":["../../../src/lint/rules/composition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAkCrE,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,WAAW,KAAK,qBAAqB,EAAE,CAmWjF,CAAC"}
@@ -1,5 +1,79 @@
1
1
  import { readAttr, truncateSnippet } from "../utils";
2
+ // Agent guidance thresholds: warning-only nudges for files/tracks that become hard
3
+ // to inspect and revise reliably in a single composition.
4
+ const MAX_COMPOSITION_LINES = 300;
5
+ const MAX_TIMED_ELEMENTS_PER_TRACK = 3;
6
+ const TRACK_DENSITY_EXEMPT_TAGS = new Set(["audio", "script", "style", "video"]);
7
+ function countPhysicalLines(source) {
8
+ if (source.length === 0)
9
+ return 0;
10
+ const normalized = source.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
11
+ const withoutFinalNewline = normalized.endsWith("\n") ? normalized.slice(0, -1) : normalized;
12
+ return withoutFinalNewline.split("\n").length;
13
+ }
14
+ function isRegistrySourceFile(filePath) {
15
+ if (!filePath)
16
+ return false;
17
+ const normalized = filePath.replace(/\\/g, "/");
18
+ return /(?:^|\/)registry\/blocks\/([^/]+)\/\1\.html$/i.test(normalized);
19
+ }
20
+ function isRegistryInstalledFile(rawSource) {
21
+ return /^\s*<!--\s*hyperframes-registry-item:[^>]*-->/i.test(rawSource.slice(0, 512));
22
+ }
23
+ function isCompositionRootOrMount(rawTag) {
24
+ return Boolean(readAttr(rawTag, "data-composition-id") || readAttr(rawTag, "data-composition-src"));
25
+ }
2
26
  export const compositionRules = [
27
+ // composition_file_too_large
28
+ ({ rawSource, options }) => {
29
+ if (isRegistrySourceFile(options.filePath) || isRegistryInstalledFile(rawSource))
30
+ return [];
31
+ const lineCount = countPhysicalLines(rawSource);
32
+ if (lineCount <= MAX_COMPOSITION_LINES)
33
+ return [];
34
+ const splitTarget = options.isSubComposition
35
+ ? "Split this sub-composition further into smaller .html files"
36
+ : "Split coherent scenes or layers into separate .html files under compositions/";
37
+ return [
38
+ {
39
+ code: "composition_file_too_large",
40
+ severity: "warning",
41
+ message: `This HTML composition file has ${lineCount} lines. Agents produce better results when large scenes are split into smaller sub-compositions.`,
42
+ fixHint: `${splitTarget}, then mount them from the parent with data-composition-src so each file stays small enough to inspect, revise, and validate independently.`,
43
+ },
44
+ ];
45
+ },
46
+ // timeline_track_too_dense
47
+ ({ tags, options }) => {
48
+ const trackCounts = new Map();
49
+ for (const tag of tags) {
50
+ if (TRACK_DENSITY_EXEMPT_TAGS.has(tag.name))
51
+ continue;
52
+ if (isCompositionRootOrMount(tag.raw))
53
+ continue;
54
+ if (!readAttr(tag.raw, "data-start"))
55
+ continue;
56
+ const track = readAttr(tag.raw, "data-track-index");
57
+ if (!track)
58
+ continue;
59
+ trackCounts.set(track, (trackCounts.get(track) ?? 0) + 1);
60
+ }
61
+ const findings = [];
62
+ for (const [track, count] of trackCounts) {
63
+ if (count <= MAX_TIMED_ELEMENTS_PER_TRACK)
64
+ continue;
65
+ const splitTarget = options.isSubComposition
66
+ ? "Move coherent scene groups into smaller .html files"
67
+ : "Move coherent scene groups into separate .html files under compositions/";
68
+ findings.push({
69
+ code: "timeline_track_too_dense",
70
+ severity: "warning",
71
+ message: `Track ${track} has ${count} timed elements in this HTML file. Agents produce better timelines when dense tracks are split into smaller sub-compositions.`,
72
+ fixHint: `${splitTarget} and mount them from the parent with data-composition-src so the timeline stays easier to inspect, revise, and validate.`,
73
+ });
74
+ }
75
+ return findings;
76
+ },
3
77
  // timed_element_missing_visibility_hidden
4
78
  ({ tags }) => {
5
79
  const findings = [];
@@ -59,6 +133,34 @@ export const compositionRules = [
59
133
  }
60
134
  return findings;
61
135
  },
136
+ // split_data_attribute_selector
137
+ ({ scripts, styles }) => {
138
+ const findings = [];
139
+ const splitDataAttrSelectorPattern = /\[data-composition-id=(["'])([^"'\]]+)\1\s+(data-[\w:-]+)=(["'])([^"'\]]*)\4\]/g;
140
+ const scan = (content) => {
141
+ splitDataAttrSelectorPattern.lastIndex = 0;
142
+ let match;
143
+ while ((match = splitDataAttrSelectorPattern.exec(content)) !== null) {
144
+ const compId = match[2] ?? "";
145
+ const attrName = match[3] ?? "";
146
+ const attrValue = match[5] ?? "";
147
+ findings.push({
148
+ code: "split_data_attribute_selector",
149
+ severity: "error",
150
+ message: `Selector "${match[0]}" combines two attributes inside one CSS attribute selector. ` +
151
+ "Browsers reject it, so GSAP timelines or querySelector calls will fail before registering.",
152
+ selector: match[0],
153
+ fixHint: `Use separate attribute selectors: [data-composition-id="${compId}"][${attrName}="${attrValue}"].`,
154
+ snippet: truncateSnippet(match[0]),
155
+ });
156
+ }
157
+ };
158
+ for (const style of styles)
159
+ scan(style.content);
160
+ for (const script of scripts)
161
+ scan(script.content);
162
+ return findings;
163
+ },
62
164
  // template_literal_selector
63
165
  ({ scripts }) => {
64
166
  const findings = [];
@@ -196,26 +298,6 @@ export const compositionRules = [
196
298
  }
197
299
  return findings;
198
300
  },
199
- // root_composition_missing_data_duration
200
- ({ rootTag }) => {
201
- const findings = [];
202
- if (!rootTag)
203
- return findings;
204
- const compId = readAttr(rootTag.raw, "data-composition-id");
205
- if (!compId)
206
- return findings;
207
- const hasDuration = readAttr(rootTag.raw, "data-duration") !== null;
208
- if (!hasDuration) {
209
- findings.push({
210
- code: "root_composition_missing_data_duration",
211
- severity: "warning",
212
- message: `Root composition "${compId}" is missing data-duration. Without an explicit duration, the runtime may infer Infinity for compositions with repeating animations, causing playback issues.`,
213
- fixHint: 'Add data-duration="X" to the root composition element, where X is the total duration in seconds.',
214
- snippet: truncateSnippet(rootTag.raw),
215
- });
216
- }
217
- return findings;
218
- },
219
301
  // standalone_composition_wrapped_in_template
220
302
  ({ rawSource, options }) => {
221
303
  const findings = [];
@@ -1 +1 @@
1
- {"version":3,"file":"composition.js","sourceRoot":"","sources":["../../../src/lint/rules/composition.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"composition.js","sourceRoot":"","sources":["../../../src/lint/rules/composition.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/lint/rules/core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAWrE,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,WAAW,KAAK,qBAAqB,EAAE,CA8M1E,CAAC"}
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/lint/rules/core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAuBrE,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,WAAW,KAAK,qBAAqB,EAAE,CAgP1E,CAAC"}
@@ -1,4 +1,12 @@
1
+ import postcss from "postcss";
1
2
  import { readAttr, truncateSnippet, extractCompositionIdsFromCss, getInlineScriptSyntaxError, TIMELINE_REGISTRY_INIT_PATTERN, TIMELINE_REGISTRY_ASSIGN_PATTERN, INVALID_SCRIPT_CLOSE_PATTERN, } from "../utils";
3
+ function escapeRegExp(value) {
4
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
5
+ }
6
+ function selectorTargetsCompositionId(selector, compositionId) {
7
+ const escaped = escapeRegExp(compositionId);
8
+ return new RegExp(String.raw `\[\s*data-composition-id\s*=\s*(?:"${escaped}"|'${escaped}')\s*\]`).test(selector);
9
+ }
2
10
  export const coreRules = [
3
11
  // root_missing_composition_id + root_missing_dimensions
4
12
  ({ rootTag }) => {
@@ -151,6 +159,42 @@ export const coreRules = [
151
159
  }
152
160
  return findings;
153
161
  },
162
+ // composition_self_attribute_selector
163
+ ({ styles, rootCompositionId, rootTag }) => {
164
+ const findings = [];
165
+ if (!rootCompositionId)
166
+ return findings;
167
+ const seenSelectors = new Set();
168
+ const rootId = readAttr(rootTag?.raw || "", "id");
169
+ for (const style of styles) {
170
+ let root;
171
+ try {
172
+ root = postcss.parse(style.content);
173
+ }
174
+ catch {
175
+ continue;
176
+ }
177
+ root.walkRules((rule) => {
178
+ for (const selector of rule.selectors) {
179
+ if (!selectorTargetsCompositionId(selector, rootCompositionId))
180
+ continue;
181
+ if (seenSelectors.has(selector))
182
+ continue;
183
+ seenSelectors.add(selector);
184
+ findings.push({
185
+ code: "composition_self_attribute_selector",
186
+ severity: "warning",
187
+ message: "Selector matches the block's own id; will leak to sibling instances when the block is embedded twice.",
188
+ selector,
189
+ fixHint: rootId
190
+ ? `Use #${rootId} for clearer authoring intent and instance-isolated styling.`
191
+ : "Add a stable id to the composition root and use that id selector for clearer authoring intent and instance-isolated styling.",
192
+ });
193
+ }
194
+ });
195
+ }
196
+ return findings;
197
+ },
154
198
  // non_deterministic_code
155
199
  ({ scripts }) => {
156
200
  const findings = [];
@@ -1 +1 @@
1
- {"version":3,"file":"core.js","sourceRoot":"","sources":["../../../src/lint/rules/core.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../../src/lint/rules/core.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../../src/lint/rules/media.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAwIrE,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,WAAW,KAAK,qBAAqB,EAAE,CAqP3E,CAAC"}
1
+ {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../../src/lint/rules/media.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAoMrE,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,WAAW,KAAK,qBAAqB,EAAE,CA4Q3E,CAAC"}
@@ -2,44 +2,73 @@ import { readAttr, truncateSnippet, isMediaTag } from "../utils";
2
2
  function escapeRegExp(value) {
3
3
  return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
4
4
  }
5
- function selectorTargetsManagedMedia(selector, mediaIds) {
5
+ function hasAttrName(tagSource, attr) {
6
+ const escaped = escapeRegExp(attr);
7
+ const attrs = tagSource.replace(/^<\s*[a-z][\w:-]*/i, "");
8
+ return new RegExp(`(?:^|\\s)${escaped}(?:\\s*=|\\s|/?>)`, "i").test(attrs);
9
+ }
10
+ function classNamesFromAttr(classAttr) {
11
+ if (!classAttr)
12
+ return [];
13
+ return classAttr.split(/\s+/).filter(Boolean);
14
+ }
15
+ function selectorTargetsManagedMedia(selector, mediaIndex) {
6
16
  const normalized = selector.trim();
7
17
  if (!normalized)
8
18
  return false;
9
- if (/\b(video|audio)\b/i.test(normalized))
19
+ if (mediaIndex.hasVideo && /\bvideo\b/i.test(normalized))
10
20
  return true;
11
- for (const mediaId of mediaIds) {
12
- if (normalized.includes(`#${mediaId}`) ||
21
+ if (mediaIndex.hasAudio && /\baudio\b/i.test(normalized))
22
+ return true;
23
+ for (const mediaId of mediaIndex.ids) {
24
+ const escapedId = escapeRegExp(mediaId);
25
+ if (new RegExp(`#${escapedId}(?![\\w-])`).test(normalized) ||
13
26
  normalized.includes(`[id="${mediaId}"]`) ||
14
27
  normalized.includes(`[id='${mediaId}']`)) {
15
28
  return true;
16
29
  }
17
30
  }
31
+ for (const className of mediaIndex.classes) {
32
+ if (new RegExp(`\\.${escapeRegExp(className)}(?![\\w-])`).test(normalized)) {
33
+ return true;
34
+ }
35
+ }
18
36
  return false;
19
37
  }
20
38
  function findImperativeMediaControlFindings(ctx) {
21
39
  const findings = [];
22
- const managedMediaIds = new Set(ctx.tags
23
- .filter((tag) => tag.name === "video" || tag.name === "audio")
24
- .map((tag) => readAttr(tag.raw, "id"))
25
- .filter((id) => Boolean(id)));
26
- if (managedMediaIds.size === 0 || ctx.scripts.length === 0)
40
+ const mediaTags = ctx.tags.filter((tag) => tag.name === "video" || tag.name === "audio");
41
+ const mediaIndex = {
42
+ ids: new Set(mediaTags.map((tag) => readAttr(tag.raw, "id")).filter((id) => Boolean(id))),
43
+ classes: new Set(mediaTags.flatMap((tag) => classNamesFromAttr(readAttr(tag.raw, "class")))),
44
+ hasVideo: mediaTags.some((tag) => tag.name === "video"),
45
+ hasAudio: mediaTags.some((tag) => tag.name === "audio"),
46
+ };
47
+ if (mediaTags.length === 0 || ctx.scripts.length === 0)
27
48
  return findings;
28
49
  for (const script of ctx.scripts) {
29
50
  const mediaVars = new Map();
30
51
  const assignmentPatterns = [
31
- /\b(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*(?:document|window\.document)\.getElementById\(\s*["']([^"']+)["']\s*\)/g,
32
- /\b(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*(?:document|window\.document)\.querySelector\(\s*["']([^"']+)["']\s*\)/g,
52
+ {
53
+ pattern: /\b(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*(?:document|window\.document)\.getElementById\(\s*["']([^"']+)["']\s*\)/g,
54
+ variableIndex: 1,
55
+ targetIndex: 2,
56
+ },
57
+ {
58
+ pattern: /\b(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*(?:document|window\.document)\.querySelector\(\s*(["'])([\s\S]*?)\2\s*\)/g,
59
+ variableIndex: 1,
60
+ targetIndex: 3,
61
+ },
33
62
  ];
34
- for (const pattern of assignmentPatterns) {
63
+ for (const { pattern, variableIndex, targetIndex } of assignmentPatterns) {
35
64
  let match;
36
65
  while ((match = pattern.exec(script.content)) !== null) {
37
- const variableName = match[1];
38
- const target = match[2];
66
+ const variableName = match[variableIndex];
67
+ const target = match[targetIndex];
39
68
  if (!variableName || !target)
40
69
  continue;
41
- if (managedMediaIds.has(target) || selectorTargetsManagedMedia(target, managedMediaIds)) {
42
- mediaVars.set(variableName, managedMediaIds.has(target) ? target : undefined);
70
+ if (mediaIndex.ids.has(target) || selectorTargetsManagedMedia(target, mediaIndex)) {
71
+ mediaVars.set(variableName, mediaIndex.ids.has(target) ? target : undefined);
43
72
  }
44
73
  }
45
74
  }
@@ -47,37 +76,53 @@ function findImperativeMediaControlFindings(ctx) {
47
76
  {
48
77
  pattern: /\b(?:document|window\.document)\.getElementById\(\s*["']([^"']+)["']\s*\)\.play\s*\(/g,
49
78
  kind: "play()",
79
+ targetIndex: 1,
50
80
  },
51
81
  {
52
82
  pattern: /\b(?:document|window\.document)\.getElementById\(\s*["']([^"']+)["']\s*\)\.pause\s*\(/g,
53
83
  kind: "pause()",
84
+ targetIndex: 1,
54
85
  },
55
86
  {
56
87
  pattern: /\b(?:document|window\.document)\.getElementById\(\s*["']([^"']+)["']\s*\)\.currentTime\s*=/g,
57
88
  kind: "currentTime",
89
+ targetIndex: 1,
58
90
  },
59
91
  {
60
- pattern: /\b(?:document|window\.document)\.querySelector\(\s*["']([^"']+)["']\s*\)\.play\s*\(/g,
92
+ pattern: /\b(?:document|window\.document)\.getElementById\(\s*["']([^"']+)["']\s*\)\.muted\s*=/g,
93
+ kind: "muted assignment",
94
+ targetIndex: 1,
95
+ },
96
+ {
97
+ pattern: /\b(?:document|window\.document)\.querySelector\(\s*(["'])([\s\S]*?)\1\s*\)\.play\s*\(/g,
61
98
  kind: "play()",
99
+ targetIndex: 2,
62
100
  },
63
101
  {
64
- pattern: /\b(?:document|window\.document)\.querySelector\(\s*["']([^"']+)["']\s*\)\.pause\s*\(/g,
102
+ pattern: /\b(?:document|window\.document)\.querySelector\(\s*(["'])([\s\S]*?)\1\s*\)\.pause\s*\(/g,
65
103
  kind: "pause()",
104
+ targetIndex: 2,
66
105
  },
67
106
  {
68
- pattern: /\b(?:document|window\.document)\.querySelector\(\s*["']([^"']+)["']\s*\)\.currentTime\s*=/g,
107
+ pattern: /\b(?:document|window\.document)\.querySelector\(\s*(["'])([\s\S]*?)\1\s*\)\.currentTime\s*=/g,
69
108
  kind: "currentTime",
109
+ targetIndex: 2,
110
+ },
111
+ {
112
+ pattern: /\b(?:document|window\.document)\.querySelector\(\s*(["'])([\s\S]*?)\1\s*\)\.muted\s*=/g,
113
+ kind: "muted assignment",
114
+ targetIndex: 2,
70
115
  },
71
116
  ];
72
- for (const { pattern, kind } of directIdPatterns) {
117
+ for (const { pattern, kind, targetIndex } of directIdPatterns) {
73
118
  let match;
74
119
  while ((match = pattern.exec(script.content)) !== null) {
75
- const target = match[1];
120
+ const target = match[targetIndex];
76
121
  if (!target)
77
122
  continue;
78
- const elementId = managedMediaIds.has(target)
123
+ const elementId = mediaIndex.ids.has(target)
79
124
  ? target
80
- : selectorTargetsManagedMedia(target, managedMediaIds)
125
+ : selectorTargetsManagedMedia(target, mediaIndex)
81
126
  ? undefined
82
127
  : null;
83
128
  if (elementId === null)
@@ -87,7 +132,7 @@ function findImperativeMediaControlFindings(ctx) {
87
132
  severity: "error",
88
133
  message: `Inline <script> imperatively controls managed media via ${kind}. HyperFrames must own media play/pause/seek to keep preview, timeline, and renders deterministic.`,
89
134
  elementId: elementId || undefined,
90
- fixHint: "Remove imperative media play/pause/currentTime control. Express timing with data-start/data-duration and media offsets like data-media-start or data-playback-start instead.",
135
+ fixHint: "Remove imperative media play/pause/currentTime/muted control. Express timing with data-start/data-duration and media offsets like data-media-start or data-playback-start instead.",
91
136
  snippet: truncateSnippet(match[0]),
92
137
  });
93
138
  }
@@ -98,6 +143,10 @@ function findImperativeMediaControlFindings(ctx) {
98
143
  { pattern: new RegExp(`\\b${escapedVar}\\.play\\s*\\(`, "g"), kind: "play()" },
99
144
  { pattern: new RegExp(`\\b${escapedVar}\\.pause\\s*\\(`, "g"), kind: "pause()" },
100
145
  { pattern: new RegExp(`\\b${escapedVar}\\.currentTime\\s*=`, "g"), kind: "currentTime" },
146
+ {
147
+ pattern: new RegExp(`\\b${escapedVar}\\.muted\\s*=`, "g"),
148
+ kind: "muted assignment",
149
+ },
101
150
  ];
102
151
  for (const { pattern, kind } of variablePatterns) {
103
152
  let match;
@@ -107,7 +156,7 @@ function findImperativeMediaControlFindings(ctx) {
107
156
  severity: "error",
108
157
  message: `Inline <script> imperatively controls managed media via ${kind}. HyperFrames must own media play/pause/seek to keep preview, timeline, and renders deterministic.`,
109
158
  elementId,
110
- fixHint: "Remove imperative media play/pause/currentTime control. Express timing with data-start/data-duration and media offsets like data-media-start or data-playback-start instead.",
159
+ fixHint: "Remove imperative media play/pause/currentTime/muted control. Express timing with data-start/data-duration and media offsets like data-media-start or data-playback-start instead.",
111
160
  snippet: truncateSnippet(match[0]),
112
161
  });
113
162
  }
@@ -171,15 +220,27 @@ export const mediaRules = [
171
220
  for (const tag of tags) {
172
221
  if (tag.name !== "video")
173
222
  continue;
174
- const hasMuted = /\bmuted\b/i.test(tag.raw);
175
- if (!hasMuted && readAttr(tag.raw, "data-start")) {
223
+ const hasMuted = hasAttrName(tag.raw, "muted");
224
+ const hasDeclaredAudio = readAttr(tag.raw, "data-has-audio") === "true";
225
+ if (!hasMuted && !hasDeclaredAudio && readAttr(tag.raw, "data-start")) {
176
226
  const elementId = readAttr(tag.raw, "id") || undefined;
177
227
  findings.push({
178
228
  code: "video_missing_muted",
179
229
  severity: "error",
180
- message: `<video${elementId ? ` id="${elementId}"` : ""}> has data-start but is not muted. The framework expects video to be muted with a separate <audio> element for sound.`,
230
+ message: `<video${elementId ? ` id="${elementId}"` : ""}> has data-start but is not muted. Mark audible videos with data-has-audio="true"; otherwise keep video muted and use a separate <audio> element for sound.`,
181
231
  elementId,
182
- fixHint: "Add the `muted` attribute to the <video> tag and use a separate <audio> element with the same src for audio playback.",
232
+ fixHint: 'Add the `muted` attribute for silent video, or add data-has-audio="true" when the video track should contribute audio.',
233
+ snippet: truncateSnippet(tag.raw),
234
+ });
235
+ }
236
+ if (hasMuted && hasDeclaredAudio) {
237
+ const elementId = readAttr(tag.raw, "id") || undefined;
238
+ findings.push({
239
+ code: "video_muted_with_declared_audio",
240
+ severity: "error",
241
+ message: `<video${elementId ? ` id="${elementId}"` : ""}> declares data-has-audio="true" but also has muted. Studio preview will silence the video audio.`,
242
+ elementId,
243
+ fixHint: 'Remove the `muted` attribute if this video should be audible, or remove data-has-audio="true" and use data-volume="0" for silent visual video.',
183
244
  snippet: truncateSnippet(tag.raw),
184
245
  });
185
246
  }
@@ -312,7 +373,7 @@ export const mediaRules = [
312
373
  }
313
374
  return findings;
314
375
  },
315
- // media_missing_id + media_missing_src + media_preload_none
376
+ // media_missing_data_start + media_missing_id + media_missing_src + media_preload_none
316
377
  ({ tags }) => {
317
378
  const findings = [];
318
379
  for (const tag of tags) {
@@ -321,6 +382,16 @@ export const mediaRules = [
321
382
  const hasDataStart = readAttr(tag.raw, "data-start");
322
383
  const hasId = readAttr(tag.raw, "id");
323
384
  const hasSrc = readAttr(tag.raw, "src");
385
+ if (hasSrc && !hasDataStart) {
386
+ findings.push({
387
+ code: "media_missing_data_start",
388
+ severity: "error",
389
+ message: `<${tag.name}${hasId ? ` id="${hasId}"` : ""}> has src but no data-start. HyperFrames cannot own playback for untimed media, so preview and render behavior can diverge.`,
390
+ elementId: hasId || undefined,
391
+ fixHint: `Add data-start="0" (or the intended start time) and data-duration if the clip should stop before the source ends.`,
392
+ snippet: truncateSnippet(tag.raw),
393
+ });
394
+ }
324
395
  if (hasDataStart && !hasId) {
325
396
  findings.push({
326
397
  code: "media_missing_id",