@tamagui/static 2.7.7 → 3.0.0-beta.643.1

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 (329) hide show
  1. package/dist/cjs/check-dep-versions.cjs +355 -0
  2. package/dist/cjs/checkDeps.cjs +302 -0
  3. package/dist/cjs/compiler.cjs +286 -0
  4. package/dist/cjs/compilerHost.cjs +1695 -0
  5. package/dist/cjs/constants.cjs +33 -0
  6. package/dist/cjs/domStructuralPass.cjs +112 -0
  7. package/dist/cjs/exports.cjs +42 -0
  8. package/dist/cjs/extractor/addLocalExports.cjs +64 -0
  9. package/dist/cjs/extractor/bundle.cjs +203 -0
  10. package/dist/cjs/extractor/bundleConfig.cjs +747 -0
  11. package/dist/cjs/extractor/concatClassName.cjs +117 -0
  12. package/dist/cjs/extractor/detectModuleFormat.cjs +54 -0
  13. package/dist/cjs/extractor/esbuildAliasPlugin.cjs +47 -0
  14. package/dist/cjs/extractor/esbuildTsconfigPaths.cjs +92 -0
  15. package/dist/cjs/extractor/getTamaguiConfigPathFromOptionsConfig.cjs +38 -0
  16. package/dist/cjs/extractor/loadTamagui.cjs +344 -0
  17. package/dist/cjs/extractor/regenerateConfig.cjs +161 -0
  18. package/dist/cjs/extractor/watchTamaguiConfig.cjs +64 -0
  19. package/dist/cjs/getPragmaOptions.cjs +67 -0
  20. package/dist/cjs/helpers/memoize.cjs +42 -0
  21. package/dist/cjs/helpers/requireTamaguiCore.cjs +40 -0
  22. package/dist/cjs/index.cjs +34 -0
  23. package/dist/cjs/registerRequire.cjs +220 -0
  24. package/dist/cjs/server.cjs +66 -0
  25. package/dist/cjs/staticEvaluationIgnoredModules.cjs +86 -0
  26. package/dist/cjs/types.cjs +17 -0
  27. package/dist/cjs/zero/artifact.cjs +145 -0
  28. package/dist/cjs/zero/graph.cjs +209 -0
  29. package/dist/cjs/zero/identity.cjs +61 -0
  30. package/dist/cjs/zero/index.cjs +26 -0
  31. package/dist/cjs/zero/islands.cjs +232 -0
  32. package/dist/cjs/zero/options.cjs +163 -0
  33. package/dist/cjs/zero/ownership.cjs +79 -0
  34. package/dist/cjs/zero/theme.cjs +328 -0
  35. package/dist/cjs/zero/transform.cjs +203 -0
  36. package/dist/esm/check-dep-versions.mjs +329 -0
  37. package/dist/esm/check-dep-versions.mjs.map +1 -0
  38. package/dist/esm/checkDeps.mjs +279 -0
  39. package/dist/esm/checkDeps.mjs.map +1 -0
  40. package/dist/esm/compiler.mjs +255 -0
  41. package/dist/esm/compiler.mjs.map +1 -0
  42. package/dist/esm/compilerHost.mjs +1675 -0
  43. package/dist/esm/compilerHost.mjs.map +1 -0
  44. package/dist/esm/constants.mjs +7 -0
  45. package/dist/esm/constants.mjs.map +1 -0
  46. package/dist/esm/domStructuralPass.mjs +92 -0
  47. package/dist/esm/domStructuralPass.mjs.map +1 -0
  48. package/dist/esm/exports.mjs +26 -0
  49. package/dist/esm/extractor/addLocalExports.mjs +44 -0
  50. package/dist/esm/extractor/addLocalExports.mjs.map +1 -0
  51. package/dist/esm/extractor/bundle.mjs +173 -0
  52. package/dist/esm/extractor/bundle.mjs.map +1 -0
  53. package/dist/esm/extractor/bundleConfig.mjs +706 -0
  54. package/dist/esm/extractor/bundleConfig.mjs.map +1 -0
  55. package/dist/esm/extractor/concatClassName.mjs +96 -0
  56. package/dist/esm/extractor/concatClassName.mjs.map +1 -0
  57. package/dist/esm/extractor/detectModuleFormat.mjs +31 -0
  58. package/dist/esm/extractor/detectModuleFormat.mjs.map +1 -0
  59. package/dist/esm/extractor/esbuildAliasPlugin.mjs +26 -0
  60. package/dist/esm/extractor/esbuildAliasPlugin.mjs.map +1 -0
  61. package/dist/esm/extractor/esbuildTsconfigPaths.mjs +63 -0
  62. package/dist/esm/extractor/esbuildTsconfigPaths.mjs.map +1 -0
  63. package/dist/esm/extractor/getTamaguiConfigPathFromOptionsConfig.mjs +18 -0
  64. package/dist/esm/extractor/getTamaguiConfigPathFromOptionsConfig.mjs.map +1 -0
  65. package/dist/esm/extractor/loadTamagui.mjs +306 -0
  66. package/dist/esm/extractor/loadTamagui.mjs.map +1 -0
  67. package/dist/esm/extractor/regenerateConfig.mjs +131 -0
  68. package/dist/esm/extractor/regenerateConfig.mjs.map +1 -0
  69. package/dist/esm/extractor/watchTamaguiConfig.mjs +43 -0
  70. package/dist/esm/extractor/watchTamaguiConfig.mjs.map +1 -0
  71. package/dist/esm/getPragmaOptions.mjs +46 -0
  72. package/dist/esm/getPragmaOptions.mjs.map +1 -0
  73. package/dist/esm/helpers/memoize.mjs +21 -0
  74. package/dist/esm/helpers/memoize.mjs.map +1 -0
  75. package/dist/esm/helpers/requireTamaguiCore.mjs +19 -0
  76. package/dist/esm/helpers/requireTamaguiCore.mjs.map +1 -0
  77. package/dist/esm/index.mjs +8 -0
  78. package/dist/esm/index.mjs.map +1 -0
  79. package/dist/esm/registerRequire.mjs +195 -0
  80. package/dist/esm/registerRequire.mjs.map +1 -0
  81. package/dist/esm/server.mjs +40 -0
  82. package/dist/esm/server.mjs.map +1 -0
  83. package/dist/esm/setup.mjs +0 -0
  84. package/dist/esm/staticEvaluationIgnoredModules.mjs +61 -0
  85. package/dist/esm/staticEvaluationIgnoredModules.mjs.map +1 -0
  86. package/dist/esm/types.mjs +0 -0
  87. package/dist/esm/zero/artifact.mjs +119 -0
  88. package/dist/esm/zero/artifact.mjs.map +1 -0
  89. package/dist/esm/zero/graph.mjs +170 -0
  90. package/dist/esm/zero/graph.mjs.map +1 -0
  91. package/dist/esm/zero/identity.mjs +36 -0
  92. package/dist/esm/zero/identity.mjs.map +1 -0
  93. package/dist/esm/zero/index.mjs +15 -0
  94. package/dist/esm/zero/islands.mjs +197 -0
  95. package/dist/esm/zero/islands.mjs.map +1 -0
  96. package/dist/esm/zero/options.mjs +129 -0
  97. package/dist/esm/zero/options.mjs.map +1 -0
  98. package/dist/esm/zero/ownership.mjs +48 -0
  99. package/dist/esm/zero/ownership.mjs.map +1 -0
  100. package/dist/esm/zero/theme.mjs +303 -0
  101. package/dist/esm/zero/theme.mjs.map +1 -0
  102. package/dist/esm/zero/transform.mjs +177 -0
  103. package/dist/esm/zero/transform.mjs.map +1 -0
  104. package/package.json +33 -43
  105. package/src/check-dep-versions.ts +2 -2
  106. package/src/checkDeps.ts +3 -2
  107. package/src/compiler.ts +425 -0
  108. package/src/compilerHost.ts +3125 -0
  109. package/src/constants.ts +0 -5
  110. package/src/domStructuralPass.ts +170 -0
  111. package/src/exports.ts +3 -6
  112. package/src/extractor/addLocalExports.ts +49 -0
  113. package/src/extractor/bundle.ts +20 -35
  114. package/src/extractor/bundleConfig.ts +334 -187
  115. package/src/extractor/concatClassName.ts +13 -20
  116. package/src/extractor/getTamaguiConfigPathFromOptionsConfig.ts +5 -4
  117. package/src/extractor/loadTamagui.ts +196 -143
  118. package/src/extractor/regenerateConfig.ts +65 -13
  119. package/src/extractor/watchTamaguiConfig.ts +6 -1
  120. package/src/helpers/requireTamaguiCore.ts +6 -1
  121. package/src/registerRequire.ts +94 -132
  122. package/src/staticEvaluationIgnoredModules.ts +74 -0
  123. package/src/types.ts +2 -107
  124. package/src/zero/artifact.ts +142 -0
  125. package/src/zero/graph.ts +359 -0
  126. package/src/zero/identity.ts +73 -0
  127. package/src/zero/index.ts +8 -0
  128. package/src/zero/islands.ts +262 -0
  129. package/src/zero/options.ts +239 -0
  130. package/src/zero/ownership.ts +113 -0
  131. package/src/zero/theme.ts +478 -0
  132. package/src/zero/transform.ts +320 -0
  133. package/types/check-dep-versions.d.ts.map +1 -1
  134. package/types/checkDeps.d.ts.map +1 -1
  135. package/types/compiler.d.ts +117 -0
  136. package/types/compiler.d.ts.map +1 -0
  137. package/types/compilerHost.d.ts +25 -0
  138. package/types/compilerHost.d.ts.map +1 -0
  139. package/types/constants.d.ts +0 -1
  140. package/types/constants.d.ts.map +1 -1
  141. package/types/domStructuralPass.d.ts +3 -0
  142. package/types/domStructuralPass.d.ts.map +1 -0
  143. package/types/exports.d.ts +3 -6
  144. package/types/exports.d.ts.map +1 -1
  145. package/types/extractor/addLocalExports.d.ts +3 -0
  146. package/types/extractor/addLocalExports.d.ts.map +1 -0
  147. package/types/extractor/bundle.d.ts +66 -65
  148. package/types/extractor/bundle.d.ts.map +1 -1
  149. package/types/extractor/bundleConfig.d.ts +19 -4
  150. package/types/extractor/bundleConfig.d.ts.map +1 -1
  151. package/types/extractor/esbuildAliasPlugin.d.ts.map +1 -1
  152. package/types/extractor/getTamaguiConfigPathFromOptionsConfig.d.ts +1 -1
  153. package/types/extractor/getTamaguiConfigPathFromOptionsConfig.d.ts.map +1 -1
  154. package/types/extractor/loadTamagui.d.ts +26 -3
  155. package/types/extractor/loadTamagui.d.ts.map +1 -1
  156. package/types/extractor/regenerateConfig.d.ts +1 -1
  157. package/types/extractor/regenerateConfig.d.ts.map +1 -1
  158. package/types/extractor/watchTamaguiConfig.d.ts.map +1 -1
  159. package/types/getPragmaOptions.d.ts +1 -1
  160. package/types/helpers/memoize.d.ts +1 -1
  161. package/types/helpers/memoize.d.ts.map +1 -1
  162. package/types/helpers/requireTamaguiCore.d.ts.map +1 -1
  163. package/types/index.d.ts.map +1 -1
  164. package/types/registerRequire.d.ts +2 -2
  165. package/types/registerRequire.d.ts.map +1 -1
  166. package/types/staticEvaluationIgnoredModules.d.ts +9 -0
  167. package/types/staticEvaluationIgnoredModules.d.ts.map +1 -0
  168. package/types/types.d.ts +2 -90
  169. package/types/types.d.ts.map +1 -1
  170. package/types/zero/artifact.d.ts +44 -0
  171. package/types/zero/artifact.d.ts.map +1 -0
  172. package/types/zero/graph.d.ts +139 -0
  173. package/types/zero/graph.d.ts.map +1 -0
  174. package/types/zero/identity.d.ts +33 -0
  175. package/types/zero/identity.d.ts.map +1 -0
  176. package/types/zero/index.d.ts +9 -0
  177. package/types/zero/index.d.ts.map +1 -0
  178. package/types/zero/islands.d.ts +56 -0
  179. package/types/zero/islands.d.ts.map +1 -0
  180. package/types/zero/options.d.ts +58 -0
  181. package/types/zero/options.d.ts.map +1 -0
  182. package/types/zero/ownership.d.ts +51 -0
  183. package/types/zero/ownership.d.ts.map +1 -0
  184. package/types/zero/theme.d.ts +83 -0
  185. package/types/zero/theme.d.ts.map +1 -0
  186. package/types/zero/transform.d.ts +53 -0
  187. package/types/zero/transform.d.ts.map +1 -0
  188. package/dist/check-dep-versions.cjs +0 -372
  189. package/dist/checkDeps.cjs +0 -271
  190. package/dist/constants.cjs +0 -51
  191. package/dist/exports.cjs +0 -48
  192. package/dist/extractor/accessSafe.cjs +0 -48
  193. package/dist/extractor/babelParse.cjs +0 -56
  194. package/dist/extractor/buildClassName.cjs +0 -86
  195. package/dist/extractor/bundle.cjs +0 -234
  196. package/dist/extractor/bundleConfig.cjs +0 -729
  197. package/dist/extractor/concatClassName.cjs +0 -129
  198. package/dist/extractor/createEvaluator.cjs +0 -88
  199. package/dist/extractor/createExtractor.cjs +0 -1968
  200. package/dist/extractor/createLogger.cjs +0 -50
  201. package/dist/extractor/detectModuleFormat.cjs +0 -55
  202. package/dist/extractor/ensureImportingConcat.cjs +0 -54
  203. package/dist/extractor/errors.cjs +0 -28
  204. package/dist/extractor/esbuildAliasPlugin.cjs +0 -56
  205. package/dist/extractor/esbuildTsconfigPaths.cjs +0 -108
  206. package/dist/extractor/evaluateAstNode.cjs +0 -128
  207. package/dist/extractor/extractHelpers.cjs +0 -182
  208. package/dist/extractor/extractMediaStyle.cjs +0 -169
  209. package/dist/extractor/extractToClassNames.cjs +0 -475
  210. package/dist/extractor/extractToNative.cjs +0 -369
  211. package/dist/extractor/findTopmostFunction.cjs +0 -43
  212. package/dist/extractor/generatedUid.cjs +0 -58
  213. package/dist/extractor/getPrefixLogs.cjs +0 -31
  214. package/dist/extractor/getPropValueFromAttributes.cjs +0 -85
  215. package/dist/extractor/getSourceModule.cjs +0 -100
  216. package/dist/extractor/getStaticBindingsForScope.cjs +0 -213
  217. package/dist/extractor/getTamaguiConfigPathFromOptionsConfig.cjs +0 -41
  218. package/dist/extractor/hasTopLevelAwait.cjs +0 -62
  219. package/dist/extractor/hoistClassNames.cjs +0 -76
  220. package/dist/extractor/literalToAst.cjs +0 -109
  221. package/dist/extractor/loadFile.cjs +0 -17
  222. package/dist/extractor/loadTamagui.cjs +0 -373
  223. package/dist/extractor/logLines.cjs +0 -43
  224. package/dist/extractor/normalizeTernaries.cjs +0 -100
  225. package/dist/extractor/propsToFontFamilyCache.cjs +0 -42
  226. package/dist/extractor/regenerateConfig.cjs +0 -178
  227. package/dist/extractor/removeUnusedHooks.cjs +0 -108
  228. package/dist/extractor/timer.cjs +0 -52
  229. package/dist/extractor/validHTMLAttributes.cjs +0 -79
  230. package/dist/extractor/watchTamaguiConfig.cjs +0 -70
  231. package/dist/getPragmaOptions.cjs +0 -73
  232. package/dist/helpers/memoize.cjs +0 -45
  233. package/dist/helpers/requireTamaguiCore.cjs +0 -40
  234. package/dist/index.cjs +0 -42
  235. package/dist/registerRequire.cjs +0 -209
  236. package/dist/server.cjs +0 -82
  237. package/dist/types.cjs +0 -18
  238. package/dist/worker.cjs +0 -111
  239. package/src/extractor/accessSafe.ts +0 -22
  240. package/src/extractor/babelParse.ts +0 -38
  241. package/src/extractor/buildClassName.ts +0 -76
  242. package/src/extractor/createEvaluator.ts +0 -82
  243. package/src/extractor/createExtractor.ts +0 -2970
  244. package/src/extractor/createLogger.ts +0 -41
  245. package/src/extractor/ensureImportingConcat.ts +0 -36
  246. package/src/extractor/errors.ts +0 -1
  247. package/src/extractor/evaluateAstNode.ts +0 -136
  248. package/src/extractor/extractHelpers.ts +0 -211
  249. package/src/extractor/extractMediaStyle.ts +0 -194
  250. package/src/extractor/extractToClassNames.ts +0 -733
  251. package/src/extractor/extractToNative.ts +0 -506
  252. package/src/extractor/findTopmostFunction.ts +0 -24
  253. package/src/extractor/generatedUid.ts +0 -41
  254. package/src/extractor/getPrefixLogs.ts +0 -9
  255. package/src/extractor/getPropValueFromAttributes.ts +0 -95
  256. package/src/extractor/getSourceModule.ts +0 -96
  257. package/src/extractor/getStaticBindingsForScope.ts +0 -237
  258. package/src/extractor/hasTopLevelAwait.ts +0 -28
  259. package/src/extractor/hoistClassNames.ts +0 -52
  260. package/src/extractor/literalToAst.ts +0 -85
  261. package/src/extractor/loadFile.ts +0 -17
  262. package/src/extractor/logLines.ts +0 -16
  263. package/src/extractor/normalizeTernaries.ts +0 -89
  264. package/src/extractor/propsToFontFamilyCache.ts +0 -18
  265. package/src/extractor/removeUnusedHooks.ts +0 -83
  266. package/src/extractor/timer.ts +0 -25
  267. package/src/extractor/validHTMLAttributes.ts +0 -52
  268. package/src/worker.ts +0 -142
  269. package/types/extractor/accessSafe.d.ts +0 -3
  270. package/types/extractor/accessSafe.d.ts.map +0 -1
  271. package/types/extractor/babelParse.d.ts +0 -5
  272. package/types/extractor/babelParse.d.ts.map +0 -1
  273. package/types/extractor/buildClassName.d.ts +0 -7
  274. package/types/extractor/buildClassName.d.ts.map +0 -1
  275. package/types/extractor/createEvaluator.d.ts +0 -12
  276. package/types/extractor/createEvaluator.d.ts.map +0 -1
  277. package/types/extractor/createExtractor.d.ts +0 -32
  278. package/types/extractor/createExtractor.d.ts.map +0 -1
  279. package/types/extractor/createLogger.d.ts +0 -3
  280. package/types/extractor/createLogger.d.ts.map +0 -1
  281. package/types/extractor/ensureImportingConcat.d.ts +0 -4
  282. package/types/extractor/ensureImportingConcat.d.ts.map +0 -1
  283. package/types/extractor/errors.d.ts +0 -3
  284. package/types/extractor/errors.d.ts.map +0 -1
  285. package/types/extractor/evaluateAstNode.d.ts +0 -3
  286. package/types/extractor/evaluateAstNode.d.ts.map +0 -1
  287. package/types/extractor/extractHelpers.d.ts +0 -28
  288. package/types/extractor/extractHelpers.d.ts.map +0 -1
  289. package/types/extractor/extractMediaStyle.d.ts +0 -11
  290. package/types/extractor/extractMediaStyle.d.ts.map +0 -1
  291. package/types/extractor/extractToClassNames.d.ts +0 -25
  292. package/types/extractor/extractToClassNames.d.ts.map +0 -1
  293. package/types/extractor/extractToNative.d.ts +0 -13
  294. package/types/extractor/extractToNative.d.ts.map +0 -1
  295. package/types/extractor/findTopmostFunction.d.ts +0 -4
  296. package/types/extractor/findTopmostFunction.d.ts.map +0 -1
  297. package/types/extractor/generatedUid.d.ts +0 -5
  298. package/types/extractor/generatedUid.d.ts.map +0 -1
  299. package/types/extractor/getPrefixLogs.d.ts +0 -3
  300. package/types/extractor/getPrefixLogs.d.ts.map +0 -1
  301. package/types/extractor/getPropValueFromAttributes.d.ts +0 -19
  302. package/types/extractor/getPropValueFromAttributes.d.ts.map +0 -1
  303. package/types/extractor/getSourceModule.d.ts +0 -16
  304. package/types/extractor/getSourceModule.d.ts.map +0 -1
  305. package/types/extractor/getStaticBindingsForScope.d.ts +0 -5
  306. package/types/extractor/getStaticBindingsForScope.d.ts.map +0 -1
  307. package/types/extractor/hasTopLevelAwait.d.ts +0 -2
  308. package/types/extractor/hasTopLevelAwait.d.ts.map +0 -1
  309. package/types/extractor/hoistClassNames.d.ts +0 -6
  310. package/types/extractor/hoistClassNames.d.ts.map +0 -1
  311. package/types/extractor/literalToAst.d.ts +0 -4
  312. package/types/extractor/literalToAst.d.ts.map +0 -1
  313. package/types/extractor/loadFile.d.ts +0 -1
  314. package/types/extractor/loadFile.d.ts.map +0 -1
  315. package/types/extractor/logLines.d.ts +0 -2
  316. package/types/extractor/logLines.d.ts.map +0 -1
  317. package/types/extractor/normalizeTernaries.d.ts +0 -5
  318. package/types/extractor/normalizeTernaries.d.ts.map +0 -1
  319. package/types/extractor/propsToFontFamilyCache.d.ts +0 -4
  320. package/types/extractor/propsToFontFamilyCache.d.ts.map +0 -1
  321. package/types/extractor/removeUnusedHooks.d.ts +0 -3
  322. package/types/extractor/removeUnusedHooks.d.ts.map +0 -1
  323. package/types/extractor/timer.d.ts +0 -5
  324. package/types/extractor/timer.d.ts.map +0 -1
  325. package/types/extractor/validHTMLAttributes.d.ts +0 -52
  326. package/types/extractor/validHTMLAttributes.d.ts.map +0 -1
  327. package/types/worker.d.ts +0 -46
  328. package/types/worker.d.ts.map +0 -1
  329. /package/dist/{setup.cjs → cjs/setup.cjs} +0 -0
@@ -68,12 +68,7 @@ export function concatClassName(_cn: Record<string, any> | null | undefined): st
68
68
  if (propName && propObjects) {
69
69
  if (
70
70
  propObjects.some((po) => {
71
- if (pseudoKey) {
72
- const propKey = pseudoInvert[pseudoKey]
73
- return po && po[propKey] && propName in po[propKey] && po[propKey] !== null
74
- }
75
- const res = po && propName in po && po[propName] !== null
76
- return res
71
+ return po && propName in po && po[propName] !== null
77
72
  })
78
73
  ) {
79
74
  // if (shouldDebug) console.log('debug exclude:', name)
@@ -114,17 +109,15 @@ function getClassNameScope(name: string, splitIndex: number) {
114
109
  return { mediaKey, pseudoKey }
115
110
  }
116
111
 
117
- const pseudoInvert = {
118
- hover: 'hoverStyle',
119
- active: 'pressStyle',
120
- focus: 'focusStyle',
121
- 'focus-visible': 'focusVisibleStyle',
122
- 'focus-within': 'focusWithinStyle',
123
- focusVisible: 'focusVisibleStyle',
124
- focusWithin: 'focusWithinStyle',
125
- disabled: 'disabledStyle',
126
- enter: 'enterStyle',
127
- exit: 'exitStyle',
128
- }
129
-
130
- const pseudoKeys = Object.keys(pseudoInvert).sort((a, b) => b.length - a.length)
112
+ const pseudoKeys = [
113
+ 'focus-visible',
114
+ 'focus-within',
115
+ 'focusVisible',
116
+ 'focusWithin',
117
+ 'disabled',
118
+ 'active',
119
+ 'hover',
120
+ 'focus',
121
+ 'enter',
122
+ 'exit',
123
+ ]
@@ -1,16 +1,17 @@
1
- import { isAbsolute, join } from 'node:path'
1
+ import { isAbsolute, join, resolve } from 'node:path'
2
2
 
3
3
  import { statSync } from 'node:fs'
4
4
  import type { TamaguiOptions } from '../types'
5
5
 
6
6
  export function getTamaguiConfigPathFromOptionsConfig(
7
- config: NonNullable<TamaguiOptions['config']>
7
+ config: NonNullable<TamaguiOptions['config']>,
8
+ root = process.cwd()
8
9
  ) {
9
10
  if (isAbsolute(config)) {
10
11
  return config
11
12
  }
12
13
 
13
- const fullPath = join(process.cwd(), config)
14
+ const fullPath = join(root, config)
14
15
 
15
16
  try {
16
17
  if (statSync(fullPath).isFile()) {
@@ -20,5 +21,5 @@ export function getTamaguiConfigPathFromOptionsConfig(
20
21
  //
21
22
  }
22
23
 
23
- return config
24
+ return resolve(config)
24
25
  }
@@ -1,21 +1,22 @@
1
1
  import { basename, dirname, extname, join, relative, resolve } from 'node:path'
2
+ import { createRequire } from 'node:module'
2
3
  // @ts-ignore why
3
4
  import { Color, colorLog } from '@tamagui/cli-color'
4
5
  import type { CLIResolvedOptions, CLIUserOptions, TamaguiOptions } from '@tamagui/types'
5
6
  import type { TamaguiInternalConfig } from '@tamagui/web'
6
7
  import esbuild from 'esbuild'
7
- import * as esbuildWasm from 'esbuild-wasm'
8
- import * as fsExtra from 'fs-extra'
8
+ import fsExtra from 'fs-extra'
9
9
 
10
- import { SHOULD_DEBUG } from '../constants'
11
10
  import { requireTamaguiCore } from '../helpers/requireTamaguiCore'
12
- import { getNameToPaths, registerRequire } from '../registerRequire'
11
+ import { getNameToPaths, registerRequire, setRequireResult } from '../registerRequire'
13
12
  import {
14
13
  type TamaguiProjectInfo,
14
+ getComponentStaticConfigByName,
15
15
  getBundledConfig,
16
16
  getLoadedConfig,
17
17
  hasBundledConfigChanged,
18
18
  loadComponentsSync,
19
+ setLoadedConfig,
19
20
  writeTamaguiCSS,
20
21
  } from './bundleConfig'
21
22
  import { getTamaguiConfigPathFromOptionsConfig } from './getTamaguiConfigPathFromOptionsConfig'
@@ -25,6 +26,10 @@ import {
25
26
  regenerateConfigSync,
26
27
  } from './regenerateConfig'
27
28
 
29
+ const nodeRequire = createRequire(
30
+ typeof __filename === 'string' ? __filename : import.meta.url
31
+ )
32
+
28
33
  const getFilledOptions = (propsIn: Partial<TamaguiOptions>): TamaguiOptions => ({
29
34
  // defaults
30
35
  platform: (process.env.TAMAGUI_TARGET as any) || 'web',
@@ -36,31 +41,23 @@ const getFilledOptions = (propsIn: Partial<TamaguiOptions>): TamaguiOptions => (
36
41
  let isLoadingPromise: null | Promise<any>
37
42
 
38
43
  export async function loadTamagui(
39
- propsIn: Partial<TamaguiOptions>
44
+ propsIn: Partial<TamaguiOptions>,
45
+ rebuild = false
40
46
  ): Promise<TamaguiProjectInfo | null> {
41
47
  if (isLoadingPromise) return await isLoadingPromise
42
48
 
43
- let resolvePromise
44
- let rejectPromise
45
- isLoadingPromise = new Promise((res, rej) => {
46
- resolvePromise = res
47
- rejectPromise = rej
48
- })
49
-
50
- try {
49
+ isLoadingPromise = (async () => {
51
50
  const props = getFilledOptions(propsIn)
52
51
 
53
- const bundleInfo = await getBundledConfig(props)
52
+ const bundleInfo = await getBundledConfig(props, rebuild)
54
53
  if (!bundleInfo) {
55
- console.warn(
56
- `No bundled config generated, maybe an error in bundling. Set DEBUG=tamagui and re-run to get logs.`
54
+ throw new Error(
55
+ `[tamagui] The config and component bundle completed without a project result`
57
56
  )
58
- resolvePromise(null)
59
- return null
60
57
  }
61
58
 
62
59
  // this affects the bundled config so run it first
63
- await generateThemesAndLog(props)
60
+ await generateThemesAndLog(props, rebuild)
64
61
 
65
62
  // if they accidently pass in a config without createTamagui called,call it
66
63
  const maybeTamaguiConfig = bundleInfo.tamaguiConfig as TamaguiInternalConfig
@@ -70,22 +67,100 @@ export async function loadTamagui(
70
67
  }
71
68
 
72
69
  if (!hasBundledConfigChanged()) {
73
- resolvePromise(bundleInfo)
74
70
  return bundleInfo
75
71
  }
76
72
 
77
73
  await regenerateConfig(props, bundleInfo)
78
74
 
79
- resolvePromise(bundleInfo)
80
75
  return bundleInfo
81
- } catch (err) {
82
- rejectPromise()
83
- throw err
76
+ })()
77
+
78
+ try {
79
+ return await isLoadingPromise
84
80
  } finally {
85
81
  isLoadingPromise = null
86
82
  }
87
83
  }
88
84
 
85
+ export type EvaluatedTamaguiModule = {
86
+ moduleName: string
87
+ module: Record<string, unknown>
88
+ }
89
+
90
+ export type EvaluatedTamaguiProject = {
91
+ config: Record<string, unknown>
92
+ components: EvaluatedTamaguiModule[]
93
+ /**
94
+ * Every file the host's module runner evaluated to produce this config and
95
+ * these components, node_modules included. The compile cache stamp is hashed
96
+ * from their bytes, so an incomplete list is worse than none: omit it and the
97
+ * project simply gets no cache.
98
+ */
99
+ stampSources?: string[]
100
+ }
101
+
102
+ /**
103
+ * Load a Tamagui project from modules evaluated by the host bundler.
104
+ *
105
+ * Bundler adapters with a module runner use this boundary so aliases, package
106
+ * conditions, and user plugins are identical between application and compiler
107
+ * evaluation. Adapters without a module runner continue to use loadTamagui().
108
+ */
109
+ export async function loadTamaguiFromModules(
110
+ propsIn: Partial<TamaguiOptions>,
111
+ evaluated: EvaluatedTamaguiProject
112
+ ): Promise<TamaguiProjectInfo> {
113
+ const props = getFilledOptions(propsIn)
114
+
115
+ await generateThemesAndLog(props)
116
+
117
+ const configModule = evaluated.config as any
118
+ let tamaguiConfig = (configModule.default || configModule.config || configModule) as
119
+ | TamaguiInternalConfig
120
+ | { config?: TamaguiInternalConfig }
121
+
122
+ if ('config' in tamaguiConfig && tamaguiConfig.config && !('tokens' in tamaguiConfig)) {
123
+ tamaguiConfig = tamaguiConfig.config
124
+ }
125
+
126
+ if (!tamaguiConfig) {
127
+ throw new Error(`The Vite module runner did not return a valid Tamagui config`)
128
+ }
129
+
130
+ const hostCore = requireTamaguiCore(props.platform || 'web')
131
+ if (!(tamaguiConfig as TamaguiInternalConfig).parsed) {
132
+ tamaguiConfig = hostCore.createTamagui(tamaguiConfig as any) as TamaguiInternalConfig
133
+ } else {
134
+ // Module runners can evaluate the config in a separate Tamagui module
135
+ // instance. Install the already-parsed config so host module-local state
136
+ // matches without re-parsing it or running browser-only CSS discovery.
137
+ hostCore.installTamaguiConfig(tamaguiConfig as TamaguiInternalConfig)
138
+ }
139
+
140
+ setLoadedConfig(tamaguiConfig as TamaguiInternalConfig)
141
+
142
+ const components = evaluated.components.map(({ moduleName, module }) => {
143
+ setRequireResult(moduleName, module)
144
+ return {
145
+ moduleName,
146
+ nameToInfo: getComponentStaticConfigByName(moduleName, module.default ?? module),
147
+ }
148
+ })
149
+
150
+ const projectInfo = {
151
+ components,
152
+ nameToPaths: {},
153
+ tamaguiConfig: tamaguiConfig as TamaguiInternalConfig,
154
+ stampSources: evaluated.stampSources,
155
+ } satisfies TamaguiProjectInfo
156
+
157
+ if (props.outputCSS) {
158
+ await writeTamaguiCSS(props.outputCSS, projectInfo.tamaguiConfig)
159
+ }
160
+
161
+ return projectInfo
162
+ }
163
+
89
164
  // debounce a bit
90
165
  let waiting = false
91
166
 
@@ -103,7 +178,7 @@ export const generateThemesAndLog = async (options: TamaguiOptions, force = fals
103
178
  colorLog(
104
179
  Color.FgYellow,
105
180
  `${whitespaceBefore}➡ [tamagui] generated themes: ${relative(
106
- process.cwd(),
181
+ options.root || process.cwd(),
107
182
  options.themeBuilder.output
108
183
  )}`
109
184
  )
@@ -123,70 +198,62 @@ export const generateThemesAndLog = async (options: TamaguiOptions, force = fals
123
198
  const last: Record<string, TamaguiProjectInfo | null> = {}
124
199
  const lastVersion: Record<string, string> = {}
125
200
 
126
- // esbuild-wasm state - initialized once per process
127
- let esbuildWasmInitialized = false
201
+ const buildConfigDependencies = new WeakMap<TamaguiOptions, readonly string[]>()
202
+
203
+ export function getTamaguiBuildConfigDependencies(
204
+ options: TamaguiOptions
205
+ ): readonly string[] {
206
+ return buildConfigDependencies.get(options) ?? []
207
+ }
128
208
 
129
209
  /**
130
- * Load tamagui.build.ts config using esbuild-wasm transform
131
- * Uses WASM to avoid native esbuild service lifecycle issues (EPIPE errors)
210
+ * Load tamagui.build.ts and its relative imports as one Node module.
132
211
  */
133
212
  export async function loadTamaguiBuildConfigAsync(
134
213
  tamaguiOptions: Partial<TamaguiOptions> | undefined
135
214
  ): Promise<TamaguiOptions> {
136
215
  const buildFilePath = tamaguiOptions?.buildFile ?? './tamagui.build.ts'
137
- const absolutePath =
138
- buildFilePath[0] === '.' ? join(process.cwd(), buildFilePath) : buildFilePath
216
+ const root = tamaguiOptions?.root || process.cwd()
217
+ const absolutePath = resolve(root, buildFilePath)
139
218
 
140
219
  if (fsExtra.existsSync(absolutePath)) {
141
220
  try {
142
- const source = await fsExtra.readFile(absolutePath, 'utf-8')
143
-
144
- // initialize esbuild-wasm once
145
- if (!esbuildWasmInitialized) {
146
- await esbuildWasm.initialize({})
147
- esbuildWasmInitialized = true
148
- }
149
-
150
- // use esbuild-wasm.transform to compile this one small config file. note
151
- // that in node, even esbuild-wasm's transform spawns a long-lived
152
- // `--service --ping` child via ensureServiceIsRunning, so we tear it down
153
- // below - otherwise every plugin instance leaks a persistent esbuild
154
- // process for the lifetime of the dev server.
155
- const result = await esbuildWasm.transform(source, {
156
- loader: 'ts',
221
+ const result = await esbuild.build({
222
+ entryPoints: [absolutePath],
223
+ absWorkingDir: root,
224
+ bundle: true,
225
+ packages: 'external',
226
+ platform: 'node',
157
227
  format: 'cjs',
158
228
  target: 'node18',
159
- sourcefile: absolutePath,
229
+ write: false,
230
+ metafile: true,
160
231
  })
161
232
 
162
- // evaluate the compiled code to get the exports
163
- // pass process so process.env works in the config
164
233
  const module = { exports: {} as any }
165
- const fn = new Function('module', 'exports', 'require', 'process', result.code)
166
- fn(module, module.exports, require, process)
234
+ const projectRequire = createRequire(absolutePath)
235
+ const code = result.outputFiles[0]?.text
236
+ if (!code) throw new Error(`No output generated for ${buildFilePath}`)
237
+ const fn = new Function('module', 'exports', 'require', 'process', code)
238
+ fn(module, module.exports, projectRequire, process)
167
239
 
168
240
  const out = module.exports.default || module.exports
169
241
  if (!out || typeof out !== 'object') {
170
242
  throw new Error(`No default export found in ${buildFilePath}: ${out}`)
171
243
  }
172
244
 
173
- tamaguiOptions = {
245
+ const loadedOptions = {
174
246
  ...tamaguiOptions,
175
247
  ...out,
176
- }
248
+ } as TamaguiOptions
249
+ const dependencies = Object.keys(result.metafile.inputs).map((input) =>
250
+ resolve(root, input)
251
+ )
252
+ buildConfigDependencies.set(loadedOptions, dependencies)
253
+ tamaguiOptions = loadedOptions
177
254
  } catch (err) {
178
255
  console.error(`[tamagui] Error loading ${buildFilePath}:`, err)
179
256
  throw err
180
- } finally {
181
- // this is a one-shot transform - don't keep the esbuild-wasm service
182
- // running for the rest of the process. it gets lazily re-spawned if
183
- // transform is ever called again.
184
- try {
185
- esbuildWasm.stop()
186
- esbuildWasmInitialized = false
187
- } catch {
188
- // ok - service may already be gone
189
- }
190
257
  }
191
258
  }
192
259
 
@@ -196,11 +263,14 @@ export async function loadTamaguiBuildConfigAsync(
196
263
  )
197
264
  }
198
265
 
199
- return {
266
+ const options = {
200
267
  config: 'tamagui.config.ts',
201
268
  components: ['tamagui', '@tamagui/core'],
202
269
  ...tamaguiOptions,
203
270
  } as TamaguiOptions
271
+ const dependencies = buildConfigDependencies.get(tamaguiOptions)
272
+ if (dependencies) buildConfigDependencies.set(options, dependencies)
273
+ return options
204
274
  }
205
275
 
206
276
  /**
@@ -210,12 +280,14 @@ export function loadTamaguiBuildConfigSync(
210
280
  tamaguiOptions: Partial<TamaguiOptions> | undefined
211
281
  ) {
212
282
  const buildFilePath = tamaguiOptions?.buildFile ?? './tamagui.build.ts'
213
- if (fsExtra.existsSync(buildFilePath)) {
214
- const registered = registerRequire('web')
283
+ const root = tamaguiOptions?.root || process.cwd()
284
+ const absolutePath = resolve(root, buildFilePath)
285
+ if (fsExtra.existsSync(absolutePath)) {
286
+ const registered = registerRequire('web', {
287
+ ignoredModules: tamaguiOptions?.dangerouslyIgnoreStaticEvaluationModules,
288
+ })
215
289
  try {
216
- const out = require(
217
- buildFilePath[0] === '.' ? join(process.cwd(), buildFilePath) : buildFilePath
218
- ).default
290
+ const out = nodeRequire(absolutePath).default
219
291
  if (!out) {
220
292
  throw new Error(`No default export found in ${buildFilePath}: ${out}`)
221
293
  }
@@ -260,6 +332,9 @@ export function loadTamaguiSync({
260
332
  lastVersion[key] = cacheKey || ''
261
333
 
262
334
  const props = getFilledOptions(propsIn)
335
+ const previousIsStatic = process.env.IS_STATIC
336
+ const previousIsServer = process.env.TAMAGUI_IS_SERVER
337
+ const previousDev = globalThis['__DEV__' as any]
263
338
 
264
339
  // lets shim require and avoid importing react-native + react-native-web
265
340
  // we just need to read the config around them
@@ -267,97 +342,76 @@ export function loadTamaguiSync({
267
342
  process.env.TAMAGUI_IS_SERVER = 'true'
268
343
 
269
344
  const { unregister } = registerRequire(props.platform || 'web', {
270
- proxyWormImports: !!forceExports,
345
+ ignoredModules: props.dangerouslyIgnoreStaticEvaluationModules,
271
346
  })
272
347
 
273
348
  try {
274
- const devValueOG = globalThis['__DEV__' as any]
275
349
  globalThis['__DEV__' as any] = process.env.NODE_ENV === 'development'
350
+ // config
351
+ let tamaguiConfig: TamaguiInternalConfig | null = null
352
+ if (propsIn.config) {
353
+ const configPath = getTamaguiConfigPathFromOptionsConfig(
354
+ propsIn.config,
355
+ propsIn.root
356
+ )
357
+ const exp = nodeRequire(configPath)
276
358
 
277
- try {
278
- // config
279
- let tamaguiConfig: TamaguiInternalConfig | null = null
280
- if (propsIn.config) {
281
- const configPath = getTamaguiConfigPathFromOptionsConfig(propsIn.config)
282
- const exp = require(configPath)
283
-
284
- if (!exp || exp._isProxyWorm) {
285
- throw new Error(`Got a empty / proxied config!`)
286
- }
359
+ if (!exp) {
360
+ throw new Error(`The Tamagui config module did not export a value`)
361
+ }
287
362
 
288
- tamaguiConfig = (exp['default'] || exp['config'] || exp) as TamaguiInternalConfig
363
+ tamaguiConfig = (exp['default'] || exp['config'] || exp) as TamaguiInternalConfig
289
364
 
290
- if (!tamaguiConfig || !tamaguiConfig.parsed) {
291
- const confPath = require.resolve(configPath)
292
- throw new Error(`Can't find valid config in ${confPath}:
365
+ if (!tamaguiConfig || !tamaguiConfig.parsed) {
366
+ const confPath = nodeRequire.resolve(configPath)
367
+ throw new Error(`Can't find valid config in ${confPath}:
293
368
 
294
369
  Be sure you "export default" or "export const config" the config.`)
295
- }
296
-
297
- // set up core
298
- if (tamaguiConfig) {
299
- const { createTamagui } = requireTamaguiCore(props.platform || 'web')
300
- createTamagui(tamaguiConfig as any)
301
- }
302
370
  }
303
371
 
304
- // components
305
- const components = loadComponentsSync(props, forceExports)
306
- if (!components) {
307
- throw new Error(`No components loaded`)
308
- }
309
- if (process.env.DEBUG === 'tamagui') {
310
- console.info(`components`, components)
372
+ // set up core
373
+ if (tamaguiConfig) {
374
+ const { createTamagui } = requireTamaguiCore(props.platform || 'web')
375
+ createTamagui(tamaguiConfig as any)
311
376
  }
377
+ }
312
378
 
313
- // undo shims
314
- process.env.IS_STATIC = undefined
315
- globalThis['__DEV__' as any] = devValueOG
316
-
317
- const info = {
318
- components,
319
- tamaguiConfig,
320
- nameToPaths: getNameToPaths(),
321
- } satisfies TamaguiProjectInfo
322
-
323
- if (tamaguiConfig) {
324
- const { outputCSS } = props
325
- if (outputCSS) {
326
- writeTamaguiCSS(outputCSS, tamaguiConfig)
327
- }
379
+ // components
380
+ const components = loadComponentsSync(props, forceExports)
381
+ if (!components) {
382
+ throw new Error(`No components loaded`)
383
+ }
384
+ if (process.env.DEBUG === 'tamagui') {
385
+ console.info(`components`, components)
386
+ }
328
387
 
329
- regenerateConfigSync(props, info)
330
- }
388
+ const info = {
389
+ components,
390
+ tamaguiConfig,
391
+ nameToPaths: getNameToPaths(),
392
+ } satisfies TamaguiProjectInfo
331
393
 
332
- last[key] = {
333
- ...info,
334
- cached: true,
394
+ if (tamaguiConfig) {
395
+ const { outputCSS } = props
396
+ if (outputCSS) {
397
+ writeTamaguiCSS(outputCSS, tamaguiConfig)
335
398
  }
336
399
 
337
- return info as any
338
- } catch (err) {
339
- if (err instanceof Error) {
340
- if (!SHOULD_DEBUG && !forceExports) {
341
- console.warn(
342
- `Error loading tamagui.config.ts (set DEBUG=tamagui to see full stack), running tamagui without custom config`
343
- )
344
- console.info(`\n\n ${err.message}\n\n`)
345
- } else {
346
- if (SHOULD_DEBUG) {
347
- console.error(err)
348
- }
349
- }
350
- } else {
351
- console.error(`Error loading tamagui.config.ts`, err)
352
- }
400
+ regenerateConfigSync(props, info)
401
+ }
353
402
 
354
- return {
355
- components: [],
356
- tamaguiConfig: null,
357
- nameToPaths: {},
358
- }
403
+ last[key] = {
404
+ ...info,
405
+ cached: true,
359
406
  }
407
+
408
+ return info as any
360
409
  } finally {
410
+ if (previousIsStatic === undefined) delete process.env.IS_STATIC
411
+ else process.env.IS_STATIC = previousIsStatic
412
+ if (previousIsServer === undefined) delete process.env.TAMAGUI_IS_SERVER
413
+ else process.env.TAMAGUI_IS_SERVER = previousIsServer
414
+ globalThis['__DEV__' as any] = previousDev
361
415
  unregister()
362
416
  }
363
417
  }
@@ -404,7 +458,7 @@ export async function getOptions({
404
458
 
405
459
  export function resolveWebOrNativeSpecificEntry(entry: string, platform?: string) {
406
460
  const workspaceRoot = resolve()
407
- const resolved = require.resolve(entry, { paths: [workspaceRoot] })
461
+ const resolved = nodeRequire.resolve(entry, { paths: [workspaceRoot] })
408
462
  const ext = extname(resolved)
409
463
  const fileName = basename(resolved).replace(ext, '')
410
464
  const target = platform || process.env.TAMAGUI_TARGET || 'web'
@@ -458,9 +512,8 @@ export async function esbuildWatchFiles(entry: string, onChanged: () => void) {
458
512
  write: false,
459
513
 
460
514
  alias: {
461
- '@react-native/normalize-color': '@tamagui/proxy-worm',
462
515
  'react-native-web': '@tamagui/react-native-web-lite',
463
- 'react-native': '@tamagui/proxy-worm',
516
+ 'react-native': '@tamagui/react-native-web-lite',
464
517
  },
465
518
 
466
519
  plugins: [