@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,391 @@
1
+ /* eslint-disable no-restricted-syntax,no-continue,@typescript-eslint/no-use-before-define */
2
+ import { createOxcStaticCallableValue } from '../../../utils/collectOxcTemplateDependencies';
3
+ import { getOxcNodeChildren } from '../../../utils/oxc/ast';
4
+ import { parseProgram } from './environment';
5
+ export const moduleExportName = (node) => node.type === 'Literal' ? String(node.value) : node.name;
6
+ export const unwrapExpression = (expr) => {
7
+ let current = expr;
8
+ for (;;) {
9
+ if (current.type === 'TSAsExpression' ||
10
+ current.type === 'TSSatisfiesExpression' ||
11
+ current.type === 'TSNonNullExpression' ||
12
+ current.type === 'TSInstantiationExpression' ||
13
+ current.type === 'TSTypeAssertion' ||
14
+ current.type === 'ParenthesizedExpression') {
15
+ current = current.expression;
16
+ continue;
17
+ }
18
+ return current;
19
+ }
20
+ };
21
+ export const isProcessEnvMember = (node) => {
22
+ if (node.type !== 'MemberExpression' || node.computed) {
23
+ return false;
24
+ }
25
+ if (node.property.type !== 'Identifier' || node.property.name !== 'env') {
26
+ return false;
27
+ }
28
+ return node.object.type === 'Identifier' && node.object.name === 'process';
29
+ };
30
+ export const isSafeLiteral = (node) => {
31
+ if (node.type !== 'Literal') {
32
+ return false;
33
+ }
34
+ const { value } = node;
35
+ return (value === null ||
36
+ typeof value === 'string' ||
37
+ typeof value === 'number' ||
38
+ typeof value === 'boolean');
39
+ };
40
+ export const isSafeStaticExpression = (expr, options = {}) => {
41
+ const unwrapped = unwrapExpression(expr);
42
+ if (isSafeLiteral(unwrapped)) {
43
+ return true;
44
+ }
45
+ if (unwrapped.type === 'Identifier') {
46
+ return true;
47
+ }
48
+ if (unwrapped.type === 'TemplateLiteral') {
49
+ return unwrapped.expressions.every((item) => isSafeStaticExpression(item, options));
50
+ }
51
+ if (unwrapped.type === 'UnaryExpression') {
52
+ return isSafeStaticExpression(unwrapped.argument, options);
53
+ }
54
+ if (unwrapped.type === 'BinaryExpression' ||
55
+ unwrapped.type === 'LogicalExpression') {
56
+ return (isSafeStaticExpression(unwrapped.left, options) &&
57
+ isSafeStaticExpression(unwrapped.right, options));
58
+ }
59
+ if (unwrapped.type === 'ConditionalExpression') {
60
+ return (isSafeStaticExpression(unwrapped.test, options) &&
61
+ isSafeStaticExpression(unwrapped.consequent, options) &&
62
+ isSafeStaticExpression(unwrapped.alternate, options));
63
+ }
64
+ if (unwrapped.type === 'MemberExpression') {
65
+ return (isSafeStaticExpression(unwrapped.object, options) &&
66
+ (unwrapped.computed
67
+ ? isSafeStaticExpression(unwrapped.property, options)
68
+ : unwrapped.property.type === 'Identifier'));
69
+ }
70
+ if (options.allowMetadataCalls && unwrapped.type === 'CallExpression') {
71
+ return (unwrapped.callee.type === 'Identifier' && unwrapped.arguments.length === 0);
72
+ }
73
+ if (unwrapped.type === 'CallExpression' &&
74
+ options.staticHelperLocals &&
75
+ unwrapped.callee.type === 'Identifier' &&
76
+ options.staticHelperLocals.has(unwrapped.callee.name)) {
77
+ return unwrapped.arguments.every((argument) => argument.type === 'SpreadElement'
78
+ ? isSafeStaticExpression(argument.argument, options)
79
+ : isSafeStaticExpression(argument, options));
80
+ }
81
+ if (options.allowMetadataCalls &&
82
+ (unwrapped.type === 'ArrowFunctionExpression' ||
83
+ unwrapped.type === 'FunctionExpression')) {
84
+ return (!unwrapped.async &&
85
+ unwrapped.params.length === 0 &&
86
+ !!unwrapped.body &&
87
+ isSafeFunctionBodyExpression(unwrapped.body, options));
88
+ }
89
+ if (unwrapped.type === 'ArrayExpression') {
90
+ return unwrapped.elements.every((item) => {
91
+ if (!item) {
92
+ return false;
93
+ }
94
+ return item.type === 'SpreadElement'
95
+ ? isSafeStaticExpression(item.argument, options)
96
+ : isSafeStaticExpression(item, options);
97
+ });
98
+ }
99
+ if (unwrapped.type === 'ObjectExpression') {
100
+ return unwrapped.properties.every((property) => {
101
+ if (property.type === 'SpreadElement') {
102
+ return isSafeStaticExpression(property.argument);
103
+ }
104
+ const propertyNode = property;
105
+ if (propertyNode.method) {
106
+ return false;
107
+ }
108
+ // Computed keys are admissible as long as the key expression
109
+ // itself is safe-static — the downstream evaluator already folds
110
+ // them against the env. Common shape: `[\`${imp} &\`]: { ... }`.
111
+ if (propertyNode.computed &&
112
+ (!propertyNode.key ||
113
+ typeof propertyNode.key !== 'object' ||
114
+ !isSafeStaticExpression(propertyNode.key, options))) {
115
+ return false;
116
+ }
117
+ return (propertyNode.value &&
118
+ typeof propertyNode.value === 'object' &&
119
+ isSafeStaticExpression(propertyNode.value, options));
120
+ });
121
+ }
122
+ return false;
123
+ };
124
+ export const isTypeOnlyImport = (statement) => {
125
+ if (statement.importKind === 'type') {
126
+ return true;
127
+ }
128
+ return statement.specifiers.every((specifier) => specifier.type === 'ImportSpecifier' &&
129
+ specifier.importKind === 'type');
130
+ };
131
+ export const getImportBinding = (statement, specifier, options = {}) => {
132
+ const local = specifier.local?.name;
133
+ if (!local) {
134
+ return null;
135
+ }
136
+ if (specifier.type === 'ImportNamespaceSpecifier') {
137
+ return options.includeNamespace
138
+ ? {
139
+ imported: '*',
140
+ local,
141
+ source: statement.source.value,
142
+ }
143
+ : null;
144
+ }
145
+ if (specifier.type === 'ImportDefaultSpecifier') {
146
+ return {
147
+ imported: 'default',
148
+ local,
149
+ source: statement.source.value,
150
+ };
151
+ }
152
+ if (specifier.type !== 'ImportSpecifier') {
153
+ return null;
154
+ }
155
+ if (statement.importKind === 'type' ||
156
+ specifier.importKind === 'type') {
157
+ return null;
158
+ }
159
+ return {
160
+ imported: moduleExportName(specifier.imported),
161
+ local,
162
+ source: statement.source.value,
163
+ };
164
+ };
165
+ export const collectImportBindings = (program, options = {}) => {
166
+ const result = new Map();
167
+ program.body.forEach((statement) => {
168
+ if (statement.type !== 'ImportDeclaration' || isTypeOnlyImport(statement)) {
169
+ return;
170
+ }
171
+ statement.specifiers.forEach((specifier) => {
172
+ const binding = getImportBinding(statement, specifier, options);
173
+ if (binding) {
174
+ result.set(binding.local, binding);
175
+ }
176
+ });
177
+ });
178
+ return result;
179
+ };
180
+ export const parseStaticExpressionSource = (source, filename) => {
181
+ try {
182
+ const program = parseProgram(`const __wyw_static_value = ${source};`, filename);
183
+ const declaration = program.body[0];
184
+ if (declaration?.type !== 'VariableDeclaration') {
185
+ return null;
186
+ }
187
+ const [declarator] = declaration.declarations;
188
+ return declarator?.init ?? null;
189
+ }
190
+ catch {
191
+ return null;
192
+ }
193
+ };
194
+ export const isRuntimeCallbackExpression = (expression) => {
195
+ const unwrapped = expression ? unwrapExpression(expression) : null;
196
+ return (unwrapped?.type === 'ArrowFunctionExpression' ||
197
+ unwrapped?.type === 'FunctionExpression');
198
+ };
199
+ export const runtimeCallbackPlaceholder = () => undefined;
200
+ export const isIdentifierBindingPosition = (node, parent) => {
201
+ if (node.type !== 'Identifier' || !parent) {
202
+ return false;
203
+ }
204
+ if ((parent.type === 'VariableDeclarator' && parent.id === node) ||
205
+ (parent.type === 'FunctionDeclaration' && parent.id === node) ||
206
+ (parent.type === 'FunctionExpression' && parent.id === node) ||
207
+ (parent.type === 'ClassDeclaration' && parent.id === node) ||
208
+ (parent.type === 'ClassExpression' && parent.id === node)) {
209
+ return true;
210
+ }
211
+ if ((parent.type === 'ArrowFunctionExpression' ||
212
+ parent.type === 'FunctionDeclaration' ||
213
+ parent.type === 'FunctionExpression') &&
214
+ parent.params.some((param) => param === node)) {
215
+ return true;
216
+ }
217
+ return ((parent.type === 'ImportSpecifier' && parent.local === node) ||
218
+ (parent.type === 'ImportDefaultSpecifier' && parent.local === node) ||
219
+ (parent.type === 'ImportNamespaceSpecifier' && parent.local === node));
220
+ };
221
+ export const isPropertyKeyOnlyIdentifier = (node, parent) => node.type === 'Identifier' &&
222
+ !!parent &&
223
+ ((parent.type === 'MemberExpression' &&
224
+ parent.property === node &&
225
+ !parent.computed) ||
226
+ (parent.type === 'Property' &&
227
+ parent.key === node &&
228
+ !parent.computed &&
229
+ !parent.shorthand));
230
+ export const expressionUsesNameOnlyAsZeroArgCalls = (expression, name) => {
231
+ let seen = false;
232
+ let valid = true;
233
+ const walk = (node, parent) => {
234
+ if (!valid) {
235
+ return;
236
+ }
237
+ if (node.type === 'Identifier' &&
238
+ node.name === name &&
239
+ !isIdentifierBindingPosition(node, parent) &&
240
+ !isPropertyKeyOnlyIdentifier(node, parent)) {
241
+ if (parent?.type === 'CallExpression' &&
242
+ parent.callee === node &&
243
+ parent.arguments.length === 0) {
244
+ seen = true;
245
+ }
246
+ else {
247
+ valid = false;
248
+ return;
249
+ }
250
+ }
251
+ getOxcNodeChildren(node).forEach((child) => walk(child, node));
252
+ };
253
+ walk(expression, null);
254
+ return seen && valid;
255
+ };
256
+ export const bindStaticResolvedValue = (env, expression, local, resolved, options = {}) => {
257
+ if (resolved.callable === 'zero-arg') {
258
+ if (!expressionUsesNameOnlyAsZeroArgCalls(expression, local)) {
259
+ return false;
260
+ }
261
+ env.set(local, createOxcStaticCallableValue(resolved.value));
262
+ return true;
263
+ }
264
+ env.set(local, options.wrapNonCallable
265
+ ? createOxcStaticCallableValue(resolved.value)
266
+ : resolved.value);
267
+ return true;
268
+ };
269
+ export const isSafeFunctionBodyExpression = (body, options) => {
270
+ if (body.type !== 'BlockStatement') {
271
+ return isSafeStaticExpression(body, options);
272
+ }
273
+ return body.body.every((statement) => {
274
+ if (statement.type === 'VariableDeclaration') {
275
+ return (statement.kind === 'const' &&
276
+ statement.declarations.every((declarator) => declarator.init &&
277
+ declarator.id.type === 'Identifier' &&
278
+ isSafeStaticExpression(declarator.init, options)));
279
+ }
280
+ return (statement.type === 'ReturnStatement' &&
281
+ !!statement.argument &&
282
+ isSafeStaticExpression(statement.argument, options));
283
+ });
284
+ };
285
+ export const collectStaticFunctionBodyReferences = (body, references, options) => {
286
+ if (body.type !== 'BlockStatement') {
287
+ return collectStaticExpressionReferences(body, references, options);
288
+ }
289
+ return body.body.every((statement) => {
290
+ if (statement.type === 'VariableDeclaration') {
291
+ return (statement.kind === 'const' &&
292
+ statement.declarations.every((declarator) => declarator.init &&
293
+ declarator.id.type === 'Identifier' &&
294
+ collectStaticExpressionReferences(declarator.init, references, options)));
295
+ }
296
+ return (statement.type === 'ReturnStatement' &&
297
+ !!statement.argument &&
298
+ collectStaticExpressionReferences(statement.argument, references, options));
299
+ });
300
+ };
301
+ export const collectStaticExpressionReferences = (expr, references, options = {}) => {
302
+ const unwrapped = unwrapExpression(expr);
303
+ if (isSafeLiteral(unwrapped)) {
304
+ return true;
305
+ }
306
+ if (unwrapped.type === 'Identifier') {
307
+ references.add(unwrapped.name);
308
+ return true;
309
+ }
310
+ if (unwrapped.type === 'TemplateLiteral') {
311
+ return unwrapped.expressions.every((item) => collectStaticExpressionReferences(item, references, options));
312
+ }
313
+ if (unwrapped.type === 'UnaryExpression') {
314
+ return collectStaticExpressionReferences(unwrapped.argument, references, options);
315
+ }
316
+ if (unwrapped.type === 'BinaryExpression' ||
317
+ unwrapped.type === 'LogicalExpression') {
318
+ return (collectStaticExpressionReferences(unwrapped.left, references, options) &&
319
+ collectStaticExpressionReferences(unwrapped.right, references, options));
320
+ }
321
+ if (unwrapped.type === 'ConditionalExpression') {
322
+ return (collectStaticExpressionReferences(unwrapped.test, references, options) &&
323
+ collectStaticExpressionReferences(unwrapped.consequent, references, options) &&
324
+ collectStaticExpressionReferences(unwrapped.alternate, references, options));
325
+ }
326
+ if (unwrapped.type === 'MemberExpression') {
327
+ if (isProcessEnvMember(unwrapped) || isProcessEnvMember(unwrapped.object)) {
328
+ // process.env / process.env.X is an opaque build-time global —
329
+ // don't treat `process` as an unresolved local reference.
330
+ return true;
331
+ }
332
+ return (collectStaticExpressionReferences(unwrapped.object, references, options) &&
333
+ (!unwrapped.computed ||
334
+ collectStaticExpressionReferences(unwrapped.property, references, options)));
335
+ }
336
+ if (options.allowMetadataCalls && unwrapped.type === 'CallExpression') {
337
+ if (unwrapped.callee.type !== 'Identifier' ||
338
+ unwrapped.arguments.length !== 0) {
339
+ return false;
340
+ }
341
+ references.add(unwrapped.callee.name);
342
+ return true;
343
+ }
344
+ if (unwrapped.type === 'CallExpression' &&
345
+ options.staticHelperLocals &&
346
+ unwrapped.callee.type === 'Identifier' &&
347
+ options.staticHelperLocals.has(unwrapped.callee.name)) {
348
+ references.add(unwrapped.callee.name);
349
+ return unwrapped.arguments.every((argument) => argument.type === 'SpreadElement'
350
+ ? collectStaticExpressionReferences(argument.argument, references, options)
351
+ : collectStaticExpressionReferences(argument, references, options));
352
+ }
353
+ if (options.allowMetadataCalls &&
354
+ (unwrapped.type === 'ArrowFunctionExpression' ||
355
+ unwrapped.type === 'FunctionExpression')) {
356
+ if (unwrapped.async || unwrapped.params.length !== 0) {
357
+ return false;
358
+ }
359
+ return (!!unwrapped.body &&
360
+ collectStaticFunctionBodyReferences(unwrapped.body, references, options));
361
+ }
362
+ if (unwrapped.type === 'ArrayExpression') {
363
+ return unwrapped.elements.every((item) => {
364
+ if (!item) {
365
+ return false;
366
+ }
367
+ return item.type === 'SpreadElement'
368
+ ? collectStaticExpressionReferences(item.argument, references, options)
369
+ : collectStaticExpressionReferences(item, references, options);
370
+ });
371
+ }
372
+ if (unwrapped.type === 'ObjectExpression') {
373
+ return unwrapped.properties.every((property) => {
374
+ if (property.type === 'SpreadElement') {
375
+ return collectStaticExpressionReferences(property.argument, references, options);
376
+ }
377
+ const propertyNode = property;
378
+ if (!propertyNode.value || typeof propertyNode.value !== 'object') {
379
+ return false;
380
+ }
381
+ if (propertyNode.computed &&
382
+ (!propertyNode.key ||
383
+ typeof propertyNode.key !== 'object' ||
384
+ !collectStaticExpressionReferences(propertyNode.key, references, options))) {
385
+ return false;
386
+ }
387
+ return collectStaticExpressionReferences(propertyNode.value, references, options);
388
+ });
389
+ }
390
+ return false;
391
+ };
@@ -0,0 +1,14 @@
1
+ import type { Expression, Node, Program } from 'oxc-parser';
2
+ import type { ExportTarget, StaticExpressionDependencies, StaticExpressionOptions } from './types';
3
+ export declare const mutatingMethodNames: Set<string>;
4
+ export declare const rootIdentifierName: (expr: Node) => string | null;
5
+ export declare const staticMemberName: (expr: Node) => string | null;
6
+ export declare const expressionMayProduceMutableValue: (expr: Node, locals: Map<string, Expression>, visiting: Set<string>) => boolean;
7
+ export declare const collectExpressionMutationHints: (expr: Node, mutatedNames: Set<string>, callArgumentNames: Set<string>) => void;
8
+ export declare const collectTopLevelMutationHints: (program: Program, closureNames?: ReadonlySet<string> | null) => {
9
+ callArgumentNames: Set<string>;
10
+ mutatedNames: Set<string>;
11
+ };
12
+ export declare const collectStaticExpressionDependencies: (program: Program, target: Extract<ExportTarget, {
13
+ kind: "expression";
14
+ }>, options?: StaticExpressionOptions) => StaticExpressionDependencies | null;