@hyperframes/core 0.1.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 (103) hide show
  1. package/README.md +125 -0
  2. package/dist/adapters/gsap.d.ts +14 -0
  3. package/dist/adapters/gsap.d.ts.map +1 -0
  4. package/dist/adapters/gsap.js +25 -0
  5. package/dist/adapters/gsap.js.map +1 -0
  6. package/dist/adapters/index.d.ts +4 -0
  7. package/dist/adapters/index.d.ts.map +1 -0
  8. package/dist/adapters/index.js +2 -0
  9. package/dist/adapters/index.js.map +1 -0
  10. package/dist/adapters/types.d.ts +15 -0
  11. package/dist/adapters/types.d.ts.map +1 -0
  12. package/dist/adapters/types.js +2 -0
  13. package/dist/adapters/types.js.map +1 -0
  14. package/dist/compiler/htmlBundler.d.ts +16 -0
  15. package/dist/compiler/htmlBundler.d.ts.map +1 -0
  16. package/dist/compiler/htmlBundler.js +448 -0
  17. package/dist/compiler/htmlBundler.js.map +1 -0
  18. package/dist/compiler/htmlCompiler.d.ts +18 -0
  19. package/dist/compiler/htmlCompiler.d.ts.map +1 -0
  20. package/dist/compiler/htmlCompiler.js +65 -0
  21. package/dist/compiler/htmlCompiler.js.map +1 -0
  22. package/dist/compiler/index.d.ts +5 -0
  23. package/dist/compiler/index.d.ts.map +1 -0
  24. package/dist/compiler/index.js +9 -0
  25. package/dist/compiler/index.js.map +1 -0
  26. package/dist/compiler/staticGuard.d.ts +8 -0
  27. package/dist/compiler/staticGuard.d.ts.map +1 -0
  28. package/dist/compiler/staticGuard.js +26 -0
  29. package/dist/compiler/staticGuard.js.map +1 -0
  30. package/dist/compiler/timingCompiler.d.ts +72 -0
  31. package/dist/compiler/timingCompiler.d.ts.map +1 -0
  32. package/dist/compiler/timingCompiler.js +191 -0
  33. package/dist/compiler/timingCompiler.js.map +1 -0
  34. package/dist/core.types.d.ts +314 -0
  35. package/dist/core.types.d.ts.map +1 -0
  36. package/dist/core.types.js +52 -0
  37. package/dist/core.types.js.map +1 -0
  38. package/dist/generators/hyperframes.d.ts +21 -0
  39. package/dist/generators/hyperframes.d.ts.map +1 -0
  40. package/dist/generators/hyperframes.js +572 -0
  41. package/dist/generators/hyperframes.js.map +1 -0
  42. package/dist/hyperframe.manifest.json +22 -0
  43. package/dist/hyperframe.runtime.iife.js +13 -0
  44. package/dist/hyperframe.runtime.mjs +13 -0
  45. package/dist/index.d.ts +23 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +16 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/inline-scripts/hyperframe.d.ts +13 -0
  50. package/dist/inline-scripts/hyperframe.d.ts.map +1 -0
  51. package/dist/inline-scripts/hyperframe.js +15 -0
  52. package/dist/inline-scripts/hyperframe.js.map +1 -0
  53. package/dist/inline-scripts/hyperframesRuntime.engine.d.ts +7 -0
  54. package/dist/inline-scripts/hyperframesRuntime.engine.d.ts.map +1 -0
  55. package/dist/inline-scripts/hyperframesRuntime.engine.js +31 -0
  56. package/dist/inline-scripts/hyperframesRuntime.engine.js.map +1 -0
  57. package/dist/inline-scripts/parityContract.d.ts +5 -0
  58. package/dist/inline-scripts/parityContract.d.ts.map +1 -0
  59. package/dist/inline-scripts/parityContract.js +43 -0
  60. package/dist/inline-scripts/parityContract.js.map +1 -0
  61. package/dist/inline-scripts/pickerApi.d.ts +32 -0
  62. package/dist/inline-scripts/pickerApi.d.ts.map +1 -0
  63. package/dist/inline-scripts/pickerApi.js +2 -0
  64. package/dist/inline-scripts/pickerApi.js.map +1 -0
  65. package/dist/inline-scripts/runtimeContract.d.ts +14 -0
  66. package/dist/inline-scripts/runtimeContract.d.ts.map +1 -0
  67. package/dist/inline-scripts/runtimeContract.js +21 -0
  68. package/dist/inline-scripts/runtimeContract.js.map +1 -0
  69. package/dist/lint/hyperframeLinter.d.ts +3 -0
  70. package/dist/lint/hyperframeLinter.d.ts.map +1 -0
  71. package/dist/lint/hyperframeLinter.js +621 -0
  72. package/dist/lint/hyperframeLinter.js.map +1 -0
  73. package/dist/lint/index.d.ts +3 -0
  74. package/dist/lint/index.d.ts.map +1 -0
  75. package/dist/lint/index.js +2 -0
  76. package/dist/lint/index.js.map +1 -0
  77. package/dist/lint/types.d.ts +21 -0
  78. package/dist/lint/types.d.ts.map +1 -0
  79. package/dist/lint/types.js +2 -0
  80. package/dist/lint/types.js.map +1 -0
  81. package/dist/parsers/gsapParser.d.ts +50 -0
  82. package/dist/parsers/gsapParser.d.ts.map +1 -0
  83. package/dist/parsers/gsapParser.js +411 -0
  84. package/dist/parsers/gsapParser.js.map +1 -0
  85. package/dist/parsers/htmlParser.d.ts +29 -0
  86. package/dist/parsers/htmlParser.d.ts.map +1 -0
  87. package/dist/parsers/htmlParser.js +726 -0
  88. package/dist/parsers/htmlParser.js.map +1 -0
  89. package/dist/templates/base.d.ts +4 -0
  90. package/dist/templates/base.d.ts.map +1 -0
  91. package/dist/templates/base.js +20 -0
  92. package/dist/templates/base.js.map +1 -0
  93. package/dist/templates/constants.d.ts +7 -0
  94. package/dist/templates/constants.d.ts.map +1 -0
  95. package/dist/templates/constants.js +8 -0
  96. package/dist/templates/constants.js.map +1 -0
  97. package/docs/common-mistakes.md +73 -0
  98. package/docs/core.md +532 -0
  99. package/docs/core_notes.md +61 -0
  100. package/docs/quickstart-template.html +180 -0
  101. package/docs/versions/changelog.md +5 -0
  102. package/docs/versions/v0.1/core.md +326 -0
  103. package/package.json +83 -0
@@ -0,0 +1,621 @@
1
+ import { parseGsapScript } from "../parsers/gsapParser";
2
+ const TAG_PATTERN = /<([a-z][\w:-]*)(\s[^<>]*?)?>/gi;
3
+ const STYLE_BLOCK_PATTERN = /<style\b([^>]*)>([\s\S]*?)<\/style>/gi;
4
+ const SCRIPT_BLOCK_PATTERN = /<script\b([^>]*)>([\s\S]*?)<\/script>/gi;
5
+ const COMPOSITION_ID_IN_CSS_PATTERN = /\[data-composition-id=["']([^"']+)["']\]/g;
6
+ const TIMELINE_REGISTRY_INIT_PATTERN = /window\.__timelines\s*=\s*window\.__timelines\s*\|\|\s*\{\}|window\.__timelines\s*=\s*\{\}|window\.__timelines\s*\?\?=\s*\{\}/i;
7
+ const TIMELINE_REGISTRY_ASSIGN_PATTERN = /window\.__timelines\[[^\]]+\]\s*=/i;
8
+ const INVALID_SCRIPT_CLOSE_PATTERN = /<script[^>]*>[\s\S]*?<\s*\/\s*script(?!>)/i;
9
+ const WINDOW_TIMELINE_ASSIGN_PATTERN = /window\.__timelines\[\s*["']([^"']+)["']\s*\]\s*=\s*([A-Za-z_$][\w$]*)/i;
10
+ const META_GSAP_KEYS = new Set(["duration", "ease", "repeat", "yoyo", "overwrite", "delay"]);
11
+ export function lintHyperframeHtml(html, options = {}) {
12
+ const source = html || "";
13
+ const filePath = options.filePath;
14
+ const findings = [];
15
+ const seen = new Set();
16
+ const pushFinding = (finding) => {
17
+ const dedupeKey = [
18
+ finding.code,
19
+ finding.severity,
20
+ finding.selector || "",
21
+ finding.elementId || "",
22
+ finding.message,
23
+ ].join("|");
24
+ if (seen.has(dedupeKey)) {
25
+ return;
26
+ }
27
+ seen.add(dedupeKey);
28
+ findings.push(filePath ? { ...finding, file: filePath } : finding);
29
+ };
30
+ const tags = extractOpenTags(source);
31
+ const styles = extractBlocks(source, STYLE_BLOCK_PATTERN);
32
+ const scripts = extractBlocks(source, SCRIPT_BLOCK_PATTERN);
33
+ const compositionIds = collectCompositionIds(tags);
34
+ const rootTag = findRootTag(source);
35
+ const rootCompositionId = readAttr(rootTag?.raw || "", "data-composition-id");
36
+ if (!rootTag || !readAttr(rootTag.raw, "data-composition-id")) {
37
+ pushFinding({
38
+ code: "root_missing_composition_id",
39
+ severity: "error",
40
+ message: "Root composition is missing `data-composition-id`.",
41
+ elementId: rootTag ? readAttr(rootTag.raw, "id") || undefined : undefined,
42
+ fixHint: "Add a stable `data-composition-id` to the entry composition wrapper.",
43
+ snippet: truncateSnippet(rootTag?.raw || ""),
44
+ });
45
+ }
46
+ if (!rootTag || !readAttr(rootTag.raw, "data-width") || !readAttr(rootTag.raw, "data-height")) {
47
+ pushFinding({
48
+ code: "root_missing_dimensions",
49
+ severity: "error",
50
+ message: "Root composition is missing `data-width` or `data-height`.",
51
+ elementId: rootTag ? readAttr(rootTag.raw, "id") || undefined : undefined,
52
+ fixHint: "Set numeric `data-width` and `data-height` on the entry composition root.",
53
+ snippet: truncateSnippet(rootTag?.raw || ""),
54
+ });
55
+ }
56
+ if (!TIMELINE_REGISTRY_INIT_PATTERN.test(source) && !TIMELINE_REGISTRY_ASSIGN_PATTERN.test(source)) {
57
+ pushFinding({
58
+ code: "missing_timeline_registry",
59
+ severity: "error",
60
+ message: "Missing `window.__timelines` registration.",
61
+ fixHint: "Register each composition timeline on `window.__timelines[compositionId]`.",
62
+ });
63
+ }
64
+ if (INVALID_SCRIPT_CLOSE_PATTERN.test(source)) {
65
+ pushFinding({
66
+ code: "invalid_inline_script_syntax",
67
+ severity: "error",
68
+ message: "Detected malformed inline `<script>` closing syntax.",
69
+ fixHint: "Close inline scripts with a valid `</script>` tag.",
70
+ });
71
+ }
72
+ for (const script of scripts) {
73
+ const attrs = script.attrs || "";
74
+ if (/\bsrc\s*=/.test(attrs) || /\btype\s*=\s*["']application\/json["']/.test(attrs)) {
75
+ continue;
76
+ }
77
+ const syntaxError = getInlineScriptSyntaxError(script.content);
78
+ if (!syntaxError) {
79
+ continue;
80
+ }
81
+ pushFinding({
82
+ code: "invalid_inline_script_syntax",
83
+ severity: "error",
84
+ message: `Inline script has invalid syntax: ${syntaxError}`,
85
+ fixHint: "Fix the inline script syntax before render verification.",
86
+ snippet: truncateSnippet(script.content),
87
+ });
88
+ }
89
+ for (const tag of tags) {
90
+ const src = readAttr(tag.raw, "data-composition-src");
91
+ if (!src) {
92
+ continue;
93
+ }
94
+ const compId = readAttr(tag.raw, "data-composition-id");
95
+ if (compId) {
96
+ continue;
97
+ }
98
+ pushFinding({
99
+ code: "host_missing_composition_id",
100
+ severity: "error",
101
+ message: `Composition host for "${src}" is missing \`data-composition-id\`.`,
102
+ elementId: readAttr(tag.raw, "id") || undefined,
103
+ fixHint: "Set `data-composition-id` on every `data-composition-src` host element.",
104
+ snippet: truncateSnippet(tag.raw),
105
+ });
106
+ }
107
+ const scopedCssCompositionIds = new Set();
108
+ for (const style of styles) {
109
+ for (const compId of extractCompositionIdsFromCss(style.content)) {
110
+ scopedCssCompositionIds.add(compId);
111
+ }
112
+ }
113
+ for (const compId of scopedCssCompositionIds) {
114
+ if (compositionIds.has(compId)) {
115
+ continue;
116
+ }
117
+ pushFinding({
118
+ code: "scoped_css_missing_wrapper",
119
+ severity: "warning",
120
+ message: `Scoped CSS targets composition "${compId}" but no matching wrapper exists in this HTML.`,
121
+ selector: `[data-composition-id="${compId}"]`,
122
+ fixHint: "Preserve the matching composition wrapper or align the CSS scope to an existing wrapper.",
123
+ });
124
+ }
125
+ const mediaById = new Map();
126
+ const mediaFingerprintCounts = new Map();
127
+ for (const tag of tags) {
128
+ if (!isMediaTag(tag.name)) {
129
+ continue;
130
+ }
131
+ const elementId = readAttr(tag.raw, "id");
132
+ if (elementId) {
133
+ const existing = mediaById.get(elementId) || [];
134
+ existing.push(tag);
135
+ mediaById.set(elementId, existing);
136
+ }
137
+ const fingerprint = [
138
+ tag.name,
139
+ readAttr(tag.raw, "src") || "",
140
+ readAttr(tag.raw, "data-start") || "",
141
+ readAttr(tag.raw, "data-duration") || "",
142
+ ].join("|");
143
+ mediaFingerprintCounts.set(fingerprint, (mediaFingerprintCounts.get(fingerprint) || 0) + 1);
144
+ }
145
+ for (const [elementId, mediaTags] of mediaById) {
146
+ if (mediaTags.length < 2) {
147
+ continue;
148
+ }
149
+ pushFinding({
150
+ code: "duplicate_media_id",
151
+ severity: "error",
152
+ message: `Media id "${elementId}" is defined multiple times.`,
153
+ elementId,
154
+ fixHint: "Give each media element a unique id so preview and producer discover the same media graph.",
155
+ snippet: truncateSnippet(mediaTags[0]?.raw || ""),
156
+ });
157
+ }
158
+ for (const [fingerprint, count] of mediaFingerprintCounts) {
159
+ if (count < 2) {
160
+ continue;
161
+ }
162
+ const [tagName, src, dataStart, dataDuration] = fingerprint.split("|");
163
+ pushFinding({
164
+ code: "duplicate_media_discovery_risk",
165
+ severity: "warning",
166
+ message: `Detected ${count} matching ${tagName} entries with the same source/start/duration.`,
167
+ fixHint: "Avoid duplicated media nodes that can be discovered twice during compilation.",
168
+ snippet: truncateSnippet(`${tagName} src=${src} data-start=${dataStart} data-duration=${dataDuration}`),
169
+ });
170
+ }
171
+ const classUsage = countClassUsage(tags);
172
+ for (const script of scripts) {
173
+ const localTimelineCompId = readRegisteredTimelineCompositionId(script.content);
174
+ const gsapWindows = extractGsapWindows(script.content);
175
+ for (let i = 0; i < gsapWindows.length; i++) {
176
+ const left = gsapWindows[i];
177
+ if (!left)
178
+ continue;
179
+ if (left.end <= left.position) {
180
+ continue;
181
+ }
182
+ for (let j = i + 1; j < gsapWindows.length; j++) {
183
+ const right = gsapWindows[j];
184
+ if (!right)
185
+ continue;
186
+ if (right.end <= right.position) {
187
+ continue;
188
+ }
189
+ if (left.targetSelector !== right.targetSelector) {
190
+ continue;
191
+ }
192
+ const overlapStart = Math.max(left.position, right.position);
193
+ const overlapEnd = Math.min(left.end, right.end);
194
+ if (overlapEnd <= overlapStart) {
195
+ continue;
196
+ }
197
+ if (left.overwriteAuto || right.overwriteAuto) {
198
+ continue;
199
+ }
200
+ const sharedProperties = left.properties.filter((prop) => right.properties.includes(prop));
201
+ if (sharedProperties.length === 0) {
202
+ continue;
203
+ }
204
+ pushFinding({
205
+ code: "overlapping_gsap_tweens",
206
+ severity: "warning",
207
+ message: `GSAP tweens overlap on "${left.targetSelector}" for ${sharedProperties.join(", ")} between ${overlapStart.toFixed(2)}s and ${overlapEnd.toFixed(2)}s.`,
208
+ selector: left.targetSelector,
209
+ fixHint: 'Shorten the earlier tween, move the later tween, or add `overwrite: "auto"`.',
210
+ snippet: truncateSnippet(`${left.raw}\n${right.raw}`),
211
+ });
212
+ }
213
+ }
214
+ if (!localTimelineCompId || localTimelineCompId === rootCompositionId) {
215
+ continue;
216
+ }
217
+ for (const window of gsapWindows) {
218
+ if (!isSuspiciousGlobalSelector(window.targetSelector)) {
219
+ continue;
220
+ }
221
+ const className = getSingleClassSelector(window.targetSelector);
222
+ if (className && (classUsage.get(className) || 0) < 2) {
223
+ continue;
224
+ }
225
+ pushFinding({
226
+ code: "suspicious_global_gsap_selector",
227
+ severity: "warning",
228
+ message: `Timeline "${localTimelineCompId}" uses a global selector "${window.targetSelector}" that may escape composition scope.`,
229
+ selector: window.targetSelector,
230
+ fixHint: `Scope the selector like \`[data-composition-id="${localTimelineCompId}"] ${window.targetSelector}\` or use a unique id.`,
231
+ snippet: truncateSnippet(window.raw),
232
+ });
233
+ }
234
+ }
235
+ // ── Composition pitfall checks ──────────────────────────────────────────
236
+ // #2: Video without muted attribute (audio should come from separate <audio>)
237
+ for (const tag of tags) {
238
+ if (tag.name !== "video")
239
+ continue;
240
+ const hasMuted = /\bmuted\b/i.test(tag.raw);
241
+ if (!hasMuted && readAttr(tag.raw, "data-start")) {
242
+ const elementId = readAttr(tag.raw, "id") || undefined;
243
+ pushFinding({
244
+ code: "video_missing_muted",
245
+ severity: "error",
246
+ 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.`,
247
+ elementId,
248
+ fixHint: "Add the `muted` attribute to the <video> tag and use a separate <audio> element with the same src for audio playback.",
249
+ snippet: truncateSnippet(tag.raw),
250
+ });
251
+ }
252
+ }
253
+ // #3: Video nested inside a timed element (data-start on ancestor)
254
+ // Approximation: check if a <video data-start> appears inside another element with data-start
255
+ // by scanning for video tags whose raw position is between another timed element's open/close
256
+ const timedTagPositions = [];
257
+ for (const tag of tags) {
258
+ if (tag.name === "video" || tag.name === "audio")
259
+ continue;
260
+ if (readAttr(tag.raw, "data-start")) {
261
+ timedTagPositions.push({ name: tag.name, start: tag.index, id: readAttr(tag.raw, "id") || undefined });
262
+ }
263
+ }
264
+ for (const tag of tags) {
265
+ if (tag.name !== "video")
266
+ continue;
267
+ if (!readAttr(tag.raw, "data-start"))
268
+ continue;
269
+ // Check if any timed non-media element appears before this video in the source
270
+ // and could be an ancestor (heuristic — not a full DOM parse)
271
+ for (const parent of timedTagPositions) {
272
+ if (parent.start < tag.index) {
273
+ // Check if there's a closing tag for the parent between parent.start and tag.index
274
+ const parentClosePattern = new RegExp(`</${parent.name}>`, "gi");
275
+ const between = source.substring(parent.start, tag.index);
276
+ if (!parentClosePattern.test(between)) {
277
+ pushFinding({
278
+ code: "video_nested_in_timed_element",
279
+ severity: "warning",
280
+ message: `<video> with data-start appears to be nested inside <${parent.name}${parent.id ? ` id="${parent.id}"` : ""}> which also has data-start. This can break media sync.`,
281
+ elementId: readAttr(tag.raw, "id") || undefined,
282
+ fixHint: "Move the <video> to be a direct child of the stage, or remove data-start from the wrapper div (use it as a non-timed visual container).",
283
+ snippet: truncateSnippet(tag.raw),
284
+ });
285
+ break; // Only report once per video
286
+ }
287
+ }
288
+ }
289
+ }
290
+ // #4: Timed element missing visibility:hidden (no class="clip" or equivalent)
291
+ for (const tag of tags) {
292
+ if (tag.name === "audio" || tag.name === "script" || tag.name === "style")
293
+ continue;
294
+ if (!readAttr(tag.raw, "data-start"))
295
+ continue;
296
+ const classAttr = readAttr(tag.raw, "class") || "";
297
+ const styleAttr = readAttr(tag.raw, "style") || "";
298
+ const hasClip = classAttr.split(/\s+/).includes("clip");
299
+ const hasHiddenStyle = /visibility\s*:\s*hidden/i.test(styleAttr);
300
+ if (!hasClip && !hasHiddenStyle) {
301
+ const elementId = readAttr(tag.raw, "id") || undefined;
302
+ pushFinding({
303
+ code: "timed_element_missing_visibility_hidden",
304
+ severity: "warning",
305
+ message: `<${tag.name}${elementId ? ` id="${elementId}"` : ""}> has data-start but no class="clip" or visibility:hidden. The framework needs elements to start hidden so it can manage their lifecycle.`,
306
+ elementId,
307
+ fixHint: 'Add class="clip" to the element (with CSS: .clip { visibility: hidden; }).',
308
+ snippet: truncateSnippet(tag.raw),
309
+ });
310
+ }
311
+ }
312
+ // #5: Deprecated attribute names
313
+ for (const tag of tags) {
314
+ if (readAttr(tag.raw, "data-layer") && !readAttr(tag.raw, "data-track-index")) {
315
+ const elementId = readAttr(tag.raw, "id") || undefined;
316
+ pushFinding({
317
+ code: "deprecated_data_layer",
318
+ severity: "warning",
319
+ message: `<${tag.name}${elementId ? ` id="${elementId}"` : ""}> uses data-layer instead of data-track-index.`,
320
+ elementId,
321
+ fixHint: "Replace data-layer with data-track-index. The runtime reads data-track-index.",
322
+ snippet: truncateSnippet(tag.raw),
323
+ });
324
+ }
325
+ if (readAttr(tag.raw, "data-end") && !readAttr(tag.raw, "data-duration")) {
326
+ const elementId = readAttr(tag.raw, "id") || undefined;
327
+ pushFinding({
328
+ code: "deprecated_data_end",
329
+ severity: "warning",
330
+ message: `<${tag.name}${elementId ? ` id="${elementId}"` : ""}> uses data-end without data-duration. Use data-duration in source HTML.`,
331
+ elementId,
332
+ fixHint: "Replace data-end with data-duration. The compiler generates data-end from data-duration automatically.",
333
+ snippet: truncateSnippet(tag.raw),
334
+ });
335
+ }
336
+ }
337
+ const errorCount = findings.filter((finding) => finding.severity === "error").length;
338
+ const warningCount = findings.length - errorCount;
339
+ return {
340
+ ok: errorCount === 0,
341
+ errorCount,
342
+ warningCount,
343
+ findings,
344
+ };
345
+ }
346
+ function extractOpenTags(source) {
347
+ const tags = [];
348
+ let match;
349
+ while ((match = TAG_PATTERN.exec(source)) !== null) {
350
+ const raw = match[0];
351
+ if (raw.startsWith("</") || raw.startsWith("<!")) {
352
+ continue;
353
+ }
354
+ tags.push({
355
+ raw,
356
+ name: (match[1] || "").toLowerCase(),
357
+ attrs: match[2] || "",
358
+ index: match.index,
359
+ });
360
+ }
361
+ return tags;
362
+ }
363
+ function extractBlocks(source, pattern) {
364
+ const blocks = [];
365
+ let match;
366
+ while ((match = pattern.exec(source)) !== null) {
367
+ blocks.push({
368
+ attrs: match[1] || "",
369
+ content: match[2] || "",
370
+ raw: match[0],
371
+ index: match.index,
372
+ });
373
+ }
374
+ return blocks;
375
+ }
376
+ function findRootTag(source) {
377
+ const bodyMatch = source.match(/<body\b[^>]*>([\s\S]*?)<\/body>/i);
378
+ const bodyContent = bodyMatch ? bodyMatch[1] ?? source : source;
379
+ const bodyTags = extractOpenTags(bodyContent);
380
+ for (const tag of bodyTags) {
381
+ if (["script", "style", "meta", "link", "title"].includes(tag.name)) {
382
+ continue;
383
+ }
384
+ return tag;
385
+ }
386
+ return null;
387
+ }
388
+ function readAttr(tagSource, attr) {
389
+ if (!tagSource) {
390
+ return null;
391
+ }
392
+ const escaped = attr.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
393
+ const match = tagSource.match(new RegExp(`\\b${escaped}\\s*=\\s*["']([^"']+)["']`, "i"));
394
+ return match?.[1] || null;
395
+ }
396
+ function collectCompositionIds(tags) {
397
+ const ids = new Set();
398
+ for (const tag of tags) {
399
+ const compId = readAttr(tag.raw, "data-composition-id");
400
+ if (compId) {
401
+ ids.add(compId);
402
+ }
403
+ }
404
+ return ids;
405
+ }
406
+ function extractCompositionIdsFromCss(css) {
407
+ const ids = new Set();
408
+ let match;
409
+ while ((match = COMPOSITION_ID_IN_CSS_PATTERN.exec(css)) !== null) {
410
+ if (match[1]) {
411
+ ids.add(match[1]);
412
+ }
413
+ }
414
+ return [...ids];
415
+ }
416
+ function getInlineScriptSyntaxError(source) {
417
+ if (!source.trim()) {
418
+ return null;
419
+ }
420
+ try {
421
+ // eslint-disable-next-line no-new-func
422
+ new Function(source);
423
+ return null;
424
+ }
425
+ catch (error) {
426
+ if (error instanceof Error) {
427
+ return error.message;
428
+ }
429
+ return String(error);
430
+ }
431
+ }
432
+ function isMediaTag(tagName) {
433
+ return tagName === "video" || tagName === "audio" || tagName === "img";
434
+ }
435
+ function countClassUsage(tags) {
436
+ const counts = new Map();
437
+ for (const tag of tags) {
438
+ const classAttr = readAttr(tag.raw, "class");
439
+ if (!classAttr) {
440
+ continue;
441
+ }
442
+ for (const className of classAttr.split(/\s+/).filter(Boolean)) {
443
+ counts.set(className, (counts.get(className) || 0) + 1);
444
+ }
445
+ }
446
+ return counts;
447
+ }
448
+ function readRegisteredTimelineCompositionId(script) {
449
+ const match = script.match(WINDOW_TIMELINE_ASSIGN_PATTERN);
450
+ return match?.[1] || null;
451
+ }
452
+ function extractGsapWindows(script) {
453
+ if (!/gsap\.timeline/.test(script)) {
454
+ return [];
455
+ }
456
+ const parsed = parseGsapScript(script);
457
+ if (parsed.animations.length === 0) {
458
+ return [];
459
+ }
460
+ const windows = [];
461
+ const timelineVar = parsed.timelineVar;
462
+ const methodPattern = new RegExp(`${timelineVar}\\.(set|to|from|fromTo)\\s*\\(([^)]+(?:\\{[^}]*\\}[^)]*)+)\\)`, "g");
463
+ let match;
464
+ let index = 0;
465
+ while ((match = methodPattern.exec(script)) !== null && index < parsed.animations.length) {
466
+ const raw = match[0];
467
+ const meta = parseGsapWindowMeta(match[1] ?? "", match[2] ?? "");
468
+ const animation = parsed.animations[index];
469
+ index += 1;
470
+ if (!animation) {
471
+ continue;
472
+ }
473
+ windows.push({
474
+ targetSelector: animation.targetSelector,
475
+ position: animation.position,
476
+ end: animation.position + meta.effectiveDuration,
477
+ properties: meta.properties.length > 0 ? meta.properties : Object.keys(animation.properties),
478
+ overwriteAuto: meta.overwriteAuto,
479
+ raw,
480
+ });
481
+ }
482
+ return windows;
483
+ }
484
+ function parseGsapWindowMeta(method, argsStr) {
485
+ const selectorMatch = argsStr.match(/^\s*["']([^"']+)["']\s*,/);
486
+ if (!selectorMatch) {
487
+ return { effectiveDuration: 0, properties: [], overwriteAuto: false };
488
+ }
489
+ const afterSelector = argsStr.slice(selectorMatch[0].length);
490
+ let properties = {};
491
+ let fromProperties = {};
492
+ if (method === "fromTo") {
493
+ const firstBrace = afterSelector.indexOf("{");
494
+ const firstEnd = findMatchingBrace(afterSelector, firstBrace);
495
+ if (firstBrace !== -1 && firstEnd !== -1) {
496
+ fromProperties = parseLooseObjectLiteral(afterSelector.slice(firstBrace, firstEnd + 1));
497
+ const secondPart = afterSelector.slice(firstEnd + 1);
498
+ const secondBrace = secondPart.indexOf("{");
499
+ const secondEnd = findMatchingBrace(secondPart, secondBrace);
500
+ if (secondBrace !== -1 && secondEnd !== -1) {
501
+ properties = parseLooseObjectLiteral(secondPart.slice(secondBrace, secondEnd + 1));
502
+ }
503
+ }
504
+ }
505
+ else {
506
+ const braceStart = afterSelector.indexOf("{");
507
+ const braceEnd = findMatchingBrace(afterSelector, braceStart);
508
+ if (braceStart !== -1 && braceEnd !== -1) {
509
+ properties = parseLooseObjectLiteral(afterSelector.slice(braceStart, braceEnd + 1));
510
+ }
511
+ }
512
+ const duration = numberValue(properties.duration) || 0;
513
+ const repeat = numberValue(properties.repeat) || 0;
514
+ const yoyo = stringValue(properties.yoyo) === "true";
515
+ const cycleCount = repeat > 0 ? repeat + 1 : 1;
516
+ const effectiveDuration = duration * cycleCount * (yoyo ? 1 : 1);
517
+ const overwriteAuto = stringValue(properties.overwrite) === "auto";
518
+ const propertyNames = new Set();
519
+ for (const key of Object.keys(fromProperties)) {
520
+ if (!META_GSAP_KEYS.has(key)) {
521
+ propertyNames.add(key);
522
+ }
523
+ }
524
+ for (const key of Object.keys(properties)) {
525
+ if (!META_GSAP_KEYS.has(key)) {
526
+ propertyNames.add(key);
527
+ }
528
+ }
529
+ return {
530
+ effectiveDuration: method === "set" ? 0 : effectiveDuration,
531
+ properties: [...propertyNames],
532
+ overwriteAuto,
533
+ };
534
+ }
535
+ function parseLooseObjectLiteral(source) {
536
+ const result = {};
537
+ const cleaned = source.replace(/^\{|\}$/g, "").trim();
538
+ if (!cleaned) {
539
+ return result;
540
+ }
541
+ const propertyPattern = /(\w+)\s*:\s*("[^"]*"|'[^']*'|true|false|-?[\d.]+|[a-zA-Z_][\w.]*)/g;
542
+ let match;
543
+ while ((match = propertyPattern.exec(cleaned)) !== null) {
544
+ const key = match[1];
545
+ const rawValue = match[2];
546
+ if (!key || rawValue == null) {
547
+ continue;
548
+ }
549
+ if ((rawValue.startsWith('"') && rawValue.endsWith('"')) || (rawValue.startsWith("'") && rawValue.endsWith("'"))) {
550
+ result[key] = rawValue.slice(1, -1);
551
+ continue;
552
+ }
553
+ const numeric = Number(rawValue);
554
+ result[key] = Number.isFinite(numeric) ? numeric : rawValue;
555
+ }
556
+ return result;
557
+ }
558
+ function findMatchingBrace(source, startIndex) {
559
+ if (startIndex < 0) {
560
+ return -1;
561
+ }
562
+ let depth = 0;
563
+ for (let i = startIndex; i < source.length; i++) {
564
+ if (source[i] === "{") {
565
+ depth += 1;
566
+ }
567
+ else if (source[i] === "}") {
568
+ depth -= 1;
569
+ if (depth === 0) {
570
+ return i;
571
+ }
572
+ }
573
+ }
574
+ return -1;
575
+ }
576
+ function numberValue(value) {
577
+ if (typeof value === "number") {
578
+ return value;
579
+ }
580
+ if (typeof value === "string" && value.trim()) {
581
+ const numeric = Number(value);
582
+ return Number.isFinite(numeric) ? numeric : null;
583
+ }
584
+ return null;
585
+ }
586
+ function stringValue(value) {
587
+ if (typeof value === "string") {
588
+ return value;
589
+ }
590
+ if (typeof value === "number") {
591
+ return String(value);
592
+ }
593
+ return null;
594
+ }
595
+ function isSuspiciousGlobalSelector(selector) {
596
+ if (!selector) {
597
+ return false;
598
+ }
599
+ if (selector.includes("[data-composition-id=")) {
600
+ return false;
601
+ }
602
+ if (selector.startsWith("#")) {
603
+ return false;
604
+ }
605
+ return selector.startsWith(".") || /^[a-z]/i.test(selector);
606
+ }
607
+ function getSingleClassSelector(selector) {
608
+ const match = selector.trim().match(/^\.(?<name>[A-Za-z0-9_-]+)$/);
609
+ return match?.groups?.name || null;
610
+ }
611
+ function truncateSnippet(value, maxLength = 220) {
612
+ const normalized = value.replace(/\s+/g, " ").trim();
613
+ if (!normalized) {
614
+ return undefined;
615
+ }
616
+ if (normalized.length <= maxLength) {
617
+ return normalized;
618
+ }
619
+ return `${normalized.slice(0, maxLength - 3)}...`;
620
+ }
621
+ //# sourceMappingURL=hyperframeLinter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hyperframeLinter.js","sourceRoot":"","sources":["../../src/lint/hyperframeLinter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export type { HyperframeLintSeverity, HyperframeLintFinding, HyperframeLintResult, HyperframeLinterOptions, } from "./types";
2
+ export { lintHyperframeHtml } from "./hyperframeLinter";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lint/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC"}