@tamagui/compiler-core 3.0.0-beta.924.1 → 3.0.1
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/cjs/ast.cjs +22 -8
- package/dist/cjs/evaluate.cjs +2 -2
- package/dist/cjs/lower.cjs +3 -3
- package/dist/cjs/normalize.cjs +11 -6
- package/dist/cjs/yuku.cjs +2 -2
- package/dist/esm/ast.mjs +22 -8
- package/dist/esm/ast.mjs.map +1 -1
- package/dist/esm/evaluate.mjs +2 -2
- package/dist/esm/evaluate.mjs.map +1 -1
- package/dist/esm/lower.mjs +4 -4
- package/dist/esm/lower.mjs.map +1 -1
- package/dist/esm/normalize.mjs +11 -6
- package/dist/esm/normalize.mjs.map +1 -1
- package/dist/esm/yuku.mjs +2 -2
- package/dist/esm/yuku.mjs.map +1 -1
- package/package.json +5 -4
- package/src/ast.ts +28 -8
- package/src/evaluate.ts +5 -5
- package/src/lower.ts +17 -4
- package/src/normalize.ts +15 -28
- package/src/yuku.ts +4 -3
- package/types/ast.d.ts +2 -1
- package/types/ast.d.ts.map +1 -1
- package/types/lower.d.ts +5 -2
- package/types/lower.d.ts.map +1 -1
- package/types/normalize.d.ts +1 -1
- package/types/normalize.d.ts.map +1 -1
- package/types/yuku.d.ts.map +1 -1
package/dist/cjs/ast.cjs
CHANGED
|
@@ -42,8 +42,9 @@ function isAstNode(value) {
|
|
|
42
42
|
}
|
|
43
43
|
function walkAst(node, visitor, parent = null, key = null) {
|
|
44
44
|
visitor(node, parent, key);
|
|
45
|
-
for (const
|
|
45
|
+
for (const childKey of Object.keys(node)) {
|
|
46
46
|
if (ignoredKeys.has(childKey)) continue;
|
|
47
|
+
const value = node[childKey];
|
|
47
48
|
if (isAstNode(value)) {
|
|
48
49
|
walkAst(value, visitor, node, childKey);
|
|
49
50
|
} else if (Array.isArray(value)) {
|
|
@@ -55,14 +56,27 @@ function walkAst(node, visitor, parent = null, key = null) {
|
|
|
55
56
|
}
|
|
56
57
|
}
|
|
57
58
|
}
|
|
58
|
-
function findAstNode(root, predicate) {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
if (
|
|
62
|
-
|
|
59
|
+
function findAstNode(root, predicate, span) {
|
|
60
|
+
function visit(node, parent, key) {
|
|
61
|
+
if (span && (node.start > span.start || node.end < span.end)) return null;
|
|
62
|
+
if (predicate(node, parent, key)) return node;
|
|
63
|
+
for (const childKey of Object.keys(node)) {
|
|
64
|
+
if (ignoredKeys.has(childKey)) continue;
|
|
65
|
+
const value = node[childKey];
|
|
66
|
+
if (isAstNode(value)) {
|
|
67
|
+
const found = visit(value, node, childKey);
|
|
68
|
+
if (found) return found;
|
|
69
|
+
} else if (Array.isArray(value)) {
|
|
70
|
+
for (const child of value) {
|
|
71
|
+
if (!isAstNode(child)) continue;
|
|
72
|
+
const found = visit(child, node, childKey);
|
|
73
|
+
if (found) return found;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
63
76
|
}
|
|
64
|
-
|
|
65
|
-
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
return visit(root, null, null);
|
|
66
80
|
}
|
|
67
81
|
function childNode(node, key) {
|
|
68
82
|
const value = node[key];
|
package/dist/cjs/evaluate.cjs
CHANGED
|
@@ -360,7 +360,7 @@ function evaluateDynamicNode(resolver, id, input, state) {
|
|
|
360
360
|
const expression = expressions[position];
|
|
361
361
|
if (!expression) continue;
|
|
362
362
|
const part = evaluateDynamicNode(resolver, id, expression, state);
|
|
363
|
-
if (!part?.values) return
|
|
363
|
+
if (!part?.values) return { type: "string" };
|
|
364
364
|
const next = [];
|
|
365
365
|
for (const value of values) {
|
|
366
366
|
for (const primitive of part.values) {
|
|
@@ -368,7 +368,7 @@ function evaluateDynamicNode(resolver, id, input, state) {
|
|
|
368
368
|
if (!next.includes(joined)) next.push(joined);
|
|
369
369
|
}
|
|
370
370
|
}
|
|
371
|
-
if (next.length > 32) return
|
|
371
|
+
if (next.length > 32) return { type: "string" };
|
|
372
372
|
values = next;
|
|
373
373
|
}
|
|
374
374
|
return {
|
package/dist/cjs/lower.cjs
CHANGED
|
@@ -26,7 +26,7 @@ __export(lower_exports, {
|
|
|
26
26
|
module.exports = __toCommonJS(lower_exports);
|
|
27
27
|
var import_diagnostics = require("./diagnostics.cjs");
|
|
28
28
|
var import_output = require("./output.cjs");
|
|
29
|
-
const LOWERED_MODULE_PLAN_VERSION =
|
|
29
|
+
const LOWERED_MODULE_PLAN_VERSION = 5;
|
|
30
30
|
function compareCodeUnits(left, right) {
|
|
31
31
|
return left < right ? -1 : left > right ? 1 : 0;
|
|
32
32
|
}
|
|
@@ -53,13 +53,13 @@ function unsafeEntry(element, entry, component, host) {
|
|
|
53
53
|
if (entry.kind === "spread" && entry.value.kind !== "static") {
|
|
54
54
|
return diagnostic("local/unsafe-style-spread", element, "Unevaluated spread may change style and duplicate-prop precedence");
|
|
55
55
|
}
|
|
56
|
-
if (entry.kind === "prop" && host.isStyleProp(entry.name, component) && (entry.value.kind === "bailout" || entry.value.kind === "conditional") && !host.canLowerDynamicStyleProp?.(entry.name, component, entry.value.kind)) {
|
|
56
|
+
if (entry.kind === "prop" && host.isStyleProp(entry.name, component) && (entry.value.kind === "bailout" || entry.value.kind === "conditional") && !host.canLowerDynamicStyleProp?.(entry.name, component, entry.value.kind, entry.value.kind === "bailout" ? entry.value.dynamic : null)) {
|
|
57
57
|
return diagnostic("local/dynamic-style-value", element, `Style prop ${entry.name} could not be evaluated`, entry.name);
|
|
58
58
|
}
|
|
59
59
|
if (entry.kind === "prop" && entry.value.kind === "object") {
|
|
60
60
|
for (const member of entry.value.members) {
|
|
61
61
|
if (member.value.kind !== "bailout" && member.value.kind !== "conditional") continue;
|
|
62
|
-
if (!host.isStyleProp(member.name, component) || !host.canLowerDynamicStyleProp?.(member.name, component, member.value.kind)) {
|
|
62
|
+
if (!host.isStyleProp(member.name, component) || !host.canLowerDynamicStyleProp?.(member.name, component, member.value.kind, member.value.kind === "bailout" ? member.value.dynamic : null)) {
|
|
63
63
|
return diagnostic("local/dynamic-style-value", element, `Style prop ${member.name} could not be evaluated`, member.name);
|
|
64
64
|
}
|
|
65
65
|
}
|
package/dist/cjs/normalize.cjs
CHANGED
|
@@ -46,19 +46,21 @@ function finalizeElement(base, entries, bailouts) {
|
|
|
46
46
|
bailouts
|
|
47
47
|
};
|
|
48
48
|
}
|
|
49
|
-
function definitionFromDeclaration(id, name,
|
|
49
|
+
function definitionFromDeclaration(id, name, declaration, parentOf) {
|
|
50
50
|
let identifier = declaration;
|
|
51
51
|
let initializer = null;
|
|
52
52
|
let constant = false;
|
|
53
53
|
if (declaration.type === "VariableDeclarator") {
|
|
54
54
|
identifier = (0, import_ast.childNode)(declaration, "id") ?? declaration;
|
|
55
55
|
initializer = (0, import_ast.childNode)(declaration, "init");
|
|
56
|
-
|
|
56
|
+
const parent = parentOf(declaration);
|
|
57
|
+
constant = parent?.type === "VariableDeclaration" && parent.kind === "const";
|
|
57
58
|
} else if (declaration.type === "Identifier") {
|
|
58
|
-
const declarator = (
|
|
59
|
-
if (declarator) {
|
|
59
|
+
const declarator = parentOf(declaration);
|
|
60
|
+
if (declarator?.type === "VariableDeclarator" && (0, import_ast.childNode)(declarator, "id")?.start === declaration.start) {
|
|
60
61
|
initializer = (0, import_ast.childNode)(declarator, "init");
|
|
61
|
-
|
|
62
|
+
const parent = parentOf(declarator);
|
|
63
|
+
constant = parent?.type === "VariableDeclaration" && parent.kind === "const";
|
|
62
64
|
}
|
|
63
65
|
}
|
|
64
66
|
return {
|
|
@@ -615,7 +617,10 @@ function normalizeElements(candidate, rawId, imports = []) {
|
|
|
615
617
|
};
|
|
616
618
|
}
|
|
617
619
|
function nodeAtSpan(program, start, end) {
|
|
618
|
-
return (0, import_ast.findAstNode)(program, (node) => node.start === start && node.end === end
|
|
620
|
+
return (0, import_ast.findAstNode)(program, (node) => node.start === start && node.end === end, {
|
|
621
|
+
start,
|
|
622
|
+
end
|
|
623
|
+
});
|
|
619
624
|
}
|
|
620
625
|
function asAstNode(value, label) {
|
|
621
626
|
if (!(0, import_ast.isAstNode)(value)) throw new Error(`${label} is not an AST node`);
|
package/dist/cjs/yuku.cjs
CHANGED
|
@@ -63,8 +63,7 @@ var YukuCandidate = class {
|
|
|
63
63
|
#definitionSite(symbol) {
|
|
64
64
|
const declaration = symbol.declarations[0];
|
|
65
65
|
if (!declaration) return null;
|
|
66
|
-
|
|
67
|
-
return (0, import_normalize.definitionFromDeclaration)(symbol.module.path, symbol.name, program, (0, import_normalize.asAstNode)(declaration, `${symbol.name} declaration`));
|
|
66
|
+
return (0, import_normalize.definitionFromDeclaration)(symbol.module.path, symbol.name, (0, import_normalize.asAstNode)(declaration, `${symbol.name} declaration`), (node) => symbol.module.parentOf(node));
|
|
68
67
|
}
|
|
69
68
|
definitionOf(id, localName) {
|
|
70
69
|
const symbol = this.#canonicalSymbol(id, localName);
|
|
@@ -143,6 +142,7 @@ const yukuFactory = {
|
|
|
143
142
|
if (node.type !== "ImportDeclaration" && node.type !== "ExportNamedDeclaration" && node.type !== "ExportAllDeclaration" && node.type !== "ImportExpression") {
|
|
144
143
|
return;
|
|
145
144
|
}
|
|
145
|
+
if (node.importKind === "type" || node.exportKind === "type") return;
|
|
146
146
|
const sourceNode = (0, import_ast.childNode)(node, "source");
|
|
147
147
|
if (sourceNode && typeof sourceNode.value === "string") {
|
|
148
148
|
found.push({
|
package/dist/esm/ast.mjs
CHANGED
|
@@ -10,8 +10,9 @@ function isAstNode(value) {
|
|
|
10
10
|
}
|
|
11
11
|
function walkAst(node, visitor, parent = null, key = null) {
|
|
12
12
|
visitor(node, parent, key);
|
|
13
|
-
for (const
|
|
13
|
+
for (const childKey of Object.keys(node)) {
|
|
14
14
|
if (ignoredKeys.has(childKey)) continue;
|
|
15
|
+
const value = node[childKey];
|
|
15
16
|
if (isAstNode(value)) {
|
|
16
17
|
walkAst(value, visitor, node, childKey);
|
|
17
18
|
} else if (Array.isArray(value)) {
|
|
@@ -23,14 +24,27 @@ function walkAst(node, visitor, parent = null, key = null) {
|
|
|
23
24
|
}
|
|
24
25
|
}
|
|
25
26
|
}
|
|
26
|
-
function findAstNode(root, predicate) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
if (
|
|
30
|
-
|
|
27
|
+
function findAstNode(root, predicate, span) {
|
|
28
|
+
function visit(node, parent, key) {
|
|
29
|
+
if (span && (node.start > span.start || node.end < span.end)) return null;
|
|
30
|
+
if (predicate(node, parent, key)) return node;
|
|
31
|
+
for (const childKey of Object.keys(node)) {
|
|
32
|
+
if (ignoredKeys.has(childKey)) continue;
|
|
33
|
+
const value = node[childKey];
|
|
34
|
+
if (isAstNode(value)) {
|
|
35
|
+
const found = visit(value, node, childKey);
|
|
36
|
+
if (found) return found;
|
|
37
|
+
} else if (Array.isArray(value)) {
|
|
38
|
+
for (const child of value) {
|
|
39
|
+
if (!isAstNode(child)) continue;
|
|
40
|
+
const found = visit(child, node, childKey);
|
|
41
|
+
if (found) return found;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
31
44
|
}
|
|
32
|
-
|
|
33
|
-
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
return visit(root, null, null);
|
|
34
48
|
}
|
|
35
49
|
function childNode(node, key) {
|
|
36
50
|
const value = node[key];
|
package/dist/esm/ast.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast.js","names":[],"sources":["esm/ast.js"],"sourcesContent":["const ignoredKeys = /* @__PURE__ */ new Set([\"loc\", \"range\", \"parent\", \"comments\", \"tokens\"]);\nfunction isAstNode(value) {\n return typeof value === \"object\" && value !== null && typeof value.type === \"string\" && typeof value.start === \"number\" && typeof value.end === \"number\";\n}\nfunction walkAst(node, visitor, parent = null, key = null) {\n visitor(node, parent, key);\n for (const
|
|
1
|
+
{"version":3,"file":"ast.js","names":[],"sources":["esm/ast.js"],"sourcesContent":["const ignoredKeys = /* @__PURE__ */ new Set([\"loc\", \"range\", \"parent\", \"comments\", \"tokens\"]);\nfunction isAstNode(value) {\n return typeof value === \"object\" && value !== null && typeof value.type === \"string\" && typeof value.start === \"number\" && typeof value.end === \"number\";\n}\nfunction walkAst(node, visitor, parent = null, key = null) {\n visitor(node, parent, key);\n for (const childKey of Object.keys(node)) {\n if (ignoredKeys.has(childKey)) continue;\n const value = node[childKey];\n if (isAstNode(value)) {\n walkAst(value, visitor, node, childKey);\n } else if (Array.isArray(value)) {\n for (const child of value) {\n if (isAstNode(child)) {\n walkAst(child, visitor, node, childKey);\n }\n }\n }\n }\n}\nfunction findAstNode(root, predicate, span) {\n function visit(node, parent, key) {\n if (span && (node.start > span.start || node.end < span.end)) return null;\n if (predicate(node, parent, key)) return node;\n for (const childKey of Object.keys(node)) {\n if (ignoredKeys.has(childKey)) continue;\n const value = node[childKey];\n if (isAstNode(value)) {\n const found = visit(value, node, childKey);\n if (found) return found;\n } else if (Array.isArray(value)) {\n for (const child of value) {\n if (!isAstNode(child)) continue;\n const found = visit(child, node, childKey);\n if (found) return found;\n }\n }\n }\n return null;\n }\n return visit(root, null, null);\n}\nfunction childNode(node, key) {\n const value = node[key];\n return isAstNode(value) ? value : null;\n}\nfunction childNodes(node, key) {\n const value = node[key];\n return Array.isArray(value) ? value.filter(isAstNode) : [];\n}\nfunction identifierName(node) {\n if (!node || node.type !== \"Identifier\" && node.type !== \"JSXIdentifier\") return null;\n return typeof node.name === \"string\" ? node.name : null;\n}\nfunction literalValue(node) {\n if (!node) return void 0;\n if (node.type === \"Literal\" || node.type.endsWith(\"Literal\")) {\n return node.value;\n }\n return void 0;\n}\nfunction unwrapExpression(node) {\n let current = node;\n while (current.type === \"TSAsExpression\" || current.type === \"TSSatisfiesExpression\" || current.type === \"TSNonNullExpression\" || current.type === \"ParenthesizedExpression\") {\n const expression = childNode(current, \"expression\");\n if (!expression) break;\n current = expression;\n }\n return current;\n}\nexport {\n childNode,\n childNodes,\n findAstNode,\n identifierName,\n isAstNode,\n literalValue,\n unwrapExpression,\n walkAst\n};\n//# sourceMappingURL=ast.js.map\n"],"mappings":";AAAA,MAAM,8BAA8B,IAAI,IAAI;CAAC;CAAO;CAAS;CAAU;CAAY;AAAQ,CAAC;AAC5F,SAAS,UAAU,OAAO;CACxB,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,OAAO,MAAM,SAAS,YAAY,OAAO,MAAM,UAAU,YAAY,OAAO,MAAM,QAAQ;AAClJ;AACA,SAAS,QAAQ,MAAM,SAAS,SAAS,MAAM,MAAM,MAAM;CACzD,QAAQ,MAAM,QAAQ,GAAG;CACzB,KAAK,MAAM,YAAY,OAAO,KAAK,IAAI,GAAG;EACxC,IAAI,YAAY,IAAI,QAAQ,GAAG;EAC/B,MAAM,QAAQ,KAAK;EACnB,IAAI,UAAU,KAAK,GAAG;GACpB,QAAQ,OAAO,SAAS,MAAM,QAAQ;EACxC,OAAO,IAAI,MAAM,QAAQ,KAAK,GAAG;GAC/B,KAAK,MAAM,SAAS,OAAO;IACzB,IAAI,UAAU,KAAK,GAAG;KACpB,QAAQ,OAAO,SAAS,MAAM,QAAQ;IACxC;GACF;EACF;CACF;AACF;AACA,SAAS,YAAY,MAAM,WAAW,MAAM;CAC1C,SAAS,MAAM,MAAM,QAAQ,KAAK;EAChC,IAAI,SAAS,KAAK,QAAQ,KAAK,SAAS,KAAK,MAAM,KAAK,MAAM,OAAO;EACrE,IAAI,UAAU,MAAM,QAAQ,GAAG,GAAG,OAAO;EACzC,KAAK,MAAM,YAAY,OAAO,KAAK,IAAI,GAAG;GACxC,IAAI,YAAY,IAAI,QAAQ,GAAG;GAC/B,MAAM,QAAQ,KAAK;GACnB,IAAI,UAAU,KAAK,GAAG;IACpB,MAAM,QAAQ,MAAM,OAAO,MAAM,QAAQ;IACzC,IAAI,OAAO,OAAO;GACpB,OAAO,IAAI,MAAM,QAAQ,KAAK,GAAG;IAC/B,KAAK,MAAM,SAAS,OAAO;KACzB,IAAI,CAAC,UAAU,KAAK,GAAG;KACvB,MAAM,QAAQ,MAAM,OAAO,MAAM,QAAQ;KACzC,IAAI,OAAO,OAAO;IACpB;GACF;EACF;EACA,OAAO;CACT;CACA,OAAO,MAAM,MAAM,MAAM,IAAI;AAC/B;AACA,SAAS,UAAU,MAAM,KAAK;CAC5B,MAAM,QAAQ,KAAK;CACnB,OAAO,UAAU,KAAK,IAAI,QAAQ;AACpC;AACA,SAAS,WAAW,MAAM,KAAK;CAC7B,MAAM,QAAQ,KAAK;CACnB,OAAO,MAAM,QAAQ,KAAK,IAAI,MAAM,OAAO,SAAS,IAAI,CAAC;AAC3D;AACA,SAAS,eAAe,MAAM;CAC5B,IAAI,CAAC,QAAQ,KAAK,SAAS,gBAAgB,KAAK,SAAS,iBAAiB,OAAO;CACjF,OAAO,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO;AACrD;AACA,SAAS,aAAa,MAAM;CAC1B,IAAI,CAAC,MAAM,OAAO,KAAK;CACvB,IAAI,KAAK,SAAS,aAAa,KAAK,KAAK,SAAS,SAAS,GAAG;EAC5D,OAAO,KAAK;CACd;CACA,OAAO,KAAK;AACd;AACA,SAAS,iBAAiB,MAAM;CAC9B,IAAI,UAAU;CACd,OAAO,QAAQ,SAAS,oBAAoB,QAAQ,SAAS,2BAA2B,QAAQ,SAAS,yBAAyB,QAAQ,SAAS,2BAA2B;EAC5K,MAAM,aAAa,UAAU,SAAS,YAAY;EAClD,IAAI,CAAC,YAAY;EACjB,UAAU;CACZ;CACA,OAAO;AACT"}
|
package/dist/esm/evaluate.mjs
CHANGED
|
@@ -331,7 +331,7 @@ function evaluateDynamicNode(resolver, id, input, state) {
|
|
|
331
331
|
const expression = expressions[position];
|
|
332
332
|
if (!expression) continue;
|
|
333
333
|
const part = evaluateDynamicNode(resolver, id, expression, state);
|
|
334
|
-
if (!part?.values) return
|
|
334
|
+
if (!part?.values) return { type: "string" };
|
|
335
335
|
const next = [];
|
|
336
336
|
for (const value of values) {
|
|
337
337
|
for (const primitive of part.values) {
|
|
@@ -339,7 +339,7 @@ function evaluateDynamicNode(resolver, id, input, state) {
|
|
|
339
339
|
if (!next.includes(joined)) next.push(joined);
|
|
340
340
|
}
|
|
341
341
|
}
|
|
342
|
-
if (next.length > 32) return
|
|
342
|
+
if (next.length > 32) return { type: "string" };
|
|
343
343
|
values = next;
|
|
344
344
|
}
|
|
345
345
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluate.js","names":[],"sources":["esm/evaluate.js"],"sourcesContent":["import { childNode, childNodes, identifierName, isAstNode, unwrapExpression } from \"./ast\";\nimport { expressionReference, spanOf } from \"./contracts\";\nimport { linkedBailout, localBailout } from \"./diagnostics\";\nfunction success(value) {\n return { ok: true, value };\n}\nfunction literal(node) {\n if (node.type === \"NullLiteral\") return null;\n if (node.type === \"Literal\" || node.type.endsWith(\"Literal\")) {\n const value = node.value;\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\" || value === null) {\n return value;\n }\n }\n return void 0;\n}\nfunction unsupported(id, node, detail = `Expression ${node.type} is not statically supported`) {\n return {\n ok: false,\n bailout: localBailout(\"local/unsupported-expression\", spanOf(id, node), detail)\n };\n}\nfunction evaluateDefinition(resolver, definition, useSpan, state) {\n const key = `${definition.id}:${definition.span.start}`;\n if (state.activeDefinitions.has(key)) {\n return {\n ok: false,\n bailout: localBailout(\n \"local/static-evaluation-cycle\",\n useSpan,\n `Static evaluation cycle reached ${definition.name}`\n )\n };\n }\n if (!definition.initializer) {\n return {\n ok: false,\n bailout: linkedBailout(\n \"linked/missing-initializer\",\n useSpan,\n `Binding ${definition.name} has no static initializer`,\n definition.id\n )\n };\n }\n if (!definition.constant) {\n return {\n ok: false,\n bailout: linkedBailout(\n \"linked/unresolved-binding\",\n useSpan,\n `Binding ${definition.name} is mutable and cannot be statically evaluated`,\n definition.id\n )\n };\n }\n const initializer = resolver.expressionNode(definition.initializer);\n if (!initializer) {\n return {\n ok: false,\n bailout: linkedBailout(\n \"linked/missing-initializer\",\n useSpan,\n `Binding ${definition.name} initializer is outside the linked graph`,\n definition.id\n )\n };\n }\n state.dependencies.add(definition.id);\n state.activeDefinitions.add(key);\n try {\n return evaluateNode(resolver, definition.id, initializer, state);\n } finally {\n state.activeDefinitions.delete(key);\n }\n}\nfunction evaluateObject(resolver, id, node, state) {\n const output = {};\n for (const property of childNodes(node, \"properties\")) {\n if (property.type === \"SpreadElement\") {\n const argument = childNode(property, \"argument\");\n if (!argument) return unsupported(id, property);\n const spread = evaluateNode(resolver, id, argument, state);\n if (!spread.ok) return spread;\n if (!spread.value || typeof spread.value !== \"object\" || Array.isArray(spread.value)) {\n return {\n ok: false,\n bailout: localBailout(\n \"local/non-object-spread\",\n spanOf(id, property),\n \"Static object spread did not evaluate to an object\"\n )\n };\n }\n Object.assign(output, spread.value);\n continue;\n }\n if (property.type !== \"Property\" && property.type !== \"ObjectProperty\") {\n return unsupported(id, property);\n }\n const keyNode = childNode(property, \"key\");\n const valueNode = childNode(property, \"value\");\n if (!keyNode || !valueNode) return unsupported(id, property);\n let key = identifierName(keyNode) ?? void 0;\n if (property.computed === true || key === void 0) {\n const evaluatedKey = evaluateNode(resolver, id, keyNode, state);\n if (!evaluatedKey.ok) return evaluatedKey;\n key = evaluatedKey.value;\n }\n if (typeof key !== \"string\" && typeof key !== \"number\") {\n return unsupported(id, keyNode, \"Static object key is not a string or number\");\n }\n const value = evaluateNode(resolver, id, valueNode, state);\n if (!value.ok) return value;\n output[String(key)] = value.value;\n }\n return success(output);\n}\nfunction evaluateArray(resolver, id, node, state) {\n const output = [];\n const rawElements = node.elements;\n if (!Array.isArray(rawElements) || rawElements.some((element) => element === null || !isAstNode(element))) {\n return unsupported(id, node, \"Sparse arrays are not statically supported\");\n }\n for (const element of rawElements.filter(isAstNode)) {\n if (element.type === \"SpreadElement\") {\n const argument = childNode(element, \"argument\");\n if (!argument) return unsupported(id, element);\n const spread = evaluateNode(resolver, id, argument, state);\n if (!spread.ok) return spread;\n if (!Array.isArray(spread.value)) {\n return unsupported(\n id,\n element,\n \"Static array spread did not evaluate to an array\"\n );\n }\n output.push(...spread.value);\n continue;\n }\n const value = evaluateNode(resolver, id, element, state);\n if (!value.ok) return value;\n output.push(value.value);\n }\n return success(output);\n}\nfunction evaluateNode(resolver, id, input, state) {\n const node = unwrapExpression(input);\n const literalValue = literal(node);\n if (literalValue !== void 0) return success(literalValue);\n switch (node.type) {\n case \"Identifier\": {\n const name = identifierName(node);\n if (!name) return unsupported(id, node);\n const definition = resolver.resolveReference(expressionReference(id, node));\n if (!definition) {\n return {\n ok: false,\n bailout: linkedBailout(\n \"linked/unresolved-binding\",\n spanOf(id, node),\n `Binding ${name} has no host-linked definition`\n )\n };\n }\n return evaluateDefinition(resolver, definition, spanOf(id, node), state);\n }\n case \"ObjectExpression\":\n return evaluateObject(resolver, id, node, state);\n case \"ArrayExpression\":\n return evaluateArray(resolver, id, node, state);\n case \"MemberExpression\": {\n const objectNode = childNode(node, \"object\");\n const propertyNode = childNode(node, \"property\");\n if (!objectNode || !propertyNode) return unsupported(id, node);\n const object = evaluateNode(resolver, id, objectNode, state);\n if (!object.ok) return object;\n let property = identifierName(propertyNode);\n if (node.computed === true || property === null) {\n const evaluatedProperty = evaluateNode(resolver, id, propertyNode, state);\n if (!evaluatedProperty.ok) return evaluatedProperty;\n property = evaluatedProperty.value;\n }\n if ((typeof object.value !== \"object\" || object.value === null) && typeof object.value !== \"string\") {\n return unsupported(id, node, \"Static member target is not indexable\");\n }\n if (typeof property !== \"string\" && typeof property !== \"number\") {\n return unsupported(\n id,\n propertyNode,\n \"Static member key is not a string or number\"\n );\n }\n const value = object.value[String(property)];\n return value === void 0 ? unsupported(id, node, `Static member ${String(property)} does not exist`) : success(value);\n }\n case \"UnaryExpression\": {\n const argument = childNode(node, \"argument\");\n if (!argument) return unsupported(id, node);\n const value = evaluateNode(resolver, id, argument, state);\n if (!value.ok) return value;\n if (node.operator === \"-\" && typeof value.value === \"number\") {\n return success(-value.value);\n }\n if (node.operator === \"+\" && typeof value.value === \"number\") {\n return success(value.value);\n }\n if (node.operator === \"!\") return success(!value.value);\n return unsupported(\n id,\n node,\n `Unary operator ${String(node.operator)} is unsupported`\n );\n }\n case \"BinaryExpression\":\n case \"LogicalExpression\": {\n const leftNode = childNode(node, \"left\");\n const rightNode = childNode(node, \"right\");\n if (!leftNode || !rightNode) return unsupported(id, node);\n const left = evaluateNode(resolver, id, leftNode, state);\n if (!left.ok) return left;\n if (node.type === \"LogicalExpression\") {\n if (node.operator === \"&&\" && !left.value) return left;\n if (node.operator === \"||\" && left.value) return left;\n if (node.operator === \"??\" && left.value !== null) return left;\n }\n const right = evaluateNode(resolver, id, rightNode, state);\n if (!right.ok) return right;\n switch (node.operator) {\n case \"+\":\n if (typeof left.value === \"number\" && typeof right.value === \"number\") {\n return success(left.value + right.value);\n }\n if (typeof left.value === \"string\" || typeof right.value === \"string\") {\n return success(String(left.value) + String(right.value));\n }\n break;\n case \"-\":\n if (typeof left.value === \"number\" && typeof right.value === \"number\") {\n return success(left.value - right.value);\n }\n break;\n case \"*\":\n if (typeof left.value === \"number\" && typeof right.value === \"number\") {\n return success(left.value * right.value);\n }\n break;\n case \"/\":\n if (typeof left.value === \"number\" && typeof right.value === \"number\") {\n return success(left.value / right.value);\n }\n break;\n case \"&&\":\n case \"||\":\n case \"??\":\n return right;\n }\n return unsupported(\n id,\n node,\n `Binary operator ${String(node.operator)} is unsupported`\n );\n }\n case \"ConditionalExpression\": {\n const testNode = childNode(node, \"test\");\n const consequent = childNode(node, \"consequent\");\n const alternate = childNode(node, \"alternate\");\n if (!testNode || !consequent || !alternate) return unsupported(id, node);\n const test = evaluateNode(resolver, id, testNode, state);\n if (!test.ok) return test;\n return evaluateNode(resolver, id, test.value ? consequent : alternate, state);\n }\n case \"TemplateLiteral\": {\n const quasis = childNodes(node, \"quasis\");\n const expressions = childNodes(node, \"expressions\");\n let output = \"\";\n for (let index = 0; index < quasis.length; index++) {\n output += quasiText(quasis[index]);\n const expression = expressions[index];\n if (expression) {\n const value = evaluateNode(resolver, id, expression, state);\n if (!value.ok) return value;\n output += String(value.value);\n }\n }\n return success(output);\n }\n default:\n return unsupported(id, node);\n }\n}\nfunction quasiText(quasi) {\n const cooked = quasi?.value?.cooked;\n const raw = quasi?.value?.raw;\n return typeof cooked === \"string\" ? cooked : typeof raw === \"string\" ? raw : \"\";\n}\nfunction dynamicPrimitive(value) {\n if (value === null) return \"null\";\n if (typeof value === \"number\") return \"number\";\n if (typeof value === \"string\") return \"string\";\n if (typeof value === \"boolean\") return \"boolean\";\n return null;\n}\nfunction evaluateDynamicNode(resolver, id, input, state) {\n const exact = evaluateNode(resolver, id, input, state);\n if (exact.ok) {\n const type = dynamicPrimitive(exact.value);\n return type ? { type, values: [exact.value] } : null;\n }\n const node = unwrapExpression(input);\n if (node.type === \"Identifier\") {\n if (!identifierName(node)) return null;\n const definition = resolver.resolveReference(expressionReference(id, node));\n if (!definition?.constant || !definition.initializer) return null;\n const key = `${definition.id}:${definition.span.start}`;\n if (state.activeDefinitions.has(key)) return null;\n const initializer = resolver.expressionNode(definition.initializer);\n if (!initializer) return null;\n state.dependencies.add(definition.id);\n state.activeDefinitions.add(key);\n try {\n return evaluateDynamicNode(resolver, definition.id, initializer, state);\n } finally {\n state.activeDefinitions.delete(key);\n }\n }\n if (node.type === \"MemberExpression\") {\n const objectNode = childNode(node, \"object\");\n const propertyNode = childNode(node, \"property\");\n if (!objectNode || !propertyNode) return null;\n const object = evaluateNode(resolver, id, objectNode, state);\n if (!object.ok || !Array.isArray(object.value)) return null;\n const property = evaluateDynamicNode(resolver, id, propertyNode, state);\n if (property?.type !== \"number\" || object.value.length > 32) return null;\n const values = [];\n let type = null;\n for (const value of object.value) {\n const nextType = dynamicPrimitive(value);\n if (!nextType || type && type !== nextType) return null;\n type = nextType;\n const primitive = value;\n if (!values.includes(primitive)) values.push(primitive);\n }\n return type ? { type, values } : null;\n }\n if (node.type === \"BinaryExpression\") {\n const leftNode = childNode(node, \"left\");\n const rightNode = childNode(node, \"right\");\n if (!leftNode || !rightNode) return null;\n const left = evaluateDynamicNode(resolver, id, leftNode, state);\n const right = evaluateDynamicNode(resolver, id, rightNode, state);\n if (node.operator === \"+\") {\n return left?.type === \"number\" && right?.type === \"number\" ? { type: \"number\" } : null;\n }\n if (node.operator === \"-\" || node.operator === \"*\" || node.operator === \"/\" || node.operator === \"%\" || node.operator === \"**\") {\n if (left?.type === \"number\" || right?.type === \"number\") {\n return { type: \"number\" };\n }\n }\n }\n if (node.type === \"TemplateLiteral\") {\n const quasis = childNodes(node, \"quasis\");\n const expressions = childNodes(node, \"expressions\");\n let values = [\"\"];\n for (let position = 0; position < quasis.length; position++) {\n const text = quasiText(quasis[position]);\n values = values.map((value) => value + text);\n const expression = expressions[position];\n if (!expression) continue;\n const part = evaluateDynamicNode(resolver, id, expression, state);\n if (!part?.values) return null;\n const next = [];\n for (const value of values) {\n for (const primitive of part.values) {\n const joined = value + String(primitive);\n if (!next.includes(joined)) next.push(joined);\n }\n }\n if (next.length > 32) return null;\n values = next;\n }\n return { type: \"string\", values };\n }\n return null;\n}\nfunction collectLeaves(node) {\n if (node.kind === \"leaf\") return [node];\n return [...collectLeaves(node.whenTrue), ...collectLeaves(node.whenFalse)];\n}\nfunction collectBranchDependencies(node) {\n if (node.kind === \"leaf\") return node.dependencies;\n return [\n .../* @__PURE__ */ new Set([\n ...collectBranchDependencies(node.whenTrue),\n ...collectBranchDependencies(node.whenFalse)\n ])\n ].sort();\n}\nfunction evaluateBranchChild(resolver, id, node, depth, state, sourceId) {\n const leafState = {\n activeDefinitions: new Set(state.activeDefinitions),\n dependencies: new Set(state.dependencies)\n };\n const leafRes = evaluateNode(resolver, id, node, leafState);\n if (leafRes.ok) {\n return {\n kind: \"leaf\",\n value: leafRes.value,\n dependencies: [...leafState.dependencies].sort()\n };\n }\n return evaluateBranchesNode(resolver, id, node, depth + 1, leafState, sourceId);\n}\nfunction evaluateBranchesNode(resolver, id, input, depth, state, sourceId) {\n const node = unwrapExpression(input);\n if (!isAstNode(node)) return null;\n if (node.type === \"Identifier\") {\n if (!identifierName(node)) return null;\n const definition = resolver.resolveReference(expressionReference(id, node));\n if (!definition || !definition.constant || !definition.initializer) return null;\n const initializer = resolver.expressionNode(definition.initializer);\n if (!initializer) return null;\n const key = `${definition.id}:${definition.span.start}`;\n if (state.activeDefinitions.has(key)) return null;\n state.activeDefinitions.add(key);\n state.dependencies.add(definition.id);\n try {\n return evaluateBranchesNode(\n resolver,\n definition.id,\n initializer,\n depth,\n state,\n sourceId\n );\n } finally {\n state.activeDefinitions.delete(key);\n }\n }\n if (depth >= 3) return null;\n if (node.type === \"ConditionalExpression\") {\n const testNode = childNode(node, \"test\");\n const consequent = childNode(node, \"consequent\");\n const alternate = childNode(node, \"alternate\");\n if (!testNode || !consequent || !alternate) return null;\n const test = spanOf(id, testNode);\n if (test.id !== sourceId) return null;\n const whenTrue = evaluateBranchChild(resolver, id, consequent, depth, state, sourceId);\n if (!whenTrue) return null;\n const whenFalse = evaluateBranchChild(resolver, id, alternate, depth, state, sourceId);\n if (!whenFalse) return null;\n return {\n kind: \"branch\",\n test,\n whenTrue,\n whenFalse\n };\n }\n if (node.type === \"TemplateLiteral\") {\n return templateBranchesNode(\n resolver,\n id,\n childNodes(node, \"quasis\"),\n childNodes(node, \"expressions\"),\n 0,\n \"\",\n depth,\n state,\n sourceId\n );\n }\n if (node.type === \"LogicalExpression\") {\n const left = childNode(node, \"left\");\n const right = childNode(node, \"right\");\n if (!left || !right) return null;\n if (node.operator === \"&&\") {\n const test = spanOf(id, left);\n if (test.id !== sourceId) return null;\n const whenTrue = evaluateBranchChild(resolver, id, right, depth, state, sourceId);\n if (!whenTrue) return null;\n const whenFalse = {\n kind: \"leaf\",\n value: void 0,\n dependencies: [...state.dependencies].sort()\n };\n return {\n kind: \"branch\",\n test,\n whenTrue,\n whenFalse\n };\n }\n if (node.operator === \"||\" || node.operator === \"??\") {\n const test = spanOf(id, left);\n if (test.id !== sourceId) return null;\n const leftState = {\n activeDefinitions: new Set(state.activeDefinitions),\n dependencies: new Set(state.dependencies)\n };\n const leftRes = evaluateNode(resolver, id, left, leftState);\n if (!leftRes.ok) return null;\n const whenTrue = {\n kind: \"leaf\",\n value: leftRes.value,\n dependencies: [...leftState.dependencies].sort()\n };\n const whenFalse = evaluateBranchChild(resolver, id, right, depth, state, sourceId);\n if (!whenFalse) return null;\n return {\n kind: \"branch\",\n test,\n whenTrue,\n whenFalse\n };\n }\n }\n return null;\n}\nfunction mapBranchLeaves(node, map) {\n if (node.kind === \"leaf\") return map(node);\n const whenTrue = mapBranchLeaves(node.whenTrue, map);\n if (!whenTrue) return null;\n const whenFalse = mapBranchLeaves(node.whenFalse, map);\n if (!whenFalse) return null;\n return { kind: \"branch\", test: node.test, whenTrue, whenFalse };\n}\nfunction templateBranchesNode(resolver, id, quasis, expressions, index, prefix, depth, state, sourceId) {\n let text = prefix;\n for (let position = index; position < quasis.length; position++) {\n text += quasiText(quasis[position]);\n const expression = expressions[position];\n if (!expression) continue;\n const exact = evaluateNode(resolver, id, expression, state);\n if (exact.ok) {\n const interpolated = templateInterpolation(exact.value);\n if (interpolated === null) return null;\n text += interpolated;\n continue;\n }\n const tree = evaluateBranchesNode(\n resolver,\n id,\n expression,\n depth + 1,\n state,\n sourceId\n );\n if (!tree) return null;\n return mapBranchLeaves(tree, (leaf) => {\n if (leaf.value === void 0) return null;\n const interpolated = templateInterpolation(leaf.value);\n if (interpolated === null) return null;\n return templateBranchesNode(\n resolver,\n id,\n quasis,\n expressions,\n position + 1,\n text + interpolated,\n depth + 1,\n state,\n sourceId\n );\n });\n }\n return { kind: \"leaf\", value: text, dependencies: [...state.dependencies].sort() };\n}\nfunction templateInterpolation(value) {\n if (value === null) return \"null\";\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n return null;\n}\nfunction evaluateBranches(resolver, reference) {\n const node = resolver.expressionNode(reference);\n if (!node) return null;\n const state = {\n activeDefinitions: /* @__PURE__ */ new Set(),\n dependencies: /* @__PURE__ */ new Set()\n };\n const tree = evaluateBranchesNode(resolver, reference.id, node, 0, state, reference.id);\n return tree?.kind === \"branch\" ? tree : null;\n}\nfunction evaluateExpression(resolver, reference) {\n const node = resolver.expressionNode(reference);\n if (!node) {\n return {\n ok: false,\n bailout: linkedBailout(\n \"linked/missing-initializer\",\n reference,\n \"Expression is outside the linked project graph\",\n reference.id\n )\n };\n }\n const state = {\n activeDefinitions: /* @__PURE__ */ new Set(),\n dependencies: /* @__PURE__ */ new Set()\n };\n const result = evaluateNode(resolver, reference.id, node, state);\n return result.ok ? {\n ok: true,\n value: result.value,\n dependencies: [...state.dependencies].sort()\n } : result;\n}\nfunction evaluateDynamicExpression(resolver, reference) {\n const node = resolver.expressionNode(reference);\n if (!node) return null;\n const state = {\n activeDefinitions: /* @__PURE__ */ new Set(),\n dependencies: /* @__PURE__ */ new Set()\n };\n const result = evaluateDynamicNode(resolver, reference.id, node, state);\n return result ? { ...result, dependencies: [...state.dependencies].sort() } : null;\n}\nfunction evaluateBinding(resolver, id, localName) {\n const definition = resolver.resolveBinding(id, localName);\n if (!definition) {\n const emptySpan = { id, start: 0, end: 0 };\n return {\n ok: false,\n bailout: linkedBailout(\n \"linked/unresolved-binding\",\n emptySpan,\n `Binding ${localName} has no host-linked definition`\n )\n };\n }\n if (!definition.initializer) {\n return {\n ok: false,\n bailout: linkedBailout(\n \"linked/missing-initializer\",\n definition.span,\n `Binding ${localName} has no static initializer`,\n definition.id\n )\n };\n }\n return evaluateExpression(\n resolver,\n expressionReference(definition.id, definition.initializer)\n );\n}\nexport {\n collectBranchDependencies,\n collectLeaves,\n evaluateBinding,\n evaluateBranches,\n evaluateDynamicExpression,\n evaluateExpression\n};\n//# sourceMappingURL=evaluate.js.map\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"evaluate.js","names":[],"sources":["esm/evaluate.js"],"sourcesContent":["import { childNode, childNodes, identifierName, isAstNode, unwrapExpression } from \"./ast\";\nimport { expressionReference, spanOf } from \"./contracts\";\nimport { linkedBailout, localBailout } from \"./diagnostics\";\nfunction success(value) {\n return { ok: true, value };\n}\nfunction literal(node) {\n if (node.type === \"NullLiteral\") return null;\n if (node.type === \"Literal\" || node.type.endsWith(\"Literal\")) {\n const value = node.value;\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\" || value === null) {\n return value;\n }\n }\n return void 0;\n}\nfunction unsupported(id, node, detail = `Expression ${node.type} is not statically supported`) {\n return {\n ok: false,\n bailout: localBailout(\"local/unsupported-expression\", spanOf(id, node), detail)\n };\n}\nfunction evaluateDefinition(resolver, definition, useSpan, state) {\n const key = `${definition.id}:${definition.span.start}`;\n if (state.activeDefinitions.has(key)) {\n return {\n ok: false,\n bailout: localBailout(\n \"local/static-evaluation-cycle\",\n useSpan,\n `Static evaluation cycle reached ${definition.name}`\n )\n };\n }\n if (!definition.initializer) {\n return {\n ok: false,\n bailout: linkedBailout(\n \"linked/missing-initializer\",\n useSpan,\n `Binding ${definition.name} has no static initializer`,\n definition.id\n )\n };\n }\n if (!definition.constant) {\n return {\n ok: false,\n bailout: linkedBailout(\n \"linked/unresolved-binding\",\n useSpan,\n `Binding ${definition.name} is mutable and cannot be statically evaluated`,\n definition.id\n )\n };\n }\n const initializer = resolver.expressionNode(definition.initializer);\n if (!initializer) {\n return {\n ok: false,\n bailout: linkedBailout(\n \"linked/missing-initializer\",\n useSpan,\n `Binding ${definition.name} initializer is outside the linked graph`,\n definition.id\n )\n };\n }\n state.dependencies.add(definition.id);\n state.activeDefinitions.add(key);\n try {\n return evaluateNode(resolver, definition.id, initializer, state);\n } finally {\n state.activeDefinitions.delete(key);\n }\n}\nfunction evaluateObject(resolver, id, node, state) {\n const output = {};\n for (const property of childNodes(node, \"properties\")) {\n if (property.type === \"SpreadElement\") {\n const argument = childNode(property, \"argument\");\n if (!argument) return unsupported(id, property);\n const spread = evaluateNode(resolver, id, argument, state);\n if (!spread.ok) return spread;\n if (!spread.value || typeof spread.value !== \"object\" || Array.isArray(spread.value)) {\n return {\n ok: false,\n bailout: localBailout(\n \"local/non-object-spread\",\n spanOf(id, property),\n \"Static object spread did not evaluate to an object\"\n )\n };\n }\n Object.assign(output, spread.value);\n continue;\n }\n if (property.type !== \"Property\" && property.type !== \"ObjectProperty\") {\n return unsupported(id, property);\n }\n const keyNode = childNode(property, \"key\");\n const valueNode = childNode(property, \"value\");\n if (!keyNode || !valueNode) return unsupported(id, property);\n let key = identifierName(keyNode) ?? void 0;\n if (property.computed === true || key === void 0) {\n const evaluatedKey = evaluateNode(resolver, id, keyNode, state);\n if (!evaluatedKey.ok) return evaluatedKey;\n key = evaluatedKey.value;\n }\n if (typeof key !== \"string\" && typeof key !== \"number\") {\n return unsupported(id, keyNode, \"Static object key is not a string or number\");\n }\n const value = evaluateNode(resolver, id, valueNode, state);\n if (!value.ok) return value;\n output[String(key)] = value.value;\n }\n return success(output);\n}\nfunction evaluateArray(resolver, id, node, state) {\n const output = [];\n const rawElements = node.elements;\n if (!Array.isArray(rawElements) || rawElements.some((element) => element === null || !isAstNode(element))) {\n return unsupported(id, node, \"Sparse arrays are not statically supported\");\n }\n for (const element of rawElements.filter(isAstNode)) {\n if (element.type === \"SpreadElement\") {\n const argument = childNode(element, \"argument\");\n if (!argument) return unsupported(id, element);\n const spread = evaluateNode(resolver, id, argument, state);\n if (!spread.ok) return spread;\n if (!Array.isArray(spread.value)) {\n return unsupported(\n id,\n element,\n \"Static array spread did not evaluate to an array\"\n );\n }\n output.push(...spread.value);\n continue;\n }\n const value = evaluateNode(resolver, id, element, state);\n if (!value.ok) return value;\n output.push(value.value);\n }\n return success(output);\n}\nfunction evaluateNode(resolver, id, input, state) {\n const node = unwrapExpression(input);\n const literalValue = literal(node);\n if (literalValue !== void 0) return success(literalValue);\n switch (node.type) {\n case \"Identifier\": {\n const name = identifierName(node);\n if (!name) return unsupported(id, node);\n const definition = resolver.resolveReference(expressionReference(id, node));\n if (!definition) {\n return {\n ok: false,\n bailout: linkedBailout(\n \"linked/unresolved-binding\",\n spanOf(id, node),\n `Binding ${name} has no host-linked definition`\n )\n };\n }\n return evaluateDefinition(resolver, definition, spanOf(id, node), state);\n }\n case \"ObjectExpression\":\n return evaluateObject(resolver, id, node, state);\n case \"ArrayExpression\":\n return evaluateArray(resolver, id, node, state);\n case \"MemberExpression\": {\n const objectNode = childNode(node, \"object\");\n const propertyNode = childNode(node, \"property\");\n if (!objectNode || !propertyNode) return unsupported(id, node);\n const object = evaluateNode(resolver, id, objectNode, state);\n if (!object.ok) return object;\n let property = identifierName(propertyNode);\n if (node.computed === true || property === null) {\n const evaluatedProperty = evaluateNode(resolver, id, propertyNode, state);\n if (!evaluatedProperty.ok) return evaluatedProperty;\n property = evaluatedProperty.value;\n }\n if ((typeof object.value !== \"object\" || object.value === null) && typeof object.value !== \"string\") {\n return unsupported(id, node, \"Static member target is not indexable\");\n }\n if (typeof property !== \"string\" && typeof property !== \"number\") {\n return unsupported(\n id,\n propertyNode,\n \"Static member key is not a string or number\"\n );\n }\n const value = object.value[String(property)];\n return value === void 0 ? unsupported(id, node, `Static member ${String(property)} does not exist`) : success(value);\n }\n case \"UnaryExpression\": {\n const argument = childNode(node, \"argument\");\n if (!argument) return unsupported(id, node);\n const value = evaluateNode(resolver, id, argument, state);\n if (!value.ok) return value;\n if (node.operator === \"-\" && typeof value.value === \"number\") {\n return success(-value.value);\n }\n if (node.operator === \"+\" && typeof value.value === \"number\") {\n return success(value.value);\n }\n if (node.operator === \"!\") return success(!value.value);\n return unsupported(\n id,\n node,\n `Unary operator ${String(node.operator)} is unsupported`\n );\n }\n case \"BinaryExpression\":\n case \"LogicalExpression\": {\n const leftNode = childNode(node, \"left\");\n const rightNode = childNode(node, \"right\");\n if (!leftNode || !rightNode) return unsupported(id, node);\n const left = evaluateNode(resolver, id, leftNode, state);\n if (!left.ok) return left;\n if (node.type === \"LogicalExpression\") {\n if (node.operator === \"&&\" && !left.value) return left;\n if (node.operator === \"||\" && left.value) return left;\n if (node.operator === \"??\" && left.value !== null) return left;\n }\n const right = evaluateNode(resolver, id, rightNode, state);\n if (!right.ok) return right;\n switch (node.operator) {\n case \"+\":\n if (typeof left.value === \"number\" && typeof right.value === \"number\") {\n return success(left.value + right.value);\n }\n if (typeof left.value === \"string\" || typeof right.value === \"string\") {\n return success(String(left.value) + String(right.value));\n }\n break;\n case \"-\":\n if (typeof left.value === \"number\" && typeof right.value === \"number\") {\n return success(left.value - right.value);\n }\n break;\n case \"*\":\n if (typeof left.value === \"number\" && typeof right.value === \"number\") {\n return success(left.value * right.value);\n }\n break;\n case \"/\":\n if (typeof left.value === \"number\" && typeof right.value === \"number\") {\n return success(left.value / right.value);\n }\n break;\n case \"&&\":\n case \"||\":\n case \"??\":\n return right;\n }\n return unsupported(\n id,\n node,\n `Binary operator ${String(node.operator)} is unsupported`\n );\n }\n case \"ConditionalExpression\": {\n const testNode = childNode(node, \"test\");\n const consequent = childNode(node, \"consequent\");\n const alternate = childNode(node, \"alternate\");\n if (!testNode || !consequent || !alternate) return unsupported(id, node);\n const test = evaluateNode(resolver, id, testNode, state);\n if (!test.ok) return test;\n return evaluateNode(resolver, id, test.value ? consequent : alternate, state);\n }\n case \"TemplateLiteral\": {\n const quasis = childNodes(node, \"quasis\");\n const expressions = childNodes(node, \"expressions\");\n let output = \"\";\n for (let index = 0; index < quasis.length; index++) {\n output += quasiText(quasis[index]);\n const expression = expressions[index];\n if (expression) {\n const value = evaluateNode(resolver, id, expression, state);\n if (!value.ok) return value;\n output += String(value.value);\n }\n }\n return success(output);\n }\n default:\n return unsupported(id, node);\n }\n}\nfunction quasiText(quasi) {\n const cooked = quasi?.value?.cooked;\n const raw = quasi?.value?.raw;\n return typeof cooked === \"string\" ? cooked : typeof raw === \"string\" ? raw : \"\";\n}\nfunction dynamicPrimitive(value) {\n if (value === null) return \"null\";\n if (typeof value === \"number\") return \"number\";\n if (typeof value === \"string\") return \"string\";\n if (typeof value === \"boolean\") return \"boolean\";\n return null;\n}\nfunction evaluateDynamicNode(resolver, id, input, state) {\n const exact = evaluateNode(resolver, id, input, state);\n if (exact.ok) {\n const type = dynamicPrimitive(exact.value);\n return type ? { type, values: [exact.value] } : null;\n }\n const node = unwrapExpression(input);\n if (node.type === \"Identifier\") {\n if (!identifierName(node)) return null;\n const definition = resolver.resolveReference(expressionReference(id, node));\n if (!definition?.constant || !definition.initializer) return null;\n const key = `${definition.id}:${definition.span.start}`;\n if (state.activeDefinitions.has(key)) return null;\n const initializer = resolver.expressionNode(definition.initializer);\n if (!initializer) return null;\n state.dependencies.add(definition.id);\n state.activeDefinitions.add(key);\n try {\n return evaluateDynamicNode(resolver, definition.id, initializer, state);\n } finally {\n state.activeDefinitions.delete(key);\n }\n }\n if (node.type === \"MemberExpression\") {\n const objectNode = childNode(node, \"object\");\n const propertyNode = childNode(node, \"property\");\n if (!objectNode || !propertyNode) return null;\n const object = evaluateNode(resolver, id, objectNode, state);\n if (!object.ok || !Array.isArray(object.value)) return null;\n const property = evaluateDynamicNode(resolver, id, propertyNode, state);\n if (property?.type !== \"number\" || object.value.length > 32) return null;\n const values = [];\n let type = null;\n for (const value of object.value) {\n const nextType = dynamicPrimitive(value);\n if (!nextType || type && type !== nextType) return null;\n type = nextType;\n const primitive = value;\n if (!values.includes(primitive)) values.push(primitive);\n }\n return type ? { type, values } : null;\n }\n if (node.type === \"BinaryExpression\") {\n const leftNode = childNode(node, \"left\");\n const rightNode = childNode(node, \"right\");\n if (!leftNode || !rightNode) return null;\n const left = evaluateDynamicNode(resolver, id, leftNode, state);\n const right = evaluateDynamicNode(resolver, id, rightNode, state);\n if (node.operator === \"+\") {\n return left?.type === \"number\" && right?.type === \"number\" ? { type: \"number\" } : null;\n }\n if (node.operator === \"-\" || node.operator === \"*\" || node.operator === \"/\" || node.operator === \"%\" || node.operator === \"**\") {\n if (left?.type === \"number\" || right?.type === \"number\") {\n return { type: \"number\" };\n }\n }\n }\n if (node.type === \"TemplateLiteral\") {\n const quasis = childNodes(node, \"quasis\");\n const expressions = childNodes(node, \"expressions\");\n let values = [\"\"];\n for (let position = 0; position < quasis.length; position++) {\n const text = quasiText(quasis[position]);\n values = values.map((value) => value + text);\n const expression = expressions[position];\n if (!expression) continue;\n const part = evaluateDynamicNode(resolver, id, expression, state);\n if (!part?.values) return { type: \"string\" };\n const next = [];\n for (const value of values) {\n for (const primitive of part.values) {\n const joined = value + String(primitive);\n if (!next.includes(joined)) next.push(joined);\n }\n }\n if (next.length > 32) return { type: \"string\" };\n values = next;\n }\n return { type: \"string\", values };\n }\n return null;\n}\nfunction collectLeaves(node) {\n if (node.kind === \"leaf\") return [node];\n return [...collectLeaves(node.whenTrue), ...collectLeaves(node.whenFalse)];\n}\nfunction collectBranchDependencies(node) {\n if (node.kind === \"leaf\") return node.dependencies;\n return [\n .../* @__PURE__ */ new Set([\n ...collectBranchDependencies(node.whenTrue),\n ...collectBranchDependencies(node.whenFalse)\n ])\n ].sort();\n}\nfunction evaluateBranchChild(resolver, id, node, depth, state, sourceId) {\n const leafState = {\n activeDefinitions: new Set(state.activeDefinitions),\n dependencies: new Set(state.dependencies)\n };\n const leafRes = evaluateNode(resolver, id, node, leafState);\n if (leafRes.ok) {\n return {\n kind: \"leaf\",\n value: leafRes.value,\n dependencies: [...leafState.dependencies].sort()\n };\n }\n return evaluateBranchesNode(resolver, id, node, depth + 1, leafState, sourceId);\n}\nfunction evaluateBranchesNode(resolver, id, input, depth, state, sourceId) {\n const node = unwrapExpression(input);\n if (!isAstNode(node)) return null;\n if (node.type === \"Identifier\") {\n if (!identifierName(node)) return null;\n const definition = resolver.resolveReference(expressionReference(id, node));\n if (!definition || !definition.constant || !definition.initializer) return null;\n const initializer = resolver.expressionNode(definition.initializer);\n if (!initializer) return null;\n const key = `${definition.id}:${definition.span.start}`;\n if (state.activeDefinitions.has(key)) return null;\n state.activeDefinitions.add(key);\n state.dependencies.add(definition.id);\n try {\n return evaluateBranchesNode(\n resolver,\n definition.id,\n initializer,\n depth,\n state,\n sourceId\n );\n } finally {\n state.activeDefinitions.delete(key);\n }\n }\n if (depth >= 3) return null;\n if (node.type === \"ConditionalExpression\") {\n const testNode = childNode(node, \"test\");\n const consequent = childNode(node, \"consequent\");\n const alternate = childNode(node, \"alternate\");\n if (!testNode || !consequent || !alternate) return null;\n const test = spanOf(id, testNode);\n if (test.id !== sourceId) return null;\n const whenTrue = evaluateBranchChild(resolver, id, consequent, depth, state, sourceId);\n if (!whenTrue) return null;\n const whenFalse = evaluateBranchChild(resolver, id, alternate, depth, state, sourceId);\n if (!whenFalse) return null;\n return {\n kind: \"branch\",\n test,\n whenTrue,\n whenFalse\n };\n }\n if (node.type === \"TemplateLiteral\") {\n return templateBranchesNode(\n resolver,\n id,\n childNodes(node, \"quasis\"),\n childNodes(node, \"expressions\"),\n 0,\n \"\",\n depth,\n state,\n sourceId\n );\n }\n if (node.type === \"LogicalExpression\") {\n const left = childNode(node, \"left\");\n const right = childNode(node, \"right\");\n if (!left || !right) return null;\n if (node.operator === \"&&\") {\n const test = spanOf(id, left);\n if (test.id !== sourceId) return null;\n const whenTrue = evaluateBranchChild(resolver, id, right, depth, state, sourceId);\n if (!whenTrue) return null;\n const whenFalse = {\n kind: \"leaf\",\n value: void 0,\n dependencies: [...state.dependencies].sort()\n };\n return {\n kind: \"branch\",\n test,\n whenTrue,\n whenFalse\n };\n }\n if (node.operator === \"||\" || node.operator === \"??\") {\n const test = spanOf(id, left);\n if (test.id !== sourceId) return null;\n const leftState = {\n activeDefinitions: new Set(state.activeDefinitions),\n dependencies: new Set(state.dependencies)\n };\n const leftRes = evaluateNode(resolver, id, left, leftState);\n if (!leftRes.ok) return null;\n const whenTrue = {\n kind: \"leaf\",\n value: leftRes.value,\n dependencies: [...leftState.dependencies].sort()\n };\n const whenFalse = evaluateBranchChild(resolver, id, right, depth, state, sourceId);\n if (!whenFalse) return null;\n return {\n kind: \"branch\",\n test,\n whenTrue,\n whenFalse\n };\n }\n }\n return null;\n}\nfunction mapBranchLeaves(node, map) {\n if (node.kind === \"leaf\") return map(node);\n const whenTrue = mapBranchLeaves(node.whenTrue, map);\n if (!whenTrue) return null;\n const whenFalse = mapBranchLeaves(node.whenFalse, map);\n if (!whenFalse) return null;\n return { kind: \"branch\", test: node.test, whenTrue, whenFalse };\n}\nfunction templateBranchesNode(resolver, id, quasis, expressions, index, prefix, depth, state, sourceId) {\n let text = prefix;\n for (let position = index; position < quasis.length; position++) {\n text += quasiText(quasis[position]);\n const expression = expressions[position];\n if (!expression) continue;\n const exact = evaluateNode(resolver, id, expression, state);\n if (exact.ok) {\n const interpolated = templateInterpolation(exact.value);\n if (interpolated === null) return null;\n text += interpolated;\n continue;\n }\n const tree = evaluateBranchesNode(\n resolver,\n id,\n expression,\n depth + 1,\n state,\n sourceId\n );\n if (!tree) return null;\n return mapBranchLeaves(tree, (leaf) => {\n if (leaf.value === void 0) return null;\n const interpolated = templateInterpolation(leaf.value);\n if (interpolated === null) return null;\n return templateBranchesNode(\n resolver,\n id,\n quasis,\n expressions,\n position + 1,\n text + interpolated,\n depth + 1,\n state,\n sourceId\n );\n });\n }\n return { kind: \"leaf\", value: text, dependencies: [...state.dependencies].sort() };\n}\nfunction templateInterpolation(value) {\n if (value === null) return \"null\";\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n return null;\n}\nfunction evaluateBranches(resolver, reference) {\n const node = resolver.expressionNode(reference);\n if (!node) return null;\n const state = {\n activeDefinitions: /* @__PURE__ */ new Set(),\n dependencies: /* @__PURE__ */ new Set()\n };\n const tree = evaluateBranchesNode(resolver, reference.id, node, 0, state, reference.id);\n return tree?.kind === \"branch\" ? tree : null;\n}\nfunction evaluateExpression(resolver, reference) {\n const node = resolver.expressionNode(reference);\n if (!node) {\n return {\n ok: false,\n bailout: linkedBailout(\n \"linked/missing-initializer\",\n reference,\n \"Expression is outside the linked project graph\",\n reference.id\n )\n };\n }\n const state = {\n activeDefinitions: /* @__PURE__ */ new Set(),\n dependencies: /* @__PURE__ */ new Set()\n };\n const result = evaluateNode(resolver, reference.id, node, state);\n return result.ok ? {\n ok: true,\n value: result.value,\n dependencies: [...state.dependencies].sort()\n } : result;\n}\nfunction evaluateDynamicExpression(resolver, reference) {\n const node = resolver.expressionNode(reference);\n if (!node) return null;\n const state = {\n activeDefinitions: /* @__PURE__ */ new Set(),\n dependencies: /* @__PURE__ */ new Set()\n };\n const result = evaluateDynamicNode(resolver, reference.id, node, state);\n return result ? { ...result, dependencies: [...state.dependencies].sort() } : null;\n}\nfunction evaluateBinding(resolver, id, localName) {\n const definition = resolver.resolveBinding(id, localName);\n if (!definition) {\n const emptySpan = { id, start: 0, end: 0 };\n return {\n ok: false,\n bailout: linkedBailout(\n \"linked/unresolved-binding\",\n emptySpan,\n `Binding ${localName} has no host-linked definition`\n )\n };\n }\n if (!definition.initializer) {\n return {\n ok: false,\n bailout: linkedBailout(\n \"linked/missing-initializer\",\n definition.span,\n `Binding ${localName} has no static initializer`,\n definition.id\n )\n };\n }\n return evaluateExpression(\n resolver,\n expressionReference(definition.id, definition.initializer)\n );\n}\nexport {\n collectBranchDependencies,\n collectLeaves,\n evaluateBinding,\n evaluateBranches,\n evaluateDynamicExpression,\n evaluateExpression\n};\n//# sourceMappingURL=evaluate.js.map\n"],"mappings":"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"}
|
package/dist/esm/lower.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { localBailout } from "./diagnostics.mjs";
|
|
2
2
|
import { sourceContentHash, validateSourceEdits } from "./output.mjs";
|
|
3
3
|
|
|
4
|
-
const LOWERED_MODULE_PLAN_VERSION =
|
|
4
|
+
const LOWERED_MODULE_PLAN_VERSION = 5;
|
|
5
5
|
function compareCodeUnits(left, right) {
|
|
6
6
|
return left < right ? -1 : left > right ? 1 : 0;
|
|
7
7
|
}
|
|
@@ -28,13 +28,13 @@ function unsafeEntry(element, entry, component, host) {
|
|
|
28
28
|
if (entry.kind === "spread" && entry.value.kind !== "static") {
|
|
29
29
|
return diagnostic("local/unsafe-style-spread", element, "Unevaluated spread may change style and duplicate-prop precedence");
|
|
30
30
|
}
|
|
31
|
-
if (entry.kind === "prop" && host.isStyleProp(entry.name, component) && (entry.value.kind === "bailout" || entry.value.kind === "conditional") && !host.canLowerDynamicStyleProp?.(entry.name, component, entry.value.kind)) {
|
|
31
|
+
if (entry.kind === "prop" && host.isStyleProp(entry.name, component) && (entry.value.kind === "bailout" || entry.value.kind === "conditional") && !host.canLowerDynamicStyleProp?.(entry.name, component, entry.value.kind, entry.value.kind === "bailout" ? entry.value.dynamic : null)) {
|
|
32
32
|
return diagnostic("local/dynamic-style-value", element, `Style prop ${entry.name} could not be evaluated`, entry.name);
|
|
33
33
|
}
|
|
34
34
|
if (entry.kind === "prop" && entry.value.kind === "object") {
|
|
35
35
|
for (const member of entry.value.members) {
|
|
36
36
|
if (member.value.kind !== "bailout" && member.value.kind !== "conditional") continue;
|
|
37
|
-
if (!host.isStyleProp(member.name, component) || !host.canLowerDynamicStyleProp?.(member.name, component, member.value.kind)) {
|
|
37
|
+
if (!host.isStyleProp(member.name, component) || !host.canLowerDynamicStyleProp?.(member.name, component, member.value.kind, member.value.kind === "bailout" ? member.value.dynamic : null)) {
|
|
38
38
|
return diagnostic("local/dynamic-style-value", element, `Style prop ${member.name} could not be evaluated`, member.name);
|
|
39
39
|
}
|
|
40
40
|
}
|
|
@@ -191,7 +191,7 @@ function lowerModule({ module, source, target, host, options, structuralPass })
|
|
|
191
191
|
});
|
|
192
192
|
}
|
|
193
193
|
return {
|
|
194
|
-
version:
|
|
194
|
+
version: 5,
|
|
195
195
|
id: module.id,
|
|
196
196
|
target,
|
|
197
197
|
inputHash: module.inputHash,
|
package/dist/esm/lower.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lower.js","names":[],"sources":["esm/lower.js"],"sourcesContent":["import { localBailout } from \"./diagnostics\";\nimport {\n sourceContentHash,\n validateSourceEdits\n} from \"./output\";\nconst LOWERED_MODULE_PLAN_VERSION = 3;\nfunction compareCodeUnits(left, right) {\n return left < right ? -1 : left > right ? 1 : 0;\n}\nfunction blocking(reason) {\n return { ...reason, blocking: true };\n}\nfunction diagnostic(code, element, message, prop) {\n return {\n ...localBailout(code, element.span, message),\n component: element.component.name,\n specifier: element.component.provenance?.specifier,\n prop\n };\n}\nfunction styledDefinitionFor(module, element) {\n const definition = element.component.definition;\n if (!definition) return null;\n return module.styledDefinitions.find(\n (candidate) => candidate.id === definition.id && candidate.name === definition.name\n ) ?? null;\n}\nfunction unsafeEntry(element, entry, component, host) {\n if (entry.kind === \"spread\" && entry.value.kind !== \"static\") {\n return diagnostic(\n \"local/unsafe-style-spread\",\n element,\n \"Unevaluated spread may change style and duplicate-prop precedence\"\n );\n }\n if (entry.kind === \"prop\" && host.isStyleProp(entry.name, component) && (entry.value.kind === \"bailout\" || entry.value.kind === \"conditional\") && !host.canLowerDynamicStyleProp?.(entry.name, component, entry.value.kind)) {\n return diagnostic(\n \"local/dynamic-style-value\",\n element,\n `Style prop ${entry.name} could not be evaluated`,\n entry.name\n );\n }\n if (entry.kind === \"prop\" && entry.value.kind === \"object\") {\n for (const member of entry.value.members) {\n if (member.value.kind !== \"bailout\" && member.value.kind !== \"conditional\") continue;\n if (!host.isStyleProp(member.name, component) || !host.canLowerDynamicStyleProp?.(member.name, component, member.value.kind)) {\n return diagnostic(\n \"local/dynamic-style-value\",\n element,\n `Style prop ${member.name} could not be evaluated`,\n member.name\n );\n }\n }\n }\n return null;\n}\nfunction editsAreCandidateLocal(element, edits) {\n return edits.every(\n (edit) => edit.origin.id === element.id && edit.start >= element.span.start && edit.end <= element.span.end\n );\n}\nfunction overlapsCommitted(edits, committed) {\n return edits.some(\n (edit) => committed.some((existing) => {\n if (edit.start === edit.end) {\n return edit.start > existing.start && edit.start < existing.end;\n }\n if (existing.start === existing.end) {\n return existing.start > edit.start && existing.start < edit.end;\n }\n return edit.start < existing.end && existing.start < edit.end;\n })\n );\n}\nfunction lowerModule({\n module,\n source,\n target,\n host,\n options,\n structuralPass\n}) {\n const stats = {\n found: 0,\n lowered: 0,\n flattened: 0,\n styled: 0,\n bailed: 0\n };\n const structural = structuralPass ? structuralPass.transform({ module, source, target }) : {\n module,\n edits: [],\n imports: [],\n diagnostics: [],\n dependencies: []\n };\n if (structural.module.id !== module.id) {\n throw new Error(\n `Structural pass changed module identity from ${module.id} to ${structural.module.id}`\n );\n }\n if (structuralPass && !structuralPass.versionHash) {\n throw new Error(\"Structural pass must provide a non-empty version hash\");\n }\n module = structural.module;\n validateSourceEdits(source, structural.edits);\n const edits = [...structural.edits];\n const css = /* @__PURE__ */ new Set();\n const diagnostics = [...module.diagnostics, ...structural.diagnostics];\n const dependencies = /* @__PURE__ */ new Set([...module.dependencies, ...structural.dependencies]);\n const imports = new Map(\n structural.imports.map((candidateImport) => [\n candidateImport.content,\n candidateImport\n ])\n );\n for (const element of module.elements) {\n const styledDefinition = styledDefinitionFor(module, element);\n const component = host.resolveComponent(element, styledDefinition);\n if (!component) continue;\n stats.found++;\n const input = {\n id: module.id,\n source,\n target,\n module,\n element,\n styledDefinition,\n component\n };\n const commitDevelopmentDebug = (result2) => {\n const debugEdits = host.developmentDebugInstrumentation?.(input, result2);\n if (!debugEdits) return;\n validateSourceEdits(source, debugEdits);\n if (!editsAreCandidateLocal(element, debugEdits) || overlapsCommitted(debugEdits, edits)) {\n throw new Error(\"Development debug instrumentation must stay candidate-local\");\n }\n edits.push(...debugEdits);\n };\n if (!element.complete || styledDefinition && !styledDefinition.complete) {\n const reasons = [\n ...element.bailouts.map(blocking),\n ...(styledDefinition?.bailouts ?? []).map(blocking)\n ];\n diagnostics.push(...reasons);\n const reason = reasons[0];\n if (reason) commitDevelopmentDebug({ ok: false, bailout: reason });\n stats.bailed++;\n continue;\n }\n const unsafe = element.entries.map((entry) => unsafeEntry(element, entry, component, host)).find((result2) => result2 !== null);\n if (unsafe) {\n diagnostics.push(blocking(unsafe));\n commitDevelopmentDebug({ ok: false, bailout: blocking(unsafe) });\n stats.bailed++;\n continue;\n }\n let result;\n try {\n result = host.lowerCandidate(input);\n } catch (error) {\n result = {\n ok: false,\n bailout: diagnostic(\n \"local/style-resolution-failed\",\n element,\n `Style resolution failed: ${error instanceof Error ? error.message : String(error)}`\n )\n };\n }\n if (!result.ok) {\n diagnostics.push(blocking(result.bailout));\n commitDevelopmentDebug(result);\n stats.bailed++;\n continue;\n }\n try {\n validateSourceEdits(source, result.edits);\n } catch (error) {\n const reason = blocking(\n diagnostic(\n \"local/overlapping-edit\",\n element,\n error instanceof Error ? error.message : String(error)\n )\n );\n diagnostics.push(reason);\n commitDevelopmentDebug({ ok: false, bailout: reason });\n stats.bailed++;\n continue;\n }\n if (!editsAreCandidateLocal(element, result.edits) || overlapsCommitted(result.edits, edits)) {\n const reason = blocking(\n diagnostic(\n \"local/overlapping-edit\",\n element,\n \"Candidate edits overlap another candidate or escape the element span\"\n )\n );\n diagnostics.push(reason);\n commitDevelopmentDebug({ ok: false, bailout: reason });\n stats.bailed++;\n continue;\n }\n diagnostics.push(...result.diagnostics ?? []);\n edits.push(...result.edits);\n commitDevelopmentDebug(result);\n for (const rule of result.css) css.add(rule);\n for (const candidateImport of result.imports) {\n if (!imports.has(candidateImport.content)) {\n imports.set(candidateImport.content, candidateImport);\n }\n }\n for (const dependency of result.dependencies ?? []) dependencies.add(dependency);\n stats.lowered++;\n if (result.flattened) stats.flattened++;\n if (styledDefinition) stats.styled++;\n }\n for (const candidateImport of imports.values()) {\n edits.push({\n start: source.length,\n end: source.length,\n content: candidateImport.content,\n origin: candidateImport.origin\n });\n }\n return {\n version: LOWERED_MODULE_PLAN_VERSION,\n id: module.id,\n target,\n inputHash: module.inputHash,\n sourceHash: sourceContentHash(source),\n projectGeneration: options.projectGeneration,\n structuralPassHash: structuralPass?.versionHash ?? `${target}-noop-v1`,\n edits,\n css: [...css].join(\"\"),\n diagnostics,\n dependencies: [...dependencies].sort(compareCodeUnits),\n stats\n };\n}\nexport {\n LOWERED_MODULE_PLAN_VERSION,\n lowerModule\n};\n//# sourceMappingURL=lower.js.map\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lower.js","names":[],"sources":["esm/lower.js"],"sourcesContent":["import { localBailout } from \"./diagnostics\";\nimport {\n sourceContentHash,\n validateSourceEdits\n} from \"./output\";\nconst LOWERED_MODULE_PLAN_VERSION = 5;\nfunction compareCodeUnits(left, right) {\n return left < right ? -1 : left > right ? 1 : 0;\n}\nfunction blocking(reason) {\n return { ...reason, blocking: true };\n}\nfunction diagnostic(code, element, message, prop) {\n return {\n ...localBailout(code, element.span, message),\n component: element.component.name,\n specifier: element.component.provenance?.specifier,\n prop\n };\n}\nfunction styledDefinitionFor(module, element) {\n const definition = element.component.definition;\n if (!definition) return null;\n return module.styledDefinitions.find(\n (candidate) => candidate.id === definition.id && candidate.name === definition.name\n ) ?? null;\n}\nfunction unsafeEntry(element, entry, component, host) {\n if (entry.kind === \"spread\" && entry.value.kind !== \"static\") {\n return diagnostic(\n \"local/unsafe-style-spread\",\n element,\n \"Unevaluated spread may change style and duplicate-prop precedence\"\n );\n }\n if (entry.kind === \"prop\" && host.isStyleProp(entry.name, component) && (entry.value.kind === \"bailout\" || entry.value.kind === \"conditional\") && !host.canLowerDynamicStyleProp?.(\n entry.name,\n component,\n entry.value.kind,\n entry.value.kind === \"bailout\" ? entry.value.dynamic : null\n )) {\n return diagnostic(\n \"local/dynamic-style-value\",\n element,\n `Style prop ${entry.name} could not be evaluated`,\n entry.name\n );\n }\n if (entry.kind === \"prop\" && entry.value.kind === \"object\") {\n for (const member of entry.value.members) {\n if (member.value.kind !== \"bailout\" && member.value.kind !== \"conditional\") continue;\n if (!host.isStyleProp(member.name, component) || !host.canLowerDynamicStyleProp?.(\n member.name,\n component,\n member.value.kind,\n member.value.kind === \"bailout\" ? member.value.dynamic : null\n )) {\n return diagnostic(\n \"local/dynamic-style-value\",\n element,\n `Style prop ${member.name} could not be evaluated`,\n member.name\n );\n }\n }\n }\n return null;\n}\nfunction editsAreCandidateLocal(element, edits) {\n return edits.every(\n (edit) => edit.origin.id === element.id && edit.start >= element.span.start && edit.end <= element.span.end\n );\n}\nfunction overlapsCommitted(edits, committed) {\n return edits.some(\n (edit) => committed.some((existing) => {\n if (edit.start === edit.end) {\n return edit.start > existing.start && edit.start < existing.end;\n }\n if (existing.start === existing.end) {\n return existing.start > edit.start && existing.start < edit.end;\n }\n return edit.start < existing.end && existing.start < edit.end;\n })\n );\n}\nfunction lowerModule({\n module,\n source,\n target,\n host,\n options,\n structuralPass\n}) {\n const stats = {\n found: 0,\n lowered: 0,\n flattened: 0,\n styled: 0,\n bailed: 0\n };\n const structural = structuralPass ? structuralPass.transform({ module, source, target }) : {\n module,\n edits: [],\n imports: [],\n diagnostics: [],\n dependencies: []\n };\n if (structural.module.id !== module.id) {\n throw new Error(\n `Structural pass changed module identity from ${module.id} to ${structural.module.id}`\n );\n }\n if (structuralPass && !structuralPass.versionHash) {\n throw new Error(\"Structural pass must provide a non-empty version hash\");\n }\n module = structural.module;\n validateSourceEdits(source, structural.edits);\n const edits = [...structural.edits];\n const css = /* @__PURE__ */ new Set();\n const diagnostics = [...module.diagnostics, ...structural.diagnostics];\n const dependencies = /* @__PURE__ */ new Set([...module.dependencies, ...structural.dependencies]);\n const imports = new Map(\n structural.imports.map((candidateImport) => [\n candidateImport.content,\n candidateImport\n ])\n );\n for (const element of module.elements) {\n const styledDefinition = styledDefinitionFor(module, element);\n const component = host.resolveComponent(element, styledDefinition);\n if (!component) continue;\n stats.found++;\n const input = {\n id: module.id,\n source,\n target,\n module,\n element,\n styledDefinition,\n component\n };\n const commitDevelopmentDebug = (result2) => {\n const debugEdits = host.developmentDebugInstrumentation?.(input, result2);\n if (!debugEdits) return;\n validateSourceEdits(source, debugEdits);\n if (!editsAreCandidateLocal(element, debugEdits) || overlapsCommitted(debugEdits, edits)) {\n throw new Error(\"Development debug instrumentation must stay candidate-local\");\n }\n edits.push(...debugEdits);\n };\n if (!element.complete || styledDefinition && !styledDefinition.complete) {\n const reasons = [\n ...element.bailouts.map(blocking),\n ...(styledDefinition?.bailouts ?? []).map(blocking)\n ];\n diagnostics.push(...reasons);\n const reason = reasons[0];\n if (reason) commitDevelopmentDebug({ ok: false, bailout: reason });\n stats.bailed++;\n continue;\n }\n const unsafe = element.entries.map((entry) => unsafeEntry(element, entry, component, host)).find((result2) => result2 !== null);\n if (unsafe) {\n diagnostics.push(blocking(unsafe));\n commitDevelopmentDebug({ ok: false, bailout: blocking(unsafe) });\n stats.bailed++;\n continue;\n }\n let result;\n try {\n result = host.lowerCandidate(input);\n } catch (error) {\n result = {\n ok: false,\n bailout: diagnostic(\n \"local/style-resolution-failed\",\n element,\n `Style resolution failed: ${error instanceof Error ? error.message : String(error)}`\n )\n };\n }\n if (!result.ok) {\n diagnostics.push(blocking(result.bailout));\n commitDevelopmentDebug(result);\n stats.bailed++;\n continue;\n }\n try {\n validateSourceEdits(source, result.edits);\n } catch (error) {\n const reason = blocking(\n diagnostic(\n \"local/overlapping-edit\",\n element,\n error instanceof Error ? error.message : String(error)\n )\n );\n diagnostics.push(reason);\n commitDevelopmentDebug({ ok: false, bailout: reason });\n stats.bailed++;\n continue;\n }\n if (!editsAreCandidateLocal(element, result.edits) || overlapsCommitted(result.edits, edits)) {\n const reason = blocking(\n diagnostic(\n \"local/overlapping-edit\",\n element,\n \"Candidate edits overlap another candidate or escape the element span\"\n )\n );\n diagnostics.push(reason);\n commitDevelopmentDebug({ ok: false, bailout: reason });\n stats.bailed++;\n continue;\n }\n diagnostics.push(...result.diagnostics ?? []);\n edits.push(...result.edits);\n commitDevelopmentDebug(result);\n for (const rule of result.css) css.add(rule);\n for (const candidateImport of result.imports) {\n if (!imports.has(candidateImport.content)) {\n imports.set(candidateImport.content, candidateImport);\n }\n }\n for (const dependency of result.dependencies ?? []) dependencies.add(dependency);\n stats.lowered++;\n if (result.flattened) stats.flattened++;\n if (styledDefinition) stats.styled++;\n }\n for (const candidateImport of imports.values()) {\n edits.push({\n start: source.length,\n end: source.length,\n content: candidateImport.content,\n origin: candidateImport.origin\n });\n }\n return {\n version: LOWERED_MODULE_PLAN_VERSION,\n id: module.id,\n target,\n inputHash: module.inputHash,\n sourceHash: sourceContentHash(source),\n projectGeneration: options.projectGeneration,\n structuralPassHash: structuralPass?.versionHash ?? `${target}-noop-v1`,\n edits,\n css: [...css].join(\"\"),\n diagnostics,\n dependencies: [...dependencies].sort(compareCodeUnits),\n stats\n };\n}\nexport {\n LOWERED_MODULE_PLAN_VERSION,\n lowerModule\n};\n//# sourceMappingURL=lower.js.map\n"],"mappings":"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"}
|
package/dist/esm/normalize.mjs
CHANGED
|
@@ -19,19 +19,21 @@ function finalizeElement(base, entries, bailouts) {
|
|
|
19
19
|
bailouts
|
|
20
20
|
};
|
|
21
21
|
}
|
|
22
|
-
function definitionFromDeclaration(id, name,
|
|
22
|
+
function definitionFromDeclaration(id, name, declaration, parentOf) {
|
|
23
23
|
let identifier = declaration;
|
|
24
24
|
let initializer = null;
|
|
25
25
|
let constant = false;
|
|
26
26
|
if (declaration.type === "VariableDeclarator") {
|
|
27
27
|
identifier = childNode(declaration, "id") ?? declaration;
|
|
28
28
|
initializer = childNode(declaration, "init");
|
|
29
|
-
|
|
29
|
+
const parent = parentOf(declaration);
|
|
30
|
+
constant = parent?.type === "VariableDeclaration" && parent.kind === "const";
|
|
30
31
|
} else if (declaration.type === "Identifier") {
|
|
31
|
-
const declarator =
|
|
32
|
-
if (declarator) {
|
|
32
|
+
const declarator = parentOf(declaration);
|
|
33
|
+
if (declarator?.type === "VariableDeclarator" && childNode(declarator, "id")?.start === declaration.start) {
|
|
33
34
|
initializer = childNode(declarator, "init");
|
|
34
|
-
|
|
35
|
+
const parent = parentOf(declarator);
|
|
36
|
+
constant = parent?.type === "VariableDeclaration" && parent.kind === "const";
|
|
35
37
|
}
|
|
36
38
|
}
|
|
37
39
|
return {
|
|
@@ -588,7 +590,10 @@ function normalizeElements(candidate, rawId, imports = []) {
|
|
|
588
590
|
};
|
|
589
591
|
}
|
|
590
592
|
function nodeAtSpan(program, start, end) {
|
|
591
|
-
return findAstNode(program, (node) => node.start === start && node.end === end
|
|
593
|
+
return findAstNode(program, (node) => node.start === start && node.end === end, {
|
|
594
|
+
start,
|
|
595
|
+
end
|
|
596
|
+
});
|
|
592
597
|
}
|
|
593
598
|
function asAstNode(value, label) {
|
|
594
599
|
if (!isAstNode(value)) throw new Error(`${label} is not an AST node`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize.js","names":[],"sources":["esm/normalize.js"],"sourcesContent":["import {\n childNode,\n childNodes,\n findAstNode,\n identifierName,\n isAstNode,\n walkAst\n} from \"./ast\";\nimport {\n expressionReference,\n resolvedModuleId,\n spanOf\n} from \"./contracts\";\nimport { linkedBailout, localBailout } from \"./diagnostics\";\nimport { hostImportProvenance } from \"./ir\";\nfunction finalizeElement(base, entries, bailouts) {\n if (bailouts.length === 0) {\n return { ...base, complete: true, entries, bailouts: [] };\n }\n return {\n ...base,\n complete: false,\n bailedEntries: entries,\n bailouts\n };\n}\nfunction definitionFromDeclaration(id, name, program, declaration) {\n let identifier = declaration;\n let initializer = null;\n let constant = false;\n if (declaration.type === \"VariableDeclarator\") {\n identifier = childNode(declaration, \"id\") ?? declaration;\n initializer = childNode(declaration, \"init\");\n constant = !!findAstNode(\n program,\n (node) => node.type === \"VariableDeclaration\" && node.kind === \"const\" && childNodes(node, \"declarations\").some(\n (candidate) => candidate.start === declaration.start\n )\n );\n } else if (declaration.type === \"Identifier\") {\n const declarator = findAstNode(\n program,\n (node) => node.type === \"VariableDeclarator\" && childNode(node, \"id\")?.start === declaration.start\n );\n if (declarator) {\n initializer = childNode(declarator, \"init\");\n constant = !!findAstNode(\n program,\n (node) => node.type === \"VariableDeclaration\" && node.kind === \"const\" && childNodes(node, \"declarations\").some(\n (candidate) => candidate.start === declarator.start\n )\n );\n }\n }\n return {\n id: resolvedModuleId(id),\n name,\n start: identifier.start,\n end: identifier.end,\n initializer,\n constant\n };\n}\nfunction importBinding(program, localName) {\n for (const statement of childNodes(program, \"body\")) {\n if (statement.type !== \"ImportDeclaration\") continue;\n const source = childNode(statement, \"source\");\n const sourceValue = source && typeof source.value === \"string\" ? source.value : null;\n if (!sourceValue) continue;\n for (const specifier of childNodes(statement, \"specifiers\")) {\n if (identifierName(childNode(specifier, \"local\")) !== localName) continue;\n if (specifier.type === \"ImportDefaultSpecifier\") {\n return { source: sourceValue, imported: \"default\" };\n }\n if (specifier.type === \"ImportNamespaceSpecifier\") {\n return { source: sourceValue, imported: \"*\" };\n }\n const imported = childNode(specifier, \"imported\");\n const importedName = identifierName(imported) ?? (typeof imported?.value === \"string\" ? imported.value : null);\n return importedName ? { source: sourceValue, imported: importedName } : null;\n }\n }\n return null;\n}\nfunction asStaticValue(node) {\n if (!node) return void 0;\n if (node.type === \"NullLiteral\") return null;\n if (node.type === \"Literal\" || node.type.endsWith(\"Literal\")) {\n const value = node.value;\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\" || value === null) {\n return value;\n }\n }\n return void 0;\n}\nfunction elementValue(id, node) {\n const staticValue = asStaticValue(node);\n return staticValue === void 0 ? expressionReference(id, node) : { kind: \"static\", value: staticValue, span: spanOf(id, node) };\n}\nfunction symbolDefinition(definition) {\n if (!definition) return null;\n return {\n id: definition.id,\n name: definition.name,\n span: {\n id: definition.id,\n start: definition.start,\n end: definition.end\n },\n initializer: definition.initializer ? expressionReference(definition.id, definition.initializer) : null,\n constant: definition.constant\n };\n}\nfunction componentFromNode(candidate, id, program, imports, node, bailouts) {\n const literal = asStaticValue(node);\n if (typeof literal === \"string\") {\n return {\n kind: \"intrinsic\",\n name: literal,\n span: spanOf(id, node),\n closingSpan: null,\n definition: null,\n provenance: null\n };\n }\n if ((node.type === \"MemberExpression\" || node.type === \"JSXMemberExpression\") && node.computed !== true) {\n const objectName = identifierName(childNode(node, \"object\"));\n const memberName = identifierName(childNode(node, \"property\"));\n const binding2 = objectName ? importBinding(program, objectName) : null;\n if (memberName && binding2?.imported === \"html\") {\n const provenance2 = hostImportProvenance(imports, binding2.source, binding2.imported);\n if (provenance2) {\n return {\n kind: \"binding\",\n name: memberName,\n span: spanOf(id, node),\n closingSpan: null,\n definition: null,\n provenance: provenance2\n };\n }\n }\n }\n const name = identifierName(node);\n if (!name) {\n bailouts.push(\n localBailout(\n \"local/unsupported-element-name\",\n spanOf(id, node),\n `Element target ${node.type} is not a stable identifier or intrinsic tag`\n )\n );\n return null;\n }\n const intrinsic = /^[a-z]/.test(name);\n const binding = intrinsic ? null : importBinding(program, name);\n const provenance = binding ? hostImportProvenance(imports, binding.source, binding.imported) : null;\n const definition = intrinsic ? null : symbolDefinition(candidate.definitionOf(id, name));\n if (!intrinsic && !definition && !provenance) {\n bailouts.push(\n linkedBailout(\n \"linked/unresolved-component-binding\",\n spanOf(id, node),\n `Component binding ${name} has no linked definition`\n )\n );\n }\n return {\n kind: intrinsic ? \"intrinsic\" : \"binding\",\n name,\n span: spanOf(id, node),\n closingSpan: null,\n definition,\n provenance\n };\n}\nfunction jsxComponentNode(opening) {\n return childNode(opening, \"name\");\n}\nfunction jsxEntries(id, element, opening, bailouts) {\n const entries = [];\n for (const attribute of childNodes(opening, \"attributes\")) {\n if (attribute.type === \"JSXSpreadAttribute\") {\n const argument = childNode(attribute, \"argument\");\n if (argument) {\n entries.push({\n kind: \"spread\",\n span: spanOf(id, attribute),\n value: expressionReference(id, argument)\n });\n }\n continue;\n }\n if (attribute.type !== \"JSXAttribute\") continue;\n const nameNode = childNode(attribute, \"name\");\n const name = identifierName(nameNode);\n if (!name) {\n bailouts.push(\n localBailout(\n \"local/unsupported-prop-key\",\n spanOf(id, attribute),\n \"Namespaced JSX attributes are not statically supported\"\n )\n );\n continue;\n }\n const rawValue = childNode(attribute, \"value\");\n let value;\n if (!rawValue) {\n value = { kind: \"static\", value: true, span: spanOf(id, attribute) };\n } else if (rawValue.type === \"JSXExpressionContainer\") {\n const expression = childNode(rawValue, \"expression\");\n if (!expression || expression.type === \"JSXEmptyExpression\") {\n bailouts.push(\n localBailout(\n \"local/unsupported-expression\",\n spanOf(id, rawValue),\n `JSX prop ${name} has no expression`\n )\n );\n continue;\n }\n value = elementValue(id, expression);\n } else {\n value = elementValue(id, rawValue);\n }\n entries.push({ kind: \"prop\", name, span: spanOf(id, attribute), value });\n }\n for (const child of childNodes(element, \"children\")) {\n let value;\n if (child.type === \"JSXText\") {\n if (typeof child.value !== \"string\" || child.value.trim() === \"\") continue;\n value = {\n kind: \"static\",\n value: child.value,\n span: spanOf(id, child)\n };\n } else if (child.type === \"JSXExpressionContainer\") {\n const expression = childNode(child, \"expression\");\n value = !expression || expression.type === \"JSXEmptyExpression\" ? { kind: \"empty\", span: spanOf(id, child) } : elementValue(id, expression);\n } else if (child.type === \"JSXElement\" || child.type === \"JSXFragment\") {\n value = { kind: \"element\", span: spanOf(id, child) };\n } else {\n bailouts.push(\n localBailout(\n \"local/unsupported-child\",\n spanOf(id, child),\n `JSX child ${child.type} cannot be normalized`\n )\n );\n continue;\n }\n entries.push({ kind: \"child\", span: spanOf(id, child), value });\n }\n return entries.sort((left, right) => left.span.start - right.span.start);\n}\nfunction propertyName(property) {\n if (property.computed === true) return null;\n const key = childNode(property, \"key\");\n const name = identifierName(key);\n if (name) return name;\n const literal = asStaticValue(key);\n return typeof literal === \"string\" || typeof literal === \"number\" ? String(literal) : null;\n}\nfunction runtimeChildEntries(id, program, node, bailouts) {\n const rawNodes = node.type === \"ArrayExpression\" ? node.elements : null;\n if (Array.isArray(rawNodes) && rawNodes.some((child) => child === null || !isAstNode(child))) {\n bailouts.push(\n localBailout(\n \"local/unsupported-child\",\n spanOf(id, node),\n \"Sparse compiled children cannot be normalized without changing order\"\n )\n );\n return [];\n }\n const nodes = Array.isArray(rawNodes) ? rawNodes.filter(isAstNode) : [node];\n return nodes.flatMap((child) => {\n if (child.type === \"SpreadElement\") {\n bailouts.push(\n localBailout(\n \"local/unsupported-child\",\n spanOf(id, child),\n \"Spread children cannot be statically ordered\"\n )\n );\n return [];\n }\n if (child.type === \"CallExpression\" && runtimeCall(program, child)) {\n return [\n {\n kind: \"child\",\n span: spanOf(id, child),\n value: { kind: \"element\", span: spanOf(id, child) }\n }\n ];\n }\n return [{ kind: \"child\", span: spanOf(id, child), value: elementValue(id, child) }];\n });\n}\nfunction objectEntries(id, program, object, bailouts) {\n const entries = [];\n for (const property of childNodes(object, \"properties\")) {\n if (property.type === \"SpreadElement\") {\n const argument = childNode(property, \"argument\");\n if (argument) {\n const spread = {\n kind: \"spread\",\n span: spanOf(id, property),\n value: expressionReference(id, argument)\n };\n entries.push(spread);\n }\n continue;\n }\n if (property.type !== \"Property\" && property.type !== \"ObjectProperty\") {\n bailouts.push(\n localBailout(\n \"local/unsupported-prop-key\",\n spanOf(id, property),\n `Runtime props entry ${property.type} is not a data property`\n )\n );\n continue;\n }\n const name = propertyName(property);\n const valueNode = childNode(property, \"value\");\n if (!name || !valueNode) {\n bailouts.push(\n localBailout(\n \"local/unsupported-prop-key\",\n spanOf(id, property),\n \"Computed runtime prop keys are not statically supported\"\n )\n );\n continue;\n }\n if (name === \"children\") {\n entries.push(...runtimeChildEntries(id, program, valueNode, bailouts));\n continue;\n }\n const prop = {\n kind: \"prop\",\n name,\n span: spanOf(id, property),\n value: elementValue(id, valueNode)\n };\n entries.push(prop);\n }\n return entries;\n}\nfunction runtimeCall(program, call) {\n const callee = childNode(call, \"callee\");\n if (!callee) return null;\n const directName = identifierName(callee);\n if (directName) {\n const provenance2 = importBinding(program, directName);\n if (provenance2?.source === \"react/jsx-runtime\" && (provenance2.imported === \"jsx\" || provenance2.imported === \"jsxs\")) {\n return { form: \"jsx-runtime\" };\n }\n if (provenance2?.source === \"react\" && provenance2.imported === \"createElement\") {\n return { form: \"create-element\" };\n }\n }\n if (callee.type !== \"MemberExpression\" || callee.computed === true) return null;\n const objectName = identifierName(childNode(callee, \"object\"));\n const propertyName2 = identifierName(childNode(callee, \"property\"));\n if (propertyName2 !== \"createElement\" || !objectName) return null;\n const provenance = importBinding(program, objectName);\n return provenance?.source === \"react\" && (provenance.imported === \"default\" || provenance.imported === \"*\") ? { form: \"create-element\" } : null;\n}\nfunction normalizeRuntimeElement(candidate, id, program, imports, call, runtime, bailouts) {\n const bailoutStart = bailouts.length;\n const args = childNodes(call, \"arguments\");\n const target = args[0];\n if (!target) {\n bailouts.push(\n localBailout(\n \"local/invalid-element-call\",\n spanOf(id, call),\n `${runtime.form} call has no element target`\n )\n );\n return null;\n }\n const component = componentFromNode(candidate, id, program, imports, target, bailouts);\n if (!component) return null;\n const entries = [];\n const props = args[1];\n if (props && asStaticValue(props) !== null) {\n if (props.type === \"ObjectExpression\") {\n entries.push(...objectEntries(id, program, props, bailouts));\n } else {\n entries.push({\n kind: \"spread\",\n span: spanOf(id, props),\n value: expressionReference(id, props)\n });\n }\n }\n if (runtime.form === \"create-element\") {\n for (const child of args.slice(2)) {\n entries.push(...runtimeChildEntries(id, program, child, bailouts));\n }\n }\n return finalizeElement(\n {\n kind: \"element\",\n form: runtime.form,\n id,\n span: spanOf(id, call),\n propsSpan: props ? spanOf(id, props) : null,\n component\n },\n entries.sort((left, right) => left.span.start - right.span.start),\n bailouts.slice(bailoutStart)\n );\n}\nfunction styledDefinitions(candidate, id, program, imports, bailouts) {\n const definitions = [];\n walkAst(program, (node) => {\n if (node.type !== \"VariableDeclarator\") return;\n const identifier = childNode(node, \"id\");\n const name = identifierName(identifier);\n const call = childNode(node, \"init\");\n if (!name || !identifier || call?.type !== \"CallExpression\") return;\n const callee = childNode(call, \"callee\");\n const factoryName = callee && identifierName(callee);\n if (!factoryName) return;\n const binding = importBinding(program, factoryName);\n if (!binding || binding.imported !== \"styled\") return;\n const factory = hostImportProvenance(imports, binding.source, binding.imported);\n if (!factory) return;\n const definitionBailouts = [];\n const args = childNodes(call, \"arguments\");\n const baseNode = args[0];\n const objectForm = args[1]?.type === \"ObjectExpression\";\n const optionsNode = objectForm ? args[1] : args.length >= 3 ? args[2] : args[1];\n if (!baseNode || !optionsNode) {\n definitionBailouts.push(\n localBailout(\n \"local/unsupported-styled-definition\",\n spanOf(id, call),\n `styled definition ${name} must provide a base and options object`\n )\n );\n bailouts.push(...definitionBailouts);\n return;\n }\n const base = componentFromNode(\n candidate,\n id,\n program,\n imports,\n baseNode,\n definitionBailouts\n );\n if (!base) {\n bailouts.push(...definitionBailouts);\n return;\n }\n const baseClassNode = objectForm ? null : args.length >= 3 ? args[1] : null;\n const staticConfigNode = objectForm && args.length >= 3 ? args[2] : null;\n const baseDefinition = {\n kind: \"styled-definition\",\n id,\n name,\n span: spanOf(id, call),\n definitionSpan: spanOf(id, identifier),\n factory,\n base,\n baseClassName: baseClassNode ? elementValue(id, baseClassNode) : null,\n options: expressionReference(id, optionsNode),\n staticConfig: staticConfigNode ? expressionReference(id, staticConfigNode) : null\n };\n definitions.push(\n definitionBailouts.length === 0 ? { ...baseDefinition, complete: true, bailouts: [] } : {\n ...baseDefinition,\n complete: false,\n bailouts: definitionBailouts\n }\n );\n bailouts.push(...definitionBailouts);\n });\n return definitions.sort((left, right) => left.span.start - right.span.start);\n}\nconst DOM_STYLE_FRONTENDS = /* @__PURE__ */ new Set([\n \"tamagui/dom\",\n \"@tamagui/core/dom\",\n \"@tamagui/tailwind\"\n]);\nconst STYLE_FRONTENDS = /* @__PURE__ */ new Set([\n ...DOM_STYLE_FRONTENDS,\n \"tamagui\",\n \"@tamagui/core\",\n \"@tamagui/web\"\n]);\nfunction domStyleDefinitions(id, program, imports) {\n const definitions = [];\n walkAst(program, (node) => {\n if (node.type !== \"VariableDeclarator\") return;\n const identifier = childNode(node, \"id\");\n const name = identifierName(identifier);\n const call = childNode(node, \"init\");\n if (!name || !identifier || call?.type !== \"CallExpression\") return;\n const callee = childNode(call, \"callee\");\n const factoryName = callee && identifierName(callee);\n if (!factoryName) return;\n const binding = importBinding(program, factoryName);\n if (!binding || binding.imported !== \"style\" || !STYLE_FRONTENDS.has(binding.source)) {\n return;\n }\n const factory = hostImportProvenance(imports, binding.source, binding.imported);\n const value = childNodes(call, \"arguments\")[0];\n if (!factory || !value) return;\n definitions.push({\n kind: \"dom-style-definition\",\n id,\n name,\n span: spanOf(id, call),\n definitionSpan: spanOf(id, identifier),\n factory,\n value: expressionReference(id, value)\n });\n });\n return definitions.sort((left, right) => left.span.start - right.span.start);\n}\nfunction domStyleArgument(candidate, id, program, node) {\n let call = node;\n if (node.type === \"Identifier\") {\n const name = identifierName(node);\n const definition = name ? candidate.definitionOf(id, name) : null;\n if (!definition?.constant || !definition.initializer) return null;\n call = definition.initializer;\n }\n if (call.type !== \"CallExpression\") return null;\n const callee = childNode(call, \"callee\");\n const factoryName = callee && identifierName(callee);\n if (!factoryName) return null;\n const binding = importBinding(program, factoryName);\n if (!binding || binding.imported !== \"style\" || !STYLE_FRONTENDS.has(binding.source)) {\n return null;\n }\n return childNodes(call, \"arguments\")[0] ?? null;\n}\nfunction domStyleProgram(candidate, id, program, node) {\n if (node.type !== \"ArrayExpression\" || !Array.isArray(node.elements)) {\n const argument = domStyleArgument(candidate, id, program, node);\n return argument ? {\n kind: \"dom-style\",\n span: spanOf(id, node),\n items: [{ condition: null, value: expressionReference(id, argument) }]\n } : null;\n }\n const items = [];\n for (const rawItem of node.elements) {\n if (!isAstNode(rawItem)) return null;\n let item = rawItem;\n let condition = null;\n if (item.type === \"LogicalExpression\" && item.operator === \"&&\") {\n const left = childNode(item, \"left\");\n const right = childNode(item, \"right\");\n if (!left || !right) return null;\n condition = expressionReference(id, left);\n item = right;\n }\n const argument = domStyleArgument(candidate, id, program, item);\n if (!argument) {\n const staticValue = asStaticValue(item);\n if (staticValue === false || staticValue === null) continue;\n return null;\n }\n items.push({ condition, value: expressionReference(id, argument) });\n }\n return { kind: \"dom-style\", span: spanOf(id, node), items };\n}\nfunction normalizeElements(candidate, rawId, imports = []) {\n const id = resolvedModuleId(rawId);\n const program = candidate.programOf(id);\n const elements = [];\n const bailouts = [];\n walkAst(program, (node) => {\n if (node.type === \"JSXElement\") {\n const bailoutStart = bailouts.length;\n const opening = childNode(node, \"openingElement\");\n const target = opening && jsxComponentNode(opening);\n if (!opening || !target) return;\n const component = componentFromNode(\n candidate,\n id,\n program,\n imports,\n target,\n bailouts\n );\n if (!component) return;\n const closingElement = childNode(node, \"closingElement\");\n const closingName = closingElement && childNode(closingElement, \"name\");\n if (closingName) component.closingSpan = spanOf(id, closingName);\n const entries = jsxEntries(id, node, opening, bailouts);\n for (const entry of entries) {\n if (entry.kind !== \"prop\" || entry.name !== \"style\") continue;\n const raw = entry.value.kind === \"expression\" ? nodeAtSpan(program, entry.value.start, entry.value.end) : null;\n const styleProgram = raw && domStyleProgram(candidate, id, program, raw);\n const argument = raw && domStyleArgument(candidate, id, program, raw);\n if (styleProgram) entry.value = styleProgram;\n else if (argument) entry.value = expressionReference(id, argument);\n }\n elements.push(\n finalizeElement(\n {\n kind: \"element\",\n form: \"jsx\",\n id,\n span: spanOf(id, node),\n propsSpan: spanOf(id, opening),\n component\n },\n entries,\n bailouts.slice(bailoutStart)\n )\n );\n return;\n }\n if (node.type !== \"CallExpression\") return;\n const runtime = runtimeCall(program, node);\n if (!runtime) return;\n const element = normalizeRuntimeElement(\n candidate,\n id,\n program,\n imports,\n node,\n runtime,\n bailouts\n );\n if (element) {\n const entries = element.complete ? element.entries : element.bailedEntries;\n for (const entry of entries) {\n if (entry.kind !== \"prop\" || entry.name !== \"style\") continue;\n const raw = entry.value.kind === \"expression\" ? nodeAtSpan(program, entry.value.start, entry.value.end) : null;\n const styleProgram = raw && domStyleProgram(candidate, id, program, raw);\n const argument = raw && domStyleArgument(candidate, id, program, raw);\n if (styleProgram) entry.value = styleProgram;\n else if (argument) entry.value = expressionReference(id, argument);\n }\n elements.push(element);\n }\n });\n return {\n elements: elements.sort((left, right) => left.span.start - right.span.start),\n styledDefinitions: styledDefinitions(candidate, id, program, imports, bailouts),\n domStyleDefinitions: domStyleDefinitions(id, program, imports),\n bailouts: bailouts.sort((left, right) => left.span.start - right.span.start)\n };\n}\nfunction nodeAtSpan(program, start, end) {\n return findAstNode(program, (node) => node.start === start && node.end === end);\n}\nfunction asAstNode(value, label) {\n if (!isAstNode(value)) throw new Error(`${label} is not an AST node`);\n return value;\n}\nexport {\n asAstNode,\n definitionFromDeclaration,\n nodeAtSpan,\n normalizeElements\n};\n//# sourceMappingURL=normalize.js.map\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"normalize.js","names":[],"sources":["esm/normalize.js"],"sourcesContent":["import {\n childNode,\n childNodes,\n findAstNode,\n identifierName,\n isAstNode,\n walkAst\n} from \"./ast\";\nimport {\n expressionReference,\n resolvedModuleId,\n spanOf\n} from \"./contracts\";\nimport { linkedBailout, localBailout } from \"./diagnostics\";\nimport { hostImportProvenance } from \"./ir\";\nfunction finalizeElement(base, entries, bailouts) {\n if (bailouts.length === 0) {\n return { ...base, complete: true, entries, bailouts: [] };\n }\n return {\n ...base,\n complete: false,\n bailedEntries: entries,\n bailouts\n };\n}\nfunction definitionFromDeclaration(id, name, declaration, parentOf) {\n let identifier = declaration;\n let initializer = null;\n let constant = false;\n if (declaration.type === \"VariableDeclarator\") {\n identifier = childNode(declaration, \"id\") ?? declaration;\n initializer = childNode(declaration, \"init\");\n const parent = parentOf(declaration);\n constant = parent?.type === \"VariableDeclaration\" && parent.kind === \"const\";\n } else if (declaration.type === \"Identifier\") {\n const declarator = parentOf(declaration);\n if (declarator?.type === \"VariableDeclarator\" && childNode(declarator, \"id\")?.start === declaration.start) {\n initializer = childNode(declarator, \"init\");\n const parent = parentOf(declarator);\n constant = parent?.type === \"VariableDeclaration\" && parent.kind === \"const\";\n }\n }\n return {\n id: resolvedModuleId(id),\n name,\n start: identifier.start,\n end: identifier.end,\n initializer,\n constant\n };\n}\nfunction importBinding(program, localName) {\n for (const statement of childNodes(program, \"body\")) {\n if (statement.type !== \"ImportDeclaration\") continue;\n const source = childNode(statement, \"source\");\n const sourceValue = source && typeof source.value === \"string\" ? source.value : null;\n if (!sourceValue) continue;\n for (const specifier of childNodes(statement, \"specifiers\")) {\n if (identifierName(childNode(specifier, \"local\")) !== localName) continue;\n if (specifier.type === \"ImportDefaultSpecifier\") {\n return { source: sourceValue, imported: \"default\" };\n }\n if (specifier.type === \"ImportNamespaceSpecifier\") {\n return { source: sourceValue, imported: \"*\" };\n }\n const imported = childNode(specifier, \"imported\");\n const importedName = identifierName(imported) ?? (typeof imported?.value === \"string\" ? imported.value : null);\n return importedName ? { source: sourceValue, imported: importedName } : null;\n }\n }\n return null;\n}\nfunction asStaticValue(node) {\n if (!node) return void 0;\n if (node.type === \"NullLiteral\") return null;\n if (node.type === \"Literal\" || node.type.endsWith(\"Literal\")) {\n const value = node.value;\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\" || value === null) {\n return value;\n }\n }\n return void 0;\n}\nfunction elementValue(id, node) {\n const staticValue = asStaticValue(node);\n return staticValue === void 0 ? expressionReference(id, node) : { kind: \"static\", value: staticValue, span: spanOf(id, node) };\n}\nfunction symbolDefinition(definition) {\n if (!definition) return null;\n return {\n id: definition.id,\n name: definition.name,\n span: {\n id: definition.id,\n start: definition.start,\n end: definition.end\n },\n initializer: definition.initializer ? expressionReference(definition.id, definition.initializer) : null,\n constant: definition.constant\n };\n}\nfunction componentFromNode(candidate, id, program, imports, node, bailouts) {\n const literal = asStaticValue(node);\n if (typeof literal === \"string\") {\n return {\n kind: \"intrinsic\",\n name: literal,\n span: spanOf(id, node),\n closingSpan: null,\n definition: null,\n provenance: null\n };\n }\n if ((node.type === \"MemberExpression\" || node.type === \"JSXMemberExpression\") && node.computed !== true) {\n const objectName = identifierName(childNode(node, \"object\"));\n const memberName = identifierName(childNode(node, \"property\"));\n const binding2 = objectName ? importBinding(program, objectName) : null;\n if (memberName && binding2?.imported === \"html\") {\n const provenance2 = hostImportProvenance(imports, binding2.source, binding2.imported);\n if (provenance2) {\n return {\n kind: \"binding\",\n name: memberName,\n span: spanOf(id, node),\n closingSpan: null,\n definition: null,\n provenance: provenance2\n };\n }\n }\n }\n const name = identifierName(node);\n if (!name) {\n bailouts.push(\n localBailout(\n \"local/unsupported-element-name\",\n spanOf(id, node),\n `Element target ${node.type} is not a stable identifier or intrinsic tag`\n )\n );\n return null;\n }\n const intrinsic = /^[a-z]/.test(name);\n const binding = intrinsic ? null : importBinding(program, name);\n const provenance = binding ? hostImportProvenance(imports, binding.source, binding.imported) : null;\n const definition = intrinsic ? null : symbolDefinition(candidate.definitionOf(id, name));\n if (!intrinsic && !definition && !provenance) {\n bailouts.push(\n linkedBailout(\n \"linked/unresolved-component-binding\",\n spanOf(id, node),\n `Component binding ${name} has no linked definition`\n )\n );\n }\n return {\n kind: intrinsic ? \"intrinsic\" : \"binding\",\n name,\n span: spanOf(id, node),\n closingSpan: null,\n definition,\n provenance\n };\n}\nfunction jsxComponentNode(opening) {\n return childNode(opening, \"name\");\n}\nfunction jsxEntries(id, element, opening, bailouts) {\n const entries = [];\n for (const attribute of childNodes(opening, \"attributes\")) {\n if (attribute.type === \"JSXSpreadAttribute\") {\n const argument = childNode(attribute, \"argument\");\n if (argument) {\n entries.push({\n kind: \"spread\",\n span: spanOf(id, attribute),\n value: expressionReference(id, argument)\n });\n }\n continue;\n }\n if (attribute.type !== \"JSXAttribute\") continue;\n const nameNode = childNode(attribute, \"name\");\n const name = identifierName(nameNode);\n if (!name) {\n bailouts.push(\n localBailout(\n \"local/unsupported-prop-key\",\n spanOf(id, attribute),\n \"Namespaced JSX attributes are not statically supported\"\n )\n );\n continue;\n }\n const rawValue = childNode(attribute, \"value\");\n let value;\n if (!rawValue) {\n value = { kind: \"static\", value: true, span: spanOf(id, attribute) };\n } else if (rawValue.type === \"JSXExpressionContainer\") {\n const expression = childNode(rawValue, \"expression\");\n if (!expression || expression.type === \"JSXEmptyExpression\") {\n bailouts.push(\n localBailout(\n \"local/unsupported-expression\",\n spanOf(id, rawValue),\n `JSX prop ${name} has no expression`\n )\n );\n continue;\n }\n value = elementValue(id, expression);\n } else {\n value = elementValue(id, rawValue);\n }\n entries.push({ kind: \"prop\", name, span: spanOf(id, attribute), value });\n }\n for (const child of childNodes(element, \"children\")) {\n let value;\n if (child.type === \"JSXText\") {\n if (typeof child.value !== \"string\" || child.value.trim() === \"\") continue;\n value = {\n kind: \"static\",\n value: child.value,\n span: spanOf(id, child)\n };\n } else if (child.type === \"JSXExpressionContainer\") {\n const expression = childNode(child, \"expression\");\n value = !expression || expression.type === \"JSXEmptyExpression\" ? { kind: \"empty\", span: spanOf(id, child) } : elementValue(id, expression);\n } else if (child.type === \"JSXElement\" || child.type === \"JSXFragment\") {\n value = { kind: \"element\", span: spanOf(id, child) };\n } else {\n bailouts.push(\n localBailout(\n \"local/unsupported-child\",\n spanOf(id, child),\n `JSX child ${child.type} cannot be normalized`\n )\n );\n continue;\n }\n entries.push({ kind: \"child\", span: spanOf(id, child), value });\n }\n return entries.sort((left, right) => left.span.start - right.span.start);\n}\nfunction propertyName(property) {\n if (property.computed === true) return null;\n const key = childNode(property, \"key\");\n const name = identifierName(key);\n if (name) return name;\n const literal = asStaticValue(key);\n return typeof literal === \"string\" || typeof literal === \"number\" ? String(literal) : null;\n}\nfunction runtimeChildEntries(id, program, node, bailouts) {\n const rawNodes = node.type === \"ArrayExpression\" ? node.elements : null;\n if (Array.isArray(rawNodes) && rawNodes.some((child) => child === null || !isAstNode(child))) {\n bailouts.push(\n localBailout(\n \"local/unsupported-child\",\n spanOf(id, node),\n \"Sparse compiled children cannot be normalized without changing order\"\n )\n );\n return [];\n }\n const nodes = Array.isArray(rawNodes) ? rawNodes.filter(isAstNode) : [node];\n return nodes.flatMap((child) => {\n if (child.type === \"SpreadElement\") {\n bailouts.push(\n localBailout(\n \"local/unsupported-child\",\n spanOf(id, child),\n \"Spread children cannot be statically ordered\"\n )\n );\n return [];\n }\n if (child.type === \"CallExpression\" && runtimeCall(program, child)) {\n return [\n {\n kind: \"child\",\n span: spanOf(id, child),\n value: { kind: \"element\", span: spanOf(id, child) }\n }\n ];\n }\n return [{ kind: \"child\", span: spanOf(id, child), value: elementValue(id, child) }];\n });\n}\nfunction objectEntries(id, program, object, bailouts) {\n const entries = [];\n for (const property of childNodes(object, \"properties\")) {\n if (property.type === \"SpreadElement\") {\n const argument = childNode(property, \"argument\");\n if (argument) {\n const spread = {\n kind: \"spread\",\n span: spanOf(id, property),\n value: expressionReference(id, argument)\n };\n entries.push(spread);\n }\n continue;\n }\n if (property.type !== \"Property\" && property.type !== \"ObjectProperty\") {\n bailouts.push(\n localBailout(\n \"local/unsupported-prop-key\",\n spanOf(id, property),\n `Runtime props entry ${property.type} is not a data property`\n )\n );\n continue;\n }\n const name = propertyName(property);\n const valueNode = childNode(property, \"value\");\n if (!name || !valueNode) {\n bailouts.push(\n localBailout(\n \"local/unsupported-prop-key\",\n spanOf(id, property),\n \"Computed runtime prop keys are not statically supported\"\n )\n );\n continue;\n }\n if (name === \"children\") {\n entries.push(...runtimeChildEntries(id, program, valueNode, bailouts));\n continue;\n }\n const prop = {\n kind: \"prop\",\n name,\n span: spanOf(id, property),\n value: elementValue(id, valueNode)\n };\n entries.push(prop);\n }\n return entries;\n}\nfunction runtimeCall(program, call) {\n const callee = childNode(call, \"callee\");\n if (!callee) return null;\n const directName = identifierName(callee);\n if (directName) {\n const provenance2 = importBinding(program, directName);\n if (provenance2?.source === \"react/jsx-runtime\" && (provenance2.imported === \"jsx\" || provenance2.imported === \"jsxs\")) {\n return { form: \"jsx-runtime\" };\n }\n if (provenance2?.source === \"react\" && provenance2.imported === \"createElement\") {\n return { form: \"create-element\" };\n }\n }\n if (callee.type !== \"MemberExpression\" || callee.computed === true) return null;\n const objectName = identifierName(childNode(callee, \"object\"));\n const propertyName2 = identifierName(childNode(callee, \"property\"));\n if (propertyName2 !== \"createElement\" || !objectName) return null;\n const provenance = importBinding(program, objectName);\n return provenance?.source === \"react\" && (provenance.imported === \"default\" || provenance.imported === \"*\") ? { form: \"create-element\" } : null;\n}\nfunction normalizeRuntimeElement(candidate, id, program, imports, call, runtime, bailouts) {\n const bailoutStart = bailouts.length;\n const args = childNodes(call, \"arguments\");\n const target = args[0];\n if (!target) {\n bailouts.push(\n localBailout(\n \"local/invalid-element-call\",\n spanOf(id, call),\n `${runtime.form} call has no element target`\n )\n );\n return null;\n }\n const component = componentFromNode(candidate, id, program, imports, target, bailouts);\n if (!component) return null;\n const entries = [];\n const props = args[1];\n if (props && asStaticValue(props) !== null) {\n if (props.type === \"ObjectExpression\") {\n entries.push(...objectEntries(id, program, props, bailouts));\n } else {\n entries.push({\n kind: \"spread\",\n span: spanOf(id, props),\n value: expressionReference(id, props)\n });\n }\n }\n if (runtime.form === \"create-element\") {\n for (const child of args.slice(2)) {\n entries.push(...runtimeChildEntries(id, program, child, bailouts));\n }\n }\n return finalizeElement(\n {\n kind: \"element\",\n form: runtime.form,\n id,\n span: spanOf(id, call),\n propsSpan: props ? spanOf(id, props) : null,\n component\n },\n entries.sort((left, right) => left.span.start - right.span.start),\n bailouts.slice(bailoutStart)\n );\n}\nfunction styledDefinitions(candidate, id, program, imports, bailouts) {\n const definitions = [];\n walkAst(program, (node) => {\n if (node.type !== \"VariableDeclarator\") return;\n const identifier = childNode(node, \"id\");\n const name = identifierName(identifier);\n const call = childNode(node, \"init\");\n if (!name || !identifier || call?.type !== \"CallExpression\") return;\n const callee = childNode(call, \"callee\");\n const factoryName = callee && identifierName(callee);\n if (!factoryName) return;\n const binding = importBinding(program, factoryName);\n if (!binding || binding.imported !== \"styled\") return;\n const factory = hostImportProvenance(imports, binding.source, binding.imported);\n if (!factory) return;\n const definitionBailouts = [];\n const args = childNodes(call, \"arguments\");\n const baseNode = args[0];\n const objectForm = args[1]?.type === \"ObjectExpression\";\n const optionsNode = objectForm ? args[1] : args.length >= 3 ? args[2] : args[1];\n if (!baseNode || !optionsNode) {\n definitionBailouts.push(\n localBailout(\n \"local/unsupported-styled-definition\",\n spanOf(id, call),\n `styled definition ${name} must provide a base and options object`\n )\n );\n bailouts.push(...definitionBailouts);\n return;\n }\n const base = componentFromNode(\n candidate,\n id,\n program,\n imports,\n baseNode,\n definitionBailouts\n );\n if (!base) {\n bailouts.push(...definitionBailouts);\n return;\n }\n const baseClassNode = objectForm ? null : args.length >= 3 ? args[1] : null;\n const staticConfigNode = objectForm && args.length >= 3 ? args[2] : null;\n const baseDefinition = {\n kind: \"styled-definition\",\n id,\n name,\n span: spanOf(id, call),\n definitionSpan: spanOf(id, identifier),\n factory,\n base,\n baseClassName: baseClassNode ? elementValue(id, baseClassNode) : null,\n options: expressionReference(id, optionsNode),\n staticConfig: staticConfigNode ? expressionReference(id, staticConfigNode) : null\n };\n definitions.push(\n definitionBailouts.length === 0 ? { ...baseDefinition, complete: true, bailouts: [] } : {\n ...baseDefinition,\n complete: false,\n bailouts: definitionBailouts\n }\n );\n bailouts.push(...definitionBailouts);\n });\n return definitions.sort((left, right) => left.span.start - right.span.start);\n}\nconst DOM_STYLE_FRONTENDS = /* @__PURE__ */ new Set([\n \"tamagui/dom\",\n \"@tamagui/core/dom\",\n \"@tamagui/tailwind\"\n]);\nconst STYLE_FRONTENDS = /* @__PURE__ */ new Set([\n ...DOM_STYLE_FRONTENDS,\n \"tamagui\",\n \"@tamagui/core\",\n \"@tamagui/web\"\n]);\nfunction domStyleDefinitions(id, program, imports) {\n const definitions = [];\n walkAst(program, (node) => {\n if (node.type !== \"VariableDeclarator\") return;\n const identifier = childNode(node, \"id\");\n const name = identifierName(identifier);\n const call = childNode(node, \"init\");\n if (!name || !identifier || call?.type !== \"CallExpression\") return;\n const callee = childNode(call, \"callee\");\n const factoryName = callee && identifierName(callee);\n if (!factoryName) return;\n const binding = importBinding(program, factoryName);\n if (!binding || binding.imported !== \"style\" || !STYLE_FRONTENDS.has(binding.source)) {\n return;\n }\n const factory = hostImportProvenance(imports, binding.source, binding.imported);\n const value = childNodes(call, \"arguments\")[0];\n if (!factory || !value) return;\n definitions.push({\n kind: \"dom-style-definition\",\n id,\n name,\n span: spanOf(id, call),\n definitionSpan: spanOf(id, identifier),\n factory,\n value: expressionReference(id, value)\n });\n });\n return definitions.sort((left, right) => left.span.start - right.span.start);\n}\nfunction domStyleArgument(candidate, id, program, node) {\n let call = node;\n if (node.type === \"Identifier\") {\n const name = identifierName(node);\n const definition = name ? candidate.definitionOf(id, name) : null;\n if (!definition?.constant || !definition.initializer) return null;\n call = definition.initializer;\n }\n if (call.type !== \"CallExpression\") return null;\n const callee = childNode(call, \"callee\");\n const factoryName = callee && identifierName(callee);\n if (!factoryName) return null;\n const binding = importBinding(program, factoryName);\n if (!binding || binding.imported !== \"style\" || !STYLE_FRONTENDS.has(binding.source)) {\n return null;\n }\n return childNodes(call, \"arguments\")[0] ?? null;\n}\nfunction domStyleProgram(candidate, id, program, node) {\n if (node.type !== \"ArrayExpression\" || !Array.isArray(node.elements)) {\n const argument = domStyleArgument(candidate, id, program, node);\n return argument ? {\n kind: \"dom-style\",\n span: spanOf(id, node),\n items: [{ condition: null, value: expressionReference(id, argument) }]\n } : null;\n }\n const items = [];\n for (const rawItem of node.elements) {\n if (!isAstNode(rawItem)) return null;\n let item = rawItem;\n let condition = null;\n if (item.type === \"LogicalExpression\" && item.operator === \"&&\") {\n const left = childNode(item, \"left\");\n const right = childNode(item, \"right\");\n if (!left || !right) return null;\n condition = expressionReference(id, left);\n item = right;\n }\n const argument = domStyleArgument(candidate, id, program, item);\n if (!argument) {\n const staticValue = asStaticValue(item);\n if (staticValue === false || staticValue === null) continue;\n return null;\n }\n items.push({ condition, value: expressionReference(id, argument) });\n }\n return { kind: \"dom-style\", span: spanOf(id, node), items };\n}\nfunction normalizeElements(candidate, rawId, imports = []) {\n const id = resolvedModuleId(rawId);\n const program = candidate.programOf(id);\n const elements = [];\n const bailouts = [];\n walkAst(program, (node) => {\n if (node.type === \"JSXElement\") {\n const bailoutStart = bailouts.length;\n const opening = childNode(node, \"openingElement\");\n const target = opening && jsxComponentNode(opening);\n if (!opening || !target) return;\n const component = componentFromNode(\n candidate,\n id,\n program,\n imports,\n target,\n bailouts\n );\n if (!component) return;\n const closingElement = childNode(node, \"closingElement\");\n const closingName = closingElement && childNode(closingElement, \"name\");\n if (closingName) component.closingSpan = spanOf(id, closingName);\n const entries = jsxEntries(id, node, opening, bailouts);\n for (const entry of entries) {\n if (entry.kind !== \"prop\" || entry.name !== \"style\") continue;\n const raw = entry.value.kind === \"expression\" ? nodeAtSpan(program, entry.value.start, entry.value.end) : null;\n const styleProgram = raw && domStyleProgram(candidate, id, program, raw);\n const argument = raw && domStyleArgument(candidate, id, program, raw);\n if (styleProgram) entry.value = styleProgram;\n else if (argument) entry.value = expressionReference(id, argument);\n }\n elements.push(\n finalizeElement(\n {\n kind: \"element\",\n form: \"jsx\",\n id,\n span: spanOf(id, node),\n propsSpan: spanOf(id, opening),\n component\n },\n entries,\n bailouts.slice(bailoutStart)\n )\n );\n return;\n }\n if (node.type !== \"CallExpression\") return;\n const runtime = runtimeCall(program, node);\n if (!runtime) return;\n const element = normalizeRuntimeElement(\n candidate,\n id,\n program,\n imports,\n node,\n runtime,\n bailouts\n );\n if (element) {\n const entries = element.complete ? element.entries : element.bailedEntries;\n for (const entry of entries) {\n if (entry.kind !== \"prop\" || entry.name !== \"style\") continue;\n const raw = entry.value.kind === \"expression\" ? nodeAtSpan(program, entry.value.start, entry.value.end) : null;\n const styleProgram = raw && domStyleProgram(candidate, id, program, raw);\n const argument = raw && domStyleArgument(candidate, id, program, raw);\n if (styleProgram) entry.value = styleProgram;\n else if (argument) entry.value = expressionReference(id, argument);\n }\n elements.push(element);\n }\n });\n return {\n elements: elements.sort((left, right) => left.span.start - right.span.start),\n styledDefinitions: styledDefinitions(candidate, id, program, imports, bailouts),\n domStyleDefinitions: domStyleDefinitions(id, program, imports),\n bailouts: bailouts.sort((left, right) => left.span.start - right.span.start)\n };\n}\nfunction nodeAtSpan(program, start, end) {\n return findAstNode(program, (node) => node.start === start && node.end === end, {\n start,\n end\n });\n}\nfunction asAstNode(value, label) {\n if (!isAstNode(value)) throw new Error(`${label} is not an AST node`);\n return value;\n}\nexport {\n asAstNode,\n definitionFromDeclaration,\n nodeAtSpan,\n normalizeElements\n};\n//# sourceMappingURL=normalize.js.map\n"],"mappings":"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"}
|
package/dist/esm/yuku.mjs
CHANGED
|
@@ -38,8 +38,7 @@ var YukuCandidate = class {
|
|
|
38
38
|
#definitionSite(symbol) {
|
|
39
39
|
const declaration = symbol.declarations[0];
|
|
40
40
|
if (!declaration) return null;
|
|
41
|
-
|
|
42
|
-
return definitionFromDeclaration(symbol.module.path, symbol.name, program, asAstNode(declaration, `${symbol.name} declaration`));
|
|
41
|
+
return definitionFromDeclaration(symbol.module.path, symbol.name, asAstNode(declaration, `${symbol.name} declaration`), (node) => symbol.module.parentOf(node));
|
|
43
42
|
}
|
|
44
43
|
definitionOf(id, localName) {
|
|
45
44
|
const symbol = this.#canonicalSymbol(id, localName);
|
|
@@ -118,6 +117,7 @@ const yukuFactory = {
|
|
|
118
117
|
if (node.type !== "ImportDeclaration" && node.type !== "ExportNamedDeclaration" && node.type !== "ExportAllDeclaration" && node.type !== "ImportExpression") {
|
|
119
118
|
return;
|
|
120
119
|
}
|
|
120
|
+
if (node.importKind === "type" || node.exportKind === "type") return;
|
|
121
121
|
const sourceNode = childNode(node, "source");
|
|
122
122
|
if (sourceNode && typeof sourceNode.value === "string") {
|
|
123
123
|
found.push({
|
package/dist/esm/yuku.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yuku.js","names":["#analyzer","#parseCounts","#module","#canonicalSymbol","#definitionSite"],"sources":["esm/yuku.js"],"sourcesContent":["import { Analyzer } from \"yuku-analyzer\";\nimport { resolveFromHost, resolvedModuleId } from \"./contracts\";\nimport { childNode, walkAst } from \"./ast\";\nimport { asAstNode, definitionFromDeclaration, nodeAtSpan } from \"./normalize\";\nclass YukuCandidate {\n constructor(project) {\n this.project = project;\n this.#analyzer = new Analyzer({\n resolve: (specifier, importer) => resolveFromHost(this.project.resolutions, specifier, importer)\n });\n for (const [id, source] of project.files) this.addFile(id, source);\n }\n project;\n name = \"yuku\";\n #analyzer;\n #parseCounts = /* @__PURE__ */ new Map();\n addFile(id, source) {\n this.#analyzer.addFile(id, source, { preserveParens: true, sourceType: \"module\" });\n this.#parseCounts.set(id, (this.#parseCounts.get(id) ?? 0) + 1);\n }\n removeFile(id) {\n return this.#analyzer.removeFile(id);\n }\n link() {\n this.#analyzer.link();\n }\n #module(id) {\n const module = this.#analyzer.module(id);\n if (!module) throw new Error(`yuku: unknown module ${id}`);\n return module;\n }\n #canonicalSymbol(id, localName) {\n const symbol = this.#module(id).resolve(localName);\n return symbol ? this.#analyzer.definitionOf(symbol)?.symbol ?? null : null;\n }\n #definitionSite(symbol) {\n const declaration = symbol.declarations[0];\n if (!declaration) return null;\n
|
|
1
|
+
{"version":3,"file":"yuku.js","names":["#analyzer","#parseCounts","#module","#canonicalSymbol","#definitionSite"],"sources":["esm/yuku.js"],"sourcesContent":["import { Analyzer } from \"yuku-analyzer\";\nimport { resolveFromHost, resolvedModuleId } from \"./contracts\";\nimport { childNode, walkAst } from \"./ast\";\nimport { asAstNode, definitionFromDeclaration, nodeAtSpan } from \"./normalize\";\nclass YukuCandidate {\n constructor(project) {\n this.project = project;\n this.#analyzer = new Analyzer({\n resolve: (specifier, importer) => resolveFromHost(this.project.resolutions, specifier, importer)\n });\n for (const [id, source] of project.files) this.addFile(id, source);\n }\n project;\n name = \"yuku\";\n #analyzer;\n #parseCounts = /* @__PURE__ */ new Map();\n addFile(id, source) {\n this.#analyzer.addFile(id, source, { preserveParens: true, sourceType: \"module\" });\n this.#parseCounts.set(id, (this.#parseCounts.get(id) ?? 0) + 1);\n }\n removeFile(id) {\n return this.#analyzer.removeFile(id);\n }\n link() {\n this.#analyzer.link();\n }\n #module(id) {\n const module = this.#analyzer.module(id);\n if (!module) throw new Error(`yuku: unknown module ${id}`);\n return module;\n }\n #canonicalSymbol(id, localName) {\n const symbol = this.#module(id).resolve(localName);\n return symbol ? this.#analyzer.definitionOf(symbol)?.symbol ?? null : null;\n }\n #definitionSite(symbol) {\n const declaration = symbol.declarations[0];\n if (!declaration) return null;\n return definitionFromDeclaration(\n symbol.module.path,\n symbol.name,\n asAstNode(declaration, `${symbol.name} declaration`),\n (node) => symbol.module.parentOf(node)\n );\n }\n definitionOf(id, localName) {\n const symbol = this.#canonicalSymbol(id, localName);\n return symbol ? this.#definitionSite(symbol) : null;\n }\n definitionAt(id, start, end) {\n const module = this.#module(id);\n const node = nodeAtSpan(asAstNode(module.ast, `${module.path} program`), start, end);\n if (!node) return null;\n const symbol = module.symbolOf(node);\n const definition = symbol && this.#analyzer.definitionOf(symbol)?.symbol;\n return definition ? this.#definitionSite(definition) : null;\n }\n referencesOf(definition) {\n const symbol = this.#canonicalSymbol(definition.id, definition.name);\n if (!symbol) return [];\n return this.#analyzer.referencesOf(symbol).map(({ module, reference }) => ({\n id: resolvedModuleId(module.path),\n name: reference.name,\n start: reference.node.start,\n end: reference.node.end\n }));\n }\n dependenciesOf(id) {\n return this.#module(id).dependencies.map((module) => module.path).sort();\n }\n dependentsOf(id) {\n return this.#module(id).dependents.map((module) => module.path).sort();\n }\n affectedBy(id) {\n const affected = /* @__PURE__ */ new Set([id]);\n const queue = [id];\n while (queue.length) {\n const current = queue.shift();\n for (const dependent of this.dependentsOf(current)) {\n if (!affected.has(dependent)) {\n affected.add(dependent);\n queue.push(dependent);\n }\n }\n }\n return [...affected].sort();\n }\n programOf(id) {\n return asAstNode(this.#module(id).ast, `${id} program`);\n }\n sourceOf(id) {\n return this.#module(id).source;\n }\n parseCount(id) {\n return this.#parseCounts.get(id) ?? 0;\n }\n diagnostics() {\n const parseDiagnostics = [...this.#analyzer.modules.values()].flatMap(\n (module) => module.diagnostics.map((diagnostic) => ({\n kind: \"parse\",\n id: resolvedModuleId(module.path),\n message: diagnostic.message\n }))\n );\n return [\n ...parseDiagnostics,\n ...this.#analyzer.diagnostics.map((diagnostic) => ({\n kind: \"link\",\n id: resolvedModuleId(diagnostic.module),\n message: diagnostic.message\n }))\n ];\n }\n}\nconst yukuFactory = {\n name: \"yuku\",\n create: (project) => new YukuCandidate(project),\n scanImports(id, source) {\n const candidate = new YukuCandidate({\n files: /* @__PURE__ */ new Map([[id, source]]),\n resolutions: /* @__PURE__ */ new Map()\n });\n const found = [];\n walkAst(candidate.programOf(id), (node) => {\n if (node.type !== \"ImportDeclaration\" && node.type !== \"ExportNamedDeclaration\" && node.type !== \"ExportAllDeclaration\" && node.type !== \"ImportExpression\") {\n return;\n }\n if (node.importKind === \"type\" || node.exportKind === \"type\") return;\n const sourceNode = childNode(node, \"source\");\n if (sourceNode && typeof sourceNode.value === \"string\") {\n found.push({ start: node.start, specifier: sourceNode.value });\n }\n });\n return [\n ...new Set(\n found.sort((left, right) => left.start - right.start).map(({ specifier }) => specifier)\n )\n ];\n }\n};\nfunction parseModuleAst(source, id = \"/tamagui/compiler-module.tsx\") {\n const candidate = yukuFactory.create({\n files: /* @__PURE__ */ new Map([[id, source]]),\n resolutions: /* @__PURE__ */ new Map()\n });\n const diagnostics = candidate.diagnostics().filter((diagnostic) => diagnostic.kind === \"parse\");\n if (diagnostics.length) {\n throw new Error(\n `Unable to parse ${id}: ${diagnostics.map(({ message }) => message).join(\"; \")}`\n );\n }\n return candidate.programOf(id);\n}\nexport {\n parseModuleAst,\n yukuFactory\n};\n//# sourceMappingURL=yuku.js.map\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tamagui/compiler-core",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.1",
|
|
4
4
|
"description": "Shared parser-independent Tamagui compiler graph and element IR",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -40,12 +40,13 @@
|
|
|
40
40
|
"yuku-analyzer": "0.6.1"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
|
-
"@tamagui/build": "3.0.
|
|
44
|
-
"typescript": "
|
|
43
|
+
"@tamagui/build": "3.0.1",
|
|
44
|
+
"typescript": "7.0.2"
|
|
45
45
|
},
|
|
46
46
|
"repository": {
|
|
47
47
|
"type": "git",
|
|
48
48
|
"url": "git+https://github.com/tamagui/tamagui.git",
|
|
49
49
|
"directory": "code/compiler/compiler-core"
|
|
50
|
-
}
|
|
50
|
+
},
|
|
51
|
+
"releaseSourceCommit": "c156b7cc55e5a6cc5883ebc8189720850ac32dbd"
|
|
51
52
|
}
|
package/src/ast.ts
CHANGED
|
@@ -20,8 +20,9 @@ export function walkAst(
|
|
|
20
20
|
): void {
|
|
21
21
|
visitor(node, parent, key)
|
|
22
22
|
|
|
23
|
-
for (const
|
|
23
|
+
for (const childKey of Object.keys(node)) {
|
|
24
24
|
if (ignoredKeys.has(childKey)) continue
|
|
25
|
+
const value = node[childKey]
|
|
25
26
|
if (isAstNode(value)) {
|
|
26
27
|
walkAst(value, visitor, node, childKey)
|
|
27
28
|
} else if (Array.isArray(value)) {
|
|
@@ -34,17 +35,36 @@ export function walkAst(
|
|
|
34
35
|
}
|
|
35
36
|
}
|
|
36
37
|
|
|
38
|
+
/** With a source range, only descend into nodes that contain that range. */
|
|
37
39
|
export function findAstNode(
|
|
38
40
|
root: AstNode,
|
|
39
|
-
predicate: (node: AstNode, parent: AstNode | null, key: string | null) => boolean
|
|
41
|
+
predicate: (node: AstNode, parent: AstNode | null, key: string | null) => boolean,
|
|
42
|
+
span?: Pick<AstNode, 'start' | 'end'>
|
|
40
43
|
): AstNode | null {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
44
|
+
function visit(
|
|
45
|
+
node: AstNode,
|
|
46
|
+
parent: AstNode | null,
|
|
47
|
+
key: string | null
|
|
48
|
+
): AstNode | null {
|
|
49
|
+
if (span && (node.start > span.start || node.end < span.end)) return null
|
|
50
|
+
if (predicate(node, parent, key)) return node
|
|
51
|
+
for (const childKey of Object.keys(node)) {
|
|
52
|
+
if (ignoredKeys.has(childKey)) continue
|
|
53
|
+
const value = node[childKey]
|
|
54
|
+
if (isAstNode(value)) {
|
|
55
|
+
const found = visit(value, node, childKey)
|
|
56
|
+
if (found) return found
|
|
57
|
+
} else if (Array.isArray(value)) {
|
|
58
|
+
for (const child of value) {
|
|
59
|
+
if (!isAstNode(child)) continue
|
|
60
|
+
const found = visit(child, node, childKey)
|
|
61
|
+
if (found) return found
|
|
62
|
+
}
|
|
63
|
+
}
|
|
45
64
|
}
|
|
46
|
-
|
|
47
|
-
|
|
65
|
+
return null
|
|
66
|
+
}
|
|
67
|
+
return visit(root, null, null)
|
|
48
68
|
}
|
|
49
69
|
|
|
50
70
|
export function childNode(node: AstNode, key: string): AstNode | null {
|
package/src/evaluate.ts
CHANGED
|
@@ -481,8 +481,8 @@ function evaluateDynamicNode(
|
|
|
481
481
|
}
|
|
482
482
|
}
|
|
483
483
|
|
|
484
|
-
//
|
|
485
|
-
//
|
|
484
|
+
// templates always produce strings. retain the finite values when every
|
|
485
|
+
// interpolation is bounded: `w-6 ${colors[index % 2]}` is two class strings.
|
|
486
486
|
if (node.type === 'TemplateLiteral') {
|
|
487
487
|
const quasis = childNodes(node, 'quasis')
|
|
488
488
|
const expressions = childNodes(node, 'expressions')
|
|
@@ -493,7 +493,7 @@ function evaluateDynamicNode(
|
|
|
493
493
|
const expression = expressions[position]
|
|
494
494
|
if (!expression) continue
|
|
495
495
|
const part = evaluateDynamicNode(resolver, id, expression, state)
|
|
496
|
-
if (!part?.values) return
|
|
496
|
+
if (!part?.values) return { type: 'string' }
|
|
497
497
|
const next: string[] = []
|
|
498
498
|
for (const value of values) {
|
|
499
499
|
for (const primitive of part.values) {
|
|
@@ -501,7 +501,7 @@ function evaluateDynamicNode(
|
|
|
501
501
|
if (!next.includes(joined)) next.push(joined)
|
|
502
502
|
}
|
|
503
503
|
}
|
|
504
|
-
if (next.length > 32) return
|
|
504
|
+
if (next.length > 32) return { type: 'string' }
|
|
505
505
|
values = next
|
|
506
506
|
}
|
|
507
507
|
return { type: 'string', values }
|
|
@@ -700,7 +700,7 @@ function mapBranchLeaves(
|
|
|
700
700
|
|
|
701
701
|
/**
|
|
702
702
|
* A template literal is a decision tree once every value it interpolates is:
|
|
703
|
-
* `${active ? '
|
|
703
|
+
* `${active ? 'red-10' : 'blue-10'}` names the same two strings the bare ternary
|
|
704
704
|
* does, and the quasis around it are constants. Each interpolated tree
|
|
705
705
|
* multiplies the leaves, so every step spends a level of the shared depth
|
|
706
706
|
* budget and a wide template refuses instead of expanding.
|
package/src/lower.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ResolvedModuleId, SourceSpan } from './contracts'
|
|
2
|
+
import type { DynamicEvaluation } from './evaluate'
|
|
2
3
|
import { localBailout, type BailoutReason } from './diagnostics'
|
|
3
4
|
import type {
|
|
4
5
|
MaterializedElement,
|
|
@@ -13,7 +14,7 @@ import {
|
|
|
13
14
|
type SourceEdit,
|
|
14
15
|
} from './output'
|
|
15
16
|
|
|
16
|
-
export const LOWERED_MODULE_PLAN_VERSION =
|
|
17
|
+
export const LOWERED_MODULE_PLAN_VERSION = 5
|
|
17
18
|
|
|
18
19
|
export type CompilerTarget = 'web' | 'native'
|
|
19
20
|
|
|
@@ -73,7 +74,9 @@ export interface CompilerLoweringHost {
|
|
|
73
74
|
canLowerDynamicStyleProp?(
|
|
74
75
|
name: string,
|
|
75
76
|
component: LoweringComponent,
|
|
76
|
-
valueKind?: 'bailout' | 'conditional'
|
|
77
|
+
valueKind?: 'bailout' | 'conditional',
|
|
78
|
+
/** what the evaluator proved about an opaque value: its type and finite domain */
|
|
79
|
+
dynamic?: DynamicEvaluation | null
|
|
77
80
|
): boolean
|
|
78
81
|
lowerCandidate(input: LoweringCandidateInput): LoweringCandidateResult
|
|
79
82
|
/** Development-only source instrumentation for an existing component debug channel. */
|
|
@@ -184,7 +187,12 @@ function unsafeEntry(
|
|
|
184
187
|
entry.kind === 'prop' &&
|
|
185
188
|
host.isStyleProp(entry.name, component) &&
|
|
186
189
|
(entry.value.kind === 'bailout' || entry.value.kind === 'conditional') &&
|
|
187
|
-
!host.canLowerDynamicStyleProp?.(
|
|
190
|
+
!host.canLowerDynamicStyleProp?.(
|
|
191
|
+
entry.name,
|
|
192
|
+
component,
|
|
193
|
+
entry.value.kind,
|
|
194
|
+
entry.value.kind === 'bailout' ? entry.value.dynamic : null
|
|
195
|
+
)
|
|
188
196
|
) {
|
|
189
197
|
return diagnostic(
|
|
190
198
|
'local/dynamic-style-value',
|
|
@@ -199,7 +207,12 @@ function unsafeEntry(
|
|
|
199
207
|
if (member.value.kind !== 'bailout' && member.value.kind !== 'conditional') continue
|
|
200
208
|
if (
|
|
201
209
|
!host.isStyleProp(member.name, component) ||
|
|
202
|
-
!host.canLowerDynamicStyleProp?.(
|
|
210
|
+
!host.canLowerDynamicStyleProp?.(
|
|
211
|
+
member.name,
|
|
212
|
+
component,
|
|
213
|
+
member.value.kind,
|
|
214
|
+
member.value.kind === 'bailout' ? member.value.dynamic : null
|
|
215
|
+
)
|
|
203
216
|
) {
|
|
204
217
|
return diagnostic(
|
|
205
218
|
'local/dynamic-style-value',
|
package/src/normalize.ts
CHANGED
|
@@ -54,8 +54,8 @@ function finalizeElement(
|
|
|
54
54
|
export function definitionFromDeclaration(
|
|
55
55
|
id: string,
|
|
56
56
|
name: string,
|
|
57
|
-
|
|
58
|
-
|
|
57
|
+
declaration: AstNode,
|
|
58
|
+
parentOf: (node: AstNode) => AstNode | null
|
|
59
59
|
): DefinitionSite {
|
|
60
60
|
let identifier = declaration
|
|
61
61
|
let initializer: AstNode | null = null
|
|
@@ -64,33 +64,17 @@ export function definitionFromDeclaration(
|
|
|
64
64
|
if (declaration.type === 'VariableDeclarator') {
|
|
65
65
|
identifier = childNode(declaration, 'id') ?? declaration
|
|
66
66
|
initializer = childNode(declaration, 'init')
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
(node) =>
|
|
70
|
-
node.type === 'VariableDeclaration' &&
|
|
71
|
-
node.kind === 'const' &&
|
|
72
|
-
childNodes(node, 'declarations').some(
|
|
73
|
-
(candidate) => candidate.start === declaration.start
|
|
74
|
-
)
|
|
75
|
-
)
|
|
67
|
+
const parent = parentOf(declaration)
|
|
68
|
+
constant = parent?.type === 'VariableDeclaration' && parent.kind === 'const'
|
|
76
69
|
} else if (declaration.type === 'Identifier') {
|
|
77
|
-
const declarator =
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
)
|
|
83
|
-
if (declarator) {
|
|
70
|
+
const declarator = parentOf(declaration)
|
|
71
|
+
if (
|
|
72
|
+
declarator?.type === 'VariableDeclarator' &&
|
|
73
|
+
childNode(declarator, 'id')?.start === declaration.start
|
|
74
|
+
) {
|
|
84
75
|
initializer = childNode(declarator, 'init')
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
(node) =>
|
|
88
|
-
node.type === 'VariableDeclaration' &&
|
|
89
|
-
node.kind === 'const' &&
|
|
90
|
-
childNodes(node, 'declarations').some(
|
|
91
|
-
(candidate) => candidate.start === declarator.start
|
|
92
|
-
)
|
|
93
|
-
)
|
|
76
|
+
const parent = parentOf(declarator)
|
|
77
|
+
constant = parent?.type === 'VariableDeclaration' && parent.kind === 'const'
|
|
94
78
|
}
|
|
95
79
|
}
|
|
96
80
|
|
|
@@ -838,7 +822,10 @@ export function normalizeElements(
|
|
|
838
822
|
}
|
|
839
823
|
|
|
840
824
|
export function nodeAtSpan(program: AstNode, start: number, end: number): AstNode | null {
|
|
841
|
-
return findAstNode(program, (node) => node.start === start && node.end === end
|
|
825
|
+
return findAstNode(program, (node) => node.start === start && node.end === end, {
|
|
826
|
+
start,
|
|
827
|
+
end,
|
|
828
|
+
})
|
|
842
829
|
}
|
|
843
830
|
|
|
844
831
|
export function asAstNode(value: unknown, label: string): AstNode {
|
package/src/yuku.ts
CHANGED
|
@@ -53,12 +53,11 @@ class YukuCandidate implements AnalyzerCandidate {
|
|
|
53
53
|
#definitionSite(symbol: YukuSymbol): DefinitionSite | null {
|
|
54
54
|
const declaration = symbol.declarations[0]
|
|
55
55
|
if (!declaration) return null
|
|
56
|
-
const program = asAstNode(symbol.module.ast, `${symbol.module.path} program`)
|
|
57
56
|
return definitionFromDeclaration(
|
|
58
57
|
symbol.module.path,
|
|
59
58
|
symbol.name,
|
|
60
|
-
|
|
61
|
-
|
|
59
|
+
asAstNode(declaration, `${symbol.name} declaration`),
|
|
60
|
+
(node) => symbol.module.parentOf(node as any) as AstNode | null
|
|
62
61
|
)
|
|
63
62
|
}
|
|
64
63
|
|
|
@@ -163,6 +162,8 @@ export const yukuFactory: CandidateFactory = {
|
|
|
163
162
|
) {
|
|
164
163
|
return
|
|
165
164
|
}
|
|
165
|
+
// type-only imports erase at build time, so there is nothing to resolve
|
|
166
|
+
if (node.importKind === 'type' || node.exportKind === 'type') return
|
|
166
167
|
const sourceNode = childNode(node, 'source')
|
|
167
168
|
if (sourceNode && typeof sourceNode.value === 'string') {
|
|
168
169
|
found.push({ start: node.start, specifier: sourceNode.value })
|
package/types/ast.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { AstNode } from './contracts';
|
|
2
2
|
export declare function isAstNode(value: unknown): value is AstNode;
|
|
3
3
|
export declare function walkAst(node: AstNode, visitor: (node: AstNode, parent: AstNode | null, key: string | null) => void, parent?: AstNode | null, key?: string | null): void;
|
|
4
|
-
|
|
4
|
+
/** With a source range, only descend into nodes that contain that range. */
|
|
5
|
+
export declare function findAstNode(root: AstNode, predicate: (node: AstNode, parent: AstNode | null, key: string | null) => boolean, span?: Pick<AstNode, 'start' | 'end'>): AstNode | null;
|
|
5
6
|
export declare function childNode(node: AstNode, key: string): AstNode | null;
|
|
6
7
|
export declare function childNodes(node: AstNode, key: string): AstNode[];
|
|
7
8
|
export declare function identifierName(node: AstNode | null): string | null;
|
package/types/ast.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../src/ast.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAI1C,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,OAAO,CAQ1D;AAED,wBAAgB,OAAO,CACrB,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,EAC5E,MAAM,GAAE,OAAO,GAAG,IAAW,EAC7B,GAAG,GAAE,MAAM,GAAG,IAAW,GACxB,IAAI,
|
|
1
|
+
{"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../src/ast.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAI1C,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,OAAO,CAQ1D;AAED,wBAAgB,OAAO,CACrB,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,EAC5E,MAAM,GAAE,OAAO,GAAG,IAAW,EAC7B,GAAG,GAAE,MAAM,GAAG,IAAW,GACxB,IAAI,CAgBN;AAED,4EAA4E;AAC5E,wBAAgB,WAAW,CACzB,IAAI,EAAE,OAAO,EACb,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,EACjF,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,KAAK,CAAC,GACpC,OAAO,GAAG,IAAI,CAyBhB;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAGpE;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,EAAE,CAGhE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAGlE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,CAM1D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAavD"}
|
package/types/lower.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { ResolvedModuleId, SourceSpan } from './contracts';
|
|
2
|
+
import type { DynamicEvaluation } from './evaluate';
|
|
2
3
|
import { type BailoutReason } from './diagnostics';
|
|
3
4
|
import type { MaterializedElement, MaterializedModule, MaterializedStyledDefinition } from './materialize';
|
|
4
5
|
import { type ApplicableLoweredModulePlan, type SourceEdit } from './output';
|
|
5
|
-
export declare const LOWERED_MODULE_PLAN_VERSION =
|
|
6
|
+
export declare const LOWERED_MODULE_PLAN_VERSION = 5;
|
|
6
7
|
export type CompilerTarget = 'web' | 'native';
|
|
7
8
|
export interface LoweredModuleStats {
|
|
8
9
|
found: number;
|
|
@@ -50,7 +51,9 @@ export interface CompilerLoweringHost {
|
|
|
50
51
|
resolveComponent(element: MaterializedElement, styledDefinition: MaterializedStyledDefinition | null): LoweringComponent | null;
|
|
51
52
|
isStyleProp(name: string, component: LoweringComponent): boolean;
|
|
52
53
|
/** The host can retain this dynamic prop while committing other safe candidate edits. */
|
|
53
|
-
canLowerDynamicStyleProp?(name: string, component: LoweringComponent, valueKind?: 'bailout' | 'conditional'
|
|
54
|
+
canLowerDynamicStyleProp?(name: string, component: LoweringComponent, valueKind?: 'bailout' | 'conditional',
|
|
55
|
+
/** what the evaluator proved about an opaque value: its type and finite domain */
|
|
56
|
+
dynamic?: DynamicEvaluation | null): boolean;
|
|
54
57
|
lowerCandidate(input: LoweringCandidateInput): LoweringCandidateResult;
|
|
55
58
|
/** Development-only source instrumentation for an existing component debug channel. */
|
|
56
59
|
developmentDebugInstrumentation?(input: LoweringCandidateInput, result: LoweringCandidateResult): SourceEdit[] | undefined;
|
package/types/lower.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lower.d.ts","sourceRoot":"","sources":["../src/lower.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC/D,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAChE,OAAO,KAAK,EACV,mBAAmB,EAEnB,kBAAkB,EAClB,4BAA4B,EAC7B,MAAM,eAAe,CAAA;AACtB,OAAO,EAGL,KAAK,2BAA2B,EAChC,KAAK,UAAU,EAChB,MAAM,UAAU,CAAA;AAEjB,eAAO,MAAM,2BAA2B,IAAI,CAAA;AAE5C,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,QAAQ,CAAA;AAE7C,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,oFAAoF;IACpF,GAAG,EAAE,MAAM,CAAA;IACX,UAAU,EAAE,OAAO,CAAA;IACnB,YAAY,EAAE,OAAO,CAAA;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,gBAAgB,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,cAAc,CAAA;IACtB,MAAM,EAAE,kBAAkB,CAAA;IAC1B,OAAO,EAAE,mBAAmB,CAAA;IAC5B,gBAAgB,EAAE,4BAA4B,GAAG,IAAI,CAAA;IACrD,SAAS,EAAE,iBAAiB,CAAA;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,UAAU,CAAA;CACnB;AAED,MAAM,MAAM,uBAAuB,GAC/B;IACE,EAAE,EAAE,IAAI,CAAA;IACR,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB,GAAG,EAAE,MAAM,EAAE,CAAA;IACb,OAAO,EAAE,eAAe,EAAE,CAAA;IAC1B,YAAY,CAAC,EAAE,gBAAgB,EAAE,CAAA;IACjC,WAAW,CAAC,EAAE,aAAa,EAAE,CAAA;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,GACD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,aAAa,CAAA;CAAE,CAAA;AAEzC;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,CACd,OAAO,EAAE,mBAAmB,EAC5B,gBAAgB,EAAE,4BAA4B,GAAG,IAAI,GACpD,iBAAiB,GAAG,IAAI,CAAA;IAC3B,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAA;IAChE,yFAAyF;IACzF,wBAAwB,CAAC,CACvB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,iBAAiB,EAC5B,SAAS,CAAC,EAAE,SAAS,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"lower.d.ts","sourceRoot":"","sources":["../src/lower.ts"],"names":[],"mappings":"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"}
|
package/types/normalize.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type AnalyzerCandidate, type AstNode, type DefinitionSite, type HostResolvedImport } from './contracts';
|
|
2
2
|
import type { ElementIRResult } from './ir';
|
|
3
|
-
export declare function definitionFromDeclaration(id: string, name: string,
|
|
3
|
+
export declare function definitionFromDeclaration(id: string, name: string, declaration: AstNode, parentOf: (node: AstNode) => AstNode | null): DefinitionSite;
|
|
4
4
|
export declare function normalizeElements(candidate: AnalyzerCandidate, rawId: string, imports?: readonly HostResolvedImport[]): ElementIRResult;
|
|
5
5
|
export declare function nodeAtSpan(program: AstNode, start: number, end: number): AstNode | null;
|
|
6
6
|
export declare function asAstNode(value: unknown, label: string): AstNode;
|
package/types/normalize.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"AAQA,OAAO,EAIL,KAAK,iBAAiB,EACtB,KAAK,OAAO,EACZ,KAAK,cAAc,EACnB,KAAK,kBAAkB,EAGxB,MAAM,aAAa,CAAA;AAEpB,OAAO,KAAK,EAMV,eAAe,EAQhB,MAAM,MAAM,CAAA;AAmBb,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,
|
|
1
|
+
{"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"AAQA,OAAO,EAIL,KAAK,iBAAiB,EACtB,KAAK,OAAO,EACZ,KAAK,cAAc,EACnB,KAAK,kBAAkB,EAGxB,MAAM,aAAa,CAAA;AAEpB,OAAO,KAAK,EAMV,eAAe,EAQhB,MAAM,MAAM,CAAA;AAmBb,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,OAAO,EACpB,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,GAAG,IAAI,GAC1C,cAAc,CA8BhB;AAioBD,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,iBAAiB,EAC5B,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,SAAS,kBAAkB,EAAO,GAC1C,eAAe,CAwFjB;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAKvF;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAGhE"}
|
package/types/yuku.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yuku.d.ts","sourceRoot":"","sources":["../src/yuku.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,OAAO,EACP,gBAAgB,EAKjB,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"yuku.d.ts","sourceRoot":"","sources":["../src/yuku.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,OAAO,EACP,gBAAgB,EAKjB,MAAM,aAAa,CAAA;AAwIpB,eAAO,MAAM,WAAW,EAAE,gBAiCzB,CAAA;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,EAAE,SAAiC,GAClC,OAAO,CAcT"}
|