@tamagui/static 1.0.0-alpha.9 → 1.0.0-beta.172
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/README.md +3 -19
- package/dist/cjs/constants.js +36 -0
- package/dist/cjs/constants.js.map +7 -0
- package/dist/cjs/extractor/accessSafe.js +32 -0
- package/dist/cjs/extractor/accessSafe.js.map +7 -0
- package/dist/cjs/extractor/babelParse.js +51 -0
- package/dist/cjs/extractor/babelParse.js.map +7 -0
- package/dist/cjs/extractor/buildClassName.js +61 -0
- package/dist/cjs/extractor/buildClassName.js.map +7 -0
- package/dist/cjs/extractor/createEvaluator.js +73 -0
- package/dist/cjs/extractor/createEvaluator.js.map +7 -0
- package/dist/cjs/extractor/createExtractor.js +1100 -0
- package/dist/cjs/extractor/createExtractor.js.map +7 -0
- package/dist/cjs/extractor/ensureImportingConcat.js +45 -0
- package/dist/cjs/extractor/ensureImportingConcat.js.map +7 -0
- package/dist/cjs/extractor/evaluateAstNode.js +115 -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 +186 -0
- package/dist/cjs/extractor/extractMediaStyle.js.map +7 -0
- package/dist/cjs/extractor/extractToClassNames.js +324 -0
- package/dist/cjs/extractor/extractToClassNames.js.map +7 -0
- package/dist/cjs/extractor/findTopmostFunction.js +41 -0
- package/dist/cjs/extractor/findTopmostFunction.js.map +7 -0
- package/dist/cjs/extractor/generatedUid.js +49 -0
- package/dist/cjs/extractor/generatedUid.js.map +7 -0
- package/dist/cjs/extractor/getPrefixLogs.js +29 -0
- package/dist/cjs/extractor/getPrefixLogs.js.map +7 -0
- package/dist/cjs/extractor/getPropValueFromAttributes.js +70 -0
- package/dist/cjs/extractor/getPropValueFromAttributes.js.map +7 -0
- package/dist/cjs/extractor/getSourceModule.js +90 -0
- package/dist/cjs/extractor/getSourceModule.js.map +7 -0
- package/dist/cjs/extractor/getStaticBindingsForScope.js +149 -0
- package/dist/cjs/extractor/getStaticBindingsForScope.js.map +7 -0
- package/dist/cjs/extractor/hoistClassNames.js +65 -0
- package/dist/cjs/extractor/hoistClassNames.js.map +7 -0
- package/dist/cjs/extractor/literalToAst.js +114 -0
- package/dist/cjs/extractor/literalToAst.js.map +7 -0
- package/dist/cjs/extractor/loadTamagui.js +83 -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 +101 -0
- package/dist/cjs/extractor/normalizeTernaries.js.map +7 -0
- package/dist/cjs/extractor/removeUnusedHooks.js +100 -0
- package/dist/cjs/extractor/removeUnusedHooks.js.map +7 -0
- package/dist/cjs/extractor/validHTMLAttributes.js +71 -0
- package/dist/cjs/extractor/validHTMLAttributes.js.map +7 -0
- package/dist/cjs/index.js +34 -0
- package/dist/cjs/index.js.map +7 -0
- package/dist/cjs/patchReactNativeWeb.js +151 -0
- package/dist/cjs/patchReactNativeWeb.js.map +7 -0
- package/dist/cjs/types.js +16 -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 +2 -2
- package/dist/{extractor → esm/extractor}/babelParse.js +0 -0
- package/dist/{extractor → esm/extractor}/babelParse.js.map +2 -2
- package/dist/{extractor → esm/extractor}/buildClassName.js +0 -0
- package/dist/{extractor → esm/extractor}/buildClassName.js.map +2 -2
- package/dist/{extractor → esm/extractor}/createEvaluator.js +3 -2
- package/dist/esm/extractor/createEvaluator.js.map +7 -0
- package/dist/{extractor → esm/extractor}/createExtractor.js +412 -189
- 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/esm/extractor/evaluateAstNode.js.map +7 -0
- package/dist/{extractor → esm/extractor}/extractHelpers.js +20 -11
- package/dist/esm/extractor/extractHelpers.js.map +7 -0
- package/dist/{extractor → esm/extractor}/extractMediaStyle.js +3 -2
- package/dist/esm/extractor/extractMediaStyle.js.map +7 -0
- package/dist/{extractor → esm/extractor}/extractToClassNames.js +99 -44
- 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 +2 -2
- package/dist/{extractor → esm/extractor}/generatedUid.js +0 -0
- package/dist/{extractor → esm/extractor}/generatedUid.js.map +2 -2
- package/dist/esm/extractor/getPrefixLogs.js +12 -0
- package/dist/esm/extractor/getPrefixLogs.js.map +7 -0
- package/dist/{extractor → esm/extractor}/getPropValueFromAttributes.js +0 -0
- package/dist/{extractor → esm/extractor}/getPropValueFromAttributes.js.map +2 -2
- package/dist/{extractor → esm/extractor}/getSourceModule.js +0 -0
- package/dist/{extractor → esm/extractor}/getSourceModule.js.map +2 -2
- package/dist/{extractor → esm/extractor}/getStaticBindingsForScope.js +0 -0
- package/dist/esm/extractor/getStaticBindingsForScope.js.map +7 -0
- package/dist/{extractor → esm/extractor}/hoistClassNames.js +0 -0
- package/dist/{extractor → esm/extractor}/hoistClassNames.js.map +2 -2
- package/dist/esm/extractor/literalToAst.js +80 -0
- package/dist/esm/extractor/literalToAst.js.map +7 -0
- package/dist/{extractor → esm/extractor}/loadTamagui.js +27 -3
- package/dist/esm/extractor/loadTamagui.js.map +7 -0
- package/dist/{extractor → esm/extractor}/logLines.js +8 -3
- package/dist/esm/extractor/logLines.js.map +7 -0
- package/dist/{extractor → esm/extractor}/normalizeTernaries.js +3 -2
- package/dist/esm/extractor/normalizeTernaries.js.map +7 -0
- package/dist/{extractor → esm/extractor}/removeUnusedHooks.js +5 -3
- package/dist/esm/extractor/removeUnusedHooks.js.map +7 -0
- package/dist/esm/extractor/validHTMLAttributes.js +52 -0
- package/dist/esm/extractor/validHTMLAttributes.js.map +7 -0
- 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} +37 -14
- 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 +51 -0
- package/dist/jsx/extractor/createExtractor.js +1050 -0
- package/dist/jsx/extractor/ensureImportingConcat.js +23 -0
- package/dist/jsx/extractor/evaluateAstNode.js +93 -0
- package/dist/jsx/extractor/extractHelpers.js +102 -0
- package/dist/jsx/extractor/extractMediaStyle.js +151 -0
- package/dist/jsx/extractor/extractToClassNames.js +287 -0
- package/dist/jsx/extractor/findTopmostFunction.js +22 -0
- package/dist/jsx/extractor/generatedUid.js +27 -0
- package/dist/jsx/extractor/getPrefixLogs.js +11 -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 +79 -0
- package/dist/jsx/extractor/loadTamagui.js +64 -0
- package/dist/jsx/extractor/logLines.js +21 -0
- package/dist/jsx/extractor/normalizeTernaries.js +52 -0
- package/dist/jsx/extractor/removeUnusedHooks.js +79 -0
- package/dist/jsx/extractor/validHTMLAttributes.js +51 -0
- package/dist/jsx/index.js +13 -0
- package/{src/patchReactNativeWeb.ts → dist/jsx/patchReactNativeWeb.js} +65 -59
- package/dist/jsx/types.js +0 -0
- package/package.json +26 -23
- 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 +27 -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 +23 -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/getPrefixLogs.d.ts +3 -0
- package/types/extractor/getPrefixLogs.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 +4 -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/extractor/validHTMLAttributes.d.ts +49 -0
- package/types/extractor/validHTMLAttributes.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 +85 -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/evaluateAstNode.js.map +0 -7
- package/dist/extractor/extractHelpers.js.map +0 -7
- package/dist/extractor/extractMediaStyle.js.map +0 -7
- package/dist/extractor/extractToClassNames.js.map +0 -7
- package/dist/extractor/getStaticBindingsForScope.js.map +0 -7
- package/dist/extractor/literalToAst.js +0 -34
- package/dist/extractor/literalToAst.js.map +0 -7
- package/dist/extractor/loadTamagui.js.map +0 -7
- package/dist/extractor/logLines.js.map +0 -7
- package/dist/extractor/normalizeTernaries.js.map +0 -7
- package/dist/extractor/removeUnusedHooks.js.map +0 -7
- package/dist/index.cjs +0 -2126
- 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 -1138
- 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 -323
- 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/logLines.ts +0 -11
- 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 -89
- package/types.d.ts +0 -219
|
@@ -2,9 +2,14 @@ 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
|
|
6
|
-
|
|
5
|
+
import {
|
|
6
|
+
getSplitStyles,
|
|
7
|
+
mediaQueryConfig,
|
|
8
|
+
pseudos,
|
|
9
|
+
rnw
|
|
10
|
+
} from "@tamagui/core-node";
|
|
7
11
|
import { difference, pick } from "lodash";
|
|
12
|
+
import { FAILED_EVAL } from "../constants";
|
|
8
13
|
import { createEvaluator, createSafeEvaluator } from "./createEvaluator";
|
|
9
14
|
import { evaluateAstNode } from "./evaluateAstNode";
|
|
10
15
|
import { attrStr, findComponentName, isInsideTamagui, isPresent, objToStr } from "./extractHelpers";
|
|
@@ -15,8 +20,7 @@ import { loadTamagui } from "./loadTamagui";
|
|
|
15
20
|
import { logLines } from "./logLines";
|
|
16
21
|
import { normalizeTernaries } from "./normalizeTernaries";
|
|
17
22
|
import { removeUnusedHooks } from "./removeUnusedHooks";
|
|
18
|
-
|
|
19
|
-
const FAILED_EVAL = Symbol("failed_style_eval");
|
|
23
|
+
import { validHTMLAttributes } from "./validHTMLAttributes";
|
|
20
24
|
const UNTOUCHED_PROPS = {
|
|
21
25
|
key: true,
|
|
22
26
|
style: true,
|
|
@@ -48,11 +52,18 @@ function createExtractor() {
|
|
|
48
52
|
sourcePath = "",
|
|
49
53
|
onExtractTag,
|
|
50
54
|
getFlattenedNode,
|
|
55
|
+
disable,
|
|
51
56
|
disableExtraction,
|
|
52
57
|
disableExtractInlineMedia,
|
|
58
|
+
disableExtractVariables,
|
|
53
59
|
disableDebugAttr,
|
|
60
|
+
prefixLogs,
|
|
61
|
+
excludeProps,
|
|
54
62
|
...props
|
|
55
63
|
}) => {
|
|
64
|
+
if (disable) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
56
67
|
if (sourcePath === "") {
|
|
57
68
|
throw new Error(`Must provide a source file name`);
|
|
58
69
|
}
|
|
@@ -69,7 +80,10 @@ function createExtractor() {
|
|
|
69
80
|
const isInternalImport = /* @__PURE__ */ __name((importStr) => {
|
|
70
81
|
return isInsideTamagui(sourcePath) && importStr[0] === ".";
|
|
71
82
|
}, "isInternalImport");
|
|
72
|
-
const validComponents = Object.keys(components).filter((key) =>
|
|
83
|
+
const validComponents = Object.keys(components).filter((key) => {
|
|
84
|
+
var _a;
|
|
85
|
+
return key[0].toUpperCase() === key[0] && !!((_a = components[key]) == null ? void 0 : _a.staticConfig);
|
|
86
|
+
}).reduce((obj, name) => {
|
|
73
87
|
obj[name] = components[name];
|
|
74
88
|
return obj;
|
|
75
89
|
}, {});
|
|
@@ -96,7 +110,7 @@ function createExtractor() {
|
|
|
96
110
|
return null;
|
|
97
111
|
}
|
|
98
112
|
let couldntParse = false;
|
|
99
|
-
const modifiedComponents = new Set();
|
|
113
|
+
const modifiedComponents = /* @__PURE__ */ new Set();
|
|
100
114
|
const bindingCache = {};
|
|
101
115
|
const callTraverse = /* @__PURE__ */ __name((a) => {
|
|
102
116
|
return fileOrPath.type === "File" ? traverse(fileOrPath, a) : fileOrPath.traverse(a);
|
|
@@ -105,7 +119,8 @@ function createExtractor() {
|
|
|
105
119
|
const res = {
|
|
106
120
|
flattened: 0,
|
|
107
121
|
optimized: 0,
|
|
108
|
-
modified: 0
|
|
122
|
+
modified: 0,
|
|
123
|
+
found: 0
|
|
109
124
|
};
|
|
110
125
|
callTraverse({
|
|
111
126
|
Program: {
|
|
@@ -114,11 +129,12 @@ function createExtractor() {
|
|
|
114
129
|
}
|
|
115
130
|
},
|
|
116
131
|
JSXElement(traversePath) {
|
|
132
|
+
var _a, _b, _c, _d, _e;
|
|
117
133
|
const node = traversePath.node.openingElement;
|
|
118
134
|
const ogAttributes = node.attributes;
|
|
119
135
|
const componentName = findComponentName(traversePath.scope);
|
|
120
136
|
const closingElement = traversePath.node.closingElement;
|
|
121
|
-
if (t.isJSXMemberExpression(closingElement
|
|
137
|
+
if (t.isJSXMemberExpression(closingElement == null ? void 0 : closingElement.name) || !t.isJSXIdentifier(node.name)) {
|
|
122
138
|
return;
|
|
123
139
|
}
|
|
124
140
|
const binding = traversePath.scope.getBinding(node.name.name);
|
|
@@ -139,6 +155,7 @@ function createExtractor() {
|
|
|
139
155
|
return;
|
|
140
156
|
}
|
|
141
157
|
const originalNodeName = node.name.name;
|
|
158
|
+
res.found++;
|
|
142
159
|
if (shouldPrintDebug) {
|
|
143
160
|
console.log(`
|
|
144
161
|
<${originalNodeName} />`);
|
|
@@ -146,21 +163,28 @@ function createExtractor() {
|
|
|
146
163
|
const filePath = sourcePath.replace(process.cwd(), ".");
|
|
147
164
|
const lineNumbers = node.loc ? node.loc.start.line + (node.loc.start.line !== node.loc.end.line ? `-${node.loc.end.line}` : "") : "";
|
|
148
165
|
if (shouldAddDebugProp && !disableDebugAttr) {
|
|
149
|
-
const preName = componentName ? `${componentName}
|
|
166
|
+
const preName = componentName ? `${componentName}.` : "";
|
|
150
167
|
res.modified++;
|
|
151
|
-
node.attributes.unshift(t.jsxAttribute(t.jsxIdentifier("data-is"), t.stringLiteral(
|
|
168
|
+
node.attributes.unshift(t.jsxAttribute(t.jsxIdentifier("data-is"), t.stringLiteral(`${preName}${node.name.name}@${filePath.replace("./", "")}:${lineNumbers}`)));
|
|
169
|
+
}
|
|
170
|
+
const shouldLog = !hasLogged;
|
|
171
|
+
if (shouldLog) {
|
|
172
|
+
const prefix = " |";
|
|
173
|
+
console.log(prefixLogs || prefix, " total \xB7 optimized \xB7 flattened ");
|
|
174
|
+
hasLogged = true;
|
|
152
175
|
}
|
|
153
176
|
if (disableExtraction) {
|
|
154
|
-
if (!hasLogged) {
|
|
155
|
-
console.log("\u{1F95A} Tamagui disableExtraction set: no CSS or optimizations will be run");
|
|
156
|
-
hasLogged = true;
|
|
157
|
-
}
|
|
158
177
|
return;
|
|
159
178
|
}
|
|
160
179
|
const { staticConfig } = component;
|
|
161
180
|
const isTextView = staticConfig.isText || false;
|
|
162
|
-
const validStyles = staticConfig
|
|
163
|
-
|
|
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";
|
|
164
188
|
traversePath.get("openingElement").get("attributes").forEach((path) => {
|
|
165
189
|
const attr = path.node;
|
|
166
190
|
if (t.isJSXSpreadAttribute(attr))
|
|
@@ -173,23 +197,14 @@ function createExtractor() {
|
|
|
173
197
|
tagName = val.value;
|
|
174
198
|
});
|
|
175
199
|
const flatNode = getFlattenedNode({ isTextView, tag: tagName });
|
|
176
|
-
const
|
|
177
|
-
...props.
|
|
178
|
-
...staticConfig.
|
|
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 || []
|
|
179
207
|
]);
|
|
180
|
-
const excludeProps = new Set(props.excludeProps ?? []);
|
|
181
|
-
const isExcludedProp = /* @__PURE__ */ __name((name) => {
|
|
182
|
-
const res2 = excludeProps.has(name);
|
|
183
|
-
if (res2 && shouldPrintDebug)
|
|
184
|
-
console.log(` excluding ${name}`);
|
|
185
|
-
return res2;
|
|
186
|
-
}, "isExcludedProp");
|
|
187
|
-
const isDeoptedProp = /* @__PURE__ */ __name((name) => {
|
|
188
|
-
const res2 = deoptProps.has(name);
|
|
189
|
-
if (res2 && shouldPrintDebug)
|
|
190
|
-
console.log(` deopting ${name}`);
|
|
191
|
-
return res2;
|
|
192
|
-
}, "isDeoptedProp");
|
|
193
208
|
const staticNamespace = getStaticBindingsForScope(traversePath.scope, importsWhitelist, sourcePath, bindingCache, shouldPrintDebug);
|
|
194
209
|
const attemptEval = !evaluateVars ? evaluateAstNode : createEvaluator({
|
|
195
210
|
tamaguiConfig,
|
|
@@ -202,9 +217,6 @@ function createExtractor() {
|
|
|
202
217
|
if (shouldPrintDebug) {
|
|
203
218
|
console.log(" staticNamespace", Object.keys(staticNamespace).join(", "));
|
|
204
219
|
}
|
|
205
|
-
const hasDeopt = /* @__PURE__ */ __name((obj) => {
|
|
206
|
-
return Object.keys(obj).some(isDeoptedProp);
|
|
207
|
-
}, "hasDeopt");
|
|
208
220
|
const flattenedAttrs = [];
|
|
209
221
|
traversePath.get("openingElement").get("attributes").forEach((path) => {
|
|
210
222
|
const attr = path.node;
|
|
@@ -222,7 +234,7 @@ function createExtractor() {
|
|
|
222
234
|
flattenedAttrs.push(attr);
|
|
223
235
|
return;
|
|
224
236
|
}
|
|
225
|
-
if (
|
|
237
|
+
if (arg !== void 0) {
|
|
226
238
|
try {
|
|
227
239
|
if (typeof arg !== "object" || arg == null) {
|
|
228
240
|
if (shouldPrintDebug) {
|
|
@@ -251,15 +263,25 @@ function createExtractor() {
|
|
|
251
263
|
node.attributes = flattenedAttrs;
|
|
252
264
|
if (staticConfig.defaultProps) {
|
|
253
265
|
for (const key in staticConfig.defaultProps) {
|
|
266
|
+
if (isValidStyleKey(key)) {
|
|
267
|
+
continue;
|
|
268
|
+
}
|
|
254
269
|
const serialize = require("babel-literal-to-ast");
|
|
255
270
|
const val = staticConfig.defaultProps[key];
|
|
256
|
-
|
|
271
|
+
try {
|
|
272
|
+
const serializedDefaultProp = serialize(val);
|
|
273
|
+
node.attributes.unshift(t.jsxAttribute(t.jsxIdentifier(key), typeof val === "string" ? t.stringLiteral(val) : t.jsxExpressionContainer(serializedDefaultProp)));
|
|
274
|
+
} catch (err) {
|
|
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
|
+
}
|
|
257
279
|
}
|
|
258
280
|
}
|
|
259
281
|
let attrs = [];
|
|
260
282
|
let shouldDeopt = false;
|
|
261
283
|
let inlinePropCount = 0;
|
|
262
|
-
let
|
|
284
|
+
let hasSetOptimized = false;
|
|
263
285
|
attrs = traversePath.get("openingElement").get("attributes").flatMap((path) => {
|
|
264
286
|
try {
|
|
265
287
|
const res2 = evaluateAttribute(path);
|
|
@@ -268,83 +290,19 @@ function createExtractor() {
|
|
|
268
290
|
}
|
|
269
291
|
return res2;
|
|
270
292
|
} catch (err) {
|
|
271
|
-
|
|
272
|
-
|
|
293
|
+
if (shouldPrintDebug) {
|
|
294
|
+
console.log("Error extracting attribute", err.message, err.stack);
|
|
295
|
+
console.log("node", path.node);
|
|
296
|
+
}
|
|
273
297
|
return {
|
|
274
298
|
type: "attr",
|
|
275
299
|
value: path.node
|
|
276
300
|
};
|
|
277
301
|
}
|
|
278
302
|
}).flat(4).filter(isPresent);
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
}
|
|
282
|
-
__name(isStaticAttributeName, "isStaticAttributeName");
|
|
283
|
-
function isExtractable(obj) {
|
|
284
|
-
return t.isObjectExpression(obj) && obj.properties.every((prop) => {
|
|
285
|
-
if (!t.isObjectProperty(prop)) {
|
|
286
|
-
console.log("not object prop", prop);
|
|
287
|
-
return false;
|
|
288
|
-
}
|
|
289
|
-
const propName = prop.key["name"];
|
|
290
|
-
if (!isStaticAttributeName(propName) && propName !== "tag") {
|
|
291
|
-
if (shouldPrintDebug) {
|
|
292
|
-
console.log(" not a valid style prop!", propName);
|
|
293
|
-
}
|
|
294
|
-
return false;
|
|
295
|
-
}
|
|
296
|
-
return true;
|
|
297
|
-
});
|
|
298
|
-
}
|
|
299
|
-
__name(isExtractable, "isExtractable");
|
|
300
|
-
function createTernariesFromObjectProperties(test, side, ternaryPartial = {}) {
|
|
301
|
-
if (!side) {
|
|
302
|
-
return null;
|
|
303
|
-
}
|
|
304
|
-
if (!isExtractable(side)) {
|
|
305
|
-
throw new Error("not extractable");
|
|
306
|
-
}
|
|
307
|
-
return side.properties.flatMap((property) => {
|
|
308
|
-
if (!t.isObjectProperty(property)) {
|
|
309
|
-
throw new Error("expected object property");
|
|
310
|
-
}
|
|
311
|
-
if (t.isConditionalExpression(property.value)) {
|
|
312
|
-
const [truthy, falsy] = [
|
|
313
|
-
t.objectExpression([t.objectProperty(property.key, property.value.consequent)]),
|
|
314
|
-
t.objectExpression([t.objectProperty(property.key, property.value.alternate)])
|
|
315
|
-
].map((x) => attemptEval(x));
|
|
316
|
-
return [
|
|
317
|
-
createTernary({
|
|
318
|
-
remove() {
|
|
319
|
-
},
|
|
320
|
-
...ternaryPartial,
|
|
321
|
-
test: t.logicalExpression("&&", test, property.value.test),
|
|
322
|
-
consequent: truthy,
|
|
323
|
-
alternate: null
|
|
324
|
-
}),
|
|
325
|
-
createTernary({
|
|
326
|
-
...ternaryPartial,
|
|
327
|
-
test: t.logicalExpression("&&", test, t.unaryExpression("!", property.value.test)),
|
|
328
|
-
consequent: falsy,
|
|
329
|
-
alternate: null,
|
|
330
|
-
remove() {
|
|
331
|
-
}
|
|
332
|
-
})
|
|
333
|
-
];
|
|
334
|
-
}
|
|
335
|
-
const obj = t.objectExpression([t.objectProperty(property.key, property.value)]);
|
|
336
|
-
const consequent = attemptEval(obj);
|
|
337
|
-
return createTernary({
|
|
338
|
-
remove() {
|
|
339
|
-
},
|
|
340
|
-
...ternaryPartial,
|
|
341
|
-
test,
|
|
342
|
-
consequent,
|
|
343
|
-
alternate: null
|
|
344
|
-
});
|
|
345
|
-
});
|
|
303
|
+
if (shouldPrintDebug) {
|
|
304
|
+
console.log(" - attrs (before):\n", logLines(attrs.map(attrStr).join(", ")));
|
|
346
305
|
}
|
|
347
|
-
__name(createTernariesFromObjectProperties, "createTernariesFromObjectProperties");
|
|
348
306
|
function evaluateAttribute(path) {
|
|
349
307
|
const attribute = path.node;
|
|
350
308
|
const attr = { type: "attr", value: attribute };
|
|
@@ -371,24 +329,41 @@ function createExtractor() {
|
|
|
371
329
|
}
|
|
372
330
|
}
|
|
373
331
|
if (t.isJSXSpreadAttribute(attribute) || !attribute.name || typeof attribute.name.name !== "string") {
|
|
332
|
+
if (shouldPrintDebug) {
|
|
333
|
+
console.log(" ! inlining, spread attr");
|
|
334
|
+
}
|
|
374
335
|
inlinePropCount++;
|
|
375
336
|
return attr;
|
|
376
337
|
}
|
|
377
338
|
const name = attribute.name.name;
|
|
378
|
-
if (
|
|
339
|
+
if (excludeProps == null ? void 0 : excludeProps.has(name)) {
|
|
340
|
+
if (shouldPrintDebug) {
|
|
341
|
+
console.log(" excluding prop", name);
|
|
342
|
+
}
|
|
379
343
|
return null;
|
|
380
344
|
}
|
|
381
|
-
if (
|
|
345
|
+
if (inlineProps.has(name)) {
|
|
346
|
+
inlinePropCount++;
|
|
382
347
|
if (shouldPrintDebug) {
|
|
383
|
-
console.log(" ! inlining,
|
|
348
|
+
console.log(" ! inlining, inline prop", name);
|
|
384
349
|
}
|
|
350
|
+
return attr;
|
|
351
|
+
}
|
|
352
|
+
if (deoptProps.has(name)) {
|
|
353
|
+
shouldDeopt = true;
|
|
385
354
|
inlinePropCount++;
|
|
355
|
+
if (shouldPrintDebug) {
|
|
356
|
+
console.log(" ! inlining, deopted prop", name);
|
|
357
|
+
}
|
|
386
358
|
return attr;
|
|
387
359
|
}
|
|
388
360
|
if (UNTOUCHED_PROPS[name]) {
|
|
389
361
|
return attr;
|
|
390
362
|
}
|
|
391
|
-
if (name
|
|
363
|
+
if (name.startsWith("data-")) {
|
|
364
|
+
return attr;
|
|
365
|
+
}
|
|
366
|
+
if (name[0] === "$" && t.isJSXExpressionContainer(attribute == null ? void 0 : attribute.value)) {
|
|
392
367
|
if (disableExtractInlineMedia) {
|
|
393
368
|
return attr;
|
|
394
369
|
}
|
|
@@ -409,7 +384,7 @@ function createExtractor() {
|
|
|
409
384
|
}
|
|
410
385
|
}
|
|
411
386
|
const [value, valuePath] = (() => {
|
|
412
|
-
if (t.isJSXExpressionContainer(attribute
|
|
387
|
+
if (t.isJSXExpressionContainer(attribute == null ? void 0 : attribute.value)) {
|
|
413
388
|
return [attribute.value.expression, path.get("value")];
|
|
414
389
|
} else {
|
|
415
390
|
return [attribute.value, path.get("value")];
|
|
@@ -431,24 +406,65 @@ function createExtractor() {
|
|
|
431
406
|
value: path.node
|
|
432
407
|
};
|
|
433
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);
|
|
414
|
+
}
|
|
415
|
+
inlinePropCount++;
|
|
416
|
+
return attr;
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
}
|
|
434
420
|
const styleValue = attemptEvalSafe(value);
|
|
435
|
-
if (!
|
|
421
|
+
if (!isValidStyleKey(name)) {
|
|
436
422
|
let keys = [name];
|
|
423
|
+
let out = null;
|
|
437
424
|
if (staticConfig.propMapper) {
|
|
438
|
-
|
|
425
|
+
out = staticConfig.propMapper(name, styleValue, defaultTheme, staticConfig.defaultProps, staticConfig);
|
|
439
426
|
if (out) {
|
|
427
|
+
out = rnw.createDOMProps(isTextView ? "span" : "div", out);
|
|
428
|
+
delete out.className;
|
|
440
429
|
keys = Object.keys(out);
|
|
441
430
|
}
|
|
442
431
|
}
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
432
|
+
const attributes = keys.map((key) => {
|
|
433
|
+
const val = out[key];
|
|
434
|
+
if (!isValidStyleKey(key)) {
|
|
435
|
+
if (validHTMLAttributes[key]) {
|
|
436
|
+
return {
|
|
437
|
+
type: "attr",
|
|
438
|
+
value: t.jsxAttribute(t.jsxIdentifier(key), t.jsxExpressionContainer(literalToAst(val)))
|
|
439
|
+
};
|
|
440
|
+
}
|
|
441
|
+
if (shouldPrintDebug) {
|
|
442
|
+
console.log(" ! inlining, non-static", key);
|
|
443
|
+
}
|
|
444
|
+
inlinePropCount++;
|
|
446
445
|
}
|
|
447
|
-
|
|
446
|
+
return {
|
|
447
|
+
type: "style",
|
|
448
|
+
value: { [name]: styleValue },
|
|
449
|
+
name,
|
|
450
|
+
attr: path.node
|
|
451
|
+
};
|
|
452
|
+
});
|
|
453
|
+
if (inlinePropCount) {
|
|
448
454
|
return attr;
|
|
449
455
|
}
|
|
456
|
+
return attributes;
|
|
450
457
|
}
|
|
451
458
|
if (styleValue !== FAILED_EVAL) {
|
|
459
|
+
if (shouldPrintDebug) {
|
|
460
|
+
console.log(` style: ${name} =`, styleValue);
|
|
461
|
+
}
|
|
462
|
+
if (!(name in staticConfig.defaultProps)) {
|
|
463
|
+
if (!hasSetOptimized) {
|
|
464
|
+
res.optimized++;
|
|
465
|
+
hasSetOptimized = true;
|
|
466
|
+
}
|
|
467
|
+
}
|
|
452
468
|
return {
|
|
453
469
|
type: "style",
|
|
454
470
|
value: { [name]: styleValue },
|
|
@@ -457,6 +473,9 @@ function createExtractor() {
|
|
|
457
473
|
};
|
|
458
474
|
}
|
|
459
475
|
if (t.isBinaryExpression(value)) {
|
|
476
|
+
if (shouldPrintDebug) {
|
|
477
|
+
console.log(` binary expression ${name} = `, value);
|
|
478
|
+
}
|
|
460
479
|
const { operator, left, right } = value;
|
|
461
480
|
const lVal = attemptEvalSafe(left);
|
|
462
481
|
const rVal = attemptEvalSafe(right);
|
|
@@ -481,16 +500,25 @@ function createExtractor() {
|
|
|
481
500
|
}
|
|
482
501
|
const staticConditional = getStaticConditional(value);
|
|
483
502
|
if (staticConditional) {
|
|
503
|
+
if (shouldPrintDebug) {
|
|
504
|
+
console.log(` static conditional ${name} = `, value);
|
|
505
|
+
}
|
|
484
506
|
return { type: "ternary", value: staticConditional };
|
|
485
507
|
}
|
|
486
508
|
const staticLogical = getStaticLogical(value);
|
|
487
509
|
if (staticLogical) {
|
|
510
|
+
if (shouldPrintDebug) {
|
|
511
|
+
console.log(` static ternary ${name} = `, value);
|
|
512
|
+
}
|
|
488
513
|
return { type: "ternary", value: staticLogical };
|
|
489
514
|
}
|
|
490
515
|
if (shouldPrintDebug) {
|
|
491
516
|
console.log(" ! inline prop via no match", name, value.type);
|
|
492
517
|
}
|
|
493
518
|
inlinePropCount++;
|
|
519
|
+
if (shouldPrintDebug) {
|
|
520
|
+
console.log(` inlining ${name} = `, value);
|
|
521
|
+
}
|
|
494
522
|
return attr;
|
|
495
523
|
function addBinaryConditional(operator, staticExpr, cond) {
|
|
496
524
|
if (getStaticConditional(cond)) {
|
|
@@ -565,13 +593,98 @@ function createExtractor() {
|
|
|
565
593
|
__name(getStaticLogical, "getStaticLogical");
|
|
566
594
|
}
|
|
567
595
|
__name(evaluateAttribute, "evaluateAttribute");
|
|
568
|
-
|
|
569
|
-
|
|
596
|
+
function isExtractable(obj) {
|
|
597
|
+
return t.isObjectExpression(obj) && obj.properties.every((prop) => {
|
|
598
|
+
if (!t.isObjectProperty(prop)) {
|
|
599
|
+
console.log("not object prop", prop);
|
|
600
|
+
return false;
|
|
601
|
+
}
|
|
602
|
+
const propName = prop.key["name"];
|
|
603
|
+
if (!isValidStyleKey(propName) && propName !== "tag") {
|
|
604
|
+
if (shouldPrintDebug) {
|
|
605
|
+
console.log(" not a valid style prop!", propName);
|
|
606
|
+
}
|
|
607
|
+
return false;
|
|
608
|
+
}
|
|
609
|
+
return true;
|
|
610
|
+
});
|
|
611
|
+
}
|
|
612
|
+
__name(isExtractable, "isExtractable");
|
|
613
|
+
function createTernariesFromObjectProperties(test, side, ternaryPartial = {}) {
|
|
614
|
+
if (!side) {
|
|
615
|
+
return null;
|
|
616
|
+
}
|
|
617
|
+
if (!isExtractable(side)) {
|
|
618
|
+
throw new Error("not extractable");
|
|
619
|
+
}
|
|
620
|
+
return side.properties.flatMap((property) => {
|
|
621
|
+
if (!t.isObjectProperty(property)) {
|
|
622
|
+
throw new Error("expected object property");
|
|
623
|
+
}
|
|
624
|
+
if (t.isIdentifier(property.key)) {
|
|
625
|
+
const key = property.key.name;
|
|
626
|
+
const mediaQueryKey = key.slice(1);
|
|
627
|
+
const isMediaQuery = key[0] === "$" && mediaQueryConfig[mediaQueryKey];
|
|
628
|
+
if (isMediaQuery) {
|
|
629
|
+
if (t.isExpression(property.value)) {
|
|
630
|
+
const ternaries2 = createTernariesFromObjectProperties(t.stringLiteral(mediaQueryKey), property.value, {
|
|
631
|
+
inlineMediaQuery: mediaQueryKey
|
|
632
|
+
});
|
|
633
|
+
if (ternaries2) {
|
|
634
|
+
return ternaries2.map((value) => ({
|
|
635
|
+
...ternaryPartial,
|
|
636
|
+
...value,
|
|
637
|
+
test: t.logicalExpression("&&", value.test, test)
|
|
638
|
+
}));
|
|
639
|
+
} else {
|
|
640
|
+
console.log("\u26A0\uFE0F no ternaries?", property);
|
|
641
|
+
}
|
|
642
|
+
} else {
|
|
643
|
+
console.log("\u26A0\uFE0F not expression", property);
|
|
644
|
+
}
|
|
645
|
+
}
|
|
646
|
+
}
|
|
647
|
+
if (t.isConditionalExpression(property.value)) {
|
|
648
|
+
const [truthy, falsy] = [
|
|
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
|
+
];
|
|
670
|
+
}
|
|
671
|
+
const obj = t.objectExpression([t.objectProperty(property.key, property.value)]);
|
|
672
|
+
const consequent = attemptEval(obj);
|
|
673
|
+
return createTernary({
|
|
674
|
+
remove() {
|
|
675
|
+
},
|
|
676
|
+
...ternaryPartial,
|
|
677
|
+
test,
|
|
678
|
+
consequent,
|
|
679
|
+
alternate: null
|
|
680
|
+
});
|
|
681
|
+
});
|
|
570
682
|
}
|
|
683
|
+
__name(createTernariesFromObjectProperties, "createTernariesFromObjectProperties");
|
|
571
684
|
node.attributes = attrs.filter(isAttr).map((x) => x.value);
|
|
572
|
-
if (couldntParse) {
|
|
685
|
+
if (couldntParse || shouldDeopt) {
|
|
573
686
|
if (shouldPrintDebug) {
|
|
574
|
-
console.log(`
|
|
687
|
+
console.log(` avoid optimizing:`, { couldntParse, shouldDeopt });
|
|
575
688
|
}
|
|
576
689
|
node.attributes = ogAttributes;
|
|
577
690
|
return;
|
|
@@ -638,99 +751,196 @@ function createExtractor() {
|
|
|
638
751
|
const hasSpread = node.attributes.some((x) => t.isJSXSpreadAttribute(x));
|
|
639
752
|
const hasOnlyStringChildren = !hasSpread && (node.selfClosing || traversePath.node.children && traversePath.node.children.every((x) => x.type === "JSXText"));
|
|
640
753
|
const shouldFlatten = !shouldDeopt && inlinePropCount === 0 && !hasSpread && staticConfig.neverFlatten !== true && (staticConfig.neverFlatten === "jsx" ? hasOnlyStringChildren : true);
|
|
754
|
+
if (shouldFlatten && staticConfig.defaultProps) {
|
|
755
|
+
const defaultStyleAttrs = Object.keys(staticConfig.defaultProps).flatMap((key) => {
|
|
756
|
+
if (!isValidStyleKey(key)) {
|
|
757
|
+
return;
|
|
758
|
+
}
|
|
759
|
+
try {
|
|
760
|
+
const serialize = require("babel-literal-to-ast");
|
|
761
|
+
const val = staticConfig.defaultProps[key];
|
|
762
|
+
const value = serialize(val);
|
|
763
|
+
const name = tamaguiConfig.shorthands[key] || key;
|
|
764
|
+
return {
|
|
765
|
+
type: "style",
|
|
766
|
+
name,
|
|
767
|
+
value
|
|
768
|
+
};
|
|
769
|
+
} catch (err) {
|
|
770
|
+
console.warn(`\u26A0\uFE0F Error evaluating default style for component, prop ${key}
|
|
771
|
+
error: ${err}`);
|
|
772
|
+
shouldDeopt = true;
|
|
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 = {};
|
|
641
784
|
if (!shouldFlatten) {
|
|
642
|
-
|
|
785
|
+
for (const cur of attrs) {
|
|
643
786
|
if (cur.type === "style") {
|
|
644
787
|
for (const key in cur.value) {
|
|
645
|
-
const shouldEnsureOverridden = !!staticConfig.ensureOverriddenProp
|
|
788
|
+
const shouldEnsureOverridden = !!((_d = staticConfig.ensureOverriddenProp) == null ? void 0 : _d[key]);
|
|
646
789
|
const isSetInAttrsAlready = attrs.some((x) => x.type === "attr" && x.value.type === "JSXAttribute" && x.value.name.name === key);
|
|
647
790
|
if (!isSetInAttrsAlready) {
|
|
648
|
-
const isVariant = !!staticConfig.variants
|
|
791
|
+
const isVariant = !!((_e = staticConfig.variants) == null ? void 0 : _e[cur.name || ""]);
|
|
649
792
|
if (isVariant || shouldEnsureOverridden) {
|
|
650
|
-
|
|
651
|
-
type: "attr",
|
|
652
|
-
value: cur.attr || t.jsxAttribute(t.jsxIdentifier(key), t.jsxExpressionContainer(t.nullLiteral()))
|
|
653
|
-
});
|
|
793
|
+
ensureOverridden[key] = true;
|
|
654
794
|
}
|
|
655
795
|
}
|
|
656
796
|
}
|
|
657
797
|
}
|
|
658
|
-
|
|
659
|
-
return acc;
|
|
660
|
-
}, []);
|
|
798
|
+
}
|
|
661
799
|
}
|
|
662
800
|
if (shouldPrintDebug) {
|
|
663
801
|
console.log(" - attrs (flattened): \n", logLines(attrs.map(attrStr).join(", ")));
|
|
802
|
+
console.log(" - ensureOverriden:", Object.keys(ensureOverridden).join(", "));
|
|
664
803
|
}
|
|
665
804
|
attrs = attrs.reduce((acc, cur) => {
|
|
666
|
-
if (
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
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
|
+
if (shouldPrintDebug) {
|
|
825
|
+
console.log(` keeping variable inline: ${key} =`, value);
|
|
674
826
|
}
|
|
827
|
+
acc.push({
|
|
828
|
+
type: "attr",
|
|
829
|
+
value: t.jsxAttribute(t.jsxIdentifier(key), t.jsxExpressionContainer(t.stringLiteral(value)))
|
|
830
|
+
});
|
|
831
|
+
return acc;
|
|
675
832
|
}
|
|
676
833
|
}
|
|
677
834
|
acc.push(cur);
|
|
678
835
|
return acc;
|
|
679
836
|
}, []);
|
|
680
837
|
if (shouldPrintDebug) {
|
|
681
|
-
console.log(" - attrs (
|
|
838
|
+
console.log(" - attrs (expanded): \n", logLines(attrs.map(attrStr).join(", ")));
|
|
682
839
|
}
|
|
683
840
|
let prev = null;
|
|
841
|
+
function mergeStyles(prev2, next) {
|
|
842
|
+
for (const key in next) {
|
|
843
|
+
if (pseudos[key]) {
|
|
844
|
+
prev2[key] = prev2[key] || {};
|
|
845
|
+
Object.assign(prev2[key], next[key]);
|
|
846
|
+
} else {
|
|
847
|
+
prev2[key] = next[key];
|
|
848
|
+
}
|
|
849
|
+
}
|
|
850
|
+
}
|
|
851
|
+
__name(mergeStyles, "mergeStyles");
|
|
684
852
|
attrs = attrs.reduce((acc, cur) => {
|
|
685
853
|
if (cur.type === "style") {
|
|
686
|
-
|
|
687
|
-
|
|
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 (shouldPrintDebug) {
|
|
858
|
+
console.log("go", {
|
|
859
|
+
key,
|
|
860
|
+
value,
|
|
861
|
+
prevType: prev == null ? void 0 : prev.type,
|
|
862
|
+
shouldKeepOriginalAttr,
|
|
863
|
+
ensureOverridden: ensureOverridden[key]
|
|
864
|
+
});
|
|
865
|
+
}
|
|
866
|
+
if (shouldKeepOriginalAttr) {
|
|
867
|
+
if (shouldPrintDebug) {
|
|
868
|
+
console.log(" - keeping as non-style", key);
|
|
869
|
+
}
|
|
870
|
+
prev = cur;
|
|
871
|
+
acc.push({
|
|
872
|
+
type: "attr",
|
|
873
|
+
value: t.jsxAttribute(t.jsxIdentifier(key), t.jsxExpressionContainer(typeof value === "string" ? t.stringLiteral(value) : literalToAst(value)))
|
|
874
|
+
});
|
|
875
|
+
acc.push(cur);
|
|
876
|
+
return acc;
|
|
877
|
+
}
|
|
878
|
+
if (ensureOverridden[key]) {
|
|
879
|
+
acc.push({
|
|
880
|
+
type: "attr",
|
|
881
|
+
value: cur.attr || t.jsxAttribute(t.jsxIdentifier(key), t.jsxExpressionContainer(t.nullLiteral()))
|
|
882
|
+
});
|
|
883
|
+
}
|
|
884
|
+
if ((prev == null ? void 0 : prev.type) === "style") {
|
|
885
|
+
mergeStyles(prev.value, cur.value);
|
|
688
886
|
return acc;
|
|
689
887
|
}
|
|
690
888
|
}
|
|
691
|
-
acc.push(cur);
|
|
692
889
|
prev = cur;
|
|
890
|
+
acc.push(cur);
|
|
693
891
|
return acc;
|
|
694
892
|
}, []);
|
|
695
893
|
if (shouldPrintDebug) {
|
|
696
894
|
console.log(" - attrs (combined \u{1F500}): \n", logLines(attrs.map(attrStr).join(", ")));
|
|
697
895
|
}
|
|
698
|
-
const getStyles = /* @__PURE__ */ __name((props2) => {
|
|
896
|
+
const getStyles = /* @__PURE__ */ __name((props2, debugName = "") => {
|
|
699
897
|
if (!props2)
|
|
700
898
|
return;
|
|
701
|
-
if (
|
|
899
|
+
if (!Object.keys(props2).length)
|
|
900
|
+
return;
|
|
901
|
+
if (excludeProps && !!excludeProps.size) {
|
|
702
902
|
for (const key in props2) {
|
|
703
|
-
if (
|
|
903
|
+
if (excludeProps.has(key)) {
|
|
704
904
|
delete props2[key];
|
|
905
|
+
}
|
|
705
906
|
}
|
|
706
907
|
}
|
|
707
|
-
const out =
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
908
|
+
const out = getSplitStyles(props2, staticConfig, defaultTheme, {
|
|
909
|
+
noClassNames: true
|
|
910
|
+
});
|
|
911
|
+
const outStyle = {
|
|
912
|
+
...out.style,
|
|
913
|
+
...out.pseudos
|
|
914
|
+
};
|
|
915
|
+
if (shouldPrintDebug === "verbose") {
|
|
916
|
+
console.log(` getStyles ${debugName} (props):
|
|
917
|
+
`, logLines(objToStr(props2)));
|
|
918
|
+
console.log(` getStyles ${debugName} (out.viewProps):
|
|
919
|
+
`, logLines(objToStr(out.viewProps)));
|
|
920
|
+
console.log(` getStyles ${debugName} (out.style):
|
|
921
|
+
`, logLines(objToStr(outStyle || {}), true));
|
|
714
922
|
}
|
|
715
|
-
|
|
716
|
-
|
|
923
|
+
for (const key in outStyle) {
|
|
924
|
+
if (staticConfig.validStyles) {
|
|
717
925
|
if (!staticConfig.validStyles[key] && !pseudos[key]) {
|
|
718
|
-
delete
|
|
926
|
+
delete outStyle[key];
|
|
719
927
|
}
|
|
720
928
|
}
|
|
721
929
|
}
|
|
722
|
-
return
|
|
930
|
+
return outStyle;
|
|
723
931
|
}, "getStyles");
|
|
724
932
|
const completeStylesProcessed = getStyles({
|
|
725
933
|
...staticConfig.defaultProps,
|
|
726
934
|
...completeStaticProps
|
|
727
|
-
});
|
|
728
|
-
|
|
935
|
+
}, "completeStylesProcessed");
|
|
936
|
+
if (!completeStylesProcessed) {
|
|
937
|
+
throw new Error(`Impossible, no styles`);
|
|
938
|
+
}
|
|
939
|
+
const stylesToAddToInitialGroup = shouldFlatten ? difference(Object.keys(completeStylesProcessed), Object.keys(completeStaticProps)) : [];
|
|
729
940
|
if (stylesToAddToInitialGroup.length) {
|
|
730
941
|
const toAdd = pick(completeStylesProcessed, ...stylesToAddToInitialGroup);
|
|
731
942
|
const firstGroup = attrs.find((x) => x.type === "style");
|
|
732
943
|
if (shouldPrintDebug) {
|
|
733
|
-
console.log(" stylesToAddToInitialGroup", stylesToAddToInitialGroup.join(", "));
|
|
734
944
|
console.log(" toAdd", objToStr(toAdd));
|
|
735
945
|
}
|
|
736
946
|
if (!firstGroup) {
|
|
@@ -740,38 +950,54 @@ function createExtractor() {
|
|
|
740
950
|
}
|
|
741
951
|
}
|
|
742
952
|
if (shouldPrintDebug) {
|
|
743
|
-
console.log("
|
|
744
|
-
console.log("
|
|
953
|
+
console.log(" -- stylesToAddToInitialGroup", stylesToAddToInitialGroup.join(", "), { shouldFlatten });
|
|
954
|
+
console.log(" -- completeStaticProps:\n", logLines(objToStr(completeStaticProps)));
|
|
955
|
+
console.log(" -- completeStylesProcessed:\n", logLines(objToStr(completeStylesProcessed)));
|
|
745
956
|
}
|
|
957
|
+
let getStyleError = null;
|
|
746
958
|
for (const attr of attrs) {
|
|
747
959
|
try {
|
|
960
|
+
if (shouldPrintDebug)
|
|
961
|
+
console.log(" *", attrStr(attr));
|
|
748
962
|
switch (attr.type) {
|
|
749
963
|
case "ternary":
|
|
750
|
-
const a = getStyles(attr.value.alternate);
|
|
751
|
-
const c = getStyles(attr.value.consequent);
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
if (
|
|
964
|
+
const a = getStyles(attr.value.alternate, "ternary.alternate");
|
|
965
|
+
const c = getStyles(attr.value.consequent, "ternary.consequent");
|
|
966
|
+
if (a)
|
|
967
|
+
attr.value.alternate = a;
|
|
968
|
+
if (c)
|
|
969
|
+
attr.value.consequent = c;
|
|
970
|
+
if (shouldPrintDebug)
|
|
755
971
|
console.log(" => tern ", attrStr(attr));
|
|
756
|
-
|
|
757
|
-
break;
|
|
972
|
+
continue;
|
|
758
973
|
case "style":
|
|
759
|
-
const
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
next[key] = completeStylesProcessed[key] ?? attr.value[key];
|
|
765
|
-
}
|
|
974
|
+
const styles = getStyles(attr.value, "style");
|
|
975
|
+
if (styles) {
|
|
976
|
+
attr.value = Object.fromEntries(Object.keys(styles).map((k) => [k, completeStylesProcessed[k]]));
|
|
977
|
+
} else {
|
|
978
|
+
console.warn("?????????");
|
|
766
979
|
}
|
|
767
|
-
|
|
768
|
-
break;
|
|
980
|
+
continue;
|
|
769
981
|
}
|
|
770
982
|
} catch (err) {
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
983
|
+
getStyleError = err;
|
|
984
|
+
}
|
|
985
|
+
}
|
|
986
|
+
if (getStyleError) {
|
|
987
|
+
console.log(" \u26A0\uFE0F postprocessing error, deopt", getStyleError);
|
|
988
|
+
node.attributes = ogAttributes;
|
|
989
|
+
return node;
|
|
990
|
+
}
|
|
991
|
+
const existingStyleKeys = /* @__PURE__ */ new Set();
|
|
992
|
+
for (let i = attrs.length - 1; i >= 0; i--) {
|
|
993
|
+
const attr = attrs[i];
|
|
994
|
+
if (attr.type === "style") {
|
|
995
|
+
for (const key in attr.value) {
|
|
996
|
+
if (existingStyleKeys.has(key)) {
|
|
997
|
+
delete attr.value[key];
|
|
998
|
+
} else {
|
|
999
|
+
existingStyleKeys.add(key);
|
|
1000
|
+
}
|
|
775
1001
|
}
|
|
776
1002
|
}
|
|
777
1003
|
}
|
|
@@ -782,7 +1008,6 @@ function createExtractor() {
|
|
|
782
1008
|
if (shouldPrintDebug) {
|
|
783
1009
|
console.log(" [\u2705] flattening", originalNodeName, flatNode);
|
|
784
1010
|
}
|
|
785
|
-
isFlattened = true;
|
|
786
1011
|
node.name.name = flatNode;
|
|
787
1012
|
res.flattened++;
|
|
788
1013
|
if (closingElement) {
|
|
@@ -790,10 +1015,9 @@ function createExtractor() {
|
|
|
790
1015
|
}
|
|
791
1016
|
}
|
|
792
1017
|
if (shouldPrintDebug) {
|
|
793
|
-
console.log(
|
|
1018
|
+
console.log(` \u274A\u274A inline props (${inlinePropCount}):`, shouldDeopt ? " deopted" : "", hasSpread ? " has spread" : "", staticConfig.neverFlatten ? "neverFlatten" : "");
|
|
794
1019
|
console.log(" - attrs (end):\n", logLines(attrs.map(attrStr).join(", ")));
|
|
795
1020
|
}
|
|
796
|
-
res.optimized++;
|
|
797
1021
|
onExtractTag({
|
|
798
1022
|
attrs,
|
|
799
1023
|
node,
|
|
@@ -802,7 +1026,7 @@ function createExtractor() {
|
|
|
802
1026
|
attemptEval,
|
|
803
1027
|
jsxPath: traversePath,
|
|
804
1028
|
originalNodeName,
|
|
805
|
-
isFlattened,
|
|
1029
|
+
isFlattened: shouldFlatten,
|
|
806
1030
|
programPath
|
|
807
1031
|
});
|
|
808
1032
|
}
|
|
@@ -822,7 +1046,6 @@ function createExtractor() {
|
|
|
822
1046
|
}
|
|
823
1047
|
__name(createExtractor, "createExtractor");
|
|
824
1048
|
export {
|
|
825
|
-
FAILED_EVAL,
|
|
826
1049
|
createExtractor
|
|
827
1050
|
};
|
|
828
1051
|
//# sourceMappingURL=createExtractor.js.map
|