@tamagui/static 1.0.0-alpha.5 → 1.0.0-alpha.9

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.
@@ -12,6 +12,7 @@ import { findTopmostFunction } from "./findTopmostFunction";
12
12
  import { getStaticBindingsForScope } from "./getStaticBindingsForScope";
13
13
  import { literalToAst } from "./literalToAst";
14
14
  import { loadTamagui } from "./loadTamagui";
15
+ import { logLines } from "./logLines";
15
16
  import { normalizeTernaries } from "./normalizeTernaries";
16
17
  import { removeUnusedHooks } from "./removeUnusedHooks";
17
18
  const { mediaQueryConfig, postProcessStyles, pseudos } = CoreNode;
@@ -34,8 +35,9 @@ function createExtractor() {
34
35
  format: "cjs"
35
36
  });
36
37
  let loadedTamaguiConfig;
38
+ let hasLogged = false;
37
39
  return {
38
- getTamaguiConfig() {
40
+ getTamagui() {
39
41
  return loadedTamaguiConfig;
40
42
  },
41
43
  parse: (fileOrPath, {
@@ -46,7 +48,9 @@ function createExtractor() {
46
48
  sourcePath = "",
47
49
  onExtractTag,
48
50
  getFlattenedNode,
49
- onDidFlatten,
51
+ disableExtraction,
52
+ disableExtractInlineMedia,
53
+ disableDebugAttr,
50
54
  ...props
51
55
  }) => {
52
56
  if (sourcePath === "") {
@@ -61,13 +65,15 @@ function createExtractor() {
61
65
  });
62
66
  loadedTamaguiConfig = tamaguiConfig;
63
67
  const defaultTheme = tamaguiConfig.themes[Object.keys(tamaguiConfig.themes)[0]];
64
- let doesUseValidImport = false;
65
68
  const body = fileOrPath.type === "Program" ? fileOrPath.get("body") : fileOrPath.program.body;
66
- const isInternalImport = /* @__PURE__ */ __name((importStr) => isInsideTamagui(sourcePath) && importStr[0] === ".", "isInternalImport");
67
- const validComponents = Object.keys(components).filter((key) => !!components[key]?.staticConfig).reduce((obj, name) => {
69
+ const isInternalImport = /* @__PURE__ */ __name((importStr) => {
70
+ return isInsideTamagui(sourcePath) && importStr[0] === ".";
71
+ }, "isInternalImport");
72
+ const validComponents = Object.keys(components).filter((key) => key[0].toUpperCase() === key[0] && !!components[key]?.staticConfig).reduce((obj, name) => {
68
73
  obj[name] = components[name];
69
74
  return obj;
70
75
  }, {});
76
+ let doesUseValidImport = false;
71
77
  for (const bodyPath of body) {
72
78
  if (bodyPath.type !== "ImportDeclaration")
73
79
  continue;
@@ -96,6 +102,11 @@ function createExtractor() {
96
102
  return fileOrPath.type === "File" ? traverse(fileOrPath, a) : fileOrPath.traverse(a);
97
103
  }, "callTraverse");
98
104
  let programPath;
105
+ const res = {
106
+ flattened: 0,
107
+ optimized: 0,
108
+ modified: 0
109
+ };
99
110
  callTraverse({
100
111
  Program: {
101
112
  enter(path) {
@@ -127,8 +138,26 @@ function createExtractor() {
127
138
  if (!component || !component.staticConfig) {
128
139
  return;
129
140
  }
130
- const { staticConfig } = component;
131
141
  const originalNodeName = node.name.name;
142
+ if (shouldPrintDebug) {
143
+ console.log(`
144
+ <${originalNodeName} />`);
145
+ }
146
+ const filePath = sourcePath.replace(process.cwd(), ".");
147
+ const lineNumbers = node.loc ? node.loc.start.line + (node.loc.start.line !== node.loc.end.line ? `-${node.loc.end.line}` : "") : "";
148
+ if (shouldAddDebugProp && !disableDebugAttr) {
149
+ const preName = componentName ? `${componentName}:` : "";
150
+ res.modified++;
151
+ node.attributes.unshift(t.jsxAttribute(t.jsxIdentifier("data-is"), t.stringLiteral(` ${preName}${node.name.name} ${filePath.replace("./", "")}:${lineNumbers} `)));
152
+ }
153
+ 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
+ return;
159
+ }
160
+ const { staticConfig } = component;
132
161
  const isTextView = staticConfig.isText || false;
133
162
  const validStyles = staticConfig?.validStyles ?? {};
134
163
  let tagName = staticConfig.defaultProps?.tag ?? (isTextView ? "span" : "div");
@@ -150,21 +179,17 @@ function createExtractor() {
150
179
  ]);
151
180
  const excludeProps = new Set(props.excludeProps ?? []);
152
181
  const isExcludedProp = /* @__PURE__ */ __name((name) => {
153
- const res = excludeProps.has(name);
154
- if (res && shouldPrintDebug)
182
+ const res2 = excludeProps.has(name);
183
+ if (res2 && shouldPrintDebug)
155
184
  console.log(` excluding ${name}`);
156
- return res;
185
+ return res2;
157
186
  }, "isExcludedProp");
158
187
  const isDeoptedProp = /* @__PURE__ */ __name((name) => {
159
- const res = deoptProps.has(name);
160
- if (res && shouldPrintDebug)
188
+ const res2 = deoptProps.has(name);
189
+ if (res2 && shouldPrintDebug)
161
190
  console.log(` deopting ${name}`);
162
- return res;
191
+ return res2;
163
192
  }, "isDeoptedProp");
164
- if (shouldPrintDebug) {
165
- console.log(`
166
- <${originalNodeName} />`);
167
- }
168
193
  const staticNamespace = getStaticBindingsForScope(traversePath.scope, importsWhitelist, sourcePath, bindingCache, shouldPrintDebug);
169
194
  const attemptEval = !evaluateVars ? evaluateAstNode : createEvaluator({
170
195
  tamaguiConfig,
@@ -237,11 +262,11 @@ function createExtractor() {
237
262
  let isFlattened = false;
238
263
  attrs = traversePath.get("openingElement").get("attributes").flatMap((path) => {
239
264
  try {
240
- const res = evaluateAttribute(path);
241
- if (!res) {
265
+ const res2 = evaluateAttribute(path);
266
+ if (!res2) {
242
267
  path.remove();
243
268
  }
244
- return res;
269
+ return res2;
245
270
  } catch (err) {
246
271
  console.log("Error extracting attribute", err.message, err.stack);
247
272
  console.log("node", path.node);
@@ -364,6 +389,9 @@ function createExtractor() {
364
389
  return attr;
365
390
  }
366
391
  if (name[0] === "$" && t.isJSXExpressionContainer(attribute?.value)) {
392
+ if (disableExtractInlineMedia) {
393
+ return attr;
394
+ }
367
395
  const shortname = name.slice(1);
368
396
  if (mediaQueryConfig[shortname]) {
369
397
  const expression = attribute.value.expression;
@@ -423,7 +451,9 @@ function createExtractor() {
423
451
  if (styleValue !== FAILED_EVAL) {
424
452
  return {
425
453
  type: "style",
426
- value: { [name]: styleValue }
454
+ value: { [name]: styleValue },
455
+ name,
456
+ attr: path.node
427
457
  };
428
458
  }
429
459
  if (t.isBinaryExpression(value)) {
@@ -536,7 +566,7 @@ function createExtractor() {
536
566
  }
537
567
  __name(evaluateAttribute, "evaluateAttribute");
538
568
  if (shouldPrintDebug) {
539
- console.log(" - attrs (before): ", attrs.map(attrStr).join(", "));
569
+ console.log(" - attrs (before):\n", logLines(attrs.map(attrStr).join(", ")));
540
570
  }
541
571
  node.attributes = attrs.filter(isAttr).map((x) => x.value);
542
572
  if (couldntParse) {
@@ -550,8 +580,6 @@ function createExtractor() {
550
580
  if (parentFn) {
551
581
  modifiedComponents.add(parentFn);
552
582
  }
553
- const filePath = sourcePath.replace(process.cwd(), ".");
554
- const lineNumbers = node.loc ? node.loc.start.line + (node.loc.start.line !== node.loc.end.line ? `-${node.loc.end.line}` : "") : "";
555
583
  let ternaries = [];
556
584
  attrs = attrs.reduce((out, cur) => {
557
585
  const next = attrs[attrs.indexOf(cur) + 1];
@@ -614,14 +642,16 @@ function createExtractor() {
614
642
  attrs = attrs.reduce((acc, cur) => {
615
643
  if (cur.type === "style") {
616
644
  for (const key in cur.value) {
617
- const shouldInsertNull = !!staticConfig.ensureOverriddenProp?.[key];
645
+ const shouldEnsureOverridden = !!staticConfig.ensureOverriddenProp?.[key];
618
646
  const isSetInAttrsAlready = attrs.some((x) => x.type === "attr" && x.value.type === "JSXAttribute" && x.value.name.name === key);
619
- const shouldInsertNullOverride = shouldInsertNull && !isSetInAttrsAlready;
620
- if (shouldInsertNullOverride) {
621
- acc.push({
622
- type: "attr",
623
- value: t.jsxAttribute(t.jsxIdentifier(key), t.jsxExpressionContainer(t.nullLiteral()))
624
- });
647
+ if (!isSetInAttrsAlready) {
648
+ const isVariant = !!staticConfig.variants?.[cur.name || ""];
649
+ if (isVariant || shouldEnsureOverridden) {
650
+ acc.push({
651
+ type: "attr",
652
+ value: cur.attr || t.jsxAttribute(t.jsxIdentifier(key), t.jsxExpressionContainer(t.nullLiteral()))
653
+ });
654
+ }
625
655
  }
626
656
  }
627
657
  }
@@ -630,7 +660,7 @@ function createExtractor() {
630
660
  }, []);
631
661
  }
632
662
  if (shouldPrintDebug) {
633
- console.log(" - attrs (flattened): ", attrs.map(attrStr).join(", "));
663
+ console.log(" - attrs (flattened): \n", logLines(attrs.map(attrStr).join(", ")));
634
664
  }
635
665
  attrs = attrs.reduce((acc, cur) => {
636
666
  if (cur.type !== "attr" || !t.isJSXAttribute(cur.value) || typeof cur.value.name.name !== "string") {
@@ -648,7 +678,7 @@ function createExtractor() {
648
678
  return acc;
649
679
  }, []);
650
680
  if (shouldPrintDebug) {
651
- console.log(" - attrs (evaluated styles): ", attrs.map(attrStr).join(", "));
681
+ console.log(" - attrs (evaluated styles): \n", logLines(attrs.map(attrStr).join(", ")));
652
682
  }
653
683
  let prev = null;
654
684
  attrs = attrs.reduce((acc, cur) => {
@@ -663,7 +693,7 @@ function createExtractor() {
663
693
  return acc;
664
694
  }, []);
665
695
  if (shouldPrintDebug) {
666
- console.log(" - attrs (combined \u{1F500}): ", attrs.map(attrStr).join(", "));
696
+ console.log(" - attrs (combined \u{1F500}): \n", logLines(attrs.map(attrStr).join(", ")));
667
697
  }
668
698
  const getStyles = /* @__PURE__ */ __name((props2) => {
669
699
  if (!props2)
@@ -677,9 +707,10 @@ function createExtractor() {
677
707
  const out = postProcessStyles(props2, staticConfig, defaultTheme);
678
708
  const next = out?.style ?? props2;
679
709
  if (shouldPrintDebug) {
680
- console.log(" >> getStyles: ", objToStr(props2), "==>>", objToStr(next));
681
- console.log(" >> style: ", objToStr(out.style));
682
- console.log(" >> viewp: ", objToStr(out.viewProps));
710
+ console.log(" getStyles props >>\n", logLines(objToStr(props2)));
711
+ console.log(" getStyles next >>\n", logLines(objToStr(next)));
712
+ console.log(" getStyles style >>\n", logLines(objToStr(out.style)));
713
+ console.log(" getStyles viewp >>\n", logLines(objToStr(out.viewProps)));
683
714
  }
684
715
  if (staticConfig.validStyles) {
685
716
  for (const key in next) {
@@ -690,9 +721,6 @@ function createExtractor() {
690
721
  }
691
722
  return next;
692
723
  }, "getStyles");
693
- if (shouldPrintDebug) {
694
- console.log(" staticConfig.defaultProps", staticConfig.defaultProps);
695
- }
696
724
  const completeStylesProcessed = getStyles({
697
725
  ...staticConfig.defaultProps,
698
726
  ...completeStaticProps
@@ -712,8 +740,8 @@ function createExtractor() {
712
740
  }
713
741
  }
714
742
  if (shouldPrintDebug) {
715
- console.log(" completeStaticProps", objToStr(completeStaticProps));
716
- console.log(" completeStylesProcessed", objToStr(completeStylesProcessed));
743
+ console.log(" completeStaticProps\n", logLines(objToStr(completeStaticProps)));
744
+ console.log(" completeStylesProcessed\n", logLines(objToStr(completeStylesProcessed)));
717
745
  }
718
746
  for (const attr of attrs) {
719
747
  try {
@@ -748,14 +776,7 @@ function createExtractor() {
748
776
  }
749
777
  }
750
778
  if (shouldPrintDebug) {
751
- console.log(" - attrs (after): ", attrs.map(attrStr).join(", "));
752
- }
753
- if (shouldAddDebugProp) {
754
- const preName = componentName ? `${componentName}:` : "";
755
- attrs.unshift({
756
- type: "attr",
757
- value: t.jsxAttribute(t.jsxIdentifier("data-is"), t.stringLiteral(` ${preName}${node.name.name} ${filePath.replace("./", "")}:${lineNumbers} `))
758
- });
779
+ console.log(" - attrs (after):\n", logLines(attrs.map(attrStr).join(", ")));
759
780
  }
760
781
  if (shouldFlatten) {
761
782
  if (shouldPrintDebug) {
@@ -763,15 +784,16 @@ function createExtractor() {
763
784
  }
764
785
  isFlattened = true;
765
786
  node.name.name = flatNode;
766
- onDidFlatten?.();
787
+ res.flattened++;
767
788
  if (closingElement) {
768
789
  closingElement.name.name = flatNode;
769
790
  }
770
791
  }
771
792
  if (shouldPrintDebug) {
772
793
  console.log(" [\u274A] inline props ", inlinePropCount, shouldDeopt ? " deopted" : "", hasSpread ? " spread" : "", "!flatten", staticConfig.neverFlatten);
773
- console.log(" - attrs (end): ", attrs.map(attrStr).join(", "));
794
+ console.log(" - attrs (end):\n", logLines(attrs.map(attrStr).join(", ")));
774
795
  }
796
+ res.optimized++;
775
797
  onExtractTag({
776
798
  attrs,
777
799
  node,
@@ -794,6 +816,7 @@ function createExtractor() {
794
816
  removeUnusedHooks(comp, shouldPrintDebug);
795
817
  }
796
818
  }
819
+ return res;
797
820
  }
798
821
  };
799
822
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/extractor/createExtractor.ts"],
4
- "sourcesContent": ["import traverse, { NodePath, Visitor } from '@babel/traverse'\nimport * as t from '@babel/types'\nimport type { StaticConfigParsed, TamaguiInternalConfig } from '@tamagui/core'\nimport * as CoreNode from '@tamagui/core-node'\nimport { stylePropsTransform } from '@tamagui/helpers'\nimport { difference, pick } from 'lodash'\n\nimport { ExtractedAttr, ExtractedAttrAttr, ExtractorParseProps, Ternary } from '../types'\nimport { createEvaluator, createSafeEvaluator } from './createEvaluator'\nimport { evaluateAstNode } from './evaluateAstNode'\nimport { attrStr, findComponentName, isInsideTamagui, isPresent, objToStr } from './extractHelpers'\nimport { findTopmostFunction } from './findTopmostFunction'\nimport { getStaticBindingsForScope } from './getStaticBindingsForScope'\nimport { literalToAst } from './literalToAst'\nimport { loadTamagui } from './loadTamagui'\nimport { normalizeTernaries } from './normalizeTernaries'\nimport { removeUnusedHooks } from './removeUnusedHooks'\n\nconst { mediaQueryConfig, postProcessStyles, pseudos } = CoreNode\n\nexport const FAILED_EVAL = Symbol('failed_style_eval')\nconst UNTOUCHED_PROPS = {\n key: true,\n style: true,\n className: true,\n}\n\nconst isAttr = (x: ExtractedAttr): x is ExtractedAttrAttr => x.type === 'attr'\n\nconst validHooks = {\n useMedia: true,\n useTheme: true,\n}\n\nexport type Extractor = ReturnType<typeof createExtractor>\n\nconst createTernary = (x: Ternary) => x\n\nexport function createExtractor() {\n const shouldAddDebugProp =\n // really basic disable this for next.js because it messes with ssr\n !process.env.npm_package_dependencies_next &&\n process.env.TAMAGUI_TARGET !== 'native' &&\n process.env.IDENTIFY_TAGS !== 'false' &&\n (process.env.NODE_ENV === 'development' || process.env.DEBUG || process.env.IDENTIFY_TAGS)\n\n // ts imports\n require('esbuild-register/dist/node').register({\n target: 'es2019',\n format: 'cjs',\n })\n\n let loadedTamaguiConfig: TamaguiInternalConfig\n\n return {\n getTamaguiConfig() {\n return loadedTamaguiConfig\n },\n parse: (\n fileOrPath: NodePath<t.Program> | t.File,\n {\n config = 'tamagui.config.ts',\n importsWhitelist = ['constants.js'],\n evaluateVars = true,\n shouldPrintDebug = false,\n sourcePath = '',\n onExtractTag,\n getFlattenedNode,\n onDidFlatten,\n ...props\n }: ExtractorParseProps\n ) => {\n if (sourcePath === '') {\n throw new Error(`Must provide a source file name`)\n }\n if (!Array.isArray(props.components)) {\n throw new Error(`Must provide components array with list of Tamagui component modules`)\n }\n\n // we require it after parse because we need to set some global/env stuff before importing\n // otherwise we'd import `rnw` and cause it to evaluate react-native-web which causes errors\n const { components, tamaguiConfig } = loadTamagui({\n config,\n components: props.components || ['tamagui'],\n })\n\n loadedTamaguiConfig = tamaguiConfig\n\n const defaultTheme = tamaguiConfig.themes[Object.keys(tamaguiConfig.themes)[0]]\n\n // TODO this can be passed in / set based on if source changed\n // const shouldReCheckTheme = false //Date.now() - hasParsedFileLast > 600\n // hasParsedFileLast = Date.now()\n\n let doesUseValidImport = false\n const body = fileOrPath.type === 'Program' ? fileOrPath.get('body') : fileOrPath.program.body\n\n /**\n * Step 1: Determine if importing any statically extractable components\n */\n const isInternalImport = (importStr: string) =>\n isInsideTamagui(sourcePath) && importStr[0] === '.'\n\n const validComponents: { [key: string]: any } = Object.keys(components)\n .filter((key) => !!components[key]?.staticConfig)\n .reduce((obj, name) => {\n obj[name] = components[name]\n return obj\n }, {})\n\n for (const bodyPath of body) {\n if (bodyPath.type !== 'ImportDeclaration') continue\n const node = ('node' in bodyPath ? bodyPath.node : bodyPath) as any\n const from = node.source.value\n if (props.components.includes(from) || isInternalImport(from)) {\n if (\n node.specifiers.some((specifier) => {\n const name = specifier.local.name\n return validComponents[name] || validHooks[name]\n })\n ) {\n doesUseValidImport = true\n break\n }\n }\n }\n\n if (shouldPrintDebug) {\n console.log(sourcePath, { doesUseValidImport })\n }\n\n if (!doesUseValidImport) {\n return null\n }\n\n let couldntParse = false\n const modifiedComponents = new Set<NodePath<any>>()\n\n // only keeping a cache around per-file, reset it if it changes\n const bindingCache: Record<string, string | null> = {}\n\n const callTraverse = (a: Visitor<{}>) => {\n return fileOrPath.type === 'File' ? traverse(fileOrPath, a) : fileOrPath.traverse(a)\n }\n\n /**\n * Step 2: Statically extract from JSX < /> nodes\n */\n let programPath: NodePath<t.Program>\n\n callTraverse({\n Program: {\n enter(path) {\n programPath = path\n },\n },\n JSXElement(traversePath) {\n const node = traversePath.node.openingElement\n const ogAttributes = node.attributes\n const componentName = findComponentName(traversePath.scope)\n const closingElement = traversePath.node.closingElement\n\n // skip non-identifier opening elements (member expressions, etc.)\n if (t.isJSXMemberExpression(closingElement?.name) || !t.isJSXIdentifier(node.name)) {\n return\n }\n\n // validate its a proper import from tamagui (or internally inside tamagui)\n const binding = traversePath.scope.getBinding(node.name.name)\n\n if (binding) {\n if (!t.isImportDeclaration(binding.path.parent)) {\n return\n }\n const source = binding.path.parent.source\n if (!props.components.includes(source.value) && !isInternalImport(source.value)) {\n return\n }\n if (!validComponents[binding.identifier.name]) {\n return\n }\n }\n\n const component = validComponents[node.name.name] as { staticConfig?: StaticConfigParsed }\n if (!component || !component.staticConfig) {\n return\n }\n\n const { staticConfig } = component\n const originalNodeName = node.name.name\n const isTextView = staticConfig.isText || false\n const validStyles = staticConfig?.validStyles ?? {}\n\n // find tag=\"a\" tag=\"main\" etc dom indicators\n let tagName = staticConfig.defaultProps?.tag ?? (isTextView ? 'span' : 'div')\n traversePath\n .get('openingElement')\n .get('attributes')\n .forEach((path) => {\n const attr = path.node\n if (t.isJSXSpreadAttribute(attr)) return\n if (attr.name.name !== 'tag') return\n const val = attr.value\n if (!t.isStringLiteral(val)) return\n tagName = val.value\n })\n\n const flatNode = getFlattenedNode({ isTextView, tag: tagName })\n\n const deoptProps = new Set([\n ...(props.deoptProps ?? []),\n ...(staticConfig.deoptProps ?? []),\n ])\n const excludeProps = new Set(props.excludeProps ?? [])\n const isExcludedProp = (name: string) => {\n const res = excludeProps.has(name)\n if (res && shouldPrintDebug) console.log(` excluding ${name}`)\n return res\n }\n\n const isDeoptedProp = (name: string) => {\n const res = deoptProps.has(name)\n if (res && shouldPrintDebug) console.log(` deopting ${name}`)\n return res\n }\n\n if (shouldPrintDebug) {\n console.log(`\\n<${originalNodeName} />`)\n }\n\n // Generate scope object at this level\n const staticNamespace = getStaticBindingsForScope(\n traversePath.scope,\n importsWhitelist,\n sourcePath,\n bindingCache,\n shouldPrintDebug\n )\n\n const attemptEval = !evaluateVars\n ? evaluateAstNode\n : createEvaluator({\n tamaguiConfig,\n staticNamespace,\n sourcePath,\n traversePath,\n shouldPrintDebug,\n })\n const attemptEvalSafe = createSafeEvaluator(attemptEval)\n\n if (shouldPrintDebug) {\n console.log(' staticNamespace', Object.keys(staticNamespace).join(', '))\n }\n\n //\n // SPREADS SETUP\n //\n\n // TODO restore\n const hasDeopt = (obj: Object) => {\n return Object.keys(obj).some(isDeoptedProp)\n }\n\n // flatten any easily evaluatable spreads\n const flattenedAttrs: (t.JSXAttribute | t.JSXSpreadAttribute)[] = []\n traversePath\n .get('openingElement')\n .get('attributes')\n .forEach((path) => {\n const attr = path.node\n if (!t.isJSXSpreadAttribute(attr)) {\n flattenedAttrs.push(attr)\n return\n }\n let arg: any\n try {\n arg = attemptEval(attr.argument)\n } catch (e: any) {\n if (shouldPrintDebug) {\n console.log(' couldnt parse spread', e.message)\n }\n flattenedAttrs.push(attr)\n return\n }\n if (typeof arg !== 'undefined') {\n try {\n if (typeof arg !== 'object' || arg == null) {\n if (shouldPrintDebug) {\n console.log(' non object or null arg', arg)\n }\n flattenedAttrs.push(attr)\n } else {\n for (const k in arg) {\n const value = arg[k]\n // this is a null prop:\n if (!value && typeof value === 'object') {\n console.log('shouldnt we handle this?', k, value, arg)\n continue\n }\n flattenedAttrs.push(\n t.jsxAttribute(\n t.jsxIdentifier(k),\n t.jsxExpressionContainer(literalToAst(value))\n )\n )\n }\n }\n } catch (err) {\n console.warn('cant parse spread, caught err', err)\n couldntParse = true\n }\n }\n })\n\n if (couldntParse) {\n return\n }\n\n // set flattened\n node.attributes = flattenedAttrs\n\n // add in default props\n if (staticConfig.defaultProps) {\n for (const key in staticConfig.defaultProps) {\n const serialize = require('babel-literal-to-ast')\n const val = staticConfig.defaultProps[key]\n node.attributes.unshift(\n t.jsxAttribute(\n t.jsxIdentifier(key),\n typeof val === 'string'\n ? t.stringLiteral(val)\n : t.jsxExpressionContainer(serialize(val))\n )\n )\n }\n }\n\n let attrs: ExtractedAttr[] = []\n let shouldDeopt = false\n let inlinePropCount = 0\n let isFlattened = false\n\n // RUN first pass\n\n // normalize all conditionals so we can evaluate away easier later\n // at the same time lets normalize shorthand media queries into spreads:\n // that way we can parse them with the same logic later on\n //\n // {...media.sm && { color: x ? 'red' : 'blue' }}\n // => {...media.sm && x && { color: 'red' }}\n // => {...media.sm && !x && { color: 'blue' }}\n //\n // $sm={{ color: 'red' }}\n // => {...media.sm && { color: 'red' }}\n //\n // $sm={{ color: x ? 'red' : 'blue' }}\n // => {...media.sm && x && { color: 'red' }}\n // => {...media.sm && !x && { color: 'blue' }}\n\n attrs = traversePath\n .get('openingElement')\n .get('attributes')\n .flatMap((path) => {\n try {\n const res = evaluateAttribute(path)\n if (!res) {\n path.remove()\n }\n return res\n } catch (err: any) {\n console.log('Error extracting attribute', err.message, err.stack)\n console.log('node', path.node)\n return {\n type: 'attr',\n value: path.node,\n } as const\n }\n })\n .flat(4)\n .filter(isPresent)\n\n function isStaticAttributeName(name: string) {\n return !!(\n !!validStyles[name] ||\n staticConfig.validPropsExtra?.[name] ||\n !!pseudos[name] ||\n staticConfig.variants?.[name] ||\n tamaguiConfig.shorthands[name] ||\n (name[0] === '$' ? !!mediaQueryConfig[name.slice(1)] : false)\n )\n }\n\n function isExtractable(obj: t.Node): obj is t.ObjectExpression {\n return (\n t.isObjectExpression(obj) &&\n obj.properties.every((prop) => {\n if (!t.isObjectProperty(prop)) {\n console.log('not object prop', prop)\n return false\n }\n const propName = prop.key['name']\n if (!isStaticAttributeName(propName) && propName !== 'tag') {\n if (shouldPrintDebug) {\n console.log(' not a valid style prop!', propName)\n }\n return false\n }\n return true\n })\n )\n }\n\n // side <= { color: 'red', background: x ? 'red' : 'green' }\n // | => Ternary<test, { color: 'red' }, null>\n // | => Ternary<test && x, { background: 'red' }, null>\n // | => Ternary<test && !x, { background: 'green' }, null>\n function createTernariesFromObjectProperties(\n test: t.Expression,\n side: t.Expression | null,\n ternaryPartial: Partial<Ternary> = {}\n ): null | Ternary[] {\n if (!side) {\n return null\n }\n if (!isExtractable(side)) {\n throw new Error('not extractable')\n }\n return side.properties.flatMap((property) => {\n if (!t.isObjectProperty(property)) {\n throw new Error('expected object property')\n }\n // this could be a recurse here if we want to get fancy\n if (t.isConditionalExpression(property.value)) {\n // merge up into the parent conditional, split into two\n const [truthy, falsy] = [\n t.objectExpression([t.objectProperty(property.key, property.value.consequent)]),\n t.objectExpression([t.objectProperty(property.key, property.value.alternate)]),\n ].map((x) => attemptEval(x))\n return [\n createTernary({\n remove() {},\n ...ternaryPartial,\n test: t.logicalExpression('&&', test, property.value.test),\n consequent: truthy,\n alternate: null,\n }),\n createTernary({\n ...ternaryPartial,\n test: t.logicalExpression(\n '&&',\n test,\n t.unaryExpression('!', property.value.test)\n ),\n consequent: falsy,\n alternate: null,\n remove() {},\n }),\n ]\n }\n const obj = t.objectExpression([t.objectProperty(property.key, property.value)])\n const consequent = attemptEval(obj)\n return createTernary({\n remove() {},\n ...ternaryPartial,\n test,\n consequent,\n alternate: null,\n })\n })\n }\n\n // START function evaluateAttribute\n function evaluateAttribute(\n path: NodePath<t.JSXAttribute | t.JSXSpreadAttribute>\n ): ExtractedAttr | ExtractedAttr[] | null {\n const attribute = path.node\n const attr: ExtractedAttr = { type: 'attr', value: attribute }\n // ...spreads\n if (t.isJSXSpreadAttribute(attribute)) {\n const arg = attribute.argument\n const conditional = t.isConditionalExpression(arg)\n ? // <YStack {...isSmall ? { color: 'red } : { color: 'blue }}\n ([arg.test, arg.consequent, arg.alternate] as const)\n : t.isLogicalExpression(arg) && arg.operator === '&&'\n ? // <YStack {...isSmall && { color: 'red }}\n ([arg.left, arg.right, null] as const)\n : null\n\n if (conditional) {\n const [test, alt, cons] = conditional\n if (!test) throw new Error(`no test`)\n if ([alt, cons].some((side) => side && !isExtractable(side))) {\n if (shouldPrintDebug) {\n console.log('not extractable', alt, cons)\n }\n return attr\n }\n // split into individual ternaries per object property\n return [\n ...(createTernariesFromObjectProperties(test, alt) || []),\n ...((cons &&\n createTernariesFromObjectProperties(t.unaryExpression('!', test), cons)) ||\n []),\n ].map((ternary) => ({\n type: 'ternary',\n value: ternary,\n }))\n }\n }\n // END ...spreads\n\n // directly keep these\n // couldn't evaluate spread, undefined name, or name is not string\n if (\n t.isJSXSpreadAttribute(attribute) ||\n !attribute.name ||\n typeof attribute.name.name !== 'string'\n ) {\n inlinePropCount++\n return attr\n }\n\n const name = attribute.name.name\n\n if (isExcludedProp(name)) {\n return null\n }\n\n // can still optimize the object... see hoverStyle on native\n if (isDeoptedProp(name)) {\n if (shouldPrintDebug) {\n console.log(' ! inlining, deopt prop', name)\n }\n inlinePropCount++\n return attr\n }\n\n // pass className, key, and style props through untouched\n if (UNTOUCHED_PROPS[name]) {\n return attr\n }\n\n // shorthand media queries\n if (name[0] === '$' && t.isJSXExpressionContainer(attribute?.value)) {\n const shortname = name.slice(1)\n if (mediaQueryConfig[shortname]) {\n const expression = attribute.value.expression\n if (!t.isJSXEmptyExpression(expression)) {\n const ternaries = createTernariesFromObjectProperties(\n t.stringLiteral(shortname),\n expression,\n {\n inlineMediaQuery: shortname,\n }\n )\n if (ternaries) {\n return ternaries.map((value) => ({\n type: 'ternary',\n value,\n }))\n }\n }\n }\n }\n\n const [value, valuePath] = (() => {\n if (t.isJSXExpressionContainer(attribute?.value)) {\n return [attribute.value.expression!, path.get('value')!] as const\n } else {\n return [attribute.value!, path.get('value')!] as const\n }\n })()\n\n const remove = () => {\n Array.isArray(valuePath) ? valuePath.map((p) => p.remove()) : valuePath.remove()\n }\n\n if (name === 'ref') {\n if (shouldPrintDebug) {\n console.log(' ! inlining, ref', name)\n }\n inlinePropCount++\n return attr\n }\n\n if (name === 'tag') {\n return {\n type: 'attr',\n value: path.node,\n }\n }\n\n // if value can be evaluated, extract it and filter it out\n const styleValue = attemptEvalSafe(value)\n\n // we never flatten if a prop isn't a valid static attribute\n // but we need to make sure its post-prop mapping\n if (!isStaticAttributeName(name)) {\n let keys = [name]\n if (staticConfig.propMapper) {\n // for now passing empty props {}, a bit odd, need to at least document\n // for now we don't expose custom components so just noting behavior\n const out = staticConfig.propMapper(\n name,\n styleValue,\n defaultTheme,\n staticConfig.defaultProps\n )\n if (out) {\n keys = Object.keys(out)\n }\n }\n if (keys.some((k) => !isStaticAttributeName(k) && k !== 'tag')) {\n if (shouldPrintDebug) {\n console.log(' ! inlining, not static attribute name', name)\n }\n inlinePropCount++\n return attr\n }\n }\n\n // FAILED = dynamic or ternary, keep going\n if (styleValue !== FAILED_EVAL) {\n return {\n type: 'style',\n value: { [name]: styleValue },\n }\n }\n\n // ternaries!\n\n // binary ternary, we can eventually make this smarter but step 1\n // basically for the common use case of:\n // opacity={(conditional ? 0 : 1) * scale}\n if (t.isBinaryExpression(value)) {\n const { operator, left, right } = value\n // if one side is a ternary, and the other side is evaluatable, we can maybe extract\n const lVal = attemptEvalSafe(left)\n const rVal = attemptEvalSafe(right)\n if (shouldPrintDebug) {\n console.log(` evalBinaryExpression lVal ${String(lVal)}, rVal ${String(rVal)}`)\n }\n if (lVal !== FAILED_EVAL && t.isConditionalExpression(right)) {\n const ternary = addBinaryConditional(operator, left, right)\n if (ternary) return ternary\n }\n if (rVal !== FAILED_EVAL && t.isConditionalExpression(left)) {\n const ternary = addBinaryConditional(operator, right, left)\n if (ternary) return ternary\n }\n if (shouldPrintDebug) {\n console.log(` evalBinaryExpression cant extract`)\n }\n inlinePropCount++\n return attr\n }\n\n const staticConditional = getStaticConditional(value)\n if (staticConditional) {\n return { type: 'ternary', value: staticConditional }\n }\n\n const staticLogical = getStaticLogical(value)\n if (staticLogical) {\n return { type: 'ternary', value: staticLogical }\n }\n\n if (shouldPrintDebug) {\n console.log(' ! inline prop via no match', name, value.type)\n }\n // if we've made it this far, the prop stays inline\n inlinePropCount++\n\n //\n // RETURN ATTR\n //\n return attr\n\n // attr helpers:\n function addBinaryConditional(\n operator: any,\n staticExpr: any,\n cond: t.ConditionalExpression\n ): ExtractedAttr | null {\n if (getStaticConditional(cond)) {\n const alt = attemptEval(t.binaryExpression(operator, staticExpr, cond.alternate))\n const cons = attemptEval(t.binaryExpression(operator, staticExpr, cond.consequent))\n if (shouldPrintDebug) {\n console.log(' binaryConditional', cond.test, cons, alt)\n }\n return {\n type: 'ternary',\n value: {\n test: cond.test,\n remove,\n alternate: { [name]: alt },\n consequent: { [name]: cons },\n },\n }\n }\n return null\n }\n\n function getStaticConditional(value: t.Node): Ternary | null {\n if (t.isConditionalExpression(value)) {\n try {\n if (shouldPrintDebug) {\n console.log('attempt', value.alternate, value.consequent)\n }\n const aVal = attemptEval(value.alternate)\n const cVal = attemptEval(value.consequent)\n if (shouldPrintDebug) {\n const type = value.test.type\n console.log(' static ternary', type, cVal, aVal)\n }\n return {\n test: value.test,\n remove,\n consequent: { [name]: cVal },\n alternate: { [name]: aVal },\n }\n } catch (err: any) {\n if (shouldPrintDebug) {\n console.log(' cant eval ternary', err.message)\n }\n }\n }\n return null\n }\n\n function getStaticLogical(value: t.Node): Ternary | null {\n if (t.isLogicalExpression(value)) {\n if (value.operator === '&&') {\n try {\n const val = attemptEval(value.right)\n if (shouldPrintDebug) {\n console.log(' staticLogical', value.left, name, val)\n }\n return {\n test: value.left,\n remove,\n consequent: { [name]: val },\n alternate: null,\n }\n } catch (err) {\n if (shouldPrintDebug) {\n console.log(' cant static eval logical', err)\n }\n }\n }\n }\n return null\n }\n } // END function evaluateAttribute\n\n // see if we can filter them\n if (shouldPrintDebug) {\n console.log(' - attrs (before): ', attrs.map(attrStr).join(', '))\n }\n\n // now update to new values\n node.attributes = attrs.filter(isAttr).map((x) => x.value)\n\n if (couldntParse) {\n if (shouldPrintDebug) {\n console.log(` cancel:`, { couldntParse, shouldDeopt })\n }\n node.attributes = ogAttributes\n return\n }\n\n // before deopt, can still optimize\n const parentFn = findTopmostFunction(traversePath)\n if (parentFn) {\n modifiedComponents.add(parentFn)\n }\n\n const filePath = sourcePath.replace(process.cwd(), '.')\n const lineNumbers = node.loc\n ? node.loc.start.line +\n (node.loc.start.line !== node.loc.end.line ? `-${node.loc.end.line}` : '')\n : ''\n\n // combine ternaries\n let ternaries: Ternary[] = []\n attrs = attrs\n .reduce<(ExtractedAttr | ExtractedAttr[])[]>((out, cur) => {\n const next = attrs[attrs.indexOf(cur) + 1]\n if (cur.type === 'ternary') {\n ternaries.push(cur.value)\n }\n if ((!next || next.type !== 'ternary') && ternaries.length) {\n // finish, process\n const normalized = normalizeTernaries(ternaries).map(\n ({ alternate, consequent, ...rest }) => {\n return {\n type: 'ternary' as const,\n value: {\n ...rest,\n alternate: alternate || null,\n consequent: consequent || null,\n },\n }\n }\n )\n try {\n return [...out, ...normalized]\n } finally {\n if (shouldPrintDebug) {\n console.log(\n ` normalizeTernaries (${ternaries.length} => ${normalized.length})`\n )\n }\n ternaries = []\n }\n }\n if (cur.type === 'ternary') {\n return out\n }\n out.push(cur)\n return out\n }, [])\n .flat()\n\n // evaluates all static attributes into a simple object\n const completeStaticProps = {\n ...Object.keys(attrs).reduce((acc, index) => {\n const cur = attrs[index] as ExtractedAttr\n if (cur.type === 'style') {\n Object.assign(acc, cur.value)\n }\n if (cur.type === 'attr') {\n if (t.isJSXSpreadAttribute(cur.value)) {\n return acc\n }\n if (!t.isJSXIdentifier(cur.value.name)) {\n return acc\n }\n const key = cur.value.name.name\n // undefined = boolean true\n const value = attemptEvalSafe(cur.value.value || t.booleanLiteral(true))\n if (value === FAILED_EVAL) {\n return acc\n }\n acc[key] = value\n }\n return acc\n }, {}),\n }\n\n // flatten logic!\n // fairly simple check to see if all children are text\n const hasSpread = node.attributes.some((x) => t.isJSXSpreadAttribute(x))\n const hasOnlyStringChildren =\n !hasSpread &&\n (node.selfClosing ||\n (traversePath.node.children &&\n traversePath.node.children.every((x) => x.type === 'JSXText')))\n const shouldFlatten =\n !shouldDeopt &&\n inlinePropCount === 0 &&\n !hasSpread &&\n staticConfig.neverFlatten !== true &&\n (staticConfig.neverFlatten === 'jsx' ? hasOnlyStringChildren : true)\n\n // insert overrides - this inserts null props for things that are set in classNames\n // only when not flattening, so the downstream component can skip applying those styles\n if (!shouldFlatten) {\n attrs = attrs.reduce<ExtractedAttr[]>((acc, cur) => {\n if (cur.type === 'style') {\n // TODO need to loop over initial props not just style props\n for (const key in cur.value) {\n const shouldInsertNull =\n !!(\n staticConfig.ensureOverriddenProp?.[key] // || staticConfig.defaultProps?.[key]\n )\n const isSetInAttrsAlready = attrs.some(\n (x) =>\n x.type === 'attr' &&\n x.value.type === 'JSXAttribute' &&\n x.value.name.name === key\n )\n const shouldInsertNullOverride = shouldInsertNull && !isSetInAttrsAlready\n // if (shouldPrintDebug) {\n // // prettier-ignore\n // console.log('what is', key, { shouldInsertNullOverride, shouldInsertNull, isSetInAttrsAlready })\n // }\n if (shouldInsertNullOverride) {\n acc.push({\n type: 'attr',\n value: t.jsxAttribute(\n t.jsxIdentifier(key),\n t.jsxExpressionContainer(t.nullLiteral())\n ),\n })\n }\n }\n }\n acc.push(cur)\n return acc\n }, [])\n }\n\n if (shouldPrintDebug) {\n console.log(' - attrs (flattened): ', attrs.map(attrStr).join(', '))\n }\n\n // evaluate away purely style props\n attrs = attrs.reduce<ExtractedAttr[]>((acc, cur) => {\n if (\n cur.type !== 'attr' ||\n !t.isJSXAttribute(cur.value) ||\n typeof cur.value.name.name !== 'string'\n ) {\n if (cur.type === 'style') {\n const key = Object.keys(cur.value)[0]\n if (!validStyles[key] && !pseudos[key]) {\n if (shouldPrintDebug) {\n console.log(' \u274C excluding', key)\n }\n // we've already expanded shorthands, now we can remove them\n return acc\n }\n }\n }\n acc.push(cur)\n return acc\n }, [])\n\n if (shouldPrintDebug) {\n console.log(' - attrs (evaluated styles): ', attrs.map(attrStr).join(', '))\n }\n\n // combine styles, leave undefined values\n let prev: ExtractedAttr | null = null\n attrs = attrs.reduce<ExtractedAttr[]>((acc, cur) => {\n if (cur.type === 'style') {\n if (prev?.type === 'style') {\n Object.assign(prev.value, cur.value)\n return acc\n }\n }\n acc.push(cur)\n prev = cur\n return acc\n }, [])\n\n if (shouldPrintDebug) {\n console.log(' - attrs (combined \uD83D\uDD00): ', attrs.map(attrStr).join(', '))\n }\n\n // post process\n const getStyles = (props: Object | null) => {\n if (!props) return\n if (!!excludeProps.size) {\n for (const key in props) {\n if (isExcludedProp(key)) delete props[key]\n }\n }\n\n const out = postProcessStyles(props, staticConfig, defaultTheme)\n const next = out?.style ?? props\n if (shouldPrintDebug) {\n console.log(' >> getStyles: ', objToStr(props), '==>>', objToStr(next))\n console.log(' >> style: ', objToStr(out.style))\n console.log(' >> viewp: ', objToStr(out.viewProps))\n }\n if (staticConfig.validStyles) {\n for (const key in next) {\n if (!staticConfig.validStyles[key] && !pseudos[key]) {\n delete next[key]\n }\n }\n }\n return next\n }\n\n if (shouldPrintDebug) {\n console.log(' staticConfig.defaultProps', staticConfig.defaultProps)\n }\n\n // used to ensure we pass the entire prop bundle to getStyles\n const completeStylesProcessed = getStyles({\n ...staticConfig.defaultProps,\n ...completeStaticProps,\n })\n\n // any extra styles added in postprocess should be added to first group as they wont be overriden\n const stylesToAddToInitialGroup = difference(\n Object.keys(completeStylesProcessed),\n Object.keys(completeStaticProps)\n )\n\n if (stylesToAddToInitialGroup.length) {\n const toAdd = pick(completeStylesProcessed, ...stylesToAddToInitialGroup)\n const firstGroup = attrs.find((x) => x.type === 'style')\n if (shouldPrintDebug) {\n console.log(' stylesToAddToInitialGroup', stylesToAddToInitialGroup.join(', '))\n console.log(' toAdd', objToStr(toAdd))\n }\n if (!firstGroup) {\n attrs.unshift({ type: 'style', value: toAdd })\n } else {\n Object.assign(firstGroup.value, toAdd)\n }\n }\n\n if (shouldPrintDebug) {\n // prettier-ignore\n console.log(' completeStaticProps', objToStr(completeStaticProps))\n // prettier-ignore\n console.log(' completeStylesProcessed', objToStr(completeStylesProcessed))\n }\n\n for (const attr of attrs) {\n try {\n switch (attr.type) {\n case 'ternary':\n const a = getStyles(attr.value.alternate)\n const c = getStyles(attr.value.consequent)\n attr.value.alternate = a\n attr.value.consequent = c\n if (shouldPrintDebug) {\n console.log(' => tern ', attrStr(attr))\n }\n break\n case 'style':\n const next = {}\n for (const key in attr.value) {\n if (key in stylePropsTransform) {\n // TODO this logic needs to be a bit more right, because could have spread in between transforms...\n next['transform'] = completeStylesProcessed['transform']\n } else {\n next[key] = completeStylesProcessed[key] ?? attr.value[key]\n }\n }\n attr.value = next\n break\n }\n } catch (err) {\n // any error de-opt\n if (shouldPrintDebug) {\n console.log(' postprocessing error, deopt', err)\n node.attributes = ogAttributes\n return node\n }\n }\n }\n\n if (shouldPrintDebug) {\n console.log(' - attrs (after): ', attrs.map(attrStr).join(', '))\n }\n\n // add data-is\n if (shouldAddDebugProp) {\n const preName = componentName ? `${componentName}:` : ''\n // unshift so spreads/nesting overwrite\n attrs.unshift({\n type: 'attr',\n value: t.jsxAttribute(\n t.jsxIdentifier('data-is'),\n t.stringLiteral(\n ` ${preName}${node.name.name} ${filePath.replace('./', '')}:${lineNumbers} `\n )\n ),\n })\n }\n\n if (shouldFlatten) {\n // DO FLATTEN\n if (shouldPrintDebug) {\n console.log(' [\u2705] flattening', originalNodeName, flatNode)\n }\n isFlattened = true\n node.name.name = flatNode\n onDidFlatten?.()\n if (closingElement) {\n closingElement.name.name = flatNode\n }\n }\n\n if (shouldPrintDebug) {\n // prettier-ignore\n console.log(' [\u274A] inline props ', inlinePropCount, shouldDeopt ? ' deopted' : '', hasSpread ? ' spread' : '', '!flatten', staticConfig.neverFlatten)\n console.log(' - attrs (end): ', attrs.map(attrStr).join(', '))\n }\n\n onExtractTag({\n attrs,\n node,\n lineNumbers,\n filePath,\n attemptEval,\n jsxPath: traversePath,\n originalNodeName,\n isFlattened,\n programPath,\n })\n },\n })\n\n /**\n * Step 3: Remove dead code from removed media query / theme hooks\n */\n if (modifiedComponents.size) {\n const all = Array.from(modifiedComponents)\n if (shouldPrintDebug) {\n console.log(' [\uD83E\uDE9D] hook check', all.length)\n }\n for (const comp of all) {\n removeUnusedHooks(comp, shouldPrintDebug)\n }\n }\n },\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import traverse, { NodePath, Visitor } from '@babel/traverse'\nimport * as t from '@babel/types'\nimport type { StaticConfigParsed, TamaguiInternalConfig } from '@tamagui/core'\nimport * as CoreNode from '@tamagui/core-node'\nimport { stylePropsTransform } from '@tamagui/helpers'\nimport { difference, pick } from 'lodash'\n\nimport { ExtractedAttr, ExtractedAttrAttr, ExtractorParseProps, Ternary } from '../types'\nimport { createEvaluator, createSafeEvaluator } from './createEvaluator'\nimport { evaluateAstNode } from './evaluateAstNode'\nimport { attrStr, findComponentName, isInsideTamagui, isPresent, objToStr } from './extractHelpers'\nimport { findTopmostFunction } from './findTopmostFunction'\nimport { getStaticBindingsForScope } from './getStaticBindingsForScope'\nimport { literalToAst } from './literalToAst'\nimport { loadTamagui } from './loadTamagui'\nimport { logLines } from './logLines'\nimport { normalizeTernaries } from './normalizeTernaries'\nimport { removeUnusedHooks } from './removeUnusedHooks'\n\nconst { mediaQueryConfig, postProcessStyles, pseudos } = CoreNode\n\nexport const FAILED_EVAL = Symbol('failed_style_eval')\nconst UNTOUCHED_PROPS = {\n key: true,\n style: true,\n className: true,\n}\n\nconst isAttr = (x: ExtractedAttr): x is ExtractedAttrAttr => x.type === 'attr'\n\nconst validHooks = {\n useMedia: true,\n useTheme: true,\n}\n\nexport type Extractor = ReturnType<typeof createExtractor>\n\nconst createTernary = (x: Ternary) => x\n\nexport function createExtractor() {\n const shouldAddDebugProp =\n // really basic disable this for next.js because it messes with ssr\n !process.env.npm_package_dependencies_next &&\n process.env.TAMAGUI_TARGET !== 'native' &&\n process.env.IDENTIFY_TAGS !== 'false' &&\n (process.env.NODE_ENV === 'development' || process.env.DEBUG || process.env.IDENTIFY_TAGS)\n\n // ts imports\n require('esbuild-register/dist/node').register({\n target: 'es2019',\n format: 'cjs',\n })\n\n let loadedTamaguiConfig: TamaguiInternalConfig\n let hasLogged = false\n\n return {\n getTamagui() {\n return loadedTamaguiConfig\n },\n parse: (\n fileOrPath: NodePath<t.Program> | t.File,\n {\n config = 'tamagui.config.ts',\n importsWhitelist = ['constants.js'],\n evaluateVars = true,\n shouldPrintDebug = false,\n sourcePath = '',\n onExtractTag,\n getFlattenedNode,\n disableExtraction,\n disableExtractInlineMedia,\n disableDebugAttr,\n ...props\n }: ExtractorParseProps\n ) => {\n if (sourcePath === '') {\n throw new Error(`Must provide a source file name`)\n }\n if (!Array.isArray(props.components)) {\n throw new Error(`Must provide components array with list of Tamagui component modules`)\n }\n\n // we require it after parse because we need to set some global/env stuff before importing\n // otherwise we'd import `rnw` and cause it to evaluate react-native-web which causes errors\n const { components, tamaguiConfig } = loadTamagui({\n config,\n components: props.components || ['tamagui'],\n })\n\n loadedTamaguiConfig = tamaguiConfig\n\n const defaultTheme = tamaguiConfig.themes[Object.keys(tamaguiConfig.themes)[0]]\n const body = fileOrPath.type === 'Program' ? fileOrPath.get('body') : fileOrPath.program.body\n\n /**\n * Step 1: Determine if importing any statically extractable components\n */\n const isInternalImport = (importStr: string) => {\n return isInsideTamagui(sourcePath) && importStr[0] === '.'\n }\n\n const validComponents: { [key: string]: any } = Object.keys(components)\n // check if uppercase to avoid hitting media query proxy before init\n .filter((key) => key[0].toUpperCase() === key[0] && !!components[key]?.staticConfig)\n .reduce((obj, name) => {\n obj[name] = components[name]\n return obj\n }, {})\n\n let doesUseValidImport = false\n\n for (const bodyPath of body) {\n if (bodyPath.type !== 'ImportDeclaration') continue\n const node = ('node' in bodyPath ? bodyPath.node : bodyPath) as any\n const from = node.source.value\n if (props.components.includes(from) || isInternalImport(from)) {\n if (\n node.specifiers.some((specifier) => {\n const name = specifier.local.name\n return validComponents[name] || validHooks[name]\n })\n ) {\n doesUseValidImport = true\n break\n }\n }\n }\n\n if (shouldPrintDebug) {\n console.log(sourcePath, { doesUseValidImport })\n }\n\n if (!doesUseValidImport) {\n return null\n }\n\n let couldntParse = false\n const modifiedComponents = new Set<NodePath<any>>()\n\n // only keeping a cache around per-file, reset it if it changes\n const bindingCache: Record<string, string | null> = {}\n\n const callTraverse = (a: Visitor<{}>) => {\n return fileOrPath.type === 'File' ? traverse(fileOrPath, a) : fileOrPath.traverse(a)\n }\n\n /**\n * Step 2: Statically extract from JSX < /> nodes\n */\n let programPath: NodePath<t.Program>\n\n const res = {\n flattened: 0,\n optimized: 0,\n modified: 0,\n }\n\n callTraverse({\n Program: {\n enter(path) {\n programPath = path\n },\n },\n JSXElement(traversePath) {\n const node = traversePath.node.openingElement\n const ogAttributes = node.attributes\n const componentName = findComponentName(traversePath.scope)\n const closingElement = traversePath.node.closingElement\n\n // skip non-identifier opening elements (member expressions, etc.)\n if (t.isJSXMemberExpression(closingElement?.name) || !t.isJSXIdentifier(node.name)) {\n return\n }\n\n // validate its a proper import from tamagui (or internally inside tamagui)\n const binding = traversePath.scope.getBinding(node.name.name)\n\n if (binding) {\n if (!t.isImportDeclaration(binding.path.parent)) {\n return\n }\n const source = binding.path.parent.source\n if (!props.components.includes(source.value) && !isInternalImport(source.value)) {\n return\n }\n if (!validComponents[binding.identifier.name]) {\n return\n }\n }\n\n const component = validComponents[node.name.name] as { staticConfig?: StaticConfigParsed }\n if (!component || !component.staticConfig) {\n return\n }\n\n const originalNodeName = node.name.name\n\n if (shouldPrintDebug) {\n console.log(`\\n<${originalNodeName} />`)\n }\n\n const filePath = sourcePath.replace(process.cwd(), '.')\n const lineNumbers = node.loc\n ? node.loc.start.line +\n (node.loc.start.line !== node.loc.end.line ? `-${node.loc.end.line}` : '')\n : ''\n\n // add data-is\n if (shouldAddDebugProp && !disableDebugAttr) {\n const preName = componentName ? `${componentName}:` : ''\n res.modified++\n node.attributes.unshift(\n t.jsxAttribute(\n t.jsxIdentifier('data-is'),\n t.stringLiteral(\n ` ${preName}${node.name.name} ${filePath.replace('./', '')}:${lineNumbers} `\n )\n )\n )\n }\n\n if (disableExtraction) {\n if (!hasLogged) {\n console.log('\uD83E\uDD5A Tamagui disableExtraction set: no CSS or optimizations will be run')\n hasLogged = true\n }\n return\n }\n\n const { staticConfig } = component\n const isTextView = staticConfig.isText || false\n const validStyles = staticConfig?.validStyles ?? {}\n\n // find tag=\"a\" tag=\"main\" etc dom indicators\n let tagName = staticConfig.defaultProps?.tag ?? (isTextView ? 'span' : 'div')\n traversePath\n .get('openingElement')\n .get('attributes')\n .forEach((path) => {\n const attr = path.node\n if (t.isJSXSpreadAttribute(attr)) return\n if (attr.name.name !== 'tag') return\n const val = attr.value\n if (!t.isStringLiteral(val)) return\n tagName = val.value\n })\n\n const flatNode = getFlattenedNode({ isTextView, tag: tagName })\n\n const deoptProps = new Set([\n ...(props.deoptProps ?? []),\n ...(staticConfig.deoptProps ?? []),\n ])\n const excludeProps = new Set(props.excludeProps ?? [])\n const isExcludedProp = (name: string) => {\n const res = excludeProps.has(name)\n if (res && shouldPrintDebug) console.log(` excluding ${name}`)\n return res\n }\n\n const isDeoptedProp = (name: string) => {\n const res = deoptProps.has(name)\n if (res && shouldPrintDebug) console.log(` deopting ${name}`)\n return res\n }\n\n // Generate scope object at this level\n const staticNamespace = getStaticBindingsForScope(\n traversePath.scope,\n importsWhitelist,\n sourcePath,\n bindingCache,\n shouldPrintDebug\n )\n\n const attemptEval = !evaluateVars\n ? evaluateAstNode\n : createEvaluator({\n tamaguiConfig,\n staticNamespace,\n sourcePath,\n traversePath,\n shouldPrintDebug,\n })\n const attemptEvalSafe = createSafeEvaluator(attemptEval)\n\n if (shouldPrintDebug) {\n console.log(' staticNamespace', Object.keys(staticNamespace).join(', '))\n }\n\n //\n // SPREADS SETUP\n //\n\n // TODO restore\n const hasDeopt = (obj: Object) => {\n return Object.keys(obj).some(isDeoptedProp)\n }\n\n // flatten any easily evaluatable spreads\n const flattenedAttrs: (t.JSXAttribute | t.JSXSpreadAttribute)[] = []\n traversePath\n .get('openingElement')\n .get('attributes')\n .forEach((path) => {\n const attr = path.node\n if (!t.isJSXSpreadAttribute(attr)) {\n flattenedAttrs.push(attr)\n return\n }\n let arg: any\n try {\n arg = attemptEval(attr.argument)\n } catch (e: any) {\n if (shouldPrintDebug) {\n console.log(' couldnt parse spread', e.message)\n }\n flattenedAttrs.push(attr)\n return\n }\n if (typeof arg !== 'undefined') {\n try {\n if (typeof arg !== 'object' || arg == null) {\n if (shouldPrintDebug) {\n console.log(' non object or null arg', arg)\n }\n flattenedAttrs.push(attr)\n } else {\n for (const k in arg) {\n const value = arg[k]\n // this is a null prop:\n if (!value && typeof value === 'object') {\n console.log('shouldnt we handle this?', k, value, arg)\n continue\n }\n flattenedAttrs.push(\n t.jsxAttribute(\n t.jsxIdentifier(k),\n t.jsxExpressionContainer(literalToAst(value))\n )\n )\n }\n }\n } catch (err) {\n console.warn('cant parse spread, caught err', err)\n couldntParse = true\n }\n }\n })\n\n if (couldntParse) {\n return\n }\n\n // set flattened\n node.attributes = flattenedAttrs\n\n // add in default props\n if (staticConfig.defaultProps) {\n for (const key in staticConfig.defaultProps) {\n const serialize = require('babel-literal-to-ast')\n const val = staticConfig.defaultProps[key]\n node.attributes.unshift(\n t.jsxAttribute(\n t.jsxIdentifier(key),\n typeof val === 'string'\n ? t.stringLiteral(val)\n : t.jsxExpressionContainer(serialize(val))\n )\n )\n }\n }\n\n let attrs: ExtractedAttr[] = []\n let shouldDeopt = false\n let inlinePropCount = 0\n let isFlattened = false\n\n // RUN first pass\n\n // normalize all conditionals so we can evaluate away easier later\n // at the same time lets normalize shorthand media queries into spreads:\n // that way we can parse them with the same logic later on\n //\n // {...media.sm && { color: x ? 'red' : 'blue' }}\n // => {...media.sm && x && { color: 'red' }}\n // => {...media.sm && !x && { color: 'blue' }}\n //\n // $sm={{ color: 'red' }}\n // => {...media.sm && { color: 'red' }}\n //\n // $sm={{ color: x ? 'red' : 'blue' }}\n // => {...media.sm && x && { color: 'red' }}\n // => {...media.sm && !x && { color: 'blue' }}\n\n attrs = traversePath\n .get('openingElement')\n .get('attributes')\n .flatMap((path) => {\n try {\n const res = evaluateAttribute(path)\n if (!res) {\n path.remove()\n }\n return res\n } catch (err: any) {\n console.log('Error extracting attribute', err.message, err.stack)\n console.log('node', path.node)\n return {\n type: 'attr',\n value: path.node,\n } as const\n }\n })\n .flat(4)\n .filter(isPresent)\n\n function isStaticAttributeName(name: string) {\n return !!(\n !!validStyles[name] ||\n staticConfig.validPropsExtra?.[name] ||\n !!pseudos[name] ||\n staticConfig.variants?.[name] ||\n tamaguiConfig.shorthands[name] ||\n (name[0] === '$' ? !!mediaQueryConfig[name.slice(1)] : false)\n )\n }\n\n function isExtractable(obj: t.Node): obj is t.ObjectExpression {\n return (\n t.isObjectExpression(obj) &&\n obj.properties.every((prop) => {\n if (!t.isObjectProperty(prop)) {\n console.log('not object prop', prop)\n return false\n }\n const propName = prop.key['name']\n if (!isStaticAttributeName(propName) && propName !== 'tag') {\n if (shouldPrintDebug) {\n console.log(' not a valid style prop!', propName)\n }\n return false\n }\n return true\n })\n )\n }\n\n // side <= { color: 'red', background: x ? 'red' : 'green' }\n // | => Ternary<test, { color: 'red' }, null>\n // | => Ternary<test && x, { background: 'red' }, null>\n // | => Ternary<test && !x, { background: 'green' }, null>\n function createTernariesFromObjectProperties(\n test: t.Expression,\n side: t.Expression | null,\n ternaryPartial: Partial<Ternary> = {}\n ): null | Ternary[] {\n if (!side) {\n return null\n }\n if (!isExtractable(side)) {\n throw new Error('not extractable')\n }\n return side.properties.flatMap((property) => {\n if (!t.isObjectProperty(property)) {\n throw new Error('expected object property')\n }\n // this could be a recurse here if we want to get fancy\n if (t.isConditionalExpression(property.value)) {\n // merge up into the parent conditional, split into two\n const [truthy, falsy] = [\n t.objectExpression([t.objectProperty(property.key, property.value.consequent)]),\n t.objectExpression([t.objectProperty(property.key, property.value.alternate)]),\n ].map((x) => attemptEval(x))\n return [\n createTernary({\n remove() {},\n ...ternaryPartial,\n test: t.logicalExpression('&&', test, property.value.test),\n consequent: truthy,\n alternate: null,\n }),\n createTernary({\n ...ternaryPartial,\n test: t.logicalExpression(\n '&&',\n test,\n t.unaryExpression('!', property.value.test)\n ),\n consequent: falsy,\n alternate: null,\n remove() {},\n }),\n ]\n }\n const obj = t.objectExpression([t.objectProperty(property.key, property.value)])\n const consequent = attemptEval(obj)\n return createTernary({\n remove() {},\n ...ternaryPartial,\n test,\n consequent,\n alternate: null,\n })\n })\n }\n\n // START function evaluateAttribute\n function evaluateAttribute(\n path: NodePath<t.JSXAttribute | t.JSXSpreadAttribute>\n ): ExtractedAttr | ExtractedAttr[] | null {\n const attribute = path.node\n const attr: ExtractedAttr = { type: 'attr', value: attribute }\n // ...spreads\n if (t.isJSXSpreadAttribute(attribute)) {\n const arg = attribute.argument\n const conditional = t.isConditionalExpression(arg)\n ? // <YStack {...isSmall ? { color: 'red } : { color: 'blue }}\n ([arg.test, arg.consequent, arg.alternate] as const)\n : t.isLogicalExpression(arg) && arg.operator === '&&'\n ? // <YStack {...isSmall && { color: 'red }}\n ([arg.left, arg.right, null] as const)\n : null\n\n if (conditional) {\n const [test, alt, cons] = conditional\n if (!test) throw new Error(`no test`)\n if ([alt, cons].some((side) => side && !isExtractable(side))) {\n if (shouldPrintDebug) {\n console.log('not extractable', alt, cons)\n }\n return attr\n }\n // split into individual ternaries per object property\n return [\n ...(createTernariesFromObjectProperties(test, alt) || []),\n ...((cons &&\n createTernariesFromObjectProperties(t.unaryExpression('!', test), cons)) ||\n []),\n ].map((ternary) => ({\n type: 'ternary',\n value: ternary,\n }))\n }\n }\n // END ...spreads\n\n // directly keep these\n // couldn't evaluate spread, undefined name, or name is not string\n if (\n t.isJSXSpreadAttribute(attribute) ||\n !attribute.name ||\n typeof attribute.name.name !== 'string'\n ) {\n inlinePropCount++\n return attr\n }\n\n const name = attribute.name.name\n\n if (isExcludedProp(name)) {\n return null\n }\n\n // can still optimize the object... see hoverStyle on native\n if (isDeoptedProp(name)) {\n if (shouldPrintDebug) {\n console.log(' ! inlining, deopt prop', name)\n }\n inlinePropCount++\n return attr\n }\n\n // pass className, key, and style props through untouched\n if (UNTOUCHED_PROPS[name]) {\n return attr\n }\n\n // shorthand media queries\n if (name[0] === '$' && t.isJSXExpressionContainer(attribute?.value)) {\n // allow disabling this extraction\n if (disableExtractInlineMedia) {\n return attr\n }\n\n const shortname = name.slice(1)\n if (mediaQueryConfig[shortname]) {\n const expression = attribute.value.expression\n if (!t.isJSXEmptyExpression(expression)) {\n const ternaries = createTernariesFromObjectProperties(\n t.stringLiteral(shortname),\n expression,\n {\n inlineMediaQuery: shortname,\n }\n )\n if (ternaries) {\n return ternaries.map((value) => ({\n type: 'ternary',\n value,\n }))\n }\n }\n }\n }\n\n const [value, valuePath] = (() => {\n if (t.isJSXExpressionContainer(attribute?.value)) {\n return [attribute.value.expression!, path.get('value')!] as const\n } else {\n return [attribute.value!, path.get('value')!] as const\n }\n })()\n\n const remove = () => {\n Array.isArray(valuePath) ? valuePath.map((p) => p.remove()) : valuePath.remove()\n }\n\n if (name === 'ref') {\n if (shouldPrintDebug) {\n console.log(' ! inlining, ref', name)\n }\n inlinePropCount++\n return attr\n }\n\n if (name === 'tag') {\n return {\n type: 'attr',\n value: path.node,\n }\n }\n\n // if value can be evaluated, extract it and filter it out\n const styleValue = attemptEvalSafe(value)\n\n // never flatten if a prop isn't a valid static attribute\n // only post prop-mapping\n if (!isStaticAttributeName(name)) {\n let keys = [name]\n if (staticConfig.propMapper) {\n // for now passing empty props {}, a bit odd, need to at least document\n // for now we don't expose custom components so just noting behavior\n const out = staticConfig.propMapper(\n name,\n styleValue,\n defaultTheme,\n staticConfig.defaultProps\n )\n if (out) {\n keys = Object.keys(out)\n }\n }\n if (keys.some((k) => !isStaticAttributeName(k) && k !== 'tag')) {\n if (shouldPrintDebug) {\n console.log(' ! inlining, not static attribute name', name)\n }\n inlinePropCount++\n return attr\n }\n }\n\n // FAILED = dynamic or ternary, keep going\n if (styleValue !== FAILED_EVAL) {\n return {\n type: 'style',\n value: { [name]: styleValue },\n name,\n attr: path.node,\n }\n }\n\n // ternaries!\n\n // binary ternary, we can eventually make this smarter but step 1\n // basically for the common use case of:\n // opacity={(conditional ? 0 : 1) * scale}\n if (t.isBinaryExpression(value)) {\n const { operator, left, right } = value\n // if one side is a ternary, and the other side is evaluatable, we can maybe extract\n const lVal = attemptEvalSafe(left)\n const rVal = attemptEvalSafe(right)\n if (shouldPrintDebug) {\n console.log(` evalBinaryExpression lVal ${String(lVal)}, rVal ${String(rVal)}`)\n }\n if (lVal !== FAILED_EVAL && t.isConditionalExpression(right)) {\n const ternary = addBinaryConditional(operator, left, right)\n if (ternary) return ternary\n }\n if (rVal !== FAILED_EVAL && t.isConditionalExpression(left)) {\n const ternary = addBinaryConditional(operator, right, left)\n if (ternary) return ternary\n }\n if (shouldPrintDebug) {\n console.log(` evalBinaryExpression cant extract`)\n }\n inlinePropCount++\n return attr\n }\n\n const staticConditional = getStaticConditional(value)\n if (staticConditional) {\n return { type: 'ternary', value: staticConditional }\n }\n\n const staticLogical = getStaticLogical(value)\n if (staticLogical) {\n return { type: 'ternary', value: staticLogical }\n }\n\n if (shouldPrintDebug) {\n console.log(' ! inline prop via no match', name, value.type)\n }\n // if we've made it this far, the prop stays inline\n inlinePropCount++\n\n //\n // RETURN ATTR\n //\n return attr\n\n // attr helpers:\n function addBinaryConditional(\n operator: any,\n staticExpr: any,\n cond: t.ConditionalExpression\n ): ExtractedAttr | null {\n if (getStaticConditional(cond)) {\n const alt = attemptEval(t.binaryExpression(operator, staticExpr, cond.alternate))\n const cons = attemptEval(t.binaryExpression(operator, staticExpr, cond.consequent))\n if (shouldPrintDebug) {\n console.log(' binaryConditional', cond.test, cons, alt)\n }\n return {\n type: 'ternary',\n value: {\n test: cond.test,\n remove,\n alternate: { [name]: alt },\n consequent: { [name]: cons },\n },\n }\n }\n return null\n }\n\n function getStaticConditional(value: t.Node): Ternary | null {\n if (t.isConditionalExpression(value)) {\n try {\n if (shouldPrintDebug) {\n console.log('attempt', value.alternate, value.consequent)\n }\n const aVal = attemptEval(value.alternate)\n const cVal = attemptEval(value.consequent)\n if (shouldPrintDebug) {\n const type = value.test.type\n console.log(' static ternary', type, cVal, aVal)\n }\n return {\n test: value.test,\n remove,\n consequent: { [name]: cVal },\n alternate: { [name]: aVal },\n }\n } catch (err: any) {\n if (shouldPrintDebug) {\n console.log(' cant eval ternary', err.message)\n }\n }\n }\n return null\n }\n\n function getStaticLogical(value: t.Node): Ternary | null {\n if (t.isLogicalExpression(value)) {\n if (value.operator === '&&') {\n try {\n const val = attemptEval(value.right)\n if (shouldPrintDebug) {\n console.log(' staticLogical', value.left, name, val)\n }\n return {\n test: value.left,\n remove,\n consequent: { [name]: val },\n alternate: null,\n }\n } catch (err) {\n if (shouldPrintDebug) {\n console.log(' cant static eval logical', err)\n }\n }\n }\n }\n return null\n }\n } // END function evaluateAttribute\n\n // see if we can filter them\n if (shouldPrintDebug) {\n console.log(' - attrs (before):\\n', logLines(attrs.map(attrStr).join(', ')))\n }\n\n // now update to new values\n node.attributes = attrs.filter(isAttr).map((x) => x.value)\n\n if (couldntParse) {\n if (shouldPrintDebug) {\n console.log(` cancel:`, { couldntParse, shouldDeopt })\n }\n node.attributes = ogAttributes\n return\n }\n\n // before deopt, can still optimize\n const parentFn = findTopmostFunction(traversePath)\n if (parentFn) {\n modifiedComponents.add(parentFn)\n }\n\n // combine ternaries\n let ternaries: Ternary[] = []\n attrs = attrs\n .reduce<(ExtractedAttr | ExtractedAttr[])[]>((out, cur) => {\n const next = attrs[attrs.indexOf(cur) + 1]\n if (cur.type === 'ternary') {\n ternaries.push(cur.value)\n }\n if ((!next || next.type !== 'ternary') && ternaries.length) {\n // finish, process\n const normalized = normalizeTernaries(ternaries).map(\n ({ alternate, consequent, ...rest }) => {\n return {\n type: 'ternary' as const,\n value: {\n ...rest,\n alternate: alternate || null,\n consequent: consequent || null,\n },\n }\n }\n )\n try {\n return [...out, ...normalized]\n } finally {\n if (shouldPrintDebug) {\n console.log(\n ` normalizeTernaries (${ternaries.length} => ${normalized.length})`\n )\n }\n ternaries = []\n }\n }\n if (cur.type === 'ternary') {\n return out\n }\n out.push(cur)\n return out\n }, [])\n .flat()\n\n // evaluates all static attributes into a simple object\n const completeStaticProps = {\n ...Object.keys(attrs).reduce((acc, index) => {\n const cur = attrs[index] as ExtractedAttr\n if (cur.type === 'style') {\n Object.assign(acc, cur.value)\n }\n if (cur.type === 'attr') {\n if (t.isJSXSpreadAttribute(cur.value)) {\n return acc\n }\n if (!t.isJSXIdentifier(cur.value.name)) {\n return acc\n }\n const key = cur.value.name.name\n // undefined = boolean true\n const value = attemptEvalSafe(cur.value.value || t.booleanLiteral(true))\n if (value === FAILED_EVAL) {\n return acc\n }\n acc[key] = value\n }\n return acc\n }, {}),\n }\n\n // flatten logic!\n // fairly simple check to see if all children are text\n const hasSpread = node.attributes.some((x) => t.isJSXSpreadAttribute(x))\n const hasOnlyStringChildren =\n !hasSpread &&\n (node.selfClosing ||\n (traversePath.node.children &&\n traversePath.node.children.every((x) => x.type === 'JSXText')))\n const shouldFlatten =\n !shouldDeopt &&\n inlinePropCount === 0 &&\n !hasSpread &&\n staticConfig.neverFlatten !== true &&\n (staticConfig.neverFlatten === 'jsx' ? hasOnlyStringChildren : true)\n\n // insert overrides - this inserts null props for things that are set in classNames\n // only when not flattening, so the downstream component can skip applying those styles\n if (!shouldFlatten) {\n attrs = attrs.reduce<ExtractedAttr[]>((acc, cur) => {\n if (cur.type === 'style') {\n // TODO need to loop over initial props not just style props\n for (const key in cur.value) {\n const shouldEnsureOverridden = !!staticConfig.ensureOverriddenProp?.[key]\n const isSetInAttrsAlready = attrs.some(\n (x) =>\n x.type === 'attr' &&\n x.value.type === 'JSXAttribute' &&\n x.value.name.name === key\n )\n\n if (!isSetInAttrsAlready) {\n const isVariant = !!staticConfig.variants?.[cur.name || '']\n if (isVariant || shouldEnsureOverridden) {\n acc.push({\n type: 'attr',\n value:\n cur.attr ||\n t.jsxAttribute(\n t.jsxIdentifier(key),\n t.jsxExpressionContainer(t.nullLiteral())\n ),\n })\n }\n }\n }\n }\n acc.push(cur)\n return acc\n }, [])\n }\n\n if (shouldPrintDebug) {\n console.log(' - attrs (flattened): \\n', logLines(attrs.map(attrStr).join(', ')))\n }\n\n // evaluate away purely style props\n attrs = attrs.reduce<ExtractedAttr[]>((acc, cur) => {\n if (\n cur.type !== 'attr' ||\n !t.isJSXAttribute(cur.value) ||\n typeof cur.value.name.name !== 'string'\n ) {\n if (cur.type === 'style') {\n const key = Object.keys(cur.value)[0]\n if (!validStyles[key] && !pseudos[key]) {\n if (shouldPrintDebug) {\n console.log(' \u274C excluding', key)\n }\n // we've already expanded shorthands, now we can remove them\n return acc\n }\n }\n }\n acc.push(cur)\n return acc\n }, [])\n\n if (shouldPrintDebug) {\n console.log(' - attrs (evaluated styles): \\n', logLines(attrs.map(attrStr).join(', ')))\n }\n\n // combine styles, leave undefined values\n let prev: ExtractedAttr | null = null\n attrs = attrs.reduce<ExtractedAttr[]>((acc, cur) => {\n if (cur.type === 'style') {\n if (prev?.type === 'style') {\n Object.assign(prev.value, cur.value)\n return acc\n }\n }\n acc.push(cur)\n prev = cur\n return acc\n }, [])\n\n if (shouldPrintDebug) {\n console.log(' - attrs (combined \uD83D\uDD00): \\n', logLines(attrs.map(attrStr).join(', ')))\n }\n\n // post process\n const getStyles = (props: Object | null) => {\n if (!props) return\n if (!!excludeProps.size) {\n for (const key in props) {\n if (isExcludedProp(key)) delete props[key]\n }\n }\n\n const out = postProcessStyles(props, staticConfig, defaultTheme)\n const next = out?.style ?? props\n if (shouldPrintDebug) {\n console.log(' getStyles props >>\\n', logLines(objToStr(props)))\n console.log(' getStyles next >>\\n', logLines(objToStr(next)))\n console.log(' getStyles style >>\\n', logLines(objToStr(out.style)))\n console.log(' getStyles viewp >>\\n', logLines(objToStr(out.viewProps)))\n }\n if (staticConfig.validStyles) {\n for (const key in next) {\n if (!staticConfig.validStyles[key] && !pseudos[key]) {\n delete next[key]\n }\n }\n }\n return next\n }\n\n // used to ensure we pass the entire prop bundle to getStyles\n const completeStylesProcessed = getStyles({\n ...staticConfig.defaultProps,\n ...completeStaticProps,\n })\n\n // any extra styles added in postprocess should be added to first group as they wont be overriden\n const stylesToAddToInitialGroup = difference(\n Object.keys(completeStylesProcessed),\n Object.keys(completeStaticProps)\n )\n\n if (stylesToAddToInitialGroup.length) {\n const toAdd = pick(completeStylesProcessed, ...stylesToAddToInitialGroup)\n const firstGroup = attrs.find((x) => x.type === 'style')\n if (shouldPrintDebug) {\n console.log(' stylesToAddToInitialGroup', stylesToAddToInitialGroup.join(', '))\n console.log(' toAdd', objToStr(toAdd))\n }\n if (!firstGroup) {\n attrs.unshift({ type: 'style', value: toAdd })\n } else {\n Object.assign(firstGroup.value, toAdd)\n }\n }\n\n if (shouldPrintDebug) {\n // prettier-ignore\n console.log(' completeStaticProps\\n', logLines(objToStr(completeStaticProps)))\n // prettier-ignore\n console.log(' completeStylesProcessed\\n', logLines(objToStr(completeStylesProcessed)))\n }\n\n for (const attr of attrs) {\n try {\n switch (attr.type) {\n case 'ternary':\n const a = getStyles(attr.value.alternate)\n const c = getStyles(attr.value.consequent)\n attr.value.alternate = a\n attr.value.consequent = c\n if (shouldPrintDebug) {\n console.log(' => tern ', attrStr(attr))\n }\n break\n case 'style':\n const next = {}\n for (const key in attr.value) {\n if (key in stylePropsTransform) {\n // TODO this logic needs to be a bit more right, because could have spread in between transforms...\n next['transform'] = completeStylesProcessed['transform']\n } else {\n next[key] = completeStylesProcessed[key] ?? attr.value[key]\n }\n }\n attr.value = next\n break\n }\n } catch (err) {\n // any error de-opt\n if (shouldPrintDebug) {\n console.log(' postprocessing error, deopt', err)\n node.attributes = ogAttributes\n return node\n }\n }\n }\n\n if (shouldPrintDebug) {\n console.log(' - attrs (after):\\n', logLines(attrs.map(attrStr).join(', ')))\n }\n\n if (shouldFlatten) {\n // DO FLATTEN\n if (shouldPrintDebug) {\n console.log(' [\u2705] flattening', originalNodeName, flatNode)\n }\n isFlattened = true\n node.name.name = flatNode\n res.flattened++\n if (closingElement) {\n closingElement.name.name = flatNode\n }\n }\n\n if (shouldPrintDebug) {\n // prettier-ignore\n console.log(' [\u274A] inline props ', inlinePropCount, shouldDeopt ? ' deopted' : '', hasSpread ? ' spread' : '', '!flatten', staticConfig.neverFlatten)\n console.log(' - attrs (end):\\n', logLines(attrs.map(attrStr).join(', ')))\n }\n\n res.optimized++\n\n onExtractTag({\n attrs,\n node,\n lineNumbers,\n filePath,\n attemptEval,\n jsxPath: traversePath,\n originalNodeName,\n isFlattened,\n programPath,\n })\n },\n })\n\n /**\n * Step 3: Remove dead code from removed media query / theme hooks\n */\n if (modifiedComponents.size) {\n const all = Array.from(modifiedComponents)\n if (shouldPrintDebug) {\n console.log(' [\uD83E\uDE9D] hook check', all.length)\n }\n for (const comp of all) {\n removeUnusedHooks(comp, shouldPrintDebug)\n }\n }\n\n return res\n },\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }