@tamagui/static 1.0.0-beta.189 → 1.0.0-beta.193
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 +8 -0
- package/dist/cjs/constants.js.map +0 -0
- package/dist/cjs/extractor/accessSafe.js +4 -0
- package/dist/cjs/extractor/accessSafe.js.map +0 -0
- package/dist/cjs/extractor/babelParse.js +5 -0
- package/dist/cjs/extractor/babelParse.js.map +2 -2
- package/dist/cjs/extractor/buildClassName.js +4 -0
- package/dist/cjs/extractor/buildClassName.js.map +0 -0
- package/dist/cjs/extractor/createEvaluator.js +5 -0
- package/dist/cjs/extractor/createEvaluator.js.map +0 -0
- package/dist/cjs/extractor/createExtractor.js +862 -733
- package/dist/cjs/extractor/createExtractor.js.map +2 -2
- package/dist/cjs/extractor/ensureImportingConcat.js +4 -0
- package/dist/cjs/extractor/ensureImportingConcat.js.map +0 -0
- package/dist/cjs/extractor/evaluateAstNode.js +4 -0
- package/dist/cjs/extractor/evaluateAstNode.js.map +0 -0
- package/dist/cjs/extractor/extractHelpers.js +11 -0
- package/dist/cjs/extractor/extractHelpers.js.map +0 -0
- package/dist/cjs/extractor/extractMediaStyle.js +7 -2
- package/dist/cjs/extractor/extractMediaStyle.js.map +2 -2
- package/dist/cjs/extractor/extractToClassNames.js +19 -10
- package/dist/cjs/extractor/extractToClassNames.js.map +2 -2
- package/dist/cjs/extractor/findTopmostFunction.js +4 -0
- package/dist/cjs/extractor/findTopmostFunction.js.map +0 -0
- package/dist/cjs/extractor/generatedUid.js +4 -0
- package/dist/cjs/extractor/generatedUid.js.map +0 -0
- package/dist/cjs/extractor/getPrefixLogs.js +4 -0
- package/dist/cjs/extractor/getPrefixLogs.js.map +0 -0
- package/dist/cjs/extractor/getPropValueFromAttributes.js +4 -0
- package/dist/cjs/extractor/getPropValueFromAttributes.js.map +0 -0
- package/dist/cjs/extractor/getSourceModule.js +4 -0
- package/dist/cjs/extractor/getSourceModule.js.map +0 -0
- package/dist/cjs/extractor/getStaticBindingsForScope.js +4 -0
- package/dist/cjs/extractor/getStaticBindingsForScope.js.map +0 -0
- package/dist/cjs/extractor/hoistClassNames.js +4 -0
- package/dist/cjs/extractor/hoistClassNames.js.map +0 -0
- package/dist/cjs/extractor/literalToAst.js +5 -0
- package/dist/cjs/extractor/literalToAst.js.map +0 -0
- package/dist/cjs/extractor/loadTamagui.js +67 -47
- package/dist/cjs/extractor/loadTamagui.js.map +2 -2
- package/dist/cjs/extractor/logLines.js +4 -0
- package/dist/cjs/extractor/logLines.js.map +0 -0
- package/dist/cjs/extractor/normalizeTernaries.js +4 -0
- package/dist/cjs/extractor/normalizeTernaries.js.map +0 -0
- package/dist/cjs/extractor/removeUnusedHooks.js +4 -0
- package/dist/cjs/extractor/removeUnusedHooks.js.map +0 -0
- package/dist/cjs/extractor/timer.js +46 -0
- package/dist/cjs/extractor/timer.js.map +7 -0
- package/dist/cjs/extractor/validHTMLAttributes.js +4 -0
- package/dist/cjs/extractor/validHTMLAttributes.js.map +0 -0
- package/dist/cjs/index.js +6 -0
- package/dist/cjs/index.js.map +0 -0
- package/dist/cjs/patchReactNativeWeb.js +23 -7
- package/dist/cjs/patchReactNativeWeb.js.map +2 -2
- package/dist/cjs/types.js +0 -0
- package/dist/cjs/types.js.map +0 -0
- package/dist/esm/constants.js +0 -0
- package/dist/esm/constants.js.map +0 -0
- package/dist/esm/extractor/accessSafe.js +0 -0
- package/dist/esm/extractor/accessSafe.js.map +0 -0
- package/dist/esm/extractor/babelParse.js +0 -0
- package/dist/esm/extractor/babelParse.js.map +2 -2
- package/dist/esm/extractor/buildClassName.js +0 -0
- package/dist/esm/extractor/buildClassName.js.map +0 -0
- package/dist/esm/extractor/createEvaluator.js +0 -0
- package/dist/esm/extractor/createEvaluator.js.map +0 -0
- package/dist/esm/extractor/createExtractor.js +868 -742
- package/dist/esm/extractor/createExtractor.js.map +2 -2
- package/dist/esm/extractor/ensureImportingConcat.js +0 -0
- package/dist/esm/extractor/ensureImportingConcat.js.map +0 -0
- package/dist/esm/extractor/evaluateAstNode.js +0 -0
- package/dist/esm/extractor/evaluateAstNode.js.map +0 -0
- package/dist/esm/extractor/extractHelpers.js +0 -0
- package/dist/esm/extractor/extractHelpers.js.map +0 -0
- package/dist/esm/extractor/extractMediaStyle.js +2 -2
- package/dist/esm/extractor/extractMediaStyle.js.map +2 -2
- package/dist/esm/extractor/extractToClassNames.js +15 -10
- package/dist/esm/extractor/extractToClassNames.js.map +2 -2
- package/dist/esm/extractor/findTopmostFunction.js +0 -0
- package/dist/esm/extractor/findTopmostFunction.js.map +0 -0
- package/dist/esm/extractor/generatedUid.js +0 -0
- package/dist/esm/extractor/generatedUid.js.map +0 -0
- package/dist/esm/extractor/getPrefixLogs.js +0 -0
- package/dist/esm/extractor/getPrefixLogs.js.map +0 -0
- package/dist/esm/extractor/getPropValueFromAttributes.js +0 -0
- package/dist/esm/extractor/getPropValueFromAttributes.js.map +0 -0
- package/dist/esm/extractor/getSourceModule.js +0 -0
- package/dist/esm/extractor/getSourceModule.js.map +0 -0
- package/dist/esm/extractor/getStaticBindingsForScope.js +0 -0
- package/dist/esm/extractor/getStaticBindingsForScope.js.map +0 -0
- package/dist/esm/extractor/hoistClassNames.js +0 -0
- package/dist/esm/extractor/hoistClassNames.js.map +0 -0
- package/dist/esm/extractor/literalToAst.js +0 -0
- package/dist/esm/extractor/literalToAst.js.map +0 -0
- package/dist/esm/extractor/loadTamagui.js +63 -47
- package/dist/esm/extractor/loadTamagui.js.map +2 -2
- package/dist/esm/extractor/logLines.js +0 -0
- package/dist/esm/extractor/logLines.js.map +0 -0
- package/dist/esm/extractor/normalizeTernaries.js +0 -0
- package/dist/esm/extractor/normalizeTernaries.js.map +0 -0
- package/dist/esm/extractor/removeUnusedHooks.js +0 -0
- package/dist/esm/extractor/removeUnusedHooks.js.map +0 -0
- package/dist/esm/extractor/timer.js +24 -0
- package/dist/esm/extractor/timer.js.map +7 -0
- package/dist/esm/extractor/validHTMLAttributes.js +0 -0
- package/dist/esm/extractor/validHTMLAttributes.js.map +0 -0
- package/dist/esm/index.js +0 -0
- package/dist/esm/index.js.map +0 -0
- package/dist/esm/patchReactNativeWeb.js +19 -7
- package/dist/esm/patchReactNativeWeb.js.map +2 -2
- package/dist/esm/types.js +0 -0
- package/dist/esm/types.js.map +0 -0
- package/dist/jsx/constants.js +0 -0
- package/dist/jsx/extractor/accessSafe.js +0 -0
- package/dist/jsx/extractor/babelParse.js +0 -0
- package/dist/jsx/extractor/buildClassName.js +0 -0
- package/dist/jsx/extractor/createEvaluator.js +0 -0
- package/dist/jsx/extractor/createExtractor.js +868 -742
- package/dist/jsx/extractor/ensureImportingConcat.js +0 -0
- package/dist/jsx/extractor/evaluateAstNode.js +0 -0
- package/dist/jsx/extractor/extractHelpers.js +0 -0
- package/dist/jsx/extractor/extractMediaStyle.js +2 -2
- package/dist/jsx/extractor/extractToClassNames.js +15 -10
- package/dist/jsx/extractor/findTopmostFunction.js +0 -0
- package/dist/jsx/extractor/generatedUid.js +0 -0
- package/dist/jsx/extractor/getPrefixLogs.js +0 -0
- package/dist/jsx/extractor/getPropValueFromAttributes.js +0 -0
- package/dist/jsx/extractor/getSourceModule.js +0 -0
- package/dist/jsx/extractor/getStaticBindingsForScope.js +0 -0
- package/dist/jsx/extractor/hoistClassNames.js +0 -0
- package/dist/jsx/extractor/literalToAst.js +0 -0
- package/dist/jsx/extractor/loadTamagui.js +63 -47
- package/dist/jsx/extractor/logLines.js +0 -0
- package/dist/jsx/extractor/normalizeTernaries.js +0 -0
- package/dist/jsx/extractor/removeUnusedHooks.js +0 -0
- package/dist/jsx/extractor/timer.js +23 -0
- package/dist/jsx/extractor/validHTMLAttributes.js +0 -0
- package/dist/jsx/index.js +0 -0
- package/dist/jsx/patchReactNativeWeb.js +19 -7
- package/dist/jsx/types.js +0 -0
- package/package.json +23 -23
- package/types/extractor/babelParse.d.ts.map +1 -1
- package/types/extractor/createExtractor.d.ts +2 -0
- package/types/extractor/createExtractor.d.ts.map +1 -1
- package/types/extractor/extractMediaStyle.d.ts +1 -1
- package/types/extractor/extractMediaStyle.d.ts.map +1 -1
- package/types/extractor/extractToClassNames.d.ts +2 -1
- package/types/extractor/extractToClassNames.d.ts.map +1 -1
- package/types/extractor/loadTamagui.d.ts +2 -2
- package/types/extractor/loadTamagui.d.ts.map +1 -1
- package/types/extractor/timer.d.ts +5 -0
- package/types/extractor/timer.d.ts.map +1 -0
- package/types/patchReactNativeWeb.d.ts.map +1 -1
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
2
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
import { relative } from "path";
|
|
3
4
|
import traverse from "@babel/traverse";
|
|
4
5
|
import * as t from "@babel/types";
|
|
5
6
|
import {
|
|
6
7
|
getSplitStyles,
|
|
7
8
|
mediaQueryConfig,
|
|
9
|
+
normalizeStyleObject,
|
|
10
|
+
proxyThemeVariables,
|
|
8
11
|
pseudos,
|
|
9
12
|
rnw
|
|
10
13
|
} from "@tamagui/core-node";
|
|
@@ -20,12 +23,22 @@ import { loadTamagui } from "./loadTamagui";
|
|
|
20
23
|
import { logLines } from "./logLines";
|
|
21
24
|
import { normalizeTernaries } from "./normalizeTernaries";
|
|
22
25
|
import { removeUnusedHooks } from "./removeUnusedHooks";
|
|
26
|
+
import { timer } from "./timer";
|
|
23
27
|
import { validHTMLAttributes } from "./validHTMLAttributes";
|
|
24
28
|
const UNTOUCHED_PROPS = {
|
|
25
29
|
key: true,
|
|
26
30
|
style: true,
|
|
27
31
|
className: true
|
|
28
32
|
};
|
|
33
|
+
const INLINE_EXTRACTABLE = {
|
|
34
|
+
ref: "ref",
|
|
35
|
+
key: "key",
|
|
36
|
+
onPress: "onClick",
|
|
37
|
+
onHoverIn: "onMouseEnter",
|
|
38
|
+
onHoverOut: "onMouseLeave",
|
|
39
|
+
onPressIn: "onMouseDown",
|
|
40
|
+
onPressOut: "onMouseUp"
|
|
41
|
+
};
|
|
29
42
|
const isAttr = /* @__PURE__ */ __name((x) => x.type === "attr", "isAttr");
|
|
30
43
|
const validHooks = {
|
|
31
44
|
useMedia: true,
|
|
@@ -33,11 +46,11 @@ const validHooks = {
|
|
|
33
46
|
};
|
|
34
47
|
const createTernary = /* @__PURE__ */ __name((x) => x, "createTernary");
|
|
35
48
|
function createExtractor() {
|
|
49
|
+
if (!process.env.TAMAGUI_TARGET) {
|
|
50
|
+
console.log('\u26A0\uFE0F Please set process.env.TAMAGUI_TARGET to either "web" or "native"');
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
36
53
|
const shouldAddDebugProp = !process.env.npm_package_dependencies_next && process.env.TAMAGUI_TARGET !== "native" && process.env.IDENTIFY_TAGS !== "false" && (process.env.NODE_ENV === "development" || process.env.DEBUG || process.env.IDENTIFY_TAGS);
|
|
37
|
-
require("esbuild-register/dist/node").register({
|
|
38
|
-
target: "es2019",
|
|
39
|
-
format: "cjs"
|
|
40
|
-
});
|
|
41
54
|
let loadedTamaguiConfig;
|
|
42
55
|
let hasLogged = false;
|
|
43
56
|
return {
|
|
@@ -70,12 +83,18 @@ function createExtractor() {
|
|
|
70
83
|
if (!Array.isArray(props.components)) {
|
|
71
84
|
throw new Error(`Must provide components array with list of Tamagui component modules`);
|
|
72
85
|
}
|
|
86
|
+
const ogDebug = shouldPrintDebug;
|
|
87
|
+
const tm = timer();
|
|
73
88
|
const { components, tamaguiConfig } = loadTamagui({
|
|
74
89
|
config,
|
|
75
90
|
components: props.components || ["tamagui"]
|
|
76
91
|
});
|
|
92
|
+
if (shouldPrintDebug === "verbose") {
|
|
93
|
+
console.log("tamagui.config.ts:", { components, config });
|
|
94
|
+
}
|
|
95
|
+
tm.mark("load-tamagui", shouldPrintDebug === "verbose");
|
|
77
96
|
loadedTamaguiConfig = tamaguiConfig;
|
|
78
|
-
const defaultTheme = tamaguiConfig.themes[Object.keys(tamaguiConfig.themes)[0]];
|
|
97
|
+
const defaultTheme = proxyThemeVariables(tamaguiConfig.themes[Object.keys(tamaguiConfig.themes)[0]]);
|
|
79
98
|
const body = fileOrPath.type === "Program" ? fileOrPath.get("body") : fileOrPath.program.body;
|
|
80
99
|
const isInternalImport = /* @__PURE__ */ __name((importStr) => {
|
|
81
100
|
return isInsideTamagui(sourcePath) && importStr[0] === ".";
|
|
@@ -87,17 +106,26 @@ function createExtractor() {
|
|
|
87
106
|
obj[name] = components[name];
|
|
88
107
|
return obj;
|
|
89
108
|
}, {});
|
|
109
|
+
if (shouldPrintDebug === "verbose") {
|
|
110
|
+
console.log("validComponents", Object.keys(validComponents));
|
|
111
|
+
}
|
|
90
112
|
let doesUseValidImport = false;
|
|
113
|
+
let hasImportedTheme = false;
|
|
91
114
|
for (const bodyPath of body) {
|
|
92
115
|
if (bodyPath.type !== "ImportDeclaration")
|
|
93
116
|
continue;
|
|
94
117
|
const node = "node" in bodyPath ? bodyPath.node : bodyPath;
|
|
95
118
|
const from = node.source.value;
|
|
96
|
-
|
|
97
|
-
|
|
119
|
+
const isValidImport = props.components.includes(from) || isInternalImport(from);
|
|
120
|
+
if (isValidImport) {
|
|
121
|
+
const isValidComponent = node.specifiers.some((specifier) => {
|
|
98
122
|
const name = specifier.local.name;
|
|
99
123
|
return validComponents[name] || validHooks[name];
|
|
100
|
-
})
|
|
124
|
+
});
|
|
125
|
+
if (shouldPrintDebug === "verbose") {
|
|
126
|
+
console.log("import from", from, { isValidComponent });
|
|
127
|
+
}
|
|
128
|
+
if (isValidComponent) {
|
|
101
129
|
doesUseValidImport = true;
|
|
102
130
|
break;
|
|
103
131
|
}
|
|
@@ -109,6 +137,7 @@ function createExtractor() {
|
|
|
109
137
|
if (!doesUseValidImport) {
|
|
110
138
|
return null;
|
|
111
139
|
}
|
|
140
|
+
tm.mark("import-check", shouldPrintDebug === "verbose");
|
|
112
141
|
let couldntParse = false;
|
|
113
142
|
const modifiedComponents = /* @__PURE__ */ new Set();
|
|
114
143
|
const bindingCache = {};
|
|
@@ -130,6 +159,7 @@ function createExtractor() {
|
|
|
130
159
|
},
|
|
131
160
|
JSXElement(traversePath) {
|
|
132
161
|
var _a, _b, _c, _d, _e;
|
|
162
|
+
tm.mark("jsx-element", shouldPrintDebug === "verbose");
|
|
133
163
|
const node = traversePath.node.openingElement;
|
|
134
164
|
const ogAttributes = node.attributes;
|
|
135
165
|
const componentName = findComponentName(traversePath.scope);
|
|
@@ -156,579 +186,771 @@ function createExtractor() {
|
|
|
156
186
|
}
|
|
157
187
|
const originalNodeName = node.name.name;
|
|
158
188
|
res.found++;
|
|
159
|
-
|
|
160
|
-
console.log(`
|
|
161
|
-
<${originalNodeName} />`);
|
|
162
|
-
}
|
|
163
|
-
const filePath = sourcePath.replace(process.cwd(), ".");
|
|
189
|
+
const filePath = `./${relative(process.cwd(), sourcePath)}`;
|
|
164
190
|
const lineNumbers = node.loc ? node.loc.start.line + (node.loc.start.line !== node.loc.end.line ? `-${node.loc.end.line}` : "") : "";
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
}
|
|
176
|
-
if (disableExtraction) {
|
|
177
|
-
return;
|
|
178
|
-
}
|
|
179
|
-
const { staticConfig } = component;
|
|
180
|
-
const isTextView = staticConfig.isText || false;
|
|
181
|
-
const validStyles = (_a = staticConfig == null ? void 0 : staticConfig.validStyles) != null ? _a : {};
|
|
182
|
-
function isValidStyleKey(name) {
|
|
183
|
-
var _a2;
|
|
184
|
-
return !!(!!validStyles[name] || !!pseudos[name] || ((_a2 = staticConfig.variants) == null ? void 0 : _a2[name]) || tamaguiConfig.shorthands[name] || (name[0] === "$" ? !!mediaQueryConfig[name.slice(1)] : false));
|
|
185
|
-
}
|
|
186
|
-
__name(isValidStyleKey, "isValidStyleKey");
|
|
187
|
-
let tagName = (_c = (_b = staticConfig.defaultProps) == null ? void 0 : _b.tag) != null ? _c : isTextView ? "span" : "div";
|
|
188
|
-
traversePath.get("openingElement").get("attributes").forEach((path) => {
|
|
189
|
-
const attr = path.node;
|
|
190
|
-
if (t.isJSXSpreadAttribute(attr))
|
|
191
|
-
return;
|
|
192
|
-
if (attr.name.name !== "tag")
|
|
193
|
-
return;
|
|
194
|
-
const val = attr.value;
|
|
195
|
-
if (!t.isStringLiteral(val))
|
|
196
|
-
return;
|
|
197
|
-
tagName = val.value;
|
|
198
|
-
});
|
|
199
|
-
const flatNode = getFlattenedNode({ isTextView, tag: tagName });
|
|
200
|
-
const inlineProps = /* @__PURE__ */ new Set([
|
|
201
|
-
...props.inlineProps || [],
|
|
202
|
-
...staticConfig.inlineProps || []
|
|
203
|
-
]);
|
|
204
|
-
const deoptProps = /* @__PURE__ */ new Set([
|
|
205
|
-
...props.deoptProps || [],
|
|
206
|
-
...staticConfig.deoptProps || []
|
|
207
|
-
]);
|
|
208
|
-
const staticNamespace = getStaticBindingsForScope(traversePath.scope, importsWhitelist, sourcePath, bindingCache, shouldPrintDebug);
|
|
209
|
-
const attemptEval = !evaluateVars ? evaluateAstNode : createEvaluator({
|
|
210
|
-
tamaguiConfig,
|
|
211
|
-
staticNamespace,
|
|
212
|
-
sourcePath,
|
|
213
|
-
traversePath,
|
|
214
|
-
shouldPrintDebug
|
|
215
|
-
});
|
|
216
|
-
const attemptEvalSafe = createSafeEvaluator(attemptEval);
|
|
217
|
-
if (shouldPrintDebug) {
|
|
218
|
-
console.log(" staticNamespace", Object.keys(staticNamespace).join(", "));
|
|
191
|
+
const tagId = [componentName, `${node.name.name}`, `${filePath}:${lineNumbers}`].filter(Boolean);
|
|
192
|
+
const debugPropValue = node.attributes.filter((n) => t.isJSXAttribute(n) && t.isJSXIdentifier(n.name) && n.name.name === "debug").map((n) => {
|
|
193
|
+
if (n.value === null)
|
|
194
|
+
return true;
|
|
195
|
+
if (t.isStringLiteral(n.value))
|
|
196
|
+
return n.value.value;
|
|
197
|
+
return false;
|
|
198
|
+
})[0];
|
|
199
|
+
if (debugPropValue) {
|
|
200
|
+
shouldPrintDebug = debugPropValue;
|
|
219
201
|
}
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
if (arg !== void 0) {
|
|
238
|
-
try {
|
|
239
|
-
if (typeof arg !== "object" || arg == null) {
|
|
240
|
-
if (shouldPrintDebug) {
|
|
241
|
-
console.log(" non object or null arg", arg);
|
|
242
|
-
}
|
|
243
|
-
flattenedAttrs.push(attr);
|
|
244
|
-
} else {
|
|
245
|
-
for (const k in arg) {
|
|
246
|
-
const value = arg[k];
|
|
247
|
-
if (!value && typeof value === "object") {
|
|
248
|
-
console.log("shouldnt we handle this?", k, value, arg);
|
|
249
|
-
continue;
|
|
202
|
+
try {
|
|
203
|
+
let isValidStyleKey = function(name) {
|
|
204
|
+
var _a2;
|
|
205
|
+
return !!(!!validStyles[name] || !!pseudos[name] || ((_a2 = staticConfig.variants) == null ? void 0 : _a2[name]) || tamaguiConfig.shorthands[name] || (name[0] === "$" ? !!mediaQueryConfig[name.slice(1)] : false));
|
|
206
|
+
}, evaluateAttribute = function(path) {
|
|
207
|
+
const attribute = path.node;
|
|
208
|
+
const attr = { type: "attr", value: attribute };
|
|
209
|
+
if (t.isJSXSpreadAttribute(attribute)) {
|
|
210
|
+
const arg = attribute.argument;
|
|
211
|
+
const conditional = t.isConditionalExpression(arg) ? [arg.test, arg.consequent, arg.alternate] : t.isLogicalExpression(arg) && arg.operator === "&&" ? [arg.left, arg.right, null] : null;
|
|
212
|
+
if (conditional) {
|
|
213
|
+
const [test, alt, cons] = conditional;
|
|
214
|
+
if (!test)
|
|
215
|
+
throw new Error(`no test`);
|
|
216
|
+
if ([alt, cons].some((side) => side && !isExtractable(side))) {
|
|
217
|
+
if (shouldPrintDebug) {
|
|
218
|
+
console.log("not extractable", alt, cons);
|
|
250
219
|
}
|
|
251
|
-
|
|
220
|
+
return attr;
|
|
252
221
|
}
|
|
222
|
+
return [
|
|
223
|
+
...createTernariesFromObjectProperties(test, alt) || [],
|
|
224
|
+
...cons && createTernariesFromObjectProperties(t.unaryExpression("!", test), cons) || []
|
|
225
|
+
].map((ternary) => ({
|
|
226
|
+
type: "ternary",
|
|
227
|
+
value: ternary
|
|
228
|
+
}));
|
|
253
229
|
}
|
|
254
|
-
} catch (err) {
|
|
255
|
-
console.warn("cant parse spread, caught err", err);
|
|
256
|
-
couldntParse = true;
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
});
|
|
260
|
-
if (couldntParse) {
|
|
261
|
-
return;
|
|
262
|
-
}
|
|
263
|
-
node.attributes = flattenedAttrs;
|
|
264
|
-
if (staticConfig.defaultProps) {
|
|
265
|
-
for (const key in staticConfig.defaultProps) {
|
|
266
|
-
if (isValidStyleKey(key)) {
|
|
267
|
-
continue;
|
|
268
230
|
}
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
console.warn(`\u26A0\uFE0F Error evaluating default prop for component ${node.name.name}, prop ${key}
|
|
276
|
-
error: ${err}
|
|
277
|
-
value:`, val, "\n defaultProps:", staticConfig.defaultProps);
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
let attrs = [];
|
|
282
|
-
let shouldDeopt = false;
|
|
283
|
-
let inlinePropCount = 0;
|
|
284
|
-
let hasSetOptimized = false;
|
|
285
|
-
attrs = traversePath.get("openingElement").get("attributes").flatMap((path) => {
|
|
286
|
-
try {
|
|
287
|
-
const res2 = evaluateAttribute(path);
|
|
288
|
-
if (!res2) {
|
|
289
|
-
path.remove();
|
|
290
|
-
}
|
|
291
|
-
return res2;
|
|
292
|
-
} catch (err) {
|
|
293
|
-
if (shouldPrintDebug) {
|
|
294
|
-
console.log("Error extracting attribute", err.message, err.stack);
|
|
295
|
-
console.log("node", path.node);
|
|
231
|
+
if (t.isJSXSpreadAttribute(attribute) || !attribute.name || typeof attribute.name.name !== "string") {
|
|
232
|
+
if (shouldPrintDebug) {
|
|
233
|
+
console.log(" ! inlining, spread attr");
|
|
234
|
+
}
|
|
235
|
+
inlined.set(`${Math.random()}`, "spread");
|
|
236
|
+
return attr;
|
|
296
237
|
}
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
}
|
|
302
|
-
}).flat(4).filter(isPresent);
|
|
303
|
-
if (shouldPrintDebug) {
|
|
304
|
-
console.log(" - attrs (before):\n", logLines(attrs.map(attrStr).join(", ")));
|
|
305
|
-
}
|
|
306
|
-
function evaluateAttribute(path) {
|
|
307
|
-
const attribute = path.node;
|
|
308
|
-
const attr = { type: "attr", value: attribute };
|
|
309
|
-
if (t.isJSXSpreadAttribute(attribute)) {
|
|
310
|
-
const arg = attribute.argument;
|
|
311
|
-
const conditional = t.isConditionalExpression(arg) ? [arg.test, arg.consequent, arg.alternate] : t.isLogicalExpression(arg) && arg.operator === "&&" ? [arg.left, arg.right, null] : null;
|
|
312
|
-
if (conditional) {
|
|
313
|
-
const [test, alt, cons] = conditional;
|
|
314
|
-
if (!test)
|
|
315
|
-
throw new Error(`no test`);
|
|
316
|
-
if ([alt, cons].some((side) => side && !isExtractable(side))) {
|
|
317
|
-
if (shouldPrintDebug) {
|
|
318
|
-
console.log("not extractable", alt, cons);
|
|
319
|
-
}
|
|
320
|
-
return attr;
|
|
238
|
+
const name = attribute.name.name;
|
|
239
|
+
if (excludeProps == null ? void 0 : excludeProps.has(name)) {
|
|
240
|
+
if (shouldPrintDebug) {
|
|
241
|
+
console.log(" excluding prop", name);
|
|
321
242
|
}
|
|
322
|
-
return
|
|
323
|
-
...createTernariesFromObjectProperties(test, alt) || [],
|
|
324
|
-
...cons && createTernariesFromObjectProperties(t.unaryExpression("!", test), cons) || []
|
|
325
|
-
].map((ternary) => ({
|
|
326
|
-
type: "ternary",
|
|
327
|
-
value: ternary
|
|
328
|
-
}));
|
|
243
|
+
return null;
|
|
329
244
|
}
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
245
|
+
if (inlineProps.has(name)) {
|
|
246
|
+
inlined.set(name, name);
|
|
247
|
+
if (shouldPrintDebug) {
|
|
248
|
+
console.log(" ! inlining, inline prop", name);
|
|
249
|
+
}
|
|
250
|
+
return attr;
|
|
334
251
|
}
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
252
|
+
if (deoptProps.has(name)) {
|
|
253
|
+
shouldDeopt = true;
|
|
254
|
+
inlined.set(name, name);
|
|
255
|
+
if (shouldPrintDebug) {
|
|
256
|
+
console.log(" ! inlining, deopted prop", name);
|
|
257
|
+
}
|
|
258
|
+
return attr;
|
|
342
259
|
}
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
if (inlineProps.has(name)) {
|
|
346
|
-
inlinePropCount++;
|
|
347
|
-
if (shouldPrintDebug) {
|
|
348
|
-
console.log(" ! inlining, inline prop", name);
|
|
260
|
+
if (UNTOUCHED_PROPS[name]) {
|
|
261
|
+
return attr;
|
|
349
262
|
}
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
shouldDeopt = true;
|
|
354
|
-
inlinePropCount++;
|
|
355
|
-
if (shouldPrintDebug) {
|
|
356
|
-
console.log(" ! inlining, deopted prop", name);
|
|
263
|
+
if (INLINE_EXTRACTABLE[name]) {
|
|
264
|
+
inlined.set(name, INLINE_EXTRACTABLE[name]);
|
|
265
|
+
return attr;
|
|
357
266
|
}
|
|
358
|
-
|
|
359
|
-
}
|
|
360
|
-
if (UNTOUCHED_PROPS[name]) {
|
|
361
|
-
return attr;
|
|
362
|
-
}
|
|
363
|
-
if (name.startsWith("data-")) {
|
|
364
|
-
return attr;
|
|
365
|
-
}
|
|
366
|
-
if (name[0] === "$" && t.isJSXExpressionContainer(attribute == null ? void 0 : attribute.value)) {
|
|
367
|
-
if (disableExtractInlineMedia) {
|
|
267
|
+
if (name.startsWith("data-")) {
|
|
368
268
|
return attr;
|
|
369
269
|
}
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
if (
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
270
|
+
if (name[0] === "$" && t.isJSXExpressionContainer(attribute == null ? void 0 : attribute.value)) {
|
|
271
|
+
if (disableExtractInlineMedia) {
|
|
272
|
+
return attr;
|
|
273
|
+
}
|
|
274
|
+
const shortname = name.slice(1);
|
|
275
|
+
if (mediaQueryConfig[shortname]) {
|
|
276
|
+
const expression = attribute.value.expression;
|
|
277
|
+
if (!t.isJSXEmptyExpression(expression)) {
|
|
278
|
+
const ternaries2 = createTernariesFromObjectProperties(t.stringLiteral(shortname), expression, {
|
|
279
|
+
inlineMediaQuery: shortname
|
|
280
|
+
});
|
|
281
|
+
if (ternaries2) {
|
|
282
|
+
return ternaries2.map((value2) => ({
|
|
283
|
+
type: "ternary",
|
|
284
|
+
value: value2
|
|
285
|
+
}));
|
|
286
|
+
}
|
|
382
287
|
}
|
|
383
288
|
}
|
|
384
289
|
}
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
290
|
+
const [value, valuePath] = (() => {
|
|
291
|
+
if (t.isJSXExpressionContainer(attribute == null ? void 0 : attribute.value)) {
|
|
292
|
+
return [attribute.value.expression, path.get("value")];
|
|
293
|
+
} else {
|
|
294
|
+
return [attribute.value, path.get("value")];
|
|
295
|
+
}
|
|
296
|
+
})();
|
|
297
|
+
const remove = /* @__PURE__ */ __name(() => {
|
|
298
|
+
Array.isArray(valuePath) ? valuePath.map((p) => p.remove()) : valuePath.remove();
|
|
299
|
+
}, "remove");
|
|
300
|
+
if (name === "ref") {
|
|
301
|
+
if (shouldPrintDebug) {
|
|
302
|
+
console.log(" ! inlining, ref", name);
|
|
303
|
+
}
|
|
304
|
+
inlined.set("ref", "ref");
|
|
305
|
+
return attr;
|
|
391
306
|
}
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
if (shouldPrintDebug) {
|
|
398
|
-
console.log(" ! inlining, ref", name);
|
|
307
|
+
if (name === "tag") {
|
|
308
|
+
return {
|
|
309
|
+
type: "attr",
|
|
310
|
+
value: path.node
|
|
311
|
+
};
|
|
399
312
|
}
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
}
|
|
409
|
-
if (disableExtractVariables) {
|
|
410
|
-
if (value) {
|
|
411
|
-
if (value.type === "StringLiteral" && value.value[0] === "$") {
|
|
412
|
-
if (shouldPrintDebug) {
|
|
413
|
-
console.log(` ! inlining, native disable extract: ${name} =`, value.value);
|
|
313
|
+
if (disableExtractVariables) {
|
|
314
|
+
if (value) {
|
|
315
|
+
if (value.type === "StringLiteral" && value.value[0] === "$") {
|
|
316
|
+
if (shouldPrintDebug) {
|
|
317
|
+
console.log(` ! inlining, native disable extract: ${name} =`, value.value);
|
|
318
|
+
}
|
|
319
|
+
inlined.set(name, true);
|
|
320
|
+
return attr;
|
|
414
321
|
}
|
|
415
|
-
inlinePropCount++;
|
|
416
|
-
return attr;
|
|
417
322
|
}
|
|
418
323
|
}
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
let keys = [name];
|
|
423
|
-
let out = null;
|
|
424
|
-
if (staticConfig.propMapper) {
|
|
425
|
-
out = staticConfig.propMapper(name, styleValue, defaultTheme, staticConfig.defaultProps, staticConfig);
|
|
426
|
-
if (out) {
|
|
427
|
-
out = rnw.createDOMProps(isTextView ? "span" : "div", out);
|
|
428
|
-
delete out.className;
|
|
429
|
-
keys = Object.keys(out);
|
|
430
|
-
}
|
|
324
|
+
if (name === "theme") {
|
|
325
|
+
inlined.set("theme", attr.value);
|
|
326
|
+
return attr;
|
|
431
327
|
}
|
|
432
|
-
const
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
328
|
+
const styleValue = attemptEvalSafe(value);
|
|
329
|
+
if (!isValidStyleKey(name)) {
|
|
330
|
+
let keys = [name];
|
|
331
|
+
let out = null;
|
|
332
|
+
if (staticConfig.propMapper) {
|
|
333
|
+
out = staticConfig.propMapper(name, styleValue, defaultTheme, staticConfig.defaultProps, "auto");
|
|
334
|
+
if (out) {
|
|
335
|
+
out = rnw.createDOMProps(isTextView ? "span" : "div", out);
|
|
336
|
+
delete out.className;
|
|
337
|
+
keys = Object.keys(out);
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
let didInline = false;
|
|
341
|
+
const attributes = keys.map((key) => {
|
|
342
|
+
const val = out[key];
|
|
343
|
+
if (isValidStyleKey(key)) {
|
|
436
344
|
return {
|
|
437
|
-
type: "
|
|
438
|
-
value:
|
|
345
|
+
type: "style",
|
|
346
|
+
value: { [name]: styleValue },
|
|
347
|
+
name,
|
|
348
|
+
attr: path.node
|
|
439
349
|
};
|
|
440
350
|
}
|
|
351
|
+
if (validHTMLAttributes[key]) {
|
|
352
|
+
return attr;
|
|
353
|
+
}
|
|
441
354
|
if (shouldPrintDebug) {
|
|
442
355
|
console.log(" ! inlining, non-static", key);
|
|
443
356
|
}
|
|
444
|
-
|
|
357
|
+
didInline = true;
|
|
358
|
+
inlined.set(key, val);
|
|
359
|
+
return val;
|
|
360
|
+
});
|
|
361
|
+
if (didInline) {
|
|
362
|
+
if (shouldPrintDebug) {
|
|
363
|
+
console.log(" bailing flattening due to attributes", attributes);
|
|
364
|
+
}
|
|
365
|
+
return attr;
|
|
445
366
|
}
|
|
446
|
-
return
|
|
447
|
-
type: "style",
|
|
448
|
-
value: { [name]: styleValue },
|
|
449
|
-
name,
|
|
450
|
-
attr: path.node
|
|
451
|
-
};
|
|
452
|
-
});
|
|
453
|
-
if (inlinePropCount) {
|
|
454
|
-
return attr;
|
|
367
|
+
return attributes;
|
|
455
368
|
}
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
369
|
+
if (styleValue !== FAILED_EVAL) {
|
|
370
|
+
if (isValidStyleKey(name)) {
|
|
371
|
+
if (shouldPrintDebug) {
|
|
372
|
+
console.log(` style: ${name} =`, styleValue);
|
|
373
|
+
}
|
|
374
|
+
if (!(name in staticConfig.defaultProps)) {
|
|
375
|
+
if (!hasSetOptimized) {
|
|
376
|
+
res.optimized++;
|
|
377
|
+
hasSetOptimized = true;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
return {
|
|
381
|
+
type: "style",
|
|
382
|
+
value: { [name]: styleValue },
|
|
383
|
+
name,
|
|
384
|
+
attr: path.node
|
|
385
|
+
};
|
|
386
|
+
} else {
|
|
387
|
+
inlined.set(name, true);
|
|
388
|
+
return attr;
|
|
466
389
|
}
|
|
467
390
|
}
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
391
|
+
if (t.isBinaryExpression(value)) {
|
|
392
|
+
if (shouldPrintDebug) {
|
|
393
|
+
console.log(` binary expression ${name} = `, value);
|
|
394
|
+
}
|
|
395
|
+
const { operator, left, right } = value;
|
|
396
|
+
const lVal = attemptEvalSafe(left);
|
|
397
|
+
const rVal = attemptEvalSafe(right);
|
|
398
|
+
if (shouldPrintDebug) {
|
|
399
|
+
console.log(` evalBinaryExpression lVal ${String(lVal)}, rVal ${String(rVal)}`);
|
|
400
|
+
}
|
|
401
|
+
if (lVal !== FAILED_EVAL && t.isConditionalExpression(right)) {
|
|
402
|
+
const ternary = addBinaryConditional(operator, left, right);
|
|
403
|
+
if (ternary)
|
|
404
|
+
return ternary;
|
|
405
|
+
}
|
|
406
|
+
if (rVal !== FAILED_EVAL && t.isConditionalExpression(left)) {
|
|
407
|
+
const ternary = addBinaryConditional(operator, right, left);
|
|
408
|
+
if (ternary)
|
|
409
|
+
return ternary;
|
|
410
|
+
}
|
|
411
|
+
if (shouldPrintDebug) {
|
|
412
|
+
console.log(` evalBinaryExpression cant extract`);
|
|
413
|
+
}
|
|
414
|
+
inlined.set(name, true);
|
|
415
|
+
return attr;
|
|
484
416
|
}
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
if (
|
|
488
|
-
|
|
417
|
+
const staticConditional = getStaticConditional(value);
|
|
418
|
+
if (staticConditional) {
|
|
419
|
+
if (shouldPrintDebug) {
|
|
420
|
+
console.log(` static conditional ${name} = `, value);
|
|
421
|
+
}
|
|
422
|
+
return { type: "ternary", value: staticConditional };
|
|
489
423
|
}
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
if (
|
|
493
|
-
|
|
424
|
+
const staticLogical = getStaticLogical(value);
|
|
425
|
+
if (staticLogical) {
|
|
426
|
+
if (shouldPrintDebug) {
|
|
427
|
+
console.log(` static ternary ${name} = `, value);
|
|
428
|
+
}
|
|
429
|
+
return { type: "ternary", value: staticLogical };
|
|
494
430
|
}
|
|
431
|
+
inlined.set(name, true);
|
|
495
432
|
if (shouldPrintDebug) {
|
|
496
|
-
console.log(`
|
|
433
|
+
console.log(` ! inline no match ${name}`, value);
|
|
497
434
|
}
|
|
498
|
-
inlinePropCount++;
|
|
499
435
|
return attr;
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
console.log(` static conditional ${name} = `, value);
|
|
505
|
-
}
|
|
506
|
-
return { type: "ternary", value: staticConditional };
|
|
507
|
-
}
|
|
508
|
-
const staticLogical = getStaticLogical(value);
|
|
509
|
-
if (staticLogical) {
|
|
510
|
-
if (shouldPrintDebug) {
|
|
511
|
-
console.log(` static ternary ${name} = `, value);
|
|
512
|
-
}
|
|
513
|
-
return { type: "ternary", value: staticLogical };
|
|
514
|
-
}
|
|
515
|
-
if (shouldPrintDebug) {
|
|
516
|
-
console.log(" ! inline prop via no match", name, value.type);
|
|
517
|
-
}
|
|
518
|
-
inlinePropCount++;
|
|
519
|
-
if (shouldPrintDebug) {
|
|
520
|
-
console.log(` inlining ${name} = `, value);
|
|
521
|
-
}
|
|
522
|
-
return attr;
|
|
523
|
-
function addBinaryConditional(operator, staticExpr, cond) {
|
|
524
|
-
if (getStaticConditional(cond)) {
|
|
525
|
-
const alt = attemptEval(t.binaryExpression(operator, staticExpr, cond.alternate));
|
|
526
|
-
const cons = attemptEval(t.binaryExpression(operator, staticExpr, cond.consequent));
|
|
527
|
-
if (shouldPrintDebug) {
|
|
528
|
-
console.log(" binaryConditional", cond.test, cons, alt);
|
|
529
|
-
}
|
|
530
|
-
return {
|
|
531
|
-
type: "ternary",
|
|
532
|
-
value: {
|
|
533
|
-
test: cond.test,
|
|
534
|
-
remove,
|
|
535
|
-
alternate: { [name]: alt },
|
|
536
|
-
consequent: { [name]: cons }
|
|
537
|
-
}
|
|
538
|
-
};
|
|
539
|
-
}
|
|
540
|
-
return null;
|
|
541
|
-
}
|
|
542
|
-
__name(addBinaryConditional, "addBinaryConditional");
|
|
543
|
-
function getStaticConditional(value2) {
|
|
544
|
-
if (t.isConditionalExpression(value2)) {
|
|
545
|
-
try {
|
|
436
|
+
function addBinaryConditional(operator, staticExpr, cond) {
|
|
437
|
+
if (getStaticConditional(cond)) {
|
|
438
|
+
const alt = attemptEval(t.binaryExpression(operator, staticExpr, cond.alternate));
|
|
439
|
+
const cons = attemptEval(t.binaryExpression(operator, staticExpr, cond.consequent));
|
|
546
440
|
if (shouldPrintDebug) {
|
|
547
|
-
console.log("
|
|
548
|
-
}
|
|
549
|
-
const aVal = attemptEval(value2.alternate);
|
|
550
|
-
const cVal = attemptEval(value2.consequent);
|
|
551
|
-
if (shouldPrintDebug) {
|
|
552
|
-
const type = value2.test.type;
|
|
553
|
-
console.log(" static ternary", type, cVal, aVal);
|
|
441
|
+
console.log(" binaryConditional", cond.test, cons, alt);
|
|
554
442
|
}
|
|
555
443
|
return {
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
444
|
+
type: "ternary",
|
|
445
|
+
value: {
|
|
446
|
+
test: cond.test,
|
|
447
|
+
remove,
|
|
448
|
+
alternate: { [name]: alt },
|
|
449
|
+
consequent: { [name]: cons }
|
|
450
|
+
}
|
|
560
451
|
};
|
|
561
|
-
} catch (err) {
|
|
562
|
-
if (shouldPrintDebug) {
|
|
563
|
-
console.log(" cant eval ternary", err.message);
|
|
564
|
-
}
|
|
565
452
|
}
|
|
453
|
+
return null;
|
|
566
454
|
}
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
function getStaticLogical(value2) {
|
|
571
|
-
if (t.isLogicalExpression(value2)) {
|
|
572
|
-
if (value2.operator === "&&") {
|
|
455
|
+
__name(addBinaryConditional, "addBinaryConditional");
|
|
456
|
+
function getStaticConditional(value2) {
|
|
457
|
+
if (t.isConditionalExpression(value2)) {
|
|
573
458
|
try {
|
|
574
|
-
const
|
|
459
|
+
const aVal = attemptEval(value2.alternate);
|
|
460
|
+
const cVal = attemptEval(value2.consequent);
|
|
575
461
|
if (shouldPrintDebug) {
|
|
576
|
-
|
|
462
|
+
const type = value2.test.type;
|
|
463
|
+
console.log(" static ternary", type, cVal, aVal);
|
|
577
464
|
}
|
|
578
465
|
return {
|
|
579
|
-
test: value2.
|
|
466
|
+
test: value2.test,
|
|
580
467
|
remove,
|
|
581
|
-
consequent: { [name]:
|
|
582
|
-
alternate:
|
|
468
|
+
consequent: { [name]: cVal },
|
|
469
|
+
alternate: { [name]: aVal }
|
|
583
470
|
};
|
|
584
471
|
} catch (err) {
|
|
585
472
|
if (shouldPrintDebug) {
|
|
586
|
-
console.log("
|
|
473
|
+
console.log(" cant eval ternary", err.message);
|
|
587
474
|
}
|
|
588
475
|
}
|
|
589
476
|
}
|
|
477
|
+
return null;
|
|
478
|
+
}
|
|
479
|
+
__name(getStaticConditional, "getStaticConditional");
|
|
480
|
+
function getStaticLogical(value2) {
|
|
481
|
+
if (t.isLogicalExpression(value2)) {
|
|
482
|
+
if (value2.operator === "&&") {
|
|
483
|
+
try {
|
|
484
|
+
const val = attemptEval(value2.right);
|
|
485
|
+
if (shouldPrintDebug) {
|
|
486
|
+
console.log(" staticLogical", value2.left, name, val);
|
|
487
|
+
}
|
|
488
|
+
return {
|
|
489
|
+
test: value2.left,
|
|
490
|
+
remove,
|
|
491
|
+
consequent: { [name]: val },
|
|
492
|
+
alternate: null
|
|
493
|
+
};
|
|
494
|
+
} catch (err) {
|
|
495
|
+
if (shouldPrintDebug) {
|
|
496
|
+
console.log(" cant static eval logical", err);
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
return null;
|
|
502
|
+
}
|
|
503
|
+
__name(getStaticLogical, "getStaticLogical");
|
|
504
|
+
}, isExtractable = function(obj) {
|
|
505
|
+
return t.isObjectExpression(obj) && obj.properties.every((prop) => {
|
|
506
|
+
if (!t.isObjectProperty(prop)) {
|
|
507
|
+
console.log("not object prop", prop);
|
|
508
|
+
return false;
|
|
509
|
+
}
|
|
510
|
+
const propName = prop.key["name"];
|
|
511
|
+
if (!isValidStyleKey(propName) && propName !== "tag") {
|
|
512
|
+
if (shouldPrintDebug) {
|
|
513
|
+
console.log(" not a valid style prop!", propName);
|
|
514
|
+
}
|
|
515
|
+
return false;
|
|
516
|
+
}
|
|
517
|
+
return true;
|
|
518
|
+
});
|
|
519
|
+
}, createTernariesFromObjectProperties = function(test, side, ternaryPartial = {}) {
|
|
520
|
+
if (!side) {
|
|
521
|
+
return null;
|
|
522
|
+
}
|
|
523
|
+
if (!isExtractable(side)) {
|
|
524
|
+
throw new Error("not extractable");
|
|
590
525
|
}
|
|
591
|
-
return
|
|
526
|
+
return side.properties.flatMap((property) => {
|
|
527
|
+
if (!t.isObjectProperty(property)) {
|
|
528
|
+
throw new Error("expected object property");
|
|
529
|
+
}
|
|
530
|
+
if (t.isIdentifier(property.key)) {
|
|
531
|
+
const key = property.key.name;
|
|
532
|
+
const mediaQueryKey = key.slice(1);
|
|
533
|
+
const isMediaQuery = key[0] === "$" && mediaQueryConfig[mediaQueryKey];
|
|
534
|
+
if (isMediaQuery) {
|
|
535
|
+
if (t.isExpression(property.value)) {
|
|
536
|
+
const ternaries2 = createTernariesFromObjectProperties(t.stringLiteral(mediaQueryKey), property.value, {
|
|
537
|
+
inlineMediaQuery: mediaQueryKey
|
|
538
|
+
});
|
|
539
|
+
if (ternaries2) {
|
|
540
|
+
return ternaries2.map((value) => ({
|
|
541
|
+
...ternaryPartial,
|
|
542
|
+
...value,
|
|
543
|
+
test: t.logicalExpression("&&", value.test, test)
|
|
544
|
+
}));
|
|
545
|
+
} else {
|
|
546
|
+
console.log("\u26A0\uFE0F no ternaries?", property);
|
|
547
|
+
}
|
|
548
|
+
} else {
|
|
549
|
+
console.log("\u26A0\uFE0F not expression", property);
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
if (t.isConditionalExpression(property.value)) {
|
|
554
|
+
const [truthy, falsy] = [
|
|
555
|
+
t.objectExpression([t.objectProperty(property.key, property.value.consequent)]),
|
|
556
|
+
t.objectExpression([t.objectProperty(property.key, property.value.alternate)])
|
|
557
|
+
].map((x) => attemptEval(x));
|
|
558
|
+
return [
|
|
559
|
+
createTernary({
|
|
560
|
+
remove() {
|
|
561
|
+
},
|
|
562
|
+
...ternaryPartial,
|
|
563
|
+
test: t.logicalExpression("&&", test, property.value.test),
|
|
564
|
+
consequent: truthy,
|
|
565
|
+
alternate: null
|
|
566
|
+
}),
|
|
567
|
+
createTernary({
|
|
568
|
+
...ternaryPartial,
|
|
569
|
+
test: t.logicalExpression("&&", test, t.unaryExpression("!", property.value.test)),
|
|
570
|
+
consequent: falsy,
|
|
571
|
+
alternate: null,
|
|
572
|
+
remove() {
|
|
573
|
+
}
|
|
574
|
+
})
|
|
575
|
+
];
|
|
576
|
+
}
|
|
577
|
+
const obj = t.objectExpression([t.objectProperty(property.key, property.value)]);
|
|
578
|
+
const consequent = attemptEval(obj);
|
|
579
|
+
return createTernary({
|
|
580
|
+
remove() {
|
|
581
|
+
},
|
|
582
|
+
...ternaryPartial,
|
|
583
|
+
test,
|
|
584
|
+
consequent,
|
|
585
|
+
alternate: null
|
|
586
|
+
});
|
|
587
|
+
});
|
|
588
|
+
}, mergeStyles = function(prev2, next) {
|
|
589
|
+
for (const key in next) {
|
|
590
|
+
if (pseudos[key]) {
|
|
591
|
+
prev2[key] = prev2[key] || {};
|
|
592
|
+
if (shouldPrintDebug) {
|
|
593
|
+
if (!next[key] || !prev2[key]) {
|
|
594
|
+
console.log("warn: missing", key, prev2, next);
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
Object.assign(prev2[key], next[key]);
|
|
598
|
+
} else {
|
|
599
|
+
prev2[key] = next[key];
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
};
|
|
603
|
+
__name(isValidStyleKey, "isValidStyleKey");
|
|
604
|
+
__name(evaluateAttribute, "evaluateAttribute");
|
|
605
|
+
__name(isExtractable, "isExtractable");
|
|
606
|
+
__name(createTernariesFromObjectProperties, "createTernariesFromObjectProperties");
|
|
607
|
+
__name(mergeStyles, "mergeStyles");
|
|
608
|
+
node.attributes.find((n) => t.isJSXAttribute(n) && t.isJSXIdentifier(n.name) && n.name.name === "debug" && n.value === null);
|
|
609
|
+
if (shouldPrintDebug) {
|
|
610
|
+
console.log("\n");
|
|
611
|
+
console.log("\x1B[33m%s\x1B[0m", `${tagId[0]} | ${tagId[2]} -------------------`);
|
|
612
|
+
console.log("\x1B[1m", "\x1B[32m", `<${originalNodeName} />`);
|
|
592
613
|
}
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
614
|
+
if (shouldAddDebugProp && !disableDebugAttr) {
|
|
615
|
+
res.modified++;
|
|
616
|
+
node.attributes.unshift(t.jsxAttribute(t.jsxIdentifier("data-is"), t.stringLiteral(tagId.join(" "))));
|
|
617
|
+
}
|
|
618
|
+
const shouldLog = !hasLogged;
|
|
619
|
+
if (shouldLog) {
|
|
620
|
+
const prefix = " |";
|
|
621
|
+
console.log(prefixLogs || prefix, " total \xB7 optimized \xB7 flattened ");
|
|
622
|
+
hasLogged = true;
|
|
623
|
+
}
|
|
624
|
+
if (disableExtraction) {
|
|
625
|
+
return;
|
|
626
|
+
}
|
|
627
|
+
const { staticConfig } = component;
|
|
628
|
+
const isTextView = staticConfig.isText || false;
|
|
629
|
+
const validStyles = (_a = staticConfig == null ? void 0 : staticConfig.validStyles) != null ? _a : {};
|
|
630
|
+
let tagName = (_c = (_b = staticConfig.defaultProps) == null ? void 0 : _b.tag) != null ? _c : isTextView ? "span" : "div";
|
|
631
|
+
traversePath.get("openingElement").get("attributes").forEach((path) => {
|
|
632
|
+
const attr = path.node;
|
|
633
|
+
if (t.isJSXSpreadAttribute(attr))
|
|
634
|
+
return;
|
|
635
|
+
if (attr.name.name !== "tag")
|
|
636
|
+
return;
|
|
637
|
+
const val = attr.value;
|
|
638
|
+
if (!t.isStringLiteral(val))
|
|
639
|
+
return;
|
|
640
|
+
tagName = val.value;
|
|
641
|
+
});
|
|
642
|
+
const flatNode = getFlattenedNode({ isTextView, tag: tagName });
|
|
643
|
+
const inlineProps = /* @__PURE__ */ new Set([
|
|
644
|
+
...props.inlineProps || [],
|
|
645
|
+
...staticConfig.inlineProps || []
|
|
646
|
+
]);
|
|
647
|
+
const deoptProps = /* @__PURE__ */ new Set([
|
|
648
|
+
"animation",
|
|
649
|
+
...props.deoptProps || [],
|
|
650
|
+
...staticConfig.deoptProps || []
|
|
651
|
+
]);
|
|
652
|
+
const staticNamespace = getStaticBindingsForScope(traversePath.scope, importsWhitelist, sourcePath, bindingCache, shouldPrintDebug);
|
|
653
|
+
const attemptEval = !evaluateVars ? evaluateAstNode : createEvaluator({
|
|
654
|
+
tamaguiConfig,
|
|
655
|
+
staticNamespace,
|
|
656
|
+
sourcePath,
|
|
657
|
+
traversePath,
|
|
658
|
+
shouldPrintDebug
|
|
659
|
+
});
|
|
660
|
+
const attemptEvalSafe = createSafeEvaluator(attemptEval);
|
|
661
|
+
if (shouldPrintDebug) {
|
|
662
|
+
console.log(" staticNamespace", Object.keys(staticNamespace).join(", "));
|
|
663
|
+
}
|
|
664
|
+
const flattenedAttrs = [];
|
|
665
|
+
traversePath.get("openingElement").get("attributes").forEach((path) => {
|
|
666
|
+
const attr = path.node;
|
|
667
|
+
if (!t.isJSXSpreadAttribute(attr)) {
|
|
668
|
+
flattenedAttrs.push(attr);
|
|
669
|
+
return;
|
|
601
670
|
}
|
|
602
|
-
|
|
603
|
-
|
|
671
|
+
let arg;
|
|
672
|
+
try {
|
|
673
|
+
arg = attemptEval(attr.argument);
|
|
674
|
+
} catch (e) {
|
|
604
675
|
if (shouldPrintDebug) {
|
|
605
|
-
console.log("
|
|
676
|
+
console.log(" couldnt parse spread", e.message);
|
|
677
|
+
}
|
|
678
|
+
flattenedAttrs.push(attr);
|
|
679
|
+
return;
|
|
680
|
+
}
|
|
681
|
+
if (arg !== void 0) {
|
|
682
|
+
try {
|
|
683
|
+
if (typeof arg !== "object" || arg == null) {
|
|
684
|
+
if (shouldPrintDebug) {
|
|
685
|
+
console.log(" non object or null arg", arg);
|
|
686
|
+
}
|
|
687
|
+
flattenedAttrs.push(attr);
|
|
688
|
+
} else {
|
|
689
|
+
for (const k in arg) {
|
|
690
|
+
const value = arg[k];
|
|
691
|
+
if (!value && typeof value === "object") {
|
|
692
|
+
console.log("shouldnt we handle this?", k, value, arg);
|
|
693
|
+
continue;
|
|
694
|
+
}
|
|
695
|
+
flattenedAttrs.push(t.jsxAttribute(t.jsxIdentifier(k), t.jsxExpressionContainer(literalToAst(value))));
|
|
696
|
+
}
|
|
697
|
+
}
|
|
698
|
+
} catch (err) {
|
|
699
|
+
console.warn("cant parse spread, caught err", err);
|
|
700
|
+
couldntParse = true;
|
|
606
701
|
}
|
|
607
|
-
return false;
|
|
608
702
|
}
|
|
609
|
-
return true;
|
|
610
703
|
});
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
704
|
+
if (couldntParse) {
|
|
705
|
+
return;
|
|
706
|
+
}
|
|
707
|
+
tm.mark("jsx-element-flattened", shouldPrintDebug === "verbose");
|
|
708
|
+
node.attributes = flattenedAttrs;
|
|
709
|
+
if (staticConfig.defaultProps) {
|
|
710
|
+
for (const key in staticConfig.defaultProps) {
|
|
711
|
+
if (isValidStyleKey(key)) {
|
|
712
|
+
continue;
|
|
713
|
+
}
|
|
714
|
+
const serialize = require("babel-literal-to-ast");
|
|
715
|
+
const val = staticConfig.defaultProps[key];
|
|
716
|
+
try {
|
|
717
|
+
const serializedDefaultProp = serialize(val);
|
|
718
|
+
node.attributes.unshift(t.jsxAttribute(t.jsxIdentifier(key), typeof val === "string" ? t.stringLiteral(val) : t.jsxExpressionContainer(serializedDefaultProp)));
|
|
719
|
+
} catch (err) {
|
|
720
|
+
console.warn(`\u26A0\uFE0F Error evaluating default prop for component ${node.name.name}, prop ${key}
|
|
721
|
+
error: ${err}
|
|
722
|
+
value:`, val, "\n defaultProps:", staticConfig.defaultProps);
|
|
723
|
+
}
|
|
724
|
+
}
|
|
616
725
|
}
|
|
617
|
-
|
|
618
|
-
|
|
726
|
+
let attrs = [];
|
|
727
|
+
let shouldDeopt = false;
|
|
728
|
+
const inlined = /* @__PURE__ */ new Map();
|
|
729
|
+
let hasSetOptimized = false;
|
|
730
|
+
attrs = traversePath.get("openingElement").get("attributes").flatMap((path) => {
|
|
731
|
+
try {
|
|
732
|
+
const res2 = evaluateAttribute(path);
|
|
733
|
+
tm.mark("jsx-element-evaluate-attr", shouldPrintDebug === "verbose");
|
|
734
|
+
if (!res2) {
|
|
735
|
+
path.remove();
|
|
736
|
+
}
|
|
737
|
+
return res2;
|
|
738
|
+
} catch (err) {
|
|
739
|
+
if (shouldPrintDebug) {
|
|
740
|
+
console.log("Error extracting attribute", err.message, err.stack);
|
|
741
|
+
console.log("node", path.node);
|
|
742
|
+
}
|
|
743
|
+
return {
|
|
744
|
+
type: "attr",
|
|
745
|
+
value: path.node
|
|
746
|
+
};
|
|
747
|
+
}
|
|
748
|
+
}).flat(4).filter(isPresent);
|
|
749
|
+
if (shouldPrintDebug) {
|
|
750
|
+
console.log(" - attrs (before):\n", logLines(attrs.map(attrStr).join(", ")));
|
|
619
751
|
}
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
752
|
+
node.attributes = attrs.filter(isAttr).map((x) => x.value);
|
|
753
|
+
if (couldntParse || shouldDeopt) {
|
|
754
|
+
if (shouldPrintDebug) {
|
|
755
|
+
console.log(` avoid optimizing:`, { couldntParse, shouldDeopt });
|
|
623
756
|
}
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
757
|
+
node.attributes = ogAttributes;
|
|
758
|
+
return;
|
|
759
|
+
}
|
|
760
|
+
const parentFn = findTopmostFunction(traversePath);
|
|
761
|
+
if (parentFn) {
|
|
762
|
+
modifiedComponents.add(parentFn);
|
|
763
|
+
}
|
|
764
|
+
let ternaries = [];
|
|
765
|
+
attrs = attrs.reduce((out, cur) => {
|
|
766
|
+
const next = attrs[attrs.indexOf(cur) + 1];
|
|
767
|
+
if (cur.type === "ternary") {
|
|
768
|
+
ternaries.push(cur.value);
|
|
769
|
+
}
|
|
770
|
+
if ((!next || next.type !== "ternary") && ternaries.length) {
|
|
771
|
+
const normalized = normalizeTernaries(ternaries).map(({ alternate, consequent, ...rest }) => {
|
|
772
|
+
return {
|
|
773
|
+
type: "ternary",
|
|
774
|
+
value: {
|
|
775
|
+
...rest,
|
|
776
|
+
alternate: alternate || null,
|
|
777
|
+
consequent: consequent || null
|
|
641
778
|
}
|
|
642
|
-
}
|
|
643
|
-
|
|
779
|
+
};
|
|
780
|
+
});
|
|
781
|
+
try {
|
|
782
|
+
return [...out, ...normalized];
|
|
783
|
+
} finally {
|
|
784
|
+
if (shouldPrintDebug) {
|
|
785
|
+
console.log(` normalizeTernaries (${ternaries.length} => ${normalized.length})`);
|
|
644
786
|
}
|
|
787
|
+
ternaries = [];
|
|
645
788
|
}
|
|
646
789
|
}
|
|
647
|
-
if (
|
|
648
|
-
|
|
649
|
-
t.objectExpression([t.objectProperty(property.key, property.value.consequent)]),
|
|
650
|
-
t.objectExpression([t.objectProperty(property.key, property.value.alternate)])
|
|
651
|
-
].map((x) => attemptEval(x));
|
|
652
|
-
return [
|
|
653
|
-
createTernary({
|
|
654
|
-
remove() {
|
|
655
|
-
},
|
|
656
|
-
...ternaryPartial,
|
|
657
|
-
test: t.logicalExpression("&&", test, property.value.test),
|
|
658
|
-
consequent: truthy,
|
|
659
|
-
alternate: null
|
|
660
|
-
}),
|
|
661
|
-
createTernary({
|
|
662
|
-
...ternaryPartial,
|
|
663
|
-
test: t.logicalExpression("&&", test, t.unaryExpression("!", property.value.test)),
|
|
664
|
-
consequent: falsy,
|
|
665
|
-
alternate: null,
|
|
666
|
-
remove() {
|
|
667
|
-
}
|
|
668
|
-
})
|
|
669
|
-
];
|
|
790
|
+
if (cur.type === "ternary") {
|
|
791
|
+
return out;
|
|
670
792
|
}
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
}
|
|
683
|
-
__name(createTernariesFromObjectProperties, "createTernariesFromObjectProperties");
|
|
684
|
-
node.attributes = attrs.filter(isAttr).map((x) => x.value);
|
|
685
|
-
if (couldntParse || shouldDeopt) {
|
|
793
|
+
out.push(cur);
|
|
794
|
+
return out;
|
|
795
|
+
}, []).flat();
|
|
796
|
+
const hasSpread = node.attributes.some((x) => t.isJSXSpreadAttribute(x));
|
|
797
|
+
const hasOnlyStringChildren = !hasSpread && (node.selfClosing || traversePath.node.children && traversePath.node.children.every((x) => x.type === "JSXText"));
|
|
798
|
+
let themeVal = inlined.get("theme");
|
|
799
|
+
inlined.delete("theme");
|
|
800
|
+
const allOtherPropsExtractable = [...inlined].every(([k, v]) => INLINE_EXTRACTABLE[k]);
|
|
801
|
+
const shouldWrapThme = allOtherPropsExtractable && !!themeVal;
|
|
802
|
+
const canFlattenProps = inlined.size === 0 || shouldWrapThme || allOtherPropsExtractable;
|
|
803
|
+
let shouldFlatten = !shouldDeopt && canFlattenProps && !hasSpread && staticConfig.neverFlatten !== true && (staticConfig.neverFlatten === "jsx" ? hasOnlyStringChildren : true);
|
|
686
804
|
if (shouldPrintDebug) {
|
|
687
|
-
console.log(
|
|
805
|
+
console.log(" - flatten?", objToStr({ hasSpread, shouldDeopt, shouldFlatten, canFlattenProps, shouldWrapThme, allOtherPropsExtractable, hasOnlyStringChildren }));
|
|
688
806
|
}
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
807
|
+
if (shouldFlatten && shouldWrapThme) {
|
|
808
|
+
if (shouldPrintDebug) {
|
|
809
|
+
console.log(" - wrapping theme", allOtherPropsExtractable, themeVal);
|
|
810
|
+
}
|
|
811
|
+
attrs = attrs.filter((x) => x.type === "attr" && t.isJSXAttribute(x.value) && x.value.name.name === "theme" ? false : true);
|
|
812
|
+
if (!hasImportedTheme) {
|
|
813
|
+
hasImportedTheme = true;
|
|
814
|
+
programPath.node.body.push(t.importDeclaration([t.importSpecifier(t.identifier("_TamaguiTheme"), t.identifier("Theme"))], t.stringLiteral("@tamagui/core")));
|
|
815
|
+
}
|
|
816
|
+
traversePath.replaceWith(t.jsxElement(t.jsxOpeningElement(t.jsxIdentifier("_TamaguiTheme"), [
|
|
817
|
+
t.jsxAttribute(t.jsxIdentifier("name"), themeVal.value)
|
|
818
|
+
]), t.jsxClosingElement(t.jsxIdentifier("_TamaguiTheme")), [traversePath.node]));
|
|
701
819
|
}
|
|
702
|
-
if (
|
|
703
|
-
const
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
}
|
|
820
|
+
if (shouldFlatten && staticConfig.defaultProps) {
|
|
821
|
+
const defaultStyleAttrs = Object.keys(staticConfig.defaultProps).flatMap((key) => {
|
|
822
|
+
if (!isValidStyleKey(key)) {
|
|
823
|
+
return [];
|
|
824
|
+
}
|
|
825
|
+
const value = staticConfig.defaultProps[key];
|
|
826
|
+
const name = tamaguiConfig.shorthands[key] || key;
|
|
827
|
+
if (value === void 0) {
|
|
828
|
+
console.warn(`\u26A0\uFE0F Error evaluating default style for component, prop ${key} ${value}`);
|
|
829
|
+
shouldDeopt = true;
|
|
830
|
+
return;
|
|
831
|
+
}
|
|
832
|
+
const attr = {
|
|
833
|
+
type: "style",
|
|
834
|
+
name,
|
|
835
|
+
value: { [name]: value }
|
|
711
836
|
};
|
|
837
|
+
return attr;
|
|
712
838
|
});
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
}
|
|
716
|
-
|
|
717
|
-
|
|
839
|
+
if (defaultStyleAttrs.length) {
|
|
840
|
+
attrs = [...defaultStyleAttrs, ...attrs];
|
|
841
|
+
}
|
|
842
|
+
}
|
|
843
|
+
if (shouldDeopt) {
|
|
844
|
+
node.attributes = ogAttributes;
|
|
845
|
+
return;
|
|
846
|
+
}
|
|
847
|
+
const ensureOverridden = {};
|
|
848
|
+
if (!shouldFlatten) {
|
|
849
|
+
for (const cur of attrs) {
|
|
850
|
+
if (cur.type === "style") {
|
|
851
|
+
for (const key in cur.value) {
|
|
852
|
+
const shouldEnsureOverridden = !!((_d = staticConfig.ensureOverriddenProp) == null ? void 0 : _d[key]);
|
|
853
|
+
const isSetInAttrsAlready = attrs.some((x) => x.type === "attr" && x.value.type === "JSXAttribute" && x.value.name.name === key);
|
|
854
|
+
if (!isSetInAttrsAlready) {
|
|
855
|
+
const isVariant = !!((_e = staticConfig.variants) == null ? void 0 : _e[cur.name || ""]);
|
|
856
|
+
if (isVariant || shouldEnsureOverridden) {
|
|
857
|
+
ensureOverridden[key] = true;
|
|
858
|
+
}
|
|
859
|
+
}
|
|
860
|
+
}
|
|
718
861
|
}
|
|
719
|
-
ternaries = [];
|
|
720
862
|
}
|
|
721
863
|
}
|
|
722
|
-
if (
|
|
723
|
-
|
|
864
|
+
if (shouldPrintDebug) {
|
|
865
|
+
console.log(" - attrs (flattened): \n", logLines(attrs.map(attrStr).join(", ")));
|
|
866
|
+
console.log(" - ensureOverriden:", Object.keys(ensureOverridden).join(", "));
|
|
867
|
+
}
|
|
868
|
+
attrs = attrs.reduce((acc, cur) => {
|
|
869
|
+
if (!cur) {
|
|
870
|
+
return acc;
|
|
871
|
+
}
|
|
872
|
+
if (cur.type === "attr" && !t.isJSXSpreadAttribute(cur.value)) {
|
|
873
|
+
if (shouldFlatten) {
|
|
874
|
+
if (cur.value.name.name === "tag") {
|
|
875
|
+
return acc;
|
|
876
|
+
}
|
|
877
|
+
}
|
|
878
|
+
}
|
|
879
|
+
if (cur.type !== "style") {
|
|
880
|
+
acc.push(cur);
|
|
881
|
+
return acc;
|
|
882
|
+
}
|
|
883
|
+
let key = Object.keys(cur.value)[0];
|
|
884
|
+
const value = cur.value[key];
|
|
885
|
+
const fullKey = tamaguiConfig.shorthands[key];
|
|
886
|
+
if (fullKey) {
|
|
887
|
+
cur.value = { [fullKey]: value };
|
|
888
|
+
key = fullKey;
|
|
889
|
+
}
|
|
890
|
+
if (disableExtractVariables) {
|
|
891
|
+
if (value[0] === "$") {
|
|
892
|
+
if (shouldPrintDebug) {
|
|
893
|
+
console.log(` keeping variable inline: ${key} =`, value);
|
|
894
|
+
}
|
|
895
|
+
acc.push({
|
|
896
|
+
type: "attr",
|
|
897
|
+
value: t.jsxAttribute(t.jsxIdentifier(key), t.jsxExpressionContainer(t.stringLiteral(value)))
|
|
898
|
+
});
|
|
899
|
+
return acc;
|
|
900
|
+
}
|
|
901
|
+
}
|
|
902
|
+
acc.push(cur);
|
|
903
|
+
return acc;
|
|
904
|
+
}, []);
|
|
905
|
+
tm.mark("jsx-element-expanded", shouldPrintDebug === "verbose");
|
|
906
|
+
if (shouldPrintDebug) {
|
|
907
|
+
console.log(" - attrs (expanded): \n", logLines(attrs.map(attrStr).join(", ")));
|
|
724
908
|
}
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
909
|
+
let prev = null;
|
|
910
|
+
attrs = attrs.reduce((acc, cur) => {
|
|
911
|
+
if (cur.type === "style") {
|
|
912
|
+
const key = Object.keys(cur.value)[0];
|
|
913
|
+
const value = cur.value[key];
|
|
914
|
+
const shouldKeepOriginalAttr = !shouldFlatten && !validStyles[key] && !pseudos[key] && !key.startsWith("data-");
|
|
915
|
+
if (shouldKeepOriginalAttr) {
|
|
916
|
+
if (shouldPrintDebug) {
|
|
917
|
+
console.log(" - keeping as non-style", key);
|
|
918
|
+
}
|
|
919
|
+
prev = cur;
|
|
920
|
+
acc.push({
|
|
921
|
+
type: "attr",
|
|
922
|
+
value: t.jsxAttribute(t.jsxIdentifier(key), t.jsxExpressionContainer(typeof value === "string" ? t.stringLiteral(value) : literalToAst(value)))
|
|
923
|
+
});
|
|
924
|
+
acc.push(cur);
|
|
925
|
+
return acc;
|
|
926
|
+
}
|
|
927
|
+
if (ensureOverridden[key]) {
|
|
928
|
+
acc.push({
|
|
929
|
+
type: "attr",
|
|
930
|
+
value: cur.attr || t.jsxAttribute(t.jsxIdentifier(key), t.jsxExpressionContainer(t.nullLiteral()))
|
|
931
|
+
});
|
|
932
|
+
}
|
|
933
|
+
if ((prev == null ? void 0 : prev.type) === "style") {
|
|
934
|
+
mergeStyles(prev.value, cur.value);
|
|
935
|
+
return acc;
|
|
936
|
+
}
|
|
937
|
+
}
|
|
938
|
+
prev = cur;
|
|
939
|
+
acc.push(cur);
|
|
940
|
+
return acc;
|
|
941
|
+
}, []);
|
|
942
|
+
const state = {
|
|
943
|
+
noClassNames: true,
|
|
944
|
+
focus: false,
|
|
945
|
+
hover: false,
|
|
946
|
+
mounted: true,
|
|
947
|
+
press: false,
|
|
948
|
+
pressIn: false
|
|
949
|
+
};
|
|
950
|
+
const completeStaticProps = Object.keys(attrs).reduce((acc, index) => {
|
|
730
951
|
const cur = attrs[index];
|
|
731
952
|
if (cur.type === "style") {
|
|
953
|
+
normalizeStyleObject(cur.value);
|
|
732
954
|
Object.assign(acc, cur.value);
|
|
733
955
|
}
|
|
734
956
|
if (cur.type === "attr") {
|
|
@@ -746,282 +968,185 @@ function createExtractor() {
|
|
|
746
968
|
acc[key] = value;
|
|
747
969
|
}
|
|
748
970
|
return acc;
|
|
749
|
-
}, {})
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
971
|
+
}, {});
|
|
972
|
+
const completeProps = {
|
|
973
|
+
...staticConfig.defaultProps,
|
|
974
|
+
...completeStaticProps
|
|
975
|
+
};
|
|
976
|
+
if (shouldPrintDebug) {
|
|
977
|
+
console.log(" - attrs (combined \u{1F500}): \n", logLines(attrs.map(attrStr).join(", ")));
|
|
978
|
+
console.log(" - defaultProps: \n", logLines(objToStr(staticConfig.defaultProps)));
|
|
979
|
+
console.log(" - completeStaticProps: \n", logLines(objToStr(completeStaticProps)));
|
|
980
|
+
}
|
|
981
|
+
const getStyles = /* @__PURE__ */ __name((props2, debugName = "") => {
|
|
982
|
+
if (!props2 || !Object.keys(props2).length) {
|
|
983
|
+
if (shouldPrintDebug)
|
|
984
|
+
console.log(" getStyles() no props");
|
|
985
|
+
return {};
|
|
986
|
+
}
|
|
987
|
+
if (excludeProps && !!excludeProps.size) {
|
|
988
|
+
for (const key in props2) {
|
|
989
|
+
if (excludeProps.has(key)) {
|
|
990
|
+
if (shouldPrintDebug)
|
|
991
|
+
console.log(" delete excluded", key);
|
|
992
|
+
delete props2[key];
|
|
993
|
+
}
|
|
994
|
+
}
|
|
758
995
|
}
|
|
759
996
|
try {
|
|
760
|
-
const
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
value
|
|
997
|
+
const out = getSplitStyles(props2, staticConfig, defaultTheme, {
|
|
998
|
+
...state,
|
|
999
|
+
fallbackProps: completeProps
|
|
1000
|
+
});
|
|
1001
|
+
const outStyle = {
|
|
1002
|
+
...out.style,
|
|
1003
|
+
...out.pseudos
|
|
768
1004
|
};
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
if (defaultStyleAttrs.length) {
|
|
776
|
-
attrs = [...defaultStyleAttrs, ...attrs];
|
|
777
|
-
}
|
|
778
|
-
}
|
|
779
|
-
if (shouldDeopt) {
|
|
780
|
-
node.attributes = ogAttributes;
|
|
781
|
-
return;
|
|
782
|
-
}
|
|
783
|
-
const ensureOverridden = {};
|
|
784
|
-
if (!shouldFlatten) {
|
|
785
|
-
for (const cur of attrs) {
|
|
786
|
-
if (cur.type === "style") {
|
|
787
|
-
for (const key in cur.value) {
|
|
788
|
-
const shouldEnsureOverridden = !!((_d = staticConfig.ensureOverriddenProp) == null ? void 0 : _d[key]);
|
|
789
|
-
const isSetInAttrsAlready = attrs.some((x) => x.type === "attr" && x.value.type === "JSXAttribute" && x.value.name.name === key);
|
|
790
|
-
if (!isSetInAttrsAlready) {
|
|
791
|
-
const isVariant = !!((_e = staticConfig.variants) == null ? void 0 : _e[cur.name || ""]);
|
|
792
|
-
if (isVariant || shouldEnsureOverridden) {
|
|
793
|
-
ensureOverridden[key] = true;
|
|
1005
|
+
if (staticConfig.validStyles) {
|
|
1006
|
+
for (const key in outStyle) {
|
|
1007
|
+
if (!staticConfig.validStyles[key] && !pseudos[key] && !/(hover|focus|press)Style$/.test(key)) {
|
|
1008
|
+
if (shouldPrintDebug)
|
|
1009
|
+
console.log(" delete invalid style", key);
|
|
1010
|
+
delete outStyle[key];
|
|
794
1011
|
}
|
|
795
1012
|
}
|
|
796
1013
|
}
|
|
797
|
-
}
|
|
798
|
-
}
|
|
799
|
-
}
|
|
800
|
-
if (shouldPrintDebug) {
|
|
801
|
-
console.log(" - attrs (flattened): \n", logLines(attrs.map(attrStr).join(", ")));
|
|
802
|
-
console.log(" - ensureOverriden:", Object.keys(ensureOverridden).join(", "));
|
|
803
|
-
}
|
|
804
|
-
attrs = attrs.reduce((acc, cur) => {
|
|
805
|
-
if (!cur) {
|
|
806
|
-
return acc;
|
|
807
|
-
}
|
|
808
|
-
if (shouldFlatten && cur.type === "attr" && !t.isJSXSpreadAttribute(cur.value) && cur.value.name.name === "tag") {
|
|
809
|
-
return acc;
|
|
810
|
-
}
|
|
811
|
-
if (cur.type !== "style") {
|
|
812
|
-
acc.push(cur);
|
|
813
|
-
return acc;
|
|
814
|
-
}
|
|
815
|
-
let key = Object.keys(cur.value)[0];
|
|
816
|
-
const value = cur.value[key];
|
|
817
|
-
const fullKey = tamaguiConfig.shorthands[key];
|
|
818
|
-
if (fullKey) {
|
|
819
|
-
cur.value = { [fullKey]: value };
|
|
820
|
-
key = fullKey;
|
|
821
|
-
}
|
|
822
|
-
if (disableExtractVariables) {
|
|
823
|
-
if (value[0] === "$") {
|
|
824
1014
|
if (shouldPrintDebug) {
|
|
825
|
-
console.log(`
|
|
1015
|
+
console.log(` getStyles ${debugName} (props):
|
|
1016
|
+
`, logLines(objToStr(props2)));
|
|
1017
|
+
console.log(` getStyles ${debugName} (out.viewProps):
|
|
1018
|
+
`, logLines(objToStr(out.viewProps)));
|
|
1019
|
+
console.log(` getStyles ${debugName} (out.style):
|
|
1020
|
+
`, logLines(objToStr(outStyle || {}), true));
|
|
826
1021
|
}
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
}
|
|
831
|
-
return acc;
|
|
1022
|
+
return outStyle;
|
|
1023
|
+
} catch (err) {
|
|
1024
|
+
console.log("error", err.message, err.stack);
|
|
1025
|
+
return {};
|
|
832
1026
|
}
|
|
1027
|
+
}, "getStyles");
|
|
1028
|
+
const completeStylesProcessed = getStyles(completeProps, "completeStylesProcessed");
|
|
1029
|
+
if (!completeStylesProcessed) {
|
|
1030
|
+
throw new Error(`Impossible, no styles`);
|
|
833
1031
|
}
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
if (pseudos[key]) {
|
|
844
|
-
prev2[key] = prev2[key] || {};
|
|
845
|
-
Object.assign(prev2[key], next[key]);
|
|
1032
|
+
const stylesToAddToInitialGroup = shouldFlatten ? difference(Object.keys(completeStylesProcessed), Object.keys(completeStaticProps)) : [];
|
|
1033
|
+
if (stylesToAddToInitialGroup.length) {
|
|
1034
|
+
const toAdd = pick(completeStylesProcessed, ...stylesToAddToInitialGroup);
|
|
1035
|
+
const firstGroup = attrs.find((x) => x.type === "style");
|
|
1036
|
+
if (shouldPrintDebug) {
|
|
1037
|
+
console.log(" toAdd", objToStr(toAdd));
|
|
1038
|
+
}
|
|
1039
|
+
if (!firstGroup) {
|
|
1040
|
+
attrs.unshift({ type: "style", value: toAdd });
|
|
846
1041
|
} else {
|
|
847
|
-
|
|
1042
|
+
Object.assign(firstGroup.value, toAdd);
|
|
848
1043
|
}
|
|
849
1044
|
}
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
const key = Object.keys(cur.value)[0];
|
|
855
|
-
const value = cur.value[key];
|
|
856
|
-
const shouldKeepOriginalAttr = !shouldFlatten && !validStyles[key] && !pseudos[key] && !key.startsWith("data-");
|
|
857
|
-
if (shouldKeepOriginalAttr) {
|
|
858
|
-
if (shouldPrintDebug) {
|
|
859
|
-
console.log(" - keeping as non-style", key);
|
|
860
|
-
}
|
|
861
|
-
prev = cur;
|
|
862
|
-
acc.push({
|
|
863
|
-
type: "attr",
|
|
864
|
-
value: t.jsxAttribute(t.jsxIdentifier(key), t.jsxExpressionContainer(typeof value === "string" ? t.stringLiteral(value) : literalToAst(value)))
|
|
865
|
-
});
|
|
866
|
-
acc.push(cur);
|
|
867
|
-
return acc;
|
|
868
|
-
}
|
|
869
|
-
if (ensureOverridden[key]) {
|
|
870
|
-
acc.push({
|
|
871
|
-
type: "attr",
|
|
872
|
-
value: cur.attr || t.jsxAttribute(t.jsxIdentifier(key), t.jsxExpressionContainer(t.nullLiteral()))
|
|
873
|
-
});
|
|
874
|
-
}
|
|
875
|
-
if ((prev == null ? void 0 : prev.type) === "style") {
|
|
876
|
-
mergeStyles(prev.value, cur.value);
|
|
877
|
-
return acc;
|
|
878
|
-
}
|
|
1045
|
+
if (shouldPrintDebug) {
|
|
1046
|
+
console.log(" -- stylesToAddToInitialGroup", stylesToAddToInitialGroup.join(", "), { shouldFlatten });
|
|
1047
|
+
console.log(" -- completeStaticProps:\n", logLines(objToStr(completeStaticProps)));
|
|
1048
|
+
console.log(" -- completeStylesProcessed:\n", logLines(objToStr(completeStylesProcessed)));
|
|
879
1049
|
}
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
1050
|
+
let getStyleError = null;
|
|
1051
|
+
for (const attr of attrs) {
|
|
1052
|
+
try {
|
|
1053
|
+
if (shouldPrintDebug)
|
|
1054
|
+
console.log(" *", attrStr(attr));
|
|
1055
|
+
switch (attr.type) {
|
|
1056
|
+
case "ternary":
|
|
1057
|
+
const a = getStyles(attr.value.alternate, "ternary.alternate");
|
|
1058
|
+
const c = getStyles(attr.value.consequent, "ternary.consequent");
|
|
1059
|
+
if (a)
|
|
1060
|
+
attr.value.alternate = a;
|
|
1061
|
+
if (c)
|
|
1062
|
+
attr.value.consequent = c;
|
|
1063
|
+
if (shouldPrintDebug)
|
|
1064
|
+
console.log(" => tern ", attrStr(attr));
|
|
1065
|
+
continue;
|
|
1066
|
+
case "style":
|
|
1067
|
+
if (shouldPrintDebug)
|
|
1068
|
+
console.log(" * styles in", logLines(objToStr(attr.value)));
|
|
1069
|
+
const styles = getStyles(attr.value, "style");
|
|
1070
|
+
if (shouldPrintDebug)
|
|
1071
|
+
console.log(" * styles out", logLines(objToStr(styles)));
|
|
1072
|
+
if (styles) {
|
|
1073
|
+
attr.value = Object.fromEntries(Object.keys(styles).map((k) => [k, completeStylesProcessed[k]]));
|
|
1074
|
+
}
|
|
1075
|
+
continue;
|
|
896
1076
|
}
|
|
1077
|
+
} catch (err) {
|
|
1078
|
+
getStyleError = err;
|
|
897
1079
|
}
|
|
898
1080
|
}
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
...out.pseudos
|
|
905
|
-
};
|
|
906
|
-
if (shouldPrintDebug === "verbose") {
|
|
907
|
-
console.log(` getStyles ${debugName} (props):
|
|
908
|
-
`, logLines(objToStr(props2)));
|
|
909
|
-
console.log(` getStyles ${debugName} (out.viewProps):
|
|
910
|
-
`, logLines(objToStr(out.viewProps)));
|
|
911
|
-
console.log(` getStyles ${debugName} (out.style):
|
|
912
|
-
`, logLines(objToStr(outStyle || {}), true));
|
|
1081
|
+
tm.mark("jsx-element-styles", shouldPrintDebug === "verbose");
|
|
1082
|
+
if (getStyleError) {
|
|
1083
|
+
console.log(" \u26A0\uFE0F postprocessing error, deopt", getStyleError);
|
|
1084
|
+
node.attributes = ogAttributes;
|
|
1085
|
+
return node;
|
|
913
1086
|
}
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
1087
|
+
const existingStyleKeys = /* @__PURE__ */ new Set();
|
|
1088
|
+
for (let i = attrs.length - 1; i >= 0; i--) {
|
|
1089
|
+
const attr = attrs[i];
|
|
1090
|
+
if (shouldFlatten && canFlattenProps) {
|
|
1091
|
+
if (attr.type === "attr") {
|
|
1092
|
+
if (t.isJSXAttribute(attr.value)) {
|
|
1093
|
+
if (t.isJSXIdentifier(attr.value.name)) {
|
|
1094
|
+
const name = attr.value.name.name;
|
|
1095
|
+
if (INLINE_EXTRACTABLE[name]) {
|
|
1096
|
+
attr.value.name.name = INLINE_EXTRACTABLE[name];
|
|
1097
|
+
}
|
|
1098
|
+
}
|
|
1099
|
+
}
|
|
918
1100
|
}
|
|
919
1101
|
}
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
if (!completeStylesProcessed) {
|
|
928
|
-
throw new Error(`Impossible, no styles`);
|
|
929
|
-
}
|
|
930
|
-
const stylesToAddToInitialGroup = shouldFlatten ? difference(Object.keys(completeStylesProcessed), Object.keys(completeStaticProps)) : [];
|
|
931
|
-
if (stylesToAddToInitialGroup.length) {
|
|
932
|
-
const toAdd = pick(completeStylesProcessed, ...stylesToAddToInitialGroup);
|
|
933
|
-
const firstGroup = attrs.find((x) => x.type === "style");
|
|
934
|
-
if (shouldPrintDebug) {
|
|
935
|
-
console.log(" toAdd", objToStr(toAdd));
|
|
936
|
-
}
|
|
937
|
-
if (!firstGroup) {
|
|
938
|
-
attrs.unshift({ type: "style", value: toAdd });
|
|
939
|
-
} else {
|
|
940
|
-
Object.assign(firstGroup.value, toAdd);
|
|
941
|
-
}
|
|
942
|
-
}
|
|
943
|
-
if (shouldPrintDebug) {
|
|
944
|
-
console.log(" -- stylesToAddToInitialGroup", stylesToAddToInitialGroup.join(", "), { shouldFlatten });
|
|
945
|
-
console.log(" -- completeStaticProps:\n", logLines(objToStr(completeStaticProps)));
|
|
946
|
-
console.log(" -- completeStylesProcessed:\n", logLines(objToStr(completeStylesProcessed)));
|
|
947
|
-
}
|
|
948
|
-
let getStyleError = null;
|
|
949
|
-
for (const attr of attrs) {
|
|
950
|
-
try {
|
|
951
|
-
if (shouldPrintDebug)
|
|
952
|
-
console.log(" *", attrStr(attr));
|
|
953
|
-
switch (attr.type) {
|
|
954
|
-
case "ternary":
|
|
955
|
-
const a = getStyles(attr.value.alternate, "ternary.alternate");
|
|
956
|
-
const c = getStyles(attr.value.consequent, "ternary.consequent");
|
|
957
|
-
if (a)
|
|
958
|
-
attr.value.alternate = a;
|
|
959
|
-
if (c)
|
|
960
|
-
attr.value.consequent = c;
|
|
961
|
-
if (shouldPrintDebug)
|
|
962
|
-
console.log(" => tern ", attrStr(attr));
|
|
963
|
-
continue;
|
|
964
|
-
case "style":
|
|
965
|
-
const styles = getStyles(attr.value, "style");
|
|
966
|
-
if (styles) {
|
|
967
|
-
attr.value = Object.fromEntries(Object.keys(styles).map((k) => [k, completeStylesProcessed[k]]));
|
|
1102
|
+
if (attr.type === "style") {
|
|
1103
|
+
for (const key in attr.value) {
|
|
1104
|
+
if (existingStyleKeys.has(key)) {
|
|
1105
|
+
if (shouldPrintDebug) {
|
|
1106
|
+
console.log(" >> delete existing", key);
|
|
1107
|
+
}
|
|
1108
|
+
delete attr.value[key];
|
|
968
1109
|
} else {
|
|
969
|
-
|
|
1110
|
+
existingStyleKeys.add(key);
|
|
970
1111
|
}
|
|
971
|
-
|
|
1112
|
+
}
|
|
972
1113
|
}
|
|
973
|
-
} catch (err) {
|
|
974
|
-
getStyleError = err;
|
|
975
1114
|
}
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
const attr = attrs[i];
|
|
985
|
-
if (attr.type === "style") {
|
|
986
|
-
for (const key in attr.value) {
|
|
987
|
-
if (existingStyleKeys.has(key)) {
|
|
988
|
-
delete attr.value[key];
|
|
989
|
-
} else {
|
|
990
|
-
existingStyleKeys.add(key);
|
|
991
|
-
}
|
|
1115
|
+
if (shouldFlatten) {
|
|
1116
|
+
if (shouldPrintDebug) {
|
|
1117
|
+
console.log(" [\u2705] flattening", originalNodeName, flatNode);
|
|
1118
|
+
}
|
|
1119
|
+
node.name.name = flatNode;
|
|
1120
|
+
res.flattened++;
|
|
1121
|
+
if (closingElement) {
|
|
1122
|
+
closingElement.name.name = flatNode;
|
|
992
1123
|
}
|
|
993
1124
|
}
|
|
994
|
-
}
|
|
995
|
-
if (shouldPrintDebug) {
|
|
996
|
-
console.log(" - attrs (after):\n", logLines(attrs.map(attrStr).join(", ")));
|
|
997
|
-
}
|
|
998
|
-
if (shouldFlatten) {
|
|
999
1125
|
if (shouldPrintDebug) {
|
|
1000
|
-
console.log(
|
|
1126
|
+
console.log(` \u274A\u274A inline props (${inlined.size}):`, shouldDeopt ? " deopted" : "", hasSpread ? " has spread" : "", staticConfig.neverFlatten ? "neverFlatten" : "");
|
|
1127
|
+
console.log(" - attrs (end):\n", logLines(attrs.map(attrStr).join(", ")));
|
|
1001
1128
|
}
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1129
|
+
onExtractTag({
|
|
1130
|
+
attrs,
|
|
1131
|
+
node,
|
|
1132
|
+
lineNumbers,
|
|
1133
|
+
filePath,
|
|
1134
|
+
attemptEval,
|
|
1135
|
+
jsxPath: traversePath,
|
|
1136
|
+
originalNodeName,
|
|
1137
|
+
isFlattened: shouldFlatten,
|
|
1138
|
+
programPath
|
|
1139
|
+
});
|
|
1140
|
+
} catch (err) {
|
|
1141
|
+
throw err;
|
|
1142
|
+
} finally {
|
|
1143
|
+
if (debugPropValue) {
|
|
1144
|
+
shouldPrintDebug = ogDebug;
|
|
1006
1145
|
}
|
|
1007
1146
|
}
|
|
1008
|
-
if (shouldPrintDebug) {
|
|
1009
|
-
console.log(` \u274A\u274A inline props (${inlinePropCount}):`, shouldDeopt ? " deopted" : "", hasSpread ? " has spread" : "", staticConfig.neverFlatten ? "neverFlatten" : "");
|
|
1010
|
-
console.log(" - attrs (end):\n", logLines(attrs.map(attrStr).join(", ")));
|
|
1011
|
-
}
|
|
1012
|
-
onExtractTag({
|
|
1013
|
-
attrs,
|
|
1014
|
-
node,
|
|
1015
|
-
lineNumbers,
|
|
1016
|
-
filePath,
|
|
1017
|
-
attemptEval,
|
|
1018
|
-
jsxPath: traversePath,
|
|
1019
|
-
originalNodeName,
|
|
1020
|
-
isFlattened: shouldFlatten,
|
|
1021
|
-
programPath
|
|
1022
|
-
});
|
|
1023
1147
|
}
|
|
1024
1148
|
});
|
|
1149
|
+
tm.mark("jsx-done", shouldPrintDebug === "verbose");
|
|
1025
1150
|
if (modifiedComponents.size) {
|
|
1026
1151
|
const all = Array.from(modifiedComponents);
|
|
1027
1152
|
if (shouldPrintDebug) {
|
|
@@ -1031,6 +1156,7 @@ function createExtractor() {
|
|
|
1031
1156
|
removeUnusedHooks(comp, shouldPrintDebug);
|
|
1032
1157
|
}
|
|
1033
1158
|
}
|
|
1159
|
+
tm.done(shouldPrintDebug === "verbose");
|
|
1034
1160
|
return res;
|
|
1035
1161
|
}
|
|
1036
1162
|
};
|