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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (603) hide show
  1. package/esm/cache.js +426 -289
  2. package/esm/cache.js.map +1 -1
  3. package/esm/debug/fileReporter.js +137 -134
  4. package/esm/debug/fileReporter.js.map +1 -1
  5. package/esm/eval/broker.js +2134 -0
  6. package/esm/eval/broker.js.map +1 -0
  7. package/esm/eval/lru.js +36 -0
  8. package/esm/eval/lru.js.map +1 -0
  9. package/esm/eval/prepareModuleOnDemand.js +21 -0
  10. package/esm/eval/prepareModuleOnDemand.js.map +1 -0
  11. package/esm/eval/protocol.js +2 -0
  12. package/esm/eval/protocol.js.map +1 -0
  13. package/esm/eval/resolverStrategy.js +51 -0
  14. package/esm/eval/resolverStrategy.js.map +1 -0
  15. package/esm/eval/runner.js +1759 -0
  16. package/esm/eval/runner.js.map +1 -0
  17. package/esm/eval/serialize.js +333 -0
  18. package/esm/eval/serialize.js.map +1 -0
  19. package/esm/eval/writeQueue.js +81 -0
  20. package/esm/eval/writeQueue.js.map +1 -0
  21. package/esm/evaluators/index.js +11 -12
  22. package/esm/evaluators/index.js.map +1 -1
  23. package/esm/index.js +25 -29
  24. package/esm/index.js.map +1 -1
  25. package/esm/module.js +896 -520
  26. package/esm/module.js.map +1 -1
  27. package/esm/shaker.js +14 -80
  28. package/esm/shaker.js.map +1 -1
  29. package/esm/transform/BaseEntrypoint.js +162 -164
  30. package/esm/transform/BaseEntrypoint.js.map +1 -1
  31. package/esm/transform/Entrypoint.helpers.js +96 -253
  32. package/esm/transform/Entrypoint.helpers.js.map +1 -1
  33. package/esm/transform/Entrypoint.js +336 -270
  34. package/esm/transform/Entrypoint.js.map +1 -1
  35. package/esm/transform/Entrypoint.types.js +1 -1
  36. package/esm/transform/Entrypoint.types.js.map +1 -1
  37. package/esm/transform/EvaluatedEntrypoint.js +10 -4
  38. package/esm/transform/EvaluatedEntrypoint.js.map +1 -1
  39. package/esm/transform/actions/AbortError.js +6 -6
  40. package/esm/transform/actions/AbortError.js.map +1 -1
  41. package/esm/transform/actions/BaseAction.js +140 -136
  42. package/esm/transform/actions/BaseAction.js.map +1 -1
  43. package/esm/transform/actions/UnprocessedEntrypointError.js +6 -6
  44. package/esm/transform/actions/UnprocessedEntrypointError.js.map +1 -1
  45. package/esm/transform/actions/actionRunner.js +63 -66
  46. package/esm/transform/actions/actionRunner.js.map +1 -1
  47. package/esm/transform/actions/types.js +1 -1
  48. package/esm/transform/actions/types.js.map +1 -1
  49. package/esm/transform/barrelManifest.types.js +2 -0
  50. package/esm/transform/barrelManifest.types.js.map +1 -0
  51. package/esm/transform/generators/baseProcessingHandlers.js +15 -17
  52. package/esm/transform/generators/baseProcessingHandlers.js.map +1 -1
  53. package/esm/transform/generators/collect.js +27 -55
  54. package/esm/transform/generators/collect.js.map +1 -1
  55. package/esm/transform/generators/createStylisPreprocessor.js +353 -321
  56. package/esm/transform/generators/createStylisPreprocessor.js.map +1 -1
  57. package/esm/transform/generators/evalFile.js +48 -47
  58. package/esm/transform/generators/evalFile.js.map +1 -1
  59. package/esm/transform/generators/extract.js +78 -90
  60. package/esm/transform/generators/extract.js.map +1 -1
  61. package/esm/transform/generators/getExports.js +57 -74
  62. package/esm/transform/generators/getExports.js.map +1 -1
  63. package/esm/transform/generators/index.js +11 -11
  64. package/esm/transform/generators/index.js.map +1 -1
  65. package/esm/transform/generators/processEntrypoint.js +78 -67
  66. package/esm/transform/generators/processEntrypoint.js.map +1 -1
  67. package/esm/transform/generators/processImports.js +102 -67
  68. package/esm/transform/generators/processImports.js.map +1 -1
  69. package/esm/transform/generators/resolveImports.js +165 -196
  70. package/esm/transform/generators/resolveImports.js.map +1 -1
  71. package/esm/transform/generators/resolveStaticOxcValues.js +2911 -0
  72. package/esm/transform/generators/resolveStaticOxcValues.js.map +1 -0
  73. package/esm/transform/generators/rewriteOxcBarrelImports.js +822 -0
  74. package/esm/transform/generators/rewriteOxcBarrelImports.js.map +1 -0
  75. package/esm/transform/generators/transform.js +239 -248
  76. package/esm/transform/generators/transform.js.map +1 -1
  77. package/esm/transform/generators/workflow.js +87 -90
  78. package/esm/transform/generators/workflow.js.map +1 -1
  79. package/esm/transform/helpers/loadWywOptions.js +154 -74
  80. package/esm/transform/helpers/loadWywOptions.js.map +1 -1
  81. package/esm/transform/helpers/withDefaultServices.js +13 -22
  82. package/esm/transform/helpers/withDefaultServices.js.map +1 -1
  83. package/esm/transform/isStaticallyEvaluatableModule.js +140 -152
  84. package/esm/transform/isStaticallyEvaluatableModule.js.map +1 -1
  85. package/esm/transform/oxcBarrelManifest.js +349 -0
  86. package/esm/transform/oxcBarrelManifest.js.map +1 -0
  87. package/esm/transform/rootLog.js +3 -3
  88. package/esm/transform/rootLog.js.map +1 -1
  89. package/esm/transform/syntax.js +2 -0
  90. package/esm/transform/syntax.js.map +1 -0
  91. package/esm/transform/types.js +2 -2
  92. package/esm/transform/types.js.map +1 -1
  93. package/esm/transform.js +123 -147
  94. package/esm/transform.js.map +1 -1
  95. package/esm/types.js +4 -1
  96. package/esm/types.js.map +1 -1
  97. package/esm/utils/EventEmitter.js +46 -48
  98. package/esm/utils/EventEmitter.js.map +1 -1
  99. package/esm/utils/ShakerMetadata.js +2 -2
  100. package/esm/utils/ShakerMetadata.js.map +1 -1
  101. package/esm/utils/TransformDiagnostics.js +9 -9
  102. package/esm/utils/TransformDiagnostics.js.map +1 -1
  103. package/esm/utils/TransformMetadata.js +24 -26
  104. package/esm/utils/TransformMetadata.js.map +1 -1
  105. package/esm/utils/applyOxcProcessors.js +1217 -0
  106. package/esm/utils/applyOxcProcessors.js.map +1 -0
  107. package/esm/utils/collectOxcExportsAndImports.js +934 -0
  108. package/esm/utils/collectOxcExportsAndImports.js.map +1 -0
  109. package/esm/utils/collectOxcRuntime.js +220 -0
  110. package/esm/utils/collectOxcRuntime.js.map +1 -0
  111. package/esm/utils/collectOxcTemplateDependencies.js +1398 -0
  112. package/esm/utils/collectOxcTemplateDependencies.js.map +1 -0
  113. package/esm/utils/dispose-polyfill.js +3 -4
  114. package/esm/utils/dispose-polyfill.js.map +1 -1
  115. package/esm/utils/getFileIdx.js +6 -6
  116. package/esm/utils/getFileIdx.js.map +1 -1
  117. package/esm/utils/getPluginKey.js +12 -12
  118. package/esm/utils/getPluginKey.js.map +1 -1
  119. package/esm/utils/getVisitorKeys.js +9 -3
  120. package/esm/utils/getVisitorKeys.js.map +1 -1
  121. package/esm/utils/hasCachedWywPrevalExport.js +23 -0
  122. package/esm/utils/hasCachedWywPrevalExport.js.map +1 -0
  123. package/esm/utils/hasWywPreval.js +5 -5
  124. package/esm/utils/hasWywPreval.js.map +1 -1
  125. package/esm/utils/importOverrides.js +75 -90
  126. package/esm/utils/importOverrides.js.map +1 -1
  127. package/esm/utils/isNode.js +2 -2
  128. package/esm/utils/isNode.js.map +1 -1
  129. package/esm/utils/isNotNull.js +2 -2
  130. package/esm/utils/isNotNull.js.map +1 -1
  131. package/esm/utils/isSerializable.js +11 -11
  132. package/esm/utils/isSerializable.js.map +1 -1
  133. package/esm/utils/oxcAstService.js +121 -0
  134. package/esm/utils/oxcAstService.js.map +1 -0
  135. package/esm/utils/oxcEmit.js +447 -0
  136. package/esm/utils/oxcEmit.js.map +1 -0
  137. package/esm/utils/oxcPreevalStage.js +97 -0
  138. package/esm/utils/oxcPreevalStage.js.map +1 -0
  139. package/esm/utils/oxcPreevalTransforms.js +1054 -0
  140. package/esm/utils/oxcPreevalTransforms.js.map +1 -0
  141. package/esm/utils/oxcShaker.js +662 -0
  142. package/esm/utils/oxcShaker.js.map +1 -0
  143. package/esm/utils/parseOxc.js +37 -0
  144. package/esm/utils/parseOxc.js.map +1 -0
  145. package/esm/utils/parseRequest.js +27 -27
  146. package/esm/utils/parseRequest.js.map +1 -1
  147. package/esm/utils/peek.js +1 -1
  148. package/esm/utils/peek.js.map +1 -1
  149. package/esm/utils/processorLookup.js +125 -0
  150. package/esm/utils/processorLookup.js.map +1 -0
  151. package/esm/utils/resolveWithConditions.js +99 -0
  152. package/esm/utils/resolveWithConditions.js.map +1 -0
  153. package/esm/vm/createVmContext.js +140 -141
  154. package/esm/vm/createVmContext.js.map +1 -1
  155. package/esm/vm/process.js +11 -13
  156. package/esm/vm/process.js.map +1 -1
  157. package/package.json +18 -26
  158. package/types/cache.d.ts +17 -8
  159. package/types/cache.js +237 -95
  160. package/types/debug/fileReporter.js +22 -22
  161. package/types/eval/broker.d.ts +88 -0
  162. package/types/eval/broker.js +2262 -0
  163. package/types/eval/lru.d.ts +10 -0
  164. package/types/eval/lru.js +36 -0
  165. package/types/eval/prepareModuleOnDemand.d.ts +7 -0
  166. package/types/eval/prepareModuleOnDemand.js +24 -0
  167. package/types/eval/protocol.d.ts +97 -0
  168. package/types/eval/protocol.js +1 -0
  169. package/types/eval/resolverStrategy.d.ts +13 -0
  170. package/types/eval/resolverStrategy.js +46 -0
  171. package/types/eval/serialize.d.ts +78 -0
  172. package/types/eval/serialize.js +357 -0
  173. package/types/eval/writeQueue.d.ts +13 -0
  174. package/types/eval/writeQueue.js +80 -0
  175. package/types/evaluators/index.d.ts +2 -2
  176. package/types/evaluators/index.js +6 -9
  177. package/types/index.d.ts +3 -6
  178. package/types/index.js +24 -82
  179. package/types/module.d.ts +35 -7
  180. package/types/module.js +535 -163
  181. package/types/shaker.d.ts +2 -10
  182. package/types/shaker.js +10 -100
  183. package/types/transform/BaseEntrypoint.js +6 -11
  184. package/types/transform/Entrypoint.d.ts +15 -15
  185. package/types/transform/Entrypoint.helpers.d.ts +2 -5
  186. package/types/transform/Entrypoint.helpers.js +43 -203
  187. package/types/transform/Entrypoint.js +130 -53
  188. package/types/transform/Entrypoint.types.d.ts +28 -6
  189. package/types/transform/Entrypoint.types.js +1 -2
  190. package/types/transform/EvaluatedEntrypoint.d.ts +13 -2
  191. package/types/transform/EvaluatedEntrypoint.js +7 -6
  192. package/types/transform/actions/AbortError.js +2 -7
  193. package/types/transform/actions/BaseAction.js +4 -8
  194. package/types/transform/actions/UnprocessedEntrypointError.js +2 -7
  195. package/types/transform/actions/actionRunner.js +8 -12
  196. package/types/transform/actions/types.d.ts +2 -2
  197. package/types/transform/actions/types.js +1 -2
  198. package/types/transform/{barrelManifest.d.ts → barrelManifest.types.d.ts} +0 -2
  199. package/types/transform/barrelManifest.types.js +1 -0
  200. package/types/transform/generators/baseProcessingHandlers.d.ts +4 -5
  201. package/types/transform/generators/baseProcessingHandlers.js +10 -14
  202. package/types/transform/generators/collect.js +13 -39
  203. package/types/transform/generators/createStylisPreprocessor.js +19 -60
  204. package/types/transform/generators/evalFile.d.ts +2 -2
  205. package/types/transform/generators/evalFile.js +26 -28
  206. package/types/transform/generators/extract.js +5 -8
  207. package/types/transform/generators/getExports.js +23 -30
  208. package/types/transform/generators/index.d.ts +2 -2
  209. package/types/transform/generators/index.js +11 -14
  210. package/types/transform/generators/processEntrypoint.d.ts +2 -2
  211. package/types/transform/generators/processEntrypoint.js +60 -26
  212. package/types/transform/generators/processImports.d.ts +0 -3
  213. package/types/transform/generators/processImports.js +60 -20
  214. package/types/transform/generators/resolveImports.js +18 -22
  215. package/types/transform/generators/resolveStaticOxcValues.d.ts +2 -0
  216. package/types/transform/generators/resolveStaticOxcValues.js +3235 -0
  217. package/types/transform/generators/{rewriteBarrelImports.d.ts → rewriteOxcBarrelImports.d.ts} +2 -3
  218. package/types/transform/generators/{rewriteBarrelImports.js → rewriteOxcBarrelImports.js} +282 -225
  219. package/types/transform/generators/transform.d.ts +3 -7
  220. package/types/transform/generators/transform.js +203 -199
  221. package/types/transform/generators/workflow.js +62 -45
  222. package/types/transform/helpers/loadWywOptions.js +94 -20
  223. package/types/transform/helpers/withDefaultServices.d.ts +1 -1
  224. package/types/transform/helpers/withDefaultServices.js +6 -44
  225. package/types/transform/isStaticallyEvaluatableModule.d.ts +1 -2
  226. package/types/transform/isStaticallyEvaluatableModule.js +125 -126
  227. package/types/transform/oxcBarrelManifest.d.ts +2 -0
  228. package/types/transform/{barrelManifest.js → oxcBarrelManifest.js} +156 -97
  229. package/types/transform/rootLog.js +2 -5
  230. package/types/transform/syntax.d.ts +38 -0
  231. package/types/transform/syntax.js +1 -0
  232. package/types/transform/types.d.ts +9 -6
  233. package/types/transform/types.js +1 -4
  234. package/types/transform.d.ts +2 -2
  235. package/types/transform.js +88 -101
  236. package/types/types.d.ts +0 -23
  237. package/types/types.js +1 -2
  238. package/types/utils/EventEmitter.js +3 -9
  239. package/types/utils/ShakerMetadata.js +1 -5
  240. package/types/utils/TransformDiagnostics.js +3 -7
  241. package/types/utils/TransformMetadata.js +8 -16
  242. package/types/utils/applyOxcProcessors.d.ts +16 -0
  243. package/types/utils/applyOxcProcessors.js +1391 -0
  244. package/types/utils/collectOxcExportsAndImports.d.ts +35 -0
  245. package/types/utils/collectOxcExportsAndImports.js +957 -0
  246. package/types/utils/collectOxcRuntime.d.ts +14 -0
  247. package/types/utils/collectOxcRuntime.js +250 -0
  248. package/types/utils/collectOxcTemplateDependencies.d.ts +38 -0
  249. package/types/utils/collectOxcTemplateDependencies.js +1580 -0
  250. package/types/utils/getFileIdx.js +1 -4
  251. package/types/utils/getPluginKey.d.ts +5 -2
  252. package/types/utils/getPluginKey.js +2 -6
  253. package/types/utils/getVisitorKeys.d.ts +4 -4
  254. package/types/utils/getVisitorKeys.js +9 -6
  255. package/types/utils/hasCachedWywPrevalExport.d.ts +14 -0
  256. package/types/utils/hasCachedWywPrevalExport.js +30 -0
  257. package/types/utils/hasWywPreval.js +1 -4
  258. package/types/utils/importOverrides.js +17 -27
  259. package/types/utils/isNode.d.ts +2 -2
  260. package/types/utils/isNode.js +2 -6
  261. package/types/utils/isNotNull.js +1 -4
  262. package/types/utils/isSerializable.js +3 -6
  263. package/types/utils/oxcAstService.d.ts +11 -0
  264. package/types/utils/oxcAstService.js +79 -0
  265. package/types/utils/oxcEmit.d.ts +19 -0
  266. package/types/utils/oxcEmit.js +506 -0
  267. package/types/utils/oxcPreevalStage.d.ts +20 -0
  268. package/types/utils/oxcPreevalStage.js +102 -0
  269. package/types/utils/oxcPreevalTransforms.d.ts +13 -0
  270. package/types/utils/oxcPreevalTransforms.js +1179 -0
  271. package/types/utils/oxcShaker.d.ts +13 -0
  272. package/types/utils/oxcShaker.js +751 -0
  273. package/types/utils/parseOxc.d.ts +11 -0
  274. package/types/utils/parseOxc.js +38 -0
  275. package/types/utils/parseRequest.js +2 -7
  276. package/types/utils/peek.js +1 -5
  277. package/types/utils/processorLookup.d.ts +8 -0
  278. package/types/utils/processorLookup.js +135 -0
  279. package/types/utils/resolveWithConditions.d.ts +12 -0
  280. package/types/utils/resolveWithConditions.js +103 -0
  281. package/types/vm/createVmContext.d.ts +2 -2
  282. package/types/vm/createVmContext.js +25 -62
  283. package/types/vm/process.js +20 -26
  284. package/esm/babel.js +0 -2
  285. package/esm/babel.js.map +0 -1
  286. package/esm/options/buildOptions.js +0 -168
  287. package/esm/options/buildOptions.js.map +0 -1
  288. package/esm/options/buildOptions.test.js +0 -138
  289. package/esm/options/buildOptions.test.js.map +0 -1
  290. package/esm/options/loadBabelOptions.js +0 -24
  291. package/esm/options/loadBabelOptions.js.map +0 -1
  292. package/esm/plugins/babel-transform.js +0 -53
  293. package/esm/plugins/babel-transform.js.map +0 -1
  294. package/esm/plugins/collector.js +0 -60
  295. package/esm/plugins/collector.js.map +0 -1
  296. package/esm/plugins/dynamic-import.js +0 -56
  297. package/esm/plugins/dynamic-import.js.map +0 -1
  298. package/esm/plugins/preeval.js +0 -73
  299. package/esm/plugins/preeval.js.map +0 -1
  300. package/esm/plugins/shaker.js +0 -680
  301. package/esm/plugins/shaker.js.map +0 -1
  302. package/esm/transform/barrelManifest.js +0 -291
  303. package/esm/transform/barrelManifest.js.map +0 -1
  304. package/esm/transform/generators/explodeReexports.js +0 -64
  305. package/esm/transform/generators/explodeReexports.js.map +0 -1
  306. package/esm/transform/generators/rewriteBarrelImports.js +0 -733
  307. package/esm/transform/generators/rewriteBarrelImports.js.map +0 -1
  308. package/esm/utils/addIdentifierToWywPreval.js +0 -68
  309. package/esm/utils/addIdentifierToWywPreval.js.map +0 -1
  310. package/esm/utils/collectExportsAndImports.js +0 -1157
  311. package/esm/utils/collectExportsAndImports.js.map +0 -1
  312. package/esm/utils/collectTemplateDependencies.js +0 -228
  313. package/esm/utils/collectTemplateDependencies.js.map +0 -1
  314. package/esm/utils/createId.js +0 -6
  315. package/esm/utils/createId.js.map +0 -1
  316. package/esm/utils/findIdentifiers.js +0 -62
  317. package/esm/utils/findIdentifiers.js.map +0 -1
  318. package/esm/utils/getConstantStringValue.js +0 -58
  319. package/esm/utils/getConstantStringValue.js.map +0 -1
  320. package/esm/utils/getMemberExpressionPropertyName.js +0 -11
  321. package/esm/utils/getMemberExpressionPropertyName.js.map +0 -1
  322. package/esm/utils/getScope.js +0 -6
  323. package/esm/utils/getScope.js.map +0 -1
  324. package/esm/utils/getSource.js +0 -15
  325. package/esm/utils/getSource.js.map +0 -1
  326. package/esm/utils/getTagProcessor.js +0 -404
  327. package/esm/utils/getTagProcessor.js.map +0 -1
  328. package/esm/utils/isExports.js +0 -22
  329. package/esm/utils/isExports.js.map +0 -1
  330. package/esm/utils/isGlobal.js +0 -6
  331. package/esm/utils/isGlobal.js.map +0 -1
  332. package/esm/utils/isNodePath.js +0 -4
  333. package/esm/utils/isNodePath.js.map +0 -1
  334. package/esm/utils/isRemoved.js +0 -46
  335. package/esm/utils/isRemoved.js.map +0 -1
  336. package/esm/utils/isRequire.js +0 -13
  337. package/esm/utils/isRequire.js.map +0 -1
  338. package/esm/utils/isTypedNode.js +0 -6
  339. package/esm/utils/isTypedNode.js.map +0 -1
  340. package/esm/utils/isUnnecessaryReactCall.js +0 -72
  341. package/esm/utils/isUnnecessaryReactCall.js.map +0 -1
  342. package/esm/utils/removeDangerousCode.js +0 -276
  343. package/esm/utils/removeDangerousCode.js.map +0 -1
  344. package/esm/utils/replaceImportMetaEnv.js +0 -44
  345. package/esm/utils/replaceImportMetaEnv.js.map +0 -1
  346. package/esm/utils/scopeHelpers.js +0 -527
  347. package/esm/utils/scopeHelpers.js.map +0 -1
  348. package/esm/utils/traversalCache.js +0 -23
  349. package/esm/utils/traversalCache.js.map +0 -1
  350. package/esm/utils/unwrapExpression.js +0 -18
  351. package/esm/utils/unwrapExpression.js.map +0 -1
  352. package/esm/utils/unwrapSequence.js +0 -14
  353. package/esm/utils/unwrapSequence.js.map +0 -1
  354. package/esm/utils/valueToLiteral.js +0 -59
  355. package/esm/utils/valueToLiteral.js.map +0 -1
  356. package/esm/utils/visitors/JSXElementsRemover.js +0 -51
  357. package/esm/utils/visitors/JSXElementsRemover.js.map +0 -1
  358. package/lib/babel.js +0 -2
  359. package/lib/babel.js.map +0 -1
  360. package/lib/cache.js +0 -308
  361. package/lib/cache.js.map +0 -1
  362. package/lib/debug/fileReporter.js +0 -153
  363. package/lib/debug/fileReporter.js.map +0 -1
  364. package/lib/evaluators/index.js +0 -20
  365. package/lib/evaluators/index.js.map +0 -1
  366. package/lib/index.js +0 -286
  367. package/lib/index.js.map +0 -1
  368. package/lib/module.js +0 -552
  369. package/lib/module.js.map +0 -1
  370. package/lib/options/buildOptions.js +0 -176
  371. package/lib/options/buildOptions.js.map +0 -1
  372. package/lib/options/buildOptions.test.js +0 -141
  373. package/lib/options/buildOptions.test.js.map +0 -1
  374. package/lib/options/loadBabelOptions.js +0 -31
  375. package/lib/options/loadBabelOptions.js.map +0 -1
  376. package/lib/plugins/babel-transform.js +0 -60
  377. package/lib/plugins/babel-transform.js.map +0 -1
  378. package/lib/plugins/collector.js +0 -70
  379. package/lib/plugins/collector.js.map +0 -1
  380. package/lib/plugins/dynamic-import.js +0 -61
  381. package/lib/plugins/dynamic-import.js.map +0 -1
  382. package/lib/plugins/preeval.js +0 -81
  383. package/lib/plugins/preeval.js.map +0 -1
  384. package/lib/plugins/shaker.js +0 -691
  385. package/lib/plugins/shaker.js.map +0 -1
  386. package/lib/shaker.js +0 -95
  387. package/lib/shaker.js.map +0 -1
  388. package/lib/transform/BaseEntrypoint.js +0 -179
  389. package/lib/transform/BaseEntrypoint.js.map +0 -1
  390. package/lib/transform/Entrypoint.helpers.js +0 -279
  391. package/lib/transform/Entrypoint.helpers.js.map +0 -1
  392. package/lib/transform/Entrypoint.js +0 -289
  393. package/lib/transform/Entrypoint.js.map +0 -1
  394. package/lib/transform/Entrypoint.types.js +0 -2
  395. package/lib/transform/Entrypoint.types.js.map +0 -1
  396. package/lib/transform/EvaluatedEntrypoint.js +0 -13
  397. package/lib/transform/EvaluatedEntrypoint.js.map +0 -1
  398. package/lib/transform/actions/AbortError.js +0 -16
  399. package/lib/transform/actions/AbortError.js.map +0 -1
  400. package/lib/transform/actions/BaseAction.js +0 -150
  401. package/lib/transform/actions/BaseAction.js.map +0 -1
  402. package/lib/transform/actions/UnprocessedEntrypointError.js +0 -16
  403. package/lib/transform/actions/UnprocessedEntrypointError.js.map +0 -1
  404. package/lib/transform/actions/actionRunner.js +0 -82
  405. package/lib/transform/actions/actionRunner.js.map +0 -1
  406. package/lib/transform/actions/types.js +0 -2
  407. package/lib/transform/actions/types.js.map +0 -1
  408. package/lib/transform/barrelManifest.js +0 -300
  409. package/lib/transform/barrelManifest.js.map +0 -1
  410. package/lib/transform/generators/baseProcessingHandlers.js +0 -27
  411. package/lib/transform/generators/baseProcessingHandlers.js.map +0 -1
  412. package/lib/transform/generators/collect.js +0 -66
  413. package/lib/transform/generators/collect.js.map +0 -1
  414. package/lib/transform/generators/createStylisPreprocessor.js +0 -372
  415. package/lib/transform/generators/createStylisPreprocessor.js.map +0 -1
  416. package/lib/transform/generators/evalFile.js +0 -57
  417. package/lib/transform/generators/evalFile.js.map +0 -1
  418. package/lib/transform/generators/explodeReexports.js +0 -71
  419. package/lib/transform/generators/explodeReexports.js.map +0 -1
  420. package/lib/transform/generators/extract.js +0 -102
  421. package/lib/transform/generators/extract.js.map +0 -1
  422. package/lib/transform/generators/getExports.js +0 -85
  423. package/lib/transform/generators/getExports.js.map +0 -1
  424. package/lib/transform/generators/index.js +0 -19
  425. package/lib/transform/generators/index.js.map +0 -1
  426. package/lib/transform/generators/processEntrypoint.js +0 -76
  427. package/lib/transform/generators/processEntrypoint.js.map +0 -1
  428. package/lib/transform/generators/processImports.js +0 -82
  429. package/lib/transform/generators/processImports.js.map +0 -1
  430. package/lib/transform/generators/resolveImports.js +0 -221
  431. package/lib/transform/generators/resolveImports.js.map +0 -1
  432. package/lib/transform/generators/rewriteBarrelImports.js +0 -743
  433. package/lib/transform/generators/rewriteBarrelImports.js.map +0 -1
  434. package/lib/transform/generators/transform.js +0 -272
  435. package/lib/transform/generators/transform.js.map +0 -1
  436. package/lib/transform/generators/workflow.js +0 -100
  437. package/lib/transform/generators/workflow.js.map +0 -1
  438. package/lib/transform/helpers/loadWywOptions.js +0 -88
  439. package/lib/transform/helpers/loadWywOptions.js.map +0 -1
  440. package/lib/transform/helpers/withDefaultServices.js +0 -31
  441. package/lib/transform/helpers/withDefaultServices.js.map +0 -1
  442. package/lib/transform/isStaticallyEvaluatableModule.js +0 -159
  443. package/lib/transform/isStaticallyEvaluatableModule.js.map +0 -1
  444. package/lib/transform/rootLog.js +0 -9
  445. package/lib/transform/rootLog.js.map +0 -1
  446. package/lib/transform/types.js +0 -8
  447. package/lib/transform/types.js.map +0 -1
  448. package/lib/transform.js +0 -160
  449. package/lib/transform.js.map +0 -1
  450. package/lib/types.js +0 -2
  451. package/lib/types.js.map +0 -1
  452. package/lib/utils/EventEmitter.js +0 -61
  453. package/lib/utils/EventEmitter.js.map +0 -1
  454. package/lib/utils/ShakerMetadata.js +0 -9
  455. package/lib/utils/ShakerMetadata.js.map +0 -1
  456. package/lib/utils/TransformDiagnostics.js +0 -20
  457. package/lib/utils/TransformDiagnostics.js.map +0 -1
  458. package/lib/utils/TransformMetadata.js +0 -45
  459. package/lib/utils/TransformMetadata.js.map +0 -1
  460. package/lib/utils/addIdentifierToWywPreval.js +0 -75
  461. package/lib/utils/addIdentifierToWywPreval.js.map +0 -1
  462. package/lib/utils/collectExportsAndImports.js +0 -1173
  463. package/lib/utils/collectExportsAndImports.js.map +0 -1
  464. package/lib/utils/collectTemplateDependencies.js +0 -242
  465. package/lib/utils/collectTemplateDependencies.js.map +0 -1
  466. package/lib/utils/createId.js +0 -13
  467. package/lib/utils/createId.js.map +0 -1
  468. package/lib/utils/dispose-polyfill.js +0 -9
  469. package/lib/utils/dispose-polyfill.js.map +0 -1
  470. package/lib/utils/findIdentifiers.js +0 -73
  471. package/lib/utils/findIdentifiers.js.map +0 -1
  472. package/lib/utils/getConstantStringValue.js +0 -66
  473. package/lib/utils/getConstantStringValue.js.map +0 -1
  474. package/lib/utils/getFileIdx.js +0 -16
  475. package/lib/utils/getFileIdx.js.map +0 -1
  476. package/lib/utils/getMemberExpressionPropertyName.js +0 -18
  477. package/lib/utils/getMemberExpressionPropertyName.js.map +0 -1
  478. package/lib/utils/getPluginKey.js +0 -21
  479. package/lib/utils/getPluginKey.js.map +0 -1
  480. package/lib/utils/getScope.js +0 -12
  481. package/lib/utils/getScope.js.map +0 -1
  482. package/lib/utils/getSource.js +0 -24
  483. package/lib/utils/getSource.js.map +0 -1
  484. package/lib/utils/getTagProcessor.js +0 -424
  485. package/lib/utils/getTagProcessor.js.map +0 -1
  486. package/lib/utils/getVisitorKeys.js +0 -11
  487. package/lib/utils/getVisitorKeys.js.map +0 -1
  488. package/lib/utils/hasWywPreval.js +0 -13
  489. package/lib/utils/hasWywPreval.js.map +0 -1
  490. package/lib/utils/importOverrides.js +0 -119
  491. package/lib/utils/importOverrides.js.map +0 -1
  492. package/lib/utils/isExports.js +0 -27
  493. package/lib/utils/isExports.js.map +0 -1
  494. package/lib/utils/isGlobal.js +0 -13
  495. package/lib/utils/isGlobal.js.map +0 -1
  496. package/lib/utils/isNode.js +0 -9
  497. package/lib/utils/isNode.js.map +0 -1
  498. package/lib/utils/isNodePath.js +0 -10
  499. package/lib/utils/isNodePath.js.map +0 -1
  500. package/lib/utils/isNotNull.js +0 -10
  501. package/lib/utils/isNotNull.js.map +0 -1
  502. package/lib/utils/isRemoved.js +0 -52
  503. package/lib/utils/isRemoved.js.map +0 -1
  504. package/lib/utils/isRequire.js +0 -18
  505. package/lib/utils/isRequire.js.map +0 -1
  506. package/lib/utils/isSerializable.js +0 -19
  507. package/lib/utils/isSerializable.js.map +0 -1
  508. package/lib/utils/isTypedNode.js +0 -13
  509. package/lib/utils/isTypedNode.js.map +0 -1
  510. package/lib/utils/isUnnecessaryReactCall.js +0 -81
  511. package/lib/utils/isUnnecessaryReactCall.js.map +0 -1
  512. package/lib/utils/parseRequest.js +0 -37
  513. package/lib/utils/parseRequest.js.map +0 -1
  514. package/lib/utils/peek.js +0 -9
  515. package/lib/utils/peek.js.map +0 -1
  516. package/lib/utils/removeDangerousCode.js +0 -284
  517. package/lib/utils/removeDangerousCode.js.map +0 -1
  518. package/lib/utils/replaceImportMetaEnv.js +0 -50
  519. package/lib/utils/replaceImportMetaEnv.js.map +0 -1
  520. package/lib/utils/scopeHelpers.js +0 -557
  521. package/lib/utils/scopeHelpers.js.map +0 -1
  522. package/lib/utils/traversalCache.js +0 -31
  523. package/lib/utils/traversalCache.js.map +0 -1
  524. package/lib/utils/unwrapExpression.js +0 -25
  525. package/lib/utils/unwrapExpression.js.map +0 -1
  526. package/lib/utils/unwrapSequence.js +0 -20
  527. package/lib/utils/unwrapSequence.js.map +0 -1
  528. package/lib/utils/valueToLiteral.js +0 -65
  529. package/lib/utils/valueToLiteral.js.map +0 -1
  530. package/lib/utils/visitors/JSXElementsRemover.js +0 -57
  531. package/lib/utils/visitors/JSXElementsRemover.js.map +0 -1
  532. package/lib/vm/createVmContext.js +0 -166
  533. package/lib/vm/createVmContext.js.map +0 -1
  534. package/lib/vm/process.js +0 -38
  535. package/lib/vm/process.js.map +0 -1
  536. package/types/babel.d.ts +0 -2
  537. package/types/babel.js +0 -2
  538. package/types/options/buildOptions.d.ts +0 -6
  539. package/types/options/buildOptions.js +0 -178
  540. package/types/options/loadBabelOptions.d.ts +0 -3
  541. package/types/options/loadBabelOptions.js +0 -26
  542. package/types/plugins/babel-transform.d.ts +0 -4
  543. package/types/plugins/babel-transform.js +0 -49
  544. package/types/plugins/collector.d.ts +0 -23
  545. package/types/plugins/collector.js +0 -62
  546. package/types/plugins/dynamic-import.d.ts +0 -6
  547. package/types/plugins/dynamic-import.js +0 -60
  548. package/types/plugins/preeval.d.ts +0 -16
  549. package/types/plugins/preeval.js +0 -69
  550. package/types/plugins/shaker.d.ts +0 -14
  551. package/types/plugins/shaker.js +0 -724
  552. package/types/transform/generators/explodeReexports.d.ts +0 -7
  553. package/types/transform/generators/explodeReexports.js +0 -65
  554. package/types/utils/addIdentifierToWywPreval.d.ts +0 -4
  555. package/types/utils/addIdentifierToWywPreval.js +0 -74
  556. package/types/utils/collectExportsAndImports.d.ts +0 -31
  557. package/types/utils/collectExportsAndImports.js +0 -1147
  558. package/types/utils/collectTemplateDependencies.d.ts +0 -17
  559. package/types/utils/collectTemplateDependencies.js +0 -220
  560. package/types/utils/createId.d.ts +0 -2
  561. package/types/utils/createId.js +0 -9
  562. package/types/utils/findIdentifiers.d.ts +0 -6
  563. package/types/utils/findIdentifiers.js +0 -67
  564. package/types/utils/getConstantStringValue.d.ts +0 -2
  565. package/types/utils/getConstantStringValue.js +0 -94
  566. package/types/utils/getMemberExpressionPropertyName.d.ts +0 -2
  567. package/types/utils/getMemberExpressionPropertyName.js +0 -46
  568. package/types/utils/getScope.d.ts +0 -2
  569. package/types/utils/getScope.js +0 -10
  570. package/types/utils/getSource.d.ts +0 -2
  571. package/types/utils/getSource.js +0 -22
  572. package/types/utils/getTagProcessor.d.ts +0 -13
  573. package/types/utils/getTagProcessor.js +0 -411
  574. package/types/utils/isExports.d.ts +0 -6
  575. package/types/utils/isExports.js +0 -19
  576. package/types/utils/isGlobal.d.ts +0 -2
  577. package/types/utils/isGlobal.js +0 -9
  578. package/types/utils/isNodePath.d.ts +0 -3
  579. package/types/utils/isNodePath.js +0 -6
  580. package/types/utils/isRemoved.d.ts +0 -5
  581. package/types/utils/isRemoved.js +0 -41
  582. package/types/utils/isRequire.d.ts +0 -6
  583. package/types/utils/isRequire.js +0 -14
  584. package/types/utils/isTypedNode.d.ts +0 -5
  585. package/types/utils/isTypedNode.js +0 -9
  586. package/types/utils/isUnnecessaryReactCall.d.ts +0 -3
  587. package/types/utils/isUnnecessaryReactCall.js +0 -75
  588. package/types/utils/removeDangerousCode.d.ts +0 -4
  589. package/types/utils/removeDangerousCode.js +0 -326
  590. package/types/utils/replaceImportMetaEnv.d.ts +0 -3
  591. package/types/utils/replaceImportMetaEnv.js +0 -39
  592. package/types/utils/scopeHelpers.d.ts +0 -12
  593. package/types/utils/scopeHelpers.js +0 -580
  594. package/types/utils/traversalCache.d.ts +0 -4
  595. package/types/utils/traversalCache.js +0 -27
  596. package/types/utils/unwrapExpression.d.ts +0 -2
  597. package/types/utils/unwrapExpression.js +0 -57
  598. package/types/utils/unwrapSequence.d.ts +0 -8
  599. package/types/utils/unwrapSequence.js +0 -16
  600. package/types/utils/valueToLiteral.d.ts +0 -3
  601. package/types/utils/valueToLiteral.js +0 -63
  602. package/types/utils/visitors/JSXElementsRemover.d.ts +0 -3
  603. package/types/utils/visitors/JSXElementsRemover.js +0 -51
@@ -0,0 +1 @@
1
+ {"mappings":"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","names":[],"sources":["../../src/utils/collectOxcTemplateDependencies.ts"],"version":3,"sourcesContent":["/* eslint-disable no-restricted-syntax,no-continue,@typescript-eslint/no-use-before-define */\n\nimport type { ExpressionValue, Location } from '@wyw-in-js/shared';\nimport { ValueType } from '@wyw-in-js/shared';\nimport type {\n AssignmentExpression,\n Expression,\n ImportDeclaration,\n ImportSpecifier,\n MemberExpression,\n ModuleExportName,\n Node,\n Program,\n TemplateLiteral,\n UpdateExpression,\n VariableDeclaration,\n VariableDeclarator,\n} from 'oxc-parser';\n\nimport { parseOxcProgramCached } from './parseOxc';\n\ntype AnyNode = Node & Record<string, unknown>;\ntype OxcFunctionLikeNode = Node & {\n async: boolean;\n body: Node | null;\n id?: { name: string } | null;\n params: Node[];\n};\ntype BindingKind = 'function' | 'import' | 'param' | 'variable';\ntype ScopedDeclarationKind = 'const' | 'let' | 'var';\n\ntype Binding = {\n declarationKind?: ScopedDeclarationKind;\n declaredAt: number;\n declaration: VariableDeclaration | null;\n declarator: VariableDeclarator | null;\n functionNode?: OxcFunctionLikeNode | null;\n imported?: 'default' | '*' | string;\n importedFrom?: string;\n isRoot: boolean;\n kind: BindingKind;\n name: string;\n scope: Scope;\n};\n\ntype Replacement = {\n end: number;\n start: number;\n value: string;\n};\n\ntype SourceLocation = {\n end: Location;\n filename?: string;\n identifierName: string | null | undefined;\n start: Location;\n};\n\ntype SpanLookup = Set<string> | null;\n\ntype LocationLookup = (offset: number) => Location;\n\ntype ExpressionSpan = {\n end: number;\n start: number;\n};\n\ntype Scope = {\n bindings: Map<string, Binding>;\n depth: number;\n end: number;\n functionBoundary: boolean;\n params: Set<string>;\n parent: Scope | null;\n root: boolean;\n start: number;\n};\n\ntype ReferenceIdentifier = {\n end: number;\n name: string;\n start: number;\n};\n\nexport type OxcStaticImportReference = {\n imported: 'default' | string;\n importLocal?: string;\n local: string;\n source: string;\n};\n\nexport type OxcStaticValue = {\n name: string;\n value: unknown;\n};\n\nexport type OxcStaticValueCandidate = {\n imports: OxcStaticImportReference[];\n name: string;\n source: string;\n};\n\ntype TemplateExtractionResult = {\n code: string;\n dependencyNames: string[];\n expressionValues: Omit<ExpressionValue, 'buildCodeFrameError'>[];\n staticValueCandidates: OxcStaticValueCandidate[];\n staticValues: OxcStaticValue[];\n};\n\ntype ExtractionContext = {\n bindingResolutionCache: Map<string, Map<number, Binding | null>>;\n bindingsByName: Map<string, Binding[]>;\n code: string;\n currentInsertionPoint: number;\n currentExpressionStart: number;\n dependencyNames: Set<string>;\n expressionValues: Omit<ExpressionValue, 'buildCodeFrameError'>[];\n filename: string;\n hoistedBindingNames: Map<string, string>;\n hoistedDeclarations: Map<string, string>;\n hoistedDeclarationsByInsertionPoint: Map<number, string[]>;\n loc: LocationLookup;\n referencesByNode: WeakMap<Node, ReferenceIdentifier[]>;\n replacements: Replacement[];\n rootMutationsByBinding: Map<\n string,\n Array<AssignmentExpression | UpdateExpression>\n >;\n staticImportAliases: Map<string, string>;\n staticValueCandidates: OxcStaticValueCandidate[];\n staticValues: OxcStaticValue[];\n usedNames: Set<string>;\n};\n\ntype ExtractedExpression = {\n expressionCode: string;\n importedFrom: string[];\n kind: ValueType.FUNCTION | ValueType.LAZY;\n staticExpressionCode?: string;\n staticImports: OxcStaticImportReference[];\n staticValue?: unknown;\n};\n\ntype ProgramAnalysis = {\n bindingsByName: Map<string, Binding[]>;\n rootMutationsByBinding: Map<\n string,\n Array<AssignmentExpression | UpdateExpression>\n >;\n targetExpressions: Expression[];\n templateLiterals: TemplateLiteral[];\n usedNames: Set<string>;\n};\n\nconst isNode = (value: unknown): value is Node =>\n !!value &&\n typeof value === 'object' &&\n 'type' in value &&\n typeof (value as { type?: unknown }).type === 'string';\n\nconst getChildren = (node: Node): Node[] => {\n const result: Node[] = [];\n const record = node as AnyNode;\n\n Object.keys(record).forEach((key) => {\n if (key === 'type' || key === 'start' || key === 'end' || key === 'range') {\n return;\n }\n\n const value = record[key];\n if (isNode(value)) {\n result.push(value);\n return;\n }\n\n if (Array.isArray(value)) {\n value.forEach((item) => {\n if (isNode(item)) {\n result.push(item);\n }\n });\n }\n });\n\n return result;\n};\n\nconst parseOxc = (code: string, filename: string): Program => {\n return parseOxcProgramCached(filename, code, 'unambiguous');\n};\n\nconst toSpanKey = (start: number, end: number): string => `${start}:${end}`;\n\nconst createSpanLookup = (spans?: ExpressionSpan[]): SpanLookup => {\n if (!spans || spans.length === 0) {\n return null;\n }\n\n return new Set(spans.map((span) => toSpanKey(span.start, span.end)));\n};\n\nconst matchesSpanLookup = (\n node: Pick<Node, 'start' | 'end'>,\n spanLookup: SpanLookup\n): boolean => !spanLookup || spanLookup.has(toSpanKey(node.start, node.end));\n\nconst createLocationLookup = (code: string): LocationLookup => {\n const lineStarts = [0];\n for (let idx = 0; idx < code.length; idx += 1) {\n if (code[idx] === '\\n') {\n lineStarts.push(idx + 1);\n }\n }\n\n return (offset) => {\n let low = 0;\n let high = lineStarts.length - 1;\n\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const next = lineStarts[mid + 1] ?? Infinity;\n if (lineStarts[mid] <= offset && offset < next) {\n return {\n column: offset - lineStarts[mid],\n line: mid + 1,\n };\n }\n\n if (offset < lineStarts[mid]) {\n high = mid - 1;\n } else {\n low = mid + 1;\n }\n }\n\n const lastLine = lineStarts.length - 1;\n return {\n column: Math.max(0, offset - lineStarts[lastLine]),\n line: lastLine + 1,\n };\n };\n};\n\nconst getSourceLocation = (\n start: number,\n end: number,\n ctx: Pick<ExtractionContext, 'filename' | 'loc'>\n): SourceLocation => ({\n end: ctx.loc(end),\n filename: ctx.filename,\n identifierName: undefined,\n start: ctx.loc(start),\n});\n\nconst createScope = (\n parent: Scope | null,\n node: Pick<Node, 'start' | 'end'>,\n root = false,\n functionBoundary = false\n): Scope => ({\n bindings: new Map(),\n depth: parent ? parent.depth + 1 : 0,\n end: node.end,\n functionBoundary,\n params: new Set(),\n parent,\n root,\n start: node.start,\n});\n\nconst normalizeDeclarationKind = (\n declarationKind: VariableDeclaration['kind']\n): ScopedDeclarationKind => {\n if (declarationKind === 'var') {\n return 'var';\n }\n\n if (declarationKind === 'let') {\n return 'let';\n }\n\n return 'const';\n};\n\nconst moduleExportName = (node: ModuleExportName): string =>\n node.type === 'Literal' ? String(node.value) : node.name;\n\nconst getImportSpecifierInfo = (\n statement: ImportDeclaration,\n specifier: ImportDeclaration['specifiers'][number]\n): { imported: 'default' | '*' | string; local: string } | null => {\n const local = specifier.local?.name;\n if (!local) {\n return null;\n }\n\n if (specifier.type === 'ImportDefaultSpecifier') {\n return {\n imported: 'default',\n local,\n };\n }\n\n if (specifier.type === 'ImportNamespaceSpecifier') {\n return {\n imported: '*',\n local,\n };\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 };\n};\n\nconst getDeclarationScope = (\n scope: Scope,\n declarationKind: ScopedDeclarationKind\n): Scope => {\n if (declarationKind !== 'var') {\n return scope;\n }\n\n let current: Scope | null = scope;\n while (current && !current.functionBoundary) {\n current = current.parent;\n }\n\n return current ?? scope;\n};\n\nconst collectBindingNames = (node: Node): string[] => {\n if (node.type === 'Identifier') {\n return [node.name];\n }\n\n if (node.type === 'RestElement') {\n return collectBindingNames(node.argument);\n }\n\n if (node.type === 'AssignmentPattern') {\n return collectBindingNames(node.left);\n }\n\n if (node.type === 'ObjectPattern') {\n return node.properties.flatMap((property) =>\n property.type === 'RestElement'\n ? collectBindingNames(property.argument)\n : collectBindingNames(property.value)\n );\n }\n\n if (node.type === 'ArrayPattern') {\n return node.elements.flatMap((element) =>\n element ? collectBindingNames(element) : []\n );\n }\n\n if (node.type === 'TSParameterProperty') {\n return collectBindingNames(node.parameter);\n }\n\n return [];\n};\n\nconst isInTypeContext = (ancestors: Node[]): boolean =>\n ancestors.some(\n (ancestor) =>\n ancestor.type.startsWith('TS') || ancestor.type.startsWith('JSDoc')\n );\n\nconst isPropertyOnlyIdentifier = (node: Node, parent: Node | null): boolean =>\n !!parent &&\n parent.type === 'MemberExpression' &&\n parent.property === node &&\n !parent.computed;\n\nconst isObjectPropertyKey = (node: Node, parent: Node | null): boolean =>\n !!parent &&\n parent.type === 'Property' &&\n parent.key === node &&\n !parent.computed &&\n parent.value !== node;\n\nconst isBindingPosition = (node: Node, parent: Node | null): boolean => {\n if (!parent) {\n return false;\n }\n\n if (parent.type === 'VariableDeclarator' && parent.id === node) {\n return true;\n }\n\n if (\n (parent.type === 'FunctionDeclaration' ||\n parent.type === 'FunctionExpression' ||\n parent.type === 'ClassDeclaration' ||\n parent.type === 'ClassExpression') &&\n parent.id === node\n ) {\n return true;\n }\n\n if (\n (parent.type === 'ImportSpecifier' ||\n parent.type === 'ImportDefaultSpecifier' ||\n parent.type === 'ImportNamespaceSpecifier') &&\n 'local' in parent &&\n parent.local === node\n ) {\n return true;\n }\n\n return false;\n};\n\nconst visit = (\n node: Node,\n scope: Scope | null,\n enter: (\n node: Node,\n scope: Scope,\n parent: Node | null,\n ancestors: Node[]\n ) => void,\n parent: Node | null = null,\n ancestors: Node[] = []\n): void => {\n const visitNode = (\n currentNode: Node,\n currentScope: Scope | null,\n currentParent: Node | null\n ): void => {\n let nextScope: Scope;\n if (currentNode.type === 'Program') {\n nextScope = createScope(null, currentNode, true, true);\n } else if (\n currentNode.type === 'BlockStatement' ||\n currentNode.type === 'FunctionDeclaration' ||\n currentNode.type === 'FunctionExpression' ||\n currentNode.type === 'ArrowFunctionExpression'\n ) {\n nextScope = createScope(\n currentScope,\n currentNode,\n false,\n currentNode.type !== 'BlockStatement'\n );\n } else if (currentScope) {\n nextScope = currentScope;\n } else {\n nextScope = createScope(null, currentNode, false, true);\n }\n\n if (\n currentNode.type === 'FunctionDeclaration' ||\n currentNode.type === 'FunctionExpression' ||\n currentNode.type === 'ArrowFunctionExpression'\n ) {\n currentNode.params.forEach((param) => {\n collectBindingNames(param).forEach((name) => {\n nextScope.params.add(name);\n nextScope.bindings.set(name, {\n declaredAt: param.start,\n declaration: null,\n declarator: null,\n functionNode: null,\n isRoot: false,\n kind: 'param',\n name,\n scope: nextScope,\n });\n });\n });\n }\n\n enter(currentNode, nextScope, currentParent, ancestors);\n\n ancestors.push(currentNode);\n getChildren(currentNode).forEach((child) =>\n visitNode(child, nextScope, currentNode)\n );\n ancestors.pop();\n };\n\n visitNode(node, scope, parent);\n};\n\nconst analyzeProgram = (\n program: Program,\n {\n collectTargetExpressions = false,\n collectTemplateLiterals = false,\n expressionSpanLookup = null,\n templateSpanLookup = null,\n }: {\n collectTargetExpressions?: boolean;\n collectTemplateLiterals?: boolean;\n expressionSpanLookup?: SpanLookup;\n templateSpanLookup?: SpanLookup;\n } = {}\n): ProgramAnalysis => {\n const bindings = new Map<string, Binding[]>();\n const usedNames = new Set<string>();\n const templateLiterals: TemplateLiteral[] = [];\n const targetExpressions: Expression[] = [];\n\n const addBinding = (scope: Scope, binding: Binding): void => {\n scope.bindings.set(binding.name, binding);\n const existing = bindings.get(binding.name) ?? [];\n existing.push(binding);\n bindings.set(binding.name, existing);\n };\n\n const collectTargets = (node: Node, ancestors: Node[]): void => {\n if (\n collectTemplateLiterals &&\n node.type === 'TemplateLiteral' &&\n node.expressions.length > 0 &&\n !ancestors.some((ancestor) => ancestor.type === 'TemplateLiteral') &&\n matchesSpanLookup(node, templateSpanLookup)\n ) {\n templateLiterals.push(node);\n }\n\n if (\n collectTargetExpressions &&\n expressionSpanLookup &&\n matchesSpanLookup(node, expressionSpanLookup)\n ) {\n targetExpressions.push(node as Expression);\n }\n };\n\n visit(program, null, (node, scope, _parent, ancestors) => {\n collectTargets(node, ancestors);\n\n if (node.type === 'Identifier') {\n usedNames.add(node.name);\n }\n\n if (\n node.type === 'FunctionDeclaration' ||\n node.type === 'FunctionExpression' ||\n node.type === 'ArrowFunctionExpression'\n ) {\n node.params.forEach((param) => {\n collectBindingNames(param).forEach((name) => {\n const binding = scope.bindings.get(name);\n if (binding) {\n addBinding(scope, binding);\n }\n });\n });\n\n if (node.type !== 'FunctionDeclaration') {\n return;\n }\n }\n\n if (node.type === 'ImportDeclaration') {\n const source = node.source.value;\n node.specifiers.forEach((specifier) => {\n const importInfo = getImportSpecifierInfo(node, specifier);\n if (!importInfo) {\n return;\n }\n\n addBinding(scope, {\n declaredAt: specifier.start,\n declaration: null,\n declarator: null,\n functionNode: null,\n imported: importInfo.imported,\n importedFrom: source,\n isRoot: scope.root,\n kind: 'import',\n name: importInfo.local,\n scope,\n });\n });\n return;\n }\n\n if (node.type !== 'VariableDeclaration') {\n if (node.type === 'FunctionDeclaration' && node.id) {\n const declarationScope = scope.parent ?? scope;\n const binding: Binding = {\n declaredAt: node.start,\n declaration: null,\n declarator: null,\n functionNode: node,\n isRoot: declarationScope.root,\n kind: 'function',\n name: node.id.name,\n scope: declarationScope,\n };\n addBinding(declarationScope, binding);\n }\n\n return;\n }\n\n node.declarations.forEach((declarator) => {\n collectBindingNames(declarator.id).forEach((name) => {\n const declarationKind = normalizeDeclarationKind(node.kind);\n const declarationScope = getDeclarationScope(scope, declarationKind);\n const binding: Binding = {\n declarationKind,\n declaredAt: declarator.start,\n declaration: node,\n declarator,\n functionNode: null,\n isRoot: declarationScope.root,\n kind: 'variable',\n name,\n scope: declarationScope,\n };\n addBinding(declarationScope, binding);\n });\n });\n });\n\n return {\n bindingsByName: bindings,\n rootMutationsByBinding: collectRootMutations(program),\n targetExpressions: targetExpressions.sort((a, b) => a.start - b.start),\n templateLiterals,\n usedNames,\n };\n};\n\nconst resolveBindingAt = (\n ctx: Pick<ExtractionContext, 'bindingResolutionCache' | 'bindingsByName'>,\n name: string,\n referenceStart: number\n): Binding | undefined => {\n const cachedBindings = ctx.bindingResolutionCache.get(name);\n if (cachedBindings?.has(referenceStart)) {\n return cachedBindings.get(referenceStart) ?? undefined;\n }\n\n const bindings = ctx.bindingsByName.get(name);\n const bindingCache = cachedBindings ?? new Map<number, Binding | null>();\n if (!cachedBindings) {\n ctx.bindingResolutionCache.set(name, bindingCache);\n }\n\n if (!bindings || bindings.length === 0) {\n bindingCache.set(referenceStart, null);\n return undefined;\n }\n\n let binding: Binding | undefined;\n bindings.forEach((candidate) => {\n if (\n candidate.scope.start > referenceStart ||\n referenceStart >= candidate.scope.end\n ) {\n return;\n }\n\n if (\n !binding ||\n candidate.scope.depth > binding.scope.depth ||\n (candidate.scope.depth === binding.scope.depth &&\n candidate.declaredAt > binding.declaredAt)\n ) {\n binding = candidate;\n }\n });\n\n bindingCache.set(referenceStart, binding ?? null);\n return binding;\n};\n\nconst collectRootMutations = (\n program: Program\n): Map<string, Array<AssignmentExpression | UpdateExpression>> => {\n const mutations = new Map<\n string,\n Array<AssignmentExpression | UpdateExpression>\n >();\n\n const getRootMutationTarget = (\n node: Node\n ): { binding: string; path: Array<string | number> } | null => {\n if (node.type === 'Identifier') {\n return {\n binding: node.name,\n path: [],\n };\n }\n\n if (node.type !== 'MemberExpression') {\n return null;\n }\n\n const parent = getRootMutationTarget(node.object);\n if (!parent) {\n return null;\n }\n\n let key: string | number | null = null;\n if (\n node.computed &&\n node.property.type === 'Literal' &&\n (typeof node.property.value === 'string' ||\n typeof node.property.value === 'number')\n ) {\n key = node.property.value;\n } else if (!node.computed && node.property.type === 'Identifier') {\n key = node.property.name;\n }\n if (key === null) {\n return null;\n }\n\n return {\n binding: parent.binding,\n path: [...parent.path, key],\n };\n };\n\n program.body.forEach((statement) => {\n if (statement.type !== 'ExpressionStatement') {\n return;\n }\n\n const { expression } = statement;\n if (expression.type === 'AssignmentExpression') {\n const target = getRootMutationTarget(expression.left);\n if (!target || target.path.length === 0) {\n return;\n }\n\n const bucket = mutations.get(target.binding) ?? [];\n bucket.push(expression);\n mutations.set(target.binding, bucket);\n return;\n }\n\n if (expression.type === 'UpdateExpression') {\n const target = getRootMutationTarget(expression.argument);\n if (!target || target.path.length === 0) {\n return;\n }\n\n const bucket = mutations.get(target.binding) ?? [];\n bucket.push(expression);\n mutations.set(target.binding, bucket);\n }\n });\n\n return mutations;\n};\n\nconst hasLocalBinding = (scope: Scope, name: string): boolean => {\n let current: Scope | null = scope;\n\n while (current) {\n if (current.bindings.has(name)) {\n return true;\n }\n\n current = current.parent;\n }\n\n return false;\n};\n\nconst hasLocalBindingCached = (\n scope: Scope,\n name: string,\n cache: WeakMap<Scope, Map<string, boolean>>\n): boolean => {\n const scopeCache = cache.get(scope);\n if (scopeCache?.has(name)) {\n return scopeCache.get(name)!;\n }\n\n const result = hasLocalBinding(scope, name);\n const nextScopeCache = scopeCache ?? new Map<string, boolean>();\n nextScopeCache.set(name, result);\n if (!scopeCache) {\n cache.set(scope, nextScopeCache);\n }\n\n return result;\n};\n\nconst findReferences = (\n node: Node,\n referenceCache?: WeakMap<Node, ReferenceIdentifier[]>\n): ReferenceIdentifier[] => {\n const cachedReferences = referenceCache?.get(node);\n if (cachedReferences) {\n return cachedReferences;\n }\n\n const refs = new Map<string, ReferenceIdentifier>();\n const localBindingCache = new WeakMap<Scope, Map<string, boolean>>();\n\n visit(node, null, (current, scope, parent, ancestors) => {\n if (\n current.type !== 'Identifier' ||\n isInTypeContext(ancestors) ||\n isBindingPosition(current, parent) ||\n isPropertyOnlyIdentifier(current, parent) ||\n isObjectPropertyKey(current, parent) ||\n hasLocalBindingCached(scope, current.name, localBindingCache)\n ) {\n return;\n }\n\n const key = `${current.start}:${current.end}:${current.name}`;\n refs.set(key, {\n end: current.end,\n name: current.name,\n start: current.start,\n });\n });\n\n const resolvedReferences = [...refs.values()];\n referenceCache?.set(node, resolvedReferences);\n return resolvedReferences;\n};\n\nconst isBindingDeclaredWithin = (binding: Binding, container: Node): boolean =>\n container.start <= binding.declaredAt && binding.declaredAt < container.end;\n\nconst literalCode = (value: unknown): string | null => {\n if (typeof value === 'number') {\n return Number.isFinite(value) ? JSON.stringify(value) : null;\n }\n\n if (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'boolean'\n ) {\n return JSON.stringify(value);\n }\n\n if (Array.isArray(value)) {\n return JSON.stringify(value);\n }\n\n if (typeof value === 'object' && value !== null) {\n return `(${JSON.stringify(value)})`;\n }\n\n return null;\n};\n\nconst isStaticSerializableValue = (value: unknown): boolean =>\n literalCode(value) !== null;\n\nconst cloneStaticValue = (value: unknown): unknown => {\n if (Array.isArray(value)) {\n return value.map((item) => cloneStaticValue(item));\n }\n\n if (typeof value === 'object' && value !== null) {\n return Object.fromEntries(\n Object.entries(value).map(([key, item]) => [key, cloneStaticValue(item)])\n );\n }\n\n return value;\n};\n\nconst getObjectMember = (\n objectValue: unknown,\n property: string | number\n): unknown | undefined => {\n if (\n objectValue === null ||\n objectValue === undefined ||\n (typeof objectValue !== 'object' &&\n typeof objectValue !== 'string' &&\n typeof objectValue !== 'number' &&\n typeof objectValue !== 'boolean')\n ) {\n return undefined;\n }\n\n return (objectValue as Record<string | number, unknown>)[property];\n};\n\ntype EvalEnv = Map<string, unknown>;\n\nconst oxcStaticCallableValue = Symbol('wyw.oxc.staticCallableValue');\n\ntype OxcStaticCallableValue = {\n [oxcStaticCallableValue]: unknown;\n};\n\nconst isOxcStaticCallableValue = (\n value: unknown\n): value is OxcStaticCallableValue =>\n typeof value === 'object' &&\n value !== null &&\n oxcStaticCallableValue in value;\n\nconst unwrapOxcStaticCallableValue = (value: unknown): unknown =>\n isOxcStaticCallableValue(value) ? value[oxcStaticCallableValue] : value;\n\nexport const createOxcStaticCallableValue = (\n value: unknown\n): OxcStaticCallableValue => ({\n [oxcStaticCallableValue]: value,\n});\n\nconst assignPatternValue = (\n pattern: Node,\n value: unknown,\n ctx: ExtractionContext,\n env: EvalEnv,\n stack: string[]\n): boolean => {\n if (pattern.type === 'Identifier') {\n env.set(pattern.name, value);\n return true;\n }\n\n if (pattern.type === 'AssignmentPattern') {\n return assignPatternValue(\n pattern.left,\n value === undefined\n ? evaluateStatic(pattern.right, ctx, env, stack)\n : value,\n ctx,\n env,\n stack\n );\n }\n\n if (pattern.type === 'ObjectPattern') {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n\n return pattern.properties.every((property) => {\n if (property.type === 'RestElement') {\n return false;\n }\n\n let key: unknown;\n if (property.computed) {\n key = evaluateStatic(property.key as Expression, ctx, env, stack);\n } else if (property.key.type === 'Identifier') {\n key = property.key.name;\n } else if (property.key.type === 'Literal') {\n key = property.key.value;\n }\n if (key === undefined || key === null) {\n return false;\n }\n\n return assignPatternValue(\n property.value,\n getObjectMember(value, key as string | number),\n ctx,\n env,\n stack\n );\n });\n }\n\n if (pattern.type === 'ArrayPattern') {\n if (!Array.isArray(value)) {\n return false;\n }\n\n return pattern.elements.every((element, index) =>\n element\n ? assignPatternValue(element, value[index], ctx, env, stack)\n : true\n );\n }\n\n return false;\n};\n\nconst applyRootMutation = (\n bindingName: string,\n baseValue: unknown,\n mutation: AssignmentExpression | UpdateExpression,\n ctx: ExtractionContext,\n env: EvalEnv,\n stack: string[]\n): unknown | undefined => {\n const resolvePath = (node: Node): { path: Array<string | number> } | null => {\n if (node.type === 'Identifier') {\n return node.name === bindingName ? { path: [] } : null;\n }\n\n if (node.type !== 'MemberExpression') {\n return null;\n }\n\n const parent = resolvePath(node.object);\n if (!parent) {\n return null;\n }\n\n let key: unknown;\n if (node.computed) {\n key = evaluateStatic(node.property as Expression, ctx, env, stack);\n } else if (node.property.type === 'Identifier') {\n key = node.property.name;\n }\n if (\n key === undefined ||\n key === null ||\n (typeof key !== 'string' && typeof key !== 'number')\n ) {\n return null;\n }\n\n return {\n path: [...parent.path, key],\n };\n };\n\n const pathInfo = resolvePath(\n mutation.type === 'AssignmentExpression' ? mutation.left : mutation.argument\n );\n if (!pathInfo) {\n return undefined;\n }\n\n const cloned = cloneStaticValue(baseValue);\n if (pathInfo.path.length === 0) {\n if (mutation.type !== 'AssignmentExpression') {\n return undefined;\n }\n\n return evaluateStatic(mutation.right, ctx, env, stack);\n }\n\n let target = cloned as Record<string | number, unknown>;\n for (let idx = 0; idx < pathInfo.path.length - 1; idx += 1) {\n const key = pathInfo.path[idx];\n const next = target?.[key];\n if (typeof next !== 'object' || next === null) {\n return undefined;\n }\n\n target = next as Record<string | number, unknown>;\n }\n\n const lastKey = pathInfo.path[pathInfo.path.length - 1]!;\n if (mutation.type === 'AssignmentExpression') {\n const nextValue = evaluateStatic(mutation.right, ctx, env, stack);\n if (nextValue === undefined) {\n return undefined;\n }\n\n target[lastKey] = nextValue;\n return cloned;\n }\n\n const currentValue = target[lastKey];\n if (typeof currentValue !== 'number') {\n return undefined;\n }\n\n target[lastKey] =\n mutation.operator === '++' ? currentValue + 1 : currentValue - 1;\n return cloned;\n};\n\nconst evaluateFunctionCall = (\n fn: OxcFunctionLikeNode,\n args: unknown[],\n ctx: ExtractionContext,\n env: EvalEnv,\n stack: string[]\n): unknown | undefined => {\n if (fn.async || !fn.body) {\n return undefined;\n }\n\n const localEnv = new Map(env);\n for (let idx = 0; idx < fn.params.length; idx += 1) {\n if (!assignPatternValue(fn.params[idx], args[idx], ctx, localEnv, stack)) {\n return undefined;\n }\n }\n\n if (fn.body.type !== 'BlockStatement') {\n return evaluateStatic(fn.body as Expression, ctx, localEnv, stack);\n }\n\n for (const statement of fn.body.body) {\n if (statement.type === 'VariableDeclaration') {\n for (const declarator of statement.declarations) {\n const value = declarator.init\n ? evaluateStatic(declarator.init, ctx, localEnv, stack)\n : undefined;\n if (!assignPatternValue(declarator.id, value, ctx, localEnv, stack)) {\n return undefined;\n }\n }\n continue;\n }\n\n if (statement.type === 'ReturnStatement') {\n if (!statement.argument) {\n return undefined;\n }\n\n return evaluateStatic(statement.argument, ctx, localEnv, stack);\n }\n\n return undefined;\n }\n\n return undefined;\n};\n\nconst getConstantReplacement = (\n binding: Binding | undefined,\n ctx: ExtractionContext\n): string | null => {\n const init = binding?.declarator?.init;\n if (!init) {\n return null;\n }\n\n if (init.type === 'Literal') {\n return literalCode(init.value);\n }\n\n if (\n init.type === 'ObjectExpression' &&\n binding?.isRoot &&\n binding.declarator?.id.type === 'Identifier'\n ) {\n const evaluated = evaluateStatic(binding.declarator.id, ctx);\n return literalCode(evaluated);\n }\n\n return null;\n};\n\nconst replaceIdentifierReferences = (\n expression: Expression,\n replacements: Map<string, string>,\n code: string\n): string => {\n const localReplacements: Replacement[] = [];\n const ancestors: Node[] = [];\n\n const walk = (current: Node, parent: Node | null) => {\n if (\n current.type === 'Identifier' &&\n replacements.has(current.name) &&\n !isInTypeContext(ancestors) &&\n !isBindingPosition(current, parent) &&\n !isPropertyOnlyIdentifier(current, parent) &&\n !isObjectPropertyKey(current, parent)\n ) {\n const replacement = replacements.get(current.name)!;\n // Shorthand property `{ width }` → `{ width: 500 }` when the\n // identifier is the value side of a shorthand ObjectProperty.\n const isShorthandValue =\n !!parent &&\n parent.type === 'Property' &&\n (parent as unknown as { shorthand?: boolean }).shorthand &&\n parent.value === current;\n localReplacements.push({\n start: isShorthandValue ? parent.start : current.start,\n end: current.end,\n value: isShorthandValue\n ? `${current.name}: ${replacement}`\n : replacement,\n });\n }\n\n ancestors.push(current);\n getChildren(current).forEach((child) => walk(child, current));\n ancestors.pop();\n };\n\n walk(expression, null);\n\n let result = code.slice(expression.start, expression.end);\n localReplacements\n .sort((a, b) => b.start - a.start)\n .forEach((replacement) => {\n const start = replacement.start - expression.start;\n const end = replacement.end - expression.start;\n result = result.slice(0, start) + replacement.value + result.slice(end);\n });\n\n return result;\n};\n\nconst applyExpressionReplacements = (\n expression: Expression,\n replacements: Replacement[],\n code: string\n): string => {\n let result = code.slice(expression.start, expression.end);\n replacements\n .sort((a, b) => b.start - a.start)\n .forEach((replacement) => {\n const start = replacement.start - expression.start;\n const end = replacement.end - expression.start;\n result = result.slice(0, start) + replacement.value + result.slice(end);\n });\n return result;\n};\n\nconst staticImportAliasPart = (value: string): string =>\n value.replace(/[^A-Za-z0-9_$]/g, '_') || 'value';\n\nconst allocateStaticImportAlias = (\n binding: Binding,\n imported: string,\n ctx: ExtractionContext\n): string => {\n const key = `${binding.importedFrom ?? ''}\\0${binding.name}\\0${imported}`;\n const existing = ctx.staticImportAliases.get(key);\n if (existing) {\n return existing;\n }\n\n const namespacePart = staticImportAliasPart(binding.name);\n const importedPart = staticImportAliasPart(imported);\n let alias = `_wyw_static_${namespacePart}_${importedPart}`;\n let idx = 1;\n while (ctx.usedNames.has(alias)) {\n idx += 1;\n alias = `_wyw_static_${namespacePart}_${importedPart}_${idx}`;\n }\n\n ctx.usedNames.add(alias);\n ctx.staticImportAliases.set(key, alias);\n return alias;\n};\n\nconst staticMemberPropertyName = (\n expression: MemberExpression\n): string | null => {\n if (!expression.computed && expression.property.type === 'Identifier') {\n return expression.property.name;\n }\n\n if (\n expression.computed &&\n expression.property.type === 'Literal' &&\n typeof expression.property.value === 'string'\n ) {\n return expression.property.value;\n }\n\n return null;\n};\n\nconst collectStaticNamespaceMemberReferences = (\n expression: Expression,\n ctx: ExtractionContext\n): {\n coveredReferenceStarts: Set<number>;\n imports: OxcStaticImportReference[];\n replacements: Replacement[];\n} => {\n const coveredReferenceStarts = new Set<number>();\n const imports = new Map<string, OxcStaticImportReference>();\n const replacements: Replacement[] = [];\n\n const walk = (node: Node): void => {\n if (node.type === 'MemberExpression' && node.object.type === 'Identifier') {\n const binding = resolveBindingAt(\n ctx,\n node.object.name,\n node.object.start\n );\n const imported = staticMemberPropertyName(node);\n if (\n binding?.importedFrom &&\n binding.imported === '*' &&\n imported !== null\n ) {\n const alias = allocateStaticImportAlias(binding, imported, ctx);\n imports.set(`${binding.importedFrom}\\0${imported}\\0${alias}`, {\n imported,\n importLocal: binding.name,\n local: alias,\n source: binding.importedFrom,\n });\n replacements.push({\n end: node.end,\n start: node.start,\n value: alias,\n });\n coveredReferenceStarts.add(node.object.start);\n }\n }\n\n getChildren(node).forEach(walk);\n };\n\n walk(expression);\n\n return {\n coveredReferenceStarts,\n imports: [...imports.values()],\n replacements,\n };\n};\n\nconst isProcessEnvMember = (node: Node): boolean => {\n if (node.type !== 'MemberExpression' || node.computed) {\n return false;\n }\n\n if (\n node.property.type !== 'Identifier' ||\n node.property.name !== 'env'\n ) {\n return false;\n }\n\n return node.object.type === 'Identifier' && node.object.name === 'process';\n};\n\nconst evaluateBinary = (\n expression: Expression,\n ctx: ExtractionContext,\n env: EvalEnv = new Map(),\n stack: string[] = []\n): unknown | undefined => {\n if (expression.type !== 'BinaryExpression') {\n return undefined;\n }\n\n const left = evaluateStatic(expression.left as Expression, ctx, env, stack);\n const right = evaluateStatic(expression.right as Expression, ctx, env, stack);\n if (left === undefined || right === undefined) {\n return undefined;\n }\n\n if (expression.operator === '+') {\n if (typeof left === 'number' && typeof right === 'number') {\n return left + right;\n }\n\n if (\n (typeof left === 'string' || typeof left === 'number') &&\n (typeof right === 'string' || typeof right === 'number')\n ) {\n return `${left}${right}`;\n }\n }\n\n if (typeof left === 'number' && typeof right === 'number') {\n switch (expression.operator) {\n case '-':\n return left - right;\n case '*':\n return left * right;\n case '/':\n return left / right;\n case '%':\n return left % right;\n case '**':\n return left ** right;\n default:\n break;\n }\n }\n\n return undefined;\n};\n\nconst evaluateStatic = (\n expression: Expression,\n ctx: ExtractionContext,\n env: EvalEnv = new Map(),\n stack: string[] = []\n): unknown | undefined => {\n if (\n expression.type === 'TSAsExpression' ||\n expression.type === 'TSSatisfiesExpression' ||\n expression.type === 'TSNonNullExpression' ||\n expression.type === 'TSInstantiationExpression' ||\n expression.type === 'TSTypeAssertion' ||\n expression.type === 'ParenthesizedExpression'\n ) {\n return evaluateStatic(expression.expression as Expression, ctx, env, stack);\n }\n\n if (expression.type === 'Literal') {\n return expression.value;\n }\n\n if (expression.type === 'UnaryExpression') {\n if (expression.operator === 'typeof') {\n const argIsProcessEnvAccess =\n expression.argument.type === 'MemberExpression' &&\n isProcessEnvMember(expression.argument.object);\n const arg = evaluateStatic(\n expression.argument as Expression,\n ctx,\n env,\n stack\n );\n if (arg === undefined) {\n return argIsProcessEnvAccess ? 'undefined' : undefined;\n }\n\n return typeof arg;\n }\n\n const arg = evaluateStatic(\n expression.argument as Expression,\n ctx,\n env,\n stack\n );\n if (arg === undefined) {\n return undefined;\n }\n\n switch (expression.operator) {\n case '-':\n return typeof arg === 'number' ? -arg : undefined;\n case '+':\n return typeof arg === 'number' ? +arg : undefined;\n case '!':\n return !arg;\n case '~':\n return typeof arg === 'number' ? ~arg : undefined;\n case 'void':\n return undefined;\n default:\n return undefined;\n }\n }\n\n if (expression.type === 'LogicalExpression') {\n const left = evaluateStatic(expression.left, ctx, env, stack);\n // process.env.X access is the only source we trust as \"deterministically\n // undefined\" — it's a build-time lookup we control. For everything else,\n // undefined means \"couldn't evaluate\" and we must bail to avoid inlining\n // a wrong fallback when the runtime value isn't actually nullish.\n const leftIsProcessEnvAccess =\n expression.left.type === 'MemberExpression' &&\n isProcessEnvMember(expression.left.object);\n\n if (left === undefined && !leftIsProcessEnvAccess) {\n return undefined;\n }\n\n if (expression.operator === '||') {\n return left || evaluateStatic(expression.right, ctx, env, stack);\n }\n\n if (expression.operator === '??') {\n return left ?? evaluateStatic(expression.right, ctx, env, stack);\n }\n\n if (expression.operator === '&&') {\n return left && evaluateStatic(expression.right, ctx, env, stack);\n }\n\n return undefined;\n }\n\n if (expression.type === 'ConditionalExpression') {\n const test = evaluateStatic(expression.test, ctx, env, stack);\n if (test === undefined) {\n return undefined;\n }\n\n return evaluateStatic(\n test ? expression.consequent : expression.alternate,\n ctx,\n env,\n stack\n );\n }\n\n if (expression.type === 'TemplateLiteral') {\n let result = '';\n\n for (let idx = 0; idx < expression.quasis.length; idx += 1) {\n result += expression.quasis[idx]?.value.cooked ?? '';\n\n const nextExpression = expression.expressions[idx];\n if (!nextExpression) {\n continue;\n }\n\n const value = evaluateStatic(nextExpression, ctx, env, stack);\n if (\n value === undefined ||\n (typeof value !== 'string' && typeof value !== 'number')\n ) {\n return undefined;\n }\n\n result += String(value);\n }\n\n return result;\n }\n\n if (expression.type === 'Identifier') {\n if (env.has(expression.name)) {\n return unwrapOxcStaticCallableValue(env.get(expression.name));\n }\n\n const binding = resolveBindingAt(ctx, expression.name, expression.start);\n if (!binding || binding.importedFrom) {\n return undefined;\n }\n\n if (binding.kind === 'param') {\n return undefined;\n }\n\n if (stack.includes(binding.name)) {\n return undefined;\n }\n\n let value: unknown | undefined;\n const { declarator } = binding;\n const init = declarator?.init;\n if (init) {\n if (declarator.id.type !== 'Identifier') {\n return undefined;\n }\n\n value = evaluateStatic(init, ctx, env, [...stack, binding.name]);\n } else if (binding.functionNode) {\n value = binding.functionNode;\n }\n\n if (\n value !== undefined &&\n binding.isRoot &&\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value)\n ) {\n const mutations = ctx.rootMutationsByBinding.get(binding.name) ?? [];\n let nextValue = cloneStaticValue(value);\n for (const mutation of mutations) {\n if (mutation.start >= ctx.currentExpressionStart) {\n break;\n }\n\n const applied = applyRootMutation(\n binding.name,\n nextValue,\n mutation,\n ctx,\n env,\n [...stack, binding.name]\n );\n if (applied === undefined) {\n return undefined;\n }\n\n nextValue = applied;\n }\n\n return nextValue;\n }\n\n return value;\n }\n\n if (expression.type === 'ObjectExpression') {\n const result: Record<string, unknown> = {};\n\n for (const property of expression.properties) {\n if (property.type === 'SpreadElement') {\n const spreadValue = evaluateStatic(property.argument, ctx, env, stack);\n if (typeof spreadValue !== 'object' || spreadValue === null) {\n return undefined;\n }\n\n Object.assign(result, spreadValue);\n continue;\n }\n\n let key: unknown;\n if (property.computed) {\n key = evaluateStatic(property.key as Expression, ctx, env, stack);\n } else if (property.key.type === 'Identifier') {\n key = property.key.name;\n } else if (property.key.type === 'Literal') {\n key = property.key.value;\n }\n if (\n key === undefined ||\n key === null ||\n (typeof key !== 'string' && typeof key !== 'number')\n ) {\n return undefined;\n }\n\n const value = evaluateStatic(property.value, ctx, env, stack);\n if (value === undefined) {\n return undefined;\n }\n\n result[key] = value;\n }\n\n return result;\n }\n\n if (expression.type === 'ArrayExpression') {\n const result: unknown[] = [];\n\n for (const element of expression.elements) {\n if (!element) {\n return undefined;\n }\n\n if (element.type === 'SpreadElement') {\n const spreadValue = evaluateStatic(element.argument, ctx, env, stack);\n if (!Array.isArray(spreadValue)) {\n return undefined;\n }\n\n result.push(...spreadValue);\n continue;\n }\n\n const value = evaluateStatic(element, ctx, env, stack);\n if (value === undefined) {\n return undefined;\n }\n\n result.push(value);\n }\n\n return result;\n }\n\n if (expression.type === 'MemberExpression') {\n let key: unknown;\n if (expression.computed) {\n key = evaluateStatic(expression.property as Expression, ctx, env, stack);\n } else if (expression.property.type === 'Identifier') {\n key = expression.property.name;\n }\n if (\n key === undefined ||\n key === null ||\n (typeof key !== 'string' && typeof key !== 'number')\n ) {\n return undefined;\n }\n\n if (\n isProcessEnvMember(expression.object) &&\n typeof key === 'string' &&\n !env.has('process')\n ) {\n // Treat process.env.X as deterministically undefined at build time.\n // Reading from real process.env would couple the bundle to whatever\n // happens to be set on the build machine; falling back to the\n // ?? / || branch (or a runtime read) is more predictable.\n return undefined;\n }\n\n const objectValue = evaluateStatic(expression.object, ctx, env, stack);\n if (objectValue === undefined) {\n return undefined;\n }\n\n return getObjectMember(objectValue, key);\n }\n\n if (expression.type === 'NewExpression') {\n if (\n expression.callee.type !== 'Identifier' ||\n expression.arguments.length !== 1\n ) {\n return undefined;\n }\n\n const [argument] = expression.arguments;\n if (!argument || argument.type === 'SpreadElement') {\n return undefined;\n }\n\n const value = evaluateStatic(argument, ctx, env, stack);\n if (value === undefined) {\n return undefined;\n }\n\n if (expression.callee.name === 'String') {\n return String(value);\n }\n\n if (expression.callee.name === 'Number') {\n return Number(value);\n }\n\n if (expression.callee.name === 'Boolean') {\n return Boolean(value);\n }\n\n return undefined;\n }\n\n if (expression.type === 'CallExpression') {\n if (expression.callee.type === 'Identifier') {\n const args = expression.arguments.map((arg) =>\n arg.type === 'SpreadElement'\n ? undefined\n : evaluateStatic(arg, ctx, env, stack)\n );\n if (args.some((value) => value === undefined)) {\n return undefined;\n }\n\n const staticCallable = env.get(expression.callee.name);\n if (\n isOxcStaticCallableValue(staticCallable) &&\n expression.arguments.length === 0\n ) {\n return unwrapOxcStaticCallableValue(staticCallable);\n }\n\n if (expression.callee.name === 'String' && args.length === 1) {\n return String(args[0]);\n }\n\n if (expression.callee.name === 'Number' && args.length === 1) {\n return Number(args[0]);\n }\n\n if (expression.callee.name === 'Boolean' && args.length === 1) {\n return Boolean(args[0]);\n }\n\n const binding = resolveBindingAt(\n ctx,\n expression.callee.name,\n expression.callee.start\n );\n const fn = binding?.functionNode ?? binding?.declarator?.init;\n if (\n fn &&\n (fn.type === 'ArrowFunctionExpression' ||\n fn.type === 'FunctionDeclaration' ||\n fn.type === 'FunctionExpression')\n ) {\n return evaluateFunctionCall(fn, args, ctx, env, [\n ...stack,\n expression.callee.name,\n ]);\n }\n }\n\n if (expression.callee.type === 'MemberExpression') {\n const objectValue = evaluateStatic(\n expression.callee.object,\n ctx,\n env,\n stack\n );\n let key: unknown;\n if (expression.callee.computed) {\n key = evaluateStatic(\n expression.callee.property as Expression,\n ctx,\n env,\n stack\n );\n } else if (expression.callee.property.type === 'Identifier') {\n key = expression.callee.property.name;\n }\n if (typeof objectValue === 'string') {\n if (key === 'toLowerCase' && expression.arguments.length === 0) {\n return objectValue.toLowerCase();\n }\n\n if (key === 'toUpperCase' && expression.arguments.length === 0) {\n return objectValue.toUpperCase();\n }\n }\n }\n }\n\n return evaluateBinary(expression, ctx, env, stack);\n};\n\nconst allocateExpressionName = (ctx: ExtractionContext): string => {\n let base = '_exp';\n let idx = 1;\n while (ctx.usedNames.has(base)) {\n idx += 1;\n base = `_exp${idx}`;\n }\n\n ctx.usedNames.add(base);\n return base;\n};\n\nconst hoistedBindingKey = (binding: Binding): string =>\n `${binding.scope.start}:${binding.scope.end}:${binding.declaredAt}:${binding.name}`;\n\nconst allocateHoistedBindingName = (\n originalName: string,\n ctx: ExtractionContext\n): string => {\n const sanitized = originalName.replace(/[^A-Za-z0-9_$]/g, '_') || 'hoisted';\n const base = /^[A-Za-z_$]/.test(sanitized) ? `_${sanitized}` : '_hoisted';\n let candidate = base;\n let idx = 2;\n\n while (ctx.usedNames.has(candidate)) {\n candidate = `${base}${idx}`;\n idx += 1;\n }\n\n ctx.usedNames.add(candidate);\n return candidate;\n};\n\nconst getHoistedBindingName = (\n binding: Binding,\n ctx: ExtractionContext\n): string => {\n const key = hoistedBindingKey(binding);\n const existing = ctx.hoistedBindingNames.get(key);\n if (existing) {\n return existing;\n }\n\n const next = allocateHoistedBindingName(binding.name, ctx);\n ctx.hoistedBindingNames.set(key, next);\n return next;\n};\n\nconst declarationInitCode = (\n init: Expression,\n ctx: ExtractionContext\n): string => {\n const renamedDependencies = new Map<string, string>();\n findReferences(init, ctx.referencesByNode).forEach(({ name, start }) => {\n const dependency = resolveBindingAt(ctx, name, start);\n if (\n !dependency ||\n dependency.importedFrom ||\n dependency.isRoot ||\n dependency.declarator?.id.type !== 'Identifier'\n ) {\n return;\n }\n\n renamedDependencies.set(name, getHoistedBindingName(dependency, ctx));\n });\n\n return renamedDependencies.size > 0\n ? replaceIdentifierReferences(init, renamedDependencies, ctx.code)\n : ctx.code.slice(init.start, init.end);\n};\n\nconst addHoistedCode = (\n key: string,\n code: string,\n ctx: ExtractionContext\n): void => {\n if (ctx.hoistedDeclarations.has(key)) {\n return;\n }\n\n ctx.hoistedDeclarations.set(key, code);\n const declarations =\n ctx.hoistedDeclarationsByInsertionPoint.get(ctx.currentInsertionPoint) ??\n [];\n declarations.push(code);\n ctx.hoistedDeclarationsByInsertionPoint.set(\n ctx.currentInsertionPoint,\n declarations\n );\n};\n\nconst declarationCode = (binding: Binding, ctx: ExtractionContext): string => {\n const { declarator } = binding;\n if (!declarator) {\n return '';\n }\n\n const { id } = declarator;\n if (id.type !== 'Identifier') {\n const idCode = ctx.code.slice(id.start, id.end);\n if (!declarator.init) {\n return `let ${idCode};`;\n }\n\n return `let ${idCode} = ${declarationInitCode(declarator.init, ctx)};`;\n }\n\n const hoistedName = getHoistedBindingName(binding, ctx);\n if (!declarator.init) {\n return `let ${hoistedName};`;\n }\n\n return `let ${hoistedName} = ${declarationInitCode(declarator.init, ctx)};`;\n};\n\nconst assertHoistable = (\n binding: Binding,\n ctx: ExtractionContext,\n stack: string[] = []\n): void => {\n if (!binding.declarator?.init || binding.importedFrom || binding.isRoot) {\n return;\n }\n\n if (stack.includes(binding.name)) {\n return;\n }\n\n const refs = findReferences(binding.declarator.init, ctx.referencesByNode);\n refs.forEach(({ name, start }) => {\n const nextBinding = resolveBindingAt(ctx, name, start);\n if (!nextBinding) {\n return;\n }\n\n if (nextBinding.kind === 'param') {\n throw new Error(\n `This identifier cannot be used in the template, because it is a function parameter.`\n );\n }\n\n assertHoistable(nextBinding, ctx, [...stack, binding.name]);\n });\n};\n\nconst addHoistedDeclaration = (\n binding: Binding,\n ctx: ExtractionContext,\n stack: string[] = []\n): void => {\n if (\n !binding.declaration ||\n !binding.declarator ||\n binding.importedFrom ||\n binding.isRoot ||\n stack.includes(binding.name)\n ) {\n return;\n }\n\n const hoistSource = binding.declarator.init ?? binding.declarator;\n findReferences(hoistSource, ctx.referencesByNode).forEach(\n ({ name, start }) => {\n const dependency = resolveBindingAt(ctx, name, start);\n if (dependency) {\n addHoistedDeclaration(dependency, ctx, [...stack, binding.name]);\n }\n }\n );\n\n if (!ctx.hoistedDeclarations.has(binding.name)) {\n addHoistedCode(binding.name, declarationCode(binding, ctx), ctx);\n }\n};\n\nconst literalExpressionValue = (\n expression: Expression,\n ctx: ExtractionContext\n): Omit<ExpressionValue, 'buildCodeFrameError'> | null => {\n if (expression.type !== 'Literal') {\n return null;\n }\n\n if (\n expression.value !== null &&\n typeof expression.value !== 'string' &&\n typeof expression.value !== 'number' &&\n typeof expression.value !== 'boolean'\n ) {\n return null;\n }\n\n let type:\n | 'BooleanLiteral'\n | 'NullLiteral'\n | 'NumericLiteral'\n | 'StringLiteral';\n if (expression.value === null) {\n type = 'NullLiteral';\n } else if (typeof expression.value === 'string') {\n type = 'StringLiteral';\n } else if (typeof expression.value === 'number') {\n type = 'NumericLiteral';\n } else {\n type = 'BooleanLiteral';\n }\n\n const loc = getSourceLocation(expression.start, expression.end, ctx);\n const ex =\n expression.value === null\n ? { loc, type }\n : {\n loc,\n type,\n value: expression.value,\n };\n\n return {\n ex,\n kind: ValueType.CONST,\n source: ctx.code.slice(expression.start, expression.end),\n value: expression.value,\n } as unknown as Omit<ExpressionValue, 'buildCodeFrameError'>;\n};\n\nconst extractExpression = (\n expression: Expression,\n ctx: ExtractionContext,\n evaluate: boolean\n): ExtractedExpression => {\n const source = ctx.code.slice(expression.start, expression.end);\n const isFunction =\n expression.type === 'FunctionExpression' ||\n expression.type === 'ArrowFunctionExpression';\n\n if (evaluate) {\n const evaluated = evaluateStatic(expression, ctx);\n const literal = literalCode(evaluated);\n if (literal) {\n findReferences(expression, ctx.referencesByNode).forEach(({ name }) =>\n ctx.dependencyNames.add(name)\n );\n return {\n expressionCode: literal,\n importedFrom: [],\n kind: isFunction ? ValueType.FUNCTION : ValueType.LAZY,\n staticImports: [],\n staticValue: isStaticSerializableValue(evaluated)\n ? cloneStaticValue(evaluated)\n : undefined,\n };\n }\n }\n\n const identifierReplacements = new Map<string, string>();\n const importedFrom: string[] = [];\n const namespaceStatic = collectStaticNamespaceMemberReferences(\n expression,\n ctx\n );\n const staticImports: OxcStaticImportReference[] = [\n ...namespaceStatic.imports,\n ];\n let hasNonStaticLocalReference = false;\n\n findReferences(expression, ctx.referencesByNode).forEach(\n ({ name, start }) => {\n const binding = resolveBindingAt(ctx, name, start);\n if (!binding) {\n return;\n }\n\n if (isFunction && isBindingDeclaredWithin(binding, expression)) {\n return;\n }\n\n ctx.dependencyNames.add(name);\n\n if (binding.importedFrom) {\n importedFrom.push(binding.importedFrom);\n if (binding.imported && binding.imported !== '*') {\n staticImports.push({\n imported: binding.imported,\n local: binding.name,\n source: binding.importedFrom,\n });\n } else if (\n binding.imported === '*' &&\n namespaceStatic.coveredReferenceStarts.has(start)\n ) {\n // The static candidate source gets a synthetic named import alias,\n // while the eval fallback keeps the original namespace expression.\n } else {\n hasNonStaticLocalReference = true;\n }\n return;\n }\n\n const replacement = getConstantReplacement(binding, ctx);\n if (evaluate && replacement) {\n identifierReplacements.set(name, replacement);\n return;\n }\n\n hasNonStaticLocalReference = true;\n assertHoistable(binding, ctx);\n addHoistedDeclaration(binding, ctx);\n if (!binding.isRoot && binding.declarator?.id.type === 'Identifier') {\n identifierReplacements.set(name, getHoistedBindingName(binding, ctx));\n }\n }\n );\n\n return {\n expressionCode:\n identifierReplacements.size > 0\n ? replaceIdentifierReferences(\n expression,\n identifierReplacements,\n ctx.code\n )\n : source,\n importedFrom,\n kind: isFunction ? ValueType.FUNCTION : ValueType.LAZY,\n staticExpressionCode:\n namespaceStatic.replacements.length > 0\n ? applyExpressionReplacements(\n expression,\n namespaceStatic.replacements,\n ctx.code\n )\n : undefined,\n staticImports: hasNonStaticLocalReference ? [] : staticImports,\n };\n};\n\nconst getInsertionPoints = (\n program: Program,\n expressions: Expression[]\n): number[] => {\n if (expressions.length === 0) {\n return [];\n }\n\n if (program.body.length === 0) {\n return expressions.map(() => 0);\n }\n\n const insertionPoints: number[] = [];\n let ownerIndex = 0;\n\n expressions.forEach((expression) => {\n while (\n ownerIndex < program.body.length - 1 &&\n program.body[ownerIndex]!.end < expression.start\n ) {\n ownerIndex += 1;\n }\n\n let owner: Program['body'][number] | undefined = program.body[ownerIndex];\n if (\n !owner ||\n owner.start > expression.start ||\n owner.end < expression.end\n ) {\n owner = program.body.find(\n (statement) =>\n statement.start <= expression.start && statement.end >= expression.end\n );\n }\n\n insertionPoints.push(owner?.start ?? 0);\n });\n\n return insertionPoints;\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.value +\n result.slice(replacement.end);\n });\n\n return result;\n};\n\nconst extractExpressions = (\n code: string,\n filename: string,\n evaluate: boolean,\n program: Program,\n analysis: Pick<\n ProgramAnalysis,\n 'bindingsByName' | 'rootMutationsByBinding' | 'usedNames'\n >,\n expressions: Expression[]\n): TemplateExtractionResult => {\n if (expressions.length === 0) {\n return {\n code,\n dependencyNames: [],\n expressionValues: [],\n staticValueCandidates: [],\n staticValues: [],\n };\n }\n\n const insertionPoints = getInsertionPoints(program, expressions);\n const ctx: ExtractionContext = {\n bindingResolutionCache: new Map(),\n bindingsByName: analysis.bindingsByName,\n code,\n currentInsertionPoint: insertionPoints[0] ?? 0,\n currentExpressionStart: expressions[0].start,\n dependencyNames: new Set(),\n expressionValues: [],\n filename,\n hoistedBindingNames: new Map(),\n hoistedDeclarations: new Map(),\n hoistedDeclarationsByInsertionPoint: new Map(),\n loc: createLocationLookup(code),\n referencesByNode: new WeakMap(),\n replacements: [],\n rootMutationsByBinding: analysis.rootMutationsByBinding,\n staticImportAliases: new Map(),\n staticValueCandidates: [],\n staticValues: [],\n usedNames: new Set(analysis.usedNames),\n };\n\n expressions.forEach((expression, index) => {\n ctx.currentInsertionPoint = insertionPoints[index] ?? 0;\n ctx.currentExpressionStart = expression.start;\n\n const literal = literalExpressionValue(expression, ctx);\n if (literal) {\n ctx.expressionValues.push(literal);\n return;\n }\n\n const {\n expressionCode,\n importedFrom,\n kind,\n staticExpressionCode,\n staticImports,\n staticValue,\n } = extractExpression(expression, ctx, evaluate);\n const expName = allocateExpressionName(ctx);\n\n addHoistedCode(\n expName,\n `const ${expName} = () => (${expressionCode});`,\n ctx\n );\n if (staticValue !== undefined && kind !== ValueType.FUNCTION) {\n ctx.staticValues.push({\n name: expName,\n value: staticValue,\n });\n } else if (staticImports.length > 0 && kind !== ValueType.FUNCTION) {\n const uniqueImports = new Map<string, OxcStaticImportReference>();\n staticImports.forEach((item) => {\n uniqueImports.set(\n `${item.local}\\0${item.importLocal ?? ''}\\0${item.source}\\0${\n item.imported\n }`,\n item\n );\n });\n ctx.staticValueCandidates.push({\n imports: [...uniqueImports.values()],\n name: expName,\n source: staticExpressionCode ?? expressionCode,\n });\n }\n ctx.replacements.push({\n start: expression.start,\n end: expression.end,\n value: `${expName}()`,\n });\n ctx.expressionValues.push({\n ex: {\n loc: getSourceLocation(expression.start, expression.end, ctx),\n name: expName,\n type: 'Identifier',\n },\n importedFrom,\n kind,\n source: ctx.code.slice(expression.start, expression.end),\n } as unknown as Omit<ExpressionValue, 'buildCodeFrameError'>);\n });\n\n ctx.hoistedDeclarationsByInsertionPoint.forEach((declarations, point) => {\n ctx.replacements.push({\n start: point,\n end: point,\n value: `${declarations.join('\\n')}\\n`,\n });\n });\n\n return {\n code: applyReplacements(code, ctx.replacements),\n dependencyNames: [...ctx.dependencyNames],\n expressionValues: ctx.expressionValues,\n staticValueCandidates: ctx.staticValueCandidates,\n staticValues: ctx.staticValues,\n };\n};\n\nexport const isOxcStaticSerializableValue = (value: unknown): boolean =>\n isStaticSerializableValue(value);\n\nexport const evaluateOxcStaticExpressionAt = (\n code: string,\n filename: string,\n expressionSpan: ExpressionSpan,\n staticBindings: Map<string, unknown> = new Map()\n): unknown | undefined => {\n const program = parseOxc(code, filename);\n const analysis = analyzeProgram(program, {\n collectTargetExpressions: true,\n expressionSpanLookup: createSpanLookup([expressionSpan]),\n });\n const [expression] = analysis.targetExpressions;\n if (!expression) {\n return undefined;\n }\n\n const ctx: ExtractionContext = {\n bindingResolutionCache: new Map(),\n bindingsByName: analysis.bindingsByName,\n code,\n currentInsertionPoint: 0,\n currentExpressionStart: expression.start,\n dependencyNames: new Set(),\n expressionValues: [],\n filename,\n hoistedBindingNames: new Map(),\n hoistedDeclarations: new Map(),\n hoistedDeclarationsByInsertionPoint: new Map(),\n loc: createLocationLookup(code),\n referencesByNode: new WeakMap(),\n replacements: [],\n rootMutationsByBinding: analysis.rootMutationsByBinding,\n staticImportAliases: new Map(),\n staticValueCandidates: [],\n staticValues: [],\n usedNames: new Set(analysis.usedNames),\n };\n\n return evaluateStatic(expression, ctx, new Map(staticBindings));\n};\n\nexport const evaluateOxcStaticExpression = (\n source: string,\n filename: string,\n staticBindings: Map<string, unknown> = new Map()\n): unknown | undefined => {\n const code = `const __wyw_static_value = ${source};`;\n const program = parseOxc(code, filename);\n const declaration = program.body[0];\n if (declaration?.type !== 'VariableDeclaration') {\n return undefined;\n }\n\n const [declarator] = declaration.declarations;\n if (!declarator?.init) {\n return undefined;\n }\n\n return evaluateOxcStaticExpressionAt(\n code,\n filename,\n {\n end: declarator.init.end,\n start: declarator.init.start,\n },\n staticBindings\n );\n};\n\nexport const collectOxcExpressionDependencies = (\n code: string,\n filename: string,\n evaluate = false,\n targetExpressionSpans?: ExpressionSpan[]\n): TemplateExtractionResult => {\n const program = parseOxc(code, filename);\n const analysis = analyzeProgram(program, {\n collectTargetExpressions: true,\n expressionSpanLookup: createSpanLookup(targetExpressionSpans),\n });\n\n return extractExpressions(\n code,\n filename,\n evaluate,\n program,\n analysis,\n analysis.targetExpressions\n );\n};\n\nexport const collectOxcTemplateDependencies = (\n code: string,\n filename: string,\n evaluate = false,\n targetTemplateSpans?: ExpressionSpan[]\n): TemplateExtractionResult => {\n const program = parseOxc(code, filename);\n const analysis = analyzeProgram(program, {\n collectTemplateLiterals: true,\n templateSpanLookup: createSpanLookup(targetTemplateSpans),\n });\n const expressions = analysis.templateLiterals.flatMap(\n (template) => template.expressions\n );\n\n return extractExpressions(\n code,\n filename,\n evaluate,\n program,\n analysis,\n expressions\n );\n};\n"],"file":"collectOxcTemplateDependencies.js"}
@@ -1,6 +1,5 @@
1
1
  // @ts-expect-error
2
- Symbol.dispose ??= Symbol('Symbol.dispose');
3
-
2
+ Symbol.dispose ??= Symbol("Symbol.dispose");
4
3
  // @ts-expect-error
5
- Symbol.asyncDispose ??= Symbol('Symbol.asyncDispose');
6
- //# sourceMappingURL=dispose-polyfill.js.map
4
+ Symbol.asyncDispose ??= Symbol("Symbol.asyncDispose");
5
+ //# sourceMappingURL=dispose-polyfill.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dispose-polyfill.js","names":["Symbol","dispose","asyncDispose"],"sources":["../../src/utils/dispose-polyfill.ts"],"sourcesContent":["// @ts-expect-error\nSymbol.dispose ??= Symbol('Symbol.dispose');\n\n// @ts-expect-error\nSymbol.asyncDispose ??= Symbol('Symbol.asyncDispose');\n"],"mappings":"AAAA;AACAA,MAAM,CAACC,OAAO,KAAKD,MAAM,CAAC,gBAAgB,CAAC;;AAE3C;AACAA,MAAM,CAACE,YAAY,KAAKF,MAAM,CAAC,qBAAqB,CAAC","ignoreList":[]}
1
+ {"mappings":";AACA,OAAO,YAAY,OAAO,iBAAiB;;AAG3C,OAAO,iBAAiB,OAAO,sBAAsB","names":[],"sources":["../../src/utils/dispose-polyfill.ts"],"version":3,"sourcesContent":["// @ts-expect-error\nSymbol.dispose ??= Symbol('Symbol.dispose');\n\n// @ts-expect-error\nSymbol.asyncDispose ??= Symbol('Symbol.asyncDispose');\n"],"file":"dispose-polyfill.js"}
@@ -1,10 +1,10 @@
1
1
  let nextIdx = 1;
2
2
  const processed = new Map();
3
3
  export function getFileIdx(name) {
4
- if (!processed.has(name)) {
5
- // eslint-disable-next-line no-plusplus
6
- processed.set(name, nextIdx++);
7
- }
8
- return processed.get(name).toString().padStart(5, '0');
4
+ if (!processed.has(name)) {
5
+ // eslint-disable-next-line no-plusplus
6
+ processed.set(name, nextIdx++);
7
+ }
8
+ return processed.get(name).toString().padStart(5, "0");
9
9
  }
10
- //# sourceMappingURL=getFileIdx.js.map
10
+ //# sourceMappingURL=getFileIdx.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getFileIdx.js","names":["nextIdx","processed","Map","getFileIdx","name","has","set","get","toString","padStart"],"sources":["../../src/utils/getFileIdx.ts"],"sourcesContent":["let nextIdx = 1;\nconst processed = new Map<string, number>();\n\nexport function getFileIdx(name: string): string {\n if (!processed.has(name)) {\n // eslint-disable-next-line no-plusplus\n processed.set(name, nextIdx++);\n }\n\n return processed.get(name)!.toString().padStart(5, '0');\n}\n"],"mappings":"AAAA,IAAIA,OAAO,GAAG,CAAC;AACf,MAAMC,SAAS,GAAG,IAAIC,GAAG,CAAiB,CAAC;AAE3C,OAAO,SAASC,UAAUA,CAACC,IAAY,EAAU;EAC/C,IAAI,CAACH,SAAS,CAACI,GAAG,CAACD,IAAI,CAAC,EAAE;IACxB;IACAH,SAAS,CAACK,GAAG,CAACF,IAAI,EAAEJ,OAAO,EAAE,CAAC;EAChC;EAEA,OAAOC,SAAS,CAACM,GAAG,CAACH,IAAI,CAAC,CAAEI,QAAQ,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACzD","ignoreList":[]}
1
+ {"mappings":"AAAA,IAAI,UAAU;AACd,MAAM,YAAY,IAAI,KAAqB;AAE3C,OAAO,SAAS,WAAW,MAAsB;AAC/C,KAAI,CAAC,UAAU,IAAI,KAAK,EAAE;;AAExB,YAAU,IAAI,MAAM,UAAU;;AAGhC,QAAO,UAAU,IAAI,KAAK,CAAE,UAAU,CAAC,SAAS,GAAG,IAAI","names":[],"sources":["../../src/utils/getFileIdx.ts"],"version":3,"sourcesContent":["let nextIdx = 1;\nconst processed = new Map<string, number>();\n\nexport function getFileIdx(name: string): string {\n if (!processed.has(name)) {\n // eslint-disable-next-line no-plusplus\n processed.set(name, nextIdx++);\n }\n\n return processed.get(name)!.toString().padStart(5, '0');\n}\n"],"file":"getFileIdx.js"}
@@ -1,13 +1,13 @@
1
- export const getPluginKey = plugin => {
2
- if (typeof plugin === 'string') {
3
- return plugin;
4
- }
5
- if (Array.isArray(plugin)) {
6
- return getPluginKey(plugin[0]);
7
- }
8
- if (typeof plugin === 'object' && plugin !== null && 'key' in plugin) {
9
- return plugin.key ?? null;
10
- }
11
- return null;
1
+ export const getPluginKey = (plugin) => {
2
+ if (typeof plugin === "string") {
3
+ return plugin;
4
+ }
5
+ if (Array.isArray(plugin)) {
6
+ return getPluginKey(plugin[0]);
7
+ }
8
+ if (typeof plugin === "object" && plugin !== null && "key" in plugin) {
9
+ return plugin.key ?? null;
10
+ }
11
+ return null;
12
12
  };
13
- //# sourceMappingURL=getPluginKey.js.map
13
+ //# sourceMappingURL=getPluginKey.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getPluginKey.js","names":["getPluginKey","plugin","Array","isArray","key"],"sources":["../../src/utils/getPluginKey.ts"],"sourcesContent":["import type { PluginItem } from '@babel/core';\n\nexport const getPluginKey = (plugin: PluginItem): string | null => {\n if (typeof plugin === 'string') {\n return plugin;\n }\n\n if (Array.isArray(plugin)) {\n return getPluginKey(plugin[0]);\n }\n\n if (typeof plugin === 'object' && plugin !== null && 'key' in plugin) {\n return (plugin as { key?: string | null }).key ?? null;\n }\n\n return null;\n};\n"],"mappings":"AAEA,OAAO,MAAMA,YAAY,GAAIC,MAAkB,IAAoB;EACjE,IAAI,OAAOA,MAAM,KAAK,QAAQ,EAAE;IAC9B,OAAOA,MAAM;EACf;EAEA,IAAIC,KAAK,CAACC,OAAO,CAACF,MAAM,CAAC,EAAE;IACzB,OAAOD,YAAY,CAACC,MAAM,CAAC,CAAC,CAAC,CAAC;EAChC;EAEA,IAAI,OAAOA,MAAM,KAAK,QAAQ,IAAIA,MAAM,KAAK,IAAI,IAAI,KAAK,IAAIA,MAAM,EAAE;IACpE,OAAQA,MAAM,CAA6BG,GAAG,IAAI,IAAI;EACxD;EAEA,OAAO,IAAI;AACb,CAAC","ignoreList":[]}
1
+ {"mappings":"AAQA,OAAO,MAAM,gBAAgB,WAA0C;AACrE,KAAI,OAAO,WAAW,UAAU;AAC9B,SAAO;;AAGT,KAAI,MAAM,QAAQ,OAAO,EAAE;AACzB,SAAO,aAAa,OAAO,GAAG;;AAGhC,KAAI,OAAO,WAAW,YAAY,WAAW,QAAQ,SAAS,QAAQ;AACpE,SAAQ,OAAmC,OAAO;;AAGpD,QAAO","names":[],"sources":["../../src/utils/getPluginKey.ts"],"version":3,"sourcesContent":["type PluginItemLike =\n | string\n | readonly [PluginItemLike, ...unknown[]]\n | { key?: string | null }\n | object\n | null\n | undefined;\n\nexport const getPluginKey = (plugin: PluginItemLike): string | null => {\n if (typeof plugin === 'string') {\n return plugin;\n }\n\n if (Array.isArray(plugin)) {\n return getPluginKey(plugin[0]);\n }\n\n if (typeof plugin === 'object' && plugin !== null && 'key' in plugin) {\n return (plugin as { key?: string | null }).key ?? null;\n }\n\n return null;\n};\n"],"file":"getPluginKey.js"}
@@ -1,5 +1,11 @@
1
- import { types as t } from '@babel/core';
1
+ import { isNode } from "./isNode.js";
2
2
  export function getVisitorKeys(node) {
3
- return t.VISITOR_KEYS[node.type];
3
+ return Object.keys(node).filter((key) => {
4
+ const value = node[key];
5
+ if (isNode(value)) {
6
+ return true;
7
+ }
8
+ return Array.isArray(value) && value.some(isNode);
9
+ });
4
10
  }
5
- //# sourceMappingURL=getVisitorKeys.js.map
11
+ //# sourceMappingURL=getVisitorKeys.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getVisitorKeys.js","names":["types","t","getVisitorKeys","node","VISITOR_KEYS","type"],"sources":["../../src/utils/getVisitorKeys.ts"],"sourcesContent":["import { types as t } from '@babel/core';\nimport type { Node } from '@babel/types';\n\nexport type VisitorKeys<T extends Node> = {\n [K in keyof T]: Exclude<T[K], undefined> extends Node | Node[] | null\n ? K\n : never;\n}[keyof T] &\n string;\n\nexport function getVisitorKeys<TNode extends Node>(\n node: TNode\n): VisitorKeys<TNode>[] {\n return t.VISITOR_KEYS[node.type] as VisitorKeys<TNode>[];\n}\n"],"mappings":"AAAA,SAASA,KAAK,IAAIC,CAAC,QAAQ,aAAa;AAUxC,OAAO,SAASC,cAAcA,CAC5BC,IAAW,EACW;EACtB,OAAOF,CAAC,CAACG,YAAY,CAACD,IAAI,CAACE,IAAI,CAAC;AAClC","ignoreList":[]}
1
+ {"mappings":"AAEA,SAAS,cAAc;AASvB,OAAO,SAAS,eACd,MACsB;AACtB,QAAO,OAAO,KAAK,KAAK,CAAC,QAAQ,QAAQ;EACvC,MAAM,QAAQ,KAAK;AACnB,MAAI,OAAO,MAAM,EAAE;AACjB,UAAO;;AAGT,SAAO,MAAM,QAAQ,MAAM,IAAI,MAAM,KAAK,OAAO;GACjD","names":[],"sources":["../../src/utils/getVisitorKeys.ts"],"version":3,"sourcesContent":["import type { AstNode } from '@wyw-in-js/shared';\n\nimport { isNode } from './isNode';\n\nexport type VisitorKeys<T extends AstNode> = {\n [K in keyof T]: Exclude<T[K], undefined> extends AstNode | AstNode[] | null\n ? K\n : never;\n}[keyof T] &\n string;\n\nexport function getVisitorKeys<TNode extends AstNode>(\n node: TNode\n): VisitorKeys<TNode>[] {\n return Object.keys(node).filter((key) => {\n const value = node[key as keyof TNode];\n if (isNode(value)) {\n return true;\n }\n\n return Array.isArray(value) && value.some(isNode);\n }) as VisitorKeys<TNode>[];\n}\n"],"file":"getVisitorKeys.js"}
@@ -0,0 +1,23 @@
1
+ import fs from "node:fs";
2
+ import { collectOxcExportsAndImports } from "./collectOxcExportsAndImports.js";
3
+ import { stripQueryAndHash } from "./parseRequest.js";
4
+ export const hasCachedWywPrevalExport = (services, resolved, cached) => {
5
+ const knownExports = services.cache.get("exports", resolved);
6
+ if (knownExports) {
7
+ return knownExports.includes("__wywPreval") || knownExports.includes("*");
8
+ }
9
+ const filename = stripQueryAndHash(resolved);
10
+ const code = cached?.initialCode ?? cached?.loadedAndParsed?.code ?? fs.readFileSync(filename, "utf-8");
11
+ try {
12
+ const analyzed = collectOxcExportsAndImports(code, filename);
13
+ if (analyzed.reexports.some((reexport) => reexport.exported === "*")) {
14
+ return true;
15
+ }
16
+ const exportNames = Array.from(new Set([...Object.keys(analyzed.exports), ...analyzed.reexports.filter((reexport) => reexport.exported !== "*").map((reexport) => reexport.exported)]));
17
+ services.cache.add("exports", resolved, exportNames);
18
+ return exportNames.includes("__wywPreval");
19
+ } catch {
20
+ return true;
21
+ }
22
+ };
23
+ //# sourceMappingURL=hasCachedWywPrevalExport.js.map
@@ -0,0 +1 @@
1
+ {"mappings":"AAAA,OAAO,QAAQ;AAIf,SAAS,mCAAmC;AAC5C,SAAS,yBAAyB;AASlC,OAAO,MAAM,4BACX,UACA,UACA,WACY;CACZ,MAAM,eAAe,SAAS,MAAM,IAAI,WAAW,SAAS;AAG5D,KAAI,cAAc;AAChB,SAAO,aAAa,SAAS,cAAc,IAAI,aAAa,SAAS,IAAI;;CAG3E,MAAM,WAAW,kBAAkB,SAAS;CAC5C,MAAM,OACJ,QAAQ,eACR,QAAQ,iBAAiB,QACzB,GAAG,aAAa,UAAU,QAAQ;AAEpC,KAAI;EACF,MAAM,WAAW,4BAA4B,MAAM,SAAS;AAC5D,MAAI,SAAS,UAAU,MAAM,aAAa,SAAS,aAAa,IAAI,EAAE;AACpE,UAAO;;EAGT,MAAM,cAAc,MAAM,KACxB,IAAI,IAAI,CACN,GAAG,OAAO,KAAK,SAAS,QAAQ,EAChC,GAAG,SAAS,UACT,QAAQ,aAAa,SAAS,aAAa,IAAI,CAC/C,KAAK,aAAa,SAAS,SAAS,CACxC,CAAC,CACH;AACD,WAAS,MAAM,IAAI,WAAW,UAAU,YAAY;AACpD,SAAO,YAAY,SAAS,cAAc;SACpC;AACN,SAAO","names":[],"sources":["../../src/utils/hasCachedWywPrevalExport.ts"],"version":3,"sourcesContent":["import fs from 'node:fs';\n\nimport type { Services } from '../transform/types';\n\nimport { collectOxcExportsAndImports } from './collectOxcExportsAndImports';\nimport { stripQueryAndHash } from './parseRequest';\n\ntype CachedEntrypointLike = {\n evaluated?: boolean;\n ignored?: boolean;\n initialCode?: string;\n loadedAndParsed?: { code?: string; evalConfig?: { filename?: string } };\n};\n\nexport const hasCachedWywPrevalExport = (\n services: Services,\n resolved: string,\n cached: CachedEntrypointLike | undefined\n): boolean => {\n const knownExports = services.cache.get('exports', resolved) as\n | string[]\n | undefined;\n if (knownExports) {\n return knownExports.includes('__wywPreval') || knownExports.includes('*');\n }\n\n const filename = stripQueryAndHash(resolved);\n const code =\n cached?.initialCode ??\n cached?.loadedAndParsed?.code ??\n fs.readFileSync(filename, 'utf-8');\n\n try {\n const analyzed = collectOxcExportsAndImports(code, filename);\n if (analyzed.reexports.some((reexport) => reexport.exported === '*')) {\n return true;\n }\n\n const exportNames = Array.from(\n new Set([\n ...Object.keys(analyzed.exports),\n ...analyzed.reexports\n .filter((reexport) => reexport.exported !== '*')\n .map((reexport) => reexport.exported),\n ])\n );\n services.cache.add('exports', resolved, exportNames);\n return exportNames.includes('__wywPreval');\n } catch {\n return true;\n }\n};\n\nexport type { CachedEntrypointLike };\n"],"file":"hasCachedWywPrevalExport.js"}
@@ -1,7 +1,7 @@
1
1
  export default function hasWywPreval(exports) {
2
- if (!exports || typeof exports !== 'object') {
3
- return false;
4
- }
5
- return '__wywPreval' in exports;
2
+ if (!exports || typeof exports !== "object") {
3
+ return false;
4
+ }
5
+ return "__wywPreval" in exports;
6
6
  }
7
- //# sourceMappingURL=hasWywPreval.js.map
7
+ //# sourceMappingURL=hasWywPreval.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hasWywPreval.js","names":["hasWywPreval","exports"],"sources":["../../src/utils/hasWywPreval.ts"],"sourcesContent":["import type { Value } from '@wyw-in-js/processor-utils';\n\nexport default function hasWywPreval(exports: unknown): exports is {\n __wywPreval: Record<string, () => Value> | null | undefined;\n} {\n if (!exports || typeof exports !== 'object') {\n return false;\n }\n\n return '__wywPreval' in exports;\n}\n"],"mappings":"AAEA,eAAe,SAASA,YAAYA,CAACC,OAAgB,EAEnD;EACA,IAAI,CAACA,OAAO,IAAI,OAAOA,OAAO,KAAK,QAAQ,EAAE;IAC3C,OAAO,KAAK;EACd;EAEA,OAAO,aAAa,IAAIA,OAAO;AACjC","ignoreList":[]}
1
+ {"mappings":"AAEA,eAAe,SAAS,aAAa,SAEnC;AACA,KAAI,CAAC,WAAW,OAAO,YAAY,UAAU;AAC3C,SAAO;;AAGT,QAAO,iBAAiB","names":[],"sources":["../../src/utils/hasWywPreval.ts"],"version":3,"sourcesContent":["import type { Value } from '@wyw-in-js/processor-utils';\n\nexport default function hasWywPreval(exports: unknown): exports is {\n __wywPreval: Record<string, () => Value> | null | undefined;\n} {\n if (!exports || typeof exports !== 'object') {\n return false;\n }\n\n return '__wywPreval' in exports;\n}\n"],"file":"hasWywPreval.js"}
@@ -1,107 +1,92 @@
1
- import path from 'path';
2
- import { syncResolve } from '@wyw-in-js/shared';
3
- import { Minimatch } from 'minimatch';
1
+ import path from "path";
2
+ import { syncResolve } from "@wyw-in-js/shared";
3
+ import { Minimatch } from "minimatch";
4
4
  export function toCanonicalFileKey(resolved, root) {
5
- const rootDir = root ? path.resolve(root) : process.cwd();
6
- const normalizedResolved = path.resolve(resolved);
7
- let relative = path.relative(rootDir, normalizedResolved);
8
- if (path.sep !== path.posix.sep) {
9
- relative = relative.split(path.sep).join(path.posix.sep);
10
- }
11
- if (!relative.startsWith('.')) {
12
- relative = `./${relative}`;
13
- }
14
- return relative;
5
+ const rootDir = root ? path.resolve(root) : process.cwd();
6
+ const normalizedResolved = path.resolve(resolved);
7
+ let relative = path.relative(rootDir, normalizedResolved);
8
+ if (path.sep !== path.posix.sep) {
9
+ relative = relative.split(path.sep).join(path.posix.sep);
10
+ }
11
+ if (!relative.startsWith(".")) {
12
+ relative = `./${relative}`;
13
+ }
14
+ return relative;
15
15
  }
16
- export function toImportKey({
17
- source,
18
- resolved,
19
- root
20
- }) {
21
- const isFileImport = source.startsWith('.') || path.isAbsolute(source);
22
- if (isFileImport && resolved) {
23
- return {
24
- key: toCanonicalFileKey(resolved, root),
25
- kind: 'file'
26
- };
27
- }
28
- return {
29
- key: source,
30
- kind: 'package'
31
- };
16
+ export function toImportKey({ source, resolved, root }) {
17
+ const isFileImport = source.startsWith(".") || path.isAbsolute(source);
18
+ if (isFileImport && resolved) {
19
+ return {
20
+ key: toCanonicalFileKey(resolved, root),
21
+ kind: "file"
22
+ };
23
+ }
24
+ return {
25
+ key: source,
26
+ kind: "package"
27
+ };
32
28
  }
33
- export function resolveMockSpecifier({
34
- importer,
35
- mock,
36
- root,
37
- stack
38
- }) {
39
- const specifier = mock.startsWith('.') && root ? path.resolve(root, mock) : mock;
40
- return syncResolve(specifier, importer, stack);
29
+ export function resolveMockSpecifier({ importer, mock, root, stack }) {
30
+ const specifier = mock.startsWith(".") && root ? path.resolve(root, mock) : mock;
31
+ return syncResolve(specifier, importer, stack);
41
32
  }
42
33
  export function applyImportOverrideToOnly(only, override) {
43
- if (override?.noShake) {
44
- return ['*'];
45
- }
46
- return only;
34
+ if (override?.noShake) {
35
+ return ["*"];
36
+ }
37
+ return only;
47
38
  }
48
39
  const compiledImportOverridesCache = new WeakMap();
49
40
  const minimatchOptions = {
50
- dot: true,
51
- nocomment: true,
52
- nonegate: true
41
+ dot: true,
42
+ nocomment: true,
43
+ nonegate: true
53
44
  };
54
45
  function getPatternSpecificity(pattern) {
55
- let wildcardCount = 0;
56
- let escaped = false;
57
- for (const char of pattern) {
58
- if (escaped) {
59
- escaped = false;
60
- } else if (char === '\\') {
61
- escaped = true;
62
- } else if (char === '*' || char === '?') {
63
- wildcardCount += 1;
64
- }
65
- }
66
- return pattern.length - wildcardCount * 10;
46
+ let wildcardCount = 0;
47
+ let escaped = false;
48
+ for (const char of pattern) {
49
+ if (escaped) {
50
+ escaped = false;
51
+ } else if (char === "\\") {
52
+ escaped = true;
53
+ } else if (char === "*" || char === "?") {
54
+ wildcardCount += 1;
55
+ }
56
+ }
57
+ return pattern.length - wildcardCount * 10;
67
58
  }
68
59
  function compileImportOverrides(importOverrides) {
69
- const matchers = Object.entries(importOverrides).map(([pattern, override]) => {
70
- return {
71
- matcher: new Minimatch(pattern, minimatchOptions),
72
- override,
73
- pattern,
74
- specificity: getPatternSpecificity(pattern)
75
- };
76
- }).sort((a, b) => {
77
- const bySpecificity = b.specificity - a.specificity;
78
- if (bySpecificity !== 0) return bySpecificity;
79
- const byLength = b.pattern.length - a.pattern.length;
80
- if (byLength !== 0) return byLength;
81
- return a.pattern.localeCompare(b.pattern);
82
- });
83
- return {
84
- matchers
85
- };
60
+ const matchers = Object.entries(importOverrides).map(([pattern, override]) => {
61
+ return {
62
+ matcher: new Minimatch(pattern, minimatchOptions),
63
+ override,
64
+ pattern,
65
+ specificity: getPatternSpecificity(pattern)
66
+ };
67
+ }).sort((a, b) => {
68
+ const bySpecificity = b.specificity - a.specificity;
69
+ if (bySpecificity !== 0) return bySpecificity;
70
+ const byLength = b.pattern.length - a.pattern.length;
71
+ if (byLength !== 0) return byLength;
72
+ return a.pattern.localeCompare(b.pattern);
73
+ });
74
+ return { matchers };
86
75
  }
87
76
  function getCompiledImportOverrides(importOverrides) {
88
- const cached = compiledImportOverridesCache.get(importOverrides);
89
- if (cached) return cached;
90
- const compiled = compileImportOverrides(importOverrides);
91
- compiledImportOverridesCache.set(importOverrides, compiled);
92
- return compiled;
77
+ const cached = compiledImportOverridesCache.get(importOverrides);
78
+ if (cached) return cached;
79
+ const compiled = compileImportOverrides(importOverrides);
80
+ compiledImportOverridesCache.set(importOverrides, compiled);
81
+ return compiled;
93
82
  }
94
83
  export function getImportOverride(importOverrides, key) {
95
- if (!importOverrides) {
96
- return undefined;
97
- }
98
- const direct = importOverrides[key];
99
- if (direct) return direct;
100
- const {
101
- matchers
102
- } = getCompiledImportOverrides(importOverrides);
103
- return matchers.find(({
104
- matcher
105
- }) => matcher.match(key))?.override;
84
+ if (!importOverrides) {
85
+ return undefined;
86
+ }
87
+ const direct = importOverrides[key];
88
+ if (direct) return direct;
89
+ const { matchers } = getCompiledImportOverrides(importOverrides);
90
+ return matchers.find(({ matcher }) => matcher.match(key))?.override;
106
91
  }
107
- //# sourceMappingURL=importOverrides.js.map
92
+ //# sourceMappingURL=importOverrides.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"importOverrides.js","names":["path","syncResolve","Minimatch","toCanonicalFileKey","resolved","root","rootDir","resolve","process","cwd","normalizedResolved","relative","sep","posix","split","join","startsWith","toImportKey","source","isFileImport","isAbsolute","key","kind","resolveMockSpecifier","importer","mock","stack","specifier","applyImportOverrideToOnly","only","override","noShake","compiledImportOverridesCache","WeakMap","minimatchOptions","dot","nocomment","nonegate","getPatternSpecificity","pattern","wildcardCount","escaped","char","length","compileImportOverrides","importOverrides","matchers","Object","entries","map","matcher","specificity","sort","a","b","bySpecificity","byLength","localeCompare","getCompiledImportOverrides","cached","get","compiled","set","getImportOverride","undefined","direct","find","match"],"sources":["../../src/utils/importOverrides.ts"],"sourcesContent":["import path from 'path';\n\nimport {\n syncResolve,\n type ImportOverride,\n type ImportOverrides,\n} from '@wyw-in-js/shared';\nimport { Minimatch } from 'minimatch';\n\nexport type ImportKeyKind = 'file' | 'package';\n\nexport type ImportKey = {\n key: string;\n kind: ImportKeyKind;\n};\n\nexport function toCanonicalFileKey(\n resolved: string,\n root: string | undefined\n): string {\n const rootDir = root ? path.resolve(root) : process.cwd();\n const normalizedResolved = path.resolve(resolved);\n let relative = path.relative(rootDir, normalizedResolved);\n\n if (path.sep !== path.posix.sep) {\n relative = relative.split(path.sep).join(path.posix.sep);\n }\n\n if (!relative.startsWith('.')) {\n relative = `./${relative}`;\n }\n\n return relative;\n}\n\nexport function toImportKey({\n source,\n resolved,\n root,\n}: {\n resolved: string | null;\n root: string | undefined;\n source: string;\n}): ImportKey {\n const isFileImport = source.startsWith('.') || path.isAbsolute(source);\n\n if (isFileImport && resolved) {\n return { key: toCanonicalFileKey(resolved, root), kind: 'file' };\n }\n\n return { key: source, kind: 'package' };\n}\n\nexport function resolveMockSpecifier({\n importer,\n mock,\n root,\n stack,\n}: {\n importer: string;\n mock: string;\n root: string | undefined;\n stack: string[];\n}): string {\n const specifier =\n mock.startsWith('.') && root ? path.resolve(root, mock) : mock;\n\n return syncResolve(specifier, importer, stack);\n}\n\nexport function applyImportOverrideToOnly(\n only: string[],\n override: ImportOverride | undefined\n): string[] {\n if (override?.noShake) {\n return ['*'];\n }\n\n return only;\n}\n\ntype CompiledImportOverrides = {\n matchers: Array<{\n matcher: Minimatch;\n override: ImportOverride;\n pattern: string;\n specificity: number;\n }>;\n};\n\nconst compiledImportOverridesCache = new WeakMap<\n ImportOverrides,\n CompiledImportOverrides\n>();\n\nconst minimatchOptions = {\n dot: true,\n nocomment: true,\n nonegate: true,\n} as const;\n\nfunction getPatternSpecificity(pattern: string): number {\n let wildcardCount = 0;\n let escaped = false;\n for (const char of pattern) {\n if (escaped) {\n escaped = false;\n } else if (char === '\\\\') {\n escaped = true;\n } else if (char === '*' || char === '?') {\n wildcardCount += 1;\n }\n }\n\n return pattern.length - wildcardCount * 10;\n}\n\nfunction compileImportOverrides(\n importOverrides: ImportOverrides\n): CompiledImportOverrides {\n const matchers = Object.entries(importOverrides)\n .map(([pattern, override]) => {\n return {\n matcher: new Minimatch(pattern, minimatchOptions),\n override,\n pattern,\n specificity: getPatternSpecificity(pattern),\n };\n })\n .sort((a, b) => {\n const bySpecificity = b.specificity - a.specificity;\n if (bySpecificity !== 0) return bySpecificity;\n\n const byLength = b.pattern.length - a.pattern.length;\n if (byLength !== 0) return byLength;\n\n return a.pattern.localeCompare(b.pattern);\n });\n\n return { matchers };\n}\n\nfunction getCompiledImportOverrides(\n importOverrides: ImportOverrides\n): CompiledImportOverrides {\n const cached = compiledImportOverridesCache.get(importOverrides);\n if (cached) return cached;\n\n const compiled = compileImportOverrides(importOverrides);\n compiledImportOverridesCache.set(importOverrides, compiled);\n return compiled;\n}\n\nexport function getImportOverride(\n importOverrides: ImportOverrides | undefined,\n key: string\n): ImportOverride | undefined {\n if (!importOverrides) {\n return undefined;\n }\n\n const direct = importOverrides[key];\n if (direct) return direct;\n\n const { matchers } = getCompiledImportOverrides(importOverrides);\n return matchers.find(({ matcher }) => matcher.match(key))?.override;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"mappings":"AAAA,OAAO,UAAU;AAEjB,SACE,mBAGK;AACP,SAAS,iBAAiB;AAS1B,OAAO,SAAS,mBACd,UACA,MACQ;CACR,MAAM,UAAU,OAAO,KAAK,QAAQ,KAAK,GAAG,QAAQ,KAAK;CACzD,MAAM,qBAAqB,KAAK,QAAQ,SAAS;CACjD,IAAI,WAAW,KAAK,SAAS,SAAS,mBAAmB;AAEzD,KAAI,KAAK,QAAQ,KAAK,MAAM,KAAK;AAC/B,aAAW,SAAS,MAAM,KAAK,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI;;AAG1D,KAAI,CAAC,SAAS,WAAW,IAAI,EAAE;AAC7B,aAAW,KAAK;;AAGlB,QAAO;;AAGT,OAAO,SAAS,YAAY,EAC1B,QACA,UACA,QAKY;CACZ,MAAM,eAAe,OAAO,WAAW,IAAI,IAAI,KAAK,WAAW,OAAO;AAEtE,KAAI,gBAAgB,UAAU;AAC5B,SAAO;GAAE,KAAK,mBAAmB,UAAU,KAAK;GAAE,MAAM;GAAQ;;AAGlE,QAAO;EAAE,KAAK;EAAQ,MAAM;EAAW;;AAGzC,OAAO,SAAS,qBAAqB,EACnC,UACA,MACA,MACA,SAMS;CACT,MAAM,YACJ,KAAK,WAAW,IAAI,IAAI,OAAO,KAAK,QAAQ,MAAM,KAAK,GAAG;AAE5D,QAAO,YAAY,WAAW,UAAU,MAAM;;AAGhD,OAAO,SAAS,0BACd,MACA,UACU;AACV,KAAI,UAAU,SAAS;AACrB,SAAO,CAAC,IAAI;;AAGd,QAAO;;AAYT,MAAM,+BAA+B,IAAI,SAGtC;AAEH,MAAM,mBAAmB;CACvB,KAAK;CACL,WAAW;CACX,UAAU;CACX;AAED,SAAS,sBAAsB,SAAyB;CACtD,IAAI,gBAAgB;CACpB,IAAI,UAAU;AACd,MAAK,MAAM,QAAQ,SAAS;AAC1B,MAAI,SAAS;AACX,aAAU;aACD,SAAS,MAAM;AACxB,aAAU;aACD,SAAS,OAAO,SAAS,KAAK;AACvC,oBAAiB;;;AAIrB,QAAO,QAAQ,SAAS,gBAAgB;;AAG1C,SAAS,uBACP,iBACyB;CACzB,MAAM,WAAW,OAAO,QAAQ,gBAAgB,CAC7C,KAAK,CAAC,SAAS,cAAc;AAC5B,SAAO;GACL,SAAS,IAAI,UAAU,SAAS,iBAAiB;GACjD;GACA;GACA,aAAa,sBAAsB,QAAQ;GAC5C;GACD,CACD,MAAM,GAAG,MAAM;EACd,MAAM,gBAAgB,EAAE,cAAc,EAAE;AACxC,MAAI,kBAAkB,EAAG,QAAO;EAEhC,MAAM,WAAW,EAAE,QAAQ,SAAS,EAAE,QAAQ;AAC9C,MAAI,aAAa,EAAG,QAAO;AAE3B,SAAO,EAAE,QAAQ,cAAc,EAAE,QAAQ;GACzC;AAEJ,QAAO,EAAE,UAAU;;AAGrB,SAAS,2BACP,iBACyB;CACzB,MAAM,SAAS,6BAA6B,IAAI,gBAAgB;AAChE,KAAI,OAAQ,QAAO;CAEnB,MAAM,WAAW,uBAAuB,gBAAgB;AACxD,8BAA6B,IAAI,iBAAiB,SAAS;AAC3D,QAAO;;AAGT,OAAO,SAAS,kBACd,iBACA,KAC4B;AAC5B,KAAI,CAAC,iBAAiB;AACpB,SAAO;;CAGT,MAAM,SAAS,gBAAgB;AAC/B,KAAI,OAAQ,QAAO;CAEnB,MAAM,EAAE,aAAa,2BAA2B,gBAAgB;AAChE,QAAO,SAAS,MAAM,EAAE,cAAc,QAAQ,MAAM,IAAI,CAAC,EAAE","names":[],"sources":["../../src/utils/importOverrides.ts"],"version":3,"sourcesContent":["import path from 'path';\n\nimport {\n syncResolve,\n type ImportOverride,\n type ImportOverrides,\n} from '@wyw-in-js/shared';\nimport { Minimatch } from 'minimatch';\n\nexport type ImportKeyKind = 'file' | 'package';\n\nexport type ImportKey = {\n key: string;\n kind: ImportKeyKind;\n};\n\nexport function toCanonicalFileKey(\n resolved: string,\n root: string | undefined\n): string {\n const rootDir = root ? path.resolve(root) : process.cwd();\n const normalizedResolved = path.resolve(resolved);\n let relative = path.relative(rootDir, normalizedResolved);\n\n if (path.sep !== path.posix.sep) {\n relative = relative.split(path.sep).join(path.posix.sep);\n }\n\n if (!relative.startsWith('.')) {\n relative = `./${relative}`;\n }\n\n return relative;\n}\n\nexport function toImportKey({\n source,\n resolved,\n root,\n}: {\n resolved: string | null;\n root: string | undefined;\n source: string;\n}): ImportKey {\n const isFileImport = source.startsWith('.') || path.isAbsolute(source);\n\n if (isFileImport && resolved) {\n return { key: toCanonicalFileKey(resolved, root), kind: 'file' };\n }\n\n return { key: source, kind: 'package' };\n}\n\nexport function resolveMockSpecifier({\n importer,\n mock,\n root,\n stack,\n}: {\n importer: string;\n mock: string;\n root: string | undefined;\n stack: string[];\n}): string {\n const specifier =\n mock.startsWith('.') && root ? path.resolve(root, mock) : mock;\n\n return syncResolve(specifier, importer, stack);\n}\n\nexport function applyImportOverrideToOnly(\n only: string[],\n override: ImportOverride | undefined\n): string[] {\n if (override?.noShake) {\n return ['*'];\n }\n\n return only;\n}\n\ntype CompiledImportOverrides = {\n matchers: Array<{\n matcher: Minimatch;\n override: ImportOverride;\n pattern: string;\n specificity: number;\n }>;\n};\n\nconst compiledImportOverridesCache = new WeakMap<\n ImportOverrides,\n CompiledImportOverrides\n>();\n\nconst minimatchOptions = {\n dot: true,\n nocomment: true,\n nonegate: true,\n} as const;\n\nfunction getPatternSpecificity(pattern: string): number {\n let wildcardCount = 0;\n let escaped = false;\n for (const char of pattern) {\n if (escaped) {\n escaped = false;\n } else if (char === '\\\\') {\n escaped = true;\n } else if (char === '*' || char === '?') {\n wildcardCount += 1;\n }\n }\n\n return pattern.length - wildcardCount * 10;\n}\n\nfunction compileImportOverrides(\n importOverrides: ImportOverrides\n): CompiledImportOverrides {\n const matchers = Object.entries(importOverrides)\n .map(([pattern, override]) => {\n return {\n matcher: new Minimatch(pattern, minimatchOptions),\n override,\n pattern,\n specificity: getPatternSpecificity(pattern),\n };\n })\n .sort((a, b) => {\n const bySpecificity = b.specificity - a.specificity;\n if (bySpecificity !== 0) return bySpecificity;\n\n const byLength = b.pattern.length - a.pattern.length;\n if (byLength !== 0) return byLength;\n\n return a.pattern.localeCompare(b.pattern);\n });\n\n return { matchers };\n}\n\nfunction getCompiledImportOverrides(\n importOverrides: ImportOverrides\n): CompiledImportOverrides {\n const cached = compiledImportOverridesCache.get(importOverrides);\n if (cached) return cached;\n\n const compiled = compileImportOverrides(importOverrides);\n compiledImportOverridesCache.set(importOverrides, compiled);\n return compiled;\n}\n\nexport function getImportOverride(\n importOverrides: ImportOverrides | undefined,\n key: string\n): ImportOverride | undefined {\n if (!importOverrides) {\n return undefined;\n }\n\n const direct = importOverrides[key];\n if (direct) return direct;\n\n const { matchers } = getCompiledImportOverrides(importOverrides);\n return matchers.find(({ matcher }) => matcher.match(key))?.override;\n}\n"],"file":"importOverrides.js"}