@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,1179 @@
1
+ /* eslint-disable no-restricted-syntax,no-continue */
2
+ import { collectOxcExportsAndImports } from './collectOxcExportsAndImports';
3
+ import { EventEmitter } from './EventEmitter';
4
+ import { parseOxcProgramCached } from './parseOxc';
5
+ const ssrCheckFields = new Set([
6
+ 'document',
7
+ 'location',
8
+ 'navigator',
9
+ 'sessionStorage',
10
+ 'localStorage',
11
+ 'window',
12
+ ]);
13
+ const forbiddenGlobals = new Set([
14
+ ...ssrCheckFields,
15
+ '$RefreshReg$',
16
+ '$RefreshSig$',
17
+ 'XMLHttpRequest',
18
+ 'clearImmediate',
19
+ 'clearInterval',
20
+ 'clearTimeout',
21
+ 'fetch',
22
+ 'navigator',
23
+ 'setImmediate',
24
+ 'setInterval',
25
+ 'setTimeout',
26
+ ]);
27
+ const alwaysForbiddenIdentifiers = new Set(['$RefreshReg$', '$RefreshSig$']);
28
+ const promiseCallbackMethods = new Set(['then', 'catch', 'finally']);
29
+ const jsxRuntimeSources = new Set([
30
+ 'react/jsx-runtime',
31
+ 'react/jsx-dev-runtime',
32
+ ]);
33
+ const defaultPlaceholder = '...';
34
+ const defaultReactComponentTypes = [
35
+ 'ExoticComponent',
36
+ 'FC',
37
+ 'ForwardRefExoticComponent',
38
+ 'FunctionComponent',
39
+ 'LazyExoticComponent',
40
+ 'MemoExoticComponent',
41
+ 'NamedExoticComponent',
42
+ ];
43
+ const generatedProcessorHelperNameRe = /^_exp\d*$/;
44
+ const requireCallRe = /\brequire\s*\(/;
45
+ const windowTokenRe = /\bwindow\b/;
46
+ const removableOwnerTypes = new Set([
47
+ 'DoWhileStatement',
48
+ 'ExpressionStatement',
49
+ 'ForInStatement',
50
+ 'ForOfStatement',
51
+ 'ForStatement',
52
+ 'FunctionDeclaration',
53
+ 'IfStatement',
54
+ 'PropertyDefinition',
55
+ 'ReturnStatement',
56
+ 'VariableDeclaration',
57
+ 'WhileStatement',
58
+ ]);
59
+ const importMetaEnvRe = /\bimport\s*\.\s*meta\s*\.\s*env\b/;
60
+ const createScope = (parent, key) => ({
61
+ bindings: new Map(),
62
+ key,
63
+ names: new Set(),
64
+ parent,
65
+ });
66
+ const createsScope = (node) => node.type === 'Program' ||
67
+ node.type === 'BlockStatement' ||
68
+ node.type === 'FunctionDeclaration' ||
69
+ node.type === 'FunctionExpression' ||
70
+ node.type === 'ArrowFunctionExpression';
71
+ const hasBinding = (scope, name) => {
72
+ let current = scope;
73
+ while (current) {
74
+ if (current.names.has(name)) {
75
+ return true;
76
+ }
77
+ current = current.parent;
78
+ }
79
+ return false;
80
+ };
81
+ const getBindingKey = (scope, name) => {
82
+ let current = scope;
83
+ while (current) {
84
+ if (current.names.has(name)) {
85
+ return `${current.key}\0${name}`;
86
+ }
87
+ current = current.parent;
88
+ }
89
+ return null;
90
+ };
91
+ const getStaticBinding = (scope, name) => {
92
+ let current = scope;
93
+ while (current) {
94
+ if (current.bindings.has(name)) {
95
+ return current.bindings.get(name);
96
+ }
97
+ current = current.parent;
98
+ }
99
+ return undefined;
100
+ };
101
+ const isFileLikeRequireSpecifier = (value) => value.startsWith('.') || value.startsWith('/') || value.startsWith('file:');
102
+ const isNode = (value) => !!value &&
103
+ typeof value === 'object' &&
104
+ 'type' in value &&
105
+ typeof value.type === 'string';
106
+ const getChildren = (node) => {
107
+ const result = [];
108
+ const record = node;
109
+ Object.keys(record).forEach((key) => {
110
+ if (key === 'type' || key === 'start' || key === 'end' || key === 'range') {
111
+ return;
112
+ }
113
+ const value = record[key];
114
+ if (isNode(value)) {
115
+ result.push(value);
116
+ return;
117
+ }
118
+ if (Array.isArray(value)) {
119
+ value.forEach((item) => {
120
+ if (isNode(item)) {
121
+ result.push(item);
122
+ }
123
+ });
124
+ }
125
+ });
126
+ return result;
127
+ };
128
+ const parseOxc = (code, filename) => {
129
+ return parseOxcProgramCached(filename, code, 'unambiguous');
130
+ };
131
+ const unwrapExpression = (node) => {
132
+ if (node.type === 'TSAsExpression' ||
133
+ node.type === 'TSSatisfiesExpression' ||
134
+ node.type === 'TSNonNullExpression' ||
135
+ node.type === 'TSTypeAssertion' ||
136
+ node.type === 'ParenthesizedExpression') {
137
+ return unwrapExpression(node.expression);
138
+ }
139
+ return node;
140
+ };
141
+ const getMemberPropertyName = (node) => {
142
+ if (node.type !== 'MemberExpression') {
143
+ return null;
144
+ }
145
+ if (node.computed) {
146
+ return node.property.type === 'Literal' &&
147
+ typeof node.property.value === 'string'
148
+ ? node.property.value
149
+ : null;
150
+ }
151
+ return node.property.type === 'Identifier' ? node.property.name : null;
152
+ };
153
+ const isStringLikeExpression = (node) => {
154
+ const expression = unwrapExpression(node);
155
+ if (expression.type === 'Literal' && typeof expression.value === 'string') {
156
+ return true;
157
+ }
158
+ if (expression.type === 'TemplateLiteral') {
159
+ return true;
160
+ }
161
+ if (expression.type === 'BinaryExpression' && expression.operator === '+') {
162
+ return (isStringLikeExpression(expression.left) ||
163
+ isStringLikeExpression(expression.right));
164
+ }
165
+ if (expression.type === 'CallExpression' &&
166
+ expression.callee.type === 'MemberExpression' &&
167
+ getMemberPropertyName(expression.callee) === 'concat') {
168
+ return isStringLikeExpression(expression.callee.object);
169
+ }
170
+ return false;
171
+ };
172
+ const templateLiteralToConcat = (code, node) => {
173
+ if (node.type !== 'TemplateLiteral' || node.expressions.length === 0) {
174
+ return code.slice(node.start, node.end);
175
+ }
176
+ const parts = [];
177
+ node.quasis.forEach((quasi, index) => {
178
+ const cooked = quasi.value.cooked ?? quasi.value.raw;
179
+ if (cooked !== '') {
180
+ parts.push(JSON.stringify(cooked));
181
+ }
182
+ const expression = node.expressions[index];
183
+ if (expression) {
184
+ parts.push(code.slice(expression.start, expression.end));
185
+ }
186
+ });
187
+ return parts.length > 0 ? parts.join(' + ') : '""';
188
+ };
189
+ const dynamicImportArgumentCode = (code, node) => {
190
+ if (node.type === 'TemplateLiteral') {
191
+ return templateLiteralToConcat(code, node);
192
+ }
193
+ return code.slice(node.start, node.end);
194
+ };
195
+ const evaluateStaticValue = (node, scope, seen = new Set()) => {
196
+ const expression = unwrapExpression(node);
197
+ if (expression.type === 'Literal') {
198
+ return expression.value;
199
+ }
200
+ if (expression.type === 'TemplateLiteral') {
201
+ let result = '';
202
+ for (let idx = 0; idx < expression.quasis.length; idx += 1) {
203
+ result += expression.quasis[idx]?.value.cooked ?? '';
204
+ const nextExpression = expression.expressions[idx];
205
+ if (!nextExpression) {
206
+ continue;
207
+ }
208
+ const value = evaluateStaticValue(nextExpression, scope, seen);
209
+ if (value === undefined ||
210
+ (typeof value !== 'string' && typeof value !== 'number')) {
211
+ return undefined;
212
+ }
213
+ result += String(value);
214
+ }
215
+ return result;
216
+ }
217
+ if (expression.type === 'Identifier') {
218
+ if (seen.has(expression.name)) {
219
+ return undefined;
220
+ }
221
+ const binding = getStaticBinding(scope, expression.name);
222
+ if (!binding) {
223
+ return undefined;
224
+ }
225
+ return evaluateStaticValue(binding, scope, new Set([...seen, expression.name]));
226
+ }
227
+ if (expression.type === 'BinaryExpression' && expression.operator === '+') {
228
+ const left = evaluateStaticValue(expression.left, scope, seen);
229
+ const right = evaluateStaticValue(expression.right, scope, seen);
230
+ if (left === undefined || right === undefined) {
231
+ return undefined;
232
+ }
233
+ if (typeof left === 'number' && typeof right === 'number') {
234
+ return left + right;
235
+ }
236
+ if ((typeof left === 'string' || typeof left === 'number') &&
237
+ (typeof right === 'string' || typeof right === 'number')) {
238
+ return `${left}${right}`;
239
+ }
240
+ }
241
+ if (expression.type === 'CallExpression' &&
242
+ expression.callee.type === 'MemberExpression') {
243
+ const objectValue = evaluateStaticValue(expression.callee.object, scope, seen);
244
+ const propertyName = getMemberPropertyName(expression.callee);
245
+ if (!propertyName) {
246
+ return undefined;
247
+ }
248
+ if (typeof objectValue === 'string') {
249
+ if (propertyName === 'toLowerCase' && expression.arguments.length === 0) {
250
+ return objectValue.toLowerCase();
251
+ }
252
+ if (propertyName === 'toUpperCase' && expression.arguments.length === 0) {
253
+ return objectValue.toUpperCase();
254
+ }
255
+ if (propertyName === 'trim' && expression.arguments.length === 0) {
256
+ return objectValue.trim();
257
+ }
258
+ if (propertyName === 'concat') {
259
+ const args = expression.arguments.map((argument) => argument.type === 'SpreadElement'
260
+ ? undefined
261
+ : evaluateStaticValue(argument, scope, seen));
262
+ if (args.some((value) => value === undefined) ||
263
+ args.some((value) => typeof value !== 'string' && typeof value !== 'number')) {
264
+ return undefined;
265
+ }
266
+ return objectValue.concat(...args.map((value) => String(value)));
267
+ }
268
+ }
269
+ }
270
+ return undefined;
271
+ };
272
+ const isLiteralRequireArg = (node) => {
273
+ const expression = unwrapExpression(node);
274
+ if (expression.type === 'Literal' && typeof expression.value === 'string') {
275
+ return true;
276
+ }
277
+ if (expression.type === 'TemplateLiteral' &&
278
+ expression.expressions.length === 0) {
279
+ return true;
280
+ }
281
+ return false;
282
+ };
283
+ const applyReplacements = (code, replacements) => {
284
+ let result = code;
285
+ replacements
286
+ .sort((a, b) => b.start - a.start)
287
+ .forEach((replacement) => {
288
+ result =
289
+ result.slice(0, replacement.start) +
290
+ replacement.value +
291
+ result.slice(replacement.end);
292
+ });
293
+ return result;
294
+ };
295
+ const isIdentifierNamed = (value, name) => isNode(value) && value.type === 'Identifier' && value.name === name;
296
+ const isImportMeta = (node) => {
297
+ if (!isNode(node) || node.type !== 'MetaProperty') {
298
+ return false;
299
+ }
300
+ const metaProperty = node;
301
+ return (isIdentifierNamed(metaProperty.meta, 'import') &&
302
+ isIdentifierNamed(metaProperty.property, 'meta'));
303
+ };
304
+ const isImportMetaEnv = (node) => {
305
+ if (node.type !== 'MemberExpression') {
306
+ return false;
307
+ }
308
+ if (node.computed || !isIdentifierNamed(node.property, 'env')) {
309
+ return false;
310
+ }
311
+ return isImportMeta(node.object);
312
+ };
313
+ const collectBindingNames = (node) => {
314
+ if (node.type === 'Identifier') {
315
+ return [node.name];
316
+ }
317
+ if (node.type === 'RestElement') {
318
+ return collectBindingNames(node.argument);
319
+ }
320
+ if (node.type === 'AssignmentPattern') {
321
+ return collectBindingNames(node.left);
322
+ }
323
+ if (node.type === 'ObjectPattern') {
324
+ return node.properties.flatMap((property) => property.type === 'RestElement'
325
+ ? collectBindingNames(property.argument)
326
+ : collectBindingNames(property.value));
327
+ }
328
+ if (node.type === 'ArrayPattern') {
329
+ return node.elements.flatMap((element) => element ? collectBindingNames(element) : []);
330
+ }
331
+ if (node.type === 'TSParameterProperty') {
332
+ return collectBindingNames(node.parameter);
333
+ }
334
+ return [];
335
+ };
336
+ const predeclareScopeNames = (node, scope) => {
337
+ if (node.type === 'FunctionDeclaration' ||
338
+ node.type === 'FunctionExpression' ||
339
+ node.type === 'ArrowFunctionExpression') {
340
+ if (node.type !== 'ArrowFunctionExpression' && node.id) {
341
+ scope.names.add(node.id.name);
342
+ }
343
+ node.params.forEach((param) => {
344
+ collectBindingNames(param).forEach((name) => {
345
+ scope.names.add(name);
346
+ });
347
+ });
348
+ }
349
+ const visitScopeDescendants = (child) => {
350
+ if (child.type === 'VariableDeclarator') {
351
+ collectBindingNames(child.id).forEach((name) => {
352
+ scope.names.add(name);
353
+ });
354
+ }
355
+ else if (child.type === 'FunctionDeclaration' && child.id) {
356
+ scope.names.add(child.id.name);
357
+ }
358
+ else if (child.type === 'ClassDeclaration' && child.id) {
359
+ scope.names.add(child.id.name);
360
+ }
361
+ else if (child.type === 'ImportDefaultSpecifier' ||
362
+ child.type === 'ImportNamespaceSpecifier' ||
363
+ child.type === 'ImportSpecifier') {
364
+ scope.names.add(child.local.name);
365
+ }
366
+ if (createsScope(child)) {
367
+ return;
368
+ }
369
+ getChildren(child).forEach(visitScopeDescendants);
370
+ };
371
+ getChildren(node).forEach(visitScopeDescendants);
372
+ };
373
+ const declareBindings = (node, scope) => {
374
+ if (node.type === 'VariableDeclarator') {
375
+ const names = collectBindingNames(node.id);
376
+ names.forEach((name) => {
377
+ scope.names.add(name);
378
+ scope.bindings.set(name, null);
379
+ });
380
+ if (node.id.type === 'Identifier' && node.init) {
381
+ scope.bindings.set(node.id.name, node.init);
382
+ }
383
+ return;
384
+ }
385
+ if (node.type === 'FunctionDeclaration' && node.id) {
386
+ scope.names.add(node.id.name);
387
+ scope.bindings.set(node.id.name, null);
388
+ }
389
+ if (node.type === 'ClassDeclaration' && node.id) {
390
+ scope.names.add(node.id.name);
391
+ scope.bindings.set(node.id.name, null);
392
+ return;
393
+ }
394
+ if (node.type === 'ImportDefaultSpecifier' ||
395
+ node.type === 'ImportNamespaceSpecifier' ||
396
+ node.type === 'ImportSpecifier') {
397
+ scope.names.add(node.local.name);
398
+ scope.bindings.set(node.local.name, null);
399
+ return;
400
+ }
401
+ if (node.type === 'FunctionDeclaration' ||
402
+ node.type === 'FunctionExpression' ||
403
+ node.type === 'ArrowFunctionExpression') {
404
+ node.params.forEach((param) => {
405
+ collectBindingNames(param).forEach((name) => {
406
+ scope.names.add(name);
407
+ scope.bindings.set(name, null);
408
+ });
409
+ });
410
+ }
411
+ };
412
+ const visit = (node, scope, enter, parent = null, ancestors = []) => {
413
+ let currentScope = scope;
414
+ if (createsScope(node)) {
415
+ currentScope = createScope(scope, `${node.type}:${node.start}:${node.end}`);
416
+ predeclareScopeNames(node, currentScope);
417
+ }
418
+ declareBindings(node, currentScope);
419
+ enter(node, currentScope, parent, ancestors);
420
+ getChildren(node).forEach((child) => visit(child, currentScope, enter, node, [...ancestors, node]));
421
+ };
422
+ export const replaceImportMetaEnvWithOxc = (code, filename) => {
423
+ if (!importMetaEnvRe.test(code)) {
424
+ return code;
425
+ }
426
+ const replacements = [];
427
+ visit(parseOxc(code, filename), createScope(null, 'root'), (node) => {
428
+ if (!isImportMetaEnv(node)) {
429
+ return;
430
+ }
431
+ replacements.push({
432
+ end: node.end,
433
+ start: node.start,
434
+ value: '__wyw_import_meta_env',
435
+ });
436
+ });
437
+ return applyReplacements(code, replacements);
438
+ };
439
+ function collectDynamicImportAndRequireFallbackReplacements(code, filename, options) {
440
+ const eventEmitter = options.eventEmitter ?? EventEmitter.dummy;
441
+ const dynamicImportCandidates = [];
442
+ const requireFallbackCandidates = [];
443
+ eventEmitter.perf('transform:preeval:dynamicImportRequireFallback:scan', () => {
444
+ visit(parseOxc(code, filename), createScope(null, 'root'), (node, scope) => {
445
+ if (options.rewriteDynamicImports &&
446
+ node.type === 'ImportExpression') {
447
+ dynamicImportCandidates.push(node);
448
+ }
449
+ if (!options.addRequireFallback || node.type !== 'CallExpression') {
450
+ return;
451
+ }
452
+ const call = node;
453
+ if (call.callee.type !== 'Identifier' ||
454
+ call.callee.name !== 'require' ||
455
+ hasBinding(scope, 'require') ||
456
+ call.arguments.length !== 1) {
457
+ return;
458
+ }
459
+ const [firstArg] = call.arguments;
460
+ if (!firstArg ||
461
+ firstArg.type === 'SpreadElement' ||
462
+ isLiteralRequireArg(firstArg)) {
463
+ return;
464
+ }
465
+ requireFallbackCandidates.push({
466
+ call,
467
+ scope,
468
+ });
469
+ });
470
+ });
471
+ const replacements = [];
472
+ eventEmitter.perf('transform:preeval:dynamicImport', () => {
473
+ dynamicImportCandidates.forEach((importExpression) => {
474
+ const argument = importExpression.source;
475
+ const nextArgument = isStringLikeExpression(argument)
476
+ ? unwrapExpression(argument)
477
+ : argument;
478
+ replacements.push({
479
+ end: importExpression.end,
480
+ start: importExpression.start,
481
+ value: `__wyw_dynamic_import(${dynamicImportArgumentCode(code, nextArgument)})`,
482
+ });
483
+ });
484
+ });
485
+ eventEmitter.perf('transform:preeval:requireFallback', () => {
486
+ requireFallbackCandidates.forEach(({ call, scope }) => {
487
+ const [firstArg] = call.arguments;
488
+ if (!firstArg || firstArg.type === 'SpreadElement') {
489
+ return;
490
+ }
491
+ const staticValue = evaluateStaticValue(firstArg, scope);
492
+ if (typeof staticValue === 'string' &&
493
+ isFileLikeRequireSpecifier(staticValue)) {
494
+ replacements.push({
495
+ end: firstArg.end,
496
+ start: firstArg.start,
497
+ value: JSON.stringify(staticValue),
498
+ });
499
+ return;
500
+ }
501
+ replacements.push({
502
+ end: firstArg.end,
503
+ start: firstArg.end,
504
+ value: ', true',
505
+ });
506
+ });
507
+ });
508
+ return replacements;
509
+ }
510
+ export const rewriteDynamicImportsWithOxc = (code, filename) => {
511
+ const replacements = collectDynamicImportAndRequireFallbackReplacements(code, filename, {
512
+ addRequireFallback: false,
513
+ rewriteDynamicImports: true,
514
+ });
515
+ return applyReplacements(code, replacements);
516
+ };
517
+ export const addRequireFallbackWithOxc = (code, filename) => {
518
+ const replacements = collectDynamicImportAndRequireFallbackReplacements(code, filename, {
519
+ addRequireFallback: true,
520
+ rewriteDynamicImports: false,
521
+ });
522
+ return applyReplacements(code, replacements);
523
+ };
524
+ export const rewriteDynamicImportsAndAddRequireFallbackWithOxc = (code, filename, options) => {
525
+ const replacements = collectDynamicImportAndRequireFallbackReplacements(code, filename, options);
526
+ return applyReplacements(code, replacements);
527
+ };
528
+ const isBindingPosition = (node, parent) => {
529
+ if (!parent) {
530
+ return false;
531
+ }
532
+ if (parent.type === 'VariableDeclarator' && parent.id === node) {
533
+ return true;
534
+ }
535
+ if ((parent.type === 'FunctionDeclaration' ||
536
+ parent.type === 'FunctionExpression' ||
537
+ parent.type === 'ClassDeclaration' ||
538
+ parent.type === 'ClassExpression') &&
539
+ parent.id === node) {
540
+ return true;
541
+ }
542
+ if (parent.type === 'ImportSpecifier' &&
543
+ (parent.local === node || parent.imported === node)) {
544
+ return true;
545
+ }
546
+ if ((parent.type === 'ImportDefaultSpecifier' ||
547
+ parent.type === 'ImportNamespaceSpecifier') &&
548
+ parent.local === node) {
549
+ return true;
550
+ }
551
+ if (parent.type === 'ExportSpecifier' &&
552
+ (parent.local === node || parent.exported === node)) {
553
+ return true;
554
+ }
555
+ return false;
556
+ };
557
+ const isPropertyOnlyIdentifier = (node, parent) => {
558
+ if (!parent) {
559
+ return false;
560
+ }
561
+ if (parent.type === 'MemberExpression' &&
562
+ !parent.computed &&
563
+ parent.property === node) {
564
+ return true;
565
+ }
566
+ if ((parent.type === 'Property' ||
567
+ parent.type === 'MethodDefinition' ||
568
+ parent.type === 'PropertyDefinition') &&
569
+ !parent.computed &&
570
+ parent.key === node) {
571
+ return true;
572
+ }
573
+ return false;
574
+ };
575
+ const isTypeContext = (ancestors) => ancestors.some((ancestor) => ancestor.type.startsWith('TS') || ancestor.type.startsWith('JSDoc'));
576
+ const isInsideTypeof = (ancestors) => ancestors.some((ancestor) => ancestor.type === 'UnaryExpression' && ancestor.operator === 'typeof');
577
+ const isInsideImportDeclaration = (ancestors) => ancestors.some((ancestor) => ancestor.type === 'ImportDeclaration');
578
+ function findLastAncestor(ancestors, predicate) {
579
+ for (let idx = ancestors.length - 1; idx >= 0; idx -= 1) {
580
+ const ancestor = ancestors[idx];
581
+ if (predicate(ancestor)) {
582
+ return ancestor;
583
+ }
584
+ }
585
+ return null;
586
+ }
587
+ const findRemovableOwner = (node, ancestors) => {
588
+ let owner = node;
589
+ let ownerAncestorIndex = -1;
590
+ if (!removableOwnerTypes.has(node.type)) {
591
+ for (let idx = ancestors.length - 1; idx >= 0; idx -= 1) {
592
+ const ancestor = ancestors[idx];
593
+ if (removableOwnerTypes.has(ancestor.type)) {
594
+ owner = ancestor;
595
+ ownerAncestorIndex = idx;
596
+ break;
597
+ }
598
+ }
599
+ }
600
+ const parent = ownerAncestorIndex > 0 ? ancestors[ownerAncestorIndex - 1] : null;
601
+ if (parent?.type === 'ExportNamedDeclaration' &&
602
+ 'declaration' in parent &&
603
+ parent.declaration === owner) {
604
+ return parent;
605
+ }
606
+ return owner;
607
+ };
608
+ const collectReExportedLocalNames = (program) => {
609
+ const names = new Set();
610
+ for (const stmt of program.body) {
611
+ if (stmt.type !== 'ExportNamedDeclaration' ||
612
+ stmt.declaration ||
613
+ stmt.source) {
614
+ continue;
615
+ }
616
+ for (const spec of stmt.specifiers) {
617
+ if (spec.type === 'ExportSpecifier' && spec.local.type === 'Identifier') {
618
+ names.add(spec.local.name);
619
+ }
620
+ }
621
+ }
622
+ return names;
623
+ };
624
+ // When an offending identifier sits inside the value of a top-level export,
625
+ // removing the surrounding declaration would strip the export binding too.
626
+ // ESM linker then fails on consumers' `import { name } from '...'` because the
627
+ // named export no longer exists. To keep the binding alive, replace just the
628
+ // value (declarator init or default-export expression) with `undefined`.
629
+ const findExportedBindingProtection = (node, ancestors, reExportedLocalNames) => {
630
+ for (let idx = ancestors.length - 1; idx >= 0; idx -= 1) {
631
+ const ancestor = ancestors[idx];
632
+ if (ancestor.type === 'ExportDefaultDeclaration') {
633
+ const decl = ancestor.declaration;
634
+ if (decl && decl !== node && 'start' in decl && 'end' in decl) {
635
+ return { start: decl.start, end: decl.end, value: 'undefined' };
636
+ }
637
+ return null;
638
+ }
639
+ if (ancestor.type !== 'VariableDeclarator') {
640
+ continue;
641
+ }
642
+ if (ancestor.id.type !== 'Identifier' ||
643
+ !ancestor.init ||
644
+ ancestor.init === node) {
645
+ return null;
646
+ }
647
+ const varDecl = ancestors[idx - 1];
648
+ const wrapper = ancestors[idx - 2] ?? null;
649
+ if (varDecl?.type !== 'VariableDeclaration') {
650
+ return null;
651
+ }
652
+ const isDirectExport = wrapper?.type === 'ExportNamedDeclaration' &&
653
+ wrapper.declaration === varDecl;
654
+ const isTopLevelDeclaration = wrapper === null || wrapper?.type === 'Program';
655
+ const isReExported = isTopLevelDeclaration && reExportedLocalNames.has(ancestor.id.name);
656
+ if (!isDirectExport && !isReExported) {
657
+ return null;
658
+ }
659
+ return {
660
+ start: ancestor.init.start,
661
+ end: ancestor.init.end,
662
+ value: 'undefined',
663
+ };
664
+ }
665
+ return null;
666
+ };
667
+ const findPromiseCallbackOwner = (ancestors) => {
668
+ for (let idx = ancestors.length - 1; idx >= 0; idx -= 1) {
669
+ const ancestor = ancestors[idx];
670
+ if (ancestor.type === 'NewExpression' &&
671
+ ancestor.callee.type === 'Identifier' &&
672
+ ancestor.callee.name === 'Promise') {
673
+ return ancestor;
674
+ }
675
+ if (ancestor.type === 'CallExpression' &&
676
+ ancestor.callee.type === 'MemberExpression' &&
677
+ promiseCallbackMethods.has(getMemberPropertyName(ancestor.callee) ?? '')) {
678
+ return ancestor;
679
+ }
680
+ }
681
+ return null;
682
+ };
683
+ const containsForbiddenIdentifier = (node) => {
684
+ if (node.type === 'Identifier' && alwaysForbiddenIdentifiers.has(node.name)) {
685
+ return true;
686
+ }
687
+ return getChildren(node).some(containsForbiddenIdentifier);
688
+ };
689
+ const collectWindowScopedNames = (program) => {
690
+ const windowScopedNames = new Set();
691
+ visit(program, createScope(null, 'root'), (node, scope) => {
692
+ if (node.type !== 'MemberExpression' ||
693
+ node.object.type !== 'Identifier' ||
694
+ node.object.name !== 'window' ||
695
+ hasBinding(scope, 'window')) {
696
+ return;
697
+ }
698
+ const propertyName = getMemberPropertyName(node);
699
+ if (propertyName) {
700
+ windowScopedNames.add(propertyName);
701
+ }
702
+ });
703
+ return windowScopedNames;
704
+ };
705
+ const containsForbiddenReference = (node, scope, windowScopedNames, derivedForbiddenBindings = new Set()) => {
706
+ let found = false;
707
+ visit(node, scope, (child, childScope, parent, ancestors) => {
708
+ if (found ||
709
+ child.type !== 'Identifier' ||
710
+ isTypeContext(ancestors) ||
711
+ isInsideTypeof(ancestors) ||
712
+ isPropertyOnlyIdentifier(child, parent) ||
713
+ isBindingPosition(child, parent)) {
714
+ return;
715
+ }
716
+ const bindingKey = getBindingKey(childScope, child.name);
717
+ if (alwaysForbiddenIdentifiers.has(child.name) ||
718
+ (forbiddenGlobals.has(child.name) &&
719
+ !hasBinding(childScope, child.name)) ||
720
+ (windowScopedNames.has(child.name) &&
721
+ !hasBinding(childScope, child.name)) ||
722
+ (bindingKey !== null && derivedForbiddenBindings.has(bindingKey))) {
723
+ found = true;
724
+ }
725
+ });
726
+ return found;
727
+ };
728
+ const nameFromModuleExport = (node) => {
729
+ if (node.type === 'Identifier') {
730
+ return node.name;
731
+ }
732
+ if (node.type === 'Literal' && typeof node.value === 'string') {
733
+ return node.value;
734
+ }
735
+ return null;
736
+ };
737
+ const collectImportBindings = (code, filename, program) => {
738
+ const bindings = new Map();
739
+ const addBinding = (binding) => {
740
+ bindings.set(`${binding.local}\0${binding.source}\0${binding.imported}`, binding);
741
+ };
742
+ program.body.forEach((statement) => {
743
+ if (statement.type !== 'ImportDeclaration') {
744
+ return;
745
+ }
746
+ const source = statement.source.value;
747
+ statement.specifiers.forEach((specifier) => {
748
+ if (specifier.type === 'ImportDefaultSpecifier') {
749
+ addBinding({
750
+ imported: 'default',
751
+ local: specifier.local.name,
752
+ source,
753
+ });
754
+ return;
755
+ }
756
+ if (specifier.type === 'ImportNamespaceSpecifier') {
757
+ addBinding({
758
+ imported: '*',
759
+ local: specifier.local.name,
760
+ source,
761
+ });
762
+ return;
763
+ }
764
+ const imported = nameFromModuleExport(specifier.imported);
765
+ if (!imported) {
766
+ return;
767
+ }
768
+ addBinding({
769
+ imported,
770
+ local: specifier.local.name,
771
+ source,
772
+ });
773
+ });
774
+ });
775
+ if (!requireCallRe.test(code)) {
776
+ return [...bindings.values()];
777
+ }
778
+ collectOxcExportsAndImports(code, filename).imports.forEach((item) => {
779
+ if (item.imported === 'side-effect') {
780
+ return;
781
+ }
782
+ addBinding({
783
+ imported: item.imported,
784
+ local: item.local.code,
785
+ source: item.source,
786
+ });
787
+ if (item.local.name && item.local.name !== item.local.code) {
788
+ addBinding({
789
+ imported: item.imported,
790
+ local: item.local.name,
791
+ source: item.source,
792
+ });
793
+ }
794
+ });
795
+ return [...bindings.values()];
796
+ };
797
+ const getImportBinding = (imports, local) => imports.find((item) => item.local === local);
798
+ function unwrapSequenceCallee(node) {
799
+ if (node.type === 'SequenceExpression' &&
800
+ node.expressions.length === 2 &&
801
+ node.expressions[0]?.type === 'Literal' &&
802
+ node.expressions[0].value === 0) {
803
+ return node.expressions[1];
804
+ }
805
+ return node;
806
+ }
807
+ const getExpressionImportKey = (node) => {
808
+ const expression = unwrapSequenceCallee(node);
809
+ if (expression.type === 'Identifier') {
810
+ return expression.name;
811
+ }
812
+ if (expression.type !== 'MemberExpression') {
813
+ return null;
814
+ }
815
+ if (expression.object.type !== 'Identifier') {
816
+ return null;
817
+ }
818
+ const propertyName = getMemberPropertyName(expression);
819
+ return propertyName ? `${expression.object.name}.${propertyName}` : null;
820
+ };
821
+ const isHookOrCreateElement = (name) => name === 'createElement' || /use[A-Z]/.test(name);
822
+ const getInnermostCallee = (call) => {
823
+ let callee = unwrapSequenceCallee(call.callee);
824
+ while (callee.type === 'CallExpression') {
825
+ callee = unwrapSequenceCallee(callee.callee);
826
+ }
827
+ return callee;
828
+ };
829
+ const getImportForExpression = (node, imports) => {
830
+ const expression = unwrapSequenceCallee(node);
831
+ const directMatchKey = getExpressionImportKey(expression);
832
+ if (directMatchKey) {
833
+ const directMatch = getImportBinding(imports, directMatchKey);
834
+ if (directMatch) {
835
+ return [directMatch.source, directMatch.imported];
836
+ }
837
+ }
838
+ if (expression.type === 'Identifier') {
839
+ const matched = getImportBinding(imports, expression.name);
840
+ return matched ? [matched.source, matched.imported] : undefined;
841
+ }
842
+ if (expression.type !== 'MemberExpression') {
843
+ return undefined;
844
+ }
845
+ if (expression.object.type !== 'Identifier') {
846
+ return undefined;
847
+ }
848
+ const propertyName = getMemberPropertyName(expression);
849
+ if (!propertyName) {
850
+ return undefined;
851
+ }
852
+ const objectImport = getImportBinding(imports, expression.object.name);
853
+ if (!objectImport) {
854
+ return undefined;
855
+ }
856
+ if (objectImport.imported === 'default' ||
857
+ objectImport.imported === '*' ||
858
+ objectImport.source === 'react') {
859
+ return [objectImport.source, propertyName];
860
+ }
861
+ return undefined;
862
+ };
863
+ const isReactRuntimeCall = (call, imports) => {
864
+ const callee = unwrapSequenceCallee(call.callee);
865
+ const matched = getImportForExpression(callee, imports);
866
+ if (!matched) {
867
+ return false;
868
+ }
869
+ const [source, imported] = matched;
870
+ if (jsxRuntimeSources.has(source)) {
871
+ return true;
872
+ }
873
+ return source === 'react' && isHookOrCreateElement(imported);
874
+ };
875
+ const isHocCall = (call, hocs, imports) => {
876
+ const matched = getImportForExpression(getInnermostCallee(call), imports);
877
+ return !!matched && hocs[matched[0]]?.includes(matched[1]);
878
+ };
879
+ const getComponentTypes = (options) => {
880
+ const componentTypes = {
881
+ ...(options?.componentTypes ?? { react: [defaultPlaceholder] }),
882
+ };
883
+ const reactTypes = componentTypes.react;
884
+ if (Array.isArray(reactTypes) && reactTypes.includes(defaultPlaceholder)) {
885
+ const idx = reactTypes.indexOf(defaultPlaceholder);
886
+ componentTypes.react = [...reactTypes];
887
+ componentTypes.react.splice(idx, 1, ...defaultReactComponentTypes);
888
+ }
889
+ return componentTypes;
890
+ };
891
+ const getTypeImport = (node, imports) => {
892
+ if (node.type === 'Identifier') {
893
+ const matched = getImportBinding(imports, node.name);
894
+ return matched ? [matched.source, matched.imported] : undefined;
895
+ }
896
+ if (node.type !== 'TSQualifiedName') {
897
+ return undefined;
898
+ }
899
+ if (node.left.type !== 'Identifier') {
900
+ return undefined;
901
+ }
902
+ const matched = getImportBinding(imports, node.left.name);
903
+ return matched ? [matched.source, node.right.name] : undefined;
904
+ };
905
+ const isComponentTypeMatch = (id, componentTypes, imports) => {
906
+ if (id.type !== 'Identifier') {
907
+ return false;
908
+ }
909
+ const annotation = id.typeAnnotation;
910
+ if (!annotation ||
911
+ annotation.type !== 'TSTypeAnnotation' ||
912
+ annotation.typeAnnotation.type !== 'TSTypeReference') {
913
+ return false;
914
+ }
915
+ const matched = getTypeImport(annotation.typeAnnotation.typeName, imports);
916
+ return !!matched && componentTypes[matched[0]]?.includes(matched[1]);
917
+ };
918
+ const getClassName = (node) => node.type === 'ClassDeclaration' && node.id ? node.id.name : null;
919
+ const isFunctionLikeNode = (node) => node.type === 'FunctionDeclaration' ||
920
+ node.type === 'FunctionExpression' ||
921
+ node.type === 'ArrowFunctionExpression';
922
+ const isImmediatelyInvokedFunction = (fnNode, ancestors, fnIndex) => {
923
+ // Walk past any ParenthesizedExpression / SequenceExpression wrappers that
924
+ // sit between the function and its enclosing CallExpression. oxc-parser
925
+ // preserves ParenthesizedExpression nodes, so `(() => {...})()` shows up
926
+ // as CallExpression -> ParenthesizedExpression -> ArrowFunctionExpression.
927
+ let child = fnNode;
928
+ for (let idx = fnIndex - 1; idx >= 0; idx -= 1) {
929
+ const ancestor = ancestors[idx];
930
+ if (ancestor.type === 'ParenthesizedExpression' &&
931
+ 'expression' in ancestor &&
932
+ ancestor.expression === child) {
933
+ child = ancestor;
934
+ continue;
935
+ }
936
+ if (ancestor.type === 'SequenceExpression' &&
937
+ Array.isArray(ancestor.expressions) &&
938
+ ancestor.expressions[ancestor.expressions.length - 1] === child) {
939
+ child = ancestor;
940
+ continue;
941
+ }
942
+ return ancestor.type === 'CallExpression' && ancestor.callee === child;
943
+ }
944
+ return false;
945
+ };
946
+ // A reference is "deferred" when it lives inside a function body that is
947
+ // not immediately invoked. Module preeval reads exports without calling
948
+ // them, so deferred references never run and must not be sanitized — that
949
+ // would silently drop the binding (or remove the entire export) and break
950
+ // importers that expect the function to be callable.
951
+ const isInDeferredFunctionScope = (ancestors) => {
952
+ for (let idx = ancestors.length - 1; idx >= 0; idx -= 1) {
953
+ const ancestor = ancestors[idx];
954
+ if (!isFunctionLikeNode(ancestor)) {
955
+ continue;
956
+ }
957
+ if (!isImmediatelyInvokedFunction(ancestor, ancestors, idx)) {
958
+ return true;
959
+ }
960
+ }
961
+ return false;
962
+ };
963
+ const findFunctionReplacement = (ancestors) => {
964
+ const renderMethod = findLastAncestor(ancestors, (ancestor) => ancestor.type === 'MethodDefinition' &&
965
+ ancestor.key.type === 'Identifier' &&
966
+ ancestor.key.name === 'render');
967
+ if (renderMethod) {
968
+ const classDecl = findLastAncestor(ancestors, (ancestor) => ancestor.type === 'ClassDeclaration');
969
+ const className = classDecl ? getClassName(classDecl) : null;
970
+ if (classDecl && className) {
971
+ return {
972
+ start: classDecl.start,
973
+ end: classDecl.end,
974
+ value: `function ${className}() { return null; }`,
975
+ };
976
+ }
977
+ }
978
+ const functionNode = findLastAncestor(ancestors, isFunctionLikeNode);
979
+ if (!functionNode) {
980
+ return null;
981
+ }
982
+ if (functionNode.type === 'ArrowFunctionExpression') {
983
+ return {
984
+ start: functionNode.start,
985
+ end: functionNode.end,
986
+ value: `${functionNode.async ? 'async ' : ''}() => { return null; }`,
987
+ };
988
+ }
989
+ if (functionNode.type === 'FunctionDeclaration') {
990
+ return {
991
+ start: functionNode.start,
992
+ end: functionNode.end,
993
+ value: `${functionNode.async ? 'async ' : ''}function ${functionNode.id?.name ?? ''}() { return null; }`,
994
+ };
995
+ }
996
+ return {
997
+ start: functionNode.body.start,
998
+ end: functionNode.body.end,
999
+ value: '{ return null; }',
1000
+ };
1001
+ };
1002
+ const normalizeReplacements = (replacements) => {
1003
+ const sorted = [...replacements].sort((a, b) => a.start === b.start ? b.end - a.end : a.start - b.start);
1004
+ const result = [];
1005
+ sorted.forEach((replacement) => {
1006
+ const last = result[result.length - 1];
1007
+ if (last &&
1008
+ replacement.start >= last.start &&
1009
+ replacement.end <= last.end) {
1010
+ return;
1011
+ }
1012
+ result.push(replacement);
1013
+ });
1014
+ return result;
1015
+ };
1016
+ export const removeDangerousCodeWithOxc = (code, filename, options) => {
1017
+ const replacements = [];
1018
+ const derivedForbiddenBindings = new Set();
1019
+ const program = parseOxc(code, filename);
1020
+ const imports = collectImportBindings(code, filename, program);
1021
+ const componentTypes = getComponentTypes(options);
1022
+ const hocs = options?.hocs ?? {};
1023
+ const hasHocs = Object.keys(hocs).length > 0;
1024
+ const windowScopedNames = windowTokenRe.test(code)
1025
+ ? collectWindowScopedNames(program)
1026
+ : new Set();
1027
+ const reExportedLocalNames = collectReExportedLocalNames(program);
1028
+ const derivedBindingDiscovery = { found: true };
1029
+ while (derivedBindingDiscovery.found) {
1030
+ derivedBindingDiscovery.found = false;
1031
+ visit(program, createScope(null, 'root'), (node, scope) => {
1032
+ if (node.type !== 'VariableDeclarator' ||
1033
+ node.id.type !== 'Identifier' ||
1034
+ !node.init) {
1035
+ return;
1036
+ }
1037
+ const bindingKey = getBindingKey(scope, node.id.name);
1038
+ if (!bindingKey || derivedForbiddenBindings.has(bindingKey)) {
1039
+ return;
1040
+ }
1041
+ if (containsForbiddenIdentifier(node.init) ||
1042
+ containsForbiddenReference(node.init, scope, windowScopedNames, derivedForbiddenBindings)) {
1043
+ derivedForbiddenBindings.add(bindingKey);
1044
+ derivedBindingDiscovery.found = true;
1045
+ }
1046
+ });
1047
+ }
1048
+ visit(program, createScope(null, 'root'), (node, scope, parent, ancestors) => {
1049
+ if (node.type === 'JSXElement' || node.type === 'JSXFragment') {
1050
+ replacements.push(findFunctionReplacement(ancestors) ?? {
1051
+ start: node.start,
1052
+ end: node.end,
1053
+ value: 'null',
1054
+ });
1055
+ return;
1056
+ }
1057
+ if (node.type === 'CallExpression') {
1058
+ if (isReactRuntimeCall(node, imports)) {
1059
+ const replacement = findFunctionReplacement(ancestors);
1060
+ if (replacement) {
1061
+ replacements.push(replacement);
1062
+ }
1063
+ return;
1064
+ }
1065
+ if (hasHocs && isHocCall(node, hocs, imports)) {
1066
+ replacements.push({
1067
+ start: node.start,
1068
+ end: node.end,
1069
+ value: '() => null',
1070
+ });
1071
+ return;
1072
+ }
1073
+ }
1074
+ if (node.type === 'VariableDeclarator' &&
1075
+ node.id.type === 'Identifier' &&
1076
+ node.init &&
1077
+ isComponentTypeMatch(node.id, componentTypes, imports)) {
1078
+ replacements.push({
1079
+ start: node.init.start,
1080
+ end: node.init.end,
1081
+ value: '() => null',
1082
+ });
1083
+ return;
1084
+ }
1085
+ if (node.type === 'UnaryExpression' &&
1086
+ node.operator === 'typeof' &&
1087
+ node.argument.type === 'Identifier' &&
1088
+ ssrCheckFields.has(node.argument.name) &&
1089
+ !hasBinding(scope, node.argument.name)) {
1090
+ replacements.push({
1091
+ start: node.start,
1092
+ end: node.end,
1093
+ value: '"undefined"',
1094
+ });
1095
+ return;
1096
+ }
1097
+ if (node.type === 'MetaProperty') {
1098
+ const owner = findRemovableOwner(node, ancestors);
1099
+ replacements.push({ start: owner.start, end: owner.end, value: '' });
1100
+ return;
1101
+ }
1102
+ if (node.type !== 'Identifier' ||
1103
+ isTypeContext(ancestors) ||
1104
+ isInsideTypeof(ancestors) ||
1105
+ isInsideImportDeclaration(ancestors)) {
1106
+ return;
1107
+ }
1108
+ if (isPropertyOnlyIdentifier(node, parent)) {
1109
+ return;
1110
+ }
1111
+ const isAlwaysForbidden = alwaysForbiddenIdentifiers.has(node.name);
1112
+ const bindingKey = getBindingKey(scope, node.name);
1113
+ const isDerivedForbidden = bindingKey !== null && derivedForbiddenBindings.has(bindingKey);
1114
+ const isWindowScoped = windowScopedNames.has(node.name) && !hasBinding(scope, node.name);
1115
+ const isForbiddenGlobal = forbiddenGlobals.has(node.name) && !hasBinding(scope, node.name);
1116
+ if (!isAlwaysForbidden &&
1117
+ !isDerivedForbidden &&
1118
+ !isWindowScoped &&
1119
+ !isForbiddenGlobal) {
1120
+ return;
1121
+ }
1122
+ if (!isAlwaysForbidden && isInDeferredFunctionScope(ancestors)) {
1123
+ return;
1124
+ }
1125
+ if (isBindingPosition(node, parent) && !isAlwaysForbidden) {
1126
+ return;
1127
+ }
1128
+ if (parent?.type === 'ExportDefaultDeclaration' &&
1129
+ parent.declaration === node) {
1130
+ return;
1131
+ }
1132
+ if (generatedProcessorHelperNameRe.test(node.name) &&
1133
+ hasBinding(scope, node.name)) {
1134
+ return;
1135
+ }
1136
+ const generatedHelperDeclarator = findLastAncestor(ancestors, (ancestor) => ancestor.type === 'VariableDeclarator' &&
1137
+ ancestor.id.type === 'Identifier' &&
1138
+ generatedProcessorHelperNameRe.test(ancestor.id.name));
1139
+ if (generatedHelperDeclarator) {
1140
+ return;
1141
+ }
1142
+ if (parent?.type === 'Property' &&
1143
+ parent.value === node &&
1144
+ hasBinding(scope, node.name)) {
1145
+ return;
1146
+ }
1147
+ if (parent?.type === 'Property' && parent.value === node) {
1148
+ replacements.push({
1149
+ start: node.start,
1150
+ end: node.end,
1151
+ value: parent.shorthand ? `${node.name}: undefined` : 'undefined',
1152
+ });
1153
+ return;
1154
+ }
1155
+ const grandparent = ancestors[ancestors.length - 2] ?? null;
1156
+ if (parent?.type === 'MemberExpression' &&
1157
+ parent.object === node &&
1158
+ grandparent?.type === 'SpreadElement' &&
1159
+ grandparent.argument === parent) {
1160
+ replacements.push({
1161
+ start: grandparent.start,
1162
+ end: grandparent.end,
1163
+ value: '...{}',
1164
+ });
1165
+ return;
1166
+ }
1167
+ const exportProtection = findExportedBindingProtection(node, ancestors, reExportedLocalNames);
1168
+ if (exportProtection) {
1169
+ replacements.push(exportProtection);
1170
+ return;
1171
+ }
1172
+ const promiseOwner = findPromiseCallbackOwner(ancestors);
1173
+ const owner = promiseOwner
1174
+ ? findRemovableOwner(promiseOwner, ancestors)
1175
+ : findRemovableOwner(node, ancestors);
1176
+ replacements.push({ start: owner.start, end: owner.end, value: '' });
1177
+ });
1178
+ return applyReplacements(code, normalizeReplacements(replacements));
1179
+ };