@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.js","names":[],"sources":["esm/zero/graph.js"],"sourcesContent":["import { ZERO_FAILURE_FOOTER } from \"@tamagui/compiler-core\";\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport path from \"node:path\";\nconst ALLOWED_ZERO_MODULE = /animated-number/;\nconst owningPackageCache = /* @__PURE__ */ new Map();\nfunction owningPackageOf(id) {\n const clean = id.split(/[?#]/, 1)[0];\n if (!clean || clean.startsWith(\"\\0\") || !path.isAbsolute(clean)) return null;\n return owningPackageOfDir(path.dirname(clean));\n}\nfunction owningPackageOfDir(from) {\n if (!from || !path.isAbsolute(from)) return null;\n let dir = from;\n const visited = [];\n while (true) {\n const cached = owningPackageCache.get(dir);\n if (cached !== void 0) {\n for (const seen of visited) owningPackageCache.set(seen, cached);\n return cached;\n }\n visited.push(dir);\n const manifest = path.join(dir, \"package.json\");\n if (existsSync(manifest)) {\n let owner = null;\n try {\n owner = {\n name: JSON.parse(readFileSync(manifest, \"utf8\")).name ?? null,\n manifest\n };\n } catch {\n owner = { name: null, manifest };\n }\n for (const seen of visited) owningPackageCache.set(seen, owner);\n return owner;\n }\n const parent = path.dirname(dir);\n if (parent === dir) {\n for (const seen of visited) owningPackageCache.set(seen, null);\n return null;\n }\n dir = parent;\n }\n}\nfunction isTamaguiModuleId(id, ownManifest) {\n const owner = owningPackageOf(id);\n if (!owner?.name) return false;\n if (ownManifest && owner.manifest === ownManifest) return false;\n return owner.name === \"tamagui\" || owner.name.startsWith(\"@tamagui/\");\n}\nfunction isForbiddenZeroModuleId(id, ownManifest) {\n if (!isTamaguiModuleId(id, ownManifest)) return false;\n return !ALLOWED_ZERO_MODULE.test(id);\n}\nfunction shortestChain(target, entries, importersOf) {\n const entrySet = new Set(entries);\n const seen = /* @__PURE__ */ new Set([target]);\n const queue = [[target]];\n let longest = [target];\n while (queue.length) {\n const chain = queue.shift();\n const head = chain[0];\n if (entrySet.has(head)) return chain;\n if (chain.length > longest.length) longest = chain;\n for (const importer of importersOf.get(head) ?? []) {\n if (seen.has(importer)) continue;\n seen.add(importer);\n queue.push([importer, ...chain]);\n }\n }\n return longest;\n}\nfunction checkZeroGraph(input) {\n const importersOf = new Map(input.importerEdges);\n for (const module of input.modules) {\n if (!importersOf.has(module.id)) importersOf.set(module.id, module.importers ?? []);\n }\n const ownManifest = input.root ? owningPackageOfDir(input.root)?.manifest ?? null : null;\n const tamaguiModules = input.modules.map((module) => module.id).filter((id) => isTamaguiModuleId(id, ownManifest)).sort();\n const forbidden = tamaguiModules.filter((id) => isForbiddenZeroModuleId(id, ownManifest)).map((id) => ({\n id,\n chain: shortestChain(id, input.entries, importersOf),\n owner: owningPackageOf(id)?.name ?? \"\"\n }));\n return { tamaguiModules, forbidden };\n}\nfunction formatZeroGraphFailure(receipt) {\n const lines = [\n `[tamagui zero-runtime] ${receipt.integration} zero entry graph contains ${receipt.forbidden.length} forbidden Tamagui module(s)`,\n \"\"\n ];\n for (const entry of receipt.forbidden) {\n lines.push(entry.owner ? `${entry.id} (package ${entry.owner})` : entry.id);\n lines.push(\n entry.chain.length > 1 ? ` ${entry.chain.join(\"\\n -> \")}` : ` (this bundler exposed no importer edges for that module)`\n );\n }\n lines.push(\"\");\n lines.push(ZERO_FAILURE_FOOTER);\n return lines.join(\"\\n\");\n}\nfunction writeZeroGraphReceipt(outDir, name, receipt) {\n mkdirSync(outDir, { recursive: true });\n const file = path.join(outDir, `${name}.graph.json`);\n writeFileSync(file, `${JSON.stringify(receipt, null, 2)}\n`);\n return file;\n}\nfunction sortZeroViolations(sites) {\n return [...sites].sort(\n (left, right) => (left.file < right.file ? -1 : left.file > right.file ? 1 : 0) || left.line - right.line || left.column - right.column || left.rule - right.rule || (left.message < right.message ? -1 : left.message > right.message ? 1 : 0)\n );\n}\nfunction formatZeroViolations(sites) {\n const sorted = sortZeroViolations(sites);\n const lines = [\n `[tamagui zero-runtime] build failed with ${sorted.length} violations`,\n \"\"\n ];\n for (const site of sorted) {\n lines.push(`Rule ${site.rule} ${site.code}`);\n lines.push(\n `${site.file}:${site.line}:${site.column}${site.component ? ` ${site.component}` : \"\"}`\n );\n lines.push(` ${site.message}`);\n lines.push(\"\");\n }\n lines.push(ZERO_FAILURE_FOOTER);\n return lines.join(\"\\n\");\n}\nfunction writeZeroViolationReport(outDir, name, report) {\n mkdirSync(outDir, { recursive: true });\n const file = path.join(outDir, `${name}.violations.json`);\n writeFileSync(\n file,\n `${JSON.stringify(\n {\n integration: report.integration,\n mode: report.mode,\n count: report.violations.length,\n violations: sortZeroViolations(report.violations)\n },\n null,\n 2\n )}\n`\n );\n return file;\n}\nfunction erasedExportEscape(input) {\n for (const [moduleId, names] of input.erasedExports) {\n if (names.length === 0) continue;\n if (!input.importersOf.has(moduleId)) {\n return `[tamagui zero-runtime] ${input.integration} erased the exported definition(s) ${names.join(\n \", \"\n )} from ${moduleId}, and then could not find that module in its own graph, so nothing proved the erasure was safe.\n\n${ZERO_FAILURE_FOOTER}`;\n }\n const untransformed = (input.importersOf.get(moduleId) ?? []).filter(\n (importer) => !input.transformed.has(importer)\n );\n if (untransformed.length === 0) continue;\n return `[tamagui zero-runtime] ${input.integration} erased the exported definition(s) ${names.join(\n \", \"\n )} from ${moduleId}, but ${untransformed.length} importer(s) in this entry graph were never zero-transformed and may still reference them:\n ${untransformed.join(\n \"\\n \"\n )}\n\n${ZERO_FAILURE_FOOTER}`;\n }\n return null;\n}\nfunction offsetToLineColumn(source, offset) {\n let line = 1;\n let lineStart = 0;\n for (let index = 0; index < offset && index < source.length; index++) {\n if (source.charCodeAt(index) === 10) {\n line++;\n lineStart = index + 1;\n }\n }\n return { line, column: offset - lineStart + 1 };\n}\nexport {\n checkZeroGraph,\n erasedExportEscape,\n formatZeroGraphFailure,\n formatZeroViolations,\n isForbiddenZeroModuleId,\n isTamaguiModuleId,\n offsetToLineColumn,\n owningPackageOf,\n owningPackageOfDir,\n sortZeroViolations,\n writeZeroGraphReceipt,\n writeZeroViolationReport\n};\n//# sourceMappingURL=graph.js.map\n"],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { LOWERED_MODULE_PLAN_VERSION } from "@tamagui/compiler-core";
2
+ import { createHash } from "node:crypto";
3
+
4
+ const ZERO_COMPILER_VERSION = `zero-1/plan-${LOWERED_MODULE_PLAN_VERSION}`;
5
+ function hashZeroIdentity(identity) {
6
+ const canonical = {
7
+ runtimeLiteral: identity.runtimeLiteral,
8
+ target: identity.target,
9
+ configGeneration: identity.configGeneration,
10
+ cssHash: identity.cssHash,
11
+ compilerVersion: identity.compilerVersion,
12
+ islandEntries: [...identity.islandEntries].sort(),
13
+ bridgeManifestHash: identity.bridgeManifestHash,
14
+ islandOutputHashes: Object.fromEntries(Object.entries(identity.islandOutputHashes).sort(([left], [right]) => left < right ? -1 : left > right ? 1 : 0))
15
+ };
16
+ return createHash("sha256").update(JSON.stringify(canonical)).digest("hex").slice(0, 24);
17
+ }
18
+ function canonicalizeBridgeManifest(manifest) {
19
+ if (Array.isArray(manifest)) {
20
+ return manifest.map((entry) => canonicalizeBridgeManifest(entry));
21
+ }
22
+ if (manifest && typeof manifest === "object") {
23
+ const sorted = {};
24
+ for (const key of Object.keys(manifest).sort()) {
25
+ sorted[key] = canonicalizeBridgeManifest(manifest[key]);
26
+ }
27
+ return sorted;
28
+ }
29
+ return manifest;
30
+ }
31
+ function hashBridgeManifest(manifest) {
32
+ return createHash("sha256").update(JSON.stringify(canonicalizeBridgeManifest(manifest))).digest("hex").slice(0, 16);
33
+ }
34
+
35
+ export { ZERO_COMPILER_VERSION, canonicalizeBridgeManifest, hashBridgeManifest, hashZeroIdentity };
36
+ //# sourceMappingURL=identity.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.js","names":[],"sources":["esm/zero/identity.js"],"sourcesContent":["import { LOWERED_MODULE_PLAN_VERSION } from \"@tamagui/compiler-core\";\nimport { createHash } from \"node:crypto\";\nconst ZERO_COMPILER_VERSION = `zero-1/plan-${LOWERED_MODULE_PLAN_VERSION}`;\nfunction hashZeroIdentity(identity) {\n const canonical = {\n runtimeLiteral: identity.runtimeLiteral,\n target: identity.target,\n configGeneration: identity.configGeneration,\n cssHash: identity.cssHash,\n compilerVersion: identity.compilerVersion,\n islandEntries: [...identity.islandEntries].sort(),\n bridgeManifestHash: identity.bridgeManifestHash,\n islandOutputHashes: Object.fromEntries(\n Object.entries(identity.islandOutputHashes).sort(\n ([left], [right]) => left < right ? -1 : left > right ? 1 : 0\n )\n )\n };\n return createHash(\"sha256\").update(JSON.stringify(canonical)).digest(\"hex\").slice(0, 24);\n}\nfunction canonicalizeBridgeManifest(manifest) {\n if (Array.isArray(manifest)) {\n return manifest.map((entry) => canonicalizeBridgeManifest(entry));\n }\n if (manifest && typeof manifest === \"object\") {\n const sorted = {};\n for (const key of Object.keys(manifest).sort()) {\n sorted[key] = canonicalizeBridgeManifest(manifest[key]);\n }\n return sorted;\n }\n return manifest;\n}\nfunction hashBridgeManifest(manifest) {\n return createHash(\"sha256\").update(JSON.stringify(canonicalizeBridgeManifest(manifest))).digest(\"hex\").slice(0, 16);\n}\nexport {\n ZERO_COMPILER_VERSION,\n canonicalizeBridgeManifest,\n hashBridgeManifest,\n hashZeroIdentity\n};\n//# sourceMappingURL=identity.js.map\n"],"mappings":";;;;AAEA,MAAM,wBAAwB,eAAe;AAC7C,SAAS,iBAAiB,UAAU;CAClC,MAAM,YAAY;EAChB,gBAAgB,SAAS;EACzB,QAAQ,SAAS;EACjB,kBAAkB,SAAS;EAC3B,SAAS,SAAS;EAClB,iBAAiB,SAAS;EAC1B,eAAe,CAAC,GAAG,SAAS,aAAa,EAAE,KAAK;EAChD,oBAAoB,SAAS;EAC7B,oBAAoB,OAAO,YACzB,OAAO,QAAQ,SAAS,kBAAkB,EAAE,MACzC,CAAC,OAAO,CAAC,WAAW,OAAO,QAAQ,CAAC,IAAI,OAAO,QAAQ,IAAI,CAC9D,CACF;CACF;CACA,OAAO,WAAW,QAAQ,EAAE,OAAO,KAAK,UAAU,SAAS,CAAC,EAAE,OAAO,KAAK,EAAE,MAAM,GAAG,EAAE;AACzF;AACA,SAAS,2BAA2B,UAAU;CAC5C,IAAI,MAAM,QAAQ,QAAQ,GAAG;EAC3B,OAAO,SAAS,KAAK,UAAU,2BAA2B,KAAK,CAAC;CAClE;CACA,IAAI,YAAY,OAAO,aAAa,UAAU;EAC5C,MAAM,SAAS,CAAC;EAChB,KAAK,MAAM,OAAO,OAAO,KAAK,QAAQ,EAAE,KAAK,GAAG;GAC9C,OAAO,OAAO,2BAA2B,SAAS,IAAI;EACxD;EACA,OAAO;CACT;CACA,OAAO;AACT;AACA,SAAS,mBAAmB,UAAU;CACpC,OAAO,WAAW,QAAQ,EAAE,OAAO,KAAK,UAAU,2BAA2B,QAAQ,CAAC,CAAC,EAAE,OAAO,KAAK,EAAE,MAAM,GAAG,EAAE;AACpH"}
@@ -0,0 +1,15 @@
1
+ export * from "./artifact.mjs"
2
+
3
+ export * from "./graph.mjs"
4
+
5
+ export * from "./identity.mjs"
6
+
7
+ export * from "./islands.mjs"
8
+
9
+ export * from "./options.mjs"
10
+
11
+ export * from "./ownership.mjs"
12
+
13
+ export * from "./theme.mjs"
14
+
15
+ export * from "./transform.mjs"
@@ -0,0 +1,197 @@
1
+ import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
+ import path from "node:path";
3
+
4
+ const ISLAND_RUNTIME_KEY = "__tamagui_island_runtime__";
5
+ const ISLAND_REGISTRY_KEY = "__tamagui_islands__";
6
+ function writeIfChanged(file, content) {
7
+ mkdirSync(path.dirname(file), { recursive: true });
8
+ let existing = null;
9
+ try {
10
+ existing = readFileSync(file, "utf8");
11
+ } catch {
12
+ existing = null;
13
+ }
14
+ if (existing !== content) writeFileSync(file, content);
15
+ }
16
+ function importPath(from, to) {
17
+ const relative = path.relative(path.dirname(from), to).replace(/\\/g, "/");
18
+ return relative.startsWith(".") ? relative : `./${relative}`;
19
+ }
20
+ function generateIslandLoaderSource(input) {
21
+ return `// generated by @tamagui/static zero-runtime. do not edit.
22
+ import * as React from 'react'
23
+ import * as ReactDOM from 'react-dom'
24
+ import * as JSXRuntime from 'react/jsx-runtime'
25
+
26
+ const ISLAND_ID = ${JSON.stringify(input.island.id)}
27
+ const ISLAND_SRC = ${JSON.stringify(input.scriptUrl)}
28
+ const CSS_HREF = ${JSON.stringify(input.cssHref)}
29
+ const INTEGRATION = ${JSON.stringify(input.integration)}
30
+
31
+ function sharedRuntime() {
32
+ const scope = globalThis
33
+ if (!scope[${JSON.stringify(ISLAND_RUNTIME_KEY)}]) {
34
+ scope[${JSON.stringify(ISLAND_RUNTIME_KEY)}] = {
35
+ react: React,
36
+ reactDom: ReactDOM,
37
+ jsxRuntime: JSXRuntime,
38
+ }
39
+ }
40
+ if (!scope[${JSON.stringify(ISLAND_REGISTRY_KEY)}]) {
41
+ scope[${JSON.stringify(ISLAND_REGISTRY_KEY)}] = {}
42
+ }
43
+ return scope
44
+ }
45
+
46
+ // The one accepted runtime recovery in zero-runtime mode, and it is loud on
47
+ // purpose. "Unimported" is not decidable at build time for a published zero
48
+ // artifact on Next or Metro, so the loader still guarantees the island has its
49
+ // styles; on a correct build this never runs.
50
+ function ensureZeroStylesheet() {
51
+ const links = document.querySelectorAll('link[rel="stylesheet"]')
52
+ for (let index = 0; index < links.length; index++) {
53
+ const href = links[index].getAttribute('href') || ''
54
+ if (href === CSS_HREF || href.split('?')[0].endsWith(CSS_HREF)) return
55
+ }
56
+ console.error(
57
+ '[tamagui zero-runtime] the page did not link the generated CSS artifact ' +
58
+ CSS_HREF +
59
+ ', so island "' +
60
+ ISLAND_ID +
61
+ '" (' +
62
+ INTEGRATION +
63
+ ') is loading it at runtime. On a correct build this never happens: the ' +
64
+ 'artifact is generated by the build and must be linked by the document ' +
65
+ 'that mounts the island. Fix the document, not this recovery.'
66
+ )
67
+ const link = document.createElement('link')
68
+ link.rel = 'stylesheet'
69
+ link.href = CSS_HREF
70
+ link.setAttribute('data-tamagui-zero-css', '1')
71
+ document.head.appendChild(link)
72
+ }
73
+
74
+ let pending = null
75
+
76
+ function loadIsland() {
77
+ const scope = sharedRuntime()
78
+ const registered = scope[${JSON.stringify(ISLAND_REGISTRY_KEY)}][ISLAND_ID]
79
+ if (registered) return Promise.resolve(registered)
80
+ if (!pending) {
81
+ pending = new Promise((resolve, reject) => {
82
+ ensureZeroStylesheet()
83
+ const script = document.createElement('script')
84
+ script.src = ISLAND_SRC
85
+ script.async = true
86
+ script.onload = () => {
87
+ const mod = scope[${JSON.stringify(ISLAND_REGISTRY_KEY)}][ISLAND_ID]
88
+ if (mod) resolve(mod)
89
+ else reject(new Error('tamagui island ' + ISLAND_ID + ' did not register'))
90
+ }
91
+ script.onerror = () => reject(new Error('tamagui island ' + ISLAND_ID + ' failed to load ' + ISLAND_SRC))
92
+ document.head.appendChild(script)
93
+ })
94
+ }
95
+ return pending
96
+ }
97
+
98
+ export default function TamaguiIsland(props) {
99
+ const bridgeId = props['data-tamagui-bridge'] || 'root'
100
+ const [Loaded, setLoaded] = React.useState(null)
101
+
102
+ React.useEffect(() => {
103
+ let cancelled = false
104
+ loadIsland().then((mod) => {
105
+ if (!cancelled) setLoaded(() => mod.Island)
106
+ })
107
+ return () => {
108
+ cancelled = true
109
+ }
110
+ }, [])
111
+
112
+ if (!Loaded) {
113
+ return React.createElement('div', {
114
+ 'data-tamagui-island': ISLAND_ID,
115
+ 'data-tamagui-bridge': bridgeId,
116
+ })
117
+ }
118
+
119
+ const forwarded = {}
120
+ for (const key in props) forwarded[key] = props[key]
121
+ forwarded['data-tamagui-island'] = ISLAND_ID
122
+ return React.createElement(Loaded, forwarded)
123
+ }
124
+ `;
125
+ }
126
+ function generateIslandEntrySource(input) {
127
+ const entry = input.island.entry;
128
+ return `// generated by @tamagui/static zero-runtime. do not edit.
129
+ import * as React from 'react'
130
+ import { TamaguiProvider, Theme } from 'tamagui'
131
+ import config from ${JSON.stringify(importPath(entry, input.configPath))}
132
+ import IslandRoot from ${JSON.stringify(importPath(entry, input.island.module))}
133
+
134
+ export function Island(props) {
135
+ const bridge = props.__tamaguiBridge
136
+ const inner = {}
137
+ for (const key in props) {
138
+ if (key !== '__tamaguiBridge') inner[key] = props[key]
139
+ }
140
+ let node = React.createElement(IslandRoot, inner)
141
+ const layers = (bridge && bridge.layers) || []
142
+ for (let index = layers.length - 1; index >= 0; index--) {
143
+ node = React.createElement(
144
+ Theme,
145
+ {
146
+ inlineValues: layers[index].inlineValues,
147
+ inlineClassName: layers[index].inlineClassName,
148
+ forceClassName: true,
149
+ },
150
+ node
151
+ )
152
+ }
153
+ // isSubtreeRoot: the island shares a document with a zero page that already
154
+ // has its own compiled theme spans, so its provider must not write a theme
155
+ // class onto html or body and must carry its own theme on its own node.
156
+ return React.createElement(
157
+ TamaguiProvider,
158
+ {
159
+ config,
160
+ defaultTheme: (bridge && bridge.name) || 'light',
161
+ disableInjectCSS: true,
162
+ isSubtreeRoot: true,
163
+ },
164
+ node
165
+ )
166
+ }
167
+
168
+ const scope = globalThis
169
+ if (!scope[${JSON.stringify(ISLAND_REGISTRY_KEY)}]) scope[${JSON.stringify(ISLAND_REGISTRY_KEY)}] = {}
170
+ scope[${JSON.stringify(ISLAND_REGISTRY_KEY)}][${JSON.stringify(input.island.id)}] = { Island }
171
+ `;
172
+ }
173
+ function writeIslandModules(input) {
174
+ writeIfChanged(input.island.loader, generateIslandLoaderSource(input));
175
+ writeIfChanged(input.island.entry, generateIslandEntrySource(input));
176
+ }
177
+ const ISLAND_EXTERNAL_GLOBAL_PATHS = {
178
+ react: [ISLAND_RUNTIME_KEY, "react"],
179
+ "react-dom": [ISLAND_RUNTIME_KEY, "reactDom"],
180
+ "react/jsx-runtime": [ISLAND_RUNTIME_KEY, "jsxRuntime"]
181
+ };
182
+ const ISLAND_EXTERNAL_GLOBALS = Object.fromEntries(Object.entries(ISLAND_EXTERNAL_GLOBAL_PATHS).map(([name, segments]) => [name, `globalThis.${segments.join(".")}`]));
183
+ function mergeIslandBridges(target, incoming) {
184
+ for (const [islandId, bridges] of incoming) {
185
+ const list = target.get(islandId) ?? [];
186
+ for (const bridge of bridges) {
187
+ const index = list.findIndex((existing) => existing.id === bridge.id);
188
+ if (index >= 0) list[index] = bridge;
189
+ else list.push(bridge);
190
+ }
191
+ list.sort((left, right) => left.id < right.id ? -1 : left.id > right.id ? 1 : 0);
192
+ target.set(islandId, list);
193
+ }
194
+ }
195
+
196
+ export { ISLAND_EXTERNAL_GLOBALS, ISLAND_EXTERNAL_GLOBAL_PATHS, ISLAND_REGISTRY_KEY, ISLAND_RUNTIME_KEY, generateIslandEntrySource, generateIslandLoaderSource, mergeIslandBridges, writeIslandModules };
197
+ //# sourceMappingURL=islands.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"islands.js","names":[],"sources":["esm/zero/islands.js"],"sourcesContent":["import { mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport path from \"node:path\";\nconst ISLAND_RUNTIME_KEY = \"__tamagui_island_runtime__\";\nconst ISLAND_REGISTRY_KEY = \"__tamagui_islands__\";\nfunction writeIfChanged(file, content) {\n mkdirSync(path.dirname(file), { recursive: true });\n let existing = null;\n try {\n existing = readFileSync(file, \"utf8\");\n } catch {\n existing = null;\n }\n if (existing !== content) writeFileSync(file, content);\n}\nfunction importPath(from, to) {\n const relative = path.relative(path.dirname(from), to).replace(/\\\\/g, \"/\");\n return relative.startsWith(\".\") ? relative : `./${relative}`;\n}\nfunction generateIslandLoaderSource(input) {\n return `// generated by @tamagui/static zero-runtime. do not edit.\nimport * as React from 'react'\nimport * as ReactDOM from 'react-dom'\nimport * as JSXRuntime from 'react/jsx-runtime'\n\nconst ISLAND_ID = ${JSON.stringify(input.island.id)}\nconst ISLAND_SRC = ${JSON.stringify(input.scriptUrl)}\nconst CSS_HREF = ${JSON.stringify(input.cssHref)}\nconst INTEGRATION = ${JSON.stringify(input.integration)}\n\nfunction sharedRuntime() {\n const scope = globalThis\n if (!scope[${JSON.stringify(ISLAND_RUNTIME_KEY)}]) {\n scope[${JSON.stringify(ISLAND_RUNTIME_KEY)}] = {\n react: React,\n reactDom: ReactDOM,\n jsxRuntime: JSXRuntime,\n }\n }\n if (!scope[${JSON.stringify(ISLAND_REGISTRY_KEY)}]) {\n scope[${JSON.stringify(ISLAND_REGISTRY_KEY)}] = {}\n }\n return scope\n}\n\n// The one accepted runtime recovery in zero-runtime mode, and it is loud on\n// purpose. \"Unimported\" is not decidable at build time for a published zero\n// artifact on Next or Metro, so the loader still guarantees the island has its\n// styles; on a correct build this never runs.\nfunction ensureZeroStylesheet() {\n const links = document.querySelectorAll('link[rel=\"stylesheet\"]')\n for (let index = 0; index < links.length; index++) {\n const href = links[index].getAttribute('href') || ''\n if (href === CSS_HREF || href.split('?')[0].endsWith(CSS_HREF)) return\n }\n console.error(\n '[tamagui zero-runtime] the page did not link the generated CSS artifact ' +\n CSS_HREF +\n ', so island \"' +\n ISLAND_ID +\n '\" (' +\n INTEGRATION +\n ') is loading it at runtime. On a correct build this never happens: the ' +\n 'artifact is generated by the build and must be linked by the document ' +\n 'that mounts the island. Fix the document, not this recovery.'\n )\n const link = document.createElement('link')\n link.rel = 'stylesheet'\n link.href = CSS_HREF\n link.setAttribute('data-tamagui-zero-css', '1')\n document.head.appendChild(link)\n}\n\nlet pending = null\n\nfunction loadIsland() {\n const scope = sharedRuntime()\n const registered = scope[${JSON.stringify(ISLAND_REGISTRY_KEY)}][ISLAND_ID]\n if (registered) return Promise.resolve(registered)\n if (!pending) {\n pending = new Promise((resolve, reject) => {\n ensureZeroStylesheet()\n const script = document.createElement('script')\n script.src = ISLAND_SRC\n script.async = true\n script.onload = () => {\n const mod = scope[${JSON.stringify(ISLAND_REGISTRY_KEY)}][ISLAND_ID]\n if (mod) resolve(mod)\n else reject(new Error('tamagui island ' + ISLAND_ID + ' did not register'))\n }\n script.onerror = () => reject(new Error('tamagui island ' + ISLAND_ID + ' failed to load ' + ISLAND_SRC))\n document.head.appendChild(script)\n })\n }\n return pending\n}\n\nexport default function TamaguiIsland(props) {\n const bridgeId = props['data-tamagui-bridge'] || 'root'\n const [Loaded, setLoaded] = React.useState(null)\n\n React.useEffect(() => {\n let cancelled = false\n loadIsland().then((mod) => {\n if (!cancelled) setLoaded(() => mod.Island)\n })\n return () => {\n cancelled = true\n }\n }, [])\n\n if (!Loaded) {\n return React.createElement('div', {\n 'data-tamagui-island': ISLAND_ID,\n 'data-tamagui-bridge': bridgeId,\n })\n }\n\n const forwarded = {}\n for (const key in props) forwarded[key] = props[key]\n forwarded['data-tamagui-island'] = ISLAND_ID\n return React.createElement(Loaded, forwarded)\n}\n`;\n}\nfunction generateIslandEntrySource(input) {\n const entry = input.island.entry;\n return `// generated by @tamagui/static zero-runtime. do not edit.\nimport * as React from 'react'\nimport { TamaguiProvider, Theme } from 'tamagui'\nimport config from ${JSON.stringify(importPath(entry, input.configPath))}\nimport IslandRoot from ${JSON.stringify(importPath(entry, input.island.module))}\n\nexport function Island(props) {\n const bridge = props.__tamaguiBridge\n const inner = {}\n for (const key in props) {\n if (key !== '__tamaguiBridge') inner[key] = props[key]\n }\n let node = React.createElement(IslandRoot, inner)\n const layers = (bridge && bridge.layers) || []\n for (let index = layers.length - 1; index >= 0; index--) {\n node = React.createElement(\n Theme,\n {\n inlineValues: layers[index].inlineValues,\n inlineClassName: layers[index].inlineClassName,\n forceClassName: true,\n },\n node\n )\n }\n // isSubtreeRoot: the island shares a document with a zero page that already\n // has its own compiled theme spans, so its provider must not write a theme\n // class onto html or body and must carry its own theme on its own node.\n return React.createElement(\n TamaguiProvider,\n {\n config,\n defaultTheme: (bridge && bridge.name) || 'light',\n disableInjectCSS: true,\n isSubtreeRoot: true,\n },\n node\n )\n}\n\nconst scope = globalThis\nif (!scope[${JSON.stringify(ISLAND_REGISTRY_KEY)}]) scope[${JSON.stringify(ISLAND_REGISTRY_KEY)}] = {}\nscope[${JSON.stringify(ISLAND_REGISTRY_KEY)}][${JSON.stringify(input.island.id)}] = { Island }\n`;\n}\nfunction writeIslandModules(input) {\n writeIfChanged(input.island.loader, generateIslandLoaderSource(input));\n writeIfChanged(input.island.entry, generateIslandEntrySource(input));\n}\nconst ISLAND_EXTERNAL_GLOBAL_PATHS = {\n react: [ISLAND_RUNTIME_KEY, \"react\"],\n \"react-dom\": [ISLAND_RUNTIME_KEY, \"reactDom\"],\n \"react/jsx-runtime\": [ISLAND_RUNTIME_KEY, \"jsxRuntime\"]\n};\nconst ISLAND_EXTERNAL_GLOBALS = Object.fromEntries(\n Object.entries(ISLAND_EXTERNAL_GLOBAL_PATHS).map(([name, segments]) => [\n name,\n `globalThis.${segments.join(\".\")}`\n ])\n);\nfunction mergeIslandBridges(target, incoming) {\n for (const [islandId, bridges] of incoming) {\n const list = target.get(islandId) ?? [];\n for (const bridge of bridges) {\n const index = list.findIndex((existing) => existing.id === bridge.id);\n if (index >= 0) list[index] = bridge;\n else list.push(bridge);\n }\n list.sort((left, right) => left.id < right.id ? -1 : left.id > right.id ? 1 : 0);\n target.set(islandId, list);\n }\n}\nexport {\n ISLAND_EXTERNAL_GLOBALS,\n ISLAND_EXTERNAL_GLOBAL_PATHS,\n ISLAND_REGISTRY_KEY,\n ISLAND_RUNTIME_KEY,\n generateIslandEntrySource,\n generateIslandLoaderSource,\n mergeIslandBridges,\n writeIslandModules\n};\n//# sourceMappingURL=islands.js.map\n"],"mappings":";;;;AAEA,MAAM,qBAAqB;AAC3B,MAAM,sBAAsB;AAC5B,SAAS,eAAe,MAAM,SAAS;CACrC,UAAU,KAAK,QAAQ,IAAI,GAAG,EAAE,WAAW,KAAK,CAAC;CACjD,IAAI,WAAW;CACf,IAAI;EACF,WAAW,aAAa,MAAM,MAAM;CACtC,QAAQ;EACN,WAAW;CACb;CACA,IAAI,aAAa,SAAS,cAAc,MAAM,OAAO;AACvD;AACA,SAAS,WAAW,MAAM,IAAI;CAC5B,MAAM,WAAW,KAAK,SAAS,KAAK,QAAQ,IAAI,GAAG,EAAE,EAAE,QAAQ,OAAO,GAAG;CACzE,OAAO,SAAS,WAAW,GAAG,IAAI,WAAW,KAAK;AACpD;AACA,SAAS,2BAA2B,OAAO;CACzC,OAAO;;;;;oBAKW,KAAK,UAAU,MAAM,OAAO,EAAE,EAAE;qBAC/B,KAAK,UAAU,MAAM,SAAS,EAAE;mBAClC,KAAK,UAAU,MAAM,OAAO,EAAE;sBAC3B,KAAK,UAAU,MAAM,WAAW,EAAE;;;;eAIzC,KAAK,UAAU,kBAAkB,EAAE;YACtC,KAAK,UAAU,kBAAkB,EAAE;;;;;;eAMhC,KAAK,UAAU,mBAAmB,EAAE;YACvC,KAAK,UAAU,mBAAmB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAqCnB,KAAK,UAAU,mBAAmB,EAAE;;;;;;;;;4BASrC,KAAK,UAAU,mBAAmB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsChE;AACA,SAAS,0BAA0B,OAAO;CACxC,MAAM,QAAQ,MAAM,OAAO;CAC3B,OAAO;;;qBAGY,KAAK,UAAU,WAAW,OAAO,MAAM,UAAU,CAAC,EAAE;yBAChD,KAAK,UAAU,WAAW,OAAO,MAAM,OAAO,MAAM,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAqCnE,KAAK,UAAU,mBAAmB,EAAE,WAAW,KAAK,UAAU,mBAAmB,EAAE;QACxF,KAAK,UAAU,mBAAmB,EAAE,IAAI,KAAK,UAAU,MAAM,OAAO,EAAE,EAAE;;AAEhF;AACA,SAAS,mBAAmB,OAAO;CACjC,eAAe,MAAM,OAAO,QAAQ,2BAA2B,KAAK,CAAC;CACrE,eAAe,MAAM,OAAO,OAAO,0BAA0B,KAAK,CAAC;AACrE;AACA,MAAM,+BAA+B;CACnC,OAAO,CAAC,oBAAoB,OAAO;CACnC,aAAa,CAAC,oBAAoB,UAAU;CAC5C,qBAAqB,CAAC,oBAAoB,YAAY;AACxD;AACA,MAAM,0BAA0B,OAAO,YACrC,OAAO,QAAQ,4BAA4B,EAAE,KAAK,CAAC,MAAM,cAAc,CACrE,MACA,cAAc,SAAS,KAAK,GAAG,GACjC,CAAC,CACH;AACA,SAAS,mBAAmB,QAAQ,UAAU;CAC5C,KAAK,MAAM,CAAC,UAAU,YAAY,UAAU;EAC1C,MAAM,OAAO,OAAO,IAAI,QAAQ,KAAK,CAAC;EACtC,KAAK,MAAM,UAAU,SAAS;GAC5B,MAAM,QAAQ,KAAK,WAAW,aAAa,SAAS,OAAO,OAAO,EAAE;GACpE,IAAI,SAAS,GAAG,KAAK,SAAS;QACzB,KAAK,KAAK,MAAM;EACvB;EACA,KAAK,MAAM,MAAM,UAAU,KAAK,KAAK,MAAM,KAAK,CAAC,IAAI,KAAK,KAAK,MAAM,KAAK,IAAI,CAAC;EAC/E,OAAO,IAAI,UAAU,IAAI;CAC3B;AACF"}
@@ -0,0 +1,129 @@
1
+ import { zeroConfigDriverMessage } from "@tamagui/compiler-core";
2
+ import glob from "fast-glob";
3
+ import path from "node:path";
4
+
5
+ const ZERO_OUT_DIRNAME = ".tamagui/zero";
6
+ function islandIdFor(moduleId) {
7
+ return path.basename(moduleId).replace(/\.[jt]sx?$/, "");
8
+ }
9
+ async function resolveZeroRuntime(options, root) {
10
+ const early = resolveZeroRuntimeEarly(options, root);
11
+ if (early.done) return early.resolved;
12
+ return finishZeroRuntime(options, root, early.islandGlobs, early.islandGlobs.length ? await glob(early.islandGlobs, {
13
+ cwd: root,
14
+ absolute: true,
15
+ dot: false
16
+ }) : []);
17
+ }
18
+ function resolveZeroRuntimeSync(options, root) {
19
+ const early = resolveZeroRuntimeEarly(options, root);
20
+ if (early.done) return early.resolved;
21
+ return finishZeroRuntime(options, root, early.islandGlobs, early.islandGlobs.length ? glob.sync(early.islandGlobs, {
22
+ cwd: root,
23
+ absolute: true,
24
+ dot: false
25
+ }) : []);
26
+ }
27
+ function resolveZeroRuntimeEarly(options, root) {
28
+ const requested = options.experimental?.zeroRuntime;
29
+ const outDir = path.join(root, ZERO_OUT_DIRNAME);
30
+ const off = {
31
+ mode: "off",
32
+ root,
33
+ islandGlobs: [],
34
+ islands: [],
35
+ outDir,
36
+ cssPath: ""
37
+ };
38
+ if (!requested) return {
39
+ done: true,
40
+ resolved: off
41
+ };
42
+ if (options.platform === "native" && requested === "report") {
43
+ return {
44
+ done: true,
45
+ resolved: {
46
+ ...off,
47
+ mode: "report"
48
+ }
49
+ };
50
+ }
51
+ if (options.platform === "native") {
52
+ throw new Error(`[tamagui zero-runtime] experimental.zeroRuntime is web only. A native build always receives TAMAGUI_RUNTIME="full".`);
53
+ }
54
+ if (requested !== "report" && !options.outputCSS) {
55
+ throw new Error(`[tamagui zero-runtime] experimental.zeroRuntime requires outputCSS. The bundler owns one generated CSS artifact and derives TAMAGUI_DID_OUTPUT_CSS from it.`);
56
+ }
57
+ if (requested !== "report" && process.env.TAMAGUI_DOES_SSR_CSS === "mutates-themes") {
58
+ throw new Error(`[tamagui zero-runtime] Rule 4: TAMAGUI_DOES_SSR_CSS="mutates-themes" declares runtime theme mutation. Zero-runtime themes are build-time data. Remove runtime mutation or move that surface to a full-runtime island.`);
59
+ }
60
+ return {
61
+ done: false,
62
+ islandGlobs: requested === true || requested === "report" ? [] : requested.islands
63
+ };
64
+ }
65
+ function finishZeroRuntime(options, root, islandGlobs, matches) {
66
+ const outDir = path.join(root, ZERO_OUT_DIRNAME);
67
+ const outputCSS = options.outputCSS ?? "";
68
+ const islands = [...new Set(matches.map((match) => path.normalize(match)))].sort().map((module) => {
69
+ const id = islandIdFor(module);
70
+ return {
71
+ id,
72
+ module,
73
+ loader: path.join(outDir, `${id}.loader.js`),
74
+ entry: path.join(outDir, `${id}.entry.js`)
75
+ };
76
+ });
77
+ const seen = /* @__PURE__ */ new Set();
78
+ for (const island of islands) {
79
+ if (seen.has(island.id)) {
80
+ throw new Error(`[tamagui zero-runtime] two declared islands share the basename "${island.id}". Island ids are their module basename because that is also the generated loader's filename.`);
81
+ }
82
+ seen.add(island.id);
83
+ }
84
+ if (islandGlobs.length && islands.length === 0) {
85
+ throw new Error(`[tamagui zero-runtime] experimental.zeroRuntime.islands matched no module for ${JSON.stringify(islandGlobs)}`);
86
+ }
87
+ return {
88
+ mode: options.experimental?.zeroRuntime === "report" ? "report" : "enforce",
89
+ root,
90
+ islandGlobs,
91
+ islands,
92
+ outDir,
93
+ cssPath: !outputCSS ? "" : path.isAbsolute(outputCSS) ? outputCSS : path.resolve(root, outputCSS)
94
+ };
95
+ }
96
+ function assertZeroConfigDrivers(config) {
97
+ const drivers = config.animationDrivers ? Object.entries(config.animationDrivers) : [["default", config.animations]];
98
+ for (const [name, driver] of drivers) {
99
+ if (!driver || driver.outputStyle === "css") continue;
100
+ throw new Error(zeroConfigDriverMessage(name, driver.outputStyle));
101
+ }
102
+ }
103
+ const ZERO_INTEGRATION_SUPPORT = {
104
+ vite: {
105
+ base: true,
106
+ islands: true
107
+ },
108
+ "next-webpack": {
109
+ base: true,
110
+ islands: true
111
+ },
112
+ "metro-web": {
113
+ base: true,
114
+ islands: true
115
+ }
116
+ };
117
+ function assertZeroIntegrationSupport(integration, resolved) {
118
+ if (resolved.mode !== "enforce") return;
119
+ const support = ZERO_INTEGRATION_SUPPORT[integration];
120
+ if (!support.base) {
121
+ throw new Error(`[tamagui zero-runtime] ${integration} has not qualified for zero-runtime output in this version. Use zeroRuntime: "report" or choose a qualified integration.`);
122
+ }
123
+ if (resolved.islands.length && !support.islands) {
124
+ throw new Error(`[tamagui zero-runtime] ${integration} does not support experimental.zeroRuntime islands in this version. Use zeroRuntime: true without islands or choose an integration with island support.`);
125
+ }
126
+ }
127
+
128
+ export { ZERO_INTEGRATION_SUPPORT, ZERO_OUT_DIRNAME, assertZeroConfigDrivers, assertZeroIntegrationSupport, islandIdFor, resolveZeroRuntime, resolveZeroRuntimeSync };
129
+ //# sourceMappingURL=options.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.js","names":[],"sources":["esm/zero/options.js"],"sourcesContent":["import { zeroConfigDriverMessage } from \"@tamagui/compiler-core\";\nimport glob from \"fast-glob\";\nimport path from \"node:path\";\nconst ZERO_OUT_DIRNAME = \".tamagui/zero\";\nfunction islandIdFor(moduleId) {\n return path.basename(moduleId).replace(/\\.[jt]sx?$/, \"\");\n}\nasync function resolveZeroRuntime(options, root) {\n const early = resolveZeroRuntimeEarly(options, root);\n if (early.done) return early.resolved;\n return finishZeroRuntime(\n options,\n root,\n early.islandGlobs,\n early.islandGlobs.length ? await glob(early.islandGlobs, { cwd: root, absolute: true, dot: false }) : []\n );\n}\nfunction resolveZeroRuntimeSync(options, root) {\n const early = resolveZeroRuntimeEarly(options, root);\n if (early.done) return early.resolved;\n return finishZeroRuntime(\n options,\n root,\n early.islandGlobs,\n early.islandGlobs.length ? glob.sync(early.islandGlobs, { cwd: root, absolute: true, dot: false }) : []\n );\n}\nfunction resolveZeroRuntimeEarly(options, root) {\n const requested = options.experimental?.zeroRuntime;\n const outDir = path.join(root, ZERO_OUT_DIRNAME);\n const off = {\n mode: \"off\",\n root,\n islandGlobs: [],\n islands: [],\n outDir,\n cssPath: \"\"\n };\n if (!requested) return { done: true, resolved: off };\n if (options.platform === \"native\" && requested === \"report\") {\n return { done: true, resolved: { ...off, mode: \"report\" } };\n }\n if (options.platform === \"native\") {\n throw new Error(\n `[tamagui zero-runtime] experimental.zeroRuntime is web only. A native build always receives TAMAGUI_RUNTIME=\"full\".`\n );\n }\n if (requested !== \"report\" && !options.outputCSS) {\n throw new Error(\n `[tamagui zero-runtime] experimental.zeroRuntime requires outputCSS. The bundler owns one generated CSS artifact and derives TAMAGUI_DID_OUTPUT_CSS from it.`\n );\n }\n if (requested !== \"report\" && process.env.TAMAGUI_DOES_SSR_CSS === \"mutates-themes\") {\n throw new Error(\n `[tamagui zero-runtime] Rule 4: TAMAGUI_DOES_SSR_CSS=\"mutates-themes\" declares runtime theme mutation. Zero-runtime themes are build-time data. Remove runtime mutation or move that surface to a full-runtime island.`\n );\n }\n return {\n done: false,\n islandGlobs: requested === true || requested === \"report\" ? [] : requested.islands\n };\n}\nfunction finishZeroRuntime(options, root, islandGlobs, matches) {\n const outDir = path.join(root, ZERO_OUT_DIRNAME);\n const outputCSS = options.outputCSS ?? \"\";\n const islands = [...new Set(matches.map((match) => path.normalize(match)))].sort().map((module) => {\n const id = islandIdFor(module);\n return {\n id,\n module,\n loader: path.join(outDir, `${id}.loader.js`),\n entry: path.join(outDir, `${id}.entry.js`)\n };\n });\n const seen = /* @__PURE__ */ new Set();\n for (const island of islands) {\n if (seen.has(island.id)) {\n throw new Error(\n `[tamagui zero-runtime] two declared islands share the basename \"${island.id}\". Island ids are their module basename because that is also the generated loader's filename.`\n );\n }\n seen.add(island.id);\n }\n if (islandGlobs.length && islands.length === 0) {\n throw new Error(\n `[tamagui zero-runtime] experimental.zeroRuntime.islands matched no module for ${JSON.stringify(\n islandGlobs\n )}`\n );\n }\n return {\n mode: options.experimental?.zeroRuntime === \"report\" ? \"report\" : \"enforce\",\n root,\n islandGlobs,\n islands,\n outDir,\n cssPath: !outputCSS ? \"\" : path.isAbsolute(outputCSS) ? outputCSS : path.resolve(root, outputCSS)\n };\n}\nfunction assertZeroConfigDrivers(config) {\n const drivers = config.animationDrivers ? Object.entries(config.animationDrivers) : [[\"default\", config.animations]];\n for (const [name, driver] of drivers) {\n if (!driver || driver.outputStyle === \"css\") continue;\n throw new Error(zeroConfigDriverMessage(name, driver.outputStyle));\n }\n}\nconst ZERO_INTEGRATION_SUPPORT = {\n vite: { base: true, islands: true },\n \"next-webpack\": { base: true, islands: true },\n \"metro-web\": { base: true, islands: true }\n};\nfunction assertZeroIntegrationSupport(integration, resolved) {\n if (resolved.mode !== \"enforce\") return;\n const support = ZERO_INTEGRATION_SUPPORT[integration];\n if (!support.base) {\n throw new Error(\n `[tamagui zero-runtime] ${integration} has not qualified for zero-runtime output in this version. Use zeroRuntime: \"report\" or choose a qualified integration.`\n );\n }\n if (resolved.islands.length && !support.islands) {\n throw new Error(\n `[tamagui zero-runtime] ${integration} does not support experimental.zeroRuntime islands in this version. Use zeroRuntime: true without islands or choose an integration with island support.`\n );\n }\n}\nexport {\n ZERO_INTEGRATION_SUPPORT,\n ZERO_OUT_DIRNAME,\n assertZeroConfigDrivers,\n assertZeroIntegrationSupport,\n islandIdFor,\n resolveZeroRuntime,\n resolveZeroRuntimeSync\n};\n//# sourceMappingURL=options.js.map\n"],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import { createHash } from "node:crypto";
2
+ import { readFileSync } from "node:fs";
3
+ import path from "node:path";
4
+ import { resolveZeroRuntimeSync } from "./options.mjs";
5
+
6
+ const hashCSS = (css) => createHash("sha256").update(css).digest("hex").slice(0, 16);
7
+ const normalize = (value) => value.split(/[?#]/, 1)[0].replace(/\\/g, "/");
8
+ const declaresRuntimeThemeMutation = () => process.env.TAMAGUI_DOES_SSR_CSS === "mutates-themes";
9
+ function resolveGlobalCSSOwnership(options, root) {
10
+ if (options.disable) return null;
11
+ if (options.platform === "native") return null;
12
+ if (!options.outputCSS) return null;
13
+ if (declaresRuntimeThemeMutation()) return null;
14
+ if (resolveZeroRuntimeSync(options, root).mode === "enforce") return null;
15
+ return { cssPath: path.isAbsolute(options.outputCSS) ? options.outputCSS : path.resolve(root, options.outputCSS) };
16
+ }
17
+ function checkGlobalCSSArtifact(input) {
18
+ const { cssPath, expectedCSS } = input;
19
+ let onDisk;
20
+ try {
21
+ onDisk = readFileSync(cssPath, "utf8");
22
+ } catch {
23
+ return {
24
+ kind: "missing",
25
+ cssPath,
26
+ message: `[tamagui] the generated CSS artifact ${cssPath} does not exist, so this build cannot claim TAMAGUI_DID_OUTPUT_CSS. The design-system, :root, font and theme rules would be stripped from JavaScript and put nowhere.`
27
+ };
28
+ }
29
+ if (onDisk !== expectedCSS) {
30
+ return {
31
+ kind: "stale",
32
+ cssPath,
33
+ message: `[tamagui] the generated CSS artifact ${cssPath} is stale: it hashes ${hashCSS(onDisk)} but this build's config generates ${hashCSS(expectedCSS)}. Deriving TAMAGUI_DID_OUTPUT_CSS from it would ship rules that do not match the build.`
34
+ };
35
+ }
36
+ const wanted = normalize(cssPath);
37
+ for (const id of input.loadedModuleIds) {
38
+ if (normalize(id) === wanted) return null;
39
+ }
40
+ return {
41
+ kind: "unimported",
42
+ cssPath,
43
+ message: `[tamagui] the generated CSS artifact ${cssPath} exists but the entry graph never loads it. ${input.importHint}`
44
+ };
45
+ }
46
+
47
+ export { checkGlobalCSSArtifact, declaresRuntimeThemeMutation, hashCSS, resolveGlobalCSSOwnership };
48
+ //# sourceMappingURL=ownership.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ownership.js","names":[],"sources":["esm/zero/ownership.js"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { readFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { resolveZeroRuntimeSync } from \"./options\";\nconst hashCSS = (css) => createHash(\"sha256\").update(css).digest(\"hex\").slice(0, 16);\nconst normalize = (value) => value.split(/[?#]/, 1)[0].replace(/\\\\/g, \"/\");\nconst declaresRuntimeThemeMutation = () => process.env.TAMAGUI_DOES_SSR_CSS === \"mutates-themes\";\nfunction resolveGlobalCSSOwnership(options, root) {\n if (options.disable) return null;\n if (options.platform === \"native\") return null;\n if (!options.outputCSS) return null;\n if (declaresRuntimeThemeMutation()) return null;\n if (resolveZeroRuntimeSync(options, root).mode === \"enforce\") return null;\n return {\n cssPath: path.isAbsolute(options.outputCSS) ? options.outputCSS : path.resolve(root, options.outputCSS)\n };\n}\nfunction checkGlobalCSSArtifact(input) {\n const { cssPath, expectedCSS } = input;\n let onDisk;\n try {\n onDisk = readFileSync(cssPath, \"utf8\");\n } catch {\n return {\n kind: \"missing\",\n cssPath,\n message: `[tamagui] the generated CSS artifact ${cssPath} does not exist, so this build cannot claim TAMAGUI_DID_OUTPUT_CSS. The design-system, :root, font and theme rules would be stripped from JavaScript and put nowhere.`\n };\n }\n if (onDisk !== expectedCSS) {\n return {\n kind: \"stale\",\n cssPath,\n message: `[tamagui] the generated CSS artifact ${cssPath} is stale: it hashes ${hashCSS(\n onDisk\n )} but this build's config generates ${hashCSS(\n expectedCSS\n )}. Deriving TAMAGUI_DID_OUTPUT_CSS from it would ship rules that do not match the build.`\n };\n }\n const wanted = normalize(cssPath);\n for (const id of input.loadedModuleIds) {\n if (normalize(id) === wanted) return null;\n }\n return {\n kind: \"unimported\",\n cssPath,\n message: `[tamagui] the generated CSS artifact ${cssPath} exists but the entry graph never loads it. ${input.importHint}`\n };\n}\nexport {\n checkGlobalCSSArtifact,\n declaresRuntimeThemeMutation,\n hashCSS,\n resolveGlobalCSSOwnership\n};\n//# sourceMappingURL=ownership.js.map\n"],"mappings":";;;;;;AAIA,MAAM,WAAW,QAAQ,WAAW,QAAQ,EAAE,OAAO,GAAG,EAAE,OAAO,KAAK,EAAE,MAAM,GAAG,EAAE;AACnF,MAAM,aAAa,UAAU,MAAM,MAAM,QAAQ,CAAC,EAAE,GAAG,QAAQ,OAAO,GAAG;AACzE,MAAM,qCAAqC,QAAQ,IAAI,yBAAyB;AAChF,SAAS,0BAA0B,SAAS,MAAM;CAChD,IAAI,QAAQ,SAAS,OAAO;CAC5B,IAAI,QAAQ,aAAa,UAAU,OAAO;CAC1C,IAAI,CAAC,QAAQ,WAAW,OAAO;CAC/B,IAAI,6BAA6B,GAAG,OAAO;CAC3C,IAAI,uBAAuB,SAAS,IAAI,EAAE,SAAS,WAAW,OAAO;CACrE,OAAO,EACL,SAAS,KAAK,WAAW,QAAQ,SAAS,IAAI,QAAQ,YAAY,KAAK,QAAQ,MAAM,QAAQ,SAAS,EACxG;AACF;AACA,SAAS,uBAAuB,OAAO;CACrC,MAAM,EAAE,SAAS,gBAAgB;CACjC,IAAI;CACJ,IAAI;EACF,SAAS,aAAa,SAAS,MAAM;CACvC,QAAQ;EACN,OAAO;GACL,MAAM;GACN;GACA,SAAS,wCAAwC,QAAQ;EAC3D;CACF;CACA,IAAI,WAAW,aAAa;EAC1B,OAAO;GACL,MAAM;GACN;GACA,SAAS,wCAAwC,QAAQ,uBAAuB,QAC9E,MACF,EAAE,qCAAqC,QACrC,WACF,EAAE;EACJ;CACF;CACA,MAAM,SAAS,UAAU,OAAO;CAChC,KAAK,MAAM,MAAM,MAAM,iBAAiB;EACtC,IAAI,UAAU,EAAE,MAAM,QAAQ,OAAO;CACvC;CACA,OAAO;EACL,MAAM;EACN;EACA,SAAS,wCAAwC,QAAQ,8CAA8C,MAAM;CAC/G;AACF"}