@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
package/esm/module.js CHANGED
@@ -22,6 +22,7 @@ import { Entrypoint } from "./transform/Entrypoint.js";
22
22
  import { getStack, isSuperSet, mergeOnly } from "./transform/Entrypoint.helpers.js";
23
23
  import { isUnprocessedEntrypointError } from "./transform/actions/UnprocessedEntrypointError.js";
24
24
  import { applyImportOverrideToOnly, getImportOverride, resolveMockSpecifier, toImportKey } from "./utils/importOverrides.js";
25
+ import { resolveWithNativeResolver } from "./utils/nativeResolver.js";
25
26
  import { parseRequest, stripQueryAndHash } from "./utils/parseRequest.js";
26
27
  import { resolveFilenameWithConditions } from "./utils/resolveWithConditions.js";
27
28
  import { createVmContext } from "./vm/createVmContext.js";
@@ -95,7 +96,7 @@ const nodeRequire = createRequire(import.meta.url);
95
96
  const NOOP = () => {};
96
97
  const TROUBLESHOOTING_URL = "https://wyw-in-js.dev/troubleshooting";
97
98
  const defaultEvalOptions = {
98
- mode: "strict",
99
+ errors: "strict",
99
100
  require: "warn-and-run",
100
101
  resolver: "bundler"
101
102
  };
@@ -535,7 +536,7 @@ export class Module {
535
536
  const resolved = await this.resolveImport(specifier, importer, kind);
536
537
  const evalOptions = getEvalOptions(this.services);
537
538
  if (!resolved) {
538
- if (evalOptions.mode === "loose") {
539
+ if (evalOptions.errors === "loose") {
539
540
  return this.createSyntheticModule(specifier, { default: undefined });
540
541
  }
541
542
  throw new Error([
@@ -567,7 +568,7 @@ export class Module {
567
568
  return null;
568
569
  }
569
570
  }
570
- if (evalOptions.resolver !== "node") {
571
+ const resolveBundlerDependency = () => {
571
572
  const dependency = getImporterDependency(importer, specifier);
572
573
  if (dependency?.resolved) {
573
574
  return {
@@ -576,9 +577,22 @@ export class Module {
576
577
  only: dependency.only
577
578
  };
578
579
  }
580
+ return null;
581
+ };
582
+ if (evalOptions.resolver === "hybrid") {
583
+ try {
584
+ return this.resolveWithNativeFallback(specifier, importer, kind, { warnOnFallback: false });
585
+ } catch {}
586
+ }
587
+ if (evalOptions.resolver === "native") {
588
+ return this.resolveWithNativeFallback(specifier, importer, kind, { warnOnFallback: false });
579
589
  }
580
- if (evalOptions.resolver === "node" || evalOptions.require !== "off") {
581
- return this.resolveWithNodeFallback(specifier, importer, kind);
590
+ if (evalOptions.resolver === "bundler" || evalOptions.resolver === "hybrid") {
591
+ const dependency = resolveBundlerDependency();
592
+ if (dependency) return dependency;
593
+ }
594
+ if (evalOptions.resolver === "bundler" && evalOptions.require !== "off") {
595
+ return this.resolveWithNativeFallback(specifier, importer, kind, { warnOnFallback: true });
582
596
  }
583
597
  return null;
584
598
  }
@@ -591,7 +605,7 @@ export class Module {
591
605
  only: dependency.only
592
606
  }, importer);
593
607
  }
594
- return this.resolveWithNodeFallback(specifier, importer, "require");
608
+ return this.resolveWithNativeFallback(specifier, importer, "require", { warnOnFallback: true });
595
609
  }
596
610
  applyImportOverrides(resolved, importer) {
597
611
  const { root } = this.services.options;
@@ -669,43 +683,56 @@ export class Module {
669
683
  throw error;
670
684
  }
671
685
  }
672
- resolveWithNodeFallback = (id, importer, kind) => {
673
- if (!this.ignored) {
674
- this.debug("❌ import has not been resolved during prepare stage. Fallback to Node.js resolver");
686
+ resolveWithNativeFallback = (id, importer, kind, { warnOnFallback } = { warnOnFallback: true }) => {
687
+ if (!this.ignored && warnOnFallback) {
688
+ this.debug("❌ import has not been resolved during prepare stage. Fallback to native resolver");
675
689
  }
676
690
  const extensions = this.moduleImpl._extensions;
677
691
  const added = [];
678
692
  try {
679
- // Check for supported extensions
680
- this.extensions.forEach((ext) => {
681
- if (ext === ".cjs" || ext === ".mjs") {
682
- return;
683
- }
684
- if (ext in extensions) {
685
- return;
686
- }
687
- // When an extension is not supported, add it
688
- // And keep track of it to clean it up after resolving
689
- // Use noop for the transform function since we handle it
690
- extensions[ext] = NOOP;
691
- added.push(ext);
692
- });
693
693
  const filename = importer.name;
694
694
  const strippedId = stripQueryAndHash(id);
695
- const parent = {
696
- id: filename,
697
- filename,
698
- paths: this.moduleImpl._nodeModulePaths(path.dirname(filename))
699
- };
700
- const { conditionNames } = this.services.options.pluginOptions;
701
- const conditions = conditionNames?.length ? expandConditions(conditionNames) : undefined;
702
- let resolved = this.resolveWithConditions(strippedId, parent, conditions);
703
- const isFileSpecifier = strippedId.startsWith(".") || path.isAbsolute(strippedId);
704
- if (isFileSpecifier && path.extname(strippedId) === "" && resolved.endsWith(".cjs") && fs.existsSync(`${resolved.slice(0, -4)}.js`)) {
705
- // When both `.cjs` and `.js` exist for an extensionless specifier, the
706
- // resolver may pick `.cjs` depending on the environment/extensions.
707
- // Prefer `.js` to keep resolved paths stable (e.g. importOverrides keys).
708
- resolved = `${resolved.slice(0, -4)}.js`;
695
+ const { conditionNames, oxcOptions } = this.services.options.pluginOptions;
696
+ let resolved;
697
+ try {
698
+ if (this.moduleImpl === DefaultModuleImplementation) {
699
+ resolved = resolveWithNativeResolver({
700
+ conditionNames,
701
+ extensions: this.extensions,
702
+ importer: filename,
703
+ kind,
704
+ oxcOptions,
705
+ specifier: id
706
+ });
707
+ } else {
708
+ // Preserve the test-only custom module implementation hook.
709
+ this.extensions.forEach((ext) => {
710
+ if (ext === ".cjs" || ext === ".mjs") return;
711
+ if (ext in extensions) return;
712
+ extensions[ext] = NOOP;
713
+ added.push(ext);
714
+ });
715
+ const parent = {
716
+ id: filename,
717
+ filename,
718
+ paths: this.moduleImpl._nodeModulePaths(path.dirname(filename))
719
+ };
720
+ const conditions = conditionNames?.length ? expandConditions(conditionNames) : undefined;
721
+ resolved = this.resolveWithConditions(strippedId, parent, conditions);
722
+ const isFileSpecifier = strippedId.startsWith(".") || path.isAbsolute(strippedId);
723
+ if (isFileSpecifier && path.extname(strippedId) === "" && resolved.endsWith(".cjs") && fs.existsSync(`${resolved.slice(0, -4)}.js`)) {
724
+ resolved = `${resolved.slice(0, -4)}.js`;
725
+ }
726
+ }
727
+ } catch (error) {
728
+ throw new Error([
729
+ `[wyw-in-js] Native resolver failed during eval.`,
730
+ ``,
731
+ `importer: ${filename}`,
732
+ `source: ${id}`,
733
+ ``,
734
+ `error: ${error instanceof Error ? error.message : String(error)}`
735
+ ].join("\n"));
709
736
  }
710
737
  const { root } = this.services.options;
711
738
  const keyInfo = toImportKey({
@@ -716,8 +743,8 @@ export class Module {
716
743
  const override = getImportOverride(this.services.options.pluginOptions.importOverrides, keyInfo.key);
717
744
  const evalOptions = getEvalOptions(this.services);
718
745
  const basePolicy = evalOptions.require === "warn-and-run" ? "warn" : "error";
719
- let policy = override?.unknown ?? (override?.mock ? "allow" : basePolicy);
720
- if (evalOptions.require === "off" && policy !== "error") {
746
+ let policy = warnOnFallback ? override?.unknown ?? (override?.mock ? "allow" : basePolicy) : "allow";
747
+ if (warnOnFallback && evalOptions.require === "off" && policy !== "error") {
721
748
  policy = "error";
722
749
  }
723
750
  const shouldWarn = !this.ignored && policy === "warn";
@@ -737,7 +764,7 @@ export class Module {
737
764
  }
738
765
  if (policy === "error") {
739
766
  throw new Error([
740
- `[wyw-in-js] Unknown import reached during eval (Node resolver fallback)`,
767
+ `[wyw-in-js] Unknown import reached during eval (native resolver fallback)`,
741
768
  ``,
742
769
  `importer: ${filename}`,
743
770
  `source: ${id}`,
@@ -755,7 +782,7 @@ export class Module {
755
782
  if (shouldWarn && !warnedUnknownImports.has(keyInfo.key)) {
756
783
  warnedUnknownImports.add(keyInfo.key);
757
784
  const warningMessage = [
758
- `[wyw-in-js] Unknown import reached during eval (Node resolver fallback)`,
785
+ `[wyw-in-js] Unknown import reached during eval (native resolver fallback)`,
759
786
  ``,
760
787
  `importer: ${filename}`,
761
788
  `source: ${id}`,
@@ -792,12 +819,12 @@ export class Module {
792
819
  requireWithFallback(id, importer, nonLiteral = false) {
793
820
  const evalOptions = getEvalOptions(this.services);
794
821
  if (nonLiteral || typeof id !== "string") {
795
- if (evalOptions.mode === "strict") {
822
+ if (evalOptions.errors === "strict") {
796
823
  throw new Error(`[wyw-in-js] Non-literal require() is not supported during eval.\n` + `importer: ${importer.name}\n` + `hint: make it a string literal or mock the import via importOverrides.`);
797
824
  }
798
825
  emitEvalWarning(this.services, {
799
826
  code: "require-error",
800
- message: "[wyw-in-js] Non-literal require() reached during eval (loose mode).",
827
+ message: "[wyw-in-js] Non-literal require() reached during eval (eval.errors: \"loose\").",
801
828
  importer: importer.name
802
829
  });
803
830
  return {};
package/esm/module.js.map CHANGED
@@ -1 +1 @@
1
- {"mappings":"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","names":["#entrypointRef"],"sources":["../src/module.ts"],"version":3,"sourcesContent":["/**\n * This is a custom implementation for the module system for evaluating code,\n * used for resolving values for dependencies interpolated in `css` or `styled`.\n *\n * This serves 2 purposes:\n * - Avoid leakage from evaluated code to module cache in current context\n * - Allow us to invalidate the module cache without affecting other stuff, necessary for rebuilds\n *\n * We also store prepared evaluator code in it.\n * We also store source maps for it to provide correct error stacktraces.\n *\n */\n\nimport fs from 'fs';\nimport NativeModule, { createRequire } from 'module';\nimport path from 'path';\nimport * as vm from 'vm';\nimport { pathToFileURL } from 'url';\n\nimport { invariant } from 'ts-invariant';\n\nimport { isFeatureEnabled } from '@wyw-in-js/shared';\nimport type {\n Debugger,\n EvalOptionsV2,\n EvalResolverKind,\n EvalWarning,\n ImportLoaderContext,\n ImportLoaders,\n} from '@wyw-in-js/shared';\n\nimport './utils/dispose-polyfill';\nimport type { TransformCacheCollection } from './cache';\nimport { Entrypoint } from './transform/Entrypoint';\nimport {\n getStack,\n isSuperSet,\n mergeOnly,\n} from './transform/Entrypoint.helpers';\nimport type { IEvaluatedEntrypoint } from './transform/EvaluatedEntrypoint';\nimport type { IEntrypointDependency } from './transform/Entrypoint.types';\nimport { isUnprocessedEntrypointError } from './transform/actions/UnprocessedEntrypointError';\nimport type { Services } from './transform/types';\nimport {\n applyImportOverrideToOnly,\n getImportOverride,\n resolveMockSpecifier,\n toImportKey,\n} from './utils/importOverrides';\nimport { parseRequest, stripQueryAndHash } from './utils/parseRequest';\nimport { resolveFilenameWithConditions } from './utils/resolveWithConditions';\nimport { createVmContext } from './vm/createVmContext';\n\ntype HiddenModuleMembers = {\n _extensions: Record<string, () => void>;\n _resolveFilename: (\n id: string,\n options: { filename: string; id: string; paths: string[] },\n isMain?: boolean,\n resolveOptions?: { conditions?: Set<string> }\n ) => string;\n _nodeModulePaths(filename: string): string[];\n};\n\nconst CJS_DEFAULT_CONDITIONS = ['require', 'node', 'default'] as const;\n\nconst expandConditions = (conditionNames: string[]): Set<string> => {\n const result = new Set<string>();\n\n conditionNames.forEach((name) => {\n if (name === '...') {\n CJS_DEFAULT_CONDITIONS.forEach((condition) => result.add(condition));\n return;\n }\n\n result.add(name);\n });\n\n return result;\n};\n\nconst isBarePackageSubpath = (id: string): boolean => {\n if (id.startsWith('.') || path.isAbsolute(id)) {\n return false;\n }\n\n if (id.startsWith('@')) {\n return id.split('/').length > 2;\n }\n\n return id.includes('/');\n};\n\nexport const DefaultModuleImplementation = NativeModule as typeof NativeModule &\n HiddenModuleMembers;\n\n// Supported node builtins based on the modules polyfilled by webpack\n// `true` means module is polyfilled, `false` means module is empty\nconst builtins = {\n assert: true,\n buffer: true,\n child_process: false,\n cluster: false,\n console: true,\n constants: true,\n crypto: true,\n dgram: false,\n dns: false,\n domain: true,\n events: true,\n fs: false,\n http: true,\n https: true,\n module: false,\n net: false,\n os: true,\n path: true,\n punycode: true,\n process: true,\n querystring: true,\n readline: false,\n repl: false,\n stream: true,\n string_decoder: true,\n sys: true,\n timers: true,\n tls: false,\n tty: true,\n url: true,\n util: true,\n vm: true,\n zlib: true,\n};\n\nconst VITE_VIRTUAL_PREFIX = '/@';\nconst REACT_REFRESH_VIRTUAL_ID = '/@react-refresh';\nconst reactRefreshRuntime = {\n createSignatureFunctionForTransform: () => () => {},\n};\nconst nodeRequire = createRequire(import.meta.url);\n\nconst NOOP = () => {};\nconst TROUBLESHOOTING_URL = 'https://wyw-in-js.dev/troubleshooting';\n\ntype ModuleData = {\n exports: Record<string | symbol, unknown>;\n module: { exports: Record<string | symbol, unknown> };\n require: ((id: string) => unknown) & {\n ensure: () => void;\n resolve: (id: string) => string;\n };\n filename: string;\n dirname: string;\n dynamicImport: (id: unknown) => Promise<unknown>;\n};\n\ntype ResolvedImport = {\n source: string;\n resolved: string;\n only: string[];\n external?: boolean;\n};\n\nconst defaultEvalOptions: Required<\n Pick<EvalOptionsV2, 'mode' | 'require' | 'resolver'>\n> = {\n mode: 'strict',\n require: 'warn-and-run',\n resolver: 'bundler',\n};\n\nconst browserOnlyEvalHintTriggers = [\n 'window is not defined',\n \"evaluating 'window\",\n 'document is not defined',\n \"evaluating 'document\",\n 'navigator is not defined',\n \"evaluating 'navigator\",\n 'self is not defined',\n \"evaluating 'self\",\n];\n\nconst getBrowserOnlyEvalHint = (error: unknown): string | null => {\n const message = error instanceof Error ? error.message : String(error);\n const looksLikeBrowserOnly = browserOnlyEvalHintTriggers.some((trigger) =>\n message.includes(trigger)\n );\n if (!looksLikeBrowserOnly) return null;\n\n return [\n '',\n '[wyw-in-js] Evaluation hint:',\n 'This usually means browser-only code ran during build-time evaluation.',\n 'Move browser-only initialization out of evaluated modules, or mock the import via `importOverrides`.',\n \"Example: importOverrides: { 'msw/browser': { mock: './src/__mocks__/msw-browser.js' } }\",\n `Docs: ${TROUBLESHOOTING_URL}`,\n ].join('\\n');\n};\n\nconst warnedUnknownImportsByServices = new WeakMap<Services, Set<string>>();\n\nconst getEvalOptions = (services: Services): EvalOptionsV2 => ({\n ...defaultEvalOptions,\n ...(services.options.pluginOptions.eval ?? {}),\n});\n\nfunction emitWarning(services: Services, message: string) {\n if (services.emitWarning) {\n services.emitWarning(message);\n return;\n }\n\n // eslint-disable-next-line no-console\n console.warn(message);\n}\n\nfunction emitEvalWarning(services: Services, warning: EvalWarning) {\n const { onWarn } = getEvalOptions(services);\n onWarn?.(warning);\n emitWarning(services, warning.message);\n}\n\nfunction getWarnedUnknownImports(services: Services): Set<string> {\n const cached = warnedUnknownImportsByServices.get(services);\n if (cached) {\n return cached;\n }\n\n const created = new Set<string>();\n warnedUnknownImportsByServices.set(services, created);\n return created;\n}\n\nfunction getUncached(cached: string | string[], test: string[]): string[] {\n const cachedSet = new Set(\n typeof cached === 'string' ? cached.split(',') : cached\n );\n\n if (cachedSet.has('*')) {\n return [];\n }\n\n return test.filter((t) => !cachedSet.has(t));\n}\n\nconst defaultImportLoaders: ImportLoaders = {\n raw: 'raw',\n url: 'url',\n};\n\nconst buildModulePreamble = (id: string): string => {\n const payload = JSON.stringify(id);\n return [\n `const __wyw_module = __wyw_getModule(${payload});`,\n `let exports = __wyw_module.exports;`,\n `const module = __wyw_module.module;`,\n `const require = __wyw_module.require;`,\n `const __filename = __wyw_module.filename;`,\n `const __dirname = __wyw_module.dirname;`,\n `const __wyw_dynamic_import = __wyw_module.dynamicImport;`,\n ``,\n ].join('\\n');\n};\n\nconst applyModuleNamespace = (\n entrypointExports: Record<string | symbol, unknown>,\n module: vm.Module,\n moduleData: ModuleData\n): Record<string | symbol, unknown> => {\n const { namespace } = module;\n const keys = Object.keys(namespace);\n\n if (keys.length === 0 && moduleData.module.exports !== moduleData.exports) {\n return moduleData.module.exports as Record<string | symbol, unknown>;\n }\n\n const nextExports = entrypointExports;\n keys.forEach((key) => {\n nextExports[key] = (namespace as Record<string, unknown>)[key];\n });\n\n return nextExports;\n};\n\nconst ensureVmModules = (): void => {\n if (!vm.SourceTextModule || !vm.SyntheticModule) {\n throw new EvalError(\n '[wyw-in-js] vm.SourceTextModule is not available in this runtime. ' +\n 'WyW v2 uses a separate eval runner process for ESM evaluation.'\n );\n }\n};\n\nconst getImporterDependency = (\n importer: Entrypoint | IEvaluatedEntrypoint,\n specifier: string\n): IEntrypointDependency | undefined => {\n if (importer instanceof Entrypoint) {\n return importer.getDependency(specifier);\n }\n\n return importer.dependencies.get(specifier);\n};\n\nexport class Module {\n public readonly callstack: string[] = [];\n\n public readonly debug: Debugger;\n\n public readonly dependencies: string[];\n\n public readonly extensions: string[];\n\n public readonly filename: string;\n\n public id: string;\n\n public readonly idx: string;\n\n public readonly ignored: boolean;\n\n public isEvaluated: boolean = false;\n\n public readonly parentIsIgnored: boolean;\n\n public require: {\n (id: string, nonLiteral?: boolean): unknown;\n ensure: () => void;\n resolve: (id: string) => string;\n } = Object.assign(\n (id: string, nonLiteral?: boolean) =>\n this.requireWithFallback(id, this.entrypoint, nonLiteral),\n {\n ensure: NOOP,\n resolve: (id: string) =>\n this.resolveRequire(id, this.entrypoint).resolved,\n }\n );\n\n public resolve = (id: string) =>\n this.resolveRequire(id, this.entrypoint).resolved;\n\n private cache: TransformCacheCollection;\n\n private context: vm.Context | null = null;\n\n private teardown: (() => void) | null = null;\n\n private moduleCache = new Map<string, vm.Module>();\n\n private moduleEntrypoints = new WeakMap<\n vm.Module,\n Entrypoint | IEvaluatedEntrypoint\n >();\n\n private moduleLinkPromises = new WeakMap<vm.Module, Promise<void>>();\n\n private moduleData = new Map<string, ModuleData>();\n\n #entrypointRef: WeakRef<Entrypoint> | Entrypoint;\n\n constructor(\n private services: Services,\n entrypoint: Entrypoint,\n parentModule?: Module,\n private moduleImpl: HiddenModuleMembers = DefaultModuleImplementation\n ) {\n this.cache = services.cache;\n this.#entrypointRef = isFeatureEnabled(\n services.options.pluginOptions.features,\n 'useWeakRefInEval',\n entrypoint.name\n )\n ? new WeakRef(entrypoint)\n : entrypoint;\n this.idx = entrypoint.idx;\n this.id = entrypoint.name;\n this.filename = entrypoint.name;\n this.dependencies = [];\n this.debug = entrypoint.log.extend('module');\n this.parentIsIgnored = parentModule?.ignored ?? false;\n this.ignored = entrypoint.ignored ?? this.parentIsIgnored;\n\n if (parentModule) {\n this.callstack = [entrypoint.name, ...parentModule.callstack];\n } else {\n this.callstack = [entrypoint.name];\n }\n\n this.extensions = services.options.pluginOptions.extensions;\n\n this.debug('init', entrypoint.name);\n }\n\n public get exports() {\n return this.entrypoint.exports;\n }\n\n public set exports(value) {\n this.entrypoint.exports = value;\n\n this.debug('the whole exports was overridden with %O', value);\n }\n\n protected get entrypoint(): Entrypoint {\n const entrypoint =\n this.#entrypointRef instanceof WeakRef\n ? this.#entrypointRef.deref()\n : this.#entrypointRef;\n invariant(entrypoint, `Module ${this.idx} is disposed`);\n return entrypoint;\n }\n\n async evaluate(): Promise<void> {\n const { entrypoint } = this;\n entrypoint.assertTransformed();\n\n const cached = this.cache.get('entrypoints', entrypoint.name)!;\n let evaluatedCreated = false;\n if (!entrypoint.supersededWith) {\n this.cache.add(\n 'entrypoints',\n entrypoint.name,\n entrypoint.createEvaluated()\n );\n evaluatedCreated = true;\n }\n\n const { transformedCode: source } = entrypoint;\n if (!source) {\n this.debug(`evaluate`, 'there is nothing to evaluate');\n return;\n }\n\n if (this.isEvaluated) {\n this.debug('evaluate', `is already evaluated`);\n return;\n }\n\n this.debug('evaluate');\n this.debug.extend('source')('%s', source);\n\n this.isEvaluated = true;\n\n const filename = stripQueryAndHash(this.filename);\n\n if (/\\.json$/.test(filename)) {\n // For JSON files, parse it to a JS object similar to Node\n this.exports = JSON.parse(source);\n return;\n }\n\n const { teardown } = await this.ensureContext(filename);\n try {\n const module = await this.getModuleForEntrypoint(entrypoint);\n await this.linkModule(module);\n await module.evaluate();\n const exports = applyModuleNamespace(\n entrypoint.exports as Record<string | symbol, unknown>,\n module,\n this.getModuleData(entrypoint.name)\n );\n if (exports !== entrypoint.exports) {\n entrypoint.exports = exports;\n }\n } catch (e) {\n this.isEvaluated = false;\n if (evaluatedCreated) {\n this.cache.add('entrypoints', entrypoint.name, cached);\n }\n\n if (isUnprocessedEntrypointError(e)) {\n // It will be handled by evalFile scenario\n throw e;\n }\n\n if (e instanceof EvalError) {\n this.debug('%O', e);\n\n throw e;\n }\n\n this.debug('%O\\n%O', e, this.callstack);\n const baseMessage = `${(e as Error).message} in${this.callstack.join(\n '\\n| '\n )}\\n`;\n const hint = getBrowserOnlyEvalHint(e);\n\n throw new EvalError(hint ? `${baseMessage}${hint}\\n` : baseMessage);\n } finally {\n teardown();\n }\n }\n\n getEntrypoint(\n filename: string,\n only: string[],\n log: Debugger\n ): Entrypoint | IEvaluatedEntrypoint | null {\n const strippedFilename = stripQueryAndHash(filename);\n const extension = path.extname(strippedFilename);\n if (extension !== '.json' && !this.extensions.includes(extension)) {\n return null;\n }\n\n let entrypoint = this.cache.get('entrypoints', filename);\n if (entrypoint && isSuperSet(entrypoint.evaluatedOnly ?? [], only)) {\n if (this.cache.checkFreshness(filename, strippedFilename)) {\n entrypoint = undefined;\n }\n\n if (entrypoint) {\n log('✅ file has been already evaluated');\n return entrypoint;\n }\n }\n\n if (entrypoint?.ignored) {\n log(\n '✅ file has been ignored during prepare stage. Original code will be used'\n );\n return entrypoint;\n }\n\n if (this.ignored) {\n log(\n '✅ one of the parent files has been ignored during prepare stage. Original code will be used'\n );\n\n const newEntrypoint = this.entrypoint.createChild(\n filename,\n ['*'],\n fs.readFileSync(strippedFilename, 'utf-8')\n );\n\n if (newEntrypoint === 'loop') {\n const stack = getStack(this.entrypoint);\n throw new Error(\n `Circular dependency detected: ${stack.join(' -> ')} -> ${filename}`\n );\n }\n\n return newEntrypoint;\n }\n\n let uncachedExports: string[] | null = null;\n let reprocessOnly: string[] = only;\n let cachedSource: string | undefined;\n\n // Requested file can be already prepared for evaluation on the stage 1\n if (only && entrypoint) {\n const evaluatedExports =\n entrypoint.evaluatedOnly?.length !== 0\n ? entrypoint.evaluatedOnly\n : entrypoint.only ?? [];\n uncachedExports = getUncached(evaluatedExports, only);\n if (uncachedExports.length === 0) {\n log('✅ ready for evaluation');\n return entrypoint;\n }\n\n if (entrypoint.evaluatedOnly?.length) {\n if (this.cache.checkFreshness(filename, strippedFilename)) {\n entrypoint = undefined;\n uncachedExports = null;\n } else {\n reprocessOnly = mergeOnly(evaluatedExports, only);\n cachedSource =\n entrypoint.loadedAndParsed?.code ?? entrypoint.initialCode;\n }\n }\n\n if (entrypoint) {\n log(\n '❌ file has been processed during prepare stage but %o is not evaluated yet (evaluated: %o)',\n uncachedExports,\n evaluatedExports\n );\n } else {\n log('❌ file has not been processed during prepare stage');\n }\n } else {\n log('❌ file has not been processed during prepare stage');\n }\n\n // If code wasn't extracted from cache, it indicates that we were unable\n // to process some of the imports on stage1. Let's try to reprocess.\n const code = cachedSource ?? fs.readFileSync(strippedFilename, 'utf-8');\n const newEntrypoint = Entrypoint.createRoot(\n this.services,\n filename,\n reprocessOnly,\n code\n );\n\n if (newEntrypoint.evaluated) {\n log('✅ file has been already evaluated');\n return newEntrypoint;\n }\n\n if (newEntrypoint.ignored) {\n log(\n '✅ file has been ignored during prepare stage. Original code will be used'\n );\n return newEntrypoint;\n }\n\n return newEntrypoint;\n }\n\n private async ensureContext(filename: string) {\n if (this.context && this.teardown) {\n return { context: this.context, teardown: this.teardown };\n }\n\n const evalOptions = getEvalOptions(this.services);\n const { context, teardown } = await createVmContext(\n filename,\n this.services.options.pluginOptions.features,\n {\n ...(evalOptions.globals ?? {}),\n __wyw_getModule: (id: string) => this.getModuleData(id),\n },\n this.services.options.pluginOptions.overrideContext\n );\n\n this.context = context;\n this.teardown = () => {\n teardown();\n this.context = null;\n this.teardown = null;\n };\n\n return { context: this.context, teardown: this.teardown };\n }\n\n private getModuleData(id: string): ModuleData {\n const data = this.moduleData.get(id);\n invariant(data, `Missing module data for ${id}`);\n return data;\n }\n\n private createModuleData(\n id: string,\n entrypoint?: Entrypoint | IEvaluatedEntrypoint\n ): ModuleData {\n const cached = this.moduleData.get(id);\n if (cached) return cached;\n\n const exporter = entrypoint ?? this.entrypoint;\n const exportsProxy =\n entrypoint && 'exports' in entrypoint\n ? entrypoint.exports\n : ({} as Record<string | symbol, unknown>);\n const moduleObj = { exports: exportsProxy };\n\n const requireFn = Object.assign(\n (request: string) => this.requireWithFallback(request, exporter),\n {\n ensure: NOOP,\n resolve: (request: string) =>\n this.resolveRequire(request, exporter).resolved,\n }\n );\n\n const filename = stripQueryAndHash(id);\n const data: ModuleData = {\n exports: exportsProxy,\n module: moduleObj,\n require: requireFn,\n filename,\n dirname: path.dirname(filename),\n dynamicImport: (request: unknown) =>\n this.dynamicImportFrom(exporter, request),\n };\n\n this.moduleData.set(id, data);\n return data;\n }\n\n private async createSourceTextModule(\n id: string,\n code: string,\n entrypoint?: Entrypoint | IEvaluatedEntrypoint\n ): Promise<vm.SourceTextModule> {\n ensureVmModules();\n const { context } = await this.ensureContext(stripQueryAndHash(id));\n this.createModuleData(id, entrypoint);\n\n const module = new vm.SourceTextModule(\n `${buildModulePreamble(id)}${code}`,\n {\n context,\n identifier: id,\n initializeImportMeta: (meta: ImportMeta, targetModule: vm.Module) => {\n const identifier =\n typeof targetModule.identifier === 'string'\n ? targetModule.identifier\n : id;\n const fileId = stripQueryAndHash(identifier);\n Object.assign(meta, {\n url: path.isAbsolute(fileId) ? pathToFileURL(fileId).href : fileId,\n });\n },\n importModuleDynamically: (\n specifier: string,\n referencingModule: vm.Module\n ) => this.importModuleDynamically(specifier, referencingModule),\n }\n );\n\n this.moduleCache.set(id, module);\n if (entrypoint) {\n this.moduleEntrypoints.set(module, entrypoint);\n }\n\n return module;\n }\n\n private async createSyntheticModule(\n id: string,\n exportsValue: Record<string, unknown>\n ): Promise<vm.SyntheticModule> {\n ensureVmModules();\n const { context } = await this.ensureContext(stripQueryAndHash(id));\n const exportNames = new Set(Object.keys(exportsValue));\n const hasDefault = Object.prototype.hasOwnProperty.call(\n exportsValue,\n 'default'\n );\n if (!exportNames.has('default')) {\n exportNames.add('default');\n }\n\n const module = new vm.SyntheticModule(\n [...exportNames],\n function init(this: vm.SyntheticModule) {\n exportNames.forEach((key) => {\n const value =\n key === 'default' && !hasDefault ? exportsValue : exportsValue[key];\n this.setExport(key, value);\n });\n },\n { context, identifier: id }\n );\n\n this.moduleCache.set(id, module);\n return module;\n }\n\n private async getVirtualModule(specifier: string): Promise<vm.Module | null> {\n if (specifier === REACT_REFRESH_VIRTUAL_ID) {\n return this.createSyntheticModule(specifier, {\n createSignatureFunctionForTransform:\n reactRefreshRuntime.createSignatureFunctionForTransform,\n });\n }\n\n if (specifier.startsWith(VITE_VIRTUAL_PREFIX)) {\n return this.createSyntheticModule(specifier, { default: {} });\n }\n\n if (specifier.startsWith('virtual:')) {\n return this.createSyntheticModule(specifier, { default: {} });\n }\n\n return null;\n }\n\n private async getModuleForEntrypoint(\n entrypoint: Entrypoint | IEvaluatedEntrypoint\n ): Promise<vm.Module> {\n const cached = this.moduleCache.get(entrypoint.name);\n if (cached) return cached;\n\n if (!(entrypoint instanceof Entrypoint)) {\n return this.createSyntheticModule(entrypoint.name, entrypoint.exports);\n }\n\n entrypoint.assertTransformed();\n const source = entrypoint.transformedCode ?? '';\n\n return this.createSourceTextModule(entrypoint.name, source, entrypoint);\n }\n\n private async linkModule(module: vm.Module): Promise<void> {\n const cached = this.moduleLinkPromises.get(module);\n if (cached) {\n await cached;\n return;\n }\n\n if (module.status !== 'unlinked') {\n return;\n }\n\n const linking = module.link((specifier, referencingModule) =>\n this.getModuleForSpecifier(specifier, referencingModule, 'import')\n );\n this.moduleLinkPromises.set(module, linking);\n await linking;\n }\n\n private async importModuleDynamically(\n specifier: string,\n referencingModule: vm.Module\n ): Promise<vm.Module> {\n const module = await this.getModuleForSpecifier(\n specifier,\n referencingModule,\n 'dynamic-import'\n );\n await this.linkModule(module);\n if (module.status === 'linked') {\n await module.evaluate();\n }\n return module;\n }\n\n private async dynamicImportFrom(\n importer: Entrypoint | IEvaluatedEntrypoint,\n id: unknown\n ): Promise<unknown> {\n const specifier = String(id);\n const module = await this.getModuleForSpecifierFromEntrypoint(\n specifier,\n importer,\n 'dynamic-import'\n );\n await this.linkModule(module);\n if (module.status === 'linked') {\n await module.evaluate();\n }\n return module.namespace;\n }\n\n private async getModuleForSpecifier(\n specifier: string,\n referencingModule: vm.Module,\n kind: EvalResolverKind\n ): Promise<vm.Module> {\n const importer =\n this.moduleEntrypoints.get(referencingModule) ?? this.entrypoint;\n return this.getModuleForSpecifierFromEntrypoint(specifier, importer, kind);\n }\n\n private async getModuleForSpecifierFromEntrypoint(\n specifier: string,\n importer: Entrypoint | IEvaluatedEntrypoint,\n kind: EvalResolverKind\n ): Promise<vm.Module> {\n const virtualModule = await this.getVirtualModule(specifier);\n if (virtualModule) {\n return virtualModule;\n }\n\n this.dependencies.push(specifier);\n\n const resolved = await this.resolveImport(specifier, importer, kind);\n const evalOptions = getEvalOptions(this.services);\n\n if (!resolved) {\n if (evalOptions.mode === 'loose') {\n return this.createSyntheticModule(specifier, { default: undefined });\n }\n\n throw new Error(\n [\n `[wyw-in-js] Unable to resolve \"${specifier}\" during evaluation.`,\n ``,\n `importer: ${importer.name}`,\n `hint: check eval.resolver/customResolver or add importOverrides for this specifier.`,\n `docs: ${TROUBLESHOOTING_URL}`,\n ].join('\\n')\n );\n }\n\n if (resolved.external) {\n return this.createSyntheticModule(resolved.resolved, {\n default: undefined,\n });\n }\n\n return this.getModuleForResolved(resolved, importer);\n }\n\n private async resolveImport(\n specifier: string,\n importer: Entrypoint | IEvaluatedEntrypoint,\n kind: EvalResolverKind\n ): Promise<ResolvedImport | null> {\n const evalOptions = getEvalOptions(this.services);\n\n if (evalOptions.customResolver) {\n const customResolved = await evalOptions.customResolver(\n specifier,\n importer.name,\n kind\n );\n if (customResolved) {\n return this.applyImportOverrides(\n {\n source: specifier,\n resolved: customResolved.id,\n only: ['*'],\n external: customResolved.external,\n },\n importer\n );\n }\n\n if (evalOptions.resolver === 'custom') {\n return null;\n }\n }\n\n if (evalOptions.resolver !== 'node') {\n const dependency = getImporterDependency(importer, specifier);\n if (dependency?.resolved) {\n return {\n source: specifier,\n resolved: dependency.resolved,\n only: dependency.only,\n };\n }\n }\n\n if (evalOptions.resolver === 'node' || evalOptions.require !== 'off') {\n return this.resolveWithNodeFallback(specifier, importer, kind);\n }\n\n return null;\n }\n\n private resolveRequire(\n specifier: string,\n importer: Entrypoint | IEvaluatedEntrypoint\n ): ResolvedImport {\n const dependency = getImporterDependency(importer, specifier);\n if (dependency?.resolved) {\n return this.applyImportOverrides(\n {\n source: specifier,\n resolved: dependency.resolved,\n only: dependency.only,\n },\n importer\n );\n }\n\n return this.resolveWithNodeFallback(specifier, importer, 'require');\n }\n\n private applyImportOverrides(\n resolved: ResolvedImport,\n importer: Entrypoint | IEvaluatedEntrypoint\n ): ResolvedImport {\n const { root } = this.services.options;\n const keyInfo = toImportKey({\n source: resolved.source,\n resolved: resolved.resolved,\n root,\n });\n const override = getImportOverride(\n this.services.options.pluginOptions.importOverrides,\n keyInfo.key\n );\n\n if (!override) {\n return resolved;\n }\n\n let nextResolved = resolved.resolved;\n if (override.mock) {\n nextResolved = resolveMockSpecifier({\n mock: override.mock,\n importer: importer.name,\n root,\n stack: getStack(importer),\n });\n }\n\n return {\n ...resolved,\n resolved: nextResolved,\n only: applyImportOverrideToOnly(resolved.only, override),\n };\n }\n\n private async getModuleForResolved(\n resolved: ResolvedImport,\n importer: Entrypoint | IEvaluatedEntrypoint\n ): Promise<vm.Module> {\n const cached = this.moduleCache.get(resolved.resolved);\n if (cached) return cached;\n\n const evalOptions = getEvalOptions(this.services);\n\n if (evalOptions.customLoader) {\n const loaded = await evalOptions.customLoader(resolved.resolved);\n if (loaded) {\n if (loaded.loader === 'json') {\n const jsonValue = JSON.parse(loaded.code);\n return this.createSyntheticModule(resolved.resolved, {\n default: jsonValue,\n });\n }\n\n if (loaded.loader === 'raw' || loaded.loader === 'text') {\n return this.createSyntheticModule(resolved.resolved, {\n default: loaded.code,\n });\n }\n\n return this.createSourceTextModule(\n resolved.resolved,\n loaded.code,\n importer\n );\n }\n }\n\n const loaded = this.loadByImportLoaders(\n resolved.source,\n resolved.resolved,\n importer.name\n );\n if (loaded.handled) {\n return this.createSyntheticModule(resolved.resolved, {\n default: loaded.value,\n });\n }\n\n const stripped = stripQueryAndHash(resolved.resolved);\n if (stripped.endsWith('.json')) {\n const jsonSource = fs.readFileSync(stripped, 'utf-8');\n return this.createSyntheticModule(resolved.resolved, {\n default: JSON.parse(jsonSource),\n });\n }\n\n const entrypoint = this.getEntrypoint(\n resolved.resolved,\n resolved.only,\n importer.log\n );\n\n if (!entrypoint) {\n return this.createSyntheticModule(resolved.resolved, {\n default: resolved.resolved,\n });\n }\n\n if ('evaluated' in entrypoint && entrypoint.evaluated) {\n return this.createSyntheticModule(entrypoint.name, entrypoint.exports);\n }\n\n return this.getModuleForEntrypoint(entrypoint);\n }\n\n private resolveWithConditions(\n id: string,\n parent: { id: string; filename: string; paths: string[] },\n conditions?: Set<string>\n ): string {\n const shouldRetryWithExtensions =\n conditions &&\n path.extname(id) === '' &&\n (id.startsWith('.') || path.isAbsolute(id) || isBarePackageSubpath(id));\n\n try {\n return resolveFilenameWithConditions(\n this.moduleImpl,\n id,\n parent,\n conditions\n );\n } catch (error) {\n if (\n shouldRetryWithExtensions &&\n error instanceof Error &&\n (error as NodeJS.ErrnoException).code === 'MODULE_NOT_FOUND'\n ) {\n for (const ext of this.extensions) {\n try {\n return resolveFilenameWithConditions(\n this.moduleImpl,\n `${id}${ext}`,\n parent,\n conditions\n );\n } catch {\n // Try the next supported extension.\n }\n }\n }\n\n throw error;\n }\n }\n\n resolveWithNodeFallback = (\n id: string,\n importer: Entrypoint | IEvaluatedEntrypoint,\n kind: EvalResolverKind\n ): ResolvedImport => {\n if (!this.ignored) {\n this.debug(\n '❌ import has not been resolved during prepare stage. Fallback to Node.js resolver'\n );\n }\n\n const extensions = this.moduleImpl._extensions;\n const added: string[] = [];\n\n try {\n // Check for supported extensions\n this.extensions.forEach((ext) => {\n if (ext === '.cjs' || ext === '.mjs') {\n return;\n }\n if (ext in extensions) {\n return;\n }\n\n // When an extension is not supported, add it\n // And keep track of it to clean it up after resolving\n // Use noop for the transform function since we handle it\n extensions[ext] = NOOP;\n added.push(ext);\n });\n\n const filename = importer.name;\n const strippedId = stripQueryAndHash(id);\n const parent = {\n id: filename,\n filename,\n paths: this.moduleImpl._nodeModulePaths(path.dirname(filename)),\n };\n const { conditionNames } = this.services.options.pluginOptions;\n const conditions = conditionNames?.length\n ? expandConditions(conditionNames)\n : undefined;\n\n let resolved = this.resolveWithConditions(strippedId, parent, conditions);\n\n const isFileSpecifier =\n strippedId.startsWith('.') || path.isAbsolute(strippedId);\n\n if (\n isFileSpecifier &&\n path.extname(strippedId) === '' &&\n resolved.endsWith('.cjs') &&\n fs.existsSync(`${resolved.slice(0, -4)}.js`)\n ) {\n // When both `.cjs` and `.js` exist for an extensionless specifier, the\n // resolver may pick `.cjs` depending on the environment/extensions.\n // Prefer `.js` to keep resolved paths stable (e.g. importOverrides keys).\n resolved = `${resolved.slice(0, -4)}.js`;\n }\n\n const { root } = this.services.options;\n const keyInfo = toImportKey({\n source: id,\n resolved,\n root,\n });\n\n const override = getImportOverride(\n this.services.options.pluginOptions.importOverrides,\n keyInfo.key\n );\n\n const evalOptions = getEvalOptions(this.services);\n const basePolicy: 'warn' | 'error' =\n evalOptions.require === 'warn-and-run' ? 'warn' : 'error';\n let policy = override?.unknown ?? (override?.mock ? 'allow' : basePolicy);\n if (evalOptions.require === 'off' && policy !== 'error') {\n policy = 'error';\n }\n const shouldWarn = !this.ignored && policy === 'warn';\n\n let finalResolved = resolved;\n if (override?.mock) {\n try {\n finalResolved = resolveMockSpecifier({\n mock: override.mock,\n importer: filename,\n root,\n stack: getStack(importer),\n });\n } catch (e) {\n const errorMessage = String((e as Error)?.message ?? e);\n throw new Error(\n `[wyw-in-js] Failed to resolve import mock for \"${keyInfo.key}\" (${id} from ${filename}): ${errorMessage}`\n );\n }\n }\n\n if (policy === 'error') {\n throw new Error(\n [\n `[wyw-in-js] Unknown import reached during eval (Node resolver fallback)`,\n ``,\n `importer: ${filename}`,\n `source: ${id}`,\n `resolved: ${resolved}`,\n override?.mock\n ? `mock: ${override.mock} -> ${finalResolved}`\n : ``,\n ``,\n `callstack:`,\n ...getStack(importer).map((item) => ` ${item}`),\n ``,\n `config key: ${keyInfo.key}`,\n `docs: ${TROUBLESHOOTING_URL}`,\n ]\n .filter(Boolean)\n .join('\\n')\n );\n }\n\n const warnedUnknownImports = getWarnedUnknownImports(this.services);\n\n if (shouldWarn && !warnedUnknownImports.has(keyInfo.key)) {\n warnedUnknownImports.add(keyInfo.key);\n const warningMessage = [\n `[wyw-in-js] Unknown import reached during eval (Node resolver fallback)`,\n ``,\n `importer: ${filename}`,\n `source: ${id}`,\n `resolved: ${resolved}`,\n override?.mock\n ? `mock: ${override.mock} -> ${finalResolved}`\n : ``,\n ``,\n `callstack:`,\n ...getStack(importer).map((item) => ` ${item}`),\n ``,\n `config key: ${keyInfo.key}`,\n `hint: add { importOverrides: { ${JSON.stringify(\n keyInfo.key\n )}: { unknown: 'allow' } } } to silence warnings, or use { mock } / { noShake: true } overrides.`,\n `docs: ${TROUBLESHOOTING_URL}`,\n ]\n .filter(Boolean)\n .join('\\n');\n\n emitEvalWarning(this.services, {\n code: kind === 'require' ? 'require-fallback' : 'resolve-fallback',\n message: warningMessage,\n importer: filename,\n specifier: id,\n resolved: resolved ?? null,\n callstack: getStack(importer),\n hint: `Use importOverrides or eval.require settings to avoid fallback.`,\n });\n }\n\n return {\n source: id,\n only: applyImportOverrideToOnly(['*'], override),\n resolved: finalResolved,\n };\n } finally {\n // Cleanup the extensions we added to restore previous behaviour\n added.forEach((ext) => delete extensions[ext]);\n }\n };\n\n private requireWithFallback(\n id: unknown,\n importer: Entrypoint | IEvaluatedEntrypoint,\n nonLiteral = false\n ): unknown {\n const evalOptions = getEvalOptions(this.services);\n if (nonLiteral || typeof id !== 'string') {\n if (evalOptions.mode === 'strict') {\n throw new Error(\n `[wyw-in-js] Non-literal require() is not supported during eval.\\n` +\n `importer: ${importer.name}\\n` +\n `hint: make it a string literal or mock the import via importOverrides.`\n );\n }\n\n emitEvalWarning(this.services, {\n code: 'require-error',\n message:\n '[wyw-in-js] Non-literal require() reached during eval (loose mode).',\n importer: importer.name,\n });\n return {};\n }\n\n const specifier = id;\n if (id === REACT_REFRESH_VIRTUAL_ID) {\n this.dependencies.push(id);\n this.debug('require', `vite virtual '${id}'`);\n return reactRefreshRuntime;\n }\n\n if (id.startsWith(VITE_VIRTUAL_PREFIX)) {\n this.dependencies.push(id);\n this.debug('require', `vite virtual '${id}'`);\n return {};\n }\n\n const normalizedId = specifier.startsWith('node:')\n ? specifier.slice(5)\n : specifier;\n if (\n NativeModule.builtinModules?.includes(normalizedId) ||\n NativeModule.builtinModules?.includes(`node:${normalizedId}`)\n ) {\n if (normalizedId in builtins) {\n if (builtins[normalizedId as keyof typeof builtins]) {\n this.debug('require', `builtin '${normalizedId}'`);\n return nodeRequire(normalizedId);\n }\n\n return null;\n }\n\n throw new Error(\n `Unable to import \"${normalizedId}\". Importing Node builtins is not supported in the sandbox.`\n );\n }\n\n const dependency = this.resolveRequire(specifier, importer);\n\n const loaded = this.loadByImportLoaders(\n specifier,\n dependency.resolved,\n importer.name\n );\n if (loaded.handled) {\n this.dependencies.push(id);\n this.debug('require', `${id} -> ${dependency.resolved} (loader)`);\n return loaded.value;\n }\n\n const stripped = stripQueryAndHash(dependency.resolved);\n const extension = path.extname(stripped);\n if (\n extension &&\n extension !== '.json' &&\n !this.extensions.includes(extension)\n ) {\n this.dependencies.push(id);\n this.debug('require', `${id} -> ${dependency.resolved} (asset)`);\n return stripped;\n }\n\n if (this.services.cache.consumeInvalidation(dependency.resolved)) {\n delete nodeRequire.cache[dependency.resolved];\n }\n\n this.dependencies.push(id);\n this.debug('require', `${id} -> ${dependency.resolved}`);\n\n return nodeRequire(dependency.resolved);\n }\n\n protected createChild(entrypoint: Entrypoint): Module {\n return new Module(this.services, entrypoint, this, this.moduleImpl);\n }\n\n private loadByImportLoaders(\n request: string,\n resolved: string,\n importer: string\n ): { handled: boolean; value: unknown } {\n const { pluginOptions } = this.services.options;\n const importLoaders =\n pluginOptions.importLoaders === undefined\n ? defaultImportLoaders\n : { ...defaultImportLoaders, ...pluginOptions.importLoaders };\n\n const { query, hash } = parseRequest(request);\n if (!query) return { handled: false, value: undefined };\n\n const params = new URLSearchParams(query);\n const matchedKey = Array.from(params.keys()).find(\n (key) => importLoaders[key] !== undefined && importLoaders[key] !== false\n );\n\n if (!matchedKey) return { handled: false, value: undefined };\n\n const loader = importLoaders[matchedKey];\n\n const filename = stripQueryAndHash(resolved);\n const importerFilename = stripQueryAndHash(importer);\n const importerDir = path.dirname(importerFilename);\n\n const toUrl = () => {\n const relative = path\n .relative(importerDir, filename)\n .replace(/\\\\/g, path.posix.sep);\n\n if (relative.startsWith('.') || path.isAbsolute(relative)) {\n return relative;\n }\n\n return `./${relative}`;\n };\n\n const readFile = () => fs.readFileSync(filename, 'utf-8');\n\n const context: ImportLoaderContext = {\n importer: importerFilename,\n request,\n resolved,\n filename,\n query,\n hash,\n emitWarning: (message) => emitWarning(this.services, message),\n readFile,\n toUrl,\n };\n\n if (loader === 'raw') {\n return { handled: true, value: context.readFile() };\n }\n\n if (loader === 'url') {\n return { handled: true, value: context.toUrl() };\n }\n\n if (typeof loader === 'function') {\n return { handled: true, value: loader(context) };\n }\n\n return { handled: false, value: undefined };\n }\n}\n"],"file":"module.js"}
1
+ {"mappings":"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","names":["#entrypointRef"],"sources":["../src/module.ts"],"version":3,"sourcesContent":["/**\n * This is a custom implementation for the module system for evaluating code,\n * used for resolving values for dependencies interpolated in `css` or `styled`.\n *\n * This serves 2 purposes:\n * - Avoid leakage from evaluated code to module cache in current context\n * - Allow us to invalidate the module cache without affecting other stuff, necessary for rebuilds\n *\n * We also store prepared evaluator code in it.\n * We also store source maps for it to provide correct error stacktraces.\n *\n */\n\nimport fs from 'fs';\nimport NativeModule, { createRequire } from 'module';\nimport path from 'path';\nimport * as vm from 'vm';\nimport { pathToFileURL } from 'url';\n\nimport { invariant } from 'ts-invariant';\n\nimport { isFeatureEnabled } from '@wyw-in-js/shared';\nimport type {\n Debugger,\n EvalOptionsV2,\n EvalResolverKind,\n EvalWarning,\n ImportLoaderContext,\n ImportLoaders,\n} from '@wyw-in-js/shared';\n\nimport './utils/dispose-polyfill';\nimport type { TransformCacheCollection } from './cache';\nimport { Entrypoint } from './transform/Entrypoint';\nimport {\n getStack,\n isSuperSet,\n mergeOnly,\n} from './transform/Entrypoint.helpers';\nimport type { IEvaluatedEntrypoint } from './transform/EvaluatedEntrypoint';\nimport type { IEntrypointDependency } from './transform/Entrypoint.types';\nimport { isUnprocessedEntrypointError } from './transform/actions/UnprocessedEntrypointError';\nimport type { Services } from './transform/types';\nimport {\n applyImportOverrideToOnly,\n getImportOverride,\n resolveMockSpecifier,\n toImportKey,\n} from './utils/importOverrides';\nimport { resolveWithNativeResolver } from './utils/nativeResolver';\nimport { parseRequest, stripQueryAndHash } from './utils/parseRequest';\nimport { resolveFilenameWithConditions } from './utils/resolveWithConditions';\nimport { createVmContext } from './vm/createVmContext';\n\ntype HiddenModuleMembers = {\n _extensions: Record<string, () => void>;\n _resolveFilename: (\n id: string,\n options: { filename: string; id: string; paths: string[] },\n isMain?: boolean,\n resolveOptions?: { conditions?: Set<string> }\n ) => string;\n _nodeModulePaths(filename: string): string[];\n};\n\nconst CJS_DEFAULT_CONDITIONS = ['require', 'node', 'default'] as const;\n\nconst expandConditions = (conditionNames: string[]): Set<string> => {\n const result = new Set<string>();\n\n conditionNames.forEach((name) => {\n if (name === '...') {\n CJS_DEFAULT_CONDITIONS.forEach((condition) => result.add(condition));\n return;\n }\n\n result.add(name);\n });\n\n return result;\n};\n\nconst isBarePackageSubpath = (id: string): boolean => {\n if (id.startsWith('.') || path.isAbsolute(id)) {\n return false;\n }\n\n if (id.startsWith('@')) {\n return id.split('/').length > 2;\n }\n\n return id.includes('/');\n};\n\nexport const DefaultModuleImplementation = NativeModule as typeof NativeModule &\n HiddenModuleMembers;\n\n// Supported node builtins based on the modules polyfilled by webpack\n// `true` means module is polyfilled, `false` means module is empty\nconst builtins = {\n assert: true,\n buffer: true,\n child_process: false,\n cluster: false,\n console: true,\n constants: true,\n crypto: true,\n dgram: false,\n dns: false,\n domain: true,\n events: true,\n fs: false,\n http: true,\n https: true,\n module: false,\n net: false,\n os: true,\n path: true,\n punycode: true,\n process: true,\n querystring: true,\n readline: false,\n repl: false,\n stream: true,\n string_decoder: true,\n sys: true,\n timers: true,\n tls: false,\n tty: true,\n url: true,\n util: true,\n vm: true,\n zlib: true,\n};\n\nconst VITE_VIRTUAL_PREFIX = '/@';\nconst REACT_REFRESH_VIRTUAL_ID = '/@react-refresh';\nconst reactRefreshRuntime = {\n createSignatureFunctionForTransform: () => () => {},\n};\nconst nodeRequire = createRequire(import.meta.url);\n\nconst NOOP = () => {};\nconst TROUBLESHOOTING_URL = 'https://wyw-in-js.dev/troubleshooting';\n\ntype ModuleData = {\n exports: Record<string | symbol, unknown>;\n module: { exports: Record<string | symbol, unknown> };\n require: ((id: string) => unknown) & {\n ensure: () => void;\n resolve: (id: string) => string;\n };\n filename: string;\n dirname: string;\n dynamicImport: (id: unknown) => Promise<unknown>;\n};\n\ntype ResolvedImport = {\n source: string;\n resolved: string;\n only: string[];\n external?: boolean;\n};\n\ntype NativeFallbackOptions = {\n warnOnFallback: boolean;\n};\n\nconst defaultEvalOptions: Required<\n Pick<EvalOptionsV2, 'errors' | 'require' | 'resolver'>\n> = {\n errors: 'strict',\n require: 'warn-and-run',\n resolver: 'bundler',\n};\n\nconst browserOnlyEvalHintTriggers = [\n 'window is not defined',\n \"evaluating 'window\",\n 'document is not defined',\n \"evaluating 'document\",\n 'navigator is not defined',\n \"evaluating 'navigator\",\n 'self is not defined',\n \"evaluating 'self\",\n];\n\nconst getBrowserOnlyEvalHint = (error: unknown): string | null => {\n const message = error instanceof Error ? error.message : String(error);\n const looksLikeBrowserOnly = browserOnlyEvalHintTriggers.some((trigger) =>\n message.includes(trigger)\n );\n if (!looksLikeBrowserOnly) return null;\n\n return [\n '',\n '[wyw-in-js] Evaluation hint:',\n 'This usually means browser-only code ran during build-time evaluation.',\n 'Move browser-only initialization out of evaluated modules, or mock the import via `importOverrides`.',\n \"Example: importOverrides: { 'msw/browser': { mock: './src/__mocks__/msw-browser.js' } }\",\n `Docs: ${TROUBLESHOOTING_URL}`,\n ].join('\\n');\n};\n\nconst warnedUnknownImportsByServices = new WeakMap<Services, Set<string>>();\n\nconst getEvalOptions = (services: Services): EvalOptionsV2 => ({\n ...defaultEvalOptions,\n ...(services.options.pluginOptions.eval ?? {}),\n});\n\nfunction emitWarning(services: Services, message: string) {\n if (services.emitWarning) {\n services.emitWarning(message);\n return;\n }\n\n // eslint-disable-next-line no-console\n console.warn(message);\n}\n\nfunction emitEvalWarning(services: Services, warning: EvalWarning) {\n const { onWarn } = getEvalOptions(services);\n onWarn?.(warning);\n emitWarning(services, warning.message);\n}\n\nfunction getWarnedUnknownImports(services: Services): Set<string> {\n const cached = warnedUnknownImportsByServices.get(services);\n if (cached) {\n return cached;\n }\n\n const created = new Set<string>();\n warnedUnknownImportsByServices.set(services, created);\n return created;\n}\n\nfunction getUncached(cached: string | string[], test: string[]): string[] {\n const cachedSet = new Set(\n typeof cached === 'string' ? cached.split(',') : cached\n );\n\n if (cachedSet.has('*')) {\n return [];\n }\n\n return test.filter((t) => !cachedSet.has(t));\n}\n\nconst defaultImportLoaders: ImportLoaders = {\n raw: 'raw',\n url: 'url',\n};\n\nconst buildModulePreamble = (id: string): string => {\n const payload = JSON.stringify(id);\n return [\n `const __wyw_module = __wyw_getModule(${payload});`,\n `let exports = __wyw_module.exports;`,\n `const module = __wyw_module.module;`,\n `const require = __wyw_module.require;`,\n `const __filename = __wyw_module.filename;`,\n `const __dirname = __wyw_module.dirname;`,\n `const __wyw_dynamic_import = __wyw_module.dynamicImport;`,\n ``,\n ].join('\\n');\n};\n\nconst applyModuleNamespace = (\n entrypointExports: Record<string | symbol, unknown>,\n module: vm.Module,\n moduleData: ModuleData\n): Record<string | symbol, unknown> => {\n const { namespace } = module;\n const keys = Object.keys(namespace);\n\n if (keys.length === 0 && moduleData.module.exports !== moduleData.exports) {\n return moduleData.module.exports as Record<string | symbol, unknown>;\n }\n\n const nextExports = entrypointExports;\n keys.forEach((key) => {\n nextExports[key] = (namespace as Record<string, unknown>)[key];\n });\n\n return nextExports;\n};\n\nconst ensureVmModules = (): void => {\n if (!vm.SourceTextModule || !vm.SyntheticModule) {\n throw new EvalError(\n '[wyw-in-js] vm.SourceTextModule is not available in this runtime. ' +\n 'WyW v2 uses a separate eval runner process for ESM evaluation.'\n );\n }\n};\n\nconst getImporterDependency = (\n importer: Entrypoint | IEvaluatedEntrypoint,\n specifier: string\n): IEntrypointDependency | undefined => {\n if (importer instanceof Entrypoint) {\n return importer.getDependency(specifier);\n }\n\n return importer.dependencies.get(specifier);\n};\n\nexport class Module {\n public readonly callstack: string[] = [];\n\n public readonly debug: Debugger;\n\n public readonly dependencies: string[];\n\n public readonly extensions: string[];\n\n public readonly filename: string;\n\n public id: string;\n\n public readonly idx: string;\n\n public readonly ignored: boolean;\n\n public isEvaluated: boolean = false;\n\n public readonly parentIsIgnored: boolean;\n\n public require: {\n (id: string, nonLiteral?: boolean): unknown;\n ensure: () => void;\n resolve: (id: string) => string;\n } = Object.assign(\n (id: string, nonLiteral?: boolean) =>\n this.requireWithFallback(id, this.entrypoint, nonLiteral),\n {\n ensure: NOOP,\n resolve: (id: string) =>\n this.resolveRequire(id, this.entrypoint).resolved,\n }\n );\n\n public resolve = (id: string) =>\n this.resolveRequire(id, this.entrypoint).resolved;\n\n private cache: TransformCacheCollection;\n\n private context: vm.Context | null = null;\n\n private teardown: (() => void) | null = null;\n\n private moduleCache = new Map<string, vm.Module>();\n\n private moduleEntrypoints = new WeakMap<\n vm.Module,\n Entrypoint | IEvaluatedEntrypoint\n >();\n\n private moduleLinkPromises = new WeakMap<vm.Module, Promise<void>>();\n\n private moduleData = new Map<string, ModuleData>();\n\n #entrypointRef: WeakRef<Entrypoint> | Entrypoint;\n\n constructor(\n private services: Services,\n entrypoint: Entrypoint,\n parentModule?: Module,\n private moduleImpl: HiddenModuleMembers = DefaultModuleImplementation\n ) {\n this.cache = services.cache;\n this.#entrypointRef = isFeatureEnabled(\n services.options.pluginOptions.features,\n 'useWeakRefInEval',\n entrypoint.name\n )\n ? new WeakRef(entrypoint)\n : entrypoint;\n this.idx = entrypoint.idx;\n this.id = entrypoint.name;\n this.filename = entrypoint.name;\n this.dependencies = [];\n this.debug = entrypoint.log.extend('module');\n this.parentIsIgnored = parentModule?.ignored ?? false;\n this.ignored = entrypoint.ignored ?? this.parentIsIgnored;\n\n if (parentModule) {\n this.callstack = [entrypoint.name, ...parentModule.callstack];\n } else {\n this.callstack = [entrypoint.name];\n }\n\n this.extensions = services.options.pluginOptions.extensions;\n\n this.debug('init', entrypoint.name);\n }\n\n public get exports() {\n return this.entrypoint.exports;\n }\n\n public set exports(value) {\n this.entrypoint.exports = value;\n\n this.debug('the whole exports was overridden with %O', value);\n }\n\n protected get entrypoint(): Entrypoint {\n const entrypoint =\n this.#entrypointRef instanceof WeakRef\n ? this.#entrypointRef.deref()\n : this.#entrypointRef;\n invariant(entrypoint, `Module ${this.idx} is disposed`);\n return entrypoint;\n }\n\n async evaluate(): Promise<void> {\n const { entrypoint } = this;\n entrypoint.assertTransformed();\n\n const cached = this.cache.get('entrypoints', entrypoint.name)!;\n let evaluatedCreated = false;\n if (!entrypoint.supersededWith) {\n this.cache.add(\n 'entrypoints',\n entrypoint.name,\n entrypoint.createEvaluated()\n );\n evaluatedCreated = true;\n }\n\n const { transformedCode: source } = entrypoint;\n if (!source) {\n this.debug(`evaluate`, 'there is nothing to evaluate');\n return;\n }\n\n if (this.isEvaluated) {\n this.debug('evaluate', `is already evaluated`);\n return;\n }\n\n this.debug('evaluate');\n this.debug.extend('source')('%s', source);\n\n this.isEvaluated = true;\n\n const filename = stripQueryAndHash(this.filename);\n\n if (/\\.json$/.test(filename)) {\n // For JSON files, parse it to a JS object similar to Node\n this.exports = JSON.parse(source);\n return;\n }\n\n const { teardown } = await this.ensureContext(filename);\n try {\n const module = await this.getModuleForEntrypoint(entrypoint);\n await this.linkModule(module);\n await module.evaluate();\n const exports = applyModuleNamespace(\n entrypoint.exports as Record<string | symbol, unknown>,\n module,\n this.getModuleData(entrypoint.name)\n );\n if (exports !== entrypoint.exports) {\n entrypoint.exports = exports;\n }\n } catch (e) {\n this.isEvaluated = false;\n if (evaluatedCreated) {\n this.cache.add('entrypoints', entrypoint.name, cached);\n }\n\n if (isUnprocessedEntrypointError(e)) {\n // It will be handled by evalFile scenario\n throw e;\n }\n\n if (e instanceof EvalError) {\n this.debug('%O', e);\n\n throw e;\n }\n\n this.debug('%O\\n%O', e, this.callstack);\n const baseMessage = `${(e as Error).message} in${this.callstack.join(\n '\\n| '\n )}\\n`;\n const hint = getBrowserOnlyEvalHint(e);\n\n throw new EvalError(hint ? `${baseMessage}${hint}\\n` : baseMessage);\n } finally {\n teardown();\n }\n }\n\n getEntrypoint(\n filename: string,\n only: string[],\n log: Debugger\n ): Entrypoint | IEvaluatedEntrypoint | null {\n const strippedFilename = stripQueryAndHash(filename);\n const extension = path.extname(strippedFilename);\n if (extension !== '.json' && !this.extensions.includes(extension)) {\n return null;\n }\n\n let entrypoint = this.cache.get('entrypoints', filename);\n if (entrypoint && isSuperSet(entrypoint.evaluatedOnly ?? [], only)) {\n if (this.cache.checkFreshness(filename, strippedFilename)) {\n entrypoint = undefined;\n }\n\n if (entrypoint) {\n log('✅ file has been already evaluated');\n return entrypoint;\n }\n }\n\n if (entrypoint?.ignored) {\n log(\n '✅ file has been ignored during prepare stage. Original code will be used'\n );\n return entrypoint;\n }\n\n if (this.ignored) {\n log(\n '✅ one of the parent files has been ignored during prepare stage. Original code will be used'\n );\n\n const newEntrypoint = this.entrypoint.createChild(\n filename,\n ['*'],\n fs.readFileSync(strippedFilename, 'utf-8')\n );\n\n if (newEntrypoint === 'loop') {\n const stack = getStack(this.entrypoint);\n throw new Error(\n `Circular dependency detected: ${stack.join(' -> ')} -> ${filename}`\n );\n }\n\n return newEntrypoint;\n }\n\n let uncachedExports: string[] | null = null;\n let reprocessOnly: string[] = only;\n let cachedSource: string | undefined;\n\n // Requested file can be already prepared for evaluation on the stage 1\n if (only && entrypoint) {\n const evaluatedExports =\n entrypoint.evaluatedOnly?.length !== 0\n ? entrypoint.evaluatedOnly\n : entrypoint.only ?? [];\n uncachedExports = getUncached(evaluatedExports, only);\n if (uncachedExports.length === 0) {\n log('✅ ready for evaluation');\n return entrypoint;\n }\n\n if (entrypoint.evaluatedOnly?.length) {\n if (this.cache.checkFreshness(filename, strippedFilename)) {\n entrypoint = undefined;\n uncachedExports = null;\n } else {\n reprocessOnly = mergeOnly(evaluatedExports, only);\n cachedSource =\n entrypoint.loadedAndParsed?.code ?? entrypoint.initialCode;\n }\n }\n\n if (entrypoint) {\n log(\n '❌ file has been processed during prepare stage but %o is not evaluated yet (evaluated: %o)',\n uncachedExports,\n evaluatedExports\n );\n } else {\n log('❌ file has not been processed during prepare stage');\n }\n } else {\n log('❌ file has not been processed during prepare stage');\n }\n\n // If code wasn't extracted from cache, it indicates that we were unable\n // to process some of the imports on stage1. Let's try to reprocess.\n const code = cachedSource ?? fs.readFileSync(strippedFilename, 'utf-8');\n const newEntrypoint = Entrypoint.createRoot(\n this.services,\n filename,\n reprocessOnly,\n code\n );\n\n if (newEntrypoint.evaluated) {\n log('✅ file has been already evaluated');\n return newEntrypoint;\n }\n\n if (newEntrypoint.ignored) {\n log(\n '✅ file has been ignored during prepare stage. Original code will be used'\n );\n return newEntrypoint;\n }\n\n return newEntrypoint;\n }\n\n private async ensureContext(filename: string) {\n if (this.context && this.teardown) {\n return { context: this.context, teardown: this.teardown };\n }\n\n const evalOptions = getEvalOptions(this.services);\n const { context, teardown } = await createVmContext(\n filename,\n this.services.options.pluginOptions.features,\n {\n ...(evalOptions.globals ?? {}),\n __wyw_getModule: (id: string) => this.getModuleData(id),\n },\n this.services.options.pluginOptions.overrideContext\n );\n\n this.context = context;\n this.teardown = () => {\n teardown();\n this.context = null;\n this.teardown = null;\n };\n\n return { context: this.context, teardown: this.teardown };\n }\n\n private getModuleData(id: string): ModuleData {\n const data = this.moduleData.get(id);\n invariant(data, `Missing module data for ${id}`);\n return data;\n }\n\n private createModuleData(\n id: string,\n entrypoint?: Entrypoint | IEvaluatedEntrypoint\n ): ModuleData {\n const cached = this.moduleData.get(id);\n if (cached) return cached;\n\n const exporter = entrypoint ?? this.entrypoint;\n const exportsProxy =\n entrypoint && 'exports' in entrypoint\n ? entrypoint.exports\n : ({} as Record<string | symbol, unknown>);\n const moduleObj = { exports: exportsProxy };\n\n const requireFn = Object.assign(\n (request: string) => this.requireWithFallback(request, exporter),\n {\n ensure: NOOP,\n resolve: (request: string) =>\n this.resolveRequire(request, exporter).resolved,\n }\n );\n\n const filename = stripQueryAndHash(id);\n const data: ModuleData = {\n exports: exportsProxy,\n module: moduleObj,\n require: requireFn,\n filename,\n dirname: path.dirname(filename),\n dynamicImport: (request: unknown) =>\n this.dynamicImportFrom(exporter, request),\n };\n\n this.moduleData.set(id, data);\n return data;\n }\n\n private async createSourceTextModule(\n id: string,\n code: string,\n entrypoint?: Entrypoint | IEvaluatedEntrypoint\n ): Promise<vm.SourceTextModule> {\n ensureVmModules();\n const { context } = await this.ensureContext(stripQueryAndHash(id));\n this.createModuleData(id, entrypoint);\n\n const module = new vm.SourceTextModule(\n `${buildModulePreamble(id)}${code}`,\n {\n context,\n identifier: id,\n initializeImportMeta: (meta: ImportMeta, targetModule: vm.Module) => {\n const identifier =\n typeof targetModule.identifier === 'string'\n ? targetModule.identifier\n : id;\n const fileId = stripQueryAndHash(identifier);\n Object.assign(meta, {\n url: path.isAbsolute(fileId) ? pathToFileURL(fileId).href : fileId,\n });\n },\n importModuleDynamically: (\n specifier: string,\n referencingModule: vm.Module\n ) => this.importModuleDynamically(specifier, referencingModule),\n }\n );\n\n this.moduleCache.set(id, module);\n if (entrypoint) {\n this.moduleEntrypoints.set(module, entrypoint);\n }\n\n return module;\n }\n\n private async createSyntheticModule(\n id: string,\n exportsValue: Record<string, unknown>\n ): Promise<vm.SyntheticModule> {\n ensureVmModules();\n const { context } = await this.ensureContext(stripQueryAndHash(id));\n const exportNames = new Set(Object.keys(exportsValue));\n const hasDefault = Object.prototype.hasOwnProperty.call(\n exportsValue,\n 'default'\n );\n if (!exportNames.has('default')) {\n exportNames.add('default');\n }\n\n const module = new vm.SyntheticModule(\n [...exportNames],\n function init(this: vm.SyntheticModule) {\n exportNames.forEach((key) => {\n const value =\n key === 'default' && !hasDefault ? exportsValue : exportsValue[key];\n this.setExport(key, value);\n });\n },\n { context, identifier: id }\n );\n\n this.moduleCache.set(id, module);\n return module;\n }\n\n private async getVirtualModule(specifier: string): Promise<vm.Module | null> {\n if (specifier === REACT_REFRESH_VIRTUAL_ID) {\n return this.createSyntheticModule(specifier, {\n createSignatureFunctionForTransform:\n reactRefreshRuntime.createSignatureFunctionForTransform,\n });\n }\n\n if (specifier.startsWith(VITE_VIRTUAL_PREFIX)) {\n return this.createSyntheticModule(specifier, { default: {} });\n }\n\n if (specifier.startsWith('virtual:')) {\n return this.createSyntheticModule(specifier, { default: {} });\n }\n\n return null;\n }\n\n private async getModuleForEntrypoint(\n entrypoint: Entrypoint | IEvaluatedEntrypoint\n ): Promise<vm.Module> {\n const cached = this.moduleCache.get(entrypoint.name);\n if (cached) return cached;\n\n if (!(entrypoint instanceof Entrypoint)) {\n return this.createSyntheticModule(entrypoint.name, entrypoint.exports);\n }\n\n entrypoint.assertTransformed();\n const source = entrypoint.transformedCode ?? '';\n\n return this.createSourceTextModule(entrypoint.name, source, entrypoint);\n }\n\n private async linkModule(module: vm.Module): Promise<void> {\n const cached = this.moduleLinkPromises.get(module);\n if (cached) {\n await cached;\n return;\n }\n\n if (module.status !== 'unlinked') {\n return;\n }\n\n const linking = module.link((specifier, referencingModule) =>\n this.getModuleForSpecifier(specifier, referencingModule, 'import')\n );\n this.moduleLinkPromises.set(module, linking);\n await linking;\n }\n\n private async importModuleDynamically(\n specifier: string,\n referencingModule: vm.Module\n ): Promise<vm.Module> {\n const module = await this.getModuleForSpecifier(\n specifier,\n referencingModule,\n 'dynamic-import'\n );\n await this.linkModule(module);\n if (module.status === 'linked') {\n await module.evaluate();\n }\n return module;\n }\n\n private async dynamicImportFrom(\n importer: Entrypoint | IEvaluatedEntrypoint,\n id: unknown\n ): Promise<unknown> {\n const specifier = String(id);\n const module = await this.getModuleForSpecifierFromEntrypoint(\n specifier,\n importer,\n 'dynamic-import'\n );\n await this.linkModule(module);\n if (module.status === 'linked') {\n await module.evaluate();\n }\n return module.namespace;\n }\n\n private async getModuleForSpecifier(\n specifier: string,\n referencingModule: vm.Module,\n kind: EvalResolverKind\n ): Promise<vm.Module> {\n const importer =\n this.moduleEntrypoints.get(referencingModule) ?? this.entrypoint;\n return this.getModuleForSpecifierFromEntrypoint(specifier, importer, kind);\n }\n\n private async getModuleForSpecifierFromEntrypoint(\n specifier: string,\n importer: Entrypoint | IEvaluatedEntrypoint,\n kind: EvalResolverKind\n ): Promise<vm.Module> {\n const virtualModule = await this.getVirtualModule(specifier);\n if (virtualModule) {\n return virtualModule;\n }\n\n this.dependencies.push(specifier);\n\n const resolved = await this.resolveImport(specifier, importer, kind);\n const evalOptions = getEvalOptions(this.services);\n\n if (!resolved) {\n if (evalOptions.errors === 'loose') {\n return this.createSyntheticModule(specifier, { default: undefined });\n }\n\n throw new Error(\n [\n `[wyw-in-js] Unable to resolve \"${specifier}\" during evaluation.`,\n ``,\n `importer: ${importer.name}`,\n `hint: check eval.resolver/customResolver or add importOverrides for this specifier.`,\n `docs: ${TROUBLESHOOTING_URL}`,\n ].join('\\n')\n );\n }\n\n if (resolved.external) {\n return this.createSyntheticModule(resolved.resolved, {\n default: undefined,\n });\n }\n\n return this.getModuleForResolved(resolved, importer);\n }\n\n private async resolveImport(\n specifier: string,\n importer: Entrypoint | IEvaluatedEntrypoint,\n kind: EvalResolverKind\n ): Promise<ResolvedImport | null> {\n const evalOptions = getEvalOptions(this.services);\n\n if (evalOptions.customResolver) {\n const customResolved = await evalOptions.customResolver(\n specifier,\n importer.name,\n kind\n );\n if (customResolved) {\n return this.applyImportOverrides(\n {\n source: specifier,\n resolved: customResolved.id,\n only: ['*'],\n external: customResolved.external,\n },\n importer\n );\n }\n\n if (evalOptions.resolver === 'custom') {\n return null;\n }\n }\n\n const resolveBundlerDependency = (): ResolvedImport | null => {\n const dependency = getImporterDependency(importer, specifier);\n if (dependency?.resolved) {\n return {\n source: specifier,\n resolved: dependency.resolved,\n only: dependency.only,\n };\n }\n\n return null;\n };\n\n if (evalOptions.resolver === 'hybrid') {\n try {\n return this.resolveWithNativeFallback(specifier, importer, kind, {\n warnOnFallback: false,\n });\n } catch {\n // Hybrid mode lets the bundler resolver handle aliases, virtual IDs,\n // and other specifiers that the native resolver cannot resolve.\n }\n }\n\n if (evalOptions.resolver === 'native') {\n return this.resolveWithNativeFallback(specifier, importer, kind, {\n warnOnFallback: false,\n });\n }\n\n if (\n evalOptions.resolver === 'bundler' ||\n evalOptions.resolver === 'hybrid'\n ) {\n const dependency = resolveBundlerDependency();\n if (dependency) return dependency;\n }\n\n if (evalOptions.resolver === 'bundler' && evalOptions.require !== 'off') {\n return this.resolveWithNativeFallback(specifier, importer, kind, {\n warnOnFallback: true,\n });\n }\n\n return null;\n }\n\n private resolveRequire(\n specifier: string,\n importer: Entrypoint | IEvaluatedEntrypoint\n ): ResolvedImport {\n const dependency = getImporterDependency(importer, specifier);\n if (dependency?.resolved) {\n return this.applyImportOverrides(\n {\n source: specifier,\n resolved: dependency.resolved,\n only: dependency.only,\n },\n importer\n );\n }\n\n return this.resolveWithNativeFallback(specifier, importer, 'require', {\n warnOnFallback: true,\n });\n }\n\n private applyImportOverrides(\n resolved: ResolvedImport,\n importer: Entrypoint | IEvaluatedEntrypoint\n ): ResolvedImport {\n const { root } = this.services.options;\n const keyInfo = toImportKey({\n source: resolved.source,\n resolved: resolved.resolved,\n root,\n });\n const override = getImportOverride(\n this.services.options.pluginOptions.importOverrides,\n keyInfo.key\n );\n\n if (!override) {\n return resolved;\n }\n\n let nextResolved = resolved.resolved;\n if (override.mock) {\n nextResolved = resolveMockSpecifier({\n mock: override.mock,\n importer: importer.name,\n root,\n stack: getStack(importer),\n });\n }\n\n return {\n ...resolved,\n resolved: nextResolved,\n only: applyImportOverrideToOnly(resolved.only, override),\n };\n }\n\n private async getModuleForResolved(\n resolved: ResolvedImport,\n importer: Entrypoint | IEvaluatedEntrypoint\n ): Promise<vm.Module> {\n const cached = this.moduleCache.get(resolved.resolved);\n if (cached) return cached;\n\n const evalOptions = getEvalOptions(this.services);\n\n if (evalOptions.customLoader) {\n const loaded = await evalOptions.customLoader(resolved.resolved);\n if (loaded) {\n if (loaded.loader === 'json') {\n const jsonValue = JSON.parse(loaded.code);\n return this.createSyntheticModule(resolved.resolved, {\n default: jsonValue,\n });\n }\n\n if (loaded.loader === 'raw' || loaded.loader === 'text') {\n return this.createSyntheticModule(resolved.resolved, {\n default: loaded.code,\n });\n }\n\n return this.createSourceTextModule(\n resolved.resolved,\n loaded.code,\n importer\n );\n }\n }\n\n const loaded = this.loadByImportLoaders(\n resolved.source,\n resolved.resolved,\n importer.name\n );\n if (loaded.handled) {\n return this.createSyntheticModule(resolved.resolved, {\n default: loaded.value,\n });\n }\n\n const stripped = stripQueryAndHash(resolved.resolved);\n if (stripped.endsWith('.json')) {\n const jsonSource = fs.readFileSync(stripped, 'utf-8');\n return this.createSyntheticModule(resolved.resolved, {\n default: JSON.parse(jsonSource),\n });\n }\n\n const entrypoint = this.getEntrypoint(\n resolved.resolved,\n resolved.only,\n importer.log\n );\n\n if (!entrypoint) {\n return this.createSyntheticModule(resolved.resolved, {\n default: resolved.resolved,\n });\n }\n\n if ('evaluated' in entrypoint && entrypoint.evaluated) {\n return this.createSyntheticModule(entrypoint.name, entrypoint.exports);\n }\n\n return this.getModuleForEntrypoint(entrypoint);\n }\n\n private resolveWithConditions(\n id: string,\n parent: { id: string; filename: string; paths: string[] },\n conditions?: Set<string>\n ): string {\n const shouldRetryWithExtensions =\n conditions &&\n path.extname(id) === '' &&\n (id.startsWith('.') || path.isAbsolute(id) || isBarePackageSubpath(id));\n\n try {\n return resolveFilenameWithConditions(\n this.moduleImpl,\n id,\n parent,\n conditions\n );\n } catch (error) {\n if (\n shouldRetryWithExtensions &&\n error instanceof Error &&\n (error as NodeJS.ErrnoException).code === 'MODULE_NOT_FOUND'\n ) {\n for (const ext of this.extensions) {\n try {\n return resolveFilenameWithConditions(\n this.moduleImpl,\n `${id}${ext}`,\n parent,\n conditions\n );\n } catch {\n // Try the next supported extension.\n }\n }\n }\n\n throw error;\n }\n }\n\n resolveWithNativeFallback = (\n id: string,\n importer: Entrypoint | IEvaluatedEntrypoint,\n kind: EvalResolverKind,\n { warnOnFallback }: NativeFallbackOptions = { warnOnFallback: true }\n ): ResolvedImport => {\n if (!this.ignored && warnOnFallback) {\n this.debug(\n '❌ import has not been resolved during prepare stage. Fallback to native resolver'\n );\n }\n\n const extensions = this.moduleImpl._extensions;\n const added: string[] = [];\n\n try {\n const filename = importer.name;\n const strippedId = stripQueryAndHash(id);\n const { conditionNames, oxcOptions } =\n this.services.options.pluginOptions;\n\n let resolved: string;\n try {\n if (this.moduleImpl === DefaultModuleImplementation) {\n resolved = resolveWithNativeResolver({\n conditionNames,\n extensions: this.extensions,\n importer: filename,\n kind,\n oxcOptions,\n specifier: id,\n });\n } else {\n // Preserve the test-only custom module implementation hook.\n this.extensions.forEach((ext) => {\n if (ext === '.cjs' || ext === '.mjs') return;\n if (ext in extensions) return;\n\n extensions[ext] = NOOP;\n added.push(ext);\n });\n\n const parent = {\n id: filename,\n filename,\n paths: this.moduleImpl._nodeModulePaths(path.dirname(filename)),\n };\n const conditions = conditionNames?.length\n ? expandConditions(conditionNames)\n : undefined;\n\n resolved = this.resolveWithConditions(strippedId, parent, conditions);\n\n const isFileSpecifier =\n strippedId.startsWith('.') || path.isAbsolute(strippedId);\n\n if (\n isFileSpecifier &&\n path.extname(strippedId) === '' &&\n resolved.endsWith('.cjs') &&\n fs.existsSync(`${resolved.slice(0, -4)}.js`)\n ) {\n resolved = `${resolved.slice(0, -4)}.js`;\n }\n }\n } catch (error) {\n throw new Error(\n [\n `[wyw-in-js] Native resolver failed during eval.`,\n ``,\n `importer: ${filename}`,\n `source: ${id}`,\n ``,\n `error: ${error instanceof Error ? error.message : String(error)}`,\n ].join('\\n')\n );\n }\n\n const { root } = this.services.options;\n const keyInfo = toImportKey({\n source: id,\n resolved,\n root,\n });\n\n const override = getImportOverride(\n this.services.options.pluginOptions.importOverrides,\n keyInfo.key\n );\n\n const evalOptions = getEvalOptions(this.services);\n const basePolicy: 'warn' | 'error' =\n evalOptions.require === 'warn-and-run' ? 'warn' : 'error';\n let policy: 'allow' | 'error' | 'warn' = warnOnFallback\n ? override?.unknown ?? (override?.mock ? 'allow' : basePolicy)\n : 'allow';\n if (\n warnOnFallback &&\n evalOptions.require === 'off' &&\n policy !== 'error'\n ) {\n policy = 'error';\n }\n const shouldWarn = !this.ignored && policy === 'warn';\n\n let finalResolved = resolved;\n if (override?.mock) {\n try {\n finalResolved = resolveMockSpecifier({\n mock: override.mock,\n importer: filename,\n root,\n stack: getStack(importer),\n });\n } catch (e) {\n const errorMessage = String((e as Error)?.message ?? e);\n throw new Error(\n `[wyw-in-js] Failed to resolve import mock for \"${keyInfo.key}\" (${id} from ${filename}): ${errorMessage}`\n );\n }\n }\n\n if (policy === 'error') {\n throw new Error(\n [\n `[wyw-in-js] Unknown import reached during eval (native resolver fallback)`,\n ``,\n `importer: ${filename}`,\n `source: ${id}`,\n `resolved: ${resolved}`,\n override?.mock\n ? `mock: ${override.mock} -> ${finalResolved}`\n : ``,\n ``,\n `callstack:`,\n ...getStack(importer).map((item) => ` ${item}`),\n ``,\n `config key: ${keyInfo.key}`,\n `docs: ${TROUBLESHOOTING_URL}`,\n ]\n .filter(Boolean)\n .join('\\n')\n );\n }\n\n const warnedUnknownImports = getWarnedUnknownImports(this.services);\n\n if (shouldWarn && !warnedUnknownImports.has(keyInfo.key)) {\n warnedUnknownImports.add(keyInfo.key);\n const warningMessage = [\n `[wyw-in-js] Unknown import reached during eval (native resolver fallback)`,\n ``,\n `importer: ${filename}`,\n `source: ${id}`,\n `resolved: ${resolved}`,\n override?.mock\n ? `mock: ${override.mock} -> ${finalResolved}`\n : ``,\n ``,\n `callstack:`,\n ...getStack(importer).map((item) => ` ${item}`),\n ``,\n `config key: ${keyInfo.key}`,\n `hint: add { importOverrides: { ${JSON.stringify(\n keyInfo.key\n )}: { unknown: 'allow' } } } to silence warnings, or use { mock } / { noShake: true } overrides.`,\n `docs: ${TROUBLESHOOTING_URL}`,\n ]\n .filter(Boolean)\n .join('\\n');\n\n emitEvalWarning(this.services, {\n code: kind === 'require' ? 'require-fallback' : 'resolve-fallback',\n message: warningMessage,\n importer: filename,\n specifier: id,\n resolved: resolved ?? null,\n callstack: getStack(importer),\n hint: `Use importOverrides or eval.require settings to avoid fallback.`,\n });\n }\n\n return {\n source: id,\n only: applyImportOverrideToOnly(['*'], override),\n resolved: finalResolved,\n };\n } finally {\n // Cleanup the extensions we added to restore previous behaviour\n added.forEach((ext) => delete extensions[ext]);\n }\n };\n\n private requireWithFallback(\n id: unknown,\n importer: Entrypoint | IEvaluatedEntrypoint,\n nonLiteral = false\n ): unknown {\n const evalOptions = getEvalOptions(this.services);\n if (nonLiteral || typeof id !== 'string') {\n if (evalOptions.errors === 'strict') {\n throw new Error(\n `[wyw-in-js] Non-literal require() is not supported during eval.\\n` +\n `importer: ${importer.name}\\n` +\n `hint: make it a string literal or mock the import via importOverrides.`\n );\n }\n\n emitEvalWarning(this.services, {\n code: 'require-error',\n message:\n '[wyw-in-js] Non-literal require() reached during eval (eval.errors: \"loose\").',\n importer: importer.name,\n });\n return {};\n }\n\n const specifier = id;\n if (id === REACT_REFRESH_VIRTUAL_ID) {\n this.dependencies.push(id);\n this.debug('require', `vite virtual '${id}'`);\n return reactRefreshRuntime;\n }\n\n if (id.startsWith(VITE_VIRTUAL_PREFIX)) {\n this.dependencies.push(id);\n this.debug('require', `vite virtual '${id}'`);\n return {};\n }\n\n const normalizedId = specifier.startsWith('node:')\n ? specifier.slice(5)\n : specifier;\n if (\n NativeModule.builtinModules?.includes(normalizedId) ||\n NativeModule.builtinModules?.includes(`node:${normalizedId}`)\n ) {\n if (normalizedId in builtins) {\n if (builtins[normalizedId as keyof typeof builtins]) {\n this.debug('require', `builtin '${normalizedId}'`);\n return nodeRequire(normalizedId);\n }\n\n return null;\n }\n\n throw new Error(\n `Unable to import \"${normalizedId}\". Importing Node builtins is not supported in the sandbox.`\n );\n }\n\n const dependency = this.resolveRequire(specifier, importer);\n\n const loaded = this.loadByImportLoaders(\n specifier,\n dependency.resolved,\n importer.name\n );\n if (loaded.handled) {\n this.dependencies.push(id);\n this.debug('require', `${id} -> ${dependency.resolved} (loader)`);\n return loaded.value;\n }\n\n const stripped = stripQueryAndHash(dependency.resolved);\n const extension = path.extname(stripped);\n if (\n extension &&\n extension !== '.json' &&\n !this.extensions.includes(extension)\n ) {\n this.dependencies.push(id);\n this.debug('require', `${id} -> ${dependency.resolved} (asset)`);\n return stripped;\n }\n\n if (this.services.cache.consumeInvalidation(dependency.resolved)) {\n delete nodeRequire.cache[dependency.resolved];\n }\n\n this.dependencies.push(id);\n this.debug('require', `${id} -> ${dependency.resolved}`);\n\n return nodeRequire(dependency.resolved);\n }\n\n protected createChild(entrypoint: Entrypoint): Module {\n return new Module(this.services, entrypoint, this, this.moduleImpl);\n }\n\n private loadByImportLoaders(\n request: string,\n resolved: string,\n importer: string\n ): { handled: boolean; value: unknown } {\n const { pluginOptions } = this.services.options;\n const importLoaders =\n pluginOptions.importLoaders === undefined\n ? defaultImportLoaders\n : { ...defaultImportLoaders, ...pluginOptions.importLoaders };\n\n const { query, hash } = parseRequest(request);\n if (!query) return { handled: false, value: undefined };\n\n const params = new URLSearchParams(query);\n const matchedKey = Array.from(params.keys()).find(\n (key) => importLoaders[key] !== undefined && importLoaders[key] !== false\n );\n\n if (!matchedKey) return { handled: false, value: undefined };\n\n const loader = importLoaders[matchedKey];\n\n const filename = stripQueryAndHash(resolved);\n const importerFilename = stripQueryAndHash(importer);\n const importerDir = path.dirname(importerFilename);\n\n const toUrl = () => {\n const relative = path\n .relative(importerDir, filename)\n .replace(/\\\\/g, path.posix.sep);\n\n if (relative.startsWith('.') || path.isAbsolute(relative)) {\n return relative;\n }\n\n return `./${relative}`;\n };\n\n const readFile = () => fs.readFileSync(filename, 'utf-8');\n\n const context: ImportLoaderContext = {\n importer: importerFilename,\n request,\n resolved,\n filename,\n query,\n hash,\n emitWarning: (message) => emitWarning(this.services, message),\n readFile,\n toUrl,\n };\n\n if (loader === 'raw') {\n return { handled: true, value: context.readFile() };\n }\n\n if (loader === 'url') {\n return { handled: true, value: context.toUrl() };\n }\n\n if (typeof loader === 'function') {\n return { handled: true, value: loader(context) };\n }\n\n return { handled: false, value: undefined };\n }\n}\n"],"file":"module.js"}
@@ -1 +1 @@
1
- {"mappings":"","names":[],"sources":["../../src/transform/Entrypoint.types.ts"],"version":3,"sourcesContent":["import type {\n Debugger,\n Evaluator,\n TransformEngineOptions,\n} from '@wyw-in-js/shared';\n\nimport type { Services } from './types';\nimport type { WYWTransformMetadata } from '../utils/TransformMetadata';\n\nexport type ParsedAst = unknown;\n\nexport interface IEntrypointCode {\n readonly ast: ParsedAst;\n code: string;\n evalConfig: TransformEngineOptions;\n evaluator: Evaluator;\n}\n\nexport interface IIgnoredEntrypoint {\n readonly ast?: ParsedAst;\n readonly code?: string;\n evaluator: 'ignored';\n reason: 'extension' | 'rule';\n}\n\nexport interface IEntrypointDependency {\n only: string[];\n resolved: string | null;\n source: string;\n}\n\nexport interface IPreevalResult {\n ast: ParsedAst | null;\n baseCode?: string;\n code: string;\n dependencyNames?: string[];\n evalCode?: string;\n metadata: WYWTransformMetadata | null;\n staticSideEffectImportLocals?: string[];\n staticDependencies?: string[];\n staticNullWYWMetaExtendsHelpers?: string[];\n staticValueCache?: Map<string, unknown>;\n staticValueCandidates?: Array<{\n imports: Array<{\n imported: 'default' | string;\n importLocal?: string;\n local: string;\n source: string;\n }>;\n name: string;\n source: string;\n }>;\n}\n\nexport type LoadAndParseFn = (\n services: Services,\n name: string,\n loadedCode: string | undefined,\n log: Debugger\n) => IEntrypointCode | IIgnoredEntrypoint;\n"],"file":"Entrypoint.types.js"}
1
+ {"mappings":"","names":[],"sources":["../../src/transform/Entrypoint.types.ts"],"version":3,"sourcesContent":["import type {\n Debugger,\n Evaluator,\n TransformEngineOptions,\n} from '@wyw-in-js/shared';\n\nimport type { Services } from './types';\nimport type { WYWTransformMetadata } from '../utils/TransformMetadata';\n\nexport type ParsedAst = unknown;\n\nexport interface IEntrypointCode {\n readonly ast: ParsedAst;\n code: string;\n evalConfig: TransformEngineOptions;\n evaluator: Evaluator;\n}\n\nexport interface IIgnoredEntrypoint {\n readonly ast?: ParsedAst;\n readonly code?: string;\n evaluator: 'ignored';\n reason: 'extension' | 'rule';\n}\n\nexport interface IEntrypointDependency {\n only: string[];\n resolved: string | null;\n source: string;\n}\n\nexport interface IPreevalResult {\n ast: ParsedAst | null;\n baseCode?: string;\n code: string;\n dependencyNames?: string[];\n evalCode?: string;\n metadata: WYWTransformMetadata | null;\n processorClassNames?: Record<string, string>;\n staticSideEffectImportLocals?: string[];\n staticDependencies?: string[];\n staticNullWYWMetaExtendsHelpers?: string[];\n staticValuesApplied?: boolean;\n staticValueCache?: Map<string, unknown>;\n runtimeOnlyStaticValueNames?: string[];\n staticValueCandidates?: Array<{\n imports: Array<{\n imported: 'default' | string;\n importLocal?: string;\n local: string;\n source: string;\n }>;\n name: string;\n source: string;\n }>;\n}\n\nexport type LoadAndParseFn = (\n services: Services,\n name: string,\n loadedCode: string | undefined,\n log: Debugger\n) => IEntrypointCode | IIgnoredEntrypoint;\n"],"file":"Entrypoint.types.js"}
@@ -1,4 +1,5 @@
1
1
  import { isAborted } from "../actions/AbortError.js";
2
+ function _usingCtx2(){var r=typeof SuppressedError==="function"?SuppressedError:function(r,e){var n=Error();return n.name="SuppressedError",n.error=r,n.suppressed=e,n},e={},n=[];function using(r,e){if(e!=null){if(Object(e)!==e)throw new TypeError("using declarations can only be used with objects, functions, null, or undefined.");if(r)var o=e[Symbol.asyncDispose||Symbol.for("Symbol.asyncDispose")];if(o===void 0&&(o=e[Symbol.dispose||Symbol.for("Symbol.dispose")],r))var t=o;if(typeof o!=="function")throw new TypeError("Object is not disposable.");t&&(o=function(){try{t.call(e)}catch(r){return Promise.reject(r)}}),n.push({v:e,d:o,a:r})}else r&&n.push({d:e,a:r});return e}return{e:e,u:using.bind(null,false),a:using.bind(null,true),d:function(){var o,t=this.e,s=0;function next(){for(;o=n.pop();)try{if(!o.a&&s===1)return s=0,n.push(o),Promise.resolve().then(next);if(o.d){var r=o.d.call(o.v);if(o.a)return s|=2,Promise.resolve(r).then(next,err)}else s|=1}catch(r){return err(r)}if(s===1)return t!==e?Promise.reject(t):Promise.resolve();if(t!==e)throw t}function err(n){return t=t!==e?new r(n,t):n,next()}return next()}}}
2
3
  /**
3
4
  * The first stage of processing an entrypoint.
4
5
  * This stage is responsible for:
@@ -18,17 +19,24 @@ export function* processEntrypoint() {
18
19
  }
19
20
  this.entrypoint.beginProcessing();
20
21
  try {
21
- using abortSignal = this.createAbortSignal();
22
- const result = yield* this.getNext("transform", this.entrypoint, undefined, abortSignal);
23
- this.entrypoint.assertNotSuperseded();
24
- this.entrypoint.setTransformResult(result);
25
- const supersededWith = this.entrypoint.applyDeferredSupersede();
26
- if (supersededWith) {
27
- log("processing finished, deferred only detected; schedule next attempt");
28
- yield* this.getNext("processEntrypoint", supersededWith, undefined, null);
29
- return;
22
+ try {
23
+ var _usingCtx = _usingCtx2();
24
+ const abortSignal = _usingCtx.u(this.createAbortSignal());
25
+ const result = yield* this.getNext("transform", this.entrypoint, undefined, abortSignal);
26
+ this.entrypoint.assertNotSuperseded();
27
+ this.entrypoint.setTransformResult(result);
28
+ const supersededWith = this.entrypoint.applyDeferredSupersede();
29
+ if (supersededWith) {
30
+ log("processing finished, deferred only detected; schedule next attempt");
31
+ yield* this.getNext("processEntrypoint", supersededWith, undefined, null);
32
+ return;
33
+ }
34
+ log("entrypoint processing finished");
35
+ } catch (_) {
36
+ _usingCtx.e = _;
37
+ } finally {
38
+ _usingCtx.d();
30
39
  }
31
- log("entrypoint processing finished");
32
40
  } catch (e) {
33
41
  if (isAborted(e) && this.entrypoint.supersededWith) {
34
42
  log("processing aborted, schedule the next attempt");
@@ -55,17 +63,24 @@ export async function* processEntrypointAsync() {
55
63
  }
56
64
  this.entrypoint.beginProcessing();
57
65
  try {
58
- using abortSignal = this.createAbortSignal();
59
- const result = yield* this.getNext("transform", this.entrypoint, undefined, abortSignal);
60
- this.entrypoint.assertNotSuperseded();
61
- this.entrypoint.setTransformResult(result);
62
- const supersededWith = this.entrypoint.applyDeferredSupersede();
63
- if (supersededWith) {
64
- log("processing finished, deferred only detected; schedule next attempt");
65
- yield* this.getNext("processEntrypoint", supersededWith, undefined, null);
66
- return;
66
+ try {
67
+ var _usingCtx3 = _usingCtx2();
68
+ const abortSignal = _usingCtx3.u(this.createAbortSignal());
69
+ const result = yield* this.getNext("transform", this.entrypoint, undefined, abortSignal);
70
+ this.entrypoint.assertNotSuperseded();
71
+ this.entrypoint.setTransformResult(result);
72
+ const supersededWith = this.entrypoint.applyDeferredSupersede();
73
+ if (supersededWith) {
74
+ log("processing finished, deferred only detected; schedule next attempt");
75
+ yield* this.getNext("processEntrypoint", supersededWith, undefined, null);
76
+ return;
77
+ }
78
+ log("entrypoint processing finished");
79
+ } catch (_) {
80
+ _usingCtx3.e = _;
81
+ } finally {
82
+ _usingCtx3.d();
67
83
  }
68
- log("entrypoint processing finished");
69
84
  } catch (e) {
70
85
  if (isAborted(e) && this.entrypoint.supersededWith) {
71
86
  log("processing aborted, schedule the next attempt");
@@ -1 +1 @@
1
- {"mappings":"AAAA,SAAS,iBAAiB;;;;;;;AAa1B,OAAO,UAAU,oBAEkC;CACjD,MAAM,EAAE,MAAM,QAAQ,KAAK;AAC3B,KAAI,+BAA+B,KAAK;AAExC,KAAI,KAAK,WAAW,aAAa;AAC/B,MAAI,uCAAuC;AAC3C;;AAGF,KAAI,KAAK,WAAW,cAAc;AAChC,MAAI,6CAA6C;AACjD;;AAGF,MAAK,WAAW,iBAAiB;AAEjC,KAAI;EACF,MAAM,cAAc,KAAK,mBAAmB;EAE5C,MAAM,SAAS,OAAO,KAAK,QACzB,aACA,KAAK,YACL,WACA,YACD;AAED,OAAK,WAAW,qBAAqB;AAErC,OAAK,WAAW,mBAAmB,OAAO;EAE1C,MAAM,iBAAiB,KAAK,WAAW,wBAAwB;AAC/D,MAAI,gBAAgB;AAClB,OAAI,qEAAqE;AACzE,UAAO,KAAK,QAAQ,qBAAqB,gBAAgB,WAAW,KAAK;AACzE;;AAGF,MAAI,iCAAiC;UAC9B,GAAG;AACV,MAAI,UAAU,EAAE,IAAI,KAAK,WAAW,gBAAgB;AAClD,OAAI,gDAAgD;AACpD,UAAO,KAAK,QACV,qBACA,KAAK,WAAW,gBAChB,WACA,KACD;AAED;;AAGF,MAAI,uBAAuB,EAAE;AAC7B,QAAM;WACE;AACR,OAAK,WAAW,eAAe;;;AAInC,OAAO,gBAAgB,yBAE6B;CAClD,MAAM,EAAE,MAAM,QAAQ,KAAK;AAC3B,KAAI,+BAA+B,KAAK;AAExC,KAAI,KAAK,WAAW,aAAa;AAC/B,MAAI,uCAAuC;AAC3C;;AAGF,KAAI,KAAK,WAAW,cAAc;AAChC,MAAI,gDAAgD;AACpD,QAAM,KAAK,WAAW,mBAAmB;AACzC;;AAGF,MAAK,WAAW,iBAAiB;AAEjC,KAAI;EACF,MAAM,cAAc,KAAK,mBAAmB;EAE5C,MAAM,SAAS,OAAO,KAAK,QACzB,aACA,KAAK,YACL,WACA,YACD;AAED,OAAK,WAAW,qBAAqB;AAErC,OAAK,WAAW,mBAAmB,OAAO;EAE1C,MAAM,iBAAiB,KAAK,WAAW,wBAAwB;AAC/D,MAAI,gBAAgB;AAClB,OAAI,qEAAqE;AACzE,UAAO,KAAK,QAAQ,qBAAqB,gBAAgB,WAAW,KAAK;AACzE;;AAGF,MAAI,iCAAiC;UAC9B,GAAG;AACV,MAAI,UAAU,EAAE,IAAI,KAAK,WAAW,gBAAgB;AAClD,OAAI,gDAAgD;AACpD,UAAO,KAAK,QACV,qBACA,KAAK,WAAW,gBAChB,WACA,KACD;AAED;;AAGF,MAAI,uBAAuB,EAAE;AAC7B,QAAM;WACE;AACR,OAAK,WAAW,eAAe","names":[],"sources":["../../../src/transform/generators/processEntrypoint.ts"],"version":3,"sourcesContent":["import { isAborted } from '../actions/AbortError';\nimport type {\n AsyncScenarioForAction,\n IProcessEntrypointAction,\n SyncScenarioForAction,\n} from '../types';\n\n/**\n * The first stage of processing an entrypoint.\n * This stage is responsible for:\n * - scheduling the transform action\n * - rescheduling itself if the entrypoint is superseded\n */\nexport function* processEntrypoint(\n this: IProcessEntrypointAction\n): SyncScenarioForAction<IProcessEntrypointAction> {\n const { only, log } = this.entrypoint;\n log('start processing (only: %o)', only);\n\n if (this.entrypoint.transformed) {\n log('already transformed, skip processing');\n return;\n }\n\n if (this.entrypoint.isProcessing) {\n log('already processing, skip duplicate request');\n return;\n }\n\n this.entrypoint.beginProcessing();\n\n try {\n using abortSignal = this.createAbortSignal();\n\n const result = yield* this.getNext(\n 'transform',\n this.entrypoint,\n undefined,\n abortSignal\n );\n\n this.entrypoint.assertNotSuperseded();\n\n this.entrypoint.setTransformResult(result);\n\n const supersededWith = this.entrypoint.applyDeferredSupersede();\n if (supersededWith) {\n log('processing finished, deferred only detected; schedule next attempt');\n yield* this.getNext('processEntrypoint', supersededWith, undefined, null);\n return;\n }\n\n log('entrypoint processing finished');\n } catch (e) {\n if (isAborted(e) && this.entrypoint.supersededWith) {\n log('processing aborted, schedule the next attempt');\n yield* this.getNext(\n 'processEntrypoint',\n this.entrypoint.supersededWith,\n undefined,\n null\n );\n\n return;\n }\n\n log(`Unhandled error: %O`, e);\n throw e;\n } finally {\n this.entrypoint.endProcessing();\n }\n}\n\nexport async function* processEntrypointAsync(\n this: IProcessEntrypointAction\n): AsyncScenarioForAction<IProcessEntrypointAction> {\n const { only, log } = this.entrypoint;\n log('start processing (only: %o)', only);\n\n if (this.entrypoint.transformed) {\n log('already transformed, skip processing');\n return;\n }\n\n if (this.entrypoint.isProcessing) {\n log('already processing, wait for existing request');\n await this.entrypoint.waitForProcessing();\n return;\n }\n\n this.entrypoint.beginProcessing();\n\n try {\n using abortSignal = this.createAbortSignal();\n\n const result = yield* this.getNext(\n 'transform',\n this.entrypoint,\n undefined,\n abortSignal\n );\n\n this.entrypoint.assertNotSuperseded();\n\n this.entrypoint.setTransformResult(result);\n\n const supersededWith = this.entrypoint.applyDeferredSupersede();\n if (supersededWith) {\n log('processing finished, deferred only detected; schedule next attempt');\n yield* this.getNext('processEntrypoint', supersededWith, undefined, null);\n return;\n }\n\n log('entrypoint processing finished');\n } catch (e) {\n if (isAborted(e) && this.entrypoint.supersededWith) {\n log('processing aborted, schedule the next attempt');\n yield* this.getNext(\n 'processEntrypoint',\n this.entrypoint.supersededWith,\n undefined,\n null\n );\n\n return;\n }\n\n log(`Unhandled error: %O`, e);\n throw e;\n } finally {\n this.entrypoint.endProcessing();\n }\n}\n"],"file":"processEntrypoint.js"}
1
+ {"mappings":"AAAA,SAAS,iBAAiB;;;;;;;;AAa1B,OAAO,UAAU,oBAEkC;CACjD,MAAM,EAAE,MAAM,QAAQ,KAAK;AAC3B,KAAI,+BAA+B,KAAK;AAExC,KAAI,KAAK,WAAW,aAAa;AAC/B,MAAI,uCAAuC;AAC3C;;AAGF,KAAI,KAAK,WAAW,cAAc;AAChC,MAAI,6CAA6C;AACjD;;AAGF,MAAK,WAAW,iBAAiB;AAEjC,KAAI;;;GACF,MAAM,0BAAc,KAAK,mBAAmB;GAE5C,MAAM,SAAS,OAAO,KAAK,QACzB,aACA,KAAK,YACL,WACA,YACD;AAED,QAAK,WAAW,qBAAqB;AAErC,QAAK,WAAW,mBAAmB,OAAO;GAE1C,MAAM,iBAAiB,KAAK,WAAW,wBAAwB;AAC/D,OAAI,gBAAgB;AAClB,QAAI,qEAAqE;AACzE,WAAO,KAAK,QAAQ,qBAAqB,gBAAgB,WAAW,KAAK;AACzE;;AAGF,OAAI,iCAAiC;;;;;;UAC9B,GAAG;AACV,MAAI,UAAU,EAAE,IAAI,KAAK,WAAW,gBAAgB;AAClD,OAAI,gDAAgD;AACpD,UAAO,KAAK,QACV,qBACA,KAAK,WAAW,gBAChB,WACA,KACD;AAED;;AAGF,MAAI,uBAAuB,EAAE;AAC7B,QAAM;WACE;AACR,OAAK,WAAW,eAAe;;;AAInC,OAAO,gBAAgB,yBAE6B;CAClD,MAAM,EAAE,MAAM,QAAQ,KAAK;AAC3B,KAAI,+BAA+B,KAAK;AAExC,KAAI,KAAK,WAAW,aAAa;AAC/B,MAAI,uCAAuC;AAC3C;;AAGF,KAAI,KAAK,WAAW,cAAc;AAChC,MAAI,gDAAgD;AACpD,QAAM,KAAK,WAAW,mBAAmB;AACzC;;AAGF,MAAK,WAAW,iBAAiB;AAEjC,KAAI;;;GACF,MAAM,2BAAc,KAAK,mBAAmB;GAE5C,MAAM,SAAS,OAAO,KAAK,QACzB,aACA,KAAK,YACL,WACA,YACD;AAED,QAAK,WAAW,qBAAqB;AAErC,QAAK,WAAW,mBAAmB,OAAO;GAE1C,MAAM,iBAAiB,KAAK,WAAW,wBAAwB;AAC/D,OAAI,gBAAgB;AAClB,QAAI,qEAAqE;AACzE,WAAO,KAAK,QAAQ,qBAAqB,gBAAgB,WAAW,KAAK;AACzE;;AAGF,OAAI,iCAAiC;;;;;;UAC9B,GAAG;AACV,MAAI,UAAU,EAAE,IAAI,KAAK,WAAW,gBAAgB;AAClD,OAAI,gDAAgD;AACpD,UAAO,KAAK,QACV,qBACA,KAAK,WAAW,gBAChB,WACA,KACD;AAED;;AAGF,MAAI,uBAAuB,EAAE;AAC7B,QAAM;WACE;AACR,OAAK,WAAW,eAAe","names":[],"sources":["../../../src/transform/generators/processEntrypoint.ts"],"version":3,"sourcesContent":["import { isAborted } from '../actions/AbortError';\nimport type {\n AsyncScenarioForAction,\n IProcessEntrypointAction,\n SyncScenarioForAction,\n} from '../types';\n\n/**\n * The first stage of processing an entrypoint.\n * This stage is responsible for:\n * - scheduling the transform action\n * - rescheduling itself if the entrypoint is superseded\n */\nexport function* processEntrypoint(\n this: IProcessEntrypointAction\n): SyncScenarioForAction<IProcessEntrypointAction> {\n const { only, log } = this.entrypoint;\n log('start processing (only: %o)', only);\n\n if (this.entrypoint.transformed) {\n log('already transformed, skip processing');\n return;\n }\n\n if (this.entrypoint.isProcessing) {\n log('already processing, skip duplicate request');\n return;\n }\n\n this.entrypoint.beginProcessing();\n\n try {\n using abortSignal = this.createAbortSignal();\n\n const result = yield* this.getNext(\n 'transform',\n this.entrypoint,\n undefined,\n abortSignal\n );\n\n this.entrypoint.assertNotSuperseded();\n\n this.entrypoint.setTransformResult(result);\n\n const supersededWith = this.entrypoint.applyDeferredSupersede();\n if (supersededWith) {\n log('processing finished, deferred only detected; schedule next attempt');\n yield* this.getNext('processEntrypoint', supersededWith, undefined, null);\n return;\n }\n\n log('entrypoint processing finished');\n } catch (e) {\n if (isAborted(e) && this.entrypoint.supersededWith) {\n log('processing aborted, schedule the next attempt');\n yield* this.getNext(\n 'processEntrypoint',\n this.entrypoint.supersededWith,\n undefined,\n null\n );\n\n return;\n }\n\n log(`Unhandled error: %O`, e);\n throw e;\n } finally {\n this.entrypoint.endProcessing();\n }\n}\n\nexport async function* processEntrypointAsync(\n this: IProcessEntrypointAction\n): AsyncScenarioForAction<IProcessEntrypointAction> {\n const { only, log } = this.entrypoint;\n log('start processing (only: %o)', only);\n\n if (this.entrypoint.transformed) {\n log('already transformed, skip processing');\n return;\n }\n\n if (this.entrypoint.isProcessing) {\n log('already processing, wait for existing request');\n await this.entrypoint.waitForProcessing();\n return;\n }\n\n this.entrypoint.beginProcessing();\n\n try {\n using abortSignal = this.createAbortSignal();\n\n const result = yield* this.getNext(\n 'transform',\n this.entrypoint,\n undefined,\n abortSignal\n );\n\n this.entrypoint.assertNotSuperseded();\n\n this.entrypoint.setTransformResult(result);\n\n const supersededWith = this.entrypoint.applyDeferredSupersede();\n if (supersededWith) {\n log('processing finished, deferred only detected; schedule next attempt');\n yield* this.getNext('processEntrypoint', supersededWith, undefined, null);\n return;\n }\n\n log('entrypoint processing finished');\n } catch (e) {\n if (isAborted(e) && this.entrypoint.supersededWith) {\n log('processing aborted, schedule the next attempt');\n yield* this.getNext(\n 'processEntrypoint',\n this.entrypoint.supersededWith,\n undefined,\n null\n );\n\n return;\n }\n\n log(`Unhandled error: %O`, e);\n throw e;\n } finally {\n this.entrypoint.endProcessing();\n }\n}\n"],"file":"processEntrypoint.js"}