@tamagui/static 2.7.7 → 3.0.0-beta.1097.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 (335) hide show
  1. package/dist/cjs/check-dep-versions.cjs +354 -0
  2. package/dist/cjs/checkDeps.cjs +301 -0
  3. package/dist/cjs/compiler.cjs +349 -0
  4. package/dist/cjs/compilerHost.cjs +2287 -0
  5. package/dist/cjs/componentDiscovery.cjs +94 -0
  6. package/dist/cjs/constants.cjs +32 -0
  7. package/dist/cjs/domStructuralPass.cjs +121 -0
  8. package/dist/cjs/exports.cjs +44 -0
  9. package/dist/cjs/extractor/addLocalExports.cjs +63 -0
  10. package/dist/cjs/extractor/bundle.cjs +229 -0
  11. package/dist/cjs/extractor/bundleConfig.cjs +769 -0
  12. package/dist/cjs/extractor/concatClassName.cjs +120 -0
  13. package/dist/cjs/extractor/detectModuleFormat.cjs +53 -0
  14. package/dist/cjs/extractor/esbuildAliasPlugin.cjs +46 -0
  15. package/dist/cjs/extractor/esbuildTsconfigPaths.cjs +91 -0
  16. package/dist/cjs/extractor/getTamaguiConfigPathFromOptionsConfig.cjs +42 -0
  17. package/dist/cjs/extractor/loadTamagui.cjs +394 -0
  18. package/dist/cjs/extractor/regenerateConfig.cjs +160 -0
  19. package/dist/cjs/extractor/watchTamaguiConfig.cjs +63 -0
  20. package/dist/cjs/getPragmaOptions.cjs +66 -0
  21. package/dist/cjs/helpers/memoize.cjs +41 -0
  22. package/dist/cjs/helpers/requireTamaguiCore.cjs +39 -0
  23. package/dist/cjs/index.cjs +33 -0
  24. package/dist/cjs/registerRequire.cjs +219 -0
  25. package/dist/cjs/server.cjs +65 -0
  26. package/dist/cjs/staticEvaluationIgnoredModules.cjs +85 -0
  27. package/dist/cjs/types.cjs +16 -0
  28. package/dist/cjs/zero/artifact.cjs +144 -0
  29. package/dist/cjs/zero/graph.cjs +208 -0
  30. package/dist/cjs/zero/identity.cjs +60 -0
  31. package/dist/cjs/zero/index.cjs +33 -0
  32. package/dist/cjs/zero/islands.cjs +235 -0
  33. package/dist/cjs/zero/options.cjs +162 -0
  34. package/dist/cjs/zero/ownership.cjs +78 -0
  35. package/dist/cjs/zero/theme.cjs +337 -0
  36. package/dist/cjs/zero/transform.cjs +207 -0
  37. package/dist/esm/check-dep-versions.mjs +329 -0
  38. package/dist/esm/check-dep-versions.mjs.map +1 -0
  39. package/dist/esm/checkDeps.mjs +279 -0
  40. package/dist/esm/checkDeps.mjs.map +1 -0
  41. package/dist/esm/compiler.mjs +319 -0
  42. package/dist/esm/compiler.mjs.map +1 -0
  43. package/dist/esm/compilerHost.mjs +2265 -0
  44. package/dist/esm/compilerHost.mjs.map +1 -0
  45. package/dist/esm/componentDiscovery.mjs +69 -0
  46. package/dist/esm/componentDiscovery.mjs.map +1 -0
  47. package/dist/esm/constants.mjs +7 -0
  48. package/dist/esm/constants.mjs.map +1 -0
  49. package/dist/esm/domStructuralPass.mjs +102 -0
  50. package/dist/esm/domStructuralPass.mjs.map +1 -0
  51. package/dist/esm/exports.mjs +29 -0
  52. package/dist/esm/extractor/addLocalExports.mjs +44 -0
  53. package/dist/esm/extractor/addLocalExports.mjs.map +1 -0
  54. package/dist/esm/extractor/bundle.mjs +199 -0
  55. package/dist/esm/extractor/bundle.mjs.map +1 -0
  56. package/dist/esm/extractor/bundleConfig.mjs +728 -0
  57. package/dist/esm/extractor/bundleConfig.mjs.map +1 -0
  58. package/dist/esm/extractor/concatClassName.mjs +100 -0
  59. package/dist/esm/extractor/concatClassName.mjs.map +1 -0
  60. package/dist/esm/extractor/detectModuleFormat.mjs +31 -0
  61. package/dist/esm/extractor/detectModuleFormat.mjs.map +1 -0
  62. package/dist/esm/extractor/esbuildAliasPlugin.mjs +26 -0
  63. package/dist/esm/extractor/esbuildAliasPlugin.mjs.map +1 -0
  64. package/dist/esm/extractor/esbuildTsconfigPaths.mjs +63 -0
  65. package/dist/esm/extractor/esbuildTsconfigPaths.mjs.map +1 -0
  66. package/dist/esm/extractor/getTamaguiConfigPathFromOptionsConfig.mjs +23 -0
  67. package/dist/esm/extractor/getTamaguiConfigPathFromOptionsConfig.mjs.map +1 -0
  68. package/dist/esm/extractor/loadTamagui.mjs +357 -0
  69. package/dist/esm/extractor/loadTamagui.mjs.map +1 -0
  70. package/dist/esm/extractor/regenerateConfig.mjs +131 -0
  71. package/dist/esm/extractor/regenerateConfig.mjs.map +1 -0
  72. package/dist/esm/extractor/watchTamaguiConfig.mjs +43 -0
  73. package/dist/esm/extractor/watchTamaguiConfig.mjs.map +1 -0
  74. package/dist/esm/getPragmaOptions.mjs +46 -0
  75. package/dist/esm/getPragmaOptions.mjs.map +1 -0
  76. package/dist/esm/helpers/memoize.mjs +21 -0
  77. package/dist/esm/helpers/memoize.mjs.map +1 -0
  78. package/dist/esm/helpers/requireTamaguiCore.mjs +19 -0
  79. package/dist/esm/helpers/requireTamaguiCore.mjs.map +1 -0
  80. package/dist/esm/index.mjs +8 -0
  81. package/dist/esm/index.mjs.map +1 -0
  82. package/dist/esm/registerRequire.mjs +195 -0
  83. package/dist/esm/registerRequire.mjs.map +1 -0
  84. package/dist/esm/server.mjs +40 -0
  85. package/dist/esm/server.mjs.map +1 -0
  86. package/dist/esm/setup.mjs +0 -0
  87. package/dist/esm/staticEvaluationIgnoredModules.mjs +61 -0
  88. package/dist/esm/staticEvaluationIgnoredModules.mjs.map +1 -0
  89. package/dist/esm/types.mjs +0 -0
  90. package/dist/esm/zero/artifact.mjs +119 -0
  91. package/dist/esm/zero/artifact.mjs.map +1 -0
  92. package/dist/esm/zero/graph.mjs +170 -0
  93. package/dist/esm/zero/graph.mjs.map +1 -0
  94. package/dist/esm/zero/identity.mjs +36 -0
  95. package/dist/esm/zero/identity.mjs.map +1 -0
  96. package/dist/esm/zero/index.mjs +19 -0
  97. package/dist/esm/zero/islands.mjs +201 -0
  98. package/dist/esm/zero/islands.mjs.map +1 -0
  99. package/dist/esm/zero/options.mjs +129 -0
  100. package/dist/esm/zero/options.mjs.map +1 -0
  101. package/dist/esm/zero/ownership.mjs +48 -0
  102. package/dist/esm/zero/ownership.mjs.map +1 -0
  103. package/dist/esm/zero/theme.mjs +313 -0
  104. package/dist/esm/zero/theme.mjs.map +1 -0
  105. package/dist/esm/zero/transform.mjs +182 -0
  106. package/dist/esm/zero/transform.mjs.map +1 -0
  107. package/package.json +38 -47
  108. package/src/check-dep-versions.ts +2 -2
  109. package/src/checkDeps.ts +3 -2
  110. package/src/compiler.ts +506 -0
  111. package/src/compilerHost.ts +3739 -0
  112. package/src/componentDiscovery.ts +105 -0
  113. package/src/constants.ts +0 -5
  114. package/src/domStructuralPass.ts +190 -0
  115. package/src/exports.ts +5 -6
  116. package/src/extractor/addLocalExports.ts +49 -0
  117. package/src/extractor/bundle.ts +38 -40
  118. package/src/extractor/bundleConfig.ts +368 -187
  119. package/src/extractor/concatClassName.ts +21 -24
  120. package/src/extractor/getTamaguiConfigPathFromOptionsConfig.ts +13 -5
  121. package/src/extractor/loadTamagui.ts +196 -143
  122. package/src/extractor/regenerateConfig.ts +65 -13
  123. package/src/extractor/watchTamaguiConfig.ts +6 -1
  124. package/src/helpers/requireTamaguiCore.ts +6 -1
  125. package/src/registerRequire.ts +94 -132
  126. package/src/staticEvaluationIgnoredModules.ts +74 -0
  127. package/src/types.ts +2 -107
  128. package/src/zero/artifact.ts +142 -0
  129. package/src/zero/graph.ts +359 -0
  130. package/src/zero/identity.ts +73 -0
  131. package/src/zero/index.ts +9 -0
  132. package/src/zero/islands.ts +266 -0
  133. package/src/zero/options.ts +239 -0
  134. package/src/zero/ownership.ts +113 -0
  135. package/src/zero/theme.ts +526 -0
  136. package/src/zero/transform.ts +329 -0
  137. package/types/check-dep-versions.d.ts.map +1 -1
  138. package/types/checkDeps.d.ts.map +1 -1
  139. package/types/compiler.d.ts +134 -0
  140. package/types/compiler.d.ts.map +1 -0
  141. package/types/compilerHost.d.ts +38 -0
  142. package/types/compilerHost.d.ts.map +1 -0
  143. package/types/componentDiscovery.d.ts +27 -0
  144. package/types/componentDiscovery.d.ts.map +1 -0
  145. package/types/constants.d.ts +0 -1
  146. package/types/constants.d.ts.map +1 -1
  147. package/types/domStructuralPass.d.ts +3 -0
  148. package/types/domStructuralPass.d.ts.map +1 -0
  149. package/types/exports.d.ts +5 -6
  150. package/types/exports.d.ts.map +1 -1
  151. package/types/extractor/addLocalExports.d.ts +3 -0
  152. package/types/extractor/addLocalExports.d.ts.map +1 -0
  153. package/types/extractor/bundle.d.ts +66 -65
  154. package/types/extractor/bundle.d.ts.map +1 -1
  155. package/types/extractor/bundleConfig.d.ts +26 -4
  156. package/types/extractor/bundleConfig.d.ts.map +1 -1
  157. package/types/extractor/esbuildAliasPlugin.d.ts.map +1 -1
  158. package/types/extractor/getTamaguiConfigPathFromOptionsConfig.d.ts +1 -1
  159. package/types/extractor/getTamaguiConfigPathFromOptionsConfig.d.ts.map +1 -1
  160. package/types/extractor/loadTamagui.d.ts +26 -3
  161. package/types/extractor/loadTamagui.d.ts.map +1 -1
  162. package/types/extractor/regenerateConfig.d.ts +1 -1
  163. package/types/extractor/regenerateConfig.d.ts.map +1 -1
  164. package/types/extractor/watchTamaguiConfig.d.ts.map +1 -1
  165. package/types/getPragmaOptions.d.ts +1 -1
  166. package/types/helpers/memoize.d.ts +1 -1
  167. package/types/helpers/memoize.d.ts.map +1 -1
  168. package/types/helpers/requireTamaguiCore.d.ts.map +1 -1
  169. package/types/index.d.ts.map +1 -1
  170. package/types/registerRequire.d.ts +2 -2
  171. package/types/registerRequire.d.ts.map +1 -1
  172. package/types/staticEvaluationIgnoredModules.d.ts +9 -0
  173. package/types/staticEvaluationIgnoredModules.d.ts.map +1 -0
  174. package/types/types.d.ts +2 -90
  175. package/types/types.d.ts.map +1 -1
  176. package/types/zero/artifact.d.ts +44 -0
  177. package/types/zero/artifact.d.ts.map +1 -0
  178. package/types/zero/graph.d.ts +139 -0
  179. package/types/zero/graph.d.ts.map +1 -0
  180. package/types/zero/identity.d.ts +33 -0
  181. package/types/zero/identity.d.ts.map +1 -0
  182. package/types/zero/index.d.ts +10 -0
  183. package/types/zero/index.d.ts.map +1 -0
  184. package/types/zero/islands.d.ts +56 -0
  185. package/types/zero/islands.d.ts.map +1 -0
  186. package/types/zero/options.d.ts +58 -0
  187. package/types/zero/options.d.ts.map +1 -0
  188. package/types/zero/ownership.d.ts +51 -0
  189. package/types/zero/ownership.d.ts.map +1 -0
  190. package/types/zero/theme.d.ts +85 -0
  191. package/types/zero/theme.d.ts.map +1 -0
  192. package/types/zero/transform.d.ts +53 -0
  193. package/types/zero/transform.d.ts.map +1 -0
  194. package/dist/check-dep-versions.cjs +0 -372
  195. package/dist/checkDeps.cjs +0 -271
  196. package/dist/constants.cjs +0 -51
  197. package/dist/exports.cjs +0 -48
  198. package/dist/extractor/accessSafe.cjs +0 -48
  199. package/dist/extractor/babelParse.cjs +0 -56
  200. package/dist/extractor/buildClassName.cjs +0 -86
  201. package/dist/extractor/bundle.cjs +0 -234
  202. package/dist/extractor/bundleConfig.cjs +0 -729
  203. package/dist/extractor/concatClassName.cjs +0 -129
  204. package/dist/extractor/createEvaluator.cjs +0 -88
  205. package/dist/extractor/createExtractor.cjs +0 -1968
  206. package/dist/extractor/createLogger.cjs +0 -50
  207. package/dist/extractor/detectModuleFormat.cjs +0 -55
  208. package/dist/extractor/ensureImportingConcat.cjs +0 -54
  209. package/dist/extractor/errors.cjs +0 -28
  210. package/dist/extractor/esbuildAliasPlugin.cjs +0 -56
  211. package/dist/extractor/esbuildTsconfigPaths.cjs +0 -108
  212. package/dist/extractor/evaluateAstNode.cjs +0 -128
  213. package/dist/extractor/extractHelpers.cjs +0 -182
  214. package/dist/extractor/extractMediaStyle.cjs +0 -169
  215. package/dist/extractor/extractToClassNames.cjs +0 -475
  216. package/dist/extractor/extractToNative.cjs +0 -369
  217. package/dist/extractor/findTopmostFunction.cjs +0 -43
  218. package/dist/extractor/generatedUid.cjs +0 -58
  219. package/dist/extractor/getPrefixLogs.cjs +0 -31
  220. package/dist/extractor/getPropValueFromAttributes.cjs +0 -85
  221. package/dist/extractor/getSourceModule.cjs +0 -100
  222. package/dist/extractor/getStaticBindingsForScope.cjs +0 -213
  223. package/dist/extractor/getTamaguiConfigPathFromOptionsConfig.cjs +0 -41
  224. package/dist/extractor/hasTopLevelAwait.cjs +0 -62
  225. package/dist/extractor/hoistClassNames.cjs +0 -76
  226. package/dist/extractor/literalToAst.cjs +0 -109
  227. package/dist/extractor/loadFile.cjs +0 -17
  228. package/dist/extractor/loadTamagui.cjs +0 -373
  229. package/dist/extractor/logLines.cjs +0 -43
  230. package/dist/extractor/normalizeTernaries.cjs +0 -100
  231. package/dist/extractor/propsToFontFamilyCache.cjs +0 -42
  232. package/dist/extractor/regenerateConfig.cjs +0 -178
  233. package/dist/extractor/removeUnusedHooks.cjs +0 -108
  234. package/dist/extractor/timer.cjs +0 -52
  235. package/dist/extractor/validHTMLAttributes.cjs +0 -79
  236. package/dist/extractor/watchTamaguiConfig.cjs +0 -70
  237. package/dist/getPragmaOptions.cjs +0 -73
  238. package/dist/helpers/memoize.cjs +0 -45
  239. package/dist/helpers/requireTamaguiCore.cjs +0 -40
  240. package/dist/index.cjs +0 -42
  241. package/dist/registerRequire.cjs +0 -209
  242. package/dist/server.cjs +0 -82
  243. package/dist/types.cjs +0 -18
  244. package/dist/worker.cjs +0 -111
  245. package/src/extractor/accessSafe.ts +0 -22
  246. package/src/extractor/babelParse.ts +0 -38
  247. package/src/extractor/buildClassName.ts +0 -76
  248. package/src/extractor/createEvaluator.ts +0 -82
  249. package/src/extractor/createExtractor.ts +0 -2970
  250. package/src/extractor/createLogger.ts +0 -41
  251. package/src/extractor/ensureImportingConcat.ts +0 -36
  252. package/src/extractor/errors.ts +0 -1
  253. package/src/extractor/evaluateAstNode.ts +0 -136
  254. package/src/extractor/extractHelpers.ts +0 -211
  255. package/src/extractor/extractMediaStyle.ts +0 -194
  256. package/src/extractor/extractToClassNames.ts +0 -733
  257. package/src/extractor/extractToNative.ts +0 -506
  258. package/src/extractor/findTopmostFunction.ts +0 -24
  259. package/src/extractor/generatedUid.ts +0 -41
  260. package/src/extractor/getPrefixLogs.ts +0 -9
  261. package/src/extractor/getPropValueFromAttributes.ts +0 -95
  262. package/src/extractor/getSourceModule.ts +0 -96
  263. package/src/extractor/getStaticBindingsForScope.ts +0 -237
  264. package/src/extractor/hasTopLevelAwait.ts +0 -28
  265. package/src/extractor/hoistClassNames.ts +0 -52
  266. package/src/extractor/literalToAst.ts +0 -85
  267. package/src/extractor/loadFile.ts +0 -17
  268. package/src/extractor/logLines.ts +0 -16
  269. package/src/extractor/normalizeTernaries.ts +0 -89
  270. package/src/extractor/propsToFontFamilyCache.ts +0 -18
  271. package/src/extractor/removeUnusedHooks.ts +0 -83
  272. package/src/extractor/timer.ts +0 -25
  273. package/src/extractor/validHTMLAttributes.ts +0 -52
  274. package/src/worker.ts +0 -142
  275. package/types/extractor/accessSafe.d.ts +0 -3
  276. package/types/extractor/accessSafe.d.ts.map +0 -1
  277. package/types/extractor/babelParse.d.ts +0 -5
  278. package/types/extractor/babelParse.d.ts.map +0 -1
  279. package/types/extractor/buildClassName.d.ts +0 -7
  280. package/types/extractor/buildClassName.d.ts.map +0 -1
  281. package/types/extractor/createEvaluator.d.ts +0 -12
  282. package/types/extractor/createEvaluator.d.ts.map +0 -1
  283. package/types/extractor/createExtractor.d.ts +0 -32
  284. package/types/extractor/createExtractor.d.ts.map +0 -1
  285. package/types/extractor/createLogger.d.ts +0 -3
  286. package/types/extractor/createLogger.d.ts.map +0 -1
  287. package/types/extractor/ensureImportingConcat.d.ts +0 -4
  288. package/types/extractor/ensureImportingConcat.d.ts.map +0 -1
  289. package/types/extractor/errors.d.ts +0 -3
  290. package/types/extractor/errors.d.ts.map +0 -1
  291. package/types/extractor/evaluateAstNode.d.ts +0 -3
  292. package/types/extractor/evaluateAstNode.d.ts.map +0 -1
  293. package/types/extractor/extractHelpers.d.ts +0 -28
  294. package/types/extractor/extractHelpers.d.ts.map +0 -1
  295. package/types/extractor/extractMediaStyle.d.ts +0 -11
  296. package/types/extractor/extractMediaStyle.d.ts.map +0 -1
  297. package/types/extractor/extractToClassNames.d.ts +0 -25
  298. package/types/extractor/extractToClassNames.d.ts.map +0 -1
  299. package/types/extractor/extractToNative.d.ts +0 -13
  300. package/types/extractor/extractToNative.d.ts.map +0 -1
  301. package/types/extractor/findTopmostFunction.d.ts +0 -4
  302. package/types/extractor/findTopmostFunction.d.ts.map +0 -1
  303. package/types/extractor/generatedUid.d.ts +0 -5
  304. package/types/extractor/generatedUid.d.ts.map +0 -1
  305. package/types/extractor/getPrefixLogs.d.ts +0 -3
  306. package/types/extractor/getPrefixLogs.d.ts.map +0 -1
  307. package/types/extractor/getPropValueFromAttributes.d.ts +0 -19
  308. package/types/extractor/getPropValueFromAttributes.d.ts.map +0 -1
  309. package/types/extractor/getSourceModule.d.ts +0 -16
  310. package/types/extractor/getSourceModule.d.ts.map +0 -1
  311. package/types/extractor/getStaticBindingsForScope.d.ts +0 -5
  312. package/types/extractor/getStaticBindingsForScope.d.ts.map +0 -1
  313. package/types/extractor/hasTopLevelAwait.d.ts +0 -2
  314. package/types/extractor/hasTopLevelAwait.d.ts.map +0 -1
  315. package/types/extractor/hoistClassNames.d.ts +0 -6
  316. package/types/extractor/hoistClassNames.d.ts.map +0 -1
  317. package/types/extractor/literalToAst.d.ts +0 -4
  318. package/types/extractor/literalToAst.d.ts.map +0 -1
  319. package/types/extractor/loadFile.d.ts +0 -1
  320. package/types/extractor/loadFile.d.ts.map +0 -1
  321. package/types/extractor/logLines.d.ts +0 -2
  322. package/types/extractor/logLines.d.ts.map +0 -1
  323. package/types/extractor/normalizeTernaries.d.ts +0 -5
  324. package/types/extractor/normalizeTernaries.d.ts.map +0 -1
  325. package/types/extractor/propsToFontFamilyCache.d.ts +0 -4
  326. package/types/extractor/propsToFontFamilyCache.d.ts.map +0 -1
  327. package/types/extractor/removeUnusedHooks.d.ts +0 -3
  328. package/types/extractor/removeUnusedHooks.d.ts.map +0 -1
  329. package/types/extractor/timer.d.ts +0 -5
  330. package/types/extractor/timer.d.ts.map +0 -1
  331. package/types/extractor/validHTMLAttributes.d.ts +0 -52
  332. package/types/extractor/validHTMLAttributes.d.ts.map +0 -1
  333. package/types/worker.d.ts +0 -46
  334. package/types/worker.d.ts.map +0 -1
  335. /package/dist/{setup.cjs → cjs/setup.cjs} +0 -0
@@ -0,0 +1,279 @@
1
+ import { existsSync, readFileSync, readdirSync, realpathSync } from "node:fs";
2
+ import { join, relative } from "node:path";
3
+ import { CDVC } from "./check-dep-versions.mjs";
4
+
5
+ var DEPENDENCY_TYPE = /* @__PURE__ */ ((DEPENDENCY_TYPE2) => {
6
+ DEPENDENCY_TYPE2["dependencies"] = "dependencies";
7
+ DEPENDENCY_TYPE2["devDependencies"] = "devDependencies";
8
+ DEPENDENCY_TYPE2["optionalDependencies"] = "optionalDependencies";
9
+ DEPENDENCY_TYPE2["peerDependencies"] = "peerDependencies";
10
+ DEPENDENCY_TYPE2["resolutions"] = "resolutions";
11
+ return DEPENDENCY_TYPE2;
12
+ })(DEPENDENCY_TYPE || {});
13
+ const CRITICAL_PACKAGES = [
14
+ "@tamagui/web",
15
+ "@tamagui/core",
16
+ "tamagui"
17
+ ];
18
+ function checkDuplicateInstalls(root) {
19
+ const nodeModules = join(root, "node_modules");
20
+ if (!existsSync(nodeModules)) return "";
21
+ const duplicates = /* @__PURE__ */ new Map();
22
+ for (const pkg of CRITICAL_PACKAGES) {
23
+ const locations = findAllInstances(nodeModules, pkg);
24
+ if (locations.length > 1) {
25
+ const realPaths = /* @__PURE__ */ new Set();
26
+ const distinctLocations = [];
27
+ for (const loc of locations) {
28
+ try {
29
+ const real = realpathSync(loc);
30
+ if (!realPaths.has(real)) {
31
+ realPaths.add(real);
32
+ distinctLocations.push(relative(root, loc));
33
+ }
34
+ } catch {
35
+ distinctLocations.push(relative(root, loc));
36
+ }
37
+ }
38
+ if (distinctLocations.length > 1) {
39
+ duplicates.set(pkg, distinctLocations);
40
+ }
41
+ }
42
+ }
43
+ if (duplicates.size === 0) return "";
44
+ const lines = [
45
+ "Found duplicate tamagui installations in node_modules:",
46
+ "",
47
+ "This causes multiple runtime instances, which breaks theme/config detection.",
48
+ ""
49
+ ];
50
+ for (const [pkg, locations] of duplicates) {
51
+ lines.push(` ${pkg}:`);
52
+ for (const loc of locations) {
53
+ const pkgJsonPath = join(root, loc, "package.json");
54
+ let version = "?";
55
+ try {
56
+ version = JSON.parse(readFileSync(pkgJsonPath, "utf8")).version;
57
+ } catch {}
58
+ lines.push(` ${version} at ${loc}`);
59
+ }
60
+ lines.push("");
61
+ }
62
+ lines.push("Fix: run your package manager's dedupe command:");
63
+ lines.push(" bun install (bun auto-dedupes)");
64
+ lines.push(" npx yarn-deduplicate && yarn install");
65
+ lines.push(" npm dedupe");
66
+ lines.push("");
67
+ lines.push("If that doesn't help, delete node_modules and lockfile, then reinstall.");
68
+ return lines.join("\n");
69
+ }
70
+ function findAllInstances(nodeModulesDir, packageName, found = [], depth = 0) {
71
+ if (depth > 4 || !existsSync(nodeModulesDir)) return found;
72
+ const pkgDir = join(nodeModulesDir, ...packageName.split("/"));
73
+ if (existsSync(join(pkgDir, "package.json"))) {
74
+ found.push(pkgDir);
75
+ }
76
+ try {
77
+ const entries = readdirSync(nodeModulesDir);
78
+ for (const entry of entries) {
79
+ if (entry.startsWith(".")) continue;
80
+ if (entry.startsWith("@")) {
81
+ const scopeDir = join(nodeModulesDir, entry);
82
+ try {
83
+ const scopeEntries = readdirSync(scopeDir);
84
+ for (const scopeEntry of scopeEntries) {
85
+ const nested = join(scopeDir, scopeEntry, "node_modules");
86
+ if (existsSync(nested)) {
87
+ findAllInstances(nested, packageName, found, depth + 1);
88
+ }
89
+ }
90
+ } catch {}
91
+ } else {
92
+ const nested = join(nodeModulesDir, entry, "node_modules");
93
+ if (existsSync(nested)) {
94
+ findAllInstances(nested, packageName, found, depth + 1);
95
+ }
96
+ }
97
+ }
98
+ } catch {}
99
+ return found;
100
+ }
101
+ function checkLockfileDuplicates(root) {
102
+ const bunLock = join(root, "bun.lock");
103
+ const yarnLock = join(root, "yarn.lock");
104
+ const npmLock = join(root, "package-lock.json");
105
+ if (existsSync(bunLock)) return checkBunLockDuplicates(bunLock);
106
+ if (existsSync(yarnLock)) return checkYarnLockDuplicates(yarnLock);
107
+ if (existsSync(npmLock)) return checkNpmLockDuplicates(npmLock);
108
+ return "";
109
+ }
110
+ function checkBunLockDuplicates(lockPath) {
111
+ try {
112
+ const content = readFileSync(lockPath, "utf8");
113
+ const duplicates = /* @__PURE__ */ new Map();
114
+ const criticalSet = new Set(CRITICAL_PACKAGES);
115
+ const packagePattern = /["'](@tamagui\/[\w-]+|tamagui)@([^"'\s,]+)["']/g;
116
+ let match;
117
+ while ((match = packagePattern.exec(content)) !== null) {
118
+ const name = match[1];
119
+ const version = match[2];
120
+ if (version.startsWith("workspace:")) continue;
121
+ if (!criticalSet.has(name)) continue;
122
+ if (!duplicates.has(name)) duplicates.set(name, /* @__PURE__ */ new Set());
123
+ duplicates.get(name).add(version);
124
+ }
125
+ return formatLockfileDuplicates(duplicates, "bun.lock");
126
+ } catch {
127
+ return "";
128
+ }
129
+ }
130
+ function checkYarnLockDuplicates(lockPath) {
131
+ try {
132
+ const content = readFileSync(lockPath, "utf8");
133
+ const duplicates = /* @__PURE__ */ new Map();
134
+ const criticalSet = new Set(CRITICAL_PACKAGES);
135
+ const entryPattern = /^"?(@tamagui\/[\w-]+|tamagui)@[^":\n]+[":]?\s*$/gm;
136
+ const versionPattern = /^\s+version\s+"([^"]+)"/gm;
137
+ let entryMatch;
138
+ while ((entryMatch = entryPattern.exec(content)) !== null) {
139
+ const name = entryMatch[1];
140
+ if (!criticalSet.has(name)) continue;
141
+ versionPattern.lastIndex = entryMatch.index;
142
+ const verMatch = versionPattern.exec(content);
143
+ if (verMatch) {
144
+ if (!duplicates.has(name)) duplicates.set(name, /* @__PURE__ */ new Set());
145
+ duplicates.get(name).add(verMatch[1]);
146
+ }
147
+ }
148
+ return formatLockfileDuplicates(duplicates, "yarn.lock");
149
+ } catch {
150
+ return "";
151
+ }
152
+ }
153
+ function checkNpmLockDuplicates(lockPath) {
154
+ try {
155
+ const lock = JSON.parse(readFileSync(lockPath, "utf8"));
156
+ const duplicates = /* @__PURE__ */ new Map();
157
+ const criticalSet = new Set(CRITICAL_PACKAGES);
158
+ const packages = lock.packages || {};
159
+ for (const [path, info] of Object.entries(packages)) {
160
+ if (!path) continue;
161
+ const name = info.name || path.split("node_modules/").pop();
162
+ if (!name) continue;
163
+ if (!criticalSet.has(name)) continue;
164
+ const version = info.version;
165
+ if (version) {
166
+ if (!duplicates.has(name)) duplicates.set(name, /* @__PURE__ */ new Set());
167
+ duplicates.get(name).add(version);
168
+ }
169
+ }
170
+ return formatLockfileDuplicates(duplicates, "package-lock.json");
171
+ } catch {
172
+ return "";
173
+ }
174
+ }
175
+ function formatLockfileDuplicates(duplicates, lockfileName) {
176
+ const multiVersion = /* @__PURE__ */ new Map();
177
+ for (const [name, versions] of duplicates) {
178
+ if (versions.size > 1) {
179
+ multiVersion.set(name, [...versions].sort());
180
+ }
181
+ }
182
+ if (multiVersion.size === 0) return "";
183
+ const lines = [`Found multiple resolved versions in ${lockfileName}:`, ""];
184
+ for (const [name, versions] of multiVersion) {
185
+ lines.push(` ${name}: ${versions.join(", ")}`);
186
+ }
187
+ lines.push("");
188
+ lines.push("Multiple versions cause duplicate runtime instances, breaking config/theme detection.");
189
+ lines.push("Fix: ensure all tamagui packages use the same version range, then dedupe.");
190
+ return lines.join("\n");
191
+ }
192
+ function checkConfigExists(root) {
193
+ const configNames = [
194
+ "tamagui.config.ts",
195
+ "tamagui.config.tsx",
196
+ "tamagui.config.js",
197
+ "tamagui.config.mjs",
198
+ "tamagui.config.cjs"
199
+ ];
200
+ const searchDirs = [
201
+ root,
202
+ join(root, "src"),
203
+ join(root, "app"),
204
+ join(root, "config")
205
+ ];
206
+ for (const dir of searchDirs) {
207
+ for (const name of configNames) {
208
+ if (existsSync(join(dir, name))) {
209
+ return "";
210
+ }
211
+ }
212
+ }
213
+ const buildConfigNames = [
214
+ "tamagui.build.ts",
215
+ "tamagui.build.js",
216
+ "tamagui.build.mjs",
217
+ "tamagui.build.cjs"
218
+ ];
219
+ for (const name of buildConfigNames) {
220
+ const buildPath = join(root, name);
221
+ if (existsSync(buildPath)) {
222
+ try {
223
+ const content = readFileSync(buildPath, "utf8");
224
+ const match = content.match(/config\s*:\s*['"`]([^'"`]+)['"`]/);
225
+ if (match) {
226
+ const configPath = join(root, match[1]);
227
+ if (existsSync(configPath)) return "";
228
+ }
229
+ } catch {}
230
+ }
231
+ }
232
+ const pkgJsonPath = join(root, "package.json");
233
+ if (existsSync(pkgJsonPath)) {
234
+ try {
235
+ const pkg = JSON.parse(readFileSync(pkgJsonPath, "utf8"));
236
+ if (pkg.tamagui?.config) {
237
+ const configPath = join(root, pkg.tamagui.config);
238
+ if (existsSync(configPath)) return "";
239
+ }
240
+ } catch {}
241
+ }
242
+ if (existsSync(pkgJsonPath)) {
243
+ try {
244
+ const pkg = JSON.parse(readFileSync(pkgJsonPath, "utf8"));
245
+ if (pkg.workspaces) return "";
246
+ } catch {}
247
+ }
248
+ return [
249
+ "No tamagui.config file found.",
250
+ "",
251
+ "Tamagui requires a config file (e.g. tamagui.config.ts) that calls createTamagui().",
252
+ `Without it, components will throw "Can't find Tamagui configuration" at runtime.`,
253
+ "",
254
+ "See: https://tamagui.dev/docs/core/configuration"
255
+ ].join("\n");
256
+ }
257
+ async function checkDeps(root) {
258
+ const issues = [];
259
+ const workspaceMismatchSummary = new CDVC(root).toMismatchSummary();
260
+ if (workspaceMismatchSummary) issues.push(workspaceMismatchSummary);
261
+ const lockfileSummary = checkLockfileDuplicates(root);
262
+ if (lockfileSummary) issues.push(lockfileSummary);
263
+ const duplicatesSummary = checkDuplicateInstalls(root);
264
+ if (duplicatesSummary) issues.push(duplicatesSummary);
265
+ const configSummary = checkConfigExists(root);
266
+ if (configSummary) issues.push(configSummary);
267
+ if (issues.length === 0) {
268
+ console.info(`Tamagui dependencies look good \u2705`);
269
+ return;
270
+ }
271
+ for (let i = 0; i < issues.length; i++) {
272
+ if (i > 0) console.error("");
273
+ console.error(issues[i]);
274
+ }
275
+ process.exitCode = 1;
276
+ }
277
+
278
+ export { DEPENDENCY_TYPE, checkDeps };
279
+ //# sourceMappingURL=checkDeps.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkDeps.js","names":[],"sources":["esm/checkDeps.js"],"sourcesContent":["import { existsSync, readFileSync, readdirSync, realpathSync } from \"node:fs\";\nimport { join, relative } from \"node:path\";\nimport { CDVC } from \"./check-dep-versions\";\nvar DEPENDENCY_TYPE = /* @__PURE__ */ ((DEPENDENCY_TYPE2) => {\n DEPENDENCY_TYPE2[\"dependencies\"] = \"dependencies\";\n DEPENDENCY_TYPE2[\"devDependencies\"] = \"devDependencies\";\n DEPENDENCY_TYPE2[\"optionalDependencies\"] = \"optionalDependencies\";\n DEPENDENCY_TYPE2[\"peerDependencies\"] = \"peerDependencies\";\n DEPENDENCY_TYPE2[\"resolutions\"] = \"resolutions\";\n return DEPENDENCY_TYPE2;\n})(DEPENDENCY_TYPE || {});\nconst CRITICAL_PACKAGES = [\"@tamagui/web\", \"@tamagui/core\", \"tamagui\"];\nfunction checkDuplicateInstalls(root) {\n const nodeModules = join(root, \"node_modules\");\n if (!existsSync(nodeModules)) return \"\";\n const duplicates = /* @__PURE__ */ new Map();\n for (const pkg of CRITICAL_PACKAGES) {\n const locations = findAllInstances(nodeModules, pkg);\n if (locations.length > 1) {\n const realPaths = /* @__PURE__ */ new Set();\n const distinctLocations = [];\n for (const loc of locations) {\n try {\n const real = realpathSync(loc);\n if (!realPaths.has(real)) {\n realPaths.add(real);\n distinctLocations.push(relative(root, loc));\n }\n } catch {\n distinctLocations.push(relative(root, loc));\n }\n }\n if (distinctLocations.length > 1) {\n duplicates.set(pkg, distinctLocations);\n }\n }\n }\n if (duplicates.size === 0) return \"\";\n const lines = [\n \"Found duplicate tamagui installations in node_modules:\",\n \"\",\n \"This causes multiple runtime instances, which breaks theme/config detection.\",\n \"\"\n ];\n for (const [pkg, locations] of duplicates) {\n lines.push(` ${pkg}:`);\n for (const loc of locations) {\n const pkgJsonPath = join(root, loc, \"package.json\");\n let version = \"?\";\n try {\n version = JSON.parse(readFileSync(pkgJsonPath, \"utf8\")).version;\n } catch {\n }\n lines.push(` ${version} at ${loc}`);\n }\n lines.push(\"\");\n }\n lines.push(\"Fix: run your package manager's dedupe command:\");\n lines.push(\" bun install (bun auto-dedupes)\");\n lines.push(\" npx yarn-deduplicate && yarn install\");\n lines.push(\" npm dedupe\");\n lines.push(\"\");\n lines.push(\"If that doesn't help, delete node_modules and lockfile, then reinstall.\");\n return lines.join(\"\\n\");\n}\nfunction findAllInstances(nodeModulesDir, packageName, found = [], depth = 0) {\n if (depth > 4 || !existsSync(nodeModulesDir)) return found;\n const pkgDir = join(nodeModulesDir, ...packageName.split(\"/\"));\n if (existsSync(join(pkgDir, \"package.json\"))) {\n found.push(pkgDir);\n }\n try {\n const entries = readdirSync(nodeModulesDir);\n for (const entry of entries) {\n if (entry.startsWith(\".\")) continue;\n if (entry.startsWith(\"@\")) {\n const scopeDir = join(nodeModulesDir, entry);\n try {\n const scopeEntries = readdirSync(scopeDir);\n for (const scopeEntry of scopeEntries) {\n const nested = join(scopeDir, scopeEntry, \"node_modules\");\n if (existsSync(nested)) {\n findAllInstances(nested, packageName, found, depth + 1);\n }\n }\n } catch {\n }\n } else {\n const nested = join(nodeModulesDir, entry, \"node_modules\");\n if (existsSync(nested)) {\n findAllInstances(nested, packageName, found, depth + 1);\n }\n }\n }\n } catch {\n }\n return found;\n}\nfunction checkLockfileDuplicates(root) {\n const bunLock = join(root, \"bun.lock\");\n const yarnLock = join(root, \"yarn.lock\");\n const npmLock = join(root, \"package-lock.json\");\n if (existsSync(bunLock)) return checkBunLockDuplicates(bunLock);\n if (existsSync(yarnLock)) return checkYarnLockDuplicates(yarnLock);\n if (existsSync(npmLock)) return checkNpmLockDuplicates(npmLock);\n return \"\";\n}\nfunction checkBunLockDuplicates(lockPath) {\n try {\n const content = readFileSync(lockPath, \"utf8\");\n const duplicates = /* @__PURE__ */ new Map();\n const criticalSet = new Set(CRITICAL_PACKAGES);\n const packagePattern = /[\"'](@tamagui\\/[\\w-]+|tamagui)@([^\"'\\s,]+)[\"']/g;\n let match;\n while ((match = packagePattern.exec(content)) !== null) {\n const name = match[1];\n const version = match[2];\n if (version.startsWith(\"workspace:\")) continue;\n if (!criticalSet.has(name)) continue;\n if (!duplicates.has(name)) duplicates.set(name, /* @__PURE__ */ new Set());\n duplicates.get(name).add(version);\n }\n return formatLockfileDuplicates(duplicates, \"bun.lock\");\n } catch {\n return \"\";\n }\n}\nfunction checkYarnLockDuplicates(lockPath) {\n try {\n const content = readFileSync(lockPath, \"utf8\");\n const duplicates = /* @__PURE__ */ new Map();\n const criticalSet = new Set(CRITICAL_PACKAGES);\n const entryPattern = /^\"?(@tamagui\\/[\\w-]+|tamagui)@[^\":\\n]+[\":]?\\s*$/gm;\n const versionPattern = /^\\s+version\\s+\"([^\"]+)\"/gm;\n let entryMatch;\n while ((entryMatch = entryPattern.exec(content)) !== null) {\n const name = entryMatch[1];\n if (!criticalSet.has(name)) continue;\n versionPattern.lastIndex = entryMatch.index;\n const verMatch = versionPattern.exec(content);\n if (verMatch) {\n if (!duplicates.has(name)) duplicates.set(name, /* @__PURE__ */ new Set());\n duplicates.get(name).add(verMatch[1]);\n }\n }\n return formatLockfileDuplicates(duplicates, \"yarn.lock\");\n } catch {\n return \"\";\n }\n}\nfunction checkNpmLockDuplicates(lockPath) {\n try {\n const lock = JSON.parse(readFileSync(lockPath, \"utf8\"));\n const duplicates = /* @__PURE__ */ new Map();\n const criticalSet = new Set(CRITICAL_PACKAGES);\n const packages = lock.packages || {};\n for (const [path, info] of Object.entries(packages)) {\n if (!path) continue;\n const name = info.name || path.split(\"node_modules/\").pop();\n if (!name) continue;\n if (!criticalSet.has(name)) continue;\n const version = info.version;\n if (version) {\n if (!duplicates.has(name)) duplicates.set(name, /* @__PURE__ */ new Set());\n duplicates.get(name).add(version);\n }\n }\n return formatLockfileDuplicates(duplicates, \"package-lock.json\");\n } catch {\n return \"\";\n }\n}\nfunction formatLockfileDuplicates(duplicates, lockfileName) {\n const multiVersion = /* @__PURE__ */ new Map();\n for (const [name, versions] of duplicates) {\n if (versions.size > 1) {\n multiVersion.set(name, [...versions].sort());\n }\n }\n if (multiVersion.size === 0) return \"\";\n const lines = [`Found multiple resolved versions in ${lockfileName}:`, \"\"];\n for (const [name, versions] of multiVersion) {\n lines.push(` ${name}: ${versions.join(\", \")}`);\n }\n lines.push(\"\");\n lines.push(\n \"Multiple versions cause duplicate runtime instances, breaking config/theme detection.\"\n );\n lines.push(\"Fix: ensure all tamagui packages use the same version range, then dedupe.\");\n return lines.join(\"\\n\");\n}\nfunction checkConfigExists(root) {\n const configNames = [\n \"tamagui.config.ts\",\n \"tamagui.config.tsx\",\n \"tamagui.config.js\",\n \"tamagui.config.mjs\",\n \"tamagui.config.cjs\"\n ];\n const searchDirs = [root, join(root, \"src\"), join(root, \"app\"), join(root, \"config\")];\n for (const dir of searchDirs) {\n for (const name of configNames) {\n if (existsSync(join(dir, name))) {\n return \"\";\n }\n }\n }\n const buildConfigNames = [\n \"tamagui.build.ts\",\n \"tamagui.build.js\",\n \"tamagui.build.mjs\",\n \"tamagui.build.cjs\"\n ];\n for (const name of buildConfigNames) {\n const buildPath = join(root, name);\n if (existsSync(buildPath)) {\n try {\n const content = readFileSync(buildPath, \"utf8\");\n const match = content.match(/config\\s*:\\s*['\"`]([^'\"`]+)['\"`]/);\n if (match) {\n const configPath = join(root, match[1]);\n if (existsSync(configPath)) return \"\";\n }\n } catch {\n }\n }\n }\n const pkgJsonPath = join(root, \"package.json\");\n if (existsSync(pkgJsonPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgJsonPath, \"utf8\"));\n if (pkg.tamagui?.config) {\n const configPath = join(root, pkg.tamagui.config);\n if (existsSync(configPath)) return \"\";\n }\n } catch {\n }\n }\n if (existsSync(pkgJsonPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgJsonPath, \"utf8\"));\n if (pkg.workspaces) return \"\";\n } catch {\n }\n }\n return [\n \"No tamagui.config file found.\",\n \"\",\n \"Tamagui requires a config file (e.g. tamagui.config.ts) that calls createTamagui().\",\n `Without it, components will throw \"Can't find Tamagui configuration\" at runtime.`,\n \"\",\n \"See: https://tamagui.dev/docs/core/configuration\"\n ].join(\"\\n\");\n}\nasync function checkDeps(root) {\n const issues = [];\n const workspaceMismatchSummary = new CDVC(root).toMismatchSummary();\n if (workspaceMismatchSummary) issues.push(workspaceMismatchSummary);\n const lockfileSummary = checkLockfileDuplicates(root);\n if (lockfileSummary) issues.push(lockfileSummary);\n const duplicatesSummary = checkDuplicateInstalls(root);\n if (duplicatesSummary) issues.push(duplicatesSummary);\n const configSummary = checkConfigExists(root);\n if (configSummary) issues.push(configSummary);\n if (issues.length === 0) {\n console.info(`Tamagui dependencies look good \\u2705`);\n return;\n }\n for (let i = 0; i < issues.length; i++) {\n if (i > 0) console.error(\"\");\n console.error(issues[i]);\n }\n process.exitCode = 1;\n}\nexport {\n DEPENDENCY_TYPE,\n checkDeps\n};\n//# sourceMappingURL=checkDeps.js.map\n"],"mappings":"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"}
@@ -0,0 +1,319 @@
1
+ import { CompilerSession, LOWERED_MODULE_PLAN_VERSION, ModulePlanCache, PLAN_CACHE_SCHEMA_VERSION, contentHash, defaultPlanCacheRoot, resolvedModuleId, stableStringify, yukuFactory } from "@tamagui/compiler-core";
2
+ import { readFileSync } from "node:fs";
3
+ import { createRequire } from "node:module";
4
+ import path from "node:path";
5
+ import { ComponentDiscovery } from "./componentDiscovery.mjs";
6
+ import { createComponentRegistry, createTamaguiCompilerHost } from "./compilerHost.mjs";
7
+ import { domStructuralPass } from "./domStructuralPass.mjs";
8
+ import { loadTamagui } from "./extractor/loadTamagui.mjs";
9
+ import { resolveZeroRuntimeSync } from "./zero/options.mjs";
10
+
11
+ async function loadCompilerProject({ root, target, options: optionsIn, generation, rebuild = false, hostVersions = [], missingProjectMessage = "Unable to load the Tamagui compiler project", load = loadTamagui, resolveComponents }) {
12
+ const components = [.../* @__PURE__ */ new Set(["@tamagui/core", ...optionsIn.components || ["tamagui"]])];
13
+ const options = {
14
+ ...optionsIn,
15
+ root,
16
+ platform: target,
17
+ components
18
+ };
19
+ const zeroRuntime = resolveZeroRuntimeSync(options, root).mode;
20
+ if (zeroRuntime === "enforce") options.outputCSS = void 0;
21
+ const projectInfo = await load(options, rebuild);
22
+ if (!projectInfo?.tamaguiConfig || !projectInfo.components) {
23
+ throw new Error(missingProjectMessage);
24
+ }
25
+ const componentModules = resolveComponents ? await resolveComponents(components, projectInfo, options) : [];
26
+ const disablePartialExtraction = !!options.disablePartialExtraction;
27
+ const experimentalNativeFastPath = target === "native" && options.experimental?.nativeFastPath === true;
28
+ return {
29
+ projectInfo,
30
+ componentModules,
31
+ generation: typeof generation === "function" ? generation(projectInfo, componentModules, options) : generation,
32
+ disablePartialExtraction,
33
+ experimentalNativeFastPath,
34
+ zeroRuntime: zeroRuntime !== "off",
35
+ cacheStamp: compilerProjectStamp({
36
+ stampSources: projectInfo.stampSources ?? [],
37
+ hostVersions,
38
+ target,
39
+ componentModules,
40
+ disablePartialExtraction,
41
+ experimentalNativeFastPath,
42
+ zeroRuntime: zeroRuntime !== "off",
43
+ development: process.env.NODE_ENV === "development"
44
+ })
45
+ };
46
+ }
47
+ const requireFromCompiler = createRequire(typeof __filename === "string" ? __filename : import.meta.url);
48
+ const compilerPackageVersions = ["@tamagui/compiler-core", "@tamagui/static"].map((name) => `${name}@${requireFromCompiler(`${name}/package.json`).version}`);
49
+ function compilerProjectStamp(input) {
50
+ if (!input.stampSources.length) return null;
51
+ const sources = [];
52
+ for (const file of [...new Set(input.stampSources)].sort()) {
53
+ try {
54
+ sources.push([file, contentHash(readFileSync(file))]);
55
+ } catch {
56
+ return null;
57
+ }
58
+ }
59
+ return contentHash(stableStringify({
60
+ schema: PLAN_CACHE_SCHEMA_VERSION,
61
+ plan: LOWERED_MODULE_PLAN_VERSION,
62
+ packages: [...compilerPackageVersions, ...input.hostVersions].sort(),
63
+ target: input.target,
64
+ development: input.development,
65
+ componentModules: input.componentModules.map(({ moduleName, id }) => [moduleName, cleanId(id)]),
66
+ disablePartialExtraction: input.disablePartialExtraction,
67
+ experimentalNativeFastPath: input.experimentalNativeFastPath,
68
+ zeroRuntime: input.zeroRuntime,
69
+ sources
70
+ }));
71
+ }
72
+ function cleanId(id) {
73
+ return id.split(/[?#]/, 1)[0];
74
+ }
75
+ function externalId(specifier) {
76
+ return resolvedModuleId(`external://${encodeURIComponent(specifier)}`);
77
+ }
78
+ function compilerContext(input) {
79
+ return `${input.root}\0${input.target}\0${input.environment ?? ""}\0${input.project.generation}`;
80
+ }
81
+ function sourceCanBeLinked(root, id) {
82
+ const clean = cleanId(id);
83
+ const normalized = clean.replace(/\\/g, "/");
84
+ if (!path.isAbsolute(clean) || normalized.includes("/node_modules/")) return false;
85
+ const relative = path.relative(root, clean);
86
+ return relative === "" || relative !== ".." && !relative.startsWith(`..${path.sep}`);
87
+ }
88
+ var CompilerFrontend = class {
89
+ session = new CompilerSession();
90
+ queue = Promise.resolve();
91
+ planCaches = /* @__PURE__ */ new Map();
92
+ moduleRecords = /* @__PURE__ */ new Map();
93
+ moduleContext = null;
94
+ discovery = new ComponentDiscovery();
95
+ /**
96
+ * One cache per project root and platform. Absent when the project produced
97
+ * no content stamp, in which case plans are never persisted rather than
98
+ * persisted under an identity that cannot see a config change.
99
+ */
100
+ planCacheFor(input) {
101
+ const stamp = input.project.cacheStamp;
102
+ if (!stamp) return void 0;
103
+ const root = defaultPlanCacheRoot(input.root, input.target);
104
+ let store = this.planCaches.get(root);
105
+ if (!store) {
106
+ store = new ModulePlanCache(root);
107
+ this.planCaches.set(root, store);
108
+ }
109
+ return {
110
+ store,
111
+ stamp
112
+ };
113
+ }
114
+ /** Hits, misses and writes across every plan cache this frontend has used. */
115
+ get planCacheStats() {
116
+ const total = {
117
+ hits: 0,
118
+ misses: 0,
119
+ writes: 0
120
+ };
121
+ for (const store of this.planCaches.values()) {
122
+ total.hits += store.stats.hits;
123
+ total.misses += store.stats.misses;
124
+ total.writes += store.stats.writes;
125
+ }
126
+ return total;
127
+ }
128
+ compile(input) {
129
+ const operation = this.queue.then(async () => {
130
+ const previousTarget = process.env.TAMAGUI_TARGET;
131
+ const previousStatic = process.env.IS_STATIC;
132
+ try {
133
+ return await this.compileNow(input);
134
+ } finally {
135
+ if (previousTarget === void 0) delete process.env.TAMAGUI_TARGET;
136
+ else process.env.TAMAGUI_TARGET = previousTarget;
137
+ if (previousStatic === void 0) delete process.env.IS_STATIC;
138
+ else process.env.IS_STATIC = previousStatic;
139
+ }
140
+ });
141
+ this.queue = operation.catch(() => void 0);
142
+ return operation;
143
+ }
144
+ update(input) {
145
+ const operation = this.queue.then(async () => {
146
+ const { modules } = await this.buildTree(input);
147
+ const invalidated = /* @__PURE__ */ new Set();
148
+ for (const module of modules.values()) {
149
+ for (const id of await this.session.update(module)) invalidated.add(id);
150
+ this.moduleRecords.set(module.id, module);
151
+ }
152
+ return [...invalidated].sort();
153
+ });
154
+ this.queue = operation.catch(() => void 0);
155
+ return operation;
156
+ }
157
+ has(id) {
158
+ return this.session.has(resolvedModuleId(cleanId(id)));
159
+ }
160
+ dependentsOf(id) {
161
+ return this.session.dependentsOf(resolvedModuleId(cleanId(id)));
162
+ }
163
+ remove(id) {
164
+ const operation = this.queue.then(async () => {
165
+ const result = await this.session.remove(resolvedModuleId(cleanId(id)));
166
+ for (const invalidatedId of result.invalidatedIds) {
167
+ this.moduleRecords.delete(invalidatedId);
168
+ }
169
+ return result;
170
+ });
171
+ this.queue = operation.catch(() => void 0);
172
+ return operation;
173
+ }
174
+ parseCount(id) {
175
+ return this.session.parseCount(resolvedModuleId(cleanId(id)));
176
+ }
177
+ async compileNow(input) {
178
+ const { rootModule, modules } = await this.buildTree(input);
179
+ const invalidated = /* @__PURE__ */ new Set();
180
+ for (const module of modules.values()) {
181
+ for (const id of await this.session.update(module)) invalidated.add(id);
182
+ this.moduleRecords.set(module.id, module);
183
+ }
184
+ const projectInfo = input.project.projectInfo;
185
+ if (!projectInfo.tamaguiConfig || !projectInfo.components) {
186
+ throw new Error("The compiler requires evaluated Tamagui config and components");
187
+ }
188
+ const componentModules = input.project.componentModules.map((component) => ({
189
+ moduleName: component.moduleName,
190
+ resolvedId: cleanId(component.id)
191
+ }));
192
+ const registry = createComponentRegistry(projectInfo.components, componentModules);
193
+ this.discovery.seed(registry);
194
+ const host = createTamaguiCompilerHost({
195
+ target: input.target,
196
+ tamaguiConfig: projectInfo.tamaguiConfig,
197
+ components: projectInfo.components,
198
+ componentModules,
199
+ registry,
200
+ disablePartialExtraction: input.project.disablePartialExtraction,
201
+ experimentalNativeFastPath: input.project.experimentalNativeFastPath,
202
+ zeroRuntime: input.project.zeroRuntime
203
+ });
204
+ const result = await this.session.compile({
205
+ module: rootModule,
206
+ adapter: {
207
+ target: input.target,
208
+ projectGeneration: input.project.generation,
209
+ host,
210
+ planCache: this.planCacheFor(input),
211
+ async load(id) {
212
+ return modules.get(id) ?? null;
213
+ },
214
+ prepare: (module) => this.discovery.prepare(module, registry, input.evaluate)
215
+ },
216
+ structuralPass: domStructuralPass
217
+ });
218
+ for (const id of result.invalidatedIds) invalidated.add(id);
219
+ return {
220
+ plan: result.plan,
221
+ output: result.output,
222
+ invalidatedIds: [...invalidated].sort()
223
+ };
224
+ }
225
+ /** host-resolved ids of every module discovery found components in */
226
+ discoveredModuleIds() {
227
+ return this.discovery.ids();
228
+ }
229
+ async buildTree(input) {
230
+ const moduleContext = compilerContext(input);
231
+ if (this.moduleContext !== moduleContext) {
232
+ this.moduleRecords.clear();
233
+ this.discovery.clear();
234
+ this.moduleContext = moduleContext;
235
+ }
236
+ const componentBySpecifier = new Map(input.project.componentModules.map((component) => [component.moduleName, resolvedModuleId(cleanId(component.id))]));
237
+ const modules = /* @__PURE__ */ new Map();
238
+ const loading = /* @__PURE__ */ new Set();
239
+ const addInstalledClosure = (module) => {
240
+ if (modules.has(module.id) || loading.has(module.id)) return;
241
+ loading.add(module.id);
242
+ for (const dependency of module.imports) {
243
+ if (dependency.external) continue;
244
+ const installedDependency = this.moduleRecords.get(dependency.resolvedId);
245
+ if (installedDependency && this.session.has(dependency.resolvedId)) {
246
+ addInstalledClosure(installedDependency);
247
+ }
248
+ }
249
+ modules.set(module.id, module);
250
+ loading.delete(module.id);
251
+ };
252
+ const loadModule = async (rawId, source) => {
253
+ const id = resolvedModuleId(cleanId(rawId));
254
+ const existing = modules.get(id);
255
+ if (existing) return existing;
256
+ const installed = this.moduleRecords.get(id);
257
+ if (installed?.source === source && this.session.has(id)) {
258
+ addInstalledClosure(installed);
259
+ return installed;
260
+ }
261
+ if (loading.has(id)) {
262
+ return {
263
+ id,
264
+ source,
265
+ imports: []
266
+ };
267
+ }
268
+ loading.add(id);
269
+ const imports = [];
270
+ for (const specifier of yukuFactory.scanImports(id, source)) {
271
+ const configuredComponent = componentBySpecifier.get(specifier);
272
+ if (configuredComponent) {
273
+ imports.push({
274
+ specifier,
275
+ resolvedId: configuredComponent,
276
+ external: true
277
+ });
278
+ continue;
279
+ }
280
+ const resolution = await input.resolve(specifier, id);
281
+ if (!resolution) continue;
282
+ const canLink = !resolution.external && sourceCanBeLinked(input.root, resolution.id);
283
+ const resolvedId = canLink ? resolvedModuleId(cleanId(resolution.id)) : path.isAbsolute(cleanId(resolution.id)) ? resolvedModuleId(cleanId(resolution.id)) : externalId(specifier);
284
+ imports.push({
285
+ specifier,
286
+ resolvedId,
287
+ external: !canLink
288
+ });
289
+ if (canLink && !modules.has(resolvedId) && !loading.has(resolvedId)) {
290
+ const installedDependency = this.moduleRecords.get(resolvedId);
291
+ if (installedDependency && this.session.has(resolvedId)) {
292
+ addInstalledClosure(installedDependency);
293
+ } else {
294
+ const dependencySource = await input.load(resolution.id);
295
+ if (dependencySource !== null) {
296
+ await loadModule(resolution.id, dependencySource);
297
+ }
298
+ }
299
+ }
300
+ }
301
+ const module = {
302
+ id,
303
+ source,
304
+ imports
305
+ };
306
+ modules.set(id, module);
307
+ loading.delete(id);
308
+ return module;
309
+ };
310
+ const rootModule = await loadModule(input.id, input.source);
311
+ return {
312
+ rootModule,
313
+ modules
314
+ };
315
+ }
316
+ };
317
+
318
+ export { CompilerFrontend, compilerProjectStamp, loadCompilerProject };
319
+ //# sourceMappingURL=compiler.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler.js","names":[],"sources":["esm/compiler.js"],"sourcesContent":["import {\n CompilerSession,\n LOWERED_MODULE_PLAN_VERSION,\n ModulePlanCache,\n PLAN_CACHE_SCHEMA_VERSION,\n contentHash,\n defaultPlanCacheRoot,\n resolvedModuleId,\n stableStringify,\n yukuFactory\n} from \"@tamagui/compiler-core\";\nimport { readFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\nimport { ComponentDiscovery } from \"./componentDiscovery\";\nimport { createComponentRegistry, createTamaguiCompilerHost } from \"./compilerHost\";\nimport { domStructuralPass } from \"./domStructuralPass\";\nimport { loadTamagui } from \"./extractor/loadTamagui\";\nimport { resolveZeroRuntimeSync } from \"./zero/options\";\nasync function loadCompilerProject({\n root,\n target,\n options: optionsIn,\n generation,\n rebuild = false,\n hostVersions = [],\n missingProjectMessage = \"Unable to load the Tamagui compiler project\",\n load = loadTamagui,\n resolveComponents\n}) {\n const components = [\n .../* @__PURE__ */ new Set([\"@tamagui/core\", ...optionsIn.components || [\"tamagui\"]])\n ];\n const options = {\n ...optionsIn,\n root,\n platform: target,\n components\n };\n const zeroRuntime = resolveZeroRuntimeSync(options, root).mode;\n if (zeroRuntime === \"enforce\") options.outputCSS = void 0;\n const projectInfo = await load(options, rebuild);\n if (!projectInfo?.tamaguiConfig || !projectInfo.components) {\n throw new Error(missingProjectMessage);\n }\n const componentModules = resolveComponents ? await resolveComponents(components, projectInfo, options) : [];\n const disablePartialExtraction = !!options.disablePartialExtraction;\n const experimentalNativeFastPath = target === \"native\" && options.experimental?.nativeFastPath === true;\n return {\n projectInfo,\n componentModules,\n generation: typeof generation === \"function\" ? generation(projectInfo, componentModules, options) : generation,\n disablePartialExtraction,\n experimentalNativeFastPath,\n zeroRuntime: zeroRuntime !== \"off\",\n cacheStamp: compilerProjectStamp({\n stampSources: projectInfo.stampSources ?? [],\n hostVersions,\n target,\n componentModules,\n disablePartialExtraction,\n experimentalNativeFastPath,\n zeroRuntime: zeroRuntime !== \"off\",\n development: process.env.NODE_ENV === \"development\"\n })\n };\n}\nconst requireFromCompiler = createRequire(\n typeof __filename === \"string\" ? __filename : import.meta.url\n);\nconst compilerPackageVersions = [\"@tamagui/compiler-core\", \"@tamagui/static\"].map(\n (name) => `${name}@${requireFromCompiler(`${name}/package.json`).version}`\n);\nfunction compilerProjectStamp(input) {\n if (!input.stampSources.length) return null;\n const sources = [];\n for (const file of [...new Set(input.stampSources)].sort()) {\n try {\n sources.push([file, contentHash(readFileSync(file))]);\n } catch {\n return null;\n }\n }\n return contentHash(\n stableStringify({\n schema: PLAN_CACHE_SCHEMA_VERSION,\n plan: LOWERED_MODULE_PLAN_VERSION,\n packages: [...compilerPackageVersions, ...input.hostVersions].sort(),\n target: input.target,\n development: input.development,\n componentModules: input.componentModules.map(({ moduleName, id }) => [\n moduleName,\n cleanId(id)\n ]),\n disablePartialExtraction: input.disablePartialExtraction,\n experimentalNativeFastPath: input.experimentalNativeFastPath,\n zeroRuntime: input.zeroRuntime,\n sources\n })\n );\n}\nfunction cleanId(id) {\n return id.split(/[?#]/, 1)[0];\n}\nfunction externalId(specifier) {\n return resolvedModuleId(`external://${encodeURIComponent(specifier)}`);\n}\nfunction compilerContext(input) {\n return `${input.root}\\0${input.target}\\0${input.environment ?? \"\"}\\0${input.project.generation}`;\n}\nfunction sourceCanBeLinked(root, id) {\n const clean = cleanId(id);\n const normalized = clean.replace(/\\\\/g, \"/\");\n if (!path.isAbsolute(clean) || normalized.includes(\"/node_modules/\")) return false;\n const relative = path.relative(root, clean);\n return relative === \"\" || relative !== \"..\" && !relative.startsWith(`..${path.sep}`);\n}\nclass CompilerFrontend {\n session = new CompilerSession();\n queue = Promise.resolve();\n planCaches = /* @__PURE__ */ new Map();\n moduleRecords = /* @__PURE__ */ new Map();\n moduleContext = null;\n discovery = new ComponentDiscovery();\n /**\n * One cache per project root and platform. Absent when the project produced\n * no content stamp, in which case plans are never persisted rather than\n * persisted under an identity that cannot see a config change.\n */\n planCacheFor(input) {\n const stamp = input.project.cacheStamp;\n if (!stamp) return void 0;\n const root = defaultPlanCacheRoot(input.root, input.target);\n let store = this.planCaches.get(root);\n if (!store) {\n store = new ModulePlanCache(root);\n this.planCaches.set(root, store);\n }\n return { store, stamp };\n }\n /** Hits, misses and writes across every plan cache this frontend has used. */\n get planCacheStats() {\n const total = { hits: 0, misses: 0, writes: 0 };\n for (const store of this.planCaches.values()) {\n total.hits += store.stats.hits;\n total.misses += store.stats.misses;\n total.writes += store.stats.writes;\n }\n return total;\n }\n compile(input) {\n const operation = this.queue.then(async () => {\n const previousTarget = process.env.TAMAGUI_TARGET;\n const previousStatic = process.env.IS_STATIC;\n try {\n return await this.compileNow(input);\n } finally {\n if (previousTarget === void 0) delete process.env.TAMAGUI_TARGET;\n else process.env.TAMAGUI_TARGET = previousTarget;\n if (previousStatic === void 0) delete process.env.IS_STATIC;\n else process.env.IS_STATIC = previousStatic;\n }\n });\n this.queue = operation.catch(() => void 0);\n return operation;\n }\n update(input) {\n const operation = this.queue.then(async () => {\n const { modules } = await this.buildTree(input);\n const invalidated = /* @__PURE__ */ new Set();\n for (const module of modules.values()) {\n for (const id of await this.session.update(module)) invalidated.add(id);\n this.moduleRecords.set(module.id, module);\n }\n return [...invalidated].sort();\n });\n this.queue = operation.catch(() => void 0);\n return operation;\n }\n has(id) {\n return this.session.has(resolvedModuleId(cleanId(id)));\n }\n dependentsOf(id) {\n return this.session.dependentsOf(resolvedModuleId(cleanId(id)));\n }\n remove(id) {\n const operation = this.queue.then(async () => {\n const result = await this.session.remove(resolvedModuleId(cleanId(id)));\n for (const invalidatedId of result.invalidatedIds) {\n this.moduleRecords.delete(invalidatedId);\n }\n return result;\n });\n this.queue = operation.catch(() => void 0);\n return operation;\n }\n parseCount(id) {\n return this.session.parseCount(resolvedModuleId(cleanId(id)));\n }\n async compileNow(input) {\n const { rootModule, modules } = await this.buildTree(input);\n const invalidated = /* @__PURE__ */ new Set();\n for (const module of modules.values()) {\n for (const id of await this.session.update(module)) invalidated.add(id);\n this.moduleRecords.set(module.id, module);\n }\n const projectInfo = input.project.projectInfo;\n if (!projectInfo.tamaguiConfig || !projectInfo.components) {\n throw new Error(\"The compiler requires evaluated Tamagui config and components\");\n }\n const componentModules = input.project.componentModules.map((component) => ({\n moduleName: component.moduleName,\n resolvedId: cleanId(component.id)\n }));\n const registry = createComponentRegistry(projectInfo.components, componentModules);\n this.discovery.seed(registry);\n const host = createTamaguiCompilerHost({\n target: input.target,\n tamaguiConfig: projectInfo.tamaguiConfig,\n components: projectInfo.components,\n componentModules,\n registry,\n disablePartialExtraction: input.project.disablePartialExtraction,\n experimentalNativeFastPath: input.project.experimentalNativeFastPath,\n zeroRuntime: input.project.zeroRuntime\n });\n const result = await this.session.compile({\n module: rootModule,\n adapter: {\n target: input.target,\n projectGeneration: input.project.generation,\n host,\n planCache: this.planCacheFor(input),\n async load(id) {\n return modules.get(id) ?? null;\n },\n prepare: (module) => this.discovery.prepare(module, registry, input.evaluate)\n },\n structuralPass: domStructuralPass\n });\n for (const id of result.invalidatedIds) invalidated.add(id);\n return {\n plan: result.plan,\n output: result.output,\n invalidatedIds: [...invalidated].sort()\n };\n }\n /** host-resolved ids of every module discovery found components in */\n discoveredModuleIds() {\n return this.discovery.ids();\n }\n async buildTree(input) {\n const moduleContext = compilerContext(input);\n if (this.moduleContext !== moduleContext) {\n this.moduleRecords.clear();\n this.discovery.clear();\n this.moduleContext = moduleContext;\n }\n const componentBySpecifier = new Map(\n input.project.componentModules.map((component) => [\n component.moduleName,\n resolvedModuleId(cleanId(component.id))\n ])\n );\n const modules = /* @__PURE__ */ new Map();\n const loading = /* @__PURE__ */ new Set();\n const addInstalledClosure = (module) => {\n if (modules.has(module.id) || loading.has(module.id)) return;\n loading.add(module.id);\n for (const dependency of module.imports) {\n if (dependency.external) continue;\n const installedDependency = this.moduleRecords.get(dependency.resolvedId);\n if (installedDependency && this.session.has(dependency.resolvedId)) {\n addInstalledClosure(installedDependency);\n }\n }\n modules.set(module.id, module);\n loading.delete(module.id);\n };\n const loadModule = async (rawId, source) => {\n const id = resolvedModuleId(cleanId(rawId));\n const existing = modules.get(id);\n if (existing) return existing;\n const installed = this.moduleRecords.get(id);\n if (installed?.source === source && this.session.has(id)) {\n addInstalledClosure(installed);\n return installed;\n }\n if (loading.has(id)) {\n return { id, source, imports: [] };\n }\n loading.add(id);\n const imports = [];\n for (const specifier of yukuFactory.scanImports(id, source)) {\n const configuredComponent = componentBySpecifier.get(specifier);\n if (configuredComponent) {\n imports.push({ specifier, resolvedId: configuredComponent, external: true });\n continue;\n }\n const resolution = await input.resolve(specifier, id);\n if (!resolution) continue;\n const canLink = !resolution.external && sourceCanBeLinked(input.root, resolution.id);\n const resolvedId = canLink ? resolvedModuleId(cleanId(resolution.id)) : path.isAbsolute(cleanId(resolution.id)) ? resolvedModuleId(cleanId(resolution.id)) : externalId(specifier);\n imports.push({ specifier, resolvedId, external: !canLink });\n if (canLink && !modules.has(resolvedId) && !loading.has(resolvedId)) {\n const installedDependency = this.moduleRecords.get(resolvedId);\n if (installedDependency && this.session.has(resolvedId)) {\n addInstalledClosure(installedDependency);\n } else {\n const dependencySource = await input.load(resolution.id);\n if (dependencySource !== null) {\n await loadModule(resolution.id, dependencySource);\n }\n }\n }\n }\n const module = { id, source, imports };\n modules.set(id, module);\n loading.delete(id);\n return module;\n };\n const rootModule = await loadModule(input.id, input.source);\n return { rootModule, modules };\n }\n}\nexport {\n CompilerFrontend,\n compilerProjectStamp,\n loadCompilerProject\n};\n//# sourceMappingURL=compiler.js.map\n"],"mappings":"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"}