@tamagui/static 1.0.0-beta.189 → 1.0.0-beta.207
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/extractor/createExtractor.js +117 -51
- package/dist/cjs/extractor/createExtractor.js.map +2 -2
- package/dist/cjs/extractor/loadTamagui.js.map +1 -1
- package/dist/esm/extractor/createExtractor.js +117 -51
- package/dist/esm/extractor/createExtractor.js.map +2 -2
- package/dist/esm/extractor/loadTamagui.js.map +1 -1
- package/dist/jsx/extractor/createExtractor.js +117 -51
- package/package.json +7 -7
- package/types/extractor/createExtractor.d.ts.map +1 -1
- package/types/extractor/loadTamagui.d.ts +2 -2
- package/types/extractor/loadTamagui.d.ts.map +1 -1
|
@@ -74,6 +74,15 @@ const UNTOUCHED_PROPS = {
|
|
|
74
74
|
style: true,
|
|
75
75
|
className: true
|
|
76
76
|
};
|
|
77
|
+
const INLINE_EXTRACTABLE = {
|
|
78
|
+
ref: "ref",
|
|
79
|
+
key: "key",
|
|
80
|
+
onPress: "onClick",
|
|
81
|
+
onHoverIn: "onMouseEnter",
|
|
82
|
+
onHoverOut: "onMouseLeave",
|
|
83
|
+
onPressIn: "onMouseDown",
|
|
84
|
+
onPressOut: "onMouseUp"
|
|
85
|
+
};
|
|
77
86
|
const isAttr = /* @__PURE__ */ __name((x) => x.type === "attr", "isAttr");
|
|
78
87
|
const validHooks = {
|
|
79
88
|
useMedia: true,
|
|
@@ -81,6 +90,10 @@ const validHooks = {
|
|
|
81
90
|
};
|
|
82
91
|
const createTernary = /* @__PURE__ */ __name((x) => x, "createTernary");
|
|
83
92
|
function createExtractor() {
|
|
93
|
+
if (!process.env.TAMAGUI_TARGET) {
|
|
94
|
+
console.log('\u26A0\uFE0F Please set process.env.TAMAGUI_TARGET to either "web" or "native"');
|
|
95
|
+
process.exit(1);
|
|
96
|
+
}
|
|
84
97
|
const shouldAddDebugProp = !process.env.npm_package_dependencies_next && process.env.TAMAGUI_TARGET !== "native" && process.env.IDENTIFY_TAGS !== "false" && (process.env.NODE_ENV === "development" || process.env.DEBUG || process.env.IDENTIFY_TAGS);
|
|
85
98
|
require("esbuild-register/dist/node").register({
|
|
86
99
|
target: "es2019",
|
|
@@ -151,6 +164,7 @@ function createExtractor() {
|
|
|
151
164
|
return obj;
|
|
152
165
|
}, {});
|
|
153
166
|
let doesUseValidImport = false;
|
|
167
|
+
let hasImportedTheme = false;
|
|
154
168
|
for (const bodyPath of body) {
|
|
155
169
|
if (bodyPath.type !== "ImportDeclaration")
|
|
156
170
|
continue;
|
|
@@ -219,16 +233,17 @@ function createExtractor() {
|
|
|
219
233
|
}
|
|
220
234
|
const originalNodeName = node.name.name;
|
|
221
235
|
res.found++;
|
|
236
|
+
const filePath = sourcePath.replace(process.cwd(), ".");
|
|
237
|
+
const lineNumbers = node.loc ? node.loc.start.line + (node.loc.start.line !== node.loc.end.line ? `-${node.loc.end.line}` : "") : "";
|
|
238
|
+
const preName = componentName ? `${componentName}.` : "";
|
|
239
|
+
const tagId = `${preName}${node.name.name}@${filePath.replace("./", "")}:${lineNumbers}`;
|
|
222
240
|
if (shouldPrintDebug) {
|
|
223
241
|
console.log(`
|
|
224
|
-
<${originalNodeName}
|
|
242
|
+
<${originalNodeName} /> (${tagId})`);
|
|
225
243
|
}
|
|
226
|
-
const filePath = sourcePath.replace(process.cwd(), ".");
|
|
227
|
-
const lineNumbers = node.loc ? node.loc.start.line + (node.loc.start.line !== node.loc.end.line ? `-${node.loc.end.line}` : "") : "";
|
|
228
244
|
if (shouldAddDebugProp && !disableDebugAttr) {
|
|
229
|
-
const preName = componentName ? `${componentName}.` : "";
|
|
230
245
|
res.modified++;
|
|
231
|
-
node.attributes.unshift(t.jsxAttribute(t.jsxIdentifier("data-is"), t.stringLiteral(
|
|
246
|
+
node.attributes.unshift(t.jsxAttribute(t.jsxIdentifier("data-is"), t.stringLiteral(tagId)));
|
|
232
247
|
}
|
|
233
248
|
const shouldLog = !hasLogged;
|
|
234
249
|
if (shouldLog) {
|
|
@@ -265,6 +280,7 @@ function createExtractor() {
|
|
|
265
280
|
...staticConfig.inlineProps || []
|
|
266
281
|
]);
|
|
267
282
|
const deoptProps = /* @__PURE__ */ new Set([
|
|
283
|
+
"animation",
|
|
268
284
|
...props.deoptProps || [],
|
|
269
285
|
...staticConfig.deoptProps || []
|
|
270
286
|
]);
|
|
@@ -343,7 +359,7 @@ function createExtractor() {
|
|
|
343
359
|
}
|
|
344
360
|
let attrs = [];
|
|
345
361
|
let shouldDeopt = false;
|
|
346
|
-
|
|
362
|
+
const inlined = /* @__PURE__ */ new Map();
|
|
347
363
|
let hasSetOptimized = false;
|
|
348
364
|
attrs = traversePath.get("openingElement").get("attributes").flatMap((path) => {
|
|
349
365
|
try {
|
|
@@ -395,7 +411,7 @@ function createExtractor() {
|
|
|
395
411
|
if (shouldPrintDebug) {
|
|
396
412
|
console.log(" ! inlining, spread attr");
|
|
397
413
|
}
|
|
398
|
-
|
|
414
|
+
inlined.set(`${Math.random()}`, "spread");
|
|
399
415
|
return attr;
|
|
400
416
|
}
|
|
401
417
|
const name = attribute.name.name;
|
|
@@ -406,7 +422,7 @@ function createExtractor() {
|
|
|
406
422
|
return null;
|
|
407
423
|
}
|
|
408
424
|
if (inlineProps.has(name)) {
|
|
409
|
-
|
|
425
|
+
inlined.set(name, name);
|
|
410
426
|
if (shouldPrintDebug) {
|
|
411
427
|
console.log(" ! inlining, inline prop", name);
|
|
412
428
|
}
|
|
@@ -414,7 +430,7 @@ function createExtractor() {
|
|
|
414
430
|
}
|
|
415
431
|
if (deoptProps.has(name)) {
|
|
416
432
|
shouldDeopt = true;
|
|
417
|
-
|
|
433
|
+
inlined.set(name, name);
|
|
418
434
|
if (shouldPrintDebug) {
|
|
419
435
|
console.log(" ! inlining, deopted prop", name);
|
|
420
436
|
}
|
|
@@ -423,6 +439,10 @@ function createExtractor() {
|
|
|
423
439
|
if (UNTOUCHED_PROPS[name]) {
|
|
424
440
|
return attr;
|
|
425
441
|
}
|
|
442
|
+
if (INLINE_EXTRACTABLE[name]) {
|
|
443
|
+
inlined.set(name, INLINE_EXTRACTABLE[name]);
|
|
444
|
+
return attr;
|
|
445
|
+
}
|
|
426
446
|
if (name.startsWith("data-")) {
|
|
427
447
|
return attr;
|
|
428
448
|
}
|
|
@@ -460,7 +480,7 @@ function createExtractor() {
|
|
|
460
480
|
if (shouldPrintDebug) {
|
|
461
481
|
console.log(" ! inlining, ref", name);
|
|
462
482
|
}
|
|
463
|
-
|
|
483
|
+
inlined.set("ref", "ref");
|
|
464
484
|
return attr;
|
|
465
485
|
}
|
|
466
486
|
if (name === "tag") {
|
|
@@ -475,7 +495,7 @@ function createExtractor() {
|
|
|
475
495
|
if (shouldPrintDebug) {
|
|
476
496
|
console.log(` ! inlining, native disable extract: ${name} =`, value.value);
|
|
477
497
|
}
|
|
478
|
-
|
|
498
|
+
inlined.set(name, true);
|
|
479
499
|
return attr;
|
|
480
500
|
}
|
|
481
501
|
}
|
|
@@ -492,19 +512,49 @@ function createExtractor() {
|
|
|
492
512
|
keys = Object.keys(out);
|
|
493
513
|
}
|
|
494
514
|
}
|
|
515
|
+
let didInline = false;
|
|
495
516
|
const attributes = keys.map((key) => {
|
|
496
517
|
const val = out[key];
|
|
497
|
-
if (
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
518
|
+
if (key === "theme") {
|
|
519
|
+
inlined.set(key, val);
|
|
520
|
+
return attr;
|
|
521
|
+
}
|
|
522
|
+
if (isValidStyleKey(key)) {
|
|
523
|
+
return {
|
|
524
|
+
type: "style",
|
|
525
|
+
value: { [name]: styleValue },
|
|
526
|
+
name,
|
|
527
|
+
attr: path.node
|
|
528
|
+
};
|
|
529
|
+
}
|
|
530
|
+
if (import_validHTMLAttributes.validHTMLAttributes[key]) {
|
|
531
|
+
return attr;
|
|
532
|
+
}
|
|
533
|
+
if (shouldPrintDebug) {
|
|
534
|
+
console.log(" ! inlining, non-static", key);
|
|
535
|
+
}
|
|
536
|
+
didInline = true;
|
|
537
|
+
inlined.set(key, val);
|
|
538
|
+
return val;
|
|
539
|
+
});
|
|
540
|
+
if (didInline) {
|
|
541
|
+
if (shouldPrintDebug) {
|
|
542
|
+
console.log(" bailing flattening due to attributes", attributes);
|
|
543
|
+
}
|
|
544
|
+
return attr;
|
|
545
|
+
}
|
|
546
|
+
return attributes;
|
|
547
|
+
}
|
|
548
|
+
if (styleValue !== import_constants.FAILED_EVAL) {
|
|
549
|
+
if (isValidStyleKey(name)) {
|
|
550
|
+
if (shouldPrintDebug) {
|
|
551
|
+
console.log(` style: ${name} =`, styleValue);
|
|
552
|
+
}
|
|
553
|
+
if (!(name in staticConfig.defaultProps)) {
|
|
554
|
+
if (!hasSetOptimized) {
|
|
555
|
+
res.optimized++;
|
|
556
|
+
hasSetOptimized = true;
|
|
506
557
|
}
|
|
507
|
-
inlinePropCount++;
|
|
508
558
|
}
|
|
509
559
|
return {
|
|
510
560
|
type: "style",
|
|
@@ -512,28 +562,10 @@ function createExtractor() {
|
|
|
512
562
|
name,
|
|
513
563
|
attr: path.node
|
|
514
564
|
};
|
|
515
|
-
}
|
|
516
|
-
|
|
565
|
+
} else {
|
|
566
|
+
inlined.set(name, true);
|
|
517
567
|
return attr;
|
|
518
568
|
}
|
|
519
|
-
return attributes;
|
|
520
|
-
}
|
|
521
|
-
if (styleValue !== import_constants.FAILED_EVAL) {
|
|
522
|
-
if (shouldPrintDebug) {
|
|
523
|
-
console.log(` style: ${name} =`, styleValue);
|
|
524
|
-
}
|
|
525
|
-
if (!(name in staticConfig.defaultProps)) {
|
|
526
|
-
if (!hasSetOptimized) {
|
|
527
|
-
res.optimized++;
|
|
528
|
-
hasSetOptimized = true;
|
|
529
|
-
}
|
|
530
|
-
}
|
|
531
|
-
return {
|
|
532
|
-
type: "style",
|
|
533
|
-
value: { [name]: styleValue },
|
|
534
|
-
name,
|
|
535
|
-
attr: path.node
|
|
536
|
-
};
|
|
537
569
|
}
|
|
538
570
|
if (t.isBinaryExpression(value)) {
|
|
539
571
|
if (shouldPrintDebug) {
|
|
@@ -558,7 +590,7 @@ function createExtractor() {
|
|
|
558
590
|
if (shouldPrintDebug) {
|
|
559
591
|
console.log(` evalBinaryExpression cant extract`);
|
|
560
592
|
}
|
|
561
|
-
|
|
593
|
+
inlined.set(name, true);
|
|
562
594
|
return attr;
|
|
563
595
|
}
|
|
564
596
|
const staticConditional = getStaticConditional(value);
|
|
@@ -575,12 +607,9 @@ function createExtractor() {
|
|
|
575
607
|
}
|
|
576
608
|
return { type: "ternary", value: staticLogical };
|
|
577
609
|
}
|
|
610
|
+
inlined.set(name, true);
|
|
578
611
|
if (shouldPrintDebug) {
|
|
579
|
-
console.log(
|
|
580
|
-
}
|
|
581
|
-
inlinePropCount++;
|
|
582
|
-
if (shouldPrintDebug) {
|
|
583
|
-
console.log(` inlining ${name} = `, value);
|
|
612
|
+
console.log(` ! inline no match ${name}`, value);
|
|
584
613
|
}
|
|
585
614
|
return attr;
|
|
586
615
|
function addBinaryConditional(operator, staticExpr, cond) {
|
|
@@ -808,7 +837,28 @@ function createExtractor() {
|
|
|
808
837
|
}, {}));
|
|
809
838
|
const hasSpread = node.attributes.some((x) => t.isJSXSpreadAttribute(x));
|
|
810
839
|
const hasOnlyStringChildren = !hasSpread && (node.selfClosing || traversePath.node.children && traversePath.node.children.every((x) => x.type === "JSXText"));
|
|
811
|
-
const
|
|
840
|
+
const themeVal = inlined.get("theme");
|
|
841
|
+
inlined.delete("theme");
|
|
842
|
+
const allOtherPropsExtractable = [...inlined].every(([k, v]) => INLINE_EXTRACTABLE[k]);
|
|
843
|
+
const shouldWrapInnerTheme = allOtherPropsExtractable && !!(hasOnlyStringChildren && themeVal);
|
|
844
|
+
const canFlattenProps = inlined.size === 0 || shouldWrapInnerTheme || allOtherPropsExtractable;
|
|
845
|
+
let shouldFlatten = !shouldDeopt && canFlattenProps && !hasSpread && staticConfig.neverFlatten !== true && (staticConfig.neverFlatten === "jsx" ? hasOnlyStringChildren : true);
|
|
846
|
+
if (shouldFlatten && shouldWrapInnerTheme) {
|
|
847
|
+
if (typeof themeVal !== "string") {
|
|
848
|
+
console.warn("??");
|
|
849
|
+
return;
|
|
850
|
+
}
|
|
851
|
+
if (shouldPrintDebug) {
|
|
852
|
+
console.log(" - wrapping theme", allOtherPropsExtractable, themeVal);
|
|
853
|
+
}
|
|
854
|
+
if (!hasImportedTheme) {
|
|
855
|
+
hasImportedTheme = true;
|
|
856
|
+
programPath.node.body.push(t.importDeclaration([t.importSpecifier(t.identifier("_TamaguiTheme"), t.identifier("Theme"))], t.stringLiteral("@tamagui/core")));
|
|
857
|
+
}
|
|
858
|
+
traversePath.replaceWith(t.jsxElement(t.jsxOpeningElement(t.jsxIdentifier("_TamaguiTheme"), [
|
|
859
|
+
t.jsxAttribute(t.jsxIdentifier("name"), t.stringLiteral(`${themeVal}`))
|
|
860
|
+
]), t.jsxClosingElement(t.jsxIdentifier("_TamaguiTheme")), [traversePath.node]));
|
|
861
|
+
}
|
|
812
862
|
if (shouldFlatten && staticConfig.defaultProps) {
|
|
813
863
|
const defaultStyleAttrs = Object.keys(staticConfig.defaultProps).flatMap((key) => {
|
|
814
864
|
if (!isValidStyleKey(key)) {
|
|
@@ -863,8 +913,12 @@ function createExtractor() {
|
|
|
863
913
|
if (!cur) {
|
|
864
914
|
return acc;
|
|
865
915
|
}
|
|
866
|
-
if (
|
|
867
|
-
|
|
916
|
+
if (cur.type === "attr" && !t.isJSXSpreadAttribute(cur.value)) {
|
|
917
|
+
if (shouldFlatten) {
|
|
918
|
+
if (cur.value.name.name === "tag") {
|
|
919
|
+
return acc;
|
|
920
|
+
}
|
|
921
|
+
}
|
|
868
922
|
}
|
|
869
923
|
if (cur.type !== "style") {
|
|
870
924
|
acc.push(cur);
|
|
@@ -1034,6 +1088,18 @@ function createExtractor() {
|
|
|
1034
1088
|
const existingStyleKeys = /* @__PURE__ */ new Set();
|
|
1035
1089
|
for (let i = attrs.length - 1; i >= 0; i--) {
|
|
1036
1090
|
const attr = attrs[i];
|
|
1091
|
+
if (shouldFlatten && canFlattenProps) {
|
|
1092
|
+
if (attr.type === "attr") {
|
|
1093
|
+
if (t.isJSXAttribute(attr.value)) {
|
|
1094
|
+
if (t.isJSXIdentifier(attr.value.name)) {
|
|
1095
|
+
const name = attr.value.name.name;
|
|
1096
|
+
if (INLINE_EXTRACTABLE[name]) {
|
|
1097
|
+
attr.value.name.name = INLINE_EXTRACTABLE[name];
|
|
1098
|
+
}
|
|
1099
|
+
}
|
|
1100
|
+
}
|
|
1101
|
+
}
|
|
1102
|
+
}
|
|
1037
1103
|
if (attr.type === "style") {
|
|
1038
1104
|
for (const key in attr.value) {
|
|
1039
1105
|
if (existingStyleKeys.has(key)) {
|
|
@@ -1058,7 +1124,7 @@ function createExtractor() {
|
|
|
1058
1124
|
}
|
|
1059
1125
|
}
|
|
1060
1126
|
if (shouldPrintDebug) {
|
|
1061
|
-
console.log(` \u274A\u274A inline props (${
|
|
1127
|
+
console.log(` \u274A\u274A inline props (${inlined.size}):`, shouldDeopt ? " deopted" : "", hasSpread ? " has spread" : "", staticConfig.neverFlatten ? "neverFlatten" : "");
|
|
1062
1128
|
console.log(" - attrs (end):\n", (0, import_logLines.logLines)(attrs.map(import_extractHelpers.attrStr).join(", ")));
|
|
1063
1129
|
}
|
|
1064
1130
|
onExtractTag({
|