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

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 (270) hide show
  1. package/esm/cache.js +7 -0
  2. package/esm/cache.js.map +1 -1
  3. package/esm/debug/fileReporter.js +35 -1
  4. package/esm/debug/fileReporter.js.map +1 -1
  5. package/esm/eval/broker.js +230 -89
  6. package/esm/eval/broker.js.map +1 -1
  7. package/esm/eval/protocol.js.map +1 -1
  8. package/esm/eval/runner.js +143 -24
  9. package/esm/eval/runner.js.map +1 -1
  10. package/esm/module.js +70 -43
  11. package/esm/module.js.map +1 -1
  12. package/esm/transform/Entrypoint.types.js.map +1 -1
  13. package/esm/transform/generators/processEntrypoint.js +35 -20
  14. package/esm/transform/generators/processEntrypoint.js.map +1 -1
  15. package/esm/transform/generators/resolveImports.js +48 -2
  16. package/esm/transform/generators/resolveImports.js.map +1 -1
  17. package/esm/transform/generators/resolveStaticOxcValues/cache.js +182 -0
  18. package/esm/transform/generators/resolveStaticOxcValues/cache.js.map +1 -0
  19. package/esm/transform/generators/resolveStaticOxcValues/candidateResolver.js +146 -0
  20. package/esm/transform/generators/resolveStaticOxcValues/candidateResolver.js.map +1 -0
  21. package/esm/transform/generators/resolveStaticOxcValues/dependencies.js +33 -0
  22. package/esm/transform/generators/resolveStaticOxcValues/dependencies.js.map +1 -0
  23. package/esm/transform/generators/resolveStaticOxcValues/environment.js +29 -0
  24. package/esm/transform/generators/resolveStaticOxcValues/environment.js.map +1 -0
  25. package/esm/transform/generators/resolveStaticOxcValues/exportResolver.js +351 -0
  26. package/esm/transform/generators/resolveStaticOxcValues/exportResolver.js.map +1 -0
  27. package/esm/transform/generators/resolveStaticOxcValues/exportTargets.js +253 -0
  28. package/esm/transform/generators/resolveStaticOxcValues/exportTargets.js.map +1 -0
  29. package/esm/transform/generators/resolveStaticOxcValues/objectAssign.js +310 -0
  30. package/esm/transform/generators/resolveStaticOxcValues/objectAssign.js.map +1 -0
  31. package/esm/transform/generators/resolveStaticOxcValues/objectAssignStaticExport.js +74 -0
  32. package/esm/transform/generators/resolveStaticOxcValues/objectAssignStaticExport.js.map +1 -0
  33. package/esm/transform/generators/resolveStaticOxcValues/opaqueRuntime.js +229 -0
  34. package/esm/transform/generators/resolveStaticOxcValues/opaqueRuntime.js.map +1 -0
  35. package/esm/transform/generators/resolveStaticOxcValues/processorStaticExport.js +172 -0
  36. package/esm/transform/generators/resolveStaticOxcValues/processorStaticExport.js.map +1 -0
  37. package/esm/transform/generators/resolveStaticOxcValues/processorStaticModel.js +476 -0
  38. package/esm/transform/generators/resolveStaticOxcValues/processorStaticModel.js.map +1 -0
  39. package/esm/transform/generators/resolveStaticOxcValues/processorTarget.js +55 -0
  40. package/esm/transform/generators/resolveStaticOxcValues/processorTarget.js.map +1 -0
  41. package/esm/transform/generators/resolveStaticOxcValues/programAnalysis.js +123 -0
  42. package/esm/transform/generators/resolveStaticOxcValues/programAnalysis.js.map +1 -0
  43. package/esm/transform/generators/resolveStaticOxcValues/prune.js +186 -0
  44. package/esm/transform/generators/resolveStaticOxcValues/prune.js.map +1 -0
  45. package/esm/transform/generators/resolveStaticOxcValues/resolveStaticOxcPreevalValues.js +183 -0
  46. package/esm/transform/generators/resolveStaticOxcValues/resolveStaticOxcPreevalValues.js.map +1 -0
  47. package/esm/transform/generators/resolveStaticOxcValues/staticExpression.js +298 -0
  48. package/esm/transform/generators/resolveStaticOxcValues/staticExpression.js.map +1 -0
  49. package/esm/transform/generators/resolveStaticOxcValues/staticExpressionDependencies.js +298 -0
  50. package/esm/transform/generators/resolveStaticOxcValues/staticExpressionDependencies.js.map +1 -0
  51. package/esm/transform/generators/resolveStaticOxcValues/types.js +3 -0
  52. package/esm/transform/generators/resolveStaticOxcValues/types.js.map +1 -0
  53. package/esm/transform/generators/resolveStaticOxcValues/zeroArgFunctionStaticExport.js +59 -0
  54. package/esm/transform/generators/resolveStaticOxcValues/zeroArgFunctionStaticExport.js.map +1 -0
  55. package/esm/transform/generators/resolveStaticOxcValues.js +1 -2910
  56. package/esm/transform/generators/resolveStaticOxcValues.js.map +1 -1
  57. package/esm/transform/generators/transform.js +57 -45
  58. package/esm/transform/generators/transform.js.map +1 -1
  59. package/esm/transform/helpers/loadWywOptions.js +33 -4
  60. package/esm/transform/helpers/loadWywOptions.js.map +1 -1
  61. package/esm/transform.js +3 -1
  62. package/esm/transform.js.map +1 -1
  63. package/esm/utils/EventEmitter.js +42 -9
  64. package/esm/utils/EventEmitter.js.map +1 -1
  65. package/esm/utils/applyOxcProcessors/applyOxcProcessors.js +160 -0
  66. package/esm/utils/applyOxcProcessors/applyOxcProcessors.js.map +1 -0
  67. package/esm/utils/applyOxcProcessors/cleanupBindings.js +157 -0
  68. package/esm/utils/applyOxcProcessors/cleanupBindings.js.map +1 -0
  69. package/esm/utils/applyOxcProcessors/cleanupRemovals.js +431 -0
  70. package/esm/utils/applyOxcProcessors/cleanupRemovals.js.map +1 -0
  71. package/esm/utils/applyOxcProcessors/displayName.js +93 -0
  72. package/esm/utils/applyOxcProcessors/displayName.js.map +1 -0
  73. package/esm/utils/applyOxcProcessors/expressionValues.js +152 -0
  74. package/esm/utils/applyOxcProcessors/expressionValues.js.map +1 -0
  75. package/esm/utils/applyOxcProcessors/processorFactory.js +62 -0
  76. package/esm/utils/applyOxcProcessors/processorFactory.js.map +1 -0
  77. package/esm/utils/applyOxcProcessors/processorUsages.js +143 -0
  78. package/esm/utils/applyOxcProcessors/processorUsages.js.map +1 -0
  79. package/esm/utils/applyOxcProcessors/sameFileStaticValues.js +207 -0
  80. package/esm/utils/applyOxcProcessors/sameFileStaticValues.js.map +1 -0
  81. package/esm/utils/applyOxcProcessors/shared.js +29 -0
  82. package/esm/utils/applyOxcProcessors/shared.js.map +1 -0
  83. package/esm/utils/applyOxcProcessors/types.js +2 -0
  84. package/esm/utils/applyOxcProcessors/types.js.map +1 -0
  85. package/esm/utils/applyOxcProcessors.js +1 -1216
  86. package/esm/utils/applyOxcProcessors.js.map +1 -1
  87. package/esm/utils/collectOxcRuntime/normalizeRuntimeCode.js +157 -0
  88. package/esm/utils/collectOxcRuntime/normalizeRuntimeCode.js.map +1 -0
  89. package/esm/utils/collectOxcRuntime/sourceMap.js +36 -0
  90. package/esm/utils/collectOxcRuntime/sourceMap.js.map +1 -0
  91. package/esm/utils/collectOxcRuntime/types.js +2 -0
  92. package/esm/utils/collectOxcRuntime/types.js.map +1 -0
  93. package/esm/utils/collectOxcRuntime.js +5 -193
  94. package/esm/utils/collectOxcRuntime.js.map +1 -1
  95. package/esm/utils/collectOxcTemplateDependencies/expressionExtraction.js +496 -0
  96. package/esm/utils/collectOxcTemplateDependencies/expressionExtraction.js.map +1 -0
  97. package/esm/utils/collectOxcTemplateDependencies/expressionReplacements.js +113 -0
  98. package/esm/utils/collectOxcTemplateDependencies/expressionReplacements.js.map +1 -0
  99. package/esm/utils/collectOxcTemplateDependencies/scopeAnalysis.js +387 -0
  100. package/esm/utils/collectOxcTemplateDependencies/scopeAnalysis.js.map +1 -0
  101. package/esm/utils/collectOxcTemplateDependencies/staticBindings.js +17 -0
  102. package/esm/utils/collectOxcTemplateDependencies/staticBindings.js.map +1 -0
  103. package/esm/utils/collectOxcTemplateDependencies/staticEvaluator.js +540 -0
  104. package/esm/utils/collectOxcTemplateDependencies/staticEvaluator.js.map +1 -0
  105. package/esm/utils/collectOxcTemplateDependencies/types.js +2 -0
  106. package/esm/utils/collectOxcTemplateDependencies/types.js.map +1 -0
  107. package/esm/utils/collectOxcTemplateDependencies.js +3 -1397
  108. package/esm/utils/collectOxcTemplateDependencies.js.map +1 -1
  109. package/esm/utils/nativeResolver.js +93 -0
  110. package/esm/utils/nativeResolver.js.map +1 -0
  111. package/esm/utils/oxc/ast.js +28 -0
  112. package/esm/utils/oxc/ast.js.map +1 -0
  113. package/esm/utils/oxc/parse.js +3 -0
  114. package/esm/utils/oxc/parse.js.map +1 -0
  115. package/esm/utils/oxc/replacements.js +14 -0
  116. package/esm/utils/oxc/replacements.js.map +1 -0
  117. package/esm/utils/oxc/sourceLocations.js +59 -0
  118. package/esm/utils/oxc/sourceLocations.js.map +1 -0
  119. package/esm/utils/oxcPreevalStage/evalStrategy.js +3 -0
  120. package/esm/utils/oxcPreevalStage/evalStrategy.js.map +1 -0
  121. package/esm/utils/oxcPreevalStage/prepareCode.js +21 -0
  122. package/esm/utils/oxcPreevalStage/prepareCode.js.map +1 -0
  123. package/esm/utils/oxcPreevalStage/prevalExport.js +23 -0
  124. package/esm/utils/oxcPreevalStage/prevalExport.js.map +1 -0
  125. package/esm/utils/oxcPreevalStage/processors.js +17 -0
  126. package/esm/utils/oxcPreevalStage/processors.js.map +1 -0
  127. package/esm/utils/oxcPreevalStage/staticOverlay.js +18 -0
  128. package/esm/utils/oxcPreevalStage/staticOverlay.js.map +1 -0
  129. package/esm/utils/oxcPreevalStage/types.js +2 -0
  130. package/esm/utils/oxcPreevalStage/types.js.map +1 -0
  131. package/esm/utils/oxcPreevalStage.js +17 -73
  132. package/esm/utils/oxcPreevalStage.js.map +1 -1
  133. package/esm/utils/oxcPreevalTransforms.js +12 -1
  134. package/esm/utils/oxcPreevalTransforms.js.map +1 -1
  135. package/esm/utils/processorStaticSemantics.js +157 -0
  136. package/esm/utils/processorStaticSemantics.js.map +1 -0
  137. package/esm/utils/resolveWithConditions.js +3 -3
  138. package/esm/utils/resolveWithConditions.js.map +1 -1
  139. package/package.json +4 -3
  140. package/types/cache.js +8 -0
  141. package/types/debug/fileReporter.js +46 -1
  142. package/types/eval/broker.d.ts +6 -2
  143. package/types/eval/broker.js +244 -95
  144. package/types/eval/protocol.d.ts +15 -1
  145. package/types/module.d.ts +4 -1
  146. package/types/module.js +97 -48
  147. package/types/transform/Entrypoint.types.d.ts +3 -0
  148. package/types/transform/generators/resolveImports.d.ts +3 -1
  149. package/types/transform/generators/resolveImports.js +49 -2
  150. package/types/transform/generators/resolveStaticOxcValues/cache.d.ts +25 -0
  151. package/types/transform/generators/resolveStaticOxcValues/cache.js +182 -0
  152. package/types/transform/generators/resolveStaticOxcValues/candidateResolver.d.ts +5 -0
  153. package/types/transform/generators/resolveStaticOxcValues/candidateResolver.js +149 -0
  154. package/types/transform/generators/resolveStaticOxcValues/dependencies.d.ts +6 -0
  155. package/types/transform/generators/resolveStaticOxcValues/dependencies.js +37 -0
  156. package/types/transform/generators/resolveStaticOxcValues/environment.d.ts +12 -0
  157. package/types/transform/generators/resolveStaticOxcValues/environment.js +32 -0
  158. package/types/transform/generators/resolveStaticOxcValues/exportResolver.d.ts +4 -0
  159. package/types/transform/generators/resolveStaticOxcValues/exportResolver.js +358 -0
  160. package/types/transform/generators/resolveStaticOxcValues/exportTargets.d.ts +20 -0
  161. package/types/transform/generators/resolveStaticOxcValues/exportTargets.js +285 -0
  162. package/types/transform/generators/resolveStaticOxcValues/objectAssign.d.ts +41 -0
  163. package/types/transform/generators/resolveStaticOxcValues/objectAssign.js +352 -0
  164. package/types/transform/generators/resolveStaticOxcValues/objectAssignStaticExport.d.ts +6 -0
  165. package/types/transform/generators/resolveStaticOxcValues/objectAssignStaticExport.js +88 -0
  166. package/types/transform/generators/resolveStaticOxcValues/opaqueRuntime.d.ts +13 -0
  167. package/types/transform/generators/resolveStaticOxcValues/opaqueRuntime.js +263 -0
  168. package/types/transform/generators/resolveStaticOxcValues/processorStaticExport.d.ts +4 -0
  169. package/types/transform/generators/resolveStaticOxcValues/processorStaticExport.js +191 -0
  170. package/types/transform/generators/resolveStaticOxcValues/processorStaticModel.d.ts +40 -0
  171. package/types/transform/generators/resolveStaticOxcValues/processorStaticModel.js +516 -0
  172. package/types/transform/generators/resolveStaticOxcValues/processorTarget.d.ts +5 -0
  173. package/types/transform/generators/resolveStaticOxcValues/processorTarget.js +62 -0
  174. package/types/transform/generators/resolveStaticOxcValues/programAnalysis.d.ts +11 -0
  175. package/types/transform/generators/resolveStaticOxcValues/programAnalysis.js +133 -0
  176. package/types/transform/generators/resolveStaticOxcValues/prune.d.ts +15 -0
  177. package/types/transform/generators/resolveStaticOxcValues/prune.js +220 -0
  178. package/types/transform/generators/resolveStaticOxcValues/resolveStaticOxcPreevalValues.d.ts +2 -0
  179. package/types/transform/generators/resolveStaticOxcValues/resolveStaticOxcPreevalValues.js +197 -0
  180. package/types/transform/generators/resolveStaticOxcValues/staticExpression.d.ts +25 -0
  181. package/types/transform/generators/resolveStaticOxcValues/staticExpression.js +391 -0
  182. package/types/transform/generators/resolveStaticOxcValues/staticExpressionDependencies.d.ts +14 -0
  183. package/types/transform/generators/resolveStaticOxcValues/staticExpressionDependencies.js +304 -0
  184. package/types/transform/generators/resolveStaticOxcValues/types.d.ts +99 -0
  185. package/types/transform/generators/resolveStaticOxcValues/types.js +2 -0
  186. package/types/transform/generators/resolveStaticOxcValues/zeroArgFunctionStaticExport.d.ts +7 -0
  187. package/types/transform/generators/resolveStaticOxcValues/zeroArgFunctionStaticExport.js +64 -0
  188. package/types/transform/generators/resolveStaticOxcValues.d.ts +1 -2
  189. package/types/transform/generators/resolveStaticOxcValues.js +1 -3235
  190. package/types/transform/generators/transform.js +63 -49
  191. package/types/transform/helpers/loadWywOptions.js +23 -3
  192. package/types/transform.js +3 -1
  193. package/types/utils/EventEmitter.d.ts +16 -1
  194. package/types/utils/EventEmitter.js +44 -9
  195. package/types/utils/applyOxcProcessors/applyOxcProcessors.d.ts +8 -0
  196. package/types/utils/applyOxcProcessors/applyOxcProcessors.js +167 -0
  197. package/types/utils/applyOxcProcessors/cleanupBindings.d.ts +12 -0
  198. package/types/utils/applyOxcProcessors/cleanupBindings.js +189 -0
  199. package/types/utils/applyOxcProcessors/cleanupRemovals.d.ts +16 -0
  200. package/types/utils/applyOxcProcessors/cleanupRemovals.js +482 -0
  201. package/types/utils/applyOxcProcessors/displayName.d.ts +9 -0
  202. package/types/utils/applyOxcProcessors/displayName.js +113 -0
  203. package/types/utils/applyOxcProcessors/expressionValues.d.ts +11 -0
  204. package/types/utils/applyOxcProcessors/expressionValues.js +170 -0
  205. package/types/utils/applyOxcProcessors/processorFactory.d.ts +7 -0
  206. package/types/utils/applyOxcProcessors/processorFactory.js +70 -0
  207. package/types/utils/applyOxcProcessors/processorUsages.d.ts +16 -0
  208. package/types/utils/applyOxcProcessors/processorUsages.js +163 -0
  209. package/types/utils/applyOxcProcessors/sameFileStaticValues.d.ts +23 -0
  210. package/types/utils/applyOxcProcessors/sameFileStaticValues.js +211 -0
  211. package/types/utils/applyOxcProcessors/shared.d.ts +10 -0
  212. package/types/utils/applyOxcProcessors/shared.js +37 -0
  213. package/types/utils/applyOxcProcessors/types.d.ts +88 -0
  214. package/types/utils/applyOxcProcessors/types.js +1 -0
  215. package/types/utils/applyOxcProcessors.d.ts +1 -16
  216. package/types/utils/applyOxcProcessors.js +1 -1391
  217. package/types/utils/collectOxcRuntime/normalizeRuntimeCode.d.ts +1 -0
  218. package/types/utils/collectOxcRuntime/normalizeRuntimeCode.js +185 -0
  219. package/types/utils/collectOxcRuntime/sourceMap.d.ts +2 -0
  220. package/types/utils/collectOxcRuntime/sourceMap.js +37 -0
  221. package/types/utils/collectOxcRuntime/types.d.ts +16 -0
  222. package/types/utils/collectOxcRuntime/types.js +1 -0
  223. package/types/utils/collectOxcRuntime.d.ts +2 -12
  224. package/types/utils/collectOxcRuntime.js +5 -224
  225. package/types/utils/collectOxcTemplateDependencies/expressionExtraction.d.ts +6 -0
  226. package/types/utils/collectOxcTemplateDependencies/expressionExtraction.js +550 -0
  227. package/types/utils/collectOxcTemplateDependencies/expressionReplacements.d.ts +11 -0
  228. package/types/utils/collectOxcTemplateDependencies/expressionReplacements.js +131 -0
  229. package/types/utils/collectOxcTemplateDependencies/scopeAnalysis.d.ts +20 -0
  230. package/types/utils/collectOxcTemplateDependencies/scopeAnalysis.js +434 -0
  231. package/types/utils/collectOxcTemplateDependencies/staticBindings.d.ts +7 -0
  232. package/types/utils/collectOxcTemplateDependencies/staticBindings.js +13 -0
  233. package/types/utils/collectOxcTemplateDependencies/staticEvaluator.d.ts +13 -0
  234. package/types/utils/collectOxcTemplateDependencies/staticEvaluator.js +626 -0
  235. package/types/utils/collectOxcTemplateDependencies/types.d.ts +116 -0
  236. package/types/utils/collectOxcTemplateDependencies/types.js +1 -0
  237. package/types/utils/collectOxcTemplateDependencies.d.ts +4 -38
  238. package/types/utils/collectOxcTemplateDependencies.js +3 -1580
  239. package/types/utils/nativeResolver.d.ts +13 -0
  240. package/types/utils/nativeResolver.js +91 -0
  241. package/types/utils/oxc/ast.d.ts +4 -0
  242. package/types/utils/oxc/ast.js +37 -0
  243. package/types/utils/oxc/parse.d.ts +3 -0
  244. package/types/utils/oxc/parse.js +2 -0
  245. package/types/utils/oxc/replacements.d.ts +12 -0
  246. package/types/utils/oxc/replacements.js +18 -0
  247. package/types/utils/oxc/sourceLocations.d.ts +5 -0
  248. package/types/utils/oxc/sourceLocations.js +63 -0
  249. package/types/utils/oxcPreevalStage/evalStrategy.d.ts +3 -0
  250. package/types/utils/oxcPreevalStage/evalStrategy.js +2 -0
  251. package/types/utils/oxcPreevalStage/prepareCode.d.ts +3 -0
  252. package/types/utils/oxcPreevalStage/prepareCode.js +20 -0
  253. package/types/utils/oxcPreevalStage/prevalExport.d.ts +1 -0
  254. package/types/utils/oxcPreevalStage/prevalExport.js +22 -0
  255. package/types/utils/oxcPreevalStage/processors.d.ts +10 -0
  256. package/types/utils/oxcPreevalStage/processors.js +16 -0
  257. package/types/utils/oxcPreevalStage/staticOverlay.d.ts +3 -0
  258. package/types/utils/oxcPreevalStage/staticOverlay.js +23 -0
  259. package/types/utils/oxcPreevalStage/types.d.ts +22 -0
  260. package/types/utils/oxcPreevalStage/types.js +1 -0
  261. package/types/utils/oxcPreevalStage.d.ts +2 -18
  262. package/types/utils/oxcPreevalStage.js +17 -79
  263. package/types/utils/oxcPreevalTransforms.js +14 -1
  264. package/types/utils/processorStaticSemantics.d.ts +13 -0
  265. package/types/utils/processorStaticSemantics.js +191 -0
  266. package/types/utils/resolveWithConditions.js +3 -3
  267. package/esm/eval/resolverStrategy.js +0 -51
  268. package/esm/eval/resolverStrategy.js.map +0 -1
  269. package/types/eval/resolverStrategy.d.ts +0 -13
  270. package/types/eval/resolverStrategy.js +0 -46
@@ -0,0 +1,88 @@
1
+ /* eslint-disable no-restricted-syntax,no-continue,@typescript-eslint/no-use-before-define */
2
+ import { evaluateOxcStaticExpressionAt } from '../../../utils/collectOxcTemplateDependencies';
3
+ import { getStaticBindings } from './environment';
4
+ import { findTopLevelConstExpression } from './programAnalysis';
5
+ import { collectImportBindings, bindStaticResolvedValue, } from './staticExpression';
6
+ import { collectStaticExpressionDependencies } from './staticExpressionDependencies';
7
+ import { mergeStaticObjectAssignAliases, objectAssignAliasExpressionsForTarget, objectAssignTargetExpression, resolveObjectAssignAliasValues, } from './objectAssign';
8
+ import { isStaticWYWMetaValue } from './processorStaticModel';
9
+ export function* resolveObjectAssignStaticExport(action, filename, code, program, target, stack, memo, resolvers) {
10
+ const objectAssignAliases = objectAssignAliasExpressionsForTarget(program, target);
11
+ const objectAssignTarget = objectAssignTargetExpression(program, target.expression);
12
+ if (!objectAssignTarget) {
13
+ return null;
14
+ }
15
+ const imports = collectImportBindings(program);
16
+ if (objectAssignTarget.type === 'Identifier') {
17
+ const importBinding = imports.get(objectAssignTarget.name);
18
+ if (importBinding) {
19
+ const resolved = yield* resolvers.resolveImportValue(action, filename, importBinding, stack, memo);
20
+ if (!resolved || !isStaticWYWMetaValue(resolved.value)) {
21
+ return null;
22
+ }
23
+ const dependencies = new Set([
24
+ filename,
25
+ ...resolved.dependencies.filter((item) => item !== filename),
26
+ ]);
27
+ const sideEffectDependencies = new Set(resolved.sideEffectDependencies ?? []);
28
+ const aliasValues = objectAssignAliases
29
+ ? yield* resolveObjectAssignAliasValues(action, filename, code, program, objectAssignAliases, stack, memo, resolvers)
30
+ : null;
31
+ const mergedValue = aliasValues
32
+ ? mergeStaticObjectAssignAliases(resolved.value, aliasValues.values)
33
+ : null;
34
+ aliasValues?.dependencies.forEach((item) => dependencies.add(item));
35
+ aliasValues?.sideEffectDependencies.forEach((item) => sideEffectDependencies.add(item));
36
+ return {
37
+ dependencies: [...dependencies],
38
+ sideEffectDependencies: [...sideEffectDependencies],
39
+ value: mergedValue ?? resolved.value,
40
+ };
41
+ }
42
+ }
43
+ const expression = objectAssignTarget.type === 'Identifier'
44
+ ? findTopLevelConstExpression(program, objectAssignTarget.name) ??
45
+ objectAssignTarget
46
+ : objectAssignTarget;
47
+ const staticDependencies = collectStaticExpressionDependencies(program, {
48
+ ...target,
49
+ expression,
50
+ });
51
+ if (!staticDependencies) {
52
+ return null;
53
+ }
54
+ const env = new Map();
55
+ const dependencies = new Set([filename]);
56
+ const sideEffectDependencies = new Set();
57
+ for (const binding of staticDependencies.imports) {
58
+ const resolved = yield* resolvers.resolveImportValue(action, filename, binding, stack, memo);
59
+ if (!resolved) {
60
+ return null;
61
+ }
62
+ if (!bindStaticResolvedValue(env, expression, binding.local, resolved)) {
63
+ return null;
64
+ }
65
+ resolved.dependencies.forEach((item) => dependencies.add(item));
66
+ resolved.sideEffectDependencies?.forEach((item) => sideEffectDependencies.add(item));
67
+ }
68
+ const value = evaluateOxcStaticExpressionAt(code, filename, {
69
+ end: expression.end,
70
+ start: expression.start,
71
+ }, env, getStaticBindings(action));
72
+ if (!isStaticWYWMetaValue(value)) {
73
+ return null;
74
+ }
75
+ const aliasValues = objectAssignAliases
76
+ ? yield* resolveObjectAssignAliasValues(action, filename, code, program, objectAssignAliases, stack, memo, resolvers)
77
+ : null;
78
+ const mergedValue = aliasValues
79
+ ? mergeStaticObjectAssignAliases(value, aliasValues.values)
80
+ : null;
81
+ aliasValues?.dependencies.forEach((item) => dependencies.add(item));
82
+ aliasValues?.sideEffectDependencies.forEach((item) => sideEffectDependencies.add(item));
83
+ return {
84
+ dependencies: [...dependencies],
85
+ sideEffectDependencies: [...sideEffectDependencies],
86
+ value: mergedValue ?? value,
87
+ };
88
+ }
@@ -0,0 +1,13 @@
1
+ import type { Expression, Node, Program } from 'oxc-parser';
2
+ import type { ITransformAction, SyncScenarioFor } from '../../types';
3
+ import type { ImportBinding, OpaqueRuntimeImportProof } from './types';
4
+ export declare const isKnownOpaqueRuntimeWrapperImport: (binding: ImportBinding | undefined) => boolean;
5
+ export declare const isKnownOpaqueRuntimeWrapperCallee: (expr: Node, imports: Map<string, ImportBinding>) => boolean;
6
+ export declare const isKnownOpaqueRuntimeImportSource: (source: string) => boolean;
7
+ export declare const isKnownExternalRuntimeComponentImportSource: (source: string) => boolean;
8
+ export declare const isOpaqueRuntimeComponentExpression: (program: Program, expr: Node, opaqueImportNames?: Set<string>, seen?: Set<string>) => boolean;
9
+ export declare const collectOpaqueRuntimeReferenceNames: (program: Program, expr: Node, names: Set<string>, seenHelpers?: Set<string>) => void;
10
+ export declare function resolveExportAsOpaqueRuntimeImport(action: ITransformAction, filename: string, exportedName: string, stack: Set<string>, memo: Map<string, OpaqueRuntimeImportProof | null>): SyncScenarioFor<OpaqueRuntimeImportProof | null>;
11
+ export declare const knownOpaqueRuntimeSourceDependency: (importer: string, source: string) => string | null;
12
+ export declare function resolveImportAsOpaqueRuntime(action: ITransformAction, importer: string, binding: Pick<ImportBinding, 'imported' | 'source'>, stack: Set<string>, memo: Map<string, OpaqueRuntimeImportProof | null>): SyncScenarioFor<OpaqueRuntimeImportProof | null>;
13
+ export declare function collectOpaqueRuntimeImportProof(action: ITransformAction, filename: string, program: Program, expression: Expression): SyncScenarioFor<OpaqueRuntimeImportProof>;
@@ -0,0 +1,263 @@
1
+ /* eslint-disable no-restricted-syntax,no-continue,@typescript-eslint/no-use-before-define */
2
+ import { dirname, isAbsolute, resolve as resolvePath } from 'path';
3
+ import { oxcShaker } from '../../../shaker';
4
+ import { getOxcNodeChildren } from '../../../utils/oxc/ast';
5
+ import { stripQueryAndHash } from '../../../utils/parseRequest';
6
+ import { hashStaticContent, getStaticMetadataPreevalResult } from './cache';
7
+ import { resolveDependency } from './dependencies';
8
+ import { parseProgram } from './environment';
9
+ import { findExportTarget } from './exportTargets';
10
+ import { findTopLevelConstExpression, functionReturnExpression, isTopLevelFunctionOrClass, } from './programAnalysis';
11
+ import { collectWYWMetaExtendsExpressionsDeep, isStaticMetaObjectExpression, } from './processorStaticModel';
12
+ import { collectImportBindings, isSafeStaticExpression, unwrapExpression, } from './staticExpression';
13
+ import { rootIdentifierName } from './staticExpressionDependencies';
14
+ export const isKnownOpaqueRuntimeWrapperImport = (binding) => {
15
+ if (!binding) {
16
+ return false;
17
+ }
18
+ return (binding.imported === 'observer' &&
19
+ (binding.source === 'mobx-react' || binding.source === 'mobx-react-lite'));
20
+ };
21
+ export const isKnownOpaqueRuntimeWrapperCallee = (expr, imports) => {
22
+ const callee = unwrapExpression(expr);
23
+ if (callee.type === 'Identifier') {
24
+ return isKnownOpaqueRuntimeWrapperImport(imports.get(callee.name));
25
+ }
26
+ return false;
27
+ };
28
+ export const isKnownOpaqueRuntimeImportSource = (source) => /\.svg(?:$|[?#])/.test(source);
29
+ export const isKnownExternalRuntimeComponentImportSource = (source) => source.startsWith('@radix-ui/react-');
30
+ export const isOpaqueRuntimeComponentExpression = (program, expr, opaqueImportNames = new Set(), seen = new Set()) => {
31
+ const imports = collectImportBindings(program, { includeNamespace: true });
32
+ const unwrapped = unwrapExpression(expr);
33
+ if (isStaticMetaObjectExpression(unwrapped)) {
34
+ return false;
35
+ }
36
+ if (unwrapped.type === 'ArrowFunctionExpression' ||
37
+ unwrapped.type === 'FunctionExpression' ||
38
+ unwrapped.type === 'ClassExpression') {
39
+ return true;
40
+ }
41
+ if (unwrapped.type === 'CallExpression' &&
42
+ unwrapped.arguments.length === 1 &&
43
+ isKnownOpaqueRuntimeWrapperCallee(unwrapped.callee, imports)) {
44
+ const [argument] = unwrapped.arguments;
45
+ return argument.type !== 'SpreadElement'
46
+ ? isOpaqueRuntimeComponentExpression(program, argument, opaqueImportNames, seen)
47
+ : false;
48
+ }
49
+ if (unwrapped.type === 'CallExpression' &&
50
+ unwrapped.callee.type === 'Identifier') {
51
+ const allowParams = unwrapped.arguments.every((argument) => argument.type !== 'SpreadElement' && isSafeStaticExpression(argument));
52
+ const local = findTopLevelConstExpression(program, unwrapped.callee.name);
53
+ const returned = local
54
+ ? functionReturnExpression(local, { allowParams })
55
+ : null;
56
+ return returned
57
+ ? isOpaqueRuntimeComponentExpression(program, returned, opaqueImportNames, seen)
58
+ : false;
59
+ }
60
+ if (unwrapped.type === 'MemberExpression' && !unwrapped.computed) {
61
+ const name = rootIdentifierName(unwrapped);
62
+ const imported = name ? imports.get(name) : undefined;
63
+ return (!!name &&
64
+ !!imported &&
65
+ (opaqueImportNames.has(name) ||
66
+ isKnownExternalRuntimeComponentImportSource(imported.source)));
67
+ }
68
+ if (unwrapped.type !== 'Identifier') {
69
+ return false;
70
+ }
71
+ const { name } = unwrapped;
72
+ if (seen.has(name)) {
73
+ return false;
74
+ }
75
+ seen.add(name);
76
+ const imported = imports.get(name);
77
+ if (imported) {
78
+ return (opaqueImportNames.has(name) ||
79
+ isKnownOpaqueRuntimeImportSource(imported.source) ||
80
+ isKnownExternalRuntimeComponentImportSource(imported.source));
81
+ }
82
+ if (isTopLevelFunctionOrClass(program, name)) {
83
+ return true;
84
+ }
85
+ const local = findTopLevelConstExpression(program, name);
86
+ return local
87
+ ? isOpaqueRuntimeComponentExpression(program, local, opaqueImportNames, seen)
88
+ : false;
89
+ };
90
+ export const collectOpaqueRuntimeReferenceNames = (program, expr, names, seenHelpers = new Set()) => {
91
+ const unwrapped = unwrapExpression(expr);
92
+ if (unwrapped.type === 'CallExpression' &&
93
+ unwrapped.callee.type === 'Identifier') {
94
+ const allowParams = unwrapped.arguments.every((argument) => argument.type !== 'SpreadElement' && isSafeStaticExpression(argument));
95
+ if (seenHelpers.has(unwrapped.callee.name)) {
96
+ return;
97
+ }
98
+ const local = findTopLevelConstExpression(program, unwrapped.callee.name);
99
+ const returned = local
100
+ ? functionReturnExpression(local, { allowParams })
101
+ : null;
102
+ if (returned) {
103
+ seenHelpers.add(unwrapped.callee.name);
104
+ collectOpaqueRuntimeReferenceNames(program, returned, names, seenHelpers);
105
+ seenHelpers.delete(unwrapped.callee.name);
106
+ return;
107
+ }
108
+ }
109
+ if (unwrapped.type === 'Identifier') {
110
+ names.add(unwrapped.name);
111
+ return;
112
+ }
113
+ getOxcNodeChildren(unwrapped).forEach((child) => collectOpaqueRuntimeReferenceNames(program, child, names, seenHelpers));
114
+ };
115
+ export function* resolveExportAsOpaqueRuntimeImport(action, filename, exportedName, stack, memo) {
116
+ const memoKey = `${filename}\0${exportedName}`;
117
+ if (memo.has(memoKey)) {
118
+ return memo.get(memoKey) ?? null;
119
+ }
120
+ if (stack.has(memoKey)) {
121
+ memo.set(memoKey, null);
122
+ return null;
123
+ }
124
+ stack.add(memoKey);
125
+ const loadedAndParsed = action.services.loadAndParseFn(action.services, filename, undefined, action.services.log);
126
+ if (loadedAndParsed.evaluator === 'ignored' ||
127
+ loadedAndParsed.evaluator !== oxcShaker) {
128
+ memo.set(memoKey, null);
129
+ stack.delete(memoKey);
130
+ return null;
131
+ }
132
+ const codeHash = hashStaticContent(loadedAndParsed.code);
133
+ const preevalResult = getStaticMetadataPreevalResult(action, filename, loadedAndParsed.code, codeHash);
134
+ const program = parseProgram(preevalResult?.baseCode ?? loadedAndParsed.code, filename);
135
+ const target = findExportTarget(program, exportedName);
136
+ if (!target) {
137
+ memo.set(memoKey, null);
138
+ stack.delete(memoKey);
139
+ return null;
140
+ }
141
+ if (target.kind === 'import') {
142
+ const resolved = yield* resolveImportAsOpaqueRuntime(action, filename, target, stack, memo);
143
+ memo.set(memoKey, resolved);
144
+ stack.delete(memoKey);
145
+ return resolved;
146
+ }
147
+ if (isOpaqueRuntimeComponentExpression(program, target.expression)) {
148
+ const resolved = {
149
+ dependencies: [filename],
150
+ names: new Set(),
151
+ };
152
+ memo.set(memoKey, resolved);
153
+ stack.delete(memoKey);
154
+ return resolved;
155
+ }
156
+ const imports = collectImportBindings(program, { includeNamespace: true });
157
+ const referencedNames = new Set();
158
+ collectOpaqueRuntimeReferenceNames(program, target.expression, referencedNames);
159
+ const opaqueImportNames = new Set();
160
+ const dependencies = new Set([filename]);
161
+ for (const name of referencedNames) {
162
+ const binding = imports.get(name);
163
+ if (!binding ||
164
+ binding.source === 'react' ||
165
+ isKnownOpaqueRuntimeWrapperImport(binding)) {
166
+ continue;
167
+ }
168
+ const proof = yield* resolveImportAsOpaqueRuntime(action, filename, binding, stack, memo);
169
+ if (!proof) {
170
+ continue;
171
+ }
172
+ opaqueImportNames.add(name);
173
+ proof.dependencies.forEach((dependency) => dependencies.add(dependency));
174
+ }
175
+ const resolved = isOpaqueRuntimeComponentExpression(program, target.expression, opaqueImportNames)
176
+ ? {
177
+ dependencies: [...dependencies],
178
+ names: opaqueImportNames,
179
+ }
180
+ : null;
181
+ memo.set(memoKey, resolved);
182
+ stack.delete(memoKey);
183
+ return resolved;
184
+ }
185
+ export const knownOpaqueRuntimeSourceDependency = (importer, source) => {
186
+ if (!isKnownOpaqueRuntimeImportSource(source)) {
187
+ return null;
188
+ }
189
+ const request = stripQueryAndHash(source);
190
+ if (isAbsolute(request)) {
191
+ return request;
192
+ }
193
+ return request.startsWith('.')
194
+ ? resolvePath(dirname(importer), request)
195
+ : null;
196
+ };
197
+ export function* resolveImportAsOpaqueRuntime(action, importer, binding, stack, memo) {
198
+ const knownSourceDependency = knownOpaqueRuntimeSourceDependency(importer, binding.source);
199
+ if (knownSourceDependency) {
200
+ return {
201
+ dependencies: [knownSourceDependency],
202
+ names: new Set(),
203
+ };
204
+ }
205
+ if (isKnownExternalRuntimeComponentImportSource(binding.source)) {
206
+ return {
207
+ dependencies: [],
208
+ names: new Set(),
209
+ };
210
+ }
211
+ const dependency = yield* resolveDependency(action, importer, binding.source, binding.imported);
212
+ if (!dependency?.resolved) {
213
+ return null;
214
+ }
215
+ if (isKnownOpaqueRuntimeImportSource(binding.source) ||
216
+ isKnownOpaqueRuntimeImportSource(dependency.resolved)) {
217
+ return {
218
+ dependencies: [dependency.resolved],
219
+ names: new Set(),
220
+ };
221
+ }
222
+ const resolved = yield* resolveExportAsOpaqueRuntimeImport(action, dependency.resolved, binding.imported, stack, memo);
223
+ return resolved
224
+ ? {
225
+ dependencies: [
226
+ dependency.resolved,
227
+ ...resolved.dependencies.filter((item) => item !== dependency.resolved),
228
+ ],
229
+ names: resolved.names,
230
+ }
231
+ : null;
232
+ }
233
+ export function* collectOpaqueRuntimeImportProof(action, filename, program, expression) {
234
+ const extendsExpressions = collectWYWMetaExtendsExpressionsDeep(program, expression);
235
+ if (extendsExpressions.length === 0) {
236
+ return {
237
+ dependencies: [],
238
+ names: new Set(),
239
+ };
240
+ }
241
+ const imports = collectImportBindings(program, { includeNamespace: true });
242
+ const referencedNames = new Set();
243
+ extendsExpressions.forEach((extendsExpression) => collectOpaqueRuntimeReferenceNames(program, extendsExpression, referencedNames));
244
+ const dependencies = new Set();
245
+ const names = new Set();
246
+ const memo = new Map();
247
+ for (const name of referencedNames) {
248
+ const binding = imports.get(name);
249
+ if (!binding || binding.source === 'react') {
250
+ continue;
251
+ }
252
+ const proof = yield* resolveImportAsOpaqueRuntime(action, filename, binding, new Set(), memo);
253
+ if (!proof) {
254
+ continue;
255
+ }
256
+ names.add(name);
257
+ proof.dependencies.forEach((dependency) => dependencies.add(dependency));
258
+ }
259
+ return {
260
+ dependencies: [...dependencies],
261
+ names,
262
+ };
263
+ }
@@ -0,0 +1,4 @@
1
+ import type { Program } from 'oxc-parser';
2
+ import type { ITransformAction, SyncScenarioFor } from '../../types';
3
+ import type { StaticExportResolverContext, StaticExportResult } from './types';
4
+ export declare function resolveProcessorStaticExport(action: ITransformAction, filename: string, code: string, codeHash: string, program: Program, exportedName: string, stack: Set<string>, memo: Map<string, StaticExportResult | null>, resolvers: StaticExportResolverContext): SyncScenarioFor<StaticExportResult | null>;
@@ -0,0 +1,191 @@
1
+ /* eslint-disable no-restricted-syntax,no-continue,@typescript-eslint/no-use-before-define */
2
+ import { evaluateOxcStaticExpressionAt, isOxcStaticSerializableValue, } from '../../../utils/collectOxcTemplateDependencies';
3
+ import { getStaticMetadataPreevalResult } from './cache';
4
+ import { debugStaticResolve, getStaticBindings, isLocalStaticMetadataFile, parseProgram, } from './environment';
5
+ import { findExportTarget } from './exportTargets';
6
+ import { collectOpaqueRuntimeImportProof } from './opaqueRuntime';
7
+ import { mergeStaticObjectAssignAliases, objectAssignAliasExpressionsForTarget, resolveObjectAssignAliasValues, resolveObjectAssignProcessorExpression, } from './objectAssign';
8
+ import { prepareProcessorTarget } from './processorTarget';
9
+ import { collectProcessorImportLocals, isKnownProcessorClassValue, isProcessorClassValue, isSelectorOnlyProcessorValue, processorClassNameRuntimeValue, isStaticWYWMetaTreeValue, isStaticWYWMetaValue, } from './processorStaticModel';
10
+ import { bindStaticResolvedValue } from './staticExpression';
11
+ export function* resolveProcessorStaticExport(action, filename, code, codeHash, program, exportedName, stack, memo, resolvers) {
12
+ const root = action.services.options.root ?? process.cwd();
13
+ if (!isLocalStaticMetadataFile(filename, root)) {
14
+ debugStaticResolve(action, {
15
+ exported: exportedName,
16
+ filename,
17
+ phase: 'processor-metadata',
18
+ reason: 'outside-root',
19
+ status: 'rejected',
20
+ });
21
+ return null;
22
+ }
23
+ if (collectProcessorImportLocals(action, program, code, filename).size === 0) {
24
+ debugStaticResolve(action, {
25
+ exported: exportedName,
26
+ filename,
27
+ phase: 'processor-metadata',
28
+ reason: 'no-processor-imports',
29
+ status: 'rejected',
30
+ });
31
+ return null;
32
+ }
33
+ const preevalResult = getStaticMetadataPreevalResult(action, filename, code, codeHash);
34
+ if (!preevalResult) {
35
+ debugStaticResolve(action, {
36
+ exported: exportedName,
37
+ filename,
38
+ phase: 'processor-metadata',
39
+ reason: 'metadata-preeval-failed',
40
+ status: 'rejected',
41
+ });
42
+ return null;
43
+ }
44
+ if (!preevalResult.metadata) {
45
+ debugStaticResolve(action, {
46
+ exported: exportedName,
47
+ filename,
48
+ phase: 'processor-metadata',
49
+ reason: 'metadata-missing',
50
+ status: 'rejected',
51
+ });
52
+ return null;
53
+ }
54
+ const preevalCode = preevalResult.baseCode;
55
+ const preevalProgram = parseProgram(preevalCode, filename);
56
+ const target = findExportTarget(preevalProgram, exportedName);
57
+ if (!target || target.kind === 'import') {
58
+ debugStaticResolve(action, {
59
+ exported: exportedName,
60
+ filename,
61
+ phase: 'processor-metadata',
62
+ reason: 'processor-target-missing',
63
+ status: 'rejected',
64
+ });
65
+ return null;
66
+ }
67
+ const processorObjectAssignAliases = objectAssignAliasExpressionsForTarget(preevalProgram, target);
68
+ const processorExpression = resolveObjectAssignProcessorExpression(preevalProgram, target.expression);
69
+ const opaqueRuntimeImportProof = yield* collectOpaqueRuntimeImportProof(action, filename, preevalProgram, processorExpression);
70
+ const preparedTarget = prepareProcessorTarget(preevalCode, filename, preevalProgram, target, exportedName, opaqueRuntimeImportProof.names);
71
+ if (!preparedTarget) {
72
+ debugStaticResolve(action, {
73
+ exported: exportedName,
74
+ filename,
75
+ phase: 'processor-metadata',
76
+ reason: 'unsupported-processor-expression',
77
+ status: 'rejected',
78
+ });
79
+ return null;
80
+ }
81
+ const env = new Map();
82
+ const dependencies = new Set([filename]);
83
+ const sideEffectDependencies = new Set();
84
+ opaqueRuntimeImportProof.dependencies.forEach((dependency) => dependencies.add(dependency));
85
+ for (const binding of preparedTarget.dependencies.imports) {
86
+ const resolved = yield* resolvers.resolveImportValue(action, filename, binding, stack, memo);
87
+ if (!resolved) {
88
+ debugStaticResolve(action, {
89
+ exported: exportedName,
90
+ filename,
91
+ imported: binding.imported,
92
+ phase: 'processor-metadata',
93
+ reason: 'resolve-failed',
94
+ source: binding.source,
95
+ status: 'rejected',
96
+ });
97
+ return null;
98
+ }
99
+ if (!bindStaticResolvedValue(env, preparedTarget.expression, binding.local, resolved, {
100
+ wrapNonCallable: true,
101
+ })) {
102
+ debugStaticResolve(action, {
103
+ exported: exportedName,
104
+ filename,
105
+ imported: binding.imported,
106
+ phase: 'processor-metadata',
107
+ reason: 'callable-usage-unsupported',
108
+ source: binding.source,
109
+ status: 'rejected',
110
+ });
111
+ return null;
112
+ }
113
+ resolved.dependencies.forEach((dependency) => dependencies.add(dependency));
114
+ resolved.sideEffectDependencies?.forEach((dependency) => sideEffectDependencies.add(dependency));
115
+ }
116
+ const value = preparedTarget.evaluationCode && preparedTarget.evaluationSpan
117
+ ? evaluateOxcStaticExpressionAt(preparedTarget.evaluationCode, filename, preparedTarget.evaluationSpan, env, getStaticBindings(action))
118
+ : evaluateOxcStaticExpressionAt(preevalCode, filename, {
119
+ end: preparedTarget.expression.end,
120
+ start: preparedTarget.expression.start,
121
+ }, env, getStaticBindings(action));
122
+ if (!isOxcStaticSerializableValue(value)) {
123
+ debugStaticResolve(action, {
124
+ exported: exportedName,
125
+ filename,
126
+ phase: 'processor-metadata',
127
+ reason: 'non-serializable',
128
+ status: 'rejected',
129
+ });
130
+ return null;
131
+ }
132
+ let resolvedValue = value;
133
+ if (processorObjectAssignAliases && isStaticWYWMetaValue(value)) {
134
+ const aliasValues = yield* resolveObjectAssignAliasValues(action, filename, preevalCode, preevalProgram, processorObjectAssignAliases, stack, memo, resolvers);
135
+ const mergedValue = aliasValues
136
+ ? mergeStaticObjectAssignAliases(value, aliasValues.values)
137
+ : null;
138
+ if (mergedValue) {
139
+ resolvedValue = mergedValue;
140
+ aliasValues?.dependencies.forEach((dependency) => dependencies.add(dependency));
141
+ aliasValues?.sideEffectDependencies.forEach((dependency) => sideEffectDependencies.add(dependency));
142
+ }
143
+ }
144
+ const isStaticMeta = isStaticWYWMetaValue(resolvedValue);
145
+ const isStaticMetaTree = !isStaticMeta && isStaticWYWMetaTreeValue(resolvedValue);
146
+ const processors = preevalResult.metadata
147
+ .processors;
148
+ const processorClassNames = new Set(processors.map((processor) => processorClassNameRuntimeValue(processor)));
149
+ const isSelectorOnly = !isStaticMeta &&
150
+ !isStaticMetaTree &&
151
+ isSelectorOnlyProcessorValue(resolvedValue, processors, new Map());
152
+ const isSideEffectClassValue = !isStaticMeta &&
153
+ !isStaticMetaTree &&
154
+ !isSelectorOnly &&
155
+ (isProcessorClassValue(resolvedValue, processors, new Map()) ||
156
+ isKnownProcessorClassValue(resolvedValue, processorClassNames));
157
+ if (!isStaticMeta &&
158
+ !isStaticMetaTree &&
159
+ !isSelectorOnly &&
160
+ !isSideEffectClassValue) {
161
+ debugStaticResolve(action, {
162
+ exported: exportedName,
163
+ filename,
164
+ phase: 'processor-metadata',
165
+ reason: 'non-empty-css-artifact',
166
+ status: 'rejected',
167
+ });
168
+ return null;
169
+ }
170
+ let resolvedReason;
171
+ if (preparedTarget.opaqueRuntimeBase) {
172
+ resolvedReason = 'opaque-runtime-component';
173
+ }
174
+ else if (isSideEffectClassValue) {
175
+ resolvedReason = 'non-empty-css-artifact-side-effect';
176
+ }
177
+ debugStaticResolve(action, {
178
+ exported: exportedName,
179
+ filename,
180
+ phase: 'processor-metadata',
181
+ reason: resolvedReason,
182
+ status: 'resolved',
183
+ });
184
+ return {
185
+ dependencies: [...dependencies],
186
+ sideEffectDependencies: isSideEffectClassValue
187
+ ? [filename, ...sideEffectDependencies]
188
+ : [...sideEffectDependencies],
189
+ value: resolvedValue,
190
+ };
191
+ }
@@ -0,0 +1,40 @@
1
+ import type { BaseProcessor } from '@wyw-in-js/processor-utils';
2
+ import type { Expression, Node, Program } from 'oxc-parser';
3
+ import type { ITransformAction } from '../../types';
4
+ export declare const collectProcessorImportLocals: (action: ITransformAction, program: Program, code: string, filename: string) => Set<string>;
5
+ export declare const isStaticWYWMetaValue: (value: unknown, seen?: Set<unknown>) => boolean;
6
+ export type StaticWYWSelectorMetaValue = {
7
+ __wyw_meta: {
8
+ className: string;
9
+ extends: StaticWYWSelectorMetaValue | null;
10
+ };
11
+ };
12
+ export declare const toStaticWYWSelectorMetaValue: (value: unknown, seen?: Set<unknown>) => StaticWYWSelectorMetaValue | null;
13
+ export declare const staticWYWMetaExtendsReplacementCode: (value: unknown) => string | null;
14
+ export declare const unknownStaticWYWMetaValue: unique symbol;
15
+ export type UnknownStaticWYWMetaValue = typeof unknownStaticWYWMetaValue;
16
+ export declare const zeroArgFunctionExpressionBody: (expr: Expression) => Expression | null;
17
+ export declare const isNullLiteralExpression: (node: Node) => boolean;
18
+ export declare const isNullReturningFunctionExpression: (expr: Expression) => boolean;
19
+ export declare const createSameFileStaticWYWMetaHelperResolver: (code: string, filename: string) => ((seedValues: Map<string, unknown>) => Map<string, unknown>);
20
+ export declare const staticWYWMetaTreeValueStatus: (value: unknown, seen?: Set<unknown>) => {
21
+ hasMetadata: boolean;
22
+ safe: boolean;
23
+ };
24
+ export declare const isStaticWYWMetaTreeValue: (value: unknown) => boolean;
25
+ export type StaticProcessorInstance = BaseProcessor;
26
+ export declare const processorClassNameRuntimeValue: (processor: StaticProcessorInstance) => string;
27
+ export declare const isProcessorRuntimeClassName: (processor: StaticProcessorInstance, value: string) => boolean;
28
+ export declare const isPlainObjectRecord: (value: unknown) => value is Record<string, unknown>;
29
+ export declare const isStaticObjectAssignAliasValue: (value: unknown) => boolean;
30
+ export declare const artifactCssText: (artifact: unknown) => string | null;
31
+ export declare const isEmptyProcessorClassName: (value: string, processors: StaticProcessorInstance[], cache: Map<string, boolean>) => boolean;
32
+ export declare const isProcessorClassName: (value: string, processors: StaticProcessorInstance[], cache: Map<string, boolean>) => boolean;
33
+ export declare const isKnownProcessorClassName: (value: string, processorClassNames: ReadonlySet<string>) => boolean;
34
+ export declare const isSelectorOnlyProcessorValue: (value: unknown, processors: StaticProcessorInstance[], cache: Map<string, boolean>, seen?: Set<unknown>) => boolean;
35
+ export declare const isProcessorClassValue: (value: unknown, processors: StaticProcessorInstance[], cache: Map<string, boolean>, seen?: Set<unknown>) => boolean;
36
+ export declare const isKnownProcessorClassValue: (value: unknown, processorClassNames: ReadonlySet<string>, seen?: Set<unknown>) => boolean;
37
+ export declare const findWYWMetaExtendsExpression: (expr: Expression) => Expression | null;
38
+ export declare const collectWYWMetaExtendsExpressionsDeep: (program: Program, expr: Expression) => Expression[];
39
+ export declare const isStaticMetaObjectExpression: (expr: Node) => boolean;
40
+ export declare const collectWYWMetaExtendsHelperNames: (program: Program) => Set<string>;