@wyw-in-js/transform 1.0.8 → 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 -28
  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 -79
  78. package/esm/transform/generators/workflow.js.map +1 -1
  79. package/esm/transform/helpers/loadWywOptions.js +154 -73
  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 +10 -0
  102. package/esm/utils/TransformDiagnostics.js.map +1 -0
  103. package/esm/utils/TransformMetadata.js +28 -10
  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 +7 -8
  178. package/types/index.js +24 -77
  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 +6 -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 -37
  222. package/types/transform/helpers/loadWywOptions.js +95 -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 +4 -24
  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.d.ts +9 -0
  241. package/types/utils/TransformDiagnostics.js +11 -0
  242. package/types/utils/TransformMetadata.d.ts +22 -4
  243. package/types/utils/TransformMetadata.js +23 -8
  244. package/types/utils/applyOxcProcessors.d.ts +16 -0
  245. package/types/utils/applyOxcProcessors.js +1391 -0
  246. package/types/utils/collectOxcExportsAndImports.d.ts +35 -0
  247. package/types/utils/collectOxcExportsAndImports.js +957 -0
  248. package/types/utils/collectOxcRuntime.d.ts +14 -0
  249. package/types/utils/collectOxcRuntime.js +250 -0
  250. package/types/utils/collectOxcTemplateDependencies.d.ts +38 -0
  251. package/types/utils/collectOxcTemplateDependencies.js +1580 -0
  252. package/types/utils/getFileIdx.js +1 -4
  253. package/types/utils/getPluginKey.d.ts +5 -2
  254. package/types/utils/getPluginKey.js +2 -6
  255. package/types/utils/getVisitorKeys.d.ts +4 -4
  256. package/types/utils/getVisitorKeys.js +9 -6
  257. package/types/utils/hasCachedWywPrevalExport.d.ts +14 -0
  258. package/types/utils/hasCachedWywPrevalExport.js +30 -0
  259. package/types/utils/hasWywPreval.js +1 -4
  260. package/types/utils/importOverrides.js +17 -27
  261. package/types/utils/isNode.d.ts +2 -2
  262. package/types/utils/isNode.js +2 -6
  263. package/types/utils/isNotNull.js +1 -4
  264. package/types/utils/isSerializable.js +3 -6
  265. package/types/utils/oxcAstService.d.ts +11 -0
  266. package/types/utils/oxcAstService.js +79 -0
  267. package/types/utils/oxcEmit.d.ts +19 -0
  268. package/types/utils/oxcEmit.js +506 -0
  269. package/types/utils/oxcPreevalStage.d.ts +20 -0
  270. package/types/utils/oxcPreevalStage.js +102 -0
  271. package/types/utils/oxcPreevalTransforms.d.ts +13 -0
  272. package/types/utils/oxcPreevalTransforms.js +1179 -0
  273. package/types/utils/oxcShaker.d.ts +13 -0
  274. package/types/utils/oxcShaker.js +751 -0
  275. package/types/utils/parseOxc.d.ts +11 -0
  276. package/types/utils/parseOxc.js +38 -0
  277. package/types/utils/parseRequest.js +2 -7
  278. package/types/utils/peek.js +1 -5
  279. package/types/utils/processorLookup.d.ts +8 -0
  280. package/types/utils/processorLookup.js +135 -0
  281. package/types/utils/resolveWithConditions.d.ts +12 -0
  282. package/types/utils/resolveWithConditions.js +103 -0
  283. package/types/vm/createVmContext.d.ts +2 -2
  284. package/types/vm/createVmContext.js +25 -62
  285. package/types/vm/process.js +20 -26
  286. package/esm/babel.js +0 -2
  287. package/esm/babel.js.map +0 -1
  288. package/esm/options/buildOptions.js +0 -168
  289. package/esm/options/buildOptions.js.map +0 -1
  290. package/esm/options/buildOptions.test.js +0 -138
  291. package/esm/options/buildOptions.test.js.map +0 -1
  292. package/esm/options/loadBabelOptions.js +0 -24
  293. package/esm/options/loadBabelOptions.js.map +0 -1
  294. package/esm/plugins/babel-transform.js +0 -53
  295. package/esm/plugins/babel-transform.js.map +0 -1
  296. package/esm/plugins/collector.js +0 -60
  297. package/esm/plugins/collector.js.map +0 -1
  298. package/esm/plugins/dynamic-import.js +0 -56
  299. package/esm/plugins/dynamic-import.js.map +0 -1
  300. package/esm/plugins/preeval.js +0 -73
  301. package/esm/plugins/preeval.js.map +0 -1
  302. package/esm/plugins/shaker.js +0 -680
  303. package/esm/plugins/shaker.js.map +0 -1
  304. package/esm/transform/barrelManifest.js +0 -291
  305. package/esm/transform/barrelManifest.js.map +0 -1
  306. package/esm/transform/generators/explodeReexports.js +0 -64
  307. package/esm/transform/generators/explodeReexports.js.map +0 -1
  308. package/esm/transform/generators/rewriteBarrelImports.js +0 -733
  309. package/esm/transform/generators/rewriteBarrelImports.js.map +0 -1
  310. package/esm/utils/addIdentifierToWywPreval.js +0 -68
  311. package/esm/utils/addIdentifierToWywPreval.js.map +0 -1
  312. package/esm/utils/collectExportsAndImports.js +0 -1157
  313. package/esm/utils/collectExportsAndImports.js.map +0 -1
  314. package/esm/utils/collectTemplateDependencies.js +0 -228
  315. package/esm/utils/collectTemplateDependencies.js.map +0 -1
  316. package/esm/utils/createId.js +0 -6
  317. package/esm/utils/createId.js.map +0 -1
  318. package/esm/utils/findIdentifiers.js +0 -62
  319. package/esm/utils/findIdentifiers.js.map +0 -1
  320. package/esm/utils/getConstantStringValue.js +0 -58
  321. package/esm/utils/getConstantStringValue.js.map +0 -1
  322. package/esm/utils/getMemberExpressionPropertyName.js +0 -11
  323. package/esm/utils/getMemberExpressionPropertyName.js.map +0 -1
  324. package/esm/utils/getScope.js +0 -6
  325. package/esm/utils/getScope.js.map +0 -1
  326. package/esm/utils/getSource.js +0 -15
  327. package/esm/utils/getSource.js.map +0 -1
  328. package/esm/utils/getTagProcessor.js +0 -404
  329. package/esm/utils/getTagProcessor.js.map +0 -1
  330. package/esm/utils/isExports.js +0 -22
  331. package/esm/utils/isExports.js.map +0 -1
  332. package/esm/utils/isGlobal.js +0 -6
  333. package/esm/utils/isGlobal.js.map +0 -1
  334. package/esm/utils/isNodePath.js +0 -4
  335. package/esm/utils/isNodePath.js.map +0 -1
  336. package/esm/utils/isRemoved.js +0 -46
  337. package/esm/utils/isRemoved.js.map +0 -1
  338. package/esm/utils/isRequire.js +0 -13
  339. package/esm/utils/isRequire.js.map +0 -1
  340. package/esm/utils/isTypedNode.js +0 -6
  341. package/esm/utils/isTypedNode.js.map +0 -1
  342. package/esm/utils/isUnnecessaryReactCall.js +0 -72
  343. package/esm/utils/isUnnecessaryReactCall.js.map +0 -1
  344. package/esm/utils/removeDangerousCode.js +0 -276
  345. package/esm/utils/removeDangerousCode.js.map +0 -1
  346. package/esm/utils/replaceImportMetaEnv.js +0 -44
  347. package/esm/utils/replaceImportMetaEnv.js.map +0 -1
  348. package/esm/utils/scopeHelpers.js +0 -527
  349. package/esm/utils/scopeHelpers.js.map +0 -1
  350. package/esm/utils/traversalCache.js +0 -23
  351. package/esm/utils/traversalCache.js.map +0 -1
  352. package/esm/utils/unwrapExpression.js +0 -18
  353. package/esm/utils/unwrapExpression.js.map +0 -1
  354. package/esm/utils/unwrapSequence.js +0 -14
  355. package/esm/utils/unwrapSequence.js.map +0 -1
  356. package/esm/utils/valueToLiteral.js +0 -59
  357. package/esm/utils/valueToLiteral.js.map +0 -1
  358. package/esm/utils/visitors/JSXElementsRemover.js +0 -51
  359. package/esm/utils/visitors/JSXElementsRemover.js.map +0 -1
  360. package/lib/babel.js +0 -2
  361. package/lib/babel.js.map +0 -1
  362. package/lib/cache.js +0 -308
  363. package/lib/cache.js.map +0 -1
  364. package/lib/debug/fileReporter.js +0 -153
  365. package/lib/debug/fileReporter.js.map +0 -1
  366. package/lib/evaluators/index.js +0 -20
  367. package/lib/evaluators/index.js.map +0 -1
  368. package/lib/index.js +0 -257
  369. package/lib/index.js.map +0 -1
  370. package/lib/module.js +0 -552
  371. package/lib/module.js.map +0 -1
  372. package/lib/options/buildOptions.js +0 -176
  373. package/lib/options/buildOptions.js.map +0 -1
  374. package/lib/options/buildOptions.test.js +0 -141
  375. package/lib/options/buildOptions.test.js.map +0 -1
  376. package/lib/options/loadBabelOptions.js +0 -31
  377. package/lib/options/loadBabelOptions.js.map +0 -1
  378. package/lib/plugins/babel-transform.js +0 -60
  379. package/lib/plugins/babel-transform.js.map +0 -1
  380. package/lib/plugins/collector.js +0 -70
  381. package/lib/plugins/collector.js.map +0 -1
  382. package/lib/plugins/dynamic-import.js +0 -61
  383. package/lib/plugins/dynamic-import.js.map +0 -1
  384. package/lib/plugins/preeval.js +0 -81
  385. package/lib/plugins/preeval.js.map +0 -1
  386. package/lib/plugins/shaker.js +0 -691
  387. package/lib/plugins/shaker.js.map +0 -1
  388. package/lib/shaker.js +0 -95
  389. package/lib/shaker.js.map +0 -1
  390. package/lib/transform/BaseEntrypoint.js +0 -179
  391. package/lib/transform/BaseEntrypoint.js.map +0 -1
  392. package/lib/transform/Entrypoint.helpers.js +0 -279
  393. package/lib/transform/Entrypoint.helpers.js.map +0 -1
  394. package/lib/transform/Entrypoint.js +0 -289
  395. package/lib/transform/Entrypoint.js.map +0 -1
  396. package/lib/transform/Entrypoint.types.js +0 -2
  397. package/lib/transform/Entrypoint.types.js.map +0 -1
  398. package/lib/transform/EvaluatedEntrypoint.js +0 -13
  399. package/lib/transform/EvaluatedEntrypoint.js.map +0 -1
  400. package/lib/transform/actions/AbortError.js +0 -16
  401. package/lib/transform/actions/AbortError.js.map +0 -1
  402. package/lib/transform/actions/BaseAction.js +0 -150
  403. package/lib/transform/actions/BaseAction.js.map +0 -1
  404. package/lib/transform/actions/UnprocessedEntrypointError.js +0 -16
  405. package/lib/transform/actions/UnprocessedEntrypointError.js.map +0 -1
  406. package/lib/transform/actions/actionRunner.js +0 -82
  407. package/lib/transform/actions/actionRunner.js.map +0 -1
  408. package/lib/transform/actions/types.js +0 -2
  409. package/lib/transform/actions/types.js.map +0 -1
  410. package/lib/transform/barrelManifest.js +0 -300
  411. package/lib/transform/barrelManifest.js.map +0 -1
  412. package/lib/transform/generators/baseProcessingHandlers.js +0 -27
  413. package/lib/transform/generators/baseProcessingHandlers.js.map +0 -1
  414. package/lib/transform/generators/collect.js +0 -66
  415. package/lib/transform/generators/collect.js.map +0 -1
  416. package/lib/transform/generators/createStylisPreprocessor.js +0 -372
  417. package/lib/transform/generators/createStylisPreprocessor.js.map +0 -1
  418. package/lib/transform/generators/evalFile.js +0 -57
  419. package/lib/transform/generators/evalFile.js.map +0 -1
  420. package/lib/transform/generators/explodeReexports.js +0 -71
  421. package/lib/transform/generators/explodeReexports.js.map +0 -1
  422. package/lib/transform/generators/extract.js +0 -102
  423. package/lib/transform/generators/extract.js.map +0 -1
  424. package/lib/transform/generators/getExports.js +0 -85
  425. package/lib/transform/generators/getExports.js.map +0 -1
  426. package/lib/transform/generators/index.js +0 -19
  427. package/lib/transform/generators/index.js.map +0 -1
  428. package/lib/transform/generators/processEntrypoint.js +0 -76
  429. package/lib/transform/generators/processEntrypoint.js.map +0 -1
  430. package/lib/transform/generators/processImports.js +0 -82
  431. package/lib/transform/generators/processImports.js.map +0 -1
  432. package/lib/transform/generators/resolveImports.js +0 -221
  433. package/lib/transform/generators/resolveImports.js.map +0 -1
  434. package/lib/transform/generators/rewriteBarrelImports.js +0 -743
  435. package/lib/transform/generators/rewriteBarrelImports.js.map +0 -1
  436. package/lib/transform/generators/transform.js +0 -272
  437. package/lib/transform/generators/transform.js.map +0 -1
  438. package/lib/transform/generators/workflow.js +0 -90
  439. package/lib/transform/generators/workflow.js.map +0 -1
  440. package/lib/transform/helpers/loadWywOptions.js +0 -87
  441. package/lib/transform/helpers/loadWywOptions.js.map +0 -1
  442. package/lib/transform/helpers/withDefaultServices.js +0 -31
  443. package/lib/transform/helpers/withDefaultServices.js.map +0 -1
  444. package/lib/transform/isStaticallyEvaluatableModule.js +0 -159
  445. package/lib/transform/isStaticallyEvaluatableModule.js.map +0 -1
  446. package/lib/transform/rootLog.js +0 -9
  447. package/lib/transform/rootLog.js.map +0 -1
  448. package/lib/transform/types.js +0 -8
  449. package/lib/transform/types.js.map +0 -1
  450. package/lib/transform.js +0 -160
  451. package/lib/transform.js.map +0 -1
  452. package/lib/types.js +0 -2
  453. package/lib/types.js.map +0 -1
  454. package/lib/utils/EventEmitter.js +0 -61
  455. package/lib/utils/EventEmitter.js.map +0 -1
  456. package/lib/utils/ShakerMetadata.js +0 -9
  457. package/lib/utils/ShakerMetadata.js.map +0 -1
  458. package/lib/utils/TransformMetadata.js +0 -19
  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 -20
  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
@@ -1,724 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.default = shakerPlugin;
7
- const path_1 = __importDefault(require("path"));
8
- const shared_1 = require("@wyw-in-js/shared");
9
- const collectExportsAndImports_1 = require("../utils/collectExportsAndImports");
10
- const getFileIdx_1 = require("../utils/getFileIdx");
11
- const isRemoved_1 = require("../utils/isRemoved");
12
- const scopeHelpers_1 = require("../utils/scopeHelpers");
13
- const traversalCache_1 = require("../utils/traversalCache");
14
- const parseRequest_1 = require("../utils/parseRequest");
15
- const importOverrides_1 = require("../utils/importOverrides");
16
- const warnedDynamicImportFiles = new Set();
17
- function getNonParamBinding(exportPath, name) {
18
- const binding = exportPath.scope.getBinding(name);
19
- if (binding && binding.kind !== 'param') {
20
- return binding;
21
- }
22
- // When `exportPath` is inside a function scope, a parameter can shadow
23
- // the actual export binding (e.g. `export function fallback(fallback) {}`).
24
- // In such cases we need the binding from the declaration scope.
25
- return exportPath.scope.parent?.getBinding(name) ?? binding;
26
- }
27
- function getBindingForExport(exportPath) {
28
- if (exportPath.isIdentifier()) {
29
- return getNonParamBinding(exportPath, exportPath.node.name);
30
- }
31
- const variableDeclarator = exportPath.findParent((p) => p.isVariableDeclarator());
32
- if (variableDeclarator) {
33
- const id = variableDeclarator.get('id');
34
- if (id.isIdentifier()) {
35
- return variableDeclarator.scope.getBinding(id.node.name);
36
- }
37
- }
38
- if (exportPath.isAssignmentExpression()) {
39
- const left = exportPath.get('left');
40
- if (left.isIdentifier()) {
41
- return getNonParamBinding(exportPath, left.node.name);
42
- }
43
- }
44
- if (exportPath.isFunctionDeclaration() || exportPath.isClassDeclaration()) {
45
- const { id } = exportPath.node;
46
- if (!id) {
47
- // `export default function() {}` / `export default class {}` (anonymous)
48
- return undefined;
49
- }
50
- return getNonParamBinding(exportPath, id.name);
51
- }
52
- if (exportPath.isTSEnumDeclaration()) {
53
- return getNonParamBinding(exportPath, exportPath.node.id.name);
54
- }
55
- return undefined;
56
- }
57
- const withoutRemoved = (items) => items.filter(({ local }) => !(0, isRemoved_1.isRemoved)(local));
58
- function rearrangeExports({ types: t }, root, exportRefs, exports) {
59
- const rearranged = {
60
- ...exports,
61
- };
62
- const rootScope = root.scope;
63
- exportRefs.forEach((refs, name) => {
64
- if (refs.length <= 1) {
65
- if (refs.length === 1) {
66
- // Maybe exports is assigned to another variable?
67
- const declarator = refs[0].findParent((p) => p.isVariableDeclarator());
68
- if (!declarator) {
69
- return;
70
- }
71
- }
72
- else {
73
- return;
74
- }
75
- }
76
- const uid = rootScope.generateUid(name);
77
- // Define variable in the beginning
78
- const [declaration] = root.unshiftContainer('body', [
79
- t.variableDeclaration('var', [t.variableDeclarator(t.identifier(uid))]),
80
- ]);
81
- rootScope.registerDeclaration(declaration);
82
- const constantViolations = [];
83
- // Replace every reference with defined variable
84
- refs.forEach((ref) => {
85
- const [replaced] = ref.replaceWith(t.identifier(uid));
86
- if (replaced.isBindingIdentifier()) {
87
- constantViolations.push(replaced);
88
- }
89
- else {
90
- (0, scopeHelpers_1.reference)(replaced);
91
- }
92
- });
93
- constantViolations.forEach((id) => {
94
- rootScope.registerConstantViolation(id);
95
- });
96
- const assigmentToExport = t.expressionStatement(t.assignmentExpression('=', t.memberExpression(t.identifier('exports'), t.identifier(name)), t.identifier(uid)));
97
- // export.foo = _foo will be inserted either after the last _foo assigment or in the end of the file
98
- const body = root.get('body');
99
- const lastViolation = constantViolations[constantViolations.length - 1] ??
100
- body[body.length - 1];
101
- const pathInRoot = root
102
- .get('body')
103
- .find((n) => lastViolation.isDescendant(n));
104
- const [pushed] = pathInRoot.insertAfter(assigmentToExport);
105
- const local = pushed.get('expression.right');
106
- (0, scopeHelpers_1.reference)(local);
107
- rearranged[name] = local;
108
- });
109
- return rearranged;
110
- }
111
- const getPropertyAssignmentStatement = (ref, bindingName) => {
112
- const assignment = ref.findParent((parent) => parent.isAssignmentExpression());
113
- if (!assignment?.isAssignmentExpression())
114
- return null;
115
- const left = assignment.get('left');
116
- if (!left.isMemberExpression())
117
- return null;
118
- const object = left.get('object');
119
- if (!object.isIdentifier({ name: bindingName }))
120
- return null;
121
- const statement = assignment.parentPath;
122
- return statement?.isExpressionStatement() ? statement : null;
123
- };
124
- const isWithinAliveExport = (ref, aliveExports) => [...aliveExports].some((alive) => alive === ref || alive.isAncestor(ref));
125
- function getExportPathsForVariableDeclaration(declaration, exports) {
126
- const exportPaths = [];
127
- declaration.get('declarations').forEach((declarator) => {
128
- Object.keys(declarator.getOuterBindingIdentifiers()).forEach((name) => {
129
- const exportPath = exports[name];
130
- if (exportPath && !exportPaths.includes(exportPath)) {
131
- exportPaths.push(exportPath);
132
- }
133
- });
134
- });
135
- return exportPaths;
136
- }
137
- function getDeclaratorExportLiveness(declarator, exports, aliveExports) {
138
- const bindingNames = Object.keys(declarator.getOuterBindingIdentifiers());
139
- if (bindingNames.length === 0) {
140
- return null;
141
- }
142
- let liveness = null;
143
- for (const name of bindingNames) {
144
- const exportPath = exports[name];
145
- if (!exportPath) {
146
- return null;
147
- }
148
- const isAlive = aliveExports.has(exportPath);
149
- if (liveness === null) {
150
- liveness = isAlive;
151
- }
152
- else if (liveness !== isAlive) {
153
- return null;
154
- }
155
- }
156
- return liveness;
157
- }
158
- function hasRuntimeReferencesToEnum(path) {
159
- if (!path.isTSEnumDeclaration()) {
160
- return false;
161
- }
162
- const enumId = path.get('id');
163
- const bindingName = enumId.node.name;
164
- const program = path.scope.getProgramParent().path;
165
- let hasReference = false;
166
- program.traverse({
167
- Identifier(identifier) {
168
- if (hasReference || identifier.node.name !== bindingName) {
169
- return;
170
- }
171
- if (identifier.findParent((ancestor) => ancestor === path)) {
172
- return;
173
- }
174
- if (identifier.find((ancestor) => ancestor.isTSType() || ancestor.isFlowType())) {
175
- return;
176
- }
177
- if (!identifier.isReferencedIdentifier()) {
178
- return;
179
- }
180
- const localBinding = identifier.scope.getBinding(bindingName);
181
- if (localBinding && localBinding.path !== enumId) {
182
- return;
183
- }
184
- hasReference = true;
185
- identifier.stop();
186
- },
187
- });
188
- return hasReference;
189
- }
190
- function stripExportKeepDeclaration(path, exports, aliveExports, t) {
191
- const exportDeclaration = path.findParent((p) => p.isExportNamedDeclaration());
192
- if (!exportDeclaration)
193
- return null;
194
- const declaration = exportDeclaration.get('declaration');
195
- if (!declaration.node)
196
- return null;
197
- if (declaration.isFunctionDeclaration() ||
198
- declaration.isClassDeclaration() ||
199
- declaration.isTSEnumDeclaration()) {
200
- exportDeclaration.replaceWith(t.cloneNode(declaration.node, true));
201
- return [path];
202
- }
203
- if (declaration.isVariableDeclaration()) {
204
- const declarators = declaration.get('declarations');
205
- const staleExportPaths = getExportPathsForVariableDeclaration(declaration, exports);
206
- if (declarators.length === 1) {
207
- exportDeclaration.replaceWith(t.cloneNode(declaration.node, true));
208
- return staleExportPaths.length > 0 ? staleExportPaths : [path];
209
- }
210
- const segments = [];
211
- for (const declarator of declarators) {
212
- const isAlive = getDeclaratorExportLiveness(declarator, exports, aliveExports);
213
- if (isAlive === null) {
214
- return null;
215
- }
216
- const clonedDeclarator = t.cloneNode(declarator.node, true);
217
- const currentSegment = segments[segments.length - 1];
218
- if (currentSegment && currentSegment.alive === isAlive) {
219
- currentSegment.declarators.push(clonedDeclarator);
220
- }
221
- else {
222
- segments.push({
223
- alive: isAlive,
224
- declarators: [clonedDeclarator],
225
- });
226
- }
227
- }
228
- exportDeclaration.replaceWithMultiple(segments.map(({ alive, declarators: groupedDeclarators }) => {
229
- const groupedDeclaration = t.variableDeclaration(declaration.node.kind, groupedDeclarators);
230
- return alive
231
- ? t.exportNamedDeclaration(groupedDeclaration, [])
232
- : groupedDeclaration;
233
- }));
234
- return staleExportPaths.length > 0 ? staleExportPaths : [path];
235
- }
236
- return null;
237
- }
238
- function shakerPlugin(babel, { keepSideEffects = false, ifUnknownExport = 'skip-shaking', importOverrides, onlyExports, root, }) {
239
- const shakerLogger = shared_1.logger.extend('shaker');
240
- return {
241
- name: '@wyw-in-js/transform/shaker',
242
- pre(file) {
243
- this.filename = file.opts.filename;
244
- const log = shakerLogger.extend((0, getFileIdx_1.getFileIdx)(this.filename));
245
- log('start', `${this.filename}, onlyExports: ${onlyExports.join(',')}`);
246
- const onlyExportsSet = new Set(onlyExports);
247
- const shouldKeepOverride = (override) => !!override && ('mock' in override || 'noShake' in override);
248
- const hasImportOverride = (() => {
249
- if (!importOverrides || Object.keys(importOverrides).length === 0) {
250
- return () => false;
251
- }
252
- const cache = new Map();
253
- return (source) => {
254
- const cached = cache.get(source);
255
- if (cached !== undefined) {
256
- return cached;
257
- }
258
- const strippedSource = (0, parseRequest_1.stripQueryAndHash)(source);
259
- const direct = (0, importOverrides_1.getImportOverride)(importOverrides, source) ??
260
- (strippedSource !== source
261
- ? (0, importOverrides_1.getImportOverride)(importOverrides, strippedSource)
262
- : null);
263
- if (direct) {
264
- const result = shouldKeepOverride(direct);
265
- cache.set(source, result);
266
- return result;
267
- }
268
- const isFileImport = strippedSource.startsWith('.') ||
269
- path_1.default.isAbsolute(strippedSource);
270
- if (!isFileImport) {
271
- cache.set(source, false);
272
- return false;
273
- }
274
- try {
275
- const resolved = (0, shared_1.syncResolve)(strippedSource, this.filename, []);
276
- const { key } = (0, importOverrides_1.toImportKey)({
277
- source: strippedSource,
278
- resolved,
279
- root,
280
- });
281
- const override = (0, importOverrides_1.getImportOverride)(importOverrides, key);
282
- const result = shouldKeepOverride(override);
283
- cache.set(source, result);
284
- return result;
285
- }
286
- catch {
287
- cache.set(source, false);
288
- return false;
289
- }
290
- };
291
- })();
292
- const collected = (0, collectExportsAndImports_1.collectExportsAndImports)(file.path);
293
- const { imports } = collected;
294
- const sideEffectImports = imports.filter(collectExportsAndImports_1.sideEffectImport);
295
- log('import-and-exports', [
296
- `imports: ${imports.length} (side-effects: ${sideEffectImports.length})`,
297
- `exports: ${Object.values(collected.exports).length}`,
298
- `reexports: ${collected.reexports.length}`,
299
- ].join(', '));
300
- // We cannot just throw out exports if they are referred in the code
301
- // Let's dome some replacements
302
- const exports = rearrangeExports(babel, file.path, collected.exportRefs, collected.exports);
303
- Object.values(exports).forEach((local) => {
304
- if (local.isAssignmentExpression()) {
305
- const left = local.get('left');
306
- if (left.isIdentifier()) {
307
- // For some reason babel does not mark id in AssignmentExpression as a reference
308
- // So we need to do it manually
309
- (0, scopeHelpers_1.reference)(left, left, true);
310
- }
311
- }
312
- });
313
- const hasWywPreval = exports.__wywPreval !== undefined;
314
- const hasDefault = exports.default !== undefined;
315
- // If __wywPreval is not exported, we can remove it from onlyExports
316
- if (onlyExportsSet.has('__wywPreval') && !hasWywPreval) {
317
- onlyExportsSet.delete('__wywPreval');
318
- }
319
- if (onlyExportsSet.size === 0) {
320
- // Fast-lane: if there are no exports to keep, we can just shake out the whole file
321
- this.imports = [];
322
- this.exports = {};
323
- this.reexports = [];
324
- this.deadExports = Object.keys(exports);
325
- file.path.get('body').forEach((p) => {
326
- p.remove();
327
- });
328
- return;
329
- }
330
- const importedAsSideEffect = onlyExportsSet.has('side-effect');
331
- onlyExportsSet.delete('side-effect');
332
- // Hackaround for packages which include a 'default' export without specifying __esModule; such packages cannot be
333
- // shaken as they will break interopRequireDefault babel helper
334
- // See example in shaker-plugin.test.ts
335
- // Real-world example was found in preact/compat npm package
336
- if (onlyExportsSet.has('default') &&
337
- hasDefault &&
338
- !collected.isEsModule) {
339
- this.imports = imports;
340
- this.exports = exports;
341
- this.reexports = collected.reexports;
342
- this.deadExports = [];
343
- return;
344
- }
345
- if (!onlyExportsSet.has('*')) {
346
- // __esModule should be kept alive
347
- onlyExportsSet.add('__esModule');
348
- const aliveExports = new Set();
349
- const importNames = imports.map(({ imported }) => imported);
350
- Object.entries(exports).forEach(([exported, local]) => {
351
- if (onlyExportsSet.has(exported)) {
352
- aliveExports.add(local);
353
- return;
354
- }
355
- const binding = local.isIdentifier() && local.scope.getBinding(local.node.name);
356
- if (binding &&
357
- (binding.path.isImportSpecifier() ||
358
- binding.path.isImportDefaultSpecifier() ||
359
- binding.path.isImportNamespaceSpecifier()) &&
360
- importNames.includes(local.node.name || '')) {
361
- aliveExports.add(local);
362
- return;
363
- }
364
- if ([...aliveExports].some((alive) => alive === local)) {
365
- // It's possible to export multiple values from a single variable initializer, e.g
366
- // export const { foo, bar } = baz();
367
- // We need to treat all of them as used if any of them are used, since otherwise
368
- // we'll attempt to delete the baz() call
369
- aliveExports.add(local);
370
- }
371
- });
372
- collected.reexports.forEach((exp) => {
373
- if (onlyExportsSet.has(exp.exported)) {
374
- aliveExports.add(exp.local);
375
- }
376
- });
377
- const exportToPath = new Map();
378
- Object.entries(exports).forEach(([exported, local]) => {
379
- exportToPath.set(exported, local);
380
- });
381
- collected.reexports.forEach((exp) => {
382
- exportToPath.set(exp.exported, exp.local);
383
- });
384
- const notFoundExports = [...onlyExportsSet].filter((exp) => exp !== '__esModule' && !aliveExports.has(exportToPath.get(exp)));
385
- exportToPath.clear();
386
- const isAllExportsFound = notFoundExports.length === 0;
387
- if (!isAllExportsFound && ifUnknownExport !== 'ignore') {
388
- if (ifUnknownExport === 'error') {
389
- throw new Error(`Unknown export(s) requested: ${onlyExports.join(',')}`);
390
- }
391
- if (ifUnknownExport === 'reexport-all') {
392
- // If there are unknown exports, we have keep alive all re-exports.
393
- if (exports['*'] !== undefined) {
394
- aliveExports.add(exports['*']);
395
- }
396
- collected.reexports.forEach((exp) => {
397
- if (exp.exported === '*') {
398
- aliveExports.add(exp.local);
399
- }
400
- });
401
- }
402
- if (ifUnknownExport === 'skip-shaking') {
403
- this.imports = imports;
404
- this.exports = exports;
405
- this.reexports = collected.reexports;
406
- this.deadExports = [];
407
- return;
408
- }
409
- }
410
- const forDeleting = [
411
- ...Object.values(exports),
412
- ...collected.reexports.map((i) => i.local),
413
- ].filter((exp) => !aliveExports.has(exp));
414
- const forDeletingSet = new Set(forDeleting);
415
- const queueForDeleting = (path) => {
416
- if ((0, isRemoved_1.isRemoved)(path) || forDeletingSet.has(path)) {
417
- return false;
418
- }
419
- forDeletingSet.add(path);
420
- forDeleting.push(path);
421
- return true;
422
- };
423
- if (!keepSideEffects && !importedAsSideEffect) {
424
- // Drop side-effect imports for eval-only builds unless they were explicitly requested.
425
- // This prevents evaluating unrelated runtime code (e.g. Radix) during __wywPreval eval.
426
- sideEffectImports.forEach((i) => {
427
- if (hasImportOverride(i.source)) {
428
- return;
429
- }
430
- queueForDeleting(i.local);
431
- });
432
- }
433
- const deleted = new Set();
434
- let dereferenced = [];
435
- let changed = true;
436
- while (changed) {
437
- changed = false;
438
- // eslint-disable-next-line no-restricted-syntax
439
- for (const path of forDeleting) {
440
- if (deleted.has(path)) {
441
- // eslint-disable-next-line no-continue
442
- continue;
443
- }
444
- const binding = getBindingForExport(path);
445
- const action = (0, scopeHelpers_1.findActionForNode)(path);
446
- const parent = action?.[1];
447
- const outerReferences = (binding?.referencePaths || []).filter((ref) => {
448
- if (ref === parent || parent?.isAncestor(ref)) {
449
- return false;
450
- }
451
- return !forDeleting.some((candidate) => candidate !== path &&
452
- !(0, isRemoved_1.isRemoved)(candidate) &&
453
- (candidate === ref || candidate.isAncestor(ref)));
454
- });
455
- const bindingName = binding?.identifier.name;
456
- const removableAssignmentStatements = new Set();
457
- const removableOuterReferences = outerReferences.filter((ref) => {
458
- if (!bindingName)
459
- return false;
460
- const statement = getPropertyAssignmentStatement(ref, bindingName);
461
- if (!statement || isWithinAliveExport(statement, aliveExports)) {
462
- return false;
463
- }
464
- removableAssignmentStatements.add(statement);
465
- return true;
466
- });
467
- const blockingReferences = outerReferences.filter((ref) => !removableOuterReferences.includes(ref));
468
- if (blockingReferences.length > 0 && path.isIdentifier()) {
469
- // Temporary deref it in order to simplify further checks.
470
- (0, scopeHelpers_1.dereference)(path);
471
- dereferenced.push(path);
472
- }
473
- const strippedEnum = !deleted.has(path) && hasRuntimeReferencesToEnum(path)
474
- ? stripExportKeepDeclaration(path, exports, aliveExports, babel.types)
475
- : null;
476
- if (strippedEnum) {
477
- strippedEnum.forEach((stalePath) => {
478
- deleted.add(stalePath);
479
- });
480
- changed = true;
481
- // eslint-disable-next-line no-continue
482
- continue;
483
- }
484
- const strippedWithBlocking = !deleted.has(path) && binding && blockingReferences.length > 0
485
- ? stripExportKeepDeclaration(path, exports, aliveExports, babel.types)
486
- : null;
487
- if (strippedWithBlocking) {
488
- strippedWithBlocking.forEach((stalePath) => {
489
- deleted.add(stalePath);
490
- });
491
- changed = true;
492
- // eslint-disable-next-line no-continue
493
- continue;
494
- }
495
- if (!deleted.has(path) &&
496
- (!binding || blockingReferences.length === 0)) {
497
- // For variable declaration exports, `path` is the init expression
498
- // (not the Identifier). Other forDeleting candidates whose init
499
- // expressions are ancestors of references to this binding can
500
- // incorrectly filter them out of outerReferences. Those candidates
501
- // may later survive via stripExportKeepDeclaration, leaving a
502
- // dangling reference. Strip the export keyword but keep the
503
- // declaration so the unreferenced sweep removes it only when dead.
504
- // This only applies to expression paths (variable init), not
505
- // Identifiers (function/class declarations) which can't be
506
- // ancestors of external references.
507
- const strippedWithoutBlocking = binding && !path.isIdentifier()
508
- ? stripExportKeepDeclaration(path, exports, aliveExports, babel.types)
509
- : null;
510
- if (strippedWithoutBlocking) {
511
- strippedWithoutBlocking.forEach((stalePath) => {
512
- deleted.add(stalePath);
513
- });
514
- if (removableAssignmentStatements.size > 0) {
515
- for (const statement of removableAssignmentStatements) {
516
- if (queueForDeleting(statement)) {
517
- changed = true;
518
- }
519
- }
520
- }
521
- changed = true;
522
- // eslint-disable-next-line no-continue
523
- continue;
524
- }
525
- if (removableAssignmentStatements.size > 0) {
526
- for (const statement of removableAssignmentStatements) {
527
- if (queueForDeleting(statement)) {
528
- changed = true;
529
- }
530
- }
531
- }
532
- if (action) {
533
- (0, scopeHelpers_1.applyAction)(action);
534
- }
535
- else {
536
- (0, scopeHelpers_1.removeWithRelated)([path]);
537
- }
538
- deleted.add(path);
539
- changed = true;
540
- }
541
- }
542
- dereferenced.forEach((path) => {
543
- // If path is still alive, we need to reference it back
544
- if (!(0, isRemoved_1.isRemoved)(path)) {
545
- (0, scopeHelpers_1.reference)(path);
546
- }
547
- });
548
- dereferenced = [];
549
- // stripExportKeepDeclaration replaces ExportNamedDeclaration with
550
- // its declaration, creating new AST nodes. The old scope bindings
551
- // become stale (pointing at disconnected paths). Recrawl so
552
- // getAllBindings() returns fresh bindings with correct .referenced.
553
- file.scope.crawl();
554
- // Find and mark for deleting all unreferenced variables
555
- const unreferenced = Object.values(file.scope.getAllBindings()).filter((i) => !i.referenced);
556
- for (const binding of unreferenced) {
557
- if (binding.path.isVariableDeclarator()) {
558
- const id = binding.path.get('id');
559
- // Skip destructured patterns — removing the declarator would kill
560
- // sibling bindings that may still be referenced (e.g. export {B}
561
- // from `const [A, B] = createContext(...)` when only A is dead).
562
- if (!id.isArrayPattern() &&
563
- !id.isObjectPattern() &&
564
- !(0, isRemoved_1.isRemoved)(id) &&
565
- !forDeletingSet.has(id)) {
566
- // Drop dead variable declarations, e.g. `const foo = make();` when `foo` is no longer referenced.
567
- for (const violation of binding.constantViolations) {
568
- if (queueForDeleting(violation)) {
569
- changed = true;
570
- }
571
- }
572
- if (queueForDeleting(id)) {
573
- changed = true;
574
- }
575
- }
576
- }
577
- // Drop import specifiers whose bindings lost all references during shaking
578
- // (e.g. when we keep only __wywPreval and the rest of the module is removed).
579
- if ((binding.path.isImportSpecifier() ||
580
- binding.path.isImportDefaultSpecifier() ||
581
- binding.path.isImportNamespaceSpecifier()) &&
582
- !(0, isRemoved_1.isRemoved)(binding.path) &&
583
- !forDeletingSet.has(binding.path)) {
584
- if (queueForDeleting(binding.path)) {
585
- changed = true;
586
- }
587
- }
588
- }
589
- }
590
- }
591
- this.imports = withoutRemoved(imports);
592
- this.exports = {};
593
- this.deadExports = [];
594
- Object.entries(exports).forEach(([exported, local]) => {
595
- if ((0, isRemoved_1.isRemoved)(local)) {
596
- this.deadExports.push(exported);
597
- }
598
- else {
599
- this.exports[exported] = local;
600
- }
601
- });
602
- this.reexports = withoutRemoved(collected.reexports);
603
- },
604
- visitor: {},
605
- post(file) {
606
- const log = shakerLogger.extend((0, getFileIdx_1.getFileIdx)(file.opts.filename));
607
- const dynamicImportWarningsEnabled = Boolean(process.env.WYW_WARN_DYNAMIC_IMPORTS) &&
608
- process.env.WYW_WARN_DYNAMIC_IMPORTS !== '0' &&
609
- process.env.WYW_WARN_DYNAMIC_IMPORTS !== 'false';
610
- const filename = file.opts.filename;
611
- if (dynamicImportWarningsEnabled &&
612
- !warnedDynamicImportFiles.has(filename)) {
613
- const dynamicImports = this.imports.filter((imp) => !(0, collectExportsAndImports_1.sideEffectImport)(imp) && imp.type === 'dynamic');
614
- if (dynamicImports.length > 0) {
615
- const sources = Array.from(new Set(dynamicImports.map((imp) => imp.source))).sort();
616
- const sourcesToWarn = (() => {
617
- if (!importOverrides || Object.keys(importOverrides).length === 0) {
618
- return sources;
619
- }
620
- const shouldWarn = (source) => {
621
- const strippedSource = (0, parseRequest_1.stripQueryAndHash)(source);
622
- const direct = (0, importOverrides_1.getImportOverride)(importOverrides, source) ??
623
- (strippedSource !== source
624
- ? (0, importOverrides_1.getImportOverride)(importOverrides, strippedSource)
625
- : undefined);
626
- if (direct !== undefined) {
627
- return false;
628
- }
629
- const isFileImport = strippedSource.startsWith('.') ||
630
- path_1.default.isAbsolute(strippedSource);
631
- if (!isFileImport) {
632
- return true;
633
- }
634
- try {
635
- const resolved = (0, shared_1.syncResolve)(strippedSource, filename, []);
636
- const importKey = (0, importOverrides_1.toImportKey)({
637
- source: strippedSource,
638
- resolved,
639
- root,
640
- }).key;
641
- return ((0, importOverrides_1.getImportOverride)(importOverrides, importKey) === undefined);
642
- }
643
- catch {
644
- return true;
645
- }
646
- };
647
- return sources.filter(shouldWarn);
648
- })();
649
- if (sourcesToWarn.length > 0) {
650
- warnedDynamicImportFiles.add(filename);
651
- const overrideKeys = sourcesToWarn
652
- .map((source) => {
653
- const strippedSource = (0, parseRequest_1.stripQueryAndHash)(source);
654
- const isFileImport = strippedSource.startsWith('.') ||
655
- path_1.default.isAbsolute(strippedSource);
656
- if (!isFileImport) {
657
- return { source, key: source };
658
- }
659
- try {
660
- const resolved = (0, shared_1.syncResolve)(strippedSource, filename, []);
661
- return {
662
- source,
663
- key: (0, importOverrides_1.toImportKey)({
664
- source: strippedSource,
665
- resolved,
666
- root,
667
- }).key,
668
- };
669
- }
670
- catch {
671
- return { source, key: strippedSource };
672
- }
673
- })
674
- .filter((item, index, array) => {
675
- const firstIndexForKey = array.findIndex((i) => i.key === item.key);
676
- return firstIndexForKey === index;
677
- });
678
- const warning = [
679
- `[wyw-in-js] Dynamic imports reached prepare stage`,
680
- ``,
681
- `file: ${filename}`,
682
- `count: ${sourcesToWarn.length}`,
683
- `sources:`,
684
- ...sourcesToWarn.map((source) => ` - ${source}`),
685
- ``,
686
- `note: these imports will be resolved/processed even if they are lazy (e.g. React.lazy(() => import(...)))`,
687
- ``,
688
- `tip: if the imported module is runtime-only or heavy, mock it during evaluation via importOverrides:`,
689
- ` importOverrides: {`,
690
- ...overrideKeys.map(({ key, source }) => ` '${key}': { mock: './path/to/mock' }, // from ${source}`),
691
- ` }`,
692
- ``,
693
- `note: importOverrides affects only build-time evaluation (it does not change your bundler runtime behavior)`,
694
- ].join('\n');
695
- // eslint-disable-next-line no-console
696
- console.warn(warning);
697
- }
698
- }
699
- }
700
- const processedImports = new Set();
701
- const imports = new Map();
702
- const addImport = ({ imported, source, }) => {
703
- if (processedImports.has(`${source}:${imported}`)) {
704
- return;
705
- }
706
- if (!imports.has(source)) {
707
- imports.set(source, []);
708
- }
709
- if (imported) {
710
- imports.get(source).push(imported);
711
- }
712
- processedImports.add(`${source}:${imported}`);
713
- };
714
- this.imports.forEach(addImport);
715
- this.reexports.forEach(addImport);
716
- log('end', `remaining imports: %O`, imports);
717
- // eslint-disable-next-line no-param-reassign
718
- file.metadata.wywEvaluator = {
719
- imports,
720
- };
721
- (0, traversalCache_1.invalidateTraversalCache)(file.path);
722
- },
723
- };
724
- }