@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 +0,0 @@
1
- {"version":3,"file":"shaker.js","names":["pathLib","logger","syncResolve","collectExportsAndImports","sideEffectImport","getFileIdx","isRemoved","applyAction","dereference","findActionForNode","reference","removeWithRelated","invalidateTraversalCache","stripQueryAndHash","getImportOverride","toImportKey","warnedDynamicImportFiles","Set","getNonParamBinding","exportPath","name","binding","scope","getBinding","kind","parent","getBindingForExport","isIdentifier","node","variableDeclarator","findParent","p","isVariableDeclarator","id","get","isAssignmentExpression","left","isFunctionDeclaration","isClassDeclaration","undefined","isTSEnumDeclaration","withoutRemoved","items","filter","local","rearrangeExports","types","t","root","exportRefs","exports","rearranged","rootScope","forEach","refs","length","declarator","uid","generateUid","declaration","unshiftContainer","variableDeclaration","identifier","registerDeclaration","constantViolations","ref","replaced","replaceWith","isBindingIdentifier","push","registerConstantViolation","assigmentToExport","expressionStatement","assignmentExpression","memberExpression","body","lastViolation","pathInRoot","find","n","isDescendant","pushed","insertAfter","getPropertyAssignmentStatement","bindingName","assignment","isMemberExpression","object","statement","parentPath","isExpressionStatement","isWithinAliveExport","aliveExports","some","alive","isAncestor","getExportPathsForVariableDeclaration","exportPaths","Object","keys","getOuterBindingIdentifiers","includes","getDeclaratorExportLiveness","bindingNames","liveness","isAlive","has","hasRuntimeReferencesToEnum","path","enumId","program","getProgramParent","hasReference","traverse","Identifier","ancestor","isTSType","isFlowType","isReferencedIdentifier","localBinding","stop","stripExportKeepDeclaration","exportDeclaration","isExportNamedDeclaration","cloneNode","isVariableDeclaration","declarators","staleExportPaths","segments","clonedDeclarator","currentSegment","replaceWithMultiple","map","groupedDeclarators","groupedDeclaration","exportNamedDeclaration","shakerPlugin","babel","keepSideEffects","ifUnknownExport","importOverrides","onlyExports","shakerLogger","extend","pre","file","filename","opts","log","join","onlyExportsSet","shouldKeepOverride","override","hasImportOverride","cache","Map","source","cached","strippedSource","direct","result","set","isFileImport","startsWith","isAbsolute","resolved","key","collected","imports","sideEffectImports","values","reexports","hasWywPreval","__wywPreval","hasDefault","default","delete","size","deadExports","remove","importedAsSideEffect","isEsModule","add","importNames","imported","entries","exported","isImportSpecifier","isImportDefaultSpecifier","isImportNamespaceSpecifier","exp","exportToPath","notFoundExports","clear","isAllExportsFound","Error","forDeleting","i","forDeletingSet","queueForDeleting","deleted","dereferenced","changed","action","outerReferences","referencePaths","candidate","removableAssignmentStatements","removableOuterReferences","blockingReferences","strippedEnum","stalePath","strippedWithBlocking","strippedWithoutBlocking","crawl","unreferenced","getAllBindings","referenced","isArrayPattern","isObjectPattern","violation","visitor","post","dynamicImportWarningsEnabled","Boolean","process","env","WYW_WARN_DYNAMIC_IMPORTS","dynamicImports","imp","type","sources","Array","from","sort","sourcesToWarn","shouldWarn","importKey","overrideKeys","item","index","array","firstIndexForKey","findIndex","warning","console","warn","processedImports","addImport","metadata","wywEvaluator"],"sources":["../../src/plugins/shaker.ts"],"sourcesContent":["import pathLib from 'path';\n\nimport type { BabelFile, PluginObj, NodePath } from '@babel/core';\nimport type { Binding } from '@babel/traverse';\nimport type {\n ExportNamedDeclaration,\n Identifier,\n MemberExpression,\n Program,\n VariableDeclaration,\n VariableDeclarator,\n} from '@babel/types';\n\nimport { logger, syncResolve } from '@wyw-in-js/shared';\nimport type { ImportOverride, ImportOverrides } from '@wyw-in-js/shared';\n\nimport type { Core } from '../babel';\nimport type { IMetadata } from '../utils/ShakerMetadata';\nimport type { Exports, IState } from '../utils/collectExportsAndImports';\nimport {\n collectExportsAndImports,\n sideEffectImport,\n} from '../utils/collectExportsAndImports';\nimport { getFileIdx } from '../utils/getFileIdx';\nimport { isRemoved } from '../utils/isRemoved';\nimport {\n applyAction,\n dereference,\n findActionForNode,\n reference,\n removeWithRelated,\n} from '../utils/scopeHelpers';\nimport { invalidateTraversalCache } from '../utils/traversalCache';\nimport { stripQueryAndHash } from '../utils/parseRequest';\nimport { getImportOverride, toImportKey } from '../utils/importOverrides';\n\nconst warnedDynamicImportFiles = new Set<string>();\n\nexport interface IShakerOptions {\n ifUnknownExport?: 'error' | 'ignore' | 'reexport-all' | 'skip-shaking';\n importOverrides?: ImportOverrides;\n keepSideEffects?: boolean;\n onlyExports: string[];\n root?: string;\n}\n\ninterface NodeWithName {\n name: string;\n}\n\nfunction getNonParamBinding(\n exportPath: NodePath,\n name: string\n): Binding | undefined {\n const binding = exportPath.scope.getBinding(name);\n if (binding && (binding.kind as string) !== 'param') {\n return binding;\n }\n\n // When `exportPath` is inside a function scope, a parameter can shadow\n // the actual export binding (e.g. `export function fallback(fallback) {}`).\n // In such cases we need the binding from the declaration scope.\n return exportPath.scope.parent?.getBinding(name) ?? binding;\n}\n\nfunction getBindingForExport(exportPath: NodePath): Binding | undefined {\n if (exportPath.isIdentifier()) {\n return getNonParamBinding(exportPath, exportPath.node.name);\n }\n\n const variableDeclarator = exportPath.findParent((p) =>\n p.isVariableDeclarator()\n ) as NodePath<VariableDeclarator> | undefined;\n if (variableDeclarator) {\n const id = variableDeclarator.get('id');\n if (id.isIdentifier()) {\n return variableDeclarator.scope.getBinding(id.node.name);\n }\n }\n\n if (exportPath.isAssignmentExpression()) {\n const left = exportPath.get('left');\n if (left.isIdentifier()) {\n return getNonParamBinding(exportPath, left.node.name);\n }\n }\n\n if (exportPath.isFunctionDeclaration() || exportPath.isClassDeclaration()) {\n const { id } = exportPath.node;\n if (!id) {\n // `export default function() {}` / `export default class {}` (anonymous)\n return undefined;\n }\n return getNonParamBinding(exportPath, id.name);\n }\n\n if (exportPath.isTSEnumDeclaration()) {\n return getNonParamBinding(exportPath, exportPath.node.id.name);\n }\n\n return undefined;\n}\n\nconst withoutRemoved = <T extends { local: NodePath }>(items: T[]): T[] =>\n items.filter(({ local }) => !isRemoved(local));\n\nfunction rearrangeExports(\n { types: t }: Core,\n root: NodePath<Program>,\n exportRefs: Map<string, NodePath<MemberExpression>[]>,\n exports: Exports\n): Exports {\n const rearranged = {\n ...exports,\n };\n\n const rootScope = root.scope;\n exportRefs.forEach((refs, name) => {\n if (refs.length <= 1) {\n if (refs.length === 1) {\n // Maybe exports is assigned to another variable?\n const declarator = refs[0].findParent((p) =>\n p.isVariableDeclarator()\n ) as NodePath<VariableDeclarator> | undefined;\n\n if (!declarator) {\n return;\n }\n } else {\n return;\n }\n }\n\n const uid = rootScope.generateUid(name);\n // Define variable in the beginning\n const [declaration] = root.unshiftContainer('body', [\n t.variableDeclaration('var', [t.variableDeclarator(t.identifier(uid))]),\n ]);\n\n rootScope.registerDeclaration(declaration);\n\n const constantViolations: NodePath<Identifier>[] = [];\n // Replace every reference with defined variable\n refs.forEach((ref) => {\n const [replaced] = ref.replaceWith(t.identifier(uid));\n if (replaced.isBindingIdentifier()) {\n constantViolations.push(replaced);\n } else {\n reference(replaced);\n }\n });\n\n constantViolations.forEach((id) => {\n rootScope.registerConstantViolation(id);\n });\n\n const assigmentToExport = t.expressionStatement(\n t.assignmentExpression(\n '=',\n t.memberExpression(t.identifier('exports'), t.identifier(name)),\n t.identifier(uid)\n )\n );\n\n // export.foo = _foo will be inserted either after the last _foo assigment or in the end of the file\n const body = root.get('body');\n const lastViolation =\n constantViolations[constantViolations.length - 1] ??\n body[body.length - 1];\n const pathInRoot = root\n .get('body')\n .find((n) => lastViolation.isDescendant(n))!;\n\n const [pushed] = pathInRoot.insertAfter(assigmentToExport);\n\n const local = pushed.get('expression.right') as NodePath<Identifier>;\n reference(local);\n\n rearranged[name] = local;\n });\n\n return rearranged;\n}\n\nconst getPropertyAssignmentStatement = (\n ref: NodePath,\n bindingName: string\n): NodePath | null => {\n const assignment = ref.findParent((parent) =>\n parent.isAssignmentExpression()\n );\n if (!assignment?.isAssignmentExpression()) return null;\n\n const left = assignment.get('left');\n if (!left.isMemberExpression()) return null;\n\n const object = left.get('object');\n if (!object.isIdentifier({ name: bindingName })) return null;\n\n const statement = assignment.parentPath;\n return statement?.isExpressionStatement() ? statement : null;\n};\n\nconst isWithinAliveExport = (\n ref: NodePath,\n aliveExports: Set<NodePath>\n): boolean =>\n [...aliveExports].some((alive) => alive === ref || alive.isAncestor(ref));\n\nfunction getExportPathsForVariableDeclaration(\n declaration: NodePath<VariableDeclaration>,\n exports: Exports\n): NodePath[] {\n const exportPaths: NodePath[] = [];\n\n declaration.get('declarations').forEach((declarator) => {\n Object.keys(declarator.getOuterBindingIdentifiers()).forEach((name) => {\n const exportPath = exports[name];\n if (exportPath && !exportPaths.includes(exportPath)) {\n exportPaths.push(exportPath);\n }\n });\n });\n\n return exportPaths;\n}\n\nfunction getDeclaratorExportLiveness(\n declarator: NodePath<VariableDeclarator>,\n exports: Exports,\n aliveExports: Set<NodePath>\n): boolean | null {\n const bindingNames = Object.keys(declarator.getOuterBindingIdentifiers());\n if (bindingNames.length === 0) {\n return null;\n }\n\n let liveness: boolean | null = null;\n for (const name of bindingNames) {\n const exportPath = exports[name];\n if (!exportPath) {\n return null;\n }\n\n const isAlive = aliveExports.has(exportPath);\n if (liveness === null) {\n liveness = isAlive;\n } else if (liveness !== isAlive) {\n return null;\n }\n }\n\n return liveness;\n}\n\nfunction hasRuntimeReferencesToEnum(path: NodePath): boolean {\n if (!path.isTSEnumDeclaration()) {\n return false;\n }\n\n const enumId = path.get('id');\n const bindingName = enumId.node.name;\n const program = path.scope.getProgramParent().path as NodePath<Program>;\n\n let hasReference = false;\n program.traverse({\n Identifier(identifier) {\n if (hasReference || identifier.node.name !== bindingName) {\n return;\n }\n\n if (identifier.findParent((ancestor) => ancestor === path)) {\n return;\n }\n\n if (\n identifier.find(\n (ancestor) => ancestor.isTSType() || ancestor.isFlowType()\n )\n ) {\n return;\n }\n\n if (!identifier.isReferencedIdentifier()) {\n return;\n }\n\n const localBinding = identifier.scope.getBinding(bindingName);\n if (localBinding && localBinding.path !== enumId) {\n return;\n }\n\n hasReference = true;\n identifier.stop();\n },\n });\n\n return hasReference;\n}\n\nfunction stripExportKeepDeclaration(\n path: NodePath,\n exports: Exports,\n aliveExports: Set<NodePath>,\n t: Core['types']\n): NodePath[] | null {\n const exportDeclaration = path.findParent((p) =>\n p.isExportNamedDeclaration()\n ) as NodePath<ExportNamedDeclaration> | null;\n if (!exportDeclaration) return null;\n\n const declaration = exportDeclaration.get('declaration');\n if (!declaration.node) return null;\n\n if (\n declaration.isFunctionDeclaration() ||\n declaration.isClassDeclaration() ||\n declaration.isTSEnumDeclaration()\n ) {\n exportDeclaration.replaceWith(t.cloneNode(declaration.node, true));\n return [path];\n }\n\n if (declaration.isVariableDeclaration()) {\n const declarators = declaration.get('declarations');\n const staleExportPaths = getExportPathsForVariableDeclaration(\n declaration,\n exports\n );\n\n if (declarators.length === 1) {\n exportDeclaration.replaceWith(t.cloneNode(declaration.node, true));\n return staleExportPaths.length > 0 ? staleExportPaths : [path];\n }\n\n const segments: Array<{\n alive: boolean;\n declarators: VariableDeclarator[];\n }> = [];\n\n for (const declarator of declarators) {\n const isAlive = getDeclaratorExportLiveness(\n declarator,\n exports,\n aliveExports\n );\n if (isAlive === null) {\n return null;\n }\n\n const clonedDeclarator = t.cloneNode(declarator.node, true);\n const currentSegment = segments[segments.length - 1];\n if (currentSegment && currentSegment.alive === isAlive) {\n currentSegment.declarators.push(clonedDeclarator);\n } else {\n segments.push({\n alive: isAlive,\n declarators: [clonedDeclarator],\n });\n }\n }\n\n exportDeclaration.replaceWithMultiple(\n segments.map(({ alive, declarators: groupedDeclarators }) => {\n const groupedDeclaration = t.variableDeclaration(\n declaration.node.kind,\n groupedDeclarators\n );\n\n return alive\n ? t.exportNamedDeclaration(groupedDeclaration, [])\n : groupedDeclaration;\n })\n );\n\n return staleExportPaths.length > 0 ? staleExportPaths : [path];\n }\n\n return null;\n}\n\nexport default function shakerPlugin(\n babel: Core,\n {\n keepSideEffects = false,\n ifUnknownExport = 'skip-shaking',\n importOverrides,\n onlyExports,\n root,\n }: IShakerOptions\n): PluginObj<IState & { filename: string }> {\n const shakerLogger = logger.extend('shaker');\n\n return {\n name: '@wyw-in-js/transform/shaker',\n pre(file: BabelFile) {\n this.filename = file.opts.filename!;\n const log = shakerLogger.extend(getFileIdx(this.filename));\n\n log('start', `${this.filename}, onlyExports: ${onlyExports.join(',')}`);\n const onlyExportsSet = new Set(onlyExports);\n\n const shouldKeepOverride = (\n override: ImportOverride | undefined\n ): boolean => !!override && ('mock' in override || 'noShake' in override);\n\n const hasImportOverride = (() => {\n if (!importOverrides || Object.keys(importOverrides).length === 0) {\n return () => false;\n }\n\n const cache = new Map<string, boolean>();\n\n return (source: string): boolean => {\n const cached = cache.get(source);\n if (cached !== undefined) {\n return cached;\n }\n\n const strippedSource = stripQueryAndHash(source);\n\n const direct =\n getImportOverride(importOverrides, source) ??\n (strippedSource !== source\n ? getImportOverride(importOverrides, strippedSource)\n : null);\n if (direct) {\n const result = shouldKeepOverride(direct);\n cache.set(source, result);\n return result;\n }\n\n const isFileImport =\n strippedSource.startsWith('.') ||\n pathLib.isAbsolute(strippedSource);\n if (!isFileImport) {\n cache.set(source, false);\n return false;\n }\n\n try {\n const resolved = syncResolve(strippedSource, this.filename, []);\n const { key } = toImportKey({\n source: strippedSource,\n resolved,\n root,\n });\n const override = getImportOverride(importOverrides, key);\n const result = shouldKeepOverride(override);\n cache.set(source, result);\n return result;\n } catch {\n cache.set(source, false);\n return false;\n }\n };\n })();\n\n const collected = collectExportsAndImports(file.path);\n const { imports } = collected;\n const sideEffectImports = imports.filter(sideEffectImport);\n log(\n 'import-and-exports',\n [\n `imports: ${imports.length} (side-effects: ${sideEffectImports.length})`,\n `exports: ${Object.values(collected.exports).length}`,\n `reexports: ${collected.reexports.length}`,\n ].join(', ')\n );\n\n // We cannot just throw out exports if they are referred in the code\n // Let's dome some replacements\n const exports = rearrangeExports(\n babel,\n file.path,\n collected.exportRefs,\n collected.exports\n );\n\n Object.values(exports).forEach((local) => {\n if (local.isAssignmentExpression()) {\n const left = local.get('left');\n if (left.isIdentifier()) {\n // For some reason babel does not mark id in AssignmentExpression as a reference\n // So we need to do it manually\n reference(left, left, true);\n }\n }\n });\n\n const hasWywPreval = exports.__wywPreval !== undefined;\n const hasDefault = exports.default !== undefined;\n\n // If __wywPreval is not exported, we can remove it from onlyExports\n if (onlyExportsSet.has('__wywPreval') && !hasWywPreval) {\n onlyExportsSet.delete('__wywPreval');\n }\n\n if (onlyExportsSet.size === 0) {\n // Fast-lane: if there are no exports to keep, we can just shake out the whole file\n this.imports = [];\n this.exports = {};\n this.reexports = [];\n this.deadExports = Object.keys(exports);\n\n file.path.get('body').forEach((p) => {\n p.remove();\n });\n\n return;\n }\n\n const importedAsSideEffect = onlyExportsSet.has('side-effect');\n onlyExportsSet.delete('side-effect');\n\n // Hackaround for packages which include a 'default' export without specifying __esModule; such packages cannot be\n // shaken as they will break interopRequireDefault babel helper\n // See example in shaker-plugin.test.ts\n // Real-world example was found in preact/compat npm package\n if (\n onlyExportsSet.has('default') &&\n hasDefault &&\n !collected.isEsModule\n ) {\n this.imports = imports;\n this.exports = exports;\n this.reexports = collected.reexports;\n this.deadExports = [];\n return;\n }\n\n if (!onlyExportsSet.has('*')) {\n // __esModule should be kept alive\n onlyExportsSet.add('__esModule');\n\n const aliveExports = new Set<NodePath>();\n const importNames = imports.map(({ imported }) => imported);\n\n Object.entries(exports).forEach(([exported, local]) => {\n if (onlyExportsSet.has(exported)) {\n aliveExports.add(local);\n return;\n }\n\n const binding =\n local.isIdentifier() && local.scope.getBinding(local.node.name);\n\n if (\n binding &&\n (binding.path.isImportSpecifier() ||\n binding.path.isImportDefaultSpecifier() ||\n binding.path.isImportNamespaceSpecifier()) &&\n importNames.includes((local.node as NodeWithName).name || '')\n ) {\n aliveExports.add(local);\n return;\n }\n\n if ([...aliveExports].some((alive) => alive === local)) {\n // It's possible to export multiple values from a single variable initializer, e.g\n // export const { foo, bar } = baz();\n // We need to treat all of them as used if any of them are used, since otherwise\n // we'll attempt to delete the baz() call\n aliveExports.add(local);\n }\n });\n\n collected.reexports.forEach((exp) => {\n if (onlyExportsSet.has(exp.exported)) {\n aliveExports.add(exp.local);\n }\n });\n\n const exportToPath = new Map<string, NodePath>();\n Object.entries(exports).forEach(([exported, local]) => {\n exportToPath.set(exported, local);\n });\n\n collected.reexports.forEach((exp) => {\n exportToPath.set(exp.exported, exp.local);\n });\n\n const notFoundExports = [...onlyExportsSet].filter(\n (exp) =>\n exp !== '__esModule' && !aliveExports.has(exportToPath.get(exp)!)\n );\n exportToPath.clear();\n\n const isAllExportsFound = notFoundExports.length === 0;\n if (!isAllExportsFound && ifUnknownExport !== 'ignore') {\n if (ifUnknownExport === 'error') {\n throw new Error(\n `Unknown export(s) requested: ${onlyExports.join(',')}`\n );\n }\n\n if (ifUnknownExport === 'reexport-all') {\n // If there are unknown exports, we have keep alive all re-exports.\n if (exports['*'] !== undefined) {\n aliveExports.add(exports['*']);\n }\n\n collected.reexports.forEach((exp) => {\n if (exp.exported === '*') {\n aliveExports.add(exp.local);\n }\n });\n }\n\n if (ifUnknownExport === 'skip-shaking') {\n this.imports = imports;\n this.exports = exports;\n this.reexports = collected.reexports;\n this.deadExports = [];\n\n return;\n }\n }\n\n const forDeleting = [\n ...Object.values(exports),\n ...collected.reexports.map((i) => i.local),\n ].filter((exp) => !aliveExports.has(exp));\n\n const forDeletingSet = new Set<NodePath>(forDeleting);\n const queueForDeleting = (path: NodePath): boolean => {\n if (isRemoved(path) || forDeletingSet.has(path)) {\n return false;\n }\n\n forDeletingSet.add(path);\n forDeleting.push(path);\n return true;\n };\n\n if (!keepSideEffects && !importedAsSideEffect) {\n // Drop side-effect imports for eval-only builds unless they were explicitly requested.\n // This prevents evaluating unrelated runtime code (e.g. Radix) during __wywPreval eval.\n sideEffectImports.forEach((i) => {\n if (hasImportOverride(i.source)) {\n return;\n }\n\n queueForDeleting(i.local);\n });\n }\n\n const deleted = new Set<NodePath>();\n\n let dereferenced: NodePath<Identifier>[] = [];\n let changed = true;\n while (changed) {\n changed = false;\n // eslint-disable-next-line no-restricted-syntax\n for (const path of forDeleting) {\n if (deleted.has(path)) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n const binding = getBindingForExport(path);\n const action = findActionForNode(path);\n const parent = action?.[1];\n const outerReferences = (binding?.referencePaths || []).filter(\n (ref) => {\n if (ref === parent || parent?.isAncestor(ref)) {\n return false;\n }\n\n return !forDeleting.some(\n (candidate) =>\n candidate !== path &&\n !isRemoved(candidate) &&\n (candidate === ref || candidate.isAncestor(ref))\n );\n }\n );\n const bindingName = binding?.identifier.name;\n const removableAssignmentStatements = new Set<NodePath>();\n const removableOuterReferences = outerReferences.filter((ref) => {\n if (!bindingName) return false;\n const statement = getPropertyAssignmentStatement(\n ref,\n bindingName\n );\n if (!statement || isWithinAliveExport(statement, aliveExports)) {\n return false;\n }\n\n removableAssignmentStatements.add(statement);\n return true;\n });\n\n const blockingReferences = outerReferences.filter(\n (ref) => !removableOuterReferences.includes(ref)\n );\n\n if (blockingReferences.length > 0 && path.isIdentifier()) {\n // Temporary deref it in order to simplify further checks.\n dereference(path);\n dereferenced.push(path);\n }\n\n const strippedEnum =\n !deleted.has(path) && hasRuntimeReferencesToEnum(path)\n ? stripExportKeepDeclaration(\n path,\n exports,\n aliveExports,\n babel.types\n )\n : null;\n\n if (strippedEnum) {\n strippedEnum.forEach((stalePath) => {\n deleted.add(stalePath);\n });\n changed = true;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n const strippedWithBlocking =\n !deleted.has(path) && binding && blockingReferences.length > 0\n ? stripExportKeepDeclaration(\n path,\n exports,\n aliveExports,\n babel.types\n )\n : null;\n\n if (strippedWithBlocking) {\n strippedWithBlocking.forEach((stalePath) => {\n deleted.add(stalePath);\n });\n changed = true;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (\n !deleted.has(path) &&\n (!binding || blockingReferences.length === 0)\n ) {\n // For variable declaration exports, `path` is the init expression\n // (not the Identifier). Other forDeleting candidates whose init\n // expressions are ancestors of references to this binding can\n // incorrectly filter them out of outerReferences. Those candidates\n // may later survive via stripExportKeepDeclaration, leaving a\n // dangling reference. Strip the export keyword but keep the\n // declaration so the unreferenced sweep removes it only when dead.\n // This only applies to expression paths (variable init), not\n // Identifiers (function/class declarations) which can't be\n // ancestors of external references.\n const strippedWithoutBlocking =\n binding && !path.isIdentifier()\n ? stripExportKeepDeclaration(\n path,\n exports,\n aliveExports,\n babel.types\n )\n : null;\n\n if (strippedWithoutBlocking) {\n strippedWithoutBlocking.forEach((stalePath) => {\n deleted.add(stalePath);\n });\n if (removableAssignmentStatements.size > 0) {\n for (const statement of removableAssignmentStatements) {\n if (queueForDeleting(statement)) {\n changed = true;\n }\n }\n }\n\n changed = true;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (removableAssignmentStatements.size > 0) {\n for (const statement of removableAssignmentStatements) {\n if (queueForDeleting(statement)) {\n changed = true;\n }\n }\n }\n\n if (action) {\n applyAction(action);\n } else {\n removeWithRelated([path]);\n }\n\n deleted.add(path);\n changed = true;\n }\n }\n\n dereferenced.forEach((path) => {\n // If path is still alive, we need to reference it back\n if (!isRemoved(path)) {\n reference(path);\n }\n });\n\n dereferenced = [];\n\n // stripExportKeepDeclaration replaces ExportNamedDeclaration with\n // its declaration, creating new AST nodes. The old scope bindings\n // become stale (pointing at disconnected paths). Recrawl so\n // getAllBindings() returns fresh bindings with correct .referenced.\n file.scope.crawl();\n\n // Find and mark for deleting all unreferenced variables\n const unreferenced = Object.values(\n file.scope.getAllBindings()\n ).filter((i) => !i.referenced);\n\n for (const binding of unreferenced) {\n if (binding.path.isVariableDeclarator()) {\n const id = binding.path.get('id');\n // Skip destructured patterns — removing the declarator would kill\n // sibling bindings that may still be referenced (e.g. export {B}\n // from `const [A, B] = createContext(...)` when only A is dead).\n if (\n !id.isArrayPattern() &&\n !id.isObjectPattern() &&\n !isRemoved(id) &&\n !forDeletingSet.has(id)\n ) {\n // Drop dead variable declarations, e.g. `const foo = make();` when `foo` is no longer referenced.\n for (const violation of binding.constantViolations) {\n if (queueForDeleting(violation)) {\n changed = true;\n }\n }\n\n if (queueForDeleting(id)) {\n changed = true;\n }\n }\n }\n\n // Drop import specifiers whose bindings lost all references during shaking\n // (e.g. when we keep only __wywPreval and the rest of the module is removed).\n if (\n (binding.path.isImportSpecifier() ||\n binding.path.isImportDefaultSpecifier() ||\n binding.path.isImportNamespaceSpecifier()) &&\n !isRemoved(binding.path) &&\n !forDeletingSet.has(binding.path)\n ) {\n if (queueForDeleting(binding.path)) {\n changed = true;\n }\n }\n }\n }\n }\n\n this.imports = withoutRemoved(imports);\n this.exports = {};\n this.deadExports = [];\n\n Object.entries(exports).forEach(([exported, local]) => {\n if (isRemoved(local)) {\n this.deadExports.push(exported);\n } else {\n this.exports[exported] = local;\n }\n });\n\n this.reexports = withoutRemoved(collected.reexports);\n },\n visitor: {},\n post(file: BabelFile) {\n const log = shakerLogger.extend(getFileIdx(file.opts.filename!));\n\n const dynamicImportWarningsEnabled =\n Boolean(process.env.WYW_WARN_DYNAMIC_IMPORTS) &&\n process.env.WYW_WARN_DYNAMIC_IMPORTS !== '0' &&\n process.env.WYW_WARN_DYNAMIC_IMPORTS !== 'false';\n\n const filename = file.opts.filename!;\n\n if (\n dynamicImportWarningsEnabled &&\n !warnedDynamicImportFiles.has(filename)\n ) {\n const dynamicImports = this.imports.filter(\n (imp) => !sideEffectImport(imp) && imp.type === 'dynamic'\n );\n if (dynamicImports.length > 0) {\n const sources = Array.from(\n new Set(dynamicImports.map((imp) => imp.source))\n ).sort();\n const sourcesToWarn = (() => {\n if (!importOverrides || Object.keys(importOverrides).length === 0) {\n return sources;\n }\n\n const shouldWarn = (source: string): boolean => {\n const strippedSource = stripQueryAndHash(source);\n const direct =\n getImportOverride(importOverrides, source) ??\n (strippedSource !== source\n ? getImportOverride(importOverrides, strippedSource)\n : undefined);\n if (direct !== undefined) {\n return false;\n }\n\n const isFileImport =\n strippedSource.startsWith('.') ||\n pathLib.isAbsolute(strippedSource);\n if (!isFileImport) {\n return true;\n }\n\n try {\n const resolved = syncResolve(strippedSource, filename, []);\n const importKey = toImportKey({\n source: strippedSource,\n resolved,\n root,\n }).key;\n return (\n getImportOverride(importOverrides, importKey) === undefined\n );\n } catch {\n return true;\n }\n };\n\n return sources.filter(shouldWarn);\n })();\n\n if (sourcesToWarn.length > 0) {\n warnedDynamicImportFiles.add(filename);\n const overrideKeys = sourcesToWarn\n .map((source) => {\n const strippedSource = stripQueryAndHash(source);\n const isFileImport =\n strippedSource.startsWith('.') ||\n pathLib.isAbsolute(strippedSource);\n\n if (!isFileImport) {\n return { source, key: source };\n }\n\n try {\n const resolved = syncResolve(strippedSource, filename, []);\n return {\n source,\n key: toImportKey({\n source: strippedSource,\n resolved,\n root,\n }).key,\n };\n } catch {\n return { source, key: strippedSource };\n }\n })\n .filter((item, index, array) => {\n const firstIndexForKey = array.findIndex(\n (i) => i.key === item.key\n );\n return firstIndexForKey === index;\n });\n const warning = [\n `[wyw-in-js] Dynamic imports reached prepare stage`,\n ``,\n `file: ${filename}`,\n `count: ${sourcesToWarn.length}`,\n `sources:`,\n ...sourcesToWarn.map((source) => ` - ${source}`),\n ``,\n `note: these imports will be resolved/processed even if they are lazy (e.g. React.lazy(() => import(...)))`,\n ``,\n `tip: if the imported module is runtime-only or heavy, mock it during evaluation via importOverrides:`,\n ` importOverrides: {`,\n ...overrideKeys.map(\n ({ key, source }) =>\n ` '${key}': { mock: './path/to/mock' }, // from ${source}`\n ),\n ` }`,\n ``,\n `note: importOverrides affects only build-time evaluation (it does not change your bundler runtime behavior)`,\n ].join('\\n');\n // eslint-disable-next-line no-console\n console.warn(warning);\n }\n }\n }\n\n const processedImports = new Set<string>();\n const imports = new Map<string, string[]>();\n const addImport = ({\n imported,\n source,\n }: {\n imported: string;\n source: string;\n }) => {\n if (processedImports.has(`${source}:${imported}`)) {\n return;\n }\n\n if (!imports.has(source)) {\n imports.set(source, []);\n }\n\n if (imported) {\n imports.get(source)!.push(imported);\n }\n\n processedImports.add(`${source}:${imported}`);\n };\n\n this.imports.forEach(addImport);\n this.reexports.forEach(addImport);\n\n log('end', `remaining imports: %O`, imports);\n\n // eslint-disable-next-line no-param-reassign\n (file.metadata as IMetadata).wywEvaluator = {\n imports,\n };\n\n invalidateTraversalCache(file.path);\n },\n };\n}\n"],"mappings":"AAAA,OAAOA,OAAO,MAAM,MAAM;AAa1B,SAASC,MAAM,EAAEC,WAAW,QAAQ,mBAAmB;AAMvD,SACEC,wBAAwB,EACxBC,gBAAgB,QACX,mCAAmC;AAC1C,SAASC,UAAU,QAAQ,qBAAqB;AAChD,SAASC,SAAS,QAAQ,oBAAoB;AAC9C,SACEC,WAAW,EACXC,WAAW,EACXC,iBAAiB,EACjBC,SAAS,EACTC,iBAAiB,QACZ,uBAAuB;AAC9B,SAASC,wBAAwB,QAAQ,yBAAyB;AAClE,SAASC,iBAAiB,QAAQ,uBAAuB;AACzD,SAASC,iBAAiB,EAAEC,WAAW,QAAQ,0BAA0B;AAEzE,MAAMC,wBAAwB,GAAG,IAAIC,GAAG,CAAS,CAAC;AAclD,SAASC,kBAAkBA,CACzBC,UAAoB,EACpBC,IAAY,EACS;EACrB,MAAMC,OAAO,GAAGF,UAAU,CAACG,KAAK,CAACC,UAAU,CAACH,IAAI,CAAC;EACjD,IAAIC,OAAO,IAAKA,OAAO,CAACG,IAAI,KAAgB,OAAO,EAAE;IACnD,OAAOH,OAAO;EAChB;;EAEA;EACA;EACA;EACA,OAAOF,UAAU,CAACG,KAAK,CAACG,MAAM,EAAEF,UAAU,CAACH,IAAI,CAAC,IAAIC,OAAO;AAC7D;AAEA,SAASK,mBAAmBA,CAACP,UAAoB,EAAuB;EACtE,IAAIA,UAAU,CAACQ,YAAY,CAAC,CAAC,EAAE;IAC7B,OAAOT,kBAAkB,CAACC,UAAU,EAAEA,UAAU,CAACS,IAAI,CAACR,IAAI,CAAC;EAC7D;EAEA,MAAMS,kBAAkB,GAAGV,UAAU,CAACW,UAAU,CAAEC,CAAC,IACjDA,CAAC,CAACC,oBAAoB,CAAC,CACzB,CAA6C;EAC7C,IAAIH,kBAAkB,EAAE;IACtB,MAAMI,EAAE,GAAGJ,kBAAkB,CAACK,GAAG,CAAC,IAAI,CAAC;IACvC,IAAID,EAAE,CAACN,YAAY,CAAC,CAAC,EAAE;MACrB,OAAOE,kBAAkB,CAACP,KAAK,CAACC,UAAU,CAACU,EAAE,CAACL,IAAI,CAACR,IAAI,CAAC;IAC1D;EACF;EAEA,IAAID,UAAU,CAACgB,sBAAsB,CAAC,CAAC,EAAE;IACvC,MAAMC,IAAI,GAAGjB,UAAU,CAACe,GAAG,CAAC,MAAM,CAAC;IACnC,IAAIE,IAAI,CAACT,YAAY,CAAC,CAAC,EAAE;MACvB,OAAOT,kBAAkB,CAACC,UAAU,EAAEiB,IAAI,CAACR,IAAI,CAACR,IAAI,CAAC;IACvD;EACF;EAEA,IAAID,UAAU,CAACkB,qBAAqB,CAAC,CAAC,IAAIlB,UAAU,CAACmB,kBAAkB,CAAC,CAAC,EAAE;IACzE,MAAM;MAAEL;IAAG,CAAC,GAAGd,UAAU,CAACS,IAAI;IAC9B,IAAI,CAACK,EAAE,EAAE;MACP;MACA,OAAOM,SAAS;IAClB;IACA,OAAOrB,kBAAkB,CAACC,UAAU,EAAEc,EAAE,CAACb,IAAI,CAAC;EAChD;EAEA,IAAID,UAAU,CAACqB,mBAAmB,CAAC,CAAC,EAAE;IACpC,OAAOtB,kBAAkB,CAACC,UAAU,EAAEA,UAAU,CAACS,IAAI,CAACK,EAAE,CAACb,IAAI,CAAC;EAChE;EAEA,OAAOmB,SAAS;AAClB;AAEA,MAAME,cAAc,GAAmCC,KAAU,IAC/DA,KAAK,CAACC,MAAM,CAAC,CAAC;EAAEC;AAAM,CAAC,KAAK,CAACtC,SAAS,CAACsC,KAAK,CAAC,CAAC;AAEhD,SAASC,gBAAgBA,CACvB;EAAEC,KAAK,EAAEC;AAAQ,CAAC,EAClBC,IAAuB,EACvBC,UAAqD,EACrDC,OAAgB,EACP;EACT,MAAMC,UAAU,GAAG;IACjB,GAAGD;EACL,CAAC;EAED,MAAME,SAAS,GAAGJ,IAAI,CAAC1B,KAAK;EAC5B2B,UAAU,CAACI,OAAO,CAAC,CAACC,IAAI,EAAElC,IAAI,KAAK;IACjC,IAAIkC,IAAI,CAACC,MAAM,IAAI,CAAC,EAAE;MACpB,IAAID,IAAI,CAACC,MAAM,KAAK,CAAC,EAAE;QACrB;QACA,MAAMC,UAAU,GAAGF,IAAI,CAAC,CAAC,CAAC,CAACxB,UAAU,CAAEC,CAAC,IACtCA,CAAC,CAACC,oBAAoB,CAAC,CACzB,CAA6C;QAE7C,IAAI,CAACwB,UAAU,EAAE;UACf;QACF;MACF,CAAC,MAAM;QACL;MACF;IACF;IAEA,MAAMC,GAAG,GAAGL,SAAS,CAACM,WAAW,CAACtC,IAAI,CAAC;IACvC;IACA,MAAM,CAACuC,WAAW,CAAC,GAAGX,IAAI,CAACY,gBAAgB,CAAC,MAAM,EAAE,CAClDb,CAAC,CAACc,mBAAmB,CAAC,KAAK,EAAE,CAACd,CAAC,CAAClB,kBAAkB,CAACkB,CAAC,CAACe,UAAU,CAACL,GAAG,CAAC,CAAC,CAAC,CAAC,CACxE,CAAC;IAEFL,SAAS,CAACW,mBAAmB,CAACJ,WAAW,CAAC;IAE1C,MAAMK,kBAA0C,GAAG,EAAE;IACrD;IACAV,IAAI,CAACD,OAAO,CAAEY,GAAG,IAAK;MACpB,MAAM,CAACC,QAAQ,CAAC,GAAGD,GAAG,CAACE,WAAW,CAACpB,CAAC,CAACe,UAAU,CAACL,GAAG,CAAC,CAAC;MACrD,IAAIS,QAAQ,CAACE,mBAAmB,CAAC,CAAC,EAAE;QAClCJ,kBAAkB,CAACK,IAAI,CAACH,QAAQ,CAAC;MACnC,CAAC,MAAM;QACLxD,SAAS,CAACwD,QAAQ,CAAC;MACrB;IACF,CAAC,CAAC;IAEFF,kBAAkB,CAACX,OAAO,CAAEpB,EAAE,IAAK;MACjCmB,SAAS,CAACkB,yBAAyB,CAACrC,EAAE,CAAC;IACzC,CAAC,CAAC;IAEF,MAAMsC,iBAAiB,GAAGxB,CAAC,CAACyB,mBAAmB,CAC7CzB,CAAC,CAAC0B,oBAAoB,CACpB,GAAG,EACH1B,CAAC,CAAC2B,gBAAgB,CAAC3B,CAAC,CAACe,UAAU,CAAC,SAAS,CAAC,EAAEf,CAAC,CAACe,UAAU,CAAC1C,IAAI,CAAC,CAAC,EAC/D2B,CAAC,CAACe,UAAU,CAACL,GAAG,CAClB,CACF,CAAC;;IAED;IACA,MAAMkB,IAAI,GAAG3B,IAAI,CAACd,GAAG,CAAC,MAAM,CAAC;IAC7B,MAAM0C,aAAa,GACjBZ,kBAAkB,CAACA,kBAAkB,CAACT,MAAM,GAAG,CAAC,CAAC,IACjDoB,IAAI,CAACA,IAAI,CAACpB,MAAM,GAAG,CAAC,CAAC;IACvB,MAAMsB,UAAU,GAAG7B,IAAI,CACpBd,GAAG,CAAC,MAAM,CAAC,CACX4C,IAAI,CAAEC,CAAC,IAAKH,aAAa,CAACI,YAAY,CAACD,CAAC,CAAC,CAAE;IAE9C,MAAM,CAACE,MAAM,CAAC,GAAGJ,UAAU,CAACK,WAAW,CAACX,iBAAiB,CAAC;IAE1D,MAAM3B,KAAK,GAAGqC,MAAM,CAAC/C,GAAG,CAAC,kBAAkB,CAAyB;IACpExB,SAAS,CAACkC,KAAK,CAAC;IAEhBO,UAAU,CAAC/B,IAAI,CAAC,GAAGwB,KAAK;EAC1B,CAAC,CAAC;EAEF,OAAOO,UAAU;AACnB;AAEA,MAAMgC,8BAA8B,GAAGA,CACrClB,GAAa,EACbmB,WAAmB,KACC;EACpB,MAAMC,UAAU,GAAGpB,GAAG,CAACnC,UAAU,CAAEL,MAAM,IACvCA,MAAM,CAACU,sBAAsB,CAAC,CAChC,CAAC;EACD,IAAI,CAACkD,UAAU,EAAElD,sBAAsB,CAAC,CAAC,EAAE,OAAO,IAAI;EAEtD,MAAMC,IAAI,GAAGiD,UAAU,CAACnD,GAAG,CAAC,MAAM,CAAC;EACnC,IAAI,CAACE,IAAI,CAACkD,kBAAkB,CAAC,CAAC,EAAE,OAAO,IAAI;EAE3C,MAAMC,MAAM,GAAGnD,IAAI,CAACF,GAAG,CAAC,QAAQ,CAAC;EACjC,IAAI,CAACqD,MAAM,CAAC5D,YAAY,CAAC;IAAEP,IAAI,EAAEgE;EAAY,CAAC,CAAC,EAAE,OAAO,IAAI;EAE5D,MAAMI,SAAS,GAAGH,UAAU,CAACI,UAAU;EACvC,OAAOD,SAAS,EAAEE,qBAAqB,CAAC,CAAC,GAAGF,SAAS,GAAG,IAAI;AAC9D,CAAC;AAED,MAAMG,mBAAmB,GAAGA,CAC1B1B,GAAa,EACb2B,YAA2B,KAE3B,CAAC,GAAGA,YAAY,CAAC,CAACC,IAAI,CAAEC,KAAK,IAAKA,KAAK,KAAK7B,GAAG,IAAI6B,KAAK,CAACC,UAAU,CAAC9B,GAAG,CAAC,CAAC;AAE3E,SAAS+B,oCAAoCA,CAC3CrC,WAA0C,EAC1CT,OAAgB,EACJ;EACZ,MAAM+C,WAAuB,GAAG,EAAE;EAElCtC,WAAW,CAACzB,GAAG,CAAC,cAAc,CAAC,CAACmB,OAAO,CAAEG,UAAU,IAAK;IACtD0C,MAAM,CAACC,IAAI,CAAC3C,UAAU,CAAC4C,0BAA0B,CAAC,CAAC,CAAC,CAAC/C,OAAO,CAAEjC,IAAI,IAAK;MACrE,MAAMD,UAAU,GAAG+B,OAAO,CAAC9B,IAAI,CAAC;MAChC,IAAID,UAAU,IAAI,CAAC8E,WAAW,CAACI,QAAQ,CAAClF,UAAU,CAAC,EAAE;QACnD8E,WAAW,CAAC5B,IAAI,CAAClD,UAAU,CAAC;MAC9B;IACF,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,OAAO8E,WAAW;AACpB;AAEA,SAASK,2BAA2BA,CAClC9C,UAAwC,EACxCN,OAAgB,EAChB0C,YAA2B,EACX;EAChB,MAAMW,YAAY,GAAGL,MAAM,CAACC,IAAI,CAAC3C,UAAU,CAAC4C,0BAA0B,CAAC,CAAC,CAAC;EACzE,IAAIG,YAAY,CAAChD,MAAM,KAAK,CAAC,EAAE;IAC7B,OAAO,IAAI;EACb;EAEA,IAAIiD,QAAwB,GAAG,IAAI;EACnC,KAAK,MAAMpF,IAAI,IAAImF,YAAY,EAAE;IAC/B,MAAMpF,UAAU,GAAG+B,OAAO,CAAC9B,IAAI,CAAC;IAChC,IAAI,CAACD,UAAU,EAAE;MACf,OAAO,IAAI;IACb;IAEA,MAAMsF,OAAO,GAAGb,YAAY,CAACc,GAAG,CAACvF,UAAU,CAAC;IAC5C,IAAIqF,QAAQ,KAAK,IAAI,EAAE;MACrBA,QAAQ,GAAGC,OAAO;IACpB,CAAC,MAAM,IAAID,QAAQ,KAAKC,OAAO,EAAE;MAC/B,OAAO,IAAI;IACb;EACF;EAEA,OAAOD,QAAQ;AACjB;AAEA,SAASG,0BAA0BA,CAACC,IAAc,EAAW;EAC3D,IAAI,CAACA,IAAI,CAACpE,mBAAmB,CAAC,CAAC,EAAE;IAC/B,OAAO,KAAK;EACd;EAEA,MAAMqE,MAAM,GAAGD,IAAI,CAAC1E,GAAG,CAAC,IAAI,CAAC;EAC7B,MAAMkD,WAAW,GAAGyB,MAAM,CAACjF,IAAI,CAACR,IAAI;EACpC,MAAM0F,OAAO,GAAGF,IAAI,CAACtF,KAAK,CAACyF,gBAAgB,CAAC,CAAC,CAACH,IAAyB;EAEvE,IAAII,YAAY,GAAG,KAAK;EACxBF,OAAO,CAACG,QAAQ,CAAC;IACfC,UAAUA,CAACpD,UAAU,EAAE;MACrB,IAAIkD,YAAY,IAAIlD,UAAU,CAAClC,IAAI,CAACR,IAAI,KAAKgE,WAAW,EAAE;QACxD;MACF;MAEA,IAAItB,UAAU,CAAChC,UAAU,CAAEqF,QAAQ,IAAKA,QAAQ,KAAKP,IAAI,CAAC,EAAE;QAC1D;MACF;MAEA,IACE9C,UAAU,CAACgB,IAAI,CACZqC,QAAQ,IAAKA,QAAQ,CAACC,QAAQ,CAAC,CAAC,IAAID,QAAQ,CAACE,UAAU,CAAC,CAC3D,CAAC,EACD;QACA;MACF;MAEA,IAAI,CAACvD,UAAU,CAACwD,sBAAsB,CAAC,CAAC,EAAE;QACxC;MACF;MAEA,MAAMC,YAAY,GAAGzD,UAAU,CAACxC,KAAK,CAACC,UAAU,CAAC6D,WAAW,CAAC;MAC7D,IAAImC,YAAY,IAAIA,YAAY,CAACX,IAAI,KAAKC,MAAM,EAAE;QAChD;MACF;MAEAG,YAAY,GAAG,IAAI;MACnBlD,UAAU,CAAC0D,IAAI,CAAC,CAAC;IACnB;EACF,CAAC,CAAC;EAEF,OAAOR,YAAY;AACrB;AAEA,SAASS,0BAA0BA,CACjCb,IAAc,EACd1D,OAAgB,EAChB0C,YAA2B,EAC3B7C,CAAgB,EACG;EACnB,MAAM2E,iBAAiB,GAAGd,IAAI,CAAC9E,UAAU,CAAEC,CAAC,IAC1CA,CAAC,CAAC4F,wBAAwB,CAAC,CAC7B,CAA4C;EAC5C,IAAI,CAACD,iBAAiB,EAAE,OAAO,IAAI;EAEnC,MAAM/D,WAAW,GAAG+D,iBAAiB,CAACxF,GAAG,CAAC,aAAa,CAAC;EACxD,IAAI,CAACyB,WAAW,CAAC/B,IAAI,EAAE,OAAO,IAAI;EAElC,IACE+B,WAAW,CAACtB,qBAAqB,CAAC,CAAC,IACnCsB,WAAW,CAACrB,kBAAkB,CAAC,CAAC,IAChCqB,WAAW,CAACnB,mBAAmB,CAAC,CAAC,EACjC;IACAkF,iBAAiB,CAACvD,WAAW,CAACpB,CAAC,CAAC6E,SAAS,CAACjE,WAAW,CAAC/B,IAAI,EAAE,IAAI,CAAC,CAAC;IAClE,OAAO,CAACgF,IAAI,CAAC;EACf;EAEA,IAAIjD,WAAW,CAACkE,qBAAqB,CAAC,CAAC,EAAE;IACvC,MAAMC,WAAW,GAAGnE,WAAW,CAACzB,GAAG,CAAC,cAAc,CAAC;IACnD,MAAM6F,gBAAgB,GAAG/B,oCAAoC,CAC3DrC,WAAW,EACXT,OACF,CAAC;IAED,IAAI4E,WAAW,CAACvE,MAAM,KAAK,CAAC,EAAE;MAC5BmE,iBAAiB,CAACvD,WAAW,CAACpB,CAAC,CAAC6E,SAAS,CAACjE,WAAW,CAAC/B,IAAI,EAAE,IAAI,CAAC,CAAC;MAClE,OAAOmG,gBAAgB,CAACxE,MAAM,GAAG,CAAC,GAAGwE,gBAAgB,GAAG,CAACnB,IAAI,CAAC;IAChE;IAEA,MAAMoB,QAGJ,GAAG,EAAE;IAEP,KAAK,MAAMxE,UAAU,IAAIsE,WAAW,EAAE;MACpC,MAAMrB,OAAO,GAAGH,2BAA2B,CACzC9C,UAAU,EACVN,OAAO,EACP0C,YACF,CAAC;MACD,IAAIa,OAAO,KAAK,IAAI,EAAE;QACpB,OAAO,IAAI;MACb;MAEA,MAAMwB,gBAAgB,GAAGlF,CAAC,CAAC6E,SAAS,CAACpE,UAAU,CAAC5B,IAAI,EAAE,IAAI,CAAC;MAC3D,MAAMsG,cAAc,GAAGF,QAAQ,CAACA,QAAQ,CAACzE,MAAM,GAAG,CAAC,CAAC;MACpD,IAAI2E,cAAc,IAAIA,cAAc,CAACpC,KAAK,KAAKW,OAAO,EAAE;QACtDyB,cAAc,CAACJ,WAAW,CAACzD,IAAI,CAAC4D,gBAAgB,CAAC;MACnD,CAAC,MAAM;QACLD,QAAQ,CAAC3D,IAAI,CAAC;UACZyB,KAAK,EAAEW,OAAO;UACdqB,WAAW,EAAE,CAACG,gBAAgB;QAChC,CAAC,CAAC;MACJ;IACF;IAEAP,iBAAiB,CAACS,mBAAmB,CACnCH,QAAQ,CAACI,GAAG,CAAC,CAAC;MAAEtC,KAAK;MAAEgC,WAAW,EAAEO;IAAmB,CAAC,KAAK;MAC3D,MAAMC,kBAAkB,GAAGvF,CAAC,CAACc,mBAAmB,CAC9CF,WAAW,CAAC/B,IAAI,CAACJ,IAAI,EACrB6G,kBACF,CAAC;MAED,OAAOvC,KAAK,GACR/C,CAAC,CAACwF,sBAAsB,CAACD,kBAAkB,EAAE,EAAE,CAAC,GAChDA,kBAAkB;IACxB,CAAC,CACH,CAAC;IAED,OAAOP,gBAAgB,CAACxE,MAAM,GAAG,CAAC,GAAGwE,gBAAgB,GAAG,CAACnB,IAAI,CAAC;EAChE;EAEA,OAAO,IAAI;AACb;AAEA,eAAe,SAAS4B,YAAYA,CAClCC,KAAW,EACX;EACEC,eAAe,GAAG,KAAK;EACvBC,eAAe,GAAG,cAAc;EAChCC,eAAe;EACfC,WAAW;EACX7F;AACc,CAAC,EACyB;EAC1C,MAAM8F,YAAY,GAAG7I,MAAM,CAAC8I,MAAM,CAAC,QAAQ,CAAC;EAE5C,OAAO;IACL3H,IAAI,EAAE,6BAA6B;IACnC4H,GAAGA,CAACC,IAAe,EAAE;MACnB,IAAI,CAACC,QAAQ,GAAGD,IAAI,CAACE,IAAI,CAACD,QAAS;MACnC,MAAME,GAAG,GAAGN,YAAY,CAACC,MAAM,CAAC1I,UAAU,CAAC,IAAI,CAAC6I,QAAQ,CAAC,CAAC;MAE1DE,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAACF,QAAQ,kBAAkBL,WAAW,CAACQ,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;MACvE,MAAMC,cAAc,GAAG,IAAIrI,GAAG,CAAC4H,WAAW,CAAC;MAE3C,MAAMU,kBAAkB,GACtBC,QAAoC,IACxB,CAAC,CAACA,QAAQ,KAAK,MAAM,IAAIA,QAAQ,IAAI,SAAS,IAAIA,QAAQ,CAAC;MAEzE,MAAMC,iBAAiB,GAAG,CAAC,MAAM;QAC/B,IAAI,CAACb,eAAe,IAAI1C,MAAM,CAACC,IAAI,CAACyC,eAAe,CAAC,CAACrF,MAAM,KAAK,CAAC,EAAE;UACjE,OAAO,MAAM,KAAK;QACpB;QAEA,MAAMmG,KAAK,GAAG,IAAIC,GAAG,CAAkB,CAAC;QAExC,OAAQC,MAAc,IAAc;UAClC,MAAMC,MAAM,GAAGH,KAAK,CAACxH,GAAG,CAAC0H,MAAM,CAAC;UAChC,IAAIC,MAAM,KAAKtH,SAAS,EAAE;YACxB,OAAOsH,MAAM;UACf;UAEA,MAAMC,cAAc,GAAGjJ,iBAAiB,CAAC+I,MAAM,CAAC;UAEhD,MAAMG,MAAM,GACVjJ,iBAAiB,CAAC8H,eAAe,EAAEgB,MAAM,CAAC,KACzCE,cAAc,KAAKF,MAAM,GACtB9I,iBAAiB,CAAC8H,eAAe,EAAEkB,cAAc,CAAC,GAClD,IAAI,CAAC;UACX,IAAIC,MAAM,EAAE;YACV,MAAMC,MAAM,GAAGT,kBAAkB,CAACQ,MAAM,CAAC;YACzCL,KAAK,CAACO,GAAG,CAACL,MAAM,EAAEI,MAAM,CAAC;YACzB,OAAOA,MAAM;UACf;UAEA,MAAME,YAAY,GAChBJ,cAAc,CAACK,UAAU,CAAC,GAAG,CAAC,IAC9BnK,OAAO,CAACoK,UAAU,CAACN,cAAc,CAAC;UACpC,IAAI,CAACI,YAAY,EAAE;YACjBR,KAAK,CAACO,GAAG,CAACL,MAAM,EAAE,KAAK,CAAC;YACxB,OAAO,KAAK;UACd;UAEA,IAAI;YACF,MAAMS,QAAQ,GAAGnK,WAAW,CAAC4J,cAAc,EAAE,IAAI,CAACZ,QAAQ,EAAE,EAAE,CAAC;YAC/D,MAAM;cAAEoB;YAAI,CAAC,GAAGvJ,WAAW,CAAC;cAC1B6I,MAAM,EAAEE,cAAc;cACtBO,QAAQ;cACRrH;YACF,CAAC,CAAC;YACF,MAAMwG,QAAQ,GAAG1I,iBAAiB,CAAC8H,eAAe,EAAE0B,GAAG,CAAC;YACxD,MAAMN,MAAM,GAAGT,kBAAkB,CAACC,QAAQ,CAAC;YAC3CE,KAAK,CAACO,GAAG,CAACL,MAAM,EAAEI,MAAM,CAAC;YACzB,OAAOA,MAAM;UACf,CAAC,CAAC,MAAM;YACNN,KAAK,CAACO,GAAG,CAACL,MAAM,EAAE,KAAK,CAAC;YACxB,OAAO,KAAK;UACd;QACF,CAAC;MACH,CAAC,EAAE,CAAC;MAEJ,MAAMW,SAAS,GAAGpK,wBAAwB,CAAC8I,IAAI,CAACrC,IAAI,CAAC;MACrD,MAAM;QAAE4D;MAAQ,CAAC,GAAGD,SAAS;MAC7B,MAAME,iBAAiB,GAAGD,OAAO,CAAC7H,MAAM,CAACvC,gBAAgB,CAAC;MAC1DgJ,GAAG,CACD,oBAAoB,EACpB,CACE,YAAYoB,OAAO,CAACjH,MAAM,mBAAmBkH,iBAAiB,CAAClH,MAAM,GAAG,EACxE,YAAY2C,MAAM,CAACwE,MAAM,CAACH,SAAS,CAACrH,OAAO,CAAC,CAACK,MAAM,EAAE,EACrD,cAAcgH,SAAS,CAACI,SAAS,CAACpH,MAAM,EAAE,CAC3C,CAAC8F,IAAI,CAAC,IAAI,CACb,CAAC;;MAED;MACA;MACA,MAAMnG,OAAO,GAAGL,gBAAgB,CAC9B4F,KAAK,EACLQ,IAAI,CAACrC,IAAI,EACT2D,SAAS,CAACtH,UAAU,EACpBsH,SAAS,CAACrH,OACZ,CAAC;MAEDgD,MAAM,CAACwE,MAAM,CAACxH,OAAO,CAAC,CAACG,OAAO,CAAET,KAAK,IAAK;QACxC,IAAIA,KAAK,CAACT,sBAAsB,CAAC,CAAC,EAAE;UAClC,MAAMC,IAAI,GAAGQ,KAAK,CAACV,GAAG,CAAC,MAAM,CAAC;UAC9B,IAAIE,IAAI,CAACT,YAAY,CAAC,CAAC,EAAE;YACvB;YACA;YACAjB,SAAS,CAAC0B,IAAI,EAAEA,IAAI,EAAE,IAAI,CAAC;UAC7B;QACF;MACF,CAAC,CAAC;MAEF,MAAMwI,YAAY,GAAG1H,OAAO,CAAC2H,WAAW,KAAKtI,SAAS;MACtD,MAAMuI,UAAU,GAAG5H,OAAO,CAAC6H,OAAO,KAAKxI,SAAS;;MAEhD;MACA,IAAI+G,cAAc,CAAC5C,GAAG,CAAC,aAAa,CAAC,IAAI,CAACkE,YAAY,EAAE;QACtDtB,cAAc,CAAC0B,MAAM,CAAC,aAAa,CAAC;MACtC;MAEA,IAAI1B,cAAc,CAAC2B,IAAI,KAAK,CAAC,EAAE;QAC7B;QACA,IAAI,CAACT,OAAO,GAAG,EAAE;QACjB,IAAI,CAACtH,OAAO,GAAG,CAAC,CAAC;QACjB,IAAI,CAACyH,SAAS,GAAG,EAAE;QACnB,IAAI,CAACO,WAAW,GAAGhF,MAAM,CAACC,IAAI,CAACjD,OAAO,CAAC;QAEvC+F,IAAI,CAACrC,IAAI,CAAC1E,GAAG,CAAC,MAAM,CAAC,CAACmB,OAAO,CAAEtB,CAAC,IAAK;UACnCA,CAAC,CAACoJ,MAAM,CAAC,CAAC;QACZ,CAAC,CAAC;QAEF;MACF;MAEA,MAAMC,oBAAoB,GAAG9B,cAAc,CAAC5C,GAAG,CAAC,aAAa,CAAC;MAC9D4C,cAAc,CAAC0B,MAAM,CAAC,aAAa,CAAC;;MAEpC;MACA;MACA;MACA;MACA,IACE1B,cAAc,CAAC5C,GAAG,CAAC,SAAS,CAAC,IAC7BoE,UAAU,IACV,CAACP,SAAS,CAACc,UAAU,EACrB;QACA,IAAI,CAACb,OAAO,GAAGA,OAAO;QACtB,IAAI,CAACtH,OAAO,GAAGA,OAAO;QACtB,IAAI,CAACyH,SAAS,GAAGJ,SAAS,CAACI,SAAS;QACpC,IAAI,CAACO,WAAW,GAAG,EAAE;QACrB;MACF;MAEA,IAAI,CAAC5B,cAAc,CAAC5C,GAAG,CAAC,GAAG,CAAC,EAAE;QAC5B;QACA4C,cAAc,CAACgC,GAAG,CAAC,YAAY,CAAC;QAEhC,MAAM1F,YAAY,GAAG,IAAI3E,GAAG,CAAW,CAAC;QACxC,MAAMsK,WAAW,GAAGf,OAAO,CAACpC,GAAG,CAAC,CAAC;UAAEoD;QAAS,CAAC,KAAKA,QAAQ,CAAC;QAE3DtF,MAAM,CAACuF,OAAO,CAACvI,OAAO,CAAC,CAACG,OAAO,CAAC,CAAC,CAACqI,QAAQ,EAAE9I,KAAK,CAAC,KAAK;UACrD,IAAI0G,cAAc,CAAC5C,GAAG,CAACgF,QAAQ,CAAC,EAAE;YAChC9F,YAAY,CAAC0F,GAAG,CAAC1I,KAAK,CAAC;YACvB;UACF;UAEA,MAAMvB,OAAO,GACXuB,KAAK,CAACjB,YAAY,CAAC,CAAC,IAAIiB,KAAK,CAACtB,KAAK,CAACC,UAAU,CAACqB,KAAK,CAAChB,IAAI,CAACR,IAAI,CAAC;UAEjE,IACEC,OAAO,KACNA,OAAO,CAACuF,IAAI,CAAC+E,iBAAiB,CAAC,CAAC,IAC/BtK,OAAO,CAACuF,IAAI,CAACgF,wBAAwB,CAAC,CAAC,IACvCvK,OAAO,CAACuF,IAAI,CAACiF,0BAA0B,CAAC,CAAC,CAAC,IAC5CN,WAAW,CAAClF,QAAQ,CAAEzD,KAAK,CAAChB,IAAI,CAAkBR,IAAI,IAAI,EAAE,CAAC,EAC7D;YACAwE,YAAY,CAAC0F,GAAG,CAAC1I,KAAK,CAAC;YACvB;UACF;UAEA,IAAI,CAAC,GAAGgD,YAAY,CAAC,CAACC,IAAI,CAAEC,KAAK,IAAKA,KAAK,KAAKlD,KAAK,CAAC,EAAE;YACtD;YACA;YACA;YACA;YACAgD,YAAY,CAAC0F,GAAG,CAAC1I,KAAK,CAAC;UACzB;QACF,CAAC,CAAC;QAEF2H,SAAS,CAACI,SAAS,CAACtH,OAAO,CAAEyI,GAAG,IAAK;UACnC,IAAIxC,cAAc,CAAC5C,GAAG,CAACoF,GAAG,CAACJ,QAAQ,CAAC,EAAE;YACpC9F,YAAY,CAAC0F,GAAG,CAACQ,GAAG,CAAClJ,KAAK,CAAC;UAC7B;QACF,CAAC,CAAC;QAEF,MAAMmJ,YAAY,GAAG,IAAIpC,GAAG,CAAmB,CAAC;QAChDzD,MAAM,CAACuF,OAAO,CAACvI,OAAO,CAAC,CAACG,OAAO,CAAC,CAAC,CAACqI,QAAQ,EAAE9I,KAAK,CAAC,KAAK;UACrDmJ,YAAY,CAAC9B,GAAG,CAACyB,QAAQ,EAAE9I,KAAK,CAAC;QACnC,CAAC,CAAC;QAEF2H,SAAS,CAACI,SAAS,CAACtH,OAAO,CAAEyI,GAAG,IAAK;UACnCC,YAAY,CAAC9B,GAAG,CAAC6B,GAAG,CAACJ,QAAQ,EAAEI,GAAG,CAAClJ,KAAK,CAAC;QAC3C,CAAC,CAAC;QAEF,MAAMoJ,eAAe,GAAG,CAAC,GAAG1C,cAAc,CAAC,CAAC3G,MAAM,CAC/CmJ,GAAG,IACFA,GAAG,KAAK,YAAY,IAAI,CAAClG,YAAY,CAACc,GAAG,CAACqF,YAAY,CAAC7J,GAAG,CAAC4J,GAAG,CAAE,CACpE,CAAC;QACDC,YAAY,CAACE,KAAK,CAAC,CAAC;QAEpB,MAAMC,iBAAiB,GAAGF,eAAe,CAACzI,MAAM,KAAK,CAAC;QACtD,IAAI,CAAC2I,iBAAiB,IAAIvD,eAAe,KAAK,QAAQ,EAAE;UACtD,IAAIA,eAAe,KAAK,OAAO,EAAE;YAC/B,MAAM,IAAIwD,KAAK,CACb,gCAAgCtD,WAAW,CAACQ,IAAI,CAAC,GAAG,CAAC,EACvD,CAAC;UACH;UAEA,IAAIV,eAAe,KAAK,cAAc,EAAE;YACtC;YACA,IAAIzF,OAAO,CAAC,GAAG,CAAC,KAAKX,SAAS,EAAE;cAC9BqD,YAAY,CAAC0F,GAAG,CAACpI,OAAO,CAAC,GAAG,CAAC,CAAC;YAChC;YAEAqH,SAAS,CAACI,SAAS,CAACtH,OAAO,CAAEyI,GAAG,IAAK;cACnC,IAAIA,GAAG,CAACJ,QAAQ,KAAK,GAAG,EAAE;gBACxB9F,YAAY,CAAC0F,GAAG,CAACQ,GAAG,CAAClJ,KAAK,CAAC;cAC7B;YACF,CAAC,CAAC;UACJ;UAEA,IAAI+F,eAAe,KAAK,cAAc,EAAE;YACtC,IAAI,CAAC6B,OAAO,GAAGA,OAAO;YACtB,IAAI,CAACtH,OAAO,GAAGA,OAAO;YACtB,IAAI,CAACyH,SAAS,GAAGJ,SAAS,CAACI,SAAS;YACpC,IAAI,CAACO,WAAW,GAAG,EAAE;YAErB;UACF;QACF;QAEA,MAAMkB,WAAW,GAAG,CAClB,GAAGlG,MAAM,CAACwE,MAAM,CAACxH,OAAO,CAAC,EACzB,GAAGqH,SAAS,CAACI,SAAS,CAACvC,GAAG,CAAEiE,CAAC,IAAKA,CAAC,CAACzJ,KAAK,CAAC,CAC3C,CAACD,MAAM,CAAEmJ,GAAG,IAAK,CAAClG,YAAY,CAACc,GAAG,CAACoF,GAAG,CAAC,CAAC;QAEzC,MAAMQ,cAAc,GAAG,IAAIrL,GAAG,CAAWmL,WAAW,CAAC;QACrD,MAAMG,gBAAgB,GAAI3F,IAAc,IAAc;UACpD,IAAItG,SAAS,CAACsG,IAAI,CAAC,IAAI0F,cAAc,CAAC5F,GAAG,CAACE,IAAI,CAAC,EAAE;YAC/C,OAAO,KAAK;UACd;UAEA0F,cAAc,CAAChB,GAAG,CAAC1E,IAAI,CAAC;UACxBwF,WAAW,CAAC/H,IAAI,CAACuC,IAAI,CAAC;UACtB,OAAO,IAAI;QACb,CAAC;QAED,IAAI,CAAC8B,eAAe,IAAI,CAAC0C,oBAAoB,EAAE;UAC7C;UACA;UACAX,iBAAiB,CAACpH,OAAO,CAAEgJ,CAAC,IAAK;YAC/B,IAAI5C,iBAAiB,CAAC4C,CAAC,CAACzC,MAAM,CAAC,EAAE;cAC/B;YACF;YAEA2C,gBAAgB,CAACF,CAAC,CAACzJ,KAAK,CAAC;UAC3B,CAAC,CAAC;QACJ;QAEA,MAAM4J,OAAO,GAAG,IAAIvL,GAAG,CAAW,CAAC;QAEnC,IAAIwL,YAAoC,GAAG,EAAE;QAC7C,IAAIC,OAAO,GAAG,IAAI;QAClB,OAAOA,OAAO,EAAE;UACdA,OAAO,GAAG,KAAK;UACf;UACA,KAAK,MAAM9F,IAAI,IAAIwF,WAAW,EAAE;YAC9B,IAAII,OAAO,CAAC9F,GAAG,CAACE,IAAI,CAAC,EAAE;cACrB;cACA;YACF;YAEA,MAAMvF,OAAO,GAAGK,mBAAmB,CAACkF,IAAI,CAAC;YACzC,MAAM+F,MAAM,GAAGlM,iBAAiB,CAACmG,IAAI,CAAC;YACtC,MAAMnF,MAAM,GAAGkL,MAAM,GAAG,CAAC,CAAC;YAC1B,MAAMC,eAAe,GAAG,CAACvL,OAAO,EAAEwL,cAAc,IAAI,EAAE,EAAElK,MAAM,CAC3DsB,GAAG,IAAK;cACP,IAAIA,GAAG,KAAKxC,MAAM,IAAIA,MAAM,EAAEsE,UAAU,CAAC9B,GAAG,CAAC,EAAE;gBAC7C,OAAO,KAAK;cACd;cAEA,OAAO,CAACmI,WAAW,CAACvG,IAAI,CACrBiH,SAAS,IACRA,SAAS,KAAKlG,IAAI,IAClB,CAACtG,SAAS,CAACwM,SAAS,CAAC,KACpBA,SAAS,KAAK7I,GAAG,IAAI6I,SAAS,CAAC/G,UAAU,CAAC9B,GAAG,CAAC,CACnD,CAAC;YACH,CACF,CAAC;YACD,MAAMmB,WAAW,GAAG/D,OAAO,EAAEyC,UAAU,CAAC1C,IAAI;YAC5C,MAAM2L,6BAA6B,GAAG,IAAI9L,GAAG,CAAW,CAAC;YACzD,MAAM+L,wBAAwB,GAAGJ,eAAe,CAACjK,MAAM,CAAEsB,GAAG,IAAK;cAC/D,IAAI,CAACmB,WAAW,EAAE,OAAO,KAAK;cAC9B,MAAMI,SAAS,GAAGL,8BAA8B,CAC9ClB,GAAG,EACHmB,WACF,CAAC;cACD,IAAI,CAACI,SAAS,IAAIG,mBAAmB,CAACH,SAAS,EAAEI,YAAY,CAAC,EAAE;gBAC9D,OAAO,KAAK;cACd;cAEAmH,6BAA6B,CAACzB,GAAG,CAAC9F,SAAS,CAAC;cAC5C,OAAO,IAAI;YACb,CAAC,CAAC;YAEF,MAAMyH,kBAAkB,GAAGL,eAAe,CAACjK,MAAM,CAC9CsB,GAAG,IAAK,CAAC+I,wBAAwB,CAAC3G,QAAQ,CAACpC,GAAG,CACjD,CAAC;YAED,IAAIgJ,kBAAkB,CAAC1J,MAAM,GAAG,CAAC,IAAIqD,IAAI,CAACjF,YAAY,CAAC,CAAC,EAAE;cACxD;cACAnB,WAAW,CAACoG,IAAI,CAAC;cACjB6F,YAAY,CAACpI,IAAI,CAACuC,IAAI,CAAC;YACzB;YAEA,MAAMsG,YAAY,GAChB,CAACV,OAAO,CAAC9F,GAAG,CAACE,IAAI,CAAC,IAAID,0BAA0B,CAACC,IAAI,CAAC,GAClDa,0BAA0B,CACxBb,IAAI,EACJ1D,OAAO,EACP0C,YAAY,EACZ6C,KAAK,CAAC3F,KACR,CAAC,GACD,IAAI;YAEV,IAAIoK,YAAY,EAAE;cAChBA,YAAY,CAAC7J,OAAO,CAAE8J,SAAS,IAAK;gBAClCX,OAAO,CAAClB,GAAG,CAAC6B,SAAS,CAAC;cACxB,CAAC,CAAC;cACFT,OAAO,GAAG,IAAI;cACd;cACA;YACF;YAEA,MAAMU,oBAAoB,GACxB,CAACZ,OAAO,CAAC9F,GAAG,CAACE,IAAI,CAAC,IAAIvF,OAAO,IAAI4L,kBAAkB,CAAC1J,MAAM,GAAG,CAAC,GAC1DkE,0BAA0B,CACxBb,IAAI,EACJ1D,OAAO,EACP0C,YAAY,EACZ6C,KAAK,CAAC3F,KACR,CAAC,GACD,IAAI;YAEV,IAAIsK,oBAAoB,EAAE;cACxBA,oBAAoB,CAAC/J,OAAO,CAAE8J,SAAS,IAAK;gBAC1CX,OAAO,CAAClB,GAAG,CAAC6B,SAAS,CAAC;cACxB,CAAC,CAAC;cACFT,OAAO,GAAG,IAAI;cACd;cACA;YACF;YAEA,IACE,CAACF,OAAO,CAAC9F,GAAG,CAACE,IAAI,CAAC,KACjB,CAACvF,OAAO,IAAI4L,kBAAkB,CAAC1J,MAAM,KAAK,CAAC,CAAC,EAC7C;cACA;cACA;cACA;cACA;cACA;cACA;cACA;cACA;cACA;cACA;cACA,MAAM8J,uBAAuB,GAC3BhM,OAAO,IAAI,CAACuF,IAAI,CAACjF,YAAY,CAAC,CAAC,GAC3B8F,0BAA0B,CACxBb,IAAI,EACJ1D,OAAO,EACP0C,YAAY,EACZ6C,KAAK,CAAC3F,KACR,CAAC,GACD,IAAI;cAEV,IAAIuK,uBAAuB,EAAE;gBAC3BA,uBAAuB,CAAChK,OAAO,CAAE8J,SAAS,IAAK;kBAC7CX,OAAO,CAAClB,GAAG,CAAC6B,SAAS,CAAC;gBACxB,CAAC,CAAC;gBACF,IAAIJ,6BAA6B,CAAC9B,IAAI,GAAG,CAAC,EAAE;kBAC1C,KAAK,MAAMzF,SAAS,IAAIuH,6BAA6B,EAAE;oBACrD,IAAIR,gBAAgB,CAAC/G,SAAS,CAAC,EAAE;sBAC/BkH,OAAO,GAAG,IAAI;oBAChB;kBACF;gBACF;gBAEAA,OAAO,GAAG,IAAI;gBACd;gBACA;cACF;cAEA,IAAIK,6BAA6B,CAAC9B,IAAI,GAAG,CAAC,EAAE;gBAC1C,KAAK,MAAMzF,SAAS,IAAIuH,6BAA6B,EAAE;kBACrD,IAAIR,gBAAgB,CAAC/G,SAAS,CAAC,EAAE;oBAC/BkH,OAAO,GAAG,IAAI;kBAChB;gBACF;cACF;cAEA,IAAIC,MAAM,EAAE;gBACVpM,WAAW,CAACoM,MAAM,CAAC;cACrB,CAAC,MAAM;gBACLhM,iBAAiB,CAAC,CAACiG,IAAI,CAAC,CAAC;cAC3B;cAEA4F,OAAO,CAAClB,GAAG,CAAC1E,IAAI,CAAC;cACjB8F,OAAO,GAAG,IAAI;YAChB;UACF;UAEAD,YAAY,CAACpJ,OAAO,CAAEuD,IAAI,IAAK;YAC7B;YACA,IAAI,CAACtG,SAAS,CAACsG,IAAI,CAAC,EAAE;cACpBlG,SAAS,CAACkG,IAAI,CAAC;YACjB;UACF,CAAC,CAAC;UAEF6F,YAAY,GAAG,EAAE;;UAEjB;UACA;UACA;UACA;UACAxD,IAAI,CAAC3H,KAAK,CAACgM,KAAK,CAAC,CAAC;;UAElB;UACA,MAAMC,YAAY,GAAGrH,MAAM,CAACwE,MAAM,CAChCzB,IAAI,CAAC3H,KAAK,CAACkM,cAAc,CAAC,CAC5B,CAAC,CAAC7K,MAAM,CAAE0J,CAAC,IAAK,CAACA,CAAC,CAACoB,UAAU,CAAC;UAE9B,KAAK,MAAMpM,OAAO,IAAIkM,YAAY,EAAE;YAClC,IAAIlM,OAAO,CAACuF,IAAI,CAAC5E,oBAAoB,CAAC,CAAC,EAAE;cACvC,MAAMC,EAAE,GAAGZ,OAAO,CAACuF,IAAI,CAAC1E,GAAG,CAAC,IAAI,CAAC;cACjC;cACA;cACA;cACA,IACE,CAACD,EAAE,CAACyL,cAAc,CAAC,CAAC,IACpB,CAACzL,EAAE,CAAC0L,eAAe,CAAC,CAAC,IACrB,CAACrN,SAAS,CAAC2B,EAAE,CAAC,IACd,CAACqK,cAAc,CAAC5F,GAAG,CAACzE,EAAE,CAAC,EACvB;gBACA;gBACA,KAAK,MAAM2L,SAAS,IAAIvM,OAAO,CAAC2C,kBAAkB,EAAE;kBAClD,IAAIuI,gBAAgB,CAACqB,SAAS,CAAC,EAAE;oBAC/BlB,OAAO,GAAG,IAAI;kBAChB;gBACF;gBAEA,IAAIH,gBAAgB,CAACtK,EAAE,CAAC,EAAE;kBACxByK,OAAO,GAAG,IAAI;gBAChB;cACF;YACF;;YAEA;YACA;YACA,IACE,CAACrL,OAAO,CAACuF,IAAI,CAAC+E,iBAAiB,CAAC,CAAC,IAC/BtK,OAAO,CAACuF,IAAI,CAACgF,wBAAwB,CAAC,CAAC,IACvCvK,OAAO,CAACuF,IAAI,CAACiF,0BAA0B,CAAC,CAAC,KAC3C,CAACvL,SAAS,CAACe,OAAO,CAACuF,IAAI,CAAC,IACxB,CAAC0F,cAAc,CAAC5F,GAAG,CAACrF,OAAO,CAACuF,IAAI,CAAC,EACjC;cACA,IAAI2F,gBAAgB,CAAClL,OAAO,CAACuF,IAAI,CAAC,EAAE;gBAClC8F,OAAO,GAAG,IAAI;cAChB;YACF;UACF;QACF;MACF;MAEA,IAAI,CAAClC,OAAO,GAAG/H,cAAc,CAAC+H,OAAO,CAAC;MACtC,IAAI,CAACtH,OAAO,GAAG,CAAC,CAAC;MACjB,IAAI,CAACgI,WAAW,GAAG,EAAE;MAErBhF,MAAM,CAACuF,OAAO,CAACvI,OAAO,CAAC,CAACG,OAAO,CAAC,CAAC,CAACqI,QAAQ,EAAE9I,KAAK,CAAC,KAAK;QACrD,IAAItC,SAAS,CAACsC,KAAK,CAAC,EAAE;UACpB,IAAI,CAACsI,WAAW,CAAC7G,IAAI,CAACqH,QAAQ,CAAC;QACjC,CAAC,MAAM;UACL,IAAI,CAACxI,OAAO,CAACwI,QAAQ,CAAC,GAAG9I,KAAK;QAChC;MACF,CAAC,CAAC;MAEF,IAAI,CAAC+H,SAAS,GAAGlI,cAAc,CAAC8H,SAAS,CAACI,SAAS,CAAC;IACtD,CAAC;IACDkD,OAAO,EAAE,CAAC,CAAC;IACXC,IAAIA,CAAC7E,IAAe,EAAE;MACpB,MAAMG,GAAG,GAAGN,YAAY,CAACC,MAAM,CAAC1I,UAAU,CAAC4I,IAAI,CAACE,IAAI,CAACD,QAAS,CAAC,CAAC;MAEhE,MAAM6E,4BAA4B,GAChCC,OAAO,CAACC,OAAO,CAACC,GAAG,CAACC,wBAAwB,CAAC,IAC7CF,OAAO,CAACC,GAAG,CAACC,wBAAwB,KAAK,GAAG,IAC5CF,OAAO,CAACC,GAAG,CAACC,wBAAwB,KAAK,OAAO;MAElD,MAAMjF,QAAQ,GAAGD,IAAI,CAACE,IAAI,CAACD,QAAS;MAEpC,IACE6E,4BAA4B,IAC5B,CAAC/M,wBAAwB,CAAC0F,GAAG,CAACwC,QAAQ,CAAC,EACvC;QACA,MAAMkF,cAAc,GAAG,IAAI,CAAC5D,OAAO,CAAC7H,MAAM,CACvC0L,GAAG,IAAK,CAACjO,gBAAgB,CAACiO,GAAG,CAAC,IAAIA,GAAG,CAACC,IAAI,KAAK,SAClD,CAAC;QACD,IAAIF,cAAc,CAAC7K,MAAM,GAAG,CAAC,EAAE;UAC7B,MAAMgL,OAAO,GAAGC,KAAK,CAACC,IAAI,CACxB,IAAIxN,GAAG,CAACmN,cAAc,CAAChG,GAAG,CAAEiG,GAAG,IAAKA,GAAG,CAACzE,MAAM,CAAC,CACjD,CAAC,CAAC8E,IAAI,CAAC,CAAC;UACR,MAAMC,aAAa,GAAG,CAAC,MAAM;YAC3B,IAAI,CAAC/F,eAAe,IAAI1C,MAAM,CAACC,IAAI,CAACyC,eAAe,CAAC,CAACrF,MAAM,KAAK,CAAC,EAAE;cACjE,OAAOgL,OAAO;YAChB;YAEA,MAAMK,UAAU,GAAIhF,MAAc,IAAc;cAC9C,MAAME,cAAc,GAAGjJ,iBAAiB,CAAC+I,MAAM,CAAC;cAChD,MAAMG,MAAM,GACVjJ,iBAAiB,CAAC8H,eAAe,EAAEgB,MAAM,CAAC,KACzCE,cAAc,KAAKF,MAAM,GACtB9I,iBAAiB,CAAC8H,eAAe,EAAEkB,cAAc,CAAC,GAClDvH,SAAS,CAAC;cAChB,IAAIwH,MAAM,KAAKxH,SAAS,EAAE;gBACxB,OAAO,KAAK;cACd;cAEA,MAAM2H,YAAY,GAChBJ,cAAc,CAACK,UAAU,CAAC,GAAG,CAAC,IAC9BnK,OAAO,CAACoK,UAAU,CAACN,cAAc,CAAC;cACpC,IAAI,CAACI,YAAY,EAAE;gBACjB,OAAO,IAAI;cACb;cAEA,IAAI;gBACF,MAAMG,QAAQ,GAAGnK,WAAW,CAAC4J,cAAc,EAAEZ,QAAQ,EAAE,EAAE,CAAC;gBAC1D,MAAM2F,SAAS,GAAG9N,WAAW,CAAC;kBAC5B6I,MAAM,EAAEE,cAAc;kBACtBO,QAAQ;kBACRrH;gBACF,CAAC,CAAC,CAACsH,GAAG;gBACN,OACExJ,iBAAiB,CAAC8H,eAAe,EAAEiG,SAAS,CAAC,KAAKtM,SAAS;cAE/D,CAAC,CAAC,MAAM;gBACN,OAAO,IAAI;cACb;YACF,CAAC;YAED,OAAOgM,OAAO,CAAC5L,MAAM,CAACiM,UAAU,CAAC;UACnC,CAAC,EAAE,CAAC;UAEJ,IAAID,aAAa,CAACpL,MAAM,GAAG,CAAC,EAAE;YAC5BvC,wBAAwB,CAACsK,GAAG,CAACpC,QAAQ,CAAC;YACtC,MAAM4F,YAAY,GAAGH,aAAa,CAC/BvG,GAAG,CAAEwB,MAAM,IAAK;cACf,MAAME,cAAc,GAAGjJ,iBAAiB,CAAC+I,MAAM,CAAC;cAChD,MAAMM,YAAY,GAChBJ,cAAc,CAACK,UAAU,CAAC,GAAG,CAAC,IAC9BnK,OAAO,CAACoK,UAAU,CAACN,cAAc,CAAC;cAEpC,IAAI,CAACI,YAAY,EAAE;gBACjB,OAAO;kBAAEN,MAAM;kBAAEU,GAAG,EAAEV;gBAAO,CAAC;cAChC;cAEA,IAAI;gBACF,MAAMS,QAAQ,GAAGnK,WAAW,CAAC4J,cAAc,EAAEZ,QAAQ,EAAE,EAAE,CAAC;gBAC1D,OAAO;kBACLU,MAAM;kBACNU,GAAG,EAAEvJ,WAAW,CAAC;oBACf6I,MAAM,EAAEE,cAAc;oBACtBO,QAAQ;oBACRrH;kBACF,CAAC,CAAC,CAACsH;gBACL,CAAC;cACH,CAAC,CAAC,MAAM;gBACN,OAAO;kBAAEV,MAAM;kBAAEU,GAAG,EAAER;gBAAe,CAAC;cACxC;YACF,CAAC,CAAC,CACDnH,MAAM,CAAC,CAACoM,IAAI,EAAEC,KAAK,EAAEC,KAAK,KAAK;cAC9B,MAAMC,gBAAgB,GAAGD,KAAK,CAACE,SAAS,CACrC9C,CAAC,IAAKA,CAAC,CAAC/B,GAAG,KAAKyE,IAAI,CAACzE,GACxB,CAAC;cACD,OAAO4E,gBAAgB,KAAKF,KAAK;YACnC,CAAC,CAAC;YACJ,MAAMI,OAAO,GAAG,CACd,mDAAmD,EACnD,EAAE,EACF,SAASlG,QAAQ,EAAE,EACnB,UAAUyF,aAAa,CAACpL,MAAM,EAAE,EAChC,UAAU,EACV,GAAGoL,aAAa,CAACvG,GAAG,CAAEwB,MAAM,IAAK,OAAOA,MAAM,EAAE,CAAC,EACjD,EAAE,EACF,2GAA2G,EAC3G,EAAE,EACF,sGAAsG,EACtG,sBAAsB,EACtB,GAAGkF,YAAY,CAAC1G,GAAG,CACjB,CAAC;cAAEkC,GAAG;cAAEV;YAAO,CAAC,KACd,QAAQU,GAAG,0CAA0CV,MAAM,EAC/D,CAAC,EACD,KAAK,EACL,EAAE,EACF,6GAA6G,CAC9G,CAACP,IAAI,CAAC,IAAI,CAAC;YACZ;YACAgG,OAAO,CAACC,IAAI,CAACF,OAAO,CAAC;UACvB;QACF;MACF;MAEA,MAAMG,gBAAgB,GAAG,IAAItO,GAAG,CAAS,CAAC;MAC1C,MAAMuJ,OAAO,GAAG,IAAIb,GAAG,CAAmB,CAAC;MAC3C,MAAM6F,SAAS,GAAGA,CAAC;QACjBhE,QAAQ;QACR5B;MAIF,CAAC,KAAK;QACJ,IAAI2F,gBAAgB,CAAC7I,GAAG,CAAC,GAAGkD,MAAM,IAAI4B,QAAQ,EAAE,CAAC,EAAE;UACjD;QACF;QAEA,IAAI,CAAChB,OAAO,CAAC9D,GAAG,CAACkD,MAAM,CAAC,EAAE;UACxBY,OAAO,CAACP,GAAG,CAACL,MAAM,EAAE,EAAE,CAAC;QACzB;QAEA,IAAI4B,QAAQ,EAAE;UACZhB,OAAO,CAACtI,GAAG,CAAC0H,MAAM,CAAC,CAAEvF,IAAI,CAACmH,QAAQ,CAAC;QACrC;QAEA+D,gBAAgB,CAACjE,GAAG,CAAC,GAAG1B,MAAM,IAAI4B,QAAQ,EAAE,CAAC;MAC/C,CAAC;MAED,IAAI,CAAChB,OAAO,CAACnH,OAAO,CAACmM,SAAS,CAAC;MAC/B,IAAI,CAAC7E,SAAS,CAACtH,OAAO,CAACmM,SAAS,CAAC;MAEjCpG,GAAG,CAAC,KAAK,EAAE,uBAAuB,EAAEoB,OAAO,CAAC;;MAE5C;MACCvB,IAAI,CAACwG,QAAQ,CAAeC,YAAY,GAAG;QAC1ClF;MACF,CAAC;MAED5J,wBAAwB,CAACqI,IAAI,CAACrC,IAAI,CAAC;IACrC;EACF,CAAC;AACH","ignoreList":[]}
@@ -1,291 +0,0 @@
1
- /* eslint-disable no-continue, @typescript-eslint/no-use-before-define */
2
- import traverse from '@babel/traverse';
3
- import { getBindingIdentifiers } from '@babel/types';
4
- const isTypeOnlyImport = statement => {
5
- if (statement.importKind === 'type') {
6
- return true;
7
- }
8
- if (statement.specifiers.length === 0) {
9
- return false;
10
- }
11
- return statement.specifiers.every(specifier => specifier.type === 'ImportSpecifier' && specifier.importKind === 'type');
12
- };
13
- const isTypeOnlyExport = statement => statement.exportKind === 'type';
14
- const getModuleExportName = node => node.type === 'Identifier' ? node.name : node.value;
15
- const isTypeOnlyStatement = statement => {
16
- switch (statement.type) {
17
- case 'EmptyStatement':
18
- case 'TSDeclareFunction':
19
- case 'TSInterfaceDeclaration':
20
- case 'TSTypeAliasDeclaration':
21
- return true;
22
- default:
23
- return false;
24
- }
25
- };
26
- function collectExportNamedDeclaration(statement, reexports, explicitExports) {
27
- if (!statement.source) {
28
- return isTypeOnlyExport(statement);
29
- }
30
- if (isTypeOnlyExport(statement)) {
31
- return true;
32
- }
33
- const source = statement.source.value;
34
- for (const specifier of statement.specifiers) {
35
- if (specifier.type === 'ExportSpecifier') {
36
- if (specifier.exportKind === 'type') {
37
- continue;
38
- }
39
- explicitExports.add(getModuleExportName(specifier.exported));
40
- reexports.push(getNamedReexport(specifier, source));
41
- continue;
42
- }
43
- if (specifier.type === 'ExportDefaultSpecifier') {
44
- explicitExports.add(getModuleExportName(specifier.exported));
45
- reexports.push(getDefaultReexport(specifier, source));
46
- continue;
47
- }
48
- if (specifier.type === 'ExportNamespaceSpecifier') {
49
- explicitExports.add(getModuleExportName(specifier.exported));
50
- reexports.push(getNamespaceReexport(specifier, source));
51
- continue;
52
- }
53
- return false;
54
- }
55
- return statement.specifiers.length > 0;
56
- }
57
- function getNamedReexport(specifier, source) {
58
- return {
59
- exported: getModuleExportName(specifier.exported),
60
- imported: getModuleExportName(specifier.local),
61
- kind: 'named',
62
- source
63
- };
64
- }
65
- function getDefaultReexport(specifier, source) {
66
- return {
67
- exported: getModuleExportName(specifier.exported),
68
- imported: 'default',
69
- kind: 'named',
70
- source
71
- };
72
- }
73
- function getNamespaceReexport(specifier, source) {
74
- return {
75
- exported: getModuleExportName(specifier.exported),
76
- kind: 'namespace',
77
- source
78
- };
79
- }
80
- const collectImportBinding = (statement, imports) => {
81
- if (statement.importKind === 'type') {
82
- return true;
83
- }
84
- if (statement.specifiers.length === 0) {
85
- return false;
86
- }
87
- let sawValueImport = false;
88
- for (const specifier of statement.specifiers) {
89
- if (specifier.type === 'ImportSpecifier' && specifier.importKind === 'type') {
90
- continue;
91
- }
92
- sawValueImport = true;
93
- if (specifier.type === 'ImportSpecifier') {
94
- imports.set(specifier.local.name, {
95
- imported: getImportSpecifierName(specifier),
96
- kind: 'named',
97
- source: statement.source.value
98
- });
99
- continue;
100
- }
101
- if (specifier.type === 'ImportDefaultSpecifier') {
102
- imports.set(specifier.local.name, {
103
- imported: 'default',
104
- kind: 'named',
105
- source: statement.source.value
106
- });
107
- continue;
108
- }
109
- imports.set(specifier.local.name, {
110
- kind: 'namespace',
111
- source: statement.source.value
112
- });
113
- }
114
- return sawValueImport || isTypeOnlyImport(statement);
115
- };
116
- const getImportSpecifierName = specifier => getModuleExportName(specifier.imported);
117
- const getLocalDeclarationNames = declaration => {
118
- if (declaration.type === 'VariableDeclaration' || declaration.type === 'FunctionDeclaration' || declaration.type === 'ClassDeclaration') {
119
- return Object.keys(getBindingIdentifiers(declaration));
120
- }
121
- if (declaration.type === 'TSEnumDeclaration' || declaration.type === 'TSModuleDeclaration') {
122
- return null;
123
- }
124
- return [];
125
- };
126
- const collectLocalExportNamedDeclaration = (statement, importedBindings, passthroughCandidates, explicitExports) => {
127
- let complete = true;
128
- if (isTypeOnlyExport(statement)) {
129
- return {
130
- complete: true,
131
- ok: true
132
- };
133
- }
134
- if (statement.declaration) {
135
- const names = getLocalDeclarationNames(statement.declaration);
136
- if (names === null) {
137
- return {
138
- complete: false,
139
- ok: false
140
- };
141
- }
142
- for (const name of names) {
143
- explicitExports.add(name);
144
- }
145
- return {
146
- complete: names.length === 0,
147
- ok: true
148
- };
149
- }
150
- for (const specifier of statement.specifiers) {
151
- if (specifier.type !== 'ExportSpecifier') {
152
- return {
153
- complete: false,
154
- ok: false
155
- };
156
- }
157
- if (specifier.exportKind === 'type') {
158
- continue;
159
- }
160
- const exported = getModuleExportName(specifier.exported);
161
- explicitExports.add(exported);
162
- if (specifier.local.type !== 'Identifier') {
163
- complete = false;
164
- continue;
165
- }
166
- if (!importedBindings.has(specifier.local.name)) {
167
- complete = false;
168
- continue;
169
- }
170
- if (!passthroughCandidates.has(specifier.local.name)) {
171
- passthroughCandidates.set(specifier.local.name, []);
172
- }
173
- passthroughCandidates.get(specifier.local.name).push(exported);
174
- }
175
- return {
176
- complete: complete && statement.specifiers.length > 0,
177
- ok: true
178
- };
179
- };
180
- const collectPassthroughReexports = (ast, importedBindings, passthroughCandidates, reexports) => {
181
- let complete = true;
182
- const bindingReferenceCounts = new Map();
183
- traverse(ast, {
184
- Program(path) {
185
- for (const localName of passthroughCandidates.keys()) {
186
- bindingReferenceCounts.set(localName, path.scope.getBinding(localName)?.referencePaths.length ?? -1);
187
- }
188
- path.stop();
189
- }
190
- });
191
- for (const [localName, exportedNames] of passthroughCandidates) {
192
- if (bindingReferenceCounts.get(localName) !== exportedNames.length) {
193
- complete = false;
194
- continue;
195
- }
196
- const imported = importedBindings.get(localName);
197
- for (const exported of exportedNames) {
198
- if (imported.kind === 'namespace') {
199
- reexports.push({
200
- exported,
201
- kind: 'namespace',
202
- source: imported.source
203
- });
204
- continue;
205
- }
206
- reexports.push({
207
- exported,
208
- imported: imported.imported,
209
- kind: 'named',
210
- source: imported.source
211
- });
212
- }
213
- }
214
- return {
215
- complete,
216
- ok: true
217
- };
218
- };
219
- function analyzeBarrelProgram(ast) {
220
- const reexports = [];
221
- const explicitExports = new Set();
222
- const exportAll = [];
223
- const importedBindings = new Map();
224
- const passthroughCandidates = new Map();
225
- let complete = true;
226
- for (const statement of ast.program.body) {
227
- if (statement.type === 'ImportDeclaration') {
228
- if (!collectImportBinding(statement, importedBindings)) {
229
- return null;
230
- }
231
- continue;
232
- }
233
- if (statement.type === 'ExportNamedDeclaration') {
234
- if (statement.source) {
235
- if (!collectExportNamedDeclaration(statement, reexports, explicitExports)) {
236
- return null;
237
- }
238
- continue;
239
- }
240
- const localResult = collectLocalExportNamedDeclaration(statement, importedBindings, passthroughCandidates, explicitExports);
241
- if (!localResult.ok) {
242
- return null;
243
- }
244
- complete = complete && localResult.complete;
245
- continue;
246
- }
247
- if (statement.type === 'ExportAllDeclaration') {
248
- if (statement.exportKind === 'type') {
249
- continue;
250
- }
251
- if (!statement.source) {
252
- return null;
253
- }
254
- exportAll.push(getExportAllSource(statement));
255
- continue;
256
- }
257
- if (statement.type === 'ExportDefaultDeclaration') {
258
- return null;
259
- }
260
- if (!isTypeOnlyStatement(statement)) {
261
- return null;
262
- }
263
- }
264
- const passthroughResult = collectPassthroughReexports(ast, importedBindings, passthroughCandidates, reexports);
265
- if (!passthroughResult.ok) {
266
- return null;
267
- }
268
- complete = complete && passthroughResult.complete;
269
- if (reexports.length === 0 && exportAll.length === 0) {
270
- return null;
271
- }
272
- return {
273
- complete,
274
- explicitExports: [...explicitExports],
275
- exportAll,
276
- kind: 'barrel',
277
- reexports
278
- };
279
- }
280
- const getExportAllSource = statement => statement.source.value;
281
- export function analyzeBarrelFile(ast) {
282
- const result = analyzeBarrelProgram(ast);
283
- if (!result) {
284
- return {
285
- kind: 'ineligible',
286
- reason: 'impure'
287
- };
288
- }
289
- return result;
290
- }
291
- //# sourceMappingURL=barrelManifest.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"barrelManifest.js","names":["traverse","getBindingIdentifiers","isTypeOnlyImport","statement","importKind","specifiers","length","every","specifier","type","isTypeOnlyExport","exportKind","getModuleExportName","node","name","value","isTypeOnlyStatement","collectExportNamedDeclaration","reexports","explicitExports","source","add","exported","push","getNamedReexport","getDefaultReexport","getNamespaceReexport","imported","local","kind","collectImportBinding","imports","sawValueImport","set","getImportSpecifierName","getLocalDeclarationNames","declaration","Object","keys","collectLocalExportNamedDeclaration","importedBindings","passthroughCandidates","complete","ok","names","has","get","collectPassthroughReexports","ast","bindingReferenceCounts","Map","Program","path","localName","scope","getBinding","referencePaths","stop","exportedNames","analyzeBarrelProgram","Set","exportAll","program","body","localResult","getExportAllSource","passthroughResult","analyzeBarrelFile","result","reason"],"sources":["../../src/transform/barrelManifest.ts"],"sourcesContent":["/* eslint-disable no-continue, @typescript-eslint/no-use-before-define */\nimport traverse from '@babel/traverse';\nimport { getBindingIdentifiers } from '@babel/types';\nimport type {\n ClassDeclaration,\n Declaration,\n ExportAllDeclaration,\n ExportDefaultSpecifier,\n ExportNamedDeclaration,\n ExportNamespaceSpecifier,\n ExportSpecifier,\n File,\n FunctionDeclaration,\n Identifier,\n ImportDeclaration,\n ImportSpecifier,\n Program,\n StringLiteral,\n VariableDeclaration,\n} from '@babel/types';\n\nexport type BarrelSkipReason =\n | 'custom-evaluator'\n | 'empty'\n | 'ignored'\n | 'impure'\n | 'namespace-barrel'\n | 'unknown-star';\n\nexport type BarrelBlockedReason =\n | 'ambiguous'\n | 'cycle'\n | 'namespace-barrel'\n | 'unknown-star'\n | 'unresolved';\n\nexport type BarrelResolvedBinding =\n | {\n imported: string;\n kind: 'named';\n source: string;\n }\n | {\n kind: 'namespace';\n source: string;\n };\n\nexport type BarrelManifestExport =\n | BarrelResolvedBinding\n | {\n kind: 'blocked';\n reason: BarrelBlockedReason;\n };\n\nexport type BarrelManifest = {\n complete: boolean;\n exports: Record<string, BarrelManifestExport>;\n kind: 'barrel';\n};\n\nexport type BarrelManifestCacheEntry =\n | BarrelManifest\n | {\n kind: 'ineligible';\n reason: BarrelSkipReason;\n };\n\nexport type RawBarrelReexport =\n | {\n exported: string;\n imported: string;\n kind: 'named';\n source: string;\n }\n | {\n exported: string;\n kind: 'namespace';\n source: string;\n };\n\nexport type RawBarrelManifest = {\n complete: boolean;\n explicitExports: string[];\n exportAll: string[];\n kind: 'barrel';\n reexports: RawBarrelReexport[];\n};\n\ntype LocalImportBinding =\n | {\n imported: string;\n kind: 'named';\n source: string;\n }\n | {\n kind: 'namespace';\n source: string;\n };\n\nconst isTypeOnlyImport = (statement: ImportDeclaration): boolean => {\n if (statement.importKind === 'type') {\n return true;\n }\n\n if (statement.specifiers.length === 0) {\n return false;\n }\n\n return statement.specifiers.every(\n (specifier) =>\n specifier.type === 'ImportSpecifier' && specifier.importKind === 'type'\n );\n};\n\nconst isTypeOnlyExport = (statement: ExportNamedDeclaration): boolean =>\n statement.exportKind === 'type';\n\nconst getModuleExportName = (node: Identifier | StringLiteral): string =>\n node.type === 'Identifier' ? node.name : node.value;\n\nconst isTypeOnlyStatement = (statement: Program['body'][number]): boolean => {\n switch (statement.type) {\n case 'EmptyStatement':\n case 'TSDeclareFunction':\n case 'TSInterfaceDeclaration':\n case 'TSTypeAliasDeclaration':\n return true;\n default:\n return false;\n }\n};\n\nfunction collectExportNamedDeclaration(\n statement: ExportNamedDeclaration,\n reexports: RawBarrelReexport[],\n explicitExports: Set<string>\n): boolean {\n if (!statement.source) {\n return isTypeOnlyExport(statement);\n }\n\n if (isTypeOnlyExport(statement)) {\n return true;\n }\n\n const source = statement.source.value;\n for (const specifier of statement.specifiers) {\n if (specifier.type === 'ExportSpecifier') {\n if (specifier.exportKind === 'type') {\n continue;\n }\n\n explicitExports.add(getModuleExportName(specifier.exported));\n reexports.push(getNamedReexport(specifier, source));\n continue;\n }\n\n if (specifier.type === 'ExportDefaultSpecifier') {\n explicitExports.add(getModuleExportName(specifier.exported));\n reexports.push(getDefaultReexport(specifier, source));\n continue;\n }\n\n if (specifier.type === 'ExportNamespaceSpecifier') {\n explicitExports.add(getModuleExportName(specifier.exported));\n reexports.push(getNamespaceReexport(specifier, source));\n continue;\n }\n\n return false;\n }\n\n return statement.specifiers.length > 0;\n}\n\nfunction getNamedReexport(\n specifier: ExportSpecifier,\n source: string\n): RawBarrelReexport {\n return {\n exported: getModuleExportName(specifier.exported),\n imported: getModuleExportName(specifier.local),\n kind: 'named',\n source,\n };\n}\n\nfunction getDefaultReexport(\n specifier: ExportDefaultSpecifier,\n source: string\n): RawBarrelReexport {\n return {\n exported: getModuleExportName(specifier.exported),\n imported: 'default',\n kind: 'named',\n source,\n };\n}\n\nfunction getNamespaceReexport(\n specifier: ExportNamespaceSpecifier,\n source: string\n): RawBarrelReexport {\n return {\n exported: getModuleExportName(specifier.exported),\n kind: 'namespace',\n source,\n };\n}\n\nconst collectImportBinding = (\n statement: ImportDeclaration,\n imports: Map<string, LocalImportBinding>\n): boolean => {\n if (statement.importKind === 'type') {\n return true;\n }\n\n if (statement.specifiers.length === 0) {\n return false;\n }\n\n let sawValueImport = false;\n for (const specifier of statement.specifiers) {\n if (\n specifier.type === 'ImportSpecifier' &&\n specifier.importKind === 'type'\n ) {\n continue;\n }\n\n sawValueImport = true;\n\n if (specifier.type === 'ImportSpecifier') {\n imports.set(specifier.local.name, {\n imported: getImportSpecifierName(specifier),\n kind: 'named',\n source: statement.source.value,\n });\n continue;\n }\n\n if (specifier.type === 'ImportDefaultSpecifier') {\n imports.set(specifier.local.name, {\n imported: 'default',\n kind: 'named',\n source: statement.source.value,\n });\n continue;\n }\n\n imports.set(specifier.local.name, {\n kind: 'namespace',\n source: statement.source.value,\n });\n }\n\n return sawValueImport || isTypeOnlyImport(statement);\n};\n\nconst getImportSpecifierName = (specifier: ImportSpecifier): string =>\n getModuleExportName(specifier.imported);\n\nconst getLocalDeclarationNames = (\n declaration: Declaration\n): string[] | null => {\n if (\n declaration.type === 'VariableDeclaration' ||\n declaration.type === 'FunctionDeclaration' ||\n declaration.type === 'ClassDeclaration'\n ) {\n return Object.keys(\n getBindingIdentifiers(\n declaration as\n | VariableDeclaration\n | FunctionDeclaration\n | ClassDeclaration\n )\n );\n }\n\n if (\n declaration.type === 'TSEnumDeclaration' ||\n declaration.type === 'TSModuleDeclaration'\n ) {\n return null;\n }\n\n return [];\n};\n\nconst collectLocalExportNamedDeclaration = (\n statement: ExportNamedDeclaration,\n importedBindings: Map<string, LocalImportBinding>,\n passthroughCandidates: Map<string, string[]>,\n explicitExports: Set<string>\n): { complete: boolean; ok: boolean } => {\n let complete = true;\n\n if (isTypeOnlyExport(statement)) {\n return {\n complete: true,\n ok: true,\n };\n }\n\n if (statement.declaration) {\n const names = getLocalDeclarationNames(statement.declaration);\n if (names === null) {\n return {\n complete: false,\n ok: false,\n };\n }\n\n for (const name of names) {\n explicitExports.add(name);\n }\n\n return {\n complete: names.length === 0,\n ok: true,\n };\n }\n\n for (const specifier of statement.specifiers) {\n if (specifier.type !== 'ExportSpecifier') {\n return {\n complete: false,\n ok: false,\n };\n }\n\n if (specifier.exportKind === 'type') {\n continue;\n }\n\n const exported = getModuleExportName(specifier.exported);\n explicitExports.add(exported);\n\n if (specifier.local.type !== 'Identifier') {\n complete = false;\n continue;\n }\n\n if (!importedBindings.has(specifier.local.name)) {\n complete = false;\n continue;\n }\n\n if (!passthroughCandidates.has(specifier.local.name)) {\n passthroughCandidates.set(specifier.local.name, []);\n }\n passthroughCandidates.get(specifier.local.name)!.push(exported);\n }\n\n return {\n complete: complete && statement.specifiers.length > 0,\n ok: true,\n };\n};\n\nconst collectPassthroughReexports = (\n ast: File,\n importedBindings: Map<string, LocalImportBinding>,\n passthroughCandidates: Map<string, string[]>,\n reexports: RawBarrelReexport[]\n): { complete: boolean; ok: boolean } => {\n let complete = true;\n const bindingReferenceCounts = new Map<string, number>();\n\n traverse(ast, {\n Program(path) {\n for (const localName of passthroughCandidates.keys()) {\n bindingReferenceCounts.set(\n localName,\n path.scope.getBinding(localName)?.referencePaths.length ?? -1\n );\n }\n path.stop();\n },\n });\n\n for (const [localName, exportedNames] of passthroughCandidates) {\n if (bindingReferenceCounts.get(localName) !== exportedNames.length) {\n complete = false;\n continue;\n }\n\n const imported = importedBindings.get(localName)!;\n for (const exported of exportedNames) {\n if (imported.kind === 'namespace') {\n reexports.push({\n exported,\n kind: 'namespace',\n source: imported.source,\n });\n continue;\n }\n\n reexports.push({\n exported,\n imported: imported.imported,\n kind: 'named',\n source: imported.source,\n });\n }\n }\n\n return {\n complete,\n ok: true,\n };\n};\n\nfunction analyzeBarrelProgram(ast: File): RawBarrelManifest | null {\n const reexports: RawBarrelReexport[] = [];\n const explicitExports = new Set<string>();\n const exportAll: string[] = [];\n const importedBindings = new Map<string, LocalImportBinding>();\n const passthroughCandidates = new Map<string, string[]>();\n let complete = true;\n\n for (const statement of ast.program.body) {\n if (statement.type === 'ImportDeclaration') {\n if (!collectImportBinding(statement, importedBindings)) {\n return null;\n }\n continue;\n }\n\n if (statement.type === 'ExportNamedDeclaration') {\n if (statement.source) {\n if (\n !collectExportNamedDeclaration(statement, reexports, explicitExports)\n ) {\n return null;\n }\n continue;\n }\n\n const localResult = collectLocalExportNamedDeclaration(\n statement,\n importedBindings,\n passthroughCandidates,\n explicitExports\n );\n if (!localResult.ok) {\n return null;\n }\n complete = complete && localResult.complete;\n continue;\n }\n\n if (statement.type === 'ExportAllDeclaration') {\n if (statement.exportKind === 'type') {\n continue;\n }\n\n if (!statement.source) {\n return null;\n }\n\n exportAll.push(getExportAllSource(statement));\n continue;\n }\n\n if (statement.type === 'ExportDefaultDeclaration') {\n return null;\n }\n\n if (!isTypeOnlyStatement(statement)) {\n return null;\n }\n }\n\n const passthroughResult = collectPassthroughReexports(\n ast,\n importedBindings,\n passthroughCandidates,\n reexports\n );\n if (!passthroughResult.ok) {\n return null;\n }\n complete = complete && passthroughResult.complete;\n\n if (reexports.length === 0 && exportAll.length === 0) {\n return null;\n }\n\n return {\n complete,\n explicitExports: [...explicitExports],\n exportAll,\n kind: 'barrel',\n reexports,\n };\n}\n\nconst getExportAllSource = (statement: ExportAllDeclaration): string =>\n statement.source.value;\n\nexport function analyzeBarrelFile(\n ast: File\n): BarrelManifestCacheEntry | RawBarrelManifest {\n const result = analyzeBarrelProgram(ast);\n\n if (!result) {\n return {\n kind: 'ineligible',\n reason: 'impure',\n };\n }\n\n return result;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,64 +0,0 @@
1
- import generate from '@babel/generator';
2
- import { findExportsInImports } from './getExports';
3
- const getWildcardReexport = (babel, ast) => {
4
- const reexportsFrom = [];
5
- ast.program.body.forEach(node => {
6
- if (babel.types.isExportAllDeclaration(node) && node.source && babel.types.isStringLiteral(node.source)) {
7
- reexportsFrom.push({
8
- source: node.source.value,
9
- node
10
- });
11
- }
12
- });
13
- return reexportsFrom;
14
- };
15
-
16
- /**
17
- * Replaces wildcard reexports with named reexports.
18
- * Recursively emits getExports for each reexported module,
19
- * and replaces wildcard with resolved named.
20
- */
21
- export function* explodeReexports() {
22
- const {
23
- babel
24
- } = this.services;
25
- const {
26
- log,
27
- loadedAndParsed
28
- } = this.entrypoint;
29
- if (loadedAndParsed.evaluator === 'ignored') {
30
- return;
31
- }
32
- const reexportsFrom = getWildcardReexport(babel, loadedAndParsed.ast);
33
- if (!reexportsFrom.length) {
34
- return;
35
- }
36
- log('has wildcard reexport from %o', reexportsFrom);
37
- const resolvedImports = yield* this.getNext('resolveImports', this.entrypoint, {
38
- imports: new Map(reexportsFrom.map(i => [i.source, []]))
39
- });
40
- const importedEntrypoints = findExportsInImports(this.entrypoint, resolvedImports);
41
- const replacements = new Map();
42
- for (const importedEntrypoint of importedEntrypoints) {
43
- if (importedEntrypoint.entrypoint.loadedAndParsed.evaluator !== 'ignored') {
44
- const reexport = reexportsFrom.find(i => i.source === importedEntrypoint.import);
45
- if (reexport) {
46
- const exports = yield* this.getNext('getExports', importedEntrypoint.entrypoint, undefined);
47
- const namedExports = exports.filter(name => name !== 'default');
48
- if (namedExports.length !== 0) {
49
- replacements.set(reexport.node, babel.types.exportNamedDeclaration(null, namedExports.map(i => babel.types.exportSpecifier(babel.types.identifier(i), babel.types.identifier(i))), babel.types.stringLiteral(importedEntrypoint.import)));
50
- }
51
- }
52
- }
53
- }
54
-
55
- // Replace wildcard reexport with named reexports
56
- babel.traverse(loadedAndParsed.ast, {
57
- ExportAllDeclaration(path) {
58
- if (!replacements.has(path.node)) return;
59
- path.replaceWith(replacements.get(path.node));
60
- }
61
- });
62
- loadedAndParsed.code = generate(loadedAndParsed.ast).code;
63
- }
64
- //# sourceMappingURL=explodeReexports.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"explodeReexports.js","names":["generate","findExportsInImports","getWildcardReexport","babel","ast","reexportsFrom","program","body","forEach","node","types","isExportAllDeclaration","source","isStringLiteral","push","value","explodeReexports","services","log","loadedAndParsed","entrypoint","evaluator","length","resolvedImports","getNext","imports","Map","map","i","importedEntrypoints","replacements","importedEntrypoint","reexport","find","import","exports","undefined","namedExports","filter","name","set","exportNamedDeclaration","exportSpecifier","identifier","stringLiteral","traverse","ExportAllDeclaration","path","has","replaceWith","get","code"],"sources":["../../../src/transform/generators/explodeReexports.ts"],"sourcesContent":["import generate from '@babel/generator';\nimport type { ExportAllDeclaration, File, Node } from '@babel/types';\n\nimport type { Core } from '../../babel';\nimport type { IExplodeReexportsAction, SyncScenarioForAction } from '../types';\n\nimport { findExportsInImports } from './getExports';\n\nconst getWildcardReexport = (babel: Core, ast: File) => {\n const reexportsFrom: { node: ExportAllDeclaration; source: string }[] = [];\n ast.program.body.forEach((node) => {\n if (\n babel.types.isExportAllDeclaration(node) &&\n node.source &&\n babel.types.isStringLiteral(node.source)\n ) {\n reexportsFrom.push({\n source: node.source.value,\n node,\n });\n }\n });\n\n return reexportsFrom;\n};\n\n/**\n * Replaces wildcard reexports with named reexports.\n * Recursively emits getExports for each reexported module,\n * and replaces wildcard with resolved named.\n */\nexport function* explodeReexports(\n this: IExplodeReexportsAction\n): SyncScenarioForAction<IExplodeReexportsAction> {\n const { babel } = this.services;\n const { log, loadedAndParsed } = this.entrypoint;\n if (loadedAndParsed.evaluator === 'ignored') {\n return;\n }\n\n const reexportsFrom = getWildcardReexport(babel, loadedAndParsed.ast);\n if (!reexportsFrom.length) {\n return;\n }\n\n log('has wildcard reexport from %o', reexportsFrom);\n\n const resolvedImports = yield* this.getNext(\n 'resolveImports',\n this.entrypoint,\n {\n imports: new Map(reexportsFrom.map((i) => [i.source, []])),\n }\n );\n\n const importedEntrypoints = findExportsInImports(\n this.entrypoint,\n resolvedImports\n );\n\n const replacements = new Map<ExportAllDeclaration, Node>();\n for (const importedEntrypoint of importedEntrypoints) {\n if (importedEntrypoint.entrypoint.loadedAndParsed.evaluator !== 'ignored') {\n const reexport = reexportsFrom.find(\n (i) => i.source === importedEntrypoint.import\n );\n if (reexport) {\n const exports = yield* this.getNext(\n 'getExports',\n importedEntrypoint.entrypoint,\n undefined\n );\n\n const namedExports = exports.filter((name) => name !== 'default');\n if (namedExports.length !== 0) {\n replacements.set(\n reexport.node,\n babel.types.exportNamedDeclaration(\n null,\n namedExports.map((i) =>\n babel.types.exportSpecifier(\n babel.types.identifier(i),\n babel.types.identifier(i)\n )\n ),\n babel.types.stringLiteral(importedEntrypoint.import)\n )\n );\n }\n }\n }\n }\n\n // Replace wildcard reexport with named reexports\n babel.traverse(loadedAndParsed.ast, {\n ExportAllDeclaration(path) {\n if (!replacements.has(path.node)) return;\n path.replaceWith(replacements.get(path.node)!);\n },\n });\n\n loadedAndParsed.code = generate(loadedAndParsed.ast).code;\n}\n"],"mappings":"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","ignoreList":[]}