@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,516 @@
1
+ /* eslint-disable no-restricted-syntax,no-continue,@typescript-eslint/no-use-before-define */
2
+ import { collectOxcProcessorImportsFromProgram } from '../../../utils/collectOxcExportsAndImports';
3
+ import { getOxcNodeChildren } from '../../../utils/oxc/ast';
4
+ import { getProcessorForImport } from '../../../utils/processorLookup';
5
+ import { resolveProcessorStaticClassName } from '../../../utils/processorStaticSemantics';
6
+ import { parseProgram } from './environment';
7
+ import { findObjectPropertyValue, findTopLevelConstExpression, objectPropertyKeyName, } from './programAnalysis';
8
+ import { isSafeLiteral, unwrapExpression } from './staticExpression';
9
+ import { GENERATED_HELPER_NAME_RE } from './types';
10
+ export const collectProcessorImportLocals = (action, program, code, filename) => {
11
+ const result = new Set();
12
+ collectOxcProcessorImportsFromProgram(program, code).forEach((item) => {
13
+ if (item.type !== 'esm' ||
14
+ item.imported === '*' ||
15
+ item.imported === 'side-effect') {
16
+ return;
17
+ }
18
+ const localName = item.local.name ?? item.local.code;
19
+ if (!localName) {
20
+ return;
21
+ }
22
+ const [processor] = getProcessorForImport({
23
+ imported: item.imported,
24
+ source: item.source,
25
+ }, filename, action.services.options.pluginOptions);
26
+ if (!processor) {
27
+ return;
28
+ }
29
+ result.add(localName);
30
+ const rootLocalName = localName.split('.')[0];
31
+ if (rootLocalName) {
32
+ result.add(rootLocalName);
33
+ }
34
+ });
35
+ return result;
36
+ };
37
+ export const isStaticWYWMetaValue = (value, seen = new Set()) => {
38
+ if (typeof value !== 'object' || value === null) {
39
+ return false;
40
+ }
41
+ if (seen.has(value)) {
42
+ return false;
43
+ }
44
+ seen.add(value);
45
+ const meta = value.__wyw_meta;
46
+ if (typeof meta !== 'object' || meta === null) {
47
+ return false;
48
+ }
49
+ const { className, extends: extended } = meta;
50
+ return (typeof className === 'string' &&
51
+ (extended === null || isStaticWYWMetaValue(extended, seen)));
52
+ };
53
+ export const toStaticWYWSelectorMetaValue = (value, seen = new Set()) => {
54
+ if (typeof value !== 'object' || value === null || seen.has(value)) {
55
+ return null;
56
+ }
57
+ seen.add(value);
58
+ const meta = value.__wyw_meta;
59
+ if (typeof meta !== 'object' || meta === null) {
60
+ return null;
61
+ }
62
+ const { className, extends: extended } = meta;
63
+ if (typeof className !== 'string') {
64
+ return null;
65
+ }
66
+ const staticExtends = extended === null ? null : toStaticWYWSelectorMetaValue(extended, seen);
67
+ if (extended !== null && staticExtends === null) {
68
+ return null;
69
+ }
70
+ return {
71
+ __wyw_meta: {
72
+ className,
73
+ extends: staticExtends,
74
+ },
75
+ };
76
+ };
77
+ export const staticWYWMetaExtendsReplacementCode = (value) => {
78
+ if (value === null) {
79
+ return 'null';
80
+ }
81
+ const selectorMeta = toStaticWYWSelectorMetaValue(value);
82
+ return selectorMeta ? `(${JSON.stringify(selectorMeta)})` : null;
83
+ };
84
+ export const unknownStaticWYWMetaValue = Symbol('unknownStaticWYWMetaValue');
85
+ export const zeroArgFunctionExpressionBody = (expr) => {
86
+ const unwrapped = unwrapExpression(expr);
87
+ if (unwrapped.type !== 'ArrowFunctionExpression' ||
88
+ !Array.isArray(unwrapped.params) ||
89
+ unwrapped.params.length !== 0) {
90
+ return null;
91
+ }
92
+ const body = unwrapped.body;
93
+ return body && body.type !== 'BlockStatement' ? body : null;
94
+ };
95
+ export const isNullLiteralExpression = (node) => {
96
+ const unwrapped = unwrapExpression(node);
97
+ return isSafeLiteral(unwrapped) && unwrapped.value === null;
98
+ };
99
+ export const isNullReturningFunctionExpression = (expr) => {
100
+ const unwrapped = unwrapExpression(expr);
101
+ if (unwrapped.type !== 'ArrowFunctionExpression' &&
102
+ unwrapped.type !== 'FunctionExpression') {
103
+ return false;
104
+ }
105
+ if (unwrapped.async || unwrapped.generator) {
106
+ return false;
107
+ }
108
+ const body = unwrapped.body;
109
+ if (!body) {
110
+ return false;
111
+ }
112
+ if (body.type !== 'BlockStatement') {
113
+ return isNullLiteralExpression(body);
114
+ }
115
+ if (!Array.isArray(body.body) || body.body.length !== 1) {
116
+ return false;
117
+ }
118
+ const [statement] = body.body;
119
+ return (statement?.type === 'ReturnStatement' &&
120
+ !!statement.argument &&
121
+ isNullLiteralExpression(statement.argument));
122
+ };
123
+ export const createSameFileStaticWYWMetaHelperResolver = (code, filename) => {
124
+ const declarations = new Map();
125
+ const nullFunctionNames = new Set();
126
+ try {
127
+ const program = parseProgram(code, filename);
128
+ const collectDeclarations = (statement) => {
129
+ if (statement.type === 'VariableDeclaration') {
130
+ statement.declarations.forEach((declarator) => {
131
+ if (declarator.id.type !== 'Identifier' || !declarator.init) {
132
+ return;
133
+ }
134
+ const { name } = declarator.id;
135
+ const init = declarator.init;
136
+ if (isNullReturningFunctionExpression(init)) {
137
+ nullFunctionNames.add(name);
138
+ return;
139
+ }
140
+ const unwrapped = unwrapExpression(init);
141
+ if (unwrapped.type === 'ObjectExpression' &&
142
+ findObjectPropertyValue(unwrapped, '__wyw_meta')) {
143
+ declarations.set(name, init);
144
+ return;
145
+ }
146
+ const body = zeroArgFunctionExpressionBody(init);
147
+ if (body && GENERATED_HELPER_NAME_RE.test(name)) {
148
+ declarations.set(name, body);
149
+ }
150
+ });
151
+ }
152
+ };
153
+ program.body.forEach((statement) => {
154
+ if (statement.type === 'ExportNamedDeclaration' &&
155
+ statement.declaration) {
156
+ collectDeclarations(statement.declaration);
157
+ return;
158
+ }
159
+ collectDeclarations(statement);
160
+ });
161
+ }
162
+ catch {
163
+ return () => new Map();
164
+ }
165
+ return (seedValues) => {
166
+ const memo = new Map();
167
+ const resolving = new Set();
168
+ const resolveName = (name) => {
169
+ if (seedValues.has(name)) {
170
+ return seedValues.get(name);
171
+ }
172
+ if (memo.has(name)) {
173
+ return memo.get(name);
174
+ }
175
+ const expression = declarations.get(name);
176
+ if (!expression || resolving.has(name)) {
177
+ if (nullFunctionNames.has(name)) {
178
+ memo.set(name, null);
179
+ return null;
180
+ }
181
+ return unknownStaticWYWMetaValue;
182
+ }
183
+ resolving.add(name);
184
+ const value = resolveExpression(expression);
185
+ resolving.delete(name);
186
+ memo.set(name, value);
187
+ return value;
188
+ };
189
+ const resolveExpression = (expression) => {
190
+ const unwrapped = unwrapExpression(expression);
191
+ if (isSafeLiteral(unwrapped)) {
192
+ return unwrapped.value;
193
+ }
194
+ if (unwrapped.type === 'Identifier') {
195
+ return resolveName(unwrapped.name);
196
+ }
197
+ if (unwrapped.type === 'CallExpression') {
198
+ const callee = unwrapExpression(unwrapped.callee);
199
+ if (callee.type === 'Identifier' && unwrapped.arguments.length === 0) {
200
+ return resolveName(callee.name);
201
+ }
202
+ return unknownStaticWYWMetaValue;
203
+ }
204
+ if (unwrapped.type !== 'ObjectExpression') {
205
+ return unknownStaticWYWMetaValue;
206
+ }
207
+ const value = {};
208
+ for (const property of unwrapped.properties) {
209
+ if (property.type === 'SpreadElement') {
210
+ return unknownStaticWYWMetaValue;
211
+ }
212
+ const propertyNode = property;
213
+ if (propertyNode.computed) {
214
+ return unknownStaticWYWMetaValue;
215
+ }
216
+ const propertyKey = propertyNode.key;
217
+ const key = propertyKey ? objectPropertyKeyName(propertyKey) : null;
218
+ const propertyValue = propertyNode.value;
219
+ if (key === null || !propertyValue) {
220
+ return unknownStaticWYWMetaValue;
221
+ }
222
+ const resolved = resolveExpression(propertyValue);
223
+ if (resolved === unknownStaticWYWMetaValue) {
224
+ return unknownStaticWYWMetaValue;
225
+ }
226
+ value[key] = resolved;
227
+ }
228
+ return value;
229
+ };
230
+ const result = new Map();
231
+ declarations.forEach((_expression, name) => {
232
+ if (!GENERATED_HELPER_NAME_RE.test(name)) {
233
+ return;
234
+ }
235
+ const value = resolveName(name);
236
+ if (value !== unknownStaticWYWMetaValue &&
237
+ (value === null || isStaticWYWMetaValue(value))) {
238
+ result.set(name, value);
239
+ }
240
+ });
241
+ return result;
242
+ };
243
+ };
244
+ export const staticWYWMetaTreeValueStatus = (value, seen = new Set()) => {
245
+ if (value === null ||
246
+ typeof value === 'string' ||
247
+ typeof value === 'number' ||
248
+ typeof value === 'boolean') {
249
+ return {
250
+ hasMetadata: false,
251
+ safe: true,
252
+ };
253
+ }
254
+ if (typeof value !== 'object') {
255
+ return {
256
+ hasMetadata: false,
257
+ safe: false,
258
+ };
259
+ }
260
+ if (seen.has(value)) {
261
+ return {
262
+ hasMetadata: false,
263
+ safe: false,
264
+ };
265
+ }
266
+ seen.add(value);
267
+ if (Array.isArray(value)) {
268
+ let hasMetadata = false;
269
+ for (const item of value) {
270
+ const status = staticWYWMetaTreeValueStatus(item, seen);
271
+ if (!status.safe) {
272
+ return {
273
+ hasMetadata: false,
274
+ safe: false,
275
+ };
276
+ }
277
+ hasMetadata = hasMetadata || status.hasMetadata;
278
+ }
279
+ return {
280
+ hasMetadata,
281
+ safe: true,
282
+ };
283
+ }
284
+ if ('__wyw_meta' in value) {
285
+ return {
286
+ hasMetadata: isStaticWYWMetaValue(value),
287
+ safe: isStaticWYWMetaValue(value),
288
+ };
289
+ }
290
+ let hasMetadata = false;
291
+ for (const item of Object.values(value)) {
292
+ const status = staticWYWMetaTreeValueStatus(item, seen);
293
+ if (!status.safe) {
294
+ return {
295
+ hasMetadata: false,
296
+ safe: false,
297
+ };
298
+ }
299
+ hasMetadata = hasMetadata || status.hasMetadata;
300
+ }
301
+ return {
302
+ hasMetadata,
303
+ safe: true,
304
+ };
305
+ };
306
+ export const isStaticWYWMetaTreeValue = (value) => {
307
+ const status = staticWYWMetaTreeValueStatus(value);
308
+ return status.safe && status.hasMetadata;
309
+ };
310
+ export const processorClassNameRuntimeValue = (processor) => resolveProcessorStaticClassName(processor) ?? processor.className;
311
+ export const isProcessorRuntimeClassName = (processor, value) => processor.className === value ||
312
+ resolveProcessorStaticClassName(processor) === value;
313
+ export const isPlainObjectRecord = (value) => typeof value === 'object' &&
314
+ value !== null &&
315
+ !Array.isArray(value) &&
316
+ Object.getPrototypeOf(value) === Object.prototype;
317
+ export const isStaticObjectAssignAliasValue = (value) => isStaticWYWMetaValue(value) || isStaticWYWMetaTreeValue(value);
318
+ export const artifactCssText = (artifact) => {
319
+ if (!Array.isArray(artifact) || artifact[0] !== 'css') {
320
+ return null;
321
+ }
322
+ const payload = artifact[1];
323
+ if (Array.isArray(payload)) {
324
+ const [rules] = payload;
325
+ if (typeof rules === 'object' && rules !== null) {
326
+ return Object.values(rules)
327
+ .map((rule) => typeof rule === 'object' &&
328
+ rule !== null &&
329
+ 'cssText' in rule &&
330
+ typeof rule.cssText === 'string'
331
+ ? rule.cssText
332
+ : '')
333
+ .join('');
334
+ }
335
+ }
336
+ if (typeof payload === 'object' &&
337
+ payload !== null &&
338
+ 'cssText' in payload &&
339
+ typeof payload.cssText === 'string') {
340
+ return payload.cssText;
341
+ }
342
+ return null;
343
+ };
344
+ export const isEmptyProcessorClassName = (value, processors, cache) => {
345
+ if (cache.has(value)) {
346
+ return cache.get(value);
347
+ }
348
+ const processor = processors.find((item) => isProcessorRuntimeClassName(item, value));
349
+ if (!processor) {
350
+ cache.set(value, false);
351
+ return false;
352
+ }
353
+ if (processor.artifacts.length === 0) {
354
+ try {
355
+ processor.build(new Map());
356
+ }
357
+ catch {
358
+ cache.set(value, false);
359
+ return false;
360
+ }
361
+ }
362
+ const result = processor.artifacts.every((artifact) => {
363
+ const cssText = artifactCssText(artifact);
364
+ return cssText !== null && cssText.trim() === '';
365
+ });
366
+ cache.set(value, result);
367
+ return result;
368
+ };
369
+ export const isProcessorClassName = (value, processors, cache) => {
370
+ if (cache.has(value)) {
371
+ return cache.get(value);
372
+ }
373
+ const processor = processors.find((item) => isProcessorRuntimeClassName(item, value));
374
+ if (!processor) {
375
+ cache.set(value, false);
376
+ return false;
377
+ }
378
+ if (processor.artifacts.length === 0) {
379
+ try {
380
+ processor.build(new Map());
381
+ }
382
+ catch {
383
+ cache.set(value, false);
384
+ return false;
385
+ }
386
+ }
387
+ const result = processor.artifacts.every((artifact) => artifactCssText(artifact) !== null);
388
+ cache.set(value, result);
389
+ return result;
390
+ };
391
+ export const isKnownProcessorClassName = (value, processorClassNames) => processorClassNames.has(value);
392
+ export const isSelectorOnlyProcessorValue = (value, processors, cache, seen = new Set()) => {
393
+ if (typeof value === 'string') {
394
+ return isEmptyProcessorClassName(value, processors, cache);
395
+ }
396
+ if (Array.isArray(value)) {
397
+ if (seen.has(value)) {
398
+ return false;
399
+ }
400
+ seen.add(value);
401
+ return value.every((item) => isSelectorOnlyProcessorValue(item, processors, cache, seen));
402
+ }
403
+ if (typeof value === 'object' && value !== null) {
404
+ if (seen.has(value)) {
405
+ return false;
406
+ }
407
+ seen.add(value);
408
+ return Object.values(value).every((item) => isSelectorOnlyProcessorValue(item, processors, cache, seen));
409
+ }
410
+ return false;
411
+ };
412
+ export const isProcessorClassValue = (value, processors, cache, seen = new Set()) => {
413
+ if (typeof value === 'string') {
414
+ return isProcessorClassName(value, processors, cache);
415
+ }
416
+ if (Array.isArray(value)) {
417
+ if (seen.has(value)) {
418
+ return false;
419
+ }
420
+ seen.add(value);
421
+ return value.every((item) => isProcessorClassValue(item, processors, cache, seen));
422
+ }
423
+ if (typeof value === 'object' && value !== null) {
424
+ if (seen.has(value)) {
425
+ return false;
426
+ }
427
+ seen.add(value);
428
+ return Object.values(value).every((item) => isProcessorClassValue(item, processors, cache, seen));
429
+ }
430
+ return false;
431
+ };
432
+ export const isKnownProcessorClassValue = (value, processorClassNames, seen = new Set()) => {
433
+ if (typeof value === 'string') {
434
+ return isKnownProcessorClassName(value, processorClassNames);
435
+ }
436
+ if (Array.isArray(value)) {
437
+ if (seen.has(value)) {
438
+ return false;
439
+ }
440
+ seen.add(value);
441
+ return value.every((item) => isKnownProcessorClassValue(item, processorClassNames, seen));
442
+ }
443
+ if (typeof value === 'object' && value !== null) {
444
+ if (seen.has(value)) {
445
+ return false;
446
+ }
447
+ seen.add(value);
448
+ return Object.values(value).every((item) => isKnownProcessorClassValue(item, processorClassNames, seen));
449
+ }
450
+ return false;
451
+ };
452
+ export const findWYWMetaExtendsExpression = (expr) => {
453
+ const meta = findObjectPropertyValue(expr, '__wyw_meta');
454
+ if (!meta) {
455
+ return null;
456
+ }
457
+ return findObjectPropertyValue(meta, 'extends');
458
+ };
459
+ export const collectWYWMetaExtendsExpressionsDeep = (program, expr) => {
460
+ const result = [];
461
+ const seenLocals = new Set();
462
+ const seenRanges = new Set();
463
+ const visit = (node, parent = null) => {
464
+ const parentRecord = parent;
465
+ if (parentRecord &&
466
+ parentRecord.type === 'Property' &&
467
+ parentRecord.key === node &&
468
+ !parentRecord.computed) {
469
+ return;
470
+ }
471
+ if (node.type === 'ObjectExpression') {
472
+ const extendsExpression = findWYWMetaExtendsExpression(node);
473
+ if (extendsExpression) {
474
+ const key = `${extendsExpression.start}:${extendsExpression.end}`;
475
+ if (!seenRanges.has(key)) {
476
+ seenRanges.add(key);
477
+ result.push(extendsExpression);
478
+ }
479
+ }
480
+ }
481
+ if (node.type === 'Identifier') {
482
+ const local = findTopLevelConstExpression(program, node.name);
483
+ if (local && !seenLocals.has(node.name)) {
484
+ seenLocals.add(node.name);
485
+ visit(local);
486
+ }
487
+ return;
488
+ }
489
+ getOxcNodeChildren(node).forEach((child) => visit(child, node));
490
+ };
491
+ visit(expr);
492
+ return result;
493
+ };
494
+ export const isStaticMetaObjectExpression = (expr) => {
495
+ const meta = findObjectPropertyValue(expr, '__wyw_meta');
496
+ return !!meta && findObjectPropertyValue(meta, 'className') !== null;
497
+ };
498
+ export const collectWYWMetaExtendsHelperNames = (program) => {
499
+ const result = new Set();
500
+ const visit = (node) => {
501
+ if (node.type === 'ObjectExpression') {
502
+ const extendsExpression = findWYWMetaExtendsExpression(node);
503
+ const unwrapped = extendsExpression
504
+ ? unwrapExpression(extendsExpression)
505
+ : null;
506
+ if (unwrapped?.type === 'CallExpression' &&
507
+ unwrapped.callee.type === 'Identifier' &&
508
+ unwrapped.arguments.length === 0) {
509
+ result.add(unwrapped.callee.name);
510
+ }
511
+ }
512
+ getOxcNodeChildren(node).forEach(visit);
513
+ };
514
+ visit(program);
515
+ return result;
516
+ };
@@ -0,0 +1,5 @@
1
+ import type { Program } from 'oxc-parser';
2
+ import type { ExportTarget, PreparedProcessorTarget } from './types';
3
+ export declare const prepareProcessorTarget: (code: string, filename: string, program: Program, target: Extract<ExportTarget, {
4
+ kind: "expression";
5
+ }>, exportedName: string, opaqueImportNames?: Set<string>) => PreparedProcessorTarget | null;
@@ -0,0 +1,62 @@
1
+ /* eslint-disable no-restricted-syntax,no-continue,@typescript-eslint/no-use-before-define */
2
+ import { applyOxcReplacements } from '../../../utils/oxc/replacements';
3
+ import { parseProgram } from './environment';
4
+ import { findExportTarget } from './exportTargets';
5
+ import { collectWYWMetaExtendsExpressionsDeep } from './processorStaticModel';
6
+ import { hasOnlySafeObjectAssignCallArgumentUses, resolveObjectAssignProcessorExpression, } from './objectAssign';
7
+ import { isOpaqueRuntimeComponentExpression } from './opaqueRuntime';
8
+ import { collectStaticExpressionDependencies } from './staticExpressionDependencies';
9
+ export const prepareProcessorTarget = (code, filename, program, target, exportedName, opaqueImportNames = new Set()) => {
10
+ const ignoredMutableCallArgumentNames = target.localName &&
11
+ hasOnlySafeObjectAssignCallArgumentUses(program, target.localName)
12
+ ? new Set([target.localName])
13
+ : undefined;
14
+ const dependencyOptions = {
15
+ allowMetadataCalls: true,
16
+ ignoredMutableCallArgumentNames,
17
+ };
18
+ const expression = resolveObjectAssignProcessorExpression(program, target.expression);
19
+ const extendsExpressions = collectWYWMetaExtendsExpressionsDeep(program, expression);
20
+ const opaqueExtendsExpressions = extendsExpressions.filter((extendsExpression) => isOpaqueRuntimeComponentExpression(program, extendsExpression, opaqueImportNames));
21
+ if (opaqueExtendsExpressions.length > 0) {
22
+ const replacements = opaqueExtendsExpressions.map((extendsExpression) => ({
23
+ end: extendsExpression.end,
24
+ start: extendsExpression.start,
25
+ text: 'null',
26
+ }));
27
+ const evaluationCode = applyOxcReplacements(code, replacements);
28
+ const evaluationProgram = parseProgram(evaluationCode, filename);
29
+ const evaluationTarget = findExportTarget(evaluationProgram, exportedName);
30
+ if (!evaluationTarget || evaluationTarget.kind === 'import') {
31
+ return null;
32
+ }
33
+ const evaluationExpression = resolveObjectAssignProcessorExpression(evaluationProgram, evaluationTarget.expression);
34
+ const dependencies = collectStaticExpressionDependencies(evaluationProgram, {
35
+ ...evaluationTarget,
36
+ expression: evaluationExpression,
37
+ }, dependencyOptions);
38
+ return dependencies
39
+ ? {
40
+ dependencies,
41
+ evaluationCode,
42
+ evaluationSpan: {
43
+ end: evaluationExpression.end,
44
+ start: evaluationExpression.start,
45
+ },
46
+ expression: evaluationExpression,
47
+ opaqueRuntimeBase: true,
48
+ }
49
+ : null;
50
+ }
51
+ const dependencies = collectStaticExpressionDependencies(program, {
52
+ ...target,
53
+ expression,
54
+ }, dependencyOptions);
55
+ return dependencies
56
+ ? {
57
+ dependencies,
58
+ expression,
59
+ opaqueRuntimeBase: false,
60
+ }
61
+ : null;
62
+ };
@@ -0,0 +1,11 @@
1
+ import type { Expression, Node, Program } from 'oxc-parser';
2
+ export declare const collectLocalConstExpressions: (program: Program) => Map<string, Expression>;
3
+ export declare const objectPropertyKeyName: (node: Node) => string | null;
4
+ export declare const findObjectPropertyValue: (expr: Node, name: string) => Expression | null;
5
+ export declare const topLevelStatements: (program: Program) => Node[];
6
+ export declare const findTopLevelConstExpression: (program: Program, name: string) => Expression | null;
7
+ export declare const hasTopLevelBinding: (program: Program, name: string) => boolean;
8
+ export declare const isTopLevelFunctionOrClass: (program: Program, name: string) => boolean;
9
+ export declare const functionReturnExpression: (expr: Node, options?: {
10
+ allowParams?: boolean;
11
+ }) => Expression | null;