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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (603) hide show
  1. package/esm/cache.js +426 -289
  2. package/esm/cache.js.map +1 -1
  3. package/esm/debug/fileReporter.js +137 -134
  4. package/esm/debug/fileReporter.js.map +1 -1
  5. package/esm/eval/broker.js +2134 -0
  6. package/esm/eval/broker.js.map +1 -0
  7. package/esm/eval/lru.js +36 -0
  8. package/esm/eval/lru.js.map +1 -0
  9. package/esm/eval/prepareModuleOnDemand.js +21 -0
  10. package/esm/eval/prepareModuleOnDemand.js.map +1 -0
  11. package/esm/eval/protocol.js +2 -0
  12. package/esm/eval/protocol.js.map +1 -0
  13. package/esm/eval/resolverStrategy.js +51 -0
  14. package/esm/eval/resolverStrategy.js.map +1 -0
  15. package/esm/eval/runner.js +1759 -0
  16. package/esm/eval/runner.js.map +1 -0
  17. package/esm/eval/serialize.js +333 -0
  18. package/esm/eval/serialize.js.map +1 -0
  19. package/esm/eval/writeQueue.js +81 -0
  20. package/esm/eval/writeQueue.js.map +1 -0
  21. package/esm/evaluators/index.js +11 -12
  22. package/esm/evaluators/index.js.map +1 -1
  23. package/esm/index.js +25 -29
  24. package/esm/index.js.map +1 -1
  25. package/esm/module.js +896 -520
  26. package/esm/module.js.map +1 -1
  27. package/esm/shaker.js +14 -80
  28. package/esm/shaker.js.map +1 -1
  29. package/esm/transform/BaseEntrypoint.js +162 -164
  30. package/esm/transform/BaseEntrypoint.js.map +1 -1
  31. package/esm/transform/Entrypoint.helpers.js +96 -253
  32. package/esm/transform/Entrypoint.helpers.js.map +1 -1
  33. package/esm/transform/Entrypoint.js +336 -270
  34. package/esm/transform/Entrypoint.js.map +1 -1
  35. package/esm/transform/Entrypoint.types.js +1 -1
  36. package/esm/transform/Entrypoint.types.js.map +1 -1
  37. package/esm/transform/EvaluatedEntrypoint.js +10 -4
  38. package/esm/transform/EvaluatedEntrypoint.js.map +1 -1
  39. package/esm/transform/actions/AbortError.js +6 -6
  40. package/esm/transform/actions/AbortError.js.map +1 -1
  41. package/esm/transform/actions/BaseAction.js +140 -136
  42. package/esm/transform/actions/BaseAction.js.map +1 -1
  43. package/esm/transform/actions/UnprocessedEntrypointError.js +6 -6
  44. package/esm/transform/actions/UnprocessedEntrypointError.js.map +1 -1
  45. package/esm/transform/actions/actionRunner.js +63 -66
  46. package/esm/transform/actions/actionRunner.js.map +1 -1
  47. package/esm/transform/actions/types.js +1 -1
  48. package/esm/transform/actions/types.js.map +1 -1
  49. package/esm/transform/barrelManifest.types.js +2 -0
  50. package/esm/transform/barrelManifest.types.js.map +1 -0
  51. package/esm/transform/generators/baseProcessingHandlers.js +15 -17
  52. package/esm/transform/generators/baseProcessingHandlers.js.map +1 -1
  53. package/esm/transform/generators/collect.js +27 -55
  54. package/esm/transform/generators/collect.js.map +1 -1
  55. package/esm/transform/generators/createStylisPreprocessor.js +353 -321
  56. package/esm/transform/generators/createStylisPreprocessor.js.map +1 -1
  57. package/esm/transform/generators/evalFile.js +48 -47
  58. package/esm/transform/generators/evalFile.js.map +1 -1
  59. package/esm/transform/generators/extract.js +78 -90
  60. package/esm/transform/generators/extract.js.map +1 -1
  61. package/esm/transform/generators/getExports.js +57 -74
  62. package/esm/transform/generators/getExports.js.map +1 -1
  63. package/esm/transform/generators/index.js +11 -11
  64. package/esm/transform/generators/index.js.map +1 -1
  65. package/esm/transform/generators/processEntrypoint.js +78 -67
  66. package/esm/transform/generators/processEntrypoint.js.map +1 -1
  67. package/esm/transform/generators/processImports.js +102 -67
  68. package/esm/transform/generators/processImports.js.map +1 -1
  69. package/esm/transform/generators/resolveImports.js +165 -196
  70. package/esm/transform/generators/resolveImports.js.map +1 -1
  71. package/esm/transform/generators/resolveStaticOxcValues.js +2911 -0
  72. package/esm/transform/generators/resolveStaticOxcValues.js.map +1 -0
  73. package/esm/transform/generators/rewriteOxcBarrelImports.js +822 -0
  74. package/esm/transform/generators/rewriteOxcBarrelImports.js.map +1 -0
  75. package/esm/transform/generators/transform.js +239 -248
  76. package/esm/transform/generators/transform.js.map +1 -1
  77. package/esm/transform/generators/workflow.js +87 -90
  78. package/esm/transform/generators/workflow.js.map +1 -1
  79. package/esm/transform/helpers/loadWywOptions.js +154 -74
  80. package/esm/transform/helpers/loadWywOptions.js.map +1 -1
  81. package/esm/transform/helpers/withDefaultServices.js +13 -22
  82. package/esm/transform/helpers/withDefaultServices.js.map +1 -1
  83. package/esm/transform/isStaticallyEvaluatableModule.js +140 -152
  84. package/esm/transform/isStaticallyEvaluatableModule.js.map +1 -1
  85. package/esm/transform/oxcBarrelManifest.js +349 -0
  86. package/esm/transform/oxcBarrelManifest.js.map +1 -0
  87. package/esm/transform/rootLog.js +3 -3
  88. package/esm/transform/rootLog.js.map +1 -1
  89. package/esm/transform/syntax.js +2 -0
  90. package/esm/transform/syntax.js.map +1 -0
  91. package/esm/transform/types.js +2 -2
  92. package/esm/transform/types.js.map +1 -1
  93. package/esm/transform.js +123 -147
  94. package/esm/transform.js.map +1 -1
  95. package/esm/types.js +4 -1
  96. package/esm/types.js.map +1 -1
  97. package/esm/utils/EventEmitter.js +46 -48
  98. package/esm/utils/EventEmitter.js.map +1 -1
  99. package/esm/utils/ShakerMetadata.js +2 -2
  100. package/esm/utils/ShakerMetadata.js.map +1 -1
  101. package/esm/utils/TransformDiagnostics.js +9 -9
  102. package/esm/utils/TransformDiagnostics.js.map +1 -1
  103. package/esm/utils/TransformMetadata.js +24 -26
  104. package/esm/utils/TransformMetadata.js.map +1 -1
  105. package/esm/utils/applyOxcProcessors.js +1217 -0
  106. package/esm/utils/applyOxcProcessors.js.map +1 -0
  107. package/esm/utils/collectOxcExportsAndImports.js +934 -0
  108. package/esm/utils/collectOxcExportsAndImports.js.map +1 -0
  109. package/esm/utils/collectOxcRuntime.js +220 -0
  110. package/esm/utils/collectOxcRuntime.js.map +1 -0
  111. package/esm/utils/collectOxcTemplateDependencies.js +1398 -0
  112. package/esm/utils/collectOxcTemplateDependencies.js.map +1 -0
  113. package/esm/utils/dispose-polyfill.js +3 -4
  114. package/esm/utils/dispose-polyfill.js.map +1 -1
  115. package/esm/utils/getFileIdx.js +6 -6
  116. package/esm/utils/getFileIdx.js.map +1 -1
  117. package/esm/utils/getPluginKey.js +12 -12
  118. package/esm/utils/getPluginKey.js.map +1 -1
  119. package/esm/utils/getVisitorKeys.js +9 -3
  120. package/esm/utils/getVisitorKeys.js.map +1 -1
  121. package/esm/utils/hasCachedWywPrevalExport.js +23 -0
  122. package/esm/utils/hasCachedWywPrevalExport.js.map +1 -0
  123. package/esm/utils/hasWywPreval.js +5 -5
  124. package/esm/utils/hasWywPreval.js.map +1 -1
  125. package/esm/utils/importOverrides.js +75 -90
  126. package/esm/utils/importOverrides.js.map +1 -1
  127. package/esm/utils/isNode.js +2 -2
  128. package/esm/utils/isNode.js.map +1 -1
  129. package/esm/utils/isNotNull.js +2 -2
  130. package/esm/utils/isNotNull.js.map +1 -1
  131. package/esm/utils/isSerializable.js +11 -11
  132. package/esm/utils/isSerializable.js.map +1 -1
  133. package/esm/utils/oxcAstService.js +121 -0
  134. package/esm/utils/oxcAstService.js.map +1 -0
  135. package/esm/utils/oxcEmit.js +447 -0
  136. package/esm/utils/oxcEmit.js.map +1 -0
  137. package/esm/utils/oxcPreevalStage.js +97 -0
  138. package/esm/utils/oxcPreevalStage.js.map +1 -0
  139. package/esm/utils/oxcPreevalTransforms.js +1054 -0
  140. package/esm/utils/oxcPreevalTransforms.js.map +1 -0
  141. package/esm/utils/oxcShaker.js +662 -0
  142. package/esm/utils/oxcShaker.js.map +1 -0
  143. package/esm/utils/parseOxc.js +37 -0
  144. package/esm/utils/parseOxc.js.map +1 -0
  145. package/esm/utils/parseRequest.js +27 -27
  146. package/esm/utils/parseRequest.js.map +1 -1
  147. package/esm/utils/peek.js +1 -1
  148. package/esm/utils/peek.js.map +1 -1
  149. package/esm/utils/processorLookup.js +125 -0
  150. package/esm/utils/processorLookup.js.map +1 -0
  151. package/esm/utils/resolveWithConditions.js +99 -0
  152. package/esm/utils/resolveWithConditions.js.map +1 -0
  153. package/esm/vm/createVmContext.js +140 -141
  154. package/esm/vm/createVmContext.js.map +1 -1
  155. package/esm/vm/process.js +11 -13
  156. package/esm/vm/process.js.map +1 -1
  157. package/package.json +18 -26
  158. package/types/cache.d.ts +17 -8
  159. package/types/cache.js +237 -95
  160. package/types/debug/fileReporter.js +22 -22
  161. package/types/eval/broker.d.ts +88 -0
  162. package/types/eval/broker.js +2262 -0
  163. package/types/eval/lru.d.ts +10 -0
  164. package/types/eval/lru.js +36 -0
  165. package/types/eval/prepareModuleOnDemand.d.ts +7 -0
  166. package/types/eval/prepareModuleOnDemand.js +24 -0
  167. package/types/eval/protocol.d.ts +97 -0
  168. package/types/eval/protocol.js +1 -0
  169. package/types/eval/resolverStrategy.d.ts +13 -0
  170. package/types/eval/resolverStrategy.js +46 -0
  171. package/types/eval/serialize.d.ts +78 -0
  172. package/types/eval/serialize.js +357 -0
  173. package/types/eval/writeQueue.d.ts +13 -0
  174. package/types/eval/writeQueue.js +80 -0
  175. package/types/evaluators/index.d.ts +2 -2
  176. package/types/evaluators/index.js +6 -9
  177. package/types/index.d.ts +3 -6
  178. package/types/index.js +24 -82
  179. package/types/module.d.ts +35 -7
  180. package/types/module.js +535 -163
  181. package/types/shaker.d.ts +2 -10
  182. package/types/shaker.js +10 -100
  183. package/types/transform/BaseEntrypoint.js +6 -11
  184. package/types/transform/Entrypoint.d.ts +15 -15
  185. package/types/transform/Entrypoint.helpers.d.ts +2 -5
  186. package/types/transform/Entrypoint.helpers.js +43 -203
  187. package/types/transform/Entrypoint.js +130 -53
  188. package/types/transform/Entrypoint.types.d.ts +28 -6
  189. package/types/transform/Entrypoint.types.js +1 -2
  190. package/types/transform/EvaluatedEntrypoint.d.ts +13 -2
  191. package/types/transform/EvaluatedEntrypoint.js +7 -6
  192. package/types/transform/actions/AbortError.js +2 -7
  193. package/types/transform/actions/BaseAction.js +4 -8
  194. package/types/transform/actions/UnprocessedEntrypointError.js +2 -7
  195. package/types/transform/actions/actionRunner.js +8 -12
  196. package/types/transform/actions/types.d.ts +2 -2
  197. package/types/transform/actions/types.js +1 -2
  198. package/types/transform/{barrelManifest.d.ts → barrelManifest.types.d.ts} +0 -2
  199. package/types/transform/barrelManifest.types.js +1 -0
  200. package/types/transform/generators/baseProcessingHandlers.d.ts +4 -5
  201. package/types/transform/generators/baseProcessingHandlers.js +10 -14
  202. package/types/transform/generators/collect.js +13 -39
  203. package/types/transform/generators/createStylisPreprocessor.js +19 -60
  204. package/types/transform/generators/evalFile.d.ts +2 -2
  205. package/types/transform/generators/evalFile.js +26 -28
  206. package/types/transform/generators/extract.js +5 -8
  207. package/types/transform/generators/getExports.js +23 -30
  208. package/types/transform/generators/index.d.ts +2 -2
  209. package/types/transform/generators/index.js +11 -14
  210. package/types/transform/generators/processEntrypoint.d.ts +2 -2
  211. package/types/transform/generators/processEntrypoint.js +60 -26
  212. package/types/transform/generators/processImports.d.ts +0 -3
  213. package/types/transform/generators/processImports.js +60 -20
  214. package/types/transform/generators/resolveImports.js +18 -22
  215. package/types/transform/generators/resolveStaticOxcValues.d.ts +2 -0
  216. package/types/transform/generators/resolveStaticOxcValues.js +3235 -0
  217. package/types/transform/generators/{rewriteBarrelImports.d.ts → rewriteOxcBarrelImports.d.ts} +2 -3
  218. package/types/transform/generators/{rewriteBarrelImports.js → rewriteOxcBarrelImports.js} +282 -225
  219. package/types/transform/generators/transform.d.ts +3 -7
  220. package/types/transform/generators/transform.js +203 -199
  221. package/types/transform/generators/workflow.js +62 -45
  222. package/types/transform/helpers/loadWywOptions.js +94 -20
  223. package/types/transform/helpers/withDefaultServices.d.ts +1 -1
  224. package/types/transform/helpers/withDefaultServices.js +6 -44
  225. package/types/transform/isStaticallyEvaluatableModule.d.ts +1 -2
  226. package/types/transform/isStaticallyEvaluatableModule.js +125 -126
  227. package/types/transform/oxcBarrelManifest.d.ts +2 -0
  228. package/types/transform/{barrelManifest.js → oxcBarrelManifest.js} +156 -97
  229. package/types/transform/rootLog.js +2 -5
  230. package/types/transform/syntax.d.ts +38 -0
  231. package/types/transform/syntax.js +1 -0
  232. package/types/transform/types.d.ts +9 -6
  233. package/types/transform/types.js +1 -4
  234. package/types/transform.d.ts +2 -2
  235. package/types/transform.js +88 -101
  236. package/types/types.d.ts +0 -23
  237. package/types/types.js +1 -2
  238. package/types/utils/EventEmitter.js +3 -9
  239. package/types/utils/ShakerMetadata.js +1 -5
  240. package/types/utils/TransformDiagnostics.js +3 -7
  241. package/types/utils/TransformMetadata.js +8 -16
  242. package/types/utils/applyOxcProcessors.d.ts +16 -0
  243. package/types/utils/applyOxcProcessors.js +1391 -0
  244. package/types/utils/collectOxcExportsAndImports.d.ts +35 -0
  245. package/types/utils/collectOxcExportsAndImports.js +957 -0
  246. package/types/utils/collectOxcRuntime.d.ts +14 -0
  247. package/types/utils/collectOxcRuntime.js +250 -0
  248. package/types/utils/collectOxcTemplateDependencies.d.ts +38 -0
  249. package/types/utils/collectOxcTemplateDependencies.js +1580 -0
  250. package/types/utils/getFileIdx.js +1 -4
  251. package/types/utils/getPluginKey.d.ts +5 -2
  252. package/types/utils/getPluginKey.js +2 -6
  253. package/types/utils/getVisitorKeys.d.ts +4 -4
  254. package/types/utils/getVisitorKeys.js +9 -6
  255. package/types/utils/hasCachedWywPrevalExport.d.ts +14 -0
  256. package/types/utils/hasCachedWywPrevalExport.js +30 -0
  257. package/types/utils/hasWywPreval.js +1 -4
  258. package/types/utils/importOverrides.js +17 -27
  259. package/types/utils/isNode.d.ts +2 -2
  260. package/types/utils/isNode.js +2 -6
  261. package/types/utils/isNotNull.js +1 -4
  262. package/types/utils/isSerializable.js +3 -6
  263. package/types/utils/oxcAstService.d.ts +11 -0
  264. package/types/utils/oxcAstService.js +79 -0
  265. package/types/utils/oxcEmit.d.ts +19 -0
  266. package/types/utils/oxcEmit.js +506 -0
  267. package/types/utils/oxcPreevalStage.d.ts +20 -0
  268. package/types/utils/oxcPreevalStage.js +102 -0
  269. package/types/utils/oxcPreevalTransforms.d.ts +13 -0
  270. package/types/utils/oxcPreevalTransforms.js +1179 -0
  271. package/types/utils/oxcShaker.d.ts +13 -0
  272. package/types/utils/oxcShaker.js +751 -0
  273. package/types/utils/parseOxc.d.ts +11 -0
  274. package/types/utils/parseOxc.js +38 -0
  275. package/types/utils/parseRequest.js +2 -7
  276. package/types/utils/peek.js +1 -5
  277. package/types/utils/processorLookup.d.ts +8 -0
  278. package/types/utils/processorLookup.js +135 -0
  279. package/types/utils/resolveWithConditions.d.ts +12 -0
  280. package/types/utils/resolveWithConditions.js +103 -0
  281. package/types/vm/createVmContext.d.ts +2 -2
  282. package/types/vm/createVmContext.js +25 -62
  283. package/types/vm/process.js +20 -26
  284. package/esm/babel.js +0 -2
  285. package/esm/babel.js.map +0 -1
  286. package/esm/options/buildOptions.js +0 -168
  287. package/esm/options/buildOptions.js.map +0 -1
  288. package/esm/options/buildOptions.test.js +0 -138
  289. package/esm/options/buildOptions.test.js.map +0 -1
  290. package/esm/options/loadBabelOptions.js +0 -24
  291. package/esm/options/loadBabelOptions.js.map +0 -1
  292. package/esm/plugins/babel-transform.js +0 -53
  293. package/esm/plugins/babel-transform.js.map +0 -1
  294. package/esm/plugins/collector.js +0 -60
  295. package/esm/plugins/collector.js.map +0 -1
  296. package/esm/plugins/dynamic-import.js +0 -56
  297. package/esm/plugins/dynamic-import.js.map +0 -1
  298. package/esm/plugins/preeval.js +0 -73
  299. package/esm/plugins/preeval.js.map +0 -1
  300. package/esm/plugins/shaker.js +0 -680
  301. package/esm/plugins/shaker.js.map +0 -1
  302. package/esm/transform/barrelManifest.js +0 -291
  303. package/esm/transform/barrelManifest.js.map +0 -1
  304. package/esm/transform/generators/explodeReexports.js +0 -64
  305. package/esm/transform/generators/explodeReexports.js.map +0 -1
  306. package/esm/transform/generators/rewriteBarrelImports.js +0 -733
  307. package/esm/transform/generators/rewriteBarrelImports.js.map +0 -1
  308. package/esm/utils/addIdentifierToWywPreval.js +0 -68
  309. package/esm/utils/addIdentifierToWywPreval.js.map +0 -1
  310. package/esm/utils/collectExportsAndImports.js +0 -1157
  311. package/esm/utils/collectExportsAndImports.js.map +0 -1
  312. package/esm/utils/collectTemplateDependencies.js +0 -228
  313. package/esm/utils/collectTemplateDependencies.js.map +0 -1
  314. package/esm/utils/createId.js +0 -6
  315. package/esm/utils/createId.js.map +0 -1
  316. package/esm/utils/findIdentifiers.js +0 -62
  317. package/esm/utils/findIdentifiers.js.map +0 -1
  318. package/esm/utils/getConstantStringValue.js +0 -58
  319. package/esm/utils/getConstantStringValue.js.map +0 -1
  320. package/esm/utils/getMemberExpressionPropertyName.js +0 -11
  321. package/esm/utils/getMemberExpressionPropertyName.js.map +0 -1
  322. package/esm/utils/getScope.js +0 -6
  323. package/esm/utils/getScope.js.map +0 -1
  324. package/esm/utils/getSource.js +0 -15
  325. package/esm/utils/getSource.js.map +0 -1
  326. package/esm/utils/getTagProcessor.js +0 -404
  327. package/esm/utils/getTagProcessor.js.map +0 -1
  328. package/esm/utils/isExports.js +0 -22
  329. package/esm/utils/isExports.js.map +0 -1
  330. package/esm/utils/isGlobal.js +0 -6
  331. package/esm/utils/isGlobal.js.map +0 -1
  332. package/esm/utils/isNodePath.js +0 -4
  333. package/esm/utils/isNodePath.js.map +0 -1
  334. package/esm/utils/isRemoved.js +0 -46
  335. package/esm/utils/isRemoved.js.map +0 -1
  336. package/esm/utils/isRequire.js +0 -13
  337. package/esm/utils/isRequire.js.map +0 -1
  338. package/esm/utils/isTypedNode.js +0 -6
  339. package/esm/utils/isTypedNode.js.map +0 -1
  340. package/esm/utils/isUnnecessaryReactCall.js +0 -72
  341. package/esm/utils/isUnnecessaryReactCall.js.map +0 -1
  342. package/esm/utils/removeDangerousCode.js +0 -276
  343. package/esm/utils/removeDangerousCode.js.map +0 -1
  344. package/esm/utils/replaceImportMetaEnv.js +0 -44
  345. package/esm/utils/replaceImportMetaEnv.js.map +0 -1
  346. package/esm/utils/scopeHelpers.js +0 -527
  347. package/esm/utils/scopeHelpers.js.map +0 -1
  348. package/esm/utils/traversalCache.js +0 -23
  349. package/esm/utils/traversalCache.js.map +0 -1
  350. package/esm/utils/unwrapExpression.js +0 -18
  351. package/esm/utils/unwrapExpression.js.map +0 -1
  352. package/esm/utils/unwrapSequence.js +0 -14
  353. package/esm/utils/unwrapSequence.js.map +0 -1
  354. package/esm/utils/valueToLiteral.js +0 -59
  355. package/esm/utils/valueToLiteral.js.map +0 -1
  356. package/esm/utils/visitors/JSXElementsRemover.js +0 -51
  357. package/esm/utils/visitors/JSXElementsRemover.js.map +0 -1
  358. package/lib/babel.js +0 -2
  359. package/lib/babel.js.map +0 -1
  360. package/lib/cache.js +0 -308
  361. package/lib/cache.js.map +0 -1
  362. package/lib/debug/fileReporter.js +0 -153
  363. package/lib/debug/fileReporter.js.map +0 -1
  364. package/lib/evaluators/index.js +0 -20
  365. package/lib/evaluators/index.js.map +0 -1
  366. package/lib/index.js +0 -286
  367. package/lib/index.js.map +0 -1
  368. package/lib/module.js +0 -552
  369. package/lib/module.js.map +0 -1
  370. package/lib/options/buildOptions.js +0 -176
  371. package/lib/options/buildOptions.js.map +0 -1
  372. package/lib/options/buildOptions.test.js +0 -141
  373. package/lib/options/buildOptions.test.js.map +0 -1
  374. package/lib/options/loadBabelOptions.js +0 -31
  375. package/lib/options/loadBabelOptions.js.map +0 -1
  376. package/lib/plugins/babel-transform.js +0 -60
  377. package/lib/plugins/babel-transform.js.map +0 -1
  378. package/lib/plugins/collector.js +0 -70
  379. package/lib/plugins/collector.js.map +0 -1
  380. package/lib/plugins/dynamic-import.js +0 -61
  381. package/lib/plugins/dynamic-import.js.map +0 -1
  382. package/lib/plugins/preeval.js +0 -81
  383. package/lib/plugins/preeval.js.map +0 -1
  384. package/lib/plugins/shaker.js +0 -691
  385. package/lib/plugins/shaker.js.map +0 -1
  386. package/lib/shaker.js +0 -95
  387. package/lib/shaker.js.map +0 -1
  388. package/lib/transform/BaseEntrypoint.js +0 -179
  389. package/lib/transform/BaseEntrypoint.js.map +0 -1
  390. package/lib/transform/Entrypoint.helpers.js +0 -279
  391. package/lib/transform/Entrypoint.helpers.js.map +0 -1
  392. package/lib/transform/Entrypoint.js +0 -289
  393. package/lib/transform/Entrypoint.js.map +0 -1
  394. package/lib/transform/Entrypoint.types.js +0 -2
  395. package/lib/transform/Entrypoint.types.js.map +0 -1
  396. package/lib/transform/EvaluatedEntrypoint.js +0 -13
  397. package/lib/transform/EvaluatedEntrypoint.js.map +0 -1
  398. package/lib/transform/actions/AbortError.js +0 -16
  399. package/lib/transform/actions/AbortError.js.map +0 -1
  400. package/lib/transform/actions/BaseAction.js +0 -150
  401. package/lib/transform/actions/BaseAction.js.map +0 -1
  402. package/lib/transform/actions/UnprocessedEntrypointError.js +0 -16
  403. package/lib/transform/actions/UnprocessedEntrypointError.js.map +0 -1
  404. package/lib/transform/actions/actionRunner.js +0 -82
  405. package/lib/transform/actions/actionRunner.js.map +0 -1
  406. package/lib/transform/actions/types.js +0 -2
  407. package/lib/transform/actions/types.js.map +0 -1
  408. package/lib/transform/barrelManifest.js +0 -300
  409. package/lib/transform/barrelManifest.js.map +0 -1
  410. package/lib/transform/generators/baseProcessingHandlers.js +0 -27
  411. package/lib/transform/generators/baseProcessingHandlers.js.map +0 -1
  412. package/lib/transform/generators/collect.js +0 -66
  413. package/lib/transform/generators/collect.js.map +0 -1
  414. package/lib/transform/generators/createStylisPreprocessor.js +0 -372
  415. package/lib/transform/generators/createStylisPreprocessor.js.map +0 -1
  416. package/lib/transform/generators/evalFile.js +0 -57
  417. package/lib/transform/generators/evalFile.js.map +0 -1
  418. package/lib/transform/generators/explodeReexports.js +0 -71
  419. package/lib/transform/generators/explodeReexports.js.map +0 -1
  420. package/lib/transform/generators/extract.js +0 -102
  421. package/lib/transform/generators/extract.js.map +0 -1
  422. package/lib/transform/generators/getExports.js +0 -85
  423. package/lib/transform/generators/getExports.js.map +0 -1
  424. package/lib/transform/generators/index.js +0 -19
  425. package/lib/transform/generators/index.js.map +0 -1
  426. package/lib/transform/generators/processEntrypoint.js +0 -76
  427. package/lib/transform/generators/processEntrypoint.js.map +0 -1
  428. package/lib/transform/generators/processImports.js +0 -82
  429. package/lib/transform/generators/processImports.js.map +0 -1
  430. package/lib/transform/generators/resolveImports.js +0 -221
  431. package/lib/transform/generators/resolveImports.js.map +0 -1
  432. package/lib/transform/generators/rewriteBarrelImports.js +0 -743
  433. package/lib/transform/generators/rewriteBarrelImports.js.map +0 -1
  434. package/lib/transform/generators/transform.js +0 -272
  435. package/lib/transform/generators/transform.js.map +0 -1
  436. package/lib/transform/generators/workflow.js +0 -100
  437. package/lib/transform/generators/workflow.js.map +0 -1
  438. package/lib/transform/helpers/loadWywOptions.js +0 -88
  439. package/lib/transform/helpers/loadWywOptions.js.map +0 -1
  440. package/lib/transform/helpers/withDefaultServices.js +0 -31
  441. package/lib/transform/helpers/withDefaultServices.js.map +0 -1
  442. package/lib/transform/isStaticallyEvaluatableModule.js +0 -159
  443. package/lib/transform/isStaticallyEvaluatableModule.js.map +0 -1
  444. package/lib/transform/rootLog.js +0 -9
  445. package/lib/transform/rootLog.js.map +0 -1
  446. package/lib/transform/types.js +0 -8
  447. package/lib/transform/types.js.map +0 -1
  448. package/lib/transform.js +0 -160
  449. package/lib/transform.js.map +0 -1
  450. package/lib/types.js +0 -2
  451. package/lib/types.js.map +0 -1
  452. package/lib/utils/EventEmitter.js +0 -61
  453. package/lib/utils/EventEmitter.js.map +0 -1
  454. package/lib/utils/ShakerMetadata.js +0 -9
  455. package/lib/utils/ShakerMetadata.js.map +0 -1
  456. package/lib/utils/TransformDiagnostics.js +0 -20
  457. package/lib/utils/TransformDiagnostics.js.map +0 -1
  458. package/lib/utils/TransformMetadata.js +0 -45
  459. package/lib/utils/TransformMetadata.js.map +0 -1
  460. package/lib/utils/addIdentifierToWywPreval.js +0 -75
  461. package/lib/utils/addIdentifierToWywPreval.js.map +0 -1
  462. package/lib/utils/collectExportsAndImports.js +0 -1173
  463. package/lib/utils/collectExportsAndImports.js.map +0 -1
  464. package/lib/utils/collectTemplateDependencies.js +0 -242
  465. package/lib/utils/collectTemplateDependencies.js.map +0 -1
  466. package/lib/utils/createId.js +0 -13
  467. package/lib/utils/createId.js.map +0 -1
  468. package/lib/utils/dispose-polyfill.js +0 -9
  469. package/lib/utils/dispose-polyfill.js.map +0 -1
  470. package/lib/utils/findIdentifiers.js +0 -73
  471. package/lib/utils/findIdentifiers.js.map +0 -1
  472. package/lib/utils/getConstantStringValue.js +0 -66
  473. package/lib/utils/getConstantStringValue.js.map +0 -1
  474. package/lib/utils/getFileIdx.js +0 -16
  475. package/lib/utils/getFileIdx.js.map +0 -1
  476. package/lib/utils/getMemberExpressionPropertyName.js +0 -18
  477. package/lib/utils/getMemberExpressionPropertyName.js.map +0 -1
  478. package/lib/utils/getPluginKey.js +0 -21
  479. package/lib/utils/getPluginKey.js.map +0 -1
  480. package/lib/utils/getScope.js +0 -12
  481. package/lib/utils/getScope.js.map +0 -1
  482. package/lib/utils/getSource.js +0 -24
  483. package/lib/utils/getSource.js.map +0 -1
  484. package/lib/utils/getTagProcessor.js +0 -424
  485. package/lib/utils/getTagProcessor.js.map +0 -1
  486. package/lib/utils/getVisitorKeys.js +0 -11
  487. package/lib/utils/getVisitorKeys.js.map +0 -1
  488. package/lib/utils/hasWywPreval.js +0 -13
  489. package/lib/utils/hasWywPreval.js.map +0 -1
  490. package/lib/utils/importOverrides.js +0 -119
  491. package/lib/utils/importOverrides.js.map +0 -1
  492. package/lib/utils/isExports.js +0 -27
  493. package/lib/utils/isExports.js.map +0 -1
  494. package/lib/utils/isGlobal.js +0 -13
  495. package/lib/utils/isGlobal.js.map +0 -1
  496. package/lib/utils/isNode.js +0 -9
  497. package/lib/utils/isNode.js.map +0 -1
  498. package/lib/utils/isNodePath.js +0 -10
  499. package/lib/utils/isNodePath.js.map +0 -1
  500. package/lib/utils/isNotNull.js +0 -10
  501. package/lib/utils/isNotNull.js.map +0 -1
  502. package/lib/utils/isRemoved.js +0 -52
  503. package/lib/utils/isRemoved.js.map +0 -1
  504. package/lib/utils/isRequire.js +0 -18
  505. package/lib/utils/isRequire.js.map +0 -1
  506. package/lib/utils/isSerializable.js +0 -19
  507. package/lib/utils/isSerializable.js.map +0 -1
  508. package/lib/utils/isTypedNode.js +0 -13
  509. package/lib/utils/isTypedNode.js.map +0 -1
  510. package/lib/utils/isUnnecessaryReactCall.js +0 -81
  511. package/lib/utils/isUnnecessaryReactCall.js.map +0 -1
  512. package/lib/utils/parseRequest.js +0 -37
  513. package/lib/utils/parseRequest.js.map +0 -1
  514. package/lib/utils/peek.js +0 -9
  515. package/lib/utils/peek.js.map +0 -1
  516. package/lib/utils/removeDangerousCode.js +0 -284
  517. package/lib/utils/removeDangerousCode.js.map +0 -1
  518. package/lib/utils/replaceImportMetaEnv.js +0 -50
  519. package/lib/utils/replaceImportMetaEnv.js.map +0 -1
  520. package/lib/utils/scopeHelpers.js +0 -557
  521. package/lib/utils/scopeHelpers.js.map +0 -1
  522. package/lib/utils/traversalCache.js +0 -31
  523. package/lib/utils/traversalCache.js.map +0 -1
  524. package/lib/utils/unwrapExpression.js +0 -25
  525. package/lib/utils/unwrapExpression.js.map +0 -1
  526. package/lib/utils/unwrapSequence.js +0 -20
  527. package/lib/utils/unwrapSequence.js.map +0 -1
  528. package/lib/utils/valueToLiteral.js +0 -65
  529. package/lib/utils/valueToLiteral.js.map +0 -1
  530. package/lib/utils/visitors/JSXElementsRemover.js +0 -57
  531. package/lib/utils/visitors/JSXElementsRemover.js.map +0 -1
  532. package/lib/vm/createVmContext.js +0 -166
  533. package/lib/vm/createVmContext.js.map +0 -1
  534. package/lib/vm/process.js +0 -38
  535. package/lib/vm/process.js.map +0 -1
  536. package/types/babel.d.ts +0 -2
  537. package/types/babel.js +0 -2
  538. package/types/options/buildOptions.d.ts +0 -6
  539. package/types/options/buildOptions.js +0 -178
  540. package/types/options/loadBabelOptions.d.ts +0 -3
  541. package/types/options/loadBabelOptions.js +0 -26
  542. package/types/plugins/babel-transform.d.ts +0 -4
  543. package/types/plugins/babel-transform.js +0 -49
  544. package/types/plugins/collector.d.ts +0 -23
  545. package/types/plugins/collector.js +0 -62
  546. package/types/plugins/dynamic-import.d.ts +0 -6
  547. package/types/plugins/dynamic-import.js +0 -60
  548. package/types/plugins/preeval.d.ts +0 -16
  549. package/types/plugins/preeval.js +0 -69
  550. package/types/plugins/shaker.d.ts +0 -14
  551. package/types/plugins/shaker.js +0 -724
  552. package/types/transform/generators/explodeReexports.d.ts +0 -7
  553. package/types/transform/generators/explodeReexports.js +0 -65
  554. package/types/utils/addIdentifierToWywPreval.d.ts +0 -4
  555. package/types/utils/addIdentifierToWywPreval.js +0 -74
  556. package/types/utils/collectExportsAndImports.d.ts +0 -31
  557. package/types/utils/collectExportsAndImports.js +0 -1147
  558. package/types/utils/collectTemplateDependencies.d.ts +0 -17
  559. package/types/utils/collectTemplateDependencies.js +0 -220
  560. package/types/utils/createId.d.ts +0 -2
  561. package/types/utils/createId.js +0 -9
  562. package/types/utils/findIdentifiers.d.ts +0 -6
  563. package/types/utils/findIdentifiers.js +0 -67
  564. package/types/utils/getConstantStringValue.d.ts +0 -2
  565. package/types/utils/getConstantStringValue.js +0 -94
  566. package/types/utils/getMemberExpressionPropertyName.d.ts +0 -2
  567. package/types/utils/getMemberExpressionPropertyName.js +0 -46
  568. package/types/utils/getScope.d.ts +0 -2
  569. package/types/utils/getScope.js +0 -10
  570. package/types/utils/getSource.d.ts +0 -2
  571. package/types/utils/getSource.js +0 -22
  572. package/types/utils/getTagProcessor.d.ts +0 -13
  573. package/types/utils/getTagProcessor.js +0 -411
  574. package/types/utils/isExports.d.ts +0 -6
  575. package/types/utils/isExports.js +0 -19
  576. package/types/utils/isGlobal.d.ts +0 -2
  577. package/types/utils/isGlobal.js +0 -9
  578. package/types/utils/isNodePath.d.ts +0 -3
  579. package/types/utils/isNodePath.js +0 -6
  580. package/types/utils/isRemoved.d.ts +0 -5
  581. package/types/utils/isRemoved.js +0 -41
  582. package/types/utils/isRequire.d.ts +0 -6
  583. package/types/utils/isRequire.js +0 -14
  584. package/types/utils/isTypedNode.d.ts +0 -5
  585. package/types/utils/isTypedNode.js +0 -9
  586. package/types/utils/isUnnecessaryReactCall.d.ts +0 -3
  587. package/types/utils/isUnnecessaryReactCall.js +0 -75
  588. package/types/utils/removeDangerousCode.d.ts +0 -4
  589. package/types/utils/removeDangerousCode.js +0 -326
  590. package/types/utils/replaceImportMetaEnv.d.ts +0 -3
  591. package/types/utils/replaceImportMetaEnv.js +0 -39
  592. package/types/utils/scopeHelpers.d.ts +0 -12
  593. package/types/utils/scopeHelpers.js +0 -580
  594. package/types/utils/traversalCache.d.ts +0 -4
  595. package/types/utils/traversalCache.js +0 -27
  596. package/types/utils/unwrapExpression.d.ts +0 -2
  597. package/types/utils/unwrapExpression.js +0 -57
  598. package/types/utils/unwrapSequence.d.ts +0 -8
  599. package/types/utils/unwrapSequence.js +0 -16
  600. package/types/utils/valueToLiteral.d.ts +0 -3
  601. package/types/utils/valueToLiteral.js +0 -63
  602. package/types/utils/visitors/JSXElementsRemover.d.ts +0 -3
  603. package/types/utils/visitors/JSXElementsRemover.js +0 -51
@@ -0,0 +1 @@
1
+ {"mappings":"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","names":[],"sources":["../../../src/transform/generators/resolveStaticOxcValues.ts"],"version":3,"sourcesContent":["/* eslint-disable no-restricted-syntax,no-continue,@typescript-eslint/no-use-before-define */\n\nimport { createHash } from 'crypto';\nimport { readFileSync, statSync } from 'fs';\nimport { dirname, isAbsolute, relative, resolve as resolvePath } from 'path';\n\nimport { isFeatureEnabled, type FeatureFlag } from '@wyw-in-js/shared';\nimport type {\n ExportSpecifier,\n Expression,\n ImportDeclaration,\n ImportSpecifier,\n ModuleExportName,\n Node,\n Program,\n VariableDeclaration,\n} from 'oxc-parser';\n\nimport { oxcShaker } from '../../shaker';\nimport { collectOxcProcessorImportsFromProgram } from '../../utils/collectOxcExportsAndImports';\nimport {\n createOxcStaticCallableValue,\n evaluateOxcStaticExpression,\n evaluateOxcStaticExpressionAt,\n isOxcStaticSerializableValue,\n type OxcStaticValueCandidate,\n} from '../../utils/collectOxcTemplateDependencies';\nimport {\n appendOxcWywPreval,\n runOxcPreevalStage,\n} from '../../utils/oxcPreevalStage';\nimport { parseOxcProgramCached } from '../../utils/parseOxc';\nimport { stripQueryAndHash } from '../../utils/parseRequest';\nimport { getProcessorForImport } from '../../utils/processorLookup';\nimport { Entrypoint } from '../Entrypoint';\nimport type { IEntrypointDependency } from '../Entrypoint.types';\nimport type { ITransformAction, SyncScenarioFor } from '../types';\n\ntype AnyNode = Node & Record<string, unknown>;\n\ntype ImportBinding = {\n imported: '*' | 'default' | string;\n local: string;\n source: string;\n};\n\ntype CollectImportBindingsOptions = {\n includeNamespace?: boolean;\n};\n\ntype ExportTarget =\n | {\n expression: Expression;\n kind: 'expression';\n localName?: string;\n }\n | {\n imported: 'default' | string;\n kind: 'import';\n source: string;\n };\n\ntype StaticExportResult = {\n callable?: 'zero-arg';\n dependencies: string[];\n sideEffectDependencies?: string[];\n sideEffectImportLocals?: string[];\n value: unknown;\n};\n\ntype StaticFileAnalysis = {\n code: string;\n codeHash: string;\n program: Program;\n};\n\ntype StaticFileHashCacheEntry = {\n hash: string;\n mtimeMs: number;\n size: number;\n};\n\ntype StaticMetadataPreevalCacheEntry =\n | {\n result: null;\n }\n | {\n result: ReturnType<typeof runOxcPreevalStage>;\n };\n\n// Null entries carry an attempt counter so we can retry a bounded number of\n// times before accepting the failure as stable. This avoids both:\n// (a) poisoning the cache forever from a transient resolver failure\n// (b) thundering-herd retries where every consumer re-walks a stable miss\ntype StaticExportCacheEntry =\n | {\n attempts: number;\n result: null;\n }\n | {\n dependencyHashes: Map<string, string>;\n result: StaticExportResult;\n };\n\nconst STATIC_EXPORT_MAX_NULL_ATTEMPTS = 2;\n\ntype StaticImportValueFeatures = {\n staticImportValues?: FeatureFlag;\n};\n\ntype StaticExpressionOptions = {\n allowMetadataCalls?: boolean;\n ignoredMutableCallArgumentNames?: Set<string>;\n};\n\ntype StaticResolveDebugPhase =\n | 'candidate'\n | 'entrypoint'\n | 'export'\n | 'import'\n | 'processor-metadata';\n\ntype StaticResolveDebugStatus = 'rejected' | 'resolved' | 'skipped';\n\ntype StaticResolveDebugEvent = {\n candidate?: string;\n dependency?: string;\n exported?: string;\n filename: string;\n imported?: string;\n importer?: string;\n phase: StaticResolveDebugPhase;\n reason?: string;\n source?: string;\n status: StaticResolveDebugStatus;\n};\n\nconst isInsideRoot = (filename: string, root: string): boolean => {\n const relativePath = relative(root, filename);\n return (\n relativePath === '' ||\n (!!relativePath &&\n !relativePath.startsWith('..') &&\n !isAbsolute(relativePath))\n );\n};\n\nconst nodeModulesPattern = /[\\\\/]node_modules[\\\\/]/;\n\nconst isLocalStaticMetadataFile = (filename: string, root: string): boolean => {\n const strippedFilename = stripQueryAndHash(filename);\n if (isInsideRoot(strippedFilename, root)) {\n return true;\n }\n\n return (\n isAbsolute(strippedFilename) && !nodeModulesPattern.test(strippedFilename)\n );\n};\n\nconst isEnvDisabled = (value: string): boolean =>\n value === '0' || value === 'false' || value === 'no' || value === 'off';\n\nconst isStaticImportValuesEnabled = (\n action: ITransformAction,\n filename: string\n): boolean => {\n const envValue = process.env.WYW_STATIC_IMPORT_VALUES?.trim().toLowerCase();\n if (envValue) {\n return !isEnvDisabled(envValue);\n }\n\n return isFeatureEnabled(\n action.services.options.pluginOptions.features as StaticImportValueFeatures,\n 'staticImportValues',\n filename\n );\n};\n\nconst debugStaticResolve = (\n action: ITransformAction,\n event: StaticResolveDebugEvent\n): void => {\n const labels = Object.fromEntries(\n Object.entries({\n ...event,\n type: 'staticResolve',\n }).filter(([, value]) => value !== undefined)\n );\n\n action.services.eventEmitter.single(labels);\n};\n\nconst parseProgram = (code: string, filename: string): Program =>\n parseOxcProgramCached(filename, code, 'unambiguous');\n\nconst staticFileAnalysisCaches = new WeakMap<\n object,\n Map<string, StaticFileAnalysis>\n>();\n\nconst staticFileHashCaches = new WeakMap<\n object,\n Map<string, StaticFileHashCacheEntry>\n>();\n\nconst staticExportResultCaches = new WeakMap<\n object,\n Map<string, StaticExportCacheEntry>\n>();\n\nconst staticMetadataPreevalCaches = new WeakMap<\n object,\n Map<string, StaticMetadataPreevalCacheEntry>\n>();\n\nconst hashStaticContent = (content: string | Buffer): string =>\n createHash('sha256').update(content).digest('hex');\n\nconst getWeakCacheMap = <TValue>(\n caches: WeakMap<object, Map<string, TValue>>,\n key: object\n): Map<string, TValue> => {\n let cache = caches.get(key);\n if (!cache) {\n cache = new Map();\n caches.set(key, cache);\n }\n\n return cache;\n};\n\nconst isStaticResolveCacheEnabled = (): boolean => {\n const envValue = process.env.WYW_STATIC_RESOLVE_CACHE?.trim().toLowerCase();\n if (envValue) {\n return !isEnvDisabled(envValue);\n }\n\n return true;\n};\n\nconst staticCachePrefix = (action: ITransformAction): string =>\n `${action.services.cache.getKeySalt() ?? ''}\\0${\n action.services.options.root ?? ''\n }`;\n\nconst staticFileAnalysisCache = (\n action: ITransformAction\n): Map<string, StaticFileAnalysis> =>\n getWeakCacheMap(staticFileAnalysisCaches, action.services.cache);\n\nconst staticFileHashCache = (\n action: ITransformAction\n): Map<string, StaticFileHashCacheEntry> =>\n getWeakCacheMap(staticFileHashCaches, action.services.cache);\n\nconst staticExportResultCache = (\n action: ITransformAction\n): Map<string, StaticExportCacheEntry> =>\n getWeakCacheMap(staticExportResultCaches, action.services.cache);\n\nconst staticMetadataPreevalCache = (\n action: ITransformAction\n): Map<string, StaticMetadataPreevalCacheEntry> =>\n getWeakCacheMap(staticMetadataPreevalCaches, action.services.cache);\n\nconst staticFileAnalysisCacheKey = (\n action: ITransformAction,\n filename: string,\n codeHash: string\n): string => `${staticCachePrefix(action)}\\0${filename}\\0${codeHash}`;\n\nconst staticExportCacheKey = (\n action: ITransformAction,\n filename: string,\n exportedName: string,\n codeHash: string\n): string =>\n `${staticCachePrefix(action)}\\0${filename}\\0${exportedName}\\0${codeHash}`;\n\nconst staticMetadataPreevalCacheKey = (\n action: ITransformAction,\n filename: string,\n codeHash: string\n): string => `${staticCachePrefix(action)}\\0${filename}\\0${codeHash}`;\n\nconst getStaticFileContentHash = (\n action: ITransformAction,\n dependency: string\n): string | null => {\n const filename = stripQueryAndHash(dependency);\n if (!isAbsolute(filename)) {\n return null;\n }\n\n let stat;\n try {\n stat = statSync(filename);\n } catch {\n return null;\n }\n\n if (!stat.isFile()) {\n return null;\n }\n\n const cache = staticFileHashCache(action);\n const cached = cache.get(filename);\n if (cached && cached.mtimeMs === stat.mtimeMs && cached.size === stat.size) {\n return cached.hash;\n }\n\n let hash: string;\n try {\n hash = hashStaticContent(readFileSync(filename));\n } catch {\n return null;\n }\n\n cache.set(filename, {\n hash,\n mtimeMs: stat.mtimeMs,\n size: stat.size,\n });\n return hash;\n};\n\nconst collectStaticDependencyHashes = (\n action: ITransformAction,\n dependencies: string[]\n): Map<string, string> | null => {\n const hashes = new Map<string, string>();\n for (const dependency of dependencies) {\n const hash = getStaticFileContentHash(action, dependency);\n if (!hash) {\n return null;\n }\n\n hashes.set(stripQueryAndHash(dependency), hash);\n }\n\n return hashes;\n};\n\nconst areStaticDependencyHashesCurrent = (\n action: ITransformAction,\n dependencyHashes: Map<string, string>\n): boolean => {\n for (const [dependency, expectedHash] of dependencyHashes) {\n if (getStaticFileContentHash(action, dependency) !== expectedHash) {\n return false;\n }\n }\n\n return true;\n};\n\nconst getStaticExportCachedResult = (\n action: ITransformAction,\n filename: string,\n exportedName: string,\n codeHash: string\n): StaticExportResult | null | undefined => {\n if (!isStaticResolveCacheEnabled()) {\n return undefined;\n }\n\n const cache = staticExportResultCache(action);\n const cacheKey = staticExportCacheKey(\n action,\n filename,\n exportedName,\n codeHash\n );\n const cached = cache.get(cacheKey);\n if (!cached) {\n return undefined;\n }\n\n if (cached.result === null) {\n // Bounded retry: until the attempt counter has been bumped enough times\n // that we accept the null as stable, treat it as a cache miss so the\n // caller re-walks. The counter is updated in setStaticExportCachedResult.\n if (cached.attempts < STATIC_EXPORT_MAX_NULL_ATTEMPTS) {\n return undefined;\n }\n return null;\n }\n\n if (areStaticDependencyHashesCurrent(action, cached.dependencyHashes)) {\n return cached.result;\n }\n\n cache.delete(cacheKey);\n return undefined;\n};\n\nconst setStaticExportCachedResult = (\n action: ITransformAction,\n filename: string,\n exportedName: string,\n codeHash: string,\n result: StaticExportResult | null\n): void => {\n if (!isStaticResolveCacheEnabled()) {\n return;\n }\n\n const cache = staticExportResultCache(action);\n const cacheKey = staticExportCacheKey(\n action,\n filename,\n exportedName,\n codeHash\n );\n if (!result) {\n const existing = cache.get(cacheKey);\n const attempts =\n existing && existing.result === null ? existing.attempts + 1 : 1;\n cache.set(cacheKey, { attempts, result: null });\n return;\n }\n\n const dependencyHashes = collectStaticDependencyHashes(\n action,\n result.dependencies\n );\n if (!dependencyHashes) {\n return;\n }\n\n cache.set(cacheKey, {\n dependencyHashes,\n result,\n });\n};\n\nconst getStaticFileAnalysis = (\n action: ITransformAction,\n filename: string\n): StaticFileAnalysis | null => {\n const loadedAndParsed = action.services.loadAndParseFn(\n action.services,\n filename,\n undefined,\n action.services.log\n );\n if (\n loadedAndParsed.evaluator === 'ignored' ||\n loadedAndParsed.evaluator !== oxcShaker\n ) {\n return null;\n }\n\n const { code } = loadedAndParsed;\n const codeHash = hashStaticContent(code);\n const cache = staticFileAnalysisCache(action);\n const cacheKey = staticFileAnalysisCacheKey(action, filename, codeHash);\n const cached = cache.get(cacheKey);\n if (cached) {\n return cached;\n }\n\n const analysis = {\n code,\n codeHash,\n program: parseProgram(code, filename),\n };\n cache.set(cacheKey, analysis);\n return analysis;\n};\n\nconst getStaticMetadataPreevalResult = (\n action: ITransformAction,\n filename: string,\n code: string,\n codeHash: string\n): ReturnType<typeof runOxcPreevalStage> | null => {\n const cache = staticMetadataPreevalCache(action);\n const cacheKey = staticMetadataPreevalCacheKey(action, filename, codeHash);\n const cached = cache.get(cacheKey);\n if (cached) {\n return cached.result;\n }\n\n const root = action.services.options.root ?? process.cwd();\n try {\n const result = action.services.eventEmitter.perf(\n 'transform:preeval:staticMetadata',\n () =>\n runOxcPreevalStage(\n code,\n {\n filename,\n root,\n },\n {\n ...action.services.options.pluginOptions,\n eventEmitter: action.services.eventEmitter,\n }\n )\n );\n cache.set(cacheKey, { result });\n return result;\n } catch {\n cache.set(cacheKey, { result: null });\n return null;\n }\n};\n\nconst getChildren = (node: Node): Node[] => {\n const children: Node[] = [];\n Object.entries(node as AnyNode).forEach(([key, value]) => {\n if (\n key === 'comments' ||\n key === 'errors' ||\n key === 'parent' ||\n key === 'span'\n ) {\n return;\n }\n\n if (Array.isArray(value)) {\n value.forEach((item) => {\n if (item && typeof item === 'object' && 'type' in item) {\n children.push(item as Node);\n }\n });\n return;\n }\n\n if (value && typeof value === 'object' && 'type' in value) {\n children.push(value as Node);\n }\n });\n\n return children;\n};\n\nconst moduleExportName = (node: ModuleExportName): string =>\n node.type === 'Literal' ? String(node.value) : node.name;\n\nconst unwrapExpression = (expr: Node): Node => {\n let current = expr;\n\n for (;;) {\n if (\n current.type === 'TSAsExpression' ||\n current.type === 'TSSatisfiesExpression' ||\n current.type === 'TSNonNullExpression' ||\n current.type === 'TSInstantiationExpression' ||\n current.type === 'TSTypeAssertion' ||\n current.type === 'ParenthesizedExpression'\n ) {\n current = current.expression;\n continue;\n }\n\n return current;\n }\n};\n\nconst isProcessEnvMember = (node: Node): boolean => {\n if (node.type !== 'MemberExpression' || node.computed) {\n return false;\n }\n\n if (node.property.type !== 'Identifier' || node.property.name !== 'env') {\n return false;\n }\n\n return node.object.type === 'Identifier' && node.object.name === 'process';\n};\n\nconst isSafeLiteral = (\n node: Node\n): node is Node & {\n type: 'Literal';\n value: boolean | null | number | string;\n} => {\n if (node.type !== 'Literal') {\n return false;\n }\n\n const { value } = node as AnyNode;\n return (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n );\n};\n\nconst isSafeStaticExpression = (\n expr: Node,\n options: StaticExpressionOptions = {}\n): boolean => {\n const unwrapped = unwrapExpression(expr);\n\n if (isSafeLiteral(unwrapped)) {\n return true;\n }\n\n if (unwrapped.type === 'Identifier') {\n return true;\n }\n\n if (unwrapped.type === 'TemplateLiteral') {\n return unwrapped.expressions.every((item) =>\n isSafeStaticExpression(item, options)\n );\n }\n\n if (unwrapped.type === 'UnaryExpression') {\n return isSafeStaticExpression(unwrapped.argument, options);\n }\n\n if (\n unwrapped.type === 'BinaryExpression' ||\n unwrapped.type === 'LogicalExpression'\n ) {\n return (\n isSafeStaticExpression(unwrapped.left, options) &&\n isSafeStaticExpression(unwrapped.right, options)\n );\n }\n\n if (unwrapped.type === 'ConditionalExpression') {\n return (\n isSafeStaticExpression(unwrapped.test, options) &&\n isSafeStaticExpression(unwrapped.consequent, options) &&\n isSafeStaticExpression(unwrapped.alternate, options)\n );\n }\n\n if (unwrapped.type === 'MemberExpression') {\n return (\n isSafeStaticExpression(unwrapped.object, options) &&\n (unwrapped.computed\n ? isSafeStaticExpression(unwrapped.property, options)\n : unwrapped.property.type === 'Identifier')\n );\n }\n\n if (options.allowMetadataCalls && unwrapped.type === 'CallExpression') {\n return (\n unwrapped.callee.type === 'Identifier' && unwrapped.arguments.length === 0\n );\n }\n\n if (\n options.allowMetadataCalls &&\n (unwrapped.type === 'ArrowFunctionExpression' ||\n unwrapped.type === 'FunctionExpression')\n ) {\n return (\n !unwrapped.async &&\n unwrapped.params.length === 0 &&\n !!unwrapped.body &&\n isSafeFunctionBodyExpression(unwrapped.body, options)\n );\n }\n\n if (unwrapped.type === 'ArrayExpression') {\n return unwrapped.elements.every((item) => {\n if (!item) {\n return false;\n }\n\n return item.type === 'SpreadElement'\n ? isSafeStaticExpression(item.argument, options)\n : isSafeStaticExpression(item, options);\n });\n }\n\n if (unwrapped.type === 'ObjectExpression') {\n return unwrapped.properties.every((property) => {\n if (property.type === 'SpreadElement') {\n return isSafeStaticExpression(property.argument);\n }\n\n const propertyNode = property as AnyNode;\n if (propertyNode.computed || propertyNode.method) {\n return false;\n }\n\n return (\n propertyNode.value &&\n typeof propertyNode.value === 'object' &&\n isSafeStaticExpression(propertyNode.value as Node, options)\n );\n });\n }\n\n return false;\n};\n\nconst isTypeOnlyImport = (statement: ImportDeclaration): boolean => {\n if (statement.importKind === 'type') {\n return true;\n }\n\n return statement.specifiers.every(\n (specifier) =>\n specifier.type === 'ImportSpecifier' &&\n (specifier as ImportSpecifier).importKind === 'type'\n );\n};\n\nconst getImportBinding = (\n statement: ImportDeclaration,\n specifier: ImportDeclaration['specifiers'][number],\n options: CollectImportBindingsOptions = {}\n): ImportBinding | null => {\n const local = specifier.local?.name;\n if (!local) {\n return null;\n }\n\n if (specifier.type === 'ImportNamespaceSpecifier') {\n return options.includeNamespace\n ? {\n imported: '*',\n local,\n source: statement.source.value,\n }\n : null;\n }\n\n if (specifier.type === 'ImportDefaultSpecifier') {\n return {\n imported: 'default',\n local,\n source: statement.source.value,\n };\n }\n\n if (specifier.type !== 'ImportSpecifier') {\n return null;\n }\n\n if (\n statement.importKind === 'type' ||\n (specifier as ImportSpecifier).importKind === 'type'\n ) {\n return null;\n }\n\n return {\n imported: moduleExportName((specifier as ImportSpecifier).imported),\n local,\n source: statement.source.value,\n };\n};\n\nconst collectImportBindings = (\n program: Program,\n options: CollectImportBindingsOptions = {}\n): Map<string, ImportBinding> => {\n const result = new Map<string, ImportBinding>();\n\n program.body.forEach((statement) => {\n if (statement.type !== 'ImportDeclaration' || isTypeOnlyImport(statement)) {\n return;\n }\n\n statement.specifiers.forEach((specifier) => {\n const binding = getImportBinding(statement, specifier, options);\n if (binding) {\n result.set(binding.local, binding);\n }\n });\n });\n\n return result;\n};\n\ntype Range = {\n end: number;\n start: number;\n};\n\ntype Replacement = Range & {\n text: string;\n};\n\nconst applyReplacements = (\n code: string,\n replacements: Replacement[]\n): string => {\n let result = code;\n replacements\n .sort((a, b) => b.start - a.start)\n .forEach((replacement) => {\n result =\n result.slice(0, replacement.start) +\n replacement.text +\n result.slice(replacement.end);\n });\n return result;\n};\n\nconst isIdentifierBindingPosition = (\n node: Node,\n parent: Node | null\n): boolean => {\n if (node.type !== 'Identifier' || !parent) {\n return false;\n }\n\n if (\n (parent.type === 'VariableDeclarator' && parent.id === node) ||\n (parent.type === 'FunctionDeclaration' && parent.id === node) ||\n (parent.type === 'FunctionExpression' && parent.id === node) ||\n (parent.type === 'ClassDeclaration' && parent.id === node) ||\n (parent.type === 'ClassExpression' && parent.id === node)\n ) {\n return true;\n }\n\n if (\n (parent.type === 'ArrowFunctionExpression' ||\n parent.type === 'FunctionDeclaration' ||\n parent.type === 'FunctionExpression') &&\n parent.params.some((param) => param === node)\n ) {\n return true;\n }\n\n return (\n (parent.type === 'ImportSpecifier' && parent.local === node) ||\n (parent.type === 'ImportDefaultSpecifier' && parent.local === node) ||\n (parent.type === 'ImportNamespaceSpecifier' && parent.local === node)\n );\n};\n\nconst isPropertyKeyOnlyIdentifier = (\n node: Node,\n parent: Node | null\n): boolean =>\n node.type === 'Identifier' &&\n !!parent &&\n ((parent.type === 'MemberExpression' &&\n parent.property === node &&\n !parent.computed) ||\n (parent.type === 'Property' &&\n parent.key === node &&\n !parent.computed &&\n !parent.shorthand));\n\nconst collectUsedIdentifierNames = (program: Program): Set<string> => {\n const used = new Set<string>();\n\n const walk = (node: Node, parent: Node | null): void => {\n if (node.type === 'ImportDeclaration') {\n return;\n }\n\n if (\n node.type === 'Identifier' &&\n !isIdentifierBindingPosition(node, parent) &&\n !isPropertyKeyOnlyIdentifier(node, parent)\n ) {\n used.add(node.name);\n }\n\n getChildren(node).forEach((child) => walk(child, node));\n };\n\n walk(program, null);\n return used;\n};\n\nconst removableStaticHelperNames = (\n program: Program,\n staticValueNames: Set<string>\n): Set<string> => {\n const used = collectUsedIdentifierNames(program);\n const result = new Set<string>();\n\n program.body.forEach((statement) => {\n if (statement.type !== 'VariableDeclaration') {\n return;\n }\n\n statement.declarations.forEach((declarator) => {\n if (\n declarator.id.type === 'Identifier' &&\n staticValueNames.has(declarator.id.name) &&\n !used.has(declarator.id.name)\n ) {\n result.add(declarator.id.name);\n }\n });\n });\n\n return result;\n};\n\nconst collectImportLocalReferences = (\n node: Node,\n importLocals: Set<string>,\n result: Set<string>\n): void => {\n const walk = (item: Node, parent: Node | null): void => {\n if (\n item.type === 'Identifier' &&\n importLocals.has(item.name) &&\n !isIdentifierBindingPosition(item, parent) &&\n !isPropertyKeyOnlyIdentifier(item, parent)\n ) {\n result.add(item.name);\n }\n\n getChildren(item).forEach((child) => walk(child, item));\n };\n\n walk(node, null);\n};\n\nconst parseStaticExpressionSource = (\n source: string,\n filename: string\n): Expression | null => {\n try {\n const program = parseProgram(\n `const __wyw_static_value = ${source};`,\n filename\n );\n const declaration = program.body[0];\n if (declaration?.type !== 'VariableDeclaration') {\n return null;\n }\n\n const [declarator] = declaration.declarations;\n return declarator?.init ?? null;\n } catch {\n return null;\n }\n};\n\nconst expressionUsesNameOnlyAsZeroArgCalls = (\n expression: Node,\n name: string\n): boolean => {\n let seen = false;\n let valid = true;\n\n const walk = (node: Node, parent: Node | null): void => {\n if (!valid) {\n return;\n }\n\n if (\n node.type === 'Identifier' &&\n node.name === name &&\n !isIdentifierBindingPosition(node, parent) &&\n !isPropertyKeyOnlyIdentifier(node, parent)\n ) {\n if (\n parent?.type === 'CallExpression' &&\n parent.callee === node &&\n parent.arguments.length === 0\n ) {\n seen = true;\n } else {\n valid = false;\n return;\n }\n }\n\n getChildren(node).forEach((child) => walk(child, node));\n };\n\n walk(expression, null);\n return seen && valid;\n};\n\nconst bindStaticResolvedValue = (\n env: Map<string, unknown>,\n expression: Node,\n local: string,\n resolved: StaticExportResult,\n options: { wrapNonCallable?: boolean } = {}\n): boolean => {\n if (resolved.callable === 'zero-arg') {\n if (!expressionUsesNameOnlyAsZeroArgCalls(expression, local)) {\n return false;\n }\n\n env.set(local, createOxcStaticCallableValue(resolved.value));\n return true;\n }\n\n env.set(\n local,\n options.wrapNonCallable\n ? createOxcStaticCallableValue(resolved.value)\n : resolved.value\n );\n return true;\n};\n\nconst removeStaticHelperDeclarations = (\n code: string,\n filename: string,\n staticValueNames: Set<string>\n): { code: string; removed: Set<string>; removedImportLocals: Set<string> } => {\n if (staticValueNames.size === 0) {\n return { code, removed: new Set(), removedImportLocals: new Set() };\n }\n\n const program = parseProgram(code, filename);\n const removableNames = removableStaticHelperNames(program, staticValueNames);\n const importLocals = new Set<string>();\n collectImportBindings(program).forEach((_, local) => importLocals.add(local));\n const removedImportLocals = new Set<string>();\n const ranges: Range[] = [];\n const replacements: Replacement[] = [];\n\n program.body.forEach((statement) => {\n if (\n statement.type !== 'VariableDeclaration' ||\n statement.declarations.length === 0\n ) {\n return;\n }\n\n const removableIndexes = statement.declarations.flatMap(\n (declarator, index) =>\n declarator.id.type === 'Identifier' &&\n removableNames.has(declarator.id.name)\n ? [index]\n : []\n );\n if (removableIndexes.length === 0) {\n return;\n }\n\n removableIndexes.forEach((index) => {\n collectImportLocalReferences(\n statement.declarations[index],\n importLocals,\n removedImportLocals\n );\n });\n\n if (removableIndexes.length === statement.declarations.length) {\n ranges.push({\n end: statement.end,\n start: statement.start,\n });\n return;\n }\n\n const keptDeclarations = statement.declarations\n .filter((_, index) => !removableIndexes.includes(index))\n .map((declarator) => code.slice(declarator.start, declarator.end));\n replacements.push({\n end: statement.end,\n start: statement.start,\n text: `${statement.kind} ${keptDeclarations.join(', ')};`,\n });\n });\n\n return {\n code: applyReplacements(code, [\n ...ranges.map((range) => ({ ...range, text: '' })),\n ...replacements,\n ]),\n removed: removableNames,\n removedImportLocals,\n };\n};\n\nconst importSpecifierLocalName = (\n specifier: ImportDeclaration['specifiers'][number]\n): string | null => specifier.local?.name ?? null;\n\nconst removeUnusedStaticImports = (\n code: string,\n filename: string,\n staticImportLocals: Set<string>,\n sideEffectImportLocals: Set<string>\n): string => {\n if (staticImportLocals.size === 0) {\n return code;\n }\n\n const program = parseProgram(code, filename);\n const used = collectUsedIdentifierNames(program);\n const ranges: Range[] = [];\n const replacements: Replacement[] = [];\n\n program.body.forEach((statement) => {\n if (\n statement.type !== 'ImportDeclaration' ||\n statement.specifiers.length === 0\n ) {\n return;\n }\n\n const removable = statement.specifiers.flatMap((specifier, index) => {\n const localName = importSpecifierLocalName(specifier);\n return localName &&\n staticImportLocals.has(localName) &&\n !used.has(localName)\n ? [{ index, localName }]\n : [];\n });\n\n if (removable.length === 0) {\n return;\n }\n\n if (removable.length === statement.specifiers.length) {\n if (\n removable.some((item) => sideEffectImportLocals.has(item.localName))\n ) {\n replacements.push({\n end: statement.end,\n start: statement.start,\n text: `import ${code.slice(\n statement.source.start,\n statement.source.end\n )};`,\n });\n return;\n }\n\n ranges.push({\n end: statement.end,\n start: statement.start,\n });\n }\n });\n\n return applyReplacements(code, [\n ...ranges.map((range) => ({ ...range, text: '' })),\n ...replacements,\n ]);\n};\n\nconst replaceStaticWYWMetaExtendsHelpers = (\n code: string,\n filename: string,\n helperValues: Map<string, unknown>\n): string => {\n if (helperValues.size === 0) {\n return code;\n }\n\n const program = parseProgram(code, filename);\n const replacements: Replacement[] = [];\n\n const visit = (node: Node): void => {\n if (node.type === 'ObjectExpression') {\n const extendsExpression = findWYWMetaExtendsExpression(node);\n if (extendsExpression) {\n const unwrapped = unwrapExpression(extendsExpression);\n if (\n unwrapped.type === 'CallExpression' &&\n unwrapped.callee.type === 'Identifier' &&\n unwrapped.arguments.length === 0 &&\n helperValues.has(unwrapped.callee.name)\n ) {\n const replacement = staticWYWMetaExtendsReplacementCode(\n helperValues.get(unwrapped.callee.name)\n );\n if (replacement) {\n replacements.push({\n end: extendsExpression.end,\n start: extendsExpression.start,\n text: replacement,\n });\n }\n }\n }\n }\n\n getChildren(node).forEach(visit);\n };\n\n visit(program);\n return applyReplacements(code, replacements);\n};\n\nconst pruneStaticPreevalCode = (\n code: string,\n filename: string,\n staticValueNames: Set<string>,\n staticImportLocals: Set<string>,\n staticExtendsHelperValues: Map<string, unknown>,\n sideEffectImportLocals: Set<string>\n): string => {\n const codeWithMetadataPruned = replaceStaticWYWMetaExtendsHelpers(\n code,\n filename,\n staticExtendsHelperValues\n );\n const helpersRemoved = removeStaticHelperDeclarations(\n codeWithMetadataPruned,\n filename,\n staticValueNames\n );\n if (helpersRemoved.removed.size === 0) {\n return codeWithMetadataPruned;\n }\n\n const importLocalsToPrune = new Set([\n ...staticImportLocals,\n ...helpersRemoved.removedImportLocals,\n ]);\n\n return removeUnusedStaticImports(\n helpersRemoved.code,\n filename,\n importLocalsToPrune,\n sideEffectImportLocals\n );\n};\n\nconst collectProcessorImportLocals = (\n action: ITransformAction,\n program: Program,\n code: string,\n filename: string\n): Set<string> => {\n const result = new Set<string>();\n\n collectOxcProcessorImportsFromProgram(program, code).forEach((item) => {\n if (\n item.type !== 'esm' ||\n item.imported === '*' ||\n item.imported === 'side-effect'\n ) {\n return;\n }\n\n const localName = item.local.name ?? item.local.code;\n if (!localName) {\n return;\n }\n\n const [processor] = getProcessorForImport(\n {\n imported: item.imported,\n source: item.source,\n },\n filename,\n action.services.options.pluginOptions\n );\n\n if (!processor) {\n return;\n }\n\n result.add(localName);\n const rootLocalName = localName.split('.')[0];\n if (rootLocalName) {\n result.add(rootLocalName);\n }\n });\n\n return result;\n};\n\nconst isStaticWYWMetaValue = (\n value: unknown,\n seen: Set<unknown> = new Set()\n): boolean => {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n\n if (seen.has(value)) {\n return false;\n }\n seen.add(value);\n\n const meta = (value as { __wyw_meta?: unknown }).__wyw_meta;\n if (typeof meta !== 'object' || meta === null) {\n return false;\n }\n\n const { className, extends: extended } = meta as {\n className?: unknown;\n extends?: unknown;\n };\n\n return (\n typeof className === 'string' &&\n (extended === null || isStaticWYWMetaValue(extended, seen))\n );\n};\n\ntype StaticWYWSelectorMetaValue = {\n __wyw_meta: {\n className: string;\n extends: StaticWYWSelectorMetaValue | null;\n };\n};\n\nconst toStaticWYWSelectorMetaValue = (\n value: unknown,\n seen: Set<unknown> = new Set()\n): StaticWYWSelectorMetaValue | null => {\n if (typeof value !== 'object' || value === null || seen.has(value)) {\n return null;\n }\n\n seen.add(value);\n\n const meta = (value as { __wyw_meta?: unknown }).__wyw_meta;\n if (typeof meta !== 'object' || meta === null) {\n return null;\n }\n\n const { className, extends: extended } = meta as {\n className?: unknown;\n extends?: unknown;\n };\n if (typeof className !== 'string') {\n return null;\n }\n\n const staticExtends =\n extended === null ? null : toStaticWYWSelectorMetaValue(extended, seen);\n if (extended !== null && staticExtends === null) {\n return null;\n }\n\n return {\n __wyw_meta: {\n className,\n extends: staticExtends,\n },\n };\n};\n\nconst staticWYWMetaExtendsReplacementCode = (value: unknown): string | null => {\n if (value === null) {\n return 'null';\n }\n\n const selectorMeta = toStaticWYWSelectorMetaValue(value);\n return selectorMeta ? `(${JSON.stringify(selectorMeta)})` : null;\n};\n\nconst staticWYWMetaTreeValueStatus = (\n value: unknown,\n seen: Set<unknown> = new Set()\n): { hasMetadata: boolean; safe: boolean } => {\n if (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ) {\n return {\n hasMetadata: false,\n safe: true,\n };\n }\n\n if (typeof value !== 'object') {\n return {\n hasMetadata: false,\n safe: false,\n };\n }\n\n if (seen.has(value)) {\n return {\n hasMetadata: false,\n safe: false,\n };\n }\n seen.add(value);\n\n if (Array.isArray(value)) {\n let hasMetadata = false;\n for (const item of value) {\n const status = staticWYWMetaTreeValueStatus(item, seen);\n if (!status.safe) {\n return {\n hasMetadata: false,\n safe: false,\n };\n }\n\n hasMetadata = hasMetadata || status.hasMetadata;\n }\n\n return {\n hasMetadata,\n safe: true,\n };\n }\n\n if ('__wyw_meta' in value) {\n return {\n hasMetadata: isStaticWYWMetaValue(value),\n safe: isStaticWYWMetaValue(value),\n };\n }\n\n let hasMetadata = false;\n for (const item of Object.values(value)) {\n const status = staticWYWMetaTreeValueStatus(item, seen);\n if (!status.safe) {\n return {\n hasMetadata: false,\n safe: false,\n };\n }\n\n hasMetadata = hasMetadata || status.hasMetadata;\n }\n\n return {\n hasMetadata,\n safe: true,\n };\n};\n\nconst isStaticWYWMetaTreeValue = (value: unknown): boolean => {\n const status = staticWYWMetaTreeValueStatus(value);\n return status.safe && status.hasMetadata;\n};\n\ntype StaticProcessorInstance = {\n artifacts: unknown[];\n build: (values: Map<string, unknown>) => void;\n className: string;\n};\n\nconst isPlainObjectRecord = (\n value: unknown\n): value is Record<string, unknown> =>\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n Object.getPrototypeOf(value) === Object.prototype;\n\nconst isStaticObjectAssignAliasValue = (value: unknown): boolean =>\n isStaticWYWMetaValue(value) || isStaticWYWMetaTreeValue(value);\n\nconst artifactCssText = (artifact: unknown): string | null => {\n if (!Array.isArray(artifact) || artifact[0] !== 'css') {\n return null;\n }\n\n const payload = artifact[1];\n if (Array.isArray(payload)) {\n const [rules] = payload;\n if (typeof rules === 'object' && rules !== null) {\n return Object.values(rules)\n .map((rule) =>\n typeof rule === 'object' &&\n rule !== null &&\n 'cssText' in rule &&\n typeof (rule as { cssText?: unknown }).cssText === 'string'\n ? (rule as { cssText: string }).cssText\n : ''\n )\n .join('');\n }\n }\n\n if (\n typeof payload === 'object' &&\n payload !== null &&\n 'cssText' in payload &&\n typeof (payload as { cssText?: unknown }).cssText === 'string'\n ) {\n return (payload as { cssText: string }).cssText;\n }\n\n return null;\n};\n\nconst isEmptyProcessorClassName = (\n value: string,\n processors: StaticProcessorInstance[],\n cache: Map<string, boolean>\n): boolean => {\n if (cache.has(value)) {\n return cache.get(value)!;\n }\n\n const processor = processors.find((item) => item.className === value);\n if (!processor) {\n cache.set(value, false);\n return false;\n }\n\n if (processor.artifacts.length === 0) {\n try {\n processor.build(new Map());\n } catch {\n cache.set(value, false);\n return false;\n }\n }\n\n const result = processor.artifacts.every((artifact) => {\n const cssText = artifactCssText(artifact);\n return cssText !== null && cssText.trim() === '';\n });\n cache.set(value, result);\n return result;\n};\n\nconst isProcessorClassName = (\n value: string,\n processors: StaticProcessorInstance[],\n cache: Map<string, boolean>\n): boolean => {\n if (cache.has(value)) {\n return cache.get(value)!;\n }\n\n const processor = processors.find((item) => item.className === value);\n if (!processor) {\n cache.set(value, false);\n return false;\n }\n\n if (processor.artifacts.length === 0) {\n try {\n processor.build(new Map());\n } catch {\n cache.set(value, false);\n return false;\n }\n }\n\n const result = processor.artifacts.every(\n (artifact) => artifactCssText(artifact) !== null\n );\n cache.set(value, result);\n return result;\n};\n\nconst isSelectorOnlyProcessorValue = (\n value: unknown,\n processors: StaticProcessorInstance[],\n cache: Map<string, boolean>,\n seen: Set<unknown> = new Set()\n): boolean => {\n if (typeof value === 'string') {\n return isEmptyProcessorClassName(value, processors, cache);\n }\n\n if (Array.isArray(value)) {\n if (seen.has(value)) {\n return false;\n }\n\n seen.add(value);\n return value.every((item) =>\n isSelectorOnlyProcessorValue(item, processors, cache, seen)\n );\n }\n\n if (typeof value === 'object' && value !== null) {\n if (seen.has(value)) {\n return false;\n }\n\n seen.add(value);\n return Object.values(value).every((item) =>\n isSelectorOnlyProcessorValue(item, processors, cache, seen)\n );\n }\n\n return false;\n};\n\nconst isProcessorClassValue = (\n value: unknown,\n processors: StaticProcessorInstance[],\n cache: Map<string, boolean>,\n seen: Set<unknown> = new Set()\n): boolean => {\n if (typeof value === 'string') {\n return isProcessorClassName(value, processors, cache);\n }\n\n if (Array.isArray(value)) {\n if (seen.has(value)) {\n return false;\n }\n\n seen.add(value);\n return value.every((item) =>\n isProcessorClassValue(item, processors, cache, seen)\n );\n }\n\n if (typeof value === 'object' && value !== null) {\n if (seen.has(value)) {\n return false;\n }\n\n seen.add(value);\n return Object.values(value).every((item) =>\n isProcessorClassValue(item, processors, cache, seen)\n );\n }\n\n return false;\n};\n\nconst collectLocalConstExpressions = (\n program: Program\n): Map<string, Expression> => {\n const result = new Map<string, Expression>();\n\n const collect = (declaration: VariableDeclaration): void => {\n if (declaration.kind !== 'const') {\n return;\n }\n\n declaration.declarations.forEach((declarator) => {\n if (declarator.id.type === 'Identifier' && declarator.init) {\n result.set(declarator.id.name, declarator.init);\n }\n });\n };\n\n program.body.forEach((statement) => {\n if (statement.type === 'VariableDeclaration') {\n collect(statement);\n return;\n }\n\n if (\n statement.type === 'ExportNamedDeclaration' &&\n statement.declaration?.type === 'VariableDeclaration'\n ) {\n collect(statement.declaration);\n }\n });\n\n return result;\n};\n\ntype StaticExpressionDependencies = {\n imports: ImportBinding[];\n};\n\ntype PreparedProcessorTarget = {\n dependencies: StaticExpressionDependencies;\n evaluationCode?: string;\n evaluationSpan?: Range;\n expression: Expression;\n opaqueRuntimeBase: boolean;\n};\n\nconst mutatingMethodNames = new Set([\n 'add',\n 'clear',\n 'copyWithin',\n 'delete',\n 'fill',\n 'pop',\n 'push',\n 'reverse',\n 'set',\n 'shift',\n 'sort',\n 'splice',\n 'unshift',\n]);\n\nconst rootIdentifierName = (expr: Node): string | null => {\n const unwrapped = unwrapExpression(expr);\n\n if (unwrapped.type === 'Identifier') {\n return unwrapped.name;\n }\n\n if (unwrapped.type === 'MemberExpression') {\n return rootIdentifierName(unwrapped.object);\n }\n\n if (unwrapped.type === 'ChainExpression') {\n return rootIdentifierName(unwrapped.expression);\n }\n\n return null;\n};\n\nconst staticMemberName = (expr: Node): string | null => {\n const unwrapped = unwrapExpression(expr);\n\n if (unwrapped.type === 'Identifier') {\n return unwrapped.name;\n }\n\n if (isSafeLiteral(unwrapped) && typeof unwrapped.value === 'string') {\n return unwrapped.value;\n }\n\n return null;\n};\n\nconst expressionMayProduceMutableValue = (\n expr: Node,\n locals: Map<string, Expression>,\n visiting: Set<string>\n): boolean => {\n const unwrapped = unwrapExpression(expr);\n\n if (\n unwrapped.type === 'ObjectExpression' ||\n unwrapped.type === 'ArrayExpression'\n ) {\n return true;\n }\n\n if (unwrapped.type === 'Identifier') {\n const local = locals.get(unwrapped.name);\n if (!local || visiting.has(unwrapped.name)) {\n return true;\n }\n\n visiting.add(unwrapped.name);\n const result = expressionMayProduceMutableValue(local, locals, visiting);\n visiting.delete(unwrapped.name);\n return result;\n }\n\n if (unwrapped.type === 'ConditionalExpression') {\n return (\n expressionMayProduceMutableValue(\n unwrapped.consequent,\n locals,\n visiting\n ) ||\n expressionMayProduceMutableValue(unwrapped.alternate, locals, visiting)\n );\n }\n\n if (\n unwrapped.type === 'LogicalExpression' ||\n unwrapped.type === 'MemberExpression'\n ) {\n return true;\n }\n\n return false;\n};\n\nconst isSafeFunctionBodyExpression = (\n body: Node,\n options: StaticExpressionOptions\n): boolean => {\n if (body.type !== 'BlockStatement') {\n return isSafeStaticExpression(body, options);\n }\n\n return body.body.every((statement) => {\n if (statement.type === 'VariableDeclaration') {\n return (\n statement.kind === 'const' &&\n statement.declarations.every(\n (declarator) =>\n declarator.init &&\n declarator.id.type === 'Identifier' &&\n isSafeStaticExpression(declarator.init, options)\n )\n );\n }\n\n return (\n statement.type === 'ReturnStatement' &&\n !!statement.argument &&\n isSafeStaticExpression(statement.argument, options)\n );\n });\n};\n\nconst collectStaticFunctionBodyReferences = (\n body: Node,\n references: Set<string>,\n options: StaticExpressionOptions\n): boolean => {\n if (body.type !== 'BlockStatement') {\n return collectStaticExpressionReferences(body, references, options);\n }\n\n return body.body.every((statement) => {\n if (statement.type === 'VariableDeclaration') {\n return (\n statement.kind === 'const' &&\n statement.declarations.every(\n (declarator) =>\n declarator.init &&\n declarator.id.type === 'Identifier' &&\n collectStaticExpressionReferences(\n declarator.init,\n references,\n options\n )\n )\n );\n }\n\n return (\n statement.type === 'ReturnStatement' &&\n !!statement.argument &&\n collectStaticExpressionReferences(statement.argument, references, options)\n );\n });\n};\n\nconst collectStaticExpressionReferences = (\n expr: Node,\n references: Set<string>,\n options: StaticExpressionOptions = {}\n): boolean => {\n const unwrapped = unwrapExpression(expr);\n\n if (isSafeLiteral(unwrapped)) {\n return true;\n }\n\n if (unwrapped.type === 'Identifier') {\n references.add(unwrapped.name);\n return true;\n }\n\n if (unwrapped.type === 'TemplateLiteral') {\n return unwrapped.expressions.every((item) =>\n collectStaticExpressionReferences(item, references, options)\n );\n }\n\n if (unwrapped.type === 'UnaryExpression') {\n return collectStaticExpressionReferences(\n unwrapped.argument,\n references,\n options\n );\n }\n\n if (\n unwrapped.type === 'BinaryExpression' ||\n unwrapped.type === 'LogicalExpression'\n ) {\n return (\n collectStaticExpressionReferences(unwrapped.left, references, options) &&\n collectStaticExpressionReferences(unwrapped.right, references, options)\n );\n }\n\n if (unwrapped.type === 'ConditionalExpression') {\n return (\n collectStaticExpressionReferences(unwrapped.test, references, options) &&\n collectStaticExpressionReferences(\n unwrapped.consequent,\n references,\n options\n ) &&\n collectStaticExpressionReferences(\n unwrapped.alternate,\n references,\n options\n )\n );\n }\n\n if (unwrapped.type === 'MemberExpression') {\n if (isProcessEnvMember(unwrapped) || isProcessEnvMember(unwrapped.object)) {\n // process.env / process.env.X is an opaque build-time global —\n // don't treat `process` as an unresolved local reference.\n return true;\n }\n\n return (\n collectStaticExpressionReferences(\n unwrapped.object,\n references,\n options\n ) &&\n (!unwrapped.computed ||\n collectStaticExpressionReferences(\n unwrapped.property,\n references,\n options\n ))\n );\n }\n\n if (options.allowMetadataCalls && unwrapped.type === 'CallExpression') {\n if (\n unwrapped.callee.type !== 'Identifier' ||\n unwrapped.arguments.length !== 0\n ) {\n return false;\n }\n\n references.add(unwrapped.callee.name);\n return true;\n }\n\n if (\n options.allowMetadataCalls &&\n (unwrapped.type === 'ArrowFunctionExpression' ||\n unwrapped.type === 'FunctionExpression')\n ) {\n if (unwrapped.async || unwrapped.params.length !== 0) {\n return false;\n }\n\n return (\n !!unwrapped.body &&\n collectStaticFunctionBodyReferences(unwrapped.body, references, options)\n );\n }\n\n if (unwrapped.type === 'ArrayExpression') {\n return unwrapped.elements.every((item) => {\n if (!item) {\n return false;\n }\n\n return item.type === 'SpreadElement'\n ? collectStaticExpressionReferences(item.argument, references, options)\n : collectStaticExpressionReferences(item, references, options);\n });\n }\n\n if (unwrapped.type === 'ObjectExpression') {\n return unwrapped.properties.every((property) => {\n if (property.type === 'SpreadElement') {\n return collectStaticExpressionReferences(\n property.argument,\n references,\n options\n );\n }\n\n const propertyNode = property as AnyNode;\n if (\n propertyNode.computed ||\n !propertyNode.value ||\n typeof propertyNode.value !== 'object'\n ) {\n return false;\n }\n\n return collectStaticExpressionReferences(\n propertyNode.value as Node,\n references,\n options\n );\n });\n }\n\n return false;\n};\n\nconst collectExpressionMutationHints = (\n expr: Node,\n mutatedNames: Set<string>,\n callArgumentNames: Set<string>\n): void => {\n const unwrapped = unwrapExpression(expr);\n\n if (unwrapped.type === 'AssignmentExpression') {\n const rootName = rootIdentifierName(unwrapped.left);\n if (rootName) {\n mutatedNames.add(rootName);\n }\n\n collectExpressionMutationHints(\n unwrapped.right,\n mutatedNames,\n callArgumentNames\n );\n return;\n }\n\n if (unwrapped.type === 'UpdateExpression') {\n const rootName = rootIdentifierName(unwrapped.argument);\n if (rootName) {\n mutatedNames.add(rootName);\n }\n\n return;\n }\n\n if (unwrapped.type === 'UnaryExpression') {\n if (unwrapped.operator === 'delete') {\n const rootName = rootIdentifierName(unwrapped.argument);\n if (rootName) {\n mutatedNames.add(rootName);\n }\n }\n\n collectExpressionMutationHints(\n unwrapped.argument,\n mutatedNames,\n callArgumentNames\n );\n return;\n }\n\n if (unwrapped.type === 'CallExpression') {\n const callee = unwrapExpression(unwrapped.callee);\n if (callee.type === 'MemberExpression') {\n const methodName = staticMemberName(callee.property);\n const rootName = rootIdentifierName(callee.object);\n if (rootName && methodName && mutatingMethodNames.has(methodName)) {\n mutatedNames.add(rootName);\n }\n\n collectExpressionMutationHints(\n callee.object,\n mutatedNames,\n callArgumentNames\n );\n if (callee.computed) {\n collectExpressionMutationHints(\n callee.property,\n mutatedNames,\n callArgumentNames\n );\n }\n } else {\n collectExpressionMutationHints(\n unwrapped.callee,\n mutatedNames,\n callArgumentNames\n );\n }\n\n unwrapped.arguments.forEach((argument) => {\n const argumentNode =\n argument.type === 'SpreadElement' ? argument.argument : argument;\n const rootName = rootIdentifierName(argumentNode);\n if (rootName) {\n callArgumentNames.add(rootName);\n }\n\n collectExpressionMutationHints(\n argumentNode,\n mutatedNames,\n callArgumentNames\n );\n });\n return;\n }\n\n if (unwrapped.type === 'TaggedTemplateExpression') {\n collectExpressionMutationHints(\n unwrapped.tag,\n mutatedNames,\n callArgumentNames\n );\n unwrapped.quasi.expressions.forEach((item) =>\n collectExpressionMutationHints(item, mutatedNames, callArgumentNames)\n );\n return;\n }\n\n if (unwrapped.type === 'ConditionalExpression') {\n collectExpressionMutationHints(\n unwrapped.test,\n mutatedNames,\n callArgumentNames\n );\n collectExpressionMutationHints(\n unwrapped.consequent,\n mutatedNames,\n callArgumentNames\n );\n collectExpressionMutationHints(\n unwrapped.alternate,\n mutatedNames,\n callArgumentNames\n );\n return;\n }\n\n if (\n unwrapped.type === 'BinaryExpression' ||\n unwrapped.type === 'LogicalExpression'\n ) {\n collectExpressionMutationHints(\n unwrapped.left,\n mutatedNames,\n callArgumentNames\n );\n collectExpressionMutationHints(\n unwrapped.right,\n mutatedNames,\n callArgumentNames\n );\n return;\n }\n\n if (unwrapped.type === 'MemberExpression') {\n collectExpressionMutationHints(\n unwrapped.object,\n mutatedNames,\n callArgumentNames\n );\n if (unwrapped.computed) {\n collectExpressionMutationHints(\n unwrapped.property,\n mutatedNames,\n callArgumentNames\n );\n }\n return;\n }\n\n if (unwrapped.type === 'ArrayExpression') {\n unwrapped.elements.forEach((item) => {\n if (!item) {\n return;\n }\n\n collectExpressionMutationHints(\n item.type === 'SpreadElement' ? item.argument : item,\n mutatedNames,\n callArgumentNames\n );\n });\n return;\n }\n\n if (unwrapped.type === 'ObjectExpression') {\n unwrapped.properties.forEach((property) => {\n if (property.type === 'SpreadElement') {\n collectExpressionMutationHints(\n property.argument,\n mutatedNames,\n callArgumentNames\n );\n return;\n }\n\n const propertyNode = property as AnyNode;\n if (propertyNode.computed && propertyNode.key) {\n collectExpressionMutationHints(\n propertyNode.key as Node,\n mutatedNames,\n callArgumentNames\n );\n }\n\n if (propertyNode.value && typeof propertyNode.value === 'object') {\n collectExpressionMutationHints(\n propertyNode.value as Node,\n mutatedNames,\n callArgumentNames\n );\n }\n });\n }\n};\n\nconst collectTopLevelMutationHints = (\n program: Program\n): { callArgumentNames: Set<string>; mutatedNames: Set<string> } => {\n const callArgumentNames = new Set<string>();\n const mutatedNames = new Set<string>();\n\n const collectDeclaration = (declaration: VariableDeclaration): void => {\n declaration.declarations.forEach((declarator) => {\n if (declarator.init) {\n collectExpressionMutationHints(\n declarator.init,\n mutatedNames,\n callArgumentNames\n );\n }\n });\n };\n\n program.body.forEach((statement) => {\n if (statement.type === 'VariableDeclaration') {\n collectDeclaration(statement);\n return;\n }\n\n if (statement.type === 'ExpressionStatement') {\n collectExpressionMutationHints(\n statement.expression,\n mutatedNames,\n callArgumentNames\n );\n return;\n }\n\n if (statement.type === 'ExportNamedDeclaration') {\n if (statement.declaration?.type === 'VariableDeclaration') {\n collectDeclaration(statement.declaration);\n }\n\n return;\n }\n\n if (statement.type === 'ExportDefaultDeclaration') {\n if (\n statement.declaration.type !== 'FunctionDeclaration' &&\n statement.declaration.type !== 'ClassDeclaration'\n ) {\n collectExpressionMutationHints(\n statement.declaration,\n mutatedNames,\n callArgumentNames\n );\n }\n }\n });\n\n return { callArgumentNames, mutatedNames };\n};\n\nconst objectPropertyKeyName = (node: Node): string | null => {\n const unwrapped = unwrapExpression(node);\n\n if (unwrapped.type === 'Identifier') {\n return unwrapped.name;\n }\n\n if (isSafeLiteral(unwrapped) && typeof unwrapped.value === 'string') {\n return unwrapped.value;\n }\n\n return null;\n};\n\nconst findObjectPropertyValue = (\n expr: Node,\n name: string\n): Expression | null => {\n const unwrapped = unwrapExpression(expr);\n if (unwrapped.type !== 'ObjectExpression') {\n return null;\n }\n\n for (const property of unwrapped.properties) {\n if (property.type === 'SpreadElement') {\n continue;\n }\n\n const propertyNode = property as AnyNode;\n if (propertyNode.computed) {\n continue;\n }\n\n const key = propertyNode.key as Node | undefined;\n const value = propertyNode.value as Expression | undefined;\n if (key && value && objectPropertyKeyName(key) === name) {\n return value;\n }\n }\n\n return null;\n};\n\nconst findWYWMetaExtendsExpression = (expr: Expression): Expression | null => {\n const meta = findObjectPropertyValue(expr, '__wyw_meta');\n if (!meta) {\n return null;\n }\n\n return findObjectPropertyValue(meta, 'extends');\n};\n\nconst collectWYWMetaExtendsExpressions = (expr: Expression): Expression[] => {\n const result: Expression[] = [];\n const visit = (node: Node): void => {\n if (node.type === 'ObjectExpression') {\n const extendsExpression = findWYWMetaExtendsExpression(\n node as Expression\n );\n if (extendsExpression) {\n result.push(extendsExpression);\n }\n }\n\n getChildren(node).forEach(visit);\n };\n\n visit(expr);\n return result;\n};\n\nconst topLevelStatements = (program: Program): Node[] => {\n const result: Node[] = [];\n\n program.body.forEach((statement) => {\n if (\n statement.type === 'ExportNamedDeclaration' ||\n statement.type === 'ExportDefaultDeclaration'\n ) {\n result.push(statement.declaration ?? statement);\n return;\n }\n\n result.push(statement);\n });\n\n return result;\n};\n\nconst findTopLevelConstExpression = (\n program: Program,\n name: string\n): Expression | null => {\n for (const statement of topLevelStatements(program)) {\n if (\n statement.type !== 'VariableDeclaration' ||\n statement.kind !== 'const'\n ) {\n continue;\n }\n\n for (const declarator of statement.declarations) {\n if (\n declarator.id.type === 'Identifier' &&\n declarator.id.name === name &&\n declarator.init\n ) {\n return declarator.init;\n }\n }\n }\n\n return null;\n};\n\nconst hasTopLevelBinding = (program: Program, name: string): boolean => {\n if (collectImportBindings(program).has(name)) {\n return true;\n }\n\n return topLevelStatements(program).some((statement) => {\n if (statement.type === 'VariableDeclaration') {\n return statement.declarations.some(\n (declarator) =>\n declarator.id.type === 'Identifier' && declarator.id.name === name\n );\n }\n\n if (statement.type === 'FunctionDeclaration') {\n return statement.id?.name === name;\n }\n\n if (statement.type === 'ClassDeclaration') {\n return statement.id?.name === name;\n }\n\n return false;\n });\n};\n\nconst isTopLevelFunctionOrClass = (program: Program, name: string): boolean =>\n topLevelStatements(program).some((statement) => {\n if (statement.type === 'FunctionDeclaration') {\n return statement.id?.name === name;\n }\n\n if (statement.type === 'ClassDeclaration') {\n return statement.id?.name === name;\n }\n\n return false;\n });\n\nconst functionReturnExpression = (\n expr: Node,\n options: { allowParams?: boolean } = {}\n): Expression | null => {\n const unwrapped = unwrapExpression(expr);\n if (\n unwrapped.type !== 'ArrowFunctionExpression' &&\n unwrapped.type !== 'FunctionExpression'\n ) {\n return null;\n }\n\n if (\n unwrapped.async ||\n (!options.allowParams && unwrapped.params.length > 0) ||\n !unwrapped.body\n ) {\n return null;\n }\n\n if (unwrapped.body.type !== 'BlockStatement') {\n return unwrapped.body as Expression;\n }\n\n if (unwrapped.body.body.length !== 1) {\n return null;\n }\n\n const [statement] = unwrapped.body.body;\n return statement.type === 'ReturnStatement' && statement.argument\n ? statement.argument\n : null;\n};\n\nconst isReactImport = (\n imports: Map<string, ImportBinding>,\n localName: string\n): boolean => imports.get(localName)?.source === 'react';\n\nconst isReactFactoryName = (name: string): boolean =>\n name === 'forwardRef' || name === 'memo';\n\nconst isKnownReactFactoryCall = (\n expr: Node,\n imports: Map<string, ImportBinding>\n): boolean => {\n const unwrapped = unwrapExpression(expr);\n if (unwrapped.type !== 'CallExpression') {\n return false;\n }\n\n const callee = unwrapExpression(unwrapped.callee);\n if (callee.type === 'Identifier') {\n return (\n isReactFactoryName(callee.name) && isReactImport(imports, callee.name)\n );\n }\n\n if (callee.type !== 'MemberExpression' || callee.computed) {\n return false;\n }\n\n const methodName = staticMemberName(callee.property);\n return (\n !!methodName &&\n isReactFactoryName(methodName) &&\n callee.object.type === 'Identifier' &&\n isReactImport(imports, callee.object.name)\n );\n};\n\nconst isKnownOpaqueRuntimeWrapperImport = (\n binding: ImportBinding | undefined\n): boolean => {\n if (!binding) {\n return false;\n }\n\n return (\n binding.imported === 'observer' &&\n (binding.source === 'mobx-react' || binding.source === 'mobx-react-lite')\n );\n};\n\nconst isKnownOpaqueRuntimeWrapperCallee = (\n expr: Node,\n imports: Map<string, ImportBinding>\n): boolean => {\n const callee = unwrapExpression(expr);\n if (callee.type === 'Identifier') {\n return isKnownOpaqueRuntimeWrapperImport(imports.get(callee.name));\n }\n\n return false;\n};\n\nconst isKnownOpaqueRuntimeImportSource = (source: string): boolean =>\n /\\.svg(?:$|[?#])/.test(source);\n\nconst isKnownExternalRuntimeComponentImportSource = (source: string): boolean =>\n source.startsWith('@radix-ui/react-');\n\ntype OpaqueRuntimeImportProof = {\n dependencies: string[];\n names: Set<string>;\n};\n\nconst isStaticMetaObjectExpression = (expr: Node): boolean => {\n const meta = findObjectPropertyValue(expr, '__wyw_meta');\n return !!meta && findObjectPropertyValue(meta, 'className') !== null;\n};\n\nconst isObjectAssignCallee = (program: Program, expr: Node): boolean => {\n const unwrapped = unwrapExpression(expr);\n if (unwrapped.type !== 'MemberExpression' || unwrapped.computed) {\n return false;\n }\n\n const methodName = staticMemberName(unwrapped.property);\n return (\n methodName === 'assign' &&\n unwrapped.object.type === 'Identifier' &&\n unwrapped.object.name === 'Object' &&\n !hasTopLevelBinding(program, 'Object')\n );\n};\n\nconst isSafeObjectAssignAliasExpression = (\n program: Program,\n expr: Node,\n seen: Set<string> = new Set()\n): boolean => {\n const unwrapped = unwrapExpression(expr);\n\n if (unwrapped.type === 'Identifier') {\n if (seen.has(unwrapped.name)) {\n return false;\n }\n\n const local = findTopLevelConstExpression(program, unwrapped.name);\n if (!local) {\n return false;\n }\n\n seen.add(unwrapped.name);\n const result = isSafeObjectAssignAliasExpression(program, local, seen);\n seen.delete(unwrapped.name);\n return result;\n }\n\n if (unwrapped.type !== 'ObjectExpression') {\n return false;\n }\n\n return unwrapped.properties.every((property) => {\n if (property.type === 'SpreadElement') {\n return false;\n }\n\n const propertyNode = property as AnyNode;\n if (\n propertyNode.computed ||\n propertyNode.method ||\n !propertyNode.value ||\n typeof propertyNode.value !== 'object'\n ) {\n return false;\n }\n\n return isSafeStaticExpression(propertyNode.value as Node);\n });\n};\n\nconst objectAssignTargetExpression = (\n program: Program,\n expr: Node\n): Expression | null => {\n const unwrapped = unwrapExpression(expr);\n if (\n unwrapped.type !== 'CallExpression' ||\n !isObjectAssignCallee(program, unwrapped.callee) ||\n unwrapped.arguments.length < 2\n ) {\n return null;\n }\n\n const [target, ...aliases] = unwrapped.arguments;\n if (!target || target.type === 'SpreadElement') {\n return null;\n }\n\n if (\n aliases.some(\n (alias) =>\n alias.type === 'SpreadElement' ||\n !isSafeObjectAssignAliasExpression(program, alias)\n )\n ) {\n return null;\n }\n\n return target;\n};\n\nconst objectAssignAliasExpressions = (\n program: Program,\n expr: Node\n): Expression[] | null => {\n const unwrapped = unwrapExpression(expr);\n if (\n unwrapped.type !== 'CallExpression' ||\n !isObjectAssignCallee(program, unwrapped.callee) ||\n unwrapped.arguments.length < 2\n ) {\n return null;\n }\n\n const [, ...aliases] = unwrapped.arguments;\n if (\n aliases.some(\n (alias) =>\n alias.type === 'SpreadElement' ||\n !isSafeObjectAssignAliasExpression(program, alias)\n )\n ) {\n return null;\n }\n\n return aliases as Expression[];\n};\n\nconst isFunctionBoundaryNode = (node: Node): boolean =>\n node.type === 'ArrowFunctionExpression' ||\n node.type === 'FunctionDeclaration' ||\n node.type === 'FunctionExpression' ||\n node.type === 'ClassDeclaration' ||\n node.type === 'ClassExpression';\n\nconst callHasArgumentRootName = (expr: Node, targetName: string): boolean => {\n const unwrapped = unwrapExpression(expr);\n return (\n unwrapped.type === 'CallExpression' &&\n unwrapped.arguments.some((argument) => {\n const argumentNode =\n argument.type === 'SpreadElement' ? argument.argument : argument;\n return rootIdentifierName(argumentNode) === targetName;\n })\n );\n};\n\nconst isSafeObjectAssignAliasAugmentation = (\n program: Program,\n expr: Node,\n targetName: string\n): boolean => {\n const unwrapped = unwrapExpression(expr);\n if (\n unwrapped.type !== 'CallExpression' ||\n !isObjectAssignCallee(program, unwrapped.callee) ||\n unwrapped.arguments.length < 2\n ) {\n return false;\n }\n\n const [target, ...aliases] = unwrapped.arguments;\n if (!target || target.type === 'SpreadElement') {\n return false;\n }\n\n const unwrappedTarget = unwrapExpression(target);\n if (\n unwrappedTarget.type !== 'Identifier' ||\n unwrappedTarget.name !== targetName\n ) {\n return false;\n }\n\n return aliases.every(\n (alias) =>\n alias.type !== 'SpreadElement' &&\n isSafeObjectAssignAliasExpression(program, alias)\n );\n};\n\nconst hasOnlySafeObjectAssignCallArgumentUses = (\n program: Program,\n targetName: string\n): boolean => {\n let hasSafeUse = false;\n let hasUnsafeUse = false;\n\n const visit = (node: Node): void => {\n if (hasUnsafeUse || isFunctionBoundaryNode(node)) {\n return;\n }\n\n const unwrapped = unwrapExpression(node);\n if (unwrapped.type === 'CallExpression') {\n if (callHasArgumentRootName(unwrapped, targetName)) {\n if (\n isSafeObjectAssignAliasAugmentation(program, unwrapped, targetName)\n ) {\n hasSafeUse = true;\n } else {\n hasUnsafeUse = true;\n return;\n }\n }\n }\n\n getChildren(node).forEach(visit);\n };\n\n topLevelStatements(program).forEach(visit);\n return hasSafeUse && !hasUnsafeUse;\n};\n\nconst objectAssignAugmentationAliasExpressions = (\n program: Program,\n targetName: string\n): Expression[] | null => {\n const aliases: Expression[] = [];\n let hasUnsafeUse = false;\n\n const visit = (node: Node): void => {\n if (hasUnsafeUse || isFunctionBoundaryNode(node)) {\n return;\n }\n\n const unwrapped = unwrapExpression(node);\n if (unwrapped.type === 'CallExpression') {\n if (callHasArgumentRootName(unwrapped, targetName)) {\n if (\n isSafeObjectAssignAliasAugmentation(program, unwrapped, targetName)\n ) {\n const [, ...nextAliases] = unwrapped.arguments;\n aliases.push(...(nextAliases as Expression[]));\n } else {\n hasUnsafeUse = true;\n }\n\n return;\n }\n }\n\n getChildren(node).forEach(visit);\n };\n\n topLevelStatements(program).forEach(visit);\n return !hasUnsafeUse && aliases.length > 0 ? aliases : null;\n};\n\nconst objectAssignAliasExpressionsForTarget = (\n program: Program,\n target: Extract<ExportTarget, { kind: 'expression' }>\n): Expression[] | null => {\n const aliases = [\n ...(objectAssignAliasExpressions(program, target.expression) ?? []),\n ...(target.localName\n ? objectAssignAugmentationAliasExpressions(program, target.localName) ??\n []\n : []),\n ];\n\n return aliases.length > 0 ? aliases : null;\n};\n\nconst resolveObjectAssignProcessorExpression = (\n program: Program,\n expr: Expression\n): Expression => {\n const objectAssignTarget = objectAssignTargetExpression(program, expr);\n const target = objectAssignTarget ?? expr;\n\n if (target.type !== 'Identifier') {\n return target;\n }\n\n return findTopLevelConstExpression(program, target.name) ?? target;\n};\n\ntype ObjectAssignAliasResolution = {\n dependencies: string[];\n sideEffectDependencies: string[];\n values: Record<string, unknown>[];\n};\n\ntype ObjectAssignAliasPropertyResolution = {\n dependencies: string[];\n sideEffectDependencies: string[];\n value: unknown;\n};\n\ntype ObjectAssignAliasPropertyEntry = {\n key: string;\n value: Expression;\n};\n\nconst mergeStaticObjectAssignAliases = (\n targetValue: unknown,\n aliasValues: Record<string, unknown>[]\n): unknown | null => {\n if (!isPlainObjectRecord(targetValue) || !isStaticWYWMetaValue(targetValue)) {\n return null;\n }\n\n const result: Record<string, unknown> = { ...targetValue };\n aliasValues.forEach((aliasValue) => {\n Object.assign(result, aliasValue);\n });\n\n return result;\n};\n\nconst objectAssignAliasObjectExpression = (\n program: Program,\n alias: Expression,\n seen: Set<string> = new Set()\n): Expression | null => {\n const unwrapped = unwrapExpression(alias);\n if (unwrapped.type === 'ObjectExpression') {\n return unwrapped as Expression;\n }\n\n if (unwrapped.type !== 'Identifier' || seen.has(unwrapped.name)) {\n return null;\n }\n\n const local = findTopLevelConstExpression(program, unwrapped.name);\n if (!local) {\n return null;\n }\n\n seen.add(unwrapped.name);\n const result = objectAssignAliasObjectExpression(program, local, seen);\n seen.delete(unwrapped.name);\n return result;\n};\n\nconst objectAssignAliasPropertyEntries = (\n program: Program,\n alias: Expression\n): ObjectAssignAliasPropertyEntry[] | null => {\n const aliasObject = objectAssignAliasObjectExpression(program, alias);\n if (!aliasObject || aliasObject.type !== 'ObjectExpression') {\n return null;\n }\n\n const entries: ObjectAssignAliasPropertyEntry[] = [];\n for (const property of aliasObject.properties) {\n if (property.type === 'SpreadElement') {\n return null;\n }\n\n const propertyNode = property as AnyNode;\n if (\n propertyNode.computed ||\n propertyNode.method ||\n !propertyNode.key ||\n !propertyNode.value ||\n typeof propertyNode.key !== 'object' ||\n typeof propertyNode.value !== 'object'\n ) {\n return null;\n }\n\n const key = objectPropertyKeyName(propertyNode.key as Node);\n if (!key) {\n return null;\n }\n\n entries.push({\n key,\n value: propertyNode.value as Expression,\n });\n }\n\n return entries;\n};\n\nfunction* resolveObjectAssignAliasExpressionValue(\n action: ITransformAction,\n filename: string,\n code: string,\n program: Program,\n expression: Expression,\n ignoredMutableCallArgumentNames: Set<string>,\n stack: Set<string>,\n memo: Map<string, StaticExportResult | null>\n): SyncScenarioFor<ObjectAssignAliasPropertyResolution | null> {\n const staticDependencies = collectStaticExpressionDependencies(\n program,\n {\n expression,\n kind: 'expression',\n },\n {\n allowMetadataCalls: true,\n ignoredMutableCallArgumentNames,\n }\n );\n if (!staticDependencies) {\n return null;\n }\n\n const env = new Map<string, unknown>();\n const dependencies = new Set<string>();\n const sideEffectDependencies = new Set<string>();\n\n for (const binding of staticDependencies.imports) {\n const resolved = yield* resolveImportValue(\n action,\n filename,\n binding,\n stack,\n memo\n );\n if (\n !resolved ||\n !bindStaticResolvedValue(env, expression, binding.local, resolved)\n ) {\n return null;\n }\n\n resolved.dependencies.forEach((item) => dependencies.add(item));\n resolved.sideEffectDependencies?.forEach((item) =>\n sideEffectDependencies.add(item)\n );\n }\n\n const value = evaluateOxcStaticExpressionAt(\n code,\n filename,\n {\n end: expression.end,\n start: expression.start,\n },\n env\n );\n return isStaticObjectAssignAliasValue(value)\n ? {\n dependencies: [...dependencies],\n sideEffectDependencies: [...sideEffectDependencies],\n value,\n }\n : null;\n}\n\nfunction* resolveObjectAssignAliasPropertyValue(\n action: ITransformAction,\n filename: string,\n code: string,\n program: Program,\n expression: Expression,\n ignoredMutableCallArgumentNames: Set<string>,\n stack: Set<string>,\n memo: Map<string, StaticExportResult | null>\n): SyncScenarioFor<ObjectAssignAliasPropertyResolution | null> {\n const expressionValue = yield* resolveObjectAssignAliasExpressionValue(\n action,\n filename,\n code,\n program,\n expression,\n ignoredMutableCallArgumentNames,\n stack,\n memo\n );\n if (expressionValue) {\n return expressionValue;\n }\n\n const unwrapped = unwrapExpression(expression);\n if (\n unwrapped.type !== 'Identifier' ||\n !findExportTarget(program, unwrapped.name)\n ) {\n return null;\n }\n\n const resolved = yield* resolveStaticExport(\n action,\n filename,\n unwrapped.name,\n stack,\n memo\n );\n return resolved && isStaticObjectAssignAliasValue(resolved.value)\n ? {\n dependencies: resolved.dependencies,\n sideEffectDependencies: resolved.sideEffectDependencies ?? [],\n value: resolved.value,\n }\n : null;\n}\n\nfunction* resolveObjectAssignAliasValue(\n action: ITransformAction,\n filename: string,\n code: string,\n program: Program,\n alias: Expression,\n ignoredMutableCallArgumentNames: Set<string>,\n stack: Set<string>,\n memo: Map<string, StaticExportResult | null>\n): SyncScenarioFor<{\n dependencies: string[];\n sideEffectDependencies: string[];\n value: Record<string, unknown>;\n} | null> {\n const aliasValue = yield* resolveObjectAssignAliasExpressionValue(\n action,\n filename,\n code,\n program,\n alias,\n ignoredMutableCallArgumentNames,\n stack,\n memo\n );\n if (aliasValue && isPlainObjectRecord(aliasValue.value)) {\n return Object.values(aliasValue.value).every(isStaticObjectAssignAliasValue)\n ? {\n dependencies: aliasValue.dependencies,\n sideEffectDependencies: aliasValue.sideEffectDependencies,\n value: aliasValue.value,\n }\n : null;\n }\n\n const entries = objectAssignAliasPropertyEntries(program, alias);\n if (!entries) {\n return null;\n }\n\n const dependencies = new Set<string>();\n const sideEffectDependencies = new Set<string>();\n const value: Record<string, unknown> = {};\n\n for (const entry of entries) {\n const resolved = yield* resolveObjectAssignAliasPropertyValue(\n action,\n filename,\n code,\n program,\n entry.value,\n ignoredMutableCallArgumentNames,\n stack,\n memo\n );\n if (!resolved || !isStaticObjectAssignAliasValue(resolved.value)) {\n return null;\n }\n\n value[entry.key] = resolved.value;\n resolved.dependencies.forEach((item) => dependencies.add(item));\n resolved.sideEffectDependencies.forEach((item) =>\n sideEffectDependencies.add(item)\n );\n }\n\n return {\n dependencies: [...dependencies],\n sideEffectDependencies: [...sideEffectDependencies],\n value,\n };\n}\n\nfunction* resolveObjectAssignAliasValues(\n action: ITransformAction,\n filename: string,\n code: string,\n program: Program,\n aliases: Expression[],\n stack: Set<string>,\n memo: Map<string, StaticExportResult | null>\n): SyncScenarioFor<ObjectAssignAliasResolution | null> {\n const dependencies = new Set<string>();\n const sideEffectDependencies = new Set<string>();\n const values: Record<string, unknown>[] = [];\n const ignoredMutableCallArgumentNames = new Set<string>();\n aliases.forEach((alias) => {\n const name = rootIdentifierName(alias);\n if (name) {\n ignoredMutableCallArgumentNames.add(name);\n }\n });\n\n for (const alias of aliases) {\n const aliasValue = yield* resolveObjectAssignAliasValue(\n action,\n filename,\n code,\n program,\n alias,\n ignoredMutableCallArgumentNames,\n stack,\n memo\n );\n if (!aliasValue) {\n return null;\n }\n\n aliasValue.dependencies.forEach((item) => dependencies.add(item));\n aliasValue.sideEffectDependencies.forEach((item) =>\n sideEffectDependencies.add(item)\n );\n values.push(aliasValue.value);\n }\n\n return {\n dependencies: [...dependencies],\n sideEffectDependencies: [...sideEffectDependencies],\n values,\n };\n}\n\nconst isOpaqueRuntimeComponentExpression = (\n program: Program,\n expr: Node,\n opaqueImportNames: Set<string> = new Set(),\n seen: Set<string> = new Set()\n): boolean => {\n const imports = collectImportBindings(program, { includeNamespace: true });\n const unwrapped = unwrapExpression(expr);\n\n if (isStaticMetaObjectExpression(unwrapped)) {\n return false;\n }\n\n if (\n unwrapped.type === 'ArrowFunctionExpression' ||\n unwrapped.type === 'FunctionExpression' ||\n unwrapped.type === 'ClassExpression'\n ) {\n return true;\n }\n\n if (isKnownReactFactoryCall(unwrapped, imports)) {\n return true;\n }\n\n if (\n unwrapped.type === 'CallExpression' &&\n unwrapped.arguments.length === 1 &&\n isKnownOpaqueRuntimeWrapperCallee(unwrapped.callee, imports)\n ) {\n const [argument] = unwrapped.arguments;\n return argument.type !== 'SpreadElement'\n ? isOpaqueRuntimeComponentExpression(\n program,\n argument,\n opaqueImportNames,\n seen\n )\n : false;\n }\n\n if (\n unwrapped.type === 'CallExpression' &&\n unwrapped.callee.type === 'Identifier'\n ) {\n const allowParams = unwrapped.arguments.every(\n (argument) =>\n argument.type !== 'SpreadElement' && isSafeStaticExpression(argument)\n );\n const local = findTopLevelConstExpression(program, unwrapped.callee.name);\n const returned = local\n ? functionReturnExpression(local, { allowParams })\n : null;\n return returned\n ? isOpaqueRuntimeComponentExpression(\n program,\n returned,\n opaqueImportNames,\n seen\n )\n : false;\n }\n\n if (unwrapped.type === 'MemberExpression' && !unwrapped.computed) {\n const name = rootIdentifierName(unwrapped);\n const imported = name ? imports.get(name) : undefined;\n return (\n !!name &&\n !!imported &&\n (opaqueImportNames.has(name) ||\n isKnownExternalRuntimeComponentImportSource(imported.source))\n );\n }\n\n if (unwrapped.type !== 'Identifier') {\n return false;\n }\n\n const { name } = unwrapped;\n if (seen.has(name)) {\n return false;\n }\n seen.add(name);\n\n const imported = imports.get(name);\n if (imported) {\n return (\n opaqueImportNames.has(name) ||\n isKnownOpaqueRuntimeImportSource(imported.source) ||\n isKnownExternalRuntimeComponentImportSource(imported.source)\n );\n }\n\n if (isTopLevelFunctionOrClass(program, name)) {\n return true;\n }\n\n const local = findTopLevelConstExpression(program, name);\n return local\n ? isOpaqueRuntimeComponentExpression(\n program,\n local,\n opaqueImportNames,\n seen\n )\n : false;\n};\n\nconst collectOpaqueRuntimeReferenceNames = (\n program: Program,\n expr: Node,\n names: Set<string>,\n seenHelpers: Set<string> = new Set()\n): void => {\n const unwrapped = unwrapExpression(expr);\n\n if (\n unwrapped.type === 'CallExpression' &&\n unwrapped.callee.type === 'Identifier'\n ) {\n const allowParams = unwrapped.arguments.every(\n (argument) =>\n argument.type !== 'SpreadElement' && isSafeStaticExpression(argument)\n );\n if (seenHelpers.has(unwrapped.callee.name)) {\n return;\n }\n\n const local = findTopLevelConstExpression(program, unwrapped.callee.name);\n const returned = local\n ? functionReturnExpression(local, { allowParams })\n : null;\n if (returned) {\n seenHelpers.add(unwrapped.callee.name);\n collectOpaqueRuntimeReferenceNames(program, returned, names, seenHelpers);\n seenHelpers.delete(unwrapped.callee.name);\n return;\n }\n }\n\n if (unwrapped.type === 'Identifier') {\n names.add(unwrapped.name);\n return;\n }\n\n getChildren(unwrapped).forEach((child) =>\n collectOpaqueRuntimeReferenceNames(program, child, names, seenHelpers)\n );\n};\n\nconst collectWYWMetaExtendsHelperNames = (program: Program): Set<string> => {\n const result = new Set<string>();\n\n const visit = (node: Node): void => {\n if (node.type === 'ObjectExpression') {\n const extendsExpression = findWYWMetaExtendsExpression(node);\n const unwrapped = extendsExpression\n ? unwrapExpression(extendsExpression)\n : null;\n if (\n unwrapped?.type === 'CallExpression' &&\n unwrapped.callee.type === 'Identifier' &&\n unwrapped.arguments.length === 0\n ) {\n result.add(unwrapped.callee.name);\n }\n }\n\n getChildren(node).forEach(visit);\n };\n\n visit(program);\n return result;\n};\n\nconst replaceExpressionChildren = (\n code: string,\n expression: Expression,\n replacements: Array<{ child: Expression; replacement: string }>\n): string => {\n const expressionCode = code.slice(expression.start, expression.end);\n return applyReplacements(\n expressionCode,\n replacements.map(({ child, replacement }) => ({\n end: child.end - expression.start,\n start: child.start - expression.start,\n text: replacement,\n }))\n );\n};\n\nconst parseSyntheticExpression = (\n expressionCode: string,\n filename: string\n): Expression | null => {\n const program = parseProgram(\n `const __wyw_static_target = ${expressionCode};`,\n filename\n );\n const declaration = program.body[0];\n if (declaration?.type !== 'VariableDeclaration') {\n return null;\n }\n\n const [declarator] = declaration.declarations;\n return declarator?.init ?? null;\n};\n\nconst prepareProcessorTarget = (\n code: string,\n filename: string,\n program: Program,\n target: Extract<ExportTarget, { kind: 'expression' }>,\n opaqueImportNames: Set<string> = new Set()\n): PreparedProcessorTarget | null => {\n const ignoredMutableCallArgumentNames =\n target.localName &&\n hasOnlySafeObjectAssignCallArgumentUses(program, target.localName)\n ? new Set([target.localName])\n : undefined;\n const dependencyOptions: StaticExpressionOptions = {\n allowMetadataCalls: true,\n ignoredMutableCallArgumentNames,\n };\n const expression = resolveObjectAssignProcessorExpression(\n program,\n target.expression\n );\n const extendsExpressions = collectWYWMetaExtendsExpressions(expression);\n const opaqueExtendsExpressions = extendsExpressions.filter(\n (extendsExpression) =>\n isOpaqueRuntimeComponentExpression(\n program,\n extendsExpression,\n opaqueImportNames\n )\n );\n\n if (opaqueExtendsExpressions.length > 0) {\n const replacements = opaqueExtendsExpressions.map((extendsExpression) => ({\n child: extendsExpression,\n replacement: 'null',\n }));\n const expressionCode = replaceExpressionChildren(\n code,\n expression,\n replacements\n );\n const syntheticExpression = parseSyntheticExpression(\n expressionCode,\n filename\n );\n if (!syntheticExpression) {\n return null;\n }\n\n const dependencies = collectStaticExpressionDependencies(\n program,\n {\n ...target,\n expression: syntheticExpression,\n },\n dependencyOptions\n );\n\n return dependencies\n ? {\n dependencies,\n evaluationCode: applyReplacements(\n code,\n replacements.map(({ child, replacement }) => ({\n end: child.end,\n start: child.start,\n text: replacement,\n }))\n ),\n evaluationSpan: {\n end:\n expression.end +\n replacements.reduce(\n (delta, { child, replacement }) =>\n delta + replacement.length - (child.end - child.start),\n 0\n ),\n start: expression.start,\n },\n expression,\n opaqueRuntimeBase: true,\n }\n : null;\n }\n\n const dependencies = collectStaticExpressionDependencies(\n program,\n {\n ...target,\n expression,\n },\n dependencyOptions\n );\n return dependencies\n ? {\n dependencies,\n expression,\n opaqueRuntimeBase: false,\n }\n : null;\n};\n\nconst collectStaticExpressionDependencies = (\n program: Program,\n target: Extract<ExportTarget, { kind: 'expression' }>,\n options: StaticExpressionOptions = {}\n): StaticExpressionDependencies | null => {\n const imports = collectImportBindings(program);\n const locals = collectLocalConstExpressions(program);\n const collectedImports = new Map<string, ImportBinding>();\n const referencedNames = new Set<string>();\n const mutableReferencedNames = new Set<string>();\n const visitedLocals = new Set<string>();\n const visitingLocals = new Set<string>();\n\n const markMutable = (name: string, expression: Node): void => {\n if (expressionMayProduceMutableValue(expression, locals, new Set())) {\n mutableReferencedNames.add(name);\n }\n };\n\n const collectLocal = (name: string): boolean => {\n const expression = locals.get(name);\n if (!expression || visitingLocals.has(name)) {\n return false;\n }\n\n referencedNames.add(name);\n markMutable(name, expression);\n\n if (visitedLocals.has(name)) {\n return true;\n }\n\n visitingLocals.add(name);\n const result = collectExpression(expression);\n visitingLocals.delete(name);\n\n if (result) {\n visitedLocals.add(name);\n }\n\n return result;\n };\n\n const collectExpression = (expr: Node): boolean => {\n if (!isSafeStaticExpression(expr, options)) {\n return false;\n }\n\n const references = new Set<string>();\n if (!collectStaticExpressionReferences(expr, references, options)) {\n return false;\n }\n\n for (const reference of references) {\n referencedNames.add(reference);\n\n const importBinding = imports.get(reference);\n if (importBinding) {\n collectedImports.set(\n `${importBinding.source}\\0${importBinding.imported}\\0${importBinding.local}`,\n importBinding\n );\n mutableReferencedNames.add(reference);\n continue;\n }\n\n if (!collectLocal(reference)) {\n return false;\n }\n }\n\n return true;\n };\n\n if (target.localName) {\n referencedNames.add(target.localName);\n markMutable(target.localName, target.expression);\n }\n\n if (!collectExpression(target.expression)) {\n return null;\n }\n\n const mutationHints = collectTopLevelMutationHints(program);\n for (const name of referencedNames) {\n if (mutationHints.mutatedNames.has(name)) {\n return null;\n }\n }\n\n for (const name of mutableReferencedNames) {\n if (\n mutationHints.callArgumentNames.has(name) &&\n !options.ignoredMutableCallArgumentNames?.has(name)\n ) {\n return null;\n }\n }\n\n return {\n imports: [...collectedImports.values()],\n };\n};\n\nconst getExportSpecifierNames = (\n specifier: ExportSpecifier\n): { exported: string; local: string } => ({\n exported: moduleExportName(specifier.exported),\n local: moduleExportName(specifier.local),\n});\n\nconst findExportTarget = (\n program: Program,\n exportedName: string\n): ExportTarget | null => {\n const imports = collectImportBindings(program);\n const locals = collectLocalConstExpressions(program);\n\n for (const statement of program.body) {\n if (statement.type === 'ExportNamedDeclaration') {\n if (statement.source) {\n for (const specifier of statement.specifiers) {\n if (specifier.type !== 'ExportSpecifier') {\n continue;\n }\n\n const names = getExportSpecifierNames(specifier);\n if (names.exported === exportedName) {\n return {\n imported: names.local,\n kind: 'import',\n source: statement.source.value,\n };\n }\n }\n\n continue;\n }\n\n if (statement.declaration?.type === 'VariableDeclaration') {\n for (const declarator of statement.declaration.declarations) {\n if (\n declarator.id.type === 'Identifier' &&\n declarator.id.name === exportedName &&\n declarator.init\n ) {\n return {\n expression: declarator.init,\n kind: 'expression',\n localName: declarator.id.name,\n };\n }\n }\n\n continue;\n }\n\n for (const specifier of statement.specifiers) {\n if (specifier.type !== 'ExportSpecifier') {\n continue;\n }\n\n const names = getExportSpecifierNames(specifier);\n if (names.exported !== exportedName) {\n continue;\n }\n\n const importBinding = imports.get(names.local);\n if (importBinding) {\n return {\n imported: importBinding.imported,\n kind: 'import',\n source: importBinding.source,\n };\n }\n\n const local = locals.get(names.local);\n if (local) {\n return {\n expression: local,\n kind: 'expression',\n localName: names.local,\n };\n }\n }\n }\n\n if (\n exportedName === 'default' &&\n statement.type === 'ExportDefaultDeclaration'\n ) {\n const { declaration } = statement;\n if (declaration.type === 'Identifier') {\n const importBinding = imports.get(declaration.name);\n if (importBinding) {\n return {\n imported: importBinding.imported,\n kind: 'import',\n source: importBinding.source,\n };\n }\n\n const local = locals.get(declaration.name);\n if (local) {\n return {\n expression: local,\n kind: 'expression',\n localName: declaration.name,\n };\n }\n\n return null;\n }\n\n return {\n expression: declaration as Expression,\n kind: 'expression',\n };\n }\n }\n\n return null;\n};\n\nconst exportedLocalName = (\n program: Program,\n exportedName: string\n): string | null => {\n for (const statement of program.body) {\n if (statement.type === 'ExportNamedDeclaration') {\n if (statement.source || statement.declaration) {\n continue;\n }\n\n for (const specifier of statement.specifiers) {\n if (specifier.type !== 'ExportSpecifier') {\n continue;\n }\n\n const names = getExportSpecifierNames(specifier);\n if (names.exported === exportedName) {\n return names.local;\n }\n }\n }\n\n if (\n exportedName === 'default' &&\n statement.type === 'ExportDefaultDeclaration' &&\n statement.declaration.type === 'Identifier'\n ) {\n return statement.declaration.name;\n }\n }\n\n return null;\n};\n\nconst isIdentifierNamed = (node: Node, name: string): boolean =>\n node.type === 'Identifier' && node.name === name;\n\nconst enumLiteralValue = (node: Node): number | string | null => {\n const unwrapped = unwrapExpression(node);\n if (unwrapped.type === 'Literal') {\n const { value } = unwrapped;\n return typeof value === 'string' || typeof value === 'number'\n ? value\n : null;\n }\n\n if (unwrapped.type === 'UnaryExpression') {\n const argument = unwrapExpression(unwrapped.argument);\n if (\n (unwrapped.operator === '-' || unwrapped.operator === '+') &&\n argument.type === 'Literal' &&\n typeof argument.value === 'number'\n ) {\n return unwrapped.operator === '-' ? -argument.value : argument.value;\n }\n }\n\n return null;\n};\n\nconst enumMemberKey = (node: Node, computed: boolean): string | null => {\n const unwrapped = unwrapExpression(node);\n if (!computed && unwrapped.type === 'Identifier') {\n return unwrapped.name;\n }\n\n const value = enumLiteralValue(unwrapped);\n return typeof value === 'string' || typeof value === 'number'\n ? String(value)\n : null;\n};\n\nconst enumSimpleAssignment = (\n node: Node,\n enumParamName: string\n): { key: string; value: number | string } | null => {\n const unwrapped = unwrapExpression(node);\n if (unwrapped.type !== 'AssignmentExpression' || unwrapped.operator !== '=') {\n return null;\n }\n\n const left = unwrapExpression(unwrapped.left);\n if (\n left.type !== 'MemberExpression' ||\n !isIdentifierNamed(unwrapExpression(left.object), enumParamName)\n ) {\n return null;\n }\n\n const key = enumMemberKey(left.property, left.computed);\n const value = enumLiteralValue(unwrapped.right);\n return key !== null && value !== null ? { key, value } : null;\n};\n\nconst collectEnumIifeAssignments = (\n call: Node,\n localName: string\n): Record<string, number | string> | null => {\n const unwrapped = unwrapExpression(\n call.type === 'ExpressionStatement' ? call.expression : call\n );\n if (unwrapped.type !== 'CallExpression' || unwrapped.arguments.length !== 1) {\n return null;\n }\n\n const callee = unwrapExpression(unwrapped.callee);\n if (\n callee.type !== 'FunctionExpression' ||\n callee.async ||\n !callee.body ||\n callee.params.length !== 1 ||\n callee.params[0]?.type !== 'Identifier'\n ) {\n return null;\n }\n\n const enumParamName = callee.params[0].name;\n const argument = unwrapExpression(unwrapped.arguments[0]);\n if (argument.type !== 'LogicalExpression' || argument.operator !== '||') {\n return null;\n }\n\n const fallback = unwrapExpression(argument.right);\n if (\n !isIdentifierNamed(unwrapExpression(argument.left), localName) ||\n fallback.type !== 'AssignmentExpression' ||\n fallback.operator !== '=' ||\n !isIdentifierNamed(unwrapExpression(fallback.left), localName) ||\n unwrapExpression(fallback.right).type !== 'ObjectExpression'\n ) {\n return null;\n }\n\n const result: Record<string, number | string> = {};\n for (const statement of callee.body.body) {\n if (statement.type !== 'ExpressionStatement') {\n return null;\n }\n\n const expression = unwrapExpression(statement.expression);\n if (\n expression.type !== 'AssignmentExpression' ||\n expression.operator !== '='\n ) {\n return null;\n }\n\n const left = unwrapExpression(expression.left);\n if (\n left.type === 'MemberExpression' &&\n isIdentifierNamed(unwrapExpression(left.object), enumParamName)\n ) {\n const numericEnumAssignment = enumSimpleAssignment(\n left.property,\n enumParamName\n );\n const reverseValue = enumLiteralValue(expression.right);\n if (\n numericEnumAssignment &&\n typeof numericEnumAssignment.value === 'number' &&\n typeof reverseValue === 'string'\n ) {\n result[numericEnumAssignment.key] = numericEnumAssignment.value;\n result[String(numericEnumAssignment.value)] = reverseValue;\n continue;\n }\n }\n\n const assignment = enumSimpleAssignment(expression, enumParamName);\n if (!assignment) {\n return null;\n }\n\n result[assignment.key] = assignment.value;\n }\n\n return Object.keys(result).length > 0 ? result : null;\n};\n\nconst enumIifeLocalName = (statement: Node): string | null => {\n if (statement.type !== 'ExpressionStatement') {\n return null;\n }\n\n const expression = unwrapExpression(statement.expression);\n if (\n expression.type !== 'CallExpression' ||\n expression.arguments.length !== 1\n ) {\n return null;\n }\n\n const argument = unwrapExpression(expression.arguments[0]);\n if (argument.type !== 'LogicalExpression' || argument.operator !== '||') {\n return null;\n }\n\n const fallback = unwrapExpression(argument.right);\n if (\n argument.left.type !== 'Identifier' ||\n fallback.type !== 'AssignmentExpression' ||\n fallback.left.type !== 'Identifier'\n ) {\n return null;\n }\n\n return argument.left.name === fallback.left.name ? argument.left.name : null;\n};\n\nconst isEnumVarDeclaration = (\n statement: Node\n): statement is VariableDeclaration =>\n statement.type === 'VariableDeclaration' &&\n statement.kind === 'var' &&\n statement.declarations.length > 0 &&\n statement.declarations.every(\n (declarator) =>\n declarator.id.type === 'Identifier' && declarator.init === null\n );\n\nconst isTypeScriptEnumOnlyModule = (program: Program): boolean =>\n program.body.every((statement) => {\n if (isEnumVarDeclaration(statement)) {\n return true;\n }\n\n const localName = enumIifeLocalName(statement);\n if (localName) {\n return collectEnumIifeAssignments(statement, localName) !== null;\n }\n\n if (statement.type === 'ExportDefaultDeclaration') {\n return statement.declaration.type === 'Identifier';\n }\n\n return (\n statement.type === 'ExportNamedDeclaration' &&\n !statement.source &&\n !statement.declaration &&\n statement.specifiers.every(\n (specifier) => specifier.type === 'ExportSpecifier'\n )\n );\n });\n\nconst typeScriptEnumStaticExportValue = (\n program: Program,\n exportedName: string\n): Record<string, number | string> | null => {\n if (!isTypeScriptEnumOnlyModule(program)) {\n return null;\n }\n\n const localName = exportedLocalName(program, exportedName);\n if (!localName) {\n return null;\n }\n\n const hasDeclaration = program.body.some(\n (statement) =>\n isEnumVarDeclaration(statement) &&\n statement.declarations.some(\n (declarator) =>\n declarator.id.type === 'Identifier' &&\n declarator.id.name === localName\n )\n );\n if (!hasDeclaration) {\n return null;\n }\n\n for (const statement of program.body) {\n const enumValue = collectEnumIifeAssignments(statement, localName);\n if (enumValue) {\n return enumValue;\n }\n }\n\n return null;\n};\n\nfunction* resolveDependency(\n action: ITransformAction,\n importer: string,\n source: string,\n imported: string\n): SyncScenarioFor<IEntrypointDependency | null> {\n const entrypoint =\n importer === action.entrypoint.name\n ? action.entrypoint\n : Entrypoint.createRoot(action.services, importer, [imported], undefined);\n const imports = new Map([[source, [imported]]]);\n const [resolved] = yield* action.getNext('resolveImports', entrypoint, {\n imports,\n phase: 'initial',\n });\n\n return resolved ?? null;\n}\n\nfunction* resolveImportValue(\n action: ITransformAction,\n importer: string,\n binding: Pick<ImportBinding, 'imported' | 'source'>,\n stack: Set<string>,\n memo: Map<string, StaticExportResult | null>\n): SyncScenarioFor<StaticExportResult | null> {\n const dependency = yield* resolveDependency(\n action,\n importer,\n binding.source,\n binding.imported\n );\n if (!dependency?.resolved) {\n debugStaticResolve(action, {\n filename: importer,\n imported: binding.imported,\n phase: 'import',\n reason: 'dependency-unresolved',\n source: binding.source,\n status: 'rejected',\n });\n return null;\n }\n\n const resolved = yield* resolveStaticExport(\n action,\n dependency.resolved,\n binding.imported,\n stack,\n memo\n );\n if (!resolved) {\n debugStaticResolve(action, {\n dependency: dependency.resolved,\n filename: importer,\n imported: binding.imported,\n phase: 'import',\n reason: 'resolve-failed',\n source: binding.source,\n status: 'rejected',\n });\n return null;\n }\n\n debugStaticResolve(action, {\n dependency: dependency.resolved,\n filename: importer,\n imported: binding.imported,\n phase: 'import',\n source: binding.source,\n status: 'resolved',\n });\n\n return {\n callable: resolved.callable,\n dependencies: [\n dependency.resolved,\n ...resolved.dependencies.filter((item) => item !== dependency.resolved),\n ],\n sideEffectDependencies: resolved.sideEffectDependencies,\n value: resolved.value,\n };\n}\n\nfunction* resolveExportAsOpaqueRuntimeImport(\n action: ITransformAction,\n filename: string,\n exportedName: string,\n stack: Set<string>,\n memo: Map<string, OpaqueRuntimeImportProof | null>\n): SyncScenarioFor<OpaqueRuntimeImportProof | null> {\n const memoKey = `${filename}\\0${exportedName}`;\n if (memo.has(memoKey)) {\n return memo.get(memoKey) ?? null;\n }\n\n if (stack.has(memoKey)) {\n memo.set(memoKey, null);\n return null;\n }\n\n stack.add(memoKey);\n\n const loadedAndParsed = action.services.loadAndParseFn(\n action.services,\n filename,\n undefined,\n action.services.log\n );\n if (\n loadedAndParsed.evaluator === 'ignored' ||\n loadedAndParsed.evaluator !== oxcShaker\n ) {\n memo.set(memoKey, null);\n stack.delete(memoKey);\n return null;\n }\n\n const program = parseProgram(loadedAndParsed.code, filename);\n const target = findExportTarget(program, exportedName);\n if (!target) {\n memo.set(memoKey, null);\n stack.delete(memoKey);\n return null;\n }\n\n if (target.kind === 'import') {\n const resolved = yield* resolveImportAsOpaqueRuntime(\n action,\n filename,\n target,\n stack,\n memo\n );\n memo.set(memoKey, resolved);\n stack.delete(memoKey);\n return resolved;\n }\n\n if (isOpaqueRuntimeComponentExpression(program, target.expression)) {\n const resolved = {\n dependencies: [filename],\n names: new Set<string>(),\n };\n memo.set(memoKey, resolved);\n stack.delete(memoKey);\n return resolved;\n }\n\n const imports = collectImportBindings(program, { includeNamespace: true });\n const referencedNames = new Set<string>();\n collectOpaqueRuntimeReferenceNames(\n program,\n target.expression,\n referencedNames\n );\n const opaqueImportNames = new Set<string>();\n const dependencies = new Set<string>([filename]);\n\n for (const name of referencedNames) {\n const binding = imports.get(name);\n if (\n !binding ||\n binding.source === 'react' ||\n isKnownOpaqueRuntimeWrapperImport(binding)\n ) {\n continue;\n }\n\n const proof = yield* resolveImportAsOpaqueRuntime(\n action,\n filename,\n binding,\n stack,\n memo\n );\n if (!proof) {\n continue;\n }\n\n opaqueImportNames.add(name);\n proof.dependencies.forEach((dependency) => dependencies.add(dependency));\n }\n\n const resolved = isOpaqueRuntimeComponentExpression(\n program,\n target.expression,\n opaqueImportNames\n )\n ? {\n dependencies: [...dependencies],\n names: opaqueImportNames,\n }\n : null;\n memo.set(memoKey, resolved);\n stack.delete(memoKey);\n return resolved;\n}\n\nconst knownOpaqueRuntimeSourceDependency = (\n importer: string,\n source: string\n): string | null => {\n if (!isKnownOpaqueRuntimeImportSource(source)) {\n return null;\n }\n\n const request = stripQueryAndHash(source);\n if (isAbsolute(request)) {\n return request;\n }\n\n return request.startsWith('.')\n ? resolvePath(dirname(importer), request)\n : null;\n};\n\nfunction* resolveImportAsOpaqueRuntime(\n action: ITransformAction,\n importer: string,\n binding: Pick<ImportBinding, 'imported' | 'source'>,\n stack: Set<string>,\n memo: Map<string, OpaqueRuntimeImportProof | null>\n): SyncScenarioFor<OpaqueRuntimeImportProof | null> {\n const knownSourceDependency = knownOpaqueRuntimeSourceDependency(\n importer,\n binding.source\n );\n if (knownSourceDependency) {\n return {\n dependencies: [knownSourceDependency],\n names: new Set(),\n };\n }\n\n if (isKnownExternalRuntimeComponentImportSource(binding.source)) {\n return {\n dependencies: [],\n names: new Set(),\n };\n }\n\n const dependency = yield* resolveDependency(\n action,\n importer,\n binding.source,\n binding.imported\n );\n if (!dependency?.resolved) {\n return null;\n }\n\n if (\n isKnownOpaqueRuntimeImportSource(binding.source) ||\n isKnownOpaqueRuntimeImportSource(dependency.resolved)\n ) {\n return {\n dependencies: [dependency.resolved],\n names: new Set(),\n };\n }\n\n const resolved = yield* resolveExportAsOpaqueRuntimeImport(\n action,\n dependency.resolved,\n binding.imported,\n stack,\n memo\n );\n return resolved\n ? {\n dependencies: [\n dependency.resolved,\n ...resolved.dependencies.filter(\n (item) => item !== dependency.resolved\n ),\n ],\n names: resolved.names,\n }\n : null;\n}\n\nfunction* collectOpaqueRuntimeImportProof(\n action: ITransformAction,\n filename: string,\n program: Program,\n expression: Expression\n): SyncScenarioFor<OpaqueRuntimeImportProof> {\n const extendsExpressions = collectWYWMetaExtendsExpressions(expression);\n if (extendsExpressions.length === 0) {\n return {\n dependencies: [],\n names: new Set(),\n };\n }\n\n const imports = collectImportBindings(program, { includeNamespace: true });\n const referencedNames = new Set<string>();\n extendsExpressions.forEach((extendsExpression) =>\n collectOpaqueRuntimeReferenceNames(\n program,\n extendsExpression,\n referencedNames\n )\n );\n\n const dependencies = new Set<string>();\n const names = new Set<string>();\n const memo = new Map<string, OpaqueRuntimeImportProof | null>();\n\n for (const name of referencedNames) {\n const binding = imports.get(name);\n if (!binding || binding.source === 'react') {\n continue;\n }\n\n const proof = yield* resolveImportAsOpaqueRuntime(\n action,\n filename,\n binding,\n new Set(),\n memo\n );\n if (!proof) {\n continue;\n }\n\n names.add(name);\n proof.dependencies.forEach((dependency) => dependencies.add(dependency));\n }\n\n return {\n dependencies: [...dependencies],\n names,\n };\n}\n\nfunction* resolveProcessorStaticExport(\n action: ITransformAction,\n filename: string,\n code: string,\n codeHash: string,\n program: Program,\n exportedName: string,\n stack: Set<string>,\n memo: Map<string, StaticExportResult | null>\n): SyncScenarioFor<StaticExportResult | null> {\n const root = action.services.options.root ?? process.cwd();\n if (!isLocalStaticMetadataFile(filename, root)) {\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'processor-metadata',\n reason: 'outside-root',\n status: 'rejected',\n });\n return null;\n }\n\n if (\n collectProcessorImportLocals(action, program, code, filename).size === 0\n ) {\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'processor-metadata',\n reason: 'no-processor-imports',\n status: 'rejected',\n });\n return null;\n }\n\n const preevalResult = getStaticMetadataPreevalResult(\n action,\n filename,\n code,\n codeHash\n );\n if (!preevalResult) {\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'processor-metadata',\n reason: 'metadata-preeval-failed',\n status: 'rejected',\n });\n return null;\n }\n\n if (!preevalResult.metadata) {\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'processor-metadata',\n reason: 'metadata-missing',\n status: 'rejected',\n });\n return null;\n }\n\n const preevalCode = preevalResult.baseCode;\n const preevalProgram = parseProgram(preevalCode, filename);\n const target = findExportTarget(preevalProgram, exportedName);\n if (!target || target.kind === 'import') {\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'processor-metadata',\n reason: 'processor-target-missing',\n status: 'rejected',\n });\n return null;\n }\n\n const processorObjectAssignAliases = objectAssignAliasExpressionsForTarget(\n preevalProgram,\n target\n );\n const processorExpression = resolveObjectAssignProcessorExpression(\n preevalProgram,\n target.expression\n );\n const opaqueRuntimeImportProof = yield* collectOpaqueRuntimeImportProof(\n action,\n filename,\n preevalProgram,\n processorExpression\n );\n const preparedTarget = prepareProcessorTarget(\n preevalCode,\n filename,\n preevalProgram,\n target,\n opaqueRuntimeImportProof.names\n );\n if (!preparedTarget) {\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'processor-metadata',\n reason: 'unsupported-processor-expression',\n status: 'rejected',\n });\n return null;\n }\n\n const env = new Map<string, unknown>();\n const dependencies = new Set<string>([filename]);\n const sideEffectDependencies = new Set<string>();\n opaqueRuntimeImportProof.dependencies.forEach((dependency) =>\n dependencies.add(dependency)\n );\n\n for (const binding of preparedTarget.dependencies.imports) {\n const resolved = yield* resolveImportValue(\n action,\n filename,\n binding,\n stack,\n memo\n );\n if (!resolved) {\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n imported: binding.imported,\n phase: 'processor-metadata',\n reason: 'resolve-failed',\n source: binding.source,\n status: 'rejected',\n });\n return null;\n }\n\n if (\n !bindStaticResolvedValue(\n env,\n preparedTarget.expression,\n binding.local,\n resolved,\n {\n wrapNonCallable: true,\n }\n )\n ) {\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n imported: binding.imported,\n phase: 'processor-metadata',\n reason: 'callable-usage-unsupported',\n source: binding.source,\n status: 'rejected',\n });\n return null;\n }\n\n resolved.dependencies.forEach((dependency) => dependencies.add(dependency));\n resolved.sideEffectDependencies?.forEach((dependency) =>\n sideEffectDependencies.add(dependency)\n );\n }\n\n const value =\n preparedTarget.evaluationCode && preparedTarget.evaluationSpan\n ? evaluateOxcStaticExpressionAt(\n preparedTarget.evaluationCode,\n filename,\n preparedTarget.evaluationSpan,\n env\n )\n : evaluateOxcStaticExpressionAt(\n preevalCode,\n filename,\n {\n end: preparedTarget.expression.end,\n start: preparedTarget.expression.start,\n },\n env\n );\n if (!isOxcStaticSerializableValue(value)) {\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'processor-metadata',\n reason: 'non-serializable',\n status: 'rejected',\n });\n return null;\n }\n\n let resolvedValue = value;\n if (processorObjectAssignAliases && isStaticWYWMetaValue(value)) {\n const aliasValues = yield* resolveObjectAssignAliasValues(\n action,\n filename,\n preevalCode,\n preevalProgram,\n processorObjectAssignAliases,\n stack,\n memo\n );\n const mergedValue = aliasValues\n ? mergeStaticObjectAssignAliases(value, aliasValues.values)\n : null;\n\n if (mergedValue) {\n resolvedValue = mergedValue;\n aliasValues?.dependencies.forEach((dependency) =>\n dependencies.add(dependency)\n );\n aliasValues?.sideEffectDependencies.forEach((dependency) =>\n sideEffectDependencies.add(dependency)\n );\n }\n }\n\n const isStaticMeta = isStaticWYWMetaValue(resolvedValue);\n const isStaticMetaTree =\n !isStaticMeta && isStaticWYWMetaTreeValue(resolvedValue);\n const processors = preevalResult.metadata\n .processors as unknown as StaticProcessorInstance[];\n const isSelectorOnly =\n !isStaticMeta &&\n !isStaticMetaTree &&\n isSelectorOnlyProcessorValue(resolvedValue, processors, new Map());\n const isSideEffectClassValue =\n !isStaticMeta &&\n !isStaticMetaTree &&\n !isSelectorOnly &&\n isProcessorClassValue(resolvedValue, processors, new Map());\n if (\n !isStaticMeta &&\n !isStaticMetaTree &&\n !isSelectorOnly &&\n !isSideEffectClassValue\n ) {\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'processor-metadata',\n reason: 'non-empty-css-artifact',\n status: 'rejected',\n });\n return null;\n }\n\n let resolvedReason: string | undefined;\n if (preparedTarget.opaqueRuntimeBase) {\n resolvedReason = 'opaque-runtime-component';\n } else if (isSideEffectClassValue) {\n resolvedReason = 'non-empty-css-artifact-side-effect';\n }\n\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'processor-metadata',\n reason: resolvedReason,\n status: 'resolved',\n });\n\n return {\n dependencies: [...dependencies],\n sideEffectDependencies: isSideEffectClassValue\n ? [filename, ...sideEffectDependencies]\n : [...sideEffectDependencies],\n value: resolvedValue,\n };\n}\n\nfunction* resolveObjectAssignStaticExport(\n action: ITransformAction,\n filename: string,\n code: string,\n program: Program,\n target: Extract<ExportTarget, { kind: 'expression' }>,\n stack: Set<string>,\n memo: Map<string, StaticExportResult | null>\n): SyncScenarioFor<StaticExportResult | null> {\n const objectAssignAliases = objectAssignAliasExpressionsForTarget(\n program,\n target\n );\n const objectAssignTarget = objectAssignTargetExpression(\n program,\n target.expression\n );\n if (!objectAssignTarget) {\n return null;\n }\n\n const imports = collectImportBindings(program);\n if (objectAssignTarget.type === 'Identifier') {\n const importBinding = imports.get(objectAssignTarget.name);\n if (importBinding) {\n const resolved = yield* resolveImportValue(\n action,\n filename,\n importBinding,\n stack,\n memo\n );\n if (!resolved || !isStaticWYWMetaValue(resolved.value)) {\n return null;\n }\n\n const dependencies = new Set([\n filename,\n ...resolved.dependencies.filter((item) => item !== filename),\n ]);\n const sideEffectDependencies = new Set(\n resolved.sideEffectDependencies ?? []\n );\n const aliasValues = objectAssignAliases\n ? yield* resolveObjectAssignAliasValues(\n action,\n filename,\n code,\n program,\n objectAssignAliases,\n stack,\n memo\n )\n : null;\n const mergedValue = aliasValues\n ? mergeStaticObjectAssignAliases(resolved.value, aliasValues.values)\n : null;\n aliasValues?.dependencies.forEach((item) => dependencies.add(item));\n aliasValues?.sideEffectDependencies.forEach((item) =>\n sideEffectDependencies.add(item)\n );\n\n return {\n dependencies: [...dependencies],\n sideEffectDependencies: [...sideEffectDependencies],\n value: mergedValue ?? resolved.value,\n };\n }\n }\n\n const expression =\n objectAssignTarget.type === 'Identifier'\n ? findTopLevelConstExpression(program, objectAssignTarget.name) ??\n objectAssignTarget\n : objectAssignTarget;\n const staticDependencies = collectStaticExpressionDependencies(program, {\n ...target,\n expression,\n });\n if (!staticDependencies) {\n return null;\n }\n\n const env = new Map<string, unknown>();\n const dependencies = new Set<string>([filename]);\n const sideEffectDependencies = new Set<string>();\n\n for (const binding of staticDependencies.imports) {\n const resolved = yield* resolveImportValue(\n action,\n filename,\n binding,\n stack,\n memo\n );\n if (!resolved) {\n return null;\n }\n\n if (!bindStaticResolvedValue(env, expression, binding.local, resolved)) {\n return null;\n }\n\n resolved.dependencies.forEach((item) => dependencies.add(item));\n resolved.sideEffectDependencies?.forEach((item) =>\n sideEffectDependencies.add(item)\n );\n }\n\n const value = evaluateOxcStaticExpressionAt(\n code,\n filename,\n {\n end: expression.end,\n start: expression.start,\n },\n env\n );\n if (!isStaticWYWMetaValue(value)) {\n return null;\n }\n\n const aliasValues = objectAssignAliases\n ? yield* resolveObjectAssignAliasValues(\n action,\n filename,\n code,\n program,\n objectAssignAliases,\n stack,\n memo\n )\n : null;\n const mergedValue = aliasValues\n ? mergeStaticObjectAssignAliases(value, aliasValues.values)\n : null;\n aliasValues?.dependencies.forEach((item) => dependencies.add(item));\n aliasValues?.sideEffectDependencies.forEach((item) =>\n sideEffectDependencies.add(item)\n );\n\n return {\n dependencies: [...dependencies],\n sideEffectDependencies: [...sideEffectDependencies],\n value: mergedValue ?? value,\n };\n}\n\nconst zeroArgFunctionReturnExpression = (\n expression: Expression\n): Expression | null => {\n const unwrapped = unwrapExpression(expression);\n if (\n unwrapped.type !== 'ArrowFunctionExpression' &&\n unwrapped.type !== 'FunctionExpression'\n ) {\n return null;\n }\n\n if (unwrapped.async || unwrapped.params.length !== 0 || !unwrapped.body) {\n return null;\n }\n\n if (unwrapped.body.type !== 'BlockStatement') {\n return unwrapped.body as Expression;\n }\n\n if (unwrapped.body.body.length !== 1) {\n return null;\n }\n\n const [statement] = unwrapped.body.body;\n return statement?.type === 'ReturnStatement' && statement.argument\n ? statement.argument\n : null;\n};\n\nfunction* resolveZeroArgFunctionStaticExport(\n action: ITransformAction,\n filename: string,\n code: string,\n program: Program,\n target: Extract<ExportTarget, { kind: 'expression' }>,\n stack: Set<string>,\n memo: Map<string, StaticExportResult | null>\n): SyncScenarioFor<StaticExportResult | null> {\n const returnExpression = zeroArgFunctionReturnExpression(target.expression);\n if (!returnExpression) {\n return null;\n }\n\n const staticDependencies = collectStaticExpressionDependencies(\n program,\n {\n ...target,\n expression: returnExpression,\n },\n { allowMetadataCalls: true }\n );\n if (!staticDependencies) {\n return null;\n }\n\n const env = new Map<string, unknown>();\n const dependencies = new Set<string>([filename]);\n const sideEffectDependencies = new Set<string>();\n\n for (const binding of staticDependencies.imports) {\n const resolved = yield* resolveImportValue(\n action,\n filename,\n binding,\n stack,\n memo\n );\n if (!resolved) {\n return null;\n }\n\n if (\n !bindStaticResolvedValue(env, returnExpression, binding.local, resolved)\n ) {\n return null;\n }\n\n resolved.dependencies.forEach((item) => dependencies.add(item));\n resolved.sideEffectDependencies?.forEach((item) =>\n sideEffectDependencies.add(item)\n );\n }\n\n const value = evaluateOxcStaticExpressionAt(\n code,\n filename,\n {\n end: returnExpression.end,\n start: returnExpression.start,\n },\n env\n );\n return isOxcStaticSerializableValue(value)\n ? {\n callable: 'zero-arg',\n dependencies: [...dependencies],\n sideEffectDependencies: [...sideEffectDependencies],\n value,\n }\n : null;\n}\n\nfunction* resolveStaticExport(\n action: ITransformAction,\n filename: string,\n exportedName: string,\n stack: Set<string>,\n memo: Map<string, StaticExportResult | null>\n): SyncScenarioFor<StaticExportResult | null> {\n const memoKey = `${filename}\\0${exportedName}`;\n if (memo.has(memoKey)) {\n return memo.get(memoKey) ?? null;\n }\n\n if (stack.has(memoKey)) {\n memo.set(memoKey, null);\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'export',\n reason: 'cyclic-export',\n status: 'rejected',\n });\n return null;\n }\n\n stack.add(memoKey);\n\n const analysis = getStaticFileAnalysis(action, filename);\n if (!analysis) {\n memo.set(memoKey, null);\n stack.delete(memoKey);\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'export',\n reason: 'ignored-or-non-oxc',\n status: 'rejected',\n });\n return null;\n }\n\n const { code, codeHash, program } = analysis;\n const finish = (\n result: StaticExportResult | null\n ): StaticExportResult | null => {\n memo.set(memoKey, result);\n stack.delete(memoKey);\n setStaticExportCachedResult(\n action,\n filename,\n exportedName,\n codeHash,\n result\n );\n return result;\n };\n\n const cachedResult = getStaticExportCachedResult(\n action,\n filename,\n exportedName,\n codeHash\n );\n if (cachedResult !== undefined) {\n memo.set(memoKey, cachedResult);\n stack.delete(memoKey);\n return cachedResult;\n }\n\n const enumValue = typeScriptEnumStaticExportValue(program, exportedName);\n if (enumValue) {\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'export',\n reason: 'typescript-enum',\n status: 'resolved',\n });\n return finish({\n dependencies: [filename],\n value: enumValue,\n });\n }\n\n const target = findExportTarget(program, exportedName);\n if (!target) {\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'export',\n reason: 'no-export-target',\n status: 'rejected',\n });\n return finish(null);\n }\n\n if (target.kind === 'import') {\n const resolved = yield* resolveImportValue(\n action,\n filename,\n target,\n stack,\n memo\n );\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n imported: target.imported,\n phase: 'export',\n reason: resolved ? undefined : 'resolve-failed',\n source: target.source,\n status: resolved ? 'resolved' : 'rejected',\n });\n return finish(resolved);\n }\n\n const objectAssignResult = yield* resolveObjectAssignStaticExport(\n action,\n filename,\n code,\n program,\n target,\n stack,\n memo\n );\n if (objectAssignResult) {\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'export',\n reason: 'object-assign',\n status: 'resolved',\n });\n return finish(objectAssignResult);\n }\n\n const zeroArgFunctionResult = yield* resolveZeroArgFunctionStaticExport(\n action,\n filename,\n code,\n program,\n target,\n stack,\n memo\n );\n if (zeroArgFunctionResult) {\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'export',\n reason: 'zero-arg-function',\n status: 'resolved',\n });\n return finish(zeroArgFunctionResult);\n }\n\n const staticDependencies = collectStaticExpressionDependencies(\n program,\n target\n );\n if (!staticDependencies) {\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'export',\n reason: 'unsupported-expression',\n status: 'rejected',\n });\n const metadataResult = yield* resolveProcessorStaticExport(\n action,\n filename,\n code,\n codeHash,\n program,\n exportedName,\n stack,\n memo\n );\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'export',\n reason: metadataResult ? undefined : 'resolve-failed',\n status: metadataResult ? 'resolved' : 'rejected',\n });\n return finish(metadataResult);\n }\n\n const env = new Map<string, unknown>();\n const dependencies = new Set<string>([filename]);\n const sideEffectDependencies = new Set<string>();\n\n for (const binding of staticDependencies.imports) {\n const resolved = yield* resolveImportValue(\n action,\n filename,\n binding,\n stack,\n memo\n );\n if (!resolved) {\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n imported: binding.imported,\n phase: 'export',\n reason: 'resolve-failed',\n source: binding.source,\n status: 'rejected',\n });\n return finish(null);\n }\n\n if (\n !bindStaticResolvedValue(env, target.expression, binding.local, resolved)\n ) {\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n imported: binding.imported,\n phase: 'export',\n reason: 'callable-usage-unsupported',\n source: binding.source,\n status: 'rejected',\n });\n return finish(null);\n }\n\n resolved.dependencies.forEach((item) => dependencies.add(item));\n resolved.sideEffectDependencies?.forEach((item) =>\n sideEffectDependencies.add(item)\n );\n }\n\n const value = evaluateOxcStaticExpressionAt(\n code,\n filename,\n {\n end: target.expression.end,\n start: target.expression.start,\n },\n env\n );\n if (!isOxcStaticSerializableValue(value)) {\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'export',\n reason: 'non-serializable',\n status: 'rejected',\n });\n return finish(null);\n }\n\n const result = {\n dependencies: [...dependencies],\n sideEffectDependencies: [...sideEffectDependencies],\n value,\n };\n debugStaticResolve(action, {\n exported: exportedName,\n filename,\n phase: 'export',\n status: 'resolved',\n });\n return finish(result);\n}\n\nfunction* resolveCandidateValue(\n action: ITransformAction,\n candidate: OxcStaticValueCandidate,\n filename: string,\n memo: Map<string, StaticExportResult | null>\n): SyncScenarioFor<StaticExportResult | null> {\n const env = new Map<string, unknown>();\n const dependencies = new Set<string>();\n const sideEffectDependencies = new Set<string>();\n const sideEffectImportLocals = new Set<string>();\n let candidateExpression: Expression | null | undefined;\n\n for (const item of candidate.imports) {\n const resolved = yield* resolveImportValue(\n action,\n filename,\n item,\n new Set(),\n memo\n );\n if (!resolved) {\n debugStaticResolve(action, {\n candidate: candidate.name,\n filename,\n imported: item.imported,\n phase: 'candidate',\n reason: 'candidate-import-unresolved',\n source: item.source,\n status: 'rejected',\n });\n return null;\n }\n\n if (resolved.callable === 'zero-arg' && candidateExpression === undefined) {\n candidateExpression = parseStaticExpressionSource(\n candidate.source,\n filename\n );\n }\n\n const expressionForBinding =\n resolved.callable === 'zero-arg' ? candidateExpression : null;\n if (\n (resolved.callable === 'zero-arg' && !expressionForBinding) ||\n (expressionForBinding &&\n !bindStaticResolvedValue(\n env,\n expressionForBinding,\n item.local,\n resolved\n ))\n ) {\n debugStaticResolve(action, {\n candidate: candidate.name,\n filename,\n imported: item.imported,\n phase: 'candidate',\n reason: 'candidate-callable-usage-unsupported',\n source: item.source,\n status: 'rejected',\n });\n return null;\n }\n\n if (!expressionForBinding) {\n env.set(item.local, resolved.value);\n }\n\n resolved.dependencies.forEach((dependency) => dependencies.add(dependency));\n resolved.sideEffectDependencies?.forEach((dependency) => {\n sideEffectDependencies.add(dependency);\n sideEffectImportLocals.add(item.importLocal ?? item.local);\n });\n }\n\n const value = evaluateOxcStaticExpression(candidate.source, filename, env);\n if (!isOxcStaticSerializableValue(value)) {\n debugStaticResolve(action, {\n candidate: candidate.name,\n filename,\n phase: 'candidate',\n reason: 'candidate-expression-non-serializable',\n status: 'rejected',\n });\n return null;\n }\n\n debugStaticResolve(action, {\n candidate: candidate.name,\n filename,\n phase: 'candidate',\n status: 'resolved',\n });\n\n return {\n dependencies: [...dependencies],\n sideEffectDependencies: [...sideEffectDependencies],\n sideEffectImportLocals: [...sideEffectImportLocals],\n value,\n };\n}\n\nfunction* resolveOpaqueRuntimeCandidateValue(\n action: ITransformAction,\n candidate: OxcStaticValueCandidate,\n filename: string\n): SyncScenarioFor<StaticExportResult | null> {\n if (candidate.imports.length === 0) {\n return null;\n }\n\n const dependencies = new Set<string>();\n const memo = new Map<string, OpaqueRuntimeImportProof | null>();\n\n for (const item of candidate.imports) {\n const proof = yield* resolveImportAsOpaqueRuntime(\n action,\n filename,\n item,\n new Set(),\n memo\n );\n if (!proof) {\n return null;\n }\n\n proof.dependencies.forEach((dependency) => dependencies.add(dependency));\n }\n\n return {\n dependencies: [...dependencies],\n value: null,\n };\n}\n\nexport function* resolveStaticOxcPreevalValues(\n this: ITransformAction\n): SyncScenarioFor<boolean> {\n const preevalResult = this.entrypoint.getPreevalResult();\n const candidates = preevalResult?.staticValueCandidates ?? [];\n if (!preevalResult || candidates.length === 0) {\n return false;\n }\n\n const filename =\n this.entrypoint.loadedAndParsed.evaluator === 'ignored'\n ? this.entrypoint.name\n : this.entrypoint.loadedAndParsed.evalConfig.filename ??\n this.entrypoint.name;\n if (!isStaticImportValuesEnabled(this, filename)) {\n debugStaticResolve(this, {\n filename,\n phase: 'entrypoint',\n reason: 'feature-disabled',\n status: 'skipped',\n });\n return false;\n }\n\n const staticValueCache =\n preevalResult.staticValueCache ?? new Map<string, unknown>();\n const staticDependencies = new Set(preevalResult.staticDependencies ?? []);\n const staticImportLocals = new Set<string>();\n const sideEffectImportLocals = new Set<string>();\n const staticNullWYWMetaExtendsHelpers = new Set(\n preevalResult.staticNullWYWMetaExtendsHelpers ?? []\n );\n const memo = new Map<string, StaticExportResult | null>();\n const opaqueRuntimeBaseHelpers = collectWYWMetaExtendsHelperNames(\n parseProgram(preevalResult.baseCode ?? preevalResult.code, filename)\n );\n const evalDependencyNames = new Set(preevalResult.dependencyNames ?? []);\n let changed = false;\n let hasKnownStaticCandidate = false;\n\n for (const candidate of candidates) {\n const isOpaqueRuntimeBaseHelper = opaqueRuntimeBaseHelpers.has(\n candidate.name\n );\n if (\n !evalDependencyNames.has(candidate.name) &&\n !isOpaqueRuntimeBaseHelper &&\n !staticValueCache.has(candidate.name)\n ) {\n debugStaticResolve(this, {\n candidate: candidate.name,\n filename,\n phase: 'candidate',\n reason: 'not-eval-dependency',\n status: 'skipped',\n });\n continue;\n }\n\n if (staticValueCache.has(candidate.name)) {\n hasKnownStaticCandidate = true;\n candidate.imports.forEach((item) =>\n staticImportLocals.add(item.importLocal ?? item.local)\n );\n if (\n isOpaqueRuntimeBaseHelper &&\n staticValueCache.get(candidate.name) === null\n ) {\n staticNullWYWMetaExtendsHelpers.add(candidate.name);\n }\n debugStaticResolve(this, {\n candidate: candidate.name,\n filename,\n phase: 'candidate',\n reason: 'already-static',\n status: 'skipped',\n });\n continue;\n }\n\n let resolved: StaticExportResult | null;\n let resolvedOpaqueRuntimeBase = false;\n if (isOpaqueRuntimeBaseHelper) {\n resolved = yield* resolveOpaqueRuntimeCandidateValue(\n this,\n candidate,\n filename\n );\n resolvedOpaqueRuntimeBase = !!resolved;\n if (!resolved) {\n resolved = yield* resolveCandidateValue(\n this,\n candidate,\n filename,\n memo\n );\n }\n } else {\n resolved = yield* resolveCandidateValue(this, candidate, filename, memo);\n }\n if (!resolved) {\n continue;\n }\n\n if (resolvedOpaqueRuntimeBase) {\n debugStaticResolve(this, {\n candidate: candidate.name,\n filename,\n phase: 'candidate',\n reason: 'opaque-runtime-component',\n status: 'resolved',\n });\n staticNullWYWMetaExtendsHelpers.add(candidate.name);\n }\n\n staticValueCache.set(candidate.name, resolved.value);\n hasKnownStaticCandidate = true;\n candidate.imports.forEach((item) =>\n staticImportLocals.add(item.importLocal ?? item.local)\n );\n resolved.dependencies.forEach((dependency) =>\n staticDependencies.add(dependency)\n );\n resolved.sideEffectImportLocals?.forEach((local) =>\n sideEffectImportLocals.add(local)\n );\n changed = true;\n }\n\n if (!changed && !hasKnownStaticCandidate) {\n return false;\n }\n\n const dependencyNames = (preevalResult.dependencyNames ?? []).filter(\n (name) => !staticValueCache.has(name)\n );\n preevalResult.dependencyNames = dependencyNames;\n preevalResult.staticValueCache = staticValueCache;\n preevalResult.staticDependencies = [...staticDependencies];\n preevalResult.staticNullWYWMetaExtendsHelpers = [\n ...staticNullWYWMetaExtendsHelpers,\n ];\n const originalBaseCode = preevalResult.baseCode ?? preevalResult.code;\n const staticExtendsHelperValues = new Map(staticValueCache);\n staticNullWYWMetaExtendsHelpers.forEach((name) => {\n if (!staticExtendsHelperValues.has(name)) {\n staticExtendsHelperValues.set(name, null);\n }\n });\n const baseCode = pruneStaticPreevalCode(\n originalBaseCode,\n filename,\n new Set(staticValueCache.keys()),\n staticImportLocals,\n staticExtendsHelperValues,\n sideEffectImportLocals\n );\n const evalBaseCode =\n sideEffectImportLocals.size > 0\n ? pruneStaticPreevalCode(\n originalBaseCode,\n filename,\n new Set(staticValueCache.keys()),\n staticImportLocals,\n staticExtendsHelperValues,\n new Set()\n )\n : baseCode;\n preevalResult.baseCode = baseCode;\n preevalResult.code = appendOxcWywPreval(baseCode, filename, dependencyNames);\n preevalResult.evalCode = appendOxcWywPreval(\n evalBaseCode,\n filename,\n dependencyNames\n );\n preevalResult.staticSideEffectImportLocals = [...sideEffectImportLocals];\n\n for (const dependency of staticDependencies) {\n this.entrypoint.addInvalidationDependency({\n only: ['*'],\n resolved: dependency,\n source: dependency,\n });\n this.entrypoint.markInvalidateOnDependencyChange(dependency);\n }\n\n return true;\n}\n"],"file":"resolveStaticOxcValues.js"}