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