@tamagui/static 1.0.0-alpha.4 → 1.0.0-alpha.43
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/constants.js +43 -0
- package/dist/cjs/constants.js.map +7 -0
- package/dist/cjs/extractor/accessSafe.js +39 -0
- package/dist/cjs/extractor/accessSafe.js.map +7 -0
- package/dist/cjs/extractor/babelParse.js +58 -0
- package/dist/cjs/extractor/babelParse.js.map +7 -0
- package/dist/cjs/extractor/buildClassName.js +68 -0
- package/dist/cjs/extractor/buildClassName.js.map +7 -0
- package/dist/cjs/extractor/createEvaluator.js +79 -0
- package/dist/cjs/extractor/createEvaluator.js.map +7 -0
- package/dist/cjs/extractor/createExtractor.js +907 -0
- package/dist/cjs/extractor/createExtractor.js.map +7 -0
- package/dist/cjs/extractor/ensureImportingConcat.js +52 -0
- package/dist/cjs/extractor/ensureImportingConcat.js.map +7 -0
- package/dist/cjs/extractor/evaluateAstNode.js +122 -0
- package/dist/cjs/extractor/evaluateAstNode.js.map +7 -0
- package/dist/cjs/extractor/extractHelpers.js +124 -0
- package/dist/cjs/extractor/extractHelpers.js.map +7 -0
- package/dist/cjs/extractor/extractMediaStyle.js +193 -0
- package/dist/cjs/extractor/extractMediaStyle.js.map +7 -0
- package/dist/cjs/extractor/extractToClassNames.js +284 -0
- package/dist/cjs/extractor/extractToClassNames.js.map +7 -0
- package/dist/cjs/extractor/findTopmostFunction.js +46 -0
- package/dist/cjs/extractor/findTopmostFunction.js.map +7 -0
- package/dist/cjs/extractor/generatedUid.js +56 -0
- package/dist/cjs/extractor/generatedUid.js.map +7 -0
- package/dist/cjs/extractor/getPropValueFromAttributes.js +77 -0
- package/dist/cjs/extractor/getPropValueFromAttributes.js.map +7 -0
- package/dist/cjs/extractor/getSourceModule.js +97 -0
- package/dist/cjs/extractor/getSourceModule.js.map +7 -0
- package/dist/cjs/extractor/getStaticBindingsForScope.js +156 -0
- package/dist/cjs/extractor/getStaticBindingsForScope.js.map +7 -0
- package/dist/cjs/extractor/hoistClassNames.js +72 -0
- package/dist/cjs/extractor/hoistClassNames.js.map +7 -0
- package/dist/cjs/extractor/literalToAst.js +62 -0
- package/dist/cjs/extractor/literalToAst.js.map +7 -0
- package/dist/cjs/extractor/loadTamagui.js +64 -0
- package/dist/cjs/extractor/loadTamagui.js.map +7 -0
- package/dist/cjs/extractor/logLines.js +40 -0
- package/dist/cjs/extractor/logLines.js.map +7 -0
- package/dist/cjs/extractor/normalizeTernaries.js +108 -0
- package/dist/cjs/extractor/normalizeTernaries.js.map +7 -0
- package/dist/cjs/extractor/removeUnusedHooks.js +107 -0
- package/dist/cjs/extractor/removeUnusedHooks.js.map +7 -0
- package/dist/cjs/index.js +38 -0
- package/dist/cjs/index.js.map +7 -0
- package/dist/cjs/patchReactNativeWeb.js +135 -0
- package/dist/cjs/patchReactNativeWeb.js.map +7 -0
- package/dist/cjs/types.js +21 -0
- package/dist/cjs/types.js.map +7 -0
- package/dist/{constants.js → esm/constants.js} +4 -0
- package/dist/{constants.js.map → esm/constants.js.map} +3 -3
- package/dist/{extractor → esm/extractor}/accessSafe.js +0 -0
- package/dist/{extractor → esm/extractor}/accessSafe.js.map +1 -1
- package/dist/{extractor → esm/extractor}/babelParse.js +0 -0
- package/dist/{extractor → esm/extractor}/babelParse.js.map +1 -1
- package/dist/{extractor → esm/extractor}/buildClassName.js +0 -0
- package/dist/{extractor → esm/extractor}/buildClassName.js.map +1 -1
- package/dist/{extractor → esm/extractor}/createEvaluator.js +1 -1
- package/dist/esm/extractor/createEvaluator.js.map +7 -0
- package/dist/{extractor → esm/extractor}/createExtractor.js +113 -73
- package/dist/esm/extractor/createExtractor.js.map +7 -0
- package/dist/{extractor → esm/extractor}/ensureImportingConcat.js +1 -1
- package/dist/esm/extractor/ensureImportingConcat.js.map +7 -0
- package/dist/{extractor → esm/extractor}/evaluateAstNode.js +0 -0
- package/dist/{extractor → esm/extractor}/evaluateAstNode.js.map +1 -1
- package/dist/{extractor → esm/extractor}/extractHelpers.js +6 -4
- package/dist/{extractor → esm/extractor}/extractHelpers.js.map +3 -3
- package/dist/{extractor → esm/extractor}/extractMediaStyle.js +3 -2
- package/dist/{extractor → esm/extractor}/extractMediaStyle.js.map +2 -2
- package/dist/{extractor → esm/extractor}/extractToClassNames.js +27 -29
- package/dist/esm/extractor/extractToClassNames.js.map +7 -0
- package/dist/{extractor → esm/extractor}/findTopmostFunction.js +0 -0
- package/dist/{extractor → esm/extractor}/findTopmostFunction.js.map +1 -1
- package/dist/{extractor → esm/extractor}/generatedUid.js +0 -0
- package/dist/{extractor → esm/extractor}/generatedUid.js.map +1 -1
- package/dist/{extractor → esm/extractor}/getPropValueFromAttributes.js +0 -0
- package/dist/{extractor → esm/extractor}/getPropValueFromAttributes.js.map +1 -1
- package/dist/{extractor → esm/extractor}/getSourceModule.js +0 -0
- package/dist/{extractor → esm/extractor}/getSourceModule.js.map +1 -1
- package/dist/{extractor → esm/extractor}/getStaticBindingsForScope.js +0 -0
- package/dist/{extractor → esm/extractor}/getStaticBindingsForScope.js.map +1 -1
- package/dist/{extractor → esm/extractor}/hoistClassNames.js +0 -0
- package/dist/{extractor → esm/extractor}/hoistClassNames.js.map +1 -1
- package/dist/{extractor → esm/extractor}/literalToAst.js +0 -0
- package/dist/{extractor → esm/extractor}/literalToAst.js.map +1 -1
- package/dist/{extractor → esm/extractor}/loadTamagui.js +0 -0
- package/dist/{extractor → esm/extractor}/loadTamagui.js.map +3 -3
- package/dist/esm/extractor/logLines.js +17 -0
- package/dist/esm/extractor/logLines.js.map +7 -0
- package/dist/{extractor → esm/extractor}/normalizeTernaries.js +3 -2
- package/dist/{extractor → esm/extractor}/normalizeTernaries.js.map +2 -2
- package/dist/{extractor → esm/extractor}/removeUnusedHooks.js +5 -3
- package/dist/{extractor → esm/extractor}/removeUnusedHooks.js.map +2 -2
- package/dist/{index.js → esm/index.js} +0 -0
- package/dist/{index.js.map → esm/index.js.map} +1 -1
- package/dist/{patchReactNativeWeb.js → esm/patchReactNativeWeb.js} +18 -3
- package/dist/esm/patchReactNativeWeb.js.map +7 -0
- package/dist/{types.js → esm/types.js} +0 -0
- package/dist/{types.js.map → esm/types.js.map} +0 -0
- package/dist/jsx/constants.js +13 -0
- package/dist/jsx/extractor/accessSafe.js +10 -0
- package/dist/jsx/extractor/babelParse.js +29 -0
- package/dist/jsx/extractor/buildClassName.js +39 -0
- package/dist/jsx/extractor/createEvaluator.js +50 -0
- package/dist/jsx/extractor/createExtractor.js +844 -0
- package/dist/jsx/extractor/ensureImportingConcat.js +23 -0
- package/dist/jsx/extractor/evaluateAstNode.js +93 -0
- package/dist/jsx/extractor/extractHelpers.js +95 -0
- package/dist/jsx/extractor/extractMediaStyle.js +151 -0
- package/dist/jsx/extractor/extractToClassNames.js +240 -0
- package/dist/jsx/extractor/findTopmostFunction.js +22 -0
- package/dist/jsx/extractor/generatedUid.js +27 -0
- package/dist/jsx/extractor/getPropValueFromAttributes.js +48 -0
- package/dist/jsx/extractor/getSourceModule.js +68 -0
- package/dist/jsx/extractor/getStaticBindingsForScope.js +127 -0
- package/dist/jsx/extractor/hoistClassNames.js +43 -0
- package/dist/jsx/extractor/literalToAst.js +33 -0
- package/dist/jsx/extractor/loadTamagui.js +40 -0
- package/dist/jsx/extractor/logLines.js +16 -0
- package/dist/jsx/extractor/normalizeTernaries.js +52 -0
- package/dist/jsx/extractor/removeUnusedHooks.js +79 -0
- package/dist/jsx/index.js +13 -0
- package/{src/patchReactNativeWeb.ts → dist/jsx/patchReactNativeWeb.js} +44 -45
- package/dist/jsx/types.js +0 -0
- package/package.json +20 -17
- package/types/constants.d.ts +6 -0
- package/types/constants.d.ts.map +1 -0
- package/types/extractor/accessSafe.d.ts +3 -0
- package/types/extractor/accessSafe.d.ts.map +1 -0
- package/types/extractor/babelParse.d.ts +5 -0
- package/types/extractor/babelParse.d.ts.map +1 -0
- package/types/extractor/buildClassName.d.ts +4 -0
- package/types/extractor/buildClassName.d.ts.map +1 -0
- package/types/extractor/createEvaluator.d.ts +12 -0
- package/types/extractor/createEvaluator.d.ts.map +1 -0
- package/types/extractor/createExtractor.d.ts +33 -0
- package/types/extractor/createExtractor.d.ts.map +1 -0
- package/types/extractor/ensureImportingConcat.d.ts +4 -0
- package/types/extractor/ensureImportingConcat.d.ts.map +1 -0
- package/types/extractor/evaluateAstNode.d.ts +3 -0
- package/types/extractor/evaluateAstNode.d.ts.map +1 -0
- package/types/extractor/extractHelpers.d.ts +12 -0
- package/types/extractor/extractHelpers.d.ts.map +1 -0
- package/types/extractor/extractMediaStyle.d.ts +10 -0
- package/types/extractor/extractMediaStyle.d.ts.map +1 -0
- package/types/extractor/extractToClassNames.d.ts +21 -0
- package/types/extractor/extractToClassNames.d.ts.map +1 -0
- package/types/extractor/findTopmostFunction.d.ts +4 -0
- package/types/extractor/findTopmostFunction.d.ts.map +1 -0
- package/types/extractor/generatedUid.d.ts +5 -0
- package/types/extractor/generatedUid.d.ts.map +1 -0
- package/types/extractor/getPropValueFromAttributes.d.ts +3 -0
- package/types/extractor/getPropValueFromAttributes.d.ts.map +1 -0
- package/types/extractor/getSourceModule.d.ts +16 -0
- package/types/extractor/getSourceModule.d.ts.map +1 -0
- package/types/extractor/getStaticBindingsForScope.d.ts +4 -0
- package/types/extractor/getStaticBindingsForScope.d.ts.map +1 -0
- package/types/extractor/hoistClassNames.d.ts +6 -0
- package/types/extractor/hoistClassNames.d.ts.map +1 -0
- package/types/extractor/literalToAst.d.ts +3 -0
- package/types/extractor/literalToAst.d.ts.map +1 -0
- package/types/extractor/loadTamagui.d.ts +9 -0
- package/types/extractor/loadTamagui.d.ts.map +1 -0
- package/types/extractor/logLines.d.ts +2 -0
- package/types/extractor/logLines.d.ts.map +1 -0
- package/types/extractor/normalizeTernaries.d.ts +3 -0
- package/types/extractor/normalizeTernaries.d.ts.map +1 -0
- package/types/extractor/removeUnusedHooks.d.ts +3 -0
- package/types/extractor/removeUnusedHooks.d.ts.map +1 -0
- package/types/index.d.ts +8 -0
- package/types/index.d.ts.map +1 -0
- package/types/patchReactNativeWeb.d.ts +2 -0
- package/types/patchReactNativeWeb.d.ts.map +1 -0
- package/types/types.d.ts +79 -0
- package/types/types.d.ts.map +1 -0
- package/dist/extractor/createEvaluator.js.map +0 -7
- package/dist/extractor/createExtractor.js.map +0 -7
- package/dist/extractor/ensureImportingConcat.js.map +0 -7
- package/dist/extractor/extractToClassNames.js.map +0 -7
- package/dist/index.cjs +0 -2085
- package/dist/index.cjs.map +0 -7
- package/dist/patchReactNativeWeb.js.map +0 -7
- package/src/constants.ts +0 -10
- package/src/extractor/accessSafe.ts +0 -18
- package/src/extractor/babelParse.ts +0 -27
- package/src/extractor/buildClassName.ts +0 -61
- package/src/extractor/createEvaluator.ts +0 -68
- package/src/extractor/createExtractor.ts +0 -1116
- package/src/extractor/ensureImportingConcat.ts +0 -33
- package/src/extractor/evaluateAstNode.ts +0 -121
- package/src/extractor/extractHelpers.ts +0 -102
- package/src/extractor/extractMediaStyle.ts +0 -191
- package/src/extractor/extractToClassNames.ts +0 -337
- package/src/extractor/findTopmostFunction.ts +0 -22
- package/src/extractor/generatedUid.ts +0 -43
- package/src/extractor/getPropValueFromAttributes.ts +0 -92
- package/src/extractor/getSourceModule.ts +0 -101
- package/src/extractor/getStaticBindingsForScope.ts +0 -173
- package/src/extractor/hoistClassNames.ts +0 -45
- package/src/extractor/literalToAst.ts +0 -32
- package/src/extractor/loadTamagui.ts +0 -61
- package/src/extractor/normalizeTernaries.ts +0 -60
- package/src/extractor/removeUnusedHooks.ts +0 -76
- package/src/index.ts +0 -9
- package/src/types.ts +0 -80
|
@@ -2,9 +2,10 @@ var __defProp = Object.defineProperty;
|
|
|
2
2
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
3
|
import traverse from "@babel/traverse";
|
|
4
4
|
import * as t from "@babel/types";
|
|
5
|
-
import
|
|
5
|
+
import { mediaQueryConfig, postProcessStyles, pseudos } from "@tamagui/core-node";
|
|
6
6
|
import { stylePropsTransform } from "@tamagui/helpers";
|
|
7
7
|
import { difference, pick } from "lodash";
|
|
8
|
+
import { FAILED_EVAL } from "../constants";
|
|
8
9
|
import { createEvaluator, createSafeEvaluator } from "./createEvaluator";
|
|
9
10
|
import { evaluateAstNode } from "./evaluateAstNode";
|
|
10
11
|
import { attrStr, findComponentName, isInsideTamagui, isPresent, objToStr } from "./extractHelpers";
|
|
@@ -12,10 +13,9 @@ import { findTopmostFunction } from "./findTopmostFunction";
|
|
|
12
13
|
import { getStaticBindingsForScope } from "./getStaticBindingsForScope";
|
|
13
14
|
import { literalToAst } from "./literalToAst";
|
|
14
15
|
import { loadTamagui } from "./loadTamagui";
|
|
16
|
+
import { logLines } from "./logLines";
|
|
15
17
|
import { normalizeTernaries } from "./normalizeTernaries";
|
|
16
18
|
import { removeUnusedHooks } from "./removeUnusedHooks";
|
|
17
|
-
const { mediaQueryConfig, postProcessStyles, pseudos } = CoreNode;
|
|
18
|
-
const FAILED_EVAL = Symbol("failed_style_eval");
|
|
19
19
|
const UNTOUCHED_PROPS = {
|
|
20
20
|
key: true,
|
|
21
21
|
style: true,
|
|
@@ -34,8 +34,9 @@ function createExtractor() {
|
|
|
34
34
|
format: "cjs"
|
|
35
35
|
});
|
|
36
36
|
let loadedTamaguiConfig;
|
|
37
|
+
let hasLogged = false;
|
|
37
38
|
return {
|
|
38
|
-
|
|
39
|
+
getTamagui() {
|
|
39
40
|
return loadedTamaguiConfig;
|
|
40
41
|
},
|
|
41
42
|
parse: (fileOrPath, {
|
|
@@ -46,7 +47,10 @@ function createExtractor() {
|
|
|
46
47
|
sourcePath = "",
|
|
47
48
|
onExtractTag,
|
|
48
49
|
getFlattenedNode,
|
|
49
|
-
|
|
50
|
+
disableExtraction,
|
|
51
|
+
disableExtractInlineMedia,
|
|
52
|
+
disableExtractVariables,
|
|
53
|
+
disableDebugAttr,
|
|
50
54
|
...props
|
|
51
55
|
}) => {
|
|
52
56
|
if (sourcePath === "") {
|
|
@@ -61,13 +65,18 @@ function createExtractor() {
|
|
|
61
65
|
});
|
|
62
66
|
loadedTamaguiConfig = tamaguiConfig;
|
|
63
67
|
const defaultTheme = tamaguiConfig.themes[Object.keys(tamaguiConfig.themes)[0]];
|
|
64
|
-
let doesUseValidImport = false;
|
|
65
68
|
const body = fileOrPath.type === "Program" ? fileOrPath.get("body") : fileOrPath.program.body;
|
|
66
|
-
const isInternalImport = /* @__PURE__ */ __name((importStr) =>
|
|
67
|
-
|
|
69
|
+
const isInternalImport = /* @__PURE__ */ __name((importStr) => {
|
|
70
|
+
return isInsideTamagui(sourcePath) && importStr[0] === ".";
|
|
71
|
+
}, "isInternalImport");
|
|
72
|
+
const validComponents = Object.keys(components).filter((key) => {
|
|
73
|
+
var _a;
|
|
74
|
+
return key[0].toUpperCase() === key[0] && !!((_a = components[key]) == null ? void 0 : _a.staticConfig);
|
|
75
|
+
}).reduce((obj, name) => {
|
|
68
76
|
obj[name] = components[name];
|
|
69
77
|
return obj;
|
|
70
78
|
}, {});
|
|
79
|
+
let doesUseValidImport = false;
|
|
71
80
|
for (const bodyPath of body) {
|
|
72
81
|
if (bodyPath.type !== "ImportDeclaration")
|
|
73
82
|
continue;
|
|
@@ -90,12 +99,17 @@ function createExtractor() {
|
|
|
90
99
|
return null;
|
|
91
100
|
}
|
|
92
101
|
let couldntParse = false;
|
|
93
|
-
const modifiedComponents = new Set();
|
|
102
|
+
const modifiedComponents = /* @__PURE__ */ new Set();
|
|
94
103
|
const bindingCache = {};
|
|
95
104
|
const callTraverse = /* @__PURE__ */ __name((a) => {
|
|
96
105
|
return fileOrPath.type === "File" ? traverse(fileOrPath, a) : fileOrPath.traverse(a);
|
|
97
106
|
}, "callTraverse");
|
|
98
107
|
let programPath;
|
|
108
|
+
const res = {
|
|
109
|
+
flattened: 0,
|
|
110
|
+
optimized: 0,
|
|
111
|
+
modified: 0
|
|
112
|
+
};
|
|
99
113
|
callTraverse({
|
|
100
114
|
Program: {
|
|
101
115
|
enter(path) {
|
|
@@ -103,11 +117,12 @@ function createExtractor() {
|
|
|
103
117
|
}
|
|
104
118
|
},
|
|
105
119
|
JSXElement(traversePath) {
|
|
120
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
106
121
|
const node = traversePath.node.openingElement;
|
|
107
122
|
const ogAttributes = node.attributes;
|
|
108
123
|
const componentName = findComponentName(traversePath.scope);
|
|
109
124
|
const closingElement = traversePath.node.closingElement;
|
|
110
|
-
if (t.isJSXMemberExpression(closingElement
|
|
125
|
+
if (t.isJSXMemberExpression(closingElement == null ? void 0 : closingElement.name) || !t.isJSXIdentifier(node.name)) {
|
|
111
126
|
return;
|
|
112
127
|
}
|
|
113
128
|
const binding = traversePath.scope.getBinding(node.name.name);
|
|
@@ -127,11 +142,29 @@ function createExtractor() {
|
|
|
127
142
|
if (!component || !component.staticConfig) {
|
|
128
143
|
return;
|
|
129
144
|
}
|
|
130
|
-
const { staticConfig } = component;
|
|
131
145
|
const originalNodeName = node.name.name;
|
|
146
|
+
if (shouldPrintDebug) {
|
|
147
|
+
console.log(`
|
|
148
|
+
<${originalNodeName} />`);
|
|
149
|
+
}
|
|
150
|
+
const filePath = sourcePath.replace(process.cwd(), ".");
|
|
151
|
+
const lineNumbers = node.loc ? node.loc.start.line + (node.loc.start.line !== node.loc.end.line ? `-${node.loc.end.line}` : "") : "";
|
|
152
|
+
if (shouldAddDebugProp && !disableDebugAttr) {
|
|
153
|
+
const preName = componentName ? `${componentName}:` : "";
|
|
154
|
+
res.modified++;
|
|
155
|
+
node.attributes.unshift(t.jsxAttribute(t.jsxIdentifier("data-is"), t.stringLiteral(` ${preName}${node.name.name} ${filePath.replace("./", "")}:${lineNumbers} `)));
|
|
156
|
+
}
|
|
157
|
+
if (disableExtraction) {
|
|
158
|
+
if (!hasLogged) {
|
|
159
|
+
console.log("\u{1F95A} Tamagui disableExtraction set: no CSS or optimizations will be run");
|
|
160
|
+
hasLogged = true;
|
|
161
|
+
}
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
const { staticConfig } = component;
|
|
132
165
|
const isTextView = staticConfig.isText || false;
|
|
133
|
-
const validStyles = staticConfig
|
|
134
|
-
let tagName = staticConfig.defaultProps
|
|
166
|
+
const validStyles = (_a = staticConfig == null ? void 0 : staticConfig.validStyles) != null ? _a : {};
|
|
167
|
+
let tagName = (_c = (_b = staticConfig.defaultProps) == null ? void 0 : _b.tag) != null ? _c : isTextView ? "span" : "div";
|
|
135
168
|
traversePath.get("openingElement").get("attributes").forEach((path) => {
|
|
136
169
|
const attr = path.node;
|
|
137
170
|
if (t.isJSXSpreadAttribute(attr))
|
|
@@ -144,27 +177,23 @@ function createExtractor() {
|
|
|
144
177
|
tagName = val.value;
|
|
145
178
|
});
|
|
146
179
|
const flatNode = getFlattenedNode({ isTextView, tag: tagName });
|
|
147
|
-
const deoptProps = new Set([
|
|
148
|
-
...props.deoptProps
|
|
149
|
-
...staticConfig.deoptProps
|
|
180
|
+
const deoptProps = /* @__PURE__ */ new Set([
|
|
181
|
+
...(_d = props.deoptProps) != null ? _d : [],
|
|
182
|
+
...(_e = staticConfig.deoptProps) != null ? _e : []
|
|
150
183
|
]);
|
|
151
|
-
const excludeProps = new Set(props.excludeProps
|
|
184
|
+
const excludeProps = new Set((_f = props.excludeProps) != null ? _f : []);
|
|
152
185
|
const isExcludedProp = /* @__PURE__ */ __name((name) => {
|
|
153
|
-
const
|
|
154
|
-
if (
|
|
186
|
+
const res2 = excludeProps.has(name);
|
|
187
|
+
if (res2 && shouldPrintDebug)
|
|
155
188
|
console.log(` excluding ${name}`);
|
|
156
|
-
return
|
|
189
|
+
return res2;
|
|
157
190
|
}, "isExcludedProp");
|
|
158
191
|
const isDeoptedProp = /* @__PURE__ */ __name((name) => {
|
|
159
|
-
const
|
|
160
|
-
if (
|
|
192
|
+
const res2 = deoptProps.has(name);
|
|
193
|
+
if (res2 && shouldPrintDebug)
|
|
161
194
|
console.log(` deopting ${name}`);
|
|
162
|
-
return
|
|
195
|
+
return res2;
|
|
163
196
|
}, "isDeoptedProp");
|
|
164
|
-
if (shouldPrintDebug) {
|
|
165
|
-
console.log(`
|
|
166
|
-
<${originalNodeName} />`);
|
|
167
|
-
}
|
|
168
197
|
const staticNamespace = getStaticBindingsForScope(traversePath.scope, importsWhitelist, sourcePath, bindingCache, shouldPrintDebug);
|
|
169
198
|
const attemptEval = !evaluateVars ? evaluateAstNode : createEvaluator({
|
|
170
199
|
tamaguiConfig,
|
|
@@ -237,11 +266,11 @@ function createExtractor() {
|
|
|
237
266
|
let isFlattened = false;
|
|
238
267
|
attrs = traversePath.get("openingElement").get("attributes").flatMap((path) => {
|
|
239
268
|
try {
|
|
240
|
-
const
|
|
241
|
-
if (!
|
|
269
|
+
const res2 = evaluateAttribute(path);
|
|
270
|
+
if (!res2) {
|
|
242
271
|
path.remove();
|
|
243
272
|
}
|
|
244
|
-
return
|
|
273
|
+
return res2;
|
|
245
274
|
} catch (err) {
|
|
246
275
|
console.log("Error extracting attribute", err.message, err.stack);
|
|
247
276
|
console.log("node", path.node);
|
|
@@ -251,8 +280,12 @@ function createExtractor() {
|
|
|
251
280
|
};
|
|
252
281
|
}
|
|
253
282
|
}).flat(4).filter(isPresent);
|
|
283
|
+
if (shouldPrintDebug) {
|
|
284
|
+
console.log(" - attrs (before):\n", logLines(attrs.map(attrStr).join(", ")));
|
|
285
|
+
}
|
|
254
286
|
function isStaticAttributeName(name) {
|
|
255
|
-
|
|
287
|
+
var _a2, _b2;
|
|
288
|
+
return !!(!!validStyles[name] || ((_a2 = staticConfig.validPropsExtra) == null ? void 0 : _a2[name]) || !!pseudos[name] || ((_b2 = staticConfig.variants) == null ? void 0 : _b2[name]) || tamaguiConfig.shorthands[name] || (name[0] === "$" ? !!mediaQueryConfig[name.slice(1)] : false));
|
|
256
289
|
}
|
|
257
290
|
__name(isStaticAttributeName, "isStaticAttributeName");
|
|
258
291
|
function isExtractable(obj) {
|
|
@@ -363,7 +396,10 @@ function createExtractor() {
|
|
|
363
396
|
if (UNTOUCHED_PROPS[name]) {
|
|
364
397
|
return attr;
|
|
365
398
|
}
|
|
366
|
-
if (name[0] === "$" && t.isJSXExpressionContainer(attribute
|
|
399
|
+
if (name[0] === "$" && t.isJSXExpressionContainer(attribute == null ? void 0 : attribute.value)) {
|
|
400
|
+
if (disableExtractInlineMedia) {
|
|
401
|
+
return attr;
|
|
402
|
+
}
|
|
367
403
|
const shortname = name.slice(1);
|
|
368
404
|
if (mediaQueryConfig[shortname]) {
|
|
369
405
|
const expression = attribute.value.expression;
|
|
@@ -381,7 +417,7 @@ function createExtractor() {
|
|
|
381
417
|
}
|
|
382
418
|
}
|
|
383
419
|
const [value, valuePath] = (() => {
|
|
384
|
-
if (t.isJSXExpressionContainer(attribute
|
|
420
|
+
if (t.isJSXExpressionContainer(attribute == null ? void 0 : attribute.value)) {
|
|
385
421
|
return [attribute.value.expression, path.get("value")];
|
|
386
422
|
} else {
|
|
387
423
|
return [attribute.value, path.get("value")];
|
|
@@ -403,6 +439,17 @@ function createExtractor() {
|
|
|
403
439
|
value: path.node
|
|
404
440
|
};
|
|
405
441
|
}
|
|
442
|
+
if (disableExtractVariables) {
|
|
443
|
+
if (value) {
|
|
444
|
+
if (value.type === "StringLiteral" && value.value[0] === "$") {
|
|
445
|
+
if (shouldPrintDebug) {
|
|
446
|
+
console.log(" native, disable extract var", value.value);
|
|
447
|
+
}
|
|
448
|
+
inlinePropCount++;
|
|
449
|
+
return attr;
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
}
|
|
406
453
|
const styleValue = attemptEvalSafe(value);
|
|
407
454
|
if (!isStaticAttributeName(name)) {
|
|
408
455
|
let keys = [name];
|
|
@@ -423,7 +470,9 @@ function createExtractor() {
|
|
|
423
470
|
if (styleValue !== FAILED_EVAL) {
|
|
424
471
|
return {
|
|
425
472
|
type: "style",
|
|
426
|
-
value: { [name]: styleValue }
|
|
473
|
+
value: { [name]: styleValue },
|
|
474
|
+
name,
|
|
475
|
+
attr: path.node
|
|
427
476
|
};
|
|
428
477
|
}
|
|
429
478
|
if (t.isBinaryExpression(value)) {
|
|
@@ -535,9 +584,6 @@ function createExtractor() {
|
|
|
535
584
|
__name(getStaticLogical, "getStaticLogical");
|
|
536
585
|
}
|
|
537
586
|
__name(evaluateAttribute, "evaluateAttribute");
|
|
538
|
-
if (shouldPrintDebug) {
|
|
539
|
-
console.log(" - attrs (before): ", attrs.map(attrStr).join(", "));
|
|
540
|
-
}
|
|
541
587
|
node.attributes = attrs.filter(isAttr).map((x) => x.value);
|
|
542
588
|
if (couldntParse) {
|
|
543
589
|
if (shouldPrintDebug) {
|
|
@@ -550,8 +596,6 @@ function createExtractor() {
|
|
|
550
596
|
if (parentFn) {
|
|
551
597
|
modifiedComponents.add(parentFn);
|
|
552
598
|
}
|
|
553
|
-
const filePath = sourcePath.replace(process.cwd(), ".");
|
|
554
|
-
const lineNumbers = node.loc ? node.loc.start.line + (node.loc.start.line !== node.loc.end.line ? `-${node.loc.end.line}` : "") : "";
|
|
555
599
|
let ternaries = [];
|
|
556
600
|
attrs = attrs.reduce((out, cur) => {
|
|
557
601
|
const next = attrs[attrs.indexOf(cur) + 1];
|
|
@@ -612,16 +656,19 @@ function createExtractor() {
|
|
|
612
656
|
const shouldFlatten = !shouldDeopt && inlinePropCount === 0 && !hasSpread && staticConfig.neverFlatten !== true && (staticConfig.neverFlatten === "jsx" ? hasOnlyStringChildren : true);
|
|
613
657
|
if (!shouldFlatten) {
|
|
614
658
|
attrs = attrs.reduce((acc, cur) => {
|
|
659
|
+
var _a2, _b2;
|
|
615
660
|
if (cur.type === "style") {
|
|
616
661
|
for (const key in cur.value) {
|
|
617
|
-
const
|
|
662
|
+
const shouldEnsureOverridden = !!((_a2 = staticConfig.ensureOverriddenProp) == null ? void 0 : _a2[key]);
|
|
618
663
|
const isSetInAttrsAlready = attrs.some((x) => x.type === "attr" && x.value.type === "JSXAttribute" && x.value.name.name === key);
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
664
|
+
if (!isSetInAttrsAlready) {
|
|
665
|
+
const isVariant = !!((_b2 = staticConfig.variants) == null ? void 0 : _b2[cur.name || ""]);
|
|
666
|
+
if (isVariant || shouldEnsureOverridden) {
|
|
667
|
+
acc.push({
|
|
668
|
+
type: "attr",
|
|
669
|
+
value: cur.attr || t.jsxAttribute(t.jsxIdentifier(key), t.jsxExpressionContainer(t.nullLiteral()))
|
|
670
|
+
});
|
|
671
|
+
}
|
|
625
672
|
}
|
|
626
673
|
}
|
|
627
674
|
}
|
|
@@ -630,15 +677,15 @@ function createExtractor() {
|
|
|
630
677
|
}, []);
|
|
631
678
|
}
|
|
632
679
|
if (shouldPrintDebug) {
|
|
633
|
-
console.log(" - attrs (flattened):
|
|
680
|
+
console.log(" - attrs (flattened): \n", logLines(attrs.map(attrStr).join(", ")));
|
|
634
681
|
}
|
|
635
682
|
attrs = attrs.reduce((acc, cur) => {
|
|
636
683
|
if (cur.type !== "attr" || !t.isJSXAttribute(cur.value) || typeof cur.value.name.name !== "string") {
|
|
637
684
|
if (cur.type === "style") {
|
|
638
|
-
|
|
685
|
+
let key = Object.keys(cur.value)[0];
|
|
639
686
|
if (!validStyles[key] && !pseudos[key]) {
|
|
640
687
|
if (shouldPrintDebug) {
|
|
641
|
-
console.log("
|
|
688
|
+
console.log(" - ignoring (expanded already):", key);
|
|
642
689
|
}
|
|
643
690
|
return acc;
|
|
644
691
|
}
|
|
@@ -648,12 +695,12 @@ function createExtractor() {
|
|
|
648
695
|
return acc;
|
|
649
696
|
}, []);
|
|
650
697
|
if (shouldPrintDebug) {
|
|
651
|
-
console.log(" - attrs (evaluated styles):
|
|
698
|
+
console.log(" - attrs (evaluated styles): \n", logLines(attrs.map(attrStr).join(", ")));
|
|
652
699
|
}
|
|
653
700
|
let prev = null;
|
|
654
701
|
attrs = attrs.reduce((acc, cur) => {
|
|
655
702
|
if (cur.type === "style") {
|
|
656
|
-
if (prev
|
|
703
|
+
if ((prev == null ? void 0 : prev.type) === "style") {
|
|
657
704
|
Object.assign(prev.value, cur.value);
|
|
658
705
|
return acc;
|
|
659
706
|
}
|
|
@@ -663,9 +710,10 @@ function createExtractor() {
|
|
|
663
710
|
return acc;
|
|
664
711
|
}, []);
|
|
665
712
|
if (shouldPrintDebug) {
|
|
666
|
-
console.log(" - attrs (combined \u{1F500}):
|
|
713
|
+
console.log(" - attrs (combined \u{1F500}): \n", logLines(attrs.map(attrStr).join(", ")));
|
|
667
714
|
}
|
|
668
715
|
const getStyles = /* @__PURE__ */ __name((props2) => {
|
|
716
|
+
var _a2;
|
|
669
717
|
if (!props2)
|
|
670
718
|
return;
|
|
671
719
|
if (!!excludeProps.size) {
|
|
@@ -675,11 +723,12 @@ function createExtractor() {
|
|
|
675
723
|
}
|
|
676
724
|
}
|
|
677
725
|
const out = postProcessStyles(props2, staticConfig, defaultTheme);
|
|
678
|
-
const next = out
|
|
726
|
+
const next = (_a2 = out == null ? void 0 : out.style) != null ? _a2 : props2;
|
|
679
727
|
if (shouldPrintDebug) {
|
|
680
|
-
console.log("
|
|
681
|
-
console.log("
|
|
682
|
-
console.log("
|
|
728
|
+
console.log(" getStyles props >>\n", logLines(objToStr(props2)));
|
|
729
|
+
console.log(" getStyles next >>\n", logLines(objToStr(next)));
|
|
730
|
+
console.log(" getStyles style >>\n", logLines(objToStr(out.style)));
|
|
731
|
+
console.log(" getStyles viewp >>\n", logLines(objToStr(out.viewProps)));
|
|
683
732
|
}
|
|
684
733
|
if (staticConfig.validStyles) {
|
|
685
734
|
for (const key in next) {
|
|
@@ -690,9 +739,6 @@ function createExtractor() {
|
|
|
690
739
|
}
|
|
691
740
|
return next;
|
|
692
741
|
}, "getStyles");
|
|
693
|
-
if (shouldPrintDebug) {
|
|
694
|
-
console.log(" staticConfig.defaultProps", staticConfig.defaultProps);
|
|
695
|
-
}
|
|
696
742
|
const completeStylesProcessed = getStyles({
|
|
697
743
|
...staticConfig.defaultProps,
|
|
698
744
|
...completeStaticProps
|
|
@@ -712,8 +758,8 @@ function createExtractor() {
|
|
|
712
758
|
}
|
|
713
759
|
}
|
|
714
760
|
if (shouldPrintDebug) {
|
|
715
|
-
console.log("
|
|
716
|
-
console.log("
|
|
761
|
+
console.log(" completeStaticProps\n", logLines(objToStr(completeStaticProps)));
|
|
762
|
+
console.log(" completeStylesProcessed\n", logLines(objToStr(completeStylesProcessed)));
|
|
717
763
|
}
|
|
718
764
|
for (const attr of attrs) {
|
|
719
765
|
try {
|
|
@@ -733,7 +779,7 @@ function createExtractor() {
|
|
|
733
779
|
if (key in stylePropsTransform) {
|
|
734
780
|
next["transform"] = completeStylesProcessed["transform"];
|
|
735
781
|
} else {
|
|
736
|
-
next[key] = completeStylesProcessed[key]
|
|
782
|
+
next[key] = (_g = completeStylesProcessed[key]) != null ? _g : attr.value[key];
|
|
737
783
|
}
|
|
738
784
|
}
|
|
739
785
|
attr.value = next;
|
|
@@ -748,14 +794,7 @@ function createExtractor() {
|
|
|
748
794
|
}
|
|
749
795
|
}
|
|
750
796
|
if (shouldPrintDebug) {
|
|
751
|
-
console.log(" - attrs (after)
|
|
752
|
-
}
|
|
753
|
-
if (shouldAddDebugProp) {
|
|
754
|
-
const preName = componentName ? `${componentName}:` : "";
|
|
755
|
-
attrs.unshift({
|
|
756
|
-
type: "attr",
|
|
757
|
-
value: t.jsxAttribute(t.jsxIdentifier("data-is"), t.stringLiteral(` ${preName}${node.name.name} ${filePath.replace("./", "")}:${lineNumbers} `))
|
|
758
|
-
});
|
|
797
|
+
console.log(" - attrs (after):\n", logLines(attrs.map(attrStr).join(", ")));
|
|
759
798
|
}
|
|
760
799
|
if (shouldFlatten) {
|
|
761
800
|
if (shouldPrintDebug) {
|
|
@@ -763,15 +802,16 @@ function createExtractor() {
|
|
|
763
802
|
}
|
|
764
803
|
isFlattened = true;
|
|
765
804
|
node.name.name = flatNode;
|
|
766
|
-
|
|
805
|
+
res.flattened++;
|
|
767
806
|
if (closingElement) {
|
|
768
807
|
closingElement.name.name = flatNode;
|
|
769
808
|
}
|
|
770
809
|
}
|
|
771
810
|
if (shouldPrintDebug) {
|
|
772
811
|
console.log(" [\u274A] inline props ", inlinePropCount, shouldDeopt ? " deopted" : "", hasSpread ? " spread" : "", "!flatten", staticConfig.neverFlatten);
|
|
773
|
-
console.log(" - attrs (end)
|
|
812
|
+
console.log(" - attrs (end):\n", logLines(attrs.map(attrStr).join(", ")));
|
|
774
813
|
}
|
|
814
|
+
res.optimized++;
|
|
775
815
|
onExtractTag({
|
|
776
816
|
attrs,
|
|
777
817
|
node,
|
|
@@ -794,12 +834,12 @@ function createExtractor() {
|
|
|
794
834
|
removeUnusedHooks(comp, shouldPrintDebug);
|
|
795
835
|
}
|
|
796
836
|
}
|
|
837
|
+
return res;
|
|
797
838
|
}
|
|
798
839
|
};
|
|
799
840
|
}
|
|
800
841
|
__name(createExtractor, "createExtractor");
|
|
801
842
|
export {
|
|
802
|
-
FAILED_EVAL,
|
|
803
843
|
createExtractor
|
|
804
844
|
};
|
|
805
845
|
//# sourceMappingURL=createExtractor.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/extractor/createExtractor.ts"],
|
|
4
|
+
"sourcesContent": ["import traverse, { NodePath, Visitor } from '@babel/traverse'\nimport * as t from '@babel/types'\nimport type { StaticConfigParsed, TamaguiInternalConfig } from '@tamagui/core'\nimport { mediaQueryConfig, postProcessStyles, pseudos } from '@tamagui/core-node'\nimport { stylePropsTransform } from '@tamagui/helpers'\nimport { difference, pick } from 'lodash'\n\nimport { FAILED_EVAL } from '../constants'\nimport { ExtractedAttr, ExtractedAttrAttr, ExtractorParseProps, Ternary } from '../types'\nimport { createEvaluator, createSafeEvaluator } from './createEvaluator'\nimport { evaluateAstNode } from './evaluateAstNode'\nimport { attrStr, findComponentName, isInsideTamagui, isPresent, objToStr } from './extractHelpers'\nimport { findTopmostFunction } from './findTopmostFunction'\nimport { getStaticBindingsForScope } from './getStaticBindingsForScope'\nimport { literalToAst } from './literalToAst'\nimport { loadTamagui } from './loadTamagui'\nimport { logLines } from './logLines'\nimport { normalizeTernaries } from './normalizeTernaries'\nimport { removeUnusedHooks } from './removeUnusedHooks'\n\nconst UNTOUCHED_PROPS = {\n key: true,\n style: true,\n className: true,\n}\n\nconst isAttr = (x: ExtractedAttr): x is ExtractedAttrAttr => x.type === 'attr'\n\nconst validHooks = {\n useMedia: true,\n useTheme: true,\n}\n\nexport type Extractor = ReturnType<typeof createExtractor>\n\nconst createTernary = (x: Ternary) => x\n\nexport function createExtractor() {\n const shouldAddDebugProp =\n // really basic disable this for next.js because it messes with ssr\n !process.env.npm_package_dependencies_next &&\n process.env.TAMAGUI_TARGET !== 'native' &&\n process.env.IDENTIFY_TAGS !== 'false' &&\n (process.env.NODE_ENV === 'development' || process.env.DEBUG || process.env.IDENTIFY_TAGS)\n\n // ts imports\n require('esbuild-register/dist/node').register({\n target: 'es2019',\n format: 'cjs',\n })\n\n let loadedTamaguiConfig: TamaguiInternalConfig\n let hasLogged = false\n\n return {\n getTamagui() {\n return loadedTamaguiConfig\n },\n parse: (\n fileOrPath: NodePath<t.Program> | t.File,\n {\n config = 'tamagui.config.ts',\n importsWhitelist = ['constants.js'],\n evaluateVars = true,\n shouldPrintDebug = false,\n sourcePath = '',\n onExtractTag,\n getFlattenedNode,\n disableExtraction,\n disableExtractInlineMedia,\n disableExtractVariables,\n disableDebugAttr,\n ...props\n }: ExtractorParseProps\n ) => {\n if (sourcePath === '') {\n throw new Error(`Must provide a source file name`)\n }\n if (!Array.isArray(props.components)) {\n throw new Error(`Must provide components array with list of Tamagui component modules`)\n }\n\n // we require it after parse because we need to set some global/env stuff before importing\n // otherwise we'd import `rnw` and cause it to evaluate react-native-web which causes errors\n const { components, tamaguiConfig } = loadTamagui({\n config,\n components: props.components || ['tamagui'],\n })\n\n loadedTamaguiConfig = tamaguiConfig\n\n const defaultTheme = tamaguiConfig.themes[Object.keys(tamaguiConfig.themes)[0]]\n const body = fileOrPath.type === 'Program' ? fileOrPath.get('body') : fileOrPath.program.body\n\n /**\n * Step 1: Determine if importing any statically extractable components\n */\n const isInternalImport = (importStr: string) => {\n return isInsideTamagui(sourcePath) && importStr[0] === '.'\n }\n\n const validComponents: { [key: string]: any } = Object.keys(components)\n // check if uppercase to avoid hitting media query proxy before init\n .filter((key) => key[0].toUpperCase() === key[0] && !!components[key]?.staticConfig)\n .reduce((obj, name) => {\n obj[name] = components[name]\n return obj\n }, {})\n\n let doesUseValidImport = false\n\n for (const bodyPath of body) {\n if (bodyPath.type !== 'ImportDeclaration') continue\n const node = ('node' in bodyPath ? bodyPath.node : bodyPath) as any\n const from = node.source.value\n if (props.components.includes(from) || isInternalImport(from)) {\n if (\n node.specifiers.some((specifier) => {\n const name = specifier.local.name\n return validComponents[name] || validHooks[name]\n })\n ) {\n doesUseValidImport = true\n break\n }\n }\n }\n\n if (shouldPrintDebug) {\n console.log(sourcePath, { doesUseValidImport })\n }\n\n if (!doesUseValidImport) {\n return null\n }\n\n let couldntParse = false\n const modifiedComponents = new Set<NodePath<any>>()\n\n // only keeping a cache around per-file, reset it if it changes\n const bindingCache: Record<string, string | null> = {}\n\n const callTraverse = (a: Visitor<{}>) => {\n return fileOrPath.type === 'File' ? traverse(fileOrPath, a) : fileOrPath.traverse(a)\n }\n\n /**\n * Step 2: Statically extract from JSX < /> nodes\n */\n let programPath: NodePath<t.Program>\n\n const res = {\n flattened: 0,\n optimized: 0,\n modified: 0,\n }\n\n callTraverse({\n Program: {\n enter(path) {\n programPath = path\n },\n },\n JSXElement(traversePath) {\n const node = traversePath.node.openingElement\n const ogAttributes = node.attributes\n const componentName = findComponentName(traversePath.scope)\n const closingElement = traversePath.node.closingElement\n\n // skip non-identifier opening elements (member expressions, etc.)\n if (t.isJSXMemberExpression(closingElement?.name) || !t.isJSXIdentifier(node.name)) {\n return\n }\n\n // validate its a proper import from tamagui (or internally inside tamagui)\n const binding = traversePath.scope.getBinding(node.name.name)\n\n if (binding) {\n if (!t.isImportDeclaration(binding.path.parent)) {\n return\n }\n const source = binding.path.parent.source\n if (!props.components.includes(source.value) && !isInternalImport(source.value)) {\n return\n }\n if (!validComponents[binding.identifier.name]) {\n return\n }\n }\n\n const component = validComponents[node.name.name] as { staticConfig?: StaticConfigParsed }\n if (!component || !component.staticConfig) {\n return\n }\n\n const originalNodeName = node.name.name\n\n if (shouldPrintDebug) {\n console.log(`\\n<${originalNodeName} />`)\n }\n\n const filePath = sourcePath.replace(process.cwd(), '.')\n const lineNumbers = node.loc\n ? node.loc.start.line +\n (node.loc.start.line !== node.loc.end.line ? `-${node.loc.end.line}` : '')\n : ''\n\n // add data-is\n if (shouldAddDebugProp && !disableDebugAttr) {\n const preName = componentName ? `${componentName}:` : ''\n res.modified++\n node.attributes.unshift(\n t.jsxAttribute(\n t.jsxIdentifier('data-is'),\n t.stringLiteral(\n ` ${preName}${node.name.name} ${filePath.replace('./', '')}:${lineNumbers} `\n )\n )\n )\n }\n\n if (disableExtraction) {\n if (!hasLogged) {\n console.log('\uD83E\uDD5A Tamagui disableExtraction set: no CSS or optimizations will be run')\n hasLogged = true\n }\n return\n }\n\n const { staticConfig } = component\n const isTextView = staticConfig.isText || false\n const validStyles = staticConfig?.validStyles ?? {}\n\n // find tag=\"a\" tag=\"main\" etc dom indicators\n let tagName = staticConfig.defaultProps?.tag ?? (isTextView ? 'span' : 'div')\n traversePath\n .get('openingElement')\n .get('attributes')\n .forEach((path) => {\n const attr = path.node\n if (t.isJSXSpreadAttribute(attr)) return\n if (attr.name.name !== 'tag') return\n const val = attr.value\n if (!t.isStringLiteral(val)) return\n tagName = val.value\n })\n\n const flatNode = getFlattenedNode({ isTextView, tag: tagName })\n\n const deoptProps = new Set([\n ...(props.deoptProps ?? []),\n ...(staticConfig.deoptProps ?? []),\n ])\n const excludeProps = new Set(props.excludeProps ?? [])\n const isExcludedProp = (name: string) => {\n const res = excludeProps.has(name)\n if (res && shouldPrintDebug) console.log(` excluding ${name}`)\n return res\n }\n\n const isDeoptedProp = (name: string) => {\n const res = deoptProps.has(name)\n if (res && shouldPrintDebug) console.log(` deopting ${name}`)\n return res\n }\n\n // Generate scope object at this level\n const staticNamespace = getStaticBindingsForScope(\n traversePath.scope,\n importsWhitelist,\n sourcePath,\n bindingCache,\n shouldPrintDebug\n )\n\n const attemptEval = !evaluateVars\n ? evaluateAstNode\n : createEvaluator({\n tamaguiConfig,\n staticNamespace,\n sourcePath,\n traversePath,\n shouldPrintDebug,\n })\n const attemptEvalSafe = createSafeEvaluator(attemptEval)\n\n if (shouldPrintDebug) {\n console.log(' staticNamespace', Object.keys(staticNamespace).join(', '))\n }\n\n //\n // SPREADS SETUP\n //\n\n // TODO restore\n const hasDeopt = (obj: Object) => {\n return Object.keys(obj).some(isDeoptedProp)\n }\n\n // flatten any easily evaluatable spreads\n const flattenedAttrs: (t.JSXAttribute | t.JSXSpreadAttribute)[] = []\n traversePath\n .get('openingElement')\n .get('attributes')\n .forEach((path) => {\n const attr = path.node\n if (!t.isJSXSpreadAttribute(attr)) {\n flattenedAttrs.push(attr)\n return\n }\n let arg: any\n try {\n arg = attemptEval(attr.argument)\n } catch (e: any) {\n if (shouldPrintDebug) {\n console.log(' couldnt parse spread', e.message)\n }\n flattenedAttrs.push(attr)\n return\n }\n if (typeof arg !== 'undefined') {\n try {\n if (typeof arg !== 'object' || arg == null) {\n if (shouldPrintDebug) {\n console.log(' non object or null arg', arg)\n }\n flattenedAttrs.push(attr)\n } else {\n for (const k in arg) {\n const value = arg[k]\n // this is a null prop:\n if (!value && typeof value === 'object') {\n console.log('shouldnt we handle this?', k, value, arg)\n continue\n }\n flattenedAttrs.push(\n t.jsxAttribute(\n t.jsxIdentifier(k),\n t.jsxExpressionContainer(literalToAst(value))\n )\n )\n }\n }\n } catch (err) {\n console.warn('cant parse spread, caught err', err)\n couldntParse = true\n }\n }\n })\n\n if (couldntParse) {\n return\n }\n\n // set flattened\n node.attributes = flattenedAttrs\n\n // add in default props\n if (staticConfig.defaultProps) {\n for (const key in staticConfig.defaultProps) {\n const serialize = require('babel-literal-to-ast')\n const val = staticConfig.defaultProps[key]\n node.attributes.unshift(\n t.jsxAttribute(\n t.jsxIdentifier(key),\n typeof val === 'string'\n ? t.stringLiteral(val)\n : t.jsxExpressionContainer(serialize(val))\n )\n )\n }\n }\n\n let attrs: ExtractedAttr[] = []\n let shouldDeopt = false\n let inlinePropCount = 0\n let isFlattened = false\n\n // RUN first pass\n\n // normalize all conditionals so we can evaluate away easier later\n // at the same time lets normalize shorthand media queries into spreads:\n // that way we can parse them with the same logic later on\n //\n // {...media.sm && { color: x ? 'red' : 'blue' }}\n // => {...media.sm && x && { color: 'red' }}\n // => {...media.sm && !x && { color: 'blue' }}\n //\n // $sm={{ color: 'red' }}\n // => {...media.sm && { color: 'red' }}\n //\n // $sm={{ color: x ? 'red' : 'blue' }}\n // => {...media.sm && x && { color: 'red' }}\n // => {...media.sm && !x && { color: 'blue' }}\n\n attrs = traversePath\n .get('openingElement')\n .get('attributes')\n .flatMap((path) => {\n try {\n const res = evaluateAttribute(path)\n if (!res) {\n path.remove()\n }\n return res\n } catch (err: any) {\n console.log('Error extracting attribute', err.message, err.stack)\n console.log('node', path.node)\n return {\n type: 'attr',\n value: path.node,\n } as const\n }\n })\n .flat(4)\n .filter(isPresent)\n\n if (shouldPrintDebug) {\n console.log(' - attrs (before):\\n', logLines(attrs.map(attrStr).join(', ')))\n }\n\n function isStaticAttributeName(name: string) {\n return !!(\n !!validStyles[name] ||\n staticConfig.validPropsExtra?.[name] ||\n !!pseudos[name] ||\n staticConfig.variants?.[name] ||\n tamaguiConfig.shorthands[name] ||\n (name[0] === '$' ? !!mediaQueryConfig[name.slice(1)] : false)\n )\n }\n\n function isExtractable(obj: t.Node): obj is t.ObjectExpression {\n return (\n t.isObjectExpression(obj) &&\n obj.properties.every((prop) => {\n if (!t.isObjectProperty(prop)) {\n console.log('not object prop', prop)\n return false\n }\n const propName = prop.key['name']\n if (!isStaticAttributeName(propName) && propName !== 'tag') {\n if (shouldPrintDebug) {\n console.log(' not a valid style prop!', propName)\n }\n return false\n }\n return true\n })\n )\n }\n\n // side <= { color: 'red', background: x ? 'red' : 'green' }\n // | => Ternary<test, { color: 'red' }, null>\n // | => Ternary<test && x, { background: 'red' }, null>\n // | => Ternary<test && !x, { background: 'green' }, null>\n function createTernariesFromObjectProperties(\n test: t.Expression,\n side: t.Expression | null,\n ternaryPartial: Partial<Ternary> = {}\n ): null | Ternary[] {\n if (!side) {\n return null\n }\n if (!isExtractable(side)) {\n throw new Error('not extractable')\n }\n return side.properties.flatMap((property) => {\n if (!t.isObjectProperty(property)) {\n throw new Error('expected object property')\n }\n // this could be a recurse here if we want to get fancy\n if (t.isConditionalExpression(property.value)) {\n // merge up into the parent conditional, split into two\n const [truthy, falsy] = [\n t.objectExpression([t.objectProperty(property.key, property.value.consequent)]),\n t.objectExpression([t.objectProperty(property.key, property.value.alternate)]),\n ].map((x) => attemptEval(x))\n return [\n createTernary({\n remove() {},\n ...ternaryPartial,\n test: t.logicalExpression('&&', test, property.value.test),\n consequent: truthy,\n alternate: null,\n }),\n createTernary({\n ...ternaryPartial,\n test: t.logicalExpression(\n '&&',\n test,\n t.unaryExpression('!', property.value.test)\n ),\n consequent: falsy,\n alternate: null,\n remove() {},\n }),\n ]\n }\n const obj = t.objectExpression([t.objectProperty(property.key, property.value)])\n const consequent = attemptEval(obj)\n return createTernary({\n remove() {},\n ...ternaryPartial,\n test,\n consequent,\n alternate: null,\n })\n })\n }\n\n // START function evaluateAttribute\n function evaluateAttribute(\n path: NodePath<t.JSXAttribute | t.JSXSpreadAttribute>\n ): ExtractedAttr | ExtractedAttr[] | null {\n const attribute = path.node\n const attr: ExtractedAttr = { type: 'attr', value: attribute }\n // ...spreads\n if (t.isJSXSpreadAttribute(attribute)) {\n const arg = attribute.argument\n const conditional = t.isConditionalExpression(arg)\n ? // <YStack {...isSmall ? { color: 'red } : { color: 'blue }}\n ([arg.test, arg.consequent, arg.alternate] as const)\n : t.isLogicalExpression(arg) && arg.operator === '&&'\n ? // <YStack {...isSmall && { color: 'red }}\n ([arg.left, arg.right, null] as const)\n : null\n\n if (conditional) {\n const [test, alt, cons] = conditional\n if (!test) throw new Error(`no test`)\n if ([alt, cons].some((side) => side && !isExtractable(side))) {\n if (shouldPrintDebug) {\n console.log('not extractable', alt, cons)\n }\n return attr\n }\n // split into individual ternaries per object property\n return [\n ...(createTernariesFromObjectProperties(test, alt) || []),\n ...((cons &&\n createTernariesFromObjectProperties(t.unaryExpression('!', test), cons)) ||\n []),\n ].map((ternary) => ({\n type: 'ternary',\n value: ternary,\n }))\n }\n }\n // END ...spreads\n\n // directly keep these\n // couldn't evaluate spread, undefined name, or name is not string\n if (\n t.isJSXSpreadAttribute(attribute) ||\n !attribute.name ||\n typeof attribute.name.name !== 'string'\n ) {\n inlinePropCount++\n return attr\n }\n\n const name = attribute.name.name\n\n if (isExcludedProp(name)) {\n return null\n }\n\n // can still optimize the object... see hoverStyle on native\n if (isDeoptedProp(name)) {\n if (shouldPrintDebug) {\n console.log(' ! inlining, deopt prop', name)\n }\n inlinePropCount++\n return attr\n }\n\n // pass className, key, and style props through untouched\n if (UNTOUCHED_PROPS[name]) {\n return attr\n }\n\n // shorthand media queries\n if (name[0] === '$' && t.isJSXExpressionContainer(attribute?.value)) {\n // allow disabling this extraction\n if (disableExtractInlineMedia) {\n return attr\n }\n\n const shortname = name.slice(1)\n if (mediaQueryConfig[shortname]) {\n const expression = attribute.value.expression\n if (!t.isJSXEmptyExpression(expression)) {\n const ternaries = createTernariesFromObjectProperties(\n t.stringLiteral(shortname),\n expression,\n {\n inlineMediaQuery: shortname,\n }\n )\n if (ternaries) {\n return ternaries.map((value) => ({\n type: 'ternary',\n value,\n }))\n }\n }\n }\n }\n\n const [value, valuePath] = (() => {\n if (t.isJSXExpressionContainer(attribute?.value)) {\n return [attribute.value.expression!, path.get('value')!] as const\n } else {\n return [attribute.value!, path.get('value')!] as const\n }\n })()\n\n const remove = () => {\n Array.isArray(valuePath) ? valuePath.map((p) => p.remove()) : valuePath.remove()\n }\n\n if (name === 'ref') {\n if (shouldPrintDebug) {\n console.log(' ! inlining, ref', name)\n }\n inlinePropCount++\n return attr\n }\n\n if (name === 'tag') {\n return {\n type: 'attr',\n value: path.node,\n }\n }\n\n // native shouldn't extract variables\n if (disableExtractVariables) {\n if (value) {\n if (value.type === 'StringLiteral' && value.value[0] === '$') {\n if (shouldPrintDebug) {\n console.log(' native, disable extract var', value.value)\n }\n inlinePropCount++\n return attr\n }\n }\n }\n\n // if value can be evaluated, extract it and filter it out\n const styleValue = attemptEvalSafe(value)\n\n // never flatten if a prop isn't a valid static attribute\n // only post prop-mapping\n if (!isStaticAttributeName(name)) {\n let keys = [name]\n if (staticConfig.propMapper) {\n // for now passing empty props {}, a bit odd, need to at least document\n // for now we don't expose custom components so just noting behavior\n const out = staticConfig.propMapper(\n name,\n styleValue,\n defaultTheme,\n staticConfig.defaultProps\n )\n if (out) {\n keys = Object.keys(out)\n }\n }\n if (keys.some((k) => !isStaticAttributeName(k) && k !== 'tag')) {\n if (shouldPrintDebug) {\n console.log(' ! inlining, not static attribute name', name)\n }\n inlinePropCount++\n return attr\n }\n }\n\n // FAILED = dynamic or ternary, keep going\n if (styleValue !== FAILED_EVAL) {\n return {\n type: 'style',\n value: { [name]: styleValue },\n name,\n attr: path.node,\n }\n }\n\n // ternaries!\n\n // binary ternary, we can eventually make this smarter but step 1\n // basically for the common use case of:\n // opacity={(conditional ? 0 : 1) * scale}\n if (t.isBinaryExpression(value)) {\n const { operator, left, right } = value\n // if one side is a ternary, and the other side is evaluatable, we can maybe extract\n const lVal = attemptEvalSafe(left)\n const rVal = attemptEvalSafe(right)\n if (shouldPrintDebug) {\n console.log(` evalBinaryExpression lVal ${String(lVal)}, rVal ${String(rVal)}`)\n }\n if (lVal !== FAILED_EVAL && t.isConditionalExpression(right)) {\n const ternary = addBinaryConditional(operator, left, right)\n if (ternary) return ternary\n }\n if (rVal !== FAILED_EVAL && t.isConditionalExpression(left)) {\n const ternary = addBinaryConditional(operator, right, left)\n if (ternary) return ternary\n }\n if (shouldPrintDebug) {\n console.log(` evalBinaryExpression cant extract`)\n }\n inlinePropCount++\n return attr\n }\n\n const staticConditional = getStaticConditional(value)\n if (staticConditional) {\n return { type: 'ternary', value: staticConditional }\n }\n\n const staticLogical = getStaticLogical(value)\n if (staticLogical) {\n return { type: 'ternary', value: staticLogical }\n }\n\n if (shouldPrintDebug) {\n console.log(' ! inline prop via no match', name, value.type)\n }\n // if we've made it this far, the prop stays inline\n inlinePropCount++\n\n //\n // RETURN ATTR\n //\n return attr\n\n // attr helpers:\n function addBinaryConditional(\n operator: any,\n staticExpr: any,\n cond: t.ConditionalExpression\n ): ExtractedAttr | null {\n if (getStaticConditional(cond)) {\n const alt = attemptEval(t.binaryExpression(operator, staticExpr, cond.alternate))\n const cons = attemptEval(t.binaryExpression(operator, staticExpr, cond.consequent))\n if (shouldPrintDebug) {\n console.log(' binaryConditional', cond.test, cons, alt)\n }\n return {\n type: 'ternary',\n value: {\n test: cond.test,\n remove,\n alternate: { [name]: alt },\n consequent: { [name]: cons },\n },\n }\n }\n return null\n }\n\n function getStaticConditional(value: t.Node): Ternary | null {\n if (t.isConditionalExpression(value)) {\n try {\n if (shouldPrintDebug) {\n console.log('attempt', value.alternate, value.consequent)\n }\n const aVal = attemptEval(value.alternate)\n const cVal = attemptEval(value.consequent)\n if (shouldPrintDebug) {\n const type = value.test.type\n console.log(' static ternary', type, cVal, aVal)\n }\n return {\n test: value.test,\n remove,\n consequent: { [name]: cVal },\n alternate: { [name]: aVal },\n }\n } catch (err: any) {\n if (shouldPrintDebug) {\n console.log(' cant eval ternary', err.message)\n }\n }\n }\n return null\n }\n\n function getStaticLogical(value: t.Node): Ternary | null {\n if (t.isLogicalExpression(value)) {\n if (value.operator === '&&') {\n try {\n const val = attemptEval(value.right)\n if (shouldPrintDebug) {\n console.log(' staticLogical', value.left, name, val)\n }\n return {\n test: value.left,\n remove,\n consequent: { [name]: val },\n alternate: null,\n }\n } catch (err) {\n if (shouldPrintDebug) {\n console.log(' cant static eval logical', err)\n }\n }\n }\n }\n return null\n }\n } // END function evaluateAttribute\n\n // now update to new values\n node.attributes = attrs.filter(isAttr).map((x) => x.value)\n\n if (couldntParse) {\n if (shouldPrintDebug) {\n console.log(` cancel:`, { couldntParse, shouldDeopt })\n }\n node.attributes = ogAttributes\n return\n }\n\n // before deopt, can still optimize\n const parentFn = findTopmostFunction(traversePath)\n if (parentFn) {\n modifiedComponents.add(parentFn)\n }\n\n // combine ternaries\n let ternaries: Ternary[] = []\n attrs = attrs\n .reduce<(ExtractedAttr | ExtractedAttr[])[]>((out, cur) => {\n const next = attrs[attrs.indexOf(cur) + 1]\n if (cur.type === 'ternary') {\n ternaries.push(cur.value)\n }\n if ((!next || next.type !== 'ternary') && ternaries.length) {\n // finish, process\n const normalized = normalizeTernaries(ternaries).map(\n ({ alternate, consequent, ...rest }) => {\n return {\n type: 'ternary' as const,\n value: {\n ...rest,\n alternate: alternate || null,\n consequent: consequent || null,\n },\n }\n }\n )\n try {\n return [...out, ...normalized]\n } finally {\n if (shouldPrintDebug) {\n console.log(\n ` normalizeTernaries (${ternaries.length} => ${normalized.length})`\n )\n }\n ternaries = []\n }\n }\n if (cur.type === 'ternary') {\n return out\n }\n out.push(cur)\n return out\n }, [])\n .flat()\n\n // evaluates all static attributes into a simple object\n const completeStaticProps = {\n ...Object.keys(attrs).reduce((acc, index) => {\n const cur = attrs[index] as ExtractedAttr\n if (cur.type === 'style') {\n Object.assign(acc, cur.value)\n }\n if (cur.type === 'attr') {\n if (t.isJSXSpreadAttribute(cur.value)) {\n return acc\n }\n if (!t.isJSXIdentifier(cur.value.name)) {\n return acc\n }\n const key = cur.value.name.name\n // undefined = boolean true\n const value = attemptEvalSafe(cur.value.value || t.booleanLiteral(true))\n if (value === FAILED_EVAL) {\n return acc\n }\n acc[key] = value\n }\n return acc\n }, {}),\n }\n\n // flatten logic!\n // fairly simple check to see if all children are text\n const hasSpread = node.attributes.some((x) => t.isJSXSpreadAttribute(x))\n const hasOnlyStringChildren =\n !hasSpread &&\n (node.selfClosing ||\n (traversePath.node.children &&\n traversePath.node.children.every((x) => x.type === 'JSXText')))\n const shouldFlatten =\n !shouldDeopt &&\n inlinePropCount === 0 &&\n !hasSpread &&\n staticConfig.neverFlatten !== true &&\n (staticConfig.neverFlatten === 'jsx' ? hasOnlyStringChildren : true)\n\n // insert overrides - this inserts null props for things that are set in classNames\n // only when not flattening, so the downstream component can skip applying those styles\n if (!shouldFlatten) {\n attrs = attrs.reduce<ExtractedAttr[]>((acc, cur) => {\n if (cur.type === 'style') {\n // TODO need to loop over initial props not just style props\n for (const key in cur.value) {\n const shouldEnsureOverridden = !!staticConfig.ensureOverriddenProp?.[key]\n const isSetInAttrsAlready = attrs.some(\n (x) =>\n x.type === 'attr' &&\n x.value.type === 'JSXAttribute' &&\n x.value.name.name === key\n )\n\n if (!isSetInAttrsAlready) {\n const isVariant = !!staticConfig.variants?.[cur.name || '']\n if (isVariant || shouldEnsureOverridden) {\n acc.push({\n type: 'attr',\n value:\n cur.attr ||\n t.jsxAttribute(\n t.jsxIdentifier(key),\n t.jsxExpressionContainer(t.nullLiteral())\n ),\n })\n }\n }\n }\n }\n acc.push(cur)\n return acc\n }, [])\n }\n\n if (shouldPrintDebug) {\n console.log(' - attrs (flattened): \\n', logLines(attrs.map(attrStr).join(', ')))\n }\n\n // evaluate away purely style props\n attrs = attrs.reduce<ExtractedAttr[]>((acc, cur) => {\n if (\n cur.type !== 'attr' ||\n !t.isJSXAttribute(cur.value) ||\n typeof cur.value.name.name !== 'string'\n ) {\n if (cur.type === 'style') {\n let key = Object.keys(cur.value)[0]\n // const fullKey = tamaguiConfig.shorthands[key]\n // // expand shorthand here\n // if (fullKey) {\n // cur.value = { [fullKey]: cur.value[key] }\n // key = fullKey\n // }\n if (!validStyles[key] && !pseudos[key]) {\n if (shouldPrintDebug) {\n console.log(' - ignoring (expanded already):', key)\n }\n // we've already expanded shorthands, now we can remove them\n return acc\n }\n }\n }\n acc.push(cur)\n return acc\n }, [])\n\n if (shouldPrintDebug) {\n console.log(' - attrs (evaluated styles): \\n', logLines(attrs.map(attrStr).join(', ')))\n }\n\n // combine styles, leave undefined values\n let prev: ExtractedAttr | null = null\n attrs = attrs.reduce<ExtractedAttr[]>((acc, cur) => {\n if (cur.type === 'style') {\n if (prev?.type === 'style') {\n Object.assign(prev.value, cur.value)\n return acc\n }\n }\n acc.push(cur)\n prev = cur\n return acc\n }, [])\n\n if (shouldPrintDebug) {\n console.log(' - attrs (combined \uD83D\uDD00): \\n', logLines(attrs.map(attrStr).join(', ')))\n }\n\n // post process\n const getStyles = (props: Object | null) => {\n if (!props) return\n if (!!excludeProps.size) {\n for (const key in props) {\n if (isExcludedProp(key)) delete props[key]\n }\n }\n\n const out = postProcessStyles(props, staticConfig, defaultTheme)\n const next = out?.style ?? props\n if (shouldPrintDebug) {\n console.log(' getStyles props >>\\n', logLines(objToStr(props)))\n console.log(' getStyles next >>\\n', logLines(objToStr(next)))\n console.log(' getStyles style >>\\n', logLines(objToStr(out.style)))\n console.log(' getStyles viewp >>\\n', logLines(objToStr(out.viewProps)))\n }\n if (staticConfig.validStyles) {\n for (const key in next) {\n if (!staticConfig.validStyles[key] && !pseudos[key]) {\n delete next[key]\n }\n }\n }\n return next\n }\n\n // used to ensure we pass the entire prop bundle to getStyles\n const completeStylesProcessed = getStyles({\n ...staticConfig.defaultProps,\n ...completeStaticProps,\n })\n\n // any extra styles added in postprocess should be added to first group as they wont be overriden\n const stylesToAddToInitialGroup = difference(\n Object.keys(completeStylesProcessed),\n Object.keys(completeStaticProps)\n )\n\n if (stylesToAddToInitialGroup.length) {\n const toAdd = pick(completeStylesProcessed, ...stylesToAddToInitialGroup)\n const firstGroup = attrs.find((x) => x.type === 'style')\n if (shouldPrintDebug) {\n console.log(' stylesToAddToInitialGroup', stylesToAddToInitialGroup.join(', '))\n console.log(' toAdd', objToStr(toAdd))\n }\n if (!firstGroup) {\n attrs.unshift({ type: 'style', value: toAdd })\n } else {\n Object.assign(firstGroup.value, toAdd)\n }\n }\n\n if (shouldPrintDebug) {\n // prettier-ignore\n console.log(' completeStaticProps\\n', logLines(objToStr(completeStaticProps)))\n // prettier-ignore\n console.log(' completeStylesProcessed\\n', logLines(objToStr(completeStylesProcessed)))\n }\n\n for (const attr of attrs) {\n try {\n switch (attr.type) {\n case 'ternary':\n const a = getStyles(attr.value.alternate)\n const c = getStyles(attr.value.consequent)\n attr.value.alternate = a\n attr.value.consequent = c\n if (shouldPrintDebug) {\n console.log(' => tern ', attrStr(attr))\n }\n break\n case 'style':\n const next = {}\n for (const key in attr.value) {\n if (key in stylePropsTransform) {\n // TODO this logic needs to be a bit more right, because could have spread in between transforms...\n next['transform'] = completeStylesProcessed['transform']\n } else {\n next[key] = completeStylesProcessed[key] ?? attr.value[key]\n }\n }\n attr.value = next\n break\n }\n } catch (err) {\n // any error de-opt\n if (shouldPrintDebug) {\n console.log(' postprocessing error, deopt', err)\n node.attributes = ogAttributes\n return node\n }\n }\n }\n\n if (shouldPrintDebug) {\n console.log(' - attrs (after):\\n', logLines(attrs.map(attrStr).join(', ')))\n }\n\n if (shouldFlatten) {\n // DO FLATTEN\n if (shouldPrintDebug) {\n console.log(' [\u2705] flattening', originalNodeName, flatNode)\n }\n isFlattened = true\n node.name.name = flatNode\n res.flattened++\n if (closingElement) {\n closingElement.name.name = flatNode\n }\n }\n\n if (shouldPrintDebug) {\n // prettier-ignore\n console.log(' [\u274A] inline props ', inlinePropCount, shouldDeopt ? ' deopted' : '', hasSpread ? ' spread' : '', '!flatten', staticConfig.neverFlatten)\n console.log(' - attrs (end):\\n', logLines(attrs.map(attrStr).join(', ')))\n }\n\n res.optimized++\n\n onExtractTag({\n attrs,\n node,\n lineNumbers,\n filePath,\n attemptEval,\n jsxPath: traversePath,\n originalNodeName,\n isFlattened,\n programPath,\n })\n },\n })\n\n /**\n * Step 3: Remove dead code from removed media query / theme hooks\n */\n if (modifiedComponents.size) {\n const all = Array.from(modifiedComponents)\n if (shouldPrintDebug) {\n console.log(' [\uD83E\uDE9D] hook check', all.length)\n }\n for (const comp of all) {\n removeUnusedHooks(comp, shouldPrintDebug)\n }\n }\n\n return res\n },\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
2
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
3
|
import * as t from "@babel/types";
|
|
4
|
-
import { CONCAT_CLASSNAME_IMPORT } from "
|
|
4
|
+
import { CONCAT_CLASSNAME_IMPORT } from "../constants";
|
|
5
5
|
const importConcatPkg = "@tamagui/helpers";
|
|
6
6
|
function ensureImportingConcat(path) {
|
|
7
7
|
const bodyPath = path.get("body");
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/extractor/ensureImportingConcat.ts"],
|
|
4
|
+
"sourcesContent": ["import { NodePath } from '@babel/traverse'\nimport * as t from '@babel/types'\n\nimport { CONCAT_CLASSNAME_IMPORT } from '../constants'\n\nconst importConcatPkg = '@tamagui/helpers'\n\nexport function ensureImportingConcat(path: NodePath<t.Program>) {\n const bodyPath = path.get('body')\n const imported: NodePath<t.ImportDeclaration> | undefined = bodyPath.find(\n (x) => x.isImportDeclaration() && x.node.source.value === importConcatPkg\n ) as any\n const importSpecifier = t.importSpecifier(\n t.identifier(CONCAT_CLASSNAME_IMPORT),\n t.identifier(CONCAT_CLASSNAME_IMPORT)\n )\n\n if (!imported) {\n path.node.body.push(t.importDeclaration([importSpecifier], t.stringLiteral(importConcatPkg)))\n return\n }\n\n const specifiers = imported.node.specifiers\n const alreadyImported = specifiers.some(\n (x) =>\n t.isImportSpecifier(x) &&\n t.isIdentifier(x.imported) &&\n x.imported.name === CONCAT_CLASSNAME_IMPORT\n )\n\n if (!alreadyImported) {\n specifiers.push(\n t.importSpecifier(\n t.identifier(CONCAT_CLASSNAME_IMPORT),\n t.identifier(CONCAT_CLASSNAME_IMPORT)\n )\n )\n }\n}\n"],
|
|
5
|
+
"mappings": ";;AACA;AAEA;AAEA,MAAM,kBAAkB;AAEjB,+BAA+B,MAA2B;AAC/D,QAAM,WAAW,KAAK,IAAI;AAC1B,QAAM,WAAsD,SAAS,KACnE,CAAC,MAAM,EAAE,yBAAyB,EAAE,KAAK,OAAO,UAAU;AAE5D,QAAM,kBAAkB,EAAE,gBACxB,EAAE,WAAW,0BACb,EAAE,WAAW;AAGf,MAAI,CAAC,UAAU;AACb,SAAK,KAAK,KAAK,KAAK,EAAE,kBAAkB,CAAC,kBAAkB,EAAE,cAAc;AAC3E;AAAA;AAGF,QAAM,aAAa,SAAS,KAAK;AACjC,QAAM,kBAAkB,WAAW,KACjC,CAAC,MACC,EAAE,kBAAkB,MACpB,EAAE,aAAa,EAAE,aACjB,EAAE,SAAS,SAAS;AAGxB,MAAI,CAAC,iBAAiB;AACpB,eAAW,KACT,EAAE,gBACA,EAAE,WAAW,0BACb,EAAE,WAAW;AAAA;AAAA;AA3BL;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
File without changes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["
|
|
3
|
+
"sources": ["../../../src/extractor/evaluateAstNode.ts"],
|
|
4
4
|
"sourcesContent": ["import * as t from '@babel/types'\n\nexport function evaluateAstNode(\n exprNode: t.Node | undefined | null,\n evalFn?: (node: t.Node) => any,\n shouldPrintDebug?: boolean\n): any {\n if (exprNode === undefined) {\n return undefined\n }\n\n // null === boolean true (at least in our use cases for jsx eval)\n if (exprNode === null) {\n return true\n }\n\n if (t.isJSXExpressionContainer(exprNode)) {\n return evaluateAstNode(exprNode.expression)\n }\n\n // loop through ObjectExpression keys\n if (t.isObjectExpression(exprNode)) {\n const ret: Record<string, any> = {}\n for (let idx = -1, len = exprNode.properties.length; ++idx < len; ) {\n const value = exprNode.properties[idx]\n\n if (!t.isObjectProperty(value)) {\n throw new Error('evaluateAstNode can only evaluate object properties')\n }\n\n let key: string | number | null | undefined | boolean\n if (value.computed) {\n if (typeof evalFn !== 'function') {\n throw new Error(\n 'evaluateAstNode does not support computed keys unless an eval function is provided'\n )\n }\n key = evaluateAstNode(value.key, evalFn)\n } else if (t.isIdentifier(value.key)) {\n key = value.key.name\n } else if (t.isStringLiteral(value.key) || t.isNumericLiteral(value.key)) {\n key = value.key.value\n } else {\n throw new Error('Unsupported key type: ' + value.key.type)\n }\n\n if (typeof key !== 'string' && typeof key !== 'number') {\n throw new Error('key must be either a string or a number')\n }\n\n ret[key] = evaluateAstNode(value.value, evalFn)\n }\n return ret\n }\n\n if (t.isArrayExpression(exprNode)) {\n return exprNode.elements.map((x) => {\n return evaluateAstNode(x as any, evalFn)\n })\n }\n\n if (t.isUnaryExpression(exprNode) && exprNode.operator === '-') {\n const ret = evaluateAstNode(exprNode.argument, evalFn)\n if (ret == null) {\n return null\n }\n return -ret\n }\n\n if (t.isTemplateLiteral(exprNode)) {\n if (typeof evalFn !== 'function') {\n throw new Error(\n 'evaluateAstNode does not support template literals unless an eval function is provided'\n )\n }\n\n let ret: string = ''\n for (let idx = -1, len = exprNode.quasis.length; ++idx < len; ) {\n const quasi = exprNode.quasis[idx]\n const expr = exprNode.expressions[idx]\n ret += quasi.value.raw\n if (expr) {\n ret += evaluateAstNode(expr, evalFn)\n }\n }\n return ret\n }\n\n // In the interest of representing the \"evaluated\" prop\n // as the user intended, we support negative null. Why not.\n if (t.isNullLiteral(exprNode)) {\n return null\n }\n\n if (t.isNumericLiteral(exprNode) || t.isStringLiteral(exprNode) || t.isBooleanLiteral(exprNode)) {\n // In the interest of representing the \"evaluated\" prop\n // as the user intended, we support negative null. Why not.\n return exprNode.value\n }\n\n if (t.isBinaryExpression(exprNode)) {\n if (exprNode.operator === '+') {\n return evaluateAstNode(exprNode.left, evalFn) + evaluateAstNode(exprNode.right, evalFn)\n } else if (exprNode.operator === '-') {\n return evaluateAstNode(exprNode.left, evalFn) - evaluateAstNode(exprNode.right, evalFn)\n } else if (exprNode.operator === '*') {\n return evaluateAstNode(exprNode.left, evalFn) * evaluateAstNode(exprNode.right, evalFn)\n } else if (exprNode.operator === '/') {\n return evaluateAstNode(exprNode.left, evalFn) / evaluateAstNode(exprNode.right, evalFn)\n }\n }\n\n // if we've made it this far, the value has to be evaluated\n if (typeof evalFn !== 'function') {\n throw new Error(\n 'evaluateAstNode does not support non-literal values unless an eval function is provided'\n )\n }\n\n return evalFn(exprNode)\n}\n"],
|
|
5
5
|
"mappings": ";;AAAA;AAEO,yBACL,UACA,QACA,kBACK;AACL,MAAI,aAAa,QAAW;AAC1B,WAAO;AAAA;AAIT,MAAI,aAAa,MAAM;AACrB,WAAO;AAAA;AAGT,MAAI,EAAE,yBAAyB,WAAW;AACxC,WAAO,gBAAgB,SAAS;AAAA;AAIlC,MAAI,EAAE,mBAAmB,WAAW;AAClC,UAAM,MAA2B;AACjC,aAAS,MAAM,IAAI,MAAM,SAAS,WAAW,QAAQ,EAAE,MAAM,OAAO;AAClE,YAAM,QAAQ,SAAS,WAAW;AAElC,UAAI,CAAC,EAAE,iBAAiB,QAAQ;AAC9B,cAAM,IAAI,MAAM;AAAA;AAGlB,UAAI;AACJ,UAAI,MAAM,UAAU;AAClB,YAAI,OAAO,WAAW,YAAY;AAChC,gBAAM,IAAI,MACR;AAAA;AAGJ,cAAM,gBAAgB,MAAM,KAAK;AAAA,iBACxB,EAAE,aAAa,MAAM,MAAM;AACpC,cAAM,MAAM,IAAI;AAAA,iBACP,EAAE,gBAAgB,MAAM,QAAQ,EAAE,iBAAiB,MAAM,MAAM;AACxE,cAAM,MAAM,IAAI;AAAA,aACX;AACL,cAAM,IAAI,MAAM,2BAA2B,MAAM,IAAI;AAAA;AAGvD,UAAI,OAAO,QAAQ,YAAY,OAAO,QAAQ,UAAU;AACtD,cAAM,IAAI,MAAM;AAAA;AAGlB,UAAI,OAAO,gBAAgB,MAAM,OAAO;AAAA;AAE1C,WAAO;AAAA;AAGT,MAAI,EAAE,kBAAkB,WAAW;AACjC,WAAO,SAAS,SAAS,IAAI,CAAC,MAAM;AAClC,aAAO,gBAAgB,GAAU;AAAA;AAAA;AAIrC,MAAI,EAAE,kBAAkB,aAAa,SAAS,aAAa,KAAK;AAC9D,UAAM,MAAM,gBAAgB,SAAS,UAAU;AAC/C,QAAI,OAAO,MAAM;AACf,aAAO;AAAA;AAET,WAAO,CAAC;AAAA;AAGV,MAAI,EAAE,kBAAkB,WAAW;AACjC,QAAI,OAAO,WAAW,YAAY;AAChC,YAAM,IAAI,MACR;AAAA;AAIJ,QAAI,MAAc;AAClB,aAAS,MAAM,IAAI,MAAM,SAAS,OAAO,QAAQ,EAAE,MAAM,OAAO;AAC9D,YAAM,QAAQ,SAAS,OAAO;AAC9B,YAAM,OAAO,SAAS,YAAY;AAClC,aAAO,MAAM,MAAM;AACnB,UAAI,MAAM;AACR,eAAO,gBAAgB,MAAM;AAAA;AAAA;AAGjC,WAAO;AAAA;AAKT,MAAI,EAAE,cAAc,WAAW;AAC7B,WAAO;AAAA;AAGT,MAAI,EAAE,iBAAiB,aAAa,EAAE,gBAAgB,aAAa,EAAE,iBAAiB,WAAW;AAG/F,WAAO,SAAS;AAAA;AAGlB,MAAI,EAAE,mBAAmB,WAAW;AAClC,QAAI,SAAS,aAAa,KAAK;AAC7B,aAAO,gBAAgB,SAAS,MAAM,UAAU,gBAAgB,SAAS,OAAO;AAAA,eACvE,SAAS,aAAa,KAAK;AACpC,aAAO,gBAAgB,SAAS,MAAM,UAAU,gBAAgB,SAAS,OAAO;AAAA,eACvE,SAAS,aAAa,KAAK;AACpC,aAAO,gBAAgB,SAAS,MAAM,UAAU,gBAAgB,SAAS,OAAO;AAAA,eACvE,SAAS,aAAa,KAAK;AACpC,aAAO,gBAAgB,SAAS,MAAM,UAAU,gBAAgB,SAAS,OAAO;AAAA;AAAA;AAKpF,MAAI,OAAO,WAAW,YAAY;AAChC,UAAM,IAAI,MACR;AAAA;AAIJ,SAAO,OAAO;AAAA;AArHA;",
|
|
6
6
|
"names": []
|