@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.
- package/LICENSE +1 -1
- package/README.md +34 -0
- package/dist/core/apply-edits.d.ts +8 -0
- package/dist/core/apply-edits.js +24 -0
- package/dist/core/apply-edits.js.map +1 -0
- package/dist/core/bundledApiStub.d.ts +4 -0
- package/dist/core/bundledApiStub.js +4 -0
- package/dist/core/bundledApiStub.js.map +1 -0
- package/dist/core/devReporter.d.ts +19 -0
- package/dist/core/devReporter.js +91 -0
- package/dist/core/devReporter.js.map +1 -0
- package/dist/core/diagnosticCatalog.d.ts +5 -0
- package/dist/core/diagnosticCatalog.js +18 -0
- package/dist/core/diagnosticCatalog.js.map +1 -0
- package/dist/core/downgradeErrors.d.ts +11 -0
- package/dist/core/downgradeErrors.js +34 -0
- package/dist/core/downgradeErrors.js.map +1 -0
- package/dist/core/edit-buffer.d.ts +26 -0
- package/dist/core/edit-buffer.js +209 -0
- package/dist/core/edit-buffer.js.map +1 -0
- package/dist/core/go-generated/diagnosticCatalog.generated.d.ts +9 -0
- package/dist/core/go-generated/diagnosticCatalog.generated.js +1008 -0
- package/dist/core/go-generated/diagnosticCatalog.generated.js.map +1 -0
- package/dist/core/go-generated/reflectionKind.generated.d.ts +60 -0
- package/dist/core/go-generated/reflectionKind.generated.js +60 -0
- package/dist/core/go-generated/reflectionKind.generated.js.map +1 -0
- package/dist/core/go-generated/runtypes-constants.generated.d.ts +197 -0
- package/dist/core/go-generated/runtypes-constants.generated.js +110 -0
- package/dist/core/go-generated/runtypes-constants.generated.js.map +1 -0
- package/dist/core/go-generated/tsconfig-plugin-keys.generated.d.ts +3 -0
- package/dist/core/go-generated/tsconfig-plugin-keys.generated.js +23 -0
- package/dist/core/go-generated/tsconfig-plugin-keys.generated.js.map +1 -0
- package/dist/core/groupedLog.d.ts +6 -0
- package/dist/core/groupedLog.js +163 -0
- package/dist/core/groupedLog.js.map +1 -0
- package/dist/core/levels.d.ts +6 -0
- package/dist/core/levels.js +22 -0
- package/dist/core/levels.js.map +1 -0
- package/dist/core/markerImports.d.ts +8 -0
- package/dist/core/markerImports.js +149 -0
- package/dist/core/markerImports.js.map +1 -0
- package/dist/core/option-guards.d.ts +4 -0
- package/dist/core/option-guards.js +12 -0
- package/dist/core/option-guards.js.map +1 -0
- package/dist/core/plugin-option-keys.d.ts +3 -0
- package/dist/core/plugin-option-keys.js +35 -0
- package/dist/core/plugin-option-keys.js.map +1 -0
- package/dist/core/protocol.d.ts +244 -0
- package/dist/core/protocol.js +23 -0
- package/dist/core/protocol.js.map +1 -0
- package/dist/core/resolver-client.d.ts +160 -0
- package/dist/core/resolver-client.js +354 -0
- package/dist/core/resolver-client.js.map +1 -0
- package/dist/core/scan-batcher.d.ts +6 -0
- package/dist/core/scan-batcher.js +36 -0
- package/dist/core/scan-batcher.js.map +1 -0
- package/dist/core/surface.d.ts +23 -0
- package/dist/core/surface.js +77 -0
- package/dist/core/surface.js.map +1 -0
- package/dist/core/type-deps.d.ts +11 -0
- package/dist/core/type-deps.js +72 -0
- package/dist/core/type-deps.js.map +1 -0
- package/dist/core/types.d.ts +13 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/typescript-floor.d.ts +5 -0
- package/dist/core/typescript-floor.js +33 -0
- package/dist/core/typescript-floor.js.map +1 -0
- package/dist/core/unplugin.d.ts +67 -0
- package/dist/core/unplugin.js +636 -0
- package/dist/core/unplugin.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/lint/diagnosticRouting.d.ts +28 -0
- package/dist/lint/diagnosticRouting.js +74 -0
- package/dist/lint/diagnosticRouting.js.map +1 -0
- package/dist/lint/index.d.ts +49 -0
- package/dist/lint/index.js +96 -0
- package/dist/lint/index.js.map +1 -0
- package/dist/lint/lint-worker.d.ts +2 -0
- package/dist/lint/lint-worker.js +116 -0
- package/dist/lint/lint-worker.js.map +1 -0
- package/dist/lint/prefilter.d.ts +7 -0
- package/dist/lint/prefilter.js +31 -0
- package/dist/lint/prefilter.js.map +1 -0
- package/dist/lint/session-protocol.d.ts +38 -0
- package/dist/lint/session-protocol.js +11 -0
- package/dist/lint/session-protocol.js.map +1 -0
- package/dist/lint/session.d.ts +27 -0
- package/dist/lint/session.js +149 -0
- package/dist/lint/session.js.map +1 -0
- package/dist/lint/spawn-shim.d.ts +2 -0
- package/dist/lint/spawn-shim.js +23 -0
- package/dist/lint/spawn-shim.js.map +1 -0
- package/dist/next/index.d.ts +11 -0
- package/dist/next/index.js +17 -0
- package/dist/next/index.js.map +1 -0
- package/dist/options.d.ts +29 -0
- package/dist/options.js +36 -0
- package/dist/options.js.map +1 -0
- package/dist/runtypes/bun.d.ts +25 -0
- package/dist/runtypes/bun.js +62 -0
- package/dist/runtypes/bun.js.map +1 -0
- package/dist/runtypes/esbuild.d.ts +4 -0
- package/dist/runtypes/esbuild.js +4 -0
- package/dist/runtypes/esbuild.js.map +1 -0
- package/dist/runtypes/next/broker.d.ts +15 -0
- package/dist/runtypes/next/broker.js +316 -0
- package/dist/runtypes/next/broker.js.map +1 -0
- package/dist/runtypes/next/index.d.ts +30 -0
- package/dist/runtypes/next/index.js +57 -0
- package/dist/runtypes/next/index.js.map +1 -0
- package/dist/runtypes/next/loader.d.ts +13 -0
- package/dist/runtypes/next/loader.js +64 -0
- package/dist/runtypes/next/loader.js.map +1 -0
- package/dist/runtypes/next/wire.d.ts +17 -0
- package/dist/runtypes/next/wire.js +15 -0
- package/dist/runtypes/next/wire.js.map +1 -0
- package/dist/runtypes/rolldown.d.ts +4 -0
- package/dist/runtypes/rolldown.js +4 -0
- package/dist/runtypes/rolldown.js.map +1 -0
- package/dist/runtypes/rollup.d.ts +4 -0
- package/dist/runtypes/rollup.js +4 -0
- package/dist/runtypes/rollup.js.map +1 -0
- package/dist/runtypes/rspack.d.ts +4 -0
- package/dist/runtypes/rspack.js +4 -0
- package/dist/runtypes/rspack.js.map +1 -0
- package/dist/runtypes/vite.d.ts +4 -0
- package/dist/runtypes/vite.js +4 -0
- package/dist/runtypes/vite.js.map +1 -0
- package/dist/runtypes/webpack.d.ts +4 -0
- package/dist/runtypes/webpack.js +4 -0
- package/dist/runtypes/webpack.js.map +1 -0
- package/dist/vite/buildEntries.d.ts +2 -0
- package/dist/vite/buildEntries.js +28 -0
- package/dist/vite/buildEntries.js.map +1 -0
- package/dist/vite/cjsPackageJsonPlugin.d.ts +3 -0
- package/dist/vite/cjsPackageJsonPlugin.js +12 -0
- package/dist/vite/cjsPackageJsonPlugin.js.map +1 -0
- package/dist/vite/index.d.ts +6 -0
- package/dist/vite/index.js +5 -0
- package/dist/vite/index.js.map +1 -0
- package/dist/vite/middlewareMode.d.ts +10 -0
- package/dist/vite/middlewareMode.js +227 -0
- package/dist/vite/middlewareMode.js.map +1 -0
- package/dist/vite/mionVitePlugin.d.ts +23 -0
- package/dist/vite/mionVitePlugin.js +115 -0
- package/dist/vite/mionVitePlugin.js.map +1 -0
- package/dist/vite/nodeWebBridge.d.ts +5 -0
- package/dist/vite/nodeWebBridge.js +59 -0
- package/dist/vite/nodeWebBridge.js.map +1 -0
- package/dist/vite/sfcTransform.d.ts +8 -0
- package/dist/vite/sfcTransform.js +142 -0
- package/dist/vite/sfcTransform.js.map +1 -0
- package/oxlint-recommended.json +11 -0
- package/package.json +91 -56
- package/build/eslint/cjs/index.cjs +0 -41
- package/build/eslint/cjs/index.cjs.map +0 -1
- package/build/eslint/cjs/package.json +0 -1
- package/build/eslint/cjs/src/eslint/index.cjs +0 -13
- package/build/eslint/cjs/src/eslint/index.cjs.map +0 -1
- package/build/eslint/cjs/src/eslint/index.d.ts +0 -4
- package/build/eslint/cjs/src/eslint/index.d.ts.map +0 -1
- package/build/eslint/cjs/src/eslint/rules/enforce-type-imports.cjs +0 -121
- package/build/eslint/cjs/src/eslint/rules/enforce-type-imports.cjs.map +0 -1
- package/build/eslint/cjs/src/eslint/rules/enforce-type-imports.d.ts +0 -8
- package/build/eslint/cjs/src/eslint/rules/enforce-type-imports.d.ts.map +0 -1
- package/build/eslint/cjs/src/eslint/rules/formatTypeNames.cjs +0 -71
- package/build/eslint/cjs/src/eslint/rules/formatTypeNames.cjs.map +0 -1
- package/build/eslint/cjs/src/eslint/rules/formatTypeNames.d.ts +0 -4
- package/build/eslint/cjs/src/eslint/rules/formatTypeNames.d.ts.map +0 -1
- package/build/eslint/cjs/src/eslint/rules/no-mixed-union-properties.cjs +0 -220
- package/build/eslint/cjs/src/eslint/rules/no-mixed-union-properties.cjs.map +0 -1
- package/build/eslint/cjs/src/eslint/rules/no-mixed-union-properties.d.ts +0 -4
- package/build/eslint/cjs/src/eslint/rules/no-mixed-union-properties.d.ts.map +0 -1
- package/build/eslint/cjs/src/eslint/rules/no-type-imports.cjs +0 -251
- package/build/eslint/cjs/src/eslint/rules/no-type-imports.cjs.map +0 -1
- package/build/eslint/cjs/src/eslint/rules/no-type-imports.d.ts +0 -4
- package/build/eslint/cjs/src/eslint/rules/no-type-imports.d.ts.map +0 -1
- package/build/eslint/cjs/src/eslint/rules/no-typeof-runtype.cjs +0 -72
- package/build/eslint/cjs/src/eslint/rules/no-typeof-runtype.cjs.map +0 -1
- package/build/eslint/cjs/src/eslint/rules/no-typeof-runtype.d.ts +0 -4
- package/build/eslint/cjs/src/eslint/rules/no-typeof-runtype.d.ts.map +0 -1
- package/build/eslint/cjs/src/eslint/rules/no-unreachable-union-types.cjs +0 -220
- package/build/eslint/cjs/src/eslint/rules/no-unreachable-union-types.cjs.map +0 -1
- package/build/eslint/cjs/src/eslint/rules/no-unreachable-union-types.d.ts +0 -4
- package/build/eslint/cjs/src/eslint/rules/no-unreachable-union-types.d.ts.map +0 -1
- package/build/eslint/cjs/src/eslint/rules/no-vite-client.cjs +0 -71
- package/build/eslint/cjs/src/eslint/rules/no-vite-client.cjs.map +0 -1
- package/build/eslint/cjs/src/eslint/rules/no-vite-client.d.ts +0 -5
- package/build/eslint/cjs/src/eslint/rules/no-vite-client.d.ts.map +0 -1
- package/build/eslint/cjs/src/eslint/rules/pure-functions.cjs +0 -346
- package/build/eslint/cjs/src/eslint/rules/pure-functions.cjs.map +0 -1
- package/build/eslint/cjs/src/eslint/rules/pure-functions.d.ts +0 -5
- package/build/eslint/cjs/src/eslint/rules/pure-functions.d.ts.map +0 -1
- package/build/eslint/cjs/src/eslint/rules/strong-typed-routes.cjs +0 -328
- package/build/eslint/cjs/src/eslint/rules/strong-typed-routes.cjs.map +0 -1
- package/build/eslint/cjs/src/eslint/rules/strong-typed-routes.d.ts +0 -5
- package/build/eslint/cjs/src/eslint/rules/strong-typed-routes.d.ts.map +0 -1
- package/build/eslint/cjs/src/eslint/rules/type-formats-imports.cjs +0 -52
- package/build/eslint/cjs/src/eslint/rules/type-formats-imports.cjs.map +0 -1
- package/build/eslint/cjs/src/eslint/rules/type-formats-imports.d.ts +0 -4
- package/build/eslint/cjs/src/eslint/rules/type-formats-imports.d.ts.map +0 -1
- package/build/eslint/cjs/src/pureFns/purityRules.cjs +0 -67
- package/build/eslint/cjs/src/pureFns/purityRules.cjs.map +0 -1
- package/build/eslint/cjs/src/pureFns/purityRules.d.ts +0 -5
- package/build/eslint/cjs/src/pureFns/purityRules.d.ts.map +0 -1
- package/build/eslint/esm/index.js +0 -42
- package/build/eslint/esm/index.js.map +0 -1
- package/build/eslint/esm/src/eslint/index.d.ts +0 -4
- package/build/eslint/esm/src/eslint/index.d.ts.map +0 -1
- package/build/eslint/esm/src/eslint/index.js +0 -14
- package/build/eslint/esm/src/eslint/index.js.map +0 -1
- package/build/eslint/esm/src/eslint/rules/enforce-type-imports.d.ts +0 -8
- package/build/eslint/esm/src/eslint/rules/enforce-type-imports.d.ts.map +0 -1
- package/build/eslint/esm/src/eslint/rules/enforce-type-imports.js +0 -122
- package/build/eslint/esm/src/eslint/rules/enforce-type-imports.js.map +0 -1
- package/build/eslint/esm/src/eslint/rules/formatTypeNames.d.ts +0 -4
- package/build/eslint/esm/src/eslint/rules/formatTypeNames.d.ts.map +0 -1
- package/build/eslint/esm/src/eslint/rules/formatTypeNames.js +0 -71
- package/build/eslint/esm/src/eslint/rules/formatTypeNames.js.map +0 -1
- package/build/eslint/esm/src/eslint/rules/no-mixed-union-properties.d.ts +0 -4
- package/build/eslint/esm/src/eslint/rules/no-mixed-union-properties.d.ts.map +0 -1
- package/build/eslint/esm/src/eslint/rules/no-mixed-union-properties.js +0 -221
- package/build/eslint/esm/src/eslint/rules/no-mixed-union-properties.js.map +0 -1
- package/build/eslint/esm/src/eslint/rules/no-type-imports.d.ts +0 -4
- package/build/eslint/esm/src/eslint/rules/no-type-imports.d.ts.map +0 -1
- package/build/eslint/esm/src/eslint/rules/no-type-imports.js +0 -252
- package/build/eslint/esm/src/eslint/rules/no-type-imports.js.map +0 -1
- package/build/eslint/esm/src/eslint/rules/no-typeof-runtype.d.ts +0 -4
- package/build/eslint/esm/src/eslint/rules/no-typeof-runtype.d.ts.map +0 -1
- package/build/eslint/esm/src/eslint/rules/no-typeof-runtype.js +0 -73
- package/build/eslint/esm/src/eslint/rules/no-typeof-runtype.js.map +0 -1
- package/build/eslint/esm/src/eslint/rules/no-unreachable-union-types.d.ts +0 -4
- package/build/eslint/esm/src/eslint/rules/no-unreachable-union-types.d.ts.map +0 -1
- package/build/eslint/esm/src/eslint/rules/no-unreachable-union-types.js +0 -221
- package/build/eslint/esm/src/eslint/rules/no-unreachable-union-types.js.map +0 -1
- package/build/eslint/esm/src/eslint/rules/no-vite-client.d.ts +0 -5
- package/build/eslint/esm/src/eslint/rules/no-vite-client.d.ts.map +0 -1
- package/build/eslint/esm/src/eslint/rules/no-vite-client.js +0 -72
- package/build/eslint/esm/src/eslint/rules/no-vite-client.js.map +0 -1
- package/build/eslint/esm/src/eslint/rules/pure-functions.d.ts +0 -5
- package/build/eslint/esm/src/eslint/rules/pure-functions.d.ts.map +0 -1
- package/build/eslint/esm/src/eslint/rules/pure-functions.js +0 -347
- package/build/eslint/esm/src/eslint/rules/pure-functions.js.map +0 -1
- package/build/eslint/esm/src/eslint/rules/strong-typed-routes.d.ts +0 -5
- package/build/eslint/esm/src/eslint/rules/strong-typed-routes.d.ts.map +0 -1
- package/build/eslint/esm/src/eslint/rules/strong-typed-routes.js +0 -329
- package/build/eslint/esm/src/eslint/rules/strong-typed-routes.js.map +0 -1
- package/build/eslint/esm/src/eslint/rules/type-formats-imports.d.ts +0 -4
- package/build/eslint/esm/src/eslint/rules/type-formats-imports.d.ts.map +0 -1
- package/build/eslint/esm/src/eslint/rules/type-formats-imports.js +0 -53
- package/build/eslint/esm/src/eslint/rules/type-formats-imports.js.map +0 -1
- package/build/eslint/esm/src/pureFns/purityRules.d.ts +0 -5
- package/build/eslint/esm/src/pureFns/purityRules.d.ts.map +0 -1
- package/build/eslint/esm/src/pureFns/purityRules.js +0 -67
- package/build/eslint/esm/src/pureFns/purityRules.js.map +0 -1
- package/build/vite-plugin/cjs/index.cjs +0 -13
- package/build/vite-plugin/cjs/index.cjs.map +0 -1
- package/build/vite-plugin/cjs/package.json +0 -1
- package/build/vite-plugin/cjs/src/pureFns/purityRules.cjs +0 -65
- package/build/vite-plugin/cjs/src/pureFns/purityRules.cjs.map +0 -1
- package/build/vite-plugin/cjs/src/pureFns/purityRules.d.ts +0 -5
- package/build/vite-plugin/cjs/src/pureFns/purityRules.d.ts.map +0 -1
- package/build/vite-plugin/cjs/src/vite-plugin/aotCacheGenerator.cjs +0 -271
- package/build/vite-plugin/cjs/src/vite-plugin/aotCacheGenerator.cjs.map +0 -1
- package/build/vite-plugin/cjs/src/vite-plugin/aotCacheGenerator.d.ts +0 -32
- package/build/vite-plugin/cjs/src/vite-plugin/aotCacheGenerator.d.ts.map +0 -1
- package/build/vite-plugin/cjs/src/vite-plugin/aotDiskCache.cjs +0 -135
- package/build/vite-plugin/cjs/src/vite-plugin/aotDiskCache.cjs.map +0 -1
- package/build/vite-plugin/cjs/src/vite-plugin/aotDiskCache.d.ts +0 -7
- package/build/vite-plugin/cjs/src/vite-plugin/aotDiskCache.d.ts.map +0 -1
- package/build/vite-plugin/cjs/src/vite-plugin/cjsPackageJsonPlugin.cjs +0 -15
- package/build/vite-plugin/cjs/src/vite-plugin/cjsPackageJsonPlugin.cjs.map +0 -1
- package/build/vite-plugin/cjs/src/vite-plugin/cjsPackageJsonPlugin.d.ts +0 -3
- package/build/vite-plugin/cjs/src/vite-plugin/cjsPackageJsonPlugin.d.ts.map +0 -1
- package/build/vite-plugin/cjs/src/vite-plugin/constants.cjs +0 -29
- package/build/vite-plugin/cjs/src/vite-plugin/constants.cjs.map +0 -1
- package/build/vite-plugin/cjs/src/vite-plugin/constants.d.ts +0 -13
- package/build/vite-plugin/cjs/src/vite-plugin/constants.d.ts.map +0 -1
- package/build/vite-plugin/cjs/src/vite-plugin/extractPureFn.cjs +0 -628
- package/build/vite-plugin/cjs/src/vite-plugin/extractPureFn.cjs.map +0 -1
- package/build/vite-plugin/cjs/src/vite-plugin/extractPureFn.d.ts +0 -14
- package/build/vite-plugin/cjs/src/vite-plugin/extractPureFn.d.ts.map +0 -1
- package/build/vite-plugin/cjs/src/vite-plugin/index.cjs +0 -13
- package/build/vite-plugin/cjs/src/vite-plugin/index.cjs.map +0 -1
- package/build/vite-plugin/cjs/src/vite-plugin/index.d.ts +0 -6
- package/build/vite-plugin/cjs/src/vite-plugin/index.d.ts.map +0 -1
- package/build/vite-plugin/cjs/src/vite-plugin/mionVitePlugin.cjs +0 -511
- package/build/vite-plugin/cjs/src/vite-plugin/mionVitePlugin.cjs.map +0 -1
- package/build/vite-plugin/cjs/src/vite-plugin/mionVitePlugin.d.ts +0 -37
- package/build/vite-plugin/cjs/src/vite-plugin/mionVitePlugin.d.ts.map +0 -1
- package/build/vite-plugin/cjs/src/vite-plugin/resolveModule.cjs +0 -55
- package/build/vite-plugin/cjs/src/vite-plugin/resolveModule.cjs.map +0 -1
- package/build/vite-plugin/cjs/src/vite-plugin/resolveModule.d.ts +0 -2
- package/build/vite-plugin/cjs/src/vite-plugin/resolveModule.d.ts.map +0 -1
- package/build/vite-plugin/cjs/src/vite-plugin/transformers.cjs +0 -166
- package/build/vite-plugin/cjs/src/vite-plugin/transformers.cjs.map +0 -1
- package/build/vite-plugin/cjs/src/vite-plugin/transformers.d.ts +0 -11
- package/build/vite-plugin/cjs/src/vite-plugin/transformers.d.ts.map +0 -1
- package/build/vite-plugin/cjs/src/vite-plugin/types.cjs +0 -2
- package/build/vite-plugin/cjs/src/vite-plugin/types.cjs.map +0 -1
- package/build/vite-plugin/cjs/src/vite-plugin/types.d.ts +0 -60
- package/build/vite-plugin/cjs/src/vite-plugin/types.d.ts.map +0 -1
- package/build/vite-plugin/cjs/src/vite-plugin/virtual-modules.d.cjs +0 -2
- package/build/vite-plugin/cjs/src/vite-plugin/virtual-modules.d.cjs.map +0 -1
- package/build/vite-plugin/cjs/src/vite-plugin/virtualModule.cjs +0 -69
- package/build/vite-plugin/cjs/src/vite-plugin/virtualModule.cjs.map +0 -1
- package/build/vite-plugin/cjs/src/vite-plugin/virtualModule.d.ts +0 -3
- package/build/vite-plugin/cjs/src/vite-plugin/virtualModule.d.ts.map +0 -1
- package/build/vite-plugin/esm/index.js +0 -13
- package/build/vite-plugin/esm/index.js.map +0 -1
- package/build/vite-plugin/esm/src/pureFns/purityRules.d.ts +0 -5
- package/build/vite-plugin/esm/src/pureFns/purityRules.d.ts.map +0 -1
- package/build/vite-plugin/esm/src/pureFns/purityRules.js +0 -65
- package/build/vite-plugin/esm/src/pureFns/purityRules.js.map +0 -1
- package/build/vite-plugin/esm/src/vite-plugin/aotCacheGenerator.d.ts +0 -32
- package/build/vite-plugin/esm/src/vite-plugin/aotCacheGenerator.d.ts.map +0 -1
- package/build/vite-plugin/esm/src/vite-plugin/aotCacheGenerator.js +0 -271
- package/build/vite-plugin/esm/src/vite-plugin/aotCacheGenerator.js.map +0 -1
- package/build/vite-plugin/esm/src/vite-plugin/aotDiskCache.d.ts +0 -7
- package/build/vite-plugin/esm/src/vite-plugin/aotDiskCache.d.ts.map +0 -1
- package/build/vite-plugin/esm/src/vite-plugin/aotDiskCache.js +0 -134
- package/build/vite-plugin/esm/src/vite-plugin/aotDiskCache.js.map +0 -1
- package/build/vite-plugin/esm/src/vite-plugin/cjsPackageJsonPlugin.d.ts +0 -3
- package/build/vite-plugin/esm/src/vite-plugin/cjsPackageJsonPlugin.d.ts.map +0 -1
- package/build/vite-plugin/esm/src/vite-plugin/cjsPackageJsonPlugin.js +0 -15
- package/build/vite-plugin/esm/src/vite-plugin/cjsPackageJsonPlugin.js.map +0 -1
- package/build/vite-plugin/esm/src/vite-plugin/constants.d.ts +0 -13
- package/build/vite-plugin/esm/src/vite-plugin/constants.d.ts.map +0 -1
- package/build/vite-plugin/esm/src/vite-plugin/constants.js +0 -29
- package/build/vite-plugin/esm/src/vite-plugin/constants.js.map +0 -1
- package/build/vite-plugin/esm/src/vite-plugin/extractPureFn.d.ts +0 -14
- package/build/vite-plugin/esm/src/vite-plugin/extractPureFn.d.ts.map +0 -1
- package/build/vite-plugin/esm/src/vite-plugin/extractPureFn.js +0 -611
- package/build/vite-plugin/esm/src/vite-plugin/extractPureFn.js.map +0 -1
- package/build/vite-plugin/esm/src/vite-plugin/index.d.ts +0 -6
- package/build/vite-plugin/esm/src/vite-plugin/index.d.ts.map +0 -1
- package/build/vite-plugin/esm/src/vite-plugin/index.js +0 -13
- package/build/vite-plugin/esm/src/vite-plugin/index.js.map +0 -1
- package/build/vite-plugin/esm/src/vite-plugin/mionVitePlugin.d.ts +0 -37
- package/build/vite-plugin/esm/src/vite-plugin/mionVitePlugin.d.ts.map +0 -1
- package/build/vite-plugin/esm/src/vite-plugin/mionVitePlugin.js +0 -493
- package/build/vite-plugin/esm/src/vite-plugin/mionVitePlugin.js.map +0 -1
- package/build/vite-plugin/esm/src/vite-plugin/resolveModule.d.ts +0 -2
- package/build/vite-plugin/esm/src/vite-plugin/resolveModule.d.ts.map +0 -1
- package/build/vite-plugin/esm/src/vite-plugin/resolveModule.js +0 -33
- package/build/vite-plugin/esm/src/vite-plugin/resolveModule.js.map +0 -1
- package/build/vite-plugin/esm/src/vite-plugin/transformers.d.ts +0 -11
- package/build/vite-plugin/esm/src/vite-plugin/transformers.d.ts.map +0 -1
- package/build/vite-plugin/esm/src/vite-plugin/transformers.js +0 -149
- package/build/vite-plugin/esm/src/vite-plugin/transformers.js.map +0 -1
- package/build/vite-plugin/esm/src/vite-plugin/types.d.ts +0 -60
- package/build/vite-plugin/esm/src/vite-plugin/types.d.ts.map +0 -1
- package/build/vite-plugin/esm/src/vite-plugin/types.js +0 -2
- package/build/vite-plugin/esm/src/vite-plugin/types.js.map +0 -1
- package/build/vite-plugin/esm/src/vite-plugin/virtual-modules.d.js +0 -2
- package/build/vite-plugin/esm/src/vite-plugin/virtual-modules.d.js.map +0 -1
- package/build/vite-plugin/esm/src/vite-plugin/virtualModule.d.ts +0 -3
- package/build/vite-plugin/esm/src/vite-plugin/virtualModule.d.ts.map +0 -1
- package/build/vite-plugin/esm/src/vite-plugin/virtualModule.js +0 -69
- package/build/vite-plugin/esm/src/vite-plugin/virtualModule.js.map +0 -1
- package/src/eslint/index.ts +0 -53
- package/src/eslint/rules/enforce-type-imports.ts +0 -157
- package/src/eslint/rules/formatTypeNames.ts +0 -92
- package/src/eslint/rules/no-mixed-union-properties.ts +0 -276
- package/src/eslint/rules/no-type-imports.ts +0 -386
- package/src/eslint/rules/no-typeof-runtype.ts +0 -112
- package/src/eslint/rules/no-unreachable-union-types.ts +0 -357
- package/src/eslint/rules/no-vite-client.ts +0 -101
- package/src/eslint/rules/pure-functions.ts +0 -523
- package/src/eslint/rules/strong-typed-routes.ts +0 -537
- package/src/eslint/rules/type-formats-imports.ts +0 -73
- package/src/pureFns/purityRules.ts +0 -76
- package/src/vite-plugin/README.md +0 -399
- package/src/vite-plugin/aotCacheGenerator.ts +0 -397
- package/src/vite-plugin/aotDiskCache.ts +0 -193
- package/src/vite-plugin/cjsPackageJsonPlugin.ts +0 -21
- package/src/vite-plugin/constants.ts +0 -50
- package/src/vite-plugin/extractPureFn.ts +0 -845
- package/src/vite-plugin/index.ts +0 -27
- package/src/vite-plugin/mionVitePlugin.ts +0 -738
- package/src/vite-plugin/resolveModule.ts +0 -50
- package/src/vite-plugin/transformers.ts +0 -209
- package/src/vite-plugin/types.ts +0 -182
- package/src/vite-plugin/virtual-modules.d.ts +0 -48
- 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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"}
|
package/package.json
CHANGED
|
@@ -1,96 +1,131 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mionjs/devtools",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
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
|
-
"
|
|
16
|
-
"
|
|
17
|
-
"license": "MIT",
|
|
19
|
+
"main": "./dist/index.js",
|
|
20
|
+
"types": "./dist/index.d.ts",
|
|
18
21
|
"exports": {
|
|
19
22
|
".": {
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
|
|
23
|
-
|
|
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
|
-
"
|
|
27
|
-
"
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
"./
|
|
32
|
-
"
|
|
33
|
-
"
|
|
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
|
-
"./
|
|
38
|
-
"types": "./
|
|
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
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"!
|
|
48
|
-
"
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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": ">=
|
|
107
|
+
"vite": ">=5.0.0",
|
|
108
|
+
"@mionjs/bin-compiler": "0.13.2"
|
|
83
109
|
},
|
|
84
110
|
"peerDependenciesMeta": {
|
|
85
111
|
"typescript": {
|
|
86
|
-
"optional":
|
|
112
|
+
"optional": true
|
|
87
113
|
},
|
|
88
114
|
"vite": {
|
|
89
115
|
"optional": true
|
|
90
116
|
}
|
|
91
117
|
},
|
|
92
118
|
"devDependencies": {
|
|
93
|
-
"
|
|
119
|
+
"vite": "8.0.16",
|
|
120
|
+
"@mionjs/bin-compiler": "0.13.2"
|
|
94
121
|
},
|
|
95
|
-
"
|
|
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 +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"}
|