@mionjs/devtools 0.8.10 → 0.13.2

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
@@ -0,0 +1,142 @@
1
+ import path from 'node:path';
2
+ import { createRequire } from 'node:module';
3
+ const MARKER_PROBE = /['"]@mionjs\/|registerPureFn/;
4
+ const BLOCK_SPLIT = '\n// #mion-sfc-block\n';
5
+ const VUE_PLUGIN_NAME = 'vite:vue';
6
+ export function createVirtualSiteMap() {
7
+ const toReal = new Map();
8
+ const key = (file) => file.replace(/\\/g, '/');
9
+ return {
10
+ register(virtualPath, realFile) {
11
+ toReal.set(key(virtualPath), realFile);
12
+ },
13
+ resolve(siteFile) {
14
+ return toReal.get(key(siteFile));
15
+ },
16
+ };
17
+ }
18
+ export function mionSfcPlugins(rt, inject = true, virtualSites) {
19
+ let root = '';
20
+ let vuePlugins = [];
21
+ let fallbackCompiler;
22
+ const warned = new Set();
23
+ const injected = new Set();
24
+ const warnOnce = (key, message) => {
25
+ if (warned.has(key))
26
+ return;
27
+ warned.add(key);
28
+ console.warn(`[mion] ${message}`);
29
+ };
30
+ const resolveCompiler = () => {
31
+ for (const plugin of vuePlugins) {
32
+ const compiler = plugin.api?.options?.compiler;
33
+ if (compiler?.parse)
34
+ return compiler;
35
+ }
36
+ if (fallbackCompiler)
37
+ return fallbackCompiler;
38
+ try {
39
+ const require = createRequire(path.join(root || process.cwd(), 'index.js'));
40
+ fallbackCompiler = require('vue/compiler-sfc');
41
+ }
42
+ catch {
43
+ return undefined;
44
+ }
45
+ return fallbackCompiler;
46
+ };
47
+ async function injectFns(ctx, source, virtualPath) {
48
+ const plugin = rt;
49
+ const absorb = plugin?.rtHotUpdate;
50
+ const legacyRegister = plugin?.handleHotUpdate ?? plugin?.vite?.handleHotUpdate;
51
+ if ((typeof absorb !== 'function' && typeof legacyRegister !== 'function') || typeof plugin?.transform !== 'function') {
52
+ warnOnce('no-delegate', `the mion plugin exposes no transform/rtHotUpdate — Vue SFCs cannot be type-transformed.`);
53
+ return undefined;
54
+ }
55
+ if (typeof absorb === 'function')
56
+ await absorb(ctx, [{ file: virtualPath, content: source }]);
57
+ else
58
+ await legacyRegister.call(ctx, { file: virtualPath, read: async () => source, modules: [], timestamp: 0 });
59
+ const result = await plugin.transform.call(ctx, source, virtualPath);
60
+ const code = typeof result === 'string' ? result : result?.code;
61
+ return typeof code === 'string' ? foldImportBlock(source, code) : undefined;
62
+ }
63
+ const injector = {
64
+ name: 'mion-sfc',
65
+ enforce: 'pre',
66
+ configResolved(config) {
67
+ root = config.root;
68
+ vuePlugins = config.plugins.filter((plugin) => plugin.name === VUE_PLUGIN_NAME);
69
+ },
70
+ async transform(code, id) {
71
+ const file = bareVueFile(id);
72
+ if (!file || !MARKER_PROBE.test(code))
73
+ return null;
74
+ const relative = path.relative(root, file);
75
+ if (relative.startsWith('..') || path.isAbsolute(relative)) {
76
+ warnOnce(file, `${file} is outside the vite root, so its typed mion code cannot be transformed.`);
77
+ return null;
78
+ }
79
+ const compiler = resolveCompiler();
80
+ if (!compiler) {
81
+ warnOnce('no-compiler', `@vue/compiler-sfc is not resolvable, so typed mion code in .vue files is NOT transformed.`);
82
+ return null;
83
+ }
84
+ const { descriptor } = compiler.parse(code, { filename: file });
85
+ const blocks = [descriptor.script, descriptor.scriptSetup].filter((b) => !!b && !b.src);
86
+ if (!blocks.length)
87
+ return null;
88
+ const lang = blocks.find((block) => block.lang)?.lang ?? 'js';
89
+ const virtualPath = `${file}.${lang}`;
90
+ virtualSites?.register(virtualPath, file);
91
+ const source = blocks.map((block) => block.content).join(BLOCK_SPLIT);
92
+ const result = await injectFns(this, source, virtualPath);
93
+ if (!result)
94
+ return null;
95
+ const parts = result.split(BLOCK_SPLIT);
96
+ if (parts.length !== blocks.length) {
97
+ warnOnce(`${file}:split`, `could not map the transformed script back onto ${file} — leaving it untransformed.`);
98
+ return null;
99
+ }
100
+ let next = code;
101
+ for (let index = blocks.length - 1; index >= 0; index--) {
102
+ const block = blocks[index];
103
+ next = next.slice(0, block.loc.start.offset) + parts[index] + next.slice(block.loc.end.offset);
104
+ }
105
+ injected.add(file);
106
+ return { code: next, map: null };
107
+ },
108
+ };
109
+ const audit = {
110
+ name: 'mion-sfc-audit',
111
+ enforce: 'post',
112
+ transform(code, id) {
113
+ const file = bareVueFile(id);
114
+ if (!file || injected.has(file) || !MARKER_PROBE.test(code))
115
+ return null;
116
+ if (code.includes('__rt_'))
117
+ return null;
118
+ warnOnce(`${file}:audit`, `${file} calls a mion marker but was compiled WITHOUT its generated functions. ` +
119
+ `They would fail at runtime. Make sure @vitejs/plugin-vue is in this vite config and that no ` +
120
+ `plugin transforms .vue files before mion does.`);
121
+ return null;
122
+ },
123
+ };
124
+ return inject ? [injector, audit] : [audit];
125
+ }
126
+ function bareVueFile(id) {
127
+ const [file, query] = id.split('?');
128
+ if (query !== undefined || !file.endsWith('.vue'))
129
+ return undefined;
130
+ return file;
131
+ }
132
+ function foldImportBlock(source, transformed) {
133
+ const extra = transformed.split('\n').length - source.split('\n').length;
134
+ if (extra <= 0)
135
+ return transformed;
136
+ const lines = transformed.split('\n');
137
+ const importBlock = lines.slice(0, extra).join(' ');
138
+ const rest = lines.slice(extra);
139
+ rest[0] = `${importBlock} ${rest[0]}`;
140
+ return rest.join('\n');
141
+ }
142
+ //# sourceMappingURL=sfcTransform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sfcTransform.js","sourceRoot":"","sources":["../../src/vite/sfcTransform.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ {
2
+ "jsPlugins": [
3
+ "./dist/lint/index.js"
4
+ ],
5
+ "rules": {
6
+ "mion/error": "error",
7
+ "mion/runtime-error": "error",
8
+ "mion/warning": "warn",
9
+ "mion/info": "off"
10
+ }
11
+ }
package/package.json CHANGED
@@ -1,96 +1,131 @@
1
1
  {
2
2
  "name": "@mionjs/devtools",
3
- "version": "0.8.10",
4
- "description": "Development tooling for mion (ESLint plugin and Vite plugin).",
3
+ "version": "0.13.2",
4
+ "description": "mion devtools: the build transform (Vite/Rollup/Rolldown/webpack/Rspack/esbuild/Bun/Next-Turbopack) that rewrites mion RunTypes marker calls, the mion Vite and Next presets, and the OXlint/ESLint plugin.",
5
5
  "type": "module",
6
+ "license": "MIT",
7
+ "author": "ma jerez",
6
8
  "keywords": [
7
9
  "typescript",
8
- "eslint",
9
10
  "vite",
11
+ "next",
12
+ "turbopack",
13
+ "eslint",
14
+ "oxlint",
10
15
  "plugin",
11
16
  "codegen",
12
- "AOT",
13
17
  "mion"
14
18
  ],
15
- "author": "ma jerez",
16
- "homepage": "https://mion.io/",
17
- "license": "MIT",
19
+ "main": "./dist/index.js",
20
+ "types": "./dist/index.d.ts",
18
21
  "exports": {
19
22
  ".": {
20
- "source": "./src/eslint/index.ts",
21
- "types": "./build/eslint/esm/index.d.ts",
22
- "import": "./build/eslint/esm/index.js",
23
- "require": "./build/eslint/cjs/index.cjs"
23
+ "types": "./dist/index.d.ts",
24
+ "import": "./dist/index.js"
25
+ },
26
+ "./unplugin": {
27
+ "types": "./dist/core/unplugin.d.ts",
28
+ "import": "./dist/core/unplugin.js"
29
+ },
30
+ "./vite": {
31
+ "types": "./dist/vite/index.d.ts",
32
+ "import": "./dist/vite/index.js"
33
+ },
34
+ "./next": {
35
+ "types": "./dist/next/index.d.ts",
36
+ "import": "./dist/next/index.js"
24
37
  },
25
38
  "./eslint": {
26
- "source": "./src/eslint/index.ts",
27
- "types": "./build/eslint/esm/index.d.ts",
28
- "import": "./build/eslint/esm/index.js",
29
- "require": "./build/eslint/cjs/index.cjs"
39
+ "types": "./dist/lint/index.d.ts",
40
+ "import": "./dist/lint/index.js"
41
+ },
42
+ "./oxlint": {
43
+ "types": "./dist/lint/index.d.ts",
44
+ "import": "./dist/lint/index.js"
45
+ },
46
+ "./runtypes/vite": {
47
+ "types": "./dist/runtypes/vite.d.ts",
48
+ "import": "./dist/runtypes/vite.js"
49
+ },
50
+ "./runtypes/rollup": {
51
+ "types": "./dist/runtypes/rollup.d.ts",
52
+ "import": "./dist/runtypes/rollup.js"
53
+ },
54
+ "./runtypes/rolldown": {
55
+ "types": "./dist/runtypes/rolldown.d.ts",
56
+ "import": "./dist/runtypes/rolldown.js"
57
+ },
58
+ "./runtypes/webpack": {
59
+ "types": "./dist/runtypes/webpack.d.ts",
60
+ "import": "./dist/runtypes/webpack.js"
61
+ },
62
+ "./runtypes/rspack": {
63
+ "types": "./dist/runtypes/rspack.d.ts",
64
+ "import": "./dist/runtypes/rspack.js"
65
+ },
66
+ "./runtypes/esbuild": {
67
+ "types": "./dist/runtypes/esbuild.d.ts",
68
+ "import": "./dist/runtypes/esbuild.js"
30
69
  },
31
- "./vite-plugin": {
32
- "source": "./src/vite-plugin/index.ts",
33
- "types": "./build/vite-plugin/esm/src/vite-plugin/index.d.ts",
34
- "import": "./build/vite-plugin/esm/index.js",
35
- "require": "./build/vite-plugin/cjs/index.cjs"
70
+ "./runtypes/bun": {
71
+ "types": "./dist/runtypes/bun.d.ts",
72
+ "import": "./dist/runtypes/bun.js"
36
73
  },
37
- "./virtual-modules": {
38
- "types": "./src/vite-plugin/virtual-modules.d.ts"
74
+ "./runtypes/next": {
75
+ "types": "./dist/runtypes/next/index.d.ts",
76
+ "import": "./dist/runtypes/next/index.js"
77
+ },
78
+ "./runtypes/next/loader": {
79
+ "types": "./dist/runtypes/next/loader.d.ts",
80
+ "default": "./dist/runtypes/next/loader.js"
39
81
  }
40
82
  },
41
- "directories": {
42
- "lib": "build"
43
- },
44
83
  "files": [
45
- "build",
46
- "src",
47
- "!src/**/*.spec.ts",
48
- "!src/**/*.test.ts"
84
+ "dist",
85
+ "!dist/**/*.tsbuildinfo",
86
+ "!dist/**/*.d.ts.map",
87
+ "oxlint-recommended.json",
88
+ "README.md"
49
89
  ],
50
- "repository": {
51
- "type": "git",
52
- "url": "git+https://github.com/MionKit/mion.git"
53
- },
54
90
  "publishConfig": {
55
91
  "access": "public"
56
92
  },
57
- "scripts": {
58
- "test": "vitest run",
59
- "dev": "npm run build:eslint && npm run build:vite-plugin -- --watch",
60
- "dev:test": "vitest watch",
61
- "lint": "npx eslint src",
62
- "format": "prettier --write src/**/*.ts",
63
- "build": "npm run build:eslint && npm run build:vite-plugin && npm run clean:aot-caches",
64
- "clean:aot-caches": "find .. -name mion-aot-cache.json -path '*/node_modules/.vite/*' -delete 2>/dev/null; true",
65
- "build:eslint": "vite build --config vite.eslint.config.ts",
66
- "build:vite-plugin": "vite build --config vite.vite-plugin.config.ts",
67
- "clean": "rimraf .dist && rimraf .coverage && npm run clean:aot-caches",
68
- "fresh-start": "npm run clean && rimraf node_modules"
69
- },
93
+ "homepage": "https://mion.pages.dev",
70
94
  "bugs": {
71
95
  "url": "https://github.com/MionKit/mion/issues"
72
96
  },
97
+ "repository": {
98
+ "type": "git",
99
+ "url": "git+https://github.com/MionKit/mion.git",
100
+ "directory": "packages/devtools"
101
+ },
73
102
  "dependencies": {
74
- "@deepkit/type-compiler": "1.0.19",
75
- "@rollup/pluginutils": "^5.1.0",
76
- "@typescript-eslint/utils": "^8.17.0",
77
- "vite-node": "^5.3.0",
78
- "vite-plugin-dts": "^4.5.4"
103
+ "unplugin": "3.3.0"
79
104
  },
80
105
  "peerDependencies": {
81
106
  "typescript": ">=6.0.0",
82
- "vite": ">=6.0.0"
107
+ "vite": ">=5.0.0",
108
+ "@mionjs/bin-compiler": "0.13.2"
83
109
  },
84
110
  "peerDependenciesMeta": {
85
111
  "typescript": {
86
- "optional": false
112
+ "optional": true
87
113
  },
88
114
  "vite": {
89
115
  "optional": true
90
116
  }
91
117
  },
92
118
  "devDependencies": {
93
- "@typescript-eslint/rule-tester": "^8.17.0"
119
+ "vite": "8.0.16",
120
+ "@mionjs/bin-compiler": "0.13.2"
94
121
  },
95
- "gitHead": "3e2b3b633ceb0b054fc1f1aad914d779ddd6c8b0"
96
- }
122
+ "scripts": {
123
+ "build": "tsc --build tsconfig.build.json",
124
+ "typecheck:test": "tsc -p tsconfig.json --noEmit",
125
+ "pretest": "node ../../scripts/miondevx.mjs core build --trust-stamp",
126
+ "test": "vitest run",
127
+ "dev:test": "vitest watch",
128
+ "clean": "node ../../scripts/lib/rmrf.mjs dist .dist .coverage .mion tsconfig.build.tsbuildinfo tsconfig.tsbuildinfo",
129
+ "fresh-start": "pnpm run clean && node ../../scripts/lib/rmrf.mjs node_modules"
130
+ }
131
+ }
@@ -1,41 +0,0 @@
1
- "use strict";
2
- const src_eslint_rules_noTypeofRuntype = require("./src/eslint/rules/no-typeof-runtype.cjs");
3
- const src_eslint_rules_strongTypedRoutes = require("./src/eslint/rules/strong-typed-routes.cjs");
4
- const src_eslint_rules_noUnreachableUnionTypes = require("./src/eslint/rules/no-unreachable-union-types.cjs");
5
- const src_eslint_rules_noMixedUnionProperties = require("./src/eslint/rules/no-mixed-union-properties.cjs");
6
- const src_eslint_rules_noTypeImports = require("./src/eslint/rules/no-type-imports.cjs");
7
- const src_eslint_rules_pureFunctions = require("./src/eslint/rules/pure-functions.cjs");
8
- const src_eslint_rules_noViteClient = require("./src/eslint/rules/no-vite-client.cjs");
9
- const src_eslint_rules_typeFormatsImports = require("./src/eslint/rules/type-formats-imports.cjs");
10
- const src_eslint_rules_enforceTypeImports = require("./src/eslint/rules/enforce-type-imports.cjs");
11
- const plugin = {
12
- rules: {
13
- "no-typeof-runtype": src_eslint_rules_noTypeofRuntype,
14
- "strong-typed-routes": src_eslint_rules_strongTypedRoutes,
15
- "no-unreachable-union-types": src_eslint_rules_noUnreachableUnionTypes,
16
- "no-mixed-union-properties": src_eslint_rules_noMixedUnionProperties,
17
- "no-type-imports": src_eslint_rules_noTypeImports,
18
- "pure-functions": src_eslint_rules_pureFunctions,
19
- "no-vite-client": src_eslint_rules_noViteClient,
20
- "type-formats-imports": src_eslint_rules_typeFormatsImports,
21
- "enforce-type-imports": src_eslint_rules_enforceTypeImports
22
- },
23
- configs: {}
24
- };
25
- plugin.configs.recommended = {
26
- plugins: {
27
- "@mionjs": plugin
28
- },
29
- rules: {
30
- "@mionjs/no-typeof-runtype": "error",
31
- "@mionjs/strong-typed-routes": "error",
32
- "@mionjs/no-unreachable-union-types": "error",
33
- "@mionjs/no-type-imports": "error",
34
- "@mionjs/pure-functions": "error",
35
- "@mionjs/type-formats-imports": "error"
36
- // disabled as seems is not too useful and overlaps with some ts rules
37
- // '@mionjs/no-mixed-union-properties': 'warn',
38
- }
39
- };
40
- module.exports = plugin;
41
- //# sourceMappingURL=index.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../src/eslint/index.ts"],"sourcesContent":["/* ########\n * 2024 mion\n * Author: Ma-jerez\n * License: MIT\n * The software is provided \"as is\", without warranty of any kind.\n * ######## */\n\nimport type {ESLint, Linter} from 'eslint';\nimport noTypeofRunType from './rules/no-typeof-runtype.ts';\nimport strongTypedRoutes from './rules/strong-typed-routes.ts';\nimport noUnreachableUnionTypes from './rules/no-unreachable-union-types.ts';\nimport noMixedUnionProperties from './rules/no-mixed-union-properties.ts';\nimport noTypeImports from './rules/no-type-imports.ts';\nimport pureFunctions from './rules/pure-functions.ts';\nimport noViteClient from './rules/no-vite-client.ts';\nimport typeFormatsImports from './rules/type-formats-imports.ts';\nimport enforceTypeImports from './rules/enforce-type-imports.ts';\n\n// configs is set outside the initial object due to circular reference: recommended config references the plugin itself.\nconst plugin: ESLint.Plugin = {\n rules: {\n 'no-typeof-runtype': noTypeofRunType,\n 'strong-typed-routes': strongTypedRoutes,\n 'no-unreachable-union-types': noUnreachableUnionTypes,\n 'no-mixed-union-properties': noMixedUnionProperties,\n 'no-type-imports': noTypeImports,\n 'pure-functions': pureFunctions,\n 'no-vite-client': noViteClient,\n 'type-formats-imports': typeFormatsImports,\n 'enforce-type-imports': enforceTypeImports,\n } as unknown as ESLint.Plugin['rules'],\n configs: {},\n};\n\n// Flat config preset: self-contained with plugin registration and recommended rules.\n// Usage: import mionESLintPlugin from '@mionjs/devtools/eslint'; ... mionESLintPlugin.configs.recommended\nplugin.configs!.recommended = {\n plugins: {\n '@mionjs': plugin,\n },\n rules: {\n '@mionjs/no-typeof-runtype': 'error',\n '@mionjs/strong-typed-routes': 'error',\n '@mionjs/no-unreachable-union-types': 'error',\n '@mionjs/no-type-imports': 'error',\n '@mionjs/pure-functions': 'error',\n '@mionjs/type-formats-imports': 'error',\n // disabled as seems is not too useful and overlaps with some ts rules\n // '@mionjs/no-mixed-union-properties': 'warn',\n },\n} satisfies Linter.Config;\n\nexport default plugin;\n"],"names":["noTypeofRunType","strongTypedRoutes","noUnreachableUnionTypes","noMixedUnionProperties","noTypeImports","pureFunctions","noViteClient","typeFormatsImports","enforceTypeImports"],"mappings":";;;;;;;;;;AAmBA,MAAM,SAAwB;AAAA,EAC1B,OAAO;AAAA,IACH,qBAAqBA;AAAAA,IACrB,uBAAuBC;AAAAA,IACvB,8BAA8BC;AAAAA,IAC9B,6BAA6BC;AAAAA,IAC7B,mBAAmBC;AAAAA,IACnB,kBAAkBC;AAAAA,IAClB,kBAAkBC;AAAAA,IAClB,wBAAwBC;AAAAA,IACxB,wBAAwBC;AAAAA,EAAA;AAAA,EAE5B,SAAS,CAAA;AACb;AAIA,OAAO,QAAS,cAAc;AAAA,EAC1B,SAAS;AAAA,IACL,WAAW;AAAA,EAAA;AAAA,EAEf,OAAO;AAAA,IACH,6BAA6B;AAAA,IAC7B,+BAA+B;AAAA,IAC/B,sCAAsC;AAAA,IACtC,2BAA2B;AAAA,IAC3B,0BAA0B;AAAA,IAC1B,gCAAgC;AAAA;AAAA;AAAA,EAAA;AAIxC;;"}
@@ -1 +0,0 @@
1
- {"type":"commonjs"}
@@ -1,13 +0,0 @@
1
- "use strict";
2
- require("./rules/no-typeof-runtype.cjs");
3
- require("./rules/strong-typed-routes.cjs");
4
- require("./rules/no-unreachable-union-types.cjs");
5
- require("./rules/no-mixed-union-properties.cjs");
6
- require("./rules/no-type-imports.cjs");
7
- require("./rules/pure-functions.cjs");
8
- require("./rules/no-vite-client.cjs");
9
- require("./rules/type-formats-imports.cjs");
10
- require("./rules/enforce-type-imports.cjs");
11
- const index = require("../../index.cjs");
12
- module.exports = index;
13
- //# sourceMappingURL=index.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
@@ -1,4 +0,0 @@
1
- import { ESLint } from 'eslint';
2
- declare const plugin: ESLint.Plugin;
3
- export default plugin;
4
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/eslint/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAC,MAAM,EAAS,MAAM,QAAQ,CAAC;AAY3C,QAAA,MAAM,MAAM,EAAE,MAAM,CAAC,MAapB,CAAC;AAoBF,eAAe,MAAM,CAAC"}
@@ -1,121 +0,0 @@
1
- "use strict";
2
- const utils = require("@typescript-eslint/utils");
3
- const rule = {
4
- meta: {
5
- type: "suggestion",
6
- fixable: "code",
7
- docs: {
8
- description: "Enforce type-only imports from backend code paths to prevent bundling server code into the frontend."
9
- },
10
- messages: {
11
- enforceTypeImport: 'Import from "{{source}}" must use "import type" to avoid importing backend code into the frontend bundle.',
12
- enforceTypeExport: 'Re-export from "{{source}}" must use "export type" to avoid importing backend code into the frontend bundle.',
13
- sideEffectImport: 'Side-effect import from "{{source}}" imports backend code into the frontend bundle. Remove this import or use "import type".'
14
- },
15
- schema: [
16
- {
17
- type: "object",
18
- properties: {
19
- backendSources: {
20
- type: "array",
21
- items: { type: "string" },
22
- minItems: 1,
23
- description: "Array of regex patterns matching import sources that should use type-only imports."
24
- }
25
- },
26
- required: ["backendSources"],
27
- additionalProperties: false
28
- }
29
- ]
30
- },
31
- defaultOptions: [{ backendSources: [] }],
32
- create(context) {
33
- const options = context.options[0];
34
- if (!options || !options.backendSources.length) return {};
35
- const patterns = options.backendSources.map((p) => new RegExp(p));
36
- function matchesBackend(source) {
37
- return patterns.some((p) => p.test(source));
38
- }
39
- function hasAllValueSpecifiers(specifiers) {
40
- return specifiers.every((s) => {
41
- if (s.type === utils.AST_NODE_TYPES.ImportSpecifier) return s.importKind !== "type";
42
- return true;
43
- });
44
- }
45
- function fixImport(fixer, node) {
46
- const sourceCode = context.sourceCode;
47
- if (hasAllValueSpecifiers(node.specifiers)) {
48
- const importToken = sourceCode.getFirstToken(node);
49
- return fixer.insertTextAfter(importToken, " type");
50
- }
51
- const fixes = [];
52
- for (const specifier of node.specifiers) {
53
- if (specifier.type === utils.AST_NODE_TYPES.ImportSpecifier && specifier.importKind !== "type") {
54
- fixes.push(fixer.insertTextBefore(specifier, "type "));
55
- }
56
- }
57
- return fixes;
58
- }
59
- function fixExport(fixer, node) {
60
- const sourceCode = context.sourceCode;
61
- const allValue = node.specifiers.every((s) => s.exportKind !== "type");
62
- if (allValue) {
63
- const exportToken = sourceCode.getFirstToken(node);
64
- return fixer.insertTextAfter(exportToken, " type");
65
- }
66
- const fixes = [];
67
- for (const specifier of node.specifiers) {
68
- if (specifier.exportKind !== "type") {
69
- fixes.push(fixer.insertTextBefore(specifier, "type "));
70
- }
71
- }
72
- return fixes;
73
- }
74
- return {
75
- ImportDeclaration(node) {
76
- const source = node.source.value;
77
- if (!matchesBackend(source)) return;
78
- if (node.importKind === "type") return;
79
- if (node.specifiers.length === 0) {
80
- context.report({
81
- node,
82
- messageId: "sideEffectImport",
83
- data: { source }
84
- });
85
- return;
86
- }
87
- const hasValueSpecifier = node.specifiers.some((s) => {
88
- if (s.type === utils.AST_NODE_TYPES.ImportSpecifier) return s.importKind !== "type";
89
- return true;
90
- });
91
- if (!hasValueSpecifier) return;
92
- context.report({
93
- node,
94
- messageId: "enforceTypeImport",
95
- data: { source },
96
- fix(fixer) {
97
- return fixImport(fixer, node);
98
- }
99
- });
100
- },
101
- ExportNamedDeclaration(node) {
102
- if (!node.source) return;
103
- const source = node.source.value;
104
- if (!matchesBackend(source)) return;
105
- if (node.exportKind === "type") return;
106
- const hasValueSpecifier = node.specifiers.some((s) => s.exportKind !== "type");
107
- if (!hasValueSpecifier) return;
108
- context.report({
109
- node,
110
- messageId: "enforceTypeExport",
111
- data: { source },
112
- fix(fixer) {
113
- return fixExport(fixer, node);
114
- }
115
- });
116
- }
117
- };
118
- }
119
- };
120
- module.exports = rule;
121
- //# sourceMappingURL=enforce-type-imports.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"enforce-type-imports.cjs","sources":["../../../../../../src/eslint/rules/enforce-type-imports.ts"],"sourcesContent":["/* ########\n * 2026 mion\n * Author: Ma-jerez\n * License: MIT\n * The software is provided \"as is\", without warranty of any kind.\n * ######## */\n\nimport {TSESTree, TSESLint, AST_NODE_TYPES} from '@typescript-eslint/utils';\n\nexport interface Options {\n backendSources: string[];\n}\n\ntype MessageIds = 'enforceTypeImport' | 'enforceTypeExport' | 'sideEffectImport';\n\n/** Enforce type-only imports from backend code to prevent bundling server code into the frontend. */\nconst rule: TSESLint.RuleModule<MessageIds, [Options]> = {\n meta: {\n type: 'suggestion',\n fixable: 'code',\n docs: {\n description: 'Enforce type-only imports from backend code paths to prevent bundling server code into the frontend.',\n },\n messages: {\n enforceTypeImport:\n 'Import from \"{{source}}\" must use \"import type\" to avoid importing backend code into the frontend bundle.',\n enforceTypeExport:\n 'Re-export from \"{{source}}\" must use \"export type\" to avoid importing backend code into the frontend bundle.',\n sideEffectImport:\n 'Side-effect import from \"{{source}}\" imports backend code into the frontend bundle. Remove this import or use \"import type\".',\n },\n schema: [\n {\n type: 'object',\n properties: {\n backendSources: {\n type: 'array',\n items: {type: 'string'},\n minItems: 1,\n description: 'Array of regex patterns matching import sources that should use type-only imports.',\n },\n },\n required: ['backendSources'],\n additionalProperties: false,\n },\n ],\n },\n defaultOptions: [{backendSources: []}],\n create(context) {\n const options = context.options[0];\n if (!options || !options.backendSources.length) return {};\n\n const patterns = options.backendSources.map((p) => new RegExp(p));\n\n function matchesBackend(source: string): boolean {\n return patterns.some((p) => p.test(source));\n }\n\n function hasAllValueSpecifiers(specifiers: TSESTree.ImportClause[]): boolean {\n return specifiers.every((s) => {\n if (s.type === AST_NODE_TYPES.ImportSpecifier) return s.importKind !== 'type';\n return true; // default and namespace imports are always value\n });\n }\n\n function fixImport(fixer: TSESLint.RuleFixer, node: TSESTree.ImportDeclaration): TSESLint.RuleFix | TSESLint.RuleFix[] {\n const sourceCode = context.sourceCode;\n if (hasAllValueSpecifiers(node.specifiers)) {\n // convert entire declaration: insert 'type ' after 'import'\n const importToken = sourceCode.getFirstToken(node)!;\n return fixer.insertTextAfter(importToken, ' type');\n }\n // mixed: add 'type' to each value specifier\n const fixes: TSESLint.RuleFix[] = [];\n for (const specifier of node.specifiers) {\n if (specifier.type === AST_NODE_TYPES.ImportSpecifier && specifier.importKind !== 'type') {\n fixes.push(fixer.insertTextBefore(specifier, 'type '));\n }\n }\n return fixes;\n }\n\n function fixExport(\n fixer: TSESLint.RuleFixer,\n node: TSESTree.ExportNamedDeclaration\n ): TSESLint.RuleFix | TSESLint.RuleFix[] {\n const sourceCode = context.sourceCode;\n const allValue = node.specifiers.every((s) => s.exportKind !== 'type');\n if (allValue) {\n const exportToken = sourceCode.getFirstToken(node)!;\n return fixer.insertTextAfter(exportToken, ' type');\n }\n const fixes: TSESLint.RuleFix[] = [];\n for (const specifier of node.specifiers) {\n if (specifier.exportKind !== 'type') {\n fixes.push(fixer.insertTextBefore(specifier, 'type '));\n }\n }\n return fixes;\n }\n\n return {\n ImportDeclaration(node: TSESTree.ImportDeclaration) {\n const source = node.source.value;\n if (!matchesBackend(source)) return;\n if (node.importKind === 'type') return;\n\n // side-effect import (no specifiers)\n if (node.specifiers.length === 0) {\n context.report({\n node,\n messageId: 'sideEffectImport',\n data: {source},\n });\n return;\n }\n\n // check if all specifiers are already type-only\n const hasValueSpecifier = node.specifiers.some((s) => {\n if (s.type === AST_NODE_TYPES.ImportSpecifier) return s.importKind !== 'type';\n return true;\n });\n if (!hasValueSpecifier) return;\n\n context.report({\n node,\n messageId: 'enforceTypeImport',\n data: {source},\n fix(fixer) {\n return fixImport(fixer, node);\n },\n });\n },\n\n ExportNamedDeclaration(node: TSESTree.ExportNamedDeclaration) {\n if (!node.source) return;\n const source = node.source.value;\n if (!matchesBackend(source)) return;\n if (node.exportKind === 'type') return;\n\n const hasValueSpecifier = node.specifiers.some((s) => s.exportKind !== 'type');\n if (!hasValueSpecifier) return;\n\n context.report({\n node,\n messageId: 'enforceTypeExport',\n data: {source},\n fix(fixer) {\n return fixExport(fixer, node);\n },\n });\n },\n };\n },\n};\n\nexport default rule;\n"],"names":["AST_NODE_TYPES"],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- import { TSESLint } from '@typescript-eslint/utils';
2
- export interface Options {
3
- backendSources: string[];
4
- }
5
- type MessageIds = 'enforceTypeImport' | 'enforceTypeExport' | 'sideEffectImport';
6
- declare const rule: TSESLint.RuleModule<MessageIds, [Options]>;
7
- export default rule;
8
- //# sourceMappingURL=enforce-type-imports.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"enforce-type-imports.d.ts","sourceRoot":"","sources":["../../../../../../src/eslint/rules/enforce-type-imports.ts"],"names":[],"mappings":"AAOA,OAAO,EAAW,QAAQ,EAAiB,MAAM,0BAA0B,CAAC;AAE5E,MAAM,WAAW,OAAO;IACpB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,KAAK,UAAU,GAAG,mBAAmB,GAAG,mBAAmB,GAAG,kBAAkB,CAAC;AAGjF,QAAA,MAAM,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CA0IpD,CAAC;AAEF,eAAe,IAAI,CAAC"}