@tamagui/static 2.7.7 → 3.0.0-beta.643.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/check-dep-versions.cjs +355 -0
- package/dist/cjs/checkDeps.cjs +302 -0
- package/dist/cjs/compiler.cjs +286 -0
- package/dist/cjs/compilerHost.cjs +1695 -0
- package/dist/cjs/constants.cjs +33 -0
- package/dist/cjs/domStructuralPass.cjs +112 -0
- package/dist/cjs/exports.cjs +42 -0
- package/dist/cjs/extractor/addLocalExports.cjs +64 -0
- package/dist/cjs/extractor/bundle.cjs +203 -0
- package/dist/cjs/extractor/bundleConfig.cjs +747 -0
- package/dist/cjs/extractor/concatClassName.cjs +117 -0
- package/dist/cjs/extractor/detectModuleFormat.cjs +54 -0
- package/dist/cjs/extractor/esbuildAliasPlugin.cjs +47 -0
- package/dist/cjs/extractor/esbuildTsconfigPaths.cjs +92 -0
- package/dist/cjs/extractor/getTamaguiConfigPathFromOptionsConfig.cjs +38 -0
- package/dist/cjs/extractor/loadTamagui.cjs +344 -0
- package/dist/cjs/extractor/regenerateConfig.cjs +161 -0
- package/dist/cjs/extractor/watchTamaguiConfig.cjs +64 -0
- package/dist/cjs/getPragmaOptions.cjs +67 -0
- package/dist/cjs/helpers/memoize.cjs +42 -0
- package/dist/cjs/helpers/requireTamaguiCore.cjs +40 -0
- package/dist/cjs/index.cjs +34 -0
- package/dist/cjs/registerRequire.cjs +220 -0
- package/dist/cjs/server.cjs +66 -0
- package/dist/cjs/staticEvaluationIgnoredModules.cjs +86 -0
- package/dist/cjs/types.cjs +17 -0
- package/dist/cjs/zero/artifact.cjs +145 -0
- package/dist/cjs/zero/graph.cjs +209 -0
- package/dist/cjs/zero/identity.cjs +61 -0
- package/dist/cjs/zero/index.cjs +26 -0
- package/dist/cjs/zero/islands.cjs +232 -0
- package/dist/cjs/zero/options.cjs +163 -0
- package/dist/cjs/zero/ownership.cjs +79 -0
- package/dist/cjs/zero/theme.cjs +328 -0
- package/dist/cjs/zero/transform.cjs +203 -0
- package/dist/esm/check-dep-versions.mjs +329 -0
- package/dist/esm/check-dep-versions.mjs.map +1 -0
- package/dist/esm/checkDeps.mjs +279 -0
- package/dist/esm/checkDeps.mjs.map +1 -0
- package/dist/esm/compiler.mjs +255 -0
- package/dist/esm/compiler.mjs.map +1 -0
- package/dist/esm/compilerHost.mjs +1675 -0
- package/dist/esm/compilerHost.mjs.map +1 -0
- package/dist/esm/constants.mjs +7 -0
- package/dist/esm/constants.mjs.map +1 -0
- package/dist/esm/domStructuralPass.mjs +92 -0
- package/dist/esm/domStructuralPass.mjs.map +1 -0
- package/dist/esm/exports.mjs +26 -0
- package/dist/esm/extractor/addLocalExports.mjs +44 -0
- package/dist/esm/extractor/addLocalExports.mjs.map +1 -0
- package/dist/esm/extractor/bundle.mjs +173 -0
- package/dist/esm/extractor/bundle.mjs.map +1 -0
- package/dist/esm/extractor/bundleConfig.mjs +706 -0
- package/dist/esm/extractor/bundleConfig.mjs.map +1 -0
- package/dist/esm/extractor/concatClassName.mjs +96 -0
- package/dist/esm/extractor/concatClassName.mjs.map +1 -0
- package/dist/esm/extractor/detectModuleFormat.mjs +31 -0
- package/dist/esm/extractor/detectModuleFormat.mjs.map +1 -0
- package/dist/esm/extractor/esbuildAliasPlugin.mjs +26 -0
- package/dist/esm/extractor/esbuildAliasPlugin.mjs.map +1 -0
- package/dist/esm/extractor/esbuildTsconfigPaths.mjs +63 -0
- package/dist/esm/extractor/esbuildTsconfigPaths.mjs.map +1 -0
- package/dist/esm/extractor/getTamaguiConfigPathFromOptionsConfig.mjs +18 -0
- package/dist/esm/extractor/getTamaguiConfigPathFromOptionsConfig.mjs.map +1 -0
- package/dist/esm/extractor/loadTamagui.mjs +306 -0
- package/dist/esm/extractor/loadTamagui.mjs.map +1 -0
- package/dist/esm/extractor/regenerateConfig.mjs +131 -0
- package/dist/esm/extractor/regenerateConfig.mjs.map +1 -0
- package/dist/esm/extractor/watchTamaguiConfig.mjs +43 -0
- package/dist/esm/extractor/watchTamaguiConfig.mjs.map +1 -0
- package/dist/esm/getPragmaOptions.mjs +46 -0
- package/dist/esm/getPragmaOptions.mjs.map +1 -0
- package/dist/esm/helpers/memoize.mjs +21 -0
- package/dist/esm/helpers/memoize.mjs.map +1 -0
- package/dist/esm/helpers/requireTamaguiCore.mjs +19 -0
- package/dist/esm/helpers/requireTamaguiCore.mjs.map +1 -0
- package/dist/esm/index.mjs +8 -0
- package/dist/esm/index.mjs.map +1 -0
- package/dist/esm/registerRequire.mjs +195 -0
- package/dist/esm/registerRequire.mjs.map +1 -0
- package/dist/esm/server.mjs +40 -0
- package/dist/esm/server.mjs.map +1 -0
- package/dist/esm/setup.mjs +0 -0
- package/dist/esm/staticEvaluationIgnoredModules.mjs +61 -0
- package/dist/esm/staticEvaluationIgnoredModules.mjs.map +1 -0
- package/dist/esm/types.mjs +0 -0
- package/dist/esm/zero/artifact.mjs +119 -0
- package/dist/esm/zero/artifact.mjs.map +1 -0
- package/dist/esm/zero/graph.mjs +170 -0
- package/dist/esm/zero/graph.mjs.map +1 -0
- package/dist/esm/zero/identity.mjs +36 -0
- package/dist/esm/zero/identity.mjs.map +1 -0
- package/dist/esm/zero/index.mjs +15 -0
- package/dist/esm/zero/islands.mjs +197 -0
- package/dist/esm/zero/islands.mjs.map +1 -0
- package/dist/esm/zero/options.mjs +129 -0
- package/dist/esm/zero/options.mjs.map +1 -0
- package/dist/esm/zero/ownership.mjs +48 -0
- package/dist/esm/zero/ownership.mjs.map +1 -0
- package/dist/esm/zero/theme.mjs +303 -0
- package/dist/esm/zero/theme.mjs.map +1 -0
- package/dist/esm/zero/transform.mjs +177 -0
- package/dist/esm/zero/transform.mjs.map +1 -0
- package/package.json +33 -43
- package/src/check-dep-versions.ts +2 -2
- package/src/checkDeps.ts +3 -2
- package/src/compiler.ts +425 -0
- package/src/compilerHost.ts +3125 -0
- package/src/constants.ts +0 -5
- package/src/domStructuralPass.ts +170 -0
- package/src/exports.ts +3 -6
- package/src/extractor/addLocalExports.ts +49 -0
- package/src/extractor/bundle.ts +20 -35
- package/src/extractor/bundleConfig.ts +334 -187
- package/src/extractor/concatClassName.ts +13 -20
- package/src/extractor/getTamaguiConfigPathFromOptionsConfig.ts +5 -4
- package/src/extractor/loadTamagui.ts +196 -143
- package/src/extractor/regenerateConfig.ts +65 -13
- package/src/extractor/watchTamaguiConfig.ts +6 -1
- package/src/helpers/requireTamaguiCore.ts +6 -1
- package/src/registerRequire.ts +94 -132
- package/src/staticEvaluationIgnoredModules.ts +74 -0
- package/src/types.ts +2 -107
- package/src/zero/artifact.ts +142 -0
- package/src/zero/graph.ts +359 -0
- package/src/zero/identity.ts +73 -0
- package/src/zero/index.ts +8 -0
- package/src/zero/islands.ts +262 -0
- package/src/zero/options.ts +239 -0
- package/src/zero/ownership.ts +113 -0
- package/src/zero/theme.ts +478 -0
- package/src/zero/transform.ts +320 -0
- package/types/check-dep-versions.d.ts.map +1 -1
- package/types/checkDeps.d.ts.map +1 -1
- package/types/compiler.d.ts +117 -0
- package/types/compiler.d.ts.map +1 -0
- package/types/compilerHost.d.ts +25 -0
- package/types/compilerHost.d.ts.map +1 -0
- package/types/constants.d.ts +0 -1
- package/types/constants.d.ts.map +1 -1
- package/types/domStructuralPass.d.ts +3 -0
- package/types/domStructuralPass.d.ts.map +1 -0
- package/types/exports.d.ts +3 -6
- package/types/exports.d.ts.map +1 -1
- package/types/extractor/addLocalExports.d.ts +3 -0
- package/types/extractor/addLocalExports.d.ts.map +1 -0
- package/types/extractor/bundle.d.ts +66 -65
- package/types/extractor/bundle.d.ts.map +1 -1
- package/types/extractor/bundleConfig.d.ts +19 -4
- package/types/extractor/bundleConfig.d.ts.map +1 -1
- package/types/extractor/esbuildAliasPlugin.d.ts.map +1 -1
- package/types/extractor/getTamaguiConfigPathFromOptionsConfig.d.ts +1 -1
- package/types/extractor/getTamaguiConfigPathFromOptionsConfig.d.ts.map +1 -1
- package/types/extractor/loadTamagui.d.ts +26 -3
- package/types/extractor/loadTamagui.d.ts.map +1 -1
- package/types/extractor/regenerateConfig.d.ts +1 -1
- package/types/extractor/regenerateConfig.d.ts.map +1 -1
- package/types/extractor/watchTamaguiConfig.d.ts.map +1 -1
- package/types/getPragmaOptions.d.ts +1 -1
- package/types/helpers/memoize.d.ts +1 -1
- package/types/helpers/memoize.d.ts.map +1 -1
- package/types/helpers/requireTamaguiCore.d.ts.map +1 -1
- package/types/index.d.ts.map +1 -1
- package/types/registerRequire.d.ts +2 -2
- package/types/registerRequire.d.ts.map +1 -1
- package/types/staticEvaluationIgnoredModules.d.ts +9 -0
- package/types/staticEvaluationIgnoredModules.d.ts.map +1 -0
- package/types/types.d.ts +2 -90
- package/types/types.d.ts.map +1 -1
- package/types/zero/artifact.d.ts +44 -0
- package/types/zero/artifact.d.ts.map +1 -0
- package/types/zero/graph.d.ts +139 -0
- package/types/zero/graph.d.ts.map +1 -0
- package/types/zero/identity.d.ts +33 -0
- package/types/zero/identity.d.ts.map +1 -0
- package/types/zero/index.d.ts +9 -0
- package/types/zero/index.d.ts.map +1 -0
- package/types/zero/islands.d.ts +56 -0
- package/types/zero/islands.d.ts.map +1 -0
- package/types/zero/options.d.ts +58 -0
- package/types/zero/options.d.ts.map +1 -0
- package/types/zero/ownership.d.ts +51 -0
- package/types/zero/ownership.d.ts.map +1 -0
- package/types/zero/theme.d.ts +83 -0
- package/types/zero/theme.d.ts.map +1 -0
- package/types/zero/transform.d.ts +53 -0
- package/types/zero/transform.d.ts.map +1 -0
- package/dist/check-dep-versions.cjs +0 -372
- package/dist/checkDeps.cjs +0 -271
- package/dist/constants.cjs +0 -51
- package/dist/exports.cjs +0 -48
- package/dist/extractor/accessSafe.cjs +0 -48
- package/dist/extractor/babelParse.cjs +0 -56
- package/dist/extractor/buildClassName.cjs +0 -86
- package/dist/extractor/bundle.cjs +0 -234
- package/dist/extractor/bundleConfig.cjs +0 -729
- package/dist/extractor/concatClassName.cjs +0 -129
- package/dist/extractor/createEvaluator.cjs +0 -88
- package/dist/extractor/createExtractor.cjs +0 -1968
- package/dist/extractor/createLogger.cjs +0 -50
- package/dist/extractor/detectModuleFormat.cjs +0 -55
- package/dist/extractor/ensureImportingConcat.cjs +0 -54
- package/dist/extractor/errors.cjs +0 -28
- package/dist/extractor/esbuildAliasPlugin.cjs +0 -56
- package/dist/extractor/esbuildTsconfigPaths.cjs +0 -108
- package/dist/extractor/evaluateAstNode.cjs +0 -128
- package/dist/extractor/extractHelpers.cjs +0 -182
- package/dist/extractor/extractMediaStyle.cjs +0 -169
- package/dist/extractor/extractToClassNames.cjs +0 -475
- package/dist/extractor/extractToNative.cjs +0 -369
- package/dist/extractor/findTopmostFunction.cjs +0 -43
- package/dist/extractor/generatedUid.cjs +0 -58
- package/dist/extractor/getPrefixLogs.cjs +0 -31
- package/dist/extractor/getPropValueFromAttributes.cjs +0 -85
- package/dist/extractor/getSourceModule.cjs +0 -100
- package/dist/extractor/getStaticBindingsForScope.cjs +0 -213
- package/dist/extractor/getTamaguiConfigPathFromOptionsConfig.cjs +0 -41
- package/dist/extractor/hasTopLevelAwait.cjs +0 -62
- package/dist/extractor/hoistClassNames.cjs +0 -76
- package/dist/extractor/literalToAst.cjs +0 -109
- package/dist/extractor/loadFile.cjs +0 -17
- package/dist/extractor/loadTamagui.cjs +0 -373
- package/dist/extractor/logLines.cjs +0 -43
- package/dist/extractor/normalizeTernaries.cjs +0 -100
- package/dist/extractor/propsToFontFamilyCache.cjs +0 -42
- package/dist/extractor/regenerateConfig.cjs +0 -178
- package/dist/extractor/removeUnusedHooks.cjs +0 -108
- package/dist/extractor/timer.cjs +0 -52
- package/dist/extractor/validHTMLAttributes.cjs +0 -79
- package/dist/extractor/watchTamaguiConfig.cjs +0 -70
- package/dist/getPragmaOptions.cjs +0 -73
- package/dist/helpers/memoize.cjs +0 -45
- package/dist/helpers/requireTamaguiCore.cjs +0 -40
- package/dist/index.cjs +0 -42
- package/dist/registerRequire.cjs +0 -209
- package/dist/server.cjs +0 -82
- package/dist/types.cjs +0 -18
- package/dist/worker.cjs +0 -111
- package/src/extractor/accessSafe.ts +0 -22
- package/src/extractor/babelParse.ts +0 -38
- package/src/extractor/buildClassName.ts +0 -76
- package/src/extractor/createEvaluator.ts +0 -82
- package/src/extractor/createExtractor.ts +0 -2970
- package/src/extractor/createLogger.ts +0 -41
- package/src/extractor/ensureImportingConcat.ts +0 -36
- package/src/extractor/errors.ts +0 -1
- package/src/extractor/evaluateAstNode.ts +0 -136
- package/src/extractor/extractHelpers.ts +0 -211
- package/src/extractor/extractMediaStyle.ts +0 -194
- package/src/extractor/extractToClassNames.ts +0 -733
- package/src/extractor/extractToNative.ts +0 -506
- package/src/extractor/findTopmostFunction.ts +0 -24
- package/src/extractor/generatedUid.ts +0 -41
- package/src/extractor/getPrefixLogs.ts +0 -9
- package/src/extractor/getPropValueFromAttributes.ts +0 -95
- package/src/extractor/getSourceModule.ts +0 -96
- package/src/extractor/getStaticBindingsForScope.ts +0 -237
- package/src/extractor/hasTopLevelAwait.ts +0 -28
- package/src/extractor/hoistClassNames.ts +0 -52
- package/src/extractor/literalToAst.ts +0 -85
- package/src/extractor/loadFile.ts +0 -17
- package/src/extractor/logLines.ts +0 -16
- package/src/extractor/normalizeTernaries.ts +0 -89
- package/src/extractor/propsToFontFamilyCache.ts +0 -18
- package/src/extractor/removeUnusedHooks.ts +0 -83
- package/src/extractor/timer.ts +0 -25
- package/src/extractor/validHTMLAttributes.ts +0 -52
- package/src/worker.ts +0 -142
- package/types/extractor/accessSafe.d.ts +0 -3
- package/types/extractor/accessSafe.d.ts.map +0 -1
- package/types/extractor/babelParse.d.ts +0 -5
- package/types/extractor/babelParse.d.ts.map +0 -1
- package/types/extractor/buildClassName.d.ts +0 -7
- package/types/extractor/buildClassName.d.ts.map +0 -1
- package/types/extractor/createEvaluator.d.ts +0 -12
- package/types/extractor/createEvaluator.d.ts.map +0 -1
- package/types/extractor/createExtractor.d.ts +0 -32
- package/types/extractor/createExtractor.d.ts.map +0 -1
- package/types/extractor/createLogger.d.ts +0 -3
- package/types/extractor/createLogger.d.ts.map +0 -1
- package/types/extractor/ensureImportingConcat.d.ts +0 -4
- package/types/extractor/ensureImportingConcat.d.ts.map +0 -1
- package/types/extractor/errors.d.ts +0 -3
- package/types/extractor/errors.d.ts.map +0 -1
- package/types/extractor/evaluateAstNode.d.ts +0 -3
- package/types/extractor/evaluateAstNode.d.ts.map +0 -1
- package/types/extractor/extractHelpers.d.ts +0 -28
- package/types/extractor/extractHelpers.d.ts.map +0 -1
- package/types/extractor/extractMediaStyle.d.ts +0 -11
- package/types/extractor/extractMediaStyle.d.ts.map +0 -1
- package/types/extractor/extractToClassNames.d.ts +0 -25
- package/types/extractor/extractToClassNames.d.ts.map +0 -1
- package/types/extractor/extractToNative.d.ts +0 -13
- package/types/extractor/extractToNative.d.ts.map +0 -1
- package/types/extractor/findTopmostFunction.d.ts +0 -4
- package/types/extractor/findTopmostFunction.d.ts.map +0 -1
- package/types/extractor/generatedUid.d.ts +0 -5
- package/types/extractor/generatedUid.d.ts.map +0 -1
- package/types/extractor/getPrefixLogs.d.ts +0 -3
- package/types/extractor/getPrefixLogs.d.ts.map +0 -1
- package/types/extractor/getPropValueFromAttributes.d.ts +0 -19
- package/types/extractor/getPropValueFromAttributes.d.ts.map +0 -1
- package/types/extractor/getSourceModule.d.ts +0 -16
- package/types/extractor/getSourceModule.d.ts.map +0 -1
- package/types/extractor/getStaticBindingsForScope.d.ts +0 -5
- package/types/extractor/getStaticBindingsForScope.d.ts.map +0 -1
- package/types/extractor/hasTopLevelAwait.d.ts +0 -2
- package/types/extractor/hasTopLevelAwait.d.ts.map +0 -1
- package/types/extractor/hoistClassNames.d.ts +0 -6
- package/types/extractor/hoistClassNames.d.ts.map +0 -1
- package/types/extractor/literalToAst.d.ts +0 -4
- package/types/extractor/literalToAst.d.ts.map +0 -1
- package/types/extractor/loadFile.d.ts +0 -1
- package/types/extractor/loadFile.d.ts.map +0 -1
- package/types/extractor/logLines.d.ts +0 -2
- package/types/extractor/logLines.d.ts.map +0 -1
- package/types/extractor/normalizeTernaries.d.ts +0 -5
- package/types/extractor/normalizeTernaries.d.ts.map +0 -1
- package/types/extractor/propsToFontFamilyCache.d.ts +0 -4
- package/types/extractor/propsToFontFamilyCache.d.ts.map +0 -1
- package/types/extractor/removeUnusedHooks.d.ts +0 -3
- package/types/extractor/removeUnusedHooks.d.ts.map +0 -1
- package/types/extractor/timer.d.ts +0 -5
- package/types/extractor/timer.d.ts.map +0 -1
- package/types/extractor/validHTMLAttributes.d.ts +0 -52
- package/types/extractor/validHTMLAttributes.d.ts.map +0 -1
- package/types/worker.d.ts +0 -46
- package/types/worker.d.ts.map +0 -1
- /package/dist/{setup.cjs → cjs/setup.cjs} +0 -0
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
import { childNode, childNodes, resolvedModuleId, walkAst, zeroRuleMessage } from "@tamagui/compiler-core";
|
|
2
|
+
import { getThemeClassNames, reservedThemeProps } from "@tamagui/helpers";
|
|
3
|
+
import { getInlineValuesFromProps, getVariablesCSSRules, resolveThemeName, variableToString } from "@tamagui/web";
|
|
4
|
+
|
|
5
|
+
const MAX_THEME_BRANCHES = 8;
|
|
6
|
+
const LOWERABLE_RESERVED_PROPS = /* @__PURE__ */ new Set([
|
|
7
|
+
"name",
|
|
8
|
+
"reset",
|
|
9
|
+
"contain"
|
|
10
|
+
]);
|
|
11
|
+
function jsxAttributeName(attribute) {
|
|
12
|
+
const name = childNode(attribute, "name");
|
|
13
|
+
return name && typeof name.name === "string" ? name.name : null;
|
|
14
|
+
}
|
|
15
|
+
function literalOf(node) {
|
|
16
|
+
if (!node) return void 0;
|
|
17
|
+
if (node.type === "Literal" && typeof node.value !== "object") {
|
|
18
|
+
return node.value;
|
|
19
|
+
}
|
|
20
|
+
return void 0;
|
|
21
|
+
}
|
|
22
|
+
function hasSideEffects(node) {
|
|
23
|
+
let found = false;
|
|
24
|
+
walkAst(node, (child) => {
|
|
25
|
+
if (child.type === "CallExpression" || child.type === "OptionalCallExpression" || child.type === "NewExpression" || child.type === "AwaitExpression" || child.type === "YieldExpression" || child.type === "AssignmentExpression" || child.type === "UpdateExpression" || child.type === "TaggedTemplateExpression") {
|
|
26
|
+
found = true;
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
return found;
|
|
30
|
+
}
|
|
31
|
+
function readNameOptions(value, source, guards) {
|
|
32
|
+
const literal = literalOf(value);
|
|
33
|
+
if (typeof literal === "string") {
|
|
34
|
+
return [{
|
|
35
|
+
test: guards.length ? guards.join(" && ") : null,
|
|
36
|
+
name: literal
|
|
37
|
+
}];
|
|
38
|
+
}
|
|
39
|
+
if (value.type === "ConditionalExpression") {
|
|
40
|
+
const test = childNode(value, "test");
|
|
41
|
+
const consequent = childNode(value, "consequent");
|
|
42
|
+
const alternate = childNode(value, "alternate");
|
|
43
|
+
if (!test || !consequent || !alternate) return null;
|
|
44
|
+
if (hasSideEffects(test)) return null;
|
|
45
|
+
const testText = source.slice(test.start, test.end).replace(/\s+/g, " ").trim();
|
|
46
|
+
const left = readNameOptions(consequent, source, [...guards, `(${testText})`]);
|
|
47
|
+
const right = readNameOptions(alternate, source, [...guards, `!(${testText})`]);
|
|
48
|
+
if (!left || !right) return null;
|
|
49
|
+
return [...left, ...right];
|
|
50
|
+
}
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
function foldBranches(branches) {
|
|
54
|
+
const last = branches[branches.length - 1];
|
|
55
|
+
if (new Set(branches.map((branch) => branch.value)).size === 1) return last.value;
|
|
56
|
+
let expression = last.value;
|
|
57
|
+
for (let index = branches.length - 2; index >= 0; index--) {
|
|
58
|
+
const branch = branches[index];
|
|
59
|
+
expression = branch.test === null ? branch.value : `${branch.test} ? ${branch.value} : ${expression}`;
|
|
60
|
+
}
|
|
61
|
+
return expression;
|
|
62
|
+
}
|
|
63
|
+
function resolveThemeChain(chain, rootThemeName, config) {
|
|
64
|
+
let branches = [{
|
|
65
|
+
test: null,
|
|
66
|
+
name: rootThemeName,
|
|
67
|
+
isNew: false
|
|
68
|
+
}];
|
|
69
|
+
for (const node of chain) {
|
|
70
|
+
const next = [];
|
|
71
|
+
for (const parent of branches) {
|
|
72
|
+
for (const option of node.options) {
|
|
73
|
+
const resolved = resolveThemeName(parent.name, option.name, node.reset, config.themes);
|
|
74
|
+
const tests = [parent.test, option.test].filter(Boolean);
|
|
75
|
+
next.push({
|
|
76
|
+
test: tests.length ? tests.join(" && ") : null,
|
|
77
|
+
name: resolved ?? parent.name,
|
|
78
|
+
isNew: resolved !== null
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
branches = next;
|
|
83
|
+
}
|
|
84
|
+
return branches;
|
|
85
|
+
}
|
|
86
|
+
function readStaticTheme(element, id, source, config) {
|
|
87
|
+
const moduleId = resolvedModuleId(id);
|
|
88
|
+
const violations = [];
|
|
89
|
+
const css = /* @__PURE__ */ new Map();
|
|
90
|
+
const opening = childNode(element, "openingElement");
|
|
91
|
+
const closing = childNode(element, "closingElement");
|
|
92
|
+
const span = (node) => ({
|
|
93
|
+
id: moduleId,
|
|
94
|
+
start: node.start,
|
|
95
|
+
end: node.end
|
|
96
|
+
});
|
|
97
|
+
let options = [{
|
|
98
|
+
test: null,
|
|
99
|
+
name: void 0
|
|
100
|
+
}];
|
|
101
|
+
let reset = false;
|
|
102
|
+
let contain = false;
|
|
103
|
+
const themeKeyProps = {};
|
|
104
|
+
for (const attribute of childNodes(opening, "attributes")) {
|
|
105
|
+
if (attribute.type !== "JSXAttribute") {
|
|
106
|
+
violations.push({
|
|
107
|
+
rule: 1,
|
|
108
|
+
code: "local/unsafe-style-spread",
|
|
109
|
+
span: span(attribute),
|
|
110
|
+
component: "Theme",
|
|
111
|
+
message: zeroRuleMessage(1, { component: "Theme" })
|
|
112
|
+
});
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
const key = jsxAttributeName(attribute);
|
|
116
|
+
if (!key) continue;
|
|
117
|
+
const rawValue = childNode(attribute, "value");
|
|
118
|
+
const value = rawValue && rawValue.type === "JSXExpressionContainer" ? childNode(rawValue, "expression") : rawValue;
|
|
119
|
+
if (key === "name") {
|
|
120
|
+
const read = value ? readNameOptions(value, source, []) : null;
|
|
121
|
+
if (!read) {
|
|
122
|
+
violations.push({
|
|
123
|
+
rule: 4,
|
|
124
|
+
code: "local/unsupported-target",
|
|
125
|
+
span: span(attribute),
|
|
126
|
+
component: "Theme",
|
|
127
|
+
message: zeroRuleMessage(4, { detail: `the <Theme name> value ${source.slice(attribute.start, attribute.end).replace(/\s+/g, " ").trim()}, which is not a literal theme name or a conditional over literal theme names,` })
|
|
128
|
+
});
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
options = read;
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
if (reservedThemeProps[key]) {
|
|
135
|
+
if (!LOWERABLE_RESERVED_PROPS.has(key)) {
|
|
136
|
+
violations.push({
|
|
137
|
+
rule: 4,
|
|
138
|
+
code: "local/unsupported-target",
|
|
139
|
+
span: span(attribute),
|
|
140
|
+
component: "Theme",
|
|
141
|
+
message: zeroRuleMessage(4, { detail: `the <Theme ${key}> prop, which has no compiled form,` })
|
|
142
|
+
});
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
const literal2 = value ? literalOf(value) : true;
|
|
146
|
+
if (typeof literal2 !== "boolean") {
|
|
147
|
+
violations.push({
|
|
148
|
+
rule: 4,
|
|
149
|
+
code: "local/unsupported-target",
|
|
150
|
+
span: span(attribute),
|
|
151
|
+
component: "Theme",
|
|
152
|
+
message: zeroRuleMessage(4, { detail: `a non-literal <Theme ${key}> value,` })
|
|
153
|
+
});
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
if (key === "reset") reset = literal2;
|
|
157
|
+
if (key === "contain") contain = literal2;
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
const literal = value ? literalOf(value) : void 0;
|
|
161
|
+
if (typeof literal !== "string" && typeof literal !== "number") {
|
|
162
|
+
violations.push({
|
|
163
|
+
rule: 3,
|
|
164
|
+
code: "local/dynamic-style-value",
|
|
165
|
+
span: span(attribute),
|
|
166
|
+
component: "Theme",
|
|
167
|
+
message: zeroRuleMessage(3, {
|
|
168
|
+
prop: key,
|
|
169
|
+
component: "Theme",
|
|
170
|
+
detail: value ? "a theme value must be a string or number literal at build time" : "a theme key needs a value"
|
|
171
|
+
})
|
|
172
|
+
});
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
themeKeyProps[key] = literal;
|
|
176
|
+
}
|
|
177
|
+
if (reset && options.some((option) => option.name !== void 0)) {
|
|
178
|
+
violations.push({
|
|
179
|
+
rule: 4,
|
|
180
|
+
code: "local/unsupported-target",
|
|
181
|
+
span: span(opening),
|
|
182
|
+
component: "Theme",
|
|
183
|
+
message: zeroRuleMessage(4, { detail: "a <Theme> with both name and reset, which cannot mean one theme," })
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
if (!closing) {
|
|
187
|
+
violations.push({
|
|
188
|
+
rule: 4,
|
|
189
|
+
code: "local/unsupported-target",
|
|
190
|
+
span: span(element),
|
|
191
|
+
component: "Theme",
|
|
192
|
+
message: zeroRuleMessage(4, { detail: "a self-closing <Theme>, which has no subtree to theme," })
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
const issues = [];
|
|
196
|
+
const inlineValues = Object.keys(themeKeyProps).length ? getInlineValuesFromProps(themeKeyProps, config, (issue) => issues.push(issue)) : null;
|
|
197
|
+
for (const issue of issues) {
|
|
198
|
+
violations.push({
|
|
199
|
+
rule: 3,
|
|
200
|
+
code: "local/dynamic-style-value",
|
|
201
|
+
span: span(opening),
|
|
202
|
+
component: "Theme",
|
|
203
|
+
message: zeroRuleMessage(3, {
|
|
204
|
+
prop: issue.key,
|
|
205
|
+
component: "Theme",
|
|
206
|
+
detail: issue.message
|
|
207
|
+
})
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
const inlineCSS = inlineValues ? getVariablesCSSRules(inlineValues, config) : null;
|
|
211
|
+
if (inlineCSS) css.set(inlineCSS.identifier, inlineCSS.rules.join(""));
|
|
212
|
+
if (violations.length) return {
|
|
213
|
+
node: null,
|
|
214
|
+
violations,
|
|
215
|
+
css
|
|
216
|
+
};
|
|
217
|
+
return {
|
|
218
|
+
node: {
|
|
219
|
+
element,
|
|
220
|
+
opening,
|
|
221
|
+
closing,
|
|
222
|
+
options,
|
|
223
|
+
reset,
|
|
224
|
+
contain,
|
|
225
|
+
layer: inlineValues && inlineCSS ? {
|
|
226
|
+
inlineValues,
|
|
227
|
+
inlineClassName: inlineCSS.identifier
|
|
228
|
+
} : null
|
|
229
|
+
},
|
|
230
|
+
violations,
|
|
231
|
+
css
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
function lowerStaticTheme(node, chain, rootThemeName, config, id) {
|
|
235
|
+
const moduleId = resolvedModuleId(id);
|
|
236
|
+
const branches = resolveThemeChain(chain, rootThemeName, config);
|
|
237
|
+
if (branches.length > MAX_THEME_BRANCHES) {
|
|
238
|
+
return {
|
|
239
|
+
edits: [],
|
|
240
|
+
violations: [{
|
|
241
|
+
rule: 4,
|
|
242
|
+
code: "local/unsupported-target",
|
|
243
|
+
span: {
|
|
244
|
+
id: moduleId,
|
|
245
|
+
start: node.element.start,
|
|
246
|
+
end: node.element.end
|
|
247
|
+
},
|
|
248
|
+
component: "Theme",
|
|
249
|
+
message: zeroRuleMessage(4, { detail: `a <Theme> chain that enumerates ${branches.length} theme names, past the ${MAX_THEME_BRANCHES} this lowers,` })
|
|
250
|
+
}]
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
const inlineClass = node.layer?.inlineClassName ?? "";
|
|
254
|
+
const classBranches = branches.map((branch) => ({
|
|
255
|
+
test: branch.test,
|
|
256
|
+
value: JSON.stringify([
|
|
257
|
+
branch.isNew ? getThemeClassNames(branch.name) : "",
|
|
258
|
+
"is_Theme",
|
|
259
|
+
inlineClass
|
|
260
|
+
].filter(Boolean).join(" ").replace(/\s+/g, " ").trim())
|
|
261
|
+
}));
|
|
262
|
+
const baseStyle = node.contain ? `display:"contents",contain:"strict"` : `display:"contents"`;
|
|
263
|
+
const styleBranches = branches.map((branch) => {
|
|
264
|
+
const theme = config.themes[branch.name];
|
|
265
|
+
const color = branch.isNew && theme ? variableToString(theme.color) : "";
|
|
266
|
+
return {
|
|
267
|
+
test: branch.test,
|
|
268
|
+
value: color ? `{color:${JSON.stringify(color)},${baseStyle}}` : `{${baseStyle}}`
|
|
269
|
+
};
|
|
270
|
+
});
|
|
271
|
+
const className = foldBranches(classBranches);
|
|
272
|
+
const style = foldBranches(styleBranches);
|
|
273
|
+
const classAttribute = className.startsWith("\"") ? `className=${className}` : `className={${className}}`;
|
|
274
|
+
const edits = [{
|
|
275
|
+
start: node.opening.start,
|
|
276
|
+
end: node.opening.end,
|
|
277
|
+
content: `<span ${classAttribute} style={${style}}>`,
|
|
278
|
+
origin: {
|
|
279
|
+
id: moduleId,
|
|
280
|
+
start: node.opening.start,
|
|
281
|
+
end: node.opening.end
|
|
282
|
+
}
|
|
283
|
+
}];
|
|
284
|
+
if (node.closing) {
|
|
285
|
+
edits.push({
|
|
286
|
+
start: node.closing.start,
|
|
287
|
+
end: node.closing.end,
|
|
288
|
+
content: `</span>`,
|
|
289
|
+
origin: {
|
|
290
|
+
id: moduleId,
|
|
291
|
+
start: node.closing.start,
|
|
292
|
+
end: node.closing.end
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
return {
|
|
297
|
+
edits,
|
|
298
|
+
violations: []
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
export { foldBranches, lowerStaticTheme, readStaticTheme, resolveThemeChain };
|
|
303
|
+
//# sourceMappingURL=theme.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.js","names":[],"sources":["esm/zero/theme.js"],"sourcesContent":["import {\n childNode,\n childNodes,\n resolvedModuleId,\n walkAst,\n zeroRuleMessage\n} from \"@tamagui/compiler-core\";\nimport { getThemeClassNames, reservedThemeProps } from \"@tamagui/helpers\";\nimport {\n getInlineValuesFromProps,\n getVariablesCSSRules,\n resolveThemeName,\n variableToString\n} from \"@tamagui/web\";\nconst MAX_THEME_BRANCHES = 8;\nconst LOWERABLE_RESERVED_PROPS = /* @__PURE__ */ new Set([\"name\", \"reset\", \"contain\"]);\nfunction jsxAttributeName(attribute) {\n const name = childNode(attribute, \"name\");\n return name && typeof name.name === \"string\" ? name.name : null;\n}\nfunction literalOf(node) {\n if (!node) return void 0;\n if (node.type === \"Literal\" && typeof node.value !== \"object\") {\n return node.value;\n }\n return void 0;\n}\nfunction hasSideEffects(node) {\n let found = false;\n walkAst(node, (child) => {\n if (child.type === \"CallExpression\" || child.type === \"OptionalCallExpression\" || child.type === \"NewExpression\" || child.type === \"AwaitExpression\" || child.type === \"YieldExpression\" || child.type === \"AssignmentExpression\" || child.type === \"UpdateExpression\" || child.type === \"TaggedTemplateExpression\") {\n found = true;\n }\n });\n return found;\n}\nfunction readNameOptions(value, source, guards) {\n const literal = literalOf(value);\n if (typeof literal === \"string\") {\n return [{ test: guards.length ? guards.join(\" && \") : null, name: literal }];\n }\n if (value.type === \"ConditionalExpression\") {\n const test = childNode(value, \"test\");\n const consequent = childNode(value, \"consequent\");\n const alternate = childNode(value, \"alternate\");\n if (!test || !consequent || !alternate) return null;\n if (hasSideEffects(test)) return null;\n const testText = source.slice(test.start, test.end).replace(/\\s+/g, \" \").trim();\n const left = readNameOptions(consequent, source, [...guards, `(${testText})`]);\n const right = readNameOptions(alternate, source, [...guards, `!(${testText})`]);\n if (!left || !right) return null;\n return [...left, ...right];\n }\n return null;\n}\nfunction foldBranches(branches) {\n const last = branches[branches.length - 1];\n if (new Set(branches.map((branch) => branch.value)).size === 1) return last.value;\n let expression = last.value;\n for (let index = branches.length - 2; index >= 0; index--) {\n const branch = branches[index];\n expression = branch.test === null ? branch.value : `${branch.test} ? ${branch.value} : ${expression}`;\n }\n return expression;\n}\nfunction resolveThemeChain(chain, rootThemeName, config) {\n let branches = [{ test: null, name: rootThemeName, isNew: false }];\n for (const node of chain) {\n const next = [];\n for (const parent of branches) {\n for (const option of node.options) {\n const resolved = resolveThemeName(\n parent.name,\n option.name,\n node.reset,\n config.themes\n );\n const tests = [parent.test, option.test].filter(Boolean);\n next.push({\n test: tests.length ? tests.join(\" && \") : null,\n name: resolved ?? parent.name,\n isNew: resolved !== null\n });\n }\n }\n branches = next;\n }\n return branches;\n}\nfunction readStaticTheme(element, id, source, config) {\n const moduleId = resolvedModuleId(id);\n const violations = [];\n const css = /* @__PURE__ */ new Map();\n const opening = childNode(element, \"openingElement\");\n const closing = childNode(element, \"closingElement\");\n const span = (node) => ({ id: moduleId, start: node.start, end: node.end });\n let options = [{ test: null, name: void 0 }];\n let reset = false;\n let contain = false;\n const themeKeyProps = {};\n for (const attribute of childNodes(opening, \"attributes\")) {\n if (attribute.type !== \"JSXAttribute\") {\n violations.push({\n rule: 1,\n code: \"local/unsafe-style-spread\",\n span: span(attribute),\n component: \"Theme\",\n message: zeroRuleMessage(1, { component: \"Theme\" })\n });\n continue;\n }\n const key = jsxAttributeName(attribute);\n if (!key) continue;\n const rawValue = childNode(attribute, \"value\");\n const value = rawValue && rawValue.type === \"JSXExpressionContainer\" ? childNode(rawValue, \"expression\") : rawValue;\n if (key === \"name\") {\n const read = value ? readNameOptions(value, source, []) : null;\n if (!read) {\n violations.push({\n rule: 4,\n code: \"local/unsupported-target\",\n span: span(attribute),\n component: \"Theme\",\n message: zeroRuleMessage(4, {\n detail: `the <Theme name> value ${source.slice(attribute.start, attribute.end).replace(/\\s+/g, \" \").trim()}, which is not a literal theme name or a conditional over literal theme names,`\n })\n });\n continue;\n }\n options = read;\n continue;\n }\n if (reservedThemeProps[key]) {\n if (!LOWERABLE_RESERVED_PROPS.has(key)) {\n violations.push({\n rule: 4,\n code: \"local/unsupported-target\",\n span: span(attribute),\n component: \"Theme\",\n message: zeroRuleMessage(4, {\n detail: `the <Theme ${key}> prop, which has no compiled form,`\n })\n });\n continue;\n }\n const literal2 = value ? literalOf(value) : true;\n if (typeof literal2 !== \"boolean\") {\n violations.push({\n rule: 4,\n code: \"local/unsupported-target\",\n span: span(attribute),\n component: \"Theme\",\n message: zeroRuleMessage(4, {\n detail: `a non-literal <Theme ${key}> value,`\n })\n });\n continue;\n }\n if (key === \"reset\") reset = literal2;\n if (key === \"contain\") contain = literal2;\n continue;\n }\n const literal = value ? literalOf(value) : void 0;\n if (typeof literal !== \"string\" && typeof literal !== \"number\") {\n violations.push({\n rule: 3,\n code: \"local/dynamic-style-value\",\n span: span(attribute),\n component: \"Theme\",\n message: zeroRuleMessage(3, {\n prop: key,\n component: \"Theme\",\n detail: value ? \"a theme value must be a string or number literal at build time\" : \"a theme key needs a value\"\n })\n });\n continue;\n }\n themeKeyProps[key] = literal;\n }\n if (reset && options.some((option) => option.name !== void 0)) {\n violations.push({\n rule: 4,\n code: \"local/unsupported-target\",\n span: span(opening),\n component: \"Theme\",\n message: zeroRuleMessage(4, {\n detail: \"a <Theme> with both name and reset, which cannot mean one theme,\"\n })\n });\n }\n if (!closing) {\n violations.push({\n rule: 4,\n code: \"local/unsupported-target\",\n span: span(element),\n component: \"Theme\",\n message: zeroRuleMessage(4, {\n detail: \"a self-closing <Theme>, which has no subtree to theme,\"\n })\n });\n }\n const issues = [];\n const inlineValues = Object.keys(themeKeyProps).length ? getInlineValuesFromProps(themeKeyProps, config, (issue) => issues.push(issue)) : null;\n for (const issue of issues) {\n violations.push({\n rule: 3,\n code: \"local/dynamic-style-value\",\n span: span(opening),\n component: \"Theme\",\n message: zeroRuleMessage(3, {\n prop: issue.key,\n component: \"Theme\",\n detail: issue.message\n })\n });\n }\n const inlineCSS = inlineValues ? getVariablesCSSRules(inlineValues, config) : null;\n if (inlineCSS) css.set(inlineCSS.identifier, inlineCSS.rules.join(\"\"));\n if (violations.length) return { node: null, violations, css };\n return {\n node: {\n element,\n opening,\n closing,\n options,\n reset,\n contain,\n layer: inlineValues && inlineCSS ? {\n inlineValues,\n inlineClassName: inlineCSS.identifier\n } : null\n },\n violations,\n css\n };\n}\nfunction lowerStaticTheme(node, chain, rootThemeName, config, id) {\n const moduleId = resolvedModuleId(id);\n const branches = resolveThemeChain(chain, rootThemeName, config);\n if (branches.length > MAX_THEME_BRANCHES) {\n return {\n edits: [],\n violations: [\n {\n rule: 4,\n code: \"local/unsupported-target\",\n span: { id: moduleId, start: node.element.start, end: node.element.end },\n component: \"Theme\",\n message: zeroRuleMessage(4, {\n detail: `a <Theme> chain that enumerates ${branches.length} theme names, past the ${MAX_THEME_BRANCHES} this lowers,`\n })\n }\n ]\n };\n }\n const inlineClass = node.layer?.inlineClassName ?? \"\";\n const classBranches = branches.map((branch) => ({\n test: branch.test,\n value: JSON.stringify(\n [branch.isNew ? getThemeClassNames(branch.name) : \"\", \"is_Theme\", inlineClass].filter(Boolean).join(\" \").replace(/\\s+/g, \" \").trim()\n )\n }));\n const baseStyle = node.contain ? `display:\"contents\",contain:\"strict\"` : `display:\"contents\"`;\n const styleBranches = branches.map((branch) => {\n const theme = config.themes[branch.name];\n const color = branch.isNew && theme ? variableToString(theme.color) : \"\";\n return {\n test: branch.test,\n value: color ? `{color:${JSON.stringify(color)},${baseStyle}}` : `{${baseStyle}}`\n };\n });\n const className = foldBranches(classBranches);\n const style = foldBranches(styleBranches);\n const classAttribute = className.startsWith('\"') ? `className=${className}` : `className={${className}}`;\n const edits = [\n {\n start: node.opening.start,\n end: node.opening.end,\n content: `<span ${classAttribute} style={${style}}>`,\n origin: { id: moduleId, start: node.opening.start, end: node.opening.end }\n }\n ];\n if (node.closing) {\n edits.push({\n start: node.closing.start,\n end: node.closing.end,\n content: `</span>`,\n origin: { id: moduleId, start: node.closing.start, end: node.closing.end }\n });\n }\n return { edits, violations: [] };\n}\nexport {\n foldBranches,\n lowerStaticTheme,\n readStaticTheme,\n resolveThemeChain\n};\n//# sourceMappingURL=theme.js.map\n"],"mappings":"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"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { applyLoweredModule, childNode, childNodes, parseModuleAst, planZeroErasure, resolvedModuleId, walkAst, zeroIslandThemeMessage, zeroViolationsFromPlan } from "@tamagui/compiler-core";
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { foldBranches, lowerStaticTheme, readStaticTheme, resolveThemeChain } from "./theme.mjs";
|
|
5
|
+
|
|
6
|
+
function identifierNameOf(node) {
|
|
7
|
+
return node && node.type === "Identifier" && typeof node.name === "string" ? node.name : null;
|
|
8
|
+
}
|
|
9
|
+
function jsxNameOf(element) {
|
|
10
|
+
const opening = childNode(element, "openingElement");
|
|
11
|
+
if (!opening) return null;
|
|
12
|
+
const name = childNode(opening, "name");
|
|
13
|
+
return name && name.type === "JSXIdentifier" && typeof name.name === "string" ? name.name : null;
|
|
14
|
+
}
|
|
15
|
+
function transformZeroModule(input) {
|
|
16
|
+
const { id, source, config } = input;
|
|
17
|
+
const moduleId = resolvedModuleId(id);
|
|
18
|
+
const program = parseModuleAst(source, id);
|
|
19
|
+
const violations = zeroViolationsFromPlan(input.plan);
|
|
20
|
+
const edits = [];
|
|
21
|
+
const bridges = /* @__PURE__ */ new Map();
|
|
22
|
+
const bridgeCSS = /* @__PURE__ */ new Map();
|
|
23
|
+
let themeLocal = null;
|
|
24
|
+
const islandLocals = /* @__PURE__ */ new Map();
|
|
25
|
+
for (const statement of childNodes(program, "body")) {
|
|
26
|
+
if (statement.type !== "ImportDeclaration") continue;
|
|
27
|
+
const sourceNode = childNode(statement, "source");
|
|
28
|
+
const specifier = sourceNode && typeof sourceNode.value === "string" ? sourceNode.value : null;
|
|
29
|
+
if (!specifier) continue;
|
|
30
|
+
const island = input.resolveIslandLoader(specifier);
|
|
31
|
+
for (const importSpecifier of childNodes(statement, "specifiers")) {
|
|
32
|
+
const local = identifierNameOf(childNode(importSpecifier, "local"));
|
|
33
|
+
if (!local) continue;
|
|
34
|
+
if (island) {
|
|
35
|
+
islandLocals.set(local, island.islandId);
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
if (!input.isTamaguiSpecifier(specifier)) continue;
|
|
39
|
+
const imported = childNode(importSpecifier, "imported");
|
|
40
|
+
if (imported && imported.name === "Theme") themeLocal = local;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const parents = /* @__PURE__ */ new Map();
|
|
44
|
+
const elements = [];
|
|
45
|
+
walkAst(program, (node, parent) => {
|
|
46
|
+
if (parent) parents.set(node, parent);
|
|
47
|
+
if (node.type === "JSXElement") elements.push(node);
|
|
48
|
+
});
|
|
49
|
+
const themeElements = themeLocal ? elements.filter((element) => jsxNameOf(element) === themeLocal) : [];
|
|
50
|
+
const themeNodes = /* @__PURE__ */ new Map();
|
|
51
|
+
for (const element of themeElements) {
|
|
52
|
+
const read = readStaticTheme(element, id, source, config);
|
|
53
|
+
for (const [identifier, rules] of read.css) bridgeCSS.set(identifier, rules);
|
|
54
|
+
violations.push(...read.violations);
|
|
55
|
+
if (read.node) themeNodes.set(element, read.node);
|
|
56
|
+
}
|
|
57
|
+
const themeChainOf = (element) => {
|
|
58
|
+
const chain = [];
|
|
59
|
+
let cursor = element;
|
|
60
|
+
while (cursor) {
|
|
61
|
+
const node = themeNodes.get(cursor);
|
|
62
|
+
if (node) chain.unshift(node);
|
|
63
|
+
cursor = parents.get(cursor);
|
|
64
|
+
}
|
|
65
|
+
return chain;
|
|
66
|
+
};
|
|
67
|
+
const rootThemeName = Object.keys(config.themes)[0] ?? "light";
|
|
68
|
+
for (const element of themeElements) {
|
|
69
|
+
const node = themeNodes.get(element);
|
|
70
|
+
if (!node) continue;
|
|
71
|
+
const lowered = lowerStaticTheme(node, themeChainOf(element), rootThemeName, config, id);
|
|
72
|
+
violations.push(...lowered.violations);
|
|
73
|
+
edits.push(...lowered.edits);
|
|
74
|
+
}
|
|
75
|
+
const mounts = elements.filter((element) => {
|
|
76
|
+
const name = jsxNameOf(element);
|
|
77
|
+
return !!name && islandLocals.has(name);
|
|
78
|
+
}).sort((left, right) => left.start - right.start);
|
|
79
|
+
const moduleBridgePrefix = createHash("sha256").update(path.relative(input.root, id).replace(/\\/g, "/")).digest("hex").slice(0, 8);
|
|
80
|
+
const loweredRanges = input.plan.edits.filter((edit) => edit.end > edit.start);
|
|
81
|
+
const isOpaqueAncestor = (element) => {
|
|
82
|
+
if (themeNodes.has(element)) return false;
|
|
83
|
+
const name = jsxNameOf(element);
|
|
84
|
+
if (!name || islandLocals.has(name)) return false;
|
|
85
|
+
if (name[0] !== name[0].toUpperCase()) return false;
|
|
86
|
+
const nameNode = childNode(childNode(element, "openingElement"), "name");
|
|
87
|
+
return !loweredRanges.some((edit) => edit.start <= nameNode.start && edit.end >= nameNode.end);
|
|
88
|
+
};
|
|
89
|
+
mounts.forEach((element, index) => {
|
|
90
|
+
const islandId = islandLocals.get(jsxNameOf(element));
|
|
91
|
+
let opaque = null;
|
|
92
|
+
for (let cursor = parents.get(element); cursor; cursor = parents.get(cursor)) {
|
|
93
|
+
if (cursor.type === "JSXElement" && isOpaqueAncestor(cursor)) opaque = cursor;
|
|
94
|
+
}
|
|
95
|
+
if (opaque) {
|
|
96
|
+
violations.push({
|
|
97
|
+
rule: 4,
|
|
98
|
+
code: "local/unsupported-target",
|
|
99
|
+
span: {
|
|
100
|
+
id: moduleId,
|
|
101
|
+
start: element.start,
|
|
102
|
+
end: element.end
|
|
103
|
+
},
|
|
104
|
+
component: islandId,
|
|
105
|
+
message: zeroIslandThemeMessage(islandId)
|
|
106
|
+
});
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
const chain = themeChainOf(element);
|
|
110
|
+
const layers = chain.map((node) => node.layer).filter((layer) => !!layer);
|
|
111
|
+
const branches = resolveThemeChain(chain, rootThemeName, config);
|
|
112
|
+
const descriptors = branches.map((branch, branchIndex) => ({
|
|
113
|
+
test: branch.test,
|
|
114
|
+
bridge: {
|
|
115
|
+
id: branches.length === 1 ? `b${moduleBridgePrefix}_${index}` : `b${moduleBridgePrefix}_${index}_${branchIndex}`,
|
|
116
|
+
name: branch.name,
|
|
117
|
+
layers
|
|
118
|
+
}
|
|
119
|
+
}));
|
|
120
|
+
const list = bridges.get(islandId) ?? [];
|
|
121
|
+
for (const descriptor of descriptors) list.push(descriptor.bridge);
|
|
122
|
+
bridges.set(islandId, list);
|
|
123
|
+
const fold = (value) => foldBranches(descriptors.map((descriptor) => ({
|
|
124
|
+
test: descriptor.test,
|
|
125
|
+
value: value(descriptor.bridge)
|
|
126
|
+
})));
|
|
127
|
+
const opening = childNode(element, "openingElement");
|
|
128
|
+
const nameNode = childNode(opening, "name");
|
|
129
|
+
edits.push({
|
|
130
|
+
start: nameNode.end,
|
|
131
|
+
end: nameNode.end,
|
|
132
|
+
content: ` data-tamagui-bridge={${fold((bridge) => JSON.stringify(bridge.id))}} __tamaguiBridge={${fold((bridge) => JSON.stringify(bridge))}}`,
|
|
133
|
+
origin: {
|
|
134
|
+
id: moduleId,
|
|
135
|
+
start: nameNode.start,
|
|
136
|
+
end: nameNode.end
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
const erasure = violations.length ? null : planZeroErasure({
|
|
141
|
+
id: moduleId,
|
|
142
|
+
source,
|
|
143
|
+
loweredEdits: [...input.plan.edits, ...edits],
|
|
144
|
+
isTamaguiSpecifier: input.isTamaguiSpecifier,
|
|
145
|
+
islandIdFor: input.resolveIslandModule
|
|
146
|
+
});
|
|
147
|
+
if (erasure) {
|
|
148
|
+
edits.push(...erasure.edits);
|
|
149
|
+
violations.push(...erasure.violations);
|
|
150
|
+
}
|
|
151
|
+
const output = input.mode === "report" ? applyLoweredModule(source, moduleId, input.plan) : violations.length ? {
|
|
152
|
+
changed: false,
|
|
153
|
+
code: source,
|
|
154
|
+
map: null
|
|
155
|
+
} : applyLoweredModule(source, moduleId, {
|
|
156
|
+
id: moduleId,
|
|
157
|
+
sourceHash: input.plan.sourceHash,
|
|
158
|
+
edits: [...input.plan.edits, ...edits]
|
|
159
|
+
});
|
|
160
|
+
return {
|
|
161
|
+
output,
|
|
162
|
+
edits: input.mode === "report" ? [] : edits,
|
|
163
|
+
bridges: input.mode === "report" ? /* @__PURE__ */ new Map() : bridges,
|
|
164
|
+
bridgeCSS: input.mode === "report" ? /* @__PURE__ */ new Map() : bridgeCSS,
|
|
165
|
+
violations,
|
|
166
|
+
erased: {
|
|
167
|
+
modules: erasure?.removedModules ?? [],
|
|
168
|
+
bindings: erasure?.removedBindings ?? [],
|
|
169
|
+
styledDefinitions: erasure?.erasedStyledDefinitions ?? [],
|
|
170
|
+
exports: erasure?.erasedExports ?? []
|
|
171
|
+
},
|
|
172
|
+
rewrittenAnimatedNumberHooks: erasure?.rewrittenAnimatedNumberHooks ?? []
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
export { transformZeroModule };
|
|
177
|
+
//# sourceMappingURL=transform.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform.js","names":[],"sources":["esm/zero/transform.js"],"sourcesContent":["import {\n applyLoweredModule,\n childNode,\n childNodes,\n parseModuleAst,\n planZeroErasure,\n resolvedModuleId,\n walkAst,\n zeroIslandThemeMessage,\n zeroViolationsFromPlan\n} from \"@tamagui/compiler-core\";\nimport { createHash } from \"node:crypto\";\nimport path from \"node:path\";\nimport {\n foldBranches,\n lowerStaticTheme,\n readStaticTheme,\n resolveThemeChain\n} from \"./theme\";\nfunction identifierNameOf(node) {\n return node && node.type === \"Identifier\" && typeof node.name === \"string\" ? node.name : null;\n}\nfunction jsxNameOf(element) {\n const opening = childNode(element, \"openingElement\");\n if (!opening) return null;\n const name = childNode(opening, \"name\");\n return name && name.type === \"JSXIdentifier\" && typeof name.name === \"string\" ? name.name : null;\n}\nfunction transformZeroModule(input) {\n const { id, source, config } = input;\n const moduleId = resolvedModuleId(id);\n const program = parseModuleAst(source, id);\n const violations = zeroViolationsFromPlan(input.plan);\n const edits = [];\n const bridges = /* @__PURE__ */ new Map();\n const bridgeCSS = /* @__PURE__ */ new Map();\n let themeLocal = null;\n const islandLocals = /* @__PURE__ */ new Map();\n for (const statement of childNodes(program, \"body\")) {\n if (statement.type !== \"ImportDeclaration\") continue;\n const sourceNode = childNode(statement, \"source\");\n const specifier = sourceNode && typeof sourceNode.value === \"string\" ? sourceNode.value : null;\n if (!specifier) continue;\n const island = input.resolveIslandLoader(specifier);\n for (const importSpecifier of childNodes(statement, \"specifiers\")) {\n const local = identifierNameOf(childNode(importSpecifier, \"local\"));\n if (!local) continue;\n if (island) {\n islandLocals.set(local, island.islandId);\n continue;\n }\n if (!input.isTamaguiSpecifier(specifier)) continue;\n const imported = childNode(importSpecifier, \"imported\");\n if (imported && imported.name === \"Theme\") themeLocal = local;\n }\n }\n const parents = /* @__PURE__ */ new Map();\n const elements = [];\n walkAst(program, (node, parent) => {\n if (parent) parents.set(node, parent);\n if (node.type === \"JSXElement\") elements.push(node);\n });\n const themeElements = themeLocal ? elements.filter((element) => jsxNameOf(element) === themeLocal) : [];\n const themeNodes = /* @__PURE__ */ new Map();\n for (const element of themeElements) {\n const read = readStaticTheme(element, id, source, config);\n for (const [identifier, rules] of read.css) bridgeCSS.set(identifier, rules);\n violations.push(...read.violations);\n if (read.node) themeNodes.set(element, read.node);\n }\n const themeChainOf = (element) => {\n const chain = [];\n let cursor = element;\n while (cursor) {\n const node = themeNodes.get(cursor);\n if (node) chain.unshift(node);\n cursor = parents.get(cursor);\n }\n return chain;\n };\n const rootThemeName = Object.keys(config.themes)[0] ?? \"light\";\n for (const element of themeElements) {\n const node = themeNodes.get(element);\n if (!node) continue;\n const lowered = lowerStaticTheme(\n node,\n themeChainOf(element),\n rootThemeName,\n config,\n id\n );\n violations.push(...lowered.violations);\n edits.push(...lowered.edits);\n }\n const mounts = elements.filter((element) => {\n const name = jsxNameOf(element);\n return !!name && islandLocals.has(name);\n }).sort((left, right) => left.start - right.start);\n const moduleBridgePrefix = createHash(\"sha256\").update(path.relative(input.root, id).replace(/\\\\/g, \"/\")).digest(\"hex\").slice(0, 8);\n const loweredRanges = input.plan.edits.filter((edit) => edit.end > edit.start);\n const isOpaqueAncestor = (element) => {\n if (themeNodes.has(element)) return false;\n const name = jsxNameOf(element);\n if (!name || islandLocals.has(name)) return false;\n if (name[0] !== name[0].toUpperCase()) return false;\n const nameNode = childNode(childNode(element, \"openingElement\"), \"name\");\n return !loweredRanges.some(\n (edit) => edit.start <= nameNode.start && edit.end >= nameNode.end\n );\n };\n mounts.forEach((element, index) => {\n const islandId = islandLocals.get(jsxNameOf(element));\n let opaque = null;\n for (let cursor = parents.get(element); cursor; cursor = parents.get(cursor)) {\n if (cursor.type === \"JSXElement\" && isOpaqueAncestor(cursor)) opaque = cursor;\n }\n if (opaque) {\n violations.push({\n rule: 4,\n code: \"local/unsupported-target\",\n span: { id: moduleId, start: element.start, end: element.end },\n component: islandId,\n message: zeroIslandThemeMessage(islandId)\n });\n return;\n }\n const chain = themeChainOf(element);\n const layers = chain.map((node) => node.layer).filter((layer) => !!layer);\n const branches = resolveThemeChain(chain, rootThemeName, config);\n const descriptors = branches.map((branch, branchIndex) => ({\n test: branch.test,\n bridge: {\n // unique across modules and stable across the server and client\n // compilations of the same entry, because both see the same module path\n id: branches.length === 1 ? `b${moduleBridgePrefix}_${index}` : `b${moduleBridgePrefix}_${index}_${branchIndex}`,\n name: branch.name,\n layers\n }\n }));\n const list = bridges.get(islandId) ?? [];\n for (const descriptor of descriptors) list.push(descriptor.bridge);\n bridges.set(islandId, list);\n const fold = (value) => foldBranches(\n descriptors.map((descriptor) => ({\n test: descriptor.test,\n value: value(descriptor.bridge)\n }))\n );\n const opening = childNode(element, \"openingElement\");\n const nameNode = childNode(opening, \"name\");\n edits.push({\n start: nameNode.end,\n end: nameNode.end,\n content: ` data-tamagui-bridge={${fold(\n (bridge) => JSON.stringify(bridge.id)\n )}} __tamaguiBridge={${fold((bridge) => JSON.stringify(bridge))}}`,\n origin: { id: moduleId, start: nameNode.start, end: nameNode.end }\n });\n });\n const erasure = violations.length ? null : planZeroErasure({\n id: moduleId,\n source,\n loweredEdits: [...input.plan.edits, ...edits],\n isTamaguiSpecifier: input.isTamaguiSpecifier,\n islandIdFor: input.resolveIslandModule\n });\n if (erasure) {\n edits.push(...erasure.edits);\n violations.push(...erasure.violations);\n }\n const output = input.mode === \"report\" ? applyLoweredModule(source, moduleId, input.plan) : violations.length ? { changed: false, code: source, map: null } : applyLoweredModule(source, moduleId, {\n id: moduleId,\n sourceHash: input.plan.sourceHash,\n edits: [...input.plan.edits, ...edits]\n });\n return {\n output,\n edits: input.mode === \"report\" ? [] : edits,\n bridges: input.mode === \"report\" ? /* @__PURE__ */ new Map() : bridges,\n bridgeCSS: input.mode === \"report\" ? /* @__PURE__ */ new Map() : bridgeCSS,\n violations,\n erased: {\n modules: erasure?.removedModules ?? [],\n bindings: erasure?.removedBindings ?? [],\n styledDefinitions: erasure?.erasedStyledDefinitions ?? [],\n exports: erasure?.erasedExports ?? []\n },\n rewrittenAnimatedNumberHooks: erasure?.rewrittenAnimatedNumberHooks ?? []\n };\n}\nexport {\n transformZeroModule\n};\n//# sourceMappingURL=transform.js.map\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tamagui/static",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0-beta.643.1",
|
|
4
4
|
"gitHead": "a49cc7ea6b93ba384e77a4880ae48ac4a5635c14",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"source": "src/index.ts",
|
|
@@ -9,26 +9,30 @@
|
|
|
9
9
|
"types",
|
|
10
10
|
"dist"
|
|
11
11
|
],
|
|
12
|
-
"type": "
|
|
13
|
-
"main": "dist",
|
|
12
|
+
"type": "module",
|
|
13
|
+
"main": "dist/cjs/index.cjs",
|
|
14
|
+
"module": "dist/esm/index.mjs",
|
|
14
15
|
"types": "./types/index.d.ts",
|
|
15
16
|
"exports": {
|
|
16
17
|
"./package.json": "./package.json",
|
|
17
18
|
".": {
|
|
18
19
|
"types": "./types/index.d.ts",
|
|
19
|
-
"
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
"
|
|
23
|
-
"default": "./dist/worker.cjs"
|
|
20
|
+
"module": "./dist/esm/index.mjs",
|
|
21
|
+
"import": "./dist/esm/index.mjs",
|
|
22
|
+
"require": "./dist/cjs/index.cjs",
|
|
23
|
+
"default": "./dist/esm/index.mjs"
|
|
24
24
|
},
|
|
25
25
|
"./checkDeps": {
|
|
26
26
|
"types": "./types/checkDeps.d.ts",
|
|
27
|
-
"
|
|
27
|
+
"import": "./dist/esm/checkDeps.mjs",
|
|
28
|
+
"require": "./dist/cjs/checkDeps.cjs",
|
|
29
|
+
"default": "./dist/esm/checkDeps.mjs"
|
|
28
30
|
},
|
|
29
31
|
"./loadTamagui": {
|
|
30
32
|
"types": "./types/extractor/loadTamagui.d.ts",
|
|
31
|
-
"
|
|
33
|
+
"import": "./dist/esm/extractor/loadTamagui.mjs",
|
|
34
|
+
"require": "./dist/cjs/extractor/loadTamagui.cjs",
|
|
35
|
+
"default": "./dist/esm/extractor/loadTamagui.mjs"
|
|
32
36
|
}
|
|
33
37
|
},
|
|
34
38
|
"publishConfig": {
|
|
@@ -41,55 +45,41 @@
|
|
|
41
45
|
"clean:build": "tamagui-build clean:build"
|
|
42
46
|
},
|
|
43
47
|
"dependencies": {
|
|
44
|
-
"@
|
|
45
|
-
"@
|
|
46
|
-
"@
|
|
47
|
-
"@
|
|
48
|
-
"@
|
|
49
|
-
"@
|
|
50
|
-
"@
|
|
51
|
-
"@
|
|
52
|
-
"@
|
|
53
|
-
"@tamagui/
|
|
54
|
-
"@tamagui/
|
|
55
|
-
"@tamagui/
|
|
56
|
-
"@tamagui/
|
|
57
|
-
"@tamagui/
|
|
58
|
-
"@tamagui/
|
|
59
|
-
"@tamagui/helpers-node": "2.7.7",
|
|
60
|
-
"@tamagui/proxy-worm": "2.7.7",
|
|
61
|
-
"@tamagui/react-native-web-internals": "2.7.7",
|
|
62
|
-
"@tamagui/react-native-web-lite": "2.7.7",
|
|
63
|
-
"@tamagui/shorthands": "2.7.7",
|
|
64
|
-
"@tamagui/types": "2.7.7",
|
|
65
|
-
"@tamagui/web": "2.7.7",
|
|
66
|
-
"babel-literal-to-ast": "^2.1.0",
|
|
48
|
+
"@tamagui/cli-color": "3.0.0-beta.643.1",
|
|
49
|
+
"@tamagui/compiler-core": "3.0.0-beta.643.1",
|
|
50
|
+
"@tamagui/config-default": "3.0.0-beta.643.1",
|
|
51
|
+
"@tamagui/core": "3.0.0-beta.643.1",
|
|
52
|
+
"@tamagui/dom": "3.0.0-beta.643.1",
|
|
53
|
+
"@tamagui/fake-react-native": "3.0.0-beta.643.1",
|
|
54
|
+
"@tamagui/generate-themes": "3.0.0-beta.643.1",
|
|
55
|
+
"@tamagui/helpers": "3.0.0-beta.643.1",
|
|
56
|
+
"@tamagui/helpers-node": "3.0.0-beta.643.1",
|
|
57
|
+
"@tamagui/react-native-web-internals": "3.0.0-beta.643.1",
|
|
58
|
+
"@tamagui/react-native-web-lite": "3.0.0-beta.643.1",
|
|
59
|
+
"@tamagui/shorthands": "3.0.0-beta.643.1",
|
|
60
|
+
"@tamagui/style-grammar": "3.0.0-beta.643.1",
|
|
61
|
+
"@tamagui/types": "3.0.0-beta.643.1",
|
|
62
|
+
"@tamagui/web": "3.0.0-beta.643.1",
|
|
67
63
|
"browserslist": "^4.28.1",
|
|
68
64
|
"check-dependency-version-consistency": "^4.1.0",
|
|
69
|
-
"esbuild": "
|
|
65
|
+
"esbuild": "0.28.1",
|
|
70
66
|
"esbuild-register": "^3.6.0",
|
|
71
|
-
"esbuild-wasm": "^0.27.2",
|
|
72
67
|
"fast-glob": "^3.2.11",
|
|
73
|
-
"find-cache-dir": "^3.3.2",
|
|
74
68
|
"find-root": "^1.1.0",
|
|
75
69
|
"fs-extra": "^11.2.0",
|
|
76
|
-
"invariant": "^2.2.4",
|
|
77
70
|
"js-yaml": "^4.1.0",
|
|
78
71
|
"react-native-web": "^0.21.0"
|
|
79
72
|
},
|
|
80
73
|
"devDependencies": {
|
|
81
|
-
"@
|
|
82
|
-
"@tamagui/build": "2.7.7",
|
|
83
|
-
"@types/babel__core": "^7.20.5",
|
|
74
|
+
"@tamagui/build": "3.0.0-beta.643.1",
|
|
84
75
|
"@types/find-root": "^1.1.2",
|
|
85
76
|
"@types/node": "^22.1.0",
|
|
86
77
|
"@types/webpack": "^4.41.26",
|
|
87
|
-
"babel-loader": "^9.1.3",
|
|
88
78
|
"esbuild-loader": "^4.2.2",
|
|
89
79
|
"null-loader": "^4.0.1",
|
|
90
80
|
"react": ">=19",
|
|
91
|
-
"react-native": "0.
|
|
92
|
-
"typescript": "~
|
|
81
|
+
"react-native": "0.86.2",
|
|
82
|
+
"typescript": "~6.0.3"
|
|
93
83
|
},
|
|
94
84
|
"peerDependencies": {
|
|
95
85
|
"react": ">=19"
|