@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,351 @@
1
+ /* eslint-disable no-restricted-syntax,no-continue,@typescript-eslint/no-use-before-define */
2
+ import { evaluateOxcStaticExpressionAt, isOxcStaticSerializableValue, lookupStaticBinding } from "../../../utils/collectOxcTemplateDependencies.js";
3
+ import { getStaticExportCachedResult, getStaticFileAnalysis, getStaticMetadataPreevalResult, setStaticExportCachedResult } from "./cache.js";
4
+ import { resolveDependency } from "./dependencies.js";
5
+ import { debugStaticResolve, getStaticBindings } from "./environment.js";
6
+ import { findExportTarget, typeScriptEnumStaticExportValue } from "./exportTargets.js";
7
+ import { resolveObjectAssignStaticExport } from "./objectAssignStaticExport.js";
8
+ import { resolveProcessorStaticExport } from "./processorStaticExport.js";
9
+ import { bindStaticResolvedValue, collectImportBindings } from "./staticExpression.js";
10
+ import { collectStaticExpressionDependencies } from "./staticExpressionDependencies.js";
11
+ import { resolveZeroArgFunctionStaticExport } from "./zeroArgFunctionStaticExport.js";
12
+ export function* resolveImportValue(action, importer, binding, stack, memo) {
13
+ const dependency = yield* resolveDependency(action, importer, binding.source, binding.imported);
14
+ if (!dependency?.resolved) {
15
+ debugStaticResolve(action, {
16
+ filename: importer,
17
+ imported: binding.imported,
18
+ phase: "import",
19
+ reason: "dependency-unresolved",
20
+ source: binding.source,
21
+ status: "rejected"
22
+ });
23
+ return null;
24
+ }
25
+ const resolved = yield* resolveStaticExport(action, dependency.resolved, binding.imported, stack, memo);
26
+ if (!resolved) {
27
+ debugStaticResolve(action, {
28
+ dependency: dependency.resolved,
29
+ filename: importer,
30
+ imported: binding.imported,
31
+ phase: "import",
32
+ reason: "resolve-failed",
33
+ source: binding.source,
34
+ status: "rejected"
35
+ });
36
+ return null;
37
+ }
38
+ debugStaticResolve(action, {
39
+ dependency: dependency.resolved,
40
+ filename: importer,
41
+ imported: binding.imported,
42
+ phase: "import",
43
+ source: binding.source,
44
+ status: "resolved"
45
+ });
46
+ return {
47
+ callable: resolved.callable,
48
+ dependencies: [dependency.resolved, ...resolved.dependencies.filter((item) => item !== dependency.resolved)],
49
+ sideEffectDependencies: resolved.sideEffectDependencies,
50
+ value: resolved.value
51
+ };
52
+ }
53
+ export function* resolveStaticExport(action, filename, exportedName, stack, memo) {
54
+ const memoKey = `${filename}\0${exportedName}`;
55
+ if (memo.has(memoKey)) {
56
+ return memo.get(memoKey) ?? null;
57
+ }
58
+ if (stack.has(memoKey)) {
59
+ memo.set(memoKey, null);
60
+ debugStaticResolve(action, {
61
+ exported: exportedName,
62
+ filename,
63
+ phase: "export",
64
+ reason: "cyclic-export",
65
+ status: "rejected"
66
+ });
67
+ return null;
68
+ }
69
+ stack.add(memoKey);
70
+ const analysis = getStaticFileAnalysis(action, filename);
71
+ if (!analysis) {
72
+ memo.set(memoKey, null);
73
+ stack.delete(memoKey);
74
+ debugStaticResolve(action, {
75
+ exported: exportedName,
76
+ filename,
77
+ phase: "export",
78
+ reason: "ignored-or-non-oxc",
79
+ status: "rejected"
80
+ });
81
+ return null;
82
+ }
83
+ const { code, codeHash, program } = analysis;
84
+ const finish = (result) => {
85
+ memo.set(memoKey, result);
86
+ stack.delete(memoKey);
87
+ setStaticExportCachedResult(action, filename, exportedName, codeHash, result);
88
+ return result;
89
+ };
90
+ const cachedResult = getStaticExportCachedResult(action, filename, exportedName, codeHash);
91
+ if (cachedResult !== undefined) {
92
+ memo.set(memoKey, cachedResult);
93
+ stack.delete(memoKey);
94
+ return cachedResult;
95
+ }
96
+ const enumValue = typeScriptEnumStaticExportValue(program, exportedName);
97
+ if (enumValue) {
98
+ debugStaticResolve(action, {
99
+ exported: exportedName,
100
+ filename,
101
+ phase: "export",
102
+ reason: "typescript-enum",
103
+ status: "resolved"
104
+ });
105
+ return finish({
106
+ dependencies: [filename],
107
+ value: enumValue
108
+ });
109
+ }
110
+ const target = findExportTarget(program, exportedName);
111
+ if (!target) {
112
+ debugStaticResolve(action, {
113
+ exported: exportedName,
114
+ filename,
115
+ phase: "export",
116
+ reason: "no-export-target",
117
+ status: "rejected"
118
+ });
119
+ return finish(null);
120
+ }
121
+ if (target.kind === "import") {
122
+ const resolved = yield* resolveImportValue(action, filename, target, stack, memo);
123
+ debugStaticResolve(action, {
124
+ exported: exportedName,
125
+ filename,
126
+ imported: target.imported,
127
+ phase: "export",
128
+ reason: resolved ? undefined : "resolve-failed",
129
+ source: target.source,
130
+ status: resolved ? "resolved" : "rejected"
131
+ });
132
+ return finish(resolved);
133
+ }
134
+ const resolvers = {
135
+ resolveImportValue,
136
+ resolveStaticExport
137
+ };
138
+ const objectAssignResult = yield* resolveObjectAssignStaticExport(action, filename, code, program, target, stack, memo, resolvers);
139
+ if (objectAssignResult) {
140
+ debugStaticResolve(action, {
141
+ exported: exportedName,
142
+ filename,
143
+ phase: "export",
144
+ reason: "object-assign",
145
+ status: "resolved"
146
+ });
147
+ return finish(objectAssignResult);
148
+ }
149
+ const zeroArgFunctionResult = yield* resolveZeroArgFunctionStaticExport(action, filename, code, program, target, stack, memo, resolveImportValue);
150
+ if (zeroArgFunctionResult) {
151
+ debugStaticResolve(action, {
152
+ exported: exportedName,
153
+ filename,
154
+ phase: "export",
155
+ reason: "zero-arg-function",
156
+ status: "resolved"
157
+ });
158
+ return finish(zeroArgFunctionResult);
159
+ }
160
+ // Pre-fetch the source file's preeval result so processor className
161
+ // bindings (`const x = css\`\``) can short-circuit dependency walks
162
+ // and seed the evaluator's env. The TaggedTemplateExpression init
163
+ // isn't safe-static by itself; the className IS.
164
+ const sourcePreevalForExpression = getStaticMetadataPreevalResult(action, filename, code, codeHash);
165
+ const preResolvedLocals = sourcePreevalForExpression?.processorClassNames ? new Set(Object.keys(sourcePreevalForExpression.processorClassNames)) : undefined;
166
+ // Build the set of import-local names registered as pure helpers via
167
+ // pluginOptions.staticBindings. The dependency walker admits
168
+ // CallExpressions whose callee is one of these so `cx(a, b)` and
169
+ // `isFlagPresent('x')` stop tripping isSafeStaticExpression.
170
+ const staticBindingsForExportShape = getStaticBindings(action);
171
+ const staticHelperLocals = new Set();
172
+ if (staticBindingsForExportShape) {
173
+ const fileImports = collectImportBindings(program);
174
+ for (const [local, binding] of fileImports) {
175
+ if (!binding.imported || binding.imported === "*" || binding.imported === "default") {
176
+ continue;
177
+ }
178
+ let override = lookupStaticBinding(staticBindingsForExportShape, binding.source, binding.imported);
179
+ if (!override.found) {
180
+ const dep = yield* resolveDependency(action, filename, binding.source, binding.imported);
181
+ if (dep?.resolved) {
182
+ override = lookupStaticBinding(staticBindingsForExportShape, dep.resolved, binding.imported);
183
+ }
184
+ }
185
+ if (override.found && typeof override.value === "function") {
186
+ staticHelperLocals.add(local);
187
+ }
188
+ }
189
+ }
190
+ const staticDependencies = collectStaticExpressionDependencies(program, target, {
191
+ ...preResolvedLocals ? { preResolvedLocals } : {},
192
+ ...staticHelperLocals.size > 0 ? { staticHelperLocals } : {}
193
+ });
194
+ if (!staticDependencies) {
195
+ debugStaticResolve(action, {
196
+ exported: exportedName,
197
+ filename,
198
+ phase: "export",
199
+ reason: "unsupported-expression",
200
+ status: "rejected"
201
+ });
202
+ const metadataResult = yield* resolveProcessorStaticExport(action, filename, code, codeHash, program, exportedName, stack, memo, resolvers);
203
+ if (metadataResult) {
204
+ debugStaticResolve(action, {
205
+ exported: exportedName,
206
+ filename,
207
+ phase: "export",
208
+ status: "resolved"
209
+ });
210
+ return finish(metadataResult);
211
+ }
212
+ // Fallback: the metadata path rejected (e.g. non-empty-css-artifact
213
+ // when the css\`\` template has interpolations the source-preeval
214
+ // can't fold). The processor still computed a className for this
215
+ // binding during applyOxcProcessors; surface it as the export's
216
+ // value. Keep the source file in sideEffectDependencies so its CSS
217
+ // registers at runtime.
218
+ //
219
+ // Two shapes resolve here:
220
+ // export const x = css\`...\` (TaggedTemplateExpression init)
221
+ // export const x = sameFileCssConst (Identifier alias)
222
+ let lookupName = null;
223
+ if (target.expression.type === "TaggedTemplateExpression") {
224
+ lookupName = target.localName ?? null;
225
+ } else if (target.expression.type === "Identifier") {
226
+ lookupName = target.expression.name;
227
+ }
228
+ if (lookupName) {
229
+ const sourcePreeval = getStaticMetadataPreevalResult(action, filename, code, codeHash);
230
+ const className = sourcePreeval?.processorClassNames[lookupName];
231
+ if (className) {
232
+ debugStaticResolve(action, {
233
+ exported: exportedName,
234
+ filename,
235
+ phase: "export",
236
+ reason: "processor-class-name",
237
+ status: "resolved"
238
+ });
239
+ return finish({
240
+ dependencies: [filename],
241
+ sideEffectDependencies: [filename],
242
+ value: className
243
+ });
244
+ }
245
+ }
246
+ debugStaticResolve(action, {
247
+ exported: exportedName,
248
+ filename,
249
+ phase: "export",
250
+ reason: "resolve-failed",
251
+ status: "rejected"
252
+ });
253
+ return finish(null);
254
+ }
255
+ const env = new Map();
256
+ const dependencies = new Set([filename]);
257
+ const sideEffectDependencies = new Set();
258
+ const staticBindingsForExport = getStaticBindings(action);
259
+ for (const binding of staticDependencies.imports) {
260
+ // staticBindings overrides take precedence here too — same shape as
261
+ // the candidate path. Try the raw specifier first, then the
262
+ // resolved absolute path on miss.
263
+ let override = lookupStaticBinding(staticBindingsForExport, binding.source, binding.imported);
264
+ if (!override.found && staticBindingsForExport) {
265
+ const dep = yield* resolveDependency(action, filename, binding.source, binding.imported);
266
+ if (dep?.resolved) {
267
+ override = lookupStaticBinding(staticBindingsForExport, dep.resolved, binding.imported);
268
+ }
269
+ }
270
+ if (override.found) {
271
+ env.set(binding.local, override.value);
272
+ continue;
273
+ }
274
+ const resolved = yield* resolveImportValue(action, filename, binding, stack, memo);
275
+ if (!resolved) {
276
+ debugStaticResolve(action, {
277
+ exported: exportedName,
278
+ filename,
279
+ imported: binding.imported,
280
+ phase: "export",
281
+ reason: "resolve-failed",
282
+ source: binding.source,
283
+ status: "rejected"
284
+ });
285
+ return finish(null);
286
+ }
287
+ if (!bindStaticResolvedValue(env, target.expression, binding.local, resolved)) {
288
+ debugStaticResolve(action, {
289
+ exported: exportedName,
290
+ filename,
291
+ imported: binding.imported,
292
+ phase: "export",
293
+ reason: "callable-usage-unsupported",
294
+ source: binding.source,
295
+ status: "rejected"
296
+ });
297
+ return finish(null);
298
+ }
299
+ resolved.dependencies.forEach((item) => dependencies.add(item));
300
+ resolved.sideEffectDependencies?.forEach((item) => sideEffectDependencies.add(item));
301
+ }
302
+ // Seed env with the source file's selector-only processor class names
303
+ // so expressions like `baseClassName + ' ' + hoverClassName` can fold
304
+ // — `baseClassName`'s init is a TaggedTemplateExpression the evaluator
305
+ // can't unfold by walking the AST, but its className is already known
306
+ // from applyOxcProcessors.
307
+ if (sourcePreevalForExpression?.processorClassNames) {
308
+ for (const [name, className] of Object.entries(sourcePreevalForExpression.processorClassNames)) {
309
+ if (!env.has(name)) {
310
+ env.set(name, className);
311
+ }
312
+ }
313
+ }
314
+ const value = evaluateOxcStaticExpressionAt(code, filename, {
315
+ end: target.expression.end,
316
+ start: target.expression.start
317
+ }, env, getStaticBindings(action));
318
+ if (!isOxcStaticSerializableValue(value)) {
319
+ const metadataResult = yield* resolveProcessorStaticExport(action, filename, code, codeHash, program, exportedName, stack, memo, resolvers);
320
+ if (metadataResult) {
321
+ debugStaticResolve(action, {
322
+ exported: exportedName,
323
+ filename,
324
+ phase: "export",
325
+ status: "resolved"
326
+ });
327
+ return finish(metadataResult);
328
+ }
329
+ debugStaticResolve(action, {
330
+ exported: exportedName,
331
+ filename,
332
+ phase: "export",
333
+ reason: "non-serializable",
334
+ status: "rejected"
335
+ });
336
+ return finish(null);
337
+ }
338
+ const result = {
339
+ dependencies: [...dependencies],
340
+ sideEffectDependencies: [...sideEffectDependencies],
341
+ value
342
+ };
343
+ debugStaticResolve(action, {
344
+ exported: exportedName,
345
+ filename,
346
+ phase: "export",
347
+ status: "resolved"
348
+ });
349
+ return finish(result);
350
+ }
351
+ //# sourceMappingURL=exportResolver.js.map
@@ -0,0 +1 @@
1
+ {"mappings":"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","names":[],"sources":["../../../../src/transform/generators/resolveStaticOxcValues/exportResolver.ts"],"version":3,"sourcesContent":["/* eslint-disable no-restricted-syntax,no-continue,@typescript-eslint/no-use-before-define */\n\nimport {\n evaluateOxcStaticExpressionAt,\n isOxcStaticSerializableValue,\n lookupStaticBinding,\n} from '../../../utils/collectOxcTemplateDependencies';\nimport type { ITransformAction, SyncScenarioFor } from '../../types';\nimport {\n getStaticExportCachedResult,\n getStaticFileAnalysis,\n getStaticMetadataPreevalResult,\n setStaticExportCachedResult,\n} from './cache';\nimport { resolveDependency } from './dependencies';\nimport { debugStaticResolve, getStaticBindings } from './environment';\nimport {\n findExportTarget,\n typeScriptEnumStaticExportValue,\n} from './exportTargets';\nimport { resolveObjectAssignStaticExport } from './objectAssignStaticExport';\nimport { resolveProcessorStaticExport } from './processorStaticExport';\nimport {\n bindStaticResolvedValue,\n collectImportBindings,\n} from './staticExpression';\nimport { collectStaticExpressionDependencies } from './staticExpressionDependencies';\nimport type { ImportBinding, StaticExportResult } from './types';\nimport { resolveZeroArgFunctionStaticExport } from './zeroArgFunctionStaticExport';\n\nexport function* resolveImportValue(\n action: ITransformAction,\n importer: string,\n binding: Pick<ImportBinding, 'imported' | 'source'>,\n stack: Set<string>,\n memo: Map<string, StaticExportResult | null>\n): SyncScenarioFor<StaticExportResult | null> {\n const dependency = yield* resolveDependency(\n action,\n importer,\n binding.source,\n binding.imported\n );\n if (!dependency?.resolved) {\n debugStaticResolve(action, {\n filename: importer,\n imported: binding.imported,\n phase: 'import',\n reason: 'dependency-unresolved',\n source: binding.source,\n status: 'rejected',\n });\n return null;\n }\n\n const resolved = yield* resolveStaticExport(\n action,\n dependency.resolved,\n binding.imported,\n stack,\n memo\n );\n if (!resolved) {\n debugStaticResolve(action, {\n dependency: dependency.resolved,\n filename: importer,\n imported: binding.imported,\n phase: 'import',\n reason: 'resolve-failed',\n source: binding.source,\n status: 'rejected',\n });\n return null;\n }\n\n debugStaticResolve(action, {\n dependency: dependency.resolved,\n filename: importer,\n imported: binding.imported,\n phase: 'import',\n source: binding.source,\n status: 'resolved',\n });\n\n return {\n callable: resolved.callable,\n dependencies: [\n dependency.resolved,\n ...resolved.dependencies.filter((item) => item !== dependency.resolved),\n ],\n sideEffectDependencies: resolved.sideEffectDependencies,\n value: resolved.value,\n };\n}\nexport function* resolveStaticExport(\n action: ITransformAction,\n filename: string,\n exportedName: string,\n stack: Set<string>,\n memo: Map<string, StaticExportResult | null>\n): SyncScenarioFor<StaticExportResult | null> {\n const memoKey = `${filename}\\0${exportedName}`;\n if (memo.has(memoKey)) {\n return memo.get(memoKey) ?? null;\n }\n\n if (stack.has(memoKey)) {\n memo.set(memoKey, null);\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'export',\n reason: 'cyclic-export',\n status: 'rejected',\n });\n return null;\n }\n\n stack.add(memoKey);\n\n const analysis = getStaticFileAnalysis(action, filename);\n if (!analysis) {\n memo.set(memoKey, null);\n stack.delete(memoKey);\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'export',\n reason: 'ignored-or-non-oxc',\n status: 'rejected',\n });\n return null;\n }\n\n const { code, codeHash, program } = analysis;\n const finish = (\n result: StaticExportResult | null\n ): StaticExportResult | null => {\n memo.set(memoKey, result);\n stack.delete(memoKey);\n setStaticExportCachedResult(\n action,\n filename,\n exportedName,\n codeHash,\n result\n );\n return result;\n };\n\n const cachedResult = getStaticExportCachedResult(\n action,\n filename,\n exportedName,\n codeHash\n );\n if (cachedResult !== undefined) {\n memo.set(memoKey, cachedResult);\n stack.delete(memoKey);\n return cachedResult;\n }\n\n const enumValue = typeScriptEnumStaticExportValue(program, exportedName);\n if (enumValue) {\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'export',\n reason: 'typescript-enum',\n status: 'resolved',\n });\n return finish({\n dependencies: [filename],\n value: enumValue,\n });\n }\n\n const target = findExportTarget(program, exportedName);\n if (!target) {\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'export',\n reason: 'no-export-target',\n status: 'rejected',\n });\n return finish(null);\n }\n\n if (target.kind === 'import') {\n const resolved = yield* resolveImportValue(\n action,\n filename,\n target,\n stack,\n memo\n );\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n imported: target.imported,\n phase: 'export',\n reason: resolved ? undefined : 'resolve-failed',\n source: target.source,\n status: resolved ? 'resolved' : 'rejected',\n });\n return finish(resolved);\n }\n\n const resolvers = {\n resolveImportValue,\n resolveStaticExport,\n };\n\n const objectAssignResult = yield* resolveObjectAssignStaticExport(\n action,\n filename,\n code,\n program,\n target,\n stack,\n memo,\n resolvers\n );\n if (objectAssignResult) {\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'export',\n reason: 'object-assign',\n status: 'resolved',\n });\n return finish(objectAssignResult);\n }\n\n const zeroArgFunctionResult = yield* resolveZeroArgFunctionStaticExport(\n action,\n filename,\n code,\n program,\n target,\n stack,\n memo,\n resolveImportValue\n );\n if (zeroArgFunctionResult) {\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'export',\n reason: 'zero-arg-function',\n status: 'resolved',\n });\n return finish(zeroArgFunctionResult);\n }\n\n // Pre-fetch the source file's preeval result so processor className\n // bindings (`const x = css\\`\\``) can short-circuit dependency walks\n // and seed the evaluator's env. The TaggedTemplateExpression init\n // isn't safe-static by itself; the className IS.\n const sourcePreevalForExpression = getStaticMetadataPreevalResult(\n action,\n filename,\n code,\n codeHash\n );\n const preResolvedLocals = sourcePreevalForExpression?.processorClassNames\n ? new Set(Object.keys(sourcePreevalForExpression.processorClassNames))\n : undefined;\n\n // Build the set of import-local names registered as pure helpers via\n // pluginOptions.staticBindings. The dependency walker admits\n // CallExpressions whose callee is one of these so `cx(a, b)` and\n // `isFlagPresent('x')` stop tripping isSafeStaticExpression.\n const staticBindingsForExportShape = getStaticBindings(action);\n const staticHelperLocals = new Set<string>();\n if (staticBindingsForExportShape) {\n const fileImports = collectImportBindings(program);\n for (const [local, binding] of fileImports) {\n if (\n !binding.imported ||\n binding.imported === '*' ||\n binding.imported === 'default'\n ) {\n continue;\n }\n let override = lookupStaticBinding(\n staticBindingsForExportShape,\n binding.source,\n binding.imported\n );\n if (!override.found) {\n const dep = yield* resolveDependency(\n action,\n filename,\n binding.source,\n binding.imported\n );\n if (dep?.resolved) {\n override = lookupStaticBinding(\n staticBindingsForExportShape,\n dep.resolved,\n binding.imported\n );\n }\n }\n if (override.found && typeof override.value === 'function') {\n staticHelperLocals.add(local);\n }\n }\n }\n\n const staticDependencies = collectStaticExpressionDependencies(\n program,\n target,\n {\n ...(preResolvedLocals ? { preResolvedLocals } : {}),\n ...(staticHelperLocals.size > 0 ? { staticHelperLocals } : {}),\n }\n );\n if (!staticDependencies) {\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'export',\n reason: 'unsupported-expression',\n status: 'rejected',\n });\n const metadataResult = yield* resolveProcessorStaticExport(\n action,\n filename,\n code,\n codeHash,\n program,\n exportedName,\n stack,\n memo,\n resolvers\n );\n if (metadataResult) {\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'export',\n status: 'resolved',\n });\n return finish(metadataResult);\n }\n\n // Fallback: the metadata path rejected (e.g. non-empty-css-artifact\n // when the css\\`\\` template has interpolations the source-preeval\n // can't fold). The processor still computed a className for this\n // binding during applyOxcProcessors; surface it as the export's\n // value. Keep the source file in sideEffectDependencies so its CSS\n // registers at runtime.\n //\n // Two shapes resolve here:\n // export const x = css\\`...\\` (TaggedTemplateExpression init)\n // export const x = sameFileCssConst (Identifier alias)\n let lookupName: string | null = null;\n if (target.expression.type === 'TaggedTemplateExpression') {\n lookupName = target.localName ?? null;\n } else if (target.expression.type === 'Identifier') {\n lookupName = target.expression.name;\n }\n\n if (lookupName) {\n const sourcePreeval = getStaticMetadataPreevalResult(\n action,\n filename,\n code,\n codeHash\n );\n const className = sourcePreeval?.processorClassNames[lookupName];\n if (className) {\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'export',\n reason: 'processor-class-name',\n status: 'resolved',\n });\n return finish({\n dependencies: [filename],\n sideEffectDependencies: [filename],\n value: className,\n });\n }\n }\n\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'export',\n reason: 'resolve-failed',\n status: 'rejected',\n });\n return finish(null);\n }\n\n const env = new Map<string, unknown>();\n const dependencies = new Set<string>([filename]);\n const sideEffectDependencies = new Set<string>();\n const staticBindingsForExport = getStaticBindings(action);\n\n for (const binding of staticDependencies.imports) {\n // staticBindings overrides take precedence here too — same shape as\n // the candidate path. Try the raw specifier first, then the\n // resolved absolute path on miss.\n let override = lookupStaticBinding(\n staticBindingsForExport,\n binding.source,\n binding.imported\n );\n if (!override.found && staticBindingsForExport) {\n const dep = yield* resolveDependency(\n action,\n filename,\n binding.source,\n binding.imported\n );\n if (dep?.resolved) {\n override = lookupStaticBinding(\n staticBindingsForExport,\n dep.resolved,\n binding.imported\n );\n }\n }\n if (override.found) {\n env.set(binding.local, override.value);\n continue;\n }\n\n const resolved = yield* resolveImportValue(\n action,\n filename,\n binding,\n stack,\n memo\n );\n if (!resolved) {\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n imported: binding.imported,\n phase: 'export',\n reason: 'resolve-failed',\n source: binding.source,\n status: 'rejected',\n });\n return finish(null);\n }\n\n if (\n !bindStaticResolvedValue(env, target.expression, binding.local, resolved)\n ) {\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n imported: binding.imported,\n phase: 'export',\n reason: 'callable-usage-unsupported',\n source: binding.source,\n status: 'rejected',\n });\n return finish(null);\n }\n\n resolved.dependencies.forEach((item) => dependencies.add(item));\n resolved.sideEffectDependencies?.forEach((item) =>\n sideEffectDependencies.add(item)\n );\n }\n\n // Seed env with the source file's selector-only processor class names\n // so expressions like `baseClassName + ' ' + hoverClassName` can fold\n // — `baseClassName`'s init is a TaggedTemplateExpression the evaluator\n // can't unfold by walking the AST, but its className is already known\n // from applyOxcProcessors.\n if (sourcePreevalForExpression?.processorClassNames) {\n for (const [name, className] of Object.entries(\n sourcePreevalForExpression.processorClassNames\n )) {\n if (!env.has(name)) {\n env.set(name, className);\n }\n }\n }\n\n const value = evaluateOxcStaticExpressionAt(\n code,\n filename,\n {\n end: target.expression.end,\n start: target.expression.start,\n },\n env,\n getStaticBindings(action)\n );\n if (!isOxcStaticSerializableValue(value)) {\n const metadataResult = yield* resolveProcessorStaticExport(\n action,\n filename,\n code,\n codeHash,\n program,\n exportedName,\n stack,\n memo,\n resolvers\n );\n if (metadataResult) {\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'export',\n status: 'resolved',\n });\n return finish(metadataResult);\n }\n\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'export',\n reason: 'non-serializable',\n status: 'rejected',\n });\n return finish(null);\n }\n\n const result = {\n dependencies: [...dependencies],\n sideEffectDependencies: [...sideEffectDependencies],\n value,\n };\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'export',\n status: 'resolved',\n });\n return finish(result);\n}\n"],"file":"exportResolver.js"}
@@ -0,0 +1,253 @@
1
+ import { collectLocalConstExpressions } from "./programAnalysis.js";
2
+ import { collectImportBindings, moduleExportName, unwrapExpression } from "./staticExpression.js";
3
+ export const getExportSpecifierNames = (specifier) => ({
4
+ exported: moduleExportName(specifier.exported),
5
+ local: moduleExportName(specifier.local)
6
+ });
7
+ export const findExportTarget = (program, exportedName) => {
8
+ const imports = collectImportBindings(program);
9
+ const locals = collectLocalConstExpressions(program);
10
+ for (const statement of program.body) {
11
+ if (statement.type === "ExportNamedDeclaration") {
12
+ if (statement.source) {
13
+ for (const specifier of statement.specifiers) {
14
+ if (specifier.type !== "ExportSpecifier") {
15
+ continue;
16
+ }
17
+ const names = getExportSpecifierNames(specifier);
18
+ if (names.exported === exportedName) {
19
+ return {
20
+ imported: names.local,
21
+ kind: "import",
22
+ source: statement.source.value
23
+ };
24
+ }
25
+ }
26
+ continue;
27
+ }
28
+ if (statement.declaration?.type === "VariableDeclaration") {
29
+ for (const declarator of statement.declaration.declarations) {
30
+ if (declarator.id.type === "Identifier" && declarator.id.name === exportedName && declarator.init) {
31
+ return {
32
+ expression: declarator.init,
33
+ kind: "expression",
34
+ localName: declarator.id.name
35
+ };
36
+ }
37
+ }
38
+ continue;
39
+ }
40
+ for (const specifier of statement.specifiers) {
41
+ if (specifier.type !== "ExportSpecifier") {
42
+ continue;
43
+ }
44
+ const names = getExportSpecifierNames(specifier);
45
+ if (names.exported !== exportedName) {
46
+ continue;
47
+ }
48
+ const importBinding = imports.get(names.local);
49
+ if (importBinding) {
50
+ return {
51
+ imported: importBinding.imported,
52
+ kind: "import",
53
+ source: importBinding.source
54
+ };
55
+ }
56
+ const local = locals.get(names.local);
57
+ if (local) {
58
+ return {
59
+ expression: local,
60
+ kind: "expression",
61
+ localName: names.local
62
+ };
63
+ }
64
+ }
65
+ }
66
+ if (exportedName === "default" && statement.type === "ExportDefaultDeclaration") {
67
+ const { declaration } = statement;
68
+ if (declaration.type === "Identifier") {
69
+ const importBinding = imports.get(declaration.name);
70
+ if (importBinding) {
71
+ return {
72
+ imported: importBinding.imported,
73
+ kind: "import",
74
+ source: importBinding.source
75
+ };
76
+ }
77
+ const local = locals.get(declaration.name);
78
+ if (local) {
79
+ return {
80
+ expression: local,
81
+ kind: "expression",
82
+ localName: declaration.name
83
+ };
84
+ }
85
+ return null;
86
+ }
87
+ return {
88
+ expression: declaration,
89
+ kind: "expression"
90
+ };
91
+ }
92
+ }
93
+ return null;
94
+ };
95
+ export const exportedLocalName = (program, exportedName) => {
96
+ for (const statement of program.body) {
97
+ if (statement.type === "ExportNamedDeclaration") {
98
+ if (statement.source || statement.declaration) {
99
+ continue;
100
+ }
101
+ for (const specifier of statement.specifiers) {
102
+ if (specifier.type !== "ExportSpecifier") {
103
+ continue;
104
+ }
105
+ const names = getExportSpecifierNames(specifier);
106
+ if (names.exported === exportedName) {
107
+ return names.local;
108
+ }
109
+ }
110
+ }
111
+ if (exportedName === "default" && statement.type === "ExportDefaultDeclaration" && statement.declaration.type === "Identifier") {
112
+ return statement.declaration.name;
113
+ }
114
+ }
115
+ return null;
116
+ };
117
+ export const isIdentifierNamed = (node, name) => node.type === "Identifier" && node.name === name;
118
+ export const enumLiteralValue = (node) => {
119
+ const unwrapped = unwrapExpression(node);
120
+ if (unwrapped.type === "Literal") {
121
+ const { value } = unwrapped;
122
+ return typeof value === "string" || typeof value === "number" ? value : null;
123
+ }
124
+ if (unwrapped.type === "UnaryExpression") {
125
+ const argument = unwrapExpression(unwrapped.argument);
126
+ if ((unwrapped.operator === "-" || unwrapped.operator === "+") && argument.type === "Literal" && typeof argument.value === "number") {
127
+ return unwrapped.operator === "-" ? -argument.value : argument.value;
128
+ }
129
+ }
130
+ return null;
131
+ };
132
+ export const enumMemberKey = (node, computed) => {
133
+ const unwrapped = unwrapExpression(node);
134
+ if (!computed && unwrapped.type === "Identifier") {
135
+ return unwrapped.name;
136
+ }
137
+ const value = enumLiteralValue(unwrapped);
138
+ return typeof value === "string" || typeof value === "number" ? String(value) : null;
139
+ };
140
+ export const enumSimpleAssignment = (node, enumParamName) => {
141
+ const unwrapped = unwrapExpression(node);
142
+ if (unwrapped.type !== "AssignmentExpression" || unwrapped.operator !== "=") {
143
+ return null;
144
+ }
145
+ const left = unwrapExpression(unwrapped.left);
146
+ if (left.type !== "MemberExpression" || !isIdentifierNamed(unwrapExpression(left.object), enumParamName)) {
147
+ return null;
148
+ }
149
+ const key = enumMemberKey(left.property, left.computed);
150
+ const value = enumLiteralValue(unwrapped.right);
151
+ return key !== null && value !== null ? {
152
+ key,
153
+ value
154
+ } : null;
155
+ };
156
+ export const collectEnumIifeAssignments = (call, localName) => {
157
+ const unwrapped = unwrapExpression(call.type === "ExpressionStatement" ? call.expression : call);
158
+ if (unwrapped.type !== "CallExpression" || unwrapped.arguments.length !== 1) {
159
+ return null;
160
+ }
161
+ const callee = unwrapExpression(unwrapped.callee);
162
+ if (callee.type !== "FunctionExpression" || callee.async || !callee.body || callee.params.length !== 1 || callee.params[0]?.type !== "Identifier") {
163
+ return null;
164
+ }
165
+ const enumParamName = callee.params[0].name;
166
+ const argument = unwrapExpression(unwrapped.arguments[0]);
167
+ if (argument.type !== "LogicalExpression" || argument.operator !== "||") {
168
+ return null;
169
+ }
170
+ const fallback = unwrapExpression(argument.right);
171
+ if (!isIdentifierNamed(unwrapExpression(argument.left), localName) || fallback.type !== "AssignmentExpression" || fallback.operator !== "=" || !isIdentifierNamed(unwrapExpression(fallback.left), localName) || unwrapExpression(fallback.right).type !== "ObjectExpression") {
172
+ return null;
173
+ }
174
+ const result = {};
175
+ for (const statement of callee.body.body) {
176
+ if (statement.type !== "ExpressionStatement") {
177
+ return null;
178
+ }
179
+ const expression = unwrapExpression(statement.expression);
180
+ if (expression.type !== "AssignmentExpression" || expression.operator !== "=") {
181
+ return null;
182
+ }
183
+ const left = unwrapExpression(expression.left);
184
+ if (left.type === "MemberExpression" && isIdentifierNamed(unwrapExpression(left.object), enumParamName)) {
185
+ const numericEnumAssignment = enumSimpleAssignment(left.property, enumParamName);
186
+ const reverseValue = enumLiteralValue(expression.right);
187
+ if (numericEnumAssignment && typeof numericEnumAssignment.value === "number" && typeof reverseValue === "string") {
188
+ result[numericEnumAssignment.key] = numericEnumAssignment.value;
189
+ result[String(numericEnumAssignment.value)] = reverseValue;
190
+ continue;
191
+ }
192
+ }
193
+ const assignment = enumSimpleAssignment(expression, enumParamName);
194
+ if (!assignment) {
195
+ return null;
196
+ }
197
+ result[assignment.key] = assignment.value;
198
+ }
199
+ return Object.keys(result).length > 0 ? result : null;
200
+ };
201
+ export const enumIifeLocalName = (statement) => {
202
+ if (statement.type !== "ExpressionStatement") {
203
+ return null;
204
+ }
205
+ const expression = unwrapExpression(statement.expression);
206
+ if (expression.type !== "CallExpression" || expression.arguments.length !== 1) {
207
+ return null;
208
+ }
209
+ const argument = unwrapExpression(expression.arguments[0]);
210
+ if (argument.type !== "LogicalExpression" || argument.operator !== "||") {
211
+ return null;
212
+ }
213
+ const fallback = unwrapExpression(argument.right);
214
+ if (argument.left.type !== "Identifier" || fallback.type !== "AssignmentExpression" || fallback.left.type !== "Identifier") {
215
+ return null;
216
+ }
217
+ return argument.left.name === fallback.left.name ? argument.left.name : null;
218
+ };
219
+ export const isEnumVarDeclaration = (statement) => statement.type === "VariableDeclaration" && statement.kind === "var" && statement.declarations.length > 0 && statement.declarations.every((declarator) => declarator.id.type === "Identifier" && declarator.init === null);
220
+ export const isTypeScriptEnumOnlyModule = (program) => program.body.every((statement) => {
221
+ if (isEnumVarDeclaration(statement)) {
222
+ return true;
223
+ }
224
+ const localName = enumIifeLocalName(statement);
225
+ if (localName) {
226
+ return collectEnumIifeAssignments(statement, localName) !== null;
227
+ }
228
+ if (statement.type === "ExportDefaultDeclaration") {
229
+ return statement.declaration.type === "Identifier";
230
+ }
231
+ return statement.type === "ExportNamedDeclaration" && !statement.source && !statement.declaration && statement.specifiers.every((specifier) => specifier.type === "ExportSpecifier");
232
+ });
233
+ export const typeScriptEnumStaticExportValue = (program, exportedName) => {
234
+ if (!isTypeScriptEnumOnlyModule(program)) {
235
+ return null;
236
+ }
237
+ const localName = exportedLocalName(program, exportedName);
238
+ if (!localName) {
239
+ return null;
240
+ }
241
+ const hasDeclaration = program.body.some((statement) => isEnumVarDeclaration(statement) && statement.declarations.some((declarator) => declarator.id.type === "Identifier" && declarator.id.name === localName));
242
+ if (!hasDeclaration) {
243
+ return null;
244
+ }
245
+ for (const statement of program.body) {
246
+ const enumValue = collectEnumIifeAssignments(statement, localName);
247
+ if (enumValue) {
248
+ return enumValue;
249
+ }
250
+ }
251
+ return null;
252
+ };
253
+ //# sourceMappingURL=exportTargets.js.map