@tamagui/compiler-core 3.0.0-beta.1313.1 → 3.0.0-beta.1342.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/evaluate.cjs +2 -2
- package/dist/cjs/lower.cjs +1 -1
- package/dist/esm/evaluate.mjs +2 -2
- package/dist/esm/evaluate.mjs.map +1 -1
- package/dist/esm/lower.mjs +2 -2
- package/dist/esm/lower.mjs.map +1 -1
- package/package.json +2 -2
- package/src/evaluate.ts +4 -4
- package/src/lower.ts +1 -1
- package/types/lower.d.ts +1 -1
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
|
}
|
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
|
}
|
|
@@ -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?.(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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tamagui/compiler-core",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.1342.1",
|
|
4
4
|
"description": "Shared parser-independent Tamagui compiler graph and element IR",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"yuku-analyzer": "0.6.1"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
|
-
"@tamagui/build": "3.0.0-beta.
|
|
43
|
+
"@tamagui/build": "3.0.0-beta.1342.1",
|
|
44
44
|
"typescript": "7.0.2"
|
|
45
45
|
},
|
|
46
46
|
"repository": {
|
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 }
|
package/src/lower.ts
CHANGED
package/types/lower.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import type { ResolvedModuleId, SourceSpan } from './contracts';
|
|
|
2
2
|
import { type BailoutReason } from './diagnostics';
|
|
3
3
|
import type { MaterializedElement, MaterializedModule, MaterializedStyledDefinition } from './materialize';
|
|
4
4
|
import { type ApplicableLoweredModulePlan, type SourceEdit } from './output';
|
|
5
|
-
export declare const LOWERED_MODULE_PLAN_VERSION =
|
|
5
|
+
export declare const LOWERED_MODULE_PLAN_VERSION = 5;
|
|
6
6
|
export type CompilerTarget = 'web' | 'native';
|
|
7
7
|
export interface LoweredModuleStats {
|
|
8
8
|
found: number;
|