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,339 +0,0 @@
1
- /** Resolves selector objects and portable style definition identities. @module */
2
- import type * as Ast from '@oxc-project/types'
3
- import * as Walker from 'oxc-walker'
4
- import * as Condition from '../../internal/Condition.js'
5
- import * as Theme from '../../internal/Theme.js'
6
- import * as AtRules from './AtRules.js'
7
- import * as Identity from '../../internal/Identity.js'
8
- import * as Identifiers from './Identifiers.js'
9
- import * as Names from './Names.js'
10
- import * as Expression from './Expression.js'
11
- import type * as Scope from './Scope.js'
12
- import * as Themes from './Themes.js'
13
-
14
- /** Collects scoped selectors, local identities, and exported style references. */
15
- export function scan(
16
- program: Ast.Program,
17
- scope: Scope.Tracker,
18
- namespace: string,
19
- calls: readonly Ast.CallExpression[],
20
- links: Readonly<Record<string, Themes.Link>> = {},
21
- selectorKeys: ReadonlySet<number> = new Set(),
22
- cssNamespaces: ReadonlyMap<number, string> = new Map(),
23
- moduleId = namespace,
24
- ) {
25
- const authoredNames = Names.collect(program)
26
- const conditions = new Map<number, string>()
27
- const localConditions = new Set<string>()
28
- const identities = new Map<number, string>()
29
- const exports: Record<string, Themes.Link> = Object.create(null)
30
- const definitions = new Map(calls.map((call) => [call.start, call]))
31
- const declarations = new Map<number, number>()
32
- const bindings = new Map<number, Ast.Expression>()
33
- const namespaces = new Map<number, Map<string, Ast.Expression>>()
34
- const importedNames = new Map<string, Themes.Link>()
35
- const imported = new Map<number, Themes.Link>()
36
-
37
- const names = new Map<string, Ast.Expression>()
38
- const publicNames = new Map<string, string>()
39
- const namespaceNames = new Map<string, Map<string, Ast.Expression>>()
40
- const publicNamespaces = new Map<string, Map<string, Ast.Expression>>()
41
-
42
- function members(node: Ast.TSModuleDeclaration | Ast.TSGlobalDeclaration) {
43
- const result = new Map<string, Ast.Expression>()
44
- if (node.body?.type !== 'TSModuleBlock') return result
45
-
46
- for (const statement of node.body.body) {
47
- if (statement.type !== 'ExportNamedDeclaration') continue
48
- const declaration = statement.declaration
49
- if (
50
- declaration?.type !== 'VariableDeclaration' ||
51
- declaration.kind !== 'const'
52
- )
53
- continue
54
-
55
- for (const variable of declaration.declarations)
56
- if (variable.id.type === 'Identifier' && variable.init)
57
- result.set(variable.id.name, variable.init)
58
- }
59
-
60
- return result
61
- }
62
-
63
- for (const statement of program.body) {
64
- if (
65
- statement.type === 'ImportDeclaration' &&
66
- statement.importKind !== 'type'
67
- )
68
- for (const specifier of statement.specifiers) {
69
- if (
70
- specifier.type === 'ImportSpecifier' &&
71
- specifier.importKind === 'type'
72
- )
73
- continue
74
- const link = links[specifier.local.name]
75
- if (link?.kind === 'style-reference') {
76
- imported.set(specifier.start, link)
77
- importedNames.set(specifier.local.name, link)
78
- }
79
- }
80
-
81
- const declaration =
82
- statement.type === 'ExportNamedDeclaration'
83
- ? statement.declaration
84
- : statement
85
- if (
86
- declaration?.type === 'VariableDeclaration' &&
87
- declaration.kind === 'const'
88
- )
89
- for (const variable of declaration.declarations)
90
- if (variable.id.type === 'Identifier' && variable.init) {
91
- names.set(variable.id.name, variable.init)
92
- if (statement.type === 'ExportNamedDeclaration')
93
- publicNames.set(variable.id.name, variable.id.name)
94
- }
95
-
96
- if (
97
- declaration?.type === 'TSModuleDeclaration' &&
98
- declaration.id.type === 'Identifier' &&
99
- declaration.kind !== 'global'
100
- ) {
101
- namespaceNames.set(declaration.id.name, members(declaration))
102
- if (statement.type === 'ExportNamedDeclaration')
103
- publicNamespaces.set(declaration.id.name, members(declaration))
104
- }
105
-
106
- if (
107
- statement.type === 'ExportNamedDeclaration' &&
108
- !statement.source &&
109
- statement.exportKind !== 'type'
110
- )
111
- for (const specifier of statement.specifiers) {
112
- if (specifier.exportKind === 'type') continue
113
- publicNames.set(
114
- specifier.exported.type === 'Identifier'
115
- ? specifier.exported.name
116
- : specifier.exported.value,
117
- specifier.local.type === 'Identifier'
118
- ? specifier.local.name
119
- : specifier.local.value,
120
- )
121
- }
122
- }
123
-
124
- if (!calls.length && !imported.size)
125
- return { conditions, exports, identities, localConditions }
126
-
127
- const exposed = new Map<Ast.Expression, readonly (readonly string[])[]>()
128
- for (const [name, local] of publicNames) {
129
- const imported = importedNames.get(local)
130
- if (imported) exports[name] = imported
131
-
132
- const value = names.get(local)
133
- if (value) exposed.set(value, [...(exposed.get(value) ?? []), [name]])
134
- const namespace = namespaceNames.get(local)
135
- if (namespace) publicNamespaces.set(name, namespace)
136
- }
137
- for (const [name, values] of publicNamespaces)
138
- for (const [member, value] of values)
139
- exposed.set(value, [...(exposed.get(value) ?? []), [name, member]])
140
-
141
- if (!selectorKeys.size && !exposed.size)
142
- return { conditions, exports, identities, localConditions }
143
-
144
- type Entry = { node: Ast.Node; parent: Ast.Node | null | undefined }
145
- const nodes: Entry[] = []
146
- Walker.walk(program, {
147
- scopeTracker: scope,
148
- enter(node, parent) {
149
- if (node.type === 'Property' && selectorKeys.has(node.key.start))
150
- nodes.push({ node, parent })
151
- if (node.type === 'VariableDeclarator') nodes.push({ node, parent })
152
-
153
- if (node.type === 'Identifier') {
154
- const declaration = scope.getDeclaration(node.name)
155
- if (declaration) declarations.set(node.start, declaration.node.start)
156
- }
157
-
158
- if (node.type === 'VariableDeclaration' && node.kind === 'const')
159
- for (const variable of node.declarations)
160
- if (variable.id.type === 'Identifier' && variable.init)
161
- bindings.set(variable.id.start, variable.init)
162
-
163
- if (node.type === 'TSModuleDeclaration' && node.id.type === 'Identifier')
164
- namespaces.set(node.id.start, members(node))
165
- },
166
- })
167
-
168
- function link(call: Ast.CallExpression): Themes.Link {
169
- const id = Identifiers.explicit(call)
170
- const prefix = cssNamespaces.get(call.start)
171
- const name = `z-style-${id === undefined ? `${prefix ? `${prefix}-` : ''}${Identity.compact(moduleId).slice(-6)}-${authoredNames.get(call.start)!}` : `id-${prefix ? `${prefix}-` : ''}${Identity.requireId(id, 'style').slice(3)}`}`
172
- identities.set(call.start, name)
173
-
174
- return {
175
- binding: name,
176
- call: { start: call.start, end: call.end, name, tokenType: '{}' },
177
- definition: Theme.define({}),
178
- kind: 'style-reference',
179
- }
180
- }
181
-
182
- function resolve(
183
- node: Ast.Node,
184
- seen = new Set<Ast.Node>(),
185
- ): Themes.Link | undefined {
186
- node = Expression.unwrap(node)
187
- if (seen.has(node)) return undefined
188
- seen.add(node)
189
-
190
- if (
191
- node.type === 'CallExpression' &&
192
- definitions.get(node.start)?.end === node.end
193
- )
194
- return link(node)
195
-
196
- if (node.type === 'Identifier') {
197
- const declaration = declarations.get(node.start)
198
- if (declaration === undefined) return undefined
199
- const external = imported.get(declaration)
200
- if (external) return external
201
- const value = bindings.get(declaration)
202
- return value ? resolve(value, seen) : undefined
203
- }
204
-
205
- if (node.type === 'MemberExpression' && !node.optional) {
206
- const name = (() => {
207
- if (!node.computed && node.property.type === 'Identifier')
208
- return node.property.name
209
- if (
210
- node.property.type === 'Literal' &&
211
- typeof node.property.value === 'string'
212
- )
213
- return node.property.value
214
- return undefined
215
- })()
216
- if (name === undefined) return undefined
217
-
218
- if (node.object.type === 'Identifier') {
219
- const declaration = declarations.get(node.object.start)
220
- const value =
221
- declaration === undefined
222
- ? undefined
223
- : namespaces.get(declaration)?.get(name)
224
- if (value) return resolve(value, seen)
225
- }
226
- return resolve(node.object, seen)?.members?.[name]
227
- }
228
-
229
- return undefined
230
- }
231
-
232
- for (const { node } of nodes) {
233
- if (node.type === 'VariableDeclarator' && node.init)
234
- for (const [key, member] of exposed.get(node.init) ?? []) {
235
- const resolved = resolve(node.init)
236
- if (!resolved || key === undefined) continue
237
-
238
- if (member === undefined) exports[key] = resolved
239
- else {
240
- const previous = exports[key]
241
- const name = Array.from(key, (char) =>
242
- char.codePointAt(0)!.toString(16),
243
- ).join('-')
244
- exports[key] = {
245
- binding: `z-style-${namespace}-namespace-${name}`,
246
- call: { start: -1, end: -1, name: '', tokenType: '{}' },
247
- definition: Theme.define({}),
248
- kind: 'style-reference',
249
- members: { ...previous?.members, [member]: resolved },
250
- }
251
- }
252
- }
253
-
254
- if (node.type !== 'Property') continue
255
- if (node.method || node.kind !== 'init' || node.shorthand)
256
- throw new Themes.InvalidError(
257
- 'Selectors require explicit string keys and style objects.',
258
- node,
259
- )
260
- const key = Expression.unwrap(node.key)
261
- let selector = ''
262
- if (key.type === 'Literal' && typeof key.value === 'string')
263
- selector = key.value
264
- else if (key.type === 'TemplateLiteral' && node.computed) {
265
- selector = key.quasis[0]!.value.cooked ?? ''
266
- for (const [index, expression] of key.expressions.entries()) {
267
- const value = Expression.unwrap(expression)
268
- if (value.type !== 'Identifier' && value.type !== 'MemberExpression')
269
- throw new Themes.InvalidError(
270
- 'Selector interpolations require style definitions without calling them.',
271
- expression,
272
- )
273
- const reference = resolve(value)
274
- if (
275
- !reference ||
276
- reference.members ||
277
- (reference.call.start >= 0 &&
278
- reference.call.end > node.start &&
279
- !importedHas(reference))
280
- )
281
- throw new Themes.InvalidError(
282
- 'Selector interpolations require previously declared style definitions.',
283
- expression,
284
- )
285
- selector += `.${reference.call.name}${key.quasis[index + 1]!.value.cooked ?? ''}`
286
- }
287
- } else
288
- throw new Themes.InvalidError(
289
- 'Selectors require literal strings or templates referencing style definitions.',
290
- key,
291
- )
292
- try {
293
- if (!Condition.nested(selector) || selector.trimStart().startsWith('@'))
294
- throw new Error('Selectors require an explicit & target.')
295
- selector = Condition.normalize(selector)
296
- let local = false
297
- AtRules.transform({
298
- filename: 'selectors.css',
299
- code: new TextEncoder().encode(`.z{${selector}{color:red}}`),
300
- errorRecovery: false,
301
- visitor: {
302
- Rule(rule) {
303
- if (rule.type !== 'style') return
304
- const selectors = rule.value.selectors
305
- if (
306
- !selectors.some((parts) =>
307
- parts.some((part) => part.type === 'nesting'),
308
- )
309
- )
310
- return
311
- local = selectors.every((parts) => {
312
- const last = parts.findLastIndex(
313
- (part) => part.type === 'combinator',
314
- )
315
- return parts
316
- .slice(last + 1)
317
- .some((part) => part.type === 'nesting')
318
- })
319
- },
320
- },
321
- })
322
- conditions.set(node.key.start, selector)
323
- if (local) localConditions.add(selector)
324
- } catch (error) {
325
- throw new Themes.InvalidError((error as Error).message, node)
326
- }
327
- }
328
-
329
- function importedHas(reference: Themes.Link): boolean {
330
- function contains(value: Themes.Link): boolean {
331
- return (
332
- value === reference || Object.values(value.members ?? {}).some(contains)
333
- )
334
- }
335
- return [...imported.values()].some(contains)
336
- }
337
-
338
- return { conditions, exports, identities, localConditions }
339
- }