@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
package/src/constants.ts CHANGED
@@ -1,13 +1,8 @@
1
- import findCacheDir from 'find-cache-dir'
2
-
3
1
  export const CSS_FILE_NAME = '__snack.css'
4
2
 
5
3
  // ENSURE THIS ISNT THE SAME AS THE SEPARATOR USED FOR STYLE KEYS
6
4
  export const MEDIA_SEP = '_'
7
5
 
8
- // ensure cache dir
9
- export const cacheDir = findCacheDir({ name: 'tamagui', create: true })
10
-
11
6
  export const FAILED_EVAL = Symbol('failed_style_eval')
12
7
 
13
8
  export const SHOULD_DEBUG =
@@ -0,0 +1,170 @@
1
+ import {
2
+ ATTRIBUTES,
3
+ EVENTS,
4
+ NATIVE_BACKING,
5
+ TAGS,
6
+ type PropTags,
7
+ type TagName,
8
+ } from '@tamagui/dom'
9
+ import {
10
+ localBailout,
11
+ type BailoutReason,
12
+ type MaterializedElement,
13
+ type MaterializedModule,
14
+ type SourceEdit,
15
+ type StructuralModulePass,
16
+ } from '@tamagui/compiler-core'
17
+ import { createHash } from 'node:crypto'
18
+
19
+ const DOM_FRONTENDS = new Set([
20
+ 'tamagui',
21
+ 'tamagui/dom',
22
+ '@tamagui/core',
23
+ '@tamagui/core/dom',
24
+ '@tamagui/tailwind',
25
+ ])
26
+
27
+ const acceptsTag = (accepted: PropTags, tag: TagName) =>
28
+ accepted === '*' || accepted.includes(tag)
29
+
30
+ function isDOMElement(element: MaterializedElement) {
31
+ const provenance = element.component.provenance
32
+ return provenance?.importedName === 'html' && DOM_FRONTENDS.has(provenance.specifier)
33
+ }
34
+
35
+ const versionHash = createHash('sha256')
36
+ .update(
37
+ JSON.stringify({
38
+ ATTRIBUTES,
39
+ EVENTS,
40
+ NATIVE_BACKING,
41
+ TAGS,
42
+ })
43
+ )
44
+ .digest('hex')
45
+
46
+ export const domStructuralPass: StructuralModulePass = {
47
+ versionHash: `dom-structural-v3-${versionHash}`,
48
+ transform({ module, source, target }) {
49
+ const edits: SourceEdit[] = []
50
+ const diagnostics: BailoutReason[] = []
51
+ const domElements = module.elements.filter(isDOMElement)
52
+ const supportedDOMElements = domElements.filter(
53
+ (
54
+ element
55
+ ): element is MaterializedElement & {
56
+ component: MaterializedElement['component'] & { name: TagName }
57
+ } => Object.hasOwn(TAGS, element.component.name)
58
+ )
59
+ const domBySpan = new Map(
60
+ supportedDOMElements.map((element) => [
61
+ `${element.span.start}:${element.span.end}`,
62
+ element,
63
+ ])
64
+ )
65
+
66
+ for (const element of domElements) {
67
+ const tagName = element.component.name as TagName
68
+ if (!Object.hasOwn(TAGS, tagName)) {
69
+ diagnostics.push(
70
+ localBailout(
71
+ 'local/unsupported-target',
72
+ element.component.span,
73
+ `html.${element.component.name} is not part of the Tamagui DOM contract`
74
+ )
75
+ )
76
+ continue
77
+ }
78
+ const tag = TAGS[tagName]
79
+ if (target === 'native' && tag.native === 'none') {
80
+ diagnostics.push(
81
+ localBailout(
82
+ 'local/unsupported-target',
83
+ element.component.span,
84
+ `html.${tagName} is not supported on native: ${tag.note ?? 'no native backing'}`
85
+ )
86
+ )
87
+ continue
88
+ }
89
+
90
+ for (const entry of element.entries) {
91
+ if (entry.kind !== 'prop') continue
92
+ const attribute =
93
+ (Object.hasOwn(ATTRIBUTES, entry.name) ? ATTRIBUTES[entry.name] : undefined) ??
94
+ (entry.name.startsWith('data-') ? ATTRIBUTES['data-*'] : undefined)
95
+ const event = Object.hasOwn(EVENTS, entry.name) ? EVENTS[entry.name] : undefined
96
+ const row = attribute ?? event
97
+ if (!row) continue
98
+ if (!acceptsTag(row.tags, tagName)) {
99
+ diagnostics.push(
100
+ localBailout(
101
+ 'local/unsupported-prop-key',
102
+ entry.span,
103
+ `${entry.name} is not supported on html.${tagName}`
104
+ )
105
+ )
106
+ continue
107
+ }
108
+ if (target === 'native' && row.native === 'none') {
109
+ if (event) continue
110
+ diagnostics.push(
111
+ localBailout(
112
+ 'local/unsupported-prop-key',
113
+ entry.span,
114
+ `${entry.name} is not supported on native html.${tagName}: ${row.note ?? 'no native equivalent'}`
115
+ )
116
+ )
117
+ }
118
+ }
119
+
120
+ for (const entry of element.entries) {
121
+ if (entry.kind !== 'child' || entry.value.kind !== 'element') continue
122
+ const child = domBySpan.get(`${entry.value.span.start}:${entry.value.span.end}`)
123
+ if (!child) continue
124
+ const childTag = child.component.name
125
+ const invalid =
126
+ tag.content === 'void' ||
127
+ tag.content === 'text' ||
128
+ (tag.content === 'phrasing' && TAGS[childTag].display === 'block') ||
129
+ (tag.content === 'tags' && !tag.childTags?.includes(childTag))
130
+ if (invalid) {
131
+ diagnostics.push(
132
+ localBailout(
133
+ 'local/unsupported-child',
134
+ child.component.span,
135
+ `html.${childTag} cannot be nested directly inside html.${tagName}`
136
+ )
137
+ )
138
+ }
139
+ }
140
+ }
141
+
142
+ for (const definition of module.domStyleDefinitions) {
143
+ if (definition.value.kind !== 'static') {
144
+ diagnostics.push(
145
+ localBailout(
146
+ 'local/dynamic-style-value',
147
+ definition.value.span,
148
+ `style() definition ${definition.name} must be statically evaluable`
149
+ )
150
+ )
151
+ continue
152
+ }
153
+ edits.push({
154
+ start: definition.span.start,
155
+ end: definition.span.end,
156
+ content: 'undefined',
157
+ origin: definition.span,
158
+ })
159
+ }
160
+
161
+ const nextModule: MaterializedModule = module
162
+ return {
163
+ module: nextModule,
164
+ edits,
165
+ imports: [],
166
+ diagnostics,
167
+ dependencies: [],
168
+ }
169
+ },
170
+ }
package/src/exports.ts CHANGED
@@ -1,16 +1,13 @@
1
1
  export * from './checkDeps'
2
+ export * from './compilerHost'
3
+ export * from './compiler'
2
4
  export * from './types'
3
- export { createExtractor } from './extractor/createExtractor'
4
- export { literalToAst } from './extractor/literalToAst'
5
5
  export * from './constants'
6
- export * from './extractor/extractToClassNames'
7
6
  export * from './extractor/concatClassName'
8
- export * from './extractor/extractToNative'
9
- export * from './extractor/extractHelpers'
10
7
  export * from './extractor/loadTamagui'
11
8
  export * from './extractor/watchTamaguiConfig'
12
- export * from './extractor/createLogger'
13
9
  export * from './registerRequire'
14
10
  export { detectModuleFormat, clearFormatCache } from './extractor/detectModuleFormat'
15
11
  export { esbundleTamaguiConfig } from './extractor/bundle'
16
12
  export * from './getPragmaOptions'
13
+ export * from './zero'
@@ -0,0 +1,49 @@
1
+ import {
2
+ childNode,
3
+ childNodes,
4
+ identifierName,
5
+ parseModuleAst,
6
+ } from '@tamagui/compiler-core'
7
+
8
+ function declarationName(node: ReturnType<typeof childNode>): string | null {
9
+ return identifierName(node ? childNode(node, 'id') : null)
10
+ }
11
+
12
+ /** Adds exports used only while evaluating local component modules. */
13
+ export function addLocalExports(source: string, id?: string): string {
14
+ const program = parseModuleAst(source, id)
15
+ const usedNames = new Set<string>()
16
+ const candidates: string[] = []
17
+
18
+ for (const statement of childNodes(program, 'body')) {
19
+ if (statement.type === 'ExportNamedDeclaration') {
20
+ for (const specifier of childNodes(statement, 'specifiers')) {
21
+ const exported = childNode(specifier, 'exported')
22
+ const name = identifierName(exported)
23
+ if (name) usedNames.add(name)
24
+ }
25
+ const declaration = childNode(statement, 'declaration')
26
+ if (declaration?.type === 'VariableDeclaration') {
27
+ for (const declarator of childNodes(declaration, 'declarations')) {
28
+ const name = declarationName(declarator)
29
+ if (name) usedNames.add(name)
30
+ }
31
+ } else {
32
+ const name = declarationName(declaration)
33
+ if (name) usedNames.add(name)
34
+ }
35
+ continue
36
+ }
37
+
38
+ if (statement.type !== 'VariableDeclaration') continue
39
+ const declarations = childNodes(statement, 'declarations')
40
+ if (declarations.length !== 1) continue
41
+ const declaration = declarations[0]!
42
+ const name = declarationName(declaration)
43
+ if (!name || !childNode(declaration, 'init') || usedNames.has(name)) continue
44
+ candidates.push(name)
45
+ }
46
+
47
+ const names = candidates.filter((name) => !usedNames.has(name))
48
+ return names.length ? `${source}\nexport { ${names.join(', ')} }\n` : source
49
+ }
@@ -1,13 +1,19 @@
1
+ import { randomBytes } from 'node:crypto'
1
2
  import { readFileSync } from 'node:fs'
3
+ import { createRequire } from 'node:module'
2
4
  import esbuild from 'esbuild'
3
- import * as FS from 'fs-extra'
5
+ import FS from 'fs-extra'
4
6
  import type { TamaguiPlatform } from '../types'
7
+ import { staticEvaluationIgnorePlugin } from '../staticEvaluationIgnoredModules'
5
8
  import { detectModuleFormat } from './detectModuleFormat'
6
9
  import { esbuildAliasPlugin } from './esbuildAliasPlugin'
7
- import { hasTopLevelAwait } from './hasTopLevelAwait'
8
10
  import { resolveWebOrNativeSpecificEntry } from './loadTamagui'
9
11
  import { TsconfigPathsPlugin } from './esbuildTsconfigPaths'
10
12
 
13
+ const nodeRequire = createRequire(
14
+ typeof __filename === 'string' ? __filename : import.meta.url
15
+ )
16
+
11
17
  export const esbuildLoaderConfig = {
12
18
  '.js': 'jsx',
13
19
  '.png': 'dataurl',
@@ -50,12 +56,14 @@ type Props = Omit<Partial<esbuild.BuildOptions>, 'entryPoints'> & {
50
56
  outfile: string
51
57
  entryPoints: string[]
52
58
  resolvePlatformSpecificEntries?: boolean
59
+ dangerouslyIgnoreStaticEvaluationModules?: string[]
53
60
  }
54
61
 
55
62
  function getESBuildConfig(
56
63
  {
57
64
  entryPoints,
58
65
  resolvePlatformSpecificEntries,
66
+ dangerouslyIgnoreStaticEvaluationModules = [],
59
67
  define: callerDefine,
60
68
  ...options
61
69
  }: Props,
@@ -134,6 +142,7 @@ function getESBuildConfig(
134
142
  logLevel: 'warning',
135
143
  plugins: [
136
144
  TsconfigPathsPlugin(),
145
+ staticEvaluationIgnorePlugin(dangerouslyIgnoreStaticEvaluationModules),
137
146
 
138
147
  // handle ESM-only features that can't be used with CJS output
139
148
  {
@@ -175,19 +184,6 @@ function getESBuildConfig(
175
184
  modified = true
176
185
  }
177
186
 
178
- // stub files with top-level await - they're typically runtime-only
179
- if (hasTopLevelAwait(contents, args.path)) {
180
- if (process.env.DEBUG?.startsWith('tamagui')) {
181
- console.info(`[tamagui] stubbing file with top-level await: ${args.path}`)
182
- }
183
- return {
184
- // Keep this as an ESM-shaped stub so esbuild doesn't inline a
185
- // top-level `module.exports = {}` into the parent bundle.
186
- contents: `// stubbed - contains top-level await\nexport default {}`,
187
- loader: 'js',
188
- }
189
- }
190
-
191
187
  if (modified) {
192
188
  return {
193
189
  contents,
@@ -209,10 +205,8 @@ function getESBuildConfig(
209
205
  {
210
206
  name: 'external',
211
207
  setup(build) {
212
- const proxyWormPath = require.resolve('@tamagui/proxy-worm')
213
-
214
208
  // only externalize @tamagui/core and @tamagui/web - these are provided at runtime
215
- // other @tamagui/* packages (like @tamagui/config/v3) must be bundled in to avoid
209
+ // other @tamagui/* packages (like @tamagui/config/v6) must be bundled in to avoid
216
210
  // ESM race conditions when multiple threads require() them concurrently
217
211
  build.onResolve({ filter: /^@tamagui\/(core|web)$/ }, (args) => {
218
212
  if (args.kind === 'entry-point') {
@@ -231,25 +225,13 @@ function getESBuildConfig(
231
225
  }
232
226
  })
233
227
 
234
- build.onResolve({ filter: /^(react-native|react-native\/.*)$/ }, () => {
228
+ build.onResolve({ filter: /^(react-native|react-native\/.*)$/ }, (args) => {
235
229
  return {
236
- path: '@tamagui/react-native-web-lite',
230
+ path: args.path.replace(/^react-native/, '@tamagui/react-native-web-lite'),
237
231
  external: true,
238
232
  }
239
233
  })
240
234
 
241
- build.onResolve({ filter: /^react-native-reanimated(?:\/.*)?$/ }, () => {
242
- return {
243
- path: proxyWormPath,
244
- }
245
- })
246
-
247
- build.onResolve({ filter: /^react-native-worklets(?:\/.*)?$/ }, () => {
248
- return {
249
- path: proxyWormPath,
250
- }
251
- })
252
-
253
235
  // externalize animation libraries - not needed for static extraction
254
236
  build.onResolve({ filter: /^(framer-motion|motion)/ }, (args) => {
255
237
  return {
@@ -276,7 +258,7 @@ function detectEntryFormat(entryPoint: string): esbuild.BuildOptions['format'] {
276
258
  }
277
259
  // bare module specifier - check package.json type field
278
260
  try {
279
- const pkgJsonPath = require.resolve(entryPoint + '/package.json')
261
+ const pkgJsonPath = nodeRequire.resolve(entryPoint + '/package.json')
280
262
  const pkg = JSON.parse(readFileSync(pkgJsonPath, 'utf-8'))
281
263
  return pkg.type === 'module' ? 'esm' : 'cjs'
282
264
  } catch {
@@ -292,8 +274,11 @@ export async function esbundleTamaguiConfig(
292
274
  const config = getESBuildConfig(props, platform, aliases)
293
275
 
294
276
  // build to memory first, then write atomically (temp file + rename)
295
- // to prevent other threads from reading partially-written files
296
- const tmpFile = props.outfile + '.tmp.' + process.pid
277
+ // to prevent other threads from reading partially-written files.
278
+ // The suffix is per call, not per process: two bundles of the same config in
279
+ // one process shared a temp path, and whichever renamed first left the other
280
+ // renaming a file that no longer existed.
281
+ const tmpFile = `${props.outfile}.tmp.${process.pid}-${randomBytes(6).toString('hex')}`
297
282
  const result = await esbuild.build({
298
283
  ...config,
299
284
  outfile: tmpFile,