zyzz 0.0.0 → 0.0.3

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 (683) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +380 -0
  3. package/dist/Config.d.ts +170 -0
  4. package/dist/Config.d.ts.map +1 -0
  5. package/dist/Config.js +249 -0
  6. package/dist/Config.js.map +1 -0
  7. package/dist/Props.d.ts +7 -0
  8. package/dist/Props.d.ts.map +1 -0
  9. package/dist/Props.js +3 -0
  10. package/dist/Props.js.map +1 -0
  11. package/dist/Style.d.ts +170 -0
  12. package/dist/Style.d.ts.map +1 -0
  13. package/dist/Style.js +325 -0
  14. package/dist/Style.js.map +1 -0
  15. package/dist/Theme.d.ts +157 -0
  16. package/dist/Theme.d.ts.map +1 -0
  17. package/dist/Theme.js +273 -0
  18. package/dist/Theme.js.map +1 -0
  19. package/dist/babel/NativeEdits.d.ts +8 -0
  20. package/dist/babel/NativeEdits.d.ts.map +1 -0
  21. package/dist/babel/NativeEdits.js +233 -0
  22. package/dist/babel/NativeEdits.js.map +1 -0
  23. package/dist/babel/NativeJsx.d.ts +10 -0
  24. package/dist/babel/NativeJsx.d.ts.map +1 -0
  25. package/dist/babel/NativeJsx.js +204 -0
  26. package/dist/babel/NativeJsx.js.map +1 -0
  27. package/dist/babel/index.d.ts +51 -0
  28. package/dist/babel/index.d.ts.map +1 -0
  29. package/dist/babel/index.js +220 -0
  30. package/dist/babel/index.js.map +1 -0
  31. package/dist/cli/index.d.ts +3 -0
  32. package/dist/cli/index.d.ts.map +1 -0
  33. package/dist/cli/index.js +178 -0
  34. package/dist/cli/index.js.map +1 -0
  35. package/dist/compiler/Graph.d.ts +64 -0
  36. package/dist/compiler/Graph.d.ts.map +1 -0
  37. package/dist/compiler/Graph.js +1111 -0
  38. package/dist/compiler/Graph.js.map +1 -0
  39. package/dist/compiler/Native.d.ts +53 -0
  40. package/dist/compiler/Native.d.ts.map +1 -0
  41. package/dist/compiler/Native.js +617 -0
  42. package/dist/compiler/Native.js.map +1 -0
  43. package/dist/compiler/Source.d.ts +167 -0
  44. package/dist/compiler/Source.d.ts.map +1 -0
  45. package/dist/compiler/Source.js +1012 -0
  46. package/dist/compiler/Source.js.map +1 -0
  47. package/dist/compiler/Transform.d.ts +57 -0
  48. package/dist/compiler/Transform.d.ts.map +1 -0
  49. package/dist/compiler/Transform.js +886 -0
  50. package/dist/compiler/Transform.js.map +1 -0
  51. package/dist/compiler/index.d.ts +13 -0
  52. package/dist/compiler/index.d.ts.map +1 -0
  53. package/dist/compiler/index.js +13 -0
  54. package/dist/compiler/index.js.map +1 -0
  55. package/dist/compiler/internal/Applications.d.ts +35 -0
  56. package/dist/compiler/internal/Applications.d.ts.map +1 -0
  57. package/dist/compiler/internal/Applications.js +248 -0
  58. package/dist/compiler/internal/Applications.js.map +1 -0
  59. package/dist/compiler/internal/AtRules.d.ts +8 -0
  60. package/dist/compiler/internal/AtRules.d.ts.map +1 -0
  61. package/dist/compiler/internal/AtRules.js +180 -0
  62. package/dist/compiler/internal/AtRules.js.map +1 -0
  63. package/dist/compiler/internal/Catalogs.d.ts +19 -0
  64. package/dist/compiler/internal/Catalogs.d.ts.map +1 -0
  65. package/dist/compiler/internal/Catalogs.js +68 -0
  66. package/dist/compiler/internal/Catalogs.js.map +1 -0
  67. package/dist/compiler/internal/ColorProfiles.d.ts +3 -0
  68. package/dist/compiler/internal/ColorProfiles.d.ts.map +1 -0
  69. package/dist/compiler/internal/ColorProfiles.js +84 -0
  70. package/dist/compiler/internal/ColorProfiles.js.map +1 -0
  71. package/dist/compiler/internal/CompositionBindings.d.ts +16 -0
  72. package/dist/compiler/internal/CompositionBindings.d.ts.map +1 -0
  73. package/dist/compiler/internal/CompositionBindings.js +89 -0
  74. package/dist/compiler/internal/CompositionBindings.js.map +1 -0
  75. package/dist/compiler/internal/Compositions.d.ts +32 -0
  76. package/dist/compiler/internal/Compositions.d.ts.map +1 -0
  77. package/dist/compiler/internal/Compositions.js +464 -0
  78. package/dist/compiler/internal/Compositions.js.map +1 -0
  79. package/dist/compiler/internal/Configurations.d.ts +21 -0
  80. package/dist/compiler/internal/Configurations.d.ts.map +1 -0
  81. package/dist/compiler/internal/Configurations.js +171 -0
  82. package/dist/compiler/internal/Configurations.js.map +1 -0
  83. package/dist/compiler/internal/Contract.d.ts +27 -0
  84. package/dist/compiler/internal/Contract.d.ts.map +1 -0
  85. package/dist/compiler/internal/Contract.js +607 -0
  86. package/dist/compiler/internal/Contract.js.map +1 -0
  87. package/dist/compiler/internal/Contributions.d.ts +54 -0
  88. package/dist/compiler/internal/Contributions.d.ts.map +1 -0
  89. package/dist/compiler/internal/Contributions.js +1109 -0
  90. package/dist/compiler/internal/Contributions.js.map +1 -0
  91. package/dist/compiler/internal/Descriptors.d.ts +15 -0
  92. package/dist/compiler/internal/Descriptors.d.ts.map +1 -0
  93. package/dist/compiler/internal/Descriptors.js +183 -0
  94. package/dist/compiler/internal/Descriptors.js.map +1 -0
  95. package/dist/compiler/internal/Dynamic.d.ts +14 -0
  96. package/dist/compiler/internal/Dynamic.d.ts.map +1 -0
  97. package/dist/compiler/internal/Dynamic.js +172 -0
  98. package/dist/compiler/internal/Dynamic.js.map +1 -0
  99. package/dist/compiler/internal/Edits.d.ts +12 -0
  100. package/dist/compiler/internal/Edits.d.ts.map +1 -0
  101. package/dist/compiler/internal/Edits.js +5 -0
  102. package/dist/compiler/internal/Edits.js.map +1 -0
  103. package/dist/compiler/internal/Expression.d.ts +12 -0
  104. package/dist/compiler/internal/Expression.d.ts.map +1 -0
  105. package/dist/compiler/internal/Expression.js +98 -0
  106. package/dist/compiler/internal/Expression.js.map +1 -0
  107. package/dist/compiler/internal/Functions.d.ts +5 -0
  108. package/dist/compiler/internal/Functions.d.ts.map +1 -0
  109. package/dist/compiler/internal/Functions.js +191 -0
  110. package/dist/compiler/internal/Functions.js.map +1 -0
  111. package/dist/compiler/internal/Identifiers.d.ts +9 -0
  112. package/dist/compiler/internal/Identifiers.d.ts.map +1 -0
  113. package/dist/compiler/internal/Identifiers.js +106 -0
  114. package/dist/compiler/internal/Identifiers.js.map +1 -0
  115. package/dist/compiler/internal/Keyframes.d.ts +5 -0
  116. package/dist/compiler/internal/Keyframes.d.ts.map +1 -0
  117. package/dist/compiler/internal/Keyframes.js +51 -0
  118. package/dist/compiler/internal/Keyframes.js.map +1 -0
  119. package/dist/compiler/internal/Namespaces.d.ts +17 -0
  120. package/dist/compiler/internal/Namespaces.d.ts.map +1 -0
  121. package/dist/compiler/internal/Namespaces.js +265 -0
  122. package/dist/compiler/internal/Namespaces.js.map +1 -0
  123. package/dist/compiler/internal/NativeBindings.d.ts +74 -0
  124. package/dist/compiler/internal/NativeBindings.d.ts.map +1 -0
  125. package/dist/compiler/internal/NativeBindings.js +117 -0
  126. package/dist/compiler/internal/NativeBindings.js.map +1 -0
  127. package/dist/compiler/internal/PackedStyles.d.ts +35 -0
  128. package/dist/compiler/internal/PackedStyles.d.ts.map +1 -0
  129. package/dist/compiler/internal/PackedStyles.js +345 -0
  130. package/dist/compiler/internal/PackedStyles.js.map +1 -0
  131. package/dist/compiler/internal/Properties.d.ts +5 -0
  132. package/dist/compiler/internal/Properties.d.ts.map +1 -0
  133. package/dist/compiler/internal/Properties.js +82 -0
  134. package/dist/compiler/internal/Properties.js.map +1 -0
  135. package/dist/compiler/internal/RecipeConditions.d.ts +41 -0
  136. package/dist/compiler/internal/RecipeConditions.d.ts.map +1 -0
  137. package/dist/compiler/internal/RecipeConditions.js +82 -0
  138. package/dist/compiler/internal/RecipeConditions.js.map +1 -0
  139. package/dist/compiler/internal/RecipePayloads.d.ts +31 -0
  140. package/dist/compiler/internal/RecipePayloads.d.ts.map +1 -0
  141. package/dist/compiler/internal/RecipePayloads.js +99 -0
  142. package/dist/compiler/internal/RecipePayloads.js.map +1 -0
  143. package/dist/compiler/internal/Recipes.d.ts +32 -0
  144. package/dist/compiler/internal/Recipes.d.ts.map +1 -0
  145. package/dist/compiler/internal/Recipes.js +339 -0
  146. package/dist/compiler/internal/Recipes.js.map +1 -0
  147. package/dist/compiler/internal/Relative.d.ts +19 -0
  148. package/dist/compiler/internal/Relative.d.ts.map +1 -0
  149. package/dist/compiler/internal/Relative.js +62 -0
  150. package/dist/compiler/internal/Relative.js.map +1 -0
  151. package/dist/compiler/internal/Scope.d.ts +10 -0
  152. package/dist/compiler/internal/Scope.d.ts.map +1 -0
  153. package/dist/compiler/internal/Scope.js +28 -0
  154. package/dist/compiler/internal/Scope.js.map +1 -0
  155. package/dist/compiler/internal/Selectors.d.ts +12 -0
  156. package/dist/compiler/internal/Selectors.d.ts.map +1 -0
  157. package/dist/compiler/internal/Selectors.js +265 -0
  158. package/dist/compiler/internal/Selectors.js.map +1 -0
  159. package/dist/compiler/internal/Static.d.ts +39 -0
  160. package/dist/compiler/internal/Static.d.ts.map +1 -0
  161. package/dist/compiler/internal/Static.js +532 -0
  162. package/dist/compiler/internal/Static.js.map +1 -0
  163. package/dist/compiler/internal/Stylesheets.d.ts +47 -0
  164. package/dist/compiler/internal/Stylesheets.d.ts.map +1 -0
  165. package/dist/compiler/internal/Stylesheets.js +272 -0
  166. package/dist/compiler/internal/Stylesheets.js.map +1 -0
  167. package/dist/compiler/internal/Syntax.d.ts +17 -0
  168. package/dist/compiler/internal/Syntax.d.ts.map +1 -0
  169. package/dist/compiler/internal/Syntax.js +19 -0
  170. package/dist/compiler/internal/Syntax.js.map +1 -0
  171. package/dist/compiler/internal/Themes.d.ts +158 -0
  172. package/dist/compiler/internal/Themes.d.ts.map +1 -0
  173. package/dist/compiler/internal/Themes.js +1169 -0
  174. package/dist/compiler/internal/Themes.js.map +1 -0
  175. package/dist/compiler/internal/Variables.d.ts +31 -0
  176. package/dist/compiler/internal/Variables.d.ts.map +1 -0
  177. package/dist/compiler/internal/Variables.js +376 -0
  178. package/dist/compiler/internal/Variables.js.map +1 -0
  179. package/dist/compiler/internal/ViewTransitions.d.ts +3 -0
  180. package/dist/compiler/internal/ViewTransitions.d.ts.map +1 -0
  181. package/dist/compiler/internal/ViewTransitions.js +68 -0
  182. package/dist/compiler/internal/ViewTransitions.js.map +1 -0
  183. package/dist/cx.d.ts +18 -0
  184. package/dist/cx.d.ts.map +1 -0
  185. package/dist/cx.js +60 -0
  186. package/dist/cx.js.map +1 -0
  187. package/dist/default.d.ts +3225 -0
  188. package/dist/default.d.ts.map +1 -0
  189. package/dist/default.js +547 -0
  190. package/dist/default.js.map +7 -0
  191. package/dist/default.js.zyzz.json +1 -0
  192. package/dist/index.d.ts +21 -0
  193. package/dist/index.d.ts.map +1 -0
  194. package/dist/index.js +19 -0
  195. package/dist/index.js.map +1 -0
  196. package/dist/internal/Authoring.d.ts +26 -0
  197. package/dist/internal/Authoring.d.ts.map +1 -0
  198. package/dist/internal/Authoring.js +134 -0
  199. package/dist/internal/Authoring.js.map +1 -0
  200. package/dist/internal/Binding.d.ts +64 -0
  201. package/dist/internal/Binding.d.ts.map +1 -0
  202. package/dist/internal/Binding.js +27 -0
  203. package/dist/internal/Binding.js.map +1 -0
  204. package/dist/internal/BindingDomains.d.ts +11 -0
  205. package/dist/internal/BindingDomains.d.ts.map +1 -0
  206. package/dist/internal/BindingDomains.js +459 -0
  207. package/dist/internal/BindingDomains.js.map +1 -0
  208. package/dist/internal/Cascade.d.ts +45 -0
  209. package/dist/internal/Cascade.d.ts.map +1 -0
  210. package/dist/internal/Cascade.js +165 -0
  211. package/dist/internal/Cascade.js.map +1 -0
  212. package/dist/internal/Compound.d.ts +132 -0
  213. package/dist/internal/Compound.d.ts.map +1 -0
  214. package/dist/internal/Compound.js +2 -0
  215. package/dist/internal/Compound.js.map +1 -0
  216. package/dist/internal/Condition.d.ts +33 -0
  217. package/dist/internal/Condition.d.ts.map +1 -0
  218. package/dist/internal/Condition.js +180 -0
  219. package/dist/internal/Condition.js.map +1 -0
  220. package/dist/internal/Corner.d.ts +9 -0
  221. package/dist/internal/Corner.d.ts.map +1 -0
  222. package/dist/internal/Corner.js +14 -0
  223. package/dist/internal/Corner.js.map +1 -0
  224. package/dist/internal/FunctionSyntax.d.ts +27 -0
  225. package/dist/internal/FunctionSyntax.d.ts.map +1 -0
  226. package/dist/internal/FunctionSyntax.js +91 -0
  227. package/dist/internal/FunctionSyntax.js.map +1 -0
  228. package/dist/internal/FunctionValue.d.ts +19 -0
  229. package/dist/internal/FunctionValue.d.ts.map +1 -0
  230. package/dist/internal/FunctionValue.js +2 -0
  231. package/dist/internal/FunctionValue.js.map +1 -0
  232. package/dist/internal/Geometry.d.ts +8 -0
  233. package/dist/internal/Geometry.d.ts.map +1 -0
  234. package/dist/internal/Geometry.js +2 -0
  235. package/dist/internal/Geometry.js.map +1 -0
  236. package/dist/internal/Grid.d.ts +15 -0
  237. package/dist/internal/Grid.d.ts.map +1 -0
  238. package/dist/internal/Grid.js +2 -0
  239. package/dist/internal/Grid.js.map +1 -0
  240. package/dist/internal/Identifier.d.ts +15 -0
  241. package/dist/internal/Identifier.d.ts.map +1 -0
  242. package/dist/internal/Identifier.js +2 -0
  243. package/dist/internal/Identifier.js.map +1 -0
  244. package/dist/internal/Identity.d.ts +16 -0
  245. package/dist/internal/Identity.d.ts.map +1 -0
  246. package/dist/internal/Identity.js +78 -0
  247. package/dist/internal/Identity.js.map +1 -0
  248. package/dist/internal/Lexical.d.ts +89 -0
  249. package/dist/internal/Lexical.d.ts.map +1 -0
  250. package/dist/internal/Lexical.js +15 -0
  251. package/dist/internal/Lexical.js.map +1 -0
  252. package/dist/internal/Literal.d.ts +3459 -0
  253. package/dist/internal/Literal.d.ts.map +1 -0
  254. package/dist/internal/Literal.js +3371 -0
  255. package/dist/internal/Literal.js.map +1 -0
  256. package/dist/internal/NativeProperties.d.ts +596 -0
  257. package/dist/internal/NativeProperties.d.ts.map +1 -0
  258. package/dist/internal/NativeProperties.js +2 -0
  259. package/dist/internal/NativeProperties.js.map +1 -0
  260. package/dist/internal/Numeric.d.ts +23 -0
  261. package/dist/internal/Numeric.d.ts.map +1 -0
  262. package/dist/internal/Numeric.js +2 -0
  263. package/dist/internal/Numeric.js.map +1 -0
  264. package/dist/internal/Query.d.ts +15 -0
  265. package/dist/internal/Query.d.ts.map +1 -0
  266. package/dist/internal/Query.js +58 -0
  267. package/dist/internal/Query.js.map +1 -0
  268. package/dist/internal/Recipe.d.ts +17 -0
  269. package/dist/internal/Recipe.d.ts.map +1 -0
  270. package/dist/internal/Recipe.js +2 -0
  271. package/dist/internal/Recipe.js.map +1 -0
  272. package/dist/internal/RuleReference.d.ts +23 -0
  273. package/dist/internal/RuleReference.d.ts.map +1 -0
  274. package/dist/internal/RuleReference.js +65 -0
  275. package/dist/internal/RuleReference.js.map +1 -0
  276. package/dist/internal/Scheme.d.ts +12 -0
  277. package/dist/internal/Scheme.d.ts.map +1 -0
  278. package/dist/internal/Scheme.js +16 -0
  279. package/dist/internal/Scheme.js.map +1 -0
  280. package/dist/internal/Shorthands.d.ts +20 -0
  281. package/dist/internal/Shorthands.d.ts.map +1 -0
  282. package/dist/internal/Shorthands.js +50 -0
  283. package/dist/internal/Shorthands.js.map +1 -0
  284. package/dist/internal/Targets.d.ts +43 -0
  285. package/dist/internal/Targets.d.ts.map +1 -0
  286. package/dist/internal/Targets.js +60 -0
  287. package/dist/internal/Targets.js.map +1 -0
  288. package/dist/internal/Token.d.ts +104 -0
  289. package/dist/internal/Token.d.ts.map +1 -0
  290. package/dist/internal/Token.js +162 -0
  291. package/dist/internal/Token.js.map +1 -0
  292. package/dist/internal/Tuple.d.ts +23 -0
  293. package/dist/internal/Tuple.d.ts.map +1 -0
  294. package/dist/internal/Tuple.js +2 -0
  295. package/dist/internal/Tuple.js.map +1 -0
  296. package/dist/internal/Typography.d.ts +23 -0
  297. package/dist/internal/Typography.d.ts.map +1 -0
  298. package/dist/internal/Typography.js +18 -0
  299. package/dist/internal/Typography.js.map +1 -0
  300. package/dist/internal/Value.d.ts +74 -0
  301. package/dist/internal/Value.d.ts.map +1 -0
  302. package/dist/internal/Value.js +60 -0
  303. package/dist/internal/Value.js.map +1 -0
  304. package/dist/metro/Graph.d.ts +8 -0
  305. package/dist/metro/Graph.d.ts.map +1 -0
  306. package/dist/metro/Graph.js +63 -0
  307. package/dist/metro/Graph.js.map +1 -0
  308. package/dist/metro/Watch.d.ts +21 -0
  309. package/dist/metro/Watch.d.ts.map +1 -0
  310. package/dist/metro/Watch.js +51 -0
  311. package/dist/metro/Watch.js.map +1 -0
  312. package/dist/metro/index.d.ts +30 -0
  313. package/dist/metro/index.d.ts.map +1 -0
  314. package/dist/metro/index.js +52 -0
  315. package/dist/metro/index.js.map +1 -0
  316. package/dist/metro/transformer.d.ts +21 -0
  317. package/dist/metro/transformer.d.ts.map +1 -0
  318. package/dist/metro/transformer.js +71 -0
  319. package/dist/metro/transformer.js.map +1 -0
  320. package/dist/next/index.d.ts +18 -0
  321. package/dist/next/index.d.ts.map +1 -0
  322. package/dist/next/index.js +92 -0
  323. package/dist/next/index.js.map +1 -0
  324. package/dist/next/loader.d.ts +16 -0
  325. package/dist/next/loader.d.ts.map +1 -0
  326. package/dist/next/loader.js +282 -0
  327. package/dist/next/loader.js.map +1 -0
  328. package/dist/node/Host.d.ts +80 -0
  329. package/dist/node/Host.d.ts.map +1 -0
  330. package/dist/node/Host.js +882 -0
  331. package/dist/node/Host.js.map +1 -0
  332. package/dist/node/index.d.ts +7 -0
  333. package/dist/node/index.d.ts.map +1 -0
  334. package/dist/node/index.js +7 -0
  335. package/dist/node/index.js.map +1 -0
  336. package/dist/react-native/Host.d.ts +76 -0
  337. package/dist/react-native/Host.d.ts.map +1 -0
  338. package/dist/react-native/Host.js +209 -0
  339. package/dist/react-native/Host.js.map +1 -0
  340. package/dist/react-native/StyleSheet.d.ts +226 -0
  341. package/dist/react-native/StyleSheet.d.ts.map +1 -0
  342. package/dist/react-native/StyleSheet.js +606 -0
  343. package/dist/react-native/StyleSheet.js.map +1 -0
  344. package/dist/react-native/Variants.d.ts +38 -0
  345. package/dist/react-native/Variants.d.ts.map +1 -0
  346. package/dist/react-native/Variants.js +66 -0
  347. package/dist/react-native/Variants.js.map +1 -0
  348. package/dist/react-native/index.d.ts +8 -0
  349. package/dist/react-native/index.d.ts.map +1 -0
  350. package/dist/react-native/index.js +8 -0
  351. package/dist/react-native/index.js.map +1 -0
  352. package/dist/react-native/internal/Color.d.ts +7 -0
  353. package/dist/react-native/internal/Color.d.ts.map +1 -0
  354. package/dist/react-native/internal/Color.js +93 -0
  355. package/dist/react-native/internal/Color.js.map +1 -0
  356. package/dist/react-native/internal/NativeSchema.d.ts +5138 -0
  357. package/dist/react-native/internal/NativeSchema.d.ts.map +1 -0
  358. package/dist/react-native/internal/NativeSchema.js +3097 -0
  359. package/dist/react-native/internal/NativeSchema.js.map +1 -0
  360. package/dist/react-native/internal/Scalar.d.ts +95 -0
  361. package/dist/react-native/internal/Scalar.d.ts.map +1 -0
  362. package/dist/react-native/internal/Scalar.js +199 -0
  363. package/dist/react-native/internal/Scalar.js.map +1 -0
  364. package/dist/react-native/internal/Values.d.ts +5 -0
  365. package/dist/react-native/internal/Values.d.ts.map +1 -0
  366. package/dist/react-native/internal/Values.js +65 -0
  367. package/dist/react-native/internal/Values.js.map +1 -0
  368. package/dist/react-native/react.d.ts +22 -0
  369. package/dist/react-native/react.d.ts.map +1 -0
  370. package/dist/react-native/react.js +26 -0
  371. package/dist/react-native/react.js.map +1 -0
  372. package/dist/reset.css +244 -0
  373. package/dist/runtime/Appearance.d.ts +55 -0
  374. package/dist/runtime/Appearance.d.ts.map +1 -0
  375. package/dist/runtime/Appearance.js +84 -0
  376. package/dist/runtime/Appearance.js.map +1 -0
  377. package/dist/runtime/Composition.d.ts +46 -0
  378. package/dist/runtime/Composition.d.ts.map +1 -0
  379. package/dist/runtime/Composition.js +52 -0
  380. package/dist/runtime/Composition.js.map +1 -0
  381. package/dist/runtime/CompositionHtml.d.ts +15 -0
  382. package/dist/runtime/CompositionHtml.d.ts.map +1 -0
  383. package/dist/runtime/CompositionHtml.js +20 -0
  384. package/dist/runtime/CompositionHtml.js.map +1 -0
  385. package/dist/runtime/ConditionalRecipe.d.ts +30 -0
  386. package/dist/runtime/ConditionalRecipe.d.ts.map +1 -0
  387. package/dist/runtime/ConditionalRecipe.js +39 -0
  388. package/dist/runtime/ConditionalRecipe.js.map +1 -0
  389. package/dist/runtime/Dynamic.d.ts +19 -0
  390. package/dist/runtime/Dynamic.d.ts.map +1 -0
  391. package/dist/runtime/Dynamic.js +22 -0
  392. package/dist/runtime/Dynamic.js.map +1 -0
  393. package/dist/runtime/Html.d.ts +32 -0
  394. package/dist/runtime/Html.d.ts.map +1 -0
  395. package/dist/runtime/Html.js +63 -0
  396. package/dist/runtime/Html.js.map +1 -0
  397. package/dist/runtime/Native.d.ts +48 -0
  398. package/dist/runtime/Native.d.ts.map +1 -0
  399. package/dist/runtime/Native.js +78 -0
  400. package/dist/runtime/Native.js.map +1 -0
  401. package/dist/runtime/NativeContext.d.ts +17 -0
  402. package/dist/runtime/NativeContext.d.ts.map +1 -0
  403. package/dist/runtime/NativeContext.js +47 -0
  404. package/dist/runtime/NativeContext.js.map +1 -0
  405. package/dist/runtime/NativeDynamic.d.ts +47 -0
  406. package/dist/runtime/NativeDynamic.d.ts.map +1 -0
  407. package/dist/runtime/NativeDynamic.js +141 -0
  408. package/dist/runtime/NativeDynamic.js.map +1 -0
  409. package/dist/runtime/PayloadRecipe.d.ts +22 -0
  410. package/dist/runtime/PayloadRecipe.d.ts.map +1 -0
  411. package/dist/runtime/PayloadRecipe.js +59 -0
  412. package/dist/runtime/PayloadRecipe.js.map +1 -0
  413. package/dist/runtime/Props.d.ts +21 -0
  414. package/dist/runtime/Props.d.ts.map +1 -0
  415. package/dist/runtime/Props.js +17 -0
  416. package/dist/runtime/Props.js.map +1 -0
  417. package/dist/runtime/Recipe.d.ts +52 -0
  418. package/dist/runtime/Recipe.d.ts.map +1 -0
  419. package/dist/runtime/Recipe.js +30 -0
  420. package/dist/runtime/Recipe.js.map +1 -0
  421. package/dist/runtime/Selection.d.ts +31 -0
  422. package/dist/runtime/Selection.d.ts.map +1 -0
  423. package/dist/runtime/Selection.js +30 -0
  424. package/dist/runtime/Selection.js.map +1 -0
  425. package/dist/runtime/Variable.d.ts +6 -0
  426. package/dist/runtime/Variable.d.ts.map +1 -0
  427. package/dist/runtime/Variable.js +10 -0
  428. package/dist/runtime/Variable.js.map +1 -0
  429. package/dist/runtime/index.d.ts +33 -0
  430. package/dist/runtime/index.d.ts.map +1 -0
  431. package/dist/runtime/index.js +33 -0
  432. package/dist/runtime/index.js.map +1 -0
  433. package/dist/styleFunction.d.ts +72 -0
  434. package/dist/styleFunction.d.ts.map +1 -0
  435. package/dist/styleFunction.js +18 -0
  436. package/dist/styleFunction.js.map +1 -0
  437. package/dist/themes/LICENSE.tailwind +21 -0
  438. package/dist/variable.d.ts +50 -0
  439. package/dist/variable.d.ts.map +1 -0
  440. package/dist/variable.js +20 -0
  441. package/dist/variable.js.map +1 -0
  442. package/dist/variants.d.ts +84 -0
  443. package/dist/variants.d.ts.map +1 -0
  444. package/dist/variants.js +21 -0
  445. package/dist/variants.js.map +1 -0
  446. package/dist/vite/index.d.ts +24 -0
  447. package/dist/vite/index.d.ts.map +1 -0
  448. package/dist/vite/index.js +1089 -0
  449. package/dist/vite/index.js.map +1 -0
  450. package/dist/web/Css.d.ts +81 -0
  451. package/dist/web/Css.d.ts.map +1 -0
  452. package/dist/web/Css.js +593 -0
  453. package/dist/web/Css.js.map +1 -0
  454. package/dist/web/colorProfile.d.ts +28 -0
  455. package/dist/web/colorProfile.d.ts.map +1 -0
  456. package/dist/web/colorProfile.js +8 -0
  457. package/dist/web/colorProfile.js.map +1 -0
  458. package/dist/web/counterStyle.d.ts +48 -0
  459. package/dist/web/counterStyle.d.ts.map +1 -0
  460. package/dist/web/counterStyle.js +8 -0
  461. package/dist/web/counterStyle.js.map +1 -0
  462. package/dist/web/cssFunction.d.ts +80 -0
  463. package/dist/web/cssFunction.d.ts.map +1 -0
  464. package/dist/web/cssFunction.js +18 -0
  465. package/dist/web/cssFunction.js.map +1 -0
  466. package/dist/web/customMedia.d.ts +12 -0
  467. package/dist/web/customMedia.d.ts.map +1 -0
  468. package/dist/web/customMedia.js +7 -0
  469. package/dist/web/customMedia.js.map +1 -0
  470. package/dist/web/fontFace.d.ts +26 -0
  471. package/dist/web/fontFace.d.ts.map +1 -0
  472. package/dist/web/fontFace.js +7 -0
  473. package/dist/web/fontFace.js.map +1 -0
  474. package/dist/web/fontFeatureValues.d.ts +40 -0
  475. package/dist/web/fontFeatureValues.d.ts.map +1 -0
  476. package/dist/web/fontFeatureValues.js +7 -0
  477. package/dist/web/fontFeatureValues.js.map +1 -0
  478. package/dist/web/fontPaletteValues.d.ts +21 -0
  479. package/dist/web/fontPaletteValues.d.ts.map +1 -0
  480. package/dist/web/fontPaletteValues.js +9 -0
  481. package/dist/web/fontPaletteValues.js.map +1 -0
  482. package/dist/web/global.d.ts +19 -0
  483. package/dist/web/global.d.ts.map +1 -0
  484. package/dist/web/global.js +6 -0
  485. package/dist/web/global.js.map +1 -0
  486. package/dist/web/importCss.d.ts +18 -0
  487. package/dist/web/importCss.d.ts.map +1 -0
  488. package/dist/web/importCss.js +7 -0
  489. package/dist/web/importCss.js.map +1 -0
  490. package/dist/web/index.d.ts +22 -0
  491. package/dist/web/index.d.ts.map +1 -0
  492. package/dist/web/index.js +22 -0
  493. package/dist/web/index.js.map +1 -0
  494. package/dist/web/internal/Block.d.ts +18 -0
  495. package/dist/web/internal/Block.d.ts.map +1 -0
  496. package/dist/web/internal/Block.js +13 -0
  497. package/dist/web/internal/Block.js.map +1 -0
  498. package/dist/web/internal/ClassName.d.ts +19 -0
  499. package/dist/web/internal/ClassName.d.ts.map +1 -0
  500. package/dist/web/internal/ClassName.js +77 -0
  501. package/dist/web/internal/ClassName.js.map +1 -0
  502. package/dist/web/internal/Context.d.ts +11 -0
  503. package/dist/web/internal/Context.d.ts.map +1 -0
  504. package/dist/web/internal/Context.js +2 -0
  505. package/dist/web/internal/Context.js.map +1 -0
  506. package/dist/web/internal/Contributions.d.ts +70 -0
  507. package/dist/web/internal/Contributions.d.ts.map +1 -0
  508. package/dist/web/internal/Contributions.js +109 -0
  509. package/dist/web/internal/Contributions.js.map +1 -0
  510. package/dist/web/internal/Namespace.d.ts +13 -0
  511. package/dist/web/internal/Namespace.d.ts.map +1 -0
  512. package/dist/web/internal/Namespace.js +13 -0
  513. package/dist/web/internal/Namespace.js.map +1 -0
  514. package/dist/web/internal/Themes.d.ts +13 -0
  515. package/dist/web/internal/Themes.d.ts.map +1 -0
  516. package/dist/web/internal/Themes.js +96 -0
  517. package/dist/web/internal/Themes.js.map +1 -0
  518. package/dist/web/keyframes.d.ts +14 -0
  519. package/dist/web/keyframes.d.ts.map +1 -0
  520. package/dist/web/keyframes.js +8 -0
  521. package/dist/web/keyframes.js.map +1 -0
  522. package/dist/web/layers.d.ts +4 -0
  523. package/dist/web/layers.d.ts.map +1 -0
  524. package/dist/web/layers.js +7 -0
  525. package/dist/web/layers.js.map +1 -0
  526. package/dist/web/namespace.d.ts +14 -0
  527. package/dist/web/namespace.d.ts.map +1 -0
  528. package/dist/web/namespace.js +7 -0
  529. package/dist/web/namespace.js.map +1 -0
  530. package/dist/web/page.d.ts +38 -0
  531. package/dist/web/page.d.ts.map +1 -0
  532. package/dist/web/page.js +7 -0
  533. package/dist/web/page.js.map +1 -0
  534. package/dist/web/positionTry.d.ts +14 -0
  535. package/dist/web/positionTry.d.ts.map +1 -0
  536. package/dist/web/positionTry.js +9 -0
  537. package/dist/web/positionTry.js.map +1 -0
  538. package/dist/web/property.d.ts +24 -0
  539. package/dist/web/property.d.ts.map +1 -0
  540. package/dist/web/property.js +7 -0
  541. package/dist/web/property.js.map +1 -0
  542. package/dist/web/viewTransition.d.ts +29 -0
  543. package/dist/web/viewTransition.d.ts.map +1 -0
  544. package/dist/web/viewTransition.js +7 -0
  545. package/dist/web/viewTransition.js.map +1 -0
  546. package/package.json +136 -10
  547. package/src/Config.ts +691 -0
  548. package/src/Props.ts +8 -0
  549. package/src/Style.ts +812 -0
  550. package/src/Theme.ts +784 -0
  551. package/src/babel/NativeEdits.ts +273 -0
  552. package/src/babel/NativeJsx.ts +260 -0
  553. package/src/babel/index.ts +332 -0
  554. package/src/cli/index.ts +196 -0
  555. package/src/compiler/Graph.ts +1586 -0
  556. package/src/compiler/Native.ts +801 -0
  557. package/src/compiler/Source.ts +1579 -0
  558. package/src/compiler/Transform.ts +1241 -0
  559. package/src/compiler/index.ts +12 -0
  560. package/src/compiler/internal/Applications.ts +378 -0
  561. package/src/compiler/internal/AtRules.ts +202 -0
  562. package/src/compiler/internal/Catalogs.ts +114 -0
  563. package/src/compiler/internal/ColorProfiles.ts +93 -0
  564. package/src/compiler/internal/CompositionBindings.ts +120 -0
  565. package/src/compiler/internal/Compositions.ts +629 -0
  566. package/src/compiler/internal/Configurations.ts +244 -0
  567. package/src/compiler/internal/Contract.ts +860 -0
  568. package/src/compiler/internal/Contributions.ts +1507 -0
  569. package/src/compiler/internal/Descriptors.ts +238 -0
  570. package/src/compiler/internal/Dynamic.ts +266 -0
  571. package/src/compiler/internal/Edits.ts +13 -0
  572. package/src/compiler/internal/Expression.ts +135 -0
  573. package/src/compiler/internal/Functions.ts +206 -0
  574. package/src/compiler/internal/Identifiers.ts +124 -0
  575. package/src/compiler/internal/Keyframes.ts +62 -0
  576. package/src/compiler/internal/Namespaces.ts +296 -0
  577. package/src/compiler/internal/NativeBindings.ts +151 -0
  578. package/src/compiler/internal/PackedStyles.ts +464 -0
  579. package/src/compiler/internal/Properties.ts +121 -0
  580. package/src/compiler/internal/RecipeConditions.ts +139 -0
  581. package/src/compiler/internal/RecipePayloads.ts +132 -0
  582. package/src/compiler/internal/Recipes.ts +531 -0
  583. package/src/compiler/internal/Relative.ts +87 -0
  584. package/src/compiler/internal/Scope.ts +36 -0
  585. package/src/compiler/internal/Selectors.ts +334 -0
  586. package/src/compiler/internal/Static.ts +783 -0
  587. package/src/compiler/internal/Stylesheets.ts +361 -0
  588. package/src/compiler/internal/Syntax.ts +31 -0
  589. package/src/compiler/internal/Themes.ts +1794 -0
  590. package/src/compiler/internal/Variables.ts +497 -0
  591. package/src/compiler/internal/ViewTransitions.ts +82 -0
  592. package/src/cx.ts +98 -0
  593. package/src/default.ts +1177 -0
  594. package/src/index.ts +20 -0
  595. package/src/internal/Authoring.ts +199 -0
  596. package/src/internal/Binding.ts +187 -0
  597. package/src/internal/BindingDomains.ts +458 -0
  598. package/src/internal/Cascade.ts +165 -0
  599. package/src/internal/Compound.ts +522 -0
  600. package/src/internal/Condition.ts +283 -0
  601. package/src/internal/Corner.ts +17 -0
  602. package/src/internal/FunctionSyntax.ts +271 -0
  603. package/src/internal/FunctionValue.ts +96 -0
  604. package/src/internal/Geometry.ts +30 -0
  605. package/src/internal/Grid.ts +67 -0
  606. package/src/internal/Identifier.ts +14 -0
  607. package/src/internal/Identity.ts +89 -0
  608. package/src/internal/Lexical.ts +202 -0
  609. package/src/internal/Literal.ts +3820 -0
  610. package/src/internal/NativeProperties.ts +936 -0
  611. package/src/internal/Numeric.ts +77 -0
  612. package/src/internal/Query.ts +87 -0
  613. package/src/internal/Recipe.ts +17 -0
  614. package/src/internal/RuleReference.ts +102 -0
  615. package/src/internal/Scheme.ts +20 -0
  616. package/src/internal/Shorthands.ts +122 -0
  617. package/src/internal/Targets.ts +162 -0
  618. package/src/internal/Token.ts +380 -0
  619. package/src/internal/Tuple.ts +29 -0
  620. package/src/internal/Typography.ts +51 -0
  621. package/src/internal/Value.ts +320 -0
  622. package/src/metro/Graph.ts +78 -0
  623. package/src/metro/Watch.ts +88 -0
  624. package/src/metro/index.ts +99 -0
  625. package/src/metro/transformer.ts +97 -0
  626. package/src/next/index.ts +114 -0
  627. package/src/next/loader.ts +369 -0
  628. package/src/node/Host.ts +1204 -0
  629. package/src/node/index.ts +6 -0
  630. package/src/react-native/Host.ts +289 -0
  631. package/src/react-native/StyleSheet.ts +1084 -0
  632. package/src/react-native/Variants.ts +122 -0
  633. package/src/react-native/index.ts +7 -0
  634. package/src/react-native/internal/Color.ts +110 -0
  635. package/src/react-native/internal/NativeSchema.ts +3096 -0
  636. package/src/react-native/internal/Scalar.ts +253 -0
  637. package/src/react-native/internal/Values.ts +87 -0
  638. package/src/react-native/react.ts +47 -0
  639. package/src/reset.css +244 -0
  640. package/src/runtime/Appearance.ts +155 -0
  641. package/src/runtime/Composition.ts +87 -0
  642. package/src/runtime/CompositionHtml.ts +38 -0
  643. package/src/runtime/ConditionalRecipe.ts +70 -0
  644. package/src/runtime/Dynamic.ts +51 -0
  645. package/src/runtime/Html.ts +91 -0
  646. package/src/runtime/Native.ts +144 -0
  647. package/src/runtime/NativeContext.ts +74 -0
  648. package/src/runtime/NativeDynamic.ts +246 -0
  649. package/src/runtime/PayloadRecipe.ts +96 -0
  650. package/src/runtime/Props.ts +33 -0
  651. package/src/runtime/Recipe.ts +74 -0
  652. package/src/runtime/Selection.ts +82 -0
  653. package/src/runtime/Variable.ts +15 -0
  654. package/src/runtime/index.ts +45 -0
  655. package/src/styleFunction.ts +138 -0
  656. package/src/themes/LICENSE.tailwind +21 -0
  657. package/src/variable.ts +105 -0
  658. package/src/variants.ts +218 -0
  659. package/src/vite/index.ts +1473 -0
  660. package/src/web/Css.ts +801 -0
  661. package/src/web/colorProfile.ts +60 -0
  662. package/src/web/counterStyle.ts +82 -0
  663. package/src/web/cssFunction.ts +181 -0
  664. package/src/web/customMedia.ts +16 -0
  665. package/src/web/fontFace.ts +41 -0
  666. package/src/web/fontFeatureValues.ts +79 -0
  667. package/src/web/fontPaletteValues.ts +42 -0
  668. package/src/web/global.ts +39 -0
  669. package/src/web/importCss.ts +23 -0
  670. package/src/web/index.ts +22 -0
  671. package/src/web/internal/Block.ts +29 -0
  672. package/src/web/internal/ClassName.ts +112 -0
  673. package/src/web/internal/Context.ts +16 -0
  674. package/src/web/internal/Contributions.ts +219 -0
  675. package/src/web/internal/Namespace.ts +21 -0
  676. package/src/web/internal/Themes.ts +133 -0
  677. package/src/web/keyframes.ts +43 -0
  678. package/src/web/layers.ts +6 -0
  679. package/src/web/namespace.ts +19 -0
  680. package/src/web/page.ts +140 -0
  681. package/src/web/positionTry.ts +71 -0
  682. package/src/web/property.ts +35 -0
  683. package/src/web/viewTransition.ts +89 -0
@@ -0,0 +1,882 @@
1
+ /**
2
+ * Processes standalone CSS and publishes incremental file builds with watch recovery.
3
+ * @module
4
+ */
5
+ import * as Mapping from '@jridgewell/gen-mapping';
6
+ import * as Crypto from 'node:crypto';
7
+ import * as NativeFs from 'node:fs';
8
+ import * as Fs from 'node:fs/promises';
9
+ import * as Path from 'node:path';
10
+ import { ResolverFactory } from 'oxc-resolver';
11
+ import * as Graph from '../compiler/Graph.js';
12
+ import * as AtRules from '../compiler/internal/AtRules.js';
13
+ import * as Catalogs from '../compiler/internal/Catalogs.js';
14
+ import * as Relative from '../compiler/internal/Relative.js';
15
+ import * as Syntax from '../compiler/internal/Syntax.js';
16
+ import * as Source from '../compiler/Source.js';
17
+ import * as Transform from '../compiler/Transform.js';
18
+ /**
19
+ * Opens an exclusively owned output lifecycle around the literal source transform.
20
+ * Source modules remain TypeScript/JSX; transpilation belongs to the consumer.
21
+ * Besides per-module stylesheets, every build publishes `zyzz.css`: shared
22
+ * contributions followed by module stylesheets with dependencies before their
23
+ * consumers, so an application loads one file. Configurations also publish
24
+ * `zyzz.js`, the initialization that restores a saved theme and scheme, at
25
+ * the configurable script path.
26
+ * Lightning CSS processes stylesheets and composes maps before publication by default.
27
+ * @param options - Source directory, separate output directory, and portable package identity.
28
+ * @returns Explicit build, watch, and close operations. Close releases the output lock.
29
+ */
30
+ export async function create(options) {
31
+ const css = options.css === false
32
+ ? false
33
+ : {
34
+ minify: options.css?.minify ?? false,
35
+ targets: { ...options.css?.targets },
36
+ };
37
+ const native = options.native
38
+ ? Object.freeze({
39
+ ...options.native,
40
+ fonts: options.native.fonts && Object.freeze({ ...options.native.fonts }),
41
+ // Theme definitions are immutable. Only the caller-owned catalog needs copying.
42
+ themes: options.native.themes && Object.freeze({ ...options.native.themes }),
43
+ units: options.native.units && Object.freeze({ ...options.native.units }),
44
+ })
45
+ : undefined;
46
+ if (native && (options.compiler === false || options.modules === false))
47
+ throw new Error('Native builds require rewritten module output.');
48
+ const outDir = Path.resolve(options.outDir ?? 'dist');
49
+ const root = await Fs.realpath(options.root);
50
+ if (inside(outDir, root))
51
+ throw new Error('Output must not contain the source directory.');
52
+ // A script inside the output is an owned artifact; elsewhere it is rewritten
53
+ // in place so a bundler's public directory can serve it verbatim.
54
+ const script = (() => {
55
+ if (native || options.script === false)
56
+ return undefined;
57
+ const path = Path.resolve(options.script ?? Path.join(outDir, 'zyzz.js'));
58
+ if (path !== outDir && inside(outDir, path))
59
+ return { owned: Path.relative(outDir, path).split(Path.sep).join('/') };
60
+ if (inside(root, path))
61
+ throw new Error('The script path must not be inside the source directory.');
62
+ return { external: path };
63
+ })();
64
+ Transform.compile({
65
+ moduleId: `${options.packageId}/identity.ts`,
66
+ source: '',
67
+ });
68
+ await Fs.mkdir(outDir, { recursive: true });
69
+ if ((await Fs.realpath(outDir)) !== outDir)
70
+ throw new Error('Output paths must not contain symbolic links.');
71
+ const lockPath = Path.join(outDir, '.zyzz-lock');
72
+ const lock = await Fs.open(lockPath, 'wx');
73
+ // Probe the actual output filesystem using the already exclusively owned lock.
74
+ const insensitive = await (async () => {
75
+ try {
76
+ const alternate = await Fs.stat(Path.join(outDir, '.ZYZZ-LOCK'));
77
+ const original = await lock.stat();
78
+ return alternate.dev === original.dev && alternate.ino === original.ino;
79
+ }
80
+ catch (error) {
81
+ if (error &&
82
+ typeof error === 'object' &&
83
+ 'code' in error &&
84
+ error.code === 'ENOENT')
85
+ return false;
86
+ await lock.close();
87
+ await Fs.rm(lockPath);
88
+ throw error;
89
+ }
90
+ })();
91
+ const manifestPath = Path.join(outDir, '.zyzz.json');
92
+ const compiler = Graph.create();
93
+ const stylesheets = new WeakMap();
94
+ let closed = false;
95
+ let closing;
96
+ let tail = Promise.resolve();
97
+ const watchers = new Map();
98
+ let watching = false;
99
+ const dependencies = new Map();
100
+ let invalidate;
101
+ let previousContracts = new Set();
102
+ let previousImports = {};
103
+ let report;
104
+ async function perform() {
105
+ const observed = new Set();
106
+ function observe(path, directory = false) {
107
+ observed.add(path);
108
+ if (!watching || closed)
109
+ return;
110
+ let dependency = dependencies.get(path);
111
+ if (!dependency) {
112
+ const listener = (current, previous) => {
113
+ if (current.ino !== previous.ino ||
114
+ current.dev !== previous.dev ||
115
+ current.mtimeMs !== previous.mtimeMs ||
116
+ current.ctimeMs !== previous.ctimeMs)
117
+ invalidate?.();
118
+ };
119
+ dependency = { listener };
120
+ dependencies.set(path, dependency);
121
+ // Path polling survives removal, atomic replacement, and symlink retargeting.
122
+ NativeFs.watchFile(path, { interval: 250, persistent: false }, listener);
123
+ }
124
+ if (!directory)
125
+ return;
126
+ const status = NativeFs.statSync(path, { throwIfNoEntry: false });
127
+ if (status?.ino === dependency.inode)
128
+ return;
129
+ dependency.watcher?.close();
130
+ dependency.watcher = undefined;
131
+ dependency.inode = status?.ino;
132
+ if (!status?.isDirectory())
133
+ return;
134
+ const real = NativeFs.realpathSync(path);
135
+ dependency.watcher = NativeFs.watch(path, { recursive: true }, (_event, filename) => {
136
+ if (filename && inside(outDir, Path.join(real, filename.toString())))
137
+ return;
138
+ if (filename &&
139
+ /(?:^|[/\\])(?:node_modules|\.git)(?:[/\\]|$)/.test(filename.toString()))
140
+ return;
141
+ invalidate?.();
142
+ });
143
+ dependency.watcher.on('error', (error) => {
144
+ dependency.inode = undefined;
145
+ report?.(error);
146
+ });
147
+ }
148
+ const inputs = [];
149
+ async function scan(directory) {
150
+ for (const entry of await Fs.readdir(directory, {
151
+ withFileTypes: true,
152
+ })) {
153
+ const path = Path.join(directory, entry.name);
154
+ if (inside(outDir, path) ||
155
+ entry.name === '.git' ||
156
+ [
157
+ 'node_modules',
158
+ 'test',
159
+ 'tests',
160
+ '__tests__',
161
+ 'fixtures',
162
+ '__fixtures__',
163
+ ].includes(entry.name))
164
+ continue;
165
+ if (entry.isDirectory())
166
+ await scan(path);
167
+ else if (entry.isFile() &&
168
+ /\.[cm]?[jt]sx?$/.test(entry.name) &&
169
+ !/\.(?:d|test|test-d|bench)\.[cm]?[jt]sx?$/.test(entry.name))
170
+ inputs.push(path);
171
+ }
172
+ }
173
+ await scan(root);
174
+ inputs.sort();
175
+ const artifacts = new Map();
176
+ const sources = Object.create(null);
177
+ for (const input of inputs) {
178
+ const name = Path.relative(root, input).split(Path.sep).join('/');
179
+ if (['.zyzz-lock', '.zyzz.json'].includes(name.split('/')[0].toLowerCase()))
180
+ throw new Error(`Source path conflicts with host control files: ${name}`);
181
+ sources[name] = await Fs.readFile(input, 'utf8');
182
+ }
183
+ const modules = Object.fromEntries(Object.entries(sources).map(([name, source]) => [
184
+ `${options.packageId}/${name}`,
185
+ source,
186
+ ]));
187
+ const contracts = Object.create(null);
188
+ const imports = Object.create(null);
189
+ // A build gets fresh package metadata, including changed export maps.
190
+ const resolver = new ResolverFactory({
191
+ builtinModules: true,
192
+ conditionNames: ['node', 'import'],
193
+ nodePath: false,
194
+ });
195
+ function resolve(specifier, importer) {
196
+ const packageName = specifier.startsWith('@')
197
+ ? specifier.split('/').slice(0, 2).join('/')
198
+ : specifier.split('/')[0];
199
+ for (let directory = Path.dirname(importer);;) {
200
+ observe(Path.join(directory, 'package.json'));
201
+ observe(Path.join(directory, 'node_modules'));
202
+ if (!specifier.startsWith('.') &&
203
+ !specifier.startsWith('#') &&
204
+ !Path.isAbsolute(specifier))
205
+ observe(Path.join(directory, 'node_modules', packageName), true);
206
+ const parent = Path.dirname(directory);
207
+ if (parent === directory)
208
+ break;
209
+ directory = parent;
210
+ }
211
+ const resolved = resolver.sync(Path.dirname(importer), specifier);
212
+ if (resolved.builtin)
213
+ return undefined;
214
+ if (!resolved.path)
215
+ throw new Error(`Unable to resolve ${JSON.stringify(specifier)} from ${importer}: ${resolved.error}`);
216
+ observe(resolved.path);
217
+ if (resolved.packageJsonPath)
218
+ observe(resolved.packageJsonPath);
219
+ return resolved.path;
220
+ }
221
+ async function contract(file, required = false) {
222
+ if (Object.hasOwn(contracts, file))
223
+ return true;
224
+ observe(`${file}.zyzz.json`);
225
+ try {
226
+ contracts[file] = await Fs.readFile(`${file}.zyzz.json`, 'utf8');
227
+ }
228
+ catch (error) {
229
+ if (!required &&
230
+ !previousContracts.has(file) &&
231
+ error.code === 'ENOENT')
232
+ return false;
233
+ throw error;
234
+ }
235
+ const metadata = (() => {
236
+ try {
237
+ return JSON.parse(contracts[file]);
238
+ }
239
+ catch (error) {
240
+ Graph.compile({
241
+ modules: {},
242
+ contracts: { [file]: contracts[file] },
243
+ });
244
+ throw error;
245
+ }
246
+ })();
247
+ if (!Array.isArray(metadata?.stylesheets))
248
+ return true;
249
+ for (const section of metadata.stylesheets) {
250
+ if (!Array.isArray(section?.dependency))
251
+ continue;
252
+ let owner = file;
253
+ for (const specifier of section.dependency) {
254
+ if (typeof specifier !== 'string' ||
255
+ !specifier ||
256
+ specifier.includes('\0'))
257
+ throw new Error('Invalid packed stylesheet dependency.');
258
+ const target = resolve(specifier, owner);
259
+ if (!target)
260
+ throw new Error('Unable to resolve packed stylesheet dependency.');
261
+ (imports[owner] ??= Object.create(null))[specifier] = target;
262
+ await contract(target, true);
263
+ owner = target;
264
+ }
265
+ }
266
+ return true;
267
+ }
268
+ for (const [name, source] of Object.entries(sources)) {
269
+ const moduleId = `${options.packageId}/${name}`;
270
+ const file = Path.join(root, name);
271
+ const resolutions = (imports[moduleId] = Object.create(null));
272
+ for (const node of Syntax.parse({ moduleId, source }).program.body) {
273
+ if ((node.type !== 'ImportDeclaration' &&
274
+ node.type !== 'ExportNamedDeclaration' &&
275
+ node.type !== 'ExportAllDeclaration') ||
276
+ !node.source)
277
+ continue;
278
+ const specifier = node.source.value;
279
+ resolutions[specifier] = null;
280
+ if (node.type === 'ImportDeclaration'
281
+ ? node.importKind === 'type'
282
+ : node.exportKind === 'type')
283
+ continue;
284
+ if ('specifiers' in node &&
285
+ node.specifiers.length &&
286
+ node.specifiers.every((specifier) => specifier.type === 'ImportSpecifier'
287
+ ? specifier.importKind === 'type'
288
+ : specifier.type === 'ExportSpecifier' &&
289
+ specifier.exportKind === 'type'))
290
+ continue;
291
+ if (specifier === 'zyzz' ||
292
+ (specifier.startsWith('zyzz/') && specifier !== 'zyzz/default'))
293
+ continue;
294
+ if (/^(?:[a-z][a-z\d+.-]*:|\/\/)/i.test(specifier) ||
295
+ specifier.includes('?') ||
296
+ (!specifier.startsWith('#') && specifier.includes('#')))
297
+ continue;
298
+ try {
299
+ if (specifier.startsWith('.')) {
300
+ const target = Relative.resolve({ moduleId, modules, specifier });
301
+ if (target)
302
+ resolutions[specifier] = target;
303
+ continue;
304
+ }
305
+ const target = resolve(specifier, file);
306
+ if (!target)
307
+ continue;
308
+ const relative = Path.relative(root, target).split(Path.sep).join('/');
309
+ if (Object.hasOwn(sources, relative))
310
+ resolutions[specifier] = `${options.packageId}/${relative}`;
311
+ else if (/\.[cm]?[jt]sx?$/.test(target)) {
312
+ const previous = previousImports[moduleId]?.[specifier];
313
+ if (await contract(target, !!previous && previousContracts.has(previous)))
314
+ resolutions[specifier] = target;
315
+ }
316
+ }
317
+ catch (error) {
318
+ throw new Source.ExtractError([
319
+ {
320
+ code: 'unsupported_syntax',
321
+ source: moduleId,
322
+ start: node.start,
323
+ end: node.end,
324
+ message: error.message,
325
+ },
326
+ ]);
327
+ }
328
+ }
329
+ }
330
+ const graph = compiler.compile({
331
+ compiler: options.compiler,
332
+ native,
333
+ modules,
334
+ contracts,
335
+ imports,
336
+ });
337
+ const artifactNames = [
338
+ 'zyzz.css',
339
+ 'zyzz.css.map',
340
+ 'zyzz.shared.css',
341
+ 'zyzz.shared.css.map',
342
+ '.zyzz.json',
343
+ '.zyzz-lock',
344
+ ...Object.keys(sources).flatMap((name) => [
345
+ name,
346
+ `${name}.map`,
347
+ `${name}.css`,
348
+ `${name}.css.map`,
349
+ `${name}.zyzz.json`,
350
+ ]),
351
+ ].map((name) => (insensitive ? name.toLowerCase() : name));
352
+ // The script is one more owned artifact, so it must not replace another.
353
+ if (script?.owned &&
354
+ artifactNames.includes(insensitive ? script.owned.toLowerCase() : script.owned))
355
+ throw new Error(`The script path collides with the artifact ${script.owned}.`);
356
+ const generated = new Set([
357
+ ...(script?.owned ? [script.owned] : []),
358
+ ...artifactNames,
359
+ ]);
360
+ let shared;
361
+ if (graph.sharedCss) {
362
+ const assets = new Map();
363
+ function relocate(url, target = graph.sharedAssets?.[url.url]) {
364
+ if (!target)
365
+ return;
366
+ if (!target.startsWith(`${options.packageId}/`))
367
+ throw new Error('Asset path escapes the package root.');
368
+ const relative = target.slice(options.packageId.length + 1);
369
+ const decoded = decodeURIComponent(relative.split(/[?#]/)[0]);
370
+ const filename = Path.posix.normalize(decoded);
371
+ if (filename === '..' ||
372
+ filename.startsWith('../') ||
373
+ filename.startsWith('/') ||
374
+ filename.includes('\\') ||
375
+ filename.includes('\0') ||
376
+ filename.includes(':'))
377
+ throw new Error('Asset path escapes the package root.');
378
+ if (filename.split('/').some((_, index, parts) => {
379
+ const ancestor = parts.slice(0, index + 1).join('/');
380
+ return generated.has(insensitive ? ancestor.toLowerCase() : ancestor);
381
+ }))
382
+ throw new Error('Asset path conflicts with generated output.');
383
+ if (filename
384
+ .split('/')
385
+ .some((part) => ['.zyzz.json', '.zyzz-lock'].includes(part.toLowerCase())))
386
+ throw new Error('Asset path conflicts with host control files.');
387
+ assets.set(filename, Path.join(root, filename));
388
+ return {
389
+ ...url,
390
+ url: filename.split('/').map(encodeURIComponent).join('/') +
391
+ relative.slice(relative.split(/[?#]/)[0].length),
392
+ };
393
+ }
394
+ const processed = css === false && !Object.keys(graph.sharedAssets ?? {}).length
395
+ ? {
396
+ code: Buffer.from(graph.sharedCss),
397
+ map: Buffer.from(JSON.stringify(graph.sharedCssMap)),
398
+ }
399
+ : AtRules.transform({
400
+ filename: 'zyzz.shared.css',
401
+ code: Buffer.from(graph.sharedCss),
402
+ sourceMap: true,
403
+ inputSourceMap: JSON.stringify(graph.sharedCssMap),
404
+ minify: css === false ? false : css.minify,
405
+ ...(css === false ? {} : { targets: css.targets }),
406
+ visitor: {
407
+ Rule(rule) {
408
+ if (rule.type !== 'import')
409
+ return;
410
+ const url = relocate({
411
+ url: rule.value.url,
412
+ loc: rule.value.loc,
413
+ });
414
+ if (url)
415
+ return AtRules.relocateImport(rule.value, url.url);
416
+ },
417
+ Url: relocate,
418
+ },
419
+ });
420
+ for (const [name, file] of assets) {
421
+ const real = await Fs.realpath(file);
422
+ if (!inside(root, real))
423
+ throw new Error('Asset path escapes the package root.');
424
+ const content = await Fs.readFile(real);
425
+ if (name.endsWith('.css')) {
426
+ function discover(url) {
427
+ if (!url || /^(?:\/|[?#]|[a-z][a-z\d+.-]*:)/i.test(url))
428
+ return;
429
+ const target = `${options.packageId}/${Path.posix.join(Path.posix.dirname(name), url)}`;
430
+ relocate({ url, loc: { line: 1, column: 1 } }, target);
431
+ }
432
+ AtRules.transform({
433
+ filename: name,
434
+ code: content,
435
+ visitor: {
436
+ Rule(rule) {
437
+ if (rule.type === 'import')
438
+ discover(rule.value.url);
439
+ },
440
+ Url(url) {
441
+ discover(url.url);
442
+ },
443
+ },
444
+ });
445
+ }
446
+ artifacts.set(name, content);
447
+ }
448
+ shared = {
449
+ code: Buffer.from(processed.code).toString(),
450
+ map: Buffer.from(processed.map).toString(),
451
+ };
452
+ artifacts.set('zyzz.shared.css', shared.code);
453
+ artifacts.set('zyzz.shared.css.map', shared.map);
454
+ }
455
+ const moduleStylesheets = new Map();
456
+ for (const name of Object.keys(sources)) {
457
+ const output = graph.modules[`${options.packageId}/${name}`];
458
+ const contract = graph.contracts[`${options.packageId}/${name}`];
459
+ if (options.modules !== false) {
460
+ if (contract)
461
+ artifacts.set(`${name}.zyzz.json`, contract);
462
+ artifacts.set(name, output.code);
463
+ artifacts.set(`${name}.map`, JSON.stringify(output.map));
464
+ }
465
+ if (native)
466
+ continue;
467
+ let stylesheet = stylesheets.get(output);
468
+ if (!stylesheet) {
469
+ if (css === false)
470
+ stylesheet = { code: output.css, map: JSON.stringify(output.cssMap) };
471
+ else {
472
+ const result = AtRules.transform({
473
+ code: Buffer.from(output.css),
474
+ filename: `${options.packageId}/${name}.css`,
475
+ inputSourceMap: JSON.stringify(output.cssMap),
476
+ minify: css.minify,
477
+ sourceMap: true,
478
+ targets: css.targets,
479
+ });
480
+ stylesheet = {
481
+ code: Buffer.from(result.code).toString(),
482
+ map: Buffer.from(result.map).toString(),
483
+ };
484
+ }
485
+ stylesheets.set(output, stylesheet);
486
+ }
487
+ artifacts.set(`${name}.css`, stylesheet.code);
488
+ artifacts.set(`${name}.css.map`, stylesheet.map);
489
+ // Module URLs resolve beside the module file; the complete stylesheet at
490
+ // the output root carries a copy with those URLs rebased.
491
+ moduleStylesheets.set(`${options.packageId}/${name}`, rebase(stylesheet, name, css === false ? false : css.minify));
492
+ }
493
+ // The complete stylesheet follows the module graph so a consumer's rules
494
+ // cascade over the rules of the modules it imports.
495
+ if (shared || moduleStylesheets.size) {
496
+ const complete = concatenate([
497
+ ...(shared ? [shared] : []),
498
+ ...order(graph.dependencies, [...moduleStylesheets.keys()]).map((id) => moduleStylesheets.get(id)),
499
+ ]);
500
+ artifacts.set('zyzz.css', complete.code);
501
+ artifacts.set('zyzz.css.map', complete.map);
502
+ }
503
+ // Every configuration in the tree restores its saved selection from one script.
504
+ const initialization = Catalogs.scripts(Object.values({ ...contracts, ...graph.contracts }).flatMap(Catalogs.read)).join('\n');
505
+ const content = initialization ? `${banner}${initialization}\n` : undefined;
506
+ if (script?.owned && content)
507
+ artifacts.set(script.owned, content);
508
+ // An external script has no ownership record. Its leading banner marks
509
+ // output this host may replace or remove; any other file there is foreign.
510
+ const external = await (async () => {
511
+ if (!script?.external)
512
+ return undefined;
513
+ const current = await read(script.external);
514
+ if (current !== undefined && !current.startsWith(banner))
515
+ throw new Error(`Refusing to replace a foreign script: ${script.external}`);
516
+ return { current, next: content, path: script.external };
517
+ })();
518
+ await regular(manifestPath, outDir);
519
+ const previous = await read(manifestPath);
520
+ const owned = previous === undefined ? {} : manifest(previous, options.packageId);
521
+ const key = (name) => (insensitive ? name.toLowerCase() : name);
522
+ const ownedNames = new Map(Object.keys(owned).map((name) => [key(name), name]));
523
+ const liveNames = new Map();
524
+ for (const name of artifacts.keys()) {
525
+ if (liveNames.has(key(name)))
526
+ throw new Error(`Output paths differ only in case: ${name}`);
527
+ liveNames.set(key(name), name);
528
+ }
529
+ const hashes = Object.create(null);
530
+ const before = new Map();
531
+ const changed = [];
532
+ for (const name of new Set([...Object.keys(owned), ...artifacts.keys()])) {
533
+ // A case-only rename still owns the same physical file. Do not delete its old alias.
534
+ if (!artifacts.has(name) && liveNames.has(key(name)))
535
+ continue;
536
+ const owner = ownedNames.get(key(name));
537
+ const path = Path.join(outDir, name);
538
+ await regular(path, outDir);
539
+ const content = await read(path, true);
540
+ const expected = owner === undefined ? undefined : owned[owner];
541
+ if (content !== undefined &&
542
+ (expected === undefined || hash(content) !== expected))
543
+ throw new Error(`Refusing to replace an unowned or modified output: ${name}`);
544
+ const next = artifacts.get(name);
545
+ if (next !== undefined)
546
+ hashes[name] = hash(next);
547
+ if ((content === undefined || next === undefined
548
+ ? content !== next
549
+ : hash(content) !== hash(next)) ||
550
+ (owner !== undefined && owner !== name)) {
551
+ before.set(name, content);
552
+ changed.push(name);
553
+ }
554
+ }
555
+ const nextManifest = JSON.stringify({
556
+ files: hashes,
557
+ packageId: options.packageId,
558
+ version: 1,
559
+ });
560
+ if (nextManifest !== previous)
561
+ before.set('.zyzz.json', previous);
562
+ // Compile and verify ownership before publishing. Restore applied writes if publication fails.
563
+ const applied = [];
564
+ let externalApplied = false;
565
+ async function place(path, content) {
566
+ if (content === undefined)
567
+ await Fs.rm(path, { force: true });
568
+ else
569
+ await write(path, content);
570
+ }
571
+ try {
572
+ for (const [name] of before) {
573
+ const content = name === '.zyzz.json' ? nextManifest : artifacts.get(name);
574
+ applied.push(name);
575
+ await place(Path.join(outDir, name), content);
576
+ }
577
+ // The external script joins the transaction so a rejected build leaves it untouched.
578
+ if (external && external.next !== external.current) {
579
+ externalApplied = true;
580
+ await place(external.path, external.next);
581
+ }
582
+ }
583
+ catch (error) {
584
+ // The external path may stay unwritable, which must not skip the owned rollback.
585
+ if (externalApplied)
586
+ await place(external.path, external.current).catch(() => { });
587
+ for (const name of applied.reverse())
588
+ await place(Path.join(outDir, name), before.get(name));
589
+ throw error;
590
+ }
591
+ previousContracts = new Set(Object.keys(contracts));
592
+ previousImports = imports;
593
+ for (const [path, dependency] of dependencies) {
594
+ if (observed.has(path))
595
+ continue;
596
+ NativeFs.unwatchFile(path, dependency.listener);
597
+ dependency.watcher?.close();
598
+ dependencies.delete(path);
599
+ }
600
+ return { changed: changed.sort(), files: [...artifacts.keys()].sort() };
601
+ }
602
+ function build() {
603
+ if (closed)
604
+ return Promise.reject(new Error('Host is closed.'));
605
+ const pending = tail.then(perform);
606
+ tail = pending.then(() => { }, () => { });
607
+ return pending;
608
+ }
609
+ function close() {
610
+ if (closing)
611
+ return closing;
612
+ closed = true;
613
+ for (const { watcher } of watchers.values())
614
+ watcher.close();
615
+ watchers.clear();
616
+ for (const [path, dependency] of dependencies) {
617
+ NativeFs.unwatchFile(path, dependency.listener);
618
+ dependency.watcher?.close();
619
+ }
620
+ dependencies.clear();
621
+ closing = (async () => {
622
+ await tail;
623
+ await lock.close();
624
+ await Fs.rm(lockPath);
625
+ })();
626
+ return closing;
627
+ }
628
+ function watch(watchOptions) {
629
+ if (closed)
630
+ throw new Error('Host is closed.');
631
+ if (watching)
632
+ throw new Error('Host is already watching.');
633
+ watching = true;
634
+ report = (error) => {
635
+ if (!closed)
636
+ watchOptions.onResult({ error });
637
+ };
638
+ let dirty = false;
639
+ let running = false;
640
+ invalidate = () => {
641
+ dirty = true;
642
+ void flush();
643
+ };
644
+ async function flush() {
645
+ if (running)
646
+ return;
647
+ running = true;
648
+ try {
649
+ while (dirty && !closed) {
650
+ dirty = false;
651
+ const seen = new Set();
652
+ const event = await directories(root, seen)
653
+ .then(() => {
654
+ for (const [directory, { watcher }] of watchers)
655
+ if (!seen.has(directory)) {
656
+ watcher.close();
657
+ watchers.delete(directory);
658
+ }
659
+ })
660
+ .then(() => build())
661
+ .then((result) => ({ result }), (error) => ({ error }));
662
+ if (!closed)
663
+ watchOptions.onResult(event);
664
+ }
665
+ }
666
+ finally {
667
+ running = false;
668
+ }
669
+ }
670
+ async function directories(directory, seen) {
671
+ if (closed || inside(outDir, directory))
672
+ return;
673
+ // Watch directories rather than file inodes, which atomic editor saves replace.
674
+ const status = await Fs.stat(directory).catch((error) => {
675
+ if (error.code !== 'ENOENT')
676
+ throw error;
677
+ return undefined;
678
+ });
679
+ if (closed)
680
+ return;
681
+ if (status)
682
+ seen.add(directory);
683
+ if (!status || watchers.get(directory)?.inode !== status.ino) {
684
+ watchers.get(directory)?.watcher.close();
685
+ watchers.delete(directory);
686
+ }
687
+ if (!status)
688
+ return;
689
+ if (!watchers.has(directory)) {
690
+ const watcher = NativeFs.watch(directory, () => {
691
+ dirty = true;
692
+ void flush();
693
+ });
694
+ watcher.on('error', (error) => watchOptions.onResult({ error }));
695
+ watchers.set(directory, { inode: status.ino, watcher });
696
+ }
697
+ const entries = await Fs.readdir(directory, {
698
+ withFileTypes: true,
699
+ }).catch((error) => {
700
+ if (error.code !== 'ENOENT')
701
+ throw error;
702
+ watchers.get(directory)?.watcher.close();
703
+ watchers.delete(directory);
704
+ return [];
705
+ });
706
+ for (const entry of entries)
707
+ if (entry.isDirectory() &&
708
+ !['.git', 'node_modules'].includes(entry.name))
709
+ await directories(Path.join(directory, entry.name), seen);
710
+ }
711
+ dirty = true;
712
+ void flush();
713
+ }
714
+ return { [Symbol.asyncDispose]: close, build, close, watch };
715
+ }
716
+ /** Leading comment marking initialization scripts this host wrote. */
717
+ const banner = '/* zyzz initialization */\n';
718
+ /** Joins processed stylesheets and shifts their composed maps by the preceding line count. */
719
+ function concatenate(parts) {
720
+ const map = new Mapping.GenMapping({ file: 'zyzz.css' });
721
+ const chunks = [];
722
+ let offset = 0;
723
+ for (const part of parts) {
724
+ if (!part.code)
725
+ continue;
726
+ const code = part.code.endsWith('\n') ? part.code : `${part.code}\n`;
727
+ const traced = Mapping.fromMap(part.map);
728
+ for (const mapping of Mapping.allMappings(traced)) {
729
+ const generated = {
730
+ column: mapping.generated.column,
731
+ line: mapping.generated.line + offset,
732
+ };
733
+ if (mapping.source !== undefined && mapping.original !== undefined) {
734
+ const location = {
735
+ generated,
736
+ original: mapping.original,
737
+ source: mapping.source,
738
+ };
739
+ if (mapping.name === undefined)
740
+ Mapping.addMapping(map, location);
741
+ else
742
+ Mapping.addMapping(map, { ...location, name: mapping.name });
743
+ }
744
+ else
745
+ Mapping.addMapping(map, { generated });
746
+ }
747
+ const encoded = Mapping.toEncodedMap(traced);
748
+ for (const [index, source] of encoded.sources.entries())
749
+ if (source !== null)
750
+ Mapping.setSourceContent(map, source, encoded.sourcesContent?.[index] ?? null);
751
+ chunks.push(code);
752
+ offset += code.split('\n').length - 1;
753
+ }
754
+ return {
755
+ code: chunks.join(''),
756
+ map: JSON.stringify(Mapping.toEncodedMap(map)),
757
+ };
758
+ }
759
+ function hash(content) {
760
+ return Crypto.createHash('sha256').update(content).digest('hex');
761
+ }
762
+ function inside(parent, child) {
763
+ const relative = Path.relative(parent, child);
764
+ return (!relative ||
765
+ (!relative.startsWith(`..${Path.sep}`) &&
766
+ relative !== '..' &&
767
+ !Path.isAbsolute(relative)));
768
+ }
769
+ function manifest(source, packageId) {
770
+ const value = JSON.parse(source);
771
+ if (!value ||
772
+ typeof value !== 'object' ||
773
+ !('packageId' in value) ||
774
+ value.packageId !== packageId ||
775
+ !('version' in value) ||
776
+ value.version !== 1 ||
777
+ !('files' in value) ||
778
+ !value.files ||
779
+ typeof value.files !== 'object' ||
780
+ Array.isArray(value.files))
781
+ throw new Error('Invalid output ownership manifest.');
782
+ for (const [path, digest] of Object.entries(value.files))
783
+ if (!path ||
784
+ path.includes('\\') ||
785
+ path.includes(':') ||
786
+ path.split('/').some((part) => !part || part === '.' || part === '..') ||
787
+ typeof digest !== 'string' ||
788
+ !/^[a-f0-9]{64}$/.test(digest) ||
789
+ ['.zyzz-lock', '.zyzz.json'].includes(path.split('/')[0].toLowerCase()))
790
+ throw new Error('Invalid owned output path or digest.');
791
+ return value.files;
792
+ }
793
+ /** Orders module identities with dependencies before their consumers, seeded from graph roots. */
794
+ function order(dependencies, ids) {
795
+ const members = new Set(ids);
796
+ const ordered = [];
797
+ const seen = new Set();
798
+ function visit(id) {
799
+ if (seen.has(id))
800
+ return;
801
+ seen.add(id);
802
+ for (const dependency of dependencies[id] ?? [])
803
+ if (members.has(dependency))
804
+ visit(dependency);
805
+ ordered.push(id);
806
+ }
807
+ // Graph roots seed the traversal so siblings keep their authored import
808
+ // order; modules only reachable through cycles follow in name order.
809
+ const imported = new Set(ids.flatMap((id) => (dependencies[id] ?? []).filter((dependency) => members.has(dependency))));
810
+ for (const id of ids)
811
+ if (!imported.has(id))
812
+ visit(id);
813
+ for (const id of ids)
814
+ visit(id);
815
+ return ordered;
816
+ }
817
+ async function read(path, binary = false) {
818
+ try {
819
+ return binary ? await Fs.readFile(path) : await Fs.readFile(path, 'utf8');
820
+ }
821
+ catch (error) {
822
+ if (error &&
823
+ typeof error === 'object' &&
824
+ 'code' in error &&
825
+ error.code === 'ENOENT')
826
+ return undefined;
827
+ throw error;
828
+ }
829
+ }
830
+ /** Rewrites a nested module stylesheet's relative URLs against the output root. */
831
+ function rebase(stylesheet, name, minify) {
832
+ const directory = Path.posix.dirname(name);
833
+ if (directory === '.' || !stylesheet.code.includes('url('))
834
+ return stylesheet;
835
+ const result = AtRules.transform({
836
+ code: Buffer.from(stylesheet.code),
837
+ filename: `${name}.css`,
838
+ inputSourceMap: stylesheet.map,
839
+ minify,
840
+ sourceMap: true,
841
+ visitor: {
842
+ Url(url) {
843
+ if (/^(?:\/|[?#]|[a-z][a-z\d+.-]*:)/i.test(url.url))
844
+ return url;
845
+ return { ...url, url: Path.posix.join(directory, url.url) };
846
+ },
847
+ },
848
+ });
849
+ return {
850
+ code: Buffer.from(result.code).toString(),
851
+ map: Buffer.from(result.map).toString(),
852
+ };
853
+ }
854
+ async function regular(path, root) {
855
+ for (let current = path; current !== root; current = Path.dirname(current)) {
856
+ try {
857
+ const entry = await Fs.lstat(current);
858
+ if (entry.isSymbolicLink() ||
859
+ (current === path ? !entry.isFile() : !entry.isDirectory()))
860
+ throw new Error('Output paths must be regular files and directories.');
861
+ }
862
+ catch (error) {
863
+ if (!(error &&
864
+ typeof error === 'object' &&
865
+ 'code' in error &&
866
+ error.code === 'ENOENT'))
867
+ throw error;
868
+ }
869
+ }
870
+ }
871
+ async function write(path, content) {
872
+ await Fs.mkdir(Path.dirname(path), { recursive: true });
873
+ const temporary = `${path}.${Crypto.randomUUID()}.tmp`;
874
+ try {
875
+ await Fs.writeFile(temporary, content, { flag: 'wx' });
876
+ await Fs.rename(temporary, path);
877
+ }
878
+ finally {
879
+ await Fs.rm(temporary, { force: true });
880
+ }
881
+ }
882
+ //# sourceMappingURL=Host.js.map