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

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 (279) 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/collect.js +1 -0
  14. package/esm/transform/generators/collect.js.map +1 -1
  15. package/esm/transform/generators/processEntrypoint.js +35 -20
  16. package/esm/transform/generators/processEntrypoint.js.map +1 -1
  17. package/esm/transform/generators/resolveImports.js +48 -2
  18. package/esm/transform/generators/resolveImports.js.map +1 -1
  19. package/esm/transform/generators/resolveStaticOxcValues/cache.js +182 -0
  20. package/esm/transform/generators/resolveStaticOxcValues/cache.js.map +1 -0
  21. package/esm/transform/generators/resolveStaticOxcValues/candidateResolver.js +146 -0
  22. package/esm/transform/generators/resolveStaticOxcValues/candidateResolver.js.map +1 -0
  23. package/esm/transform/generators/resolveStaticOxcValues/dependencies.js +33 -0
  24. package/esm/transform/generators/resolveStaticOxcValues/dependencies.js.map +1 -0
  25. package/esm/transform/generators/resolveStaticOxcValues/environment.js +29 -0
  26. package/esm/transform/generators/resolveStaticOxcValues/environment.js.map +1 -0
  27. package/esm/transform/generators/resolveStaticOxcValues/exportResolver.js +351 -0
  28. package/esm/transform/generators/resolveStaticOxcValues/exportResolver.js.map +1 -0
  29. package/esm/transform/generators/resolveStaticOxcValues/exportTargets.js +253 -0
  30. package/esm/transform/generators/resolveStaticOxcValues/exportTargets.js.map +1 -0
  31. package/esm/transform/generators/resolveStaticOxcValues/objectAssign.js +310 -0
  32. package/esm/transform/generators/resolveStaticOxcValues/objectAssign.js.map +1 -0
  33. package/esm/transform/generators/resolveStaticOxcValues/objectAssignStaticExport.js +74 -0
  34. package/esm/transform/generators/resolveStaticOxcValues/objectAssignStaticExport.js.map +1 -0
  35. package/esm/transform/generators/resolveStaticOxcValues/opaqueRuntime.js +229 -0
  36. package/esm/transform/generators/resolveStaticOxcValues/opaqueRuntime.js.map +1 -0
  37. package/esm/transform/generators/resolveStaticOxcValues/processorStaticExport.js +172 -0
  38. package/esm/transform/generators/resolveStaticOxcValues/processorStaticExport.js.map +1 -0
  39. package/esm/transform/generators/resolveStaticOxcValues/processorStaticModel.js +476 -0
  40. package/esm/transform/generators/resolveStaticOxcValues/processorStaticModel.js.map +1 -0
  41. package/esm/transform/generators/resolveStaticOxcValues/processorTarget.js +55 -0
  42. package/esm/transform/generators/resolveStaticOxcValues/processorTarget.js.map +1 -0
  43. package/esm/transform/generators/resolveStaticOxcValues/programAnalysis.js +123 -0
  44. package/esm/transform/generators/resolveStaticOxcValues/programAnalysis.js.map +1 -0
  45. package/esm/transform/generators/resolveStaticOxcValues/prune.js +272 -0
  46. package/esm/transform/generators/resolveStaticOxcValues/prune.js.map +1 -0
  47. package/esm/transform/generators/resolveStaticOxcValues/resolveStaticOxcPreevalValues.js +184 -0
  48. package/esm/transform/generators/resolveStaticOxcValues/resolveStaticOxcPreevalValues.js.map +1 -0
  49. package/esm/transform/generators/resolveStaticOxcValues/staticExpression.js +298 -0
  50. package/esm/transform/generators/resolveStaticOxcValues/staticExpression.js.map +1 -0
  51. package/esm/transform/generators/resolveStaticOxcValues/staticExpressionDependencies.js +298 -0
  52. package/esm/transform/generators/resolveStaticOxcValues/staticExpressionDependencies.js.map +1 -0
  53. package/esm/transform/generators/resolveStaticOxcValues/types.js +3 -0
  54. package/esm/transform/generators/resolveStaticOxcValues/types.js.map +1 -0
  55. package/esm/transform/generators/resolveStaticOxcValues/zeroArgFunctionStaticExport.js +59 -0
  56. package/esm/transform/generators/resolveStaticOxcValues/zeroArgFunctionStaticExport.js.map +1 -0
  57. package/esm/transform/generators/resolveStaticOxcValues.js +1 -2910
  58. package/esm/transform/generators/resolveStaticOxcValues.js.map +1 -1
  59. package/esm/transform/generators/transform.js +58 -45
  60. package/esm/transform/generators/transform.js.map +1 -1
  61. package/esm/transform/helpers/loadWywOptions.js +33 -4
  62. package/esm/transform/helpers/loadWywOptions.js.map +1 -1
  63. package/esm/transform.js +3 -1
  64. package/esm/transform.js.map +1 -1
  65. package/esm/utils/EventEmitter.js +55 -9
  66. package/esm/utils/EventEmitter.js.map +1 -1
  67. package/esm/utils/applyOxcProcessors/applyOxcProcessors.js +160 -0
  68. package/esm/utils/applyOxcProcessors/applyOxcProcessors.js.map +1 -0
  69. package/esm/utils/applyOxcProcessors/cleanupBindings.js +157 -0
  70. package/esm/utils/applyOxcProcessors/cleanupBindings.js.map +1 -0
  71. package/esm/utils/applyOxcProcessors/cleanupRemovals.js +517 -0
  72. package/esm/utils/applyOxcProcessors/cleanupRemovals.js.map +1 -0
  73. package/esm/utils/applyOxcProcessors/displayName.js +93 -0
  74. package/esm/utils/applyOxcProcessors/displayName.js.map +1 -0
  75. package/esm/utils/applyOxcProcessors/expressionValues.js +152 -0
  76. package/esm/utils/applyOxcProcessors/expressionValues.js.map +1 -0
  77. package/esm/utils/applyOxcProcessors/processorFactory.js +62 -0
  78. package/esm/utils/applyOxcProcessors/processorFactory.js.map +1 -0
  79. package/esm/utils/applyOxcProcessors/processorUsages.js +143 -0
  80. package/esm/utils/applyOxcProcessors/processorUsages.js.map +1 -0
  81. package/esm/utils/applyOxcProcessors/sameFileStaticValues.js +207 -0
  82. package/esm/utils/applyOxcProcessors/sameFileStaticValues.js.map +1 -0
  83. package/esm/utils/applyOxcProcessors/shared.js +29 -0
  84. package/esm/utils/applyOxcProcessors/shared.js.map +1 -0
  85. package/esm/utils/applyOxcProcessors/types.js +2 -0
  86. package/esm/utils/applyOxcProcessors/types.js.map +1 -0
  87. package/esm/utils/applyOxcProcessors.js +1 -1216
  88. package/esm/utils/applyOxcProcessors.js.map +1 -1
  89. package/esm/utils/collectOxcExportsAndImports.js +8 -0
  90. package/esm/utils/collectOxcExportsAndImports.js.map +1 -1
  91. package/esm/utils/collectOxcRuntime/normalizeRuntimeCode.js +157 -0
  92. package/esm/utils/collectOxcRuntime/normalizeRuntimeCode.js.map +1 -0
  93. package/esm/utils/collectOxcRuntime/sourceMap.js +36 -0
  94. package/esm/utils/collectOxcRuntime/sourceMap.js.map +1 -0
  95. package/esm/utils/collectOxcRuntime/types.js +2 -0
  96. package/esm/utils/collectOxcRuntime/types.js.map +1 -0
  97. package/esm/utils/collectOxcRuntime.js +5 -193
  98. package/esm/utils/collectOxcRuntime.js.map +1 -1
  99. package/esm/utils/collectOxcTemplateDependencies/expressionExtraction.js +496 -0
  100. package/esm/utils/collectOxcTemplateDependencies/expressionExtraction.js.map +1 -0
  101. package/esm/utils/collectOxcTemplateDependencies/expressionReplacements.js +113 -0
  102. package/esm/utils/collectOxcTemplateDependencies/expressionReplacements.js.map +1 -0
  103. package/esm/utils/collectOxcTemplateDependencies/scopeAnalysis.js +387 -0
  104. package/esm/utils/collectOxcTemplateDependencies/scopeAnalysis.js.map +1 -0
  105. package/esm/utils/collectOxcTemplateDependencies/staticBindings.js +17 -0
  106. package/esm/utils/collectOxcTemplateDependencies/staticBindings.js.map +1 -0
  107. package/esm/utils/collectOxcTemplateDependencies/staticEvaluator.js +540 -0
  108. package/esm/utils/collectOxcTemplateDependencies/staticEvaluator.js.map +1 -0
  109. package/esm/utils/collectOxcTemplateDependencies/types.js +2 -0
  110. package/esm/utils/collectOxcTemplateDependencies/types.js.map +1 -0
  111. package/esm/utils/collectOxcTemplateDependencies.js +3 -1397
  112. package/esm/utils/collectOxcTemplateDependencies.js.map +1 -1
  113. package/esm/utils/nativeResolver.js +93 -0
  114. package/esm/utils/nativeResolver.js.map +1 -0
  115. package/esm/utils/oxc/ast.js +58 -0
  116. package/esm/utils/oxc/ast.js.map +1 -0
  117. package/esm/utils/oxc/parse.js +3 -0
  118. package/esm/utils/oxc/parse.js.map +1 -0
  119. package/esm/utils/oxc/replacements.js +14 -0
  120. package/esm/utils/oxc/replacements.js.map +1 -0
  121. package/esm/utils/oxc/sourceLocations.js +59 -0
  122. package/esm/utils/oxc/sourceLocations.js.map +1 -0
  123. package/esm/utils/oxcPreevalStage/evalStrategy.js +3 -0
  124. package/esm/utils/oxcPreevalStage/evalStrategy.js.map +1 -0
  125. package/esm/utils/oxcPreevalStage/prepareCode.js +21 -0
  126. package/esm/utils/oxcPreevalStage/prepareCode.js.map +1 -0
  127. package/esm/utils/oxcPreevalStage/prevalExport.js +23 -0
  128. package/esm/utils/oxcPreevalStage/prevalExport.js.map +1 -0
  129. package/esm/utils/oxcPreevalStage/processors.js +17 -0
  130. package/esm/utils/oxcPreevalStage/processors.js.map +1 -0
  131. package/esm/utils/oxcPreevalStage/staticOverlay.js +18 -0
  132. package/esm/utils/oxcPreevalStage/staticOverlay.js.map +1 -0
  133. package/esm/utils/oxcPreevalStage/types.js +2 -0
  134. package/esm/utils/oxcPreevalStage/types.js.map +1 -0
  135. package/esm/utils/oxcPreevalStage.js +17 -73
  136. package/esm/utils/oxcPreevalStage.js.map +1 -1
  137. package/esm/utils/oxcPreevalTransforms.js +106 -66
  138. package/esm/utils/oxcPreevalTransforms.js.map +1 -1
  139. package/esm/utils/parseOxc.js +6 -1
  140. package/esm/utils/parseOxc.js.map +1 -1
  141. package/esm/utils/processorStaticSemantics.js +157 -0
  142. package/esm/utils/processorStaticSemantics.js.map +1 -0
  143. package/esm/utils/resolveWithConditions.js +3 -3
  144. package/esm/utils/resolveWithConditions.js.map +1 -1
  145. package/package.json +6 -5
  146. package/types/cache.js +8 -0
  147. package/types/debug/fileReporter.js +46 -1
  148. package/types/eval/broker.d.ts +6 -2
  149. package/types/eval/broker.js +244 -95
  150. package/types/eval/protocol.d.ts +15 -1
  151. package/types/module.d.ts +4 -1
  152. package/types/module.js +97 -48
  153. package/types/transform/Entrypoint.types.d.ts +4 -0
  154. package/types/transform/generators/collect.js +1 -0
  155. package/types/transform/generators/resolveImports.d.ts +3 -1
  156. package/types/transform/generators/resolveImports.js +49 -2
  157. package/types/transform/generators/resolveStaticOxcValues/cache.d.ts +25 -0
  158. package/types/transform/generators/resolveStaticOxcValues/cache.js +182 -0
  159. package/types/transform/generators/resolveStaticOxcValues/candidateResolver.d.ts +5 -0
  160. package/types/transform/generators/resolveStaticOxcValues/candidateResolver.js +149 -0
  161. package/types/transform/generators/resolveStaticOxcValues/dependencies.d.ts +6 -0
  162. package/types/transform/generators/resolveStaticOxcValues/dependencies.js +37 -0
  163. package/types/transform/generators/resolveStaticOxcValues/environment.d.ts +12 -0
  164. package/types/transform/generators/resolveStaticOxcValues/environment.js +32 -0
  165. package/types/transform/generators/resolveStaticOxcValues/exportResolver.d.ts +4 -0
  166. package/types/transform/generators/resolveStaticOxcValues/exportResolver.js +358 -0
  167. package/types/transform/generators/resolveStaticOxcValues/exportTargets.d.ts +20 -0
  168. package/types/transform/generators/resolveStaticOxcValues/exportTargets.js +285 -0
  169. package/types/transform/generators/resolveStaticOxcValues/objectAssign.d.ts +41 -0
  170. package/types/transform/generators/resolveStaticOxcValues/objectAssign.js +352 -0
  171. package/types/transform/generators/resolveStaticOxcValues/objectAssignStaticExport.d.ts +6 -0
  172. package/types/transform/generators/resolveStaticOxcValues/objectAssignStaticExport.js +88 -0
  173. package/types/transform/generators/resolveStaticOxcValues/opaqueRuntime.d.ts +13 -0
  174. package/types/transform/generators/resolveStaticOxcValues/opaqueRuntime.js +263 -0
  175. package/types/transform/generators/resolveStaticOxcValues/processorStaticExport.d.ts +4 -0
  176. package/types/transform/generators/resolveStaticOxcValues/processorStaticExport.js +191 -0
  177. package/types/transform/generators/resolveStaticOxcValues/processorStaticModel.d.ts +40 -0
  178. package/types/transform/generators/resolveStaticOxcValues/processorStaticModel.js +516 -0
  179. package/types/transform/generators/resolveStaticOxcValues/processorTarget.d.ts +5 -0
  180. package/types/transform/generators/resolveStaticOxcValues/processorTarget.js +62 -0
  181. package/types/transform/generators/resolveStaticOxcValues/programAnalysis.d.ts +11 -0
  182. package/types/transform/generators/resolveStaticOxcValues/programAnalysis.js +133 -0
  183. package/types/transform/generators/resolveStaticOxcValues/prune.d.ts +15 -0
  184. package/types/transform/generators/resolveStaticOxcValues/prune.js +312 -0
  185. package/types/transform/generators/resolveStaticOxcValues/resolveStaticOxcPreevalValues.d.ts +2 -0
  186. package/types/transform/generators/resolveStaticOxcValues/resolveStaticOxcPreevalValues.js +198 -0
  187. package/types/transform/generators/resolveStaticOxcValues/staticExpression.d.ts +25 -0
  188. package/types/transform/generators/resolveStaticOxcValues/staticExpression.js +391 -0
  189. package/types/transform/generators/resolveStaticOxcValues/staticExpressionDependencies.d.ts +14 -0
  190. package/types/transform/generators/resolveStaticOxcValues/staticExpressionDependencies.js +304 -0
  191. package/types/transform/generators/resolveStaticOxcValues/types.d.ts +99 -0
  192. package/types/transform/generators/resolveStaticOxcValues/types.js +2 -0
  193. package/types/transform/generators/resolveStaticOxcValues/zeroArgFunctionStaticExport.d.ts +7 -0
  194. package/types/transform/generators/resolveStaticOxcValues/zeroArgFunctionStaticExport.js +64 -0
  195. package/types/transform/generators/resolveStaticOxcValues.d.ts +1 -2
  196. package/types/transform/generators/resolveStaticOxcValues.js +1 -3235
  197. package/types/transform/generators/transform.js +64 -49
  198. package/types/transform/helpers/loadWywOptions.js +23 -3
  199. package/types/transform.js +3 -1
  200. package/types/utils/EventEmitter.d.ts +16 -1
  201. package/types/utils/EventEmitter.js +57 -9
  202. package/types/utils/applyOxcProcessors/applyOxcProcessors.d.ts +9 -0
  203. package/types/utils/applyOxcProcessors/applyOxcProcessors.js +169 -0
  204. package/types/utils/applyOxcProcessors/cleanupBindings.d.ts +12 -0
  205. package/types/utils/applyOxcProcessors/cleanupBindings.js +189 -0
  206. package/types/utils/applyOxcProcessors/cleanupRemovals.d.ts +16 -0
  207. package/types/utils/applyOxcProcessors/cleanupRemovals.js +567 -0
  208. package/types/utils/applyOxcProcessors/displayName.d.ts +9 -0
  209. package/types/utils/applyOxcProcessors/displayName.js +113 -0
  210. package/types/utils/applyOxcProcessors/expressionValues.d.ts +11 -0
  211. package/types/utils/applyOxcProcessors/expressionValues.js +170 -0
  212. package/types/utils/applyOxcProcessors/processorFactory.d.ts +7 -0
  213. package/types/utils/applyOxcProcessors/processorFactory.js +70 -0
  214. package/types/utils/applyOxcProcessors/processorUsages.d.ts +16 -0
  215. package/types/utils/applyOxcProcessors/processorUsages.js +163 -0
  216. package/types/utils/applyOxcProcessors/sameFileStaticValues.d.ts +23 -0
  217. package/types/utils/applyOxcProcessors/sameFileStaticValues.js +211 -0
  218. package/types/utils/applyOxcProcessors/shared.d.ts +10 -0
  219. package/types/utils/applyOxcProcessors/shared.js +37 -0
  220. package/types/utils/applyOxcProcessors/types.d.ts +88 -0
  221. package/types/utils/applyOxcProcessors/types.js +1 -0
  222. package/types/utils/applyOxcProcessors.d.ts +1 -16
  223. package/types/utils/applyOxcProcessors.js +1 -1391
  224. package/types/utils/collectOxcExportsAndImports.js +8 -0
  225. package/types/utils/collectOxcRuntime/normalizeRuntimeCode.d.ts +1 -0
  226. package/types/utils/collectOxcRuntime/normalizeRuntimeCode.js +185 -0
  227. package/types/utils/collectOxcRuntime/sourceMap.d.ts +2 -0
  228. package/types/utils/collectOxcRuntime/sourceMap.js +37 -0
  229. package/types/utils/collectOxcRuntime/types.d.ts +17 -0
  230. package/types/utils/collectOxcRuntime/types.js +1 -0
  231. package/types/utils/collectOxcRuntime.d.ts +2 -12
  232. package/types/utils/collectOxcRuntime.js +5 -224
  233. package/types/utils/collectOxcTemplateDependencies/expressionExtraction.d.ts +6 -0
  234. package/types/utils/collectOxcTemplateDependencies/expressionExtraction.js +550 -0
  235. package/types/utils/collectOxcTemplateDependencies/expressionReplacements.d.ts +11 -0
  236. package/types/utils/collectOxcTemplateDependencies/expressionReplacements.js +131 -0
  237. package/types/utils/collectOxcTemplateDependencies/scopeAnalysis.d.ts +20 -0
  238. package/types/utils/collectOxcTemplateDependencies/scopeAnalysis.js +434 -0
  239. package/types/utils/collectOxcTemplateDependencies/staticBindings.d.ts +7 -0
  240. package/types/utils/collectOxcTemplateDependencies/staticBindings.js +13 -0
  241. package/types/utils/collectOxcTemplateDependencies/staticEvaluator.d.ts +13 -0
  242. package/types/utils/collectOxcTemplateDependencies/staticEvaluator.js +626 -0
  243. package/types/utils/collectOxcTemplateDependencies/types.d.ts +116 -0
  244. package/types/utils/collectOxcTemplateDependencies/types.js +1 -0
  245. package/types/utils/collectOxcTemplateDependencies.d.ts +4 -38
  246. package/types/utils/collectOxcTemplateDependencies.js +3 -1580
  247. package/types/utils/nativeResolver.d.ts +13 -0
  248. package/types/utils/nativeResolver.js +91 -0
  249. package/types/utils/oxc/ast.d.ts +4 -0
  250. package/types/utils/oxc/ast.js +61 -0
  251. package/types/utils/oxc/parse.d.ts +3 -0
  252. package/types/utils/oxc/parse.js +2 -0
  253. package/types/utils/oxc/replacements.d.ts +12 -0
  254. package/types/utils/oxc/replacements.js +18 -0
  255. package/types/utils/oxc/sourceLocations.d.ts +5 -0
  256. package/types/utils/oxc/sourceLocations.js +63 -0
  257. package/types/utils/oxcPreevalStage/evalStrategy.d.ts +3 -0
  258. package/types/utils/oxcPreevalStage/evalStrategy.js +2 -0
  259. package/types/utils/oxcPreevalStage/prepareCode.d.ts +3 -0
  260. package/types/utils/oxcPreevalStage/prepareCode.js +20 -0
  261. package/types/utils/oxcPreevalStage/prevalExport.d.ts +1 -0
  262. package/types/utils/oxcPreevalStage/prevalExport.js +22 -0
  263. package/types/utils/oxcPreevalStage/processors.d.ts +10 -0
  264. package/types/utils/oxcPreevalStage/processors.js +16 -0
  265. package/types/utils/oxcPreevalStage/staticOverlay.d.ts +3 -0
  266. package/types/utils/oxcPreevalStage/staticOverlay.js +23 -0
  267. package/types/utils/oxcPreevalStage/types.d.ts +22 -0
  268. package/types/utils/oxcPreevalStage/types.js +1 -0
  269. package/types/utils/oxcPreevalStage.d.ts +2 -18
  270. package/types/utils/oxcPreevalStage.js +17 -79
  271. package/types/utils/oxcPreevalTransforms.js +111 -75
  272. package/types/utils/parseOxc.js +6 -1
  273. package/types/utils/processorStaticSemantics.d.ts +13 -0
  274. package/types/utils/processorStaticSemantics.js +191 -0
  275. package/types/utils/resolveWithConditions.js +3 -3
  276. package/esm/eval/resolverStrategy.js +0 -51
  277. package/esm/eval/resolverStrategy.js.map +0 -1
  278. package/types/eval/resolverStrategy.d.ts +0 -13
  279. package/types/eval/resolverStrategy.js +0 -46
@@ -0,0 +1,11 @@
1
+ import type { Param, Params, SourceLocation } from '@wyw-in-js/processor-utils';
2
+ import type { ExpressionValue } from '@wyw-in-js/shared';
3
+ import type { Expression, TaggedTemplateExpression } from 'oxc-parser';
4
+ import type { LocationLookup, ProcessorUsage } from './types';
5
+ export declare const literalExpressionValue: (expression: Expression, code: string, source: string, location: SourceLocation) => ExpressionValue | null;
6
+ export declare const expressionValue: (expression: Expression, code: string, loc: LocationLookup, filename?: string | null) => ExpressionValue;
7
+ export declare const withCurrentExpressionLocation: (value: ExpressionValue, expression: Expression, loc: LocationLookup, filename?: string | null) => ExpressionValue;
8
+ export declare const shiftExpressionValue: (expressionValues: ExpressionValue[], expression: Expression, code: string, loc: LocationLookup, filename?: string | null) => ExpressionValue;
9
+ export declare const zipTemplate: (template: TaggedTemplateExpression, code: string, loc: LocationLookup, filename: string | null | undefined, expressionValues: ExpressionValue[]) => Param;
10
+ export declare const buildCalleeParams: (node: Expression, code: string, loc: LocationLookup, filename: string | null | undefined, expressionValues: ExpressionValue[], collapseQualifiedCallee?: boolean) => Params | null;
11
+ export declare const buildParams: (usage: ProcessorUsage, code: string, loc: LocationLookup, filename: string | null | undefined, expressionValues: ExpressionValue[], collapseQualifiedCallee: boolean) => Params | null;
@@ -0,0 +1,170 @@
1
+ import { ValueType } from '@wyw-in-js/shared';
2
+ import { isNotNull } from '../isNotNull';
3
+ import { buildOxcCodeFrameError } from '../oxc/sourceLocations';
4
+ import { getMemberName, unwrapQualifiedExpression } from './processorUsages';
5
+ import { GENERATED_HELPER_NAME_RE, getSourceLocation } from './shared';
6
+ export const literalExpressionValue = (expression, code, source, location) => {
7
+ if (expression.type !== 'Literal') {
8
+ return null;
9
+ }
10
+ if (expression.value === null ||
11
+ typeof expression.value === 'string' ||
12
+ typeof expression.value === 'number' ||
13
+ typeof expression.value === 'boolean') {
14
+ let type;
15
+ if (expression.value === null) {
16
+ type = 'NullLiteral';
17
+ }
18
+ else if (typeof expression.value === 'string') {
19
+ type = 'StringLiteral';
20
+ }
21
+ else if (typeof expression.value === 'number') {
22
+ type = 'NumericLiteral';
23
+ }
24
+ else {
25
+ type = 'BooleanLiteral';
26
+ }
27
+ const ex = expression.value === null
28
+ ? { loc: location, type }
29
+ : {
30
+ loc: location,
31
+ type,
32
+ value: expression.value,
33
+ };
34
+ return {
35
+ buildCodeFrameError: (message) => buildOxcCodeFrameError(code, location, message),
36
+ ex,
37
+ kind: ValueType.CONST,
38
+ source,
39
+ value: expression.value,
40
+ };
41
+ }
42
+ return null;
43
+ };
44
+ export const expressionValue = (expression, code, loc, filename) => {
45
+ const source = code.slice(expression.start, expression.end);
46
+ const location = getSourceLocation(expression.start, expression.end, loc, filename);
47
+ const literal = literalExpressionValue(expression, code, source, location);
48
+ if (literal) {
49
+ return literal;
50
+ }
51
+ const helperCallName = expression.type === 'CallExpression' &&
52
+ expression.arguments.length === 0 &&
53
+ expression.callee.type === 'Identifier' &&
54
+ GENERATED_HELPER_NAME_RE.test(expression.callee.name)
55
+ ? expression.callee.name
56
+ : null;
57
+ let ex;
58
+ if (expression.type === 'Identifier') {
59
+ ex = { loc: location, name: expression.name, type: 'Identifier' };
60
+ }
61
+ else if (helperCallName) {
62
+ ex = { loc: location, name: helperCallName, type: 'Identifier' };
63
+ }
64
+ else {
65
+ ex = {
66
+ loc: location,
67
+ name: code.slice(expression.start, expression.end),
68
+ type: 'Identifier',
69
+ };
70
+ }
71
+ return {
72
+ buildCodeFrameError: (message) => buildOxcCodeFrameError(code, location, message),
73
+ ex,
74
+ kind: expression.type === 'ArrowFunctionExpression' ||
75
+ expression.type === 'FunctionExpression'
76
+ ? ValueType.FUNCTION
77
+ : ValueType.LAZY,
78
+ source,
79
+ };
80
+ };
81
+ export const withCurrentExpressionLocation = (value, expression, loc, filename) => {
82
+ const location = getSourceLocation(expression.start, expression.end, loc, filename);
83
+ if (value.kind === ValueType.CONST) {
84
+ return {
85
+ ...value,
86
+ ex: {
87
+ ...value.ex,
88
+ loc: location,
89
+ },
90
+ };
91
+ }
92
+ if (value.kind === ValueType.FUNCTION) {
93
+ return {
94
+ ...value,
95
+ ex: {
96
+ ...value.ex,
97
+ loc: location,
98
+ },
99
+ };
100
+ }
101
+ return {
102
+ ...value,
103
+ ex: {
104
+ ...value.ex,
105
+ loc: location,
106
+ },
107
+ };
108
+ };
109
+ export const shiftExpressionValue = (expressionValues, expression, code, loc, filename) => expressionValues.length > 0
110
+ ? withCurrentExpressionLocation(expressionValues.shift(), expression, loc, filename)
111
+ : expressionValue(expression, code, loc, filename);
112
+ export const zipTemplate = (template, code, loc, filename, expressionValues) => {
113
+ const parts = template.quasi.quasis.flatMap((quasi, idx) => {
114
+ const expression = template.quasi.expressions[idx];
115
+ const templateElement = {
116
+ ...quasi,
117
+ loc: getSourceLocation(quasi.start, quasi.end, loc, filename),
118
+ };
119
+ return [
120
+ templateElement,
121
+ expression
122
+ ? shiftExpressionValue(expressionValues, expression, code, loc, filename)
123
+ : null,
124
+ ].filter(isNotNull);
125
+ });
126
+ return ['template', parts];
127
+ };
128
+ export const buildCalleeParams = (node, code, loc, filename, expressionValues, collapseQualifiedCallee = false) => {
129
+ const expression = unwrapQualifiedExpression(node);
130
+ if (collapseQualifiedCallee &&
131
+ (expression.type === 'Identifier' || expression.type === 'MemberExpression')) {
132
+ return [['callee', expression]];
133
+ }
134
+ if (expression.type === 'Identifier') {
135
+ return [['callee', { name: expression.name, type: 'Identifier' }]];
136
+ }
137
+ if (expression.type === 'MemberExpression') {
138
+ const params = buildCalleeParams(expression.object, code, loc, filename, expressionValues, collapseQualifiedCallee);
139
+ const member = getMemberName(expression);
140
+ return params && member ? [...params, ['member', member]] : null;
141
+ }
142
+ if (expression.type === 'CallExpression') {
143
+ const call = expression;
144
+ const params = buildCalleeParams(call.callee, code, loc, filename, expressionValues, collapseQualifiedCallee);
145
+ if (!params) {
146
+ return null;
147
+ }
148
+ const callValues = call.arguments
149
+ .filter((arg) => arg.type !== 'SpreadElement')
150
+ .map((arg) => shiftExpressionValue(expressionValues, arg, code, loc, filename));
151
+ return [...params, ['call', ...callValues]];
152
+ }
153
+ return null;
154
+ };
155
+ export const buildParams = (usage, code, loc, filename, expressionValues, collapseQualifiedCallee) => {
156
+ const params = buildCalleeParams(usage.callee, code, loc, filename, expressionValues, collapseQualifiedCallee);
157
+ if (!params) {
158
+ return null;
159
+ }
160
+ if (usage.kind === 'template') {
161
+ return [
162
+ ...params,
163
+ zipTemplate(usage.target, code, loc, filename, expressionValues),
164
+ ];
165
+ }
166
+ const callValues = usage.target.arguments
167
+ .filter((arg) => arg.type !== 'SpreadElement')
168
+ .map((arg) => shiftExpressionValue(expressionValues, arg, code, loc, filename));
169
+ return [...params, ['call', ...callValues]];
170
+ };
@@ -0,0 +1,7 @@
1
+ import type { Expression as ProcessorExpression, IFileContext, Params } from '@wyw-in-js/processor-utils';
2
+ import type { StrictOptions } from '@wyw-in-js/shared';
3
+ import type { Expression, Node } from 'oxc-parser';
4
+ import type { CreatedProcessor, DefinedProcessor, LocationLookup, Replacement } from './types';
5
+ export declare const isReplacementPure: (replacement: ProcessorExpression) => boolean;
6
+ export declare const shouldCollectStaticExpressionValues: (options: Pick<StrictOptions, "eval">) => boolean;
7
+ export declare const createProcessor: (definedProcessor: DefinedProcessor, params: Params, target: Expression, replacementTarget: Expression, ancestors: Node[], fileContext: IFileContext, options: Pick<StrictOptions, "classNameSlug" | "displayName" | "extensions" | "tagResolver">, code: string, loc: LocationLookup, idx: number, isReferenced: boolean, usedNames: Set<string>, replacements: Replacement[]) => CreatedProcessor | null;
@@ -0,0 +1,70 @@
1
+ import { BaseProcessor, expressionToCode } from '@wyw-in-js/processor-utils';
2
+ import { createOxcAstService } from '../oxcAstService';
3
+ import { buildOxcCodeFrameError } from '../oxc/sourceLocations';
4
+ import { getDisplayName } from './displayName';
5
+ import { getRootIdentifier } from './processorUsages';
6
+ import { getSourceLocation } from './shared';
7
+ let didWarnSkipSymbolMismatch = false;
8
+ export const isReplacementPure = (replacement) => replacement.type === 'CallExpression';
9
+ export const shouldCollectStaticExpressionValues = (options) => (options.eval?.strategy ?? 'hybrid') !== 'execute';
10
+ export const createProcessor = (definedProcessor, params, target, replacementTarget, ancestors, fileContext, options, code, loc, idx, isReferenced, usedNames, replacements) => {
11
+ const [Processor, tagSource] = definedProcessor;
12
+ const astService = createOxcAstService(usedNames);
13
+ const replacer = (replacement, isPure) => {
14
+ const next = typeof replacement === 'function' ? replacement(target) : replacement;
15
+ const replacementCode = expressionToCode(next);
16
+ replacements.push({
17
+ start: replacementTarget.start,
18
+ end: replacementTarget.end,
19
+ value: isPure && isReplacementPure(next)
20
+ ? `/*#__PURE__*/${replacementCode}`
21
+ : replacementCode,
22
+ });
23
+ };
24
+ try {
25
+ let displayName;
26
+ try {
27
+ displayName = getDisplayName(ancestors, idx, code, fileContext.filename);
28
+ }
29
+ catch (error) {
30
+ if (error instanceof Error &&
31
+ error.message.startsWith("Couldn't determine a name for the component")) {
32
+ let displayNameNode = target;
33
+ if (target.type === 'TaggedTemplateExpression') {
34
+ displayNameNode = target.tag;
35
+ }
36
+ else if (target.type === 'CallExpression') {
37
+ displayNameNode = target.callee;
38
+ }
39
+ const pointerNode = displayNameNode.type === 'MemberExpression'
40
+ ? getRootIdentifier(displayNameNode) ?? displayNameNode
41
+ : displayNameNode;
42
+ throw buildOxcCodeFrameError(code, getSourceLocation(pointerNode.start, pointerNode.end, loc, fileContext.filename), error.message);
43
+ }
44
+ throw error;
45
+ }
46
+ return {
47
+ astService,
48
+ processor: new Processor(params, tagSource, astService, getSourceLocation(target.start, target.end, loc, fileContext.filename), replacer, displayName, isReferenced, idx, options, fileContext),
49
+ };
50
+ }
51
+ catch (e) {
52
+ if (e === BaseProcessor.SKIP) {
53
+ return null;
54
+ }
55
+ if (typeof e === 'symbol' &&
56
+ e.description === BaseProcessor.SKIP.description) {
57
+ if (!didWarnSkipSymbolMismatch) {
58
+ didWarnSkipSymbolMismatch = true;
59
+ // eslint-disable-next-line no-console
60
+ console.warn([
61
+ "[wyw-in-js] Processor threw Symbol('skip') that does not match BaseProcessor.SKIP identity.",
62
+ 'This usually means duplicate copies of @wyw-in-js/processor-utils (or the processor) are bundled/installed.',
63
+ 'Consider deduping dependencies to avoid subtle issues (instanceof checks, sentinels, etc).',
64
+ ].join('\n'));
65
+ }
66
+ return null;
67
+ }
68
+ throw e;
69
+ }
70
+ };
@@ -0,0 +1,16 @@
1
+ import type { Expression, MemberExpression, Node, Program } from 'oxc-parser';
2
+ import type { DefinedProcessor, ExpressionSpan, OxcIdentifier, ProcessorUsage } from './types';
3
+ export declare const getMemberName: (node: MemberExpression) => string | null;
4
+ export declare const unwrapQualifiedExpression: (node: Expression) => Expression;
5
+ export declare const getRootIdentifier: (node: Expression) => OxcIdentifier | null;
6
+ export declare const getQualifiedName: (node: Expression) => string | null;
7
+ export declare const resolveDefinedProcessor: (callee: Expression, definedProcessors: Map<string, DefinedProcessor>) => {
8
+ collapseQualifiedCallee: boolean;
9
+ definedProcessor: DefinedProcessor;
10
+ } | null;
11
+ export declare const isCallTagOfTaggedTemplate: (node: Node, parent: Node | null) => boolean;
12
+ export declare const expandReplacementTarget: (target: Expression, ancestors: Node[]) => Expression;
13
+ export declare const collectProcessorUsages: (program: Program, definedProcessors: Map<string, DefinedProcessor>) => ProcessorUsage[];
14
+ export declare const expressionSpan: (expression: Expression) => ExpressionSpan;
15
+ export declare const collectCallArgumentSpans: (node: Expression) => ExpressionSpan[];
16
+ export declare const collectUsageExpressionSpans: (usage: ProcessorUsage) => ExpressionSpan[];
@@ -0,0 +1,163 @@
1
+ import { getOxcNodeChildren } from '../oxc/ast';
2
+ export const getMemberName = (node) => {
3
+ if (node.computed) {
4
+ return node.property.type === 'Literal' &&
5
+ typeof node.property.value === 'string'
6
+ ? node.property.value
7
+ : null;
8
+ }
9
+ return node.property.type === 'Identifier' ? node.property.name : null;
10
+ };
11
+ export const unwrapQualifiedExpression = (node) => {
12
+ if (node.type === 'TSAsExpression' ||
13
+ node.type === 'TSSatisfiesExpression' ||
14
+ node.type === 'TSNonNullExpression' ||
15
+ node.type === 'TSTypeAssertion' ||
16
+ node.type === 'ParenthesizedExpression') {
17
+ return unwrapQualifiedExpression(node.expression);
18
+ }
19
+ if (node.type === 'SequenceExpression') {
20
+ const sequence = node;
21
+ return unwrapQualifiedExpression(sequence.expressions[sequence.expressions.length - 1] ?? node);
22
+ }
23
+ return node;
24
+ };
25
+ export const getRootIdentifier = (node) => {
26
+ const expression = unwrapQualifiedExpression(node);
27
+ if (expression.type === 'Identifier') {
28
+ return expression;
29
+ }
30
+ if (expression.type === 'MemberExpression') {
31
+ return getRootIdentifier(expression.object);
32
+ }
33
+ if (expression.type === 'CallExpression') {
34
+ return getRootIdentifier(expression.callee);
35
+ }
36
+ return null;
37
+ };
38
+ export const getQualifiedName = (node) => {
39
+ const expression = unwrapQualifiedExpression(node);
40
+ if (expression.type === 'Identifier') {
41
+ return expression.name;
42
+ }
43
+ if (expression.type === 'MemberExpression') {
44
+ const object = getQualifiedName(expression.object);
45
+ const member = getMemberName(expression);
46
+ return object && member ? `${object}.${member}` : null;
47
+ }
48
+ if (expression.type === 'CallExpression') {
49
+ return getQualifiedName(expression.callee);
50
+ }
51
+ return null;
52
+ };
53
+ export const resolveDefinedProcessor = (callee, definedProcessors) => {
54
+ const qualified = getQualifiedName(callee);
55
+ if (qualified) {
56
+ const definedProcessor = definedProcessors.get(qualified);
57
+ if (definedProcessor) {
58
+ return {
59
+ collapseQualifiedCallee: qualified.includes('.'),
60
+ definedProcessor,
61
+ };
62
+ }
63
+ }
64
+ const root = getRootIdentifier(callee);
65
+ if (!root) {
66
+ return null;
67
+ }
68
+ const definedProcessor = definedProcessors.get(root.name);
69
+ return definedProcessor
70
+ ? {
71
+ collapseQualifiedCallee: false,
72
+ definedProcessor,
73
+ }
74
+ : null;
75
+ };
76
+ export const isCallTagOfTaggedTemplate = (node, parent) => parent?.type === 'TaggedTemplateExpression' && parent.tag === node;
77
+ export const expandReplacementTarget = (target, ancestors) => {
78
+ let current = target;
79
+ for (let idx = ancestors.length - 1; idx >= 0; idx -= 1) {
80
+ const ancestor = ancestors[idx];
81
+ if (ancestor.type === 'SequenceExpression' &&
82
+ ancestor.expressions[ancestor.expressions.length - 1] === current) {
83
+ current = ancestor;
84
+ }
85
+ else if (ancestor.type === 'ParenthesizedExpression' &&
86
+ ancestor.expression === current) {
87
+ current = ancestor;
88
+ }
89
+ else {
90
+ break;
91
+ }
92
+ }
93
+ return current;
94
+ };
95
+ export const collectProcessorUsages = (program, definedProcessors) => {
96
+ const usages = [];
97
+ const walk = (node, ancestors, parent = null) => {
98
+ if (node.type === 'TaggedTemplateExpression') {
99
+ const callee = node.tag;
100
+ const resolvedProcessor = resolveDefinedProcessor(callee, definedProcessors);
101
+ if (resolvedProcessor) {
102
+ usages.push({
103
+ ancestors,
104
+ callee,
105
+ collapseQualifiedCallee: resolvedProcessor.collapseQualifiedCallee,
106
+ definedProcessor: resolvedProcessor.definedProcessor,
107
+ kind: 'template',
108
+ replacementTarget: expandReplacementTarget(node, ancestors),
109
+ target: node,
110
+ });
111
+ }
112
+ }
113
+ else if (node.type === 'CallExpression' &&
114
+ !isCallTagOfTaggedTemplate(node, parent)) {
115
+ const { callee } = node;
116
+ const resolvedProcessor = resolveDefinedProcessor(callee, definedProcessors);
117
+ if (resolvedProcessor) {
118
+ usages.push({
119
+ ancestors,
120
+ callee,
121
+ collapseQualifiedCallee: resolvedProcessor.collapseQualifiedCallee,
122
+ definedProcessor: resolvedProcessor.definedProcessor,
123
+ kind: 'call',
124
+ replacementTarget: expandReplacementTarget(node, ancestors),
125
+ target: node,
126
+ });
127
+ }
128
+ }
129
+ getOxcNodeChildren(node).forEach((child) => walk(child, [...ancestors, node], node));
130
+ };
131
+ walk(program, []);
132
+ return usages.sort((a, b) => a.target.start - b.target.start);
133
+ };
134
+ export const expressionSpan = (expression) => ({
135
+ end: expression.end,
136
+ start: expression.start,
137
+ });
138
+ export const collectCallArgumentSpans = (node) => {
139
+ const expression = unwrapQualifiedExpression(node);
140
+ if (expression.type === 'CallExpression') {
141
+ const call = expression;
142
+ const calleeSpans = collectCallArgumentSpans(call.callee);
143
+ const argumentSpans = call.arguments.flatMap((arg) => arg.type === 'SpreadElement' ? [] : [expressionSpan(arg)]);
144
+ return [...calleeSpans, ...argumentSpans];
145
+ }
146
+ if (expression.type === 'MemberExpression') {
147
+ return collectCallArgumentSpans(expression.object);
148
+ }
149
+ return [];
150
+ };
151
+ export const collectUsageExpressionSpans = (usage) => {
152
+ const calleeSpans = collectCallArgumentSpans(usage.callee);
153
+ if (usage.kind === 'template') {
154
+ return [
155
+ ...calleeSpans,
156
+ ...usage.target.quasi.expressions.map((expression) => expressionSpan(expression)),
157
+ ];
158
+ }
159
+ return [
160
+ ...calleeSpans,
161
+ ...usage.target.arguments.flatMap((arg) => arg.type === 'SpreadElement' ? [] : [expressionSpan(arg)]),
162
+ ];
163
+ };
@@ -0,0 +1,23 @@
1
+ import type { BaseProcessor } from '@wyw-in-js/processor-utils';
2
+ import type { ExpressionValue } from '@wyw-in-js/shared';
3
+ import type { Node } from 'oxc-parser';
4
+ import type { OxcStaticValueCandidate } from '../collectOxcTemplateDependencies';
5
+ import { type UnknownProcessorStaticValue } from '../processorStaticSemantics';
6
+ import type { SameFileProcessorObject } from './types';
7
+ export declare const oxcLiteralValue: (expression: Node) => unknown | UnknownProcessorStaticValue;
8
+ export declare const oxcPropertyKeyName: (key: Node) => string | null;
9
+ export declare const collectStaticObjectPropertyNames: (objectExpression: Node) => Set<string> | null;
10
+ export declare const getSameFileProcessorObjectProperty: (ancestors: Node[]) => {
11
+ localName: string;
12
+ propertyName: string;
13
+ propertyNames: Set<string>;
14
+ } | null;
15
+ export declare const createSameFileProcessorStaticValueResolver: (processorsByLocal: Map<string, BaseProcessor>, expressionValues: Omit<ExpressionValue, "buildCodeFrameError">[]) => {
16
+ resolveLocal: (local: string) => unknown | UnknownProcessorStaticValue;
17
+ resolveProcessor: (processor: BaseProcessor) => unknown | UnknownProcessorStaticValue;
18
+ };
19
+ export declare const collectSameFileProcessorStaticValuesByLocal: (processorsByLocal: Map<string, BaseProcessor>, expressionValues: Omit<ExpressionValue, "buildCodeFrameError">[]) => Map<string, unknown>;
20
+ export declare const collectSameFileProcessorObjectStaticValuesByLocal: (processorObjectsByLocal: Map<string, SameFileProcessorObject>, processorsByLocal: Map<string, BaseProcessor>, expressionValues: Omit<ExpressionValue, "buildCodeFrameError">[]) => Map<string, unknown>;
21
+ export declare const collectWYWMetaExtendsHelperNames: (code: string) => Set<string>;
22
+ export declare const collectCandidateInlineConstants: (candidate: OxcStaticValueCandidate, processorStaticValuesByLocal: Map<string, unknown>) => Record<string, unknown> | null;
23
+ export declare const addCandidateInlineConstants: (candidates: OxcStaticValueCandidate[], processorStaticValuesByLocal: Map<string, unknown>) => OxcStaticValueCandidate[];
@@ -0,0 +1,211 @@
1
+ /* eslint-disable no-restricted-syntax */
2
+ import { isOxcNode } from '../oxc/ast';
3
+ import { processorExpressionToStaticValue, resolveProcessorStaticRuntimeValue, unknownProcessorStaticValue, } from '../processorStaticSemantics';
4
+ import { GENERATED_HELPER_NAME_RE, JS_IDENTIFIER_RE, WYW_META_EXTENDS_HELPER_RE, } from './shared';
5
+ export const oxcLiteralValue = (expression) => {
6
+ const expressionWithValue = expression;
7
+ const expressionType = expression.type;
8
+ if (expressionType === 'StringLiteral' ||
9
+ expressionType === 'NumericLiteral' ||
10
+ expressionType === 'BooleanLiteral' ||
11
+ expressionType === 'Literal') {
12
+ return expressionWithValue.value;
13
+ }
14
+ if (expressionType === 'NullLiteral') {
15
+ return null;
16
+ }
17
+ return unknownProcessorStaticValue;
18
+ };
19
+ export const oxcPropertyKeyName = (key) => {
20
+ if (key.type === 'Identifier') {
21
+ return key.name;
22
+ }
23
+ const value = oxcLiteralValue(key);
24
+ return typeof value === 'string' ? value : null;
25
+ };
26
+ export const collectStaticObjectPropertyNames = (objectExpression) => {
27
+ if (objectExpression.type !== 'ObjectExpression') {
28
+ return null;
29
+ }
30
+ const { properties } = objectExpression;
31
+ if (!properties) {
32
+ return null;
33
+ }
34
+ const names = new Set();
35
+ for (const property of properties) {
36
+ const propertyType = property.type;
37
+ if (propertyType !== 'ObjectProperty' && propertyType !== 'Property') {
38
+ return null;
39
+ }
40
+ if (!property.key || !property.value) {
41
+ return null;
42
+ }
43
+ const name = oxcPropertyKeyName(property.key);
44
+ if (!name || names.has(name)) {
45
+ return null;
46
+ }
47
+ names.add(name);
48
+ }
49
+ return names;
50
+ };
51
+ export const getSameFileProcessorObjectProperty = (ancestors) => {
52
+ let propertyIndex = -1;
53
+ for (let idx = ancestors.length - 1; idx >= 0; idx -= 1) {
54
+ if (ancestors[idx].type === 'Property') {
55
+ propertyIndex = idx;
56
+ break;
57
+ }
58
+ }
59
+ if (propertyIndex <= 0) {
60
+ return null;
61
+ }
62
+ const property = ancestors[propertyIndex];
63
+ const objectExpression = ancestors[propertyIndex - 1];
64
+ if (!property.key || objectExpression.type !== 'ObjectExpression') {
65
+ return null;
66
+ }
67
+ const propertyName = oxcPropertyKeyName(property.key);
68
+ const propertyNames = collectStaticObjectPropertyNames(objectExpression);
69
+ if (!propertyName || !propertyNames) {
70
+ return null;
71
+ }
72
+ for (let idx = propertyIndex - 2; idx >= 0; idx -= 1) {
73
+ const ancestor = ancestors[idx];
74
+ if (ancestor.type === 'VariableDeclarator') {
75
+ const { id, init } = ancestor;
76
+ if (isOxcNode(id) &&
77
+ id.type === 'Identifier' &&
78
+ init === objectExpression) {
79
+ return {
80
+ localName: id.name,
81
+ propertyName,
82
+ propertyNames,
83
+ };
84
+ }
85
+ }
86
+ }
87
+ return null;
88
+ };
89
+ export const createSameFileProcessorStaticValueResolver = (processorsByLocal, expressionValues) => {
90
+ const expressionSourceByName = new Map();
91
+ expressionValues.forEach((value) => {
92
+ if (value.ex.type === 'Identifier') {
93
+ expressionSourceByName.set(value.ex.name, value.source);
94
+ }
95
+ });
96
+ const memo = new Map();
97
+ const resolving = new Set();
98
+ function resolveLocal(local) {
99
+ if (memo.has(local)) {
100
+ return memo.get(local);
101
+ }
102
+ const processor = processorsByLocal.get(local);
103
+ if (!processor || resolving.has(local)) {
104
+ return unknownProcessorStaticValue;
105
+ }
106
+ resolving.add(local);
107
+ const contractValue = resolveProcessorStaticRuntimeValue(processor);
108
+ const value = contractValue !== unknownProcessorStaticValue
109
+ ? contractValue
110
+ : processorExpressionToStaticValue(processor.value, (helperName) => {
111
+ const source = expressionSourceByName.get(helperName);
112
+ return source ? resolveLocal(source) : unknownProcessorStaticValue;
113
+ });
114
+ resolving.delete(local);
115
+ memo.set(local, value);
116
+ return value;
117
+ }
118
+ function resolveProcessor(processor) {
119
+ const contractValue = resolveProcessorStaticRuntimeValue(processor);
120
+ if (contractValue !== unknownProcessorStaticValue) {
121
+ return contractValue;
122
+ }
123
+ return processorExpressionToStaticValue(processor.value, (helperName) => {
124
+ const source = expressionSourceByName.get(helperName);
125
+ return source ? resolveLocal(source) : unknownProcessorStaticValue;
126
+ });
127
+ }
128
+ return { resolveLocal, resolveProcessor };
129
+ };
130
+ export const collectSameFileProcessorStaticValuesByLocal = (processorsByLocal, expressionValues) => {
131
+ const { resolveLocal } = createSameFileProcessorStaticValueResolver(processorsByLocal, expressionValues);
132
+ const result = new Map();
133
+ processorsByLocal.forEach((_processor, local) => {
134
+ const value = resolveLocal(local);
135
+ if (value !== unknownProcessorStaticValue) {
136
+ result.set(local, value);
137
+ }
138
+ });
139
+ return result;
140
+ };
141
+ export const collectSameFileProcessorObjectStaticValuesByLocal = (processorObjectsByLocal, processorsByLocal, expressionValues) => {
142
+ const { resolveProcessor } = createSameFileProcessorStaticValueResolver(processorsByLocal, expressionValues);
143
+ const result = new Map();
144
+ for (const [local, object] of processorObjectsByLocal) {
145
+ if (object.properties.size === object.propertyNames.size) {
146
+ const value = {};
147
+ let complete = true;
148
+ for (const propertyName of object.propertyNames) {
149
+ const processor = object.properties.get(propertyName);
150
+ if (!processor) {
151
+ complete = false;
152
+ break;
153
+ }
154
+ const propertyValue = resolveProcessor(processor);
155
+ if (propertyValue === unknownProcessorStaticValue) {
156
+ complete = false;
157
+ break;
158
+ }
159
+ value[propertyName] = propertyValue;
160
+ }
161
+ if (complete) {
162
+ result.set(local, value);
163
+ }
164
+ }
165
+ }
166
+ return result;
167
+ };
168
+ export const collectWYWMetaExtendsHelperNames = (code) => {
169
+ const names = new Set();
170
+ let match = WYW_META_EXTENDS_HELPER_RE.exec(code);
171
+ while (match) {
172
+ const name = match[1];
173
+ if (name && GENERATED_HELPER_NAME_RE.test(name)) {
174
+ names.add(name);
175
+ }
176
+ match = WYW_META_EXTENDS_HELPER_RE.exec(code);
177
+ }
178
+ return names;
179
+ };
180
+ export const collectCandidateInlineConstants = (candidate, processorStaticValuesByLocal) => {
181
+ const inlineConstants = {};
182
+ let hasInlineConstant = false;
183
+ let match = JS_IDENTIFIER_RE.exec(candidate.source);
184
+ while (match) {
185
+ const name = match[0];
186
+ if (processorStaticValuesByLocal.has(name)) {
187
+ inlineConstants[name] = processorStaticValuesByLocal.get(name);
188
+ hasInlineConstant = true;
189
+ }
190
+ match = JS_IDENTIFIER_RE.exec(candidate.source);
191
+ }
192
+ return hasInlineConstant ? inlineConstants : null;
193
+ };
194
+ export const addCandidateInlineConstants = (candidates, processorStaticValuesByLocal) => {
195
+ if (processorStaticValuesByLocal.size === 0) {
196
+ return candidates;
197
+ }
198
+ return candidates.map((candidate) => {
199
+ const inlineConstants = collectCandidateInlineConstants(candidate, processorStaticValuesByLocal);
200
+ if (!inlineConstants) {
201
+ return candidate;
202
+ }
203
+ return {
204
+ ...candidate,
205
+ inlineConstants: {
206
+ ...candidate.inlineConstants,
207
+ ...inlineConstants,
208
+ },
209
+ };
210
+ });
211
+ };