@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,448 @@
1
+ import { readFileSync, existsSync } from "fs";
2
+ import { join, resolve, isAbsolute, sep } from "path";
3
+ import * as cheerio from "cheerio";
4
+ import { transformSync } from "esbuild";
5
+ import { compileHtml } from "./htmlCompiler";
6
+ import { validateHyperframeHtmlContract } from "./staticGuard";
7
+ /** Resolve a relative path within projectDir, rejecting traversal outside it. */
8
+ function safePath(projectDir, relativePath) {
9
+ const resolved = resolve(projectDir, relativePath);
10
+ const normalizedBase = resolve(projectDir) + sep;
11
+ if (!resolved.startsWith(normalizedBase) && resolved !== resolve(projectDir))
12
+ return null;
13
+ return resolved;
14
+ }
15
+ const RUNTIME_BOOTSTRAP_ATTR = "data-hyperframes-preview-runtime";
16
+ const DEFAULT_RUNTIME_SCRIPT_URL = "";
17
+ function stripEmbeddedRuntimeScripts(html) {
18
+ if (!html)
19
+ return html;
20
+ const scriptRe = /<script\b[^>]*>[\s\S]*?<\/script>/gi;
21
+ const runtimeSrcMarkers = [
22
+ "hyperframe.runtime.iife.js",
23
+ "hyperframe-runtime.modular-runtime.inline.js",
24
+ RUNTIME_BOOTSTRAP_ATTR,
25
+ ];
26
+ const runtimeInlineMarkers = [
27
+ "__hyperframeRuntimeBootstrapped",
28
+ "__hyperframeRuntime",
29
+ "__hyperframeRuntimeTeardown",
30
+ "window.__player =",
31
+ "window.__playerReady",
32
+ "window.__renderReady",
33
+ ];
34
+ const shouldStrip = (block) => {
35
+ const lowered = block.toLowerCase();
36
+ for (const marker of runtimeSrcMarkers) {
37
+ if (lowered.includes(marker.toLowerCase()))
38
+ return true;
39
+ }
40
+ for (const marker of runtimeInlineMarkers) {
41
+ if (block.includes(marker))
42
+ return true;
43
+ }
44
+ return false;
45
+ };
46
+ return html.replace(scriptRe, (block) => (shouldStrip(block) ? "" : block));
47
+ }
48
+ function getRuntimeScriptUrl() {
49
+ const configured = (process.env.HYPERFRAME_RUNTIME_URL || "").trim();
50
+ return configured || DEFAULT_RUNTIME_SCRIPT_URL;
51
+ }
52
+ function injectInterceptor(html) {
53
+ const sanitized = stripEmbeddedRuntimeScripts(html);
54
+ if (sanitized.includes(RUNTIME_BOOTSTRAP_ATTR))
55
+ return sanitized;
56
+ const runtimeScriptUrl = getRuntimeScriptUrl().replace(/"/g, "&quot;");
57
+ const tag = `<script ${RUNTIME_BOOTSTRAP_ATTR}="1" src="${runtimeScriptUrl}"></script>`;
58
+ if (sanitized.includes("</head>")) {
59
+ return sanitized.replace("</head>", `${tag}\n</head>`);
60
+ }
61
+ const doctypeIdx = sanitized.toLowerCase().indexOf("<!doctype");
62
+ if (doctypeIdx >= 0) {
63
+ const insertPos = sanitized.indexOf(">", doctypeIdx) + 1;
64
+ return sanitized.slice(0, insertPos) + tag + sanitized.slice(insertPos);
65
+ }
66
+ return tag + sanitized;
67
+ }
68
+ function isRelativeUrl(url) {
69
+ if (!url)
70
+ return false;
71
+ return !url.startsWith("http://") && !url.startsWith("https://") && !url.startsWith("//") && !url.startsWith("data:") && !isAbsolute(url);
72
+ }
73
+ function safeReadFile(filePath) {
74
+ if (!existsSync(filePath))
75
+ return null;
76
+ try {
77
+ return readFileSync(filePath, "utf-8");
78
+ }
79
+ catch {
80
+ return null;
81
+ }
82
+ }
83
+ function safeReadFileBuffer(filePath) {
84
+ if (!existsSync(filePath))
85
+ return null;
86
+ try {
87
+ return readFileSync(filePath);
88
+ }
89
+ catch {
90
+ return null;
91
+ }
92
+ }
93
+ function splitUrlSuffix(urlValue) {
94
+ const queryIdx = urlValue.indexOf("?");
95
+ const hashIdx = urlValue.indexOf("#");
96
+ if (queryIdx < 0 && hashIdx < 0)
97
+ return { basePath: urlValue, suffix: "" };
98
+ const cutIdx = queryIdx < 0 ? hashIdx : hashIdx < 0 ? queryIdx : Math.min(queryIdx, hashIdx);
99
+ return { basePath: urlValue.slice(0, cutIdx), suffix: urlValue.slice(cutIdx) };
100
+ }
101
+ function appendSuffixToUrl(baseUrl, suffix) {
102
+ if (!suffix)
103
+ return baseUrl;
104
+ if (suffix.startsWith("#"))
105
+ return `${baseUrl}${suffix}`;
106
+ if (suffix.startsWith("?")) {
107
+ const queryWithOptionalHash = suffix.slice(1);
108
+ if (!queryWithOptionalHash)
109
+ return baseUrl;
110
+ const hashIdx = queryWithOptionalHash.indexOf("#");
111
+ const queryPart = hashIdx >= 0 ? queryWithOptionalHash.slice(0, hashIdx) : queryWithOptionalHash;
112
+ const hashPart = hashIdx >= 0 ? queryWithOptionalHash.slice(hashIdx) : "";
113
+ if (!queryPart)
114
+ return `${baseUrl}${hashPart}`;
115
+ const joiner = baseUrl.includes("?") ? "&" : "?";
116
+ return `${baseUrl}${joiner}${queryPart}${hashPart}`;
117
+ }
118
+ return baseUrl;
119
+ }
120
+ function guessMimeType(filePath) {
121
+ const l = filePath.toLowerCase();
122
+ if (l.endsWith(".svg"))
123
+ return "image/svg+xml";
124
+ if (l.endsWith(".json"))
125
+ return "application/json";
126
+ if (l.endsWith(".txt"))
127
+ return "text/plain";
128
+ if (l.endsWith(".xml"))
129
+ return "application/xml";
130
+ return "application/octet-stream";
131
+ }
132
+ function shouldInlineAsDataUrl(filePath) {
133
+ const l = filePath.toLowerCase();
134
+ return l.endsWith(".svg") || l.endsWith(".json") || l.endsWith(".txt") || l.endsWith(".xml");
135
+ }
136
+ function maybeInlineRelativeAssetUrl(urlValue, projectDir) {
137
+ if (!urlValue || !isRelativeUrl(urlValue))
138
+ return null;
139
+ const { basePath, suffix } = splitUrlSuffix(urlValue.trim());
140
+ if (!basePath)
141
+ return null;
142
+ const filePath = safePath(projectDir, basePath);
143
+ if (!filePath || !shouldInlineAsDataUrl(filePath))
144
+ return null;
145
+ const content = safeReadFileBuffer(filePath);
146
+ if (content == null)
147
+ return null;
148
+ const mimeType = guessMimeType(filePath);
149
+ const dataUrl = `data:${mimeType};base64,${content.toString("base64")}`;
150
+ return appendSuffixToUrl(dataUrl, suffix);
151
+ }
152
+ function rewriteSrcsetWithInlinedAssets(srcsetValue, projectDir) {
153
+ if (!srcsetValue)
154
+ return srcsetValue;
155
+ return srcsetValue.split(",").map((rawCandidate) => {
156
+ const candidate = rawCandidate.trim();
157
+ if (!candidate)
158
+ return candidate;
159
+ const parts = candidate.split(/\s+/);
160
+ if (parts.length === 0)
161
+ return candidate;
162
+ const maybeInlined = maybeInlineRelativeAssetUrl(parts[0] ?? "", projectDir);
163
+ if (maybeInlined)
164
+ parts[0] = maybeInlined;
165
+ return parts.join(" ");
166
+ }).join(", ");
167
+ }
168
+ function rewriteCssUrlsWithInlinedAssets(cssText, projectDir) {
169
+ if (!cssText)
170
+ return cssText;
171
+ return cssText.replace(/\burl\(\s*(["']?)([^)"']+)\1\s*\)/g, (_full, quote, rawUrl) => {
172
+ const maybeInlined = maybeInlineRelativeAssetUrl((rawUrl || "").trim(), projectDir);
173
+ if (!maybeInlined)
174
+ return _full;
175
+ return `url(${quote || ""}${maybeInlined}${quote || ""})`;
176
+ });
177
+ }
178
+ function enforceCompositionPixelSizing($) {
179
+ const compositionEls = $("[data-composition-id][data-width][data-height]").toArray();
180
+ if (compositionEls.length === 0)
181
+ return;
182
+ const sizeMap = new Map();
183
+ for (const el of compositionEls) {
184
+ const compId = $(el).attr("data-composition-id");
185
+ const w = Number($(el).attr("data-width"));
186
+ const h = Number($(el).attr("data-height"));
187
+ if (compId && Number.isFinite(w) && Number.isFinite(h) && w > 0 && h > 0) {
188
+ sizeMap.set(compId, { w, h });
189
+ }
190
+ }
191
+ if (sizeMap.size === 0)
192
+ return;
193
+ $("style").each((_, styleEl) => {
194
+ let css = $(styleEl).html() || "";
195
+ let modified = false;
196
+ for (const [compId, { w, h }] of sizeMap) {
197
+ const escaped = compId.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
198
+ const blockRe = new RegExp(`(\\[data-composition-id=["']${escaped}["']\\]\\s*\\{)([^}]*)(})`, "g");
199
+ css = css.replace(blockRe, (_, open, body, close) => {
200
+ const newBody = body.replace(/(\bwidth\s*:\s*)100%/g, `$1${w}px`).replace(/(\bheight\s*:\s*)100%/g, `$1${h}px`);
201
+ if (newBody !== body)
202
+ modified = true;
203
+ return open + newBody + close;
204
+ });
205
+ }
206
+ if (modified)
207
+ $(styleEl).text(css);
208
+ });
209
+ }
210
+ function autoHealMissingCompositionIds($) {
211
+ const compositionIdRe = /data-composition-id=["']([^"']+)["']/gi;
212
+ const referencedIds = new Set();
213
+ $("style, script").each((_, el) => {
214
+ const text = ($(el).html() || "").trim();
215
+ if (!text)
216
+ return;
217
+ let match;
218
+ while ((match = compositionIdRe.exec(text)) !== null) {
219
+ const compId = (match[1] || "").trim();
220
+ if (compId)
221
+ referencedIds.add(compId);
222
+ }
223
+ });
224
+ if (referencedIds.size === 0)
225
+ return;
226
+ const existingIds = new Set();
227
+ $("[data-composition-id]").each((_, el) => {
228
+ const id = ($(el).attr("data-composition-id") || "").trim();
229
+ if (id)
230
+ existingIds.add(id);
231
+ });
232
+ for (const compId of referencedIds) {
233
+ if (compId === "root" || existingIds.has(compId))
234
+ continue;
235
+ const candidates = [`${compId}-layer`, `${compId}-comp`, compId];
236
+ for (const targetId of candidates) {
237
+ const match = $(`#${targetId}`).first();
238
+ if (match.length > 0 && !match.attr("data-composition-id")) {
239
+ match.attr("data-composition-id", compId);
240
+ break;
241
+ }
242
+ }
243
+ }
244
+ }
245
+ function coalesceHeadStylesAndBodyScripts($) {
246
+ const headStyleEls = $("head style").toArray();
247
+ if (headStyleEls.length > 1) {
248
+ const importRe = /@import\s+url\([^)]*\)\s*;|@import\s+["'][^"']+["']\s*;/gi;
249
+ const imports = [];
250
+ const cssParts = [];
251
+ const seenImports = new Set();
252
+ for (const el of headStyleEls) {
253
+ const raw = ($(el).html() || "").trim();
254
+ if (!raw)
255
+ continue;
256
+ const nonImportCss = raw.replace(importRe, (match) => {
257
+ const cleaned = match.trim();
258
+ if (!seenImports.has(cleaned)) {
259
+ seenImports.add(cleaned);
260
+ imports.push(cleaned);
261
+ }
262
+ return "";
263
+ });
264
+ const trimmed = nonImportCss.trim();
265
+ if (trimmed)
266
+ cssParts.push(trimmed);
267
+ }
268
+ const merged = [...imports, ...cssParts].join("\n\n").trim();
269
+ if (merged) {
270
+ $(headStyleEls[0]).text(merged);
271
+ for (let i = 1; i < headStyleEls.length; i++)
272
+ $(headStyleEls[i]).remove();
273
+ }
274
+ }
275
+ const bodyInlineScripts = $("body script").toArray().filter((el) => {
276
+ const src = ($(el).attr("src") || "").trim();
277
+ if (src)
278
+ return false;
279
+ const type = ($(el).attr("type") || "").trim().toLowerCase();
280
+ return !type || type === "text/javascript" || type === "application/javascript";
281
+ });
282
+ if (bodyInlineScripts.length > 0) {
283
+ const mergedJs = bodyInlineScripts.map((el) => ($(el).html() || "").trim()).filter(Boolean).join("\n;\n").trim();
284
+ for (const el of bodyInlineScripts)
285
+ $(el).remove();
286
+ if (mergedJs) {
287
+ const stripped = stripJsCommentsParserSafe(mergedJs);
288
+ $("body").append(`<script>${stripped}</script>`);
289
+ }
290
+ }
291
+ }
292
+ function stripJsCommentsParserSafe(source) {
293
+ if (!source)
294
+ return source;
295
+ try {
296
+ const result = transformSync(source, { loader: "js", minify: false, legalComments: "none" });
297
+ return result.code.trim();
298
+ }
299
+ catch {
300
+ return source;
301
+ }
302
+ }
303
+ /**
304
+ * Bundle a project's index.html into a single self-contained HTML file.
305
+ *
306
+ * - Compiles timing attributes and optionally resolves media durations
307
+ * - Injects the HyperFrames runtime script
308
+ * - Inlines local CSS and JS files
309
+ * - Inlines sub-composition HTML fragments (data-composition-src)
310
+ * - Inlines small textual assets as data URLs
311
+ */
312
+ export async function bundleToSingleHtml(projectDir, options) {
313
+ const indexPath = join(projectDir, "index.html");
314
+ if (!existsSync(indexPath))
315
+ throw new Error("index.html not found in project directory");
316
+ const rawHtml = readFileSync(indexPath, "utf-8");
317
+ const compiled = await compileHtml(rawHtml, projectDir, options?.probeMediaDuration);
318
+ const staticGuard = validateHyperframeHtmlContract(compiled);
319
+ if (!staticGuard.isValid) {
320
+ console.warn(`[StaticGuard] Invalid HyperFrame contract: ${staticGuard.missingKeys.join("; ")}`);
321
+ }
322
+ const withInterceptor = injectInterceptor(compiled);
323
+ const $ = cheerio.load(withInterceptor);
324
+ // Inline local CSS
325
+ const localCssChunks = [];
326
+ let cssAnchorPlaced = false;
327
+ $('link[rel="stylesheet"]').each((_, el) => {
328
+ const href = $(el).attr("href");
329
+ if (!href || !isRelativeUrl(href))
330
+ return;
331
+ const cssPath = safePath(projectDir, href);
332
+ const css = cssPath ? safeReadFile(cssPath) : null;
333
+ if (css == null)
334
+ return;
335
+ localCssChunks.push(css);
336
+ if (!cssAnchorPlaced) {
337
+ $(el).replaceWith('<style data-hf-bundled-local-css="1"></style>');
338
+ cssAnchorPlaced = true;
339
+ }
340
+ else {
341
+ $(el).remove();
342
+ }
343
+ });
344
+ if (localCssChunks.length > 0) {
345
+ const $anchor = $('style[data-hf-bundled-local-css="1"]').first();
346
+ if ($anchor.length)
347
+ $anchor.removeAttr("data-hf-bundled-local-css").text(localCssChunks.join("\n\n"));
348
+ else
349
+ $("head").append(`<style>${localCssChunks.join("\n\n")}</style>`);
350
+ }
351
+ // Inline local JS
352
+ const localJsChunks = [];
353
+ let jsAnchorPlaced = false;
354
+ $("script[src]").each((_, el) => {
355
+ const src = $(el).attr("src");
356
+ if (!src || !isRelativeUrl(src))
357
+ return;
358
+ const jsPath = safePath(projectDir, src);
359
+ const js = jsPath ? safeReadFile(jsPath) : null;
360
+ if (js == null)
361
+ return;
362
+ localJsChunks.push(js);
363
+ if (!jsAnchorPlaced) {
364
+ $(el).replaceWith('<script data-hf-bundled-local-js="1"></script>');
365
+ jsAnchorPlaced = true;
366
+ }
367
+ else {
368
+ $(el).remove();
369
+ }
370
+ });
371
+ if (localJsChunks.length > 0) {
372
+ const $anchor = $('script[data-hf-bundled-local-js="1"]').first();
373
+ if ($anchor.length)
374
+ $anchor.removeAttr("data-hf-bundled-local-js").text(localJsChunks.join("\n;\n"));
375
+ else
376
+ $("body").append(`<script>${localJsChunks.join("\n;\n")}</script>`);
377
+ }
378
+ // Inline sub-compositions
379
+ const compStyleChunks = [];
380
+ const compScriptChunks = [];
381
+ $("[data-composition-src]").each((_, hostEl) => {
382
+ const src = $(hostEl).attr("data-composition-src");
383
+ if (!src || !isRelativeUrl(src))
384
+ return;
385
+ const compPath = safePath(projectDir, src);
386
+ const compHtml = compPath ? safeReadFile(compPath) : null;
387
+ if (compHtml == null) {
388
+ console.warn(`[Bundler] Composition file not found: ${src}`);
389
+ return;
390
+ }
391
+ const $comp = cheerio.load(compHtml);
392
+ const compId = $(hostEl).attr("data-composition-id");
393
+ const $contentRoot = $comp("template").first();
394
+ const contentHtml = $contentRoot.length ? $contentRoot.html() || "" : $comp("body").html() || "";
395
+ const $content = cheerio.load(contentHtml);
396
+ const $innerRoot = compId ? $content(`[data-composition-id="${compId}"]`).first() : $content("[data-composition-id]").first();
397
+ $content("style").each((_, s) => { compStyleChunks.push($content(s).html() || ""); $content(s).remove(); });
398
+ $content("script").each((_, s) => {
399
+ compScriptChunks.push(`(function(){ try { ${$content(s).html() || ""} } catch (_err) { console.error('[HyperFrames] composition script error:', _err); } })();`);
400
+ $content(s).remove();
401
+ });
402
+ if ($innerRoot.length) {
403
+ const innerCompId = $innerRoot.attr("data-composition-id");
404
+ const innerW = $innerRoot.attr("data-width");
405
+ const innerH = $innerRoot.attr("data-height");
406
+ if (innerCompId && !$(hostEl).attr("data-composition-id"))
407
+ $(hostEl).attr("data-composition-id", innerCompId);
408
+ if (innerW && !$(hostEl).attr("data-width"))
409
+ $(hostEl).attr("data-width", innerW);
410
+ if (innerH && !$(hostEl).attr("data-height"))
411
+ $(hostEl).attr("data-height", innerH);
412
+ $innerRoot.find("style, script").remove();
413
+ $(hostEl).html($innerRoot.html() || "");
414
+ }
415
+ else {
416
+ $content("style, script").remove();
417
+ $(hostEl).html($content.html() || "");
418
+ }
419
+ $(hostEl).removeAttr("data-composition-src");
420
+ });
421
+ if (compStyleChunks.length)
422
+ $("head").append(`<style>${compStyleChunks.join("\n\n")}</style>`);
423
+ if (compScriptChunks.length)
424
+ $("body").append(`<script>${compScriptChunks.join("\n;\n")}</script>`);
425
+ enforceCompositionPixelSizing($);
426
+ autoHealMissingCompositionIds($);
427
+ coalesceHeadStylesAndBodyScripts($);
428
+ // Inline textual assets
429
+ $("[src], [href], [poster], [xlink\\:href]").each((_, el) => {
430
+ for (const attr of ["src", "href", "poster", "xlink:href"]) {
431
+ const value = $(el).attr(attr);
432
+ if (!value)
433
+ continue;
434
+ const inlined = maybeInlineRelativeAssetUrl(value, projectDir);
435
+ if (inlined)
436
+ $(el).attr(attr, inlined);
437
+ }
438
+ });
439
+ $("[srcset]").each((_, el) => {
440
+ const srcset = $(el).attr("srcset");
441
+ if (srcset)
442
+ $(el).attr("srcset", rewriteSrcsetWithInlinedAssets(srcset, projectDir));
443
+ });
444
+ $("style").each((_, el) => { $(el).text(rewriteCssUrlsWithInlinedAssets($(el).html() || "", projectDir)); });
445
+ $("[style]").each((_, el) => { $(el).attr("style", rewriteCssUrlsWithInlinedAssets($(el).attr("style") || "", projectDir)); });
446
+ return $.html();
447
+ }
448
+ //# sourceMappingURL=htmlBundler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"htmlBundler.js","sourceRoot":"","sources":["../../src/compiler/htmlBundler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Callback to probe media duration. If not provided, media duration resolution is skipped.
3
+ * Return duration in seconds, or 0 if unknown.
4
+ */
5
+ export type MediaDurationProber = (src: string) => Promise<number>;
6
+ /**
7
+ * Compile HTML with full duration resolution.
8
+ *
9
+ * 1. Static pass: compileTimingAttrs() adds data-end where data-duration exists
10
+ * 2. For unresolved video/audio (no data-duration): probe via probeMediaDuration, inject durations
11
+ * 3. For pre-resolved video/audio: validate data-duration against actual source, clamp if needed
12
+ *
13
+ * @param rawHtml - The raw HTML string
14
+ * @param projectDir - The project directory for resolving relative paths
15
+ * @param probeMediaDuration - Optional callback to probe media duration (e.g., via ffprobe)
16
+ */
17
+ export declare function compileHtml(rawHtml: string, projectDir: string, probeMediaDuration?: MediaDurationProber): Promise<string>;
18
+ //# sourceMappingURL=htmlCompiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"htmlCompiler.d.ts","sourceRoot":"","sources":["../../src/compiler/htmlCompiler.ts"],"names":[],"mappings":"AASA;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAQnE;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,kBAAkB,CAAC,EAAE,mBAAmB,GACvC,OAAO,CAAC,MAAM,CAAC,CAqDjB"}
@@ -0,0 +1,65 @@
1
+ import { resolve } from "path";
2
+ import { compileTimingAttrs, injectDurations, extractResolvedMedia, clampDurations, } from "./timingCompiler";
3
+ function resolveMediaSrc(src, projectDir) {
4
+ return src.startsWith("http://") || src.startsWith("https://")
5
+ ? src
6
+ : resolve(projectDir, src);
7
+ }
8
+ /**
9
+ * Compile HTML with full duration resolution.
10
+ *
11
+ * 1. Static pass: compileTimingAttrs() adds data-end where data-duration exists
12
+ * 2. For unresolved video/audio (no data-duration): probe via probeMediaDuration, inject durations
13
+ * 3. For pre-resolved video/audio: validate data-duration against actual source, clamp if needed
14
+ *
15
+ * @param rawHtml - The raw HTML string
16
+ * @param projectDir - The project directory for resolving relative paths
17
+ * @param probeMediaDuration - Optional callback to probe media duration (e.g., via ffprobe)
18
+ */
19
+ export async function compileHtml(rawHtml, projectDir, probeMediaDuration) {
20
+ const { html: staticCompiled, unresolved } = compileTimingAttrs(rawHtml);
21
+ let html = staticCompiled;
22
+ if (!probeMediaDuration)
23
+ return html;
24
+ // Phase 1: Resolve missing durations
25
+ const mediaUnresolved = unresolved.filter((el) => el.tagName === "video" || el.tagName === "audio");
26
+ if (mediaUnresolved.length > 0) {
27
+ const resolutions = [];
28
+ for (const el of mediaUnresolved) {
29
+ if (!el.src)
30
+ continue;
31
+ const src = resolveMediaSrc(el.src, projectDir);
32
+ const fileDuration = await probeMediaDuration(src);
33
+ if (fileDuration <= 0)
34
+ continue;
35
+ const effectiveDuration = fileDuration - el.mediaStart;
36
+ resolutions.push({
37
+ id: el.id,
38
+ duration: effectiveDuration > 0 ? effectiveDuration : fileDuration,
39
+ });
40
+ }
41
+ if (resolutions.length > 0) {
42
+ html = injectDurations(html, resolutions);
43
+ }
44
+ }
45
+ // Phase 2: Validate pre-resolved media — clamp data-duration to actual source duration
46
+ const preResolved = extractResolvedMedia(html);
47
+ const clampList = [];
48
+ for (const el of preResolved) {
49
+ if (!el.src)
50
+ continue;
51
+ const src = resolveMediaSrc(el.src, projectDir);
52
+ const fileDuration = await probeMediaDuration(src);
53
+ if (fileDuration <= 0)
54
+ continue;
55
+ const maxDuration = fileDuration - el.mediaStart;
56
+ if (maxDuration > 0 && el.duration > maxDuration) {
57
+ clampList.push({ id: el.id, duration: maxDuration });
58
+ }
59
+ }
60
+ if (clampList.length > 0) {
61
+ html = clampDurations(html, clampList);
62
+ }
63
+ return html;
64
+ }
65
+ //# sourceMappingURL=htmlCompiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"htmlCompiler.js","sourceRoot":"","sources":["../../src/compiler/htmlCompiler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { compileTimingAttrs, injectDurations, extractResolvedMedia, clampDurations, type UnresolvedElement, type ResolvedDuration, type ResolvedMediaElement, type CompilationResult, } from "./timingCompiler";
2
+ export { compileHtml, type MediaDurationProber } from "./htmlCompiler";
3
+ export { bundleToSingleHtml, type BundleOptions } from "./htmlBundler";
4
+ export { validateHyperframeHtmlContract, type HyperframeStaticFailureReason, type HyperframeStaticGuardResult, } from "./staticGuard";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/compiler/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,GACvB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,WAAW,EAAE,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAGvE,OAAO,EAAE,kBAAkB,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAGvE,OAAO,EACL,8BAA8B,EAC9B,KAAK,6BAA6B,EAClC,KAAK,2BAA2B,GACjC,MAAM,eAAe,CAAC"}
@@ -0,0 +1,9 @@
1
+ // Timing compiler (browser-safe)
2
+ export { compileTimingAttrs, injectDurations, extractResolvedMedia, clampDurations, } from "./timingCompiler";
3
+ // HTML compiler (Node.js — requires fs)
4
+ export { compileHtml } from "./htmlCompiler";
5
+ // HTML bundler (Node.js — requires fs, cheerio, esbuild)
6
+ export { bundleToSingleHtml } from "./htmlBundler";
7
+ // Static guard
8
+ export { validateHyperframeHtmlContract, } from "./staticGuard";
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/compiler/index.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,cAAc,GAKf,MAAM,kBAAkB,CAAC;AAE1B,wCAAwC;AACxC,OAAO,EAAE,WAAW,EAA4B,MAAM,gBAAgB,CAAC;AAEvE,yDAAyD;AACzD,OAAO,EAAE,kBAAkB,EAAsB,MAAM,eAAe,CAAC;AAEvE,eAAe;AACf,OAAO,EACL,8BAA8B,GAG/B,MAAM,eAAe,CAAC"}
@@ -0,0 +1,8 @@
1
+ export type HyperframeStaticFailureReason = "missing_composition_id" | "missing_composition_dimensions" | "missing_timeline_registry" | "invalid_script_syntax" | "invalid_static_hyperframe_contract";
2
+ export type HyperframeStaticGuardResult = {
3
+ isValid: boolean;
4
+ missingKeys: string[];
5
+ failureReason: HyperframeStaticFailureReason | null;
6
+ };
7
+ export declare function validateHyperframeHtmlContract(html: string): HyperframeStaticGuardResult;
8
+ //# sourceMappingURL=staticGuard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"staticGuard.d.ts","sourceRoot":"","sources":["../../src/compiler/staticGuard.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,6BAA6B,GACrC,wBAAwB,GACxB,gCAAgC,GAChC,2BAA2B,GAC3B,uBAAuB,GACvB,oCAAoC,CAAC;AAEzC,MAAM,MAAM,2BAA2B,GAAG;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,EAAE,6BAA6B,GAAG,IAAI,CAAC;CACrD,CAAC;AAEF,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,MAAM,GAAG,2BAA2B,CAuBxF"}
@@ -0,0 +1,26 @@
1
+ import { lintHyperframeHtml } from "../lint/hyperframeLinter";
2
+ export function validateHyperframeHtmlContract(html) {
3
+ const result = lintHyperframeHtml(html);
4
+ const missingKeys = result.findings
5
+ .filter((finding) => finding.severity === "error")
6
+ .map((finding) => finding.message);
7
+ if (missingKeys.length === 0) {
8
+ return { isValid: true, missingKeys: [], failureReason: null };
9
+ }
10
+ const joined = missingKeys.join(" ").toLowerCase();
11
+ let failureReason = "invalid_static_hyperframe_contract";
12
+ if (joined.includes("data-composition-id")) {
13
+ failureReason = "missing_composition_id";
14
+ }
15
+ else if (joined.includes("data-width") || joined.includes("data-height")) {
16
+ failureReason = "missing_composition_dimensions";
17
+ }
18
+ else if (joined.includes("window.__timelines")) {
19
+ failureReason = "missing_timeline_registry";
20
+ }
21
+ else if (joined.includes("script syntax")) {
22
+ failureReason = "invalid_script_syntax";
23
+ }
24
+ return { isValid: false, missingKeys, failureReason };
25
+ }
26
+ //# sourceMappingURL=staticGuard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"staticGuard.js","sourceRoot":"","sources":["../../src/compiler/staticGuard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAe9D,MAAM,UAAU,8BAA8B,CAAC,IAAY;IACzD,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ;SAChC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;SACjD,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAErC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IACjE,CAAC;IAED,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IACnD,IAAI,aAAa,GAAkC,oCAAoC,CAAC;IACxF,IAAI,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;QAC3C,aAAa,GAAG,wBAAwB,CAAC;IAC3C,CAAC;SAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QAC3E,aAAa,GAAG,gCAAgC,CAAC;IACnD,CAAC;SAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;QACjD,aAAa,GAAG,2BAA2B,CAAC;IAC9C,CAAC;SAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QAC5C,aAAa,GAAG,uBAAuB,CAAC;IAC1C,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;AACxD,CAAC"}