@tamagui/static 2.0.0-rc.4 → 2.0.0-rc.40

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 (185) 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 +18 -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 +177 -101
  9. package/dist/extractor/bundleConfig.cjs +554 -167
  10. package/dist/extractor/concatClassName.cjs +41 -29
  11. package/dist/extractor/createEvaluator.cjs +54 -41
  12. package/dist/extractor/createExtractor.cjs +1400 -581
  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 -154
  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 +149 -104
  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 +38 -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 +167 -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 +26 -22
  53. package/src/checkDeps.ts +305 -68
  54. package/src/exports.ts +1 -0
  55. package/src/extractor/babelParse.ts +1 -0
  56. package/src/extractor/bundle.ts +140 -37
  57. package/src/extractor/bundleConfig.ts +435 -61
  58. package/src/extractor/createExtractor.ts +283 -48
  59. package/src/extractor/detectModuleFormat.ts +42 -0
  60. package/src/extractor/esbuildTsconfigPaths.ts +6 -1
  61. package/src/extractor/extractToClassNames.ts +15 -9
  62. package/src/extractor/extractToNative.ts +66 -33
  63. package/src/extractor/hasTopLevelAwait.ts +28 -0
  64. package/src/extractor/loadTamagui.ts +2 -2
  65. package/src/getPragmaOptions.ts +6 -1
  66. package/src/registerRequire.ts +88 -8
  67. package/types/checkDeps.d.ts.map +1 -1
  68. package/types/exports.d.ts +1 -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/getPragmaOptions.d.ts.map +1 -1
  85. package/types/registerRequire.d.ts.map +1 -1
  86. package/dist/check-dep-versions.js +0 -389
  87. package/dist/check-dep-versions.js.map +0 -6
  88. package/dist/checkDeps.js +0 -60
  89. package/dist/checkDeps.js.map +0 -6
  90. package/dist/constants.js +0 -34
  91. package/dist/constants.js.map +0 -6
  92. package/dist/exports.js +0 -34
  93. package/dist/exports.js.map +0 -6
  94. package/dist/extractor/accessSafe.js +0 -47
  95. package/dist/extractor/accessSafe.js.map +0 -6
  96. package/dist/extractor/babelParse.js +0 -59
  97. package/dist/extractor/babelParse.js.map +0 -6
  98. package/dist/extractor/buildClassName.js +0 -72
  99. package/dist/extractor/buildClassName.js.map +0 -6
  100. package/dist/extractor/bundle.js +0 -135
  101. package/dist/extractor/bundle.js.map +0 -6
  102. package/dist/extractor/bundleConfig.js +0 -352
  103. package/dist/extractor/bundleConfig.js.map +0 -6
  104. package/dist/extractor/concatClassName.js +0 -69
  105. package/dist/extractor/concatClassName.js.map +0 -6
  106. package/dist/extractor/createEvaluator.js +0 -66
  107. package/dist/extractor/createEvaluator.js.map +0 -6
  108. package/dist/extractor/createExtractor.js +0 -1215
  109. package/dist/extractor/createExtractor.js.map +0 -6
  110. package/dist/extractor/createLogger.js +0 -32
  111. package/dist/extractor/createLogger.js.map +0 -6
  112. package/dist/extractor/ensureImportingConcat.js +0 -50
  113. package/dist/extractor/ensureImportingConcat.js.map +0 -6
  114. package/dist/extractor/errors.js +0 -22
  115. package/dist/extractor/errors.js.map +0 -6
  116. package/dist/extractor/esbuildAliasPlugin.js +0 -36
  117. package/dist/extractor/esbuildAliasPlugin.js.map +0 -6
  118. package/dist/extractor/esbuildTsconfigPaths.js +0 -79
  119. package/dist/extractor/esbuildTsconfigPaths.js.map +0 -6
  120. package/dist/extractor/evaluateAstNode.js +0 -99
  121. package/dist/extractor/evaluateAstNode.js.map +0 -6
  122. package/dist/extractor/extractHelpers.js +0 -108
  123. package/dist/extractor/extractHelpers.js.map +0 -6
  124. package/dist/extractor/extractMediaStyle.js +0 -123
  125. package/dist/extractor/extractMediaStyle.js.map +0 -6
  126. package/dist/extractor/extractToClassNames.js +0 -351
  127. package/dist/extractor/extractToClassNames.js.map +0 -6
  128. package/dist/extractor/extractToNative.js +0 -286
  129. package/dist/extractor/extractToNative.js.map +0 -6
  130. package/dist/extractor/findTopmostFunction.js +0 -32
  131. package/dist/extractor/findTopmostFunction.js.map +0 -6
  132. package/dist/extractor/generatedUid.js +0 -42
  133. package/dist/extractor/generatedUid.js.map +0 -6
  134. package/dist/extractor/getPrefixLogs.js +0 -24
  135. package/dist/extractor/getPrefixLogs.js.map +0 -6
  136. package/dist/extractor/getPropValueFromAttributes.js +0 -65
  137. package/dist/extractor/getPropValueFromAttributes.js.map +0 -6
  138. package/dist/extractor/getSourceModule.js +0 -62
  139. package/dist/extractor/getSourceModule.js.map +0 -6
  140. package/dist/extractor/getStaticBindingsForScope.js +0 -145
  141. package/dist/extractor/getStaticBindingsForScope.js.map +0 -6
  142. package/dist/extractor/getTamaguiConfigPathFromOptionsConfig.js +0 -32
  143. package/dist/extractor/getTamaguiConfigPathFromOptionsConfig.js.map +0 -6
  144. package/dist/extractor/hoistClassNames.js +0 -63
  145. package/dist/extractor/hoistClassNames.js.map +0 -6
  146. package/dist/extractor/literalToAst.js +0 -90
  147. package/dist/extractor/literalToAst.js.map +0 -6
  148. package/dist/extractor/loadFile.js +0 -14
  149. package/dist/extractor/loadFile.js.map +0 -6
  150. package/dist/extractor/loadTamagui.js +0 -306
  151. package/dist/extractor/loadTamagui.js.map +0 -6
  152. package/dist/extractor/logLines.js +0 -30
  153. package/dist/extractor/logLines.js.map +0 -6
  154. package/dist/extractor/normalizeTernaries.js +0 -61
  155. package/dist/extractor/normalizeTernaries.js.map +0 -6
  156. package/dist/extractor/propsToFontFamilyCache.js +0 -33
  157. package/dist/extractor/propsToFontFamilyCache.js.map +0 -6
  158. package/dist/extractor/regenerateConfig.js +0 -123
  159. package/dist/extractor/regenerateConfig.js.map +0 -6
  160. package/dist/extractor/removeUnusedHooks.js +0 -72
  161. package/dist/extractor/removeUnusedHooks.js.map +0 -6
  162. package/dist/extractor/timer.js +0 -38
  163. package/dist/extractor/timer.js.map +0 -6
  164. package/dist/extractor/validHTMLAttributes.js +0 -72
  165. package/dist/extractor/validHTMLAttributes.js.map +0 -6
  166. package/dist/extractor/watchTamaguiConfig.js +0 -57
  167. package/dist/extractor/watchTamaguiConfig.js.map +0 -6
  168. package/dist/getPragmaOptions.js +0 -46
  169. package/dist/getPragmaOptions.js.map +0 -6
  170. package/dist/helpers/memoize.js +0 -33
  171. package/dist/helpers/memoize.js.map +0 -6
  172. package/dist/helpers/requireTamaguiCore.js +0 -30
  173. package/dist/helpers/requireTamaguiCore.js.map +0 -6
  174. package/dist/index.js +0 -30
  175. package/dist/index.js.map +0 -6
  176. package/dist/registerRequire.js +0 -100
  177. package/dist/registerRequire.js.map +0 -6
  178. package/dist/server.js +0 -58
  179. package/dist/server.js.map +0 -6
  180. package/dist/setup.js +0 -1
  181. package/dist/setup.js.map +0 -6
  182. package/dist/types.js +0 -14
  183. package/dist/types.js.map +0 -6
  184. package/dist/worker.js +0 -72
  185. 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,53 +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 = (0, import_template.default)(`
60
- const __withStableStyle = require('@tamagui/core')._withStableStyle;
61
- `),
62
- importReactUseMemo = (0, import_template.default)(`
63
- const __ReactUseMemo = require('react').useMemo;
64
- `),
65
- extractor = (0, import_createExtractor.createExtractor)({
66
- platform: "native"
67
- });
60
+ `);
61
+ const importWithStyle = import_template.default.ast(`import { _withStableStyle } from '@tamagui/core';`);
62
+ const extractor = (0, import_createExtractor.createExtractor)({
63
+ platform: "native"
64
+ });
68
65
  let tamaguiBuildOptionsLoaded;
69
66
  function extractToNative(sourceFileName, sourceCode, options) {
70
67
  const ast = (0, import_parser.parse)(sourceCode, {
71
- sourceType: "module",
72
- plugins: ["jsx", "typescript"]
73
- }),
74
- babelPlugin = getBabelPlugin(),
75
- out = (0, import_core.transformFromAstSync)(ast, sourceCode, {
76
- plugins: [[babelPlugin, options]],
77
- configFile: !1,
78
- sourceFileName,
79
- filename: sourceFileName
80
- });
81
- 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
+ }
82
81
  return out;
83
82
  }
84
83
  function getBabelPlugin() {
85
- 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
+ });
86
88
  }
87
89
  function getBabelParseDefinition(options) {
88
90
  return {
@@ -91,56 +93,71 @@ function getBabelParseDefinition(options) {
91
93
  Program: {
92
94
  enter(root) {
93
95
  let sourcePath = this.file.opts.filename;
94
- if (sourcePath?.includes("node_modules") || !sourcePath?.endsWith(".jsx") && !sourcePath?.endsWith(".tsx")) return;
95
- process.env.SOURCE_ROOT?.endsWith("ios") && (sourcePath = sourcePath.replace("/ios", ""));
96
- let hasImportedView = !1,
97
- hasImportedViewWrapper = !1,
98
- wrapperCount = 0;
99
- const sheetStyles = {},
100
- sheetIdentifier = root.scope.generateUidIdentifier("sheet"),
101
- firstCommentContents =
102
- // join because you can join together multiple pragmas
103
- root.node.body[0]?.leadingComments?.map(comment => comment?.value || " ").join(" ") ?? "",
104
- firstComment = firstCommentContents ? `//${firstCommentContents}` : "",
105
- {
106
- shouldPrintDebug,
107
- shouldDisable
108
- } = (0, import_getPragmaOptions.getPragmaOptions)({
109
- source: firstComment,
110
- path: sourcePath
111
- });
112
- if (shouldDisable) return;
113
- !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
+ }
114
127
  const finalOptions = {
115
- // @ts-ignore just in case they leave it out
116
- platform: "native",
117
- ...tamaguiBuildOptionsLoaded,
118
- ...options
119
- },
120
- 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);
121
134
  function addSheetStyle(style, node) {
122
- let key = `${`${Object.keys(sheetStyles).length}`}`;
135
+ const styleIndex = `${Object.keys(sheetStyles).length}`;
136
+ let key = `${styleIndex}`;
123
137
  if (process.env.NODE_ENV === "development") {
124
138
  const lineNumbers = node.loc ? node.loc.start.line + (node.loc.start.line !== node.loc.end.line ? `-${node.loc.end.line}` : "") : "";
125
139
  key += `:${(0, import_node_path.basename)(sourcePath)}:${lineNumbers}`;
126
140
  }
127
- return sheetStyles[key] = style, readStyleExpr(key);
141
+ sheetStyles[key] = style;
142
+ return readStyleExpr(key);
128
143
  }
129
144
  function readStyleExpr(key) {
130
- return (0, import_template.default)("SHEET['KEY']")({
145
+ return (0, import_template.default)(`SHEET['KEY']`)({
131
146
  SHEET: sheetIdentifier.name,
132
147
  KEY: key
133
- }).expression;
148
+ })["expression"];
134
149
  }
135
150
  let res;
136
151
  try {
137
152
  res = extractor.parseSync(root, {
138
153
  importsWhitelist: ["constants.js", "colors.js"],
139
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"]),
140
157
  shouldPrintDebug,
141
158
  ...finalOptions,
142
159
  // disable extracting variables as no native concept of them (only theme values)
143
- disableExtractVariables: !1,
160
+ disableExtractVariables: false,
144
161
  sourcePath,
145
162
  // disabling flattening for now
146
163
  // it's flattening a plain <Paragraph>hello</Paragraph> which breaks things because themes
@@ -150,16 +167,20 @@ function getBabelParseDefinition(options) {
150
167
  getFlattenedNode({
151
168
  isTextView
152
169
  }) {
153
- 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";
154
175
  },
155
176
  onExtractTag(props) {
156
177
  assertValidTag(props.node);
157
- const stylesExpr = t.arrayExpression([]),
158
- hocStylesExpr = t.arrayExpression([]),
159
- expressions = [],
160
- finalAttrs = [],
161
- themeKeysUsed = /* @__PURE__ */new Set();
162
- 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) {
163
184
  if (!style) return;
164
185
  const {
165
186
  plain,
@@ -167,98 +188,171 @@ function getBabelParseDefinition(options) {
167
188
  } = splitThemeStyles(style);
168
189
  let themeExpr = null;
169
190
  if (themed) {
170
- 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
+ }
171
194
  themeExpr = getThemedStyleExpression(themed);
172
195
  }
173
- const ident = addSheetStyle(plain, props.node);
174
- 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;
175
212
  }
176
- function addStyleExpression(expr, HOC = !1) {
177
- 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
+ }
178
221
  }
179
222
  function getThemedStyleExpression(styles) {
180
223
  const themedStylesAst = (0, import_literalToAst.literalToAst)(styles);
181
- return themedStylesAst.properties.forEach(_ => {
224
+ themedStylesAst.properties.forEach(_ => {
182
225
  const prop = _;
183
226
  if (prop.value.type === "StringLiteral") {
184
- const propVal = prop.value.value.slice(1),
185
- isComputed = !t.isValidIdentifier(propVal);
227
+ const propVal = prop.value.value.slice(1);
228
+ const isComputed = !t.isValidIdentifier(propVal);
186
229
  prop.value = t.callExpression(t.memberExpression(t.memberExpression(t.identifier("theme"), isComputed ? t.stringLiteral(propVal) : t.identifier(propVal), isComputed), t.identifier("get")), []);
187
230
  }
188
- }), themedStylesAst;
231
+ });
232
+ return themedStylesAst;
189
233
  }
190
- let hasDynamicStyle = !1;
191
- for (const attr of props.attrs) switch (attr.type) {
192
- case "style":
193
- {
194
- let styleExpr = getStyleExpression(attr.value);
195
- addStyleExpression(styleExpr), addStyleExpression(styleExpr, !0);
196
- break;
197
- }
198
- case "ternary":
199
- {
200
- 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 {
201
248
  consequent,
202
249
  alternate
203
- } = attr.value,
204
- consExpr = getStyleExpression(consequent),
205
- altExpr = getStyleExpression(alternate);
206
- expressions.push(attr.value.test), addStyleExpression(t.conditionalExpression(t.identifier(`_expressions[${expressions.length - 1}]`), consExpr || t.nullLiteral(), altExpr || t.nullLiteral()), !0);
207
- const styleExpr = t.conditionalExpression(attr.value.test, consExpr || t.nullLiteral(), altExpr || t.nullLiteral());
208
- addStyleExpression(styleExpr);
209
- break;
210
- }
211
- case "attr":
212
- {
213
- 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);
214
- break;
215
- }
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)));
216
300
  }
217
- if (props.node.attributes = finalAttrs, themeKeysUsed.size || hocStylesExpr.elements.length > 1 || hasDynamicStyle) {
218
- hasImportedViewWrapper || (root.unshiftContainer("body", importWithStyle()), root.unshiftContainer("body", importReactUseMemo()), hasImportedViewWrapper = !0);
219
- const name = props.flatNodeName || props.node.name.name,
220
- wrapperName = `_${name.replace(/^_+/, "")}Styled${wrapperCount++}`,
221
- WrapperIdentifier = t.identifier(wrapperName),
222
- WrapperJSXIdentifier = t.jsxIdentifier(wrapperName);
223
- 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))));
224
- } else props.node.attributes.push(t.jsxAttribute(t.jsxIdentifier("style"), t.jsxExpressionContainer(stylesExpr.elements.length === 1 ? stylesExpr.elements[0] : stylesExpr)));
225
301
  }
226
302
  });
227
303
  } catch (err) {
228
304
  if (err instanceof Error) {
229
305
  let message = `${shouldPrintDebug === "verbose" ? err : err.message}`;
230
- 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);
231
310
  return;
232
311
  }
233
312
  }
234
313
  if (!Object.keys(sheetStyles).length) {
235
- shouldPrintDebug && console.info("END no styles"), res && printLog(res);
314
+ if (shouldPrintDebug) {
315
+ console.info("END no styles");
316
+ }
317
+ if (res) printLog(res);
236
318
  return;
237
319
  }
238
- const sheetObject = (0, import_literalToAst.literalToAst)(sheetStyles),
239
- sheetOuter = (0, import_template.default)("const SHEET = __ReactNativeStyleSheet.create(null)")({
240
- SHEET: sheetIdentifier.name
241
- });
242
- sheetOuter.declarations[0].init.arguments[0] = sheetObject, root.unshiftContainer("body", sheetOuter), root.unshiftContainer("body", importStyleSheet()), shouldPrintDebug && (console.info(`
243
- -------- output code -------
244
- `), console.info((0, import_generator.default)(root.parent).code.split(`
245
- `).filter(x => !x.startsWith("//")).join(`
246
- `))), 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);
247
332
  }
248
333
  }
249
334
  }
250
335
  };
251
336
  }
252
337
  function assertValidTag(node) {
253
- 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
+ }
254
343
  }
255
344
  function splitThemeStyles(style) {
256
- const themed = {},
257
- plain = {};
258
- let noTheme = !0;
345
+ const themed = {};
346
+ const plain = {};
347
+ let noTheme = true;
259
348
  for (const key in style) {
260
349
  const val = style[key];
261
- 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
+ }
262
356
  }
263
357
  return {
264
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
  }