@hyperframes/core 0.5.0-alpha.9 → 0.5.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 (112) hide show
  1. package/dist/compiler/compositionScoping.d.ts +2 -2
  2. package/dist/compiler/compositionScoping.d.ts.map +1 -1
  3. package/dist/compiler/compositionScoping.js +69 -15
  4. package/dist/compiler/compositionScoping.js.map +1 -1
  5. package/dist/compiler/htmlBundler.d.ts +16 -0
  6. package/dist/compiler/htmlBundler.d.ts.map +1 -1
  7. package/dist/compiler/htmlBundler.js +96 -71
  8. package/dist/compiler/htmlBundler.js.map +1 -1
  9. package/dist/compiler/htmlCompiler.d.ts.map +1 -1
  10. package/dist/compiler/htmlCompiler.js +2 -2
  11. package/dist/compiler/htmlCompiler.js.map +1 -1
  12. package/dist/compiler/htmlDocument.d.ts +10 -0
  13. package/dist/compiler/htmlDocument.d.ts.map +1 -0
  14. package/dist/compiler/htmlDocument.js +181 -0
  15. package/dist/compiler/htmlDocument.js.map +1 -0
  16. package/dist/compiler/index.d.ts +2 -1
  17. package/dist/compiler/index.d.ts.map +1 -1
  18. package/dist/compiler/index.js +2 -1
  19. package/dist/compiler/index.js.map +1 -1
  20. package/dist/compiler/rewriteSubCompPaths.d.ts +0 -4
  21. package/dist/compiler/rewriteSubCompPaths.d.ts.map +1 -1
  22. package/dist/compiler/rewriteSubCompPaths.js +0 -17
  23. package/dist/compiler/rewriteSubCompPaths.js.map +1 -1
  24. package/dist/compiler/timingCompiler.d.ts +2 -1
  25. package/dist/compiler/timingCompiler.d.ts.map +1 -1
  26. package/dist/compiler/timingCompiler.js +10 -3
  27. package/dist/compiler/timingCompiler.js.map +1 -1
  28. package/dist/core.types.d.ts +7 -0
  29. package/dist/core.types.d.ts.map +1 -1
  30. package/dist/core.types.js +13 -0
  31. package/dist/core.types.js.map +1 -1
  32. package/dist/generated/runtime-inline.js +1 -1
  33. package/dist/generated/runtime-inline.js.map +1 -1
  34. package/dist/hyperframe.manifest.json +1 -1
  35. package/dist/hyperframe.runtime.iife.js +82 -32
  36. package/dist/hyperframe.runtime.mjs +82 -32
  37. package/dist/index.d.ts +4 -2
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +6 -2
  40. package/dist/index.js.map +1 -1
  41. package/dist/lint/context.d.ts.map +1 -1
  42. package/dist/lint/context.js +9 -1
  43. package/dist/lint/context.js.map +1 -1
  44. package/dist/lint/rules/captions.d.ts.map +1 -1
  45. package/dist/lint/rules/captions.js +1 -2
  46. package/dist/lint/rules/captions.js.map +1 -1
  47. package/dist/lint/rules/composition.d.ts.map +1 -1
  48. package/dist/lint/rules/composition.js +131 -4
  49. package/dist/lint/rules/composition.js.map +1 -1
  50. package/dist/lint/rules/core.d.ts.map +1 -1
  51. package/dist/lint/rules/core.js +101 -0
  52. package/dist/lint/rules/core.js.map +1 -1
  53. package/dist/lint/rules/gsap.d.ts.map +1 -1
  54. package/dist/lint/rules/gsap.js +59 -1
  55. package/dist/lint/rules/gsap.js.map +1 -1
  56. package/dist/lint/rules/media.d.ts.map +1 -1
  57. package/dist/lint/rules/media.js +38 -0
  58. package/dist/lint/rules/media.js.map +1 -1
  59. package/dist/lint/types.d.ts +4 -0
  60. package/dist/lint/types.d.ts.map +1 -1
  61. package/dist/lint/utils.d.ts +20 -0
  62. package/dist/lint/utils.d.ts.map +1 -1
  63. package/dist/lint/utils.js +46 -3
  64. package/dist/lint/utils.js.map +1 -1
  65. package/dist/registry/types.d.ts +4 -0
  66. package/dist/registry/types.d.ts.map +1 -1
  67. package/dist/registry/types.js.map +1 -1
  68. package/dist/runtime/getVariables.d.ts +30 -0
  69. package/dist/runtime/getVariables.d.ts.map +1 -0
  70. package/dist/runtime/getVariables.js +69 -0
  71. package/dist/runtime/getVariables.js.map +1 -0
  72. package/dist/runtime/validateVariables.d.ts +25 -0
  73. package/dist/runtime/validateVariables.d.ts.map +1 -0
  74. package/dist/runtime/validateVariables.js +92 -0
  75. package/dist/runtime/validateVariables.js.map +1 -0
  76. package/dist/studio-api/createStudioApi.d.ts.map +1 -1
  77. package/dist/studio-api/createStudioApi.js +0 -2
  78. package/dist/studio-api/createStudioApi.js.map +1 -1
  79. package/dist/studio-api/helpers/projectSignature.d.ts +2 -0
  80. package/dist/studio-api/helpers/projectSignature.d.ts.map +1 -0
  81. package/dist/studio-api/helpers/projectSignature.js +122 -0
  82. package/dist/studio-api/helpers/projectSignature.js.map +1 -0
  83. package/dist/studio-api/helpers/screenshotClip.d.ts +8 -0
  84. package/dist/studio-api/helpers/screenshotClip.d.ts.map +1 -0
  85. package/dist/studio-api/helpers/screenshotClip.js +20 -0
  86. package/dist/studio-api/helpers/screenshotClip.js.map +1 -0
  87. package/dist/studio-api/helpers/subComposition.d.ts.map +1 -1
  88. package/dist/studio-api/helpers/subComposition.js +1 -4
  89. package/dist/studio-api/helpers/subComposition.js.map +1 -1
  90. package/dist/studio-api/index.d.ts +2 -0
  91. package/dist/studio-api/index.d.ts.map +1 -1
  92. package/dist/studio-api/index.js +2 -0
  93. package/dist/studio-api/index.js.map +1 -1
  94. package/dist/studio-api/routes/preview.d.ts.map +1 -1
  95. package/dist/studio-api/routes/preview.js +19 -3
  96. package/dist/studio-api/routes/preview.js.map +1 -1
  97. package/dist/studio-api/routes/projects.js +1 -1
  98. package/dist/studio-api/routes/projects.js.map +1 -1
  99. package/dist/studio-api/routes/render.d.ts.map +1 -1
  100. package/dist/studio-api/routes/render.js +21 -37
  101. package/dist/studio-api/routes/render.js.map +1 -1
  102. package/dist/studio-api/routes/thumbnail.d.ts.map +1 -1
  103. package/dist/studio-api/routes/thumbnail.js +11 -15
  104. package/dist/studio-api/routes/thumbnail.js.map +1 -1
  105. package/dist/studio-api/types.d.ts +3 -1
  106. package/dist/studio-api/types.d.ts.map +1 -1
  107. package/package.json +9 -1
  108. package/schemas/registry-item.json +8 -0
  109. package/dist/studio-api/routes/fonts.d.ts +0 -3
  110. package/dist/studio-api/routes/fonts.d.ts.map +0 -1
  111. package/dist/studio-api/routes/fonts.js +0 -239
  112. package/dist/studio-api/routes/fonts.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getVariables.js","sourceRoot":"","sources":["../../src/runtime/getVariables.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,YAAY;IAG1B,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO,EAAgB,CAAC;IAE7D,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACxE,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;IAElC,OAAO,EAAE,GAAG,gBAAgB,EAAE,GAAG,SAAS,EAAgB,CAAC;AAC7D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAoB;IACvD,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,4BAA4B,CAAC,CAAC;IAC5D,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IAEpB,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAC;IAEtC,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,SAAS;QAClD,MAAM,CAAC,GAAG,KAAgC,CAAC;QAC3C,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC;YAAE,SAAS;QAC5D,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;IACxB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,aAAa;IACpB,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,EAAE,CAAC;IAC7C,MAAM,GAAG,GAAI,MAA+C,CAAC,aAAa,CAAC;IAC3E,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACrE,OAAO,GAA8B,CAAC;AACxC,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { CompositionVariable } from "../core.types";
2
+ export type VariableValidationIssue = {
3
+ kind: "undeclared";
4
+ variableId: string;
5
+ } | {
6
+ kind: "type-mismatch";
7
+ variableId: string;
8
+ expected: string;
9
+ actual: string;
10
+ } | {
11
+ kind: "enum-out-of-range";
12
+ variableId: string;
13
+ allowed: string[];
14
+ actual: string;
15
+ };
16
+ /**
17
+ * Compare a flat values map (from `--variables` / `data-variable-values`) to
18
+ * the declared schema (`data-composition-variables`). Returns issues for keys
19
+ * that aren't declared, plus per-key type mismatches against the declared
20
+ * type. Pure / sync — caller decides how to surface them (warning vs render
21
+ * failure under `--strict-variables`).
22
+ */
23
+ export declare function validateVariables(values: Record<string, unknown>, declarations: readonly CompositionVariable[]): VariableValidationIssue[];
24
+ export declare function formatVariableValidationIssue(issue: VariableValidationIssue): string;
25
+ //# sourceMappingURL=validateVariables.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateVariables.d.ts","sourceRoot":"","sources":["../../src/runtime/validateVariables.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEzD,MAAM,MAAM,uBAAuB,GAC/B;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC/E;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzF;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,YAAY,EAAE,SAAS,mBAAmB,EAAE,GAC3C,uBAAuB,EAAE,CAe3B;AA2DD,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,uBAAuB,GAAG,MAAM,CASpF"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Compare a flat values map (from `--variables` / `data-variable-values`) to
3
+ * the declared schema (`data-composition-variables`). Returns issues for keys
4
+ * that aren't declared, plus per-key type mismatches against the declared
5
+ * type. Pure / sync — caller decides how to surface them (warning vs render
6
+ * failure under `--strict-variables`).
7
+ */
8
+ export function validateVariables(values, declarations) {
9
+ const decls = new Map();
10
+ for (const decl of declarations)
11
+ decls.set(decl.id, decl);
12
+ const issues = [];
13
+ for (const [id, value] of Object.entries(values)) {
14
+ const decl = decls.get(id);
15
+ if (!decl) {
16
+ issues.push({ kind: "undeclared", variableId: id });
17
+ continue;
18
+ }
19
+ const mismatch = checkType(value, decl);
20
+ if (mismatch)
21
+ issues.push(mismatch);
22
+ }
23
+ return issues;
24
+ }
25
+ function checkType(value, decl) {
26
+ switch (decl.type) {
27
+ case "string":
28
+ case "color":
29
+ if (typeof value !== "string") {
30
+ return {
31
+ kind: "type-mismatch",
32
+ variableId: decl.id,
33
+ expected: decl.type,
34
+ actual: jsTypeOf(value),
35
+ };
36
+ }
37
+ return null;
38
+ case "number":
39
+ if (typeof value !== "number" || !Number.isFinite(value)) {
40
+ return {
41
+ kind: "type-mismatch",
42
+ variableId: decl.id,
43
+ expected: "number",
44
+ actual: jsTypeOf(value),
45
+ };
46
+ }
47
+ return null;
48
+ case "boolean":
49
+ if (typeof value !== "boolean") {
50
+ return {
51
+ kind: "type-mismatch",
52
+ variableId: decl.id,
53
+ expected: "boolean",
54
+ actual: jsTypeOf(value),
55
+ };
56
+ }
57
+ return null;
58
+ case "enum": {
59
+ if (typeof value !== "string") {
60
+ return {
61
+ kind: "type-mismatch",
62
+ variableId: decl.id,
63
+ expected: "enum (string)",
64
+ actual: jsTypeOf(value),
65
+ };
66
+ }
67
+ const allowed = decl.options.map((o) => o.value);
68
+ if (!allowed.includes(value)) {
69
+ return { kind: "enum-out-of-range", variableId: decl.id, allowed, actual: value };
70
+ }
71
+ return null;
72
+ }
73
+ }
74
+ }
75
+ function jsTypeOf(value) {
76
+ if (value === null)
77
+ return "null";
78
+ if (Array.isArray(value))
79
+ return "array";
80
+ return typeof value;
81
+ }
82
+ export function formatVariableValidationIssue(issue) {
83
+ switch (issue.kind) {
84
+ case "undeclared":
85
+ return `Variable "${issue.variableId}" is not declared in data-composition-variables.`;
86
+ case "type-mismatch":
87
+ return `Variable "${issue.variableId}" expected ${issue.expected}, got ${issue.actual}.`;
88
+ case "enum-out-of-range":
89
+ return `Variable "${issue.variableId}" must be one of ${issue.allowed.map((v) => `"${v}"`).join(", ")} (got "${issue.actual}").`;
90
+ }
91
+ }
92
+ //# sourceMappingURL=validateVariables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateVariables.js","sourceRoot":"","sources":["../../src/runtime/validateVariables.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"createStudioApi.d.ts","sourceRoot":"","sources":["../../src/studio-api/createStudioApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAUnD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAa/D"}
1
+ {"version":3,"file":"createStudioApi.d.ts","sourceRoot":"","sources":["../../src/studio-api/createStudioApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AASnD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAY/D"}
@@ -6,7 +6,6 @@ import { registerLintRoutes } from "./routes/lint.js";
6
6
  import { registerRenderRoutes } from "./routes/render.js";
7
7
  import { registerThumbnailRoutes } from "./routes/thumbnail.js";
8
8
  import { registerWaveformRoutes } from "./routes/waveform.js";
9
- import { registerFontRoutes } from "./routes/fonts.js";
10
9
  /**
11
10
  * Create a Hono sub-app with all studio API routes.
12
11
  *
@@ -22,7 +21,6 @@ export function createStudioApi(adapter) {
22
21
  registerRenderRoutes(api, adapter);
23
22
  registerThumbnailRoutes(api, adapter);
24
23
  registerWaveformRoutes(api, adapter);
25
- registerFontRoutes(api);
26
24
  return api;
27
25
  }
28
26
  //# sourceMappingURL=createStudioApi.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createStudioApi.js","sourceRoot":"","sources":["../../src/studio-api/createStudioApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,OAAyB;IACvD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IAEvB,qBAAqB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACpC,kBAAkB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACjC,qBAAqB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACpC,kBAAkB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACjC,oBAAoB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACnC,uBAAuB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACtC,sBAAsB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACrC,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAExB,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"createStudioApi.js","sourceRoot":"","sources":["../../src/studio-api/createStudioApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,OAAyB;IACvD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IAEvB,qBAAqB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACpC,kBAAkB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACjC,qBAAqB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACpC,kBAAkB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACjC,oBAAoB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACnC,uBAAuB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACtC,sBAAsB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAErC,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function createProjectSignature(projectDir: string): string;
2
+ //# sourceMappingURL=projectSignature.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectSignature.d.ts","sourceRoot":"","sources":["../../../src/studio-api/helpers/projectSignature.ts"],"names":[],"mappings":"AA8GA,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CA+BjE"}
@@ -0,0 +1,122 @@
1
+ import { createHash } from "node:crypto";
2
+ import { lstatSync, readFileSync, readdirSync } from "node:fs";
3
+ import { extname, isAbsolute, relative, resolve } from "node:path";
4
+ const SIGNATURE_TEXT_EXTENSIONS = new Set([
5
+ ".cjs",
6
+ ".css",
7
+ ".html",
8
+ ".js",
9
+ ".json",
10
+ ".jsx",
11
+ ".mjs",
12
+ ".svg",
13
+ ".ts",
14
+ ".tsx",
15
+ ]);
16
+ const SIGNATURE_EXCLUDED_DIRS = new Set([
17
+ ".cache",
18
+ ".git",
19
+ ".hyperframes",
20
+ ".next",
21
+ ".vite",
22
+ "build",
23
+ "coverage",
24
+ "dist",
25
+ "node_modules",
26
+ "outputs",
27
+ "renders",
28
+ ]);
29
+ const MAX_SIGNATURE_TEXT_BYTES = 2_000_000;
30
+ const projectSignatureCache = new Map();
31
+ function isPathWithin(parentDir, childPath) {
32
+ const childRelativePath = relative(parentDir, childPath);
33
+ return (childRelativePath === "" ||
34
+ (!childRelativePath.startsWith("..") && !isAbsolute(childRelativePath)));
35
+ }
36
+ function isTextContentEligible(file, size) {
37
+ return (SIGNATURE_TEXT_EXTENSIONS.has(extname(file).toLowerCase()) && size <= MAX_SIGNATURE_TEXT_BYTES);
38
+ }
39
+ function collectProjectSignatureFiles(projectDir, dir, files) {
40
+ let entries;
41
+ try {
42
+ entries = readdirSync(dir).sort();
43
+ }
44
+ catch {
45
+ return;
46
+ }
47
+ for (const entry of entries) {
48
+ if (SIGNATURE_EXCLUDED_DIRS.has(entry))
49
+ continue;
50
+ const file = resolve(dir, entry);
51
+ if (!isPathWithin(projectDir, file))
52
+ continue;
53
+ let stat;
54
+ try {
55
+ stat = lstatSync(file);
56
+ }
57
+ catch {
58
+ continue;
59
+ }
60
+ if (stat.isSymbolicLink())
61
+ continue;
62
+ if (stat.isDirectory()) {
63
+ collectProjectSignatureFiles(projectDir, file, files);
64
+ }
65
+ else if (stat.isFile()) {
66
+ files.push({
67
+ file,
68
+ mtimeMs: stat.mtimeMs,
69
+ size: stat.size,
70
+ textContentEligible: isTextContentEligible(file, stat.size),
71
+ });
72
+ }
73
+ }
74
+ }
75
+ function createProjectFingerprint(projectDir, files) {
76
+ const hash = createHash("sha256");
77
+ for (const entry of files) {
78
+ hash.update(relative(projectDir, entry.file));
79
+ hash.update("\0");
80
+ hash.update(String(entry.size));
81
+ hash.update("\0");
82
+ hash.update(String(entry.mtimeMs));
83
+ hash.update("\0");
84
+ hash.update(entry.textContentEligible ? "text" : "binary");
85
+ hash.update("\0");
86
+ }
87
+ return hash.digest("hex").slice(0, 24);
88
+ }
89
+ export function createProjectSignature(projectDir) {
90
+ const normalizedProjectDir = resolve(projectDir);
91
+ const files = [];
92
+ collectProjectSignatureFiles(normalizedProjectDir, normalizedProjectDir, files);
93
+ files.sort((a, b) => a.file.localeCompare(b.file));
94
+ const fingerprint = createProjectFingerprint(normalizedProjectDir, files);
95
+ const cached = projectSignatureCache.get(normalizedProjectDir);
96
+ if (cached?.fingerprint === fingerprint)
97
+ return cached.signature;
98
+ const hash = createHash("sha256");
99
+ for (const entry of files) {
100
+ const relativePath = relative(normalizedProjectDir, entry.file);
101
+ hash.update(relativePath);
102
+ hash.update("\0");
103
+ hash.update(String(entry.size));
104
+ hash.update("\0");
105
+ if (entry.textContentEligible) {
106
+ try {
107
+ hash.update(readFileSync(entry.file));
108
+ }
109
+ catch {
110
+ hash.update(String(entry.mtimeMs));
111
+ }
112
+ }
113
+ else {
114
+ hash.update(String(entry.mtimeMs));
115
+ }
116
+ hash.update("\0");
117
+ }
118
+ const signature = hash.digest("hex").slice(0, 24);
119
+ projectSignatureCache.set(normalizedProjectDir, { fingerprint, signature });
120
+ return signature;
121
+ }
122
+ //# sourceMappingURL=projectSignature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectSignature.js","sourceRoot":"","sources":["../../../src/studio-api/helpers/projectSignature.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface ScreenshotClip {
2
+ x: number;
3
+ y: number;
4
+ width: number;
5
+ height: number;
6
+ }
7
+ export declare function getElementScreenshotClip(selector: string): ScreenshotClip | undefined;
8
+ //# sourceMappingURL=screenshotClip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screenshotClip.d.ts","sourceRoot":"","sources":["../../../src/studio-api/helpers/screenshotClip.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAgBrF"}
@@ -0,0 +1,20 @@
1
+ export function getElementScreenshotClip(selector) {
2
+ const el = document.querySelector(selector);
3
+ if (!(el instanceof HTMLElement))
4
+ return undefined;
5
+ const rect = el.getBoundingClientRect();
6
+ if (rect.width < 4 || rect.height < 4)
7
+ return undefined;
8
+ const pad = 8;
9
+ const x = Math.max(0, rect.left - pad);
10
+ const y = Math.max(0, rect.top - pad);
11
+ const maxWidth = window.innerWidth - x;
12
+ const maxHeight = window.innerHeight - y;
13
+ return {
14
+ x,
15
+ y,
16
+ width: Math.max(1, Math.min(rect.width + pad * 2, maxWidth)),
17
+ height: Math.max(1, Math.min(rect.height + pad * 2, maxHeight)),
18
+ };
19
+ }
20
+ //# sourceMappingURL=screenshotClip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screenshotClip.js","sourceRoot":"","sources":["../../../src/studio-api/helpers/screenshotClip.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,wBAAwB,CAAC,QAAgB;IACvD,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,CAAC,CAAC,EAAE,YAAY,WAAW,CAAC;QAAE,OAAO,SAAS,CAAC;IACnD,MAAM,IAAI,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;IACxC,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IACxD,MAAM,GAAG,GAAG,CAAC,CAAC;IACd,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;IACvC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;IACzC,OAAO;QACL,CAAC;QACD,CAAC;QACD,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC5D,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;KAChE,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"subComposition.d.ts","sourceRoot":"","sources":["../../../src/studio-api/helpers/subComposition.ts"],"names":[],"mappings":"AASA;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,GAAG,IAAI,CAyEf"}
1
+ {"version":3,"file":"subComposition.d.ts","sourceRoot":"","sources":["../../../src/studio-api/helpers/subComposition.ts"],"names":[],"mappings":"AAKA;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,GAAG,IAAI,CAiEf"}
@@ -1,7 +1,7 @@
1
1
  import { existsSync, readFileSync } from "node:fs";
2
2
  import { join } from "node:path";
3
3
  import { parseHTML } from "linkedom";
4
- import { rewriteAssetPaths, rewriteCssAssetUrls, rewriteInlineStyleAssetUrls, } from "../../compiler/rewriteSubCompPaths.js";
4
+ import { rewriteAssetPaths, rewriteCssAssetUrls } from "../../compiler/rewriteSubCompPaths.js";
5
5
  /**
6
6
  * Build a standalone HTML page for a sub-composition.
7
7
  *
@@ -21,9 +21,6 @@ export function buildSubCompositionHtml(projectDir, compPath, runtimeUrl, baseHr
21
21
  rewriteAssetPaths(contentDoc.querySelectorAll("[src], [href]"), compPath, (el, attr) => el.getAttribute(attr), (el, attr, value) => {
22
22
  el.setAttribute(attr, value);
23
23
  });
24
- rewriteInlineStyleAssetUrls(contentDoc.querySelectorAll("[style]"), compPath, (el) => el.getAttribute("style"), (el, value) => {
25
- el.setAttribute("style", value);
26
- });
27
24
  for (const styleEl of contentDoc.querySelectorAll("style")) {
28
25
  styleEl.textContent = rewriteCssAssetUrls(styleEl.textContent || "", compPath);
29
26
  }
@@ -1 +1 @@
1
- {"version":3,"file":"subComposition.js","sourceRoot":"","sources":["../../../src/studio-api/helpers/subComposition.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subComposition.js","sourceRoot":"","sources":["../../../src/studio-api/helpers/subComposition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAE/F;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CACrC,UAAkB,EAClB,QAAgB,EAChB,UAAkB,EAClB,QAAiB;IAEjB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC5C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvC,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAEhD,8EAA8E;IAC9E,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC7E,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC;IAC9C,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,SAAS,CACxC,2CAA2C,OAAO,gBAAgB,CACnE,CAAC;IAEF,iBAAiB,CACf,UAAU,CAAC,gBAAgB,CAAC,eAAe,CAAC,EAC5C,QAAQ,EACR,CAAC,EAAW,EAAE,IAAY,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EACpD,CAAC,EAAW,EAAE,IAAY,EAAE,KAAa,EAAE,EAAE;QAC3C,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC,CACF,CAAC;IACF,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3D,OAAO,CAAC,WAAW,GAAG,mBAAmB,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,gBAAgB,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC;IAE9D,mEAAmE;IACnE,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IACjD,IAAI,WAAW,GAAG,EAAE,CAAC;IAErB,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpE,WAAW,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACrC,CAAC;IAED,kEAAkE;IAClE,IAAI,QAAQ,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/C,WAAW,GAAG,eAAe,QAAQ,OAAO,WAAW,EAAE,CAAC;IAC5D,CAAC;IAED,sEAAsE;IACtE,IACE,CAAC,WAAW,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAC3C,CAAC,WAAW,CAAC,QAAQ,CAAC,6BAA6B,CAAC,EACpD,CAAC;QACD,WAAW,IAAI,uDAAuD,UAAU,aAAa,CAAC;IAChG,CAAC;IAED,8DAA8D;IAC9D,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAClC,WAAW,IAAI,gFAAgF,CAAC;IAClG,CAAC;IAED,OAAO;;;EAGP,WAAW;;;;EAIX,gBAAgB;;QAEV,CAAC;AACT,CAAC"}
@@ -1,6 +1,8 @@
1
1
  export { createStudioApi } from "./createStudioApi.js";
2
+ export { createProjectSignature } from "./helpers/projectSignature.js";
2
3
  export type { StudioApiAdapter, ResolvedProject, RenderJobState, LintResult } from "./types.js";
3
4
  export { isSafePath, walkDir } from "./helpers/safePath.js";
4
5
  export { getMimeType, MIME_TYPES } from "./helpers/mime.js";
5
6
  export { buildSubCompositionHtml } from "./helpers/subComposition.js";
7
+ export { getElementScreenshotClip, type ScreenshotClip } from "./helpers/screenshotClip.js";
6
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/studio-api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAChG,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/studio-api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAChG,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,KAAK,cAAc,EAAE,MAAM,6BAA6B,CAAC"}
@@ -1,5 +1,7 @@
1
1
  export { createStudioApi } from "./createStudioApi.js";
2
+ export { createProjectSignature } from "./helpers/projectSignature.js";
2
3
  export { isSafePath, walkDir } from "./helpers/safePath.js";
3
4
  export { getMimeType, MIME_TYPES } from "./helpers/mime.js";
4
5
  export { buildSubCompositionHtml } from "./helpers/subComposition.js";
6
+ export { getElementScreenshotClip } from "./helpers/screenshotClip.js";
5
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/studio-api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/studio-api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAuB,MAAM,6BAA6B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../../src/studio-api/routes/preview.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAGjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAKpD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,GAAG,IAAI,CA2GhF"}
1
+ {"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../../src/studio-api/routes/preview.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAGjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAwBpD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAmHhF"}
@@ -3,6 +3,20 @@ import { resolve } from "node:path";
3
3
  import { isSafePath } from "../helpers/safePath.js";
4
4
  import { getMimeType } from "../helpers/mime.js";
5
5
  import { buildSubCompositionHtml } from "../helpers/subComposition.js";
6
+ import { createProjectSignature } from "../helpers/projectSignature.js";
7
+ const PROJECT_SIGNATURE_META = "hyperframes-project-signature";
8
+ function resolveProjectSignature(adapter, projectDir) {
9
+ return adapter.getProjectSignature?.(projectDir) ?? createProjectSignature(projectDir);
10
+ }
11
+ function injectProjectSignature(html, signature) {
12
+ const tag = `<meta name="${PROJECT_SIGNATURE_META}" content="${signature}">`;
13
+ if (html.includes(`name="${PROJECT_SIGNATURE_META}"`)) {
14
+ return html.replace(new RegExp(`<meta\\s+name=["']${PROJECT_SIGNATURE_META}["'][^>]*>`, "i"), tag);
15
+ }
16
+ if (html.includes("</head>"))
17
+ return html.replace("</head>", `${tag}\n</head>`);
18
+ return `${tag}\n${html}`;
19
+ }
6
20
  export function registerPreviewRoutes(api, adapter) {
7
21
  // Bundled composition preview
8
22
  api.get("/projects/:id/preview", async (c) => {
@@ -30,12 +44,14 @@ export function registerPreviewRoutes(api, adapter) {
30
44
  if (!bundled.includes("<base")) {
31
45
  bundled = bundled.replace(/<head>/i, `<head><base href="${baseHref}">`);
32
46
  }
47
+ bundled = injectProjectSignature(bundled, resolveProjectSignature(adapter, project.dir));
33
48
  return c.html(bundled);
34
49
  }
35
50
  catch {
36
51
  const file = resolve(project.dir, "index.html");
37
- if (existsSync(file))
38
- return c.html(readFileSync(file, "utf-8"));
52
+ if (existsSync(file)) {
53
+ return c.html(injectProjectSignature(readFileSync(file, "utf-8"), resolveProjectSignature(adapter, project.dir)));
54
+ }
39
55
  return c.text("not found", 404);
40
56
  }
41
57
  });
@@ -55,7 +71,7 @@ export function registerPreviewRoutes(api, adapter) {
55
71
  const html = buildSubCompositionHtml(project.dir, compPath, adapter.runtimeUrl, baseHref);
56
72
  if (!html)
57
73
  return c.text("not found", 404);
58
- return c.html(html);
74
+ return c.html(injectProjectSignature(html, resolveProjectSignature(adapter, project.dir)));
59
75
  });
60
76
  // Static asset serving (with range request support for audio/video seeking)
61
77
  api.get("/projects/:id/preview/*", async (c) => {
@@ -1 +1 @@
1
- {"version":3,"file":"preview.js","sourceRoot":"","sources":["../../../src/studio-api/routes/preview.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"preview.js","sourceRoot":"","sources":["../../../src/studio-api/routes/preview.ts"],"names":[],"mappings":"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"}
@@ -22,7 +22,7 @@ export function registerProjectRoutes(api, adapter) {
22
22
  if (!project)
23
23
  return c.json({ error: "not found" }, 404);
24
24
  const files = walkDir(project.dir);
25
- return c.json({ id: project.id, dir: project.dir, title: project.title, files });
25
+ return c.json({ id: project.id, files });
26
26
  });
27
27
  }
28
28
  //# sourceMappingURL=projects.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../../src/studio-api/routes/projects.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,MAAM,UAAU,qBAAqB,CAAC,GAAS,EAAE,OAAyB;IACxE,oBAAoB;IACpB,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC/B,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC;QAC9C,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,kDAAkD;IAClD,GAAG,CAAC,GAAG,CAAC,6BAA6B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACjD,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;YAC5B,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,GAAG,CAAC,CAAC;QACjD,CAAC;QACD,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,GAAG,CAAC,CAAC;QAChE,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,oBAAoB;IACpB,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACnC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAChE,IAAI,CAAC,OAAO;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,GAAG,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../../src/studio-api/routes/projects.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,MAAM,UAAU,qBAAqB,CAAC,GAAS,EAAE,OAAyB;IACxE,oBAAoB;IACpB,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC/B,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC;QAC9C,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,kDAAkD;IAClD,GAAG,CAAC,GAAG,CAAC,6BAA6B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACjD,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;YAC5B,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,GAAG,CAAC,CAAC;QACjD,CAAC;QACD,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,GAAG,CAAC,CAAC;QAChE,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,oBAAoB;IACpB,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACnC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAChE,IAAI,CAAC,OAAO;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,GAAG,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../src/studio-api/routes/render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAIjC,OAAO,KAAK,EAAE,gBAAgB,EAAkB,MAAM,aAAa,CAAC;AAEpE,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAqQ/E"}
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../src/studio-api/routes/render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAIjC,OAAO,KAAK,EAAE,gBAAgB,EAAkB,MAAM,aAAa,CAAC;AAEpE,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAkP/E"}
@@ -8,28 +8,30 @@ export function registerRenderRoutes(api, adapter) {
8
8
  const TTL_MS = 300_000;
9
9
  const CLEANUP_INTERVAL_MS = 60_000;
10
10
  let cleanupTimer = null;
11
- if (typeof process !== "undefined" &&
11
+ const cleanupEnabled = () => typeof process !== "undefined" &&
12
12
  process.env.NODE_ENV !== "production" &&
13
- !process.argv.includes("build")) {
14
- cleanupTimer = setInterval(() => {
15
- const now = Date.now();
16
- for (const [key, job] of renderJobs) {
17
- if ((job.status === "complete" || job.status === "failed") &&
18
- now - job.createdAt > TTL_MS) {
19
- renderJobs.delete(key);
20
- }
21
- }
22
- // Self-cleanup when no jobs remain
23
- if (renderJobs.size === 0 && cleanupTimer) {
24
- clearInterval(cleanupTimer);
25
- cleanupTimer = null;
13
+ !process.argv.includes("build");
14
+ const cleanupFinishedJobs = () => {
15
+ const now = Date.now();
16
+ for (const [key, job] of renderJobs) {
17
+ if ((job.status === "complete" || job.status === "failed") && now - job.createdAt > TTL_MS) {
18
+ renderJobs.delete(key);
26
19
  }
27
- }, CLEANUP_INTERVAL_MS);
28
- // Prevent the timer from keeping the process alive
29
- if (cleanupTimer && typeof cleanupTimer === "object" && "unref" in cleanupTimer) {
20
+ }
21
+ if (renderJobs.size === 0 && cleanupTimer) {
22
+ clearInterval(cleanupTimer);
23
+ cleanupTimer = null;
24
+ }
25
+ };
26
+ const ensureCleanupTimer = () => {
27
+ if (cleanupTimer || !cleanupEnabled())
28
+ return;
29
+ cleanupTimer = setInterval(cleanupFinishedJobs, CLEANUP_INTERVAL_MS);
30
+ if (typeof cleanupTimer === "object" && "unref" in cleanupTimer) {
30
31
  cleanupTimer.unref();
31
32
  }
32
- }
33
+ };
34
+ ensureCleanupTimer();
33
35
  // Start a render
34
36
  api.post("/projects/:id/render", async (c) => {
35
37
  const project = await adapter.resolveProject(c.req.param("id"));
@@ -62,25 +64,7 @@ export function registerRenderRoutes(api, adapter) {
62
64
  });
63
65
  jobState.createdAt = Date.now();
64
66
  renderJobs.set(jobId, jobState);
65
- // Restart cleanup timer if needed
66
- if (!cleanupTimer && typeof process !== "undefined" && process.env.NODE_ENV !== "production") {
67
- cleanupTimer = setInterval(() => {
68
- const now = Date.now();
69
- for (const [key, job] of renderJobs) {
70
- if ((job.status === "complete" || job.status === "failed") &&
71
- now - job.createdAt > TTL_MS) {
72
- renderJobs.delete(key);
73
- }
74
- }
75
- if (renderJobs.size === 0 && cleanupTimer) {
76
- clearInterval(cleanupTimer);
77
- cleanupTimer = null;
78
- }
79
- }, CLEANUP_INTERVAL_MS);
80
- if (cleanupTimer && typeof cleanupTimer === "object" && "unref" in cleanupTimer) {
81
- cleanupTimer.unref();
82
- }
83
- }
67
+ ensureCleanupTimer();
84
68
  return c.json({ jobId, status: "rendering" });
85
69
  });
86
70
  // SSE progress stream