zyzz 0.0.27 → 0.0.29

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 (320) hide show
  1. package/binding/wasi/wasi-worker.mjs +186 -0
  2. package/binding/wasi/zyzz.wasi.cjs +2302 -0
  3. package/binding/wasi/zyzz.wasm32-wasi.wasm +0 -0
  4. package/binding/zyzz.linux-x64-gnu.node +0 -0
  5. package/dist/babel/index.d.ts.map +1 -1
  6. package/dist/babel/index.js +2 -4
  7. package/dist/babel/index.js.map +1 -1
  8. package/dist/babel/internal/Compilation.d.ts +0 -1
  9. package/dist/babel/internal/Compilation.d.ts.map +1 -1
  10. package/dist/compiler/Graph.d.ts +14 -11
  11. package/dist/compiler/Graph.d.ts.map +1 -1
  12. package/dist/compiler/Graph.js +57 -1442
  13. package/dist/compiler/Graph.js.map +1 -1
  14. package/dist/compiler/Native.d.ts +7 -9
  15. package/dist/compiler/Native.d.ts.map +1 -1
  16. package/dist/compiler/Native.js +12 -716
  17. package/dist/compiler/Native.js.map +1 -1
  18. package/dist/compiler/Source.d.ts +122 -24
  19. package/dist/compiler/Source.d.ts.map +1 -1
  20. package/dist/compiler/Source.js +10 -1113
  21. package/dist/compiler/Source.js.map +1 -1
  22. package/dist/compiler/Transform.d.ts +4 -3
  23. package/dist/compiler/Transform.d.ts.map +1 -1
  24. package/dist/compiler/Transform.js +13 -958
  25. package/dist/compiler/Transform.js.map +1 -1
  26. package/dist/compiler/internal/AtRules.d.ts +5 -1
  27. package/dist/compiler/internal/AtRules.d.ts.map +1 -1
  28. package/dist/compiler/internal/AtRules.js +12 -106
  29. package/dist/compiler/internal/AtRules.js.map +1 -1
  30. package/dist/compiler/internal/Context.d.ts +11 -0
  31. package/dist/compiler/internal/Context.d.ts.map +1 -0
  32. package/dist/compiler/internal/Context.js +11 -0
  33. package/dist/compiler/internal/Context.js.map +1 -0
  34. package/dist/compiler/internal/Results.d.ts +148 -0
  35. package/dist/compiler/internal/Results.d.ts.map +1 -0
  36. package/dist/compiler/internal/Results.js +259 -0
  37. package/dist/compiler/internal/Results.js.map +1 -0
  38. package/dist/compiler/internal/Syntax.d.ts +0 -2
  39. package/dist/compiler/internal/Syntax.d.ts.map +1 -1
  40. package/dist/compiler/internal/Syntax.js +0 -2
  41. package/dist/compiler/internal/Syntax.js.map +1 -1
  42. package/dist/compiler/internal/Wire.d.ts +17 -0
  43. package/dist/compiler/internal/Wire.d.ts.map +1 -0
  44. package/dist/compiler/internal/Wire.js +795 -0
  45. package/dist/compiler/internal/Wire.js.map +1 -0
  46. package/dist/internal/Addon.d.ts +28 -0
  47. package/dist/internal/Addon.d.ts.map +1 -0
  48. package/dist/internal/Addon.js +87 -0
  49. package/dist/internal/Addon.js.map +1 -0
  50. package/dist/internal/Authoring.d.ts.map +1 -1
  51. package/dist/internal/Authoring.js +37 -7
  52. package/dist/internal/Authoring.js.map +1 -1
  53. package/dist/internal/Configuration.d.ts +6 -1
  54. package/dist/internal/Configuration.d.ts.map +1 -1
  55. package/dist/internal/Configuration.js.map +1 -1
  56. package/dist/internal/Literal.d.ts +5 -2
  57. package/dist/internal/Literal.d.ts.map +1 -1
  58. package/dist/internal/Literal.js +7 -2
  59. package/dist/internal/Literal.js.map +1 -1
  60. package/dist/internal/Theme.d.ts +4 -0
  61. package/dist/internal/Theme.d.ts.map +1 -1
  62. package/dist/internal/Theme.js.map +1 -1
  63. package/dist/internal/Token.d.ts +2 -1
  64. package/dist/internal/Token.d.ts.map +1 -1
  65. package/dist/internal/Token.js +2 -2
  66. package/dist/internal/Token.js.map +1 -1
  67. package/dist/internal/Vlq.d.ts +14 -0
  68. package/dist/internal/Vlq.d.ts.map +1 -0
  69. package/dist/internal/Vlq.js +47 -0
  70. package/dist/internal/Vlq.js.map +1 -0
  71. package/dist/internal/Wasm.d.ts +22 -0
  72. package/dist/internal/Wasm.d.ts.map +1 -0
  73. package/dist/internal/Wasm.js +83 -0
  74. package/dist/internal/Wasm.js.map +1 -0
  75. package/dist/metro/Graph.d.ts +0 -1
  76. package/dist/metro/Graph.d.ts.map +1 -1
  77. package/dist/metro/transformer.d.ts.map +1 -1
  78. package/dist/metro/transformer.js +0 -1
  79. package/dist/metro/transformer.js.map +1 -1
  80. package/dist/next/internal/Project.d.ts.map +1 -1
  81. package/dist/next/internal/Project.js +2 -5
  82. package/dist/next/internal/Project.js.map +1 -1
  83. package/dist/node/Host.d.ts.map +1 -1
  84. package/dist/node/Host.js +0 -2
  85. package/dist/node/Host.js.map +1 -1
  86. package/dist/node/internal/Contracts.d.ts.map +1 -1
  87. package/dist/node/internal/Contracts.js +3 -7
  88. package/dist/node/internal/Contracts.js.map +1 -1
  89. package/dist/node/internal/Snapshot.d.ts +0 -1
  90. package/dist/node/internal/Snapshot.d.ts.map +1 -1
  91. package/dist/node/internal/Snapshot.js +0 -6
  92. package/dist/node/internal/Snapshot.js.map +1 -1
  93. package/dist/runtime/Composition.d.ts +2 -3
  94. package/dist/runtime/Composition.d.ts.map +1 -1
  95. package/dist/runtime/Composition.js +51 -30
  96. package/dist/runtime/Composition.js.map +1 -1
  97. package/dist/runtime/Recipe.d.ts.map +1 -1
  98. package/dist/runtime/Recipe.js +16 -12
  99. package/dist/runtime/Recipe.js.map +1 -1
  100. package/dist/styleFunction.d.ts +11 -2
  101. package/dist/styleFunction.d.ts.map +1 -1
  102. package/dist/styleFunction.js +3 -1
  103. package/dist/styleFunction.js.map +1 -1
  104. package/dist/unplugin/index.d.ts.map +1 -1
  105. package/dist/unplugin/index.js +3 -6
  106. package/dist/unplugin/index.js.map +1 -1
  107. package/dist/vite/index.d.ts +7 -0
  108. package/dist/vite/index.d.ts.map +1 -1
  109. package/dist/vite/index.js +862 -216
  110. package/dist/vite/index.js.map +1 -1
  111. package/dist/web/Css.d.ts +8 -3
  112. package/dist/web/Css.d.ts.map +1 -1
  113. package/dist/web/Css.js +5 -721
  114. package/dist/web/Css.js.map +1 -1
  115. package/dist/web/internal/Block.d.ts +0 -2
  116. package/dist/web/internal/Block.d.ts.map +1 -1
  117. package/dist/web/internal/Block.js +1 -12
  118. package/dist/web/internal/Block.js.map +1 -1
  119. package/dist/web/internal/ClassName.d.ts +23 -18
  120. package/dist/web/internal/ClassName.d.ts.map +1 -1
  121. package/dist/web/internal/ClassName.js +26 -55
  122. package/dist/web/internal/ClassName.js.map +1 -1
  123. package/dist/web/internal/Contributions.d.ts +3 -5
  124. package/dist/web/internal/Contributions.d.ts.map +1 -1
  125. package/dist/web/internal/Contributions.js +0 -45
  126. package/dist/web/internal/Contributions.js.map +1 -1
  127. package/dist/web/internal/Engine.browser.d.ts +8 -0
  128. package/dist/web/internal/Engine.browser.d.ts.map +1 -0
  129. package/dist/web/internal/Engine.browser.js +42 -0
  130. package/dist/web/internal/Engine.browser.js.map +1 -0
  131. package/dist/web/internal/Engine.d.ts +9 -0
  132. package/dist/web/internal/Engine.d.ts.map +1 -0
  133. package/dist/web/internal/Engine.js +14 -0
  134. package/dist/web/internal/Engine.js.map +1 -0
  135. package/dist/web/internal/Themes.d.ts +1 -9
  136. package/dist/web/internal/Themes.d.ts.map +1 -1
  137. package/dist/web/internal/Themes.js +3 -221
  138. package/dist/web/internal/Themes.js.map +1 -1
  139. package/dist/web/internal/Wasm.generated.d.ts +4 -0
  140. package/dist/web/internal/Wasm.generated.d.ts.map +1 -0
  141. package/dist/web/internal/Wasm.generated.js +4 -0
  142. package/dist/web/internal/Wasm.generated.js.map +1 -0
  143. package/dist/web/internal/Wire.d.ts +19 -0
  144. package/dist/web/internal/Wire.d.ts.map +1 -0
  145. package/dist/web/internal/Wire.js +387 -0
  146. package/dist/web/internal/Wire.js.map +1 -0
  147. package/package.json +20 -1
  148. package/src/babel/index.ts +2 -5
  149. package/src/babel/internal/Compilation.ts +0 -1
  150. package/src/compiler/Graph.ts +89 -1930
  151. package/src/compiler/Native.ts +18 -871
  152. package/src/compiler/Source.ts +144 -1579
  153. package/src/compiler/Transform.ts +16 -1312
  154. package/src/compiler/internal/AtRules.ts +27 -115
  155. package/src/compiler/internal/Context.ts +11 -0
  156. package/src/compiler/internal/Results.ts +406 -0
  157. package/src/compiler/internal/Syntax.ts +0 -3
  158. package/src/compiler/internal/Wire.ts +1045 -0
  159. package/src/internal/Addon.ts +118 -0
  160. package/src/internal/Authoring.ts +53 -18
  161. package/src/internal/Configuration.ts +38 -1
  162. package/src/internal/Literal.ts +7 -2
  163. package/src/internal/Theme.ts +15 -0
  164. package/src/internal/Token.ts +2 -2
  165. package/src/internal/Vlq.ts +59 -0
  166. package/src/internal/Wasm.ts +111 -0
  167. package/src/metro/transformer.ts +0 -1
  168. package/src/next/internal/Project.ts +2 -9
  169. package/src/node/Host.ts +0 -2
  170. package/src/node/internal/Contracts.ts +3 -7
  171. package/src/node/internal/Snapshot.ts +0 -8
  172. package/src/runtime/Composition.ts +48 -25
  173. package/src/runtime/Recipe.ts +21 -14
  174. package/src/styleFunction.ts +31 -2
  175. package/src/unplugin/index.ts +6 -6
  176. package/src/vite/index.ts +1157 -241
  177. package/src/web/Css.ts +12 -908
  178. package/src/web/internal/Block.ts +0 -14
  179. package/src/web/internal/ClassName.ts +52 -85
  180. package/src/web/internal/Contributions.ts +3 -59
  181. package/src/web/internal/Engine.browser.ts +51 -0
  182. package/src/web/internal/Engine.ts +17 -0
  183. package/src/web/internal/Themes.ts +3 -279
  184. package/src/web/internal/Wasm.generated.ts +3 -0
  185. package/src/web/internal/Wire.ts +466 -0
  186. package/src/web/internal/wasm.d.ts +9 -0
  187. package/dist/compiler/internal/Applications.d.ts +0 -55
  188. package/dist/compiler/internal/Applications.d.ts.map +0 -1
  189. package/dist/compiler/internal/Applications.js +0 -352
  190. package/dist/compiler/internal/Applications.js.map +0 -1
  191. package/dist/compiler/internal/ColorProfiles.d.ts +0 -3
  192. package/dist/compiler/internal/ColorProfiles.d.ts.map +0 -1
  193. package/dist/compiler/internal/ColorProfiles.js +0 -84
  194. package/dist/compiler/internal/ColorProfiles.js.map +0 -1
  195. package/dist/compiler/internal/CompositionBindings.d.ts +0 -16
  196. package/dist/compiler/internal/CompositionBindings.d.ts.map +0 -1
  197. package/dist/compiler/internal/CompositionBindings.js +0 -89
  198. package/dist/compiler/internal/CompositionBindings.js.map +0 -1
  199. package/dist/compiler/internal/Compositions.d.ts +0 -37
  200. package/dist/compiler/internal/Compositions.d.ts.map +0 -1
  201. package/dist/compiler/internal/Compositions.js +0 -494
  202. package/dist/compiler/internal/Compositions.js.map +0 -1
  203. package/dist/compiler/internal/Configurations.d.ts +0 -26
  204. package/dist/compiler/internal/Configurations.d.ts.map +0 -1
  205. package/dist/compiler/internal/Configurations.js +0 -259
  206. package/dist/compiler/internal/Configurations.js.map +0 -1
  207. package/dist/compiler/internal/Contract.d.ts +0 -30
  208. package/dist/compiler/internal/Contract.d.ts.map +0 -1
  209. package/dist/compiler/internal/Contract.js +0 -753
  210. package/dist/compiler/internal/Contract.js.map +0 -1
  211. package/dist/compiler/internal/Contributions.d.ts +0 -54
  212. package/dist/compiler/internal/Contributions.d.ts.map +0 -1
  213. package/dist/compiler/internal/Contributions.js +0 -1151
  214. package/dist/compiler/internal/Contributions.js.map +0 -1
  215. package/dist/compiler/internal/Descriptors.d.ts +0 -15
  216. package/dist/compiler/internal/Descriptors.d.ts.map +0 -1
  217. package/dist/compiler/internal/Descriptors.js +0 -192
  218. package/dist/compiler/internal/Descriptors.js.map +0 -1
  219. package/dist/compiler/internal/Dynamic.d.ts +0 -14
  220. package/dist/compiler/internal/Dynamic.d.ts.map +0 -1
  221. package/dist/compiler/internal/Dynamic.js +0 -175
  222. package/dist/compiler/internal/Dynamic.js.map +0 -1
  223. package/dist/compiler/internal/Expression.d.ts +0 -19
  224. package/dist/compiler/internal/Expression.d.ts.map +0 -1
  225. package/dist/compiler/internal/Expression.js +0 -164
  226. package/dist/compiler/internal/Expression.js.map +0 -1
  227. package/dist/compiler/internal/Functions.d.ts +0 -5
  228. package/dist/compiler/internal/Functions.d.ts.map +0 -1
  229. package/dist/compiler/internal/Functions.js +0 -191
  230. package/dist/compiler/internal/Functions.js.map +0 -1
  231. package/dist/compiler/internal/Keyframes.d.ts +0 -5
  232. package/dist/compiler/internal/Keyframes.d.ts.map +0 -1
  233. package/dist/compiler/internal/Keyframes.js +0 -51
  234. package/dist/compiler/internal/Keyframes.js.map +0 -1
  235. package/dist/compiler/internal/Names.d.ts +0 -5
  236. package/dist/compiler/internal/Names.d.ts.map +0 -1
  237. package/dist/compiler/internal/Names.js +0 -37
  238. package/dist/compiler/internal/Names.js.map +0 -1
  239. package/dist/compiler/internal/NativeBindings.d.ts +0 -72
  240. package/dist/compiler/internal/NativeBindings.d.ts.map +0 -1
  241. package/dist/compiler/internal/NativeBindings.js +0 -171
  242. package/dist/compiler/internal/NativeBindings.js.map +0 -1
  243. package/dist/compiler/internal/NativeMedia.d.ts +0 -14
  244. package/dist/compiler/internal/NativeMedia.d.ts.map +0 -1
  245. package/dist/compiler/internal/NativeMedia.js +0 -287
  246. package/dist/compiler/internal/NativeMedia.js.map +0 -1
  247. package/dist/compiler/internal/NativeVars.d.ts +0 -28
  248. package/dist/compiler/internal/NativeVars.d.ts.map +0 -1
  249. package/dist/compiler/internal/NativeVars.js +0 -160
  250. package/dist/compiler/internal/NativeVars.js.map +0 -1
  251. package/dist/compiler/internal/PackedStyles.d.ts +0 -37
  252. package/dist/compiler/internal/PackedStyles.d.ts.map +0 -1
  253. package/dist/compiler/internal/PackedStyles.js +0 -344
  254. package/dist/compiler/internal/PackedStyles.js.map +0 -1
  255. package/dist/compiler/internal/Properties.d.ts +0 -5
  256. package/dist/compiler/internal/Properties.d.ts.map +0 -1
  257. package/dist/compiler/internal/Properties.js +0 -82
  258. package/dist/compiler/internal/Properties.js.map +0 -1
  259. package/dist/compiler/internal/RecipeConditions.d.ts +0 -41
  260. package/dist/compiler/internal/RecipeConditions.d.ts.map +0 -1
  261. package/dist/compiler/internal/RecipeConditions.js +0 -82
  262. package/dist/compiler/internal/RecipeConditions.js.map +0 -1
  263. package/dist/compiler/internal/RecipePayloads.d.ts +0 -31
  264. package/dist/compiler/internal/RecipePayloads.d.ts.map +0 -1
  265. package/dist/compiler/internal/RecipePayloads.js +0 -99
  266. package/dist/compiler/internal/RecipePayloads.js.map +0 -1
  267. package/dist/compiler/internal/Recipes.d.ts +0 -32
  268. package/dist/compiler/internal/Recipes.d.ts.map +0 -1
  269. package/dist/compiler/internal/Recipes.js +0 -339
  270. package/dist/compiler/internal/Recipes.js.map +0 -1
  271. package/dist/compiler/internal/Selectors.d.ts +0 -12
  272. package/dist/compiler/internal/Selectors.d.ts.map +0 -1
  273. package/dist/compiler/internal/Selectors.js +0 -268
  274. package/dist/compiler/internal/Selectors.js.map +0 -1
  275. package/dist/compiler/internal/Static.d.ts +0 -39
  276. package/dist/compiler/internal/Static.d.ts.map +0 -1
  277. package/dist/compiler/internal/Static.js +0 -534
  278. package/dist/compiler/internal/Static.js.map +0 -1
  279. package/dist/compiler/internal/Themes.d.ts +0 -190
  280. package/dist/compiler/internal/Themes.d.ts.map +0 -1
  281. package/dist/compiler/internal/Themes.js +0 -1577
  282. package/dist/compiler/internal/Themes.js.map +0 -1
  283. package/dist/compiler/internal/Vars.d.ts +0 -33
  284. package/dist/compiler/internal/Vars.d.ts.map +0 -1
  285. package/dist/compiler/internal/Vars.js +0 -387
  286. package/dist/compiler/internal/Vars.js.map +0 -1
  287. package/dist/compiler/internal/ViewTransitions.d.ts +0 -3
  288. package/dist/compiler/internal/ViewTransitions.d.ts.map +0 -1
  289. package/dist/compiler/internal/ViewTransitions.js +0 -68
  290. package/dist/compiler/internal/ViewTransitions.js.map +0 -1
  291. package/dist/internal/Cascade.d.ts +0 -74
  292. package/dist/internal/Cascade.d.ts.map +0 -1
  293. package/dist/internal/Cascade.js +0 -210
  294. package/dist/internal/Cascade.js.map +0 -1
  295. package/src/compiler/internal/Applications.ts +0 -554
  296. package/src/compiler/internal/ColorProfiles.ts +0 -93
  297. package/src/compiler/internal/CompositionBindings.ts +0 -120
  298. package/src/compiler/internal/Compositions.ts +0 -678
  299. package/src/compiler/internal/Configurations.ts +0 -349
  300. package/src/compiler/internal/Contract.ts +0 -1028
  301. package/src/compiler/internal/Contributions.ts +0 -1561
  302. package/src/compiler/internal/Descriptors.ts +0 -242
  303. package/src/compiler/internal/Dynamic.ts +0 -275
  304. package/src/compiler/internal/Expression.ts +0 -218
  305. package/src/compiler/internal/Functions.ts +0 -206
  306. package/src/compiler/internal/Keyframes.ts +0 -62
  307. package/src/compiler/internal/Names.ts +0 -48
  308. package/src/compiler/internal/NativeBindings.ts +0 -235
  309. package/src/compiler/internal/NativeMedia.ts +0 -342
  310. package/src/compiler/internal/NativeVars.ts +0 -231
  311. package/src/compiler/internal/PackedStyles.ts +0 -473
  312. package/src/compiler/internal/Properties.ts +0 -121
  313. package/src/compiler/internal/RecipeConditions.ts +0 -139
  314. package/src/compiler/internal/RecipePayloads.ts +0 -132
  315. package/src/compiler/internal/Recipes.ts +0 -531
  316. package/src/compiler/internal/Selectors.ts +0 -339
  317. package/src/compiler/internal/Static.ts +0 -784
  318. package/src/compiler/internal/Themes.ts +0 -2398
  319. package/src/compiler/internal/Vars.ts +0 -516
  320. package/src/compiler/internal/ViewTransitions.ts +0 -82
@@ -1,349 +0,0 @@
1
- /**
2
- * Normalizes literal configuration syntax into linked theme members.
3
- * @module
4
- */
5
- import * as Identity from '../../internal/Identity.js'
6
- import type * as Ast from '@oxc-project/types'
7
- import * as Config from '../../internal/Configuration.js'
8
- import * as PublicConfig from '../../Config.js'
9
- import * as Shorthands from '../../internal/Shorthands.js'
10
- import * as Token from '../../internal/Token.js'
11
- import * as Theme from '../../internal/Theme.js'
12
- import * as VariableSets from '../../internal/VariableSets.js'
13
- import * as Vars from '../../Vars.js'
14
- import type * as Themes from './Themes.js'
15
-
16
- /** Reads a direct configuration factory without executing authored expressions. */
17
- export function collect(options: collect.Options): Themes.Link {
18
- function data(node: Ast.Node): unknown {
19
- const linked = options.resolve(node)
20
- if (
21
- linked?.kind === 'theme' ||
22
- (linked?.call.variableConfig && linked.call.selection)
23
- )
24
- return linked.definition[Token.definition].contract.variableSet
25
- ? VariableSets.from(linked.definition[Token.definition])
26
- : linked.definition
27
-
28
- if (node.type === 'TSAsExpression' || node.type === 'TSSatisfiesExpression')
29
- return data(node.expression)
30
-
31
- if (node.type === 'Literal' && node.value === false) return false
32
-
33
- if (node.type === 'ArrayExpression')
34
- return node.elements.map((node) => {
35
- if (!node || node.type === 'SpreadElement')
36
- throw new Config.InvalidError(
37
- 'Configuration arrays require literal entries.',
38
- )
39
-
40
- return data(node)
41
- })
42
-
43
- if (node.type === 'ObjectExpression') {
44
- const entries: Record<string, unknown> = Object.create(null)
45
-
46
- for (const property of node.properties) {
47
- if (
48
- property.type !== 'Property' ||
49
- property.computed ||
50
- property.method ||
51
- property.kind !== 'init'
52
- )
53
- throw new Config.InvalidError(
54
- 'Configuration requires static properties without spreads or methods.',
55
- )
56
-
57
- const key = (() => {
58
- if (property.key.type === 'Identifier') {
59
- return property.key.name
60
- }
61
-
62
- if (
63
- property.key.type === 'Literal' &&
64
- (typeof property.key.value === 'string' ||
65
- typeof property.key.value === 'number')
66
- ) {
67
- return String(property.key.value)
68
- }
69
-
70
- return undefined
71
- })()
72
- if (key === undefined || Object.hasOwn(entries, key))
73
- throw new Config.InvalidError(
74
- 'Configuration requires unique literal keys.',
75
- )
76
-
77
- entries[key] = data(property.value)
78
- }
79
-
80
- return entries
81
- }
82
-
83
- return options.data(node)
84
- }
85
-
86
- if (options.expression.arguments.length > 1)
87
- throw new Config.InvalidError(
88
- 'Config.create accepts one literal options object.',
89
- )
90
-
91
- let input = (
92
- options.expression.arguments.length
93
- ? data(options.expression.arguments[0]!)
94
- : {}
95
- ) as Config.create.Options
96
-
97
- PublicConfig.create(input as unknown as PublicConfig.create.Options)
98
-
99
- const authored = input as unknown as Config.VariableOptions
100
- const variableMode = authored.vars !== undefined
101
- if (variableMode) {
102
- Config.create(authored)
103
- const wrap = (value: Vars.Definition | Vars.Values) =>
104
- VariableSets.theme(
105
- Token.definition in value
106
- ? (value as Vars.Definition)
107
- : Vars.define(value as Vars.Values),
108
- authored.mappings,
109
- )
110
- const { vars, defaultVars, mappings: _mappings, ...rest } = authored
111
- input =
112
- defaultVars === undefined
113
- ? { ...rest, theme: wrap(vars as Vars.Definition) }
114
- : {
115
- ...rest,
116
- defaultTheme: defaultVars,
117
- themes: Object.fromEntries(
118
- Object.entries(vars).map(([key, value]) => [
119
- key,
120
- wrap(value as Vars.Definition),
121
- ]),
122
- ),
123
- }
124
- }
125
- const config = Config.create(input)
126
-
127
- const catalog = (() => {
128
- if ('themes' in config) {
129
- return config.themes
130
- }
131
-
132
- if ('theme' in config) {
133
- return { theme: config.theme }
134
- }
135
-
136
- return {}
137
- })()
138
-
139
- const identity =
140
- input.id === undefined
141
- ? options.name
142
- : Identity.requireId(input.id, 'Config.create')
143
- const contract = Object.freeze({
144
- ...(variableMode
145
- ? {
146
- variableSet: true,
147
- mappings: VariableSets.mappings(authored.mappings),
148
- }
149
- : {}),
150
- [Token.identity]: identity,
151
- ...(input.id !== undefined ? { [Token.complete]: true } : {}),
152
- ...(input.composition !== undefined
153
- ? { composition: input.composition }
154
- : {}),
155
- cssOutput: input.cssOutput ?? 'atomic',
156
- ...(input.defaultLayer !== undefined
157
- ? { defaultLayer: input.defaultLayer }
158
- : {}),
159
- ...(input.shorthands
160
- ? { shorthands: Shorthands.read(input.shorthands) }
161
- : {}),
162
- })
163
-
164
- const members: Record<string, Themes.Link> = Object.create(null)
165
-
166
- for (const [key, original] of Object.entries(catalog)) {
167
- const name = `${identity}-${key}`
168
- const definition = Token.bind(original, contract, key)
169
- const tokenType = type({
170
- ...values(original.tokens),
171
- ...original[Token.definition].queries,
172
- })
173
-
174
- const call = {
175
- ...(input.output === 'html' ? { output: 'html' as const } : {}),
176
- end: options.expression.end,
177
- name,
178
- start: options.expression.start,
179
- tokenType,
180
- ...(input.output === 'html' || input.shorthands
181
- ? {
182
- type: `import('zyzz').Config.create.ReturnType<{theme:${tokenType};${input.output === 'html' ? "output:'html';" : ''}shorthands:${type(input.shorthands ?? {})}}>['theme']`,
183
- }
184
- : {}),
185
- }
186
-
187
- members[JSON.stringify('themes' in config ? ['themes', key] : ['theme'])] =
188
- {
189
- binding: name,
190
- call,
191
- definition,
192
- kind: 'theme',
193
- }
194
- }
195
-
196
- const selected =
197
- members[
198
- JSON.stringify(
199
- 'themes' in config ? ['themes', input.defaultTheme] : ['theme'],
200
- )
201
- ]
202
-
203
- if ('themes' in config && selected)
204
- members[JSON.stringify(['theme'])] = selected
205
-
206
- if (variableMode && selected)
207
- members[JSON.stringify(['vars'])] = {
208
- ...selected,
209
- call: {
210
- ...selected.call,
211
- directVariables: true,
212
- type: `import('zyzz').Vars.References<${selected.call.tokenType}>`,
213
- },
214
- }
215
-
216
- const definition =
217
- selected?.definition ?? Token.bind(Theme.define({}), contract)
218
-
219
- const normalized = {
220
- ...(() => {
221
- if ('themes' in config) {
222
- return {
223
- defaultTheme: input.defaultTheme,
224
- themes: Object.fromEntries(
225
- Object.keys(catalog).map((name) => {
226
- const theme =
227
- members[JSON.stringify(['themes', name])]!.definition!
228
- return [
229
- name,
230
- { ...values(theme.tokens), ...theme[Token.definition].queries },
231
- ]
232
- }),
233
- ),
234
- }
235
- }
236
-
237
- if ('theme' in config) {
238
- return {
239
- theme: {
240
- ...values(definition.tokens),
241
- ...definition[Token.definition].queries,
242
- },
243
- }
244
- }
245
-
246
- return {}
247
- })(),
248
- ...(input.id !== undefined ? { id: input.id } : {}),
249
- ...(input.composition ? { composition: input.composition } : {}),
250
- ...(input.cssOutput ? { cssOutput: input.cssOutput } : {}),
251
- ...(input.defaultLayer !== undefined
252
- ? { defaultLayer: input.defaultLayer }
253
- : {}),
254
- ...(input.shorthands ? { shorthands: input.shorthands } : {}),
255
- ...(input.output ? { output: input.output } : {}),
256
- ...(input.layers ? { layers: input.layers } : {}),
257
- ...(input.storageKey ? { storageKey: input.storageKey } : {}),
258
- }
259
- const authoredType = type(
260
- variableMode
261
- ? {
262
- ...normalized,
263
- theme: undefined,
264
- themes: undefined,
265
- defaultTheme: undefined,
266
- vars: 'themes' in normalized ? normalized.themes : normalized.theme,
267
- ...('themes' in normalized
268
- ? { defaultVars: normalized.defaultTheme }
269
- : {}),
270
- ...(authored.mappings !== undefined
271
- ? { mappings: VariableSets.mappings(authored.mappings) }
272
- : {}),
273
- }
274
- : normalized,
275
- )
276
-
277
- return {
278
- binding: options.name,
279
- call: {
280
- ...(options.nativeProvider ? { nativeProvider: true } : {}),
281
- ...(variableMode
282
- ? { variableConfig: true, variableMappings: authored.mappings }
283
- : {}),
284
- appearance: true,
285
- script: true,
286
- end: options.expression.end,
287
- members: Object.fromEntries(
288
- Object.entries(members).map(([key, link]) => [key, link.call.name]),
289
- ),
290
- name: selected?.call.name ?? options.name,
291
- options: normalized,
292
- start: options.expression.start,
293
- tokenType: selected?.call.tokenType ?? '{}',
294
- type: options.nativeProvider
295
- ? `import('zyzz/react-native').defineConfig.ReturnType<${authoredType}>`
296
- : variableMode
297
- ? `import('zyzz').Config.VariableConfig<${authoredType}>`
298
- : `import('zyzz').Config.create.ReturnType<${authoredType}>`,
299
- },
300
- definition,
301
- kind: 'config',
302
- members,
303
- }
304
- }
305
-
306
- /** Inputs supplied by the lexical theme collector. */
307
- export declare namespace collect {
308
- /** Literal reader, source span, identity, and preceding immutable bindings. */
309
- type Options = {
310
- /** Existing literal theme reader for scalar input. */
311
- readonly data: (node: Ast.Node) => unknown
312
- /** Direct module-level configuration factory span. */
313
- readonly expression: Ast.CallExpression
314
- /** Stable module/binding identity. */
315
- readonly name: string
316
- /** Native factory supplies an ordinary React Provider export. */
317
- readonly nativeProvider?: boolean | undefined
318
- /** Looks up preceding immutable theme definitions. */
319
- readonly resolve: (node: Ast.Node) => Themes.Link | undefined
320
- }
321
- }
322
-
323
- /** Encodes validated literal options as a declaration type, never executable text. */
324
- export function type(value: unknown): string {
325
- if (Token.isExpression(value) && 'group' in value)
326
- return `import('zyzz').Vars.Composition<'${value.group}'>`
327
- if (Token.is(value)) return `import('zyzz').Vars.Reference<'${value.group}'>`
328
- if (Array.isArray(value)) return `readonly [${value.map(type).join(',')}]`
329
- if (!value || typeof value !== 'object') return JSON.stringify(value)
330
-
331
- return `{${Object.entries(value)
332
- .filter(([, value]) => value !== undefined)
333
- .map(([key, value]) => `readonly ${JSON.stringify(key)}:${type(value)}`)
334
- .join(';')}}`
335
- }
336
-
337
- /** Reads the authored leaf values of a reference tree. */
338
- export function values(
339
- tree: Theme.References<Theme.Tokens>,
340
- ): Record<string, unknown> {
341
- return Object.fromEntries(
342
- Object.entries(tree).map(([key, value]) => [
343
- key,
344
- Token.is(value)
345
- ? value.value
346
- : values(value as Theme.References<Theme.Tokens>),
347
- ]),
348
- )
349
- }