@wyw-in-js/transform 2.0.0-alpha.0 → 2.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (270) hide show
  1. package/esm/cache.js +7 -0
  2. package/esm/cache.js.map +1 -1
  3. package/esm/debug/fileReporter.js +35 -1
  4. package/esm/debug/fileReporter.js.map +1 -1
  5. package/esm/eval/broker.js +230 -89
  6. package/esm/eval/broker.js.map +1 -1
  7. package/esm/eval/protocol.js.map +1 -1
  8. package/esm/eval/runner.js +143 -24
  9. package/esm/eval/runner.js.map +1 -1
  10. package/esm/module.js +70 -43
  11. package/esm/module.js.map +1 -1
  12. package/esm/transform/Entrypoint.types.js.map +1 -1
  13. package/esm/transform/generators/processEntrypoint.js +35 -20
  14. package/esm/transform/generators/processEntrypoint.js.map +1 -1
  15. package/esm/transform/generators/resolveImports.js +48 -2
  16. package/esm/transform/generators/resolveImports.js.map +1 -1
  17. package/esm/transform/generators/resolveStaticOxcValues/cache.js +182 -0
  18. package/esm/transform/generators/resolveStaticOxcValues/cache.js.map +1 -0
  19. package/esm/transform/generators/resolveStaticOxcValues/candidateResolver.js +146 -0
  20. package/esm/transform/generators/resolveStaticOxcValues/candidateResolver.js.map +1 -0
  21. package/esm/transform/generators/resolveStaticOxcValues/dependencies.js +33 -0
  22. package/esm/transform/generators/resolveStaticOxcValues/dependencies.js.map +1 -0
  23. package/esm/transform/generators/resolveStaticOxcValues/environment.js +29 -0
  24. package/esm/transform/generators/resolveStaticOxcValues/environment.js.map +1 -0
  25. package/esm/transform/generators/resolveStaticOxcValues/exportResolver.js +351 -0
  26. package/esm/transform/generators/resolveStaticOxcValues/exportResolver.js.map +1 -0
  27. package/esm/transform/generators/resolveStaticOxcValues/exportTargets.js +253 -0
  28. package/esm/transform/generators/resolveStaticOxcValues/exportTargets.js.map +1 -0
  29. package/esm/transform/generators/resolveStaticOxcValues/objectAssign.js +310 -0
  30. package/esm/transform/generators/resolveStaticOxcValues/objectAssign.js.map +1 -0
  31. package/esm/transform/generators/resolveStaticOxcValues/objectAssignStaticExport.js +74 -0
  32. package/esm/transform/generators/resolveStaticOxcValues/objectAssignStaticExport.js.map +1 -0
  33. package/esm/transform/generators/resolveStaticOxcValues/opaqueRuntime.js +229 -0
  34. package/esm/transform/generators/resolveStaticOxcValues/opaqueRuntime.js.map +1 -0
  35. package/esm/transform/generators/resolveStaticOxcValues/processorStaticExport.js +172 -0
  36. package/esm/transform/generators/resolveStaticOxcValues/processorStaticExport.js.map +1 -0
  37. package/esm/transform/generators/resolveStaticOxcValues/processorStaticModel.js +476 -0
  38. package/esm/transform/generators/resolveStaticOxcValues/processorStaticModel.js.map +1 -0
  39. package/esm/transform/generators/resolveStaticOxcValues/processorTarget.js +55 -0
  40. package/esm/transform/generators/resolveStaticOxcValues/processorTarget.js.map +1 -0
  41. package/esm/transform/generators/resolveStaticOxcValues/programAnalysis.js +123 -0
  42. package/esm/transform/generators/resolveStaticOxcValues/programAnalysis.js.map +1 -0
  43. package/esm/transform/generators/resolveStaticOxcValues/prune.js +186 -0
  44. package/esm/transform/generators/resolveStaticOxcValues/prune.js.map +1 -0
  45. package/esm/transform/generators/resolveStaticOxcValues/resolveStaticOxcPreevalValues.js +183 -0
  46. package/esm/transform/generators/resolveStaticOxcValues/resolveStaticOxcPreevalValues.js.map +1 -0
  47. package/esm/transform/generators/resolveStaticOxcValues/staticExpression.js +298 -0
  48. package/esm/transform/generators/resolveStaticOxcValues/staticExpression.js.map +1 -0
  49. package/esm/transform/generators/resolveStaticOxcValues/staticExpressionDependencies.js +298 -0
  50. package/esm/transform/generators/resolveStaticOxcValues/staticExpressionDependencies.js.map +1 -0
  51. package/esm/transform/generators/resolveStaticOxcValues/types.js +3 -0
  52. package/esm/transform/generators/resolveStaticOxcValues/types.js.map +1 -0
  53. package/esm/transform/generators/resolveStaticOxcValues/zeroArgFunctionStaticExport.js +59 -0
  54. package/esm/transform/generators/resolveStaticOxcValues/zeroArgFunctionStaticExport.js.map +1 -0
  55. package/esm/transform/generators/resolveStaticOxcValues.js +1 -2910
  56. package/esm/transform/generators/resolveStaticOxcValues.js.map +1 -1
  57. package/esm/transform/generators/transform.js +57 -45
  58. package/esm/transform/generators/transform.js.map +1 -1
  59. package/esm/transform/helpers/loadWywOptions.js +33 -4
  60. package/esm/transform/helpers/loadWywOptions.js.map +1 -1
  61. package/esm/transform.js +3 -1
  62. package/esm/transform.js.map +1 -1
  63. package/esm/utils/EventEmitter.js +42 -9
  64. package/esm/utils/EventEmitter.js.map +1 -1
  65. package/esm/utils/applyOxcProcessors/applyOxcProcessors.js +160 -0
  66. package/esm/utils/applyOxcProcessors/applyOxcProcessors.js.map +1 -0
  67. package/esm/utils/applyOxcProcessors/cleanupBindings.js +157 -0
  68. package/esm/utils/applyOxcProcessors/cleanupBindings.js.map +1 -0
  69. package/esm/utils/applyOxcProcessors/cleanupRemovals.js +431 -0
  70. package/esm/utils/applyOxcProcessors/cleanupRemovals.js.map +1 -0
  71. package/esm/utils/applyOxcProcessors/displayName.js +93 -0
  72. package/esm/utils/applyOxcProcessors/displayName.js.map +1 -0
  73. package/esm/utils/applyOxcProcessors/expressionValues.js +152 -0
  74. package/esm/utils/applyOxcProcessors/expressionValues.js.map +1 -0
  75. package/esm/utils/applyOxcProcessors/processorFactory.js +62 -0
  76. package/esm/utils/applyOxcProcessors/processorFactory.js.map +1 -0
  77. package/esm/utils/applyOxcProcessors/processorUsages.js +143 -0
  78. package/esm/utils/applyOxcProcessors/processorUsages.js.map +1 -0
  79. package/esm/utils/applyOxcProcessors/sameFileStaticValues.js +207 -0
  80. package/esm/utils/applyOxcProcessors/sameFileStaticValues.js.map +1 -0
  81. package/esm/utils/applyOxcProcessors/shared.js +29 -0
  82. package/esm/utils/applyOxcProcessors/shared.js.map +1 -0
  83. package/esm/utils/applyOxcProcessors/types.js +2 -0
  84. package/esm/utils/applyOxcProcessors/types.js.map +1 -0
  85. package/esm/utils/applyOxcProcessors.js +1 -1216
  86. package/esm/utils/applyOxcProcessors.js.map +1 -1
  87. package/esm/utils/collectOxcRuntime/normalizeRuntimeCode.js +157 -0
  88. package/esm/utils/collectOxcRuntime/normalizeRuntimeCode.js.map +1 -0
  89. package/esm/utils/collectOxcRuntime/sourceMap.js +36 -0
  90. package/esm/utils/collectOxcRuntime/sourceMap.js.map +1 -0
  91. package/esm/utils/collectOxcRuntime/types.js +2 -0
  92. package/esm/utils/collectOxcRuntime/types.js.map +1 -0
  93. package/esm/utils/collectOxcRuntime.js +5 -193
  94. package/esm/utils/collectOxcRuntime.js.map +1 -1
  95. package/esm/utils/collectOxcTemplateDependencies/expressionExtraction.js +496 -0
  96. package/esm/utils/collectOxcTemplateDependencies/expressionExtraction.js.map +1 -0
  97. package/esm/utils/collectOxcTemplateDependencies/expressionReplacements.js +113 -0
  98. package/esm/utils/collectOxcTemplateDependencies/expressionReplacements.js.map +1 -0
  99. package/esm/utils/collectOxcTemplateDependencies/scopeAnalysis.js +387 -0
  100. package/esm/utils/collectOxcTemplateDependencies/scopeAnalysis.js.map +1 -0
  101. package/esm/utils/collectOxcTemplateDependencies/staticBindings.js +17 -0
  102. package/esm/utils/collectOxcTemplateDependencies/staticBindings.js.map +1 -0
  103. package/esm/utils/collectOxcTemplateDependencies/staticEvaluator.js +540 -0
  104. package/esm/utils/collectOxcTemplateDependencies/staticEvaluator.js.map +1 -0
  105. package/esm/utils/collectOxcTemplateDependencies/types.js +2 -0
  106. package/esm/utils/collectOxcTemplateDependencies/types.js.map +1 -0
  107. package/esm/utils/collectOxcTemplateDependencies.js +3 -1397
  108. package/esm/utils/collectOxcTemplateDependencies.js.map +1 -1
  109. package/esm/utils/nativeResolver.js +93 -0
  110. package/esm/utils/nativeResolver.js.map +1 -0
  111. package/esm/utils/oxc/ast.js +28 -0
  112. package/esm/utils/oxc/ast.js.map +1 -0
  113. package/esm/utils/oxc/parse.js +3 -0
  114. package/esm/utils/oxc/parse.js.map +1 -0
  115. package/esm/utils/oxc/replacements.js +14 -0
  116. package/esm/utils/oxc/replacements.js.map +1 -0
  117. package/esm/utils/oxc/sourceLocations.js +59 -0
  118. package/esm/utils/oxc/sourceLocations.js.map +1 -0
  119. package/esm/utils/oxcPreevalStage/evalStrategy.js +3 -0
  120. package/esm/utils/oxcPreevalStage/evalStrategy.js.map +1 -0
  121. package/esm/utils/oxcPreevalStage/prepareCode.js +21 -0
  122. package/esm/utils/oxcPreevalStage/prepareCode.js.map +1 -0
  123. package/esm/utils/oxcPreevalStage/prevalExport.js +23 -0
  124. package/esm/utils/oxcPreevalStage/prevalExport.js.map +1 -0
  125. package/esm/utils/oxcPreevalStage/processors.js +17 -0
  126. package/esm/utils/oxcPreevalStage/processors.js.map +1 -0
  127. package/esm/utils/oxcPreevalStage/staticOverlay.js +18 -0
  128. package/esm/utils/oxcPreevalStage/staticOverlay.js.map +1 -0
  129. package/esm/utils/oxcPreevalStage/types.js +2 -0
  130. package/esm/utils/oxcPreevalStage/types.js.map +1 -0
  131. package/esm/utils/oxcPreevalStage.js +17 -73
  132. package/esm/utils/oxcPreevalStage.js.map +1 -1
  133. package/esm/utils/oxcPreevalTransforms.js +12 -1
  134. package/esm/utils/oxcPreevalTransforms.js.map +1 -1
  135. package/esm/utils/processorStaticSemantics.js +157 -0
  136. package/esm/utils/processorStaticSemantics.js.map +1 -0
  137. package/esm/utils/resolveWithConditions.js +3 -3
  138. package/esm/utils/resolveWithConditions.js.map +1 -1
  139. package/package.json +4 -3
  140. package/types/cache.js +8 -0
  141. package/types/debug/fileReporter.js +46 -1
  142. package/types/eval/broker.d.ts +6 -2
  143. package/types/eval/broker.js +244 -95
  144. package/types/eval/protocol.d.ts +15 -1
  145. package/types/module.d.ts +4 -1
  146. package/types/module.js +97 -48
  147. package/types/transform/Entrypoint.types.d.ts +3 -0
  148. package/types/transform/generators/resolveImports.d.ts +3 -1
  149. package/types/transform/generators/resolveImports.js +49 -2
  150. package/types/transform/generators/resolveStaticOxcValues/cache.d.ts +25 -0
  151. package/types/transform/generators/resolveStaticOxcValues/cache.js +182 -0
  152. package/types/transform/generators/resolveStaticOxcValues/candidateResolver.d.ts +5 -0
  153. package/types/transform/generators/resolveStaticOxcValues/candidateResolver.js +149 -0
  154. package/types/transform/generators/resolveStaticOxcValues/dependencies.d.ts +6 -0
  155. package/types/transform/generators/resolveStaticOxcValues/dependencies.js +37 -0
  156. package/types/transform/generators/resolveStaticOxcValues/environment.d.ts +12 -0
  157. package/types/transform/generators/resolveStaticOxcValues/environment.js +32 -0
  158. package/types/transform/generators/resolveStaticOxcValues/exportResolver.d.ts +4 -0
  159. package/types/transform/generators/resolveStaticOxcValues/exportResolver.js +358 -0
  160. package/types/transform/generators/resolveStaticOxcValues/exportTargets.d.ts +20 -0
  161. package/types/transform/generators/resolveStaticOxcValues/exportTargets.js +285 -0
  162. package/types/transform/generators/resolveStaticOxcValues/objectAssign.d.ts +41 -0
  163. package/types/transform/generators/resolveStaticOxcValues/objectAssign.js +352 -0
  164. package/types/transform/generators/resolveStaticOxcValues/objectAssignStaticExport.d.ts +6 -0
  165. package/types/transform/generators/resolveStaticOxcValues/objectAssignStaticExport.js +88 -0
  166. package/types/transform/generators/resolveStaticOxcValues/opaqueRuntime.d.ts +13 -0
  167. package/types/transform/generators/resolveStaticOxcValues/opaqueRuntime.js +263 -0
  168. package/types/transform/generators/resolveStaticOxcValues/processorStaticExport.d.ts +4 -0
  169. package/types/transform/generators/resolveStaticOxcValues/processorStaticExport.js +191 -0
  170. package/types/transform/generators/resolveStaticOxcValues/processorStaticModel.d.ts +40 -0
  171. package/types/transform/generators/resolveStaticOxcValues/processorStaticModel.js +516 -0
  172. package/types/transform/generators/resolveStaticOxcValues/processorTarget.d.ts +5 -0
  173. package/types/transform/generators/resolveStaticOxcValues/processorTarget.js +62 -0
  174. package/types/transform/generators/resolveStaticOxcValues/programAnalysis.d.ts +11 -0
  175. package/types/transform/generators/resolveStaticOxcValues/programAnalysis.js +133 -0
  176. package/types/transform/generators/resolveStaticOxcValues/prune.d.ts +15 -0
  177. package/types/transform/generators/resolveStaticOxcValues/prune.js +220 -0
  178. package/types/transform/generators/resolveStaticOxcValues/resolveStaticOxcPreevalValues.d.ts +2 -0
  179. package/types/transform/generators/resolveStaticOxcValues/resolveStaticOxcPreevalValues.js +197 -0
  180. package/types/transform/generators/resolveStaticOxcValues/staticExpression.d.ts +25 -0
  181. package/types/transform/generators/resolveStaticOxcValues/staticExpression.js +391 -0
  182. package/types/transform/generators/resolveStaticOxcValues/staticExpressionDependencies.d.ts +14 -0
  183. package/types/transform/generators/resolveStaticOxcValues/staticExpressionDependencies.js +304 -0
  184. package/types/transform/generators/resolveStaticOxcValues/types.d.ts +99 -0
  185. package/types/transform/generators/resolveStaticOxcValues/types.js +2 -0
  186. package/types/transform/generators/resolveStaticOxcValues/zeroArgFunctionStaticExport.d.ts +7 -0
  187. package/types/transform/generators/resolveStaticOxcValues/zeroArgFunctionStaticExport.js +64 -0
  188. package/types/transform/generators/resolveStaticOxcValues.d.ts +1 -2
  189. package/types/transform/generators/resolveStaticOxcValues.js +1 -3235
  190. package/types/transform/generators/transform.js +63 -49
  191. package/types/transform/helpers/loadWywOptions.js +23 -3
  192. package/types/transform.js +3 -1
  193. package/types/utils/EventEmitter.d.ts +16 -1
  194. package/types/utils/EventEmitter.js +44 -9
  195. package/types/utils/applyOxcProcessors/applyOxcProcessors.d.ts +8 -0
  196. package/types/utils/applyOxcProcessors/applyOxcProcessors.js +167 -0
  197. package/types/utils/applyOxcProcessors/cleanupBindings.d.ts +12 -0
  198. package/types/utils/applyOxcProcessors/cleanupBindings.js +189 -0
  199. package/types/utils/applyOxcProcessors/cleanupRemovals.d.ts +16 -0
  200. package/types/utils/applyOxcProcessors/cleanupRemovals.js +482 -0
  201. package/types/utils/applyOxcProcessors/displayName.d.ts +9 -0
  202. package/types/utils/applyOxcProcessors/displayName.js +113 -0
  203. package/types/utils/applyOxcProcessors/expressionValues.d.ts +11 -0
  204. package/types/utils/applyOxcProcessors/expressionValues.js +170 -0
  205. package/types/utils/applyOxcProcessors/processorFactory.d.ts +7 -0
  206. package/types/utils/applyOxcProcessors/processorFactory.js +70 -0
  207. package/types/utils/applyOxcProcessors/processorUsages.d.ts +16 -0
  208. package/types/utils/applyOxcProcessors/processorUsages.js +163 -0
  209. package/types/utils/applyOxcProcessors/sameFileStaticValues.d.ts +23 -0
  210. package/types/utils/applyOxcProcessors/sameFileStaticValues.js +211 -0
  211. package/types/utils/applyOxcProcessors/shared.d.ts +10 -0
  212. package/types/utils/applyOxcProcessors/shared.js +37 -0
  213. package/types/utils/applyOxcProcessors/types.d.ts +88 -0
  214. package/types/utils/applyOxcProcessors/types.js +1 -0
  215. package/types/utils/applyOxcProcessors.d.ts +1 -16
  216. package/types/utils/applyOxcProcessors.js +1 -1391
  217. package/types/utils/collectOxcRuntime/normalizeRuntimeCode.d.ts +1 -0
  218. package/types/utils/collectOxcRuntime/normalizeRuntimeCode.js +185 -0
  219. package/types/utils/collectOxcRuntime/sourceMap.d.ts +2 -0
  220. package/types/utils/collectOxcRuntime/sourceMap.js +37 -0
  221. package/types/utils/collectOxcRuntime/types.d.ts +16 -0
  222. package/types/utils/collectOxcRuntime/types.js +1 -0
  223. package/types/utils/collectOxcRuntime.d.ts +2 -12
  224. package/types/utils/collectOxcRuntime.js +5 -224
  225. package/types/utils/collectOxcTemplateDependencies/expressionExtraction.d.ts +6 -0
  226. package/types/utils/collectOxcTemplateDependencies/expressionExtraction.js +550 -0
  227. package/types/utils/collectOxcTemplateDependencies/expressionReplacements.d.ts +11 -0
  228. package/types/utils/collectOxcTemplateDependencies/expressionReplacements.js +131 -0
  229. package/types/utils/collectOxcTemplateDependencies/scopeAnalysis.d.ts +20 -0
  230. package/types/utils/collectOxcTemplateDependencies/scopeAnalysis.js +434 -0
  231. package/types/utils/collectOxcTemplateDependencies/staticBindings.d.ts +7 -0
  232. package/types/utils/collectOxcTemplateDependencies/staticBindings.js +13 -0
  233. package/types/utils/collectOxcTemplateDependencies/staticEvaluator.d.ts +13 -0
  234. package/types/utils/collectOxcTemplateDependencies/staticEvaluator.js +626 -0
  235. package/types/utils/collectOxcTemplateDependencies/types.d.ts +116 -0
  236. package/types/utils/collectOxcTemplateDependencies/types.js +1 -0
  237. package/types/utils/collectOxcTemplateDependencies.d.ts +4 -38
  238. package/types/utils/collectOxcTemplateDependencies.js +3 -1580
  239. package/types/utils/nativeResolver.d.ts +13 -0
  240. package/types/utils/nativeResolver.js +91 -0
  241. package/types/utils/oxc/ast.d.ts +4 -0
  242. package/types/utils/oxc/ast.js +37 -0
  243. package/types/utils/oxc/parse.d.ts +3 -0
  244. package/types/utils/oxc/parse.js +2 -0
  245. package/types/utils/oxc/replacements.d.ts +12 -0
  246. package/types/utils/oxc/replacements.js +18 -0
  247. package/types/utils/oxc/sourceLocations.d.ts +5 -0
  248. package/types/utils/oxc/sourceLocations.js +63 -0
  249. package/types/utils/oxcPreevalStage/evalStrategy.d.ts +3 -0
  250. package/types/utils/oxcPreevalStage/evalStrategy.js +2 -0
  251. package/types/utils/oxcPreevalStage/prepareCode.d.ts +3 -0
  252. package/types/utils/oxcPreevalStage/prepareCode.js +20 -0
  253. package/types/utils/oxcPreevalStage/prevalExport.d.ts +1 -0
  254. package/types/utils/oxcPreevalStage/prevalExport.js +22 -0
  255. package/types/utils/oxcPreevalStage/processors.d.ts +10 -0
  256. package/types/utils/oxcPreevalStage/processors.js +16 -0
  257. package/types/utils/oxcPreevalStage/staticOverlay.d.ts +3 -0
  258. package/types/utils/oxcPreevalStage/staticOverlay.js +23 -0
  259. package/types/utils/oxcPreevalStage/types.d.ts +22 -0
  260. package/types/utils/oxcPreevalStage/types.js +1 -0
  261. package/types/utils/oxcPreevalStage.d.ts +2 -18
  262. package/types/utils/oxcPreevalStage.js +17 -79
  263. package/types/utils/oxcPreevalTransforms.js +14 -1
  264. package/types/utils/processorStaticSemantics.d.ts +13 -0
  265. package/types/utils/processorStaticSemantics.js +191 -0
  266. package/types/utils/resolveWithConditions.js +3 -3
  267. package/esm/eval/resolverStrategy.js +0 -51
  268. package/esm/eval/resolverStrategy.js.map +0 -1
  269. package/types/eval/resolverStrategy.d.ts +0 -13
  270. package/types/eval/resolverStrategy.js +0 -46
@@ -0,0 +1,476 @@
1
+ import { collectOxcProcessorImportsFromProgram } from "../../../utils/collectOxcExportsAndImports.js";
2
+ import { getOxcNodeChildren } from "../../../utils/oxc/ast.js";
3
+ import { getProcessorForImport } from "../../../utils/processorLookup.js";
4
+ import { resolveProcessorStaticClassName } from "../../../utils/processorStaticSemantics.js";
5
+ import { parseProgram } from "./environment.js";
6
+ import { findObjectPropertyValue, findTopLevelConstExpression, objectPropertyKeyName } from "./programAnalysis.js";
7
+ import { isSafeLiteral, unwrapExpression } from "./staticExpression.js";
8
+ import { GENERATED_HELPER_NAME_RE } from "./types.js";
9
+ export const collectProcessorImportLocals = (action, program, code, filename) => {
10
+ const result = new Set();
11
+ collectOxcProcessorImportsFromProgram(program, code).forEach((item) => {
12
+ if (item.type !== "esm" || item.imported === "*" || item.imported === "side-effect") {
13
+ return;
14
+ }
15
+ const localName = item.local.name ?? item.local.code;
16
+ if (!localName) {
17
+ return;
18
+ }
19
+ const [processor] = getProcessorForImport({
20
+ imported: item.imported,
21
+ source: item.source
22
+ }, filename, action.services.options.pluginOptions);
23
+ if (!processor) {
24
+ return;
25
+ }
26
+ result.add(localName);
27
+ const rootLocalName = localName.split(".")[0];
28
+ if (rootLocalName) {
29
+ result.add(rootLocalName);
30
+ }
31
+ });
32
+ return result;
33
+ };
34
+ export const isStaticWYWMetaValue = (value, seen = new Set()) => {
35
+ if (typeof value !== "object" || value === null) {
36
+ return false;
37
+ }
38
+ if (seen.has(value)) {
39
+ return false;
40
+ }
41
+ seen.add(value);
42
+ const meta = value.__wyw_meta;
43
+ if (typeof meta !== "object" || meta === null) {
44
+ return false;
45
+ }
46
+ const { className, extends: extended } = meta;
47
+ return typeof className === "string" && (extended === null || isStaticWYWMetaValue(extended, seen));
48
+ };
49
+ export const toStaticWYWSelectorMetaValue = (value, seen = new Set()) => {
50
+ if (typeof value !== "object" || value === null || seen.has(value)) {
51
+ return null;
52
+ }
53
+ seen.add(value);
54
+ const meta = value.__wyw_meta;
55
+ if (typeof meta !== "object" || meta === null) {
56
+ return null;
57
+ }
58
+ const { className, extends: extended } = meta;
59
+ if (typeof className !== "string") {
60
+ return null;
61
+ }
62
+ const staticExtends = extended === null ? null : toStaticWYWSelectorMetaValue(extended, seen);
63
+ if (extended !== null && staticExtends === null) {
64
+ return null;
65
+ }
66
+ return { __wyw_meta: {
67
+ className,
68
+ extends: staticExtends
69
+ } };
70
+ };
71
+ export const staticWYWMetaExtendsReplacementCode = (value) => {
72
+ if (value === null) {
73
+ return "null";
74
+ }
75
+ const selectorMeta = toStaticWYWSelectorMetaValue(value);
76
+ return selectorMeta ? `(${JSON.stringify(selectorMeta)})` : null;
77
+ };
78
+ export const unknownStaticWYWMetaValue = Symbol("unknownStaticWYWMetaValue");
79
+ export const zeroArgFunctionExpressionBody = (expr) => {
80
+ const unwrapped = unwrapExpression(expr);
81
+ if (unwrapped.type !== "ArrowFunctionExpression" || !Array.isArray(unwrapped.params) || unwrapped.params.length !== 0) {
82
+ return null;
83
+ }
84
+ const body = unwrapped.body;
85
+ return body && body.type !== "BlockStatement" ? body : null;
86
+ };
87
+ export const isNullLiteralExpression = (node) => {
88
+ const unwrapped = unwrapExpression(node);
89
+ return isSafeLiteral(unwrapped) && unwrapped.value === null;
90
+ };
91
+ export const isNullReturningFunctionExpression = (expr) => {
92
+ const unwrapped = unwrapExpression(expr);
93
+ if (unwrapped.type !== "ArrowFunctionExpression" && unwrapped.type !== "FunctionExpression") {
94
+ return false;
95
+ }
96
+ if (unwrapped.async || unwrapped.generator) {
97
+ return false;
98
+ }
99
+ const body = unwrapped.body;
100
+ if (!body) {
101
+ return false;
102
+ }
103
+ if (body.type !== "BlockStatement") {
104
+ return isNullLiteralExpression(body);
105
+ }
106
+ if (!Array.isArray(body.body) || body.body.length !== 1) {
107
+ return false;
108
+ }
109
+ const [statement] = body.body;
110
+ return statement?.type === "ReturnStatement" && !!statement.argument && isNullLiteralExpression(statement.argument);
111
+ };
112
+ export const createSameFileStaticWYWMetaHelperResolver = (code, filename) => {
113
+ const declarations = new Map();
114
+ const nullFunctionNames = new Set();
115
+ try {
116
+ const program = parseProgram(code, filename);
117
+ const collectDeclarations = (statement) => {
118
+ if (statement.type === "VariableDeclaration") {
119
+ statement.declarations.forEach((declarator) => {
120
+ if (declarator.id.type !== "Identifier" || !declarator.init) {
121
+ return;
122
+ }
123
+ const { name } = declarator.id;
124
+ const init = declarator.init;
125
+ if (isNullReturningFunctionExpression(init)) {
126
+ nullFunctionNames.add(name);
127
+ return;
128
+ }
129
+ const unwrapped = unwrapExpression(init);
130
+ if (unwrapped.type === "ObjectExpression" && findObjectPropertyValue(unwrapped, "__wyw_meta")) {
131
+ declarations.set(name, init);
132
+ return;
133
+ }
134
+ const body = zeroArgFunctionExpressionBody(init);
135
+ if (body && GENERATED_HELPER_NAME_RE.test(name)) {
136
+ declarations.set(name, body);
137
+ }
138
+ });
139
+ }
140
+ };
141
+ program.body.forEach((statement) => {
142
+ if (statement.type === "ExportNamedDeclaration" && statement.declaration) {
143
+ collectDeclarations(statement.declaration);
144
+ return;
145
+ }
146
+ collectDeclarations(statement);
147
+ });
148
+ } catch {
149
+ return () => new Map();
150
+ }
151
+ return (seedValues) => {
152
+ const memo = new Map();
153
+ const resolving = new Set();
154
+ const resolveName = (name) => {
155
+ if (seedValues.has(name)) {
156
+ return seedValues.get(name);
157
+ }
158
+ if (memo.has(name)) {
159
+ return memo.get(name);
160
+ }
161
+ const expression = declarations.get(name);
162
+ if (!expression || resolving.has(name)) {
163
+ if (nullFunctionNames.has(name)) {
164
+ memo.set(name, null);
165
+ return null;
166
+ }
167
+ return unknownStaticWYWMetaValue;
168
+ }
169
+ resolving.add(name);
170
+ const value = resolveExpression(expression);
171
+ resolving.delete(name);
172
+ memo.set(name, value);
173
+ return value;
174
+ };
175
+ const resolveExpression = (expression) => {
176
+ const unwrapped = unwrapExpression(expression);
177
+ if (isSafeLiteral(unwrapped)) {
178
+ return unwrapped.value;
179
+ }
180
+ if (unwrapped.type === "Identifier") {
181
+ return resolveName(unwrapped.name);
182
+ }
183
+ if (unwrapped.type === "CallExpression") {
184
+ const callee = unwrapExpression(unwrapped.callee);
185
+ if (callee.type === "Identifier" && unwrapped.arguments.length === 0) {
186
+ return resolveName(callee.name);
187
+ }
188
+ return unknownStaticWYWMetaValue;
189
+ }
190
+ if (unwrapped.type !== "ObjectExpression") {
191
+ return unknownStaticWYWMetaValue;
192
+ }
193
+ const value = {};
194
+ for (const property of unwrapped.properties) {
195
+ if (property.type === "SpreadElement") {
196
+ return unknownStaticWYWMetaValue;
197
+ }
198
+ const propertyNode = property;
199
+ if (propertyNode.computed) {
200
+ return unknownStaticWYWMetaValue;
201
+ }
202
+ const propertyKey = propertyNode.key;
203
+ const key = propertyKey ? objectPropertyKeyName(propertyKey) : null;
204
+ const propertyValue = propertyNode.value;
205
+ if (key === null || !propertyValue) {
206
+ return unknownStaticWYWMetaValue;
207
+ }
208
+ const resolved = resolveExpression(propertyValue);
209
+ if (resolved === unknownStaticWYWMetaValue) {
210
+ return unknownStaticWYWMetaValue;
211
+ }
212
+ value[key] = resolved;
213
+ }
214
+ return value;
215
+ };
216
+ const result = new Map();
217
+ declarations.forEach((_expression, name) => {
218
+ if (!GENERATED_HELPER_NAME_RE.test(name)) {
219
+ return;
220
+ }
221
+ const value = resolveName(name);
222
+ if (value !== unknownStaticWYWMetaValue && (value === null || isStaticWYWMetaValue(value))) {
223
+ result.set(name, value);
224
+ }
225
+ });
226
+ return result;
227
+ };
228
+ };
229
+ export const staticWYWMetaTreeValueStatus = (value, seen = new Set()) => {
230
+ if (value === null || typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
231
+ return {
232
+ hasMetadata: false,
233
+ safe: true
234
+ };
235
+ }
236
+ if (typeof value !== "object") {
237
+ return {
238
+ hasMetadata: false,
239
+ safe: false
240
+ };
241
+ }
242
+ if (seen.has(value)) {
243
+ return {
244
+ hasMetadata: false,
245
+ safe: false
246
+ };
247
+ }
248
+ seen.add(value);
249
+ if (Array.isArray(value)) {
250
+ let hasMetadata = false;
251
+ for (const item of value) {
252
+ const status = staticWYWMetaTreeValueStatus(item, seen);
253
+ if (!status.safe) {
254
+ return {
255
+ hasMetadata: false,
256
+ safe: false
257
+ };
258
+ }
259
+ hasMetadata = hasMetadata || status.hasMetadata;
260
+ }
261
+ return {
262
+ hasMetadata,
263
+ safe: true
264
+ };
265
+ }
266
+ if ("__wyw_meta" in value) {
267
+ return {
268
+ hasMetadata: isStaticWYWMetaValue(value),
269
+ safe: isStaticWYWMetaValue(value)
270
+ };
271
+ }
272
+ let hasMetadata = false;
273
+ for (const item of Object.values(value)) {
274
+ const status = staticWYWMetaTreeValueStatus(item, seen);
275
+ if (!status.safe) {
276
+ return {
277
+ hasMetadata: false,
278
+ safe: false
279
+ };
280
+ }
281
+ hasMetadata = hasMetadata || status.hasMetadata;
282
+ }
283
+ return {
284
+ hasMetadata,
285
+ safe: true
286
+ };
287
+ };
288
+ export const isStaticWYWMetaTreeValue = (value) => {
289
+ const status = staticWYWMetaTreeValueStatus(value);
290
+ return status.safe && status.hasMetadata;
291
+ };
292
+ export const processorClassNameRuntimeValue = (processor) => resolveProcessorStaticClassName(processor) ?? processor.className;
293
+ export const isProcessorRuntimeClassName = (processor, value) => processor.className === value || resolveProcessorStaticClassName(processor) === value;
294
+ export const isPlainObjectRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value) && Object.getPrototypeOf(value) === Object.prototype;
295
+ export const isStaticObjectAssignAliasValue = (value) => isStaticWYWMetaValue(value) || isStaticWYWMetaTreeValue(value);
296
+ export const artifactCssText = (artifact) => {
297
+ if (!Array.isArray(artifact) || artifact[0] !== "css") {
298
+ return null;
299
+ }
300
+ const payload = artifact[1];
301
+ if (Array.isArray(payload)) {
302
+ const [rules] = payload;
303
+ if (typeof rules === "object" && rules !== null) {
304
+ return Object.values(rules).map((rule) => typeof rule === "object" && rule !== null && "cssText" in rule && typeof rule.cssText === "string" ? rule.cssText : "").join("");
305
+ }
306
+ }
307
+ if (typeof payload === "object" && payload !== null && "cssText" in payload && typeof payload.cssText === "string") {
308
+ return payload.cssText;
309
+ }
310
+ return null;
311
+ };
312
+ export const isEmptyProcessorClassName = (value, processors, cache) => {
313
+ if (cache.has(value)) {
314
+ return cache.get(value);
315
+ }
316
+ const processor = processors.find((item) => isProcessorRuntimeClassName(item, value));
317
+ if (!processor) {
318
+ cache.set(value, false);
319
+ return false;
320
+ }
321
+ if (processor.artifacts.length === 0) {
322
+ try {
323
+ processor.build(new Map());
324
+ } catch {
325
+ cache.set(value, false);
326
+ return false;
327
+ }
328
+ }
329
+ const result = processor.artifacts.every((artifact) => {
330
+ const cssText = artifactCssText(artifact);
331
+ return cssText !== null && cssText.trim() === "";
332
+ });
333
+ cache.set(value, result);
334
+ return result;
335
+ };
336
+ export const isProcessorClassName = (value, processors, cache) => {
337
+ if (cache.has(value)) {
338
+ return cache.get(value);
339
+ }
340
+ const processor = processors.find((item) => isProcessorRuntimeClassName(item, value));
341
+ if (!processor) {
342
+ cache.set(value, false);
343
+ return false;
344
+ }
345
+ if (processor.artifacts.length === 0) {
346
+ try {
347
+ processor.build(new Map());
348
+ } catch {
349
+ cache.set(value, false);
350
+ return false;
351
+ }
352
+ }
353
+ const result = processor.artifacts.every((artifact) => artifactCssText(artifact) !== null);
354
+ cache.set(value, result);
355
+ return result;
356
+ };
357
+ export const isKnownProcessorClassName = (value, processorClassNames) => processorClassNames.has(value);
358
+ export const isSelectorOnlyProcessorValue = (value, processors, cache, seen = new Set()) => {
359
+ if (typeof value === "string") {
360
+ return isEmptyProcessorClassName(value, processors, cache);
361
+ }
362
+ if (Array.isArray(value)) {
363
+ if (seen.has(value)) {
364
+ return false;
365
+ }
366
+ seen.add(value);
367
+ return value.every((item) => isSelectorOnlyProcessorValue(item, processors, cache, seen));
368
+ }
369
+ if (typeof value === "object" && value !== null) {
370
+ if (seen.has(value)) {
371
+ return false;
372
+ }
373
+ seen.add(value);
374
+ return Object.values(value).every((item) => isSelectorOnlyProcessorValue(item, processors, cache, seen));
375
+ }
376
+ return false;
377
+ };
378
+ export const isProcessorClassValue = (value, processors, cache, seen = new Set()) => {
379
+ if (typeof value === "string") {
380
+ return isProcessorClassName(value, processors, cache);
381
+ }
382
+ if (Array.isArray(value)) {
383
+ if (seen.has(value)) {
384
+ return false;
385
+ }
386
+ seen.add(value);
387
+ return value.every((item) => isProcessorClassValue(item, processors, cache, seen));
388
+ }
389
+ if (typeof value === "object" && value !== null) {
390
+ if (seen.has(value)) {
391
+ return false;
392
+ }
393
+ seen.add(value);
394
+ return Object.values(value).every((item) => isProcessorClassValue(item, processors, cache, seen));
395
+ }
396
+ return false;
397
+ };
398
+ export const isKnownProcessorClassValue = (value, processorClassNames, seen = new Set()) => {
399
+ if (typeof value === "string") {
400
+ return isKnownProcessorClassName(value, processorClassNames);
401
+ }
402
+ if (Array.isArray(value)) {
403
+ if (seen.has(value)) {
404
+ return false;
405
+ }
406
+ seen.add(value);
407
+ return value.every((item) => isKnownProcessorClassValue(item, processorClassNames, seen));
408
+ }
409
+ if (typeof value === "object" && value !== null) {
410
+ if (seen.has(value)) {
411
+ return false;
412
+ }
413
+ seen.add(value);
414
+ return Object.values(value).every((item) => isKnownProcessorClassValue(item, processorClassNames, seen));
415
+ }
416
+ return false;
417
+ };
418
+ export const findWYWMetaExtendsExpression = (expr) => {
419
+ const meta = findObjectPropertyValue(expr, "__wyw_meta");
420
+ if (!meta) {
421
+ return null;
422
+ }
423
+ return findObjectPropertyValue(meta, "extends");
424
+ };
425
+ export const collectWYWMetaExtendsExpressionsDeep = (program, expr) => {
426
+ const result = [];
427
+ const seenLocals = new Set();
428
+ const seenRanges = new Set();
429
+ const visit = (node, parent = null) => {
430
+ const parentRecord = parent;
431
+ if (parentRecord && parentRecord.type === "Property" && parentRecord.key === node && !parentRecord.computed) {
432
+ return;
433
+ }
434
+ if (node.type === "ObjectExpression") {
435
+ const extendsExpression = findWYWMetaExtendsExpression(node);
436
+ if (extendsExpression) {
437
+ const key = `${extendsExpression.start}:${extendsExpression.end}`;
438
+ if (!seenRanges.has(key)) {
439
+ seenRanges.add(key);
440
+ result.push(extendsExpression);
441
+ }
442
+ }
443
+ }
444
+ if (node.type === "Identifier") {
445
+ const local = findTopLevelConstExpression(program, node.name);
446
+ if (local && !seenLocals.has(node.name)) {
447
+ seenLocals.add(node.name);
448
+ visit(local);
449
+ }
450
+ return;
451
+ }
452
+ getOxcNodeChildren(node).forEach((child) => visit(child, node));
453
+ };
454
+ visit(expr);
455
+ return result;
456
+ };
457
+ export const isStaticMetaObjectExpression = (expr) => {
458
+ const meta = findObjectPropertyValue(expr, "__wyw_meta");
459
+ return !!meta && findObjectPropertyValue(meta, "className") !== null;
460
+ };
461
+ export const collectWYWMetaExtendsHelperNames = (program) => {
462
+ const result = new Set();
463
+ const visit = (node) => {
464
+ if (node.type === "ObjectExpression") {
465
+ const extendsExpression = findWYWMetaExtendsExpression(node);
466
+ const unwrapped = extendsExpression ? unwrapExpression(extendsExpression) : null;
467
+ if (unwrapped?.type === "CallExpression" && unwrapped.callee.type === "Identifier" && unwrapped.arguments.length === 0) {
468
+ result.add(unwrapped.callee.name);
469
+ }
470
+ }
471
+ getOxcNodeChildren(node).forEach(visit);
472
+ };
473
+ visit(program);
474
+ return result;
475
+ };
476
+ //# sourceMappingURL=processorStaticModel.js.map
@@ -0,0 +1 @@
1
+ {"mappings":"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","names":[],"sources":["../../../../src/transform/generators/resolveStaticOxcValues/processorStaticModel.ts"],"version":3,"sourcesContent":["/* eslint-disable no-restricted-syntax,no-continue,@typescript-eslint/no-use-before-define */\n\nimport type { BaseProcessor } from '@wyw-in-js/processor-utils';\nimport type { Expression, Node, Program } from 'oxc-parser';\n\nimport { collectOxcProcessorImportsFromProgram } from '../../../utils/collectOxcExportsAndImports';\nimport { getOxcNodeChildren } from '../../../utils/oxc/ast';\nimport { getProcessorForImport } from '../../../utils/processorLookup';\nimport { resolveProcessorStaticClassName } from '../../../utils/processorStaticSemantics';\nimport type { ITransformAction } from '../../types';\nimport { parseProgram } from './environment';\nimport {\n findObjectPropertyValue,\n findTopLevelConstExpression,\n objectPropertyKeyName,\n} from './programAnalysis';\nimport { isSafeLiteral, unwrapExpression } from './staticExpression';\nimport type { AnyNode } from './types';\nimport { GENERATED_HELPER_NAME_RE } from './types';\n\nexport const collectProcessorImportLocals = (\n action: ITransformAction,\n program: Program,\n code: string,\n filename: string\n): Set<string> => {\n const result = new Set<string>();\n\n collectOxcProcessorImportsFromProgram(program, code).forEach((item) => {\n if (\n item.type !== 'esm' ||\n item.imported === '*' ||\n item.imported === 'side-effect'\n ) {\n return;\n }\n\n const localName = item.local.name ?? item.local.code;\n if (!localName) {\n return;\n }\n\n const [processor] = getProcessorForImport(\n {\n imported: item.imported,\n source: item.source,\n },\n filename,\n action.services.options.pluginOptions\n );\n\n if (!processor) {\n return;\n }\n\n result.add(localName);\n const rootLocalName = localName.split('.')[0];\n if (rootLocalName) {\n result.add(rootLocalName);\n }\n });\n\n return result;\n};\n\nexport const isStaticWYWMetaValue = (\n value: unknown,\n seen: Set<unknown> = new Set()\n): boolean => {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n\n if (seen.has(value)) {\n return false;\n }\n seen.add(value);\n\n const meta = (value as { __wyw_meta?: unknown }).__wyw_meta;\n if (typeof meta !== 'object' || meta === null) {\n return false;\n }\n\n const { className, extends: extended } = meta as {\n className?: unknown;\n extends?: unknown;\n };\n\n return (\n typeof className === 'string' &&\n (extended === null || isStaticWYWMetaValue(extended, seen))\n );\n};\n\nexport type StaticWYWSelectorMetaValue = {\n __wyw_meta: {\n className: string;\n extends: StaticWYWSelectorMetaValue | null;\n };\n};\n\nexport const toStaticWYWSelectorMetaValue = (\n value: unknown,\n seen: Set<unknown> = new Set()\n): StaticWYWSelectorMetaValue | null => {\n if (typeof value !== 'object' || value === null || seen.has(value)) {\n return null;\n }\n\n seen.add(value);\n\n const meta = (value as { __wyw_meta?: unknown }).__wyw_meta;\n if (typeof meta !== 'object' || meta === null) {\n return null;\n }\n\n const { className, extends: extended } = meta as {\n className?: unknown;\n extends?: unknown;\n };\n if (typeof className !== 'string') {\n return null;\n }\n\n const staticExtends =\n extended === null ? null : toStaticWYWSelectorMetaValue(extended, seen);\n if (extended !== null && staticExtends === null) {\n return null;\n }\n\n return {\n __wyw_meta: {\n className,\n extends: staticExtends,\n },\n };\n};\n\nexport const staticWYWMetaExtendsReplacementCode = (\n value: unknown\n): string | null => {\n if (value === null) {\n return 'null';\n }\n\n const selectorMeta = toStaticWYWSelectorMetaValue(value);\n return selectorMeta ? `(${JSON.stringify(selectorMeta)})` : null;\n};\n\nexport const unknownStaticWYWMetaValue = Symbol('unknownStaticWYWMetaValue');\n\nexport type UnknownStaticWYWMetaValue = typeof unknownStaticWYWMetaValue;\n\nexport const zeroArgFunctionExpressionBody = (\n expr: Expression\n): Expression | null => {\n const unwrapped = unwrapExpression(expr) as AnyNode;\n if (\n unwrapped.type !== 'ArrowFunctionExpression' ||\n !Array.isArray(unwrapped.params) ||\n unwrapped.params.length !== 0\n ) {\n return null;\n }\n\n const body = unwrapped.body as Node | undefined;\n return body && body.type !== 'BlockStatement' ? (body as Expression) : null;\n};\n\nexport const isNullLiteralExpression = (node: Node): boolean => {\n const unwrapped = unwrapExpression(node);\n return isSafeLiteral(unwrapped) && unwrapped.value === null;\n};\n\nexport const isNullReturningFunctionExpression = (\n expr: Expression\n): boolean => {\n const unwrapped = unwrapExpression(expr) as AnyNode;\n if (\n unwrapped.type !== 'ArrowFunctionExpression' &&\n unwrapped.type !== 'FunctionExpression'\n ) {\n return false;\n }\n\n if (unwrapped.async || unwrapped.generator) {\n return false;\n }\n\n const body = unwrapped.body as Node | undefined;\n if (!body) {\n return false;\n }\n\n if (body.type !== 'BlockStatement') {\n return isNullLiteralExpression(body);\n }\n\n if (!Array.isArray(body.body) || body.body.length !== 1) {\n return false;\n }\n\n const [statement] = body.body;\n return (\n statement?.type === 'ReturnStatement' &&\n !!statement.argument &&\n isNullLiteralExpression(statement.argument)\n );\n};\n\nexport const createSameFileStaticWYWMetaHelperResolver = (\n code: string,\n filename: string\n): ((seedValues: Map<string, unknown>) => Map<string, unknown>) => {\n const declarations = new Map<string, Expression>();\n const nullFunctionNames = new Set<string>();\n\n try {\n const program = parseProgram(code, filename);\n const collectDeclarations = (statement: Node): void => {\n if (statement.type === 'VariableDeclaration') {\n statement.declarations.forEach((declarator) => {\n if (declarator.id.type !== 'Identifier' || !declarator.init) {\n return;\n }\n\n const { name } = declarator.id;\n const init = declarator.init as Expression;\n if (isNullReturningFunctionExpression(init)) {\n nullFunctionNames.add(name);\n return;\n }\n\n const unwrapped = unwrapExpression(init);\n if (\n unwrapped.type === 'ObjectExpression' &&\n findObjectPropertyValue(unwrapped, '__wyw_meta')\n ) {\n declarations.set(name, init);\n return;\n }\n\n const body = zeroArgFunctionExpressionBody(init);\n if (body && GENERATED_HELPER_NAME_RE.test(name)) {\n declarations.set(name, body);\n }\n });\n }\n };\n\n program.body.forEach((statement) => {\n if (\n statement.type === 'ExportNamedDeclaration' &&\n statement.declaration\n ) {\n collectDeclarations(statement.declaration);\n return;\n }\n\n collectDeclarations(statement);\n });\n } catch {\n return () => new Map();\n }\n\n return (seedValues) => {\n const memo = new Map<string, unknown | UnknownStaticWYWMetaValue>();\n const resolving = new Set<string>();\n\n const resolveName = (name: string): unknown | UnknownStaticWYWMetaValue => {\n if (seedValues.has(name)) {\n return seedValues.get(name);\n }\n\n if (memo.has(name)) {\n return memo.get(name)!;\n }\n\n const expression = declarations.get(name);\n if (!expression || resolving.has(name)) {\n if (nullFunctionNames.has(name)) {\n memo.set(name, null);\n return null;\n }\n\n return unknownStaticWYWMetaValue;\n }\n\n resolving.add(name);\n const value = resolveExpression(expression);\n resolving.delete(name);\n memo.set(name, value);\n return value;\n };\n\n const resolveExpression = (\n expression: Node\n ): unknown | UnknownStaticWYWMetaValue => {\n const unwrapped = unwrapExpression(expression);\n if (isSafeLiteral(unwrapped)) {\n return unwrapped.value;\n }\n\n if (unwrapped.type === 'Identifier') {\n return resolveName(unwrapped.name);\n }\n\n if (unwrapped.type === 'CallExpression') {\n const callee = unwrapExpression(unwrapped.callee);\n if (callee.type === 'Identifier' && unwrapped.arguments.length === 0) {\n return resolveName(callee.name);\n }\n\n return unknownStaticWYWMetaValue;\n }\n\n if (unwrapped.type !== 'ObjectExpression') {\n return unknownStaticWYWMetaValue;\n }\n\n const value: Record<string, unknown> = {};\n for (const property of unwrapped.properties) {\n if (property.type === 'SpreadElement') {\n return unknownStaticWYWMetaValue;\n }\n\n const propertyNode = property as AnyNode;\n if (propertyNode.computed) {\n return unknownStaticWYWMetaValue;\n }\n\n const propertyKey = propertyNode.key as Node | undefined;\n const key = propertyKey ? objectPropertyKeyName(propertyKey) : null;\n const propertyValue = propertyNode.value as Expression | undefined;\n if (key === null || !propertyValue) {\n return unknownStaticWYWMetaValue;\n }\n\n const resolved = resolveExpression(propertyValue);\n if (resolved === unknownStaticWYWMetaValue) {\n return unknownStaticWYWMetaValue;\n }\n\n value[key] = resolved;\n }\n\n return value;\n };\n\n const result = new Map<string, unknown>();\n declarations.forEach((_expression, name) => {\n if (!GENERATED_HELPER_NAME_RE.test(name)) {\n return;\n }\n\n const value = resolveName(name);\n if (\n value !== unknownStaticWYWMetaValue &&\n (value === null || isStaticWYWMetaValue(value))\n ) {\n result.set(name, value);\n }\n });\n\n return result;\n };\n};\n\nexport const staticWYWMetaTreeValueStatus = (\n value: unknown,\n seen: Set<unknown> = new Set()\n): { hasMetadata: boolean; safe: boolean } => {\n if (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ) {\n return {\n hasMetadata: false,\n safe: true,\n };\n }\n\n if (typeof value !== 'object') {\n return {\n hasMetadata: false,\n safe: false,\n };\n }\n\n if (seen.has(value)) {\n return {\n hasMetadata: false,\n safe: false,\n };\n }\n seen.add(value);\n\n if (Array.isArray(value)) {\n let hasMetadata = false;\n for (const item of value) {\n const status = staticWYWMetaTreeValueStatus(item, seen);\n if (!status.safe) {\n return {\n hasMetadata: false,\n safe: false,\n };\n }\n\n hasMetadata = hasMetadata || status.hasMetadata;\n }\n\n return {\n hasMetadata,\n safe: true,\n };\n }\n\n if ('__wyw_meta' in value) {\n return {\n hasMetadata: isStaticWYWMetaValue(value),\n safe: isStaticWYWMetaValue(value),\n };\n }\n\n let hasMetadata = false;\n for (const item of Object.values(value)) {\n const status = staticWYWMetaTreeValueStatus(item, seen);\n if (!status.safe) {\n return {\n hasMetadata: false,\n safe: false,\n };\n }\n\n hasMetadata = hasMetadata || status.hasMetadata;\n }\n\n return {\n hasMetadata,\n safe: true,\n };\n};\n\nexport const isStaticWYWMetaTreeValue = (value: unknown): boolean => {\n const status = staticWYWMetaTreeValueStatus(value);\n return status.safe && status.hasMetadata;\n};\n\nexport type StaticProcessorInstance = BaseProcessor;\n\nexport const processorClassNameRuntimeValue = (\n processor: StaticProcessorInstance\n): string => resolveProcessorStaticClassName(processor) ?? processor.className;\n\nexport const isProcessorRuntimeClassName = (\n processor: StaticProcessorInstance,\n value: string\n): boolean =>\n processor.className === value ||\n resolveProcessorStaticClassName(processor) === value;\n\nexport const isPlainObjectRecord = (\n value: unknown\n): value is Record<string, unknown> =>\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n Object.getPrototypeOf(value) === Object.prototype;\n\nexport const isStaticObjectAssignAliasValue = (value: unknown): boolean =>\n isStaticWYWMetaValue(value) || isStaticWYWMetaTreeValue(value);\n\nexport const artifactCssText = (artifact: unknown): string | null => {\n if (!Array.isArray(artifact) || artifact[0] !== 'css') {\n return null;\n }\n\n const payload = artifact[1];\n if (Array.isArray(payload)) {\n const [rules] = payload;\n if (typeof rules === 'object' && rules !== null) {\n return Object.values(rules)\n .map((rule) =>\n typeof rule === 'object' &&\n rule !== null &&\n 'cssText' in rule &&\n typeof (rule as { cssText?: unknown }).cssText === 'string'\n ? (rule as { cssText: string }).cssText\n : ''\n )\n .join('');\n }\n }\n\n if (\n typeof payload === 'object' &&\n payload !== null &&\n 'cssText' in payload &&\n typeof (payload as { cssText?: unknown }).cssText === 'string'\n ) {\n return (payload as { cssText: string }).cssText;\n }\n\n return null;\n};\n\nexport const isEmptyProcessorClassName = (\n value: string,\n processors: StaticProcessorInstance[],\n cache: Map<string, boolean>\n): boolean => {\n if (cache.has(value)) {\n return cache.get(value)!;\n }\n\n const processor = processors.find((item) =>\n isProcessorRuntimeClassName(item, value)\n );\n if (!processor) {\n cache.set(value, false);\n return false;\n }\n\n if (processor.artifacts.length === 0) {\n try {\n processor.build(new Map());\n } catch {\n cache.set(value, false);\n return false;\n }\n }\n\n const result = processor.artifacts.every((artifact) => {\n const cssText = artifactCssText(artifact);\n return cssText !== null && cssText.trim() === '';\n });\n cache.set(value, result);\n return result;\n};\n\nexport const isProcessorClassName = (\n value: string,\n processors: StaticProcessorInstance[],\n cache: Map<string, boolean>\n): boolean => {\n if (cache.has(value)) {\n return cache.get(value)!;\n }\n\n const processor = processors.find((item) =>\n isProcessorRuntimeClassName(item, value)\n );\n if (!processor) {\n cache.set(value, false);\n return false;\n }\n\n if (processor.artifacts.length === 0) {\n try {\n processor.build(new Map());\n } catch {\n cache.set(value, false);\n return false;\n }\n }\n\n const result = processor.artifacts.every(\n (artifact) => artifactCssText(artifact) !== null\n );\n cache.set(value, result);\n return result;\n};\n\nexport const isKnownProcessorClassName = (\n value: string,\n processorClassNames: ReadonlySet<string>\n): boolean => processorClassNames.has(value);\n\nexport const isSelectorOnlyProcessorValue = (\n value: unknown,\n processors: StaticProcessorInstance[],\n cache: Map<string, boolean>,\n seen: Set<unknown> = new Set()\n): boolean => {\n if (typeof value === 'string') {\n return isEmptyProcessorClassName(value, processors, cache);\n }\n\n if (Array.isArray(value)) {\n if (seen.has(value)) {\n return false;\n }\n\n seen.add(value);\n return value.every((item) =>\n isSelectorOnlyProcessorValue(item, processors, cache, seen)\n );\n }\n\n if (typeof value === 'object' && value !== null) {\n if (seen.has(value)) {\n return false;\n }\n\n seen.add(value);\n return Object.values(value).every((item) =>\n isSelectorOnlyProcessorValue(item, processors, cache, seen)\n );\n }\n\n return false;\n};\n\nexport const isProcessorClassValue = (\n value: unknown,\n processors: StaticProcessorInstance[],\n cache: Map<string, boolean>,\n seen: Set<unknown> = new Set()\n): boolean => {\n if (typeof value === 'string') {\n return isProcessorClassName(value, processors, cache);\n }\n\n if (Array.isArray(value)) {\n if (seen.has(value)) {\n return false;\n }\n\n seen.add(value);\n return value.every((item) =>\n isProcessorClassValue(item, processors, cache, seen)\n );\n }\n\n if (typeof value === 'object' && value !== null) {\n if (seen.has(value)) {\n return false;\n }\n\n seen.add(value);\n return Object.values(value).every((item) =>\n isProcessorClassValue(item, processors, cache, seen)\n );\n }\n\n return false;\n};\n\nexport const isKnownProcessorClassValue = (\n value: unknown,\n processorClassNames: ReadonlySet<string>,\n seen: Set<unknown> = new Set()\n): boolean => {\n if (typeof value === 'string') {\n return isKnownProcessorClassName(value, processorClassNames);\n }\n\n if (Array.isArray(value)) {\n if (seen.has(value)) {\n return false;\n }\n\n seen.add(value);\n return value.every((item) =>\n isKnownProcessorClassValue(item, processorClassNames, seen)\n );\n }\n\n if (typeof value === 'object' && value !== null) {\n if (seen.has(value)) {\n return false;\n }\n\n seen.add(value);\n return Object.values(value).every((item) =>\n isKnownProcessorClassValue(item, processorClassNames, seen)\n );\n }\n\n return false;\n};\nexport const findWYWMetaExtendsExpression = (\n expr: Expression\n): Expression | null => {\n const meta = findObjectPropertyValue(expr, '__wyw_meta');\n if (!meta) {\n return null;\n }\n\n return findObjectPropertyValue(meta, 'extends');\n};\n\nexport const collectWYWMetaExtendsExpressionsDeep = (\n program: Program,\n expr: Expression\n): Expression[] => {\n const result: Expression[] = [];\n const seenLocals = new Set<string>();\n const seenRanges = new Set<string>();\n\n const visit = (node: Node, parent: Node | null = null): void => {\n const parentRecord = parent as AnyNode | null;\n if (\n parentRecord &&\n parentRecord.type === 'Property' &&\n parentRecord.key === node &&\n !parentRecord.computed\n ) {\n return;\n }\n\n if (node.type === 'ObjectExpression') {\n const extendsExpression = findWYWMetaExtendsExpression(\n node as Expression\n );\n if (extendsExpression) {\n const key = `${extendsExpression.start}:${extendsExpression.end}`;\n if (!seenRanges.has(key)) {\n seenRanges.add(key);\n result.push(extendsExpression);\n }\n }\n }\n\n if (node.type === 'Identifier') {\n const local = findTopLevelConstExpression(program, node.name);\n if (local && !seenLocals.has(node.name)) {\n seenLocals.add(node.name);\n visit(local);\n }\n return;\n }\n\n getOxcNodeChildren(node).forEach((child) => visit(child, node));\n };\n\n visit(expr);\n return result;\n};\nexport const isStaticMetaObjectExpression = (expr: Node): boolean => {\n const meta = findObjectPropertyValue(expr, '__wyw_meta');\n return !!meta && findObjectPropertyValue(meta, 'className') !== null;\n};\nexport const collectWYWMetaExtendsHelperNames = (\n program: Program\n): Set<string> => {\n const result = new Set<string>();\n\n const visit = (node: Node): void => {\n if (node.type === 'ObjectExpression') {\n const extendsExpression = findWYWMetaExtendsExpression(node);\n const unwrapped = extendsExpression\n ? unwrapExpression(extendsExpression)\n : null;\n if (\n unwrapped?.type === 'CallExpression' &&\n unwrapped.callee.type === 'Identifier' &&\n unwrapped.arguments.length === 0\n ) {\n result.add(unwrapped.callee.name);\n }\n }\n\n getOxcNodeChildren(node).forEach(visit);\n };\n\n visit(program);\n return result;\n};\n"],"file":"processorStaticModel.js"}
@@ -0,0 +1,55 @@
1
+ import { applyOxcReplacements } from "../../../utils/oxc/replacements.js";
2
+ import { parseProgram } from "./environment.js";
3
+ import { findExportTarget } from "./exportTargets.js";
4
+ import { collectWYWMetaExtendsExpressionsDeep } from "./processorStaticModel.js";
5
+ import { hasOnlySafeObjectAssignCallArgumentUses, resolveObjectAssignProcessorExpression } from "./objectAssign.js";
6
+ import { isOpaqueRuntimeComponentExpression } from "./opaqueRuntime.js";
7
+ import { collectStaticExpressionDependencies } from "./staticExpressionDependencies.js";
8
+ export const prepareProcessorTarget = (code, filename, program, target, exportedName, opaqueImportNames = new Set()) => {
9
+ const ignoredMutableCallArgumentNames = target.localName && hasOnlySafeObjectAssignCallArgumentUses(program, target.localName) ? new Set([target.localName]) : undefined;
10
+ const dependencyOptions = {
11
+ allowMetadataCalls: true,
12
+ ignoredMutableCallArgumentNames
13
+ };
14
+ const expression = resolveObjectAssignProcessorExpression(program, target.expression);
15
+ const extendsExpressions = collectWYWMetaExtendsExpressionsDeep(program, expression);
16
+ const opaqueExtendsExpressions = extendsExpressions.filter((extendsExpression) => isOpaqueRuntimeComponentExpression(program, extendsExpression, opaqueImportNames));
17
+ if (opaqueExtendsExpressions.length > 0) {
18
+ const replacements = opaqueExtendsExpressions.map((extendsExpression) => ({
19
+ end: extendsExpression.end,
20
+ start: extendsExpression.start,
21
+ text: "null"
22
+ }));
23
+ const evaluationCode = applyOxcReplacements(code, replacements);
24
+ const evaluationProgram = parseProgram(evaluationCode, filename);
25
+ const evaluationTarget = findExportTarget(evaluationProgram, exportedName);
26
+ if (!evaluationTarget || evaluationTarget.kind === "import") {
27
+ return null;
28
+ }
29
+ const evaluationExpression = resolveObjectAssignProcessorExpression(evaluationProgram, evaluationTarget.expression);
30
+ const dependencies = collectStaticExpressionDependencies(evaluationProgram, {
31
+ ...evaluationTarget,
32
+ expression: evaluationExpression
33
+ }, dependencyOptions);
34
+ return dependencies ? {
35
+ dependencies,
36
+ evaluationCode,
37
+ evaluationSpan: {
38
+ end: evaluationExpression.end,
39
+ start: evaluationExpression.start
40
+ },
41
+ expression: evaluationExpression,
42
+ opaqueRuntimeBase: true
43
+ } : null;
44
+ }
45
+ const dependencies = collectStaticExpressionDependencies(program, {
46
+ ...target,
47
+ expression
48
+ }, dependencyOptions);
49
+ return dependencies ? {
50
+ dependencies,
51
+ expression,
52
+ opaqueRuntimeBase: false
53
+ } : null;
54
+ };
55
+ //# sourceMappingURL=processorTarget.js.map
@@ -0,0 +1 @@
1
+ {"mappings":"AAIA,SAAS,4BAA4B;AACrC,SAAS,oBAAoB;AAC7B,SAAS,wBAAwB;AACjC,SAAS,4CAA4C;AACrD,SACE,yCACA,8CACK;AACP,SAAS,0CAA0C;AACnD,SAAS,2CAA2C;AAOpD,OAAO,MAAM,0BACX,MACA,UACA,SACA,QACA,cACA,oBAAiC,IAAI,KAAK,KACP;CACnC,MAAM,kCACJ,OAAO,aACP,wCAAwC,SAAS,OAAO,UAAU,GAC9D,IAAI,IAAI,CAAC,OAAO,UAAU,CAAC,GAC3B;CACN,MAAM,oBAA6C;EACjD,oBAAoB;EACpB;EACD;CACD,MAAM,aAAa,uCACjB,SACA,OAAO,WACR;CACD,MAAM,qBAAqB,qCACzB,SACA,WACD;CACD,MAAM,2BAA2B,mBAAmB,QACjD,sBACC,mCACE,SACA,mBACA,kBACD,CACJ;AAED,KAAI,yBAAyB,SAAS,GAAG;EACvC,MAAM,eAAe,yBAAyB,KAAK,uBAAuB;GACxE,KAAK,kBAAkB;GACvB,OAAO,kBAAkB;GACzB,MAAM;GACP,EAAE;EACH,MAAM,iBAAiB,qBAAqB,MAAM,aAAa;EAC/D,MAAM,oBAAoB,aAAa,gBAAgB,SAAS;EAChE,MAAM,mBAAmB,iBAAiB,mBAAmB,aAAa;AAC1E,MAAI,CAAC,oBAAoB,iBAAiB,SAAS,UAAU;AAC3D,UAAO;;EAGT,MAAM,uBAAuB,uCAC3B,mBACA,iBAAiB,WAClB;EACD,MAAM,eAAe,oCACnB,mBACA;GACE,GAAG;GACH,YAAY;GACb,EACD,kBACD;AAED,SAAO,eACH;GACE;GACA;GACA,gBAAgB;IACd,KAAK,qBAAqB;IAC1B,OAAO,qBAAqB;IAC7B;GACD,YAAY;GACZ,mBAAmB;GACpB,GACD;;CAGN,MAAM,eAAe,oCACnB,SACA;EACE,GAAG;EACH;EACD,EACD,kBACD;AACD,QAAO,eACH;EACE;EACA;EACA,mBAAmB;EACpB,GACD","names":[],"sources":["../../../../src/transform/generators/resolveStaticOxcValues/processorTarget.ts"],"version":3,"sourcesContent":["/* eslint-disable no-restricted-syntax,no-continue,@typescript-eslint/no-use-before-define */\n\nimport type { Program } from 'oxc-parser';\n\nimport { applyOxcReplacements } from '../../../utils/oxc/replacements';\nimport { parseProgram } from './environment';\nimport { findExportTarget } from './exportTargets';\nimport { collectWYWMetaExtendsExpressionsDeep } from './processorStaticModel';\nimport {\n hasOnlySafeObjectAssignCallArgumentUses,\n resolveObjectAssignProcessorExpression,\n} from './objectAssign';\nimport { isOpaqueRuntimeComponentExpression } from './opaqueRuntime';\nimport { collectStaticExpressionDependencies } from './staticExpressionDependencies';\nimport type {\n ExportTarget,\n PreparedProcessorTarget,\n StaticExpressionOptions,\n} from './types';\n\nexport const prepareProcessorTarget = (\n code: string,\n filename: string,\n program: Program,\n target: Extract<ExportTarget, { kind: 'expression' }>,\n exportedName: string,\n opaqueImportNames: Set<string> = new Set()\n): PreparedProcessorTarget | null => {\n const ignoredMutableCallArgumentNames =\n target.localName &&\n hasOnlySafeObjectAssignCallArgumentUses(program, target.localName)\n ? new Set([target.localName])\n : undefined;\n const dependencyOptions: StaticExpressionOptions = {\n allowMetadataCalls: true,\n ignoredMutableCallArgumentNames,\n };\n const expression = resolveObjectAssignProcessorExpression(\n program,\n target.expression\n );\n const extendsExpressions = collectWYWMetaExtendsExpressionsDeep(\n program,\n expression\n );\n const opaqueExtendsExpressions = extendsExpressions.filter(\n (extendsExpression) =>\n isOpaqueRuntimeComponentExpression(\n program,\n extendsExpression,\n opaqueImportNames\n )\n );\n\n if (opaqueExtendsExpressions.length > 0) {\n const replacements = opaqueExtendsExpressions.map((extendsExpression) => ({\n end: extendsExpression.end,\n start: extendsExpression.start,\n text: 'null',\n }));\n const evaluationCode = applyOxcReplacements(code, replacements);\n const evaluationProgram = parseProgram(evaluationCode, filename);\n const evaluationTarget = findExportTarget(evaluationProgram, exportedName);\n if (!evaluationTarget || evaluationTarget.kind === 'import') {\n return null;\n }\n\n const evaluationExpression = resolveObjectAssignProcessorExpression(\n evaluationProgram,\n evaluationTarget.expression\n );\n const dependencies = collectStaticExpressionDependencies(\n evaluationProgram,\n {\n ...evaluationTarget,\n expression: evaluationExpression,\n },\n dependencyOptions\n );\n\n return dependencies\n ? {\n dependencies,\n evaluationCode,\n evaluationSpan: {\n end: evaluationExpression.end,\n start: evaluationExpression.start,\n },\n expression: evaluationExpression,\n opaqueRuntimeBase: true,\n }\n : null;\n }\n\n const dependencies = collectStaticExpressionDependencies(\n program,\n {\n ...target,\n expression,\n },\n dependencyOptions\n );\n return dependencies\n ? {\n dependencies,\n expression,\n opaqueRuntimeBase: false,\n }\n : null;\n};\n"],"file":"processorTarget.js"}