@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
@@ -1,195 +1,6 @@
1
- /* eslint-disable no-restricted-syntax */
2
- import { createRequire } from "node:module";
3
- import { parseSync } from "oxc-parser";
4
- import { SourceMapGenerator } from "source-map";
5
1
  import { applyOxcProcessors } from "./applyOxcProcessors.js";
6
- const remapping = createRequire(import.meta.url)("@jridgewell/remapping");
7
- const countLines = (code) => code.split("\n").length;
8
- const parseOxc = (code, filename) => {
9
- const parsed = parseSync(filename, code, {
10
- astType: filename.endsWith(".ts") || filename.endsWith(".tsx") ? "ts" : "js",
11
- range: true,
12
- sourceType: "module"
13
- });
14
- const fatalError = parsed.errors.find((error) => error.severity === "Error");
15
- if (fatalError) {
16
- throw new Error(fatalError.message);
17
- }
18
- return parsed.program;
19
- };
20
- const applyReplacements = (code, replacements) => {
21
- let result = code;
22
- replacements.sort((a, b) => b.start - a.start).forEach((replacement) => {
23
- result = result.slice(0, replacement.start) + replacement.value + result.slice(replacement.end);
24
- });
25
- return result;
26
- };
27
- const shouldTerminateWithSemicolon = (node, parent, key) => {
28
- if (node.type === "VariableDeclaration" && parent) {
29
- if ((parent.type === "ForStatement" || parent.type === "ForInStatement" || parent.type === "ForOfStatement") && key && ["init", "left"].includes(key)) {
30
- return false;
31
- }
32
- if (parent.type === "ExportNamedDeclaration") {
33
- return false;
34
- }
35
- }
36
- if (node.type === "ImportDeclaration" || node.type === "ExpressionStatement" || node.type === "ReturnStatement" || node.type === "ThrowStatement" || node.type === "VariableDeclaration") {
37
- return true;
38
- }
39
- if (node.type === "ExportNamedDeclaration") {
40
- if (node.declaration) {
41
- return node.declaration.type === "VariableDeclaration";
42
- }
43
- return Array.isArray(node.specifiers) && node.specifiers.length > 0;
44
- }
45
- return false;
46
- };
47
- const getChildren = (node) => {
48
- const result = [];
49
- const record = node;
50
- Object.keys(record).forEach((key) => {
51
- if (key === "type" || key === "start" || key === "end" || key === "range") {
52
- return;
53
- }
54
- const value = record[key];
55
- if (value && typeof value === "object" && "type" in value) {
56
- result.push({
57
- key,
58
- node: value
59
- });
60
- return;
61
- }
62
- if (Array.isArray(value)) {
63
- value.forEach((item) => {
64
- if (item && typeof item === "object" && "type" in item) {
65
- result.push({
66
- key,
67
- node: item
68
- });
69
- }
70
- });
71
- }
72
- });
73
- return result;
74
- };
75
- const getLineIndent = (code, offset) => {
76
- const lineStart = code.lastIndexOf("\n", offset - 1) + 1;
77
- let idx = lineStart;
78
- while (idx < code.length && (code[idx] === " " || code[idx] === " ")) {
79
- idx += 1;
80
- }
81
- return code.slice(lineStart, idx).replace(/\t/g, " ");
82
- };
83
- const isPlainObjectProperty = (property) => property.type === "Property" && property.kind === "init" && property.method !== true;
84
- const isFormattableObjectExpression = (node) => node.type === "ObjectExpression" && node.properties.every((property) => property.type === "SpreadElement" || isPlainObjectProperty(property));
85
- const hasNestedObjectValue = (node) => node.type === "ObjectExpression" && node.properties.some((property) => isPlainObjectProperty(property) && property.value.type === "ObjectExpression");
86
- const printFormattedObjectExpression = (node, code, baseIndent) => {
87
- if (node.type !== "ObjectExpression" || node.properties.length === 0 || !isFormattableObjectExpression(node)) {
88
- return code.slice(node.start, node.end);
89
- }
90
- const lines = node.properties.map((property) => {
91
- if (property.type === "SpreadElement") {
92
- return `${baseIndent} ...${code.slice(property.argument.start, property.argument.end)}`;
93
- }
94
- const keySource = property.computed ? `[${code.slice(property.key.start, property.key.end)}]` : code.slice(property.key.start, property.key.end);
95
- const valueSource = property.value.type === "ObjectExpression" ? printFormattedObjectExpression(property.value, code, `${baseIndent} `) : code.slice(property.value.start, property.value.end).trim();
96
- return `${baseIndent} ${keySource}: ${valueSource}`;
97
- });
98
- return `{\n${lines.join(",\n")}\n${baseIndent}}`;
99
- };
100
- const formatRuntimeObjectLiterals = (code, filename) => {
101
- const replacements = [];
102
- const walk = (node, parent = null) => {
103
- if (node.type === "ObjectExpression") {
104
- const shouldFormat = parent?.type === "VariableDeclarator" && hasNestedObjectValue(node) || parent?.type === "CallExpression";
105
- if (shouldFormat) {
106
- replacements.push({
107
- end: node.end,
108
- start: node.start,
109
- value: printFormattedObjectExpression(node, code, getLineIndent(code, node.start))
110
- });
111
- return;
112
- }
113
- }
114
- getChildren(node).forEach((child) => walk(child.node, node));
115
- };
116
- walk(parseOxc(code, filename));
117
- return replacements.length > 0 ? applyReplacements(code, replacements) : code;
118
- };
119
- const collapseRuntimeBlankLines = (code) => {
120
- const lines = code.split("\n");
121
- const result = [];
122
- for (let idx = 0; idx < lines.length; idx += 1) {
123
- const line = lines[idx];
124
- if (line.trim() !== "") {
125
- result.push(line);
126
- } else {
127
- let nextIdx = idx;
128
- while (nextIdx < lines.length && lines[nextIdx]?.trim() === "") {
129
- nextIdx += 1;
130
- }
131
- const previousNonEmpty = [...result].reverse().find((entry) => entry.trim() !== "");
132
- const nextNonEmpty = lines.slice(nextIdx).find((entry) => entry.trim() !== "");
133
- if (previousNonEmpty && nextNonEmpty) {
134
- const trimmedPrevious = previousNonEmpty.trim();
135
- if (trimmedPrevious.startsWith("//") || trimmedPrevious.endsWith("*/")) {
136
- result.push("");
137
- }
138
- }
139
- idx = nextIdx - 1;
140
- }
141
- }
142
- return result.join("\n");
143
- };
144
- const ensureBlankLineAfterLeadingBlockComment = (code) => code.replace(/^(\/\*[\s\S]*?\*\/)\n(?!\n)/, "$1\n\n");
145
- const insertMissingSemicolons = (code, filename) => {
146
- const replacements = [];
147
- const hasTrailingSemicolon = (node) => code.slice(node.start, node.end).trimEnd().endsWith(";");
148
- const walk = (node, parent = null, key = null) => {
149
- if (shouldTerminateWithSemicolon(node, parent, key) && !hasTrailingSemicolon(node)) {
150
- replacements.push({
151
- end: node.end,
152
- start: node.end,
153
- value: ";"
154
- });
155
- }
156
- getChildren(node).forEach((child) => walk(child.node, node, child.key));
157
- };
158
- walk(parseOxc(code, filename));
159
- return replacements.length > 0 ? applyReplacements(code, replacements) : code;
160
- };
161
- const createLineSourceMap = (generatedCode, originalCode, filename) => {
162
- const generator = new SourceMapGenerator({ file: filename });
163
- const generatedLines = countLines(generatedCode);
164
- const originalLines = countLines(originalCode);
165
- for (let line = 1; line <= generatedLines; line += 1) {
166
- generator.addMapping({
167
- generated: {
168
- column: 0,
169
- line
170
- },
171
- original: {
172
- column: 0,
173
- line: Math.min(line, originalLines)
174
- },
175
- source: filename
176
- });
177
- }
178
- generator.setSourceContent(filename, originalCode);
179
- return generator.toJSON();
180
- };
181
- const createComposedRuntimeSourceMap = (generatedCode, originalCode, filename, inputSourceMap) => {
182
- const runtimeMap = createLineSourceMap(generatedCode, originalCode, filename);
183
- if (!inputSourceMap) {
184
- return runtimeMap;
185
- }
186
- const composed = remapping([runtimeMap, inputSourceMap], () => null);
187
- return {
188
- ...composed,
189
- file: runtimeMap.file
190
- };
191
- };
192
- const normalizeRuntimeCode = (code, filename) => insertMissingSemicolons(ensureBlankLineAfterLeadingBlockComment(collapseRuntimeBlankLines(formatRuntimeObjectLiterals(code.replace(/^\n+/, "").replace(/\n+$/, "").replace(/[ \t]+\n/g, "\n"), filename))), filename);
2
+ import { normalizeRuntimeCode } from "./collectOxcRuntime/normalizeRuntimeCode.js";
3
+ import { createComposedRuntimeSourceMap } from "./collectOxcRuntime/sourceMap.js";
193
4
  export const collectOxcRuntime = (code, filename, root, options, values, inputSourceMap) => {
194
5
  const result = applyOxcProcessors(code, {
195
6
  filename,
@@ -199,16 +10,17 @@ export const collectOxcRuntime = (code, filename, root, options, values, inputSo
199
10
  processor.doRuntimeReplacement();
200
11
  }, true);
201
12
  const normalizedCode = normalizeRuntimeCode(result.code, filename);
13
+ const map = createComposedRuntimeSourceMap(normalizedCode, code, filename, inputSourceMap);
202
14
  if (result.processors.length === 0) {
203
15
  return {
204
16
  code: normalizedCode,
205
- map: createComposedRuntimeSourceMap(normalizedCode, code, filename, inputSourceMap),
17
+ map,
206
18
  metadata: null
207
19
  };
208
20
  }
209
21
  return {
210
22
  code: normalizedCode,
211
- map: createComposedRuntimeSourceMap(normalizedCode, code, filename, inputSourceMap),
23
+ map,
212
24
  metadata: {
213
25
  dependencies: [],
214
26
  processors: result.processors,
@@ -1 +1 @@
1
- {"mappings":";AAEA,SAAS,qBAAqB;AAC9B,SAAS,iBAAiB;AAI1B,SAAS,0BAA6C;AAGtD,SAAS,0BAA0B;AAwCnC,MAAM,YAAY,cAAc,OAAO,KAAK,IAAI,CAC9C,wBACD;AAED,MAAM,cAAc,SAAyB,KAAK,MAAM,KAAK,CAAC;AAE9D,MAAM,YAAY,MAAc,aAA8B;CAC5D,MAAM,SAAS,UAAU,UAAU,MAAM;EACvC,SACE,SAAS,SAAS,MAAM,IAAI,SAAS,SAAS,OAAO,GAAG,OAAO;EACjE,OAAO;EACP,YAAY;EACb,CAAC;CACF,MAAM,aAAa,OAAO,OAAO,MAAM,UAAU,MAAM,aAAa,QAAQ;AAC5E,KAAI,YAAY;AACd,QAAM,IAAI,MAAM,WAAW,QAAQ;;AAGrC,QAAO,OAAO;;AAGhB,MAAM,qBACJ,MACA,iBACW;CACX,IAAI,SAAS;AACb,cACG,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,CACjC,SAAS,gBAAgB;AACxB,WACE,OAAO,MAAM,GAAG,YAAY,MAAM,GAClC,YAAY,QACZ,OAAO,MAAM,YAAY,IAAI;GAC/B;AAEJ,QAAO;;AAGT,MAAM,gCACJ,MACA,QACA,QACY;AACZ,KAAI,KAAK,SAAS,yBAAyB,QAAQ;AACjD,OACG,OAAO,SAAS,kBACf,OAAO,SAAS,oBAChB,OAAO,SAAS,qBAClB,OACA,CAAC,QAAQ,OAAO,CAAC,SAAS,IAAI,EAC9B;AACA,UAAO;;AAGT,MAAI,OAAO,SAAS,0BAA0B;AAC5C,UAAO;;;AAIX,KACE,KAAK,SAAS,uBACd,KAAK,SAAS,yBACd,KAAK,SAAS,qBACd,KAAK,SAAS,oBACd,KAAK,SAAS,uBACd;AACA,SAAO;;AAGT,KAAI,KAAK,SAAS,0BAA0B;AAC1C,MAAI,KAAK,aAAa;AACpB,UAAO,KAAK,YAAY,SAAS;;AAGnC,SAAO,MAAM,QAAQ,KAAK,WAAW,IAAI,KAAK,WAAW,SAAS;;AAGpE,QAAO;;AAGT,MAAM,eAAe,SAA0D;CAC7E,MAAM,SAAoD,EAAE;CAC5D,MAAM,SAAS;AAEf,QAAO,KAAK,OAAO,CAAC,SAAS,QAAQ;AACnC,MAAI,QAAQ,UAAU,QAAQ,WAAW,QAAQ,SAAS,QAAQ,SAAS;AACzE;;EAGF,MAAM,QAAQ,OAAO;AACrB,MAAI,SAAS,OAAO,UAAU,YAAY,UAAW,OAAkB;AACrE,UAAO,KAAK;IAAE;IAAK,MAAM;IAAe,CAAC;AACzC;;AAGF,MAAI,MAAM,QAAQ,MAAM,EAAE;AACxB,SAAM,SAAS,SAAS;AACtB,QAAI,QAAQ,OAAO,SAAS,YAAY,UAAW,MAAiB;AAClE,YAAO,KAAK;MAAE;MAAK,MAAM;MAAc,CAAC;;KAE1C;;GAEJ;AAEF,QAAO;;AAGT,MAAM,iBAAiB,MAAc,WAA2B;CAC9D,MAAM,YAAY,KAAK,YAAY,MAAM,SAAS,EAAE,GAAG;CACvD,IAAI,MAAM;AACV,QAAO,MAAM,KAAK,WAAW,KAAK,SAAS,OAAO,KAAK,SAAS,MAAO;AACrE,SAAO;;AAGT,QAAO,KAAK,MAAM,WAAW,IAAI,CAAC,QAAQ,OAAO,KAAK;;AAGxD,MAAM,yBAAyB,aAC7B,SAAS,SAAS,cACjB,SAAyB,SAAS,UAClC,SAAyB,WAAW;AAEvC,MAAM,iCAAiC,SACrC,KAAK,SAAS,sBACd,KAAK,WAAW,OACb,aACC,SAAS,SAAS,mBAAmB,sBAAsB,SAAS,CACvE;AAEH,MAAM,wBAAwB,SAC5B,KAAK,SAAS,sBACd,KAAK,WAAW,MACb,aACC,sBAAsB,SAAS,IAC/B,SAAS,MAAM,SAAS,mBAC3B;AAEH,MAAM,kCACJ,MACA,MACA,eACW;AACX,KACE,KAAK,SAAS,sBACd,KAAK,WAAW,WAAW,KAC3B,CAAC,8BAA8B,KAAK,EACpC;AACA,SAAO,KAAK,MAAM,KAAK,OAAO,KAAK,IAAI;;CAGzC,MAAM,QAAQ,KAAK,WAAW,KAAK,aAAa;AAC9C,MAAI,SAAS,SAAS,iBAAiB;AACrC,UAAO,GAAG,WAAW,OAAO,KAAK,MAC/B,SAAS,SAAS,OAClB,SAAS,SAAS,IACnB;;EAGH,MAAM,YAAY,SAAS,WACvB,IAAI,KAAK,MAAM,SAAS,IAAI,OAAO,SAAS,IAAI,IAAI,CAAC,KACrD,KAAK,MAAM,SAAS,IAAI,OAAO,SAAS,IAAI,IAAI;EACpD,MAAM,cACJ,SAAS,MAAM,SAAS,qBACpB,+BACE,SAAS,OACT,MACA,GAAG,WAAW,IACf,GACD,KAAK,MAAM,SAAS,MAAM,OAAO,SAAS,MAAM,IAAI,CAAC,MAAM;AAEjE,SAAO,GAAG,WAAW,IAAI,UAAU,IAAI;GACvC;AAEF,QAAO,MAAM,MAAM,KAAK,MAAM,CAAC,IAAI,WAAW;;AAGhD,MAAM,+BACJ,MACA,aACW;CACX,MAAM,eAA8B,EAAE;CAEtC,MAAM,QAAQ,MAAY,SAAsB,SAAe;AAC7D,MAAI,KAAK,SAAS,oBAAoB;GACpC,MAAM,eACH,QAAQ,SAAS,wBAAwB,qBAAqB,KAAK,IACpE,QAAQ,SAAS;AAEnB,OAAI,cAAc;AAChB,iBAAa,KAAK;KAChB,KAAK,KAAK;KACV,OAAO,KAAK;KACZ,OAAO,+BACL,MACA,MACA,cAAc,MAAM,KAAK,MAAM,CAChC;KACF,CAAC;AACF;;;AAIJ,cAAY,KAAK,CAAC,SAAS,UAAU,KAAK,MAAM,MAAM,KAAK,CAAC;;AAG9D,MAAK,SAAS,MAAM,SAAS,CAAC;AAC9B,QAAO,aAAa,SAAS,IAAI,kBAAkB,MAAM,aAAa,GAAG;;AAG3E,MAAM,6BAA6B,SAAyB;CAC1D,MAAM,QAAQ,KAAK,MAAM,KAAK;CAC9B,MAAM,SAAmB,EAAE;AAE3B,MAAK,IAAI,MAAM,GAAG,MAAM,MAAM,QAAQ,OAAO,GAAG;EAC9C,MAAM,OAAO,MAAM;AACnB,MAAI,KAAK,MAAM,KAAK,IAAI;AACtB,UAAO,KAAK,KAAK;SACZ;GACL,IAAI,UAAU;AACd,UAAO,UAAU,MAAM,UAAU,MAAM,UAAU,MAAM,KAAK,IAAI;AAC9D,eAAW;;GAGb,MAAM,mBAAmB,CAAC,GAAG,OAAO,CACjC,SAAS,CACT,MAAM,UAAU,MAAM,MAAM,KAAK,GAAG;GACvC,MAAM,eAAe,MAClB,MAAM,QAAQ,CACd,MAAM,UAAU,MAAM,MAAM,KAAK,GAAG;AAEvC,OAAI,oBAAoB,cAAc;IACpC,MAAM,kBAAkB,iBAAiB,MAAM;AAC/C,QACE,gBAAgB,WAAW,KAAK,IAChC,gBAAgB,SAAS,KAAK,EAC9B;AACA,YAAO,KAAK,GAAG;;;AAInB,SAAM,UAAU;;;AAIpB,QAAO,OAAO,KAAK,KAAK;;AAG1B,MAAM,2CAA2C,SAC/C,KAAK,QAAQ,+BAA+B,SAAS;AAEvD,MAAM,2BAA2B,MAAc,aAA6B;CAC1E,MAAM,eAA8B,EAAE;CACtC,MAAM,wBAAwB,SAC5B,KAAK,MAAM,KAAK,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,SAAS,IAAI;CAE1D,MAAM,QACJ,MACA,SAAsB,MACtB,MAAqB,SACZ;AACT,MACE,6BAA6B,MAAM,QAAQ,IAAI,IAC/C,CAAC,qBAAqB,KAAK,EAC3B;AACA,gBAAa,KAAK;IAChB,KAAK,KAAK;IACV,OAAO,KAAK;IACZ,OAAO;IACR,CAAC;;AAGJ,cAAY,KAAK,CAAC,SAAS,UAAU,KAAK,MAAM,MAAM,MAAM,MAAM,IAAI,CAAC;;AAGzE,MAAK,SAAS,MAAM,SAAS,CAAC;AAC9B,QAAO,aAAa,SAAS,IAAI,kBAAkB,MAAM,aAAa,GAAG;;AAG3E,MAAM,uBACJ,eACA,cACA,aACiB;CACjB,MAAM,YAAY,IAAI,mBAAmB,EACvC,MAAM,UACP,CAAC;CACF,MAAM,iBAAiB,WAAW,cAAc;CAChD,MAAM,gBAAgB,WAAW,aAAa;AAE9C,MAAK,IAAI,OAAO,GAAG,QAAQ,gBAAgB,QAAQ,GAAG;AACpD,YAAU,WAAW;GACnB,WAAW;IACT,QAAQ;IACR;IACD;GACD,UAAU;IACR,QAAQ;IACR,MAAM,KAAK,IAAI,MAAM,cAAc;IACpC;GACD,QAAQ;GACT,CAAC;;AAGJ,WAAU,iBAAiB,UAAU,aAAa;AAElD,QAAO,UAAU,QAAQ;;AAG3B,MAAM,kCACJ,eACA,cACA,UACA,mBACiB;CACjB,MAAM,aAAa,oBAAoB,eAAe,cAAc,SAAS;AAC7E,KAAI,CAAC,gBAAgB;AACnB,SAAO;;CAGT,MAAM,WAAW,UAAU,CAAC,YAAY,eAAe,QAAQ,KAAK;AACpE,QAAO;EACL,GAAG;EACH,MAAM,WAAW;EAClB;;AAGH,MAAM,wBAAwB,MAAc,aAC1C,wBACE,wCACE,0BACE,4BACE,KACG,QAAQ,QAAQ,GAAG,CACnB,QAAQ,QAAQ,GAAG,CACnB,QAAQ,aAAa,KAAK,EAC7B,SACD,CACF,CACF,EACD,SACD;AAEH,OAAO,MAAM,qBACX,MACA,UACA,MACA,SACA,QACA,mBACqB;CACrB,MAAM,SAAS,mBACb,MACA;EACE;EACA;EACD,EACD,UACC,cAAc;AACb,YAAU,MAAM,OAAO;AACvB,YAAU,sBAAsB;IAElC,KACD;CACD,MAAM,iBAAiB,qBAAqB,OAAO,MAAM,SAAS;AAElE,KAAI,OAAO,WAAW,WAAW,GAAG;AAClC,SAAO;GACL,MAAM;GACN,KAAK,+BACH,gBACA,MACA,UACA,eACD;GACD,UAAU;GACX;;AAGH,QAAO;EACL,MAAM;EACN,KAAK,+BACH,gBACA,MACA,UACA,eACD;EACD,UAAU;GACR,cAAc,EAAE;GAChB,YAAY,OAAO;GACnB,cAAc,EAAE;GAChB,OAAO,EAAE;GACV;EACF","names":[],"sources":["../../src/utils/collectOxcRuntime.ts"],"version":3,"sourcesContent":["/* eslint-disable no-restricted-syntax */\n\nimport { createRequire } from 'node:module';\nimport { parseSync } from 'oxc-parser';\nimport type { Node, Program } from 'oxc-parser';\nimport type { ValueCache } from '@wyw-in-js/processor-utils';\nimport type { StrictOptions } from '@wyw-in-js/shared';\nimport { SourceMapGenerator, type RawSourceMap } from 'source-map';\n\nimport type { WYWTransformMetadata } from './TransformMetadata';\nimport { applyOxcProcessors } from './applyOxcProcessors';\n\ntype OxcCollectOptions = Pick<\n StrictOptions,\n | 'classNameSlug'\n | 'displayName'\n | 'evaluate'\n | 'extensions'\n | 'tagResolver'\n | 'variableNameConfig'\n> & {\n preserveSideEffectImportLocals?: Set<string>;\n};\n\ntype OxcCollectResult = {\n code: string;\n map: RawSourceMap;\n metadata: WYWTransformMetadata | null;\n};\n\ntype Replacement = {\n end: number;\n start: number;\n value: string;\n};\n\ntype AnyNode = Node & Record<string, unknown>;\ntype AnyProperty = AnyNode & {\n computed?: boolean;\n key: Node;\n kind?: string;\n method?: boolean;\n value: Node;\n};\n\ntype RemappingFn = (\n input: RawSourceMap | RawSourceMap[],\n loader: (source: string, context: unknown) => RawSourceMap | null | undefined\n) => RawSourceMap;\n\nconst remapping = createRequire(import.meta.url)(\n '@jridgewell/remapping'\n) as RemappingFn;\n\nconst countLines = (code: string): number => code.split('\\n').length;\n\nconst parseOxc = (code: string, filename: string): Program => {\n const parsed = parseSync(filename, code, {\n astType:\n filename.endsWith('.ts') || filename.endsWith('.tsx') ? 'ts' : 'js',\n range: true,\n sourceType: 'module',\n });\n const fatalError = parsed.errors.find((error) => error.severity === 'Error');\n if (fatalError) {\n throw new Error(fatalError.message);\n }\n\n return parsed.program as Program;\n};\n\nconst applyReplacements = (\n code: string,\n replacements: Replacement[]\n): string => {\n let result = code;\n replacements\n .sort((a, b) => b.start - a.start)\n .forEach((replacement) => {\n result =\n result.slice(0, replacement.start) +\n replacement.value +\n result.slice(replacement.end);\n });\n\n return result;\n};\n\nconst shouldTerminateWithSemicolon = (\n node: Node,\n parent: Node | null,\n key: string | null\n): boolean => {\n if (node.type === 'VariableDeclaration' && parent) {\n if (\n (parent.type === 'ForStatement' ||\n parent.type === 'ForInStatement' ||\n parent.type === 'ForOfStatement') &&\n key &&\n ['init', 'left'].includes(key)\n ) {\n return false;\n }\n\n if (parent.type === 'ExportNamedDeclaration') {\n return false;\n }\n }\n\n if (\n node.type === 'ImportDeclaration' ||\n node.type === 'ExpressionStatement' ||\n node.type === 'ReturnStatement' ||\n node.type === 'ThrowStatement' ||\n node.type === 'VariableDeclaration'\n ) {\n return true;\n }\n\n if (node.type === 'ExportNamedDeclaration') {\n if (node.declaration) {\n return node.declaration.type === 'VariableDeclaration';\n }\n\n return Array.isArray(node.specifiers) && node.specifiers.length > 0;\n }\n\n return false;\n};\n\nconst getChildren = (node: Node): Array<{ key: string | null; node: Node }> => {\n const result: Array<{ key: string | null; node: Node }> = [];\n const record = node as Node & Record<string, unknown>;\n\n Object.keys(record).forEach((key) => {\n if (key === 'type' || key === 'start' || key === 'end' || key === 'range') {\n return;\n }\n\n const value = record[key];\n if (value && typeof value === 'object' && 'type' in (value as object)) {\n result.push({ key, node: value as Node });\n return;\n }\n\n if (Array.isArray(value)) {\n value.forEach((item) => {\n if (item && typeof item === 'object' && 'type' in (item as object)) {\n result.push({ key, node: item as Node });\n }\n });\n }\n });\n\n return result;\n};\n\nconst getLineIndent = (code: string, offset: number): string => {\n const lineStart = code.lastIndexOf('\\n', offset - 1) + 1;\n let idx = lineStart;\n while (idx < code.length && (code[idx] === ' ' || code[idx] === '\\t')) {\n idx += 1;\n }\n\n return code.slice(lineStart, idx).replace(/\\t/g, ' ');\n};\n\nconst isPlainObjectProperty = (property: Node): property is AnyProperty =>\n property.type === 'Property' &&\n (property as AnyProperty).kind === 'init' &&\n (property as AnyProperty).method !== true;\n\nconst isFormattableObjectExpression = (node: Node): boolean =>\n node.type === 'ObjectExpression' &&\n node.properties.every(\n (property) =>\n property.type === 'SpreadElement' || isPlainObjectProperty(property)\n );\n\nconst hasNestedObjectValue = (node: Node): boolean =>\n node.type === 'ObjectExpression' &&\n node.properties.some(\n (property) =>\n isPlainObjectProperty(property) &&\n property.value.type === 'ObjectExpression'\n );\n\nconst printFormattedObjectExpression = (\n node: Node,\n code: string,\n baseIndent: string\n): string => {\n if (\n node.type !== 'ObjectExpression' ||\n node.properties.length === 0 ||\n !isFormattableObjectExpression(node)\n ) {\n return code.slice(node.start, node.end);\n }\n\n const lines = node.properties.map((property) => {\n if (property.type === 'SpreadElement') {\n return `${baseIndent} ...${code.slice(\n property.argument.start,\n property.argument.end\n )}`;\n }\n\n const keySource = property.computed\n ? `[${code.slice(property.key.start, property.key.end)}]`\n : code.slice(property.key.start, property.key.end);\n const valueSource =\n property.value.type === 'ObjectExpression'\n ? printFormattedObjectExpression(\n property.value,\n code,\n `${baseIndent} `\n )\n : code.slice(property.value.start, property.value.end).trim();\n\n return `${baseIndent} ${keySource}: ${valueSource}`;\n });\n\n return `{\\n${lines.join(',\\n')}\\n${baseIndent}}`;\n};\n\nconst formatRuntimeObjectLiterals = (\n code: string,\n filename: string\n): string => {\n const replacements: Replacement[] = [];\n\n const walk = (node: Node, parent: Node | null = null): void => {\n if (node.type === 'ObjectExpression') {\n const shouldFormat =\n (parent?.type === 'VariableDeclarator' && hasNestedObjectValue(node)) ||\n parent?.type === 'CallExpression';\n\n if (shouldFormat) {\n replacements.push({\n end: node.end,\n start: node.start,\n value: printFormattedObjectExpression(\n node,\n code,\n getLineIndent(code, node.start)\n ),\n });\n return;\n }\n }\n\n getChildren(node).forEach((child) => walk(child.node, node));\n };\n\n walk(parseOxc(code, filename));\n return replacements.length > 0 ? applyReplacements(code, replacements) : code;\n};\n\nconst collapseRuntimeBlankLines = (code: string): string => {\n const lines = code.split('\\n');\n const result: string[] = [];\n\n for (let idx = 0; idx < lines.length; idx += 1) {\n const line = lines[idx]!;\n if (line.trim() !== '') {\n result.push(line);\n } else {\n let nextIdx = idx;\n while (nextIdx < lines.length && lines[nextIdx]?.trim() === '') {\n nextIdx += 1;\n }\n\n const previousNonEmpty = [...result]\n .reverse()\n .find((entry) => entry.trim() !== '');\n const nextNonEmpty = lines\n .slice(nextIdx)\n .find((entry) => entry.trim() !== '');\n\n if (previousNonEmpty && nextNonEmpty) {\n const trimmedPrevious = previousNonEmpty.trim();\n if (\n trimmedPrevious.startsWith('//') ||\n trimmedPrevious.endsWith('*/')\n ) {\n result.push('');\n }\n }\n\n idx = nextIdx - 1;\n }\n }\n\n return result.join('\\n');\n};\n\nconst ensureBlankLineAfterLeadingBlockComment = (code: string): string =>\n code.replace(/^(\\/\\*[\\s\\S]*?\\*\\/)\\n(?!\\n)/, '$1\\n\\n');\n\nconst insertMissingSemicolons = (code: string, filename: string): string => {\n const replacements: Replacement[] = [];\n const hasTrailingSemicolon = (node: Node): boolean =>\n code.slice(node.start, node.end).trimEnd().endsWith(';');\n\n const walk = (\n node: Node,\n parent: Node | null = null,\n key: string | null = null\n ): void => {\n if (\n shouldTerminateWithSemicolon(node, parent, key) &&\n !hasTrailingSemicolon(node)\n ) {\n replacements.push({\n end: node.end,\n start: node.end,\n value: ';',\n });\n }\n\n getChildren(node).forEach((child) => walk(child.node, node, child.key));\n };\n\n walk(parseOxc(code, filename));\n return replacements.length > 0 ? applyReplacements(code, replacements) : code;\n};\n\nconst createLineSourceMap = (\n generatedCode: string,\n originalCode: string,\n filename: string\n): RawSourceMap => {\n const generator = new SourceMapGenerator({\n file: filename,\n });\n const generatedLines = countLines(generatedCode);\n const originalLines = countLines(originalCode);\n\n for (let line = 1; line <= generatedLines; line += 1) {\n generator.addMapping({\n generated: {\n column: 0,\n line,\n },\n original: {\n column: 0,\n line: Math.min(line, originalLines),\n },\n source: filename,\n });\n }\n\n generator.setSourceContent(filename, originalCode);\n\n return generator.toJSON() as RawSourceMap;\n};\n\nconst createComposedRuntimeSourceMap = (\n generatedCode: string,\n originalCode: string,\n filename: string,\n inputSourceMap?: RawSourceMap\n): RawSourceMap => {\n const runtimeMap = createLineSourceMap(generatedCode, originalCode, filename);\n if (!inputSourceMap) {\n return runtimeMap;\n }\n\n const composed = remapping([runtimeMap, inputSourceMap], () => null);\n return {\n ...composed,\n file: runtimeMap.file,\n } as RawSourceMap;\n};\n\nconst normalizeRuntimeCode = (code: string, filename: string): string =>\n insertMissingSemicolons(\n ensureBlankLineAfterLeadingBlockComment(\n collapseRuntimeBlankLines(\n formatRuntimeObjectLiterals(\n code\n .replace(/^\\n+/, '')\n .replace(/\\n+$/, '')\n .replace(/[ \\t]+\\n/g, '\\n'),\n filename\n )\n )\n ),\n filename\n );\n\nexport const collectOxcRuntime = (\n code: string,\n filename: string,\n root: string,\n options: OxcCollectOptions,\n values: ValueCache,\n inputSourceMap?: RawSourceMap\n): OxcCollectResult => {\n const result = applyOxcProcessors(\n code,\n {\n filename,\n root,\n },\n options,\n (processor) => {\n processor.build(values);\n processor.doRuntimeReplacement();\n },\n true\n );\n const normalizedCode = normalizeRuntimeCode(result.code, filename);\n\n if (result.processors.length === 0) {\n return {\n code: normalizedCode,\n map: createComposedRuntimeSourceMap(\n normalizedCode,\n code,\n filename,\n inputSourceMap\n ),\n metadata: null,\n };\n }\n\n return {\n code: normalizedCode,\n map: createComposedRuntimeSourceMap(\n normalizedCode,\n code,\n filename,\n inputSourceMap\n ),\n metadata: {\n dependencies: [],\n processors: result.processors,\n replacements: [],\n rules: {},\n },\n };\n};\n"],"file":"collectOxcRuntime.js"}
1
+ {"mappings":"AAGA,SAAS,0BAA0B;AACnC,SAAS,4BAA4B;AACrC,SAAS,sCAAsC;AAM/C,OAAO,MAAM,qBACX,MACA,UACA,MACA,SACA,QACA,mBACqB;CACrB,MAAM,SAAS,mBACb,MACA;EACE;EACA;EACD,EACD,UACC,cAAc;AACb,YAAU,MAAM,OAAO;AACvB,YAAU,sBAAsB;IAElC,KACD;CACD,MAAM,iBAAiB,qBAAqB,OAAO,MAAM,SAAS;CAClE,MAAM,MAAM,+BACV,gBACA,MACA,UACA,eACD;AAED,KAAI,OAAO,WAAW,WAAW,GAAG;AAClC,SAAO;GACL,MAAM;GACN;GACA,UAAU;GACX;;AAGH,QAAO;EACL,MAAM;EACN;EACA,UAAU;GACR,cAAc,EAAE;GAChB,YAAY,OAAO;GACnB,cAAc,EAAE;GAChB,OAAO,EAAE;GACV;EACF","names":[],"sources":["../../src/utils/collectOxcRuntime.ts"],"version":3,"sourcesContent":["import type { ValueCache } from '@wyw-in-js/processor-utils';\nimport type { RawSourceMap } from 'source-map';\n\nimport { applyOxcProcessors } from './applyOxcProcessors';\nimport { normalizeRuntimeCode } from './collectOxcRuntime/normalizeRuntimeCode';\nimport { createComposedRuntimeSourceMap } from './collectOxcRuntime/sourceMap';\nimport type {\n OxcCollectOptions,\n OxcCollectResult,\n} from './collectOxcRuntime/types';\n\nexport const collectOxcRuntime = (\n code: string,\n filename: string,\n root: string,\n options: OxcCollectOptions,\n values: ValueCache,\n inputSourceMap?: RawSourceMap\n): OxcCollectResult => {\n const result = applyOxcProcessors(\n code,\n {\n filename,\n root,\n },\n options,\n (processor) => {\n processor.build(values);\n processor.doRuntimeReplacement();\n },\n true\n );\n const normalizedCode = normalizeRuntimeCode(result.code, filename);\n const map = createComposedRuntimeSourceMap(\n normalizedCode,\n code,\n filename,\n inputSourceMap\n );\n\n if (result.processors.length === 0) {\n return {\n code: normalizedCode,\n map,\n metadata: null,\n };\n }\n\n return {\n code: normalizedCode,\n map,\n metadata: {\n dependencies: [],\n processors: result.processors,\n replacements: [],\n rules: {},\n },\n };\n};\n"],"file":"collectOxcRuntime.js"}