@tamagui/static 1.0.0-alpha.9 → 1.0.0-beta.172

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