@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
@@ -1 +1 @@
1
- {"mappings":"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","names":[],"sources":["../../../src/transform/generators/resolveStaticOxcValues.ts"],"version":3,"sourcesContent":["/* eslint-disable no-restricted-syntax,no-continue,@typescript-eslint/no-use-before-define */\n\nimport { createHash } from 'crypto';\nimport { readFileSync, statSync } from 'fs';\nimport { dirname, isAbsolute, relative, resolve as resolvePath } from 'path';\n\nimport { isFeatureEnabled, type FeatureFlag } from '@wyw-in-js/shared';\nimport type {\n ExportSpecifier,\n Expression,\n ImportDeclaration,\n ImportSpecifier,\n ModuleExportName,\n Node,\n Program,\n VariableDeclaration,\n} from 'oxc-parser';\n\nimport { oxcShaker } from '../../shaker';\nimport { collectOxcProcessorImportsFromProgram } from '../../utils/collectOxcExportsAndImports';\nimport {\n createOxcStaticCallableValue,\n evaluateOxcStaticExpression,\n evaluateOxcStaticExpressionAt,\n isOxcStaticSerializableValue,\n type OxcStaticValueCandidate,\n} from '../../utils/collectOxcTemplateDependencies';\nimport {\n appendOxcWywPreval,\n runOxcPreevalStage,\n} from '../../utils/oxcPreevalStage';\nimport { parseOxcProgramCached } from '../../utils/parseOxc';\nimport { stripQueryAndHash } from '../../utils/parseRequest';\nimport { getProcessorForImport } from '../../utils/processorLookup';\nimport { Entrypoint } from '../Entrypoint';\nimport type { IEntrypointDependency } from '../Entrypoint.types';\nimport type { ITransformAction, SyncScenarioFor } from '../types';\n\ntype AnyNode = Node & Record<string, unknown>;\n\ntype ImportBinding = {\n imported: '*' | 'default' | string;\n local: string;\n source: string;\n};\n\ntype CollectImportBindingsOptions = {\n includeNamespace?: boolean;\n};\n\ntype ExportTarget =\n | {\n expression: Expression;\n kind: 'expression';\n localName?: string;\n }\n | {\n imported: 'default' | string;\n kind: 'import';\n source: string;\n };\n\ntype StaticExportResult = {\n callable?: 'zero-arg';\n dependencies: string[];\n sideEffectDependencies?: string[];\n sideEffectImportLocals?: string[];\n value: unknown;\n};\n\ntype StaticFileAnalysis = {\n code: string;\n codeHash: string;\n program: Program;\n};\n\ntype StaticFileHashCacheEntry = {\n hash: string;\n mtimeMs: number;\n size: number;\n};\n\ntype StaticMetadataPreevalCacheEntry =\n | {\n result: null;\n }\n | {\n result: ReturnType<typeof runOxcPreevalStage>;\n };\n\n// Null entries carry an attempt counter so we can retry a bounded number of\n// times before accepting the failure as stable. This avoids both:\n// (a) poisoning the cache forever from a transient resolver failure\n// (b) thundering-herd retries where every consumer re-walks a stable miss\ntype StaticExportCacheEntry =\n | {\n attempts: number;\n result: null;\n }\n | {\n dependencyHashes: Map<string, string>;\n result: StaticExportResult;\n };\n\nconst STATIC_EXPORT_MAX_NULL_ATTEMPTS = 2;\n\ntype StaticImportValueFeatures = {\n staticImportValues?: FeatureFlag;\n};\n\ntype StaticExpressionOptions = {\n allowMetadataCalls?: boolean;\n ignoredMutableCallArgumentNames?: Set<string>;\n};\n\ntype StaticResolveDebugPhase =\n | 'candidate'\n | 'entrypoint'\n | 'export'\n | 'import'\n | 'processor-metadata';\n\ntype StaticResolveDebugStatus = 'rejected' | 'resolved' | 'skipped';\n\ntype StaticResolveDebugEvent = {\n candidate?: string;\n dependency?: string;\n exported?: string;\n filename: string;\n imported?: string;\n importer?: string;\n phase: StaticResolveDebugPhase;\n reason?: string;\n source?: string;\n status: StaticResolveDebugStatus;\n};\n\nconst isInsideRoot = (filename: string, root: string): boolean => {\n const relativePath = relative(root, filename);\n return (\n relativePath === '' ||\n (!!relativePath &&\n !relativePath.startsWith('..') &&\n !isAbsolute(relativePath))\n );\n};\n\nconst nodeModulesPattern = /[\\\\/]node_modules[\\\\/]/;\n\nconst isLocalStaticMetadataFile = (filename: string, root: string): boolean => {\n const strippedFilename = stripQueryAndHash(filename);\n if (isInsideRoot(strippedFilename, root)) {\n return true;\n }\n\n return (\n isAbsolute(strippedFilename) && !nodeModulesPattern.test(strippedFilename)\n );\n};\n\nconst isEnvDisabled = (value: string): boolean =>\n value === '0' || value === 'false' || value === 'no' || value === 'off';\n\nconst isStaticImportValuesEnabled = (\n action: ITransformAction,\n filename: string\n): boolean => {\n const envValue = process.env.WYW_STATIC_IMPORT_VALUES?.trim().toLowerCase();\n if (envValue) {\n return !isEnvDisabled(envValue);\n }\n\n return isFeatureEnabled(\n action.services.options.pluginOptions.features as StaticImportValueFeatures,\n 'staticImportValues',\n filename\n );\n};\n\nconst debugStaticResolve = (\n action: ITransformAction,\n event: StaticResolveDebugEvent\n): void => {\n const labels = Object.fromEntries(\n Object.entries({\n ...event,\n type: 'staticResolve',\n }).filter(([, value]) => value !== undefined)\n );\n\n action.services.eventEmitter.single(labels);\n};\n\nconst parseProgram = (code: string, filename: string): Program =>\n parseOxcProgramCached(filename, code, 'unambiguous');\n\nconst staticFileAnalysisCaches = new WeakMap<\n object,\n Map<string, StaticFileAnalysis>\n>();\n\nconst staticFileHashCaches = new WeakMap<\n object,\n Map<string, StaticFileHashCacheEntry>\n>();\n\nconst staticExportResultCaches = new WeakMap<\n object,\n Map<string, StaticExportCacheEntry>\n>();\n\nconst staticMetadataPreevalCaches = new WeakMap<\n object,\n Map<string, StaticMetadataPreevalCacheEntry>\n>();\n\nconst hashStaticContent = (content: string | Buffer): string =>\n createHash('sha256').update(content).digest('hex');\n\nconst getWeakCacheMap = <TValue>(\n caches: WeakMap<object, Map<string, TValue>>,\n key: object\n): Map<string, TValue> => {\n let cache = caches.get(key);\n if (!cache) {\n cache = new Map();\n caches.set(key, cache);\n }\n\n return cache;\n};\n\nconst isStaticResolveCacheEnabled = (): boolean => {\n const envValue = process.env.WYW_STATIC_RESOLVE_CACHE?.trim().toLowerCase();\n if (envValue) {\n return !isEnvDisabled(envValue);\n }\n\n return true;\n};\n\nconst staticCachePrefix = (action: ITransformAction): string =>\n `${action.services.cache.getKeySalt() ?? ''}\\0${\n action.services.options.root ?? ''\n }`;\n\nconst staticFileAnalysisCache = (\n action: ITransformAction\n): Map<string, StaticFileAnalysis> =>\n getWeakCacheMap(staticFileAnalysisCaches, action.services.cache);\n\nconst staticFileHashCache = (\n action: ITransformAction\n): Map<string, StaticFileHashCacheEntry> =>\n getWeakCacheMap(staticFileHashCaches, action.services.cache);\n\nconst staticExportResultCache = (\n action: ITransformAction\n): Map<string, StaticExportCacheEntry> =>\n getWeakCacheMap(staticExportResultCaches, action.services.cache);\n\nconst staticMetadataPreevalCache = (\n action: ITransformAction\n): Map<string, StaticMetadataPreevalCacheEntry> =>\n getWeakCacheMap(staticMetadataPreevalCaches, action.services.cache);\n\nconst staticFileAnalysisCacheKey = (\n action: ITransformAction,\n filename: string,\n codeHash: string\n): string => `${staticCachePrefix(action)}\\0${filename}\\0${codeHash}`;\n\nconst staticExportCacheKey = (\n action: ITransformAction,\n filename: string,\n exportedName: string,\n codeHash: string\n): string =>\n `${staticCachePrefix(action)}\\0${filename}\\0${exportedName}\\0${codeHash}`;\n\nconst staticMetadataPreevalCacheKey = (\n action: ITransformAction,\n filename: string,\n codeHash: string\n): string => `${staticCachePrefix(action)}\\0${filename}\\0${codeHash}`;\n\nconst getStaticFileContentHash = (\n action: ITransformAction,\n dependency: string\n): string | null => {\n const filename = stripQueryAndHash(dependency);\n if (!isAbsolute(filename)) {\n return null;\n }\n\n let stat;\n try {\n stat = statSync(filename);\n } catch {\n return null;\n }\n\n if (!stat.isFile()) {\n return null;\n }\n\n const cache = staticFileHashCache(action);\n const cached = cache.get(filename);\n if (cached && cached.mtimeMs === stat.mtimeMs && cached.size === stat.size) {\n return cached.hash;\n }\n\n let hash: string;\n try {\n hash = hashStaticContent(readFileSync(filename));\n } catch {\n return null;\n }\n\n cache.set(filename, {\n hash,\n mtimeMs: stat.mtimeMs,\n size: stat.size,\n });\n return hash;\n};\n\nconst collectStaticDependencyHashes = (\n action: ITransformAction,\n dependencies: string[]\n): Map<string, string> | null => {\n const hashes = new Map<string, string>();\n for (const dependency of dependencies) {\n const hash = getStaticFileContentHash(action, dependency);\n if (!hash) {\n return null;\n }\n\n hashes.set(stripQueryAndHash(dependency), hash);\n }\n\n return hashes;\n};\n\nconst areStaticDependencyHashesCurrent = (\n action: ITransformAction,\n dependencyHashes: Map<string, string>\n): boolean => {\n for (const [dependency, expectedHash] of dependencyHashes) {\n if (getStaticFileContentHash(action, dependency) !== expectedHash) {\n return false;\n }\n }\n\n return true;\n};\n\nconst getStaticExportCachedResult = (\n action: ITransformAction,\n filename: string,\n exportedName: string,\n codeHash: string\n): StaticExportResult | null | undefined => {\n if (!isStaticResolveCacheEnabled()) {\n return undefined;\n }\n\n const cache = staticExportResultCache(action);\n const cacheKey = staticExportCacheKey(\n action,\n filename,\n exportedName,\n codeHash\n );\n const cached = cache.get(cacheKey);\n if (!cached) {\n return undefined;\n }\n\n if (cached.result === null) {\n // Bounded retry: until the attempt counter has been bumped enough times\n // that we accept the null as stable, treat it as a cache miss so the\n // caller re-walks. The counter is updated in setStaticExportCachedResult.\n if (cached.attempts < STATIC_EXPORT_MAX_NULL_ATTEMPTS) {\n return undefined;\n }\n return null;\n }\n\n if (areStaticDependencyHashesCurrent(action, cached.dependencyHashes)) {\n return cached.result;\n }\n\n cache.delete(cacheKey);\n return undefined;\n};\n\nconst setStaticExportCachedResult = (\n action: ITransformAction,\n filename: string,\n exportedName: string,\n codeHash: string,\n result: StaticExportResult | null\n): void => {\n if (!isStaticResolveCacheEnabled()) {\n return;\n }\n\n const cache = staticExportResultCache(action);\n const cacheKey = staticExportCacheKey(\n action,\n filename,\n exportedName,\n codeHash\n );\n if (!result) {\n const existing = cache.get(cacheKey);\n const attempts =\n existing && existing.result === null ? existing.attempts + 1 : 1;\n cache.set(cacheKey, { attempts, result: null });\n return;\n }\n\n const dependencyHashes = collectStaticDependencyHashes(\n action,\n result.dependencies\n );\n if (!dependencyHashes) {\n return;\n }\n\n cache.set(cacheKey, {\n dependencyHashes,\n result,\n });\n};\n\nconst getStaticFileAnalysis = (\n action: ITransformAction,\n filename: string\n): StaticFileAnalysis | null => {\n const loadedAndParsed = action.services.loadAndParseFn(\n action.services,\n filename,\n undefined,\n action.services.log\n );\n if (\n loadedAndParsed.evaluator === 'ignored' ||\n loadedAndParsed.evaluator !== oxcShaker\n ) {\n return null;\n }\n\n const { code } = loadedAndParsed;\n const codeHash = hashStaticContent(code);\n const cache = staticFileAnalysisCache(action);\n const cacheKey = staticFileAnalysisCacheKey(action, filename, codeHash);\n const cached = cache.get(cacheKey);\n if (cached) {\n return cached;\n }\n\n const analysis = {\n code,\n codeHash,\n program: parseProgram(code, filename),\n };\n cache.set(cacheKey, analysis);\n return analysis;\n};\n\nconst getStaticMetadataPreevalResult = (\n action: ITransformAction,\n filename: string,\n code: string,\n codeHash: string\n): ReturnType<typeof runOxcPreevalStage> | null => {\n const cache = staticMetadataPreevalCache(action);\n const cacheKey = staticMetadataPreevalCacheKey(action, filename, codeHash);\n const cached = cache.get(cacheKey);\n if (cached) {\n return cached.result;\n }\n\n const root = action.services.options.root ?? process.cwd();\n try {\n const result = action.services.eventEmitter.perf(\n 'transform:preeval:staticMetadata',\n () =>\n runOxcPreevalStage(\n code,\n {\n filename,\n root,\n },\n {\n ...action.services.options.pluginOptions,\n eventEmitter: action.services.eventEmitter,\n }\n )\n );\n cache.set(cacheKey, { result });\n return result;\n } catch {\n cache.set(cacheKey, { result: null });\n return null;\n }\n};\n\nconst getChildren = (node: Node): Node[] => {\n const children: Node[] = [];\n Object.entries(node as AnyNode).forEach(([key, value]) => {\n if (\n key === 'comments' ||\n key === 'errors' ||\n key === 'parent' ||\n key === 'span'\n ) {\n return;\n }\n\n if (Array.isArray(value)) {\n value.forEach((item) => {\n if (item && typeof item === 'object' && 'type' in item) {\n children.push(item as Node);\n }\n });\n return;\n }\n\n if (value && typeof value === 'object' && 'type' in value) {\n children.push(value as Node);\n }\n });\n\n return children;\n};\n\nconst moduleExportName = (node: ModuleExportName): string =>\n node.type === 'Literal' ? String(node.value) : node.name;\n\nconst unwrapExpression = (expr: Node): Node => {\n let current = expr;\n\n for (;;) {\n if (\n current.type === 'TSAsExpression' ||\n current.type === 'TSSatisfiesExpression' ||\n current.type === 'TSNonNullExpression' ||\n current.type === 'TSInstantiationExpression' ||\n current.type === 'TSTypeAssertion' ||\n current.type === 'ParenthesizedExpression'\n ) {\n current = current.expression;\n continue;\n }\n\n return current;\n }\n};\n\nconst isProcessEnvMember = (node: Node): boolean => {\n if (node.type !== 'MemberExpression' || node.computed) {\n return false;\n }\n\n if (node.property.type !== 'Identifier' || node.property.name !== 'env') {\n return false;\n }\n\n return node.object.type === 'Identifier' && node.object.name === 'process';\n};\n\nconst isSafeLiteral = (\n node: Node\n): node is Node & {\n type: 'Literal';\n value: boolean | null | number | string;\n} => {\n if (node.type !== 'Literal') {\n return false;\n }\n\n const { value } = node as AnyNode;\n return (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n );\n};\n\nconst isSafeStaticExpression = (\n expr: Node,\n options: StaticExpressionOptions = {}\n): boolean => {\n const unwrapped = unwrapExpression(expr);\n\n if (isSafeLiteral(unwrapped)) {\n return true;\n }\n\n if (unwrapped.type === 'Identifier') {\n return true;\n }\n\n if (unwrapped.type === 'TemplateLiteral') {\n return unwrapped.expressions.every((item) =>\n isSafeStaticExpression(item, options)\n );\n }\n\n if (unwrapped.type === 'UnaryExpression') {\n return isSafeStaticExpression(unwrapped.argument, options);\n }\n\n if (\n unwrapped.type === 'BinaryExpression' ||\n unwrapped.type === 'LogicalExpression'\n ) {\n return (\n isSafeStaticExpression(unwrapped.left, options) &&\n isSafeStaticExpression(unwrapped.right, options)\n );\n }\n\n if (unwrapped.type === 'ConditionalExpression') {\n return (\n isSafeStaticExpression(unwrapped.test, options) &&\n isSafeStaticExpression(unwrapped.consequent, options) &&\n isSafeStaticExpression(unwrapped.alternate, options)\n );\n }\n\n if (unwrapped.type === 'MemberExpression') {\n return (\n isSafeStaticExpression(unwrapped.object, options) &&\n (unwrapped.computed\n ? isSafeStaticExpression(unwrapped.property, options)\n : unwrapped.property.type === 'Identifier')\n );\n }\n\n if (options.allowMetadataCalls && unwrapped.type === 'CallExpression') {\n return (\n unwrapped.callee.type === 'Identifier' && unwrapped.arguments.length === 0\n );\n }\n\n if (\n options.allowMetadataCalls &&\n (unwrapped.type === 'ArrowFunctionExpression' ||\n unwrapped.type === 'FunctionExpression')\n ) {\n return (\n !unwrapped.async &&\n unwrapped.params.length === 0 &&\n !!unwrapped.body &&\n isSafeFunctionBodyExpression(unwrapped.body, options)\n );\n }\n\n if (unwrapped.type === 'ArrayExpression') {\n return unwrapped.elements.every((item) => {\n if (!item) {\n return false;\n }\n\n return item.type === 'SpreadElement'\n ? isSafeStaticExpression(item.argument, options)\n : isSafeStaticExpression(item, options);\n });\n }\n\n if (unwrapped.type === 'ObjectExpression') {\n return unwrapped.properties.every((property) => {\n if (property.type === 'SpreadElement') {\n return isSafeStaticExpression(property.argument);\n }\n\n const propertyNode = property as AnyNode;\n if (propertyNode.computed || propertyNode.method) {\n return false;\n }\n\n return (\n propertyNode.value &&\n typeof propertyNode.value === 'object' &&\n isSafeStaticExpression(propertyNode.value as Node, options)\n );\n });\n }\n\n return false;\n};\n\nconst isTypeOnlyImport = (statement: ImportDeclaration): boolean => {\n if (statement.importKind === 'type') {\n return true;\n }\n\n return statement.specifiers.every(\n (specifier) =>\n specifier.type === 'ImportSpecifier' &&\n (specifier as ImportSpecifier).importKind === 'type'\n );\n};\n\nconst getImportBinding = (\n statement: ImportDeclaration,\n specifier: ImportDeclaration['specifiers'][number],\n options: CollectImportBindingsOptions = {}\n): ImportBinding | null => {\n const local = specifier.local?.name;\n if (!local) {\n return null;\n }\n\n if (specifier.type === 'ImportNamespaceSpecifier') {\n return options.includeNamespace\n ? {\n imported: '*',\n local,\n source: statement.source.value,\n }\n : null;\n }\n\n if (specifier.type === 'ImportDefaultSpecifier') {\n return {\n imported: 'default',\n local,\n source: statement.source.value,\n };\n }\n\n if (specifier.type !== 'ImportSpecifier') {\n return null;\n }\n\n if (\n statement.importKind === 'type' ||\n (specifier as ImportSpecifier).importKind === 'type'\n ) {\n return null;\n }\n\n return {\n imported: moduleExportName((specifier as ImportSpecifier).imported),\n local,\n source: statement.source.value,\n };\n};\n\nconst collectImportBindings = (\n program: Program,\n options: CollectImportBindingsOptions = {}\n): Map<string, ImportBinding> => {\n const result = new Map<string, ImportBinding>();\n\n program.body.forEach((statement) => {\n if (statement.type !== 'ImportDeclaration' || isTypeOnlyImport(statement)) {\n return;\n }\n\n statement.specifiers.forEach((specifier) => {\n const binding = getImportBinding(statement, specifier, options);\n if (binding) {\n result.set(binding.local, binding);\n }\n });\n });\n\n return result;\n};\n\ntype Range = {\n end: number;\n start: number;\n};\n\ntype Replacement = Range & {\n text: string;\n};\n\nconst applyReplacements = (\n code: string,\n replacements: Replacement[]\n): string => {\n let result = code;\n replacements\n .sort((a, b) => b.start - a.start)\n .forEach((replacement) => {\n result =\n result.slice(0, replacement.start) +\n replacement.text +\n result.slice(replacement.end);\n });\n return result;\n};\n\nconst isIdentifierBindingPosition = (\n node: Node,\n parent: Node | null\n): boolean => {\n if (node.type !== 'Identifier' || !parent) {\n return false;\n }\n\n if (\n (parent.type === 'VariableDeclarator' && parent.id === node) ||\n (parent.type === 'FunctionDeclaration' && parent.id === node) ||\n (parent.type === 'FunctionExpression' && parent.id === node) ||\n (parent.type === 'ClassDeclaration' && parent.id === node) ||\n (parent.type === 'ClassExpression' && parent.id === node)\n ) {\n return true;\n }\n\n if (\n (parent.type === 'ArrowFunctionExpression' ||\n parent.type === 'FunctionDeclaration' ||\n parent.type === 'FunctionExpression') &&\n parent.params.some((param) => param === node)\n ) {\n return true;\n }\n\n return (\n (parent.type === 'ImportSpecifier' && parent.local === node) ||\n (parent.type === 'ImportDefaultSpecifier' && parent.local === node) ||\n (parent.type === 'ImportNamespaceSpecifier' && parent.local === node)\n );\n};\n\nconst isPropertyKeyOnlyIdentifier = (\n node: Node,\n parent: Node | null\n): boolean =>\n node.type === 'Identifier' &&\n !!parent &&\n ((parent.type === 'MemberExpression' &&\n parent.property === node &&\n !parent.computed) ||\n (parent.type === 'Property' &&\n parent.key === node &&\n !parent.computed &&\n !parent.shorthand));\n\nconst collectUsedIdentifierNames = (program: Program): Set<string> => {\n const used = new Set<string>();\n\n const walk = (node: Node, parent: Node | null): void => {\n if (node.type === 'ImportDeclaration') {\n return;\n }\n\n if (\n node.type === 'Identifier' &&\n !isIdentifierBindingPosition(node, parent) &&\n !isPropertyKeyOnlyIdentifier(node, parent)\n ) {\n used.add(node.name);\n }\n\n getChildren(node).forEach((child) => walk(child, node));\n };\n\n walk(program, null);\n return used;\n};\n\nconst removableStaticHelperNames = (\n program: Program,\n staticValueNames: Set<string>\n): Set<string> => {\n const used = collectUsedIdentifierNames(program);\n const result = new Set<string>();\n\n program.body.forEach((statement) => {\n if (statement.type !== 'VariableDeclaration') {\n return;\n }\n\n statement.declarations.forEach((declarator) => {\n if (\n declarator.id.type === 'Identifier' &&\n staticValueNames.has(declarator.id.name) &&\n !used.has(declarator.id.name)\n ) {\n result.add(declarator.id.name);\n }\n });\n });\n\n return result;\n};\n\nconst collectImportLocalReferences = (\n node: Node,\n importLocals: Set<string>,\n result: Set<string>\n): void => {\n const walk = (item: Node, parent: Node | null): void => {\n if (\n item.type === 'Identifier' &&\n importLocals.has(item.name) &&\n !isIdentifierBindingPosition(item, parent) &&\n !isPropertyKeyOnlyIdentifier(item, parent)\n ) {\n result.add(item.name);\n }\n\n getChildren(item).forEach((child) => walk(child, item));\n };\n\n walk(node, null);\n};\n\nconst parseStaticExpressionSource = (\n source: string,\n filename: string\n): Expression | null => {\n try {\n const program = parseProgram(\n `const __wyw_static_value = ${source};`,\n filename\n );\n const declaration = program.body[0];\n if (declaration?.type !== 'VariableDeclaration') {\n return null;\n }\n\n const [declarator] = declaration.declarations;\n return declarator?.init ?? null;\n } catch {\n return null;\n }\n};\n\nconst expressionUsesNameOnlyAsZeroArgCalls = (\n expression: Node,\n name: string\n): boolean => {\n let seen = false;\n let valid = true;\n\n const walk = (node: Node, parent: Node | null): void => {\n if (!valid) {\n return;\n }\n\n if (\n node.type === 'Identifier' &&\n node.name === name &&\n !isIdentifierBindingPosition(node, parent) &&\n !isPropertyKeyOnlyIdentifier(node, parent)\n ) {\n if (\n parent?.type === 'CallExpression' &&\n parent.callee === node &&\n parent.arguments.length === 0\n ) {\n seen = true;\n } else {\n valid = false;\n return;\n }\n }\n\n getChildren(node).forEach((child) => walk(child, node));\n };\n\n walk(expression, null);\n return seen && valid;\n};\n\nconst bindStaticResolvedValue = (\n env: Map<string, unknown>,\n expression: Node,\n local: string,\n resolved: StaticExportResult,\n options: { wrapNonCallable?: boolean } = {}\n): boolean => {\n if (resolved.callable === 'zero-arg') {\n if (!expressionUsesNameOnlyAsZeroArgCalls(expression, local)) {\n return false;\n }\n\n env.set(local, createOxcStaticCallableValue(resolved.value));\n return true;\n }\n\n env.set(\n local,\n options.wrapNonCallable\n ? createOxcStaticCallableValue(resolved.value)\n : resolved.value\n );\n return true;\n};\n\nconst removeStaticHelperDeclarations = (\n code: string,\n filename: string,\n staticValueNames: Set<string>\n): { code: string; removed: Set<string>; removedImportLocals: Set<string> } => {\n if (staticValueNames.size === 0) {\n return { code, removed: new Set(), removedImportLocals: new Set() };\n }\n\n const program = parseProgram(code, filename);\n const removableNames = removableStaticHelperNames(program, staticValueNames);\n const importLocals = new Set<string>();\n collectImportBindings(program).forEach((_, local) => importLocals.add(local));\n const removedImportLocals = new Set<string>();\n const ranges: Range[] = [];\n const replacements: Replacement[] = [];\n\n program.body.forEach((statement) => {\n if (\n statement.type !== 'VariableDeclaration' ||\n statement.declarations.length === 0\n ) {\n return;\n }\n\n const removableIndexes = statement.declarations.flatMap(\n (declarator, index) =>\n declarator.id.type === 'Identifier' &&\n removableNames.has(declarator.id.name)\n ? [index]\n : []\n );\n if (removableIndexes.length === 0) {\n return;\n }\n\n removableIndexes.forEach((index) => {\n collectImportLocalReferences(\n statement.declarations[index],\n importLocals,\n removedImportLocals\n );\n });\n\n if (removableIndexes.length === statement.declarations.length) {\n ranges.push({\n end: statement.end,\n start: statement.start,\n });\n return;\n }\n\n const keptDeclarations = statement.declarations\n .filter((_, index) => !removableIndexes.includes(index))\n .map((declarator) => code.slice(declarator.start, declarator.end));\n replacements.push({\n end: statement.end,\n start: statement.start,\n text: `${statement.kind} ${keptDeclarations.join(', ')};`,\n });\n });\n\n return {\n code: applyReplacements(code, [\n ...ranges.map((range) => ({ ...range, text: '' })),\n ...replacements,\n ]),\n removed: removableNames,\n removedImportLocals,\n };\n};\n\nconst importSpecifierLocalName = (\n specifier: ImportDeclaration['specifiers'][number]\n): string | null => specifier.local?.name ?? null;\n\nconst removeUnusedStaticImports = (\n code: string,\n filename: string,\n staticImportLocals: Set<string>,\n sideEffectImportLocals: Set<string>\n): string => {\n if (staticImportLocals.size === 0) {\n return code;\n }\n\n const program = parseProgram(code, filename);\n const used = collectUsedIdentifierNames(program);\n const ranges: Range[] = [];\n const replacements: Replacement[] = [];\n\n program.body.forEach((statement) => {\n if (\n statement.type !== 'ImportDeclaration' ||\n statement.specifiers.length === 0\n ) {\n return;\n }\n\n const removable = statement.specifiers.flatMap((specifier, index) => {\n const localName = importSpecifierLocalName(specifier);\n return localName &&\n staticImportLocals.has(localName) &&\n !used.has(localName)\n ? [{ index, localName }]\n : [];\n });\n\n if (removable.length === 0) {\n return;\n }\n\n if (removable.length === statement.specifiers.length) {\n if (\n removable.some((item) => sideEffectImportLocals.has(item.localName))\n ) {\n replacements.push({\n end: statement.end,\n start: statement.start,\n text: `import ${code.slice(\n statement.source.start,\n statement.source.end\n )};`,\n });\n return;\n }\n\n ranges.push({\n end: statement.end,\n start: statement.start,\n });\n }\n });\n\n return applyReplacements(code, [\n ...ranges.map((range) => ({ ...range, text: '' })),\n ...replacements,\n ]);\n};\n\nconst replaceStaticWYWMetaExtendsHelpers = (\n code: string,\n filename: string,\n helperValues: Map<string, unknown>\n): string => {\n if (helperValues.size === 0) {\n return code;\n }\n\n const program = parseProgram(code, filename);\n const replacements: Replacement[] = [];\n\n const visit = (node: Node): void => {\n if (node.type === 'ObjectExpression') {\n const extendsExpression = findWYWMetaExtendsExpression(node);\n if (extendsExpression) {\n const unwrapped = unwrapExpression(extendsExpression);\n if (\n unwrapped.type === 'CallExpression' &&\n unwrapped.callee.type === 'Identifier' &&\n unwrapped.arguments.length === 0 &&\n helperValues.has(unwrapped.callee.name)\n ) {\n const replacement = staticWYWMetaExtendsReplacementCode(\n helperValues.get(unwrapped.callee.name)\n );\n if (replacement) {\n replacements.push({\n end: extendsExpression.end,\n start: extendsExpression.start,\n text: replacement,\n });\n }\n }\n }\n }\n\n getChildren(node).forEach(visit);\n };\n\n visit(program);\n return applyReplacements(code, replacements);\n};\n\nconst pruneStaticPreevalCode = (\n code: string,\n filename: string,\n staticValueNames: Set<string>,\n staticImportLocals: Set<string>,\n staticExtendsHelperValues: Map<string, unknown>,\n sideEffectImportLocals: Set<string>\n): string => {\n const codeWithMetadataPruned = replaceStaticWYWMetaExtendsHelpers(\n code,\n filename,\n staticExtendsHelperValues\n );\n const helpersRemoved = removeStaticHelperDeclarations(\n codeWithMetadataPruned,\n filename,\n staticValueNames\n );\n if (helpersRemoved.removed.size === 0) {\n return codeWithMetadataPruned;\n }\n\n const importLocalsToPrune = new Set([\n ...staticImportLocals,\n ...helpersRemoved.removedImportLocals,\n ]);\n\n return removeUnusedStaticImports(\n helpersRemoved.code,\n filename,\n importLocalsToPrune,\n sideEffectImportLocals\n );\n};\n\nconst collectProcessorImportLocals = (\n action: ITransformAction,\n program: Program,\n code: string,\n filename: string\n): Set<string> => {\n const result = new Set<string>();\n\n collectOxcProcessorImportsFromProgram(program, code).forEach((item) => {\n if (\n item.type !== 'esm' ||\n item.imported === '*' ||\n item.imported === 'side-effect'\n ) {\n return;\n }\n\n const localName = item.local.name ?? item.local.code;\n if (!localName) {\n return;\n }\n\n const [processor] = getProcessorForImport(\n {\n imported: item.imported,\n source: item.source,\n },\n filename,\n action.services.options.pluginOptions\n );\n\n if (!processor) {\n return;\n }\n\n result.add(localName);\n const rootLocalName = localName.split('.')[0];\n if (rootLocalName) {\n result.add(rootLocalName);\n }\n });\n\n return result;\n};\n\nconst isStaticWYWMetaValue = (\n value: unknown,\n seen: Set<unknown> = new Set()\n): boolean => {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n\n if (seen.has(value)) {\n return false;\n }\n seen.add(value);\n\n const meta = (value as { __wyw_meta?: unknown }).__wyw_meta;\n if (typeof meta !== 'object' || meta === null) {\n return false;\n }\n\n const { className, extends: extended } = meta as {\n className?: unknown;\n extends?: unknown;\n };\n\n return (\n typeof className === 'string' &&\n (extended === null || isStaticWYWMetaValue(extended, seen))\n );\n};\n\ntype StaticWYWSelectorMetaValue = {\n __wyw_meta: {\n className: string;\n extends: StaticWYWSelectorMetaValue | null;\n };\n};\n\nconst toStaticWYWSelectorMetaValue = (\n value: unknown,\n seen: Set<unknown> = new Set()\n): StaticWYWSelectorMetaValue | null => {\n if (typeof value !== 'object' || value === null || seen.has(value)) {\n return null;\n }\n\n seen.add(value);\n\n const meta = (value as { __wyw_meta?: unknown }).__wyw_meta;\n if (typeof meta !== 'object' || meta === null) {\n return null;\n }\n\n const { className, extends: extended } = meta as {\n className?: unknown;\n extends?: unknown;\n };\n if (typeof className !== 'string') {\n return null;\n }\n\n const staticExtends =\n extended === null ? null : toStaticWYWSelectorMetaValue(extended, seen);\n if (extended !== null && staticExtends === null) {\n return null;\n }\n\n return {\n __wyw_meta: {\n className,\n extends: staticExtends,\n },\n };\n};\n\nconst staticWYWMetaExtendsReplacementCode = (value: unknown): string | null => {\n if (value === null) {\n return 'null';\n }\n\n const selectorMeta = toStaticWYWSelectorMetaValue(value);\n return selectorMeta ? `(${JSON.stringify(selectorMeta)})` : null;\n};\n\nconst staticWYWMetaTreeValueStatus = (\n value: unknown,\n seen: Set<unknown> = new Set()\n): { hasMetadata: boolean; safe: boolean } => {\n if (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ) {\n return {\n hasMetadata: false,\n safe: true,\n };\n }\n\n if (typeof value !== 'object') {\n return {\n hasMetadata: false,\n safe: false,\n };\n }\n\n if (seen.has(value)) {\n return {\n hasMetadata: false,\n safe: false,\n };\n }\n seen.add(value);\n\n if (Array.isArray(value)) {\n let hasMetadata = false;\n for (const item of value) {\n const status = staticWYWMetaTreeValueStatus(item, seen);\n if (!status.safe) {\n return {\n hasMetadata: false,\n safe: false,\n };\n }\n\n hasMetadata = hasMetadata || status.hasMetadata;\n }\n\n return {\n hasMetadata,\n safe: true,\n };\n }\n\n if ('__wyw_meta' in value) {\n return {\n hasMetadata: isStaticWYWMetaValue(value),\n safe: isStaticWYWMetaValue(value),\n };\n }\n\n let hasMetadata = false;\n for (const item of Object.values(value)) {\n const status = staticWYWMetaTreeValueStatus(item, seen);\n if (!status.safe) {\n return {\n hasMetadata: false,\n safe: false,\n };\n }\n\n hasMetadata = hasMetadata || status.hasMetadata;\n }\n\n return {\n hasMetadata,\n safe: true,\n };\n};\n\nconst isStaticWYWMetaTreeValue = (value: unknown): boolean => {\n const status = staticWYWMetaTreeValueStatus(value);\n return status.safe && status.hasMetadata;\n};\n\ntype StaticProcessorInstance = {\n artifacts: unknown[];\n build: (values: Map<string, unknown>) => void;\n className: string;\n};\n\nconst isPlainObjectRecord = (\n value: unknown\n): value is Record<string, unknown> =>\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n Object.getPrototypeOf(value) === Object.prototype;\n\nconst isStaticObjectAssignAliasValue = (value: unknown): boolean =>\n isStaticWYWMetaValue(value) || isStaticWYWMetaTreeValue(value);\n\nconst artifactCssText = (artifact: unknown): string | null => {\n if (!Array.isArray(artifact) || artifact[0] !== 'css') {\n return null;\n }\n\n const payload = artifact[1];\n if (Array.isArray(payload)) {\n const [rules] = payload;\n if (typeof rules === 'object' && rules !== null) {\n return Object.values(rules)\n .map((rule) =>\n typeof rule === 'object' &&\n rule !== null &&\n 'cssText' in rule &&\n typeof (rule as { cssText?: unknown }).cssText === 'string'\n ? (rule as { cssText: string }).cssText\n : ''\n )\n .join('');\n }\n }\n\n if (\n typeof payload === 'object' &&\n payload !== null &&\n 'cssText' in payload &&\n typeof (payload as { cssText?: unknown }).cssText === 'string'\n ) {\n return (payload as { cssText: string }).cssText;\n }\n\n return null;\n};\n\nconst isEmptyProcessorClassName = (\n value: string,\n processors: StaticProcessorInstance[],\n cache: Map<string, boolean>\n): boolean => {\n if (cache.has(value)) {\n return cache.get(value)!;\n }\n\n const processor = processors.find((item) => item.className === value);\n if (!processor) {\n cache.set(value, false);\n return false;\n }\n\n if (processor.artifacts.length === 0) {\n try {\n processor.build(new Map());\n } catch {\n cache.set(value, false);\n return false;\n }\n }\n\n const result = processor.artifacts.every((artifact) => {\n const cssText = artifactCssText(artifact);\n return cssText !== null && cssText.trim() === '';\n });\n cache.set(value, result);\n return result;\n};\n\nconst isProcessorClassName = (\n value: string,\n processors: StaticProcessorInstance[],\n cache: Map<string, boolean>\n): boolean => {\n if (cache.has(value)) {\n return cache.get(value)!;\n }\n\n const processor = processors.find((item) => item.className === value);\n if (!processor) {\n cache.set(value, false);\n return false;\n }\n\n if (processor.artifacts.length === 0) {\n try {\n processor.build(new Map());\n } catch {\n cache.set(value, false);\n return false;\n }\n }\n\n const result = processor.artifacts.every(\n (artifact) => artifactCssText(artifact) !== null\n );\n cache.set(value, result);\n return result;\n};\n\nconst isSelectorOnlyProcessorValue = (\n value: unknown,\n processors: StaticProcessorInstance[],\n cache: Map<string, boolean>,\n seen: Set<unknown> = new Set()\n): boolean => {\n if (typeof value === 'string') {\n return isEmptyProcessorClassName(value, processors, cache);\n }\n\n if (Array.isArray(value)) {\n if (seen.has(value)) {\n return false;\n }\n\n seen.add(value);\n return value.every((item) =>\n isSelectorOnlyProcessorValue(item, processors, cache, seen)\n );\n }\n\n if (typeof value === 'object' && value !== null) {\n if (seen.has(value)) {\n return false;\n }\n\n seen.add(value);\n return Object.values(value).every((item) =>\n isSelectorOnlyProcessorValue(item, processors, cache, seen)\n );\n }\n\n return false;\n};\n\nconst isProcessorClassValue = (\n value: unknown,\n processors: StaticProcessorInstance[],\n cache: Map<string, boolean>,\n seen: Set<unknown> = new Set()\n): boolean => {\n if (typeof value === 'string') {\n return isProcessorClassName(value, processors, cache);\n }\n\n if (Array.isArray(value)) {\n if (seen.has(value)) {\n return false;\n }\n\n seen.add(value);\n return value.every((item) =>\n isProcessorClassValue(item, processors, cache, seen)\n );\n }\n\n if (typeof value === 'object' && value !== null) {\n if (seen.has(value)) {\n return false;\n }\n\n seen.add(value);\n return Object.values(value).every((item) =>\n isProcessorClassValue(item, processors, cache, seen)\n );\n }\n\n return false;\n};\n\nconst collectLocalConstExpressions = (\n program: Program\n): Map<string, Expression> => {\n const result = new Map<string, Expression>();\n\n const collect = (declaration: VariableDeclaration): void => {\n if (declaration.kind !== 'const') {\n return;\n }\n\n declaration.declarations.forEach((declarator) => {\n if (declarator.id.type === 'Identifier' && declarator.init) {\n result.set(declarator.id.name, declarator.init);\n }\n });\n };\n\n program.body.forEach((statement) => {\n if (statement.type === 'VariableDeclaration') {\n collect(statement);\n return;\n }\n\n if (\n statement.type === 'ExportNamedDeclaration' &&\n statement.declaration?.type === 'VariableDeclaration'\n ) {\n collect(statement.declaration);\n }\n });\n\n return result;\n};\n\ntype StaticExpressionDependencies = {\n imports: ImportBinding[];\n};\n\ntype PreparedProcessorTarget = {\n dependencies: StaticExpressionDependencies;\n evaluationCode?: string;\n evaluationSpan?: Range;\n expression: Expression;\n opaqueRuntimeBase: boolean;\n};\n\nconst mutatingMethodNames = new Set([\n 'add',\n 'clear',\n 'copyWithin',\n 'delete',\n 'fill',\n 'pop',\n 'push',\n 'reverse',\n 'set',\n 'shift',\n 'sort',\n 'splice',\n 'unshift',\n]);\n\nconst rootIdentifierName = (expr: Node): string | null => {\n const unwrapped = unwrapExpression(expr);\n\n if (unwrapped.type === 'Identifier') {\n return unwrapped.name;\n }\n\n if (unwrapped.type === 'MemberExpression') {\n return rootIdentifierName(unwrapped.object);\n }\n\n if (unwrapped.type === 'ChainExpression') {\n return rootIdentifierName(unwrapped.expression);\n }\n\n return null;\n};\n\nconst staticMemberName = (expr: Node): string | null => {\n const unwrapped = unwrapExpression(expr);\n\n if (unwrapped.type === 'Identifier') {\n return unwrapped.name;\n }\n\n if (isSafeLiteral(unwrapped) && typeof unwrapped.value === 'string') {\n return unwrapped.value;\n }\n\n return null;\n};\n\nconst expressionMayProduceMutableValue = (\n expr: Node,\n locals: Map<string, Expression>,\n visiting: Set<string>\n): boolean => {\n const unwrapped = unwrapExpression(expr);\n\n if (\n unwrapped.type === 'ObjectExpression' ||\n unwrapped.type === 'ArrayExpression'\n ) {\n return true;\n }\n\n if (unwrapped.type === 'Identifier') {\n const local = locals.get(unwrapped.name);\n if (!local || visiting.has(unwrapped.name)) {\n return true;\n }\n\n visiting.add(unwrapped.name);\n const result = expressionMayProduceMutableValue(local, locals, visiting);\n visiting.delete(unwrapped.name);\n return result;\n }\n\n if (unwrapped.type === 'ConditionalExpression') {\n return (\n expressionMayProduceMutableValue(\n unwrapped.consequent,\n locals,\n visiting\n ) ||\n expressionMayProduceMutableValue(unwrapped.alternate, locals, visiting)\n );\n }\n\n if (\n unwrapped.type === 'LogicalExpression' ||\n unwrapped.type === 'MemberExpression'\n ) {\n return true;\n }\n\n return false;\n};\n\nconst isSafeFunctionBodyExpression = (\n body: Node,\n options: StaticExpressionOptions\n): boolean => {\n if (body.type !== 'BlockStatement') {\n return isSafeStaticExpression(body, options);\n }\n\n return body.body.every((statement) => {\n if (statement.type === 'VariableDeclaration') {\n return (\n statement.kind === 'const' &&\n statement.declarations.every(\n (declarator) =>\n declarator.init &&\n declarator.id.type === 'Identifier' &&\n isSafeStaticExpression(declarator.init, options)\n )\n );\n }\n\n return (\n statement.type === 'ReturnStatement' &&\n !!statement.argument &&\n isSafeStaticExpression(statement.argument, options)\n );\n });\n};\n\nconst collectStaticFunctionBodyReferences = (\n body: Node,\n references: Set<string>,\n options: StaticExpressionOptions\n): boolean => {\n if (body.type !== 'BlockStatement') {\n return collectStaticExpressionReferences(body, references, options);\n }\n\n return body.body.every((statement) => {\n if (statement.type === 'VariableDeclaration') {\n return (\n statement.kind === 'const' &&\n statement.declarations.every(\n (declarator) =>\n declarator.init &&\n declarator.id.type === 'Identifier' &&\n collectStaticExpressionReferences(\n declarator.init,\n references,\n options\n )\n )\n );\n }\n\n return (\n statement.type === 'ReturnStatement' &&\n !!statement.argument &&\n collectStaticExpressionReferences(statement.argument, references, options)\n );\n });\n};\n\nconst collectStaticExpressionReferences = (\n expr: Node,\n references: Set<string>,\n options: StaticExpressionOptions = {}\n): boolean => {\n const unwrapped = unwrapExpression(expr);\n\n if (isSafeLiteral(unwrapped)) {\n return true;\n }\n\n if (unwrapped.type === 'Identifier') {\n references.add(unwrapped.name);\n return true;\n }\n\n if (unwrapped.type === 'TemplateLiteral') {\n return unwrapped.expressions.every((item) =>\n collectStaticExpressionReferences(item, references, options)\n );\n }\n\n if (unwrapped.type === 'UnaryExpression') {\n return collectStaticExpressionReferences(\n unwrapped.argument,\n references,\n options\n );\n }\n\n if (\n unwrapped.type === 'BinaryExpression' ||\n unwrapped.type === 'LogicalExpression'\n ) {\n return (\n collectStaticExpressionReferences(unwrapped.left, references, options) &&\n collectStaticExpressionReferences(unwrapped.right, references, options)\n );\n }\n\n if (unwrapped.type === 'ConditionalExpression') {\n return (\n collectStaticExpressionReferences(unwrapped.test, references, options) &&\n collectStaticExpressionReferences(\n unwrapped.consequent,\n references,\n options\n ) &&\n collectStaticExpressionReferences(\n unwrapped.alternate,\n references,\n options\n )\n );\n }\n\n if (unwrapped.type === 'MemberExpression') {\n if (isProcessEnvMember(unwrapped) || isProcessEnvMember(unwrapped.object)) {\n // process.env / process.env.X is an opaque build-time global —\n // don't treat `process` as an unresolved local reference.\n return true;\n }\n\n return (\n collectStaticExpressionReferences(\n unwrapped.object,\n references,\n options\n ) &&\n (!unwrapped.computed ||\n collectStaticExpressionReferences(\n unwrapped.property,\n references,\n options\n ))\n );\n }\n\n if (options.allowMetadataCalls && unwrapped.type === 'CallExpression') {\n if (\n unwrapped.callee.type !== 'Identifier' ||\n unwrapped.arguments.length !== 0\n ) {\n return false;\n }\n\n references.add(unwrapped.callee.name);\n return true;\n }\n\n if (\n options.allowMetadataCalls &&\n (unwrapped.type === 'ArrowFunctionExpression' ||\n unwrapped.type === 'FunctionExpression')\n ) {\n if (unwrapped.async || unwrapped.params.length !== 0) {\n return false;\n }\n\n return (\n !!unwrapped.body &&\n collectStaticFunctionBodyReferences(unwrapped.body, references, options)\n );\n }\n\n if (unwrapped.type === 'ArrayExpression') {\n return unwrapped.elements.every((item) => {\n if (!item) {\n return false;\n }\n\n return item.type === 'SpreadElement'\n ? collectStaticExpressionReferences(item.argument, references, options)\n : collectStaticExpressionReferences(item, references, options);\n });\n }\n\n if (unwrapped.type === 'ObjectExpression') {\n return unwrapped.properties.every((property) => {\n if (property.type === 'SpreadElement') {\n return collectStaticExpressionReferences(\n property.argument,\n references,\n options\n );\n }\n\n const propertyNode = property as AnyNode;\n if (\n propertyNode.computed ||\n !propertyNode.value ||\n typeof propertyNode.value !== 'object'\n ) {\n return false;\n }\n\n return collectStaticExpressionReferences(\n propertyNode.value as Node,\n references,\n options\n );\n });\n }\n\n return false;\n};\n\nconst collectExpressionMutationHints = (\n expr: Node,\n mutatedNames: Set<string>,\n callArgumentNames: Set<string>\n): void => {\n const unwrapped = unwrapExpression(expr);\n\n if (unwrapped.type === 'AssignmentExpression') {\n const rootName = rootIdentifierName(unwrapped.left);\n if (rootName) {\n mutatedNames.add(rootName);\n }\n\n collectExpressionMutationHints(\n unwrapped.right,\n mutatedNames,\n callArgumentNames\n );\n return;\n }\n\n if (unwrapped.type === 'UpdateExpression') {\n const rootName = rootIdentifierName(unwrapped.argument);\n if (rootName) {\n mutatedNames.add(rootName);\n }\n\n return;\n }\n\n if (unwrapped.type === 'UnaryExpression') {\n if (unwrapped.operator === 'delete') {\n const rootName = rootIdentifierName(unwrapped.argument);\n if (rootName) {\n mutatedNames.add(rootName);\n }\n }\n\n collectExpressionMutationHints(\n unwrapped.argument,\n mutatedNames,\n callArgumentNames\n );\n return;\n }\n\n if (unwrapped.type === 'CallExpression') {\n const callee = unwrapExpression(unwrapped.callee);\n if (callee.type === 'MemberExpression') {\n const methodName = staticMemberName(callee.property);\n const rootName = rootIdentifierName(callee.object);\n if (rootName && methodName && mutatingMethodNames.has(methodName)) {\n mutatedNames.add(rootName);\n }\n\n collectExpressionMutationHints(\n callee.object,\n mutatedNames,\n callArgumentNames\n );\n if (callee.computed) {\n collectExpressionMutationHints(\n callee.property,\n mutatedNames,\n callArgumentNames\n );\n }\n } else {\n collectExpressionMutationHints(\n unwrapped.callee,\n mutatedNames,\n callArgumentNames\n );\n }\n\n unwrapped.arguments.forEach((argument) => {\n const argumentNode =\n argument.type === 'SpreadElement' ? argument.argument : argument;\n const rootName = rootIdentifierName(argumentNode);\n if (rootName) {\n callArgumentNames.add(rootName);\n }\n\n collectExpressionMutationHints(\n argumentNode,\n mutatedNames,\n callArgumentNames\n );\n });\n return;\n }\n\n if (unwrapped.type === 'TaggedTemplateExpression') {\n collectExpressionMutationHints(\n unwrapped.tag,\n mutatedNames,\n callArgumentNames\n );\n unwrapped.quasi.expressions.forEach((item) =>\n collectExpressionMutationHints(item, mutatedNames, callArgumentNames)\n );\n return;\n }\n\n if (unwrapped.type === 'ConditionalExpression') {\n collectExpressionMutationHints(\n unwrapped.test,\n mutatedNames,\n callArgumentNames\n );\n collectExpressionMutationHints(\n unwrapped.consequent,\n mutatedNames,\n callArgumentNames\n );\n collectExpressionMutationHints(\n unwrapped.alternate,\n mutatedNames,\n callArgumentNames\n );\n return;\n }\n\n if (\n unwrapped.type === 'BinaryExpression' ||\n unwrapped.type === 'LogicalExpression'\n ) {\n collectExpressionMutationHints(\n unwrapped.left,\n mutatedNames,\n callArgumentNames\n );\n collectExpressionMutationHints(\n unwrapped.right,\n mutatedNames,\n callArgumentNames\n );\n return;\n }\n\n if (unwrapped.type === 'MemberExpression') {\n collectExpressionMutationHints(\n unwrapped.object,\n mutatedNames,\n callArgumentNames\n );\n if (unwrapped.computed) {\n collectExpressionMutationHints(\n unwrapped.property,\n mutatedNames,\n callArgumentNames\n );\n }\n return;\n }\n\n if (unwrapped.type === 'ArrayExpression') {\n unwrapped.elements.forEach((item) => {\n if (!item) {\n return;\n }\n\n collectExpressionMutationHints(\n item.type === 'SpreadElement' ? item.argument : item,\n mutatedNames,\n callArgumentNames\n );\n });\n return;\n }\n\n if (unwrapped.type === 'ObjectExpression') {\n unwrapped.properties.forEach((property) => {\n if (property.type === 'SpreadElement') {\n collectExpressionMutationHints(\n property.argument,\n mutatedNames,\n callArgumentNames\n );\n return;\n }\n\n const propertyNode = property as AnyNode;\n if (propertyNode.computed && propertyNode.key) {\n collectExpressionMutationHints(\n propertyNode.key as Node,\n mutatedNames,\n callArgumentNames\n );\n }\n\n if (propertyNode.value && typeof propertyNode.value === 'object') {\n collectExpressionMutationHints(\n propertyNode.value as Node,\n mutatedNames,\n callArgumentNames\n );\n }\n });\n }\n};\n\nconst collectTopLevelMutationHints = (\n program: Program\n): { callArgumentNames: Set<string>; mutatedNames: Set<string> } => {\n const callArgumentNames = new Set<string>();\n const mutatedNames = new Set<string>();\n\n const collectDeclaration = (declaration: VariableDeclaration): void => {\n declaration.declarations.forEach((declarator) => {\n if (declarator.init) {\n collectExpressionMutationHints(\n declarator.init,\n mutatedNames,\n callArgumentNames\n );\n }\n });\n };\n\n program.body.forEach((statement) => {\n if (statement.type === 'VariableDeclaration') {\n collectDeclaration(statement);\n return;\n }\n\n if (statement.type === 'ExpressionStatement') {\n collectExpressionMutationHints(\n statement.expression,\n mutatedNames,\n callArgumentNames\n );\n return;\n }\n\n if (statement.type === 'ExportNamedDeclaration') {\n if (statement.declaration?.type === 'VariableDeclaration') {\n collectDeclaration(statement.declaration);\n }\n\n return;\n }\n\n if (statement.type === 'ExportDefaultDeclaration') {\n if (\n statement.declaration.type !== 'FunctionDeclaration' &&\n statement.declaration.type !== 'ClassDeclaration'\n ) {\n collectExpressionMutationHints(\n statement.declaration,\n mutatedNames,\n callArgumentNames\n );\n }\n }\n });\n\n return { callArgumentNames, mutatedNames };\n};\n\nconst objectPropertyKeyName = (node: Node): string | null => {\n const unwrapped = unwrapExpression(node);\n\n if (unwrapped.type === 'Identifier') {\n return unwrapped.name;\n }\n\n if (isSafeLiteral(unwrapped) && typeof unwrapped.value === 'string') {\n return unwrapped.value;\n }\n\n return null;\n};\n\nconst findObjectPropertyValue = (\n expr: Node,\n name: string\n): Expression | null => {\n const unwrapped = unwrapExpression(expr);\n if (unwrapped.type !== 'ObjectExpression') {\n return null;\n }\n\n for (const property of unwrapped.properties) {\n if (property.type === 'SpreadElement') {\n continue;\n }\n\n const propertyNode = property as AnyNode;\n if (propertyNode.computed) {\n continue;\n }\n\n const key = propertyNode.key as Node | undefined;\n const value = propertyNode.value as Expression | undefined;\n if (key && value && objectPropertyKeyName(key) === name) {\n return value;\n }\n }\n\n return null;\n};\n\nconst findWYWMetaExtendsExpression = (expr: Expression): Expression | null => {\n const meta = findObjectPropertyValue(expr, '__wyw_meta');\n if (!meta) {\n return null;\n }\n\n return findObjectPropertyValue(meta, 'extends');\n};\n\nconst collectWYWMetaExtendsExpressions = (expr: Expression): Expression[] => {\n const result: Expression[] = [];\n const visit = (node: Node): void => {\n if (node.type === 'ObjectExpression') {\n const extendsExpression = findWYWMetaExtendsExpression(\n node as Expression\n );\n if (extendsExpression) {\n result.push(extendsExpression);\n }\n }\n\n getChildren(node).forEach(visit);\n };\n\n visit(expr);\n return result;\n};\n\nconst topLevelStatements = (program: Program): Node[] => {\n const result: Node[] = [];\n\n program.body.forEach((statement) => {\n if (\n statement.type === 'ExportNamedDeclaration' ||\n statement.type === 'ExportDefaultDeclaration'\n ) {\n result.push(statement.declaration ?? statement);\n return;\n }\n\n result.push(statement);\n });\n\n return result;\n};\n\nconst findTopLevelConstExpression = (\n program: Program,\n name: string\n): Expression | null => {\n for (const statement of topLevelStatements(program)) {\n if (\n statement.type !== 'VariableDeclaration' ||\n statement.kind !== 'const'\n ) {\n continue;\n }\n\n for (const declarator of statement.declarations) {\n if (\n declarator.id.type === 'Identifier' &&\n declarator.id.name === name &&\n declarator.init\n ) {\n return declarator.init;\n }\n }\n }\n\n return null;\n};\n\nconst hasTopLevelBinding = (program: Program, name: string): boolean => {\n if (collectImportBindings(program).has(name)) {\n return true;\n }\n\n return topLevelStatements(program).some((statement) => {\n if (statement.type === 'VariableDeclaration') {\n return statement.declarations.some(\n (declarator) =>\n declarator.id.type === 'Identifier' && declarator.id.name === name\n );\n }\n\n if (statement.type === 'FunctionDeclaration') {\n return statement.id?.name === name;\n }\n\n if (statement.type === 'ClassDeclaration') {\n return statement.id?.name === name;\n }\n\n return false;\n });\n};\n\nconst isTopLevelFunctionOrClass = (program: Program, name: string): boolean =>\n topLevelStatements(program).some((statement) => {\n if (statement.type === 'FunctionDeclaration') {\n return statement.id?.name === name;\n }\n\n if (statement.type === 'ClassDeclaration') {\n return statement.id?.name === name;\n }\n\n return false;\n });\n\nconst functionReturnExpression = (\n expr: Node,\n options: { allowParams?: boolean } = {}\n): Expression | null => {\n const unwrapped = unwrapExpression(expr);\n if (\n unwrapped.type !== 'ArrowFunctionExpression' &&\n unwrapped.type !== 'FunctionExpression'\n ) {\n return null;\n }\n\n if (\n unwrapped.async ||\n (!options.allowParams && unwrapped.params.length > 0) ||\n !unwrapped.body\n ) {\n return null;\n }\n\n if (unwrapped.body.type !== 'BlockStatement') {\n return unwrapped.body as Expression;\n }\n\n if (unwrapped.body.body.length !== 1) {\n return null;\n }\n\n const [statement] = unwrapped.body.body;\n return statement.type === 'ReturnStatement' && statement.argument\n ? statement.argument\n : null;\n};\n\nconst isReactImport = (\n imports: Map<string, ImportBinding>,\n localName: string\n): boolean => imports.get(localName)?.source === 'react';\n\nconst isReactFactoryName = (name: string): boolean =>\n name === 'forwardRef' || name === 'memo';\n\nconst isKnownReactFactoryCall = (\n expr: Node,\n imports: Map<string, ImportBinding>\n): boolean => {\n const unwrapped = unwrapExpression(expr);\n if (unwrapped.type !== 'CallExpression') {\n return false;\n }\n\n const callee = unwrapExpression(unwrapped.callee);\n if (callee.type === 'Identifier') {\n return (\n isReactFactoryName(callee.name) && isReactImport(imports, callee.name)\n );\n }\n\n if (callee.type !== 'MemberExpression' || callee.computed) {\n return false;\n }\n\n const methodName = staticMemberName(callee.property);\n return (\n !!methodName &&\n isReactFactoryName(methodName) &&\n callee.object.type === 'Identifier' &&\n isReactImport(imports, callee.object.name)\n );\n};\n\nconst isKnownOpaqueRuntimeWrapperImport = (\n binding: ImportBinding | undefined\n): boolean => {\n if (!binding) {\n return false;\n }\n\n return (\n binding.imported === 'observer' &&\n (binding.source === 'mobx-react' || binding.source === 'mobx-react-lite')\n );\n};\n\nconst isKnownOpaqueRuntimeWrapperCallee = (\n expr: Node,\n imports: Map<string, ImportBinding>\n): boolean => {\n const callee = unwrapExpression(expr);\n if (callee.type === 'Identifier') {\n return isKnownOpaqueRuntimeWrapperImport(imports.get(callee.name));\n }\n\n return false;\n};\n\nconst isKnownOpaqueRuntimeImportSource = (source: string): boolean =>\n /\\.svg(?:$|[?#])/.test(source);\n\nconst isKnownExternalRuntimeComponentImportSource = (source: string): boolean =>\n source.startsWith('@radix-ui/react-');\n\ntype OpaqueRuntimeImportProof = {\n dependencies: string[];\n names: Set<string>;\n};\n\nconst isStaticMetaObjectExpression = (expr: Node): boolean => {\n const meta = findObjectPropertyValue(expr, '__wyw_meta');\n return !!meta && findObjectPropertyValue(meta, 'className') !== null;\n};\n\nconst isObjectAssignCallee = (program: Program, expr: Node): boolean => {\n const unwrapped = unwrapExpression(expr);\n if (unwrapped.type !== 'MemberExpression' || unwrapped.computed) {\n return false;\n }\n\n const methodName = staticMemberName(unwrapped.property);\n return (\n methodName === 'assign' &&\n unwrapped.object.type === 'Identifier' &&\n unwrapped.object.name === 'Object' &&\n !hasTopLevelBinding(program, 'Object')\n );\n};\n\nconst isSafeObjectAssignAliasExpression = (\n program: Program,\n expr: Node,\n seen: Set<string> = new Set()\n): boolean => {\n const unwrapped = unwrapExpression(expr);\n\n if (unwrapped.type === 'Identifier') {\n if (seen.has(unwrapped.name)) {\n return false;\n }\n\n const local = findTopLevelConstExpression(program, unwrapped.name);\n if (!local) {\n return false;\n }\n\n seen.add(unwrapped.name);\n const result = isSafeObjectAssignAliasExpression(program, local, seen);\n seen.delete(unwrapped.name);\n return result;\n }\n\n if (unwrapped.type !== 'ObjectExpression') {\n return false;\n }\n\n return unwrapped.properties.every((property) => {\n if (property.type === 'SpreadElement') {\n return false;\n }\n\n const propertyNode = property as AnyNode;\n if (\n propertyNode.computed ||\n propertyNode.method ||\n !propertyNode.value ||\n typeof propertyNode.value !== 'object'\n ) {\n return false;\n }\n\n return isSafeStaticExpression(propertyNode.value as Node);\n });\n};\n\nconst objectAssignTargetExpression = (\n program: Program,\n expr: Node\n): Expression | null => {\n const unwrapped = unwrapExpression(expr);\n if (\n unwrapped.type !== 'CallExpression' ||\n !isObjectAssignCallee(program, unwrapped.callee) ||\n unwrapped.arguments.length < 2\n ) {\n return null;\n }\n\n const [target, ...aliases] = unwrapped.arguments;\n if (!target || target.type === 'SpreadElement') {\n return null;\n }\n\n if (\n aliases.some(\n (alias) =>\n alias.type === 'SpreadElement' ||\n !isSafeObjectAssignAliasExpression(program, alias)\n )\n ) {\n return null;\n }\n\n return target;\n};\n\nconst objectAssignAliasExpressions = (\n program: Program,\n expr: Node\n): Expression[] | null => {\n const unwrapped = unwrapExpression(expr);\n if (\n unwrapped.type !== 'CallExpression' ||\n !isObjectAssignCallee(program, unwrapped.callee) ||\n unwrapped.arguments.length < 2\n ) {\n return null;\n }\n\n const [, ...aliases] = unwrapped.arguments;\n if (\n aliases.some(\n (alias) =>\n alias.type === 'SpreadElement' ||\n !isSafeObjectAssignAliasExpression(program, alias)\n )\n ) {\n return null;\n }\n\n return aliases as Expression[];\n};\n\nconst isFunctionBoundaryNode = (node: Node): boolean =>\n node.type === 'ArrowFunctionExpression' ||\n node.type === 'FunctionDeclaration' ||\n node.type === 'FunctionExpression' ||\n node.type === 'ClassDeclaration' ||\n node.type === 'ClassExpression';\n\nconst callHasArgumentRootName = (expr: Node, targetName: string): boolean => {\n const unwrapped = unwrapExpression(expr);\n return (\n unwrapped.type === 'CallExpression' &&\n unwrapped.arguments.some((argument) => {\n const argumentNode =\n argument.type === 'SpreadElement' ? argument.argument : argument;\n return rootIdentifierName(argumentNode) === targetName;\n })\n );\n};\n\nconst isSafeObjectAssignAliasAugmentation = (\n program: Program,\n expr: Node,\n targetName: string\n): boolean => {\n const unwrapped = unwrapExpression(expr);\n if (\n unwrapped.type !== 'CallExpression' ||\n !isObjectAssignCallee(program, unwrapped.callee) ||\n unwrapped.arguments.length < 2\n ) {\n return false;\n }\n\n const [target, ...aliases] = unwrapped.arguments;\n if (!target || target.type === 'SpreadElement') {\n return false;\n }\n\n const unwrappedTarget = unwrapExpression(target);\n if (\n unwrappedTarget.type !== 'Identifier' ||\n unwrappedTarget.name !== targetName\n ) {\n return false;\n }\n\n return aliases.every(\n (alias) =>\n alias.type !== 'SpreadElement' &&\n isSafeObjectAssignAliasExpression(program, alias)\n );\n};\n\nconst hasOnlySafeObjectAssignCallArgumentUses = (\n program: Program,\n targetName: string\n): boolean => {\n let hasSafeUse = false;\n let hasUnsafeUse = false;\n\n const visit = (node: Node): void => {\n if (hasUnsafeUse || isFunctionBoundaryNode(node)) {\n return;\n }\n\n const unwrapped = unwrapExpression(node);\n if (unwrapped.type === 'CallExpression') {\n if (callHasArgumentRootName(unwrapped, targetName)) {\n if (\n isSafeObjectAssignAliasAugmentation(program, unwrapped, targetName)\n ) {\n hasSafeUse = true;\n } else {\n hasUnsafeUse = true;\n return;\n }\n }\n }\n\n getChildren(node).forEach(visit);\n };\n\n topLevelStatements(program).forEach(visit);\n return hasSafeUse && !hasUnsafeUse;\n};\n\nconst objectAssignAugmentationAliasExpressions = (\n program: Program,\n targetName: string\n): Expression[] | null => {\n const aliases: Expression[] = [];\n let hasUnsafeUse = false;\n\n const visit = (node: Node): void => {\n if (hasUnsafeUse || isFunctionBoundaryNode(node)) {\n return;\n }\n\n const unwrapped = unwrapExpression(node);\n if (unwrapped.type === 'CallExpression') {\n if (callHasArgumentRootName(unwrapped, targetName)) {\n if (\n isSafeObjectAssignAliasAugmentation(program, unwrapped, targetName)\n ) {\n const [, ...nextAliases] = unwrapped.arguments;\n aliases.push(...(nextAliases as Expression[]));\n } else {\n hasUnsafeUse = true;\n }\n\n return;\n }\n }\n\n getChildren(node).forEach(visit);\n };\n\n topLevelStatements(program).forEach(visit);\n return !hasUnsafeUse && aliases.length > 0 ? aliases : null;\n};\n\nconst objectAssignAliasExpressionsForTarget = (\n program: Program,\n target: Extract<ExportTarget, { kind: 'expression' }>\n): Expression[] | null => {\n const aliases = [\n ...(objectAssignAliasExpressions(program, target.expression) ?? []),\n ...(target.localName\n ? objectAssignAugmentationAliasExpressions(program, target.localName) ??\n []\n : []),\n ];\n\n return aliases.length > 0 ? aliases : null;\n};\n\nconst resolveObjectAssignProcessorExpression = (\n program: Program,\n expr: Expression\n): Expression => {\n const objectAssignTarget = objectAssignTargetExpression(program, expr);\n const target = objectAssignTarget ?? expr;\n\n if (target.type !== 'Identifier') {\n return target;\n }\n\n return findTopLevelConstExpression(program, target.name) ?? target;\n};\n\ntype ObjectAssignAliasResolution = {\n dependencies: string[];\n sideEffectDependencies: string[];\n values: Record<string, unknown>[];\n};\n\ntype ObjectAssignAliasPropertyResolution = {\n dependencies: string[];\n sideEffectDependencies: string[];\n value: unknown;\n};\n\ntype ObjectAssignAliasPropertyEntry = {\n key: string;\n value: Expression;\n};\n\nconst mergeStaticObjectAssignAliases = (\n targetValue: unknown,\n aliasValues: Record<string, unknown>[]\n): unknown | null => {\n if (!isPlainObjectRecord(targetValue) || !isStaticWYWMetaValue(targetValue)) {\n return null;\n }\n\n const result: Record<string, unknown> = { ...targetValue };\n aliasValues.forEach((aliasValue) => {\n Object.assign(result, aliasValue);\n });\n\n return result;\n};\n\nconst objectAssignAliasObjectExpression = (\n program: Program,\n alias: Expression,\n seen: Set<string> = new Set()\n): Expression | null => {\n const unwrapped = unwrapExpression(alias);\n if (unwrapped.type === 'ObjectExpression') {\n return unwrapped as Expression;\n }\n\n if (unwrapped.type !== 'Identifier' || seen.has(unwrapped.name)) {\n return null;\n }\n\n const local = findTopLevelConstExpression(program, unwrapped.name);\n if (!local) {\n return null;\n }\n\n seen.add(unwrapped.name);\n const result = objectAssignAliasObjectExpression(program, local, seen);\n seen.delete(unwrapped.name);\n return result;\n};\n\nconst objectAssignAliasPropertyEntries = (\n program: Program,\n alias: Expression\n): ObjectAssignAliasPropertyEntry[] | null => {\n const aliasObject = objectAssignAliasObjectExpression(program, alias);\n if (!aliasObject || aliasObject.type !== 'ObjectExpression') {\n return null;\n }\n\n const entries: ObjectAssignAliasPropertyEntry[] = [];\n for (const property of aliasObject.properties) {\n if (property.type === 'SpreadElement') {\n return null;\n }\n\n const propertyNode = property as AnyNode;\n if (\n propertyNode.computed ||\n propertyNode.method ||\n !propertyNode.key ||\n !propertyNode.value ||\n typeof propertyNode.key !== 'object' ||\n typeof propertyNode.value !== 'object'\n ) {\n return null;\n }\n\n const key = objectPropertyKeyName(propertyNode.key as Node);\n if (!key) {\n return null;\n }\n\n entries.push({\n key,\n value: propertyNode.value as Expression,\n });\n }\n\n return entries;\n};\n\nfunction* resolveObjectAssignAliasExpressionValue(\n action: ITransformAction,\n filename: string,\n code: string,\n program: Program,\n expression: Expression,\n ignoredMutableCallArgumentNames: Set<string>,\n stack: Set<string>,\n memo: Map<string, StaticExportResult | null>\n): SyncScenarioFor<ObjectAssignAliasPropertyResolution | null> {\n const staticDependencies = collectStaticExpressionDependencies(\n program,\n {\n expression,\n kind: 'expression',\n },\n {\n allowMetadataCalls: true,\n ignoredMutableCallArgumentNames,\n }\n );\n if (!staticDependencies) {\n return null;\n }\n\n const env = new Map<string, unknown>();\n const dependencies = new Set<string>();\n const sideEffectDependencies = new Set<string>();\n\n for (const binding of staticDependencies.imports) {\n const resolved = yield* resolveImportValue(\n action,\n filename,\n binding,\n stack,\n memo\n );\n if (\n !resolved ||\n !bindStaticResolvedValue(env, expression, binding.local, resolved)\n ) {\n return null;\n }\n\n resolved.dependencies.forEach((item) => dependencies.add(item));\n resolved.sideEffectDependencies?.forEach((item) =>\n sideEffectDependencies.add(item)\n );\n }\n\n const value = evaluateOxcStaticExpressionAt(\n code,\n filename,\n {\n end: expression.end,\n start: expression.start,\n },\n env\n );\n return isStaticObjectAssignAliasValue(value)\n ? {\n dependencies: [...dependencies],\n sideEffectDependencies: [...sideEffectDependencies],\n value,\n }\n : null;\n}\n\nfunction* resolveObjectAssignAliasPropertyValue(\n action: ITransformAction,\n filename: string,\n code: string,\n program: Program,\n expression: Expression,\n ignoredMutableCallArgumentNames: Set<string>,\n stack: Set<string>,\n memo: Map<string, StaticExportResult | null>\n): SyncScenarioFor<ObjectAssignAliasPropertyResolution | null> {\n const expressionValue = yield* resolveObjectAssignAliasExpressionValue(\n action,\n filename,\n code,\n program,\n expression,\n ignoredMutableCallArgumentNames,\n stack,\n memo\n );\n if (expressionValue) {\n return expressionValue;\n }\n\n const unwrapped = unwrapExpression(expression);\n if (\n unwrapped.type !== 'Identifier' ||\n !findExportTarget(program, unwrapped.name)\n ) {\n return null;\n }\n\n const resolved = yield* resolveStaticExport(\n action,\n filename,\n unwrapped.name,\n stack,\n memo\n );\n return resolved && isStaticObjectAssignAliasValue(resolved.value)\n ? {\n dependencies: resolved.dependencies,\n sideEffectDependencies: resolved.sideEffectDependencies ?? [],\n value: resolved.value,\n }\n : null;\n}\n\nfunction* resolveObjectAssignAliasValue(\n action: ITransformAction,\n filename: string,\n code: string,\n program: Program,\n alias: Expression,\n ignoredMutableCallArgumentNames: Set<string>,\n stack: Set<string>,\n memo: Map<string, StaticExportResult | null>\n): SyncScenarioFor<{\n dependencies: string[];\n sideEffectDependencies: string[];\n value: Record<string, unknown>;\n} | null> {\n const aliasValue = yield* resolveObjectAssignAliasExpressionValue(\n action,\n filename,\n code,\n program,\n alias,\n ignoredMutableCallArgumentNames,\n stack,\n memo\n );\n if (aliasValue && isPlainObjectRecord(aliasValue.value)) {\n return Object.values(aliasValue.value).every(isStaticObjectAssignAliasValue)\n ? {\n dependencies: aliasValue.dependencies,\n sideEffectDependencies: aliasValue.sideEffectDependencies,\n value: aliasValue.value,\n }\n : null;\n }\n\n const entries = objectAssignAliasPropertyEntries(program, alias);\n if (!entries) {\n return null;\n }\n\n const dependencies = new Set<string>();\n const sideEffectDependencies = new Set<string>();\n const value: Record<string, unknown> = {};\n\n for (const entry of entries) {\n const resolved = yield* resolveObjectAssignAliasPropertyValue(\n action,\n filename,\n code,\n program,\n entry.value,\n ignoredMutableCallArgumentNames,\n stack,\n memo\n );\n if (!resolved || !isStaticObjectAssignAliasValue(resolved.value)) {\n return null;\n }\n\n value[entry.key] = resolved.value;\n resolved.dependencies.forEach((item) => dependencies.add(item));\n resolved.sideEffectDependencies.forEach((item) =>\n sideEffectDependencies.add(item)\n );\n }\n\n return {\n dependencies: [...dependencies],\n sideEffectDependencies: [...sideEffectDependencies],\n value,\n };\n}\n\nfunction* resolveObjectAssignAliasValues(\n action: ITransformAction,\n filename: string,\n code: string,\n program: Program,\n aliases: Expression[],\n stack: Set<string>,\n memo: Map<string, StaticExportResult | null>\n): SyncScenarioFor<ObjectAssignAliasResolution | null> {\n const dependencies = new Set<string>();\n const sideEffectDependencies = new Set<string>();\n const values: Record<string, unknown>[] = [];\n const ignoredMutableCallArgumentNames = new Set<string>();\n aliases.forEach((alias) => {\n const name = rootIdentifierName(alias);\n if (name) {\n ignoredMutableCallArgumentNames.add(name);\n }\n });\n\n for (const alias of aliases) {\n const aliasValue = yield* resolveObjectAssignAliasValue(\n action,\n filename,\n code,\n program,\n alias,\n ignoredMutableCallArgumentNames,\n stack,\n memo\n );\n if (!aliasValue) {\n return null;\n }\n\n aliasValue.dependencies.forEach((item) => dependencies.add(item));\n aliasValue.sideEffectDependencies.forEach((item) =>\n sideEffectDependencies.add(item)\n );\n values.push(aliasValue.value);\n }\n\n return {\n dependencies: [...dependencies],\n sideEffectDependencies: [...sideEffectDependencies],\n values,\n };\n}\n\nconst isOpaqueRuntimeComponentExpression = (\n program: Program,\n expr: Node,\n opaqueImportNames: Set<string> = new Set(),\n seen: Set<string> = new Set()\n): boolean => {\n const imports = collectImportBindings(program, { includeNamespace: true });\n const unwrapped = unwrapExpression(expr);\n\n if (isStaticMetaObjectExpression(unwrapped)) {\n return false;\n }\n\n if (\n unwrapped.type === 'ArrowFunctionExpression' ||\n unwrapped.type === 'FunctionExpression' ||\n unwrapped.type === 'ClassExpression'\n ) {\n return true;\n }\n\n if (isKnownReactFactoryCall(unwrapped, imports)) {\n return true;\n }\n\n if (\n unwrapped.type === 'CallExpression' &&\n unwrapped.arguments.length === 1 &&\n isKnownOpaqueRuntimeWrapperCallee(unwrapped.callee, imports)\n ) {\n const [argument] = unwrapped.arguments;\n return argument.type !== 'SpreadElement'\n ? isOpaqueRuntimeComponentExpression(\n program,\n argument,\n opaqueImportNames,\n seen\n )\n : false;\n }\n\n if (\n unwrapped.type === 'CallExpression' &&\n unwrapped.callee.type === 'Identifier'\n ) {\n const allowParams = unwrapped.arguments.every(\n (argument) =>\n argument.type !== 'SpreadElement' && isSafeStaticExpression(argument)\n );\n const local = findTopLevelConstExpression(program, unwrapped.callee.name);\n const returned = local\n ? functionReturnExpression(local, { allowParams })\n : null;\n return returned\n ? isOpaqueRuntimeComponentExpression(\n program,\n returned,\n opaqueImportNames,\n seen\n )\n : false;\n }\n\n if (unwrapped.type === 'MemberExpression' && !unwrapped.computed) {\n const name = rootIdentifierName(unwrapped);\n const imported = name ? imports.get(name) : undefined;\n return (\n !!name &&\n !!imported &&\n (opaqueImportNames.has(name) ||\n isKnownExternalRuntimeComponentImportSource(imported.source))\n );\n }\n\n if (unwrapped.type !== 'Identifier') {\n return false;\n }\n\n const { name } = unwrapped;\n if (seen.has(name)) {\n return false;\n }\n seen.add(name);\n\n const imported = imports.get(name);\n if (imported) {\n return (\n opaqueImportNames.has(name) ||\n isKnownOpaqueRuntimeImportSource(imported.source) ||\n isKnownExternalRuntimeComponentImportSource(imported.source)\n );\n }\n\n if (isTopLevelFunctionOrClass(program, name)) {\n return true;\n }\n\n const local = findTopLevelConstExpression(program, name);\n return local\n ? isOpaqueRuntimeComponentExpression(\n program,\n local,\n opaqueImportNames,\n seen\n )\n : false;\n};\n\nconst collectOpaqueRuntimeReferenceNames = (\n program: Program,\n expr: Node,\n names: Set<string>,\n seenHelpers: Set<string> = new Set()\n): void => {\n const unwrapped = unwrapExpression(expr);\n\n if (\n unwrapped.type === 'CallExpression' &&\n unwrapped.callee.type === 'Identifier'\n ) {\n const allowParams = unwrapped.arguments.every(\n (argument) =>\n argument.type !== 'SpreadElement' && isSafeStaticExpression(argument)\n );\n if (seenHelpers.has(unwrapped.callee.name)) {\n return;\n }\n\n const local = findTopLevelConstExpression(program, unwrapped.callee.name);\n const returned = local\n ? functionReturnExpression(local, { allowParams })\n : null;\n if (returned) {\n seenHelpers.add(unwrapped.callee.name);\n collectOpaqueRuntimeReferenceNames(program, returned, names, seenHelpers);\n seenHelpers.delete(unwrapped.callee.name);\n return;\n }\n }\n\n if (unwrapped.type === 'Identifier') {\n names.add(unwrapped.name);\n return;\n }\n\n getChildren(unwrapped).forEach((child) =>\n collectOpaqueRuntimeReferenceNames(program, child, names, seenHelpers)\n );\n};\n\nconst collectWYWMetaExtendsHelperNames = (program: Program): Set<string> => {\n const result = new Set<string>();\n\n const visit = (node: Node): void => {\n if (node.type === 'ObjectExpression') {\n const extendsExpression = findWYWMetaExtendsExpression(node);\n const unwrapped = extendsExpression\n ? unwrapExpression(extendsExpression)\n : null;\n if (\n unwrapped?.type === 'CallExpression' &&\n unwrapped.callee.type === 'Identifier' &&\n unwrapped.arguments.length === 0\n ) {\n result.add(unwrapped.callee.name);\n }\n }\n\n getChildren(node).forEach(visit);\n };\n\n visit(program);\n return result;\n};\n\nconst replaceExpressionChildren = (\n code: string,\n expression: Expression,\n replacements: Array<{ child: Expression; replacement: string }>\n): string => {\n const expressionCode = code.slice(expression.start, expression.end);\n return applyReplacements(\n expressionCode,\n replacements.map(({ child, replacement }) => ({\n end: child.end - expression.start,\n start: child.start - expression.start,\n text: replacement,\n }))\n );\n};\n\nconst parseSyntheticExpression = (\n expressionCode: string,\n filename: string\n): Expression | null => {\n const program = parseProgram(\n `const __wyw_static_target = ${expressionCode};`,\n filename\n );\n const declaration = program.body[0];\n if (declaration?.type !== 'VariableDeclaration') {\n return null;\n }\n\n const [declarator] = declaration.declarations;\n return declarator?.init ?? null;\n};\n\nconst prepareProcessorTarget = (\n code: string,\n filename: string,\n program: Program,\n target: Extract<ExportTarget, { kind: 'expression' }>,\n opaqueImportNames: Set<string> = new Set()\n): PreparedProcessorTarget | null => {\n const ignoredMutableCallArgumentNames =\n target.localName &&\n hasOnlySafeObjectAssignCallArgumentUses(program, target.localName)\n ? new Set([target.localName])\n : undefined;\n const dependencyOptions: StaticExpressionOptions = {\n allowMetadataCalls: true,\n ignoredMutableCallArgumentNames,\n };\n const expression = resolveObjectAssignProcessorExpression(\n program,\n target.expression\n );\n const extendsExpressions = collectWYWMetaExtendsExpressions(expression);\n const opaqueExtendsExpressions = extendsExpressions.filter(\n (extendsExpression) =>\n isOpaqueRuntimeComponentExpression(\n program,\n extendsExpression,\n opaqueImportNames\n )\n );\n\n if (opaqueExtendsExpressions.length > 0) {\n const replacements = opaqueExtendsExpressions.map((extendsExpression) => ({\n child: extendsExpression,\n replacement: 'null',\n }));\n const expressionCode = replaceExpressionChildren(\n code,\n expression,\n replacements\n );\n const syntheticExpression = parseSyntheticExpression(\n expressionCode,\n filename\n );\n if (!syntheticExpression) {\n return null;\n }\n\n const dependencies = collectStaticExpressionDependencies(\n program,\n {\n ...target,\n expression: syntheticExpression,\n },\n dependencyOptions\n );\n\n return dependencies\n ? {\n dependencies,\n evaluationCode: applyReplacements(\n code,\n replacements.map(({ child, replacement }) => ({\n end: child.end,\n start: child.start,\n text: replacement,\n }))\n ),\n evaluationSpan: {\n end:\n expression.end +\n replacements.reduce(\n (delta, { child, replacement }) =>\n delta + replacement.length - (child.end - child.start),\n 0\n ),\n start: expression.start,\n },\n expression,\n opaqueRuntimeBase: true,\n }\n : null;\n }\n\n const dependencies = collectStaticExpressionDependencies(\n program,\n {\n ...target,\n expression,\n },\n dependencyOptions\n );\n return dependencies\n ? {\n dependencies,\n expression,\n opaqueRuntimeBase: false,\n }\n : null;\n};\n\nconst collectStaticExpressionDependencies = (\n program: Program,\n target: Extract<ExportTarget, { kind: 'expression' }>,\n options: StaticExpressionOptions = {}\n): StaticExpressionDependencies | null => {\n const imports = collectImportBindings(program);\n const locals = collectLocalConstExpressions(program);\n const collectedImports = new Map<string, ImportBinding>();\n const referencedNames = new Set<string>();\n const mutableReferencedNames = new Set<string>();\n const visitedLocals = new Set<string>();\n const visitingLocals = new Set<string>();\n\n const markMutable = (name: string, expression: Node): void => {\n if (expressionMayProduceMutableValue(expression, locals, new Set())) {\n mutableReferencedNames.add(name);\n }\n };\n\n const collectLocal = (name: string): boolean => {\n const expression = locals.get(name);\n if (!expression || visitingLocals.has(name)) {\n return false;\n }\n\n referencedNames.add(name);\n markMutable(name, expression);\n\n if (visitedLocals.has(name)) {\n return true;\n }\n\n visitingLocals.add(name);\n const result = collectExpression(expression);\n visitingLocals.delete(name);\n\n if (result) {\n visitedLocals.add(name);\n }\n\n return result;\n };\n\n const collectExpression = (expr: Node): boolean => {\n if (!isSafeStaticExpression(expr, options)) {\n return false;\n }\n\n const references = new Set<string>();\n if (!collectStaticExpressionReferences(expr, references, options)) {\n return false;\n }\n\n for (const reference of references) {\n referencedNames.add(reference);\n\n const importBinding = imports.get(reference);\n if (importBinding) {\n collectedImports.set(\n `${importBinding.source}\\0${importBinding.imported}\\0${importBinding.local}`,\n importBinding\n );\n mutableReferencedNames.add(reference);\n continue;\n }\n\n if (!collectLocal(reference)) {\n return false;\n }\n }\n\n return true;\n };\n\n if (target.localName) {\n referencedNames.add(target.localName);\n markMutable(target.localName, target.expression);\n }\n\n if (!collectExpression(target.expression)) {\n return null;\n }\n\n const mutationHints = collectTopLevelMutationHints(program);\n for (const name of referencedNames) {\n if (mutationHints.mutatedNames.has(name)) {\n return null;\n }\n }\n\n for (const name of mutableReferencedNames) {\n if (\n mutationHints.callArgumentNames.has(name) &&\n !options.ignoredMutableCallArgumentNames?.has(name)\n ) {\n return null;\n }\n }\n\n return {\n imports: [...collectedImports.values()],\n };\n};\n\nconst getExportSpecifierNames = (\n specifier: ExportSpecifier\n): { exported: string; local: string } => ({\n exported: moduleExportName(specifier.exported),\n local: moduleExportName(specifier.local),\n});\n\nconst findExportTarget = (\n program: Program,\n exportedName: string\n): ExportTarget | null => {\n const imports = collectImportBindings(program);\n const locals = collectLocalConstExpressions(program);\n\n for (const statement of program.body) {\n if (statement.type === 'ExportNamedDeclaration') {\n if (statement.source) {\n for (const specifier of statement.specifiers) {\n if (specifier.type !== 'ExportSpecifier') {\n continue;\n }\n\n const names = getExportSpecifierNames(specifier);\n if (names.exported === exportedName) {\n return {\n imported: names.local,\n kind: 'import',\n source: statement.source.value,\n };\n }\n }\n\n continue;\n }\n\n if (statement.declaration?.type === 'VariableDeclaration') {\n for (const declarator of statement.declaration.declarations) {\n if (\n declarator.id.type === 'Identifier' &&\n declarator.id.name === exportedName &&\n declarator.init\n ) {\n return {\n expression: declarator.init,\n kind: 'expression',\n localName: declarator.id.name,\n };\n }\n }\n\n continue;\n }\n\n for (const specifier of statement.specifiers) {\n if (specifier.type !== 'ExportSpecifier') {\n continue;\n }\n\n const names = getExportSpecifierNames(specifier);\n if (names.exported !== exportedName) {\n continue;\n }\n\n const importBinding = imports.get(names.local);\n if (importBinding) {\n return {\n imported: importBinding.imported,\n kind: 'import',\n source: importBinding.source,\n };\n }\n\n const local = locals.get(names.local);\n if (local) {\n return {\n expression: local,\n kind: 'expression',\n localName: names.local,\n };\n }\n }\n }\n\n if (\n exportedName === 'default' &&\n statement.type === 'ExportDefaultDeclaration'\n ) {\n const { declaration } = statement;\n if (declaration.type === 'Identifier') {\n const importBinding = imports.get(declaration.name);\n if (importBinding) {\n return {\n imported: importBinding.imported,\n kind: 'import',\n source: importBinding.source,\n };\n }\n\n const local = locals.get(declaration.name);\n if (local) {\n return {\n expression: local,\n kind: 'expression',\n localName: declaration.name,\n };\n }\n\n return null;\n }\n\n return {\n expression: declaration as Expression,\n kind: 'expression',\n };\n }\n }\n\n return null;\n};\n\nconst exportedLocalName = (\n program: Program,\n exportedName: string\n): string | null => {\n for (const statement of program.body) {\n if (statement.type === 'ExportNamedDeclaration') {\n if (statement.source || statement.declaration) {\n continue;\n }\n\n for (const specifier of statement.specifiers) {\n if (specifier.type !== 'ExportSpecifier') {\n continue;\n }\n\n const names = getExportSpecifierNames(specifier);\n if (names.exported === exportedName) {\n return names.local;\n }\n }\n }\n\n if (\n exportedName === 'default' &&\n statement.type === 'ExportDefaultDeclaration' &&\n statement.declaration.type === 'Identifier'\n ) {\n return statement.declaration.name;\n }\n }\n\n return null;\n};\n\nconst isIdentifierNamed = (node: Node, name: string): boolean =>\n node.type === 'Identifier' && node.name === name;\n\nconst enumLiteralValue = (node: Node): number | string | null => {\n const unwrapped = unwrapExpression(node);\n if (unwrapped.type === 'Literal') {\n const { value } = unwrapped;\n return typeof value === 'string' || typeof value === 'number'\n ? value\n : null;\n }\n\n if (unwrapped.type === 'UnaryExpression') {\n const argument = unwrapExpression(unwrapped.argument);\n if (\n (unwrapped.operator === '-' || unwrapped.operator === '+') &&\n argument.type === 'Literal' &&\n typeof argument.value === 'number'\n ) {\n return unwrapped.operator === '-' ? -argument.value : argument.value;\n }\n }\n\n return null;\n};\n\nconst enumMemberKey = (node: Node, computed: boolean): string | null => {\n const unwrapped = unwrapExpression(node);\n if (!computed && unwrapped.type === 'Identifier') {\n return unwrapped.name;\n }\n\n const value = enumLiteralValue(unwrapped);\n return typeof value === 'string' || typeof value === 'number'\n ? String(value)\n : null;\n};\n\nconst enumSimpleAssignment = (\n node: Node,\n enumParamName: string\n): { key: string; value: number | string } | null => {\n const unwrapped = unwrapExpression(node);\n if (unwrapped.type !== 'AssignmentExpression' || unwrapped.operator !== '=') {\n return null;\n }\n\n const left = unwrapExpression(unwrapped.left);\n if (\n left.type !== 'MemberExpression' ||\n !isIdentifierNamed(unwrapExpression(left.object), enumParamName)\n ) {\n return null;\n }\n\n const key = enumMemberKey(left.property, left.computed);\n const value = enumLiteralValue(unwrapped.right);\n return key !== null && value !== null ? { key, value } : null;\n};\n\nconst collectEnumIifeAssignments = (\n call: Node,\n localName: string\n): Record<string, number | string> | null => {\n const unwrapped = unwrapExpression(\n call.type === 'ExpressionStatement' ? call.expression : call\n );\n if (unwrapped.type !== 'CallExpression' || unwrapped.arguments.length !== 1) {\n return null;\n }\n\n const callee = unwrapExpression(unwrapped.callee);\n if (\n callee.type !== 'FunctionExpression' ||\n callee.async ||\n !callee.body ||\n callee.params.length !== 1 ||\n callee.params[0]?.type !== 'Identifier'\n ) {\n return null;\n }\n\n const enumParamName = callee.params[0].name;\n const argument = unwrapExpression(unwrapped.arguments[0]);\n if (argument.type !== 'LogicalExpression' || argument.operator !== '||') {\n return null;\n }\n\n const fallback = unwrapExpression(argument.right);\n if (\n !isIdentifierNamed(unwrapExpression(argument.left), localName) ||\n fallback.type !== 'AssignmentExpression' ||\n fallback.operator !== '=' ||\n !isIdentifierNamed(unwrapExpression(fallback.left), localName) ||\n unwrapExpression(fallback.right).type !== 'ObjectExpression'\n ) {\n return null;\n }\n\n const result: Record<string, number | string> = {};\n for (const statement of callee.body.body) {\n if (statement.type !== 'ExpressionStatement') {\n return null;\n }\n\n const expression = unwrapExpression(statement.expression);\n if (\n expression.type !== 'AssignmentExpression' ||\n expression.operator !== '='\n ) {\n return null;\n }\n\n const left = unwrapExpression(expression.left);\n if (\n left.type === 'MemberExpression' &&\n isIdentifierNamed(unwrapExpression(left.object), enumParamName)\n ) {\n const numericEnumAssignment = enumSimpleAssignment(\n left.property,\n enumParamName\n );\n const reverseValue = enumLiteralValue(expression.right);\n if (\n numericEnumAssignment &&\n typeof numericEnumAssignment.value === 'number' &&\n typeof reverseValue === 'string'\n ) {\n result[numericEnumAssignment.key] = numericEnumAssignment.value;\n result[String(numericEnumAssignment.value)] = reverseValue;\n continue;\n }\n }\n\n const assignment = enumSimpleAssignment(expression, enumParamName);\n if (!assignment) {\n return null;\n }\n\n result[assignment.key] = assignment.value;\n }\n\n return Object.keys(result).length > 0 ? result : null;\n};\n\nconst enumIifeLocalName = (statement: Node): string | null => {\n if (statement.type !== 'ExpressionStatement') {\n return null;\n }\n\n const expression = unwrapExpression(statement.expression);\n if (\n expression.type !== 'CallExpression' ||\n expression.arguments.length !== 1\n ) {\n return null;\n }\n\n const argument = unwrapExpression(expression.arguments[0]);\n if (argument.type !== 'LogicalExpression' || argument.operator !== '||') {\n return null;\n }\n\n const fallback = unwrapExpression(argument.right);\n if (\n argument.left.type !== 'Identifier' ||\n fallback.type !== 'AssignmentExpression' ||\n fallback.left.type !== 'Identifier'\n ) {\n return null;\n }\n\n return argument.left.name === fallback.left.name ? argument.left.name : null;\n};\n\nconst isEnumVarDeclaration = (\n statement: Node\n): statement is VariableDeclaration =>\n statement.type === 'VariableDeclaration' &&\n statement.kind === 'var' &&\n statement.declarations.length > 0 &&\n statement.declarations.every(\n (declarator) =>\n declarator.id.type === 'Identifier' && declarator.init === null\n );\n\nconst isTypeScriptEnumOnlyModule = (program: Program): boolean =>\n program.body.every((statement) => {\n if (isEnumVarDeclaration(statement)) {\n return true;\n }\n\n const localName = enumIifeLocalName(statement);\n if (localName) {\n return collectEnumIifeAssignments(statement, localName) !== null;\n }\n\n if (statement.type === 'ExportDefaultDeclaration') {\n return statement.declaration.type === 'Identifier';\n }\n\n return (\n statement.type === 'ExportNamedDeclaration' &&\n !statement.source &&\n !statement.declaration &&\n statement.specifiers.every(\n (specifier) => specifier.type === 'ExportSpecifier'\n )\n );\n });\n\nconst typeScriptEnumStaticExportValue = (\n program: Program,\n exportedName: string\n): Record<string, number | string> | null => {\n if (!isTypeScriptEnumOnlyModule(program)) {\n return null;\n }\n\n const localName = exportedLocalName(program, exportedName);\n if (!localName) {\n return null;\n }\n\n const hasDeclaration = program.body.some(\n (statement) =>\n isEnumVarDeclaration(statement) &&\n statement.declarations.some(\n (declarator) =>\n declarator.id.type === 'Identifier' &&\n declarator.id.name === localName\n )\n );\n if (!hasDeclaration) {\n return null;\n }\n\n for (const statement of program.body) {\n const enumValue = collectEnumIifeAssignments(statement, localName);\n if (enumValue) {\n return enumValue;\n }\n }\n\n return null;\n};\n\nfunction* resolveDependency(\n action: ITransformAction,\n importer: string,\n source: string,\n imported: string\n): SyncScenarioFor<IEntrypointDependency | null> {\n const entrypoint =\n importer === action.entrypoint.name\n ? action.entrypoint\n : Entrypoint.createRoot(action.services, importer, [imported], undefined);\n const imports = new Map([[source, [imported]]]);\n const [resolved] = yield* action.getNext('resolveImports', entrypoint, {\n imports,\n phase: 'initial',\n });\n\n return resolved ?? null;\n}\n\nfunction* 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}\n\nfunction* resolveExportAsOpaqueRuntimeImport(\n action: ITransformAction,\n filename: string,\n exportedName: string,\n stack: Set<string>,\n memo: Map<string, OpaqueRuntimeImportProof | null>\n): SyncScenarioFor<OpaqueRuntimeImportProof | 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 return null;\n }\n\n stack.add(memoKey);\n\n const loadedAndParsed = action.services.loadAndParseFn(\n action.services,\n filename,\n undefined,\n action.services.log\n );\n if (\n loadedAndParsed.evaluator === 'ignored' ||\n loadedAndParsed.evaluator !== oxcShaker\n ) {\n memo.set(memoKey, null);\n stack.delete(memoKey);\n return null;\n }\n\n const program = parseProgram(loadedAndParsed.code, filename);\n const target = findExportTarget(program, exportedName);\n if (!target) {\n memo.set(memoKey, null);\n stack.delete(memoKey);\n return null;\n }\n\n if (target.kind === 'import') {\n const resolved = yield* resolveImportAsOpaqueRuntime(\n action,\n filename,\n target,\n stack,\n memo\n );\n memo.set(memoKey, resolved);\n stack.delete(memoKey);\n return resolved;\n }\n\n if (isOpaqueRuntimeComponentExpression(program, target.expression)) {\n const resolved = {\n dependencies: [filename],\n names: new Set<string>(),\n };\n memo.set(memoKey, resolved);\n stack.delete(memoKey);\n return resolved;\n }\n\n const imports = collectImportBindings(program, { includeNamespace: true });\n const referencedNames = new Set<string>();\n collectOpaqueRuntimeReferenceNames(\n program,\n target.expression,\n referencedNames\n );\n const opaqueImportNames = new Set<string>();\n const dependencies = new Set<string>([filename]);\n\n for (const name of referencedNames) {\n const binding = imports.get(name);\n if (\n !binding ||\n binding.source === 'react' ||\n isKnownOpaqueRuntimeWrapperImport(binding)\n ) {\n continue;\n }\n\n const proof = yield* resolveImportAsOpaqueRuntime(\n action,\n filename,\n binding,\n stack,\n memo\n );\n if (!proof) {\n continue;\n }\n\n opaqueImportNames.add(name);\n proof.dependencies.forEach((dependency) => dependencies.add(dependency));\n }\n\n const resolved = isOpaqueRuntimeComponentExpression(\n program,\n target.expression,\n opaqueImportNames\n )\n ? {\n dependencies: [...dependencies],\n names: opaqueImportNames,\n }\n : null;\n memo.set(memoKey, resolved);\n stack.delete(memoKey);\n return resolved;\n}\n\nconst knownOpaqueRuntimeSourceDependency = (\n importer: string,\n source: string\n): string | null => {\n if (!isKnownOpaqueRuntimeImportSource(source)) {\n return null;\n }\n\n const request = stripQueryAndHash(source);\n if (isAbsolute(request)) {\n return request;\n }\n\n return request.startsWith('.')\n ? resolvePath(dirname(importer), request)\n : null;\n};\n\nfunction* resolveImportAsOpaqueRuntime(\n action: ITransformAction,\n importer: string,\n binding: Pick<ImportBinding, 'imported' | 'source'>,\n stack: Set<string>,\n memo: Map<string, OpaqueRuntimeImportProof | null>\n): SyncScenarioFor<OpaqueRuntimeImportProof | null> {\n const knownSourceDependency = knownOpaqueRuntimeSourceDependency(\n importer,\n binding.source\n );\n if (knownSourceDependency) {\n return {\n dependencies: [knownSourceDependency],\n names: new Set(),\n };\n }\n\n if (isKnownExternalRuntimeComponentImportSource(binding.source)) {\n return {\n dependencies: [],\n names: new Set(),\n };\n }\n\n const dependency = yield* resolveDependency(\n action,\n importer,\n binding.source,\n binding.imported\n );\n if (!dependency?.resolved) {\n return null;\n }\n\n if (\n isKnownOpaqueRuntimeImportSource(binding.source) ||\n isKnownOpaqueRuntimeImportSource(dependency.resolved)\n ) {\n return {\n dependencies: [dependency.resolved],\n names: new Set(),\n };\n }\n\n const resolved = yield* resolveExportAsOpaqueRuntimeImport(\n action,\n dependency.resolved,\n binding.imported,\n stack,\n memo\n );\n return resolved\n ? {\n dependencies: [\n dependency.resolved,\n ...resolved.dependencies.filter(\n (item) => item !== dependency.resolved\n ),\n ],\n names: resolved.names,\n }\n : null;\n}\n\nfunction* collectOpaqueRuntimeImportProof(\n action: ITransformAction,\n filename: string,\n program: Program,\n expression: Expression\n): SyncScenarioFor<OpaqueRuntimeImportProof> {\n const extendsExpressions = collectWYWMetaExtendsExpressions(expression);\n if (extendsExpressions.length === 0) {\n return {\n dependencies: [],\n names: new Set(),\n };\n }\n\n const imports = collectImportBindings(program, { includeNamespace: true });\n const referencedNames = new Set<string>();\n extendsExpressions.forEach((extendsExpression) =>\n collectOpaqueRuntimeReferenceNames(\n program,\n extendsExpression,\n referencedNames\n )\n );\n\n const dependencies = new Set<string>();\n const names = new Set<string>();\n const memo = new Map<string, OpaqueRuntimeImportProof | null>();\n\n for (const name of referencedNames) {\n const binding = imports.get(name);\n if (!binding || binding.source === 'react') {\n continue;\n }\n\n const proof = yield* resolveImportAsOpaqueRuntime(\n action,\n filename,\n binding,\n new Set(),\n memo\n );\n if (!proof) {\n continue;\n }\n\n names.add(name);\n proof.dependencies.forEach((dependency) => dependencies.add(dependency));\n }\n\n return {\n dependencies: [...dependencies],\n names,\n };\n}\n\nfunction* resolveProcessorStaticExport(\n action: ITransformAction,\n filename: string,\n code: string,\n codeHash: string,\n program: Program,\n exportedName: string,\n stack: Set<string>,\n memo: Map<string, StaticExportResult | null>\n): SyncScenarioFor<StaticExportResult | null> {\n const root = action.services.options.root ?? process.cwd();\n if (!isLocalStaticMetadataFile(filename, root)) {\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'processor-metadata',\n reason: 'outside-root',\n status: 'rejected',\n });\n return null;\n }\n\n if (\n collectProcessorImportLocals(action, program, code, filename).size === 0\n ) {\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'processor-metadata',\n reason: 'no-processor-imports',\n status: 'rejected',\n });\n return null;\n }\n\n const preevalResult = getStaticMetadataPreevalResult(\n action,\n filename,\n code,\n codeHash\n );\n if (!preevalResult) {\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'processor-metadata',\n reason: 'metadata-preeval-failed',\n status: 'rejected',\n });\n return null;\n }\n\n if (!preevalResult.metadata) {\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'processor-metadata',\n reason: 'metadata-missing',\n status: 'rejected',\n });\n return null;\n }\n\n const preevalCode = preevalResult.baseCode;\n const preevalProgram = parseProgram(preevalCode, filename);\n const target = findExportTarget(preevalProgram, exportedName);\n if (!target || target.kind === 'import') {\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'processor-metadata',\n reason: 'processor-target-missing',\n status: 'rejected',\n });\n return null;\n }\n\n const processorObjectAssignAliases = objectAssignAliasExpressionsForTarget(\n preevalProgram,\n target\n );\n const processorExpression = resolveObjectAssignProcessorExpression(\n preevalProgram,\n target.expression\n );\n const opaqueRuntimeImportProof = yield* collectOpaqueRuntimeImportProof(\n action,\n filename,\n preevalProgram,\n processorExpression\n );\n const preparedTarget = prepareProcessorTarget(\n preevalCode,\n filename,\n preevalProgram,\n target,\n opaqueRuntimeImportProof.names\n );\n if (!preparedTarget) {\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'processor-metadata',\n reason: 'unsupported-processor-expression',\n status: 'rejected',\n });\n return null;\n }\n\n const env = new Map<string, unknown>();\n const dependencies = new Set<string>([filename]);\n const sideEffectDependencies = new Set<string>();\n opaqueRuntimeImportProof.dependencies.forEach((dependency) =>\n dependencies.add(dependency)\n );\n\n for (const binding of preparedTarget.dependencies.imports) {\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: 'processor-metadata',\n reason: 'resolve-failed',\n source: binding.source,\n status: 'rejected',\n });\n return null;\n }\n\n if (\n !bindStaticResolvedValue(\n env,\n preparedTarget.expression,\n binding.local,\n resolved,\n {\n wrapNonCallable: true,\n }\n )\n ) {\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n imported: binding.imported,\n phase: 'processor-metadata',\n reason: 'callable-usage-unsupported',\n source: binding.source,\n status: 'rejected',\n });\n return null;\n }\n\n resolved.dependencies.forEach((dependency) => dependencies.add(dependency));\n resolved.sideEffectDependencies?.forEach((dependency) =>\n sideEffectDependencies.add(dependency)\n );\n }\n\n const value =\n preparedTarget.evaluationCode && preparedTarget.evaluationSpan\n ? evaluateOxcStaticExpressionAt(\n preparedTarget.evaluationCode,\n filename,\n preparedTarget.evaluationSpan,\n env\n )\n : evaluateOxcStaticExpressionAt(\n preevalCode,\n filename,\n {\n end: preparedTarget.expression.end,\n start: preparedTarget.expression.start,\n },\n env\n );\n if (!isOxcStaticSerializableValue(value)) {\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'processor-metadata',\n reason: 'non-serializable',\n status: 'rejected',\n });\n return null;\n }\n\n let resolvedValue = value;\n if (processorObjectAssignAliases && isStaticWYWMetaValue(value)) {\n const aliasValues = yield* resolveObjectAssignAliasValues(\n action,\n filename,\n preevalCode,\n preevalProgram,\n processorObjectAssignAliases,\n stack,\n memo\n );\n const mergedValue = aliasValues\n ? mergeStaticObjectAssignAliases(value, aliasValues.values)\n : null;\n\n if (mergedValue) {\n resolvedValue = mergedValue;\n aliasValues?.dependencies.forEach((dependency) =>\n dependencies.add(dependency)\n );\n aliasValues?.sideEffectDependencies.forEach((dependency) =>\n sideEffectDependencies.add(dependency)\n );\n }\n }\n\n const isStaticMeta = isStaticWYWMetaValue(resolvedValue);\n const isStaticMetaTree =\n !isStaticMeta && isStaticWYWMetaTreeValue(resolvedValue);\n const processors = preevalResult.metadata\n .processors as unknown as StaticProcessorInstance[];\n const isSelectorOnly =\n !isStaticMeta &&\n !isStaticMetaTree &&\n isSelectorOnlyProcessorValue(resolvedValue, processors, new Map());\n const isSideEffectClassValue =\n !isStaticMeta &&\n !isStaticMetaTree &&\n !isSelectorOnly &&\n isProcessorClassValue(resolvedValue, processors, new Map());\n if (\n !isStaticMeta &&\n !isStaticMetaTree &&\n !isSelectorOnly &&\n !isSideEffectClassValue\n ) {\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'processor-metadata',\n reason: 'non-empty-css-artifact',\n status: 'rejected',\n });\n return null;\n }\n\n let resolvedReason: string | undefined;\n if (preparedTarget.opaqueRuntimeBase) {\n resolvedReason = 'opaque-runtime-component';\n } else if (isSideEffectClassValue) {\n resolvedReason = 'non-empty-css-artifact-side-effect';\n }\n\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'processor-metadata',\n reason: resolvedReason,\n status: 'resolved',\n });\n\n return {\n dependencies: [...dependencies],\n sideEffectDependencies: isSideEffectClassValue\n ? [filename, ...sideEffectDependencies]\n : [...sideEffectDependencies],\n value: resolvedValue,\n };\n}\n\nfunction* resolveObjectAssignStaticExport(\n action: ITransformAction,\n filename: string,\n code: string,\n program: Program,\n target: Extract<ExportTarget, { kind: 'expression' }>,\n stack: Set<string>,\n memo: Map<string, StaticExportResult | null>\n): SyncScenarioFor<StaticExportResult | null> {\n const objectAssignAliases = objectAssignAliasExpressionsForTarget(\n program,\n target\n );\n const objectAssignTarget = objectAssignTargetExpression(\n program,\n target.expression\n );\n if (!objectAssignTarget) {\n return null;\n }\n\n const imports = collectImportBindings(program);\n if (objectAssignTarget.type === 'Identifier') {\n const importBinding = imports.get(objectAssignTarget.name);\n if (importBinding) {\n const resolved = yield* resolveImportValue(\n action,\n filename,\n importBinding,\n stack,\n memo\n );\n if (!resolved || !isStaticWYWMetaValue(resolved.value)) {\n return null;\n }\n\n const dependencies = new Set([\n filename,\n ...resolved.dependencies.filter((item) => item !== filename),\n ]);\n const sideEffectDependencies = new Set(\n resolved.sideEffectDependencies ?? []\n );\n const aliasValues = objectAssignAliases\n ? yield* resolveObjectAssignAliasValues(\n action,\n filename,\n code,\n program,\n objectAssignAliases,\n stack,\n memo\n )\n : null;\n const mergedValue = aliasValues\n ? mergeStaticObjectAssignAliases(resolved.value, aliasValues.values)\n : null;\n aliasValues?.dependencies.forEach((item) => dependencies.add(item));\n aliasValues?.sideEffectDependencies.forEach((item) =>\n sideEffectDependencies.add(item)\n );\n\n return {\n dependencies: [...dependencies],\n sideEffectDependencies: [...sideEffectDependencies],\n value: mergedValue ?? resolved.value,\n };\n }\n }\n\n const expression =\n objectAssignTarget.type === 'Identifier'\n ? findTopLevelConstExpression(program, objectAssignTarget.name) ??\n objectAssignTarget\n : objectAssignTarget;\n const staticDependencies = collectStaticExpressionDependencies(program, {\n ...target,\n expression,\n });\n if (!staticDependencies) {\n return null;\n }\n\n const env = new Map<string, unknown>();\n const dependencies = new Set<string>([filename]);\n const sideEffectDependencies = new Set<string>();\n\n for (const binding of staticDependencies.imports) {\n const resolved = yield* resolveImportValue(\n action,\n filename,\n binding,\n stack,\n memo\n );\n if (!resolved) {\n return null;\n }\n\n if (!bindStaticResolvedValue(env, expression, binding.local, resolved)) {\n return null;\n }\n\n resolved.dependencies.forEach((item) => dependencies.add(item));\n resolved.sideEffectDependencies?.forEach((item) =>\n sideEffectDependencies.add(item)\n );\n }\n\n const value = evaluateOxcStaticExpressionAt(\n code,\n filename,\n {\n end: expression.end,\n start: expression.start,\n },\n env\n );\n if (!isStaticWYWMetaValue(value)) {\n return null;\n }\n\n const aliasValues = objectAssignAliases\n ? yield* resolveObjectAssignAliasValues(\n action,\n filename,\n code,\n program,\n objectAssignAliases,\n stack,\n memo\n )\n : null;\n const mergedValue = aliasValues\n ? mergeStaticObjectAssignAliases(value, aliasValues.values)\n : null;\n aliasValues?.dependencies.forEach((item) => dependencies.add(item));\n aliasValues?.sideEffectDependencies.forEach((item) =>\n sideEffectDependencies.add(item)\n );\n\n return {\n dependencies: [...dependencies],\n sideEffectDependencies: [...sideEffectDependencies],\n value: mergedValue ?? value,\n };\n}\n\nconst zeroArgFunctionReturnExpression = (\n expression: Expression\n): Expression | null => {\n const unwrapped = unwrapExpression(expression);\n if (\n unwrapped.type !== 'ArrowFunctionExpression' &&\n unwrapped.type !== 'FunctionExpression'\n ) {\n return null;\n }\n\n if (unwrapped.async || unwrapped.params.length !== 0 || !unwrapped.body) {\n return null;\n }\n\n if (unwrapped.body.type !== 'BlockStatement') {\n return unwrapped.body as Expression;\n }\n\n if (unwrapped.body.body.length !== 1) {\n return null;\n }\n\n const [statement] = unwrapped.body.body;\n return statement?.type === 'ReturnStatement' && statement.argument\n ? statement.argument\n : null;\n};\n\nfunction* resolveZeroArgFunctionStaticExport(\n action: ITransformAction,\n filename: string,\n code: string,\n program: Program,\n target: Extract<ExportTarget, { kind: 'expression' }>,\n stack: Set<string>,\n memo: Map<string, StaticExportResult | null>\n): SyncScenarioFor<StaticExportResult | null> {\n const returnExpression = zeroArgFunctionReturnExpression(target.expression);\n if (!returnExpression) {\n return null;\n }\n\n const staticDependencies = collectStaticExpressionDependencies(\n program,\n {\n ...target,\n expression: returnExpression,\n },\n { allowMetadataCalls: true }\n );\n if (!staticDependencies) {\n return null;\n }\n\n const env = new Map<string, unknown>();\n const dependencies = new Set<string>([filename]);\n const sideEffectDependencies = new Set<string>();\n\n for (const binding of staticDependencies.imports) {\n const resolved = yield* resolveImportValue(\n action,\n filename,\n binding,\n stack,\n memo\n );\n if (!resolved) {\n return null;\n }\n\n if (\n !bindStaticResolvedValue(env, returnExpression, binding.local, resolved)\n ) {\n return null;\n }\n\n resolved.dependencies.forEach((item) => dependencies.add(item));\n resolved.sideEffectDependencies?.forEach((item) =>\n sideEffectDependencies.add(item)\n );\n }\n\n const value = evaluateOxcStaticExpressionAt(\n code,\n filename,\n {\n end: returnExpression.end,\n start: returnExpression.start,\n },\n env\n );\n return isOxcStaticSerializableValue(value)\n ? {\n callable: 'zero-arg',\n dependencies: [...dependencies],\n sideEffectDependencies: [...sideEffectDependencies],\n value,\n }\n : null;\n}\n\nfunction* 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 objectAssignResult = yield* resolveObjectAssignStaticExport(\n action,\n filename,\n code,\n program,\n target,\n stack,\n memo\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 );\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 const staticDependencies = collectStaticExpressionDependencies(\n program,\n target\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 );\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'export',\n reason: metadataResult ? undefined : 'resolve-failed',\n status: metadataResult ? 'resolved' : 'rejected',\n });\n return finish(metadataResult);\n }\n\n const env = new Map<string, unknown>();\n const dependencies = new Set<string>([filename]);\n const sideEffectDependencies = new Set<string>();\n\n for (const binding of staticDependencies.imports) {\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 const value = evaluateOxcStaticExpressionAt(\n code,\n filename,\n {\n end: target.expression.end,\n start: target.expression.start,\n },\n env\n );\n if (!isOxcStaticSerializableValue(value)) {\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\nfunction* resolveCandidateValue(\n action: ITransformAction,\n candidate: OxcStaticValueCandidate,\n filename: string,\n memo: Map<string, StaticExportResult | null>\n): SyncScenarioFor<StaticExportResult | null> {\n const env = new Map<string, unknown>();\n const dependencies = new Set<string>();\n const sideEffectDependencies = new Set<string>();\n const sideEffectImportLocals = new Set<string>();\n let candidateExpression: Expression | null | undefined;\n\n for (const item of candidate.imports) {\n const resolved = yield* resolveImportValue(\n action,\n filename,\n item,\n new Set(),\n memo\n );\n if (!resolved) {\n debugStaticResolve(action, {\n candidate: candidate.name,\n filename,\n imported: item.imported,\n phase: 'candidate',\n reason: 'candidate-import-unresolved',\n source: item.source,\n status: 'rejected',\n });\n return null;\n }\n\n if (resolved.callable === 'zero-arg' && candidateExpression === undefined) {\n candidateExpression = parseStaticExpressionSource(\n candidate.source,\n filename\n );\n }\n\n const expressionForBinding =\n resolved.callable === 'zero-arg' ? candidateExpression : null;\n if (\n (resolved.callable === 'zero-arg' && !expressionForBinding) ||\n (expressionForBinding &&\n !bindStaticResolvedValue(\n env,\n expressionForBinding,\n item.local,\n resolved\n ))\n ) {\n debugStaticResolve(action, {\n candidate: candidate.name,\n filename,\n imported: item.imported,\n phase: 'candidate',\n reason: 'candidate-callable-usage-unsupported',\n source: item.source,\n status: 'rejected',\n });\n return null;\n }\n\n if (!expressionForBinding) {\n env.set(item.local, resolved.value);\n }\n\n resolved.dependencies.forEach((dependency) => dependencies.add(dependency));\n resolved.sideEffectDependencies?.forEach((dependency) => {\n sideEffectDependencies.add(dependency);\n sideEffectImportLocals.add(item.importLocal ?? item.local);\n });\n }\n\n const value = evaluateOxcStaticExpression(candidate.source, filename, env);\n if (!isOxcStaticSerializableValue(value)) {\n debugStaticResolve(action, {\n candidate: candidate.name,\n filename,\n phase: 'candidate',\n reason: 'candidate-expression-non-serializable',\n status: 'rejected',\n });\n return null;\n }\n\n debugStaticResolve(action, {\n candidate: candidate.name,\n filename,\n phase: 'candidate',\n status: 'resolved',\n });\n\n return {\n dependencies: [...dependencies],\n sideEffectDependencies: [...sideEffectDependencies],\n sideEffectImportLocals: [...sideEffectImportLocals],\n value,\n };\n}\n\nfunction* resolveOpaqueRuntimeCandidateValue(\n action: ITransformAction,\n candidate: OxcStaticValueCandidate,\n filename: string\n): SyncScenarioFor<StaticExportResult | null> {\n if (candidate.imports.length === 0) {\n return null;\n }\n\n const dependencies = new Set<string>();\n const memo = new Map<string, OpaqueRuntimeImportProof | null>();\n\n for (const item of candidate.imports) {\n const proof = yield* resolveImportAsOpaqueRuntime(\n action,\n filename,\n item,\n new Set(),\n memo\n );\n if (!proof) {\n return null;\n }\n\n proof.dependencies.forEach((dependency) => dependencies.add(dependency));\n }\n\n return {\n dependencies: [...dependencies],\n value: null,\n };\n}\n\nexport function* resolveStaticOxcPreevalValues(\n this: ITransformAction\n): SyncScenarioFor<boolean> {\n const preevalResult = this.entrypoint.getPreevalResult();\n const candidates = preevalResult?.staticValueCandidates ?? [];\n if (!preevalResult || candidates.length === 0) {\n return false;\n }\n\n const filename =\n this.entrypoint.loadedAndParsed.evaluator === 'ignored'\n ? this.entrypoint.name\n : this.entrypoint.loadedAndParsed.evalConfig.filename ??\n this.entrypoint.name;\n if (!isStaticImportValuesEnabled(this, filename)) {\n debugStaticResolve(this, {\n filename,\n phase: 'entrypoint',\n reason: 'feature-disabled',\n status: 'skipped',\n });\n return false;\n }\n\n const staticValueCache =\n preevalResult.staticValueCache ?? new Map<string, unknown>();\n const staticDependencies = new Set(preevalResult.staticDependencies ?? []);\n const staticImportLocals = new Set<string>();\n const sideEffectImportLocals = new Set<string>();\n const staticNullWYWMetaExtendsHelpers = new Set(\n preevalResult.staticNullWYWMetaExtendsHelpers ?? []\n );\n const memo = new Map<string, StaticExportResult | null>();\n const opaqueRuntimeBaseHelpers = collectWYWMetaExtendsHelperNames(\n parseProgram(preevalResult.baseCode ?? preevalResult.code, filename)\n );\n const evalDependencyNames = new Set(preevalResult.dependencyNames ?? []);\n let changed = false;\n let hasKnownStaticCandidate = false;\n\n for (const candidate of candidates) {\n const isOpaqueRuntimeBaseHelper = opaqueRuntimeBaseHelpers.has(\n candidate.name\n );\n if (\n !evalDependencyNames.has(candidate.name) &&\n !isOpaqueRuntimeBaseHelper &&\n !staticValueCache.has(candidate.name)\n ) {\n debugStaticResolve(this, {\n candidate: candidate.name,\n filename,\n phase: 'candidate',\n reason: 'not-eval-dependency',\n status: 'skipped',\n });\n continue;\n }\n\n if (staticValueCache.has(candidate.name)) {\n hasKnownStaticCandidate = true;\n candidate.imports.forEach((item) =>\n staticImportLocals.add(item.importLocal ?? item.local)\n );\n if (\n isOpaqueRuntimeBaseHelper &&\n staticValueCache.get(candidate.name) === null\n ) {\n staticNullWYWMetaExtendsHelpers.add(candidate.name);\n }\n debugStaticResolve(this, {\n candidate: candidate.name,\n filename,\n phase: 'candidate',\n reason: 'already-static',\n status: 'skipped',\n });\n continue;\n }\n\n let resolved: StaticExportResult | null;\n let resolvedOpaqueRuntimeBase = false;\n if (isOpaqueRuntimeBaseHelper) {\n resolved = yield* resolveOpaqueRuntimeCandidateValue(\n this,\n candidate,\n filename\n );\n resolvedOpaqueRuntimeBase = !!resolved;\n if (!resolved) {\n resolved = yield* resolveCandidateValue(\n this,\n candidate,\n filename,\n memo\n );\n }\n } else {\n resolved = yield* resolveCandidateValue(this, candidate, filename, memo);\n }\n if (!resolved) {\n continue;\n }\n\n if (resolvedOpaqueRuntimeBase) {\n debugStaticResolve(this, {\n candidate: candidate.name,\n filename,\n phase: 'candidate',\n reason: 'opaque-runtime-component',\n status: 'resolved',\n });\n staticNullWYWMetaExtendsHelpers.add(candidate.name);\n }\n\n staticValueCache.set(candidate.name, resolved.value);\n hasKnownStaticCandidate = true;\n candidate.imports.forEach((item) =>\n staticImportLocals.add(item.importLocal ?? item.local)\n );\n resolved.dependencies.forEach((dependency) =>\n staticDependencies.add(dependency)\n );\n resolved.sideEffectImportLocals?.forEach((local) =>\n sideEffectImportLocals.add(local)\n );\n changed = true;\n }\n\n if (!changed && !hasKnownStaticCandidate) {\n return false;\n }\n\n const dependencyNames = (preevalResult.dependencyNames ?? []).filter(\n (name) => !staticValueCache.has(name)\n );\n preevalResult.dependencyNames = dependencyNames;\n preevalResult.staticValueCache = staticValueCache;\n preevalResult.staticDependencies = [...staticDependencies];\n preevalResult.staticNullWYWMetaExtendsHelpers = [\n ...staticNullWYWMetaExtendsHelpers,\n ];\n const originalBaseCode = preevalResult.baseCode ?? preevalResult.code;\n const staticExtendsHelperValues = new Map(staticValueCache);\n staticNullWYWMetaExtendsHelpers.forEach((name) => {\n if (!staticExtendsHelperValues.has(name)) {\n staticExtendsHelperValues.set(name, null);\n }\n });\n const baseCode = pruneStaticPreevalCode(\n originalBaseCode,\n filename,\n new Set(staticValueCache.keys()),\n staticImportLocals,\n staticExtendsHelperValues,\n sideEffectImportLocals\n );\n const evalBaseCode =\n sideEffectImportLocals.size > 0\n ? pruneStaticPreevalCode(\n originalBaseCode,\n filename,\n new Set(staticValueCache.keys()),\n staticImportLocals,\n staticExtendsHelperValues,\n new Set()\n )\n : baseCode;\n preevalResult.baseCode = baseCode;\n preevalResult.code = appendOxcWywPreval(baseCode, filename, dependencyNames);\n preevalResult.evalCode = appendOxcWywPreval(\n evalBaseCode,\n filename,\n dependencyNames\n );\n preevalResult.staticSideEffectImportLocals = [...sideEffectImportLocals];\n\n for (const dependency of staticDependencies) {\n this.entrypoint.addInvalidationDependency({\n only: ['*'],\n resolved: dependency,\n source: dependency,\n });\n this.entrypoint.markInvalidateOnDependencyChange(dependency);\n }\n\n return true;\n}\n"],"file":"resolveStaticOxcValues.js"}
1
+ {"mappings":"AAAA,SAAS,qCAAqC","names":[],"sources":["../../../src/transform/generators/resolveStaticOxcValues.ts"],"version":3,"sourcesContent":["export { resolveStaticOxcPreevalValues } from './resolveStaticOxcValues/resolveStaticOxcPreevalValues';\n"],"file":"resolveStaticOxcValues.js"}
@@ -51,8 +51,10 @@ const ensureOxcPreevalResult = (services, item, originalAst) => {
51
51
  dependencyNames: result.dependencyNames,
52
52
  evalCode: result.code,
53
53
  metadata: result.metadata,
54
+ processorClassNames: result.processorClassNames,
54
55
  staticSideEffectImportLocals: [],
55
56
  staticDependencies: result.staticDependencies,
57
+ staticValuesApplied: false,
56
58
  staticValueCache: result.staticValueCache,
57
59
  staticValueCandidates: result.staticValueCandidates
58
60
  };
@@ -131,6 +133,56 @@ export const prepareCodeForEvalRuntime = (services, item, originalAst) => prepar
131
133
  shortCircuitOnMissingMetadata: true,
132
134
  stripForEvalRuntime: true
133
135
  });
136
+ function* resolveAndProcessOxcPreparedImports(action, preparedCode, imports) {
137
+ const { loadedAndParsed } = action.entrypoint;
138
+ if (imports === null || imports.size === 0) {
139
+ return preparedCode;
140
+ }
141
+ const resolvedImports = yield* action.getNext("resolveImports", action.entrypoint, {
142
+ imports,
143
+ phase: "initial"
144
+ });
145
+ let nextCode = preparedCode;
146
+ let nextResolvedImports = [];
147
+ let skippedParentDependencyTracking = [];
148
+ if (resolvedImports.length > 0) {
149
+ const rewritten = yield* rewriteOptimizedOxcBarrelImports.call(action, preparedCode, loadedAndParsed.evaluator === "ignored" ? action.entrypoint.name : loadedAndParsed.evalConfig.filename ?? action.entrypoint.name, resolvedImports);
150
+ nextCode = rewritten.code;
151
+ if (rewritten.optimizedCount > 0) {
152
+ skippedParentDependencyTracking = rewritten.generatedSources;
153
+ const fullyRewrittenSources = new Set(rewritten.fullyRewrittenSources);
154
+ const partialFallbackSources = new Set(rewritten.partialFallbackSources);
155
+ for (const dependency of resolvedImports) {
156
+ if (dependency.resolved && (fullyRewrittenSources.has(dependency.source) || partialFallbackSources.has(dependency.source))) {
157
+ if (partialFallbackSources.has(dependency.source)) {
158
+ action.entrypoint.addDependency(dependency);
159
+ } else {
160
+ action.entrypoint.addInvalidationDependency(dependency);
161
+ }
162
+ action.entrypoint.markInvalidateOnDependencyChange(dependency.resolved);
163
+ }
164
+ }
165
+ nextResolvedImports = yield* action.getNext("resolveImports", action.entrypoint, {
166
+ imports: rewritten.imports,
167
+ phase: "rewritten",
168
+ preResolved: rewritten.preResolvedImports
169
+ });
170
+ } else {
171
+ nextResolvedImports = resolvedImports;
172
+ }
173
+ }
174
+ if (nextResolvedImports.length !== 0) {
175
+ yield [
176
+ "processImports",
177
+ action.entrypoint,
178
+ {
179
+ resolved: nextResolvedImports,
180
+ skipParentDependencyTracking: skippedParentDependencyTracking
181
+ }
182
+ ];
183
+ }
184
+ return nextCode;
185
+ }
134
186
  export function* internalTransform(prepareFn) {
135
187
  const { only, loadedAndParsed, log } = this.entrypoint;
136
188
  if (loadedAndParsed.evaluator === "ignored") {
@@ -148,7 +200,7 @@ export function* internalTransform(prepareFn) {
148
200
  ensureOxcPreevalResult(this.services, this.entrypoint, null);
149
201
  yield* resolveStaticOxcPreevalValues.call(this);
150
202
  }
151
- const [preparedCode, imports, metadata] = prepareFn(this.services, this.entrypoint, null);
203
+ let [preparedCode, imports, metadata] = prepareFn(this.services, this.entrypoint, null);
152
204
  let finalPreparedCode = preparedCode;
153
205
  if (loadedAndParsed.evaluator === oxcShaker) {
154
206
  if (metadata === null && isPrevalOnly(only)) {
@@ -158,50 +210,10 @@ export function* internalTransform(prepareFn) {
158
210
  metadata: null
159
211
  };
160
212
  }
161
- let nextCode = preparedCode;
162
- let nextResolvedImports = [];
163
- let skippedParentDependencyTracking = [];
164
- if (imports !== null && imports.size > 0) {
165
- const resolvedImports = yield* this.getNext("resolveImports", this.entrypoint, {
166
- imports,
167
- phase: "initial"
168
- });
169
- if (resolvedImports.length > 0) {
170
- const rewritten = yield* rewriteOptimizedOxcBarrelImports.call(this, preparedCode, loadedAndParsed.evalConfig.filename ?? this.entrypoint.name, resolvedImports);
171
- nextCode = rewritten.code;
172
- if (rewritten.optimizedCount > 0) {
173
- skippedParentDependencyTracking = rewritten.generatedSources;
174
- const fullyRewrittenSources = new Set(rewritten.fullyRewrittenSources);
175
- const partialFallbackSources = new Set(rewritten.partialFallbackSources);
176
- for (const dependency of resolvedImports) {
177
- if (dependency.resolved && (fullyRewrittenSources.has(dependency.source) || partialFallbackSources.has(dependency.source))) {
178
- if (partialFallbackSources.has(dependency.source)) {
179
- this.entrypoint.addDependency(dependency);
180
- } else {
181
- this.entrypoint.addInvalidationDependency(dependency);
182
- }
183
- this.entrypoint.markInvalidateOnDependencyChange(dependency.resolved);
184
- }
185
- }
186
- nextResolvedImports = yield* this.getNext("resolveImports", this.entrypoint, {
187
- imports: rewritten.imports,
188
- phase: "rewritten",
189
- preResolved: rewritten.preResolvedImports
190
- });
191
- } else {
192
- nextResolvedImports = resolvedImports;
193
- }
194
- }
195
- }
196
- if (nextResolvedImports.length !== 0) {
197
- yield [
198
- "processImports",
199
- this.entrypoint,
200
- {
201
- resolved: nextResolvedImports,
202
- skipParentDependencyTracking: skippedParentDependencyTracking
203
- }
204
- ];
213
+ let nextCode = yield* resolveAndProcessOxcPreparedImports(this, preparedCode, imports);
214
+ if (yield* resolveStaticOxcPreevalValues.call(this)) {
215
+ [preparedCode, imports, metadata] = prepareFn(this.services, this.entrypoint, null);
216
+ nextCode = yield* resolveAndProcessOxcPreparedImports(this, preparedCode, imports);
205
217
  }
206
218
  finalPreparedCode = this.services.eventEmitter.perf("transform:emitCommonJS", () => emitOxcCommonJS(nextCode, loadedAndParsed.evalConfig.filename ?? this.entrypoint.name).code);
207
219
  }