@mionjs/devtools 0.8.8 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (388) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +34 -0
  3. package/dist/core/apply-edits.d.ts +8 -0
  4. package/dist/core/apply-edits.js +24 -0
  5. package/dist/core/apply-edits.js.map +1 -0
  6. package/dist/core/bundledApiStub.d.ts +4 -0
  7. package/dist/core/bundledApiStub.js +4 -0
  8. package/dist/core/bundledApiStub.js.map +1 -0
  9. package/dist/core/devReporter.d.ts +19 -0
  10. package/dist/core/devReporter.js +91 -0
  11. package/dist/core/devReporter.js.map +1 -0
  12. package/dist/core/diagnosticCatalog.d.ts +5 -0
  13. package/dist/core/diagnosticCatalog.js +18 -0
  14. package/dist/core/diagnosticCatalog.js.map +1 -0
  15. package/dist/core/downgradeErrors.d.ts +11 -0
  16. package/dist/core/downgradeErrors.js +34 -0
  17. package/dist/core/downgradeErrors.js.map +1 -0
  18. package/dist/core/edit-buffer.d.ts +26 -0
  19. package/dist/core/edit-buffer.js +209 -0
  20. package/dist/core/edit-buffer.js.map +1 -0
  21. package/dist/core/go-generated/diagnosticCatalog.generated.d.ts +9 -0
  22. package/dist/core/go-generated/diagnosticCatalog.generated.js +1008 -0
  23. package/dist/core/go-generated/diagnosticCatalog.generated.js.map +1 -0
  24. package/dist/core/go-generated/reflectionKind.generated.d.ts +60 -0
  25. package/dist/core/go-generated/reflectionKind.generated.js +60 -0
  26. package/dist/core/go-generated/reflectionKind.generated.js.map +1 -0
  27. package/dist/core/go-generated/runtypes-constants.generated.d.ts +197 -0
  28. package/dist/core/go-generated/runtypes-constants.generated.js +110 -0
  29. package/dist/core/go-generated/runtypes-constants.generated.js.map +1 -0
  30. package/dist/core/go-generated/tsconfig-plugin-keys.generated.d.ts +3 -0
  31. package/dist/core/go-generated/tsconfig-plugin-keys.generated.js +23 -0
  32. package/dist/core/go-generated/tsconfig-plugin-keys.generated.js.map +1 -0
  33. package/dist/core/groupedLog.d.ts +6 -0
  34. package/dist/core/groupedLog.js +163 -0
  35. package/dist/core/groupedLog.js.map +1 -0
  36. package/dist/core/levels.d.ts +6 -0
  37. package/dist/core/levels.js +22 -0
  38. package/dist/core/levels.js.map +1 -0
  39. package/dist/core/markerImports.d.ts +8 -0
  40. package/dist/core/markerImports.js +149 -0
  41. package/dist/core/markerImports.js.map +1 -0
  42. package/dist/core/option-guards.d.ts +4 -0
  43. package/dist/core/option-guards.js +12 -0
  44. package/dist/core/option-guards.js.map +1 -0
  45. package/dist/core/plugin-option-keys.d.ts +3 -0
  46. package/dist/core/plugin-option-keys.js +35 -0
  47. package/dist/core/plugin-option-keys.js.map +1 -0
  48. package/dist/core/protocol.d.ts +244 -0
  49. package/dist/core/protocol.js +23 -0
  50. package/dist/core/protocol.js.map +1 -0
  51. package/dist/core/resolver-client.d.ts +160 -0
  52. package/dist/core/resolver-client.js +354 -0
  53. package/dist/core/resolver-client.js.map +1 -0
  54. package/dist/core/scan-batcher.d.ts +6 -0
  55. package/dist/core/scan-batcher.js +36 -0
  56. package/dist/core/scan-batcher.js.map +1 -0
  57. package/dist/core/surface.d.ts +23 -0
  58. package/dist/core/surface.js +77 -0
  59. package/dist/core/surface.js.map +1 -0
  60. package/dist/core/type-deps.d.ts +11 -0
  61. package/dist/core/type-deps.js +72 -0
  62. package/dist/core/type-deps.js.map +1 -0
  63. package/dist/core/types.d.ts +13 -0
  64. package/dist/core/types.js +2 -0
  65. package/dist/core/types.js.map +1 -0
  66. package/dist/core/typescript-floor.d.ts +5 -0
  67. package/dist/core/typescript-floor.js +33 -0
  68. package/dist/core/typescript-floor.js.map +1 -0
  69. package/dist/core/unplugin.d.ts +67 -0
  70. package/dist/core/unplugin.js +636 -0
  71. package/dist/core/unplugin.js.map +1 -0
  72. package/dist/index.d.ts +3 -0
  73. package/dist/index.js +3 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/lint/diagnosticRouting.d.ts +28 -0
  76. package/dist/lint/diagnosticRouting.js +74 -0
  77. package/dist/lint/diagnosticRouting.js.map +1 -0
  78. package/dist/lint/index.d.ts +49 -0
  79. package/dist/lint/index.js +96 -0
  80. package/dist/lint/index.js.map +1 -0
  81. package/dist/lint/lint-worker.d.ts +2 -0
  82. package/dist/lint/lint-worker.js +116 -0
  83. package/dist/lint/lint-worker.js.map +1 -0
  84. package/dist/lint/prefilter.d.ts +7 -0
  85. package/dist/lint/prefilter.js +31 -0
  86. package/dist/lint/prefilter.js.map +1 -0
  87. package/dist/lint/session-protocol.d.ts +38 -0
  88. package/dist/lint/session-protocol.js +11 -0
  89. package/dist/lint/session-protocol.js.map +1 -0
  90. package/dist/lint/session.d.ts +27 -0
  91. package/dist/lint/session.js +149 -0
  92. package/dist/lint/session.js.map +1 -0
  93. package/dist/lint/spawn-shim.d.ts +2 -0
  94. package/dist/lint/spawn-shim.js +23 -0
  95. package/dist/lint/spawn-shim.js.map +1 -0
  96. package/dist/next/index.d.ts +11 -0
  97. package/dist/next/index.js +17 -0
  98. package/dist/next/index.js.map +1 -0
  99. package/dist/options.d.ts +29 -0
  100. package/dist/options.js +36 -0
  101. package/dist/options.js.map +1 -0
  102. package/dist/runtypes/bun.d.ts +25 -0
  103. package/dist/runtypes/bun.js +62 -0
  104. package/dist/runtypes/bun.js.map +1 -0
  105. package/dist/runtypes/esbuild.d.ts +4 -0
  106. package/dist/runtypes/esbuild.js +4 -0
  107. package/dist/runtypes/esbuild.js.map +1 -0
  108. package/dist/runtypes/next/broker.d.ts +15 -0
  109. package/dist/runtypes/next/broker.js +316 -0
  110. package/dist/runtypes/next/broker.js.map +1 -0
  111. package/dist/runtypes/next/index.d.ts +30 -0
  112. package/dist/runtypes/next/index.js +57 -0
  113. package/dist/runtypes/next/index.js.map +1 -0
  114. package/dist/runtypes/next/loader.d.ts +13 -0
  115. package/dist/runtypes/next/loader.js +64 -0
  116. package/dist/runtypes/next/loader.js.map +1 -0
  117. package/dist/runtypes/next/wire.d.ts +17 -0
  118. package/dist/runtypes/next/wire.js +15 -0
  119. package/dist/runtypes/next/wire.js.map +1 -0
  120. package/dist/runtypes/rolldown.d.ts +4 -0
  121. package/dist/runtypes/rolldown.js +4 -0
  122. package/dist/runtypes/rolldown.js.map +1 -0
  123. package/dist/runtypes/rollup.d.ts +4 -0
  124. package/dist/runtypes/rollup.js +4 -0
  125. package/dist/runtypes/rollup.js.map +1 -0
  126. package/dist/runtypes/rspack.d.ts +4 -0
  127. package/dist/runtypes/rspack.js +4 -0
  128. package/dist/runtypes/rspack.js.map +1 -0
  129. package/dist/runtypes/vite.d.ts +4 -0
  130. package/dist/runtypes/vite.js +4 -0
  131. package/dist/runtypes/vite.js.map +1 -0
  132. package/dist/runtypes/webpack.d.ts +4 -0
  133. package/dist/runtypes/webpack.js +4 -0
  134. package/dist/runtypes/webpack.js.map +1 -0
  135. package/dist/vite/buildEntries.d.ts +2 -0
  136. package/dist/vite/buildEntries.js +28 -0
  137. package/dist/vite/buildEntries.js.map +1 -0
  138. package/dist/vite/cjsPackageJsonPlugin.d.ts +3 -0
  139. package/dist/vite/cjsPackageJsonPlugin.js +12 -0
  140. package/dist/vite/cjsPackageJsonPlugin.js.map +1 -0
  141. package/dist/vite/index.d.ts +6 -0
  142. package/dist/vite/index.js +5 -0
  143. package/dist/vite/index.js.map +1 -0
  144. package/dist/vite/middlewareMode.d.ts +10 -0
  145. package/dist/vite/middlewareMode.js +227 -0
  146. package/dist/vite/middlewareMode.js.map +1 -0
  147. package/dist/vite/mionVitePlugin.d.ts +23 -0
  148. package/dist/vite/mionVitePlugin.js +115 -0
  149. package/dist/vite/mionVitePlugin.js.map +1 -0
  150. package/dist/vite/nodeWebBridge.d.ts +5 -0
  151. package/dist/vite/nodeWebBridge.js +59 -0
  152. package/dist/vite/nodeWebBridge.js.map +1 -0
  153. package/dist/vite/sfcTransform.d.ts +8 -0
  154. package/dist/vite/sfcTransform.js +142 -0
  155. package/dist/vite/sfcTransform.js.map +1 -0
  156. package/oxlint-recommended.json +11 -0
  157. package/package.json +91 -56
  158. package/build/eslint/cjs/index.cjs +0 -41
  159. package/build/eslint/cjs/index.cjs.map +0 -1
  160. package/build/eslint/cjs/package.json +0 -1
  161. package/build/eslint/cjs/src/eslint/index.cjs +0 -13
  162. package/build/eslint/cjs/src/eslint/index.cjs.map +0 -1
  163. package/build/eslint/cjs/src/eslint/index.d.ts +0 -4
  164. package/build/eslint/cjs/src/eslint/index.d.ts.map +0 -1
  165. package/build/eslint/cjs/src/eslint/rules/enforce-type-imports.cjs +0 -121
  166. package/build/eslint/cjs/src/eslint/rules/enforce-type-imports.cjs.map +0 -1
  167. package/build/eslint/cjs/src/eslint/rules/enforce-type-imports.d.ts +0 -8
  168. package/build/eslint/cjs/src/eslint/rules/enforce-type-imports.d.ts.map +0 -1
  169. package/build/eslint/cjs/src/eslint/rules/formatTypeNames.cjs +0 -71
  170. package/build/eslint/cjs/src/eslint/rules/formatTypeNames.cjs.map +0 -1
  171. package/build/eslint/cjs/src/eslint/rules/formatTypeNames.d.ts +0 -4
  172. package/build/eslint/cjs/src/eslint/rules/formatTypeNames.d.ts.map +0 -1
  173. package/build/eslint/cjs/src/eslint/rules/no-mixed-union-properties.cjs +0 -220
  174. package/build/eslint/cjs/src/eslint/rules/no-mixed-union-properties.cjs.map +0 -1
  175. package/build/eslint/cjs/src/eslint/rules/no-mixed-union-properties.d.ts +0 -4
  176. package/build/eslint/cjs/src/eslint/rules/no-mixed-union-properties.d.ts.map +0 -1
  177. package/build/eslint/cjs/src/eslint/rules/no-type-imports.cjs +0 -251
  178. package/build/eslint/cjs/src/eslint/rules/no-type-imports.cjs.map +0 -1
  179. package/build/eslint/cjs/src/eslint/rules/no-type-imports.d.ts +0 -4
  180. package/build/eslint/cjs/src/eslint/rules/no-type-imports.d.ts.map +0 -1
  181. package/build/eslint/cjs/src/eslint/rules/no-typeof-runtype.cjs +0 -72
  182. package/build/eslint/cjs/src/eslint/rules/no-typeof-runtype.cjs.map +0 -1
  183. package/build/eslint/cjs/src/eslint/rules/no-typeof-runtype.d.ts +0 -4
  184. package/build/eslint/cjs/src/eslint/rules/no-typeof-runtype.d.ts.map +0 -1
  185. package/build/eslint/cjs/src/eslint/rules/no-unreachable-union-types.cjs +0 -220
  186. package/build/eslint/cjs/src/eslint/rules/no-unreachable-union-types.cjs.map +0 -1
  187. package/build/eslint/cjs/src/eslint/rules/no-unreachable-union-types.d.ts +0 -4
  188. package/build/eslint/cjs/src/eslint/rules/no-unreachable-union-types.d.ts.map +0 -1
  189. package/build/eslint/cjs/src/eslint/rules/no-vite-client.cjs +0 -71
  190. package/build/eslint/cjs/src/eslint/rules/no-vite-client.cjs.map +0 -1
  191. package/build/eslint/cjs/src/eslint/rules/no-vite-client.d.ts +0 -5
  192. package/build/eslint/cjs/src/eslint/rules/no-vite-client.d.ts.map +0 -1
  193. package/build/eslint/cjs/src/eslint/rules/pure-functions.cjs +0 -346
  194. package/build/eslint/cjs/src/eslint/rules/pure-functions.cjs.map +0 -1
  195. package/build/eslint/cjs/src/eslint/rules/pure-functions.d.ts +0 -5
  196. package/build/eslint/cjs/src/eslint/rules/pure-functions.d.ts.map +0 -1
  197. package/build/eslint/cjs/src/eslint/rules/strong-typed-routes.cjs +0 -328
  198. package/build/eslint/cjs/src/eslint/rules/strong-typed-routes.cjs.map +0 -1
  199. package/build/eslint/cjs/src/eslint/rules/strong-typed-routes.d.ts +0 -5
  200. package/build/eslint/cjs/src/eslint/rules/strong-typed-routes.d.ts.map +0 -1
  201. package/build/eslint/cjs/src/eslint/rules/type-formats-imports.cjs +0 -52
  202. package/build/eslint/cjs/src/eslint/rules/type-formats-imports.cjs.map +0 -1
  203. package/build/eslint/cjs/src/eslint/rules/type-formats-imports.d.ts +0 -4
  204. package/build/eslint/cjs/src/eslint/rules/type-formats-imports.d.ts.map +0 -1
  205. package/build/eslint/cjs/src/pureFns/purityRules.cjs +0 -67
  206. package/build/eslint/cjs/src/pureFns/purityRules.cjs.map +0 -1
  207. package/build/eslint/cjs/src/pureFns/purityRules.d.ts +0 -5
  208. package/build/eslint/cjs/src/pureFns/purityRules.d.ts.map +0 -1
  209. package/build/eslint/esm/index.js +0 -42
  210. package/build/eslint/esm/index.js.map +0 -1
  211. package/build/eslint/esm/src/eslint/index.d.ts +0 -4
  212. package/build/eslint/esm/src/eslint/index.d.ts.map +0 -1
  213. package/build/eslint/esm/src/eslint/index.js +0 -14
  214. package/build/eslint/esm/src/eslint/index.js.map +0 -1
  215. package/build/eslint/esm/src/eslint/rules/enforce-type-imports.d.ts +0 -8
  216. package/build/eslint/esm/src/eslint/rules/enforce-type-imports.d.ts.map +0 -1
  217. package/build/eslint/esm/src/eslint/rules/enforce-type-imports.js +0 -122
  218. package/build/eslint/esm/src/eslint/rules/enforce-type-imports.js.map +0 -1
  219. package/build/eslint/esm/src/eslint/rules/formatTypeNames.d.ts +0 -4
  220. package/build/eslint/esm/src/eslint/rules/formatTypeNames.d.ts.map +0 -1
  221. package/build/eslint/esm/src/eslint/rules/formatTypeNames.js +0 -71
  222. package/build/eslint/esm/src/eslint/rules/formatTypeNames.js.map +0 -1
  223. package/build/eslint/esm/src/eslint/rules/no-mixed-union-properties.d.ts +0 -4
  224. package/build/eslint/esm/src/eslint/rules/no-mixed-union-properties.d.ts.map +0 -1
  225. package/build/eslint/esm/src/eslint/rules/no-mixed-union-properties.js +0 -221
  226. package/build/eslint/esm/src/eslint/rules/no-mixed-union-properties.js.map +0 -1
  227. package/build/eslint/esm/src/eslint/rules/no-type-imports.d.ts +0 -4
  228. package/build/eslint/esm/src/eslint/rules/no-type-imports.d.ts.map +0 -1
  229. package/build/eslint/esm/src/eslint/rules/no-type-imports.js +0 -252
  230. package/build/eslint/esm/src/eslint/rules/no-type-imports.js.map +0 -1
  231. package/build/eslint/esm/src/eslint/rules/no-typeof-runtype.d.ts +0 -4
  232. package/build/eslint/esm/src/eslint/rules/no-typeof-runtype.d.ts.map +0 -1
  233. package/build/eslint/esm/src/eslint/rules/no-typeof-runtype.js +0 -73
  234. package/build/eslint/esm/src/eslint/rules/no-typeof-runtype.js.map +0 -1
  235. package/build/eslint/esm/src/eslint/rules/no-unreachable-union-types.d.ts +0 -4
  236. package/build/eslint/esm/src/eslint/rules/no-unreachable-union-types.d.ts.map +0 -1
  237. package/build/eslint/esm/src/eslint/rules/no-unreachable-union-types.js +0 -221
  238. package/build/eslint/esm/src/eslint/rules/no-unreachable-union-types.js.map +0 -1
  239. package/build/eslint/esm/src/eslint/rules/no-vite-client.d.ts +0 -5
  240. package/build/eslint/esm/src/eslint/rules/no-vite-client.d.ts.map +0 -1
  241. package/build/eslint/esm/src/eslint/rules/no-vite-client.js +0 -72
  242. package/build/eslint/esm/src/eslint/rules/no-vite-client.js.map +0 -1
  243. package/build/eslint/esm/src/eslint/rules/pure-functions.d.ts +0 -5
  244. package/build/eslint/esm/src/eslint/rules/pure-functions.d.ts.map +0 -1
  245. package/build/eslint/esm/src/eslint/rules/pure-functions.js +0 -347
  246. package/build/eslint/esm/src/eslint/rules/pure-functions.js.map +0 -1
  247. package/build/eslint/esm/src/eslint/rules/strong-typed-routes.d.ts +0 -5
  248. package/build/eslint/esm/src/eslint/rules/strong-typed-routes.d.ts.map +0 -1
  249. package/build/eslint/esm/src/eslint/rules/strong-typed-routes.js +0 -329
  250. package/build/eslint/esm/src/eslint/rules/strong-typed-routes.js.map +0 -1
  251. package/build/eslint/esm/src/eslint/rules/type-formats-imports.d.ts +0 -4
  252. package/build/eslint/esm/src/eslint/rules/type-formats-imports.d.ts.map +0 -1
  253. package/build/eslint/esm/src/eslint/rules/type-formats-imports.js +0 -53
  254. package/build/eslint/esm/src/eslint/rules/type-formats-imports.js.map +0 -1
  255. package/build/eslint/esm/src/pureFns/purityRules.d.ts +0 -5
  256. package/build/eslint/esm/src/pureFns/purityRules.d.ts.map +0 -1
  257. package/build/eslint/esm/src/pureFns/purityRules.js +0 -67
  258. package/build/eslint/esm/src/pureFns/purityRules.js.map +0 -1
  259. package/build/vite-plugin/cjs/index.cjs +0 -13
  260. package/build/vite-plugin/cjs/index.cjs.map +0 -1
  261. package/build/vite-plugin/cjs/package.json +0 -1
  262. package/build/vite-plugin/cjs/src/pureFns/purityRules.cjs +0 -65
  263. package/build/vite-plugin/cjs/src/pureFns/purityRules.cjs.map +0 -1
  264. package/build/vite-plugin/cjs/src/pureFns/purityRules.d.ts +0 -5
  265. package/build/vite-plugin/cjs/src/pureFns/purityRules.d.ts.map +0 -1
  266. package/build/vite-plugin/cjs/src/vite-plugin/aotCacheGenerator.cjs +0 -271
  267. package/build/vite-plugin/cjs/src/vite-plugin/aotCacheGenerator.cjs.map +0 -1
  268. package/build/vite-plugin/cjs/src/vite-plugin/aotCacheGenerator.d.ts +0 -32
  269. package/build/vite-plugin/cjs/src/vite-plugin/aotCacheGenerator.d.ts.map +0 -1
  270. package/build/vite-plugin/cjs/src/vite-plugin/aotDiskCache.cjs +0 -135
  271. package/build/vite-plugin/cjs/src/vite-plugin/aotDiskCache.cjs.map +0 -1
  272. package/build/vite-plugin/cjs/src/vite-plugin/aotDiskCache.d.ts +0 -7
  273. package/build/vite-plugin/cjs/src/vite-plugin/aotDiskCache.d.ts.map +0 -1
  274. package/build/vite-plugin/cjs/src/vite-plugin/cjsPackageJsonPlugin.cjs +0 -15
  275. package/build/vite-plugin/cjs/src/vite-plugin/cjsPackageJsonPlugin.cjs.map +0 -1
  276. package/build/vite-plugin/cjs/src/vite-plugin/cjsPackageJsonPlugin.d.ts +0 -3
  277. package/build/vite-plugin/cjs/src/vite-plugin/cjsPackageJsonPlugin.d.ts.map +0 -1
  278. package/build/vite-plugin/cjs/src/vite-plugin/constants.cjs +0 -29
  279. package/build/vite-plugin/cjs/src/vite-plugin/constants.cjs.map +0 -1
  280. package/build/vite-plugin/cjs/src/vite-plugin/constants.d.ts +0 -13
  281. package/build/vite-plugin/cjs/src/vite-plugin/constants.d.ts.map +0 -1
  282. package/build/vite-plugin/cjs/src/vite-plugin/extractPureFn.cjs +0 -628
  283. package/build/vite-plugin/cjs/src/vite-plugin/extractPureFn.cjs.map +0 -1
  284. package/build/vite-plugin/cjs/src/vite-plugin/extractPureFn.d.ts +0 -14
  285. package/build/vite-plugin/cjs/src/vite-plugin/extractPureFn.d.ts.map +0 -1
  286. package/build/vite-plugin/cjs/src/vite-plugin/index.cjs +0 -13
  287. package/build/vite-plugin/cjs/src/vite-plugin/index.cjs.map +0 -1
  288. package/build/vite-plugin/cjs/src/vite-plugin/index.d.ts +0 -6
  289. package/build/vite-plugin/cjs/src/vite-plugin/index.d.ts.map +0 -1
  290. package/build/vite-plugin/cjs/src/vite-plugin/mionVitePlugin.cjs +0 -511
  291. package/build/vite-plugin/cjs/src/vite-plugin/mionVitePlugin.cjs.map +0 -1
  292. package/build/vite-plugin/cjs/src/vite-plugin/mionVitePlugin.d.ts +0 -37
  293. package/build/vite-plugin/cjs/src/vite-plugin/mionVitePlugin.d.ts.map +0 -1
  294. package/build/vite-plugin/cjs/src/vite-plugin/resolveModule.cjs +0 -55
  295. package/build/vite-plugin/cjs/src/vite-plugin/resolveModule.cjs.map +0 -1
  296. package/build/vite-plugin/cjs/src/vite-plugin/resolveModule.d.ts +0 -2
  297. package/build/vite-plugin/cjs/src/vite-plugin/resolveModule.d.ts.map +0 -1
  298. package/build/vite-plugin/cjs/src/vite-plugin/transformers.cjs +0 -166
  299. package/build/vite-plugin/cjs/src/vite-plugin/transformers.cjs.map +0 -1
  300. package/build/vite-plugin/cjs/src/vite-plugin/transformers.d.ts +0 -11
  301. package/build/vite-plugin/cjs/src/vite-plugin/transformers.d.ts.map +0 -1
  302. package/build/vite-plugin/cjs/src/vite-plugin/types.cjs +0 -2
  303. package/build/vite-plugin/cjs/src/vite-plugin/types.cjs.map +0 -1
  304. package/build/vite-plugin/cjs/src/vite-plugin/types.d.ts +0 -60
  305. package/build/vite-plugin/cjs/src/vite-plugin/types.d.ts.map +0 -1
  306. package/build/vite-plugin/cjs/src/vite-plugin/virtual-modules.d.cjs +0 -2
  307. package/build/vite-plugin/cjs/src/vite-plugin/virtual-modules.d.cjs.map +0 -1
  308. package/build/vite-plugin/cjs/src/vite-plugin/virtualModule.cjs +0 -69
  309. package/build/vite-plugin/cjs/src/vite-plugin/virtualModule.cjs.map +0 -1
  310. package/build/vite-plugin/cjs/src/vite-plugin/virtualModule.d.ts +0 -3
  311. package/build/vite-plugin/cjs/src/vite-plugin/virtualModule.d.ts.map +0 -1
  312. package/build/vite-plugin/esm/index.js +0 -13
  313. package/build/vite-plugin/esm/index.js.map +0 -1
  314. package/build/vite-plugin/esm/src/pureFns/purityRules.d.ts +0 -5
  315. package/build/vite-plugin/esm/src/pureFns/purityRules.d.ts.map +0 -1
  316. package/build/vite-plugin/esm/src/pureFns/purityRules.js +0 -65
  317. package/build/vite-plugin/esm/src/pureFns/purityRules.js.map +0 -1
  318. package/build/vite-plugin/esm/src/vite-plugin/aotCacheGenerator.d.ts +0 -32
  319. package/build/vite-plugin/esm/src/vite-plugin/aotCacheGenerator.d.ts.map +0 -1
  320. package/build/vite-plugin/esm/src/vite-plugin/aotCacheGenerator.js +0 -271
  321. package/build/vite-plugin/esm/src/vite-plugin/aotCacheGenerator.js.map +0 -1
  322. package/build/vite-plugin/esm/src/vite-plugin/aotDiskCache.d.ts +0 -7
  323. package/build/vite-plugin/esm/src/vite-plugin/aotDiskCache.d.ts.map +0 -1
  324. package/build/vite-plugin/esm/src/vite-plugin/aotDiskCache.js +0 -134
  325. package/build/vite-plugin/esm/src/vite-plugin/aotDiskCache.js.map +0 -1
  326. package/build/vite-plugin/esm/src/vite-plugin/cjsPackageJsonPlugin.d.ts +0 -3
  327. package/build/vite-plugin/esm/src/vite-plugin/cjsPackageJsonPlugin.d.ts.map +0 -1
  328. package/build/vite-plugin/esm/src/vite-plugin/cjsPackageJsonPlugin.js +0 -15
  329. package/build/vite-plugin/esm/src/vite-plugin/cjsPackageJsonPlugin.js.map +0 -1
  330. package/build/vite-plugin/esm/src/vite-plugin/constants.d.ts +0 -13
  331. package/build/vite-plugin/esm/src/vite-plugin/constants.d.ts.map +0 -1
  332. package/build/vite-plugin/esm/src/vite-plugin/constants.js +0 -29
  333. package/build/vite-plugin/esm/src/vite-plugin/constants.js.map +0 -1
  334. package/build/vite-plugin/esm/src/vite-plugin/extractPureFn.d.ts +0 -14
  335. package/build/vite-plugin/esm/src/vite-plugin/extractPureFn.d.ts.map +0 -1
  336. package/build/vite-plugin/esm/src/vite-plugin/extractPureFn.js +0 -611
  337. package/build/vite-plugin/esm/src/vite-plugin/extractPureFn.js.map +0 -1
  338. package/build/vite-plugin/esm/src/vite-plugin/index.d.ts +0 -6
  339. package/build/vite-plugin/esm/src/vite-plugin/index.d.ts.map +0 -1
  340. package/build/vite-plugin/esm/src/vite-plugin/index.js +0 -13
  341. package/build/vite-plugin/esm/src/vite-plugin/index.js.map +0 -1
  342. package/build/vite-plugin/esm/src/vite-plugin/mionVitePlugin.d.ts +0 -37
  343. package/build/vite-plugin/esm/src/vite-plugin/mionVitePlugin.d.ts.map +0 -1
  344. package/build/vite-plugin/esm/src/vite-plugin/mionVitePlugin.js +0 -493
  345. package/build/vite-plugin/esm/src/vite-plugin/mionVitePlugin.js.map +0 -1
  346. package/build/vite-plugin/esm/src/vite-plugin/resolveModule.d.ts +0 -2
  347. package/build/vite-plugin/esm/src/vite-plugin/resolveModule.d.ts.map +0 -1
  348. package/build/vite-plugin/esm/src/vite-plugin/resolveModule.js +0 -33
  349. package/build/vite-plugin/esm/src/vite-plugin/resolveModule.js.map +0 -1
  350. package/build/vite-plugin/esm/src/vite-plugin/transformers.d.ts +0 -11
  351. package/build/vite-plugin/esm/src/vite-plugin/transformers.d.ts.map +0 -1
  352. package/build/vite-plugin/esm/src/vite-plugin/transformers.js +0 -149
  353. package/build/vite-plugin/esm/src/vite-plugin/transformers.js.map +0 -1
  354. package/build/vite-plugin/esm/src/vite-plugin/types.d.ts +0 -60
  355. package/build/vite-plugin/esm/src/vite-plugin/types.d.ts.map +0 -1
  356. package/build/vite-plugin/esm/src/vite-plugin/types.js +0 -2
  357. package/build/vite-plugin/esm/src/vite-plugin/types.js.map +0 -1
  358. package/build/vite-plugin/esm/src/vite-plugin/virtual-modules.d.js +0 -2
  359. package/build/vite-plugin/esm/src/vite-plugin/virtual-modules.d.js.map +0 -1
  360. package/build/vite-plugin/esm/src/vite-plugin/virtualModule.d.ts +0 -3
  361. package/build/vite-plugin/esm/src/vite-plugin/virtualModule.d.ts.map +0 -1
  362. package/build/vite-plugin/esm/src/vite-plugin/virtualModule.js +0 -69
  363. package/build/vite-plugin/esm/src/vite-plugin/virtualModule.js.map +0 -1
  364. package/src/eslint/index.ts +0 -53
  365. package/src/eslint/rules/enforce-type-imports.ts +0 -157
  366. package/src/eslint/rules/formatTypeNames.ts +0 -92
  367. package/src/eslint/rules/no-mixed-union-properties.ts +0 -276
  368. package/src/eslint/rules/no-type-imports.ts +0 -386
  369. package/src/eslint/rules/no-typeof-runtype.ts +0 -112
  370. package/src/eslint/rules/no-unreachable-union-types.ts +0 -357
  371. package/src/eslint/rules/no-vite-client.ts +0 -101
  372. package/src/eslint/rules/pure-functions.ts +0 -523
  373. package/src/eslint/rules/strong-typed-routes.ts +0 -537
  374. package/src/eslint/rules/type-formats-imports.ts +0 -73
  375. package/src/pureFns/purityRules.ts +0 -76
  376. package/src/vite-plugin/README.md +0 -399
  377. package/src/vite-plugin/aotCacheGenerator.ts +0 -397
  378. package/src/vite-plugin/aotDiskCache.ts +0 -193
  379. package/src/vite-plugin/cjsPackageJsonPlugin.ts +0 -21
  380. package/src/vite-plugin/constants.ts +0 -50
  381. package/src/vite-plugin/extractPureFn.ts +0 -845
  382. package/src/vite-plugin/index.ts +0 -27
  383. package/src/vite-plugin/mionVitePlugin.ts +0 -738
  384. package/src/vite-plugin/resolveModule.ts +0 -50
  385. package/src/vite-plugin/transformers.ts +0 -209
  386. package/src/vite-plugin/types.ts +0 -182
  387. package/src/vite-plugin/virtual-modules.d.ts +0 -48
  388. package/src/vite-plugin/virtualModule.ts +0 -94
@@ -1,738 +0,0 @@
1
- /* ########
2
- * 2026 mion
3
- * Author: Ma-jerez
4
- * License: MIT
5
- * The software is provided "as is", without warranty of any kind.
6
- * ######## */
7
-
8
- import {resolve} from 'path';
9
- import {createRequire} from 'module';
10
- import {existsSync} from 'fs';
11
- import * as ts from 'typescript';
12
- import {ChildProcess} from 'child_process';
13
- import {createDeepkitConfig, DeepkitConfig, createPureFnTransformerFactory} from './transformers.ts';
14
- import {ServerPureFunctionsOptions, ExtractedPureFn, DeepkitTypeOptions, AOTCacheOptions, MionServerConfig} from './types.ts';
15
- import {scanClientSource} from './extractPureFn.ts';
16
- import {generateServerPureFnsVirtualModule} from './virtualModule.ts';
17
- import {
18
- VIRTUAL_SERVER_PURE_FNS,
19
- REFLECTION_MODULES,
20
- VIRTUAL_STUB_PREFIX,
21
- VIRTUAL_AOT_CACHES,
22
- AOT_CACHES_SHIM,
23
- SERVER_PURE_FNS_SHIM,
24
- resolveVirtualId,
25
- } from './constants.ts';
26
- import {
27
- generateAOTCaches,
28
- loadSSRRouterAndGenerateAOTCaches,
29
- killPersistentChild,
30
- logAOTCaches,
31
- generateJitFnsModule,
32
- generatePureFnsModule,
33
- generateRouterCacheModule,
34
- generateCombinedCachesModule,
35
- generateNoopModule,
36
- generateNoopCombinedModule,
37
- AOTCacheData,
38
- } from './aotCacheGenerator.ts';
39
- import {getOrGenerateAOTCaches, updateDiskCache, resolveCacheDir} from './aotDiskCache.ts';
40
-
41
- export interface MionPluginOptions {
42
- /** Options for pure function extraction - omit to disable */
43
- serverPureFunctions?: ServerPureFunctionsOptions;
44
- /** Options for deepkit type transformation - omit to disable */
45
- runTypes?: DeepkitTypeOptions;
46
- /** Options for AOT cache generation - omit to disable */
47
- aotCaches?: AOTCacheOptions | true;
48
- /** Server configuration - controls how the server process is managed */
49
- server?: MionServerConfig;
50
- }
51
-
52
- /**
53
- * Creates the unified mion Vite plugin.
54
- * This plugin combines pure function extraction, type compiler transformations,
55
- * and AOT cache generation in a single plugin with correct execution order.
56
- *
57
- * Execution order:
58
- * 1. Extract pure functions from original TypeScript source
59
- * 2. Apply type metadata transformations to the code
60
- *
61
- * This ensures pure function extraction happens on clean, untransformed TypeScript.
62
- *
63
- * @example
64
- * ```ts
65
- * // vite.config.ts
66
- * import {mionVitePlugin} from '@mionjs/devtools/vite-plugin';
67
- *
68
- * export default defineConfig({
69
- * plugins: [
70
- * mionVitePlugin({
71
- * runTypes: {
72
- * tsConfig: './tsconfig.json',
73
- * },
74
- * server: {
75
- * startScript: '../server/src/init.ts',
76
- * runMode: 'buildOnly',
77
- * },
78
- * }),
79
- * ],
80
- * });
81
- * ```
82
- */
83
- export function mionVitePlugin(options: MionPluginOptions) {
84
- let extractedFns: ExtractedPureFn[] | null = null;
85
- const pureFnOptions = options.serverPureFunctions;
86
- const runTypesOptions = options.runTypes;
87
- const aotOptions: AOTCacheOptions | undefined = options.aotCaches === true ? {} : options.aotCaches;
88
- const serverConfig = options.server;
89
- const deepkitConfig: DeepkitConfig | null = runTypesOptions ? createDeepkitConfig(runTypesOptions) : null;
90
-
91
- // Default compiler options for when deepkit is disabled
92
- const defaultCompilerOptions: ts.CompilerOptions = {
93
- target: ts.ScriptTarget.ESNext,
94
- module: ts.ModuleKind.ESNext,
95
- sourceMap: true,
96
- };
97
-
98
- // Pure function injection counters — accumulated during transform, logged in buildEnd
99
- let pureServerFnCount = 0;
100
- let registerPureFnFactoryCount = 0;
101
- let pureFnFilesCount = 0;
102
-
103
- // AOT cache data - populated during buildStart (IPC) or configureServer (in-process)
104
- let aotData: AOTCacheData | null = null;
105
- let aotGenerationPromise: Promise<AOTCacheData> | null = null;
106
-
107
- // Resolved cache directory from Vite's config — set in configResolved
108
- let aotCacheDir = '';
109
-
110
- // SSR AOT: module loader (set in configureServer when SSR mode is active)
111
- let ssrLoadModule: ((url: string) => Promise<Record<string, any>>) | null = null;
112
- /** Whether SSR mode is active — resolved from server config */
113
- const ssrEnabled = serverConfig?.runMode === 'middleware';
114
- /** SSR init promise: AOT generation + router/platform module loading */
115
- let ssrInitPromise: Promise<void> | null = null;
116
-
117
- // Persistent child process for IPC mode
118
- let persistentChild: ChildProcess | null = null;
119
- let cleanupRegistered = false;
120
-
121
- const {aotVirtualModules, aotResolvedIds} = buildAOTVirtualModuleMaps(aotOptions?.customVirtualModuleId);
122
-
123
- /** Kill persistent child process and clear reference */
124
- async function cleanupChild() {
125
- if (persistentChild) {
126
- await killPersistentChild(persistentChild);
127
- persistentChild = null;
128
- }
129
- }
130
-
131
- /** Register process exit handlers (once) */
132
- function registerCleanupHandlers() {
133
- if (cleanupRegistered) return;
134
- cleanupRegistered = true;
135
- const onExit = () => {
136
- if (persistentChild && !persistentChild.killed) {
137
- persistentChild.kill('SIGTERM');
138
- persistentChild = null;
139
- }
140
- };
141
- process.on('exit', onExit);
142
- process.on('SIGINT', onExit);
143
- process.on('SIGTERM', onExit);
144
- }
145
-
146
- return {
147
- name: 'mion',
148
- enforce: 'pre' as const, // literal type required: inferred 'string' is not assignable to Vite's 'pre' | 'post'
149
-
150
- config(config, env) {
151
- // Strip reflection module aliases in bundle build mode so our resolveId can stub them.
152
- // Vite's alias plugin runs before our resolveId, so we remove aliases here to prevent
153
- // them from transforming bare package names into file paths before we can intercept.
154
- if (aotOptions?.excludeReflection && !isRunningAsChild()) {
155
- const aliases = config.resolve?.alias;
156
- if (aliases && !Array.isArray(aliases)) {
157
- for (const mod of REFLECTION_MODULES) {
158
- delete (aliases as Record<string, string>)[mod];
159
- }
160
- }
161
- }
162
-
163
- // Ensure Vite bundles shim modules instead of externalizing them
164
- const shimModules: string[] = [];
165
- if (pureFnOptions) shimModules.push(SERVER_PURE_FNS_SHIM);
166
- if (aotOptions) shimModules.push(AOT_CACHES_SHIM);
167
- addSsrNoExternal(config, shimModules);
168
-
169
- // Wrap build.rollupOptions.external so shim and virtual modules are never externalized
170
- if (env.command === 'build' && shimModules.length > 0) {
171
- wrapBuildExternal(config, shimModules);
172
- }
173
- },
174
-
175
- configResolved(config) {
176
- if (aotOptions) {
177
- aotCacheDir = resolveCacheDir(aotOptions, config.cacheDir);
178
- }
179
- },
180
-
181
- async buildStart() {
182
- // Generate AOT caches if server is configured
183
- // Skip when already running as a child process to prevent infinite recursion
184
- // Skip when SSR mode — configureServer will handle it
185
- if (serverConfig && !isRunningAsChild() && !ssrEnabled) {
186
- try {
187
- console.log('[mion] Generating AOT caches...');
188
- const resultPromise = getOrGenerateAOTCaches(serverConfig, aotOptions, aotCacheDir);
189
- aotGenerationPromise = resultPromise.then((r) => r.data);
190
- const result = await resultPromise;
191
- aotData = result.data;
192
- console.log('[mion] AOT caches generated successfully');
193
- logAOTCaches(aotData);
194
-
195
- // Store persistent child for IPC mode
196
- if (result.childProcess) {
197
- persistentChild = result.childProcess;
198
- registerCleanupHandlers();
199
- console.log(`[mion] Server process persisted (pid: ${persistentChild.pid})`);
200
- }
201
-
202
- // Non-blocking: wait for setPlatformConfig() IPC and resolve serverReady promise
203
- if (result.platformReady && serverConfig.waitTimeout && serverConfig.runMode === 'childProcess') {
204
- console.log('[mion] Waiting for server to call setPlatformConfig()...');
205
- const timeout = serverConfig.waitTimeout;
206
- const timeoutId = setTimeout(() => {
207
- if (result.childProcess?.connected) result.childProcess.disconnect();
208
- console.error(
209
- `[mion] Server did not call setPlatformConfig() within ${timeout / 1000}s. ` +
210
- `Ensure your platform adapter (startNodeServer, etc.) is called after initMionRouter().`
211
- );
212
- }, timeout);
213
- result.platformReady.then(() => {
214
- clearTimeout(timeoutId);
215
- if (result.childProcess?.connected) result.childProcess.disconnect();
216
- console.log('[mion] Server ready');
217
- onServerReady();
218
- });
219
- } else {
220
- // buildOnly mode or no waitTimeout: resolve immediately
221
- if (result.childProcess?.connected) result.childProcess.disconnect();
222
- onServerReady();
223
- }
224
- } catch (err) {
225
- const message = err instanceof Error ? err.message : String(err);
226
- throw new Error(`[mion] Failed to generate AOT caches: ${message}`);
227
- }
228
- }
229
- },
230
-
231
- configureServer(server) {
232
- if (!ssrEnabled || !serverConfig) return;
233
- // SSR mode: use ssrLoadModule to load the server in the same Vite process.
234
- // ssrLoadModule uses Vite's internal transform pipeline (not HTTP),
235
- ssrLoadModule = (url: string) => server.ssrLoadModule(url);
236
- const startScript = resolve(serverConfig.startScript);
237
- // Single init chain: generate AOT caches → load router + platform modules
238
- let nodeRequestHandler: ((req: any, res: any) => void) | null = null;
239
- let basePath: string | null = null;
240
- let initFailed = false;
241
-
242
- console.log('[mion] Generating SSR AOT caches...');
243
- ssrInitPromise = loadSSRRouterAndGenerateAOTCaches(ssrLoadModule, startScript, aotOptions?.isClient)
244
- .then(async (data) => {
245
- aotData = data;
246
- aotGenerationPromise = Promise.resolve(data);
247
- console.log('[mion] SSR AOT caches generated successfully');
248
- logAOTCaches(data);
249
- // Invalidate virtual modules so they reload with real data
250
- for (const resolvedId of aotResolvedIds.keys()) {
251
- const mod = server.moduleGraph.getModuleById(resolvedId);
252
- if (mod) server.moduleGraph.invalidateModule(mod);
253
- }
254
- // Load router and platform modules now that caches are ready
255
- const routerModule = await server.ssrLoadModule('@mionjs/router');
256
- const opts = routerModule.getRouterOptions();
257
- basePath = '/' + (opts.basePath || '').replace(/^\//, '');
258
- const platformNode = await server.ssrLoadModule('@mionjs/platform-node');
259
- nodeRequestHandler = platformNode.httpRequestHandler;
260
- console.log('[mion] Dev server proxy initialized');
261
- onServerReady();
262
- })
263
- .catch((err) => {
264
- initFailed = true;
265
- const message = err instanceof Error ? err.message : String(err);
266
- console.error(`[mion] Failed to initialize SSR: ${message}`);
267
- });
268
-
269
- // Dev server proxy: route matching requests to mion's httpRequestHandler
270
- server.middlewares.use(async (req: any, res: any, next: () => void) => {
271
- try {
272
- if (!basePath && !initFailed) await ssrInitPromise;
273
- if (!basePath || !req.url?.startsWith(basePath)) return next();
274
- if (nodeRequestHandler) {
275
- nodeRequestHandler(req, res);
276
- } else {
277
- res.statusCode = 503;
278
- res.end('mion API failed to initialize');
279
- }
280
- } catch (err) {
281
- console.error('[mion] Dev server proxy error:', err);
282
- if (!res.writableEnded) {
283
- res.statusCode = 500;
284
- res.end('Internal Server Error');
285
- }
286
- }
287
- });
288
- },
289
-
290
- resolveId(id, importer) {
291
- // Pure functions virtual module — always resolve, returns empty cache if not configured
292
- if (id === VIRTUAL_SERVER_PURE_FNS) return resolveVirtualId(id);
293
- // AOT virtual modules (default + custom prefix both resolve)
294
- if (aotVirtualModules.has(id)) return resolveVirtualId(id);
295
- // Resolve shim modules: intercept empty cache imports and replace with virtual modules
296
- if (aotOptions) {
297
- const resolved = resolveShimModule(
298
- id,
299
- importer,
300
- AOT_CACHES_SHIM,
301
- VIRTUAL_AOT_CACHES,
302
- 'aot-caches',
303
- 'aotCaches.ts',
304
- 'emptyCaches.ts'
305
- );
306
- if (resolved) return resolved;
307
- }
308
- if (pureFnOptions) {
309
- const resolved = resolveShimModule(
310
- id,
311
- importer,
312
- SERVER_PURE_FNS_SHIM,
313
- VIRTUAL_SERVER_PURE_FNS,
314
- 'server-pure-fns',
315
- 'serverPureFnsCaches.ts',
316
- 'emptyServerPureFns.ts'
317
- );
318
- if (resolved) return resolved;
319
- }
320
- // Stub out reflection modules in the bundle build (not needed at runtime in AOT mode)
321
- if (aotOptions?.excludeReflection && !isRunningAsChild() && REFLECTION_MODULES.includes(id)) {
322
- return resolveVirtualId(VIRTUAL_STUB_PREFIX + id);
323
- }
324
- return null;
325
- },
326
-
327
- async load(id) {
328
- // Pure functions virtual module
329
- if (id === resolveVirtualId(VIRTUAL_SERVER_PURE_FNS)) {
330
- // No serverPureFunctions configured — return empty cache
331
- if (!pureFnOptions) return generateServerPureFnsVirtualModule([]);
332
- // Lazily scan client source on first load
333
- if (!extractedFns) extractedFns = scanClientSource(pureFnOptions);
334
- return generateServerPureFnsVirtualModule(extractedFns);
335
- }
336
-
337
- // AOT virtual modules — check resolved ID against the map
338
- const aotType = aotResolvedIds.get(id);
339
- if (aotType) {
340
- const initPromise = ssrInitPromise || aotGenerationPromise;
341
- if (!aotData && initPromise) await initPromise;
342
-
343
- switch (aotType) {
344
- case 'jit-fns': {
345
- if (!aotData) return generateNoopModule('No-op: AOT JIT caches not generated');
346
- return generateJitFnsModule(aotData.jitFnsCode);
347
- }
348
- case 'pure-fns': {
349
- if (!aotData) return generateNoopModule('No-op: AOT pure fns not generated');
350
- return generatePureFnsModule(aotData.pureFnsCode);
351
- }
352
- case 'router-cache': {
353
- if (!aotData) return generateNoopModule('No-op: AOT router cache not generated');
354
- return generateRouterCacheModule(aotData.routerCacheCode);
355
- }
356
- case 'caches': {
357
- if (!aotData) return generateNoopCombinedModule();
358
- return generateCombinedCachesModule();
359
- }
360
- }
361
- }
362
-
363
- // Reflection module stubs (empty modules — all reflection is pre-compiled in AOT caches)
364
- // syntheticNamedExports tells Rollup to derive named exports from the default export,
365
- // so any `import {foo} from '...'` resolves to undefined without build errors.
366
- for (const mod of REFLECTION_MODULES) {
367
- if (id === resolveVirtualId(VIRTUAL_STUB_PREFIX + mod)) {
368
- return {code: 'export default {}', syntheticNamedExports: true};
369
- }
370
- }
371
-
372
- return null;
373
- },
374
-
375
- transform(code: string, fileName: string) {
376
- // For Vue SFC virtual modules, resolve the base path and lang for downstream tools
377
- const vueInfo = parseVueModuleId(fileName);
378
- // Strip any query params (e.g. ?macro=true from Nuxt) to get the real file path
379
- const basePath = fileName.includes('?') ? fileName.slice(0, fileName.indexOf('?')) : fileName;
380
-
381
- // Skip @mionjs build artifacts and Vite pre-bundled cache files — they already have
382
- // deepkit types and pure function metadata injected. Re-transpiling them through
383
- // ts.transpileModule would inject duplicate __assignType declarations.
384
- if (basePath.includes('@mionjs/') && (basePath.includes('/.dist/') || basePath.includes('/build/'))) return null;
385
- if (basePath.includes('/.cache/vite/') || basePath.includes('/.vite/deps/')) return null;
386
-
387
- const filterPath = vueInfo ? vueInfo.basePath : basePath;
388
-
389
- // Skip .vue files unless they are Vue script virtual modules (?vue&type=script).
390
- // Bare .vue files and other .vue queries (e.g. ?macro=true from Nuxt) contain raw
391
- // SFC content — wait for the Vue plugin to extract the <script> block first.
392
- if (basePath.endsWith('.vue') && !vueInfo) return null;
393
-
394
- const lang = vueInfo?.lang || 'ts';
395
- const tsFileName = vueInfo ? `${vueInfo.basePath}.${lang}` : fileName;
396
- const isTsx = tsFileName.endsWith('.tsx') || tsFileName.endsWith('.jsx');
397
-
398
- const hasPureFns =
399
- code.includes('pureServerFn') || code.includes('registerPureFnFactory') || code.includes('mapFrom');
400
- const needsDeepkit = deepkitConfig ? deepkitConfig.filter(filterPath) : false;
401
-
402
- if (!hasPureFns && !needsDeepkit) return null;
403
-
404
- const before: ts.CustomTransformerFactory[] = [];
405
- const after: ts.CustomTransformerFactory[] = [];
406
-
407
- // Pure function transformer (runs first — sees clean AST)
408
- const collected: ExtractedPureFn[] | undefined = hasPureFns ? [] : undefined;
409
- if (hasPureFns) {
410
- before.push(createPureFnTransformerFactory(code, tsFileName, collected, pureFnOptions?.noViteClient));
411
- }
412
-
413
- // Deepkit before-transformers emit type metadata and inject __assignType + CJS require().
414
- if (needsDeepkit) {
415
- before.push(...deepkitConfig!.beforeTransformers);
416
- }
417
-
418
- // After-transformers (declarationTransformer, requireToImport) must ALWAYS run when
419
- // deepkitConfig exists. Deepkit's install script patches typescript.js getTransformers()
420
- // to inject its transformer into every ts.transpileModule call — even for files outside
421
- // our include filter. Without requireToImport, those files end up with CJS require()
422
- // calls (with .ts extensions) that Rollup can't resolve, producing broken build output.
423
- if (deepkitConfig) {
424
- after.push(...deepkitConfig.afterTransformers);
425
- }
426
-
427
- const baseCompilerOptions = deepkitConfig?.compilerOptions ?? defaultCompilerOptions;
428
- const compilerOptions = isTsx ? {...baseCompilerOptions, jsx: ts.JsxEmit.ReactJSX} : baseCompilerOptions;
429
-
430
- const result = ts.transpileModule(code, {
431
- compilerOptions,
432
- fileName: tsFileName,
433
- transformers: {before, after},
434
- });
435
-
436
- // Count injected pure functions (collector is populated synchronously by transpileModule)
437
- if (collected && collected.length > 0) {
438
- pureFnFilesCount++;
439
- for (const fn of collected) {
440
- if (fn.isFactory) registerPureFnFactoryCount++;
441
- else pureServerFnCount++;
442
- }
443
- }
444
-
445
- // Strip the //# sourceMappingURL comment that ts.transpileModule appends —
446
- // Vite consumes the source map via the `map` property, not inline comments.
447
- const outputCode = result.outputText.replace(/\n\/\/# sourceMappingURL=.*$/, '');
448
- return {code: outputCode, map: result.sourceMapText};
449
- },
450
-
451
- buildEnd() {
452
- if (pureServerFnCount > 0 || registerPureFnFactoryCount > 0) {
453
- const total = pureServerFnCount + registerPureFnFactoryCount;
454
- const parts = [
455
- pureServerFnCount > 0 ? `${pureServerFnCount} pureServerFn` : '',
456
- registerPureFnFactoryCount > 0 ? `${registerPureFnFactoryCount} registerPureFnFactory` : '',
457
- ].filter(Boolean);
458
- console.log(`[mion] Injected ${total} pure functions across ${pureFnFilesCount} files (${parts.join(', ')})`);
459
- }
460
- },
461
-
462
- async closeBundle() {
463
- await cleanupChild();
464
- },
465
-
466
- handleHotUpdate({file, server}) {
467
- // In dev mode, re-scan when client source changes (for pure functions)
468
- if (pureFnOptions) {
469
- const clientSrcPath = resolve(pureFnOptions.clientSrcPath);
470
- if (file.startsWith(clientSrcPath)) {
471
- const include = pureFnOptions.include || ['**/*.ts', '**/*.tsx', '**/*.vue'];
472
- const exclude = pureFnOptions.exclude || ['../node_modules/**', '**/.dist/**', '**/dist/**'];
473
- if (isIncluded(file, include, exclude)) {
474
- // Clear cache and invalidate virtual module
475
- extractedFns = null;
476
- const mod = server.moduleGraph.getModuleById(resolveVirtualId(VIRTUAL_SERVER_PURE_FNS));
477
- if (mod) {
478
- server.moduleGraph.invalidateModule(mod);
479
- return [mod];
480
- }
481
- }
482
- }
483
- }
484
-
485
- // In dev mode, regenerate AOT caches when server source changes
486
- // Skip when running as a child process
487
- if (serverConfig && !isRunningAsChild()) {
488
- const serverDir = resolve(serverConfig.startScript, '..');
489
-
490
- if (file.startsWith(serverDir)) {
491
- // Kill existing persistent child before regenerating
492
- const killPromise = cleanupChild();
493
-
494
- const regeneratePromise =
495
- ssrEnabled && ssrLoadModule
496
- ? // SSR mode: reset router and re-init via ssrLoadModule
497
- (async () => {
498
- const routerModule = await ssrLoadModule!('@mionjs/router');
499
- routerModule.resetRouter();
500
- return loadSSRRouterAndGenerateAOTCaches(
501
- ssrLoadModule!,
502
- resolve(serverConfig.startScript),
503
- aotOptions?.isClient
504
- );
505
- })()
506
- : // IPC mode: wait for old child to die, then spawn new
507
- killPromise.then(() => generateAOTCaches(serverConfig, undefined, aotOptions?.isClient));
508
-
509
- aotGenerationPromise = regeneratePromise.then((r) => ('data' in r ? r.data : r));
510
- regeneratePromise
511
- .then((result) => {
512
- const data = 'data' in result ? result.data : result;
513
- aotData = data;
514
- logAOTCaches(data);
515
-
516
- // Store new persistent child if IPC mode
517
- if ('childProcess' in result && result.childProcess) {
518
- persistentChild = result.childProcess;
519
- console.log(`[mion] Server process re-persisted (pid: ${persistentChild!.pid})`);
520
- }
521
-
522
- // Non-blocking: wait for setPlatformConfig() IPC from restarted server
523
- const platformReady = 'platformReady' in result ? result.platformReady : undefined;
524
- if (platformReady && serverConfig.waitTimeout && serverConfig.runMode === 'childProcess') {
525
- const timeout = serverConfig.waitTimeout;
526
- console.log('[mion] Waiting for restarted server to call setPlatformConfig()...');
527
- const timeoutId = setTimeout(() => {
528
- if (persistentChild?.connected) persistentChild.disconnect();
529
- console.error(
530
- `[mion] Restarted server did not call setPlatformConfig() within ${timeout / 1000}s.`
531
- );
532
- }, timeout);
533
- platformReady.then(() => {
534
- clearTimeout(timeoutId);
535
- if (persistentChild?.connected) persistentChild.disconnect();
536
- console.log('[mion] Restarted server ready');
537
- onServerReady();
538
- });
539
- } else if ('childProcess' in result && result.childProcess?.connected) {
540
- result.childProcess.disconnect();
541
- }
542
-
543
- if (!ssrEnabled) updateDiskCache(serverConfig, aotOptions, data, aotCacheDir);
544
- // Invalidate all AOT virtual modules
545
- let invalidatedCount = 0;
546
- for (const resolvedId of aotResolvedIds.keys()) {
547
- const mod = server.moduleGraph.getModuleById(resolvedId);
548
- if (mod) {
549
- server.moduleGraph.invalidateModule(mod);
550
- invalidatedCount++;
551
- }
552
- }
553
- if (invalidatedCount > 0) {
554
- console.log('[mion] AOT caches regenerated, invalidating virtual modules');
555
- }
556
- })
557
- .catch((err) => {
558
- console.error('[mion] Failed to regenerate AOT caches:', err.message);
559
- });
560
- }
561
- }
562
-
563
- return undefined;
564
- },
565
- };
566
- }
567
-
568
- /** Whether the current process is a child spawned by the mion plugin */
569
- function isRunningAsChild(): boolean {
570
- return process.env.MION_COMPILE === 'buildOnly' || process.env.MION_COMPILE === 'childProcess';
571
- }
572
-
573
- /** Extracts the base file path and lang from a Vue SFC virtual module ID (e.g. Component.vue?vue&type=script&lang=ts) */
574
- export function parseVueModuleId(id: string): {basePath: string; lang: string | null} | null {
575
- const qIdx = id.indexOf('?');
576
- if (qIdx === -1) return null;
577
- const basePath = id.slice(0, qIdx);
578
- if (!basePath.endsWith('.vue')) return null;
579
- const params = new URLSearchParams(id.slice(qIdx));
580
- if (!params.has('vue') || params.get('type') !== 'script') return null;
581
- return {basePath, lang: params.get('lang')};
582
- }
583
-
584
- /** Checks if a file path matches the include/exclude patterns */
585
- export function isIncluded(filePath: string, include: string[], exclude: string[]): boolean {
586
- // For Vue virtual module IDs, use the base .vue path for matching
587
- const vueInfo = parseVueModuleId(filePath);
588
- const effectivePath = vueInfo ? vueInfo.basePath : filePath;
589
-
590
- const isTs = /\.(ts|tsx|js|jsx)$/.test(effectivePath);
591
- const isVue = effectivePath.endsWith('.vue');
592
- const isDir = effectivePath.endsWith('/');
593
- if (!isTs && !isVue && !isDir) return false;
594
-
595
- // Check exclude patterns
596
- for (const pattern of exclude) {
597
- if (matchGlob(effectivePath, pattern)) return false;
598
- }
599
-
600
- return true;
601
- }
602
-
603
- /** Simple glob matching for common patterns */
604
- function matchGlob(filePath: string, pattern: string): boolean {
605
- // Handle **/ prefix
606
- if (pattern.startsWith('**/')) {
607
- const suffix = pattern.slice(3);
608
- return filePath.includes(suffix.replace(/\*/g, ''));
609
- }
610
- // Handle simple wildcard
611
- const regex = new RegExp('^' + pattern.replace(/\*\*/g, '.*').replace(/\*/g, '[^/]*') + '$');
612
- return regex.test(filePath);
613
- }
614
-
615
- /** AOT virtual module types — each maps to a different cache export */
616
- const AOT_MODULE_TYPES = ['jit-fns', 'pure-fns', 'router-cache', 'caches'] as const;
617
- type AOTModuleType = (typeof AOT_MODULE_TYPES)[number];
618
-
619
- /** Builds maps from virtual module names → AOT type for resolveId and load hooks.
620
- * Default 'virtual:mion-aot/*' is always registered. If customVirtualModuleId is set,
621
- * 'virtual:${custom}/*' is also registered — both map to the same cache data. */
622
- function buildAOTVirtualModuleMaps(customVirtualModuleId?: string) {
623
- const aotVirtualModules = new Map<string, AOTModuleType>();
624
- const aotResolvedIds = new Map<string, AOTModuleType>();
625
- for (const type of AOT_MODULE_TYPES) {
626
- const defaultId = `virtual:mion-aot/${type}`;
627
- aotVirtualModules.set(defaultId, type);
628
- aotResolvedIds.set(resolveVirtualId(defaultId), type);
629
- if (customVirtualModuleId) {
630
- const customId = `virtual:${customVirtualModuleId}/${type}`;
631
- aotVirtualModules.set(customId, type);
632
- aotResolvedIds.set(resolveVirtualId(customId), type);
633
- }
634
- }
635
- return {aotVirtualModules, aotResolvedIds};
636
- }
637
-
638
- /**
639
- * Resolves a shim module (e.g. @mionjs/core/aot-caches) to its source file,
640
- * and intercepts the empty cache import to replace it with the virtual module.
641
- * Returns the resolved id or null if no match.
642
- */
643
- function resolveShimModule(
644
- id: string,
645
- importer: string | undefined,
646
- shimSpecifier: string,
647
- virtualModuleId: string,
648
- entryName: string,
649
- sourceFileName: string,
650
- emptyFileName: string
651
- ): string | null {
652
- // Bare specifier: resolve to the TS source file so Vite can process it through the plugin pipeline.
653
- // Using createRequire would return CJS built output whose require() calls bypass resolveId.
654
- if (id === shimSpecifier) {
655
- try {
656
- // Resolve the package directory via Node resolution, then find the source file
657
- const resolved = createRequire(import.meta.url).resolve(shimSpecifier);
658
- const sourceFile = resolve(resolved.replace(/[/\\].dist[/\\].*$/, ''), 'src/aot/' + sourceFileName);
659
- if (existsSync(sourceFile)) return sourceFile;
660
- // No source file (tarball/npm install) — resolve to virtual module directly.
661
- // Returning the .dist path would bypass resolveId (CJS require() calls skip Vite pipeline).
662
- return resolveVirtualId(virtualModuleId);
663
- } catch {
664
- return resolveVirtualId(virtualModuleId);
665
- }
666
- }
667
- // Alias-resolved absolute path (monorepo dev where source files always exist)
668
- if (id.endsWith('/' + entryName)) {
669
- const sourceFile = resolve(id, '..', 'src/aot/' + sourceFileName);
670
- if (existsSync(sourceFile)) return sourceFile;
671
- }
672
- // Intercept empty cache imports from the shim loader file (any extension)
673
- const emptyBase = emptyFileName.replace('.ts', '');
674
- const sourceBase = sourceFileName.replace('.ts', '');
675
- if (
676
- new RegExp(`${emptyBase}\\.(ts|js|mjs|cjs)$`).test(id) &&
677
- importer &&
678
- new RegExp(`${sourceBase}\\.(ts|js|mjs|cjs)$`).test(importer)
679
- ) {
680
- return resolveVirtualId(virtualModuleId);
681
- }
682
- return null;
683
- }
684
-
685
- /** Adds module specifiers to Vite's ssr.noExternal so they are bundled instead of externalized. */
686
- function addSsrNoExternal(config: Record<string, any>, moduleIds: string[]): void {
687
- if (moduleIds.length === 0) return;
688
- const noExternal = config.ssr?.noExternal;
689
- if (!config.ssr) config.ssr = {};
690
- if (Array.isArray(noExternal)) {
691
- for (const moduleId of moduleIds) {
692
- if (!noExternal.includes(moduleId)) noExternal.push(moduleId);
693
- }
694
- } else if (typeof noExternal === 'string') {
695
- config.ssr.noExternal = [noExternal, ...moduleIds];
696
- } else if (noExternal !== true) {
697
- config.ssr.noExternal = noExternal ? [noExternal, ...moduleIds] : [...moduleIds];
698
- }
699
- }
700
-
701
- /** Wraps build.rollupOptions.external so shim and virtual modules are always bundled. */
702
- function wrapBuildExternal(config: Record<string, any>, shimModules: string[]): void {
703
- if (!config.build) config.build = {};
704
- if (!config.build.rollupOptions) config.build.rollupOptions = {};
705
- const original = config.build.rollupOptions.external;
706
- if (!original) return; // no external config — nothing to wrap
707
- config.build.rollupOptions.external = (id: string, ...rest: any[]) => {
708
- // Never externalize shim modules or virtual modules (plugin replaces them with generated code)
709
- if (shimModules.includes(id) || id.startsWith('virtual:mion')) return false;
710
- // Delegate to original external config
711
- if (typeof original === 'function') return original(id, ...rest);
712
- if (Array.isArray(original)) return original.some((ext) => (ext instanceof RegExp ? ext.test(id) : ext === id));
713
- if (original instanceof RegExp) return original.test(id);
714
- return original === id;
715
- };
716
- }
717
-
718
- // #################### SERVER READY ####################
719
-
720
- // Uses globalThis with Symbol.for because vitest loads vitest.config.ts and globalSetup.ts
721
- // in separate module contexts — without globalThis they'd get different promise instances.
722
- const READY_KEY = Symbol.for('mion.serverReady');
723
- function getOrCreateServerReady(): {promise: Promise<void>; resolve: () => void} {
724
- if (!(globalThis as any)[READY_KEY]) {
725
- let _resolve: () => void;
726
- (globalThis as any)[READY_KEY] = {
727
- promise: new Promise<void>((r) => {
728
- _resolve = r;
729
- }),
730
- resolve: () => _resolve(),
731
- };
732
- }
733
- return (globalThis as any)[READY_KEY];
734
- }
735
-
736
- /** Promise that resolves when the server is ready. Await this in vitest globalSetup. */
737
- export const serverReady: Promise<void> = getOrCreateServerReady().promise;
738
- const onServerReady: () => void = getOrCreateServerReady().resolve;