@cueframe/kernel 0.2.38 → 0.2.39
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.
- package/dist/_members/component-runtime/render.d.ts.map +1 -1
- package/dist/_members/component-runtime/renderDiagnostics.d.ts +13 -0
- package/dist/_members/component-runtime/renderDiagnostics.d.ts.map +1 -1
- package/dist/_members/component-runtime/sourceAdmission.d.ts +17 -5
- package/dist/_members/component-runtime/sourceAdmission.d.ts.map +1 -1
- package/dist/{chunk-256ZO323.js → chunk-26NRV5BK.js} +2 -2
- package/dist/{chunk-H5CPILOK.js → chunk-5JYYZDLK.js} +14 -6
- package/dist/chunk-C7TTI7FP.js +161 -0
- package/dist/component-runtime/render.js +1 -1
- package/dist/component-runtime/sourceAdmission.js +5 -3
- package/dist/component-runtime.js +7 -5
- package/dist/render-harness.js +3 -3
- package/package.json +10 -10
- package/dist/chunk-SH5OTTVU.js +0 -88
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAMA,OAAO,EAGL,KAAK,SAAS,EACf,MAAM,gCAAgC,CAAC;AAMxC,OAAO,EAEL,KAAK,yBAAyB,EAC9B,KAAK,8BAA8B,EACnC,KAAK,0BAA0B,EAK/B,KAAK,uCAAuC,EAC5C,KAAK,iCAAiC,IAAI,wBAAwB,EAClE,KAAK,kCAAkC,IAAI,uCAAuC,EAClF,KAAK,sCAAsC,IAAI,2CAA2C,EAC3F,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,19 @@ export declare const GRAPHICS_ATTESTATION_PREFIX = "__cueframe_graphics_v2__:";
|
|
|
3
3
|
export declare const CAPTURE_PAGE_RASTER_ATTESTATION_PREFIX = "__cueframe_capture_raster_v1__:";
|
|
4
4
|
export declare const BROWSER_RUNTIME_ERROR_PREFIX = "__cueframe_component_error_v2__:";
|
|
5
5
|
export declare function componentRuntimeError(error: unknown, fallbackCode: RuntimeErrorCode, retryable?: boolean): ComponentRuntimeError;
|
|
6
|
+
/**
|
|
7
|
+
* Page diagnostics for one bake. Remotion renders on up to four pages at once,
|
|
8
|
+
* so one TypeError in the author's code arrives up to four times; joined
|
|
9
|
+
* verbatim it read as "×3" and sent a reporter bisecting three components for
|
|
10
|
+
* a defect in one. Identical text is one entry.
|
|
11
|
+
*/
|
|
12
|
+
export declare function pageDiagnosticSink(limit?: number): {
|
|
13
|
+
push(entry: {
|
|
14
|
+
type: string;
|
|
15
|
+
message: string;
|
|
16
|
+
}): void;
|
|
17
|
+
readonly lines: readonly string[];
|
|
18
|
+
};
|
|
6
19
|
export declare function parseGraphicsAttestationLog(text: string): ComponentGraphicsActualV2 | null;
|
|
7
20
|
export declare function parseCapturePageRasterAttestationLog(text: string): CapturePageRasterAttestation | null;
|
|
8
21
|
export declare function graphicsCollector(required: ComponentGraphicsRequirementV2): {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderDiagnostics.d.ts","sourceRoot":"","sources":["../src/renderDiagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmE,qBAAqB,EAA6B,KAAK,uCAAuC,IAAI,4BAA4B,EAAE,KAAK,yBAAyB,EAAE,KAAK,8BAA8B,EAAE,KAAK,yBAAyB,IAAI,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAE1V,eAAO,MAAM,2BAA2B,8BAA8B,CAAC;AACvE,eAAO,MAAM,sCAAsC,oCAAoC,CAAC;AACxF,eAAO,MAAM,4BAA4B,qCAAqC,CAAC;AAE/E,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,EACd,YAAY,EAAE,gBAAgB,EAC9B,SAAS,UAAQ,GAChB,qBAAqB,CAiBvB;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,yBAAyB,GAAG,IAAI,CAa1F;AAED,wBAAgB,oCAAoC,CAAC,IAAI,EAAE,MAAM,GAAG,4BAA4B,GAAG,IAAI,CAStG;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,8BAA8B;sBAGpD;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;eAiB9B,yBAAyB;EAUvC"}
|
|
1
|
+
{"version":3,"file":"renderDiagnostics.d.ts","sourceRoot":"","sources":["../src/renderDiagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmE,qBAAqB,EAA6B,KAAK,uCAAuC,IAAI,4BAA4B,EAAE,KAAK,yBAAyB,EAAE,KAAK,8BAA8B,EAAE,KAAK,yBAAyB,IAAI,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAE1V,eAAO,MAAM,2BAA2B,8BAA8B,CAAC;AACvE,eAAO,MAAM,sCAAsC,oCAAoC,CAAC;AACxF,eAAO,MAAM,4BAA4B,qCAAqC,CAAC;AAE/E,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,EACd,YAAY,EAAE,gBAAgB,EAC9B,SAAS,UAAQ,GAChB,qBAAqB,CAiBvB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,SAAI,GAAG;IAC7C,IAAI,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACrD,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC,CASA;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,yBAAyB,GAAG,IAAI,CAa1F;AAED,wBAAgB,oCAAoC,CAAC,IAAI,EAAE,MAAM,GAAG,4BAA4B,GAAG,IAAI,CAStG;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,8BAA8B;sBAGpD;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;eAiB9B,yBAAyB;EAUvC"}
|
|
@@ -1,14 +1,26 @@
|
|
|
1
1
|
import { type ComponentManifestV2, type ComponentSourceV2 } from './contracts.js';
|
|
2
|
+
/** Slots the source demonstrably takes delivery of, or `every` when it reads `assets` dynamically. */
|
|
3
|
+
export type SourceAssetReads = {
|
|
4
|
+
slots: ReadonlySet<string>;
|
|
5
|
+
every: boolean;
|
|
6
|
+
};
|
|
2
7
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
8
|
+
* Which declared slots the source reads, from the AST — comments, strings,
|
|
9
|
+
* regexes and type positions are not runtime reads. A static `assets.<slot>`
|
|
10
|
+
* (dot, bracket-literal or optional) or a destructure `{ <slot> } = assets`
|
|
11
|
+
* proves that slot. Any DYNAMIC use of `assets` — `assets[key]`,
|
|
12
|
+
* `Object.entries(assets)`, spreading or passing it on — proves every slot:
|
|
13
|
+
* the source took delivery through `assets`, which is all this rule exists to
|
|
14
|
+
* establish. Only `.handle` was accepted before, which refused working
|
|
15
|
+
* components that iterate their slots or hand `assets.<slot>` to a harness
|
|
16
|
+
* primitive, and taught authors to add dead `void assets.x?.handle` lines.
|
|
7
17
|
*/
|
|
8
|
-
export declare function
|
|
18
|
+
export declare function sourceAssetReads(tsxSource: string): SourceAssetReads;
|
|
9
19
|
export declare function missingDeclaredAssetHandleReads(tsxSource: string, manifest: Pick<ComponentManifestV2, 'assets'> & {
|
|
10
20
|
sceneShot?: unknown;
|
|
11
21
|
}): string[];
|
|
22
|
+
/** The refusal text, written once for the public gate and the Convex create/update lane. */
|
|
23
|
+
export declare function describeMissingAssetReads(missing: readonly string[]): string;
|
|
12
24
|
/** Refuse a component before bundling when its declared media cannot reach the mount. */
|
|
13
25
|
export declare function assertSourceReadsDeclaredAssets(source: Pick<ComponentSourceV2, 'componentId' | 'tsxSource' | 'manifest'>): void;
|
|
14
26
|
//# sourceMappingURL=sourceAdmission.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sourceAdmission.d.ts","sourceRoot":"","sources":["../src/sourceAdmission.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACvB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"sourceAdmission.d.ts","sourceRoot":"","sources":["../src/sourceAdmission.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACvB,MAAM,gBAAgB,CAAC;AAIxB,sGAAsG;AACtG,MAAM,MAAM,gBAAgB,GAAG;IAAE,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAsB9E;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAGpE;AAgHD,wBAAgB,+BAA+B,CAC7C,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC,GAAG;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GACtE,MAAM,EAAE,CA0BV;AAED,4FAA4F;AAC5F,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAQ5E;AAED,yFAAyF;AACzF,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,IAAI,CAAC,iBAAiB,EAAE,aAAa,GAAG,WAAW,GAAG,UAAU,CAAC,GACxE,IAAI,CAeN"}
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
assertSceneShotParamsAdmitted,
|
|
4
4
|
materializeComponentSource,
|
|
5
5
|
renderComponentAlpha
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-5JYYZDLK.js";
|
|
7
7
|
import {
|
|
8
8
|
componentArtifactId,
|
|
9
9
|
componentBundleId,
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
} from "./chunk-EXY4JJPH.js";
|
|
14
14
|
import {
|
|
15
15
|
assertSourceReadsDeclaredAssets
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-C7TTI7FP.js";
|
|
17
17
|
import {
|
|
18
18
|
resolvedComponentRenderer
|
|
19
19
|
} from "./chunk-5BAWOULP.js";
|
|
@@ -277,6 +277,16 @@ function componentRuntimeError(error, fallbackCode, retryable = false) {
|
|
|
277
277
|
}
|
|
278
278
|
return new ComponentRuntimeError(fallbackCode, message, { retryable, cause: error });
|
|
279
279
|
}
|
|
280
|
+
function pageDiagnosticSink(limit = 5) {
|
|
281
|
+
const lines = [];
|
|
282
|
+
return {
|
|
283
|
+
push(entry) {
|
|
284
|
+
const line = `${entry.type}: ${entry.message.slice(0, 2e3)}`;
|
|
285
|
+
if (lines.length < limit && !lines.includes(line)) lines.push(line);
|
|
286
|
+
},
|
|
287
|
+
lines
|
|
288
|
+
};
|
|
289
|
+
}
|
|
280
290
|
function parseGraphicsAttestationLog(text) {
|
|
281
291
|
if (!text.startsWith(GRAPHICS_ATTESTATION_PREFIX)) return null;
|
|
282
292
|
try {
|
|
@@ -2001,12 +2011,10 @@ async function renderComponentAlpha(opts) {
|
|
|
2001
2011
|
throw componentRuntimeError(error, "component_resource_exhausted", true);
|
|
2002
2012
|
}
|
|
2003
2013
|
let primaryError;
|
|
2004
|
-
const pageDiagnostics =
|
|
2014
|
+
const pageDiagnostics = pageDiagnosticSink();
|
|
2005
2015
|
try {
|
|
2006
2016
|
await sizeLocalLaneWindows(renderEntryRoot, browser, width, height);
|
|
2007
|
-
const firewall = await installComponentRequestFirewall(browser, bundleServer.origin, opts.allowedAssetOrigins ?? /* @__PURE__ */ new Set(),
|
|
2008
|
-
if (pageDiagnostics.length < 5) pageDiagnostics.push(`${entry.type}: ${entry.message.slice(0, 2e3)}`);
|
|
2009
|
-
});
|
|
2017
|
+
const firewall = await installComponentRequestFirewall(browser, bundleServer.origin, opts.allowedAssetOrigins ?? /* @__PURE__ */ new Set(), pageDiagnostics.push);
|
|
2010
2018
|
const host = await assertComponentBrowserHardware(browser, requiredGraphics);
|
|
2011
2019
|
const composition = await selectComposition({
|
|
2012
2020
|
serveUrl,
|
|
@@ -2075,10 +2083,10 @@ async function renderComponentAlpha(opts) {
|
|
|
2075
2083
|
return { videoPath, actualGraphics: collector.receipt(), host };
|
|
2076
2084
|
} catch (error) {
|
|
2077
2085
|
primaryError = componentRuntimeError(error, "component_runtime_error");
|
|
2078
|
-
if (pageDiagnostics.length && primaryError instanceof ComponentRuntimeError) {
|
|
2086
|
+
if (pageDiagnostics.lines.length && primaryError instanceof ComponentRuntimeError) {
|
|
2079
2087
|
primaryError = new ComponentRuntimeError(
|
|
2080
2088
|
primaryError.code,
|
|
2081
|
-
`${pageDiagnostics.join("\n")}
|
|
2089
|
+
`${pageDiagnostics.lines.join("\n")}
|
|
2082
2090
|
${primaryError.message}`,
|
|
2083
2091
|
{
|
|
2084
2092
|
retryable: primaryError.retryable,
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ComponentRuntimeError
|
|
3
|
+
} from "./chunk-ZVG446DJ.js";
|
|
4
|
+
|
|
5
|
+
// ../execution/component-runtime/src/sourceAdmission.ts
|
|
6
|
+
import { parse } from "@babel/parser";
|
|
7
|
+
var AST_METADATA_KEYS = /* @__PURE__ */ new Set(["loc", "start", "end", "errors", "comments", "extra", "leadingComments", "trailingComments", "innerComments"]);
|
|
8
|
+
var BINDING_KEYS = /* @__PURE__ */ new Set(["id", "params", "param", "label", "local", "imported", "exported", "name"]);
|
|
9
|
+
function isAssets(node) {
|
|
10
|
+
return !!node && typeof node === "object" && node.type === "Identifier" && node.name === "assets";
|
|
11
|
+
}
|
|
12
|
+
function staticMember(node) {
|
|
13
|
+
if (!node || typeof node !== "object") return null;
|
|
14
|
+
const candidate = node;
|
|
15
|
+
if (candidate.type !== "MemberExpression" && candidate.type !== "OptionalMemberExpression") return null;
|
|
16
|
+
const property = candidate.property;
|
|
17
|
+
if (!property) return null;
|
|
18
|
+
const name = candidate.computed === true ? property.type === "StringLiteral" && typeof property.value === "string" ? property.value : null : property.type === "Identifier" && typeof property.name === "string" ? property.name : null;
|
|
19
|
+
return name === null ? null : { object: candidate.object, property: name };
|
|
20
|
+
}
|
|
21
|
+
function sourceAssetReads(tsxSource) {
|
|
22
|
+
const scan = scanSourceReads(tsxSource);
|
|
23
|
+
return { slots: scan.assetSlots, every: scan.readsEverySlot };
|
|
24
|
+
}
|
|
25
|
+
function scanSourceReads(tsxSource) {
|
|
26
|
+
let root;
|
|
27
|
+
try {
|
|
28
|
+
root = parse(tsxSource, {
|
|
29
|
+
sourceType: "module",
|
|
30
|
+
plugins: ["jsx", "typescript"],
|
|
31
|
+
errorRecovery: false
|
|
32
|
+
});
|
|
33
|
+
} catch (error) {
|
|
34
|
+
throw new ComponentRuntimeError(
|
|
35
|
+
"component_does_not_compile",
|
|
36
|
+
error instanceof Error ? error.message : String(error),
|
|
37
|
+
{ cause: error }
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
const reads = /* @__PURE__ */ new Set();
|
|
41
|
+
let every = false;
|
|
42
|
+
let preparedPlan = false;
|
|
43
|
+
const recordPattern = (pattern) => {
|
|
44
|
+
for (const property of pattern.properties ?? []) {
|
|
45
|
+
if (property.type === "RestElement") {
|
|
46
|
+
every = true;
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
const key = property.key;
|
|
50
|
+
if (property.computed === true || !key) {
|
|
51
|
+
every = true;
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
if (key.type === "Identifier" && typeof key.name === "string") reads.add(key.name);
|
|
55
|
+
else if (key.type === "StringLiteral" && typeof key.value === "string") reads.add(key.value);
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
const visit = (value, position) => {
|
|
59
|
+
if (!value || typeof value !== "object") return;
|
|
60
|
+
if (Array.isArray(value)) {
|
|
61
|
+
for (const child of value) visit(child, position);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const node = value;
|
|
65
|
+
const type = typeof node.type === "string" ? node.type : "";
|
|
66
|
+
if (type === "Identifier") {
|
|
67
|
+
if (position === "value" && node.name === "assets") every = true;
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
if (type.startsWith("TS")) {
|
|
71
|
+
if ("expression" in node) visit(node.expression, "value");
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const leaf = staticMember(node);
|
|
75
|
+
if (leaf?.property === "preparedSceneShot") preparedPlan = true;
|
|
76
|
+
if (type === "MemberExpression" || type === "OptionalMemberExpression") {
|
|
77
|
+
if (isAssets(node.object)) {
|
|
78
|
+
if (leaf) reads.add(leaf.property);
|
|
79
|
+
else every = true;
|
|
80
|
+
} else {
|
|
81
|
+
visit(node.object, "value");
|
|
82
|
+
}
|
|
83
|
+
if (node.computed === true) visit(node.property, "value");
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
if (type === "VariableDeclarator" && isAssets(node.init) && node.id?.type === "ObjectPattern") {
|
|
87
|
+
recordPattern(node.id);
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (type === "ObjectPattern") {
|
|
91
|
+
for (const property of node.properties ?? []) {
|
|
92
|
+
if (property.type === "RestElement") {
|
|
93
|
+
visit(property.argument, "binding");
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
const key = property.key;
|
|
97
|
+
const nested = property.value;
|
|
98
|
+
if (property.computed === true) visit(key, "value");
|
|
99
|
+
if (property.computed !== true && key?.type === "Identifier" && key.name === "assets" && nested?.type === "ObjectPattern") {
|
|
100
|
+
recordPattern(nested);
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
visit(nested, "binding");
|
|
104
|
+
}
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (type === "AssignmentPattern") {
|
|
108
|
+
visit(node.left, "binding");
|
|
109
|
+
visit(node.right, "value");
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
if (type === "ObjectProperty" || type === "ObjectMethod" || type === "ClassProperty" || type === "ClassMethod") {
|
|
113
|
+
if (node.computed === true) visit(node.key, "value");
|
|
114
|
+
for (const [key, child] of Object.entries(node)) {
|
|
115
|
+
if (key === "key" || AST_METADATA_KEYS.has(key)) continue;
|
|
116
|
+
visit(child, BINDING_KEYS.has(key) ? "binding" : "value");
|
|
117
|
+
}
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
for (const [key, child] of Object.entries(node)) {
|
|
121
|
+
if (AST_METADATA_KEYS.has(key)) continue;
|
|
122
|
+
visit(child, BINDING_KEYS.has(key) ? "binding" : "value");
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
visit(root, "value");
|
|
126
|
+
return { assetSlots: reads, readsEverySlot: every, readsPreparedScenePlan: preparedPlan };
|
|
127
|
+
}
|
|
128
|
+
function missingDeclaredAssetHandleReads(tsxSource, manifest) {
|
|
129
|
+
const slots = Object.keys(manifest.assets);
|
|
130
|
+
if (slots.length === 0) return [];
|
|
131
|
+
const scan = scanSourceReads(tsxSource);
|
|
132
|
+
if (manifest.sceneShot !== void 0 && scan.readsPreparedScenePlan) return [];
|
|
133
|
+
if (scan.readsEverySlot) return [];
|
|
134
|
+
return slots.filter((slot) => !scan.assetSlots.has(slot));
|
|
135
|
+
}
|
|
136
|
+
function describeMissingAssetReads(missing) {
|
|
137
|
+
return `The manifest declares asset slot(s) ${missing.map((slot) => JSON.stringify(slot)).join(", ")} but the source never reads ${missing.length === 1 ? "it" : "them"} from \`assets\`. Declared slots are delivered to the mount as \`assets[slot]\` ({ handle: a fetchable URL for <Img>/<Video>/<Audio>, \u2026 }); \`params\` is the clip's \`props\` and carries no asset URL. Mount as ({ durationInFrames, params, assets, render }) and read \`assets.${missing[0]}.handle\`, or read the slots dynamically (\`assets[key]\`, \`Object.entries(assets)\`), which counts for every declared slot.`;
|
|
138
|
+
}
|
|
139
|
+
function assertSourceReadsDeclaredAssets(source) {
|
|
140
|
+
const missing = missingDeclaredAssetHandleReads(source.tsxSource, source.manifest);
|
|
141
|
+
if (missing.length === 0) return;
|
|
142
|
+
throw new ComponentRuntimeError(
|
|
143
|
+
"invalid_component_source",
|
|
144
|
+
describeMissingAssetReads(missing),
|
|
145
|
+
{
|
|
146
|
+
locator: {
|
|
147
|
+
stage: "source-admission",
|
|
148
|
+
componentId: source.componentId,
|
|
149
|
+
path: "manifest.assets",
|
|
150
|
+
slots: missing
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
export {
|
|
157
|
+
sourceAssetReads,
|
|
158
|
+
missingDeclaredAssetHandleReads,
|
|
159
|
+
describeMissingAssetReads,
|
|
160
|
+
assertSourceReadsDeclaredAssets
|
|
161
|
+
};
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
2
|
assertSourceReadsDeclaredAssets,
|
|
3
|
+
describeMissingAssetReads,
|
|
3
4
|
missingDeclaredAssetHandleReads,
|
|
4
|
-
|
|
5
|
-
} from "../chunk-
|
|
5
|
+
sourceAssetReads
|
|
6
|
+
} from "../chunk-C7TTI7FP.js";
|
|
6
7
|
import "../chunk-ZVG446DJ.js";
|
|
7
8
|
import "../chunk-2ESYSVXG.js";
|
|
8
9
|
export {
|
|
9
10
|
assertSourceReadsDeclaredAssets,
|
|
11
|
+
describeMissingAssetReads,
|
|
10
12
|
missingDeclaredAssetHandleReads,
|
|
11
|
-
|
|
13
|
+
sourceAssetReads
|
|
12
14
|
};
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
sourceIdentityForBake,
|
|
8
8
|
startComponentAssetServer,
|
|
9
9
|
verifyComponentOutput
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-26NRV5BK.js";
|
|
11
11
|
import {
|
|
12
12
|
COMPONENT_MEDIA_HEADROOM,
|
|
13
13
|
COMPONENT_MEDIA_TIERS,
|
|
@@ -52,7 +52,7 @@ import {
|
|
|
52
52
|
stagedBrowserLocator,
|
|
53
53
|
verifyLocalStagedBrowser,
|
|
54
54
|
vp9AlphaFfmpegOverride
|
|
55
|
-
} from "./chunk-
|
|
55
|
+
} from "./chunk-5JYYZDLK.js";
|
|
56
56
|
import "./chunk-WB2VFDQZ.js";
|
|
57
57
|
import {
|
|
58
58
|
bundleIdentityFields,
|
|
@@ -71,9 +71,10 @@ import {
|
|
|
71
71
|
} from "./chunk-5NGYBI5Z.js";
|
|
72
72
|
import {
|
|
73
73
|
assertSourceReadsDeclaredAssets,
|
|
74
|
+
describeMissingAssetReads,
|
|
74
75
|
missingDeclaredAssetHandleReads,
|
|
75
|
-
|
|
76
|
-
} from "./chunk-
|
|
76
|
+
sourceAssetReads
|
|
77
|
+
} from "./chunk-C7TTI7FP.js";
|
|
77
78
|
import {
|
|
78
79
|
HALF_FLOAT_COLOR_TARGET_EXTENSIONS,
|
|
79
80
|
admittedHost,
|
|
@@ -210,6 +211,7 @@ export {
|
|
|
210
211
|
componentStillRasterAffectingFlags,
|
|
211
212
|
createComponentStillSession,
|
|
212
213
|
decideComponentRequest,
|
|
214
|
+
describeMissingAssetReads,
|
|
213
215
|
generateLocalRoot,
|
|
214
216
|
importFromRenderEntry,
|
|
215
217
|
installComponentRequestFirewall,
|
|
@@ -232,7 +234,7 @@ export {
|
|
|
232
234
|
sha256Hex,
|
|
233
235
|
shouldIsolateWebGpuStillBrowser,
|
|
234
236
|
sizeLocalLaneWindows,
|
|
235
|
-
|
|
237
|
+
sourceAssetReads,
|
|
236
238
|
sourceIdentityForBake,
|
|
237
239
|
sourceVersionId,
|
|
238
240
|
stagedBrowserLocator,
|
package/dist/render-harness.js
CHANGED
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
renderInputAssets
|
|
13
13
|
} from "./chunk-KSRFYFUZ.js";
|
|
14
14
|
import "./chunk-OSMXQV5V.js";
|
|
15
|
-
import "./chunk-
|
|
15
|
+
import "./chunk-26NRV5BK.js";
|
|
16
16
|
import "./chunk-BVA3537Z.js";
|
|
17
17
|
import {
|
|
18
18
|
COMPONENT_STILL_RUNTIME_IDENTITY,
|
|
@@ -23,14 +23,14 @@ import {
|
|
|
23
23
|
readMaterializedComponentSource,
|
|
24
24
|
resolveRenderEntryRoot,
|
|
25
25
|
verifyLocalStagedBrowser
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-5JYYZDLK.js";
|
|
27
27
|
import "./chunk-WB2VFDQZ.js";
|
|
28
28
|
import {
|
|
29
29
|
sourceVersionId
|
|
30
30
|
} from "./chunk-EXY4JJPH.js";
|
|
31
31
|
import "./chunk-DAARYRNT.js";
|
|
32
32
|
import "./chunk-5NGYBI5Z.js";
|
|
33
|
-
import "./chunk-
|
|
33
|
+
import "./chunk-C7TTI7FP.js";
|
|
34
34
|
import {
|
|
35
35
|
componentBrowserBackend
|
|
36
36
|
} from "./chunk-5BAWOULP.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cueframe/kernel",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.39",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Publish-only aggregate of CueFrame's isomorphic kernel packages — composition, primitives, authoring, MCP, and friends shipped as one npm artifact. Members remain separate workspace packages; this only changes what ships.",
|
|
6
6
|
"files": [
|
|
@@ -16,26 +16,26 @@
|
|
|
16
16
|
"devDependencies": {
|
|
17
17
|
"tsup": "^8.3.5",
|
|
18
18
|
"typescript": "^5.9.3",
|
|
19
|
+
"@cueframe/account-model": "0.1.0",
|
|
19
20
|
"@cueframe/authoring": "0.1.0",
|
|
20
21
|
"@cueframe/animate": "0.1.0",
|
|
21
|
-
"@cueframe/brand-derivation": "0.1.0",
|
|
22
22
|
"@cueframe/cloud-import": "0.1.0",
|
|
23
|
-
"@cueframe/account-model": "0.1.0",
|
|
24
23
|
"@cueframe/compose": "0.1.0",
|
|
24
|
+
"@cueframe/composition-ops": "0.1.0",
|
|
25
|
+
"@cueframe/brand-derivation": "0.1.0",
|
|
26
|
+
"@cueframe/core": "0.1.0",
|
|
25
27
|
"@cueframe/composition": "0.1.0",
|
|
26
28
|
"@cueframe/component-runtime": "0.1.0",
|
|
27
|
-
"@cueframe/
|
|
29
|
+
"@cueframe/director": "0.1.0",
|
|
28
30
|
"@cueframe/errors": "0.1.0",
|
|
29
|
-
"@cueframe/composition-ops": "0.1.0",
|
|
30
31
|
"@cueframe/foundation": "0.1.0",
|
|
32
|
+
"@cueframe/media-model": "0.1.0",
|
|
31
33
|
"@cueframe/nle-export": "0.1.0",
|
|
32
34
|
"@cueframe/perception": "0.1.0",
|
|
33
|
-
"@cueframe/
|
|
34
|
-
"@cueframe/mcp": "0.1.0",
|
|
35
|
+
"@cueframe/primitives": "0.1.0",
|
|
35
36
|
"@cueframe/plane": "0.1.0",
|
|
36
|
-
"@cueframe/
|
|
37
|
-
"@cueframe/
|
|
38
|
-
"@cueframe/primitives": "0.1.0"
|
|
37
|
+
"@cueframe/mcp": "0.1.0",
|
|
38
|
+
"@cueframe/render-harness": "0.1.0"
|
|
39
39
|
},
|
|
40
40
|
"peerDependencies": {
|
|
41
41
|
"gsap": "3.13.0",
|
package/dist/chunk-SH5OTTVU.js
DELETED
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ComponentRuntimeError
|
|
3
|
-
} from "./chunk-ZVG446DJ.js";
|
|
4
|
-
|
|
5
|
-
// ../execution/component-runtime/src/sourceAdmission.ts
|
|
6
|
-
import { parse } from "@babel/parser";
|
|
7
|
-
function staticMember(node) {
|
|
8
|
-
if (!node || typeof node !== "object") return null;
|
|
9
|
-
const candidate = node;
|
|
10
|
-
if (candidate.type !== "MemberExpression" && candidate.type !== "OptionalMemberExpression") return null;
|
|
11
|
-
const property = candidate.property;
|
|
12
|
-
if (!property) return null;
|
|
13
|
-
const name = candidate.computed === true ? property.type === "StringLiteral" && typeof property.value === "string" ? property.value : null : property.type === "Identifier" && typeof property.name === "string" ? property.name : null;
|
|
14
|
-
return name === null ? null : { object: candidate.object, property: name };
|
|
15
|
-
}
|
|
16
|
-
function sourceAssetHandleReads(tsxSource) {
|
|
17
|
-
return scanSourceReads(tsxSource).assetHandleSlots;
|
|
18
|
-
}
|
|
19
|
-
function scanSourceReads(tsxSource) {
|
|
20
|
-
let root;
|
|
21
|
-
try {
|
|
22
|
-
root = parse(tsxSource, {
|
|
23
|
-
sourceType: "module",
|
|
24
|
-
plugins: ["jsx", "typescript"],
|
|
25
|
-
errorRecovery: false
|
|
26
|
-
});
|
|
27
|
-
} catch (error) {
|
|
28
|
-
throw new ComponentRuntimeError(
|
|
29
|
-
"component_does_not_compile",
|
|
30
|
-
error instanceof Error ? error.message : String(error),
|
|
31
|
-
{ cause: error }
|
|
32
|
-
);
|
|
33
|
-
}
|
|
34
|
-
const reads = /* @__PURE__ */ new Set();
|
|
35
|
-
let preparedPlan = false;
|
|
36
|
-
const visit = (value) => {
|
|
37
|
-
if (!value || typeof value !== "object") return;
|
|
38
|
-
if (Array.isArray(value)) {
|
|
39
|
-
for (const child of value) visit(child);
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
const node = value;
|
|
43
|
-
const leaf = staticMember(node);
|
|
44
|
-
if (leaf?.property === "preparedSceneShot") preparedPlan = true;
|
|
45
|
-
if (leaf?.property === "handle") {
|
|
46
|
-
const slot = staticMember(leaf.object);
|
|
47
|
-
const rootObject = slot?.object;
|
|
48
|
-
if (slot && rootObject?.type === "Identifier" && rootObject.name === "assets") {
|
|
49
|
-
reads.add(slot.property);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
for (const [key, child] of Object.entries(node)) {
|
|
53
|
-
if (key === "loc" || key === "start" || key === "end" || key === "errors" || key === "comments") continue;
|
|
54
|
-
visit(child);
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
visit(root);
|
|
58
|
-
return { assetHandleSlots: reads, readsPreparedScenePlan: preparedPlan };
|
|
59
|
-
}
|
|
60
|
-
function missingDeclaredAssetHandleReads(tsxSource, manifest) {
|
|
61
|
-
const slots = Object.keys(manifest.assets);
|
|
62
|
-
if (slots.length === 0) return [];
|
|
63
|
-
const scan = scanSourceReads(tsxSource);
|
|
64
|
-
if (manifest.sceneShot !== void 0 && scan.readsPreparedScenePlan) return [];
|
|
65
|
-
return slots.filter((slot) => !scan.assetHandleSlots.has(slot));
|
|
66
|
-
}
|
|
67
|
-
function assertSourceReadsDeclaredAssets(source) {
|
|
68
|
-
const missing = missingDeclaredAssetHandleReads(source.tsxSource, source.manifest);
|
|
69
|
-
if (missing.length === 0) return;
|
|
70
|
-
throw new ComponentRuntimeError(
|
|
71
|
-
"invalid_component_source",
|
|
72
|
-
`The manifest declares asset slot(s) ${missing.map((slot) => JSON.stringify(slot)).join(", ")} but the source never reads ${missing.length === 1 ? "it" : "them"} through \`assets[slot].handle\`. Declared slots are delivered to the mount as \`assets[slot].handle\` (a fetchable URL for <Img>/<Video>/<Audio>); \`params\` is the clip's \`props\` and carries no asset URL. Mount as ({ durationInFrames, params, assets, render }) and read \`assets.${missing[0]}.handle\`.`,
|
|
73
|
-
{
|
|
74
|
-
locator: {
|
|
75
|
-
stage: "source-admission",
|
|
76
|
-
componentId: source.componentId,
|
|
77
|
-
path: "manifest.assets",
|
|
78
|
-
slots: missing
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
export {
|
|
85
|
-
sourceAssetHandleReads,
|
|
86
|
-
missingDeclaredAssetHandleReads,
|
|
87
|
-
assertSourceReadsDeclaredAssets
|
|
88
|
-
};
|