@tamagui/static 2.0.0-rc.9 → 2.0.0

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 (186) hide show
  1. package/dist/check-dep-versions.cjs +201 -96
  2. package/dist/checkDeps.cjs +250 -46
  3. package/dist/constants.cjs +32 -30
  4. package/dist/exports.cjs +20 -13
  5. package/dist/extractor/accessSafe.cjs +25 -23
  6. package/dist/extractor/babelParse.cjs +30 -28
  7. package/dist/extractor/buildClassName.cjs +59 -35
  8. package/dist/extractor/bundle.cjs +187 -101
  9. package/dist/extractor/bundleConfig.cjs +568 -168
  10. package/dist/extractor/concatClassName.cjs +73 -32
  11. package/dist/extractor/createEvaluator.cjs +54 -41
  12. package/dist/extractor/createExtractor.cjs +1405 -574
  13. package/dist/extractor/createLogger.cjs +30 -25
  14. package/dist/extractor/detectModuleFormat.cjs +55 -0
  15. package/dist/extractor/ensureImportingConcat.cjs +31 -25
  16. package/dist/extractor/errors.cjs +12 -10
  17. package/dist/extractor/esbuildAliasPlugin.cjs +28 -16
  18. package/dist/extractor/esbuildTsconfigPaths.cjs +60 -36
  19. package/dist/extractor/evaluateAstNode.cjs +104 -59
  20. package/dist/extractor/extractHelpers.cjs +130 -67
  21. package/dist/extractor/extractMediaStyle.cjs +110 -69
  22. package/dist/extractor/extractToClassNames.cjs +337 -229
  23. package/dist/extractor/extractToNative.cjs +248 -152
  24. package/dist/extractor/findTopmostFunction.cjs +22 -13
  25. package/dist/extractor/generatedUid.cjs +39 -28
  26. package/dist/extractor/getPrefixLogs.cjs +12 -10
  27. package/dist/extractor/getPropValueFromAttributes.cjs +52 -34
  28. package/dist/extractor/getSourceModule.cjs +73 -37
  29. package/dist/extractor/getStaticBindingsForScope.cjs +131 -68
  30. package/dist/extractor/getTamaguiConfigPathFromOptionsConfig.cjs +20 -14
  31. package/dist/extractor/hasTopLevelAwait.cjs +62 -0
  32. package/dist/extractor/hoistClassNames.cjs +46 -32
  33. package/dist/extractor/literalToAst.cjs +67 -42
  34. package/dist/extractor/loadFile.cjs +9 -3
  35. package/dist/extractor/loadTamagui.cjs +151 -105
  36. package/dist/extractor/logLines.cjs +27 -19
  37. package/dist/extractor/normalizeTernaries.cjs +66 -44
  38. package/dist/extractor/propsToFontFamilyCache.cjs +15 -11
  39. package/dist/extractor/regenerateConfig.cjs +109 -81
  40. package/dist/extractor/removeUnusedHooks.cjs +73 -41
  41. package/dist/extractor/timer.cjs +23 -14
  42. package/dist/extractor/validHTMLAttributes.cjs +61 -59
  43. package/dist/extractor/watchTamaguiConfig.cjs +35 -23
  44. package/dist/getPragmaOptions.cjs +34 -19
  45. package/dist/helpers/memoize.cjs +24 -16
  46. package/dist/helpers/requireTamaguiCore.cjs +22 -15
  47. package/dist/index.cjs +26 -24
  48. package/dist/registerRequire.cjs +168 -65
  49. package/dist/server.cjs +35 -28
  50. package/dist/types.cjs +7 -5
  51. package/dist/worker.cjs +62 -40
  52. package/package.json +27 -24
  53. package/src/checkDeps.ts +305 -68
  54. package/src/exports.ts +2 -0
  55. package/src/extractor/babelParse.ts +1 -0
  56. package/src/extractor/bundle.ts +172 -40
  57. package/src/extractor/bundleConfig.ts +459 -65
  58. package/src/extractor/concatClassName.ts +37 -20
  59. package/src/extractor/createExtractor.ts +300 -30
  60. package/src/extractor/detectModuleFormat.ts +42 -0
  61. package/src/extractor/esbuildTsconfigPaths.ts +6 -1
  62. package/src/extractor/extractToClassNames.ts +15 -9
  63. package/src/extractor/extractToNative.ts +65 -32
  64. package/src/extractor/hasTopLevelAwait.ts +28 -0
  65. package/src/extractor/loadTamagui.ts +5 -4
  66. package/src/registerRequire.ts +102 -9
  67. package/types/checkDeps.d.ts.map +1 -1
  68. package/types/exports.d.ts +2 -0
  69. package/types/exports.d.ts.map +1 -1
  70. package/types/extractor/babelParse.d.ts.map +1 -1
  71. package/types/extractor/bundle.d.ts +83 -1
  72. package/types/extractor/bundle.d.ts.map +1 -1
  73. package/types/extractor/bundleConfig.d.ts +15 -2
  74. package/types/extractor/bundleConfig.d.ts.map +1 -1
  75. package/types/extractor/createExtractor.d.ts.map +1 -1
  76. package/types/extractor/detectModuleFormat.d.ts +5 -0
  77. package/types/extractor/detectModuleFormat.d.ts.map +1 -0
  78. package/types/extractor/esbuildTsconfigPaths.d.ts +8 -0
  79. package/types/extractor/esbuildTsconfigPaths.d.ts.map +1 -1
  80. package/types/extractor/extractToClassNames.d.ts.map +1 -1
  81. package/types/extractor/extractToNative.d.ts.map +1 -1
  82. package/types/extractor/hasTopLevelAwait.d.ts +2 -0
  83. package/types/extractor/hasTopLevelAwait.d.ts.map +1 -0
  84. package/types/extractor/loadTamagui.d.ts +1 -1
  85. package/types/extractor/loadTamagui.d.ts.map +1 -1
  86. package/types/registerRequire.d.ts.map +1 -1
  87. package/dist/check-dep-versions.js +0 -389
  88. package/dist/check-dep-versions.js.map +0 -6
  89. package/dist/checkDeps.js +0 -60
  90. package/dist/checkDeps.js.map +0 -6
  91. package/dist/constants.js +0 -34
  92. package/dist/constants.js.map +0 -6
  93. package/dist/exports.js +0 -34
  94. package/dist/exports.js.map +0 -6
  95. package/dist/extractor/accessSafe.js +0 -47
  96. package/dist/extractor/accessSafe.js.map +0 -6
  97. package/dist/extractor/babelParse.js +0 -59
  98. package/dist/extractor/babelParse.js.map +0 -6
  99. package/dist/extractor/buildClassName.js +0 -72
  100. package/dist/extractor/buildClassName.js.map +0 -6
  101. package/dist/extractor/bundle.js +0 -135
  102. package/dist/extractor/bundle.js.map +0 -6
  103. package/dist/extractor/bundleConfig.js +0 -352
  104. package/dist/extractor/bundleConfig.js.map +0 -6
  105. package/dist/extractor/concatClassName.js +0 -69
  106. package/dist/extractor/concatClassName.js.map +0 -6
  107. package/dist/extractor/createEvaluator.js +0 -66
  108. package/dist/extractor/createEvaluator.js.map +0 -6
  109. package/dist/extractor/createExtractor.js +0 -1212
  110. package/dist/extractor/createExtractor.js.map +0 -6
  111. package/dist/extractor/createLogger.js +0 -32
  112. package/dist/extractor/createLogger.js.map +0 -6
  113. package/dist/extractor/ensureImportingConcat.js +0 -50
  114. package/dist/extractor/ensureImportingConcat.js.map +0 -6
  115. package/dist/extractor/errors.js +0 -22
  116. package/dist/extractor/errors.js.map +0 -6
  117. package/dist/extractor/esbuildAliasPlugin.js +0 -36
  118. package/dist/extractor/esbuildAliasPlugin.js.map +0 -6
  119. package/dist/extractor/esbuildTsconfigPaths.js +0 -79
  120. package/dist/extractor/esbuildTsconfigPaths.js.map +0 -6
  121. package/dist/extractor/evaluateAstNode.js +0 -99
  122. package/dist/extractor/evaluateAstNode.js.map +0 -6
  123. package/dist/extractor/extractHelpers.js +0 -108
  124. package/dist/extractor/extractHelpers.js.map +0 -6
  125. package/dist/extractor/extractMediaStyle.js +0 -123
  126. package/dist/extractor/extractMediaStyle.js.map +0 -6
  127. package/dist/extractor/extractToClassNames.js +0 -351
  128. package/dist/extractor/extractToClassNames.js.map +0 -6
  129. package/dist/extractor/extractToNative.js +0 -286
  130. package/dist/extractor/extractToNative.js.map +0 -6
  131. package/dist/extractor/findTopmostFunction.js +0 -32
  132. package/dist/extractor/findTopmostFunction.js.map +0 -6
  133. package/dist/extractor/generatedUid.js +0 -42
  134. package/dist/extractor/generatedUid.js.map +0 -6
  135. package/dist/extractor/getPrefixLogs.js +0 -24
  136. package/dist/extractor/getPrefixLogs.js.map +0 -6
  137. package/dist/extractor/getPropValueFromAttributes.js +0 -65
  138. package/dist/extractor/getPropValueFromAttributes.js.map +0 -6
  139. package/dist/extractor/getSourceModule.js +0 -62
  140. package/dist/extractor/getSourceModule.js.map +0 -6
  141. package/dist/extractor/getStaticBindingsForScope.js +0 -145
  142. package/dist/extractor/getStaticBindingsForScope.js.map +0 -6
  143. package/dist/extractor/getTamaguiConfigPathFromOptionsConfig.js +0 -32
  144. package/dist/extractor/getTamaguiConfigPathFromOptionsConfig.js.map +0 -6
  145. package/dist/extractor/hoistClassNames.js +0 -63
  146. package/dist/extractor/hoistClassNames.js.map +0 -6
  147. package/dist/extractor/literalToAst.js +0 -90
  148. package/dist/extractor/literalToAst.js.map +0 -6
  149. package/dist/extractor/loadFile.js +0 -14
  150. package/dist/extractor/loadFile.js.map +0 -6
  151. package/dist/extractor/loadTamagui.js +0 -306
  152. package/dist/extractor/loadTamagui.js.map +0 -6
  153. package/dist/extractor/logLines.js +0 -30
  154. package/dist/extractor/logLines.js.map +0 -6
  155. package/dist/extractor/normalizeTernaries.js +0 -61
  156. package/dist/extractor/normalizeTernaries.js.map +0 -6
  157. package/dist/extractor/propsToFontFamilyCache.js +0 -33
  158. package/dist/extractor/propsToFontFamilyCache.js.map +0 -6
  159. package/dist/extractor/regenerateConfig.js +0 -123
  160. package/dist/extractor/regenerateConfig.js.map +0 -6
  161. package/dist/extractor/removeUnusedHooks.js +0 -72
  162. package/dist/extractor/removeUnusedHooks.js.map +0 -6
  163. package/dist/extractor/timer.js +0 -38
  164. package/dist/extractor/timer.js.map +0 -6
  165. package/dist/extractor/validHTMLAttributes.js +0 -72
  166. package/dist/extractor/validHTMLAttributes.js.map +0 -6
  167. package/dist/extractor/watchTamaguiConfig.js +0 -57
  168. package/dist/extractor/watchTamaguiConfig.js.map +0 -6
  169. package/dist/getPragmaOptions.js +0 -50
  170. package/dist/getPragmaOptions.js.map +0 -6
  171. package/dist/helpers/memoize.js +0 -33
  172. package/dist/helpers/memoize.js.map +0 -6
  173. package/dist/helpers/requireTamaguiCore.js +0 -30
  174. package/dist/helpers/requireTamaguiCore.js.map +0 -6
  175. package/dist/index.js +0 -30
  176. package/dist/index.js.map +0 -6
  177. package/dist/registerRequire.js +0 -100
  178. package/dist/registerRequire.js.map +0 -6
  179. package/dist/server.js +0 -58
  180. package/dist/server.js.map +0 -6
  181. package/dist/setup.js +0 -1
  182. package/dist/setup.js.map +0 -6
  183. package/dist/types.js +0 -14
  184. package/dist/types.js.map +0 -6
  185. package/dist/worker.js +0 -72
  186. package/dist/worker.js.map +0 -6
@@ -2,33 +2,35 @@ var __create = Object.create;
2
2
  var __defProp = Object.defineProperty;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf,
6
- __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
7
  var __export = (target, all) => {
8
- for (var name in all) __defProp(target, name, {
9
- get: all[name],
10
- enumerable: !0
11
- });
12
- },
13
- __copyProps = (to, from, except, desc) => {
14
- if (from && typeof from == "object" || typeof from == "function") for (let key of __getOwnPropNames(from)) !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, {
8
+ for (var name in all) __defProp(target, name, {
9
+ get: all[name],
10
+ enumerable: true
11
+ });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
15
16
  get: () => from[key],
16
17
  enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
17
18
  });
18
- return to;
19
- };
19
+ }
20
+ return to;
21
+ };
20
22
  var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
26
- value: mod,
27
- enumerable: !0
28
- }) : target, mod)),
29
- __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
30
- value: !0
31
- }), mod);
23
+ // If the importer is in node compatibility mode or this is not an ESM
24
+ // file that has been converted to a CommonJS file using a Babel-
25
+ // compatible transform (i.e. "__esModule" has not been set), then set
26
+ // "default" to the CommonJS "module.exports" for node compatibility.
27
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
28
+ value: mod,
29
+ enumerable: true
30
+ }) : target, mod));
31
+ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
32
+ value: true
33
+ }), mod);
32
34
  var extractToNative_exports = {};
33
35
  __export(extractToNative_exports, {
34
36
  extractToNative: () => extractToNative,
@@ -36,51 +38,53 @@ __export(extractToNative_exports, {
36
38
  getBabelPlugin: () => getBabelPlugin
37
39
  });
38
40
  module.exports = __toCommonJS(extractToNative_exports);
39
- var import_core = require("@babel/core"),
40
- import_generator = __toESM(require("@babel/generator")),
41
- import_helper_plugin_utils = require("@babel/helper-plugin-utils"),
42
- import_parser = require("@babel/parser"),
43
- import_template = __toESM(require("@babel/template")),
44
- t = __toESM(require("@babel/types")),
45
- import_node_path = require("node:path"),
46
- import_getPragmaOptions = require("../getPragmaOptions.cjs"),
47
- import_createExtractor = require("./createExtractor.cjs"),
48
- import_createLogger = require("./createLogger.cjs"),
49
- import_extractHelpers = require("./extractHelpers.cjs"),
50
- import_literalToAst = require("./literalToAst.cjs"),
51
- import_loadTamagui = require("./loadTamagui.cjs");
41
+ var import_core = require("@babel/core");
42
+ var import_generator = __toESM(require("@babel/generator"));
43
+ var import_helper_plugin_utils = require("@babel/helper-plugin-utils");
44
+ var import_parser = require("@babel/parser");
45
+ var import_template = __toESM(require("@babel/template"));
46
+ var t = __toESM(require("@babel/types"));
47
+ var import_node_path = require("node:path");
48
+ var import_getPragmaOptions = require("../getPragmaOptions.cjs");
49
+ var import_createExtractor = require("./createExtractor.cjs");
50
+ var import_createLogger = require("./createLogger.cjs");
51
+ var import_extractHelpers = require("./extractHelpers.cjs");
52
+ var import_literalToAst = require("./literalToAst.cjs");
53
+ var import_loadTamagui = require("./loadTamagui.cjs");
52
54
  const importNativeView = (0, import_template.default)(`
53
55
  const __ReactNativeView = require('react-native').View;
54
56
  const __ReactNativeText = require('react-native').Text;
55
- `),
56
- importStyleSheet = (0, import_template.default)(`
57
+ `);
58
+ const importStyleSheet = (0, import_template.default)(`
57
59
  const __ReactNativeStyleSheet = require('react-native').StyleSheet;
58
- `),
59
- importWithStyle = import_template.default.ast("import { _withStableStyle as __withStableStyle } from '@tamagui/core';"),
60
- importReactUseMemo = (0, import_template.default)(`
61
- const __ReactUseMemo = require('react').useMemo;
62
- `),
63
- extractor = (0, import_createExtractor.createExtractor)({
64
- platform: "native"
65
- });
60
+ `);
61
+ const importWithStyle = import_template.default.ast(`import { _withStableStyle } from '@tamagui/core';`);
62
+ const extractor = (0, import_createExtractor.createExtractor)({
63
+ platform: "native"
64
+ });
66
65
  let tamaguiBuildOptionsLoaded;
67
66
  function extractToNative(sourceFileName, sourceCode, options) {
68
67
  const ast = (0, import_parser.parse)(sourceCode, {
69
- sourceType: "module",
70
- plugins: ["jsx", "typescript"]
71
- }),
72
- babelPlugin = getBabelPlugin(),
73
- out = (0, import_core.transformFromAstSync)(ast, sourceCode, {
74
- plugins: [[babelPlugin, options]],
75
- configFile: !1,
76
- sourceFileName,
77
- filename: sourceFileName
78
- });
79
- if (!out) throw new Error("No output returned");
68
+ sourceType: "module",
69
+ plugins: ["jsx", "typescript"]
70
+ });
71
+ const babelPlugin = getBabelPlugin();
72
+ const out = (0, import_core.transformFromAstSync)(ast, sourceCode, {
73
+ plugins: [[babelPlugin, options]],
74
+ configFile: false,
75
+ sourceFileName,
76
+ filename: sourceFileName
77
+ });
78
+ if (!out) {
79
+ throw new Error(`No output returned`);
80
+ }
80
81
  return out;
81
82
  }
82
83
  function getBabelPlugin() {
83
- return (0, import_helper_plugin_utils.declare)((api, options) => (api.assertVersion(7), getBabelParseDefinition(options)));
84
+ return (0, import_helper_plugin_utils.declare)((api, options) => {
85
+ api.assertVersion(7);
86
+ return getBabelParseDefinition(options);
87
+ });
84
88
  }
85
89
  function getBabelParseDefinition(options) {
86
90
  return {
@@ -89,56 +93,71 @@ function getBabelParseDefinition(options) {
89
93
  Program: {
90
94
  enter(root) {
91
95
  let sourcePath = this.file.opts.filename;
92
- if (sourcePath?.includes("node_modules") || !sourcePath?.endsWith(".jsx") && !sourcePath?.endsWith(".tsx")) return;
93
- process.env.SOURCE_ROOT?.endsWith("ios") && (sourcePath = sourcePath.replace("/ios", ""));
94
- let hasImportedView = !1,
95
- hasImportedViewWrapper = !1,
96
- wrapperCount = 0;
97
- const sheetStyles = {},
98
- sheetIdentifier = root.scope.generateUidIdentifier("sheet"),
99
- firstCommentContents =
100
- // join because you can join together multiple pragmas
101
- root.node.body[0]?.leadingComments?.map(comment => comment?.value || " ").join(" ") ?? "",
102
- firstComment = firstCommentContents ? `//${firstCommentContents}` : "",
103
- {
104
- shouldPrintDebug,
105
- shouldDisable
106
- } = (0, import_getPragmaOptions.getPragmaOptions)({
107
- source: firstComment,
108
- path: sourcePath
109
- });
110
- if (shouldDisable) return;
111
- !options.config && !options.components && (tamaguiBuildOptionsLoaded ||= (0, import_loadTamagui.loadTamaguiBuildConfigSync)({}));
96
+ if (sourcePath?.includes("node_modules")) {
97
+ return;
98
+ }
99
+ if (!sourcePath?.endsWith(".jsx") && !sourcePath?.endsWith(".tsx")) {
100
+ return;
101
+ }
102
+ if (process.env.SOURCE_ROOT?.endsWith("ios")) {
103
+ sourcePath = sourcePath.replace("/ios", "");
104
+ }
105
+ let hasImportedView = false;
106
+ let hasImportedViewWrapper = false;
107
+ let wrapperCount = 0;
108
+ const sheetStyles = {};
109
+ const sheetIdentifier = root.scope.generateUidIdentifier("sheet");
110
+ const firstCommentContents =
111
+ // join because you can join together multiple pragmas
112
+ root.node.body[0]?.leadingComments?.map(comment => comment?.value || " ").join(" ") ?? "";
113
+ const firstComment = firstCommentContents ? `//${firstCommentContents}` : "";
114
+ const {
115
+ shouldPrintDebug,
116
+ shouldDisable
117
+ } = (0, import_getPragmaOptions.getPragmaOptions)({
118
+ source: firstComment,
119
+ path: sourcePath
120
+ });
121
+ if (shouldDisable) {
122
+ return;
123
+ }
124
+ if (!options.config && !options.components) {
125
+ tamaguiBuildOptionsLoaded ||= (0, import_loadTamagui.loadTamaguiBuildConfigSync)({});
126
+ }
112
127
  const finalOptions = {
113
- // @ts-ignore just in case they leave it out
114
- platform: "native",
115
- ...tamaguiBuildOptionsLoaded,
116
- ...options
117
- },
118
- printLog = (0, import_createLogger.createLogger)(sourcePath, finalOptions);
128
+ // @ts-ignore just in case they leave it out
129
+ platform: "native",
130
+ ...tamaguiBuildOptionsLoaded,
131
+ ...options
132
+ };
133
+ const printLog = (0, import_createLogger.createLogger)(sourcePath, finalOptions);
119
134
  function addSheetStyle(style, node) {
120
- let key = `${`${Object.keys(sheetStyles).length}`}`;
135
+ const styleIndex = `${Object.keys(sheetStyles).length}`;
136
+ let key = `${styleIndex}`;
121
137
  if (process.env.NODE_ENV === "development") {
122
138
  const lineNumbers = node.loc ? node.loc.start.line + (node.loc.start.line !== node.loc.end.line ? `-${node.loc.end.line}` : "") : "";
123
139
  key += `:${(0, import_node_path.basename)(sourcePath)}:${lineNumbers}`;
124
140
  }
125
- return sheetStyles[key] = style, readStyleExpr(key);
141
+ sheetStyles[key] = style;
142
+ return readStyleExpr(key);
126
143
  }
127
144
  function readStyleExpr(key) {
128
- return (0, import_template.default)("SHEET['KEY']")({
145
+ return (0, import_template.default)(`SHEET['KEY']`)({
129
146
  SHEET: sheetIdentifier.name,
130
147
  KEY: key
131
- }).expression;
148
+ })["expression"];
132
149
  }
133
150
  let res;
134
151
  try {
135
152
  res = extractor.parseSync(root, {
136
153
  importsWhitelist: ["constants.js", "colors.js"],
137
154
  excludeProps: /* @__PURE__ */new Set(["className", "userSelect", "whiteSpace", "textOverflow", "cursor", "contain"]),
155
+ // native props that should pass through without preventing extraction
156
+ inlineProps: /* @__PURE__ */new Set(["testID", "nativeID", "accessibilityLabel", "accessibilityHint", "accessibilityRole", "accessibilityState", "accessibilityValue", "accessibilityActions", "accessibilityLabelledBy", "accessibilityLiveRegion", "accessibilityElementsHidden", "accessibilityViewIsModal", "importantForAccessibility", "onAccessibilityAction", "onAccessibilityEscape", "onAccessibilityTap", "onMagicTap", "collapsable", "needsOffscreenAlphaCompositing", "removeClippedSubviews", "renderToHardwareTextureAndroid", "shouldRasterizeIOS", "hitSlop", "pointerEvents"]),
138
157
  shouldPrintDebug,
139
158
  ...finalOptions,
140
159
  // disable extracting variables as no native concept of them (only theme values)
141
- disableExtractVariables: !1,
160
+ disableExtractVariables: false,
142
161
  sourcePath,
143
162
  // disabling flattening for now
144
163
  // it's flattening a plain <Paragraph>hello</Paragraph> which breaks things because themes
@@ -148,16 +167,20 @@ function getBabelParseDefinition(options) {
148
167
  getFlattenedNode({
149
168
  isTextView
150
169
  }) {
151
- return hasImportedView || (hasImportedView = !0, root.unshiftContainer("body", importNativeView())), isTextView ? "__ReactNativeText" : "__ReactNativeView";
170
+ if (!hasImportedView) {
171
+ hasImportedView = true;
172
+ root.unshiftContainer("body", importNativeView());
173
+ }
174
+ return isTextView ? "__ReactNativeText" : "__ReactNativeView";
152
175
  },
153
176
  onExtractTag(props) {
154
177
  assertValidTag(props.node);
155
- const stylesExpr = t.arrayExpression([]),
156
- hocStylesExpr = t.arrayExpression([]),
157
- expressions = [],
158
- finalAttrs = [],
159
- themeKeysUsed = /* @__PURE__ */new Set();
160
- function getStyleExpression(style) {
178
+ const stylesExpr = t.arrayExpression([]);
179
+ const hocStylesExpr = t.arrayExpression([]);
180
+ const expressions = [];
181
+ const finalAttrs = [];
182
+ const themeKeysUsed = /* @__PURE__ */new Set();
183
+ function getStyleExpression(style, forTernary = false) {
161
184
  if (!style) return;
162
185
  const {
163
186
  plain,
@@ -165,98 +188,171 @@ function getBabelParseDefinition(options) {
165
188
  } = splitThemeStyles(style);
166
189
  let themeExpr = null;
167
190
  if (themed) {
168
- for (const key in themed) themeKeysUsed.add(themed[key].split("$")[1]);
191
+ for (const key in themed) {
192
+ themeKeysUsed.add(themed[key].split("$")[1]);
193
+ }
169
194
  themeExpr = getThemedStyleExpression(themed);
170
195
  }
171
- const ident = addSheetStyle(plain, props.node);
172
- return themeExpr ? (addStyleExpression(ident), addStyleExpression(ident, !0), themeExpr) : ident;
196
+ const hasPlainKeys = Object.keys(plain).length > 0;
197
+ const ident = hasPlainKeys ? addSheetStyle(plain, props.node) : null;
198
+ if (themeExpr) {
199
+ if (forTernary) {
200
+ if (ident) {
201
+ return t.arrayExpression([ident, themeExpr]);
202
+ }
203
+ return themeExpr;
204
+ }
205
+ if (ident) {
206
+ addStyleExpression(ident);
207
+ addStyleExpression(ident, true);
208
+ }
209
+ return themeExpr;
210
+ }
211
+ return ident;
173
212
  }
174
- function addStyleExpression(expr, HOC = !1) {
175
- Array.isArray(expr) ? (HOC ? hocStylesExpr : stylesExpr).elements.push(...expr) : (HOC ? hocStylesExpr : stylesExpr).elements.push(expr);
213
+ function addStyleExpression(expr, HOC = false) {
214
+ if (Array.isArray(expr)) {
215
+ ;
216
+ (HOC ? hocStylesExpr : stylesExpr).elements.push(...expr);
217
+ } else {
218
+ ;
219
+ (HOC ? hocStylesExpr : stylesExpr).elements.push(expr);
220
+ }
176
221
  }
177
222
  function getThemedStyleExpression(styles) {
178
223
  const themedStylesAst = (0, import_literalToAst.literalToAst)(styles);
179
- return themedStylesAst.properties.forEach(_ => {
224
+ themedStylesAst.properties.forEach(_ => {
180
225
  const prop = _;
181
226
  if (prop.value.type === "StringLiteral") {
182
- const propVal = prop.value.value.slice(1),
183
- isComputed = !t.isValidIdentifier(propVal);
227
+ const propVal = prop.value.value.slice(1);
228
+ const isComputed = !t.isValidIdentifier(propVal);
184
229
  prop.value = t.callExpression(t.memberExpression(t.memberExpression(t.identifier("theme"), isComputed ? t.stringLiteral(propVal) : t.identifier(propVal), isComputed), t.identifier("get")), []);
185
230
  }
186
- }), themedStylesAst;
231
+ });
232
+ return themedStylesAst;
187
233
  }
188
- let hasDynamicStyle = !1;
189
- for (const attr of props.attrs) switch (attr.type) {
190
- case "style":
191
- {
192
- let styleExpr = getStyleExpression(attr.value);
193
- addStyleExpression(styleExpr), addStyleExpression(styleExpr, !0);
194
- break;
195
- }
196
- case "ternary":
197
- {
198
- const {
234
+ let hasDynamicStyle = false;
235
+ let hasMediaKeys = false;
236
+ for (const attr of props.attrs) {
237
+ switch (attr.type) {
238
+ case "style":
239
+ {
240
+ let styleExpr = getStyleExpression(attr.value);
241
+ addStyleExpression(styleExpr);
242
+ addStyleExpression(styleExpr, true);
243
+ break;
244
+ }
245
+ case "ternary":
246
+ {
247
+ const {
199
248
  consequent,
200
249
  alternate
201
- } = attr.value,
202
- consExpr = getStyleExpression(consequent),
203
- altExpr = getStyleExpression(alternate);
204
- expressions.push(attr.value.test), addStyleExpression(t.conditionalExpression(t.identifier(`_expressions[${expressions.length - 1}]`), consExpr || t.nullLiteral(), altExpr || t.nullLiteral()), !0);
205
- const styleExpr = t.conditionalExpression(attr.value.test, consExpr || t.nullLiteral(), altExpr || t.nullLiteral());
206
- addStyleExpression(styleExpr);
207
- break;
208
- }
209
- case "attr":
210
- {
211
- t.isJSXSpreadAttribute(attr.value) && (0, import_extractHelpers.isSimpleSpread)(attr.value) && (stylesExpr.elements.push(t.memberExpression(attr.value.argument, t.identifier("style"))), hocStylesExpr.elements.push(t.memberExpression(attr.value.argument, t.identifier("style")))), finalAttrs.push(attr.value);
212
- break;
213
- }
250
+ } = attr.value;
251
+ const consExpr = getStyleExpression(consequent, true);
252
+ const altExpr = getStyleExpression(alternate, true);
253
+ if (attr.value.inlineMediaQuery) {
254
+ hasMediaKeys = true;
255
+ }
256
+ expressions.push(attr.value.test);
257
+ addStyleExpression(t.conditionalExpression(t.identifier(`_expressions[${expressions.length - 1}]`), consExpr || t.nullLiteral(), altExpr || t.nullLiteral()), true);
258
+ const styleExpr = t.conditionalExpression(attr.value.test, consExpr || t.nullLiteral(), altExpr || t.nullLiteral());
259
+ addStyleExpression(styleExpr);
260
+ break;
261
+ }
262
+ case "attr":
263
+ {
264
+ if (t.isJSXSpreadAttribute(attr.value)) {
265
+ if ((0, import_extractHelpers.isSimpleSpread)(attr.value)) {
266
+ stylesExpr.elements.push(t.memberExpression(attr.value.argument, t.identifier("style")));
267
+ hocStylesExpr.elements.push(t.memberExpression(attr.value.argument, t.identifier("style")));
268
+ }
269
+ }
270
+ finalAttrs.push(attr.value);
271
+ break;
272
+ }
273
+ }
274
+ }
275
+ props.node.attributes = finalAttrs;
276
+ if (themeKeysUsed.size || hocStylesExpr.elements.length > 1 || hasDynamicStyle) {
277
+ if (!hasImportedViewWrapper) {
278
+ root.unshiftContainer("body", importWithStyle);
279
+ hasImportedViewWrapper = true;
280
+ }
281
+ const name = props.flatNodeName || props.node.name["name"];
282
+ const wrapperName = `_${name.replace(/^_+/, "")}Styled${wrapperCount++}`;
283
+ const WrapperIdentifier = t.identifier(wrapperName);
284
+ const WrapperJSXIdentifier = t.jsxIdentifier(wrapperName);
285
+ const hasThemeKeysFlag = themeKeysUsed.size > 0;
286
+ root.pushContainer("body", t.variableDeclaration("const", [t.variableDeclarator(WrapperIdentifier, t.callExpression(t.identifier("_withStableStyle"), [t.identifier(name), t.arrowFunctionExpression([t.identifier("theme"), t.identifier("_expressions")],
287
+ // return styles directly - no useMemo, theme changes must trigger style recalc
288
+ t.arrayExpression([...hocStylesExpr.elements])), t.booleanLiteral(hasThemeKeysFlag), t.booleanLiteral(hasMediaKeys)]))]));
289
+ props.node.name = WrapperJSXIdentifier;
290
+ props.jsxPath.node.openingElement.name = WrapperJSXIdentifier;
291
+ if (props.jsxPath.node.closingElement) {
292
+ props.jsxPath.node.closingElement.name = t.jsxIdentifier(wrapperName);
293
+ }
294
+ if (expressions.length) {
295
+ const safeExpressions = expressions.map(expr => t.isStringLiteral(expr) ? expr : t.unaryExpression("!", t.unaryExpression("!", expr)));
296
+ props.node.attributes.push(t.jsxAttribute(t.jsxIdentifier("_expressions"), t.jsxExpressionContainer(t.arrayExpression(safeExpressions))));
297
+ }
298
+ } else {
299
+ props.node.attributes.push(t.jsxAttribute(t.jsxIdentifier("style"), t.jsxExpressionContainer(stylesExpr.elements.length === 1 ? stylesExpr.elements[0] : stylesExpr)));
214
300
  }
215
- if (props.node.attributes = finalAttrs, themeKeysUsed.size || hocStylesExpr.elements.length > 1 || hasDynamicStyle) {
216
- hasImportedViewWrapper || (root.unshiftContainer("body", importWithStyle), root.unshiftContainer("body", importReactUseMemo()), hasImportedViewWrapper = !0);
217
- const name = props.flatNodeName || props.node.name.name,
218
- wrapperName = `_${name.replace(/^_+/, "")}Styled${wrapperCount++}`,
219
- WrapperIdentifier = t.identifier(wrapperName),
220
- WrapperJSXIdentifier = t.jsxIdentifier(wrapperName);
221
- root.pushContainer("body", t.variableDeclaration("const", [t.variableDeclarator(WrapperIdentifier, t.callExpression(t.identifier("__withStableStyle"), [t.identifier(name), t.arrowFunctionExpression([t.identifier("theme"), t.identifier("_expressions")], t.blockStatement([t.returnStatement(t.callExpression(t.identifier("__ReactUseMemo"), [t.arrowFunctionExpression([], t.blockStatement([t.returnStatement(t.arrayExpression([...hocStylesExpr.elements]))])), t.identifier("_expressions")]))]))]))])), props.node.name = WrapperJSXIdentifier, props.jsxPath.node.openingElement.name = WrapperJSXIdentifier, props.jsxPath.node.closingElement && (props.jsxPath.node.closingElement.name = t.jsxIdentifier(wrapperName)), expressions.length && props.node.attributes.push(t.jsxAttribute(t.jsxIdentifier("_expressions"), t.jsxExpressionContainer(t.arrayExpression(expressions))));
222
- } else props.node.attributes.push(t.jsxAttribute(t.jsxIdentifier("style"), t.jsxExpressionContainer(stylesExpr.elements.length === 1 ? stylesExpr.elements[0] : stylesExpr)));
223
301
  }
224
302
  });
225
303
  } catch (err) {
226
304
  if (err instanceof Error) {
227
305
  let message = `${shouldPrintDebug === "verbose" ? err : err.message}`;
228
- message.includes("Unexpected return value from visitor method") && (message = "Unexpected return value from visitor method"), console.warn("Error in Tamagui parse, skipping", message, err.stack);
306
+ if (message.includes("Unexpected return value from visitor method")) {
307
+ message = "Unexpected return value from visitor method";
308
+ }
309
+ console.warn("Error in Tamagui parse, skipping", message, err.stack);
229
310
  return;
230
311
  }
231
312
  }
232
313
  if (!Object.keys(sheetStyles).length) {
233
- shouldPrintDebug && console.info("END no styles"), res && printLog(res);
314
+ if (shouldPrintDebug) {
315
+ console.info("END no styles");
316
+ }
317
+ if (res) printLog(res);
234
318
  return;
235
319
  }
236
- const sheetObject = (0, import_literalToAst.literalToAst)(sheetStyles),
237
- sheetOuter = (0, import_template.default)("const SHEET = __ReactNativeStyleSheet.create(null)")({
238
- SHEET: sheetIdentifier.name
239
- });
240
- sheetOuter.declarations[0].init.arguments[0] = sheetObject, root.unshiftContainer("body", sheetOuter), root.unshiftContainer("body", importStyleSheet()), shouldPrintDebug && (console.info(`
241
- -------- output code -------
242
- `), console.info((0, import_generator.default)(root.parent).code.split(`
243
- `).filter(x => !x.startsWith("//")).join(`
244
- `))), res && printLog(res);
320
+ const sheetObject = (0, import_literalToAst.literalToAst)(sheetStyles);
321
+ const sheetOuter = (0, import_template.default)("const SHEET = __ReactNativeStyleSheet.create(null)")({
322
+ SHEET: sheetIdentifier.name
323
+ });
324
+ sheetOuter.declarations[0].init.arguments[0] = sheetObject;
325
+ root.unshiftContainer("body", sheetOuter);
326
+ root.unshiftContainer("body", importStyleSheet());
327
+ if (shouldPrintDebug) {
328
+ console.info("\n -------- output code ------- \n");
329
+ console.info((0, import_generator.default)(root.parent).code.split("\n").filter(x => !x.startsWith("//")).join("\n"));
330
+ }
331
+ if (res) printLog(res);
245
332
  }
246
333
  }
247
334
  }
248
335
  };
249
336
  }
250
337
  function assertValidTag(node) {
251
- node.attributes.find(x => x.type === "JSXAttribute" && x.name.name === "style") && process.env.DEBUG?.startsWith("tamagui") && console.warn("\u26A0\uFE0F Cannot pass style attribute to extracted style");
338
+ if (node.attributes.find(x => x.type === "JSXAttribute" && x.name.name === "style")) {
339
+ if (process.env.DEBUG?.startsWith("tamagui")) {
340
+ console.warn("\u26A0\uFE0F Cannot pass style attribute to extracted style");
341
+ }
342
+ }
252
343
  }
253
344
  function splitThemeStyles(style) {
254
- const themed = {},
255
- plain = {};
256
- let noTheme = !0;
345
+ const themed = {};
346
+ const plain = {};
347
+ let noTheme = true;
257
348
  for (const key in style) {
258
349
  const val = style[key];
259
- val && val[0] === "$" ? (themed[key] = val, noTheme = !1) : plain[key] = val;
350
+ if (val && val[0] === "$") {
351
+ themed[key] = val;
352
+ noTheme = false;
353
+ } else {
354
+ plain[key] = val;
355
+ }
260
356
  }
261
357
  return {
262
358
  themed: noTheme ? null : themed,
@@ -3,20 +3,22 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
3
  var __getOwnPropNames = Object.getOwnPropertyNames;
4
4
  var __hasOwnProp = Object.prototype.hasOwnProperty;
5
5
  var __export = (target, all) => {
6
- for (var name in all) __defProp(target, name, {
7
- get: all[name],
8
- enumerable: !0
9
- });
10
- },
11
- __copyProps = (to, from, except, desc) => {
12
- if (from && typeof from == "object" || typeof from == "function") for (let key of __getOwnPropNames(from)) !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, {
6
+ for (var name in all) __defProp(target, name, {
7
+ get: all[name],
8
+ enumerable: true
9
+ });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
13
14
  get: () => from[key],
14
15
  enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
15
16
  });
16
- return to;
17
- };
17
+ }
18
+ return to;
19
+ };
18
20
  var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
19
- value: !0
21
+ value: true
20
22
  }), mod);
21
23
  var findTopmostFunction_exports = {};
22
24
  __export(findTopmostFunction_exports, {
@@ -26,9 +28,16 @@ module.exports = __toCommonJS(findTopmostFunction_exports);
26
28
  function findTopmostFunction(jsxPath) {
27
29
  const isFunction = path => path.isArrowFunctionExpression() || path.isFunctionDeclaration() || path.isFunctionExpression();
28
30
  let compFn = jsxPath.findParent(isFunction);
29
- for (; compFn;) {
31
+ while (compFn) {
30
32
  const parent = compFn.findParent(isFunction);
31
- if (parent) compFn = parent;else break;
33
+ if (parent) {
34
+ compFn = parent;
35
+ } else {
36
+ break;
37
+ }
38
+ }
39
+ if (!compFn) {
40
+ return null;
32
41
  }
33
- return compFn || null;
42
+ return compFn;
34
43
  }