vinext 1.0.0-beta.9 → 1.0.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/README.md +150 -92
- package/THIRD_PARTY_LICENSES.md +25 -0
- package/dist/_virtual/_rolldown/runtime.js +25 -0
- package/dist/build/action-owner-manifest.d.ts +8 -9
- package/dist/build/action-owner-manifest.js +23 -5
- package/dist/build/assets-ignore.d.ts +3 -4
- package/dist/build/clean-output.d.ts +2 -3
- package/dist/build/client-build-config.d.ts +40 -12
- package/dist/build/client-build-config.js +76 -6
- package/dist/build/css-url-assets.d.ts +4 -5
- package/dist/build/css-url-assets.js +5 -2
- package/dist/build/google-fonts/build-url.d.ts +3 -4
- package/dist/build/google-fonts/fallback-metrics.d.ts +3 -4
- package/dist/build/google-fonts/find-font-files-in-css.d.ts +2 -3
- package/dist/build/google-fonts/font-metadata.d.ts +2 -3
- package/dist/build/google-fonts/get-axes.d.ts +2 -3
- package/dist/build/google-fonts/sort-variants.d.ts +2 -3
- package/dist/build/google-fonts/validate.d.ts +2 -3
- package/dist/build/google-fonts/validate.js +8 -4
- package/dist/build/inject-pregenerated-paths.d.ts +2 -3
- package/dist/build/inject-pregenerated-paths.js +16 -14
- package/dist/build/inline-css.d.ts +3 -4
- package/dist/build/layout-classification-types.d.ts +4 -5
- package/dist/build/layout-classification.d.ts +7 -8
- package/dist/build/lifecycle.d.ts +42 -0
- package/dist/build/lifecycle.js +253 -0
- package/dist/build/module-dependency-cache.d.ts +2 -3
- package/dist/build/next-client-runtime-manifests.d.ts +4 -5
- package/dist/build/nitro-route-rules.d.ts +6 -7
- package/dist/build/nitro-route-rules.js +1 -1
- package/dist/build/pages-client-assets-module.d.ts +4 -8
- package/dist/build/pages-client-assets-module.js +1 -13
- package/dist/build/precompress.d.ts +2 -3
- package/dist/build/prerender-cloudflare-loader.d.ts +4 -0
- package/dist/build/prerender-cloudflare-loader.js +49 -0
- package/dist/build/prerender-paths.d.ts +36 -11
- package/dist/build/prerender-paths.js +273 -97
- package/dist/build/prerender-phase.d.ts +2 -3
- package/dist/build/prerender-server-entry.js +11 -3
- package/dist/build/prerender-server-pool.d.ts +9 -6
- package/dist/build/prerender-server-pool.js +8 -5
- package/dist/build/prerender.d.ts +65 -15
- package/dist/build/prerender.js +139 -43
- package/dist/build/preview-credentials.d.ts +5 -6
- package/dist/build/preview-credentials.js +2 -2
- package/dist/build/public-dir-conflict.d.ts +5 -6
- package/dist/build/public-dir-conflict.js +2 -1
- package/dist/build/report.d.ts +24 -20
- package/dist/build/report.js +10 -2
- package/dist/build/route-classification-injector.d.ts +2 -3
- package/dist/build/route-classification-manifest.d.ts +5 -6
- package/dist/build/run-prerender.d.ts +11 -9
- package/dist/build/run-prerender.js +25 -16
- package/dist/build/server-entry.d.ts +4 -0
- package/dist/build/server-entry.js +28 -0
- package/dist/build/server-manifest.d.ts +8 -3
- package/dist/build/server-manifest.js +14 -2
- package/dist/build/ssr-manifest.d.ts +5 -6
- package/dist/build/standalone.d.ts +2 -3
- package/dist/build/standalone.js +2 -2
- package/dist/build/static-export.d.ts +6 -7
- package/dist/cache/cache-adapters-virtual.d.ts +60 -20
- package/dist/cache/cache-adapters-virtual.js +50 -7
- package/dist/check.d.ts +11 -10
- package/dist/check.js +467 -176
- package/dist/cli-args.d.ts +7 -16
- package/dist/cli-args.js +2 -45
- package/dist/cli-dev-config.d.ts +10 -7
- package/dist/cli-dev-config.js +160 -3
- package/dist/cli.js +124 -442
- package/dist/client/app-nav-failure-handler.d.ts +6 -7
- package/dist/client/client-rewrite-matcher.d.ts +2 -3
- package/dist/client/client-rewrites.d.ts +4 -5
- package/dist/client/dev-error-overlay-store.d.ts +13 -14
- package/dist/client/dev-error-overlay.d.ts +15 -15
- package/dist/client/dev-error-overlay.js +8 -5
- package/dist/client/instrumentation-client-inject.d.ts +3 -4
- package/dist/client/instrumentation-client-state.d.ts +5 -6
- package/dist/client/instrumentation-client.d.ts +3 -4
- package/dist/client/navigation-runtime.d.ts +21 -17
- package/dist/client/navigation-runtime.js +2 -1
- package/dist/client/pages-router-link-navigation.d.ts +4 -5
- package/dist/client/react-instance.d.ts +2 -3
- package/dist/client/validate-module-path.d.ts +2 -3
- package/dist/client/vinext-next-data.d.ts +7 -10
- package/dist/client/window-next.d.ts +4 -5
- package/dist/config/config-matchers.d.ts +16 -16
- package/dist/config/config-matchers.js +2 -4
- package/dist/config/dotenv.d.ts +3 -4
- package/dist/config/dotenv.js +2 -1
- package/dist/config/next-config.d.ts +31 -27
- package/dist/config/next-config.js +163 -16
- package/dist/config/prerender.d.ts +20 -16
- package/dist/config/prerender.js +10 -4
- package/dist/config/request-context.d.ts +5 -6
- package/dist/config/server-external-packages.d.ts +14 -3
- package/dist/config/server-external-packages.js +37 -3
- package/dist/config/tsconfig-paths.d.ts +3 -4
- package/dist/deps/.pnpm/ignore@5.3.2/deps/ignore/index.js +189 -0
- package/dist/deps/.pnpm/ua-parser-js@1.0.35/deps/ua-parser-js/src/ua-parser.js +1057 -0
- package/dist/entries/app-browser-entry.d.ts +4 -5
- package/dist/entries/app-browser-entry.js +1 -3
- package/dist/entries/app-rsc-entry.d.ts +10 -3
- package/dist/entries/app-rsc-entry.js +502 -51
- package/dist/entries/app-rsc-manifest.d.ts +4 -3
- package/dist/entries/app-rsc-manifest.js +26 -8
- package/dist/entries/app-ssr-entry.d.ts +2 -3
- package/dist/entries/app-ssr-entry.js +8 -1
- package/dist/entries/pages-client-entry.d.ts +3 -3
- package/dist/entries/pages-client-entry.js +17 -2
- package/dist/entries/pages-server-entry.d.ts +13 -3
- package/dist/entries/pages-server-entry.js +234 -33
- package/dist/entries/runtime-entry-module.d.ts +4 -5
- package/dist/image/image-adapters-virtual.d.ts +4 -5
- package/dist/index.d.ts +10 -11
- package/dist/index.js +711 -189
- package/dist/init-cloudflare.d.ts +26 -17
- package/dist/init-cloudflare.js +710 -102
- package/dist/init-platform.d.ts +26 -22
- package/dist/init-platform.js +85 -29
- package/dist/init.d.ts +19 -13
- package/dist/init.js +123 -41
- package/dist/plugins/action-owner-manifest.d.ts +3 -4
- package/dist/plugins/action-owner-manifest.js +10 -3
- package/dist/plugins/ast-scope.d.ts +10 -11
- package/dist/plugins/ast-scope.js +10 -22
- package/dist/plugins/ast-utils.d.ts +16 -29
- package/dist/plugins/ast-utils.js +27 -71
- package/dist/plugins/async-hooks-stub.d.ts +2 -3
- package/dist/plugins/client-reference-dedup.d.ts +4 -5
- package/dist/plugins/css-data-url.d.ts +2 -3
- package/dist/plugins/css-module-imports.d.ts +3 -4
- package/dist/plugins/css-module-imports.js +1 -1
- package/dist/plugins/dynamic-preload-metadata.d.ts +3 -4
- package/dist/plugins/dynamic-preload-metadata.js +55 -154
- package/dist/plugins/environment.d.ts +2 -3
- package/dist/plugins/extensionless-dynamic-import.d.ts +2 -3
- package/dist/plugins/extensionless-dynamic-import.js +6 -10
- package/dist/plugins/fonts.d.ts +10 -11
- package/dist/plugins/fonts.js +4 -3
- package/dist/plugins/ignore-dynamic-requests.d.ts +3 -4
- package/dist/plugins/ignore-dynamic-requests.js +60 -89
- package/dist/plugins/import-meta-url.d.ts +6 -7
- package/dist/plugins/import-meta-url.js +31 -43
- package/dist/plugins/instrumentation-client.d.ts +3 -3
- package/dist/plugins/instrumentation-client.js +46 -10
- package/dist/plugins/middleware-export-validation.d.ts +3 -4
- package/dist/plugins/middleware-export-validation.js +3 -3
- package/dist/plugins/middleware-server-only.d.ts +2 -3
- package/dist/plugins/og-asset-ownership.d.ts +3 -4
- package/dist/plugins/og-assets.d.ts +4 -5
- package/dist/plugins/og-assets.js +32 -13
- package/dist/plugins/og-harfbuzz.d.ts +24 -0
- package/dist/plugins/og-harfbuzz.js +260 -0
- package/dist/plugins/optimize-imports.d.ts +7 -7
- package/dist/plugins/optimize-imports.js +32 -44
- package/dist/plugins/pages-node-externals.d.ts +2 -3
- package/dist/plugins/pages-node-externals.js +6 -11
- package/dist/plugins/postcss.d.ts +8 -4
- package/dist/plugins/postcss.js +1 -1
- package/dist/plugins/remove-console.d.ts +2 -3
- package/dist/plugins/remove-console.js +0 -1
- package/dist/plugins/require-condition-resolution.d.ts +3 -4
- package/dist/plugins/require-condition-resolution.js +17 -18
- package/dist/plugins/require-context.d.ts +2 -3
- package/dist/plugins/require-context.js +13 -21
- package/dist/plugins/rsc-client-reference-loaders.d.ts +2 -3
- package/dist/plugins/rsc-client-shim-excludes.d.ts +4 -5
- package/dist/plugins/rsc-client-shim-excludes.js +1 -0
- package/dist/plugins/rsc-reference-validation-normalizer.d.ts +2 -3
- package/dist/plugins/sass.d.ts +7 -8
- package/dist/plugins/sass.js +7 -4
- package/dist/plugins/server-externals-manifest.d.ts +2 -3
- package/dist/plugins/strip-server-exports.d.ts +5 -6
- package/dist/plugins/strip-server-exports.js +1 -1
- package/dist/plugins/styled-jsx.d.ts +2 -3
- package/dist/plugins/styled-jsx.js +7 -7
- package/dist/plugins/transform-cache.d.ts +2 -3
- package/dist/plugins/transform-result.d.ts +3 -4
- package/dist/plugins/transitive-externals.d.ts +2 -3
- package/dist/plugins/typeof-window.d.ts +6 -7
- package/dist/plugins/typeof-window.js +30 -31
- package/dist/plugins/use-cache-callable.d.ts +2 -5
- package/dist/plugins/use-cache-callable.js +43 -22
- package/dist/plugins/wasm-module-import.d.ts +2 -3
- package/dist/plugins/worker-image-imports.d.ts +2 -3
- package/dist/plugins/worker-image-imports.js +6 -8
- package/dist/routing/app-route-graph.d.ts +19 -19
- package/dist/routing/app-route-graph.js +3 -2
- package/dist/routing/app-router.d.ts +19 -6
- package/dist/routing/app-router.js +24 -2
- package/dist/routing/file-matcher.d.ts +9 -10
- package/dist/routing/pages-router.d.ts +6 -6
- package/dist/routing/pages-router.js +1 -1
- package/dist/routing/route-matching.d.ts +4 -5
- package/dist/routing/route-matching.js +4 -2
- package/dist/routing/route-pattern.d.ts +13 -14
- package/dist/routing/route-trie.d.ts +5 -6
- package/dist/routing/route-validation.d.ts +3 -4
- package/dist/routing/route-validation.js +12 -11
- package/dist/routing/utils.d.ts +13 -14
- package/dist/server/accept-encoding.d.ts +9 -10
- package/dist/server/api-handler.d.ts +2 -3
- package/dist/server/api-handler.js +9 -6
- package/dist/server/app-action-forwarding.d.ts +3 -4
- package/dist/server/app-action-forwarding.js +1 -1
- package/dist/server/app-action-request.d.ts +2 -3
- package/dist/server/app-bfcache-id.d.ts +3 -4
- package/dist/server/app-bfcache-identity.d.ts +8 -9
- package/dist/server/app-browser-action-result.d.ts +15 -16
- package/dist/server/app-browser-client-reuse-manifest.d.ts +2 -3
- package/dist/server/app-browser-entry.js +87 -34
- package/dist/server/app-browser-error.d.ts +5 -6
- package/dist/server/app-browser-error.js +9 -3
- package/dist/server/app-browser-history-controller.d.ts +4 -5
- package/dist/server/app-browser-hydration.d.ts +16 -6
- package/dist/server/app-browser-hydration.js +14 -1
- package/dist/server/app-browser-interception-context.d.ts +3 -4
- package/dist/server/app-browser-mpa-navigation.d.ts +4 -5
- package/dist/server/app-browser-navigation-abort.d.ts +3 -4
- package/dist/server/app-browser-navigation-controller.d.ts +8 -8
- package/dist/server/app-browser-navigation-controller.js +8 -4
- package/dist/server/app-browser-navigation-response.d.ts +2 -3
- package/dist/server/app-browser-popstate.d.ts +4 -5
- package/dist/server/app-browser-prefetch-response.d.ts +5 -6
- package/dist/server/app-browser-rsc-redirect.d.ts +4 -5
- package/dist/server/app-browser-server-action-client.d.ts +7 -6
- package/dist/server/app-browser-server-action-client.js +9 -5
- package/dist/server/app-browser-server-action-navigation.d.ts +2 -3
- package/dist/server/app-browser-state.d.ts +17 -17
- package/dist/server/app-browser-state.js +6 -2
- package/dist/server/app-browser-stream.d.ts +4 -5
- package/dist/server/app-browser-stream.js +8 -6
- package/dist/server/app-browser-supplemental-refresh.d.ts +11 -12
- package/dist/server/app-browser-visible-commit.d.ts +6 -7
- package/dist/server/app-client-reference-preloader.d.ts +2 -3
- package/dist/server/app-elements-wire-key.d.ts +25 -0
- package/dist/server/app-elements-wire-key.js +69 -0
- package/dist/server/app-elements-wire.d.ts +34 -53
- package/dist/server/app-elements-wire.js +4 -75
- package/dist/server/app-elements.d.ts +5 -5
- package/dist/server/app-elements.js +1 -1
- package/dist/server/app-fallback-renderer.d.ts +4 -4
- package/dist/server/app-fallback-renderer.js +6 -6
- package/dist/server/app-fetch-tracing.d.ts +15 -0
- package/dist/server/app-fetch-tracing.js +38 -0
- package/dist/server/app-history-state.d.ts +26 -27
- package/dist/server/app-history-state.js +19 -11
- package/dist/server/app-hook-warning-suppression.d.ts +2 -3
- package/dist/server/app-hydration-cache-publication.d.ts +3 -4
- package/dist/server/app-inline-css-client.d.ts +3 -4
- package/dist/server/app-interception-context-header.d.ts +2 -3
- package/dist/server/app-layout-param-observation.d.ts +7 -8
- package/dist/server/app-metadata-tracing.d.ts +12 -0
- package/dist/server/app-metadata-tracing.js +17 -0
- package/dist/server/app-middleware.d.ts +7 -7
- package/dist/server/app-middleware.js +2 -3
- package/dist/server/app-mounted-slots-header.d.ts +2 -3
- package/dist/server/app-mounted-slots-header.js +2 -2
- package/dist/server/app-optimistic-routing.d.ts +10 -11
- package/dist/server/app-optimistic-routing.js +3 -2
- package/dist/server/app-page-boundary-render.d.ts +6 -6
- package/dist/server/app-page-boundary-render.js +10 -4
- package/dist/server/app-page-boundary.d.ts +9 -10
- package/dist/server/app-page-boundary.js +1 -1
- package/dist/server/app-page-cache-finalizer.d.ts +18 -9
- package/dist/server/app-page-cache-finalizer.js +51 -16
- package/dist/server/app-page-cache-render.d.ts +8 -5
- package/dist/server/app-page-cache-render.js +22 -5
- package/dist/server/app-page-cache.d.ts +28 -9
- package/dist/server/app-page-cache.js +95 -24
- package/dist/server/app-page-dispatch.d.ts +34 -12
- package/dist/server/app-page-dispatch.js +181 -64
- package/dist/server/app-page-element-builder.d.ts +13 -11
- package/dist/server/app-page-element-builder.js +104 -61
- package/dist/server/app-page-execution.d.ts +14 -14
- package/dist/server/app-page-execution.js +11 -7
- package/dist/server/app-page-head.d.ts +19 -16
- package/dist/server/app-page-head.js +25 -25
- package/dist/server/app-page-http-access-fallback-metadata.d.ts +6 -5
- package/dist/server/app-page-http-access-fallback-metadata.js +9 -2
- package/dist/server/app-page-method.d.ts +5 -11
- package/dist/server/app-page-method.js +2 -9
- package/dist/server/app-page-params.d.ts +5 -6
- package/dist/server/app-page-ppr-runtime.d.ts +2 -2
- package/dist/server/app-page-probe.d.ts +5 -6
- package/dist/server/app-page-probe.js +5 -4
- package/dist/server/app-page-render-identity.d.ts +4 -5
- package/dist/server/app-page-render-observation.d.ts +8 -9
- package/dist/server/app-page-render-observation.js +1 -1
- package/dist/server/app-page-render.d.ts +41 -6
- package/dist/server/app-page-render.js +171 -25
- package/dist/server/app-page-request.d.ts +10 -9
- package/dist/server/app-page-request.js +16 -12
- package/dist/server/app-page-response.d.ts +20 -9
- package/dist/server/app-page-response.js +30 -12
- package/dist/server/app-page-route-wiring.d.ts +15 -15
- package/dist/server/app-page-route-wiring.js +31 -24
- package/dist/server/app-page-search-params-observation.d.ts +26 -5
- package/dist/server/app-page-search-params-observation.js +42 -6
- package/dist/server/app-page-segment-plan.d.ts +2 -3
- package/dist/server/app-page-segment-state.d.ts +11 -12
- package/dist/server/app-page-stream.d.ts +27 -11
- package/dist/server/app-page-stream.js +34 -6
- package/dist/server/app-page-tracing.d.ts +33 -0
- package/dist/server/app-page-tracing.js +49 -0
- package/dist/server/app-pages-bridge.d.ts +6 -6
- package/dist/server/app-pages-bridge.js +17 -4
- package/dist/server/app-post-middleware-context.d.ts +2 -3
- package/dist/server/app-ppr-fallback-shell-render.d.ts +3 -4
- package/dist/server/app-ppr-fallback-shell-render.js +3 -2
- package/dist/server/app-ppr-fallback-shell.d.ts +6 -7
- package/dist/server/app-prerender-endpoints.d.ts +5 -5
- package/dist/server/app-prerender-endpoints.js +3 -1
- package/dist/server/app-prerender-static-params.d.ts +15 -7
- package/dist/server/app-prerender-static-params.js +24 -9
- package/dist/server/app-render-dependency.d.ts +14 -13
- package/dist/server/app-render-dependency.js +5 -1
- package/dist/server/app-request-context.d.ts +3 -4
- package/dist/server/app-request-stage-context.d.ts +5 -0
- package/dist/server/app-request-stage-context.js +11 -0
- package/dist/server/app-request-stage-dispatch.d.ts +25 -0
- package/dist/server/app-request-stage-dispatch.js +54 -0
- package/dist/server/app-request-stage-independent-entry.d.ts +8 -0
- package/dist/server/app-request-stage-independent-entry.js +115 -0
- package/dist/server/app-response-header-provenance.d.ts +13 -7
- package/dist/server/app-response-header-provenance.js +34 -1
- package/dist/server/app-response-stage-entry.d.ts +9 -0
- package/dist/server/app-response-stage-entry.js +87 -0
- package/dist/server/app-route-handler-cache.d.ts +2 -3
- package/dist/server/app-route-handler-cache.js +46 -34
- package/dist/server/app-route-handler-dispatch.d.ts +3 -3
- package/dist/server/app-route-handler-dispatch.js +68 -54
- package/dist/server/app-route-handler-execution.d.ts +17 -13
- package/dist/server/app-route-handler-execution.js +69 -18
- package/dist/server/app-route-handler-middleware-context.d.ts +8 -0
- package/dist/server/app-route-handler-middleware-context.js +15 -0
- package/dist/server/app-route-handler-policy.d.ts +11 -11
- package/dist/server/app-route-handler-response.d.ts +9 -10
- package/dist/server/app-route-handler-response.js +2 -0
- package/dist/server/app-route-handler-runtime.d.ts +9 -10
- package/dist/server/app-route-handler-runtime.js +20 -16
- package/dist/server/app-route-module-loader.d.ts +6 -7
- package/dist/server/app-route-request-built-ins.d.ts +3 -4
- package/dist/server/app-route-tree-prefetch.d.ts +6 -7
- package/dist/server/app-route-tree-prefetch.js +2 -1
- package/dist/server/app-router-entry.d.ts +2 -0
- package/dist/server/app-router-entry.js +28 -8
- package/dist/server/app-rsc-cache-busting.d.ts +34 -27
- package/dist/server/app-rsc-cache-busting.js +14 -2
- package/dist/server/app-rsc-combined-handler.d.ts +9 -0
- package/dist/server/app-rsc-combined-handler.js +11 -0
- package/dist/server/app-rsc-embedded-chunks.d.ts +6 -7
- package/dist/server/app-rsc-error-handler.d.ts +12 -6
- package/dist/server/app-rsc-error-handler.js +15 -6
- package/dist/server/app-rsc-errors.d.ts +12 -9
- package/dist/server/app-rsc-errors.js +15 -13
- package/dist/server/app-rsc-handler.d.ts +31 -6
- package/dist/server/app-rsc-handler.js +411 -61
- package/dist/server/app-rsc-redirect-flight.d.ts +4 -5
- package/dist/server/app-rsc-render-mode.d.ts +8 -9
- package/dist/server/app-rsc-request-normalization.d.ts +3 -3
- package/dist/server/app-rsc-request-normalization.js +2 -1
- package/dist/server/app-rsc-response-finalizer.d.ts +8 -5
- package/dist/server/app-rsc-response-finalizer.js +6 -6
- package/dist/server/app-rsc-response-stage.d.ts +6 -0
- package/dist/server/app-rsc-response-stage.js +251 -0
- package/dist/server/app-rsc-route-matching.d.ts +3 -4
- package/dist/server/app-rsc-route-matching.js +3 -2
- package/dist/server/app-rsc-state-fingerprint.d.ts +3 -4
- package/dist/server/app-rsc-vary.d.ts +16 -0
- package/dist/server/app-rsc-vary.js +31 -0
- package/dist/server/app-segment-config.d.ts +119 -7
- package/dist/server/app-segment-config.js +242 -2
- package/dist/server/app-server-action-execution.d.ts +16 -12
- package/dist/server/app-server-action-execution.js +86 -33
- package/dist/server/app-ssr-entry.d.ts +14 -4
- package/dist/server/app-ssr-entry.js +61 -14
- package/dist/server/app-ssr-error-meta.d.ts +3 -4
- package/dist/server/app-ssr-error-meta.js +2 -1
- package/dist/server/app-ssr-router-instance.d.ts +2 -3
- package/dist/server/app-ssr-search-params-gate.d.ts +20 -0
- package/dist/server/app-ssr-search-params-gate.js +54 -0
- package/dist/server/app-ssr-stream.d.ts +13 -9
- package/dist/server/app-ssr-stream.js +33 -7
- package/dist/server/app-static-generation.d.ts +4 -5
- package/dist/server/app-visited-response-cache.d.ts +11 -12
- package/dist/server/app-visited-response-cache.js +2 -2
- package/dist/server/app-worker-stages.d.ts +112 -0
- package/dist/server/app-worker-stages.js +105 -0
- package/dist/server/artifact-compatibility.d.ts +11 -12
- package/dist/server/before-interactive-head.d.ts +2 -3
- package/dist/server/bfcache-identity.d.ts +7 -8
- package/dist/server/cache-control.d.ts +35 -13
- package/dist/server/cache-control.js +71 -5
- package/dist/server/cache-headers.d.ts +3 -4
- package/dist/server/cache-proof.d.ts +75 -70
- package/dist/server/cache-proof.js +9 -1
- package/dist/server/cacheability-limits.d.ts +4 -5
- package/dist/server/cacheability-limits.js +2 -2
- package/dist/server/cacheability-manifest.d.ts +42 -16
- package/dist/server/cacheability-manifest.js +60 -10
- package/dist/server/cacheability-request.d.ts +37 -8
- package/dist/server/cacheability-request.js +159 -57
- package/dist/server/client-reuse-manifest.d.ts +17 -18
- package/dist/server/client-reuse-manifest.js +2 -2
- package/dist/server/client-trace-metadata.d.ts +9 -6
- package/dist/server/client-trace-metadata.js +27 -15
- package/dist/server/cloudflare-workers-tracing.d.ts +1 -0
- package/dist/server/cloudflare-workers-tracing.js +8 -0
- package/dist/server/config-headers.d.ts +19 -5
- package/dist/server/config-headers.js +25 -11
- package/dist/server/cookie-utils.d.ts +2 -3
- package/dist/server/csp.d.ts +5 -6
- package/dist/server/default-global-error-module.d.ts +2 -3
- package/dist/server/default-global-not-found-module.d.ts +2 -3
- package/dist/server/default-not-found-module.d.ts +2 -3
- package/dist/server/defer-until-stream-consumed.d.ts +2 -3
- package/dist/server/defer-until-stream-consumed.js +2 -1
- package/dist/server/dev-initial-server-error.d.ts +3 -4
- package/dist/server/dev-initial-server-error.js +2 -1
- package/dist/server/dev-lockfile.d.ts +7 -8
- package/dist/server/dev-lockfile.js +4 -1
- package/dist/server/dev-module-runner.d.ts +2 -3
- package/dist/server/dev-origin-check.d.ts +5 -6
- package/dist/server/dev-route-files.d.ts +2 -3
- package/dist/server/dev-server.d.ts +4 -5
- package/dist/server/dev-server.js +130 -61
- package/dist/server/dev-stack-sourcemap.d.ts +7 -7
- package/dist/server/dev-stack-sourcemap.js +1 -1
- package/dist/server/document-initial-head.d.ts +3 -4
- package/dist/server/edge-api-runtime.d.ts +4 -5
- package/dist/server/fetch-handler.d.ts +3 -2
- package/dist/server/fetch-handler.js +3 -18
- package/dist/server/file-based-metadata.d.ts +2 -3
- package/dist/server/framework-tracer.d.ts +46 -0
- package/dist/server/framework-tracer.js +125 -0
- package/dist/server/fully-buffered-response.d.ts +11 -0
- package/dist/server/fully-buffered-response.js +19 -0
- package/dist/server/headers.d.ts +54 -61
- package/dist/server/headers.js +18 -31
- package/dist/server/html.d.ts +6 -27
- package/dist/server/html.js +16 -1
- package/dist/server/http-conditional.d.ts +5 -6
- package/dist/server/http-date.d.ts +2 -3
- package/dist/server/http-error-responses.d.ts +9 -10
- package/dist/server/http-range.d.ts +4 -5
- package/dist/server/hybrid-route-priority.d.ts +4 -5
- package/dist/server/image-optimization.d.ts +20 -21
- package/dist/server/implicit-tags.d.ts +3 -4
- package/dist/server/instrumentation-runtime.d.ts +17 -21
- package/dist/server/instrumentation-runtime.js +26 -8
- package/dist/server/instrumentation.d.ts +26 -30
- package/dist/server/instrumentation.js +18 -23
- package/dist/server/isr-cache.d.ts +28 -27
- package/dist/server/isr-cache.js +18 -70
- package/dist/server/isr-decision.d.ts +4 -4
- package/dist/server/metadata-route-build-data.d.ts +4 -5
- package/dist/server/metadata-route-cache-policy.d.ts +2 -3
- package/dist/server/metadata-route-response.d.ts +7 -7
- package/dist/server/metadata-route-response.js +68 -2
- package/dist/server/metadata-routes.d.ts +18 -19
- package/dist/server/middleware-matcher-pattern.d.ts +6 -7
- package/dist/server/middleware-matcher.d.ts +6 -7
- package/dist/server/middleware-path-to-regexp.d.ts +6 -7
- package/dist/server/middleware-path-to-regexp.js +11 -9
- package/dist/server/middleware-response-headers.d.ts +3 -4
- package/dist/server/middleware-runtime.d.ts +7 -8
- package/dist/server/middleware-runtime.js +36 -7
- package/dist/server/middleware.d.ts +5 -5
- package/dist/server/multi-stage.d.ts +141 -0
- package/dist/server/multi-stage.js +8 -0
- package/dist/server/navigation-planner.d.ts +26 -26
- package/dist/server/navigation-trace.d.ts +11 -12
- package/dist/server/next-error-digest.d.ts +4 -5
- package/dist/server/normalize-path.d.ts +5 -6
- package/dist/server/open-redirect.d.ts +2 -3
- package/dist/server/opentelemetry-api.d.ts +59 -0
- package/dist/server/opentelemetry-api.js +53 -0
- package/dist/server/opentelemetry-tracing.d.ts +5 -0
- package/dist/server/opentelemetry-tracing.js +83 -0
- package/dist/server/operation-token.d.ts +11 -12
- package/dist/server/otel-tracer-extension.d.ts +7 -9
- package/dist/server/otel-tracer-extension.js +37 -36
- package/dist/server/pages-api-route.d.ts +5 -4
- package/dist/server/pages-api-route.js +20 -7
- package/dist/server/pages-asset-tags.d.ts +6 -6
- package/dist/server/pages-asset-tags.js +37 -2
- package/dist/server/pages-body-parser-config.d.ts +4 -5
- package/dist/server/pages-body-parser-config.js +4 -4
- package/dist/server/pages-client-assets.d.ts +11 -5
- package/dist/server/pages-data-route.d.ts +11 -12
- package/dist/server/pages-data-route.js +1 -1
- package/dist/server/pages-default-404.d.ts +3 -4
- package/dist/server/pages-dev-hydration.d.ts +9 -4
- package/dist/server/pages-dev-hydration.js +19 -7
- package/dist/server/pages-dev-module-url.d.ts +3 -4
- package/dist/server/pages-dev-stylesheets.d.ts +5 -6
- package/dist/server/pages-document-asset-props.d.ts +6 -7
- package/dist/server/pages-document-initial-props.d.ts +5 -5
- package/dist/server/pages-document-initial-props.js +4 -2
- package/dist/server/pages-execution-tracing.d.ts +40 -0
- package/dist/server/pages-execution-tracing.js +80 -0
- package/dist/server/pages-get-initial-props.d.ts +9 -10
- package/dist/server/pages-i18n.d.ts +8 -8
- package/dist/server/pages-media-type.d.ts +4 -5
- package/dist/server/pages-node-compat.d.ts +11 -10
- package/dist/server/pages-node-compat.js +12 -4
- package/dist/server/pages-page-data.d.ts +18 -19
- package/dist/server/pages-page-data.js +11 -10
- package/dist/server/pages-page-handler.d.ts +7 -6
- package/dist/server/pages-page-handler.js +77 -39
- package/dist/server/pages-page-method.d.ts +2 -3
- package/dist/server/pages-page-response.d.ts +14 -10
- package/dist/server/pages-page-response.js +49 -31
- package/dist/server/pages-preview.d.ts +10 -11
- package/dist/server/pages-readiness.d.ts +2 -3
- package/dist/server/pages-request-pipeline.d.ts +14 -12
- package/dist/server/pages-request-pipeline.js +60 -30
- package/dist/server/pages-request-stage-entry.d.ts +23 -0
- package/dist/server/pages-request-stage-entry.js +314 -0
- package/dist/server/pages-response-stage-entry.d.ts +11 -0
- package/dist/server/pages-response-stage-entry.js +106 -0
- package/dist/server/pages-response-stage.d.ts +31 -0
- package/dist/server/pages-response-stage.js +49 -0
- package/dist/server/pages-revalidate.d.ts +3 -4
- package/dist/server/pages-revalidate.js +9 -4
- package/dist/server/pages-route-data-kind.d.ts +18 -0
- package/dist/server/pages-route-data-kind.js +11 -0
- package/dist/server/pages-router-entry.d.ts +1 -25
- package/dist/server/pages-router-entry.js +35 -148
- package/dist/server/pages-serializable-props.d.ts +3 -4
- package/dist/server/pregenerated-concrete-paths.d.ts +9 -7
- package/dist/server/pregenerated-concrete-paths.js +12 -6
- package/dist/server/prerender-cache-life-header.d.ts +3 -4
- package/dist/server/prerender-manifest.d.ts +11 -11
- package/dist/server/prerender-manifest.js +6 -3
- package/dist/server/prerender-route-params.d.ts +16 -9
- package/dist/server/prerender-route-params.js +18 -3
- package/dist/server/prerender-work-unit-setup.d.ts +2 -3
- package/dist/server/prerender-work-unit-setup.js +5 -5
- package/dist/server/prod-server.d.ts +12 -9
- package/dist/server/prod-server.js +124 -31
- package/dist/server/proxy-trust.d.ts +5 -6
- package/dist/server/request-log.d.ts +3 -4
- package/dist/server/request-pipeline.d.ts +16 -16
- package/dist/server/request-pipeline.js +7 -2
- package/dist/server/request-stage.d.ts +5 -0
- package/dist/server/request-stage.js +7 -0
- package/dist/server/request-tracing.d.ts +22 -0
- package/dist/server/request-tracing.js +180 -0
- package/dist/server/response-stage-cacheability.d.ts +37 -0
- package/dist/server/response-stage-cacheability.js +55 -0
- package/dist/server/response-stage-policy.d.ts +23 -0
- package/dist/server/response-stage-policy.js +89 -0
- package/dist/server/response-stage.d.ts +5 -0
- package/dist/server/response-stage.js +7 -0
- package/dist/server/response-start-tracing.d.ts +14 -0
- package/dist/server/response-start-tracing.js +80 -0
- package/dist/server/revalidation-host.d.ts +2 -3
- package/dist/server/revalidation-host.js +1 -1
- package/dist/server/revalidation-request.d.ts +8 -0
- package/dist/server/revalidation-request.js +37 -0
- package/dist/server/rsc-completion-metadata.d.ts +6 -7
- package/dist/server/rsc-stream-hints.d.ts +18 -7
- package/dist/server/rsc-stream-hints.js +70 -35
- package/dist/server/seed-cache.d.ts +2 -3
- package/dist/server/seed-cache.js +8 -7
- package/dist/server/server-action-not-found.d.ts +5 -6
- package/dist/server/server-globals.d.ts +2 -3
- package/dist/server/skip-cache-proof.d.ts +4 -4
- package/dist/server/socket-error-backstop.d.ts +5 -6
- package/dist/server/socket-error-backstop.js +1 -1
- package/dist/server/static-file-cache.d.ts +5 -6
- package/dist/server/static-file-cache.js +9 -7
- package/dist/server/static-file-signal.d.ts +9 -6
- package/dist/server/static-file-signal.js +51 -2
- package/dist/server/static-layout-client-reuse-proof.d.ts +4 -5
- package/dist/server/streaming-metadata.d.ts +2 -3
- package/dist/server/tracer.d.ts +5 -0
- package/dist/server/tracer.js +13 -0
- package/dist/server/worker-prerender-discovery.d.ts +5 -6
- package/dist/server/worker-revalidation-context.d.ts +2 -3
- package/dist/server/worker-revalidation-context.js +5 -5
- package/dist/server/worker-stages.d.ts +43 -0
- package/dist/server/worker-stages.js +25 -0
- package/dist/server/worker-utils.d.ts +5 -6
- package/dist/server/worker-utils.js +2 -1
- package/dist/server/workers-tracing.d.ts +17 -0
- package/dist/server/workers-tracing.js +27 -0
- package/dist/shims/amp.d.ts +3 -4
- package/dist/shims/app-router-scroll-state.d.ts +9 -10
- package/dist/shims/app-router-scroll.d.ts +4 -5
- package/dist/shims/app-router-scroll.js +2 -1
- package/dist/shims/app.d.ts +5 -6
- package/dist/shims/before-interactive-context.d.ts +5 -6
- package/dist/shims/cache-callable-runtime.d.ts +44 -4
- package/dist/shims/cache-callable-runtime.js +168 -8
- package/dist/shims/cache-for-request.d.ts +2 -3
- package/dist/shims/cache-handler.d.ts +33 -20
- package/dist/shims/cache-handler.js +61 -2
- package/dist/shims/cache-request-state.d.ts +28 -29
- package/dist/shims/cache-runtime.d.ts +23 -21
- package/dist/shims/cache-runtime.js +107 -27
- package/dist/shims/cache.d.ts +15 -15
- package/dist/shims/cache.js +15 -13
- package/dist/shims/cacheability-classification.d.ts +49 -28
- package/dist/shims/cacheability-classification.js +27 -12
- package/dist/shims/cdn-cache-state.d.ts +13 -0
- package/dist/shims/cdn-cache-state.js +23 -0
- package/dist/shims/cdn-cache.d.ts +50 -21
- package/dist/shims/cdn-cache.js +15 -38
- package/dist/shims/client-hook-error.d.ts +3 -4
- package/dist/shims/client-locale.d.ts +2 -3
- package/dist/shims/client-page-root.d.ts +24 -0
- package/dist/shims/client-page-root.js +121 -0
- package/dist/shims/compat-router.d.ts +2 -3
- package/dist/shims/config.d.ts +3 -4
- package/dist/shims/constants.d.ts +73 -74
- package/dist/shims/constants.js +1 -1
- package/dist/shims/default-not-found.d.ts +2 -3
- package/dist/shims/document.d.ts +9 -9
- package/dist/shims/dynamic-preload-chunks.d.ts +2 -3
- package/dist/shims/dynamic-preload-chunks.js +17 -13
- package/dist/shims/dynamic.d.ts +3 -3
- package/dist/shims/error-boundary-navigation.d.ts +3 -4
- package/dist/shims/error-boundary.d.ts +17 -18
- package/dist/shims/error-boundary.js +17 -11
- package/dist/shims/error.d.ts +4 -4
- package/dist/shims/error.react-server.d.ts +3 -4
- package/dist/shims/fetch-cache.d.ts +22 -22
- package/dist/shims/fetch-cache.js +42 -17
- package/dist/shims/font-google-base.d.ts +9 -9
- package/dist/shims/font-google-base.js +2 -1
- package/dist/shims/font-local.d.ts +3 -3
- package/dist/shims/font-local.js +1 -1
- package/dist/shims/font-utils.d.ts +14 -15
- package/dist/shims/form.d.ts +2 -2
- package/dist/shims/form.js +10 -7
- package/dist/shims/hash-scroll.d.ts +5 -6
- package/dist/shims/head-state.d.ts +4 -5
- package/dist/shims/head.d.ts +16 -16
- package/dist/shims/head.js +5 -4
- package/dist/shims/headers.d.ts +67 -33
- package/dist/shims/headers.js +93 -6
- package/dist/shims/i18n-context.d.ts +5 -6
- package/dist/shims/i18n-state.d.ts +4 -5
- package/dist/shims/image-config.d.ts +5 -6
- package/dist/shims/image-config.js +2 -0
- package/dist/shims/image.d.ts +5 -5
- package/dist/shims/image.js +12 -8
- package/dist/shims/internal/als-registry.d.ts +4 -5
- package/dist/shims/internal/api-utils.d.ts +3 -4
- package/dist/shims/internal/app-page-props-cache-key.d.ts +32 -4
- package/dist/shims/internal/app-page-props-cache-key.js +53 -1
- package/dist/shims/internal/app-prefetch-fetch-queue.d.ts +5 -6
- package/dist/shims/internal/app-prefetch-rsc-request.d.ts +5 -17
- package/dist/shims/internal/app-prefetch-rsc-request.js +5 -14
- package/dist/shims/internal/app-route-detection.d.ts +2 -2
- package/dist/shims/internal/app-route-prefetch-policy.d.ts +5 -8
- package/dist/shims/internal/app-route-prefetch-policy.js +0 -1
- package/dist/shims/internal/app-router-context.d.ts +9 -10
- package/dist/shims/internal/cookie-serialize.d.ts +4 -5
- package/dist/shims/internal/format-url-object.d.ts +7 -0
- package/dist/shims/internal/format-url-object.js +53 -0
- package/dist/shims/internal/hybrid-client-route-owner-direct.d.ts +6 -7
- package/dist/shims/internal/hybrid-client-route-owner.d.ts +3 -3
- package/dist/shims/internal/hybrid-client-route-owner.js +3 -2
- package/dist/shims/internal/interpolate-as.d.ts +5 -6
- package/dist/shims/internal/interpolate-as.js +4 -2
- package/dist/shims/internal/link-status-registry.d.ts +5 -6
- package/dist/shims/internal/make-hanging-promise.d.ts +3 -4
- package/dist/shims/internal/navigation-untracked.d.ts +2 -3
- package/dist/shims/internal/normalize-router-href.d.ts +15 -0
- package/dist/shims/internal/normalize-router-href.js +41 -0
- package/dist/shims/internal/pages-data-fetch-dedup.d.ts +8 -9
- package/dist/shims/internal/pages-data-target.d.ts +8 -6
- package/dist/shims/internal/pages-data-target.js +32 -36
- package/dist/shims/internal/pages-data-url.d.ts +4 -5
- package/dist/shims/internal/pages-data-url.js +2 -1
- package/dist/shims/internal/pages-router-accessor.d.ts +3 -4
- package/dist/shims/internal/pages-router-components.d.ts +3 -4
- package/dist/shims/internal/route-pattern-for-warning.d.ts +5 -6
- package/dist/shims/internal/route-pattern-for-warning.js +3 -3
- package/dist/shims/internal/router-context.d.ts +2 -3
- package/dist/shims/internal/thenable-well-known-properties.d.ts +10 -0
- package/dist/shims/internal/thenable-well-known-properties.js +33 -0
- package/dist/shims/internal/utils.d.ts +7 -8
- package/dist/shims/internal/work-unit-async-storage.d.ts +10 -11
- package/dist/shims/layout-segment-context.d.ts +3 -4
- package/dist/shims/link-prefetch.d.ts +9 -10
- package/dist/shims/link.d.ts +4 -4
- package/dist/shims/link.js +56 -116
- package/dist/shims/metadata.d.ts +15 -16
- package/dist/shims/metadata.js +40 -36
- package/dist/shims/navigation-context-accessors.d.ts +9 -0
- package/dist/shims/navigation-context-accessors.js +19 -0
- package/dist/shims/navigation-context-state.d.ts +27 -18
- package/dist/shims/navigation-errors.d.ts +18 -19
- package/dist/shims/navigation-state.d.ts +6 -7
- package/dist/shims/navigation.d.ts +80 -68
- package/dist/shims/navigation.js +24 -16
- package/dist/shims/navigation.react-server.d.ts +9 -9
- package/dist/shims/offline.d.ts +2 -3
- package/dist/shims/og.d.ts +2 -2
- package/dist/shims/pages-router-runtime.d.ts +4 -5
- package/dist/shims/ppr-fallback-shell.d.ts +13 -14
- package/dist/shims/readonly-url-search-params.d.ts +2 -3
- package/dist/shims/request-context.d.ts +5 -6
- package/dist/shims/root-params.d.ts +14 -15
- package/dist/shims/router-state.d.ts +5 -6
- package/dist/shims/router-state.js +1 -1
- package/dist/shims/router.d.ts +22 -21
- package/dist/shims/router.js +339 -164
- package/dist/shims/script-nonce-context.d.ts +8 -6
- package/dist/shims/script-nonce-context.js +15 -6
- package/dist/shims/script.d.ts +4 -4
- package/dist/shims/script.js +9 -7
- package/dist/shims/search-params-gate.d.ts +35 -0
- package/dist/shims/search-params-gate.js +32 -0
- package/dist/shims/server.d.ts +19 -51
- package/dist/shims/server.js +14 -28
- package/dist/shims/slot.d.ts +33 -15
- package/dist/shims/slot.js +41 -9
- package/dist/shims/streamed-icons.d.ts +3 -4
- package/dist/shims/thenable-params.d.ts +5 -7
- package/dist/shims/thenable-params.js +3 -24
- package/dist/shims/unified-request-context.d.ts +34 -31
- package/dist/shims/unified-request-context.js +34 -24
- package/dist/shims/unrecognized-action-error.d.ts +3 -4
- package/dist/shims/url-safety.d.ts +5 -6
- package/dist/shims/url-utils.d.ts +12 -13
- package/dist/shims/use-merged-ref.d.ts +2 -3
- package/dist/shims/user-agent.d.ts +31 -0
- package/dist/shims/user-agent.js +16 -0
- package/dist/shims/web-vitals.d.ts +2 -2
- package/dist/typegen.d.ts +3 -4
- package/dist/utils/asset-prefix.d.ts +7 -8
- package/dist/utils/base-path.d.ts +5 -6
- package/dist/utils/built-asset-url.d.ts +2 -3
- package/dist/utils/built-asset-url.js +1 -1
- package/dist/utils/cache-control-metadata.d.ts +4 -5
- package/dist/utils/client-build-manifest.d.ts +6 -7
- package/dist/utils/client-build-manifest.js +2 -1
- package/dist/utils/client-entry-manifest.d.ts +6 -7
- package/dist/utils/client-runtime-metadata.d.ts +8 -3
- package/dist/utils/client-runtime-metadata.js +18 -1
- package/dist/utils/commonjs-loader.d.ts +4 -5
- package/dist/utils/compare.d.ts +2 -3
- package/dist/utils/deployment-id.d.ts +6 -7
- package/dist/utils/dev-error-recovery-event.d.ts +2 -3
- package/dist/utils/dev-stack-sourcemap-endpoint.d.ts +2 -3
- package/dist/utils/domain-locale.d.ts +7 -8
- package/dist/utils/encode-cache-tag.d.ts +3 -4
- package/dist/utils/error-cause.d.ts +2 -3
- package/dist/utils/external-url.d.ts +2 -3
- package/dist/utils/has-trailing-comma.d.ts +3 -4
- package/dist/utils/hash.d.ts +3 -4
- package/dist/utils/html-limited-bots.d.ts +3 -4
- package/dist/utils/lazy-chunks.d.ts +8 -9
- package/dist/utils/lazy-chunks.js +4 -4
- package/dist/utils/manifest-paths.d.ts +5 -6
- package/dist/utils/mdx-scan.d.ts +11 -4
- package/dist/utils/mdx-scan.js +27 -1
- package/dist/utils/middleware-request-headers.d.ts +7 -6
- package/dist/utils/middleware-request-headers.js +6 -1
- package/dist/utils/navigation-signal.d.ts +3 -3
- package/dist/utils/navigation-signal.js +16 -1
- package/dist/utils/number.d.ts +2 -3
- package/dist/utils/package-name.d.ts +3 -4
- package/dist/utils/parse-cookie.d.ts +4 -5
- package/dist/utils/path.d.ts +8 -9
- package/dist/utils/plugin-options.d.ts +2 -3
- package/dist/utils/precompressed-variant.d.ts +3 -4
- package/dist/utils/prerender-output-paths.d.ts +4 -5
- package/dist/utils/project.d.ts +19 -30
- package/dist/utils/project.js +20 -29
- package/dist/utils/promise.d.ts +2 -3
- package/dist/utils/protocol-headers.d.ts +14 -15
- package/dist/utils/public-file-path.d.ts +2 -3
- package/dist/utils/public-routes.d.ts +2 -3
- package/dist/utils/query.d.ts +14 -9
- package/dist/utils/query.js +22 -1
- package/dist/utils/react-compiler-support.d.ts +6 -7
- package/dist/utils/react-version.d.ts +4 -3
- package/dist/utils/react-version.js +19 -1
- package/dist/utils/record.d.ts +2 -3
- package/dist/utils/redirect-digest.d.ts +3 -4
- package/dist/utils/regex-safety.d.ts +4 -5
- package/dist/utils/regex.d.ts +2 -3
- package/dist/utils/safe-json-file.d.ts +2 -3
- package/dist/utils/sorted-array.d.ts +2 -3
- package/dist/utils/text-stream.d.ts +3 -4
- package/dist/utils/vinext-root.d.ts +2 -3
- package/dist/utils/virtual-module.d.ts +3 -4
- package/dist/utils/vite-cli-invocation.d.ts +21 -0
- package/dist/utils/vite-cli-invocation.js +144 -0
- package/dist/utils/vite-version.d.ts +5 -6
- package/next-package.json +4 -0
- package/package.json +47 -6
package/dist/check.js
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
|
+
import { __toESM } from "./_virtual/_rolldown/runtime.js";
|
|
1
2
|
import path from "./deps/.pnpm/pathslash@0.1.0/deps/pathslash/dist/index.js";
|
|
2
|
-
import { detectPackageManager, findDir } from "./utils/project.js";
|
|
3
|
+
import { detectPackageManager, findDir, findViteConfigPath } from "./utils/project.js";
|
|
4
|
+
import { normalizePageExtensions } from "./routing/file-matcher.js";
|
|
5
|
+
import { POSTCSS_CONFIG_FILES } from "./plugins/postcss.js";
|
|
6
|
+
import { unwrapExpression } from "./plugins/ast-utils.js";
|
|
7
|
+
import { require_ignore } from "./deps/.pnpm/ignore@5.3.2/deps/ignore/index.js";
|
|
3
8
|
import fs from "node:fs";
|
|
4
9
|
import { parseAst } from "vite";
|
|
5
10
|
//#region src/check.ts
|
|
@@ -9,6 +14,7 @@ import { parseAst } from "vite";
|
|
|
9
14
|
* Scans an existing Next.js app and produces a compatibility report
|
|
10
15
|
* showing what will work, what needs changes, and an overall score.
|
|
11
16
|
*/
|
|
17
|
+
var import_ignore = /* @__PURE__ */ __toESM(require_ignore(), 1);
|
|
12
18
|
/** Sort order for statuses: unsupported first, then partial, then supported. */
|
|
13
19
|
const STATUS_ORDER = {
|
|
14
20
|
unsupported: 0,
|
|
@@ -20,31 +26,20 @@ function compareByStatus(a, b) {
|
|
|
20
26
|
return STATUS_ORDER[a.status] - STATUS_ORDER[b.status];
|
|
21
27
|
}
|
|
22
28
|
/**
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* accept `.ts`/`.js`.
|
|
29
|
+
* True if `relFile` (relative to the app directory) is an App Router file of
|
|
30
|
+
* the given convention. Files inside private `_folder` segments are not routes.
|
|
31
|
+
* `exts` are the dotted `pageExtensions` that vinext resolves conventions with.
|
|
27
32
|
*/
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
".ts",
|
|
39
|
-
".js"
|
|
40
|
-
],
|
|
41
|
-
loading: [".tsx", ".jsx"],
|
|
42
|
-
error: [".tsx", ".jsx"],
|
|
43
|
-
"not-found": [".tsx", ".jsx"]
|
|
44
|
-
};
|
|
45
|
-
/** True if `file` is an App Router file of the given convention. */
|
|
46
|
-
function isAppRouterFile(file, type) {
|
|
47
|
-
return APP_ROUTER_EXTENSIONS[type].some((ext) => file.endsWith(`${type}${ext}`));
|
|
33
|
+
function isAppRouterFile(relFile, type, exts) {
|
|
34
|
+
const segments = relFile.split("/");
|
|
35
|
+
const basename = segments.pop() ?? "";
|
|
36
|
+
if (segments.some((segment) => segment.startsWith("_"))) return false;
|
|
37
|
+
return exts.some((ext) => basename === `${type}${ext}`);
|
|
38
|
+
}
|
|
39
|
+
/** The first `<name><ext>` file found in `dir` for the given page extensions. */
|
|
40
|
+
function findConventionFile(dir, name, exts) {
|
|
41
|
+
for (const ext of exts) if (fs.existsSync(path.join(dir, `${name}${ext}`))) return `${name}${ext}`;
|
|
42
|
+
return null;
|
|
48
43
|
}
|
|
49
44
|
const IMPORT_SUPPORT = {
|
|
50
45
|
next: {
|
|
@@ -54,7 +49,7 @@ const IMPORT_SUPPORT = {
|
|
|
54
49
|
"next/link": { status: "supported" },
|
|
55
50
|
"next/image": {
|
|
56
51
|
status: "supported",
|
|
57
|
-
detail: "
|
|
52
|
+
detail: "local images served via /_next/image (resized when an images optimizer is configured); remote images with width and height via @unpic/react, other remote images (fill or dimensionless) as a plain <img>"
|
|
58
53
|
},
|
|
59
54
|
"next/legacy/image": {
|
|
60
55
|
status: "supported",
|
|
@@ -69,28 +64,31 @@ const IMPORT_SUPPORT = {
|
|
|
69
64
|
"next/headers": { status: "supported" },
|
|
70
65
|
"next/server": {
|
|
71
66
|
status: "supported",
|
|
72
|
-
detail: "NextRequest
|
|
67
|
+
detail: "NextRequest, NextResponse, NextFetchEvent, userAgent, userAgentFromString, after, connection"
|
|
73
68
|
},
|
|
74
69
|
"next/cache": {
|
|
75
70
|
status: "supported",
|
|
76
|
-
detail: "revalidateTag, revalidatePath, unstable_cache, io, cacheLife, cacheTag"
|
|
71
|
+
detail: "revalidateTag, revalidatePath, updateTag, refresh, unstable_cache, unstable_noStore, io, cacheLife, cacheTag"
|
|
77
72
|
},
|
|
78
73
|
"next/dynamic": { status: "supported" },
|
|
79
74
|
"next/head": { status: "supported" },
|
|
80
75
|
"next/script": { status: "supported" },
|
|
81
76
|
"next/font/google": {
|
|
82
|
-
status: "
|
|
83
|
-
detail: "
|
|
77
|
+
status: "supported",
|
|
78
|
+
detail: "self-hosted with fallback metrics; falls back to the Google Fonts CDN when font options aren't statically analyzable or the network fetch fails"
|
|
84
79
|
},
|
|
85
80
|
"next/font/local": {
|
|
86
81
|
status: "supported",
|
|
87
|
-
detail: "className and variable modes both work; no
|
|
82
|
+
detail: "className and variable modes both work; @font-face is generated at runtime; no adjusted fallback metrics (adjustFontFallback is ignored)"
|
|
88
83
|
},
|
|
89
84
|
"next/og": {
|
|
90
85
|
status: "supported",
|
|
91
86
|
detail: "ImageResponse via @vercel/og"
|
|
92
87
|
},
|
|
93
|
-
"next/config": {
|
|
88
|
+
"next/config": {
|
|
89
|
+
status: "partial",
|
|
90
|
+
detail: "getConfig() returns empty publicRuntimeConfig/serverRuntimeConfig; runtime config was removed in Next.js 16, use environment variables"
|
|
91
|
+
},
|
|
94
92
|
"next/amp": {
|
|
95
93
|
status: "unsupported",
|
|
96
94
|
detail: "AMP is not supported"
|
|
@@ -114,7 +112,7 @@ const IMPORT_SUPPORT = {
|
|
|
114
112
|
},
|
|
115
113
|
"next/web-vitals": {
|
|
116
114
|
status: "supported",
|
|
117
|
-
detail: "
|
|
115
|
+
detail: "useReportWebVitals hook"
|
|
118
116
|
},
|
|
119
117
|
"next/constants": {
|
|
120
118
|
status: "supported",
|
|
@@ -140,19 +138,19 @@ const IMPORT_SUPPORT = {
|
|
|
140
138
|
},
|
|
141
139
|
"next/dist/shared/lib/utils": {
|
|
142
140
|
status: "supported",
|
|
143
|
-
detail: "execOnce, getLocationOrigin and other shared
|
|
141
|
+
detail: "execOnce, getLocationOrigin and a subset of the other shared helpers"
|
|
144
142
|
},
|
|
145
143
|
"next/dist/server/api-utils": {
|
|
146
144
|
status: "supported",
|
|
147
|
-
detail: "NextApiRequestCookies
|
|
145
|
+
detail: "NextApiRequestCookies / NextApiRequestQuery types"
|
|
148
146
|
},
|
|
149
147
|
"next/dist/server/web/spec-extension/cookies": {
|
|
150
148
|
status: "supported",
|
|
151
|
-
detail: "RequestCookies / ResponseCookies
|
|
149
|
+
detail: "RequestCookies / ResponseCookies"
|
|
152
150
|
},
|
|
153
151
|
"next/dist/compiled/@edge-runtime/cookies": {
|
|
154
152
|
status: "supported",
|
|
155
|
-
detail: "RequestCookies / ResponseCookies
|
|
153
|
+
detail: "RequestCookies / ResponseCookies"
|
|
156
154
|
},
|
|
157
155
|
"next/dist/server/app-render/work-unit-async-storage.external": {
|
|
158
156
|
status: "supported",
|
|
@@ -174,6 +172,14 @@ const IMPORT_SUPPORT = {
|
|
|
174
172
|
status: "supported",
|
|
175
173
|
detail: "internal navigation module; re-exports next/navigation"
|
|
176
174
|
},
|
|
175
|
+
"next/root-params": {
|
|
176
|
+
status: "supported",
|
|
177
|
+
detail: "root param getters generated from the root layout's dynamic segments; TypeScript types come from the next package"
|
|
178
|
+
},
|
|
179
|
+
"next/dist/server/request/root-params": {
|
|
180
|
+
status: "supported",
|
|
181
|
+
detail: "getRootParam()"
|
|
182
|
+
},
|
|
177
183
|
"next/dist/server/config-shared": {
|
|
178
184
|
status: "supported",
|
|
179
185
|
detail: "shared config utilities; re-exports next/dist/shared/lib/utils"
|
|
@@ -192,7 +198,7 @@ const CONFIG_SUPPORT = {
|
|
|
192
198
|
env: { status: "supported" },
|
|
193
199
|
images: {
|
|
194
200
|
status: "partial",
|
|
195
|
-
detail: "remotePatterns
|
|
201
|
+
detail: "remotePatterns, deviceSizes/imageSizes, qualities and SVG/CSP options honoured; resizing needs an optimizer via vinext({ images: { optimizer } }), images are served as-is otherwise; loader/loaderFile are ignored"
|
|
196
202
|
},
|
|
197
203
|
allowedDevOrigins: {
|
|
198
204
|
status: "supported",
|
|
@@ -204,11 +210,110 @@ const CONFIG_SUPPORT = {
|
|
|
204
210
|
},
|
|
205
211
|
transpilePackages: {
|
|
206
212
|
status: "supported",
|
|
207
|
-
detail: "
|
|
213
|
+
detail: "listed packages are bundled instead of externalized on the server"
|
|
208
214
|
},
|
|
215
|
+
serverExternalPackages: {
|
|
216
|
+
status: "supported",
|
|
217
|
+
detail: "externalized on the Node.js server; Cloudflare Workers and Nitro builds bundle them, since there are no node_modules at runtime"
|
|
218
|
+
},
|
|
219
|
+
pageExtensions: { status: "supported" },
|
|
220
|
+
assetPrefix: { status: "supported" },
|
|
221
|
+
sassOptions: { status: "supported" },
|
|
222
|
+
generateBuildId: { status: "supported" },
|
|
223
|
+
deploymentId: { status: "supported" },
|
|
224
|
+
crossOrigin: { status: "supported" },
|
|
225
|
+
expireTime: { status: "supported" },
|
|
226
|
+
htmlLimitedBots: { status: "supported" },
|
|
227
|
+
cacheMaxMemorySize: { status: "supported" },
|
|
228
|
+
reactMaxHeadersLength: { status: "supported" },
|
|
229
|
+
"typescript.tsconfigPath": { status: "supported" },
|
|
230
|
+
turbopack: {
|
|
231
|
+
status: "partial",
|
|
232
|
+
detail: "resolveAlias and resolveExtensions are honoured; rules (loaders) are ignored"
|
|
233
|
+
},
|
|
234
|
+
instrumentationClientInject: { status: "supported" },
|
|
209
235
|
webpack: {
|
|
236
|
+
status: "partial",
|
|
237
|
+
detail: "resolve.alias, resolve.extensions and MDX loader options are carried over; other webpack loaders and plugins are ignored — migrate them to Vite plugins"
|
|
238
|
+
},
|
|
239
|
+
cacheHandler: {
|
|
240
|
+
status: "unsupported",
|
|
241
|
+
detail: "ignored; configure cache adapters with vinext({ cache }) in vite.config"
|
|
242
|
+
},
|
|
243
|
+
cacheHandlers: {
|
|
244
|
+
status: "unsupported",
|
|
245
|
+
detail: "ignored; configure cache adapters with vinext({ cache }) in vite.config"
|
|
246
|
+
},
|
|
247
|
+
cacheLife: {
|
|
248
|
+
status: "unsupported",
|
|
249
|
+
detail: "custom cacheLife profiles are ignored; only the built-in profiles are available"
|
|
250
|
+
},
|
|
251
|
+
"experimental.cacheLife": {
|
|
252
|
+
status: "unsupported",
|
|
253
|
+
detail: "custom cacheLife profiles are ignored; only the built-in profiles are available"
|
|
254
|
+
},
|
|
255
|
+
skipTrailingSlashRedirect: {
|
|
256
|
+
status: "unsupported",
|
|
257
|
+
detail: "ignored; trailing-slash redirects are always applied"
|
|
258
|
+
},
|
|
259
|
+
reactCompiler: {
|
|
260
|
+
status: "partial",
|
|
261
|
+
detail: "ignored; enable the React Compiler with vinext({ react: { compiler: true } })"
|
|
262
|
+
},
|
|
263
|
+
"experimental.reactCompiler": {
|
|
264
|
+
status: "partial",
|
|
265
|
+
detail: "ignored; enable the React Compiler with vinext({ react: { compiler: true } })"
|
|
266
|
+
},
|
|
267
|
+
modularizeImports: {
|
|
268
|
+
status: "partial",
|
|
269
|
+
detail: "ignored, so imports resolve unoptimized; experimental.optimizePackageImports is supported"
|
|
270
|
+
},
|
|
271
|
+
typedRoutes: {
|
|
272
|
+
status: "partial",
|
|
273
|
+
detail: "typed Link hrefs are not generated; vinext typegen provides PageProps/LayoutProps"
|
|
274
|
+
},
|
|
275
|
+
"compiler.define": { status: "supported" },
|
|
276
|
+
"compiler.defineServer": { status: "supported" },
|
|
277
|
+
"experimental.serverComponentsExternalPackages": {
|
|
278
|
+
status: "supported",
|
|
279
|
+
detail: "legacy alias of serverExternalPackages"
|
|
280
|
+
},
|
|
281
|
+
"experimental.turbo": {
|
|
282
|
+
status: "partial",
|
|
283
|
+
detail: "legacy alias of turbopack; resolveAlias and resolveExtensions are honoured, rules (loaders) are ignored"
|
|
284
|
+
},
|
|
285
|
+
"experimental.staleTimes": { status: "supported" },
|
|
286
|
+
"experimental.scrollRestoration": { status: "supported" },
|
|
287
|
+
"experimental.globalNotFound": { status: "supported" },
|
|
288
|
+
"experimental.clientTraceMetadata": { status: "supported" },
|
|
289
|
+
"experimental.useLightningcss": { status: "supported" },
|
|
290
|
+
"experimental.lightningCssFeatures": { status: "supported" },
|
|
291
|
+
"experimental.disableOptimizedLoading": { status: "supported" },
|
|
292
|
+
"experimental.gestureTransition": { status: "supported" },
|
|
293
|
+
"experimental.appNavFailHandling": { status: "supported" },
|
|
294
|
+
"experimental.rootParams": {
|
|
295
|
+
status: "supported",
|
|
296
|
+
detail: "no longer needed; root params are always available"
|
|
297
|
+
},
|
|
298
|
+
"compiler.removeConsole": {
|
|
299
|
+
status: "supported",
|
|
300
|
+
detail: "console calls are stripped from client bundles only"
|
|
301
|
+
},
|
|
302
|
+
"compiler.styledComponents": {
|
|
303
|
+
status: "partial",
|
|
304
|
+
detail: "SWC transform not applied; styled-components still work at runtime, without displayName or css prop support"
|
|
305
|
+
},
|
|
306
|
+
"compiler.emotion": {
|
|
307
|
+
status: "partial",
|
|
308
|
+
detail: "SWC transform not applied; @emotion/react still works at runtime, but component selectors need the transform"
|
|
309
|
+
},
|
|
310
|
+
"compiler.relay": {
|
|
210
311
|
status: "unsupported",
|
|
211
|
-
detail: "
|
|
312
|
+
detail: "Relay graphql tag transform is not applied"
|
|
313
|
+
},
|
|
314
|
+
"experimental.optimizePackageImports": {
|
|
315
|
+
status: "supported",
|
|
316
|
+
detail: "barrel imports rewritten to direct imports"
|
|
212
317
|
},
|
|
213
318
|
enablePrerenderSourceMaps: {
|
|
214
319
|
status: "supported",
|
|
@@ -220,15 +325,19 @@ const CONFIG_SUPPORT = {
|
|
|
220
325
|
},
|
|
221
326
|
"experimental.ppr": {
|
|
222
327
|
status: "unsupported",
|
|
223
|
-
detail: "
|
|
328
|
+
detail: "removed in Next.js 16 and ignored; use cacheComponents"
|
|
224
329
|
},
|
|
225
|
-
"experimental.
|
|
330
|
+
"experimental.dynamicIO": {
|
|
226
331
|
status: "unsupported",
|
|
227
|
-
detail: "
|
|
332
|
+
detail: "renamed to cacheComponents in Next.js 16 and ignored; use cacheComponents"
|
|
333
|
+
},
|
|
334
|
+
"experimental.typedRoutes": {
|
|
335
|
+
status: "partial",
|
|
336
|
+
detail: "typed Link hrefs are not generated; vinext typegen provides PageProps/LayoutProps"
|
|
228
337
|
},
|
|
229
338
|
"experimental.serverActions": {
|
|
230
339
|
status: "supported",
|
|
231
|
-
detail: "
|
|
340
|
+
detail: "bodySizeLimit and allowedOrigins are enforced"
|
|
232
341
|
},
|
|
233
342
|
"experimental.allowedRevalidateHeaderKeys": {
|
|
234
343
|
status: "supported",
|
|
@@ -268,7 +377,7 @@ const CONFIG_SUPPORT = {
|
|
|
268
377
|
},
|
|
269
378
|
"experimental.middlewarePrefetch": {
|
|
270
379
|
status: "unsupported",
|
|
271
|
-
detail: "
|
|
380
|
+
detail: "deprecated alias of experimental.proxyPrefetch; ignored"
|
|
272
381
|
},
|
|
273
382
|
"experimental.proxyPrefetch": {
|
|
274
383
|
status: "unsupported",
|
|
@@ -276,7 +385,7 @@ const CONFIG_SUPPORT = {
|
|
|
276
385
|
},
|
|
277
386
|
"experimental.middlewareClientMaxBodySize": {
|
|
278
387
|
status: "unsupported",
|
|
279
|
-
detail: "
|
|
388
|
+
detail: "deprecated alias of experimental.proxyClientMaxBodySize; ignored"
|
|
280
389
|
},
|
|
281
390
|
"experimental.proxyClientMaxBodySize": {
|
|
282
391
|
status: "unsupported",
|
|
@@ -284,15 +393,15 @@ const CONFIG_SUPPORT = {
|
|
|
284
393
|
},
|
|
285
394
|
"experimental.externalMiddlewareRewritesResolve": {
|
|
286
395
|
status: "unsupported",
|
|
287
|
-
detail: "
|
|
396
|
+
detail: "deprecated alias of experimental.externalProxyRewritesResolve; ignored"
|
|
288
397
|
},
|
|
289
398
|
"experimental.externalProxyRewritesResolve": {
|
|
290
399
|
status: "unsupported",
|
|
291
400
|
detail: "not recognized; use of this option is ignored"
|
|
292
401
|
},
|
|
293
402
|
"experimental.instrumentationHook": {
|
|
294
|
-
status: "
|
|
295
|
-
detail: "
|
|
403
|
+
status: "supported",
|
|
404
|
+
detail: "no longer needed; instrumentation.ts is loaded automatically"
|
|
296
405
|
},
|
|
297
406
|
skipMiddlewareUrlNormalize: {
|
|
298
407
|
status: "partial",
|
|
@@ -312,7 +421,7 @@ const CONFIG_SUPPORT = {
|
|
|
312
421
|
},
|
|
313
422
|
poweredByHeader: {
|
|
314
423
|
status: "supported",
|
|
315
|
-
detail: "
|
|
424
|
+
detail: "vinext never sends an X-Powered-By header"
|
|
316
425
|
}
|
|
317
426
|
};
|
|
318
427
|
const LIBRARY_SUPPORT = {
|
|
@@ -321,15 +430,15 @@ const LIBRARY_SUPPORT = {
|
|
|
321
430
|
"next-view-transitions": { status: "supported" },
|
|
322
431
|
"@vercel/analytics": {
|
|
323
432
|
status: "supported",
|
|
324
|
-
detail: "
|
|
433
|
+
detail: "renders client-side; by default events are only collected when deployed on Vercel"
|
|
325
434
|
},
|
|
326
435
|
"next-intl": {
|
|
327
|
-
status: "
|
|
328
|
-
detail: "auto-detected from i18n/request.{ts,tsx,js,jsx}
|
|
436
|
+
status: "partial",
|
|
437
|
+
detail: "auto-detected from (src/)i18n/request.{ts,tsx,js,jsx}, so createNextIntlPlugin isn't needed; client components can fail with \"No intl context found\" (cloudflare/vinext#177)"
|
|
329
438
|
},
|
|
330
439
|
"@clerk/nextjs": {
|
|
331
|
-
status: "
|
|
332
|
-
detail: "clerkMiddleware, auth.protect
|
|
440
|
+
status: "supported",
|
|
441
|
+
detail: "clerkMiddleware, auth()/auth.protect in Server Components, ClerkProvider and client hooks work"
|
|
333
442
|
},
|
|
334
443
|
"@auth/nextjs": {
|
|
335
444
|
status: "unsupported",
|
|
@@ -345,7 +454,7 @@ const LIBRARY_SUPPORT = {
|
|
|
345
454
|
},
|
|
346
455
|
"@sentry/nextjs": {
|
|
347
456
|
status: "partial",
|
|
348
|
-
detail: "
|
|
457
|
+
detail: "standard instrumentation.ts + withSentryConfig setup works; webpack/Turbopack plugin build features (source map upload, auto-instrumentation, component annotation) don't run"
|
|
349
458
|
},
|
|
350
459
|
"@t3-oss/env-nextjs": { status: "supported" },
|
|
351
460
|
tailwindcss: { status: "supported" },
|
|
@@ -365,32 +474,76 @@ const LIBRARY_SUPPORT = {
|
|
|
365
474
|
"react-hook-form": { status: "supported" },
|
|
366
475
|
prisma: {
|
|
367
476
|
status: "supported",
|
|
368
|
-
detail: "works on Cloudflare Workers with Prisma Accelerate"
|
|
477
|
+
detail: "works on Cloudflare Workers with driver adapters (D1, Hyperdrive) or Prisma Accelerate"
|
|
369
478
|
},
|
|
370
479
|
drizzle: {
|
|
371
480
|
status: "supported",
|
|
372
481
|
detail: "works with D1 on Cloudflare Workers"
|
|
373
482
|
}
|
|
374
483
|
};
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
484
|
+
const IGNORED_DIRECTORIES = /* @__PURE__ */ new Set([
|
|
485
|
+
"node_modules",
|
|
486
|
+
".next",
|
|
487
|
+
"dist",
|
|
488
|
+
".git"
|
|
489
|
+
]);
|
|
490
|
+
const SOURCE_EXTENSIONS = [
|
|
379
491
|
".ts",
|
|
380
492
|
".tsx",
|
|
381
493
|
".js",
|
|
382
494
|
".jsx",
|
|
383
495
|
".mjs"
|
|
384
|
-
]
|
|
496
|
+
];
|
|
497
|
+
function readGitignoreRule(dir) {
|
|
498
|
+
const gitignore = path.join(dir, ".gitignore");
|
|
499
|
+
let stat;
|
|
500
|
+
try {
|
|
501
|
+
stat = fs.lstatSync(gitignore);
|
|
502
|
+
} catch {
|
|
503
|
+
return;
|
|
504
|
+
}
|
|
505
|
+
if (!stat.isFile()) return;
|
|
506
|
+
return {
|
|
507
|
+
dir,
|
|
508
|
+
matcher: (0, import_ignore.default)({ ignorecase: false }).add(fs.readFileSync(gitignore, "utf-8"))
|
|
509
|
+
};
|
|
510
|
+
}
|
|
511
|
+
function ancestorGitignoreRules(root, dir) {
|
|
512
|
+
const rules = [];
|
|
513
|
+
let current = root;
|
|
514
|
+
for (const segment of path.relative(root, dir).split("/")) {
|
|
515
|
+
const rule = readGitignoreRule(current);
|
|
516
|
+
if (rule) rules.push(rule);
|
|
517
|
+
current = path.join(current, segment);
|
|
518
|
+
if (isGitignored(current, true, rules)) break;
|
|
519
|
+
}
|
|
520
|
+
return rules;
|
|
521
|
+
}
|
|
522
|
+
function isGitignored(fullPath, isDirectory, rules) {
|
|
523
|
+
let ignored = false;
|
|
524
|
+
for (const rule of rules) {
|
|
525
|
+
const relative = path.relative(rule.dir, fullPath) + (isDirectory ? "/" : "");
|
|
526
|
+
const result = rule.matcher.test(relative);
|
|
527
|
+
if (result.ignored) ignored = true;
|
|
528
|
+
else if (result.unignored) ignored = false;
|
|
529
|
+
}
|
|
530
|
+
return ignored;
|
|
531
|
+
}
|
|
532
|
+
/**
|
|
533
|
+
* Recursively find all source files in a directory.
|
|
534
|
+
*/
|
|
535
|
+
function findSourceFiles(dir, extensions = SOURCE_EXTENSIONS, inherited = []) {
|
|
385
536
|
const results = [];
|
|
386
537
|
if (!fs.existsSync(dir)) return results;
|
|
538
|
+
const localRule = readGitignoreRule(dir);
|
|
539
|
+
const rules = localRule ? [...inherited, localRule] : inherited;
|
|
387
540
|
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
388
541
|
for (const entry of entries) {
|
|
389
542
|
const fullPath = path.join(dir, entry.name);
|
|
390
|
-
if (entry.isDirectory())
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
543
|
+
if (entry.isDirectory() && IGNORED_DIRECTORIES.has(entry.name)) continue;
|
|
544
|
+
if (isGitignored(fullPath, entry.isDirectory(), rules)) continue;
|
|
545
|
+
if (entry.isDirectory()) results.push(...findSourceFiles(fullPath, extensions, rules));
|
|
546
|
+
else if (extensions.some((ext) => entry.name.endsWith(ext))) results.push(fullPath);
|
|
394
547
|
}
|
|
395
548
|
return results;
|
|
396
549
|
}
|
|
@@ -400,12 +553,13 @@ function findSourceFiles(dir, extensions = [
|
|
|
400
553
|
* rather than bundled into the vinext application, so reporting their imports
|
|
401
554
|
* or CJS globals as migration blockers produces false positives.
|
|
402
555
|
*/
|
|
556
|
+
function isRuntimeSourceFile(file) {
|
|
557
|
+
const basename = path.basename(file);
|
|
558
|
+
const isTestRunnerConfig = /^(?:jest|playwright|vitest)\.config\.[cm]?[jt]sx?$/.test(basename);
|
|
559
|
+
return !/\.(?:test|spec)\.[cm]?[jt]sx?$/.test(basename) && !isTestRunnerConfig;
|
|
560
|
+
}
|
|
403
561
|
function findRuntimeSourceFiles(root) {
|
|
404
|
-
return findSourceFiles(root).filter(
|
|
405
|
-
const basename = path.basename(file);
|
|
406
|
-
const isTestRunnerConfig = /^(?:jest|playwright|vitest)\.config\.[cm]?[jt]sx?$/.test(basename);
|
|
407
|
-
return !/\.(?:test|spec)\.[cm]?[jt]sx?$/.test(basename) && !isTestRunnerConfig;
|
|
408
|
-
});
|
|
562
|
+
return findSourceFiles(root).filter(isRuntimeSourceFile);
|
|
409
563
|
}
|
|
410
564
|
function isIdentStart(c) {
|
|
411
565
|
return c >= "a" && c <= "z" || c >= "A" && c <= "Z" || c === "_" || c === "$";
|
|
@@ -666,6 +820,7 @@ function propertyKeyName(prop) {
|
|
|
666
820
|
function collectConfigKeys(source) {
|
|
667
821
|
const top = /* @__PURE__ */ new Set();
|
|
668
822
|
const nested = /* @__PURE__ */ new Map();
|
|
823
|
+
let pageExtensions;
|
|
669
824
|
let program;
|
|
670
825
|
try {
|
|
671
826
|
program = parseAst(source, { lang: "ts" });
|
|
@@ -718,6 +873,18 @@ function collectConfigKeys(source) {
|
|
|
718
873
|
if (node.type === "TSAsExpression" || node.type === "TSSatisfiesExpression" || node.type === "ParenthesizedExpression") return resolveObjects(node.expression, depth + 1);
|
|
719
874
|
return [];
|
|
720
875
|
}
|
|
876
|
+
function resolveStringArray(node, depth = 0) {
|
|
877
|
+
if (!node || depth > 10) return void 0;
|
|
878
|
+
if (node.type === "Identifier") return resolveStringArray(vars.get(node.name), depth + 1);
|
|
879
|
+
if (node.type === "TSAsExpression" || node.type === "TSSatisfiesExpression" || node.type === "ParenthesizedExpression") return resolveStringArray(node.expression, depth + 1);
|
|
880
|
+
if (node.type !== "ArrayExpression") return void 0;
|
|
881
|
+
const values = [];
|
|
882
|
+
for (const el of node.elements) {
|
|
883
|
+
if (el?.type !== "Literal" || typeof el.value !== "string") return void 0;
|
|
884
|
+
values.push(el.value);
|
|
885
|
+
}
|
|
886
|
+
return values;
|
|
887
|
+
}
|
|
721
888
|
let configObjs = [];
|
|
722
889
|
for (const node of program.body) {
|
|
723
890
|
if (node.type === "ExportDefaultDeclaration") configObjs = resolveObjects(node.declaration);
|
|
@@ -727,43 +894,143 @@ function collectConfigKeys(source) {
|
|
|
727
894
|
}
|
|
728
895
|
if (configObjs.length) break;
|
|
729
896
|
}
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
if (
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
897
|
+
const branchExtensions = [];
|
|
898
|
+
const expandSpreads = (obj, depth = 0) => obj.properties.flatMap((prop) => {
|
|
899
|
+
if (prop.type !== "SpreadElement" || depth > 10) return [prop];
|
|
900
|
+
const spread = resolveObjects(prop.argument);
|
|
901
|
+
return spread.length === 1 ? expandSpreads(spread[0], depth + 1) : [prop];
|
|
902
|
+
});
|
|
903
|
+
let pageExtensionsUnresolved = false;
|
|
904
|
+
for (const configObj of configObjs) {
|
|
905
|
+
let branchExts;
|
|
906
|
+
let branchUnresolved = false;
|
|
907
|
+
const branchNested = /* @__PURE__ */ new Map();
|
|
908
|
+
for (const prop of expandSpreads(configObj)) {
|
|
909
|
+
if (prop.type === "SpreadElement") {
|
|
910
|
+
branchExts = void 0;
|
|
911
|
+
branchUnresolved = true;
|
|
912
|
+
}
|
|
913
|
+
const name = propertyKeyName(prop);
|
|
914
|
+
if (!name) continue;
|
|
915
|
+
top.add(name);
|
|
916
|
+
const value = prop.value;
|
|
917
|
+
if (name === "pageExtensions") {
|
|
918
|
+
branchExts = resolveStringArray(value);
|
|
919
|
+
branchUnresolved = branchExts === void 0;
|
|
920
|
+
}
|
|
921
|
+
branchNested.delete(name);
|
|
922
|
+
const childObjs = resolveObjects(value);
|
|
923
|
+
if (!childObjs.length) continue;
|
|
924
|
+
const children = /* @__PURE__ */ new Set();
|
|
925
|
+
for (const childObj of childObjs) for (const childProp of childObj.properties) {
|
|
926
|
+
const childName = propertyKeyName(childProp);
|
|
927
|
+
if (childName) children.add(childName);
|
|
928
|
+
}
|
|
929
|
+
branchNested.set(name, children);
|
|
740
930
|
}
|
|
741
|
-
nested.set(name, children);
|
|
931
|
+
for (const [name, children] of branchNested) nested.set(name, /* @__PURE__ */ new Set([...nested.get(name) ?? [], ...children]));
|
|
932
|
+
branchExtensions.push(branchExts);
|
|
933
|
+
if (branchUnresolved) pageExtensionsUnresolved = true;
|
|
934
|
+
}
|
|
935
|
+
if (!pageExtensionsUnresolved && branchExtensions.some(Boolean)) {
|
|
936
|
+
const sets = branchExtensions.map((e) => normalizePageExtensions(e));
|
|
937
|
+
if (new Set(sets.map((set) => set.join(","))).size === 1) pageExtensions = sets[0];
|
|
938
|
+
else pageExtensionsUnresolved = true;
|
|
742
939
|
}
|
|
743
940
|
return {
|
|
744
941
|
top,
|
|
745
|
-
nested
|
|
942
|
+
nested,
|
|
943
|
+
pageExtensions,
|
|
944
|
+
pageExtensionsUnresolved
|
|
746
945
|
};
|
|
747
946
|
}
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
*/
|
|
751
|
-
function analyzeConfig(root) {
|
|
752
|
-
const configFiles = [
|
|
947
|
+
function findNextConfigPath(root) {
|
|
948
|
+
for (const f of [
|
|
753
949
|
"next.config.ts",
|
|
754
950
|
"next.config.mts",
|
|
755
951
|
"next.config.mjs",
|
|
756
952
|
"next.config.js",
|
|
757
953
|
"next.config.cjs"
|
|
758
|
-
]
|
|
759
|
-
let configPath = null;
|
|
760
|
-
for (const f of configFiles) {
|
|
954
|
+
]) {
|
|
761
955
|
const p = path.join(root, f);
|
|
762
|
-
if (fs.existsSync(p))
|
|
763
|
-
|
|
764
|
-
|
|
956
|
+
if (fs.existsSync(p)) return p;
|
|
957
|
+
}
|
|
958
|
+
return null;
|
|
959
|
+
}
|
|
960
|
+
function readViteConfigSource(root) {
|
|
961
|
+
const viteConfigPath = findViteConfigPath(root);
|
|
962
|
+
return viteConfigPath ? fs.readFileSync(viteConfigPath, "utf-8") : null;
|
|
963
|
+
}
|
|
964
|
+
/**
|
|
965
|
+
* Whether `rel` is a next.config the loader provides `__dirname`/`__filename`
|
|
966
|
+
* for: TypeScript configs get them injected, and `.cjs` or CommonJS `.js`
|
|
967
|
+
* configs are loaded with `require`. An ESM `.js` config gets neither.
|
|
968
|
+
*/
|
|
969
|
+
function isNextConfigWithCjsGlobals(rel, content) {
|
|
970
|
+
if (/^next\.config\.(?:ts|mts|cjs)$/.test(rel)) return true;
|
|
971
|
+
if (rel !== "next.config.js") return false;
|
|
972
|
+
try {
|
|
973
|
+
return !parseAst(content).body.some((node) => node.type === "ImportDeclaration" || node.type.startsWith("Export"));
|
|
974
|
+
} catch {
|
|
975
|
+
return false;
|
|
976
|
+
}
|
|
977
|
+
}
|
|
978
|
+
/**
|
|
979
|
+
* Whether a PostCSS config exports an object literal with only a `plugins` key,
|
|
980
|
+
* directly or via a variable — the shape vinext's string-plugin resolver keeps
|
|
981
|
+
* intact (it replaces the config with `{ plugins }`).
|
|
982
|
+
*/
|
|
983
|
+
function exportsPostcssPluginsOnlyObject(content) {
|
|
984
|
+
let program;
|
|
985
|
+
try {
|
|
986
|
+
program = parseAst(content, { lang: "ts" });
|
|
987
|
+
} catch {
|
|
988
|
+
return false;
|
|
989
|
+
}
|
|
990
|
+
const vars = /* @__PURE__ */ new Map();
|
|
991
|
+
const mutated = /* @__PURE__ */ new Set();
|
|
992
|
+
let exported;
|
|
993
|
+
for (const node of program.body) {
|
|
994
|
+
if (node.type === "ExpressionStatement") {
|
|
995
|
+
const expr = node.expression;
|
|
996
|
+
if (expr.type === "AssignmentExpression" && expr.left.type === "MemberExpression" && expr.left.object.type === "Identifier") mutated.add(expr.left.object.name);
|
|
997
|
+
else if (expr.type === "CallExpression" && expr.callee.type === "MemberExpression" && expr.callee.object.type === "Identifier" && expr.callee.object.name === "Object" && expr.callee.property.type === "Identifier" && [
|
|
998
|
+
"assign",
|
|
999
|
+
"defineProperty",
|
|
1000
|
+
"defineProperties"
|
|
1001
|
+
].includes(expr.callee.property.name) && expr.arguments[0]?.type === "Identifier") mutated.add(expr.arguments[0].name);
|
|
765
1002
|
}
|
|
1003
|
+
if (node.type === "VariableDeclaration") {
|
|
1004
|
+
for (const decl of node.declarations) if (decl.id.type === "Identifier" && decl.init) vars.set(decl.id.name, decl.init);
|
|
1005
|
+
} else if (node.type === "ExportDefaultDeclaration") {
|
|
1006
|
+
if (!node.declaration.type.endsWith("Declaration")) exported = node.declaration;
|
|
1007
|
+
} else if (node.type === "ExpressionStatement" && node.expression.type === "AssignmentExpression" && node.expression.left.type === "MemberExpression" && node.expression.left.object.type === "Identifier" && node.expression.left.object.name === "module" && node.expression.left.property.type === "Identifier" && node.expression.left.property.name === "exports") exported = node.expression.right;
|
|
766
1008
|
}
|
|
1009
|
+
if (exported === void 0) return false;
|
|
1010
|
+
let value = unwrapExpression(exported);
|
|
1011
|
+
if (value?.type === "Identifier") {
|
|
1012
|
+
if (mutated.has(value.name)) return false;
|
|
1013
|
+
value = unwrapExpression(vars.get(value.name));
|
|
1014
|
+
}
|
|
1015
|
+
return value?.type === "ObjectExpression" && value.properties.every((prop) => propertyKeyName(prop) === "plugins");
|
|
1016
|
+
}
|
|
1017
|
+
/**
|
|
1018
|
+
* The dotted `pageExtensions` vinext resolves route conventions with, and
|
|
1019
|
+
* whether the configured value is unresolved (then vinext's defaults are used).
|
|
1020
|
+
*/
|
|
1021
|
+
function readPageExtensions(root) {
|
|
1022
|
+
const configPath = findNextConfigPath(root);
|
|
1023
|
+
const keys = configPath ? collectConfigKeys(fs.readFileSync(configPath, "utf-8")) : void 0;
|
|
1024
|
+
return {
|
|
1025
|
+
exts: normalizePageExtensions(keys?.pageExtensions).map((ext) => `.${ext}`),
|
|
1026
|
+
unresolved: keys?.pageExtensionsUnresolved ?? false
|
|
1027
|
+
};
|
|
1028
|
+
}
|
|
1029
|
+
/**
|
|
1030
|
+
* Analyze next.config.js/mjs/ts for supported and unsupported options.
|
|
1031
|
+
*/
|
|
1032
|
+
function analyzeConfig(root) {
|
|
1033
|
+
const configPath = findNextConfigPath(root);
|
|
767
1034
|
if (!configPath) return [{
|
|
768
1035
|
name: "next.config",
|
|
769
1036
|
status: "supported",
|
|
@@ -771,38 +1038,10 @@ function analyzeConfig(root) {
|
|
|
771
1038
|
}];
|
|
772
1039
|
const present = collectConfigKeys(fs.readFileSync(configPath, "utf-8"));
|
|
773
1040
|
const items = [];
|
|
774
|
-
for (const
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
"rewrites",
|
|
779
|
-
"headers",
|
|
780
|
-
"i18n",
|
|
781
|
-
"env",
|
|
782
|
-
"images",
|
|
783
|
-
"allowedDevOrigins",
|
|
784
|
-
"output",
|
|
785
|
-
"transpilePackages",
|
|
786
|
-
"webpack",
|
|
787
|
-
"cacheComponents",
|
|
788
|
-
"reactStrictMode",
|
|
789
|
-
"poweredByHeader",
|
|
790
|
-
"skipMiddlewareUrlNormalize",
|
|
791
|
-
"skipProxyUrlNormalize"
|
|
792
|
-
]) {
|
|
793
|
-
if (!present.top.has(opt)) continue;
|
|
794
|
-
const support = CONFIG_SUPPORT[opt];
|
|
795
|
-
if (support) items.push({
|
|
796
|
-
name: opt,
|
|
797
|
-
status: support.status,
|
|
798
|
-
detail: support.detail
|
|
799
|
-
});
|
|
800
|
-
else items.push({
|
|
801
|
-
name: opt,
|
|
802
|
-
status: "unsupported",
|
|
803
|
-
detail: "not recognized"
|
|
804
|
-
});
|
|
805
|
-
}
|
|
1041
|
+
for (const [key, support] of Object.entries(CONFIG_SUPPORT)) if (!key.includes(".") && present.top.has(key)) items.push({
|
|
1042
|
+
name: key,
|
|
1043
|
+
...support
|
|
1044
|
+
});
|
|
806
1045
|
for (const key of Object.keys(CONFIG_SUPPORT)) {
|
|
807
1046
|
if (!key.includes(".")) continue;
|
|
808
1047
|
const dot = key.indexOf(".");
|
|
@@ -839,19 +1078,69 @@ function checkLibraries(root) {
|
|
|
839
1078
|
*/
|
|
840
1079
|
function checkConventions(root) {
|
|
841
1080
|
const items = [];
|
|
842
|
-
const
|
|
843
|
-
const
|
|
844
|
-
const
|
|
845
|
-
const
|
|
1081
|
+
const viteConfigSource = readViteConfigSource(root);
|
|
1082
|
+
const setsInlineNextConfig = viteConfigSource !== null && /\bnextConfig\b/.test(viteConfigSource);
|
|
1083
|
+
const pageExtensionsRead = readPageExtensions(root);
|
|
1084
|
+
const pageExts = setsInlineNextConfig ? normalizePageExtensions(void 0).map((ext) => `.${ext}`) : pageExtensionsRead.exts;
|
|
1085
|
+
const pageExtensionsUnresolved = !setsInlineNextConfig && pageExtensionsRead.unresolved;
|
|
1086
|
+
const pageExtensionsUncertain = setsInlineNextConfig || pageExtensionsUnresolved;
|
|
1087
|
+
const scanExts = [.../* @__PURE__ */ new Set([...SOURCE_EXTENSIONS, ...pageExts])];
|
|
1088
|
+
const sourceFiles = findSourceFiles(root, scanExts);
|
|
1089
|
+
const realRoot = fs.realpathSync(root);
|
|
1090
|
+
const isThroughSymlink = (dir) => fs.realpathSync(dir) !== path.join(realRoot, path.relative(root, dir));
|
|
1091
|
+
const routeFiles = (dir) => {
|
|
1092
|
+
const files = sourceFiles.filter((file) => file.startsWith(`${dir}/`));
|
|
1093
|
+
if (files.length || !isThroughSymlink(dir)) return files;
|
|
1094
|
+
const rules = ancestorGitignoreRules(root, dir);
|
|
1095
|
+
if (isGitignored(dir, true, rules)) return [];
|
|
1096
|
+
return findSourceFiles(dir, scanExts, rules);
|
|
1097
|
+
};
|
|
1098
|
+
const isPageFile = (file) => pageExts.some((ext) => file.endsWith(ext));
|
|
1099
|
+
const srcDir = path.join(root, "src");
|
|
1100
|
+
const usesSrcDir = findDir(root, "app", "pages") === null && findDir(root, "src/app", "src/pages") !== null;
|
|
1101
|
+
const baseDir = usesSrcDir ? srcDir : root;
|
|
1102
|
+
const pagesDir = findDir(baseDir, "pages");
|
|
1103
|
+
const appDirPath = findDir(baseDir, "app");
|
|
1104
|
+
const conventionPrefix = usesSrcDir ? "src/" : "";
|
|
1105
|
+
const conventionDir = usesSrcDir ? srcDir : root;
|
|
1106
|
+
const proxyFile = findConventionFile(conventionDir, "proxy", pageExts);
|
|
1107
|
+
const middlewareFile = findConventionFile(conventionDir, "middleware", pageExts);
|
|
1108
|
+
const routingNotes = [];
|
|
1109
|
+
const customizesRouting = viteConfigSource !== null && /\b(?:appDir|disableAppRouter|nextConfig)\b/.test(viteConfigSource);
|
|
1110
|
+
if (customizesRouting) routingNotes.push("vite.config passes vinext() routing options (appDir / disableAppRouter / nextConfig), which this check doesn't evaluate — detected with vinext's defaults");
|
|
1111
|
+
if (pageExtensionsUnresolved) routingNotes.push("pageExtensions in next.config can't be read statically or differs between phases — files counted with vinext's default extensions");
|
|
1112
|
+
const routingDetail = routingNotes.length ? routingNotes.join("; ") : void 0;
|
|
1113
|
+
if (!customizesRouting && !usesSrcDir) {
|
|
1114
|
+
for (const dir of ["app", "pages"]) if (findDir(root, dir) === null && findDir(root, `src/${dir}`) !== null) items.push({
|
|
1115
|
+
name: `src/${dir}/ is ignored`,
|
|
1116
|
+
status: "unsupported",
|
|
1117
|
+
detail: `vinext looks for app/ and pages/ in one directory (the project root here) — move src/${dir}/ to ${dir}/`
|
|
1118
|
+
});
|
|
1119
|
+
}
|
|
846
1120
|
if (pagesDir !== null) {
|
|
847
|
-
const isSrc = pagesDir.includes("src/pages");
|
|
848
1121
|
items.push({
|
|
849
|
-
name:
|
|
850
|
-
status: "supported"
|
|
1122
|
+
name: `Pages Router (${path.relative(root, pagesDir)}/)`,
|
|
1123
|
+
status: "supported",
|
|
1124
|
+
...routingDetail && { detail: routingDetail }
|
|
1125
|
+
});
|
|
1126
|
+
const reserved = /* @__PURE__ */ new Set([
|
|
1127
|
+
"_app",
|
|
1128
|
+
"_document",
|
|
1129
|
+
"_error"
|
|
1130
|
+
]);
|
|
1131
|
+
const pageFiles = routeFiles(pagesDir).filter(isPageFile).map((f) => path.relative(pagesDir, f));
|
|
1132
|
+
const stripPageExt = (file) => {
|
|
1133
|
+
const ext = pageExts.filter((e) => file.endsWith(e)).reduce((a, b) => b.length > a.length ? b : a, "");
|
|
1134
|
+
return file.slice(0, file.length - ext.length);
|
|
1135
|
+
};
|
|
1136
|
+
const isCustom = (name) => pageFiles.some((f) => stripPageExt(f) === name);
|
|
1137
|
+
const apiRoutes = pageFiles.filter((f) => f.startsWith("api/"));
|
|
1138
|
+
const pages = pageFiles.filter((f) => {
|
|
1139
|
+
const segments = f.split("/");
|
|
1140
|
+
const basename = segments.pop() ?? "";
|
|
1141
|
+
if (segments.some((dir) => dir === "api" || reserved.has(dir))) return false;
|
|
1142
|
+
return segments.length > 0 || !reserved.has(stripPageExt(basename));
|
|
851
1143
|
});
|
|
852
|
-
const pageFiles = findSourceFiles(pagesDir);
|
|
853
|
-
const pages = pageFiles.filter((f) => !f.includes("/api/") && !f.includes("_app") && !f.includes("_document") && !f.includes("_error"));
|
|
854
|
-
const apiRoutes = pageFiles.filter((f) => f.includes("/api/"));
|
|
855
1144
|
items.push({
|
|
856
1145
|
name: `${pages.length} page(s)`,
|
|
857
1146
|
status: "supported"
|
|
@@ -860,28 +1149,28 @@ function checkConventions(root) {
|
|
|
860
1149
|
name: `${apiRoutes.length} API route(s)`,
|
|
861
1150
|
status: "supported"
|
|
862
1151
|
});
|
|
863
|
-
if (
|
|
1152
|
+
if (isCustom("_app")) items.push({
|
|
864
1153
|
name: "Custom _app",
|
|
865
1154
|
status: "supported"
|
|
866
1155
|
});
|
|
867
|
-
if (
|
|
1156
|
+
if (isCustom("_document")) items.push({
|
|
868
1157
|
name: "Custom _document",
|
|
869
1158
|
status: "supported"
|
|
870
1159
|
});
|
|
871
1160
|
}
|
|
872
1161
|
if (appDirPath !== null) {
|
|
873
|
-
const isSrc = appDirPath.includes("src/app");
|
|
874
1162
|
items.push({
|
|
875
|
-
name:
|
|
876
|
-
status: "supported"
|
|
1163
|
+
name: `App Router (${path.relative(root, appDirPath)}/)`,
|
|
1164
|
+
status: "supported",
|
|
1165
|
+
...routingDetail && { detail: routingDetail }
|
|
877
1166
|
});
|
|
878
|
-
const appFiles =
|
|
879
|
-
const pages = appFiles.filter((f) => isAppRouterFile(f, "page"));
|
|
880
|
-
const layouts = appFiles.filter((f) => isAppRouterFile(f, "layout"));
|
|
881
|
-
const routes = appFiles.filter((f) => f
|
|
882
|
-
const loadings = appFiles.filter((f) => isAppRouterFile(f, "loading"));
|
|
883
|
-
const errors = appFiles.filter((f) => isAppRouterFile(f, "error"));
|
|
884
|
-
const notFounds = appFiles.filter((f) => isAppRouterFile(f, "not-found"));
|
|
1167
|
+
const appFiles = routeFiles(appDirPath).map((f) => path.relative(appDirPath, f));
|
|
1168
|
+
const pages = appFiles.filter((f) => isAppRouterFile(f, "page", pageExts));
|
|
1169
|
+
const layouts = appFiles.filter((f) => isAppRouterFile(f, "layout", pageExts));
|
|
1170
|
+
const routes = appFiles.filter((f) => isAppRouterFile(f, "route", pageExts));
|
|
1171
|
+
const loadings = appFiles.filter((f) => isAppRouterFile(f, "loading", pageExts));
|
|
1172
|
+
const errors = appFiles.filter((f) => isAppRouterFile(f, "error", pageExts));
|
|
1173
|
+
const notFounds = appFiles.filter((f) => isAppRouterFile(f, "not-found", pageExts));
|
|
885
1174
|
items.push({
|
|
886
1175
|
name: `${pages.length} page(s)`,
|
|
887
1176
|
status: "supported"
|
|
@@ -907,36 +1196,33 @@ function checkConventions(root) {
|
|
|
907
1196
|
status: "supported"
|
|
908
1197
|
});
|
|
909
1198
|
}
|
|
910
|
-
if (
|
|
911
|
-
name:
|
|
1199
|
+
if (proxyFile && middlewareFile && !pageExtensionsUncertain) items.push({
|
|
1200
|
+
name: `Both ${conventionPrefix}${middlewareFile} and ${conventionPrefix}${proxyFile}`,
|
|
1201
|
+
status: "unsupported",
|
|
1202
|
+
detail: `only one is allowed — keep ${conventionPrefix}${proxyFile} and remove ${conventionPrefix}${middlewareFile}`
|
|
1203
|
+
});
|
|
1204
|
+
else if (proxyFile) items.push({
|
|
1205
|
+
name: `${conventionPrefix}${proxyFile} (Next.js 16)`,
|
|
912
1206
|
status: "supported"
|
|
913
1207
|
});
|
|
914
|
-
else if (
|
|
915
|
-
name:
|
|
1208
|
+
else if (middlewareFile) items.push({
|
|
1209
|
+
name: `${conventionPrefix}${middlewareFile} (deprecated in Next.js 16)`,
|
|
916
1210
|
status: "supported"
|
|
917
1211
|
});
|
|
918
1212
|
if (pagesDir === null && appDirPath === null) items.push({
|
|
919
1213
|
name: "No pages/ or app/ directory found",
|
|
920
1214
|
status: "unsupported",
|
|
921
|
-
detail: "vinext requires a pages/ or app/ directory"
|
|
1215
|
+
detail: ["vinext requires a pages/ or app/ directory", ...routingNotes].join("; ")
|
|
922
1216
|
});
|
|
923
|
-
const
|
|
924
|
-
if (fs.existsSync(pkgPath)) {
|
|
925
|
-
if (JSON.parse(fs.readFileSync(pkgPath, "utf-8")).type !== "module") items.push({
|
|
926
|
-
name: "Missing \"type\": \"module\" in package.json",
|
|
927
|
-
status: "unsupported",
|
|
928
|
-
detail: "required for Vite — vinext init will add it automatically"
|
|
929
|
-
});
|
|
930
|
-
}
|
|
931
|
-
const allSourceFiles = findRuntimeSourceFiles(root);
|
|
1217
|
+
const runtimeSourceFiles = sourceFiles.filter((file) => isRuntimeSourceFile(file) && SOURCE_EXTENSIONS.some((ext) => file.endsWith(ext)));
|
|
932
1218
|
const viewTransitionRegex = /import\s+\{[^}]*\bViewTransition\b[^}]*\}\s+from\s+['"]react['"]/;
|
|
933
1219
|
const viewTransitionFiles = [];
|
|
934
1220
|
const cjsGlobalFiles = [];
|
|
935
|
-
for (const file of
|
|
1221
|
+
for (const file of runtimeSourceFiles) {
|
|
936
1222
|
const content = fs.readFileSync(file, "utf-8");
|
|
937
1223
|
const rel = path.relative(root, file);
|
|
938
1224
|
if (viewTransitionRegex.test(content)) viewTransitionFiles.push(rel);
|
|
939
|
-
if (hasFreeCjsGlobal(content)) cjsGlobalFiles.push(rel);
|
|
1225
|
+
if (hasFreeCjsGlobal(content) && !isNextConfigWithCjsGlobals(rel, content)) cjsGlobalFiles.push(rel);
|
|
940
1226
|
}
|
|
941
1227
|
if (viewTransitionFiles.length > 0) items.push({
|
|
942
1228
|
name: "ViewTransition (React canary API)",
|
|
@@ -944,18 +1230,18 @@ function checkConventions(root) {
|
|
|
944
1230
|
detail: "vinext auto-shims with a passthrough fallback, view transitions won't animate",
|
|
945
1231
|
files: viewTransitionFiles
|
|
946
1232
|
});
|
|
947
|
-
for (const configFile of
|
|
948
|
-
"postcss.config.mjs",
|
|
949
|
-
"postcss.config.js",
|
|
950
|
-
"postcss.config.cjs"
|
|
951
|
-
]) {
|
|
1233
|
+
for (const configFile of POSTCSS_CONFIG_FILES) {
|
|
952
1234
|
const configPath = path.join(root, configFile);
|
|
953
1235
|
if (fs.existsSync(configPath)) {
|
|
954
1236
|
const content = fs.readFileSync(configPath, "utf-8");
|
|
955
|
-
if (/plugins\s*:\s*\[\s*['"]/.test(content)) items.push({
|
|
1237
|
+
if (/plugins\s*:\s*\[\s*['"]/.test(content)) items.push(!exportsPostcssPluginsOnlyObject(content) ? {
|
|
956
1238
|
name: `PostCSS string-form plugins (${configFile})`,
|
|
957
1239
|
status: "partial",
|
|
958
|
-
detail: "string-form
|
|
1240
|
+
detail: "vinext resolves string-form plugins only in a config that exports a plain { plugins } object — function exports aren't resolved and other options are dropped"
|
|
1241
|
+
} : {
|
|
1242
|
+
name: `PostCSS string-form plugins (${configFile})`,
|
|
1243
|
+
status: "supported",
|
|
1244
|
+
detail: "string-form PostCSS plugins are resolved automatically by vinext"
|
|
959
1245
|
});
|
|
960
1246
|
break;
|
|
961
1247
|
}
|
|
@@ -963,7 +1249,7 @@ function checkConventions(root) {
|
|
|
963
1249
|
if (cjsGlobalFiles.length > 0) items.push({
|
|
964
1250
|
name: "__dirname / __filename (CommonJS globals)",
|
|
965
1251
|
status: "unsupported",
|
|
966
|
-
detail: "
|
|
1252
|
+
detail: "vinext only defines them in server code, where they point at the built output rather than your source tree; they are undefined in client bundles and ESM next.config files — use import.meta.dirname / import.meta.filename or fileURLToPath(import.meta.url)",
|
|
967
1253
|
files: cjsGlobalFiles
|
|
968
1254
|
});
|
|
969
1255
|
return items;
|
|
@@ -986,17 +1272,19 @@ function runCheck(root) {
|
|
|
986
1272
|
const partial = allItems.filter((i) => i.status === "partial").length;
|
|
987
1273
|
const unsupported = allItems.filter((i) => i.status === "unsupported").length;
|
|
988
1274
|
const total = allItems.length;
|
|
1275
|
+
const score = total > 0 ? Math.round((supported + partial * .5) / total * 100) : 100;
|
|
989
1276
|
return {
|
|
990
1277
|
imports,
|
|
991
1278
|
config,
|
|
992
1279
|
libraries,
|
|
993
1280
|
conventions,
|
|
1281
|
+
hasAppDir: findDir(root, "app", "src/app") !== null,
|
|
994
1282
|
summary: {
|
|
995
1283
|
supported,
|
|
996
1284
|
partial,
|
|
997
1285
|
unsupported,
|
|
998
1286
|
total,
|
|
999
|
-
score
|
|
1287
|
+
score
|
|
1000
1288
|
}
|
|
1001
1289
|
};
|
|
1002
1290
|
}
|
|
@@ -1005,7 +1293,7 @@ function runCheck(root) {
|
|
|
1005
1293
|
*/
|
|
1006
1294
|
function formatReport(result, opts) {
|
|
1007
1295
|
const lines = [];
|
|
1008
|
-
const hasAppRouter = result.
|
|
1296
|
+
const hasAppRouter = result.hasAppDir === true;
|
|
1009
1297
|
const statusIcon = (s) => s === "supported" ? "\x1B[32m✓\x1B[0m" : s === "partial" ? "\x1B[33m~\x1B[0m" : "\x1B[31m✗\x1B[0m";
|
|
1010
1298
|
lines.push("");
|
|
1011
1299
|
lines.push(" \x1B[1mvinext compatibility report\x1B[0m");
|
|
@@ -1074,7 +1362,10 @@ function formatReport(result, opts) {
|
|
|
1074
1362
|
...result.libraries,
|
|
1075
1363
|
...result.conventions
|
|
1076
1364
|
];
|
|
1077
|
-
for (const item of allItems) if (item.status === "partial")
|
|
1365
|
+
for (const item of allItems) if (item.status === "partial") {
|
|
1366
|
+
lines.push(` \x1b[33m~\x1b[0m ${item.name}${item.detail ? ` — ${item.detail}` : ""}`);
|
|
1367
|
+
for (const f of item.files ?? []) lines.push(` \x1b[90m${f}\x1b[0m`);
|
|
1368
|
+
}
|
|
1078
1369
|
}
|
|
1079
1370
|
if (!opts?.calledFromInit) {
|
|
1080
1371
|
lines.push("");
|
|
@@ -1084,7 +1375,7 @@ function formatReport(result, opts) {
|
|
|
1084
1375
|
lines.push(" Or manually:");
|
|
1085
1376
|
lines.push(` 1. Add \x1b[36m"type": "module"\x1b[0m to package.json`);
|
|
1086
1377
|
lines.push(` 2. Install: \x1b[36m${detectPackageManager(process.cwd())} vinext vite @vitejs/plugin-react${hasAppRouter ? " @vitejs/plugin-rsc react-server-dom-webpack" : ""}\x1b[0m`);
|
|
1087
|
-
lines.push(` 3. Create vite.config.ts (
|
|
1378
|
+
lines.push(` 3. Create vite.config.ts with \x1b[36mplugins: [vinext()]\x1b[0m`);
|
|
1088
1379
|
lines.push(` 4. Run: \x1b[36mnpx vite dev\x1b[0m`);
|
|
1089
1380
|
}
|
|
1090
1381
|
lines.push("");
|