@mionjs/devtools 0.8.10 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
@@ -1,397 +0,0 @@
|
|
|
1
|
-
/* ########
|
|
2
|
-
* 2026 mion
|
|
3
|
-
* Author: Ma-jerez
|
|
4
|
-
* License: MIT
|
|
5
|
-
* The software is provided "as is", without warranty of any kind.
|
|
6
|
-
* ######## */
|
|
7
|
-
|
|
8
|
-
import {fork, ChildProcess} from 'child_process';
|
|
9
|
-
import {resolve, dirname} from 'path';
|
|
10
|
-
import {MionServerConfig} from './types.ts';
|
|
11
|
-
import {resolveModule} from './resolveModule.ts';
|
|
12
|
-
|
|
13
|
-
/** AOT cache data returned from the generator */
|
|
14
|
-
export interface AOTCacheData {
|
|
15
|
-
jitFnsCode: string;
|
|
16
|
-
pureFnsCode: string;
|
|
17
|
-
routerCacheCode: string;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/** AOT cache result including optional persistent child process */
|
|
21
|
-
export interface AOTCacheResult {
|
|
22
|
-
data: AOTCacheData;
|
|
23
|
-
/** The child process, only present when runMode is 'childProcess' (persist) */
|
|
24
|
-
childProcess?: ChildProcess;
|
|
25
|
-
/** Promise that resolves when the server calls setPlatformConfig() (childProcess mode only) */
|
|
26
|
-
platformReady?: Promise<PlatformReadyData>;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/** IPC message type from the router's aotEmitter */
|
|
30
|
-
interface AOTCacheMessage {
|
|
31
|
-
type: 'mion-aot-caches';
|
|
32
|
-
jitFnsCode: string;
|
|
33
|
-
pureFnsCode: string;
|
|
34
|
-
routerCacheCode: string;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/** Platform config received from the server via IPC */
|
|
38
|
-
export interface PlatformReadyData {
|
|
39
|
-
routerConfig: Record<string, unknown>;
|
|
40
|
-
platformConfig: Record<string, unknown>;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
interface PlatformReadyMessage extends PlatformReadyData {
|
|
44
|
-
type: 'mion-platform-ready';
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/** Default timeout for AOT cache generation (30 seconds) */
|
|
48
|
-
const DEFAULT_TIMEOUT = 30000;
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Generates AOT caches by spawning vite-node to run the server's start script.
|
|
52
|
-
*
|
|
53
|
-
* vite-node is used instead of plain node/ts-node because:
|
|
54
|
-
* 1. The server needs deepkit type compiler transformations
|
|
55
|
-
* 2. The server's vite.config.ts has aliases and plugins that must be applied
|
|
56
|
-
* 3. vite-node provides the same environment as the actual server build
|
|
57
|
-
*
|
|
58
|
-
* The router's emitAOTCaches() (called automatically from initMionRouter)
|
|
59
|
-
* detects MION_COMPILE and sends the serialized caches via IPC.
|
|
60
|
-
*/
|
|
61
|
-
export async function generateAOTCaches(
|
|
62
|
-
serverConfig: MionServerConfig,
|
|
63
|
-
startScriptOverride?: string,
|
|
64
|
-
isClient?: boolean
|
|
65
|
-
): Promise<AOTCacheResult> {
|
|
66
|
-
const persist = serverConfig.runMode === 'childProcess';
|
|
67
|
-
const startScript = resolve(startScriptOverride ?? serverConfig.startScript);
|
|
68
|
-
const scriptDir = dirname(startScript);
|
|
69
|
-
|
|
70
|
-
// Determine the vite config to use
|
|
71
|
-
// If viteConfig is provided, use it; otherwise let vite-node auto-discover
|
|
72
|
-
const viteConfigArgs = serverConfig.viteConfig ? ['--config', resolve(serverConfig.viteConfig)] : [];
|
|
73
|
-
|
|
74
|
-
// Resolve vite-node path in both CJS and ESM environments
|
|
75
|
-
let viteNodePath: string;
|
|
76
|
-
try {
|
|
77
|
-
viteNodePath = await resolveModule('vite-node/cli', scriptDir);
|
|
78
|
-
} catch (err) {
|
|
79
|
-
throw new Error(
|
|
80
|
-
`Failed to resolve vite-node. Make sure vite-node is installed.\n` +
|
|
81
|
-
`You can install it with: npm install -D vite-node\n` +
|
|
82
|
-
`Original error: ${err instanceof Error ? err.message : String(err)}`
|
|
83
|
-
);
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
return new Promise((resolvePromise, reject) => {
|
|
87
|
-
let child: ChildProcess;
|
|
88
|
-
let resolved = false;
|
|
89
|
-
let stderr = '';
|
|
90
|
-
|
|
91
|
-
try {
|
|
92
|
-
// Spawn vite-node as a child process with IPC channel
|
|
93
|
-
// 'serve' mode tells platform adapters to proceed with server.listen()
|
|
94
|
-
child = fork(viteNodePath, [...viteConfigArgs, startScript, ...(serverConfig.args || [])], {
|
|
95
|
-
env: {
|
|
96
|
-
...process.env,
|
|
97
|
-
...serverConfig.env,
|
|
98
|
-
MION_COMPILE: serverConfig.runMode,
|
|
99
|
-
...(isClient ? {MION_AOT_IS_CLIENT: 'true'} : {}),
|
|
100
|
-
},
|
|
101
|
-
stdio: ['pipe', 'pipe', 'pipe', 'ipc'],
|
|
102
|
-
cwd: scriptDir,
|
|
103
|
-
});
|
|
104
|
-
} catch (err) {
|
|
105
|
-
// If vite-node is not found, provide a helpful error message
|
|
106
|
-
reject(
|
|
107
|
-
new Error(
|
|
108
|
-
`Failed to spawn vite-node. Make sure vite-node is installed.\n` +
|
|
109
|
-
`You can install it with: npm install -D vite-node\n` +
|
|
110
|
-
`Original error: ${err instanceof Error ? err.message : String(err)}`
|
|
111
|
-
)
|
|
112
|
-
);
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/** Cleanup child process: clear timeout, disconnect IPC (only in non-persist mode), and optionally kill.
|
|
117
|
-
* In persist mode, IPC stays open for the mion-platform-ready message. */
|
|
118
|
-
const cleanup = () => {
|
|
119
|
-
clearTimeout(timeoutId);
|
|
120
|
-
if (!persist && child.connected) child.disconnect();
|
|
121
|
-
if (!persist) child.kill();
|
|
122
|
-
};
|
|
123
|
-
|
|
124
|
-
// Set up platform-ready listener BEFORE any messages arrive to avoid race conditions.
|
|
125
|
-
// The child may send mion-platform-ready very quickly after mion-aot-caches.
|
|
126
|
-
let platformReadyResolve: ((value: PlatformReadyData) => void) | undefined;
|
|
127
|
-
const platformReady = persist
|
|
128
|
-
? new Promise<PlatformReadyData>((res) => {
|
|
129
|
-
platformReadyResolve = res;
|
|
130
|
-
})
|
|
131
|
-
: undefined;
|
|
132
|
-
|
|
133
|
-
child.on('message', (msg: unknown) => {
|
|
134
|
-
const message = msg as AOTCacheMessage | PlatformReadyMessage;
|
|
135
|
-
if (message?.type === 'mion-aot-caches') {
|
|
136
|
-
resolved = true;
|
|
137
|
-
cleanup();
|
|
138
|
-
resolvePromise({
|
|
139
|
-
data: {
|
|
140
|
-
jitFnsCode: message.jitFnsCode,
|
|
141
|
-
pureFnsCode: message.pureFnsCode,
|
|
142
|
-
routerCacheCode: message.routerCacheCode,
|
|
143
|
-
},
|
|
144
|
-
childProcess: persist ? child : undefined,
|
|
145
|
-
platformReady,
|
|
146
|
-
});
|
|
147
|
-
} else if (message?.type === 'mion-platform-ready' && platformReadyResolve) {
|
|
148
|
-
platformReadyResolve({routerConfig: message.routerConfig, platformConfig: message.platformConfig});
|
|
149
|
-
platformReadyResolve = undefined;
|
|
150
|
-
}
|
|
151
|
-
});
|
|
152
|
-
|
|
153
|
-
// Capture stderr for error reporting (and pipe through in persist mode)
|
|
154
|
-
child.stderr?.on('data', (data: Buffer) => {
|
|
155
|
-
const msg = data.toString().trim();
|
|
156
|
-
if (!resolved) stderr += msg + '\n';
|
|
157
|
-
if (persist && msg) console.error(`[mion-server] ${msg}`);
|
|
158
|
-
});
|
|
159
|
-
|
|
160
|
-
// Pipe stdout through (always in persist mode, only with DEBUG_AOT otherwise)
|
|
161
|
-
child.stdout?.on('data', (data: Buffer) => {
|
|
162
|
-
const msg = data.toString().trim();
|
|
163
|
-
if (persist && msg) {
|
|
164
|
-
console.log(`[mion-server] ${msg}`);
|
|
165
|
-
} else if (process.env.DEBUG_AOT && msg) {
|
|
166
|
-
console.log('[mion-aot] stdout:', msg);
|
|
167
|
-
}
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
child.on('error', (err) => {
|
|
171
|
-
if (!resolved) {
|
|
172
|
-
cleanup();
|
|
173
|
-
reject(new Error(`vite-node failed to start: ${err.message}`));
|
|
174
|
-
}
|
|
175
|
-
});
|
|
176
|
-
|
|
177
|
-
child.on('exit', (code) => {
|
|
178
|
-
if (!resolved) {
|
|
179
|
-
cleanup();
|
|
180
|
-
reject(
|
|
181
|
-
new Error(
|
|
182
|
-
`vite-node exited with code ${code} before emitting AOT caches.\n` +
|
|
183
|
-
`Make sure the startScript calls initMionRouter() and the router ` +
|
|
184
|
-
`is fully initialized.\n` +
|
|
185
|
-
(stderr ? `stderr: ${stderr}` : '')
|
|
186
|
-
)
|
|
187
|
-
);
|
|
188
|
-
}
|
|
189
|
-
});
|
|
190
|
-
|
|
191
|
-
// Timeout safety
|
|
192
|
-
const timeoutId = setTimeout(() => {
|
|
193
|
-
if (!resolved) {
|
|
194
|
-
cleanup();
|
|
195
|
-
if (persist) child.kill();
|
|
196
|
-
reject(
|
|
197
|
-
new Error(
|
|
198
|
-
`AOT cache generation timed out (${DEFAULT_TIMEOUT / 1000}s). ` +
|
|
199
|
-
`Make sure the server start script completes initialization.`
|
|
200
|
-
)
|
|
201
|
-
);
|
|
202
|
-
}
|
|
203
|
-
}, DEFAULT_TIMEOUT);
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
/** Loads a module by URL — abstracts over ssrLoadModule and Environment Runner */
|
|
208
|
-
export type ModuleLoader = (url: string) => Promise<Record<string, any>>;
|
|
209
|
-
|
|
210
|
-
/**
|
|
211
|
-
* Loads the startScript with MION_COMPILE=middleware so platform adapters skip server.listen().
|
|
212
|
-
* Generates AOT caches via SSR using a module loader (for same-Vite-process scenarios like Nuxt).
|
|
213
|
-
* After loading, retrieves the caches directly from the router's global state via getSerializedCaches(). */
|
|
214
|
-
export async function loadSSRRouterAndGenerateAOTCaches(
|
|
215
|
-
loadModule: ModuleLoader,
|
|
216
|
-
startScript: string,
|
|
217
|
-
isClient?: boolean
|
|
218
|
-
): Promise<AOTCacheData> {
|
|
219
|
-
const prevCompile = process.env.MION_COMPILE;
|
|
220
|
-
const prevIsClient = process.env.MION_AOT_IS_CLIENT;
|
|
221
|
-
process.env.MION_COMPILE = 'middleware';
|
|
222
|
-
if (isClient) process.env.MION_AOT_IS_CLIENT = 'true';
|
|
223
|
-
|
|
224
|
-
try {
|
|
225
|
-
// Load the start server script — triggers initMionRouter(), populates caches,
|
|
226
|
-
// skips process.send (SSR mode) and skips server.listen() (platform adapters)
|
|
227
|
-
const mod = await loadModule(startScript);
|
|
228
|
-
// Await any Promise-valued exports (e.g. initMionRouter() without top-level await)
|
|
229
|
-
const promises = Object.values(mod).filter((v): v is Promise<any> => v instanceof Promise);
|
|
230
|
-
if (promises.length > 0) await Promise.all(promises);
|
|
231
|
-
|
|
232
|
-
// Get caches directly from the router's global state
|
|
233
|
-
const aotModule = await loadModule('@mionjs/router/aot');
|
|
234
|
-
const caches: AOTCacheData = await aotModule.getSerializedCaches();
|
|
235
|
-
return caches;
|
|
236
|
-
} finally {
|
|
237
|
-
if (prevCompile === undefined) delete process.env.MION_COMPILE;
|
|
238
|
-
else process.env.MION_COMPILE = prevCompile;
|
|
239
|
-
if (prevIsClient === undefined) delete process.env.MION_AOT_IS_CLIENT;
|
|
240
|
-
else process.env.MION_AOT_IS_CLIENT = prevIsClient;
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
// ============ Persistent child management ============
|
|
245
|
-
|
|
246
|
-
/** Kills a persistent child process gracefully (SIGTERM then SIGKILL after 5s) */
|
|
247
|
-
export async function killPersistentChild(child: ChildProcess | null): Promise<void> {
|
|
248
|
-
if (!child || child.killed) return;
|
|
249
|
-
const pid = child.pid;
|
|
250
|
-
|
|
251
|
-
if (pid) {
|
|
252
|
-
try {
|
|
253
|
-
process.kill(-pid, 'SIGTERM');
|
|
254
|
-
} catch {
|
|
255
|
-
child.kill('SIGTERM');
|
|
256
|
-
}
|
|
257
|
-
} else {
|
|
258
|
-
child.kill('SIGTERM');
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
await new Promise<void>((resolve) => {
|
|
262
|
-
const timeout = setTimeout(() => {
|
|
263
|
-
if (child && !child.killed) {
|
|
264
|
-
if (pid) {
|
|
265
|
-
try {
|
|
266
|
-
process.kill(-pid, 'SIGKILL');
|
|
267
|
-
} catch {
|
|
268
|
-
child.kill('SIGKILL');
|
|
269
|
-
}
|
|
270
|
-
} else {
|
|
271
|
-
child.kill('SIGKILL');
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
resolve();
|
|
275
|
-
}, 5000);
|
|
276
|
-
|
|
277
|
-
child!.on('exit', () => {
|
|
278
|
-
clearTimeout(timeout);
|
|
279
|
-
resolve();
|
|
280
|
-
});
|
|
281
|
-
});
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
// ============ Logging ============
|
|
285
|
-
|
|
286
|
-
/** Formats byte size to human-readable string */
|
|
287
|
-
function formatBytes(bytes: number): string {
|
|
288
|
-
if (bytes < 1024) return `${bytes} B`;
|
|
289
|
-
const kb = bytes / 1024;
|
|
290
|
-
if (kb < 1024) return `${kb.toFixed(1)} KB`;
|
|
291
|
-
const mb = kb / 1024;
|
|
292
|
-
return `${mb.toFixed(1)} MB`;
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
/** Logs AOT cache sizes and optionally full contents in verbose mode (DEBUG_AOT) */
|
|
296
|
-
export function logAOTCaches(data: AOTCacheData): void {
|
|
297
|
-
const jitSize = formatBytes(Buffer.byteLength(data.jitFnsCode, 'utf-8'));
|
|
298
|
-
const pureSize = formatBytes(Buffer.byteLength(data.pureFnsCode, 'utf-8'));
|
|
299
|
-
const routerSize = formatBytes(Buffer.byteLength(data.routerCacheCode, 'utf-8'));
|
|
300
|
-
console.log(`[mion] jitFns: ${jitSize}, pureFns: ${pureSize}, routerCache: ${routerSize}`);
|
|
301
|
-
|
|
302
|
-
if (process.env.DEBUG_AOT) {
|
|
303
|
-
console.log('[mion] AOT jitFns cache:\n', data.jitFnsCode);
|
|
304
|
-
console.log('[mion] AOT pureFns cache:\n', data.pureFnsCode);
|
|
305
|
-
console.log('[mion] AOT routerCache:\n', data.routerCacheCode);
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
// ============ Module Generators ============
|
|
310
|
-
|
|
311
|
-
/** Generates the virtual module code for JIT functions cache (exports only). */
|
|
312
|
-
export function generateJitFnsModule(jitFnsCode: string): string {
|
|
313
|
-
return `/* Auto-generated AOT JIT functions cache - do not edit */
|
|
314
|
-
export const jitFnsCache = ${jitFnsCode};
|
|
315
|
-
`;
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
/** Generates the virtual module code for pure functions cache (exports only). */
|
|
319
|
-
export function generatePureFnsModule(pureFnsCode: string): string {
|
|
320
|
-
return `/* Auto-generated AOT pure functions cache - do not edit */
|
|
321
|
-
export const pureFnsCache = ${pureFnsCode};
|
|
322
|
-
`;
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
/** Generates the virtual module code for router methods cache (exports only). */
|
|
326
|
-
export function generateRouterCacheModule(routerCacheCode: string): string {
|
|
327
|
-
return `/* Auto-generated AOT router cache - do not edit */
|
|
328
|
-
export const routerCache = ${routerCacheCode};
|
|
329
|
-
`;
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
/** Generates the combined virtual module that imports all 3 caches and re-exports them. */
|
|
333
|
-
export function generateCombinedCachesModule(): string {
|
|
334
|
-
return `/* Auto-generated combined AOT caches - do not edit */
|
|
335
|
-
import { pureFnsCache } from 'virtual:mion-aot/pure-fns';
|
|
336
|
-
import { jitFnsCache } from 'virtual:mion-aot/jit-fns';
|
|
337
|
-
import { routerCache } from 'virtual:mion-aot/router-cache';
|
|
338
|
-
import { addAOTCaches, addRoutesToCache } from '@mionjs/core';
|
|
339
|
-
|
|
340
|
-
// Auto-register AOT caches as a side effect so they survive tree-shaking
|
|
341
|
-
addAOTCaches(jitFnsCache, pureFnsCache);
|
|
342
|
-
addRoutesToCache(routerCache);
|
|
343
|
-
|
|
344
|
-
export { jitFnsCache, pureFnsCache, routerCache };
|
|
345
|
-
|
|
346
|
-
/** Loads pre-compiled AOT caches (no-op: caches are auto-registered on import). */
|
|
347
|
-
export function loadAOTCaches() {}
|
|
348
|
-
|
|
349
|
-
/** Returns the raw AOT caches. */
|
|
350
|
-
export function getRawAOTCaches() {
|
|
351
|
-
return { jitFnsCache, pureFnsCache, routerCache };
|
|
352
|
-
}
|
|
353
|
-
`;
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
/** Generates a no-op module for when AOT caches are disabled. */
|
|
357
|
-
export function generateNoopModule(comment: string): string {
|
|
358
|
-
return `/* ${comment} */\n`;
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
/** Waits for the server child process to send a mion-platform-ready IPC message. */
|
|
362
|
-
export function waitForPlatformReady(
|
|
363
|
-
child: ChildProcess,
|
|
364
|
-
timeoutMs = 30000
|
|
365
|
-
): Promise<{routerConfig: Record<string, unknown>; platformConfig: Record<string, unknown>}> {
|
|
366
|
-
return new Promise((resolve, reject) => {
|
|
367
|
-
const onMessage = (msg: unknown) => {
|
|
368
|
-
const message = msg as PlatformReadyMessage;
|
|
369
|
-
if (message?.type === 'mion-platform-ready') {
|
|
370
|
-
clearTimeout(timeoutId);
|
|
371
|
-
child.removeListener('message', onMessage);
|
|
372
|
-
resolve({routerConfig: message.routerConfig, platformConfig: message.platformConfig});
|
|
373
|
-
}
|
|
374
|
-
};
|
|
375
|
-
child.on('message', onMessage);
|
|
376
|
-
const timeoutId = setTimeout(() => {
|
|
377
|
-
child.removeListener('message', onMessage);
|
|
378
|
-
reject(
|
|
379
|
-
new Error(
|
|
380
|
-
`Server did not call setPlatformConfig() within ${timeoutMs / 1000}s. ` +
|
|
381
|
-
`Ensure your platform adapter (startNodeServer, startBunServer, etc.) is called after initMionRouter().`
|
|
382
|
-
)
|
|
383
|
-
);
|
|
384
|
-
}, timeoutMs);
|
|
385
|
-
});
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
/** Generates a no-op combined module that exports empty caches. */
|
|
389
|
-
export function generateNoopCombinedModule(): string {
|
|
390
|
-
return `/* No-op: AOT caches not generated */
|
|
391
|
-
export const jitFnsCache = {};
|
|
392
|
-
export const pureFnsCache = {};
|
|
393
|
-
export const routerCache = {};
|
|
394
|
-
export function loadAOTCaches() {}
|
|
395
|
-
export function getRawAOTCaches() { return { jitFnsCache, pureFnsCache, routerCache }; }
|
|
396
|
-
`;
|
|
397
|
-
}
|
|
@@ -1,193 +0,0 @@
|
|
|
1
|
-
/* ########
|
|
2
|
-
* 2026 mion
|
|
3
|
-
* Author: Ma-jerez
|
|
4
|
-
* License: MIT
|
|
5
|
-
* The software is provided "as is", without warranty of any kind.
|
|
6
|
-
* ######## */
|
|
7
|
-
|
|
8
|
-
import {createHash} from 'crypto';
|
|
9
|
-
import {readFileSync, writeFileSync, mkdirSync, readdirSync, statSync} from 'fs';
|
|
10
|
-
import {join, resolve, dirname, relative} from 'path';
|
|
11
|
-
import {AOTCacheOptions, MionServerConfig} from './types.ts';
|
|
12
|
-
import {generateAOTCaches, AOTCacheData, AOTCacheResult} from './aotCacheGenerator.ts';
|
|
13
|
-
|
|
14
|
-
/** Schema for the on-disk cache file */
|
|
15
|
-
interface AOTDiskCacheFile {
|
|
16
|
-
cacheVersion: string;
|
|
17
|
-
hash: string;
|
|
18
|
-
jitFnsCode: string;
|
|
19
|
-
pureFnsCode: string;
|
|
20
|
-
routerCacheCode: string;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/** Bump when mion internals change in a way that invalidates cached output */
|
|
24
|
-
const AOT_DISK_CACHE_VERSION = '2';
|
|
25
|
-
|
|
26
|
-
/** Cache file name */
|
|
27
|
-
const CACHE_FILENAME = 'mion-aot-cache.json';
|
|
28
|
-
|
|
29
|
-
/** Directories to skip when walking the server source tree */
|
|
30
|
-
const SKIP_DIRS = new Set(['node_modules', '.dist', 'dist', '.git', '.vite', 'build', 'coverage', '.coverage']);
|
|
31
|
-
|
|
32
|
-
/** File extensions to include in hash computation */
|
|
33
|
-
const SOURCE_EXTENSIONS = /\.(ts|tsx)$/;
|
|
34
|
-
|
|
35
|
-
/** Test file patterns to exclude from hash computation */
|
|
36
|
-
const TEST_FILE_PATTERN = /\.(spec|test)\.(ts|tsx)$/;
|
|
37
|
-
|
|
38
|
-
/** Read the devtools package version (cached after first call) */
|
|
39
|
-
let devtoolsVersion: string | null = null;
|
|
40
|
-
function getDevtoolsVersion(): string {
|
|
41
|
-
if (devtoolsVersion) return devtoolsVersion;
|
|
42
|
-
try {
|
|
43
|
-
const pkgPath = resolve(dirname(new URL(import.meta.url).pathname), '../../package.json');
|
|
44
|
-
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
45
|
-
devtoolsVersion = pkg.version || '0.0.0';
|
|
46
|
-
} catch {
|
|
47
|
-
devtoolsVersion = '0.0.0';
|
|
48
|
-
}
|
|
49
|
-
return devtoolsVersion as string;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/** Recursively collect file stats (relativePath:mtimeMs:size) for source files */
|
|
53
|
-
function collectFileStats(dir: string, baseDir: string): string[] {
|
|
54
|
-
const entries: string[] = [];
|
|
55
|
-
let files: string[];
|
|
56
|
-
try {
|
|
57
|
-
files = readdirSync(dir);
|
|
58
|
-
} catch {
|
|
59
|
-
return entries;
|
|
60
|
-
}
|
|
61
|
-
for (const file of files) {
|
|
62
|
-
const fullPath = join(dir, file);
|
|
63
|
-
let stat;
|
|
64
|
-
try {
|
|
65
|
-
stat = statSync(fullPath);
|
|
66
|
-
} catch {
|
|
67
|
-
continue;
|
|
68
|
-
}
|
|
69
|
-
if (stat.isDirectory()) {
|
|
70
|
-
if (SKIP_DIRS.has(file)) continue;
|
|
71
|
-
entries.push(...collectFileStats(fullPath, baseDir));
|
|
72
|
-
} else if (SOURCE_EXTENSIONS.test(file) && !TEST_FILE_PATTERN.test(file)) {
|
|
73
|
-
const relativePath = relative(baseDir, fullPath);
|
|
74
|
-
entries.push(`${relativePath}:${stat.mtimeMs}:${stat.size}`);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
return entries;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/** Compute a SHA-256 hash of the server source directory + options */
|
|
81
|
-
export function computeSourceHash(serverConfig: MionServerConfig, aotOptions?: AOTCacheOptions): string {
|
|
82
|
-
const serverDir = dirname(resolve(serverConfig.startScript));
|
|
83
|
-
const fileStats = collectFileStats(serverDir, serverDir);
|
|
84
|
-
fileStats.sort();
|
|
85
|
-
|
|
86
|
-
const hashInput = [
|
|
87
|
-
...fileStats,
|
|
88
|
-
`cacheVersion:${AOT_DISK_CACHE_VERSION}`,
|
|
89
|
-
`devtoolsVersion:${getDevtoolsVersion()}`,
|
|
90
|
-
`excludedFns:${JSON.stringify((aotOptions?.excludedFns || []).slice().sort())}`,
|
|
91
|
-
`excludedPureFns:${JSON.stringify((aotOptions?.excludedPureFns || []).slice().sort())}`,
|
|
92
|
-
`isClient:${!!aotOptions?.isClient}`,
|
|
93
|
-
].join('\n');
|
|
94
|
-
|
|
95
|
-
return createHash('sha256').update(hashInput).digest('hex');
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/** Read and validate the disk cache file. Returns null on any error. */
|
|
99
|
-
function readDiskCache(cacheDir: string): AOTDiskCacheFile | null {
|
|
100
|
-
const cachePath = join(cacheDir, CACHE_FILENAME);
|
|
101
|
-
try {
|
|
102
|
-
const raw = readFileSync(cachePath, 'utf-8');
|
|
103
|
-
const parsed = JSON.parse(raw);
|
|
104
|
-
if (
|
|
105
|
-
typeof parsed.cacheVersion === 'string' &&
|
|
106
|
-
typeof parsed.hash === 'string' &&
|
|
107
|
-
typeof parsed.jitFnsCode === 'string' &&
|
|
108
|
-
typeof parsed.pureFnsCode === 'string' &&
|
|
109
|
-
typeof parsed.routerCacheCode === 'string'
|
|
110
|
-
) {
|
|
111
|
-
return parsed as AOTDiskCacheFile;
|
|
112
|
-
}
|
|
113
|
-
return null;
|
|
114
|
-
} catch {
|
|
115
|
-
return null;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
/** Write cache data to disk. Best-effort — logs warning on failure. */
|
|
120
|
-
function writeDiskCache(cacheDir: string, hash: string, data: AOTCacheData): void {
|
|
121
|
-
const cachePath = join(cacheDir, CACHE_FILENAME);
|
|
122
|
-
try {
|
|
123
|
-
mkdirSync(cacheDir, {recursive: true});
|
|
124
|
-
const cacheFile: AOTDiskCacheFile = {
|
|
125
|
-
cacheVersion: AOT_DISK_CACHE_VERSION,
|
|
126
|
-
hash,
|
|
127
|
-
jitFnsCode: data.jitFnsCode,
|
|
128
|
-
pureFnsCode: data.pureFnsCode,
|
|
129
|
-
routerCacheCode: data.routerCacheCode,
|
|
130
|
-
};
|
|
131
|
-
writeFileSync(cachePath, JSON.stringify(cacheFile), 'utf-8');
|
|
132
|
-
} catch (err) {
|
|
133
|
-
console.warn(`[mion] Warning: Could not write AOT disk cache: ${err instanceof Error ? err.message : String(err)}`);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
/** Resolve the cache directory from options and Vite's cacheDir */
|
|
138
|
-
export function resolveCacheDir(options: AOTCacheOptions, viteCacheDir?: string): string {
|
|
139
|
-
if (options.cache === false) return '';
|
|
140
|
-
if (typeof options.cache === 'string') return resolve(options.cache);
|
|
141
|
-
return viteCacheDir || resolve(process.cwd(), 'node_modules/.vite');
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
/** Load AOT caches from disk if valid, otherwise generate fresh and save to disk. */
|
|
145
|
-
export async function getOrGenerateAOTCaches(
|
|
146
|
-
serverConfig: MionServerConfig,
|
|
147
|
-
aotOptions: AOTCacheOptions | undefined,
|
|
148
|
-
cacheDir: string
|
|
149
|
-
): Promise<AOTCacheResult> {
|
|
150
|
-
const forceRegenerate = process.env.MION_AOT_FORCE === 'true';
|
|
151
|
-
// IPC mode always needs a live child process (the server), so skip disk caching entirely
|
|
152
|
-
const isIPCMode = serverConfig.runMode === 'childProcess';
|
|
153
|
-
const cachingEnabled = cacheDir !== '' && !forceRegenerate && !isIPCMode;
|
|
154
|
-
|
|
155
|
-
let hash = '';
|
|
156
|
-
if (cachingEnabled) {
|
|
157
|
-
hash = computeSourceHash(serverConfig, aotOptions);
|
|
158
|
-
const cached = readDiskCache(cacheDir);
|
|
159
|
-
if (cached && cached.cacheVersion === AOT_DISK_CACHE_VERSION && cached.hash === hash) {
|
|
160
|
-
console.log('[mion] AOT caches loaded from disk cache (source unchanged)');
|
|
161
|
-
return {
|
|
162
|
-
data: {
|
|
163
|
-
jitFnsCode: cached.jitFnsCode,
|
|
164
|
-
pureFnsCode: cached.pureFnsCode,
|
|
165
|
-
routerCacheCode: cached.routerCacheCode,
|
|
166
|
-
},
|
|
167
|
-
};
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
// Cache miss or caching disabled — generate fresh
|
|
172
|
-
const result = await generateAOTCaches(serverConfig, undefined, aotOptions?.isClient);
|
|
173
|
-
|
|
174
|
-
if (cachingEnabled) {
|
|
175
|
-
if (!hash) hash = computeSourceHash(serverConfig, aotOptions);
|
|
176
|
-
writeDiskCache(cacheDir, hash, result.data);
|
|
177
|
-
console.log('[mion] AOT caches saved to disk cache');
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
return result;
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
/** Update the disk cache after HMR regeneration */
|
|
184
|
-
export function updateDiskCache(
|
|
185
|
-
serverConfig: MionServerConfig,
|
|
186
|
-
aotOptions: AOTCacheOptions | undefined,
|
|
187
|
-
data: AOTCacheData,
|
|
188
|
-
cacheDir: string
|
|
189
|
-
): void {
|
|
190
|
-
if (!cacheDir || aotOptions?.cache === false) return;
|
|
191
|
-
const hash = computeSourceHash(serverConfig, aotOptions);
|
|
192
|
-
writeDiskCache(cacheDir, hash, data);
|
|
193
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/* ########
|
|
2
|
-
* 2026 mion
|
|
3
|
-
* Author: Ma-jerez
|
|
4
|
-
* License: MIT
|
|
5
|
-
* The software is provided "as is", without warranty of any kind.
|
|
6
|
-
* ######## */
|
|
7
|
-
|
|
8
|
-
import type {Plugin} from 'vite';
|
|
9
|
-
import {writeFileSync} from 'fs';
|
|
10
|
-
|
|
11
|
-
/** Writes {"type": "commonjs"} package.json in CJS output dirs so Node.js doesn't treat .cjs files ambiguously */
|
|
12
|
-
export function cjsPackageJsonPlugin(...cjsDirs: string[]): Plugin {
|
|
13
|
-
return {
|
|
14
|
-
name: 'cjs-package-json',
|
|
15
|
-
closeBundle() {
|
|
16
|
-
for (const dir of cjsDirs) {
|
|
17
|
-
writeFileSync(`${dir}/package.json`, '{"type":"commonjs"}\n');
|
|
18
|
-
}
|
|
19
|
-
},
|
|
20
|
-
};
|
|
21
|
-
}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
/* ########
|
|
2
|
-
* 2026 mion
|
|
3
|
-
* Author: Ma-jerez
|
|
4
|
-
* License: MIT
|
|
5
|
-
* The software is provided "as is", without warranty of any kind.
|
|
6
|
-
* ######## */
|
|
7
|
-
|
|
8
|
-
export const BODY_HASH_LENGTH = 14;
|
|
9
|
-
|
|
10
|
-
/** Virtual module ID for the pure functions registry (client-extracted pure functions) */
|
|
11
|
-
export const VIRTUAL_SERVER_PURE_FNS = 'virtual:mion-server-pure-fns';
|
|
12
|
-
|
|
13
|
-
// ============ AOT Virtual Modules ============
|
|
14
|
-
|
|
15
|
-
/** Virtual module ID for JIT functions + pure functions cache (from running the router) */
|
|
16
|
-
export const VIRTUAL_AOT_JIT_FNS = 'virtual:mion-aot/jit-fns';
|
|
17
|
-
|
|
18
|
-
/** Virtual module ID for pure functions cache (standalone, from client AST extraction) */
|
|
19
|
-
export const VIRTUAL_AOT_PURE_FNS = 'virtual:mion-aot/pure-fns';
|
|
20
|
-
|
|
21
|
-
/** Virtual module ID for router methods cache */
|
|
22
|
-
export const VIRTUAL_AOT_ROUTER_CACHE = 'virtual:mion-aot/router-cache';
|
|
23
|
-
|
|
24
|
-
/** Virtual module ID for combined AOT caches (re-exports all 3 cache modules) */
|
|
25
|
-
export const VIRTUAL_AOT_CACHES = 'virtual:mion-aot/caches';
|
|
26
|
-
|
|
27
|
-
/** The real module that acts as a shim for AOT caches (empty caches). Swapped by the plugin when AOT is enabled. */
|
|
28
|
-
export const AOT_CACHES_SHIM = '@mionjs/core/aot-caches';
|
|
29
|
-
|
|
30
|
-
/** The real module that acts as a shim for server pure functions (empty cache). Swapped by the plugin when serverPureFunctions is enabled. */
|
|
31
|
-
export const SERVER_PURE_FNS_SHIM = '@mionjs/core/server-pure-fns';
|
|
32
|
-
|
|
33
|
-
/** The namespace used for all pureServerFn functions */
|
|
34
|
-
export const PURE_SERVER_FN_NAMESPACE = 'pureServerFn';
|
|
35
|
-
|
|
36
|
-
/** Resolves a virtual module ID to its internal Vite ID (\0 prefix + .ts extension) */
|
|
37
|
-
export function resolveVirtualId(id: string): string {
|
|
38
|
-
return '\0' + id + '.ts';
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
// ============ Reflection Stubs (for excludeReflection) ============
|
|
42
|
-
|
|
43
|
-
/** Modules stubbed out when excludeReflection is enabled (not needed at runtime in AOT mode) */
|
|
44
|
-
export const REFLECTION_MODULES = ['@mionjs/run-types', '@deepkit/type', '@deepkit/core'];
|
|
45
|
-
|
|
46
|
-
/** Prefix for virtual stub module IDs */
|
|
47
|
-
export const VIRTUAL_STUB_PREFIX = 'virtual:mion-stub/';
|
|
48
|
-
|
|
49
|
-
// Purity validation constants (ALLOWED_GLOBALS, FORBIDDEN_IDENTIFIERS, FACTORY_FORBIDDEN_IDENTIFIERS)
|
|
50
|
-
// are in ../pureFns/purityRules.ts, shared with the eslint plugin.
|