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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (270) hide show
  1. package/esm/cache.js +7 -0
  2. package/esm/cache.js.map +1 -1
  3. package/esm/debug/fileReporter.js +35 -1
  4. package/esm/debug/fileReporter.js.map +1 -1
  5. package/esm/eval/broker.js +230 -89
  6. package/esm/eval/broker.js.map +1 -1
  7. package/esm/eval/protocol.js.map +1 -1
  8. package/esm/eval/runner.js +143 -24
  9. package/esm/eval/runner.js.map +1 -1
  10. package/esm/module.js +70 -43
  11. package/esm/module.js.map +1 -1
  12. package/esm/transform/Entrypoint.types.js.map +1 -1
  13. package/esm/transform/generators/processEntrypoint.js +35 -20
  14. package/esm/transform/generators/processEntrypoint.js.map +1 -1
  15. package/esm/transform/generators/resolveImports.js +48 -2
  16. package/esm/transform/generators/resolveImports.js.map +1 -1
  17. package/esm/transform/generators/resolveStaticOxcValues/cache.js +182 -0
  18. package/esm/transform/generators/resolveStaticOxcValues/cache.js.map +1 -0
  19. package/esm/transform/generators/resolveStaticOxcValues/candidateResolver.js +146 -0
  20. package/esm/transform/generators/resolveStaticOxcValues/candidateResolver.js.map +1 -0
  21. package/esm/transform/generators/resolveStaticOxcValues/dependencies.js +33 -0
  22. package/esm/transform/generators/resolveStaticOxcValues/dependencies.js.map +1 -0
  23. package/esm/transform/generators/resolveStaticOxcValues/environment.js +29 -0
  24. package/esm/transform/generators/resolveStaticOxcValues/environment.js.map +1 -0
  25. package/esm/transform/generators/resolveStaticOxcValues/exportResolver.js +351 -0
  26. package/esm/transform/generators/resolveStaticOxcValues/exportResolver.js.map +1 -0
  27. package/esm/transform/generators/resolveStaticOxcValues/exportTargets.js +253 -0
  28. package/esm/transform/generators/resolveStaticOxcValues/exportTargets.js.map +1 -0
  29. package/esm/transform/generators/resolveStaticOxcValues/objectAssign.js +310 -0
  30. package/esm/transform/generators/resolveStaticOxcValues/objectAssign.js.map +1 -0
  31. package/esm/transform/generators/resolveStaticOxcValues/objectAssignStaticExport.js +74 -0
  32. package/esm/transform/generators/resolveStaticOxcValues/objectAssignStaticExport.js.map +1 -0
  33. package/esm/transform/generators/resolveStaticOxcValues/opaqueRuntime.js +229 -0
  34. package/esm/transform/generators/resolveStaticOxcValues/opaqueRuntime.js.map +1 -0
  35. package/esm/transform/generators/resolveStaticOxcValues/processorStaticExport.js +172 -0
  36. package/esm/transform/generators/resolveStaticOxcValues/processorStaticExport.js.map +1 -0
  37. package/esm/transform/generators/resolveStaticOxcValues/processorStaticModel.js +476 -0
  38. package/esm/transform/generators/resolveStaticOxcValues/processorStaticModel.js.map +1 -0
  39. package/esm/transform/generators/resolveStaticOxcValues/processorTarget.js +55 -0
  40. package/esm/transform/generators/resolveStaticOxcValues/processorTarget.js.map +1 -0
  41. package/esm/transform/generators/resolveStaticOxcValues/programAnalysis.js +123 -0
  42. package/esm/transform/generators/resolveStaticOxcValues/programAnalysis.js.map +1 -0
  43. package/esm/transform/generators/resolveStaticOxcValues/prune.js +186 -0
  44. package/esm/transform/generators/resolveStaticOxcValues/prune.js.map +1 -0
  45. package/esm/transform/generators/resolveStaticOxcValues/resolveStaticOxcPreevalValues.js +183 -0
  46. package/esm/transform/generators/resolveStaticOxcValues/resolveStaticOxcPreevalValues.js.map +1 -0
  47. package/esm/transform/generators/resolveStaticOxcValues/staticExpression.js +298 -0
  48. package/esm/transform/generators/resolveStaticOxcValues/staticExpression.js.map +1 -0
  49. package/esm/transform/generators/resolveStaticOxcValues/staticExpressionDependencies.js +298 -0
  50. package/esm/transform/generators/resolveStaticOxcValues/staticExpressionDependencies.js.map +1 -0
  51. package/esm/transform/generators/resolveStaticOxcValues/types.js +3 -0
  52. package/esm/transform/generators/resolveStaticOxcValues/types.js.map +1 -0
  53. package/esm/transform/generators/resolveStaticOxcValues/zeroArgFunctionStaticExport.js +59 -0
  54. package/esm/transform/generators/resolveStaticOxcValues/zeroArgFunctionStaticExport.js.map +1 -0
  55. package/esm/transform/generators/resolveStaticOxcValues.js +1 -2910
  56. package/esm/transform/generators/resolveStaticOxcValues.js.map +1 -1
  57. package/esm/transform/generators/transform.js +57 -45
  58. package/esm/transform/generators/transform.js.map +1 -1
  59. package/esm/transform/helpers/loadWywOptions.js +33 -4
  60. package/esm/transform/helpers/loadWywOptions.js.map +1 -1
  61. package/esm/transform.js +3 -1
  62. package/esm/transform.js.map +1 -1
  63. package/esm/utils/EventEmitter.js +42 -9
  64. package/esm/utils/EventEmitter.js.map +1 -1
  65. package/esm/utils/applyOxcProcessors/applyOxcProcessors.js +160 -0
  66. package/esm/utils/applyOxcProcessors/applyOxcProcessors.js.map +1 -0
  67. package/esm/utils/applyOxcProcessors/cleanupBindings.js +157 -0
  68. package/esm/utils/applyOxcProcessors/cleanupBindings.js.map +1 -0
  69. package/esm/utils/applyOxcProcessors/cleanupRemovals.js +431 -0
  70. package/esm/utils/applyOxcProcessors/cleanupRemovals.js.map +1 -0
  71. package/esm/utils/applyOxcProcessors/displayName.js +93 -0
  72. package/esm/utils/applyOxcProcessors/displayName.js.map +1 -0
  73. package/esm/utils/applyOxcProcessors/expressionValues.js +152 -0
  74. package/esm/utils/applyOxcProcessors/expressionValues.js.map +1 -0
  75. package/esm/utils/applyOxcProcessors/processorFactory.js +62 -0
  76. package/esm/utils/applyOxcProcessors/processorFactory.js.map +1 -0
  77. package/esm/utils/applyOxcProcessors/processorUsages.js +143 -0
  78. package/esm/utils/applyOxcProcessors/processorUsages.js.map +1 -0
  79. package/esm/utils/applyOxcProcessors/sameFileStaticValues.js +207 -0
  80. package/esm/utils/applyOxcProcessors/sameFileStaticValues.js.map +1 -0
  81. package/esm/utils/applyOxcProcessors/shared.js +29 -0
  82. package/esm/utils/applyOxcProcessors/shared.js.map +1 -0
  83. package/esm/utils/applyOxcProcessors/types.js +2 -0
  84. package/esm/utils/applyOxcProcessors/types.js.map +1 -0
  85. package/esm/utils/applyOxcProcessors.js +1 -1216
  86. package/esm/utils/applyOxcProcessors.js.map +1 -1
  87. package/esm/utils/collectOxcRuntime/normalizeRuntimeCode.js +157 -0
  88. package/esm/utils/collectOxcRuntime/normalizeRuntimeCode.js.map +1 -0
  89. package/esm/utils/collectOxcRuntime/sourceMap.js +36 -0
  90. package/esm/utils/collectOxcRuntime/sourceMap.js.map +1 -0
  91. package/esm/utils/collectOxcRuntime/types.js +2 -0
  92. package/esm/utils/collectOxcRuntime/types.js.map +1 -0
  93. package/esm/utils/collectOxcRuntime.js +5 -193
  94. package/esm/utils/collectOxcRuntime.js.map +1 -1
  95. package/esm/utils/collectOxcTemplateDependencies/expressionExtraction.js +496 -0
  96. package/esm/utils/collectOxcTemplateDependencies/expressionExtraction.js.map +1 -0
  97. package/esm/utils/collectOxcTemplateDependencies/expressionReplacements.js +113 -0
  98. package/esm/utils/collectOxcTemplateDependencies/expressionReplacements.js.map +1 -0
  99. package/esm/utils/collectOxcTemplateDependencies/scopeAnalysis.js +387 -0
  100. package/esm/utils/collectOxcTemplateDependencies/scopeAnalysis.js.map +1 -0
  101. package/esm/utils/collectOxcTemplateDependencies/staticBindings.js +17 -0
  102. package/esm/utils/collectOxcTemplateDependencies/staticBindings.js.map +1 -0
  103. package/esm/utils/collectOxcTemplateDependencies/staticEvaluator.js +540 -0
  104. package/esm/utils/collectOxcTemplateDependencies/staticEvaluator.js.map +1 -0
  105. package/esm/utils/collectOxcTemplateDependencies/types.js +2 -0
  106. package/esm/utils/collectOxcTemplateDependencies/types.js.map +1 -0
  107. package/esm/utils/collectOxcTemplateDependencies.js +3 -1397
  108. package/esm/utils/collectOxcTemplateDependencies.js.map +1 -1
  109. package/esm/utils/nativeResolver.js +93 -0
  110. package/esm/utils/nativeResolver.js.map +1 -0
  111. package/esm/utils/oxc/ast.js +28 -0
  112. package/esm/utils/oxc/ast.js.map +1 -0
  113. package/esm/utils/oxc/parse.js +3 -0
  114. package/esm/utils/oxc/parse.js.map +1 -0
  115. package/esm/utils/oxc/replacements.js +14 -0
  116. package/esm/utils/oxc/replacements.js.map +1 -0
  117. package/esm/utils/oxc/sourceLocations.js +59 -0
  118. package/esm/utils/oxc/sourceLocations.js.map +1 -0
  119. package/esm/utils/oxcPreevalStage/evalStrategy.js +3 -0
  120. package/esm/utils/oxcPreevalStage/evalStrategy.js.map +1 -0
  121. package/esm/utils/oxcPreevalStage/prepareCode.js +21 -0
  122. package/esm/utils/oxcPreevalStage/prepareCode.js.map +1 -0
  123. package/esm/utils/oxcPreevalStage/prevalExport.js +23 -0
  124. package/esm/utils/oxcPreevalStage/prevalExport.js.map +1 -0
  125. package/esm/utils/oxcPreevalStage/processors.js +17 -0
  126. package/esm/utils/oxcPreevalStage/processors.js.map +1 -0
  127. package/esm/utils/oxcPreevalStage/staticOverlay.js +18 -0
  128. package/esm/utils/oxcPreevalStage/staticOverlay.js.map +1 -0
  129. package/esm/utils/oxcPreevalStage/types.js +2 -0
  130. package/esm/utils/oxcPreevalStage/types.js.map +1 -0
  131. package/esm/utils/oxcPreevalStage.js +17 -73
  132. package/esm/utils/oxcPreevalStage.js.map +1 -1
  133. package/esm/utils/oxcPreevalTransforms.js +12 -1
  134. package/esm/utils/oxcPreevalTransforms.js.map +1 -1
  135. package/esm/utils/processorStaticSemantics.js +157 -0
  136. package/esm/utils/processorStaticSemantics.js.map +1 -0
  137. package/esm/utils/resolveWithConditions.js +3 -3
  138. package/esm/utils/resolveWithConditions.js.map +1 -1
  139. package/package.json +4 -3
  140. package/types/cache.js +8 -0
  141. package/types/debug/fileReporter.js +46 -1
  142. package/types/eval/broker.d.ts +6 -2
  143. package/types/eval/broker.js +244 -95
  144. package/types/eval/protocol.d.ts +15 -1
  145. package/types/module.d.ts +4 -1
  146. package/types/module.js +97 -48
  147. package/types/transform/Entrypoint.types.d.ts +3 -0
  148. package/types/transform/generators/resolveImports.d.ts +3 -1
  149. package/types/transform/generators/resolveImports.js +49 -2
  150. package/types/transform/generators/resolveStaticOxcValues/cache.d.ts +25 -0
  151. package/types/transform/generators/resolveStaticOxcValues/cache.js +182 -0
  152. package/types/transform/generators/resolveStaticOxcValues/candidateResolver.d.ts +5 -0
  153. package/types/transform/generators/resolveStaticOxcValues/candidateResolver.js +149 -0
  154. package/types/transform/generators/resolveStaticOxcValues/dependencies.d.ts +6 -0
  155. package/types/transform/generators/resolveStaticOxcValues/dependencies.js +37 -0
  156. package/types/transform/generators/resolveStaticOxcValues/environment.d.ts +12 -0
  157. package/types/transform/generators/resolveStaticOxcValues/environment.js +32 -0
  158. package/types/transform/generators/resolveStaticOxcValues/exportResolver.d.ts +4 -0
  159. package/types/transform/generators/resolveStaticOxcValues/exportResolver.js +358 -0
  160. package/types/transform/generators/resolveStaticOxcValues/exportTargets.d.ts +20 -0
  161. package/types/transform/generators/resolveStaticOxcValues/exportTargets.js +285 -0
  162. package/types/transform/generators/resolveStaticOxcValues/objectAssign.d.ts +41 -0
  163. package/types/transform/generators/resolveStaticOxcValues/objectAssign.js +352 -0
  164. package/types/transform/generators/resolveStaticOxcValues/objectAssignStaticExport.d.ts +6 -0
  165. package/types/transform/generators/resolveStaticOxcValues/objectAssignStaticExport.js +88 -0
  166. package/types/transform/generators/resolveStaticOxcValues/opaqueRuntime.d.ts +13 -0
  167. package/types/transform/generators/resolveStaticOxcValues/opaqueRuntime.js +263 -0
  168. package/types/transform/generators/resolveStaticOxcValues/processorStaticExport.d.ts +4 -0
  169. package/types/transform/generators/resolveStaticOxcValues/processorStaticExport.js +191 -0
  170. package/types/transform/generators/resolveStaticOxcValues/processorStaticModel.d.ts +40 -0
  171. package/types/transform/generators/resolveStaticOxcValues/processorStaticModel.js +516 -0
  172. package/types/transform/generators/resolveStaticOxcValues/processorTarget.d.ts +5 -0
  173. package/types/transform/generators/resolveStaticOxcValues/processorTarget.js +62 -0
  174. package/types/transform/generators/resolveStaticOxcValues/programAnalysis.d.ts +11 -0
  175. package/types/transform/generators/resolveStaticOxcValues/programAnalysis.js +133 -0
  176. package/types/transform/generators/resolveStaticOxcValues/prune.d.ts +15 -0
  177. package/types/transform/generators/resolveStaticOxcValues/prune.js +220 -0
  178. package/types/transform/generators/resolveStaticOxcValues/resolveStaticOxcPreevalValues.d.ts +2 -0
  179. package/types/transform/generators/resolveStaticOxcValues/resolveStaticOxcPreevalValues.js +197 -0
  180. package/types/transform/generators/resolveStaticOxcValues/staticExpression.d.ts +25 -0
  181. package/types/transform/generators/resolveStaticOxcValues/staticExpression.js +391 -0
  182. package/types/transform/generators/resolveStaticOxcValues/staticExpressionDependencies.d.ts +14 -0
  183. package/types/transform/generators/resolveStaticOxcValues/staticExpressionDependencies.js +304 -0
  184. package/types/transform/generators/resolveStaticOxcValues/types.d.ts +99 -0
  185. package/types/transform/generators/resolveStaticOxcValues/types.js +2 -0
  186. package/types/transform/generators/resolveStaticOxcValues/zeroArgFunctionStaticExport.d.ts +7 -0
  187. package/types/transform/generators/resolveStaticOxcValues/zeroArgFunctionStaticExport.js +64 -0
  188. package/types/transform/generators/resolveStaticOxcValues.d.ts +1 -2
  189. package/types/transform/generators/resolveStaticOxcValues.js +1 -3235
  190. package/types/transform/generators/transform.js +63 -49
  191. package/types/transform/helpers/loadWywOptions.js +23 -3
  192. package/types/transform.js +3 -1
  193. package/types/utils/EventEmitter.d.ts +16 -1
  194. package/types/utils/EventEmitter.js +44 -9
  195. package/types/utils/applyOxcProcessors/applyOxcProcessors.d.ts +8 -0
  196. package/types/utils/applyOxcProcessors/applyOxcProcessors.js +167 -0
  197. package/types/utils/applyOxcProcessors/cleanupBindings.d.ts +12 -0
  198. package/types/utils/applyOxcProcessors/cleanupBindings.js +189 -0
  199. package/types/utils/applyOxcProcessors/cleanupRemovals.d.ts +16 -0
  200. package/types/utils/applyOxcProcessors/cleanupRemovals.js +482 -0
  201. package/types/utils/applyOxcProcessors/displayName.d.ts +9 -0
  202. package/types/utils/applyOxcProcessors/displayName.js +113 -0
  203. package/types/utils/applyOxcProcessors/expressionValues.d.ts +11 -0
  204. package/types/utils/applyOxcProcessors/expressionValues.js +170 -0
  205. package/types/utils/applyOxcProcessors/processorFactory.d.ts +7 -0
  206. package/types/utils/applyOxcProcessors/processorFactory.js +70 -0
  207. package/types/utils/applyOxcProcessors/processorUsages.d.ts +16 -0
  208. package/types/utils/applyOxcProcessors/processorUsages.js +163 -0
  209. package/types/utils/applyOxcProcessors/sameFileStaticValues.d.ts +23 -0
  210. package/types/utils/applyOxcProcessors/sameFileStaticValues.js +211 -0
  211. package/types/utils/applyOxcProcessors/shared.d.ts +10 -0
  212. package/types/utils/applyOxcProcessors/shared.js +37 -0
  213. package/types/utils/applyOxcProcessors/types.d.ts +88 -0
  214. package/types/utils/applyOxcProcessors/types.js +1 -0
  215. package/types/utils/applyOxcProcessors.d.ts +1 -16
  216. package/types/utils/applyOxcProcessors.js +1 -1391
  217. package/types/utils/collectOxcRuntime/normalizeRuntimeCode.d.ts +1 -0
  218. package/types/utils/collectOxcRuntime/normalizeRuntimeCode.js +185 -0
  219. package/types/utils/collectOxcRuntime/sourceMap.d.ts +2 -0
  220. package/types/utils/collectOxcRuntime/sourceMap.js +37 -0
  221. package/types/utils/collectOxcRuntime/types.d.ts +16 -0
  222. package/types/utils/collectOxcRuntime/types.js +1 -0
  223. package/types/utils/collectOxcRuntime.d.ts +2 -12
  224. package/types/utils/collectOxcRuntime.js +5 -224
  225. package/types/utils/collectOxcTemplateDependencies/expressionExtraction.d.ts +6 -0
  226. package/types/utils/collectOxcTemplateDependencies/expressionExtraction.js +550 -0
  227. package/types/utils/collectOxcTemplateDependencies/expressionReplacements.d.ts +11 -0
  228. package/types/utils/collectOxcTemplateDependencies/expressionReplacements.js +131 -0
  229. package/types/utils/collectOxcTemplateDependencies/scopeAnalysis.d.ts +20 -0
  230. package/types/utils/collectOxcTemplateDependencies/scopeAnalysis.js +434 -0
  231. package/types/utils/collectOxcTemplateDependencies/staticBindings.d.ts +7 -0
  232. package/types/utils/collectOxcTemplateDependencies/staticBindings.js +13 -0
  233. package/types/utils/collectOxcTemplateDependencies/staticEvaluator.d.ts +13 -0
  234. package/types/utils/collectOxcTemplateDependencies/staticEvaluator.js +626 -0
  235. package/types/utils/collectOxcTemplateDependencies/types.d.ts +116 -0
  236. package/types/utils/collectOxcTemplateDependencies/types.js +1 -0
  237. package/types/utils/collectOxcTemplateDependencies.d.ts +4 -38
  238. package/types/utils/collectOxcTemplateDependencies.js +3 -1580
  239. package/types/utils/nativeResolver.d.ts +13 -0
  240. package/types/utils/nativeResolver.js +91 -0
  241. package/types/utils/oxc/ast.d.ts +4 -0
  242. package/types/utils/oxc/ast.js +37 -0
  243. package/types/utils/oxc/parse.d.ts +3 -0
  244. package/types/utils/oxc/parse.js +2 -0
  245. package/types/utils/oxc/replacements.d.ts +12 -0
  246. package/types/utils/oxc/replacements.js +18 -0
  247. package/types/utils/oxc/sourceLocations.d.ts +5 -0
  248. package/types/utils/oxc/sourceLocations.js +63 -0
  249. package/types/utils/oxcPreevalStage/evalStrategy.d.ts +3 -0
  250. package/types/utils/oxcPreevalStage/evalStrategy.js +2 -0
  251. package/types/utils/oxcPreevalStage/prepareCode.d.ts +3 -0
  252. package/types/utils/oxcPreevalStage/prepareCode.js +20 -0
  253. package/types/utils/oxcPreevalStage/prevalExport.d.ts +1 -0
  254. package/types/utils/oxcPreevalStage/prevalExport.js +22 -0
  255. package/types/utils/oxcPreevalStage/processors.d.ts +10 -0
  256. package/types/utils/oxcPreevalStage/processors.js +16 -0
  257. package/types/utils/oxcPreevalStage/staticOverlay.d.ts +3 -0
  258. package/types/utils/oxcPreevalStage/staticOverlay.js +23 -0
  259. package/types/utils/oxcPreevalStage/types.d.ts +22 -0
  260. package/types/utils/oxcPreevalStage/types.js +1 -0
  261. package/types/utils/oxcPreevalStage.d.ts +2 -18
  262. package/types/utils/oxcPreevalStage.js +17 -79
  263. package/types/utils/oxcPreevalTransforms.js +14 -1
  264. package/types/utils/processorStaticSemantics.d.ts +13 -0
  265. package/types/utils/processorStaticSemantics.js +191 -0
  266. package/types/utils/resolveWithConditions.js +3 -3
  267. package/esm/eval/resolverStrategy.js +0 -51
  268. package/esm/eval/resolverStrategy.js.map +0 -1
  269. package/types/eval/resolverStrategy.d.ts +0 -13
  270. package/types/eval/resolverStrategy.js +0 -46
@@ -0,0 +1,133 @@
1
+ /* eslint-disable no-restricted-syntax,no-continue,@typescript-eslint/no-use-before-define */
2
+ import { collectImportBindings, isSafeLiteral, unwrapExpression, } from './staticExpression';
3
+ export const collectLocalConstExpressions = (program) => {
4
+ const result = new Map();
5
+ const collect = (declaration) => {
6
+ if (declaration.kind !== 'const') {
7
+ return;
8
+ }
9
+ declaration.declarations.forEach((declarator) => {
10
+ if (declarator.id.type === 'Identifier' && declarator.init) {
11
+ result.set(declarator.id.name, declarator.init);
12
+ }
13
+ });
14
+ };
15
+ program.body.forEach((statement) => {
16
+ if (statement.type === 'VariableDeclaration') {
17
+ collect(statement);
18
+ return;
19
+ }
20
+ if (statement.type === 'ExportNamedDeclaration' &&
21
+ statement.declaration?.type === 'VariableDeclaration') {
22
+ collect(statement.declaration);
23
+ }
24
+ });
25
+ return result;
26
+ };
27
+ export const objectPropertyKeyName = (node) => {
28
+ const unwrapped = unwrapExpression(node);
29
+ if (unwrapped.type === 'Identifier') {
30
+ return unwrapped.name;
31
+ }
32
+ if (isSafeLiteral(unwrapped) && typeof unwrapped.value === 'string') {
33
+ return unwrapped.value;
34
+ }
35
+ return null;
36
+ };
37
+ export const findObjectPropertyValue = (expr, name) => {
38
+ const unwrapped = unwrapExpression(expr);
39
+ if (unwrapped.type !== 'ObjectExpression') {
40
+ return null;
41
+ }
42
+ for (const property of unwrapped.properties) {
43
+ if (property.type === 'SpreadElement') {
44
+ continue;
45
+ }
46
+ const propertyNode = property;
47
+ if (propertyNode.computed) {
48
+ continue;
49
+ }
50
+ const key = propertyNode.key;
51
+ const value = propertyNode.value;
52
+ if (key && value && objectPropertyKeyName(key) === name) {
53
+ return value;
54
+ }
55
+ }
56
+ return null;
57
+ };
58
+ export const topLevelStatements = (program) => {
59
+ const result = [];
60
+ program.body.forEach((statement) => {
61
+ if (statement.type === 'ExportNamedDeclaration' ||
62
+ statement.type === 'ExportDefaultDeclaration') {
63
+ result.push(statement.declaration ?? statement);
64
+ return;
65
+ }
66
+ result.push(statement);
67
+ });
68
+ return result;
69
+ };
70
+ export const findTopLevelConstExpression = (program, name) => {
71
+ for (const statement of topLevelStatements(program)) {
72
+ if (statement.type !== 'VariableDeclaration' ||
73
+ statement.kind !== 'const') {
74
+ continue;
75
+ }
76
+ for (const declarator of statement.declarations) {
77
+ if (declarator.id.type === 'Identifier' &&
78
+ declarator.id.name === name &&
79
+ declarator.init) {
80
+ return declarator.init;
81
+ }
82
+ }
83
+ }
84
+ return null;
85
+ };
86
+ export const hasTopLevelBinding = (program, name) => {
87
+ if (collectImportBindings(program).has(name)) {
88
+ return true;
89
+ }
90
+ return topLevelStatements(program).some((statement) => {
91
+ if (statement.type === 'VariableDeclaration') {
92
+ return statement.declarations.some((declarator) => declarator.id.type === 'Identifier' && declarator.id.name === name);
93
+ }
94
+ if (statement.type === 'FunctionDeclaration') {
95
+ return statement.id?.name === name;
96
+ }
97
+ if (statement.type === 'ClassDeclaration') {
98
+ return statement.id?.name === name;
99
+ }
100
+ return false;
101
+ });
102
+ };
103
+ export const isTopLevelFunctionOrClass = (program, name) => topLevelStatements(program).some((statement) => {
104
+ if (statement.type === 'FunctionDeclaration') {
105
+ return statement.id?.name === name;
106
+ }
107
+ if (statement.type === 'ClassDeclaration') {
108
+ return statement.id?.name === name;
109
+ }
110
+ return false;
111
+ });
112
+ export const functionReturnExpression = (expr, options = {}) => {
113
+ const unwrapped = unwrapExpression(expr);
114
+ if (unwrapped.type !== 'ArrowFunctionExpression' &&
115
+ unwrapped.type !== 'FunctionExpression') {
116
+ return null;
117
+ }
118
+ if (unwrapped.async ||
119
+ (!options.allowParams && unwrapped.params.length > 0) ||
120
+ !unwrapped.body) {
121
+ return null;
122
+ }
123
+ if (unwrapped.body.type !== 'BlockStatement') {
124
+ return unwrapped.body;
125
+ }
126
+ if (unwrapped.body.body.length !== 1) {
127
+ return null;
128
+ }
129
+ const [statement] = unwrapped.body.body;
130
+ return statement.type === 'ReturnStatement' && statement.argument
131
+ ? statement.argument
132
+ : null;
133
+ };
@@ -0,0 +1,15 @@
1
+ import type { ImportDeclaration, Node, Program } from 'oxc-parser';
2
+ export declare const isIdentifierBindingPosition: (node: Node, parent: Node | null) => boolean;
3
+ export declare const isPropertyKeyOnlyIdentifier: (node: Node, parent: Node | null) => boolean;
4
+ export declare const collectUsedIdentifierNames: (program: Program) => Set<string>;
5
+ export declare const removableStaticHelperNames: (program: Program, staticValueNames: Set<string>) => Set<string>;
6
+ export declare const collectImportLocalReferences: (node: Node, importLocals: Set<string>, result: Set<string>) => void;
7
+ export declare const removeStaticHelperDeclarations: (code: string, filename: string, staticValueNames: Set<string>) => {
8
+ code: string;
9
+ removed: Set<string>;
10
+ removedImportLocals: Set<string>;
11
+ };
12
+ export declare const importSpecifierLocalName: (specifier: ImportDeclaration["specifiers"][number]) => string | null;
13
+ export declare const removeUnusedStaticImports: (code: string, filename: string, staticImportLocals: Set<string>, sideEffectImportLocals: Set<string>) => string;
14
+ export declare const replaceStaticWYWMetaExtendsHelpers: (code: string, filename: string, helperValues: Map<string, unknown>) => string;
15
+ export declare const pruneStaticPreevalCode: (code: string, filename: string, staticValueNames: Set<string>, staticImportLocals: Set<string>, staticExtendsHelperValues: Map<string, unknown>, sideEffectImportLocals: Set<string>) => string;
@@ -0,0 +1,220 @@
1
+ /* eslint-disable no-restricted-syntax,no-continue,@typescript-eslint/no-use-before-define */
2
+ import { getOxcNodeChildren } from '../../../utils/oxc/ast';
3
+ import { applyOxcReplacements } from '../../../utils/oxc/replacements';
4
+ import { parseProgram } from './environment';
5
+ import { collectImportBindings, unwrapExpression } from './staticExpression';
6
+ import { findWYWMetaExtendsExpression, staticWYWMetaExtendsReplacementCode, } from './processorStaticModel';
7
+ export const isIdentifierBindingPosition = (node, parent) => {
8
+ if (node.type !== 'Identifier' || !parent) {
9
+ return false;
10
+ }
11
+ if ((parent.type === 'VariableDeclarator' && parent.id === node) ||
12
+ (parent.type === 'FunctionDeclaration' && parent.id === node) ||
13
+ (parent.type === 'FunctionExpression' && parent.id === node) ||
14
+ (parent.type === 'ClassDeclaration' && parent.id === node) ||
15
+ (parent.type === 'ClassExpression' && parent.id === node)) {
16
+ return true;
17
+ }
18
+ if ((parent.type === 'ArrowFunctionExpression' ||
19
+ parent.type === 'FunctionDeclaration' ||
20
+ parent.type === 'FunctionExpression') &&
21
+ parent.params.some((param) => param === node)) {
22
+ return true;
23
+ }
24
+ return ((parent.type === 'ImportSpecifier' && parent.local === node) ||
25
+ (parent.type === 'ImportDefaultSpecifier' && parent.local === node) ||
26
+ (parent.type === 'ImportNamespaceSpecifier' && parent.local === node));
27
+ };
28
+ export const isPropertyKeyOnlyIdentifier = (node, parent) => node.type === 'Identifier' &&
29
+ !!parent &&
30
+ ((parent.type === 'MemberExpression' &&
31
+ parent.property === node &&
32
+ !parent.computed) ||
33
+ (parent.type === 'Property' &&
34
+ parent.key === node &&
35
+ !parent.computed &&
36
+ !parent.shorthand));
37
+ export const collectUsedIdentifierNames = (program) => {
38
+ const used = new Set();
39
+ const walk = (node, parent) => {
40
+ if (node.type === 'ImportDeclaration') {
41
+ return;
42
+ }
43
+ if (node.type === 'Identifier' &&
44
+ !isIdentifierBindingPosition(node, parent) &&
45
+ !isPropertyKeyOnlyIdentifier(node, parent)) {
46
+ used.add(node.name);
47
+ }
48
+ getOxcNodeChildren(node).forEach((child) => walk(child, node));
49
+ };
50
+ walk(program, null);
51
+ return used;
52
+ };
53
+ export const removableStaticHelperNames = (program, staticValueNames) => {
54
+ const used = collectUsedIdentifierNames(program);
55
+ const result = new Set();
56
+ program.body.forEach((statement) => {
57
+ if (statement.type !== 'VariableDeclaration') {
58
+ return;
59
+ }
60
+ statement.declarations.forEach((declarator) => {
61
+ if (declarator.id.type === 'Identifier' &&
62
+ staticValueNames.has(declarator.id.name) &&
63
+ !used.has(declarator.id.name)) {
64
+ result.add(declarator.id.name);
65
+ }
66
+ });
67
+ });
68
+ return result;
69
+ };
70
+ export const collectImportLocalReferences = (node, importLocals, result) => {
71
+ const walk = (item, parent) => {
72
+ if (item.type === 'Identifier' &&
73
+ importLocals.has(item.name) &&
74
+ !isIdentifierBindingPosition(item, parent) &&
75
+ !isPropertyKeyOnlyIdentifier(item, parent)) {
76
+ result.add(item.name);
77
+ }
78
+ getOxcNodeChildren(item).forEach((child) => walk(child, item));
79
+ };
80
+ walk(node, null);
81
+ };
82
+ export const removeStaticHelperDeclarations = (code, filename, staticValueNames) => {
83
+ if (staticValueNames.size === 0) {
84
+ return { code, removed: new Set(), removedImportLocals: new Set() };
85
+ }
86
+ const program = parseProgram(code, filename);
87
+ const removableNames = removableStaticHelperNames(program, staticValueNames);
88
+ const importLocals = new Set();
89
+ collectImportBindings(program).forEach((_, local) => importLocals.add(local));
90
+ const removedImportLocals = new Set();
91
+ const ranges = [];
92
+ const replacements = [];
93
+ program.body.forEach((statement) => {
94
+ if (statement.type !== 'VariableDeclaration' ||
95
+ statement.declarations.length === 0) {
96
+ return;
97
+ }
98
+ const removableIndexes = statement.declarations.flatMap((declarator, index) => declarator.id.type === 'Identifier' &&
99
+ removableNames.has(declarator.id.name)
100
+ ? [index]
101
+ : []);
102
+ if (removableIndexes.length === 0) {
103
+ return;
104
+ }
105
+ removableIndexes.forEach((index) => {
106
+ collectImportLocalReferences(statement.declarations[index], importLocals, removedImportLocals);
107
+ });
108
+ if (removableIndexes.length === statement.declarations.length) {
109
+ ranges.push({
110
+ end: statement.end,
111
+ start: statement.start,
112
+ });
113
+ return;
114
+ }
115
+ const keptDeclarations = statement.declarations
116
+ .filter((_, index) => !removableIndexes.includes(index))
117
+ .map((declarator) => code.slice(declarator.start, declarator.end));
118
+ replacements.push({
119
+ end: statement.end,
120
+ start: statement.start,
121
+ text: `${statement.kind} ${keptDeclarations.join(', ')};`,
122
+ });
123
+ });
124
+ return {
125
+ code: applyOxcReplacements(code, [
126
+ ...ranges.map((range) => ({ ...range, text: '' })),
127
+ ...replacements,
128
+ ]),
129
+ removed: removableNames,
130
+ removedImportLocals,
131
+ };
132
+ };
133
+ export const importSpecifierLocalName = (specifier) => specifier.local?.name ?? null;
134
+ export const removeUnusedStaticImports = (code, filename, staticImportLocals, sideEffectImportLocals) => {
135
+ if (staticImportLocals.size === 0) {
136
+ return code;
137
+ }
138
+ const program = parseProgram(code, filename);
139
+ const used = collectUsedIdentifierNames(program);
140
+ const ranges = [];
141
+ const replacements = [];
142
+ program.body.forEach((statement) => {
143
+ if (statement.type !== 'ImportDeclaration' ||
144
+ statement.specifiers.length === 0) {
145
+ return;
146
+ }
147
+ const removable = statement.specifiers.flatMap((specifier, index) => {
148
+ const localName = importSpecifierLocalName(specifier);
149
+ return localName &&
150
+ staticImportLocals.has(localName) &&
151
+ !used.has(localName)
152
+ ? [{ index, localName }]
153
+ : [];
154
+ });
155
+ if (removable.length === 0) {
156
+ return;
157
+ }
158
+ if (removable.length === statement.specifiers.length) {
159
+ if (removable.some((item) => sideEffectImportLocals.has(item.localName))) {
160
+ replacements.push({
161
+ end: statement.end,
162
+ start: statement.start,
163
+ text: `import ${code.slice(statement.source.start, statement.source.end)};`,
164
+ });
165
+ return;
166
+ }
167
+ ranges.push({
168
+ end: statement.end,
169
+ start: statement.start,
170
+ });
171
+ }
172
+ });
173
+ return applyOxcReplacements(code, [
174
+ ...ranges.map((range) => ({ ...range, text: '' })),
175
+ ...replacements,
176
+ ]);
177
+ };
178
+ export const replaceStaticWYWMetaExtendsHelpers = (code, filename, helperValues) => {
179
+ if (helperValues.size === 0) {
180
+ return code;
181
+ }
182
+ const program = parseProgram(code, filename);
183
+ const replacements = [];
184
+ const visit = (node) => {
185
+ if (node.type === 'ObjectExpression') {
186
+ const extendsExpression = findWYWMetaExtendsExpression(node);
187
+ if (extendsExpression) {
188
+ const unwrapped = unwrapExpression(extendsExpression);
189
+ if (unwrapped.type === 'CallExpression' &&
190
+ unwrapped.callee.type === 'Identifier' &&
191
+ unwrapped.arguments.length === 0 &&
192
+ helperValues.has(unwrapped.callee.name)) {
193
+ const replacement = staticWYWMetaExtendsReplacementCode(helperValues.get(unwrapped.callee.name));
194
+ if (replacement) {
195
+ replacements.push({
196
+ end: extendsExpression.end,
197
+ start: extendsExpression.start,
198
+ text: replacement,
199
+ });
200
+ }
201
+ }
202
+ }
203
+ }
204
+ getOxcNodeChildren(node).forEach(visit);
205
+ };
206
+ visit(program);
207
+ return applyOxcReplacements(code, replacements);
208
+ };
209
+ export const pruneStaticPreevalCode = (code, filename, staticValueNames, staticImportLocals, staticExtendsHelperValues, sideEffectImportLocals) => {
210
+ const codeWithMetadataPruned = replaceStaticWYWMetaExtendsHelpers(code, filename, staticExtendsHelperValues);
211
+ const helpersRemoved = removeStaticHelperDeclarations(codeWithMetadataPruned, filename, staticValueNames);
212
+ if (helpersRemoved.removed.size === 0) {
213
+ return codeWithMetadataPruned;
214
+ }
215
+ const importLocalsToPrune = new Set([
216
+ ...staticImportLocals,
217
+ ...helpersRemoved.removedImportLocals,
218
+ ]);
219
+ return removeUnusedStaticImports(helpersRemoved.code, filename, importLocalsToPrune, sideEffectImportLocals);
220
+ };
@@ -0,0 +1,2 @@
1
+ import type { ITransformAction, SyncScenarioFor } from '../../types';
2
+ export declare function resolveStaticOxcPreevalValues(this: ITransformAction): SyncScenarioFor<boolean>;
@@ -0,0 +1,197 @@
1
+ /* eslint-disable no-restricted-syntax,no-continue,@typescript-eslint/no-use-before-define */
2
+ import { isAbsolute } from 'path';
3
+ import { appendOxcWywPreval } from '../../../utils/oxcPreevalStage';
4
+ import { stripQueryAndHash } from '../../../utils/parseRequest';
5
+ import { resolveCandidateValue, resolveOpaqueRuntimeCandidateValue, } from './candidateResolver';
6
+ import { debugStaticResolve, getEvalStrategy, getStaticStrategyFailure, parseProgram, } from './environment';
7
+ import { collectWYWMetaExtendsHelperNames, createSameFileStaticWYWMetaHelperResolver, } from './processorStaticModel';
8
+ import { pruneStaticPreevalCode } from './prune';
9
+ import { runtimeCallbackPlaceholder } from './staticExpression';
10
+ export function* resolveStaticOxcPreevalValues() {
11
+ const preevalResult = this.entrypoint.getPreevalResult();
12
+ if (!preevalResult) {
13
+ return false;
14
+ }
15
+ const candidates = preevalResult.staticValueCandidates ?? [];
16
+ const evalDependencyNames = new Set(preevalResult.dependencyNames ?? []);
17
+ if (candidates.length === 0 && evalDependencyNames.size === 0) {
18
+ return false;
19
+ }
20
+ const filename = this.entrypoint.loadedAndParsed.evaluator === 'ignored'
21
+ ? this.entrypoint.name
22
+ : this.entrypoint.loadedAndParsed.evalConfig.filename ??
23
+ this.entrypoint.name;
24
+ const evalStrategy = getEvalStrategy(this);
25
+ if (evalStrategy === 'execute') {
26
+ return false;
27
+ }
28
+ const staticOnly = evalStrategy === 'static';
29
+ const staticValueCache = preevalResult.staticValueCache ?? new Map();
30
+ const staticDependencies = new Set(preevalResult.staticDependencies ?? []);
31
+ const staticImportLocals = new Set();
32
+ const sideEffectImportLocals = new Set();
33
+ const staticNullWYWMetaExtendsHelpers = new Set(preevalResult.staticNullWYWMetaExtendsHelpers ?? []);
34
+ const memo = new Map();
35
+ const opaqueRuntimeBaseHelpers = collectWYWMetaExtendsHelperNames(parseProgram(preevalResult.baseCode ?? preevalResult.code, filename));
36
+ // Names of candidates resolved to runtime callbacks (function values).
37
+ // They keep the file out of evalFile but their helper declarations must
38
+ // not be pruned — the runtime call site relies on them.
39
+ const runtimeOnlyCandidateNames = new Set(preevalResult.runtimeOnlyStaticValueNames ?? []);
40
+ let changed = false;
41
+ let hasKnownStaticCandidate = false;
42
+ const resolveSameFileStaticWYWMetaHelpers = createSameFileStaticWYWMetaHelperResolver(preevalResult.baseCode ?? preevalResult.code, filename);
43
+ const applySameFileStaticWYWMetaHelpers = () => {
44
+ let appliedAny = false;
45
+ for (;;) {
46
+ let applied = false;
47
+ const values = resolveSameFileStaticWYWMetaHelpers(staticValueCache);
48
+ values.forEach((value, name) => {
49
+ if (staticValueCache.has(name) ||
50
+ (!evalDependencyNames.has(name) &&
51
+ !opaqueRuntimeBaseHelpers.has(name))) {
52
+ return;
53
+ }
54
+ staticValueCache.set(name, value);
55
+ debugStaticResolve(this, {
56
+ candidate: name,
57
+ filename,
58
+ phase: 'candidate',
59
+ reason: 'same-file-static-metadata',
60
+ status: 'resolved',
61
+ });
62
+ applied = true;
63
+ });
64
+ if (!applied) {
65
+ break;
66
+ }
67
+ appliedAny = true;
68
+ }
69
+ if (appliedAny) {
70
+ changed = true;
71
+ hasKnownStaticCandidate = true;
72
+ }
73
+ return appliedAny;
74
+ };
75
+ applySameFileStaticWYWMetaHelpers();
76
+ for (const candidate of candidates) {
77
+ applySameFileStaticWYWMetaHelpers();
78
+ const isOpaqueRuntimeBaseHelper = opaqueRuntimeBaseHelpers.has(candidate.name);
79
+ if (!evalDependencyNames.has(candidate.name) &&
80
+ !isOpaqueRuntimeBaseHelper &&
81
+ !staticValueCache.has(candidate.name)) {
82
+ debugStaticResolve(this, {
83
+ candidate: candidate.name,
84
+ filename,
85
+ phase: 'candidate',
86
+ reason: 'not-eval-dependency',
87
+ status: 'skipped',
88
+ });
89
+ continue;
90
+ }
91
+ if (staticValueCache.has(candidate.name)) {
92
+ hasKnownStaticCandidate = true;
93
+ candidate.imports.forEach((item) => staticImportLocals.add(item.importLocal ?? item.local));
94
+ if (isOpaqueRuntimeBaseHelper &&
95
+ staticValueCache.get(candidate.name) === null) {
96
+ staticNullWYWMetaExtendsHelpers.add(candidate.name);
97
+ }
98
+ debugStaticResolve(this, {
99
+ candidate: candidate.name,
100
+ filename,
101
+ phase: 'candidate',
102
+ reason: 'already-static',
103
+ status: 'skipped',
104
+ });
105
+ continue;
106
+ }
107
+ let resolved;
108
+ let resolvedOpaqueRuntimeBase = false;
109
+ if (isOpaqueRuntimeBaseHelper) {
110
+ resolved = yield* resolveOpaqueRuntimeCandidateValue(this, candidate, filename);
111
+ resolvedOpaqueRuntimeBase = !!resolved;
112
+ if (!resolved) {
113
+ resolved = yield* resolveCandidateValue(this, candidate, filename, memo);
114
+ }
115
+ }
116
+ else {
117
+ resolved = yield* resolveCandidateValue(this, candidate, filename, memo);
118
+ }
119
+ if (!resolved) {
120
+ continue;
121
+ }
122
+ if (resolvedOpaqueRuntimeBase) {
123
+ debugStaticResolve(this, {
124
+ candidate: candidate.name,
125
+ filename,
126
+ phase: 'candidate',
127
+ reason: 'opaque-runtime-component',
128
+ status: 'resolved',
129
+ });
130
+ staticNullWYWMetaExtendsHelpers.add(candidate.name);
131
+ }
132
+ if (resolved.runtimeOnly) {
133
+ // Runtime callback — seed a callable placeholder for collect() but
134
+ // track it separately so the `_exp = () => target` helper survives
135
+ // pruning. The runtime call site relies on that helper declaration.
136
+ runtimeOnlyCandidateNames.add(candidate.name);
137
+ staticValueCache.set(candidate.name, runtimeCallbackPlaceholder);
138
+ }
139
+ else {
140
+ staticValueCache.set(candidate.name, resolved.value);
141
+ }
142
+ hasKnownStaticCandidate = true;
143
+ candidate.imports.forEach((item) => staticImportLocals.add(item.importLocal ?? item.local));
144
+ resolved.dependencies.forEach((dependency) => staticDependencies.add(dependency));
145
+ resolved.sideEffectImportLocals?.forEach((local) => sideEffectImportLocals.add(local));
146
+ changed = true;
147
+ applySameFileStaticWYWMetaHelpers();
148
+ }
149
+ if (!changed &&
150
+ (!hasKnownStaticCandidate || preevalResult.staticValuesApplied)) {
151
+ if (staticOnly && evalDependencyNames.size > 0) {
152
+ throw getStaticStrategyFailure(filename, evalDependencyNames);
153
+ }
154
+ return false;
155
+ }
156
+ const dependencyNames = (preevalResult.dependencyNames ?? []).filter((name) => !staticValueCache.has(name) && !runtimeOnlyCandidateNames.has(name));
157
+ if (staticOnly && dependencyNames.length > 0) {
158
+ throw getStaticStrategyFailure(filename, dependencyNames);
159
+ }
160
+ preevalResult.dependencyNames = dependencyNames;
161
+ preevalResult.staticValueCache = staticValueCache;
162
+ preevalResult.staticDependencies = [...staticDependencies];
163
+ preevalResult.staticNullWYWMetaExtendsHelpers = [
164
+ ...staticNullWYWMetaExtendsHelpers,
165
+ ];
166
+ preevalResult.runtimeOnlyStaticValueNames = [...runtimeOnlyCandidateNames];
167
+ preevalResult.staticValuesApplied = true;
168
+ const originalBaseCode = preevalResult.baseCode ?? preevalResult.code;
169
+ const prunableStaticValueNames = new Set([...staticValueCache.keys()].filter((name) => !runtimeOnlyCandidateNames.has(name)));
170
+ const staticExtendsHelperValues = new Map([...staticValueCache].filter(([name]) => !runtimeOnlyCandidateNames.has(name)));
171
+ staticNullWYWMetaExtendsHelpers.forEach((name) => {
172
+ if (!staticExtendsHelperValues.has(name)) {
173
+ staticExtendsHelperValues.set(name, null);
174
+ }
175
+ });
176
+ const baseCode = pruneStaticPreevalCode(originalBaseCode, filename, prunableStaticValueNames, staticImportLocals, staticExtendsHelperValues, sideEffectImportLocals);
177
+ const evalBaseCode = sideEffectImportLocals.size > 0
178
+ ? pruneStaticPreevalCode(originalBaseCode, filename, prunableStaticValueNames, staticImportLocals, staticExtendsHelperValues, new Set())
179
+ : baseCode;
180
+ preevalResult.baseCode = baseCode;
181
+ preevalResult.code = appendOxcWywPreval(baseCode, filename, dependencyNames);
182
+ preevalResult.evalCode = appendOxcWywPreval(evalBaseCode, filename, dependencyNames);
183
+ preevalResult.staticSideEffectImportLocals = [...sideEffectImportLocals];
184
+ for (const dependency of staticDependencies) {
185
+ const strippedDependency = stripQueryAndHash(dependency);
186
+ if (isAbsolute(strippedDependency)) {
187
+ this.services.cache.checkFreshness(dependency, strippedDependency);
188
+ }
189
+ this.entrypoint.addInvalidationDependency({
190
+ only: ['*'],
191
+ resolved: dependency,
192
+ source: dependency,
193
+ });
194
+ this.entrypoint.markInvalidateOnDependencyChange(dependency);
195
+ }
196
+ return true;
197
+ }
@@ -0,0 +1,25 @@
1
+ import type { Expression, ImportDeclaration, ModuleExportName, Node, Program } from 'oxc-parser';
2
+ import type { CollectImportBindingsOptions, ImportBinding, StaticExportResult, StaticExpressionOptions } from './types';
3
+ export declare const moduleExportName: (node: ModuleExportName) => string;
4
+ export declare const unwrapExpression: (expr: Node) => Node;
5
+ export declare const isProcessEnvMember: (node: Node) => boolean;
6
+ export declare const isSafeLiteral: (node: Node) => node is Node & {
7
+ type: "Literal";
8
+ value: boolean | null | number | string;
9
+ };
10
+ export declare const isSafeStaticExpression: (expr: Node, options?: StaticExpressionOptions) => boolean;
11
+ export declare const isTypeOnlyImport: (statement: ImportDeclaration) => boolean;
12
+ export declare const getImportBinding: (statement: ImportDeclaration, specifier: ImportDeclaration["specifiers"][number], options?: CollectImportBindingsOptions) => ImportBinding | null;
13
+ export declare const collectImportBindings: (program: Program, options?: CollectImportBindingsOptions) => Map<string, ImportBinding>;
14
+ export declare const parseStaticExpressionSource: (source: string, filename: string) => Expression | null;
15
+ export declare const isRuntimeCallbackExpression: (expression: Expression | null) => boolean;
16
+ export declare const runtimeCallbackPlaceholder: () => undefined;
17
+ export declare const isIdentifierBindingPosition: (node: Node, parent: Node | null) => boolean;
18
+ export declare const isPropertyKeyOnlyIdentifier: (node: Node, parent: Node | null) => boolean;
19
+ export declare const expressionUsesNameOnlyAsZeroArgCalls: (expression: Node, name: string) => boolean;
20
+ export declare const bindStaticResolvedValue: (env: Map<string, unknown>, expression: Node, local: string, resolved: StaticExportResult, options?: {
21
+ wrapNonCallable?: boolean;
22
+ }) => boolean;
23
+ export declare const isSafeFunctionBodyExpression: (body: Node, options: StaticExpressionOptions) => boolean;
24
+ export declare const collectStaticFunctionBodyReferences: (body: Node, references: Set<string>, options: StaticExpressionOptions) => boolean;
25
+ export declare const collectStaticExpressionReferences: (expr: Node, references: Set<string>, options?: StaticExpressionOptions) => boolean;