vinext 1.3.0 → 1.4.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 +5 -2
- package/THIRD_PARTY_LICENSES.md +47 -0
- package/dist/_virtual/_rolldown/runtime.js +4 -3
- package/dist/build/action-owner-manifest.d.ts +3 -2
- package/dist/build/action-owner-manifest.js +18 -2
- package/dist/build/app-page-static-eligibility.d.ts +17 -1
- package/dist/build/app-page-static-eligibility.js +80 -13
- package/dist/build/clean-output.d.ts +2 -1
- package/dist/build/client-build-config.d.ts +13 -3
- package/dist/build/client-build-config.js +46 -9
- package/dist/build/client-reference-async.d.ts +48 -0
- package/dist/build/client-reference-async.js +123 -0
- package/dist/build/client-reference-chunks.d.ts +32 -0
- package/dist/build/client-reference-chunks.js +111 -0
- package/dist/build/client-reference-groups.d.ts +9 -1
- package/dist/build/client-reference-groups.js +40 -2
- package/dist/build/css-url-assets.d.ts +2 -1
- package/dist/build/google-fonts/fallback-metrics.d.ts +2 -1
- package/dist/build/google-fonts/find-font-files-in-css.d.ts +1 -0
- package/dist/build/google-fonts/find-font-files-in-css.js +17 -4
- package/dist/build/google-fonts/font-metadata.d.ts +2 -1
- package/dist/build/google-fonts/validate.d.ts +2 -1
- package/dist/build/inline-css.d.ts +2 -1
- package/dist/build/module-dependency-cache.d.ts +2 -1
- package/dist/build/next-client-runtime-manifests.d.ts +2 -1
- package/dist/build/precompress.d.ts +2 -1
- package/dist/build/precompress.js +1 -1
- package/dist/build/prerender-paths.d.ts +2 -1
- package/dist/build/prerender-phase.d.ts +2 -1
- package/dist/build/prerender-server-pool.js +1 -1
- package/dist/build/prerender.d.ts +3 -2
- package/dist/build/prerender.js +6 -5
- package/dist/build/report.d.ts +2 -15
- package/dist/build/report.js +1 -51
- package/dist/build/run-prerender.d.ts +2 -1
- package/dist/build/server-actions-encryption-key.d.ts +2 -1
- package/dist/build/ssr-manifest.js +25 -2
- package/dist/build/standalone.d.ts +2 -1
- package/dist/cache/cache-adapters-virtual.d.ts +2 -1
- package/dist/cache.js +1 -2
- package/dist/check.d.ts +2 -1
- package/dist/check.js +5 -1
- package/dist/cli-args.d.ts +2 -1
- package/dist/cli.js +5 -0
- package/dist/client/client-redirect-matcher.js +2 -1
- package/dist/client/client-redirects.d.ts +4 -3
- package/dist/client/client-redirects.js +2 -1
- package/dist/client/client-rewrites.d.ts +2 -1
- package/dist/client/dev-error-overlay-store.d.ts +2 -1
- package/dist/client/dev-error-overlay.js +1 -1
- package/dist/client/index.js +1 -2
- package/dist/client/instrumentation-client-state.js +5 -5
- package/dist/client/navigation-runtime.d.ts +16 -2
- package/dist/client/navigation-runtime.js +2 -2
- package/dist/client/pages-router-link-navigation.d.ts +2 -1
- package/dist/client/vinext-next-data.d.ts +25 -1
- package/dist/client/window-next.d.ts +2 -1
- package/dist/config/config-matchers.d.ts +12 -1
- package/dist/config/config-matchers.js +111 -16
- package/dist/config/dotenv.d.ts +2 -1
- package/dist/config/next-config.d.ts +32 -1
- package/dist/config/next-config.js +93 -5
- package/dist/config/tsconfig-paths.d.ts +2 -1
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/dbcs-codec.js +327 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/dbcs-data.js +123 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/index.js +29 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/internal.js +134 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/sbcs-codec.js +50 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/sbcs-data-generated.js +455 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/sbcs-data.js +147 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/big5-added.json.js +169 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/cp936.json.js +2584 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/cp949.json.js +2220 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/cp950.json.js +227 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/eucjp.json.js +425 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/gb18030-ranges.json.js +427 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/gbk-added.json.js +229 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/shiftjis.json.js +292 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/utf16.js +106 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/utf7.js +182 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/bom-handling.js +42 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/extend-node.js +147 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/index.js +94 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/streams.js +95 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/detector.js +23 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/index.js +2 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/lookup.js +25 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/bmp.js +11 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/cur.js +15 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/dds.js +11 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/gif.js +12 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/heif.js +55 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/icns.js +76 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ico.js +39 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/index.js +46 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/j2c.js +11 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jp2.js +21 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jpg.js +71 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl-stream.js +42 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl.js +46 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ktx.js +19 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/png.js +28 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/pnm.js +54 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/psd.js +11 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/svg.js +79 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tga.js +15 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tiff.js +96 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/utils.js +53 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/webp.js +45 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/utils/bit-reader.js +38 -0
- package/dist/deps/.pnpm/safer-buffer@2.1.2/deps/safer-buffer/safer.js +45 -0
- package/dist/deps/.pnpm/ua-parser-js@1.0.35/deps/ua-parser-js/src/ua-parser.js +2 -2
- package/dist/entries/app-browser-entry.d.ts +20 -5
- package/dist/entries/app-browser-entry.js +79 -6
- package/dist/entries/app-rsc-entry.d.ts +2 -1
- package/dist/entries/app-rsc-entry.js +59 -60
- package/dist/entries/app-rsc-manifest.d.ts +2 -1
- package/dist/entries/app-rsc-manifest.js +56 -4
- package/dist/entries/app-ssr-entry.js +1 -0
- package/dist/entries/pages-entry-helpers.js +1 -2
- package/dist/entries/pages-server-entry.d.ts +2 -1
- package/dist/entries/pages-server-entry.js +34 -9
- package/dist/entries/runtime-entry-module.d.ts +1 -0
- package/dist/entries/runtime-entry-module.js +4 -1
- package/dist/image/image-adapters-virtual.d.ts +2 -1
- package/dist/index.js +184 -103
- package/dist/init-cloudflare.d.ts +1 -3
- package/dist/init-cloudflare.js +10 -48
- package/dist/init-platform.d.ts +2 -0
- package/dist/init-platform.js +4 -0
- package/dist/plugins/client-compile-hints.d.ts +30 -0
- package/dist/plugins/client-compile-hints.js +88 -0
- package/dist/plugins/client-reference-dedup.d.ts +2 -1
- package/dist/plugins/cloudflare-dev-module-urls.d.ts +2 -1
- package/dist/plugins/dynamic-preload-metadata.d.ts +3 -1
- package/dist/plugins/dynamic-preload-metadata.js +1 -1
- package/dist/plugins/environment.d.ts +2 -1
- package/dist/plugins/extensionless-dynamic-import.js +6 -2
- package/dist/plugins/fonts.js +9 -12
- package/dist/plugins/ignore-dynamic-requests.d.ts +2 -1
- package/dist/plugins/import-meta-url.d.ts +2 -1
- package/dist/plugins/next-intl-catalog.d.ts +12 -0
- package/dist/plugins/next-intl-catalog.js +85 -0
- package/dist/plugins/og-assets.d.ts +2 -1
- package/dist/plugins/og-assets.js +2 -3
- package/dist/plugins/optimize-imports.d.ts +2 -1
- package/dist/plugins/pages-node-externals.d.ts +3 -1
- package/dist/plugins/pages-node-externals.js +1 -1
- package/dist/plugins/remove-console.d.ts +2 -1
- package/dist/plugins/require-condition-resolution.d.ts +2 -1
- package/dist/plugins/rsc-client-reference-loaders.d.ts +8 -0
- package/dist/plugins/rsc-client-reference-loaders.js +170 -68
- package/dist/plugins/rsc-client-shim-excludes.js +2 -0
- package/dist/plugins/sass.d.ts +2 -1
- package/dist/plugins/strip-server-exports.d.ts +2 -1
- package/dist/plugins/styled-jsx.d.ts +2 -1
- package/dist/plugins/transform-result.d.ts +2 -1
- package/dist/plugins/typeof-window.d.ts +2 -1
- package/dist/plugins/use-cache-callable.d.ts +1 -1
- package/dist/plugins/use-cache-callable.js +136 -94
- package/dist/plugins/worker-image-imports.js +1 -1
- package/dist/plugins/worker-use-server.d.ts +2 -1
- package/dist/routing/app-route-graph.d.ts +46 -0
- package/dist/routing/app-route-graph.js +131 -51
- package/dist/routing/browser-route-manifest.d.ts +2 -1
- package/dist/routing/optimistic-route-trie.d.ts +2 -1
- package/dist/routing/route-matching.d.ts +2 -1
- package/dist/routing/route-pattern.d.ts +2 -1
- package/dist/server/accept-encoding.d.ts +2 -1
- package/dist/server/api-handler.js +19 -4
- package/dist/server/app-action-forwarding.d.ts +2 -1
- package/dist/server/app-bfcache-identity.d.ts +2 -1
- package/dist/server/app-bfcache-identity.js +1 -1
- package/dist/server/app-browser-action-result.d.ts +2 -1
- package/dist/server/app-browser-entry.js +106 -66
- package/dist/server/app-browser-error.d.ts +2 -1
- package/dist/server/app-browser-history-controller.d.ts +7 -5
- package/dist/server/app-browser-history-controller.js +93 -15
- package/dist/server/app-browser-hydration.d.ts +2 -1
- package/dist/server/app-browser-interception-context.d.ts +2 -1
- package/dist/server/app-browser-navigation-controller.d.ts +2 -2
- package/dist/server/app-browser-navigation-controller.js +16 -12
- package/dist/server/app-browser-popstate.d.ts +2 -1
- package/dist/server/app-browser-rsc-redirect.d.ts +2 -1
- package/dist/server/app-browser-rsc-redirect.js +4 -4
- package/dist/server/app-browser-server-action-client.d.ts +4 -1
- package/dist/server/app-browser-server-action-client.js +4 -3
- package/dist/server/app-browser-state.d.ts +2 -4
- package/dist/server/app-browser-state.js +9 -4
- package/dist/server/app-browser-stream.d.ts +2 -1
- package/dist/server/app-browser-supplemental-refresh.js +16 -1
- package/dist/server/app-browser-visible-commit.d.ts +3 -2
- package/dist/server/app-browser-visible-commit.js +2 -12
- package/dist/server/app-client-reference-manifest.d.ts +31 -0
- package/dist/server/app-client-reference-manifest.js +46 -0
- package/dist/server/app-client-reference-preloader.d.ts +25 -5
- package/dist/server/app-client-reference-preloader.js +22 -7
- package/dist/server/app-elements-wire.d.ts +8 -39
- package/dist/server/app-elements-wire.js +4 -41
- package/dist/server/app-elements.d.ts +4 -2
- package/dist/server/app-elements.js +4 -2
- package/dist/server/app-fallback-renderer.d.ts +9 -2
- package/dist/server/app-fallback-renderer.js +4 -1
- package/dist/server/app-history-state.d.ts +4 -3
- package/dist/server/app-history-state.js +5 -2
- package/dist/server/app-inline-css-client.d.ts +2 -1
- package/dist/server/app-metadata-tracing.d.ts +2 -1
- package/dist/server/app-mounted-layouts.d.ts +21 -0
- package/dist/server/app-mounted-layouts.js +67 -0
- package/dist/server/app-optimistic-routing.d.ts +37 -2
- package/dist/server/app-optimistic-routing.js +75 -2
- package/dist/server/app-page-boundary-render.d.ts +20 -2
- package/dist/server/app-page-boundary-render.js +224 -40
- package/dist/server/app-page-boundary.d.ts +34 -5
- package/dist/server/app-page-boundary.js +41 -8
- package/dist/server/app-page-cache-finalizer.d.ts +14 -2
- package/dist/server/app-page-cache-finalizer.js +71 -30
- package/dist/server/app-page-cache-render.d.ts +10 -2
- package/dist/server/app-page-cache-render.js +14 -2
- package/dist/server/app-page-cache.d.ts +13 -1
- package/dist/server/app-page-cache.js +33 -11
- package/dist/server/app-page-dispatch.d.ts +39 -11
- package/dist/server/app-page-dispatch.js +236 -177
- package/dist/server/app-page-element-builder.d.ts +19 -3
- package/dist/server/app-page-element-builder.js +193 -71
- package/dist/server/app-page-execution.d.ts +43 -51
- package/dist/server/app-page-execution.js +205 -92
- package/dist/server/app-page-head.d.ts +108 -3
- package/dist/server/app-page-head.js +337 -154
- package/dist/server/app-page-http-access-fallback-metadata.d.ts +49 -2
- package/dist/server/app-page-http-access-fallback-metadata.js +77 -2
- package/dist/server/app-page-layout-gate.d.ts +35 -0
- package/dist/server/app-page-layout-gate.js +50 -0
- package/dist/server/app-page-method.d.ts +2 -1
- package/dist/server/app-page-params.d.ts +0 -1
- package/dist/server/app-page-params.js +1 -14
- package/dist/server/app-page-probe.d.ts +5 -22
- package/dist/server/app-page-probe.js +4 -37
- package/dist/server/app-page-render-identity.d.ts +2 -1
- package/dist/server/app-page-render.d.ts +9 -13
- package/dist/server/app-page-render.js +108 -214
- package/dist/server/app-page-request.d.ts +15 -4
- package/dist/server/app-page-request.js +2 -2
- package/dist/server/app-page-response.js +3 -3
- package/dist/server/app-page-route-wiring.d.ts +65 -8
- package/dist/server/app-page-route-wiring.js +259 -103
- package/dist/server/app-page-rsc-render-status.d.ts +29 -2
- package/dist/server/app-page-rsc-render-status.js +121 -13
- package/dist/server/app-page-search-params-observation.d.ts +7 -2
- package/dist/server/app-page-search-params-observation.js +8 -1
- package/dist/server/app-page-segment-plan.d.ts +2 -1
- package/dist/server/app-page-stream.d.ts +33 -1
- package/dist/server/app-page-stream.js +25 -6
- package/dist/server/app-pages-bridge.d.ts +6 -1
- package/dist/server/app-pages-bridge.js +7 -3
- package/dist/server/app-ppr-fallback-shell-render.d.ts +2 -1
- package/dist/server/app-ppr-fallback-shell.d.ts +2 -1
- package/dist/server/app-prerender-endpoints.d.ts +2 -1
- package/dist/server/app-prerender-static-params.d.ts +2 -1
- package/dist/server/app-render-dependency.d.ts +21 -4
- package/dist/server/app-render-dependency.js +100 -33
- package/dist/server/app-request-stage-dispatch.js +1 -1
- package/dist/server/app-request-stage-independent-entry.d.ts +2 -1
- package/dist/server/app-response-stage-entry.d.ts +2 -1
- package/dist/server/app-route-handler-cache.d.ts +2 -1
- package/dist/server/app-route-handler-cache.js +2 -2
- package/dist/server/app-route-handler-dispatch.d.ts +2 -1
- package/dist/server/app-route-handler-dispatch.js +15 -10
- package/dist/server/app-route-handler-execution.d.ts +2 -1
- package/dist/server/app-route-handler-execution.js +8 -3
- package/dist/server/app-route-handler-policy.d.ts +1 -1
- package/dist/server/app-route-handler-policy.js +3 -3
- package/dist/server/app-route-handler-response.d.ts +2 -1
- package/dist/server/app-route-handler-response.js +1 -1
- package/dist/server/app-route-handler-runtime.d.ts +2 -1
- package/dist/server/app-route-handler-runtime.js +17 -4
- package/dist/server/app-route-module-loader.d.ts +18 -1
- package/dist/server/app-route-module-loader.js +8 -0
- package/dist/server/app-route-tree-prefetch.d.ts +2 -1
- package/dist/server/app-rsc-cache-busting.d.ts +2 -2
- package/dist/server/app-rsc-cache-busting.js +4 -4
- package/dist/server/app-rsc-error-handler.d.ts +4 -2
- package/dist/server/app-rsc-error-handler.js +9 -1
- package/dist/server/app-rsc-errors.d.ts +10 -1
- package/dist/server/app-rsc-errors.js +8 -1
- package/dist/server/app-rsc-handler.d.ts +7 -6
- package/dist/server/app-rsc-handler.js +36 -34
- package/dist/server/app-rsc-request-normalization.d.ts +0 -4
- package/dist/server/app-rsc-request-normalization.js +1 -4
- package/dist/server/app-rsc-response-finalizer.d.ts +2 -1
- package/dist/server/app-rsc-response-finalizer.js +2 -2
- package/dist/server/app-rsc-response-stage.js +5 -3
- package/dist/server/app-rsc-route-matching.d.ts +38 -1
- package/dist/server/app-rsc-route-matching.js +24 -0
- package/dist/server/app-segment-config.d.ts +2 -1
- package/dist/server/app-segment-config.js +1 -14
- package/dist/server/app-server-action-execution.d.ts +5 -2
- package/dist/server/app-server-action-execution.js +10 -7
- package/dist/server/app-ssr-entry.d.ts +8 -0
- package/dist/server/app-ssr-entry.js +98 -50
- package/dist/server/app-ssr-error-meta.d.ts +2 -1
- package/dist/server/app-ssr-search-params-gate.d.ts +2 -1
- package/dist/server/app-ssr-stream.d.ts +22 -10
- package/dist/server/app-ssr-stream.js +300 -68
- package/dist/server/app-static-generation.d.ts +2 -1
- package/dist/server/app-streamed-client-references.d.ts +39 -0
- package/dist/server/app-streamed-client-references.js +156 -0
- package/dist/server/app-visited-response-cache.d.ts +38 -2
- package/dist/server/app-visited-response-cache.js +46 -5
- package/dist/server/app-worker-stages.d.ts +27 -4
- package/dist/server/app-worker-stages.js +45 -6
- package/dist/server/artifact-compatibility.d.ts +2 -2
- package/dist/server/artifact-compatibility.js +1 -10
- package/dist/server/bfcache-identity.d.ts +2 -1
- package/dist/server/cache-headers.d.ts +2 -1
- package/dist/server/cache-proof.d.ts +1 -115
- package/dist/server/cache-proof.js +1 -544
- package/dist/server/cacheability-request.d.ts +2 -1
- package/dist/server/cacheability-request.js +13 -8
- package/dist/server/config-headers.d.ts +2 -1
- package/dist/server/csp.d.ts +2 -1
- package/dist/server/default-global-not-found-module.d.ts +2 -1
- package/dist/server/default-http-access-fallback-modules.d.ts +33 -0
- package/dist/server/default-http-access-fallback-modules.js +31 -0
- package/dist/server/defer-until-stream-consumed.d.ts +34 -0
- package/dist/server/defer-until-stream-consumed.js +154 -21
- package/dist/server/dev-lockfile.d.ts +32 -2
- package/dist/server/dev-lockfile.js +46 -2
- package/dist/server/dev-module-runner.d.ts +2 -1
- package/dist/server/dev-server.js +14 -6
- package/dist/server/fetch-handler.js +1 -2
- package/dist/server/file-based-metadata.d.ts +2 -1
- package/dist/server/framework-tracer.d.ts +2 -1
- package/dist/server/headers.d.ts +6 -3
- package/dist/server/headers.js +9 -5
- package/dist/server/html.d.ts +1 -0
- package/dist/server/html.js +19 -1
- package/dist/server/http-conditional.d.ts +2 -1
- package/dist/server/http-error-responses.d.ts +2 -1
- package/dist/server/implicit-tags.d.ts +2 -1
- package/dist/server/isr-cache.d.ts +8 -2
- package/dist/server/isr-cache.js +26 -1
- package/dist/server/metadata-route-build-data.d.ts +2 -1
- package/dist/server/metadata-route-build-data.js +1 -1
- package/dist/server/metadata-route-response.d.ts +2 -1
- package/dist/server/metadata-route-response.js +32 -15
- package/dist/server/metadata-routes.d.ts +2 -1
- package/dist/server/middleware-runtime.d.ts +2 -1
- package/dist/server/multi-stage.d.ts +52 -11
- package/dist/server/multi-stage.js +13 -1
- package/dist/server/navigation-planner.js +1 -1
- package/dist/server/navigation-trace.d.ts +2 -1
- package/dist/server/next-error-digest.d.ts +2 -1
- package/dist/server/nitro-public-files-plugin.d.ts +2 -1
- package/dist/server/nitro-public-files.d.ts +2 -1
- package/dist/server/opentelemetry-api.d.ts +2 -1
- package/dist/server/operation-token.d.ts +2 -1
- package/dist/server/pages-api-route.d.ts +2 -1
- package/dist/server/pages-api-route.js +28 -19
- package/dist/server/pages-asset-tags.d.ts +2 -1
- package/dist/server/pages-body-parser-config.d.ts +2 -1
- package/dist/server/pages-client-assets.d.ts +4 -0
- package/dist/server/pages-data-route.d.ts +2 -1
- package/dist/server/pages-document-asset-props.d.ts +2 -1
- package/dist/server/pages-document-initial-props.d.ts +2 -1
- package/dist/server/pages-execution-tracing.d.ts +2 -1
- package/dist/server/pages-execution-tracing.js +1 -1
- package/dist/server/pages-get-initial-props.d.ts +2 -1
- package/dist/server/pages-media-type.d.ts +21 -1
- package/dist/server/pages-media-type.js +69 -5
- package/dist/server/pages-node-compat.js +52 -27
- package/dist/server/pages-page-data.d.ts +7 -1
- package/dist/server/pages-page-data.js +35 -12
- package/dist/server/pages-page-handler.d.ts +3 -2
- package/dist/server/pages-page-handler.js +27 -27
- package/dist/server/pages-page-method.d.ts +2 -1
- package/dist/server/pages-page-response.d.ts +2 -1
- package/dist/server/pages-preview.d.ts +2 -1
- package/dist/server/pages-readiness.d.ts +2 -1
- package/dist/server/pages-request-pipeline.d.ts +10 -1
- package/dist/server/pages-request-pipeline.js +6 -7
- package/dist/server/pages-request-stage-entry.d.ts +2 -1
- package/dist/server/pages-request-stage-entry.js +14 -12
- package/dist/server/pages-response-stage-entry.d.ts +2 -1
- package/dist/server/pages-response-stage-entry.js +9 -3
- package/dist/server/pages-route-data-kind.d.ts +2 -1
- package/dist/server/prerender-cache-life-header.d.ts +2 -1
- package/dist/server/prerender-route-params.d.ts +2 -1
- package/dist/server/prod-server.js +14 -4
- package/dist/server/request-log.d.ts +2 -1
- package/dist/server/request-pipeline.d.ts +6 -0
- package/dist/server/request-pipeline.js +21 -1
- package/dist/server/request-tracing.d.ts +2 -1
- package/dist/server/request-tracing.js +1 -1
- package/dist/server/response-start-tracing.js +7 -29
- package/dist/server/rsc-render-stream.d.ts +4 -0
- package/dist/server/rsc-render-stream.js +25 -0
- package/dist/server/seed-cache.d.ts +2 -1
- package/dist/server/seed-cache.js +1 -1
- package/dist/server/shared-cache-identity.d.ts +23 -0
- package/dist/server/shared-cache-identity.js +36 -0
- package/dist/server/static-file-cache.d.ts +2 -1
- package/dist/server/static-file-cache.js +1 -0
- package/dist/server/worker-revalidation-context.d.ts +2 -1
- package/dist/server/worker-stages.d.ts +18 -4
- package/dist/server/worker-stages.js +23 -4
- package/dist/shims/app.d.ts +2 -1
- package/dist/shims/cache-callable-runtime.d.ts +2 -1
- package/dist/shims/cache-handler.d.ts +8 -3
- package/dist/shims/cache-handler.js +31 -11
- package/dist/shims/cache-request-state.d.ts +17 -20
- package/dist/shims/cache-request-state.js +16 -21
- package/dist/shims/cache-runtime.js +27 -11
- package/dist/shims/cache.d.ts +8 -7
- package/dist/shims/cache.js +17 -19
- package/dist/shims/cacheability-classification.d.ts +2 -0
- package/dist/shims/caught-not-found-boundaries.d.ts +15 -0
- package/dist/shims/caught-not-found-boundaries.js +48 -0
- package/dist/shims/cdn-cache.d.ts +22 -5
- package/dist/shims/cdn-purge-routes.d.ts +2 -1
- package/dist/shims/client-locale.js +2 -1
- package/dist/shims/client-page-root.d.ts +2 -1
- package/dist/shims/client-page-root.js +2 -2
- package/dist/shims/config.d.ts +2 -1
- package/dist/shims/default-forbidden.d.ts +4 -0
- package/dist/shims/default-forbidden.js +18 -0
- package/dist/shims/default-not-found.d.ts +0 -5
- package/dist/shims/default-not-found.js +5 -41
- package/dist/shims/default-unauthorized.d.ts +4 -0
- package/dist/shims/default-unauthorized.js +18 -0
- package/dist/shims/dynamic.js +9 -6
- package/dist/shims/error-boundary.d.ts +39 -3
- package/dist/shims/error-boundary.js +33 -18
- package/dist/shims/fetch-cache-state.d.ts +5 -1
- package/dist/shims/fetch-cache-state.js +1 -3
- package/dist/shims/fetch-cache.d.ts +2 -1
- package/dist/shims/fetch-cache.js +34 -24
- package/dist/shims/font-google.js +1 -2
- package/dist/shims/font-utils.d.ts +3 -2
- package/dist/shims/font-utils.js +5 -3
- package/dist/shims/form.js +3 -3
- package/dist/shims/headers.d.ts +8 -23
- package/dist/shims/headers.js +17 -67
- package/dist/shims/http-access-error-fallback.d.ts +7 -0
- package/dist/shims/http-access-error-fallback.js +47 -0
- package/dist/shims/image.d.ts +1 -22
- package/dist/shims/internal/app-prefetch-fetch-queue.d.ts +22 -2
- package/dist/shims/internal/app-prefetch-fetch-queue.js +71 -18
- package/dist/shims/internal/app-route-prefetch-policy.d.ts +14 -3
- package/dist/shims/internal/app-route-prefetch-policy.js +29 -4
- package/dist/shims/internal/cache-context-accessor.d.ts +2 -1
- package/dist/shims/internal/client-reference-loader.d.ts +7 -0
- package/dist/shims/internal/client-reference-loader.js +91 -0
- package/dist/shims/internal/cookie-serialize.d.ts +2 -1
- package/dist/shims/internal/cookies.js +1 -2
- package/dist/shims/internal/headers-state.d.ts +2 -0
- package/dist/shims/internal/headers-state.js +6 -1
- package/dist/shims/internal/hybrid-client-route-owner-direct.d.ts +2 -1
- package/dist/shims/internal/interpolate-as.d.ts +2 -1
- package/dist/shims/internal/navigation-untracked.js +1 -1
- package/dist/shims/internal/pages-data-target.d.ts +2 -1
- package/dist/shims/internal/pages-data-url.d.ts +2 -1
- package/dist/shims/internal/thenable-well-known-properties.d.ts +2 -1
- package/dist/shims/link.js +197 -52
- package/dist/shims/metadata.d.ts +52 -29
- package/dist/shims/metadata.js +142 -42
- package/dist/shims/navigation-errors.d.ts +2 -1
- package/dist/shims/navigation-server.js +1 -1
- package/dist/shims/navigation.d.ts +95 -8
- package/dist/shims/navigation.js +255 -47
- package/dist/shims/navigation.react-server.js +2 -2
- package/dist/shims/pages-router-runtime.d.ts +2 -1
- package/dist/shims/ppr-fallback-shell.d.ts +2 -1
- package/dist/shims/request-state-types.d.ts +2 -2
- package/dist/shims/router.js +14 -3
- package/dist/shims/slot.d.ts +12 -0
- package/dist/shims/slot.js +37 -9
- package/dist/shims/unified-request-context.d.ts +1 -1
- package/dist/shims/unified-request-context.js +5 -6
- package/dist/typegen.d.ts +2 -1
- package/dist/utils/cache-control-metadata.d.ts +5 -0
- package/dist/utils/cache-control-metadata.js +9 -1
- package/dist/utils/client-build-manifest.d.ts +4 -1
- package/dist/utils/client-build-manifest.js +9 -2
- package/dist/utils/client-entry-manifest.d.ts +13 -0
- package/dist/utils/client-entry-manifest.js +20 -1
- package/dist/utils/client-reference-chunks.d.ts +45 -0
- package/dist/utils/client-reference-chunks.js +30 -0
- package/dist/utils/client-runtime-metadata.d.ts +9 -1
- package/dist/utils/client-runtime-metadata.js +40 -9
- package/dist/utils/compare.d.ts +9 -0
- package/dist/utils/compare.js +15 -1
- package/dist/utils/lazy-chunks.d.ts +14 -0
- package/dist/utils/lazy-chunks.js +27 -1
- package/dist/utils/middleware-request-headers.d.ts +2 -1
- package/dist/utils/project.d.ts +4 -3
- package/dist/utils/project.js +12 -17
- package/dist/utils/query.d.ts +2 -1
- package/dist/utils/regex.d.ts +5 -0
- package/dist/utils/regex.js +11 -1
- package/dist/utils/text-stream.d.ts +10 -5
- package/dist/utils/text-stream.js +6 -6
- package/dist/utils/vite-cli-invocation.d.ts +2 -1
- package/package.json +6 -5
- package/dist/build/layout-classification-types.d.ts +0 -60
- package/dist/build/layout-classification-types.js +0 -1
- package/dist/build/layout-classification.d.ts +0 -61
- package/dist/build/layout-classification.js +0 -98
- package/dist/build/route-classification-injector.d.ts +0 -32
- package/dist/build/route-classification-injector.js +0 -59
- package/dist/build/route-classification-manifest.d.ts +0 -53
- package/dist/build/route-classification-manifest.js +0 -143
- package/dist/deps/.pnpm/image-size@2.0.2/deps/image-size/dist/index.js +0 -808
- package/dist/server/app-browser-client-reuse-manifest.d.ts +0 -10
- package/dist/server/app-browser-client-reuse-manifest.js +0 -101
- package/dist/server/app-layout-param-observation.d.ts +0 -41
- package/dist/server/app-layout-param-observation.js +0 -168
- package/dist/server/client-reuse-manifest.d.ts +0 -102
- package/dist/server/client-reuse-manifest.js +0 -209
- package/dist/server/default-not-found-module.d.ts +0 -19
- package/dist/server/default-not-found-module.js +0 -18
- package/dist/server/rsc-stream-hints.d.ts +0 -21
- package/dist/server/rsc-stream-hints.js +0 -227
- package/dist/server/skip-cache-proof.d.ts +0 -60
- package/dist/server/skip-cache-proof.js +0 -168
- package/dist/server/static-layout-client-reuse-proof.d.ts +0 -13
- package/dist/server/static-layout-client-reuse-proof.js +0 -33
- package/dist/utils/sorted-array.d.ts +0 -7
- package/dist/utils/sorted-array.js +0 -20
package/README.md
CHANGED
|
@@ -137,7 +137,7 @@ files to `.cjs`) when an unambiguous default Vite config requires the ESM migrat
|
|
|
137
137
|
`"type": "commonjs"` is never changed. Direct `vite dev` and `vite build` do not perform these
|
|
138
138
|
wrapper compatibility steps.
|
|
139
139
|
|
|
140
|
-
`@vinext/cloudflare deploy` options: `--preview`, `--env <name>`, `--name <name>`, `--skip-build`, `--dry-run`, `--warm-cache`, `--traffic-aware-warm-cache`.
|
|
140
|
+
`@vinext/cloudflare deploy` options: `--preview`, `--env <name>`, `--name <name>`, `--vite-config <path>`, `--skip-build`, `--dry-run`, `--warm-cache`, `--traffic-aware-warm-cache`.
|
|
141
141
|
|
|
142
142
|
`vinext init` prompts for a deployment target, defaulting to Cloudflare. Agents must ask the
|
|
143
143
|
user which target they want, then pass `--platform=cloudflare` or `--platform=node`.
|
|
@@ -147,6 +147,8 @@ Other options: `--port <port>` (default: 3001), `--skip-check`, `--force`.
|
|
|
147
147
|
Cloudflare init uses `cf` and `cloudflare.config.ts` by default. Both `vinext init`
|
|
148
148
|
and `create-vinext-app` accept `--legacy-wrangler-cloudflare-init` to retain the
|
|
149
149
|
legacy Wrangler setup. Existing Wrangler configs are not automatically migrated.
|
|
150
|
+
If a root Wrangler config belongs to another Worker, `vinext init --ignore-wrangler-config`
|
|
151
|
+
sets up `cloudflare.config.ts` and leaves that file untouched.
|
|
150
152
|
`vinext init --name <name>` sets the Worker name in the generated config instead of
|
|
151
153
|
deriving it from `package.json`. An existing config keeps its own Worker name, and init
|
|
152
154
|
prints a warning.
|
|
@@ -360,7 +362,8 @@ The init command also auto-detects and fixes common migration issues:
|
|
|
360
362
|
- Resolves tsconfig.json path aliases automatically with Vite's native resolver
|
|
361
363
|
- Detects MDX usage and configures `@mdx-js/rollup`
|
|
362
364
|
- Renames CJS config files (postcss.config.js, etc.) to `.cjs` when needed
|
|
363
|
-
|
|
365
|
+
|
|
366
|
+
vinext does not stub native Node.js modules such as `sharp`, `@resvg/resvg-js` or `@napi-rs/canvas`. Workers cannot load Node-API addons, so importing one into Worker code fails the build or the request. If a dependency imports one on a code path that never runs on Workers, alias it to a module of your own with `resolve.alias` in `vite.config.ts`. Configs generated by earlier versions of `vinext init` may contain `resolve.alias` entries pointing at `empty-stub.js`, a file init never created; delete them.
|
|
364
367
|
|
|
365
368
|
Both App Router and Pages Router work on Workers with full client-side hydration.
|
|
366
369
|
|
package/THIRD_PARTY_LICENSES.md
CHANGED
|
@@ -49,3 +49,50 @@ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
|
49
49
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
50
50
|
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
51
51
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
52
|
+
|
|
53
|
+
## iconv-lite (version 0.4.24)
|
|
54
|
+
|
|
55
|
+
Copyright (c) 2011 Alexander Shtuchkin
|
|
56
|
+
|
|
57
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
58
|
+
a copy of this software and associated documentation files (the
|
|
59
|
+
"Software"), to deal in the Software without restriction, including
|
|
60
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
61
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
62
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
63
|
+
the following conditions:
|
|
64
|
+
|
|
65
|
+
The above copyright notice and this permission notice shall be
|
|
66
|
+
included in all copies or substantial portions of the Software.
|
|
67
|
+
|
|
68
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
69
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
70
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
71
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
72
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
73
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
74
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
75
|
+
|
|
76
|
+
## safer-buffer (version 2.1.2)
|
|
77
|
+
|
|
78
|
+
MIT License
|
|
79
|
+
|
|
80
|
+
Copyright (c) 2018 Nikita Skovoroda <chalkerx@gmail.com>
|
|
81
|
+
|
|
82
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
83
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
84
|
+
in the Software without restriction, including without limitation the rights
|
|
85
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
86
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
87
|
+
furnished to do so, subject to the following conditions:
|
|
88
|
+
|
|
89
|
+
The above copyright notice and this permission notice shall be included in all
|
|
90
|
+
copies or substantial portions of the Software.
|
|
91
|
+
|
|
92
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
93
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
94
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
95
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
96
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
97
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
98
|
+
SOFTWARE.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import "node:module";
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
2
|
//#region \0rolldown/runtime.js
|
|
3
3
|
var __create = Object.create;
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -6,7 +6,7 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
6
6
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
7
|
var __getProtoOf = Object.getPrototypeOf;
|
|
8
8
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
-
var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
|
|
9
|
+
var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod, mod.exports), cb = null), mod.exports);
|
|
10
10
|
var __copyProps = (to, from, except, desc) => {
|
|
11
11
|
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
12
12
|
key = keys[i];
|
|
@@ -21,5 +21,6 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
21
21
|
value: mod,
|
|
22
22
|
enumerable: true
|
|
23
23
|
}) : target, mod));
|
|
24
|
+
var __require = /* #__PURE__ */ (() => createRequire(import.meta.url))();
|
|
24
25
|
//#endregion
|
|
25
|
-
export { __commonJSMin, __toESM };
|
|
26
|
+
export { __commonJSMin, __require, __toESM };
|
|
@@ -2,7 +2,7 @@ import { AppRoute } from "../routing/app-route-graph.js";
|
|
|
2
2
|
import { Rollup } from "vite";
|
|
3
3
|
import { RscPluginManager } from "@vitejs/plugin-rsc";
|
|
4
4
|
//#region src/build/action-owner-manifest.d.ts
|
|
5
|
-
type ActionOwnerRoute = Pick<AppRoute, "errorPath" | "errorPaths" | "forbiddenPath" | "forbiddenPaths" | "layoutErrorPaths" | "layouts" | "loadingPath" | "loadingPaths" | "notFoundPath" | "notFoundPaths" | "pagePath" | "parallelSlots" | "pattern" | "siblingIntercepts" | "templates" | "unauthorizedPath" | "unauthorizedPaths">;
|
|
5
|
+
type ActionOwnerRoute = Pick<AppRoute, "errorPath" | "errorPaths" | "forbiddenPath" | "forbiddenPaths" | "layoutErrorPaths" | "layouts" | "loadingPath" | "loadingPaths" | "notFoundPath" | "notFoundPaths" | "pagePath" | "parallelSlots" | "pattern" | "segmentForbiddenPaths" | "segmentNotFoundPaths" | "segmentUnauthorizedPaths" | "siblingIntercepts" | "templates" | "unauthorizedPath" | "unauthorizedPaths">;
|
|
6
6
|
export type ActionOwnerRouteReachability = Map<string, {
|
|
7
7
|
clientReferenceImportIds: Set<string>;
|
|
8
8
|
serverReferenceIds: Set<string>;
|
|
@@ -38,4 +38,5 @@ export declare function addClientActionReachability(options: {
|
|
|
38
38
|
routeReachability: ActionOwnerRouteReachability;
|
|
39
39
|
} & ActionOwnerReferenceMaps): void;
|
|
40
40
|
export declare function buildActionOwnerManifest(routeReachability: ActionOwnerRouteReachability): Record<string, string[]>;
|
|
41
|
-
//#endregion
|
|
41
|
+
//#endregion
|
|
42
|
+
export {};
|
|
@@ -15,6 +15,9 @@ function actionOwnerRouteEntryIds(route) {
|
|
|
15
15
|
...route.forbiddenPaths ?? [],
|
|
16
16
|
route.unauthorizedPath,
|
|
17
17
|
...route.unauthorizedPaths ?? [],
|
|
18
|
+
...route.segmentNotFoundPaths ?? [],
|
|
19
|
+
...route.segmentForbiddenPaths ?? [],
|
|
20
|
+
...route.segmentUnauthorizedPaths ?? [],
|
|
18
21
|
...route.parallelSlots.flatMap((slot) => [
|
|
19
22
|
slot.pagePath,
|
|
20
23
|
slot.defaultPath,
|
|
@@ -24,18 +27,31 @@ function actionOwnerRouteEntryIds(route) {
|
|
|
24
27
|
...slot.loadingPaths ?? [],
|
|
25
28
|
slot.errorPath,
|
|
26
29
|
slot.notFoundPath,
|
|
30
|
+
...slot.notFoundPaths ?? [],
|
|
27
31
|
...slot.interceptingRoutes.flatMap((intercept) => [
|
|
28
32
|
intercept.pagePath,
|
|
29
33
|
...intercept.layoutPaths,
|
|
30
34
|
...intercept.loadingPaths ?? [],
|
|
31
|
-
intercept.notFoundPath
|
|
35
|
+
intercept.notFoundPath,
|
|
36
|
+
intercept.forbiddenPath,
|
|
37
|
+
intercept.unauthorizedPath,
|
|
38
|
+
...intercept.notFoundPaths ?? [],
|
|
39
|
+
...intercept.forbiddenPaths ?? [],
|
|
40
|
+
...intercept.unauthorizedPaths ?? [],
|
|
41
|
+
...intercept.errorPaths ?? []
|
|
32
42
|
])
|
|
33
43
|
]),
|
|
34
44
|
...route.siblingIntercepts.flatMap((intercept) => [
|
|
35
45
|
intercept.pagePath,
|
|
36
46
|
...intercept.layoutPaths,
|
|
37
47
|
...intercept.loadingPaths ?? [],
|
|
38
|
-
intercept.notFoundPath
|
|
48
|
+
intercept.notFoundPath,
|
|
49
|
+
intercept.forbiddenPath,
|
|
50
|
+
intercept.unauthorizedPath,
|
|
51
|
+
...intercept.notFoundPaths ?? [],
|
|
52
|
+
...intercept.forbiddenPaths ?? [],
|
|
53
|
+
...intercept.unauthorizedPaths ?? [],
|
|
54
|
+
...intercept.errorPaths ?? []
|
|
39
55
|
])
|
|
40
56
|
].filter((value) => typeof value === "string");
|
|
41
57
|
}
|
|
@@ -12,4 +12,20 @@ import { AppRoute } from "../routing/app-route-graph.js";
|
|
|
12
12
|
* unreadable route's fallback, so it never certifies one.
|
|
13
13
|
*/
|
|
14
14
|
export declare function classifyAppPageRouteStaticEligibility(route: AppRoute, readMdxEsm: ((source: string) => string) | null): "eligible" | "ineligible" | "unreadable";
|
|
15
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Whether the route's segment config rules out static generation, so Next.js
|
|
17
|
+
* renders it on every request. An "unreadable" route or a source that can't be
|
|
18
|
+
* read counts as not dynamic.
|
|
19
|
+
*/
|
|
20
|
+
export declare function isAppPageRouteRenderedDynamically(route: AppRoute, readMdxEsm: ((source: string) => string) | null): boolean;
|
|
21
|
+
type AppRouteIntercept = AppRoute["siblingIntercepts"][number];
|
|
22
|
+
/**
|
|
23
|
+
* Whether Next.js renders an intercepted page on every request. Next.js builds
|
|
24
|
+
* the intercepting page as its own route (`/feed/(.)photos/[id]`): the
|
|
25
|
+
* layouts of every folder from `app/` down to the intercepting page, then the
|
|
26
|
+
* page. `layoutPaths` are the candidate layouts; those outside the page's
|
|
27
|
+
* folder chain are ignored. An unreadable source counts as not dynamic.
|
|
28
|
+
*/
|
|
29
|
+
export declare function isAppInterceptRenderedDynamically(intercept: AppRouteIntercept, layoutPaths: readonly string[], readMdxEsm: ((source: string) => string) | null): boolean;
|
|
30
|
+
//#endregion
|
|
31
|
+
export {};
|
|
@@ -1,21 +1,15 @@
|
|
|
1
|
+
import path from "../deps/.pnpm/pathslash@0.1.0/deps/pathslash/dist/index.js";
|
|
1
2
|
import { extractExportConstNumber, extractExportConstString, hasRuntimeExportedName } from "./report.js";
|
|
2
3
|
import { collectAppPageStaticGenerationRuntimes, hasAppPageGenerateStaticParamsAtLastDynamicSegment, isAppPageStaticEligible, isEdgeRuntime, resolveAppPageSegmentConfig, resolveAppPageStaticGenerationRuntime } from "../server/app-segment-config.js";
|
|
3
4
|
import fs from "node:fs";
|
|
4
5
|
//#region src/build/app-page-static-eligibility.ts
|
|
5
6
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* the loaded modules. Only such a route has listed paths.
|
|
9
|
-
*
|
|
10
|
-
* An MDX source read without the MDX parser has unknown exports, so its route
|
|
11
|
-
* is "unreadable". Its paths are still listed: the built runtime reads the real
|
|
12
|
-
* exports and never stores a route that isn't static, while an unlisted path's
|
|
13
|
-
* render failure would be dropped instead of failing. But no probe renders an
|
|
14
|
-
* unreadable route's fallback, so it never certifies one.
|
|
7
|
+
* Read the segment config exports of App layout and page sources. A source MDX
|
|
8
|
+
* without the MDX parser leaves the reader "unreadable".
|
|
15
9
|
*/
|
|
16
|
-
function
|
|
10
|
+
function createSegmentConfigReader(readMdxEsm) {
|
|
17
11
|
let unreadable = false;
|
|
18
|
-
const
|
|
12
|
+
const read = (filePath) => {
|
|
19
13
|
if (!filePath) return null;
|
|
20
14
|
let code = fs.readFileSync(filePath, "utf8");
|
|
21
15
|
if (filePath.toLowerCase().endsWith(".mdx")) {
|
|
@@ -36,6 +30,24 @@ function classifyAppPageRouteStaticEligibility(route, readMdxEsm) {
|
|
|
36
30
|
...runtime === null ? {} : { runtime }
|
|
37
31
|
};
|
|
38
32
|
};
|
|
33
|
+
return {
|
|
34
|
+
isUnreadable: () => unreadable,
|
|
35
|
+
read
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Whether Next.js classifies an App page route as static or SSG, read from its
|
|
40
|
+
* layout, page and parallel-slot sources with the helpers dispatch applies to
|
|
41
|
+
* the loaded modules. Only such a route has listed paths.
|
|
42
|
+
*
|
|
43
|
+
* An MDX source read without the MDX parser has unknown exports, so its route
|
|
44
|
+
* is "unreadable". Its paths are still listed: the built runtime reads the real
|
|
45
|
+
* exports and never stores a route that isn't static, while an unlisted path's
|
|
46
|
+
* render failure would be dropped instead of failing. But no probe renders an
|
|
47
|
+
* unreadable route's fallback, so it never certifies one.
|
|
48
|
+
*/
|
|
49
|
+
function classifyAppPageRouteStaticEligibility(route, readMdxEsm) {
|
|
50
|
+
const { isUnreadable, read: readSegmentConfig } = createSegmentConfigReader(readMdxEsm);
|
|
39
51
|
const layouts = route.layouts.map(readSegmentConfig);
|
|
40
52
|
const page = readSegmentConfig(route.pagePath);
|
|
41
53
|
const parallelBranches = route.parallelSlots.map((slot) => ({
|
|
@@ -48,7 +60,7 @@ function classifyAppPageRouteStaticEligibility(route, readMdxEsm) {
|
|
|
48
60
|
page: readSegmentConfig(slot.pagePath ?? slot.defaultPath),
|
|
49
61
|
routeSegments: slot.routeSegments
|
|
50
62
|
}));
|
|
51
|
-
if (
|
|
63
|
+
if (isUnreadable()) return "unreadable";
|
|
52
64
|
const segmentConfig = resolveAppPageSegmentConfig({
|
|
53
65
|
layouts,
|
|
54
66
|
layoutTreePositions: route.layoutTreePositions,
|
|
@@ -78,5 +90,60 @@ function classifyAppPageRouteStaticEligibility(route, readMdxEsm) {
|
|
|
78
90
|
revalidateSeconds: segmentConfig.revalidateSeconds
|
|
79
91
|
}) ? "eligible" : "ineligible";
|
|
80
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* Whether the route's segment config rules out static generation, so Next.js
|
|
95
|
+
* renders it on every request. An "unreadable" route or a source that can't be
|
|
96
|
+
* read counts as not dynamic.
|
|
97
|
+
*/
|
|
98
|
+
function isAppPageRouteRenderedDynamically(route, readMdxEsm) {
|
|
99
|
+
try {
|
|
100
|
+
return classifyAppPageRouteStaticEligibility(route, readMdxEsm) === "ineligible";
|
|
101
|
+
} catch {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
const INTERCEPTION_MARKER_RE = /^(?:\(\.\.\.\)|\(\.\.\)\(\.\.\)|\(\.\.\)|\(\.\))/;
|
|
106
|
+
/**
|
|
107
|
+
* Whether Next.js renders an intercepted page on every request. Next.js builds
|
|
108
|
+
* the intercepting page as its own route (`/feed/(.)photos/[id]`): the
|
|
109
|
+
* layouts of every folder from `app/` down to the intercepting page, then the
|
|
110
|
+
* page. `layoutPaths` are the candidate layouts; those outside the page's
|
|
111
|
+
* folder chain are ignored. An unreadable source counts as not dynamic.
|
|
112
|
+
*/
|
|
113
|
+
function isAppInterceptRenderedDynamically(intercept, layoutPaths, readMdxEsm) {
|
|
114
|
+
if (!intercept.sourcePageSegments) return false;
|
|
115
|
+
const routeSegments = intercept.sourcePageSegments.map((segment) => segment.replace(INTERCEPTION_MARKER_RE, ""));
|
|
116
|
+
try {
|
|
117
|
+
const pageDir = path.dirname(intercept.pagePath);
|
|
118
|
+
const layoutsByPosition = /* @__PURE__ */ new Map();
|
|
119
|
+
for (const layoutPath of layoutPaths) {
|
|
120
|
+
const relative = path.relative(path.dirname(layoutPath), pageDir);
|
|
121
|
+
if (relative.startsWith("..") || path.isAbsolute(relative)) continue;
|
|
122
|
+
const depthBelowLayout = relative.split("/").filter(Boolean).length;
|
|
123
|
+
layoutsByPosition.set(routeSegments.length - depthBelowLayout, layoutPath);
|
|
124
|
+
}
|
|
125
|
+
const layoutTreePositions = [...layoutsByPosition.keys()].sort((a, b) => a - b);
|
|
126
|
+
const { isUnreadable, read } = createSegmentConfigReader(readMdxEsm);
|
|
127
|
+
const layouts = layoutTreePositions.map((position) => read(layoutsByPosition.get(position)));
|
|
128
|
+
const page = read(intercept.pagePath);
|
|
129
|
+
if (isUnreadable()) return false;
|
|
130
|
+
const tree = {
|
|
131
|
+
layouts,
|
|
132
|
+
layoutTreePositions,
|
|
133
|
+
page,
|
|
134
|
+
routeSegments
|
|
135
|
+
};
|
|
136
|
+
const segmentConfig = resolveAppPageSegmentConfig(tree);
|
|
137
|
+
return !isAppPageStaticEligible({
|
|
138
|
+
dynamicConfig: segmentConfig.dynamicConfig,
|
|
139
|
+
hasGenerateStaticParams: hasAppPageGenerateStaticParamsAtLastDynamicSegment(tree),
|
|
140
|
+
isDynamicRoute: routeSegments.some((segment) => segment.startsWith("[") && segment.endsWith("]")),
|
|
141
|
+
isStaticGenerationEdgeRuntime: isEdgeRuntime(resolveAppPageStaticGenerationRuntime(collectAppPageStaticGenerationRuntimes(tree))),
|
|
142
|
+
revalidateSeconds: segmentConfig.revalidateSeconds
|
|
143
|
+
});
|
|
144
|
+
} catch {
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
81
148
|
//#endregion
|
|
82
|
-
export { classifyAppPageRouteStaticEligibility };
|
|
149
|
+
export { classifyAppPageRouteStaticEligibility, isAppInterceptRenderedDynamically, isAppPageRouteRenderedDynamically };
|
|
@@ -13,15 +13,24 @@ type ClientAssetFileNameInfo = {
|
|
|
13
13
|
* an asset (a single output asset can carry several `originalFileNames`).
|
|
14
14
|
*/
|
|
15
15
|
export declare function createClientAssetFileNames(assetsDir: string): (assetInfo: ClientAssetFileNameInfo) => string;
|
|
16
|
+
/**
|
|
17
|
+
* The App Router client build module that registers the client references
|
|
18
|
+
* whose modules are in the "vinext" chunk (see
|
|
19
|
+
* plugins/rsc-client-reference-loaders.ts). It joins that chunk, so it loads
|
|
20
|
+
* with the browser entry without adding to the entry's own chunk.
|
|
21
|
+
*/
|
|
22
|
+
export declare const RESOLVED_EAGER_CLIENT_REFERENCES_ID = "\0virtual:vinext-client-reference-eager";
|
|
16
23
|
/**
|
|
17
24
|
* Create a manualChunks function for client builds.
|
|
18
25
|
*
|
|
19
26
|
* Splits the client bundle into:
|
|
20
27
|
* - "framework" — React, ReactDOM, and scheduler (loaded on every page)
|
|
21
28
|
* - "vinext" — shared vinext runtime shims
|
|
29
|
+
* - "vinext-app-router" — the App Router runtime, in Pages Router builds
|
|
22
30
|
*
|
|
23
|
-
* Route-owned
|
|
24
|
-
* graph-based chunking so they
|
|
31
|
+
* Route-owned (App Router) or page-owned (Pages Router) client shims and all
|
|
32
|
+
* other vendor code are left to the bundler's graph-based chunking so they
|
|
33
|
+
* load only where they're used.
|
|
25
34
|
*
|
|
26
35
|
* Why not split every npm package into its own chunk?
|
|
27
36
|
* - Per-package splitting (`vendor-X`) creates 50-200+ chunks for a
|
|
@@ -187,4 +196,5 @@ export declare function assertClientOutDirIsSeparate(root: string, dirs: {
|
|
|
187
196
|
* seen to evaluate modules out of order and break hydration.
|
|
188
197
|
*/
|
|
189
198
|
export declare function hasUserClientChunkGroups(output: unknown, ownGroups: ReadonlySet<unknown>): boolean;
|
|
190
|
-
//#endregion
|
|
199
|
+
//#endregion
|
|
200
|
+
export {};
|
|
@@ -10,6 +10,7 @@ const ROUTE_OWNED_CLIENT_SHIMS = /* @__PURE__ */ new Set([
|
|
|
10
10
|
"dynamic-preload-chunks",
|
|
11
11
|
"form",
|
|
12
12
|
"image",
|
|
13
|
+
"image-config",
|
|
13
14
|
"image-props",
|
|
14
15
|
"internal/hybrid-client-route-owner",
|
|
15
16
|
"layout-segment-context",
|
|
@@ -20,6 +21,31 @@ const ROUTE_OWNED_CLIENT_SHIMS = /* @__PURE__ */ new Set([
|
|
|
20
21
|
"script",
|
|
21
22
|
"web-vitals"
|
|
22
23
|
]);
|
|
24
|
+
const PAGE_OWNED_CLIENT_SHIMS = /* @__PURE__ */ new Set([
|
|
25
|
+
"dynamic",
|
|
26
|
+
"dynamic-preload-chunks",
|
|
27
|
+
"form",
|
|
28
|
+
"image",
|
|
29
|
+
"image-config",
|
|
30
|
+
"image-props",
|
|
31
|
+
"legacy-image",
|
|
32
|
+
"offline",
|
|
33
|
+
"script",
|
|
34
|
+
"web-vitals",
|
|
35
|
+
"error"
|
|
36
|
+
]);
|
|
37
|
+
const PAGES_APP_ROUTER_RUNTIME_SHIMS = /* @__PURE__ */ new Set([
|
|
38
|
+
"app-router-scroll-state",
|
|
39
|
+
"internal/app-prefetch-rsc-request",
|
|
40
|
+
"internal/navigation-untracked",
|
|
41
|
+
"internal/pages-router-accessor",
|
|
42
|
+
"navigation",
|
|
43
|
+
"navigation-context-state",
|
|
44
|
+
"navigation-errors",
|
|
45
|
+
"ppr-fallback-shell",
|
|
46
|
+
"readonly-url-search-params",
|
|
47
|
+
"unrecognized-action-error"
|
|
48
|
+
]);
|
|
23
49
|
const NEXT_CLIENT_CSS_ASSET_FILE_NAMES = "css/[hash][extname]";
|
|
24
50
|
const NEXT_CLIENT_STATIC_MEDIA_FILE_NAMES = "media/[name].[hash:8][extname]";
|
|
25
51
|
function joinAssetFileNamePattern(assetsDir, pattern) {
|
|
@@ -65,14 +91,23 @@ function getPackageName(id) {
|
|
|
65
91
|
return rest.split("/")[0] || null;
|
|
66
92
|
}
|
|
67
93
|
/**
|
|
94
|
+
* The App Router client build module that registers the client references
|
|
95
|
+
* whose modules are in the "vinext" chunk (see
|
|
96
|
+
* plugins/rsc-client-reference-loaders.ts). It joins that chunk, so it loads
|
|
97
|
+
* with the browser entry without adding to the entry's own chunk.
|
|
98
|
+
*/
|
|
99
|
+
const RESOLVED_EAGER_CLIENT_REFERENCES_ID = "\0virtual:vinext-client-reference-eager";
|
|
100
|
+
/**
|
|
68
101
|
* Create a manualChunks function for client builds.
|
|
69
102
|
*
|
|
70
103
|
* Splits the client bundle into:
|
|
71
104
|
* - "framework" — React, ReactDOM, and scheduler (loaded on every page)
|
|
72
105
|
* - "vinext" — shared vinext runtime shims
|
|
106
|
+
* - "vinext-app-router" — the App Router runtime, in Pages Router builds
|
|
73
107
|
*
|
|
74
|
-
* Route-owned
|
|
75
|
-
* graph-based chunking so they
|
|
108
|
+
* Route-owned (App Router) or page-owned (Pages Router) client shims and all
|
|
109
|
+
* other vendor code are left to the bundler's graph-based chunking so they
|
|
110
|
+
* load only where they're used.
|
|
76
111
|
*
|
|
77
112
|
* Why not split every npm package into its own chunk?
|
|
78
113
|
* - Per-package splitting (`vendor-X`) creates 50-200+ chunks for a
|
|
@@ -90,17 +125,19 @@ function getPackageName(id) {
|
|
|
90
125
|
* and route-specific code stays in route chunks.
|
|
91
126
|
*/
|
|
92
127
|
function createClientManualChunks(shimsDir, preserveRouteBoundaries = false) {
|
|
128
|
+
const instrumentationStatePrefix = path.join(shimsDir, "../client/instrumentation-client-state.");
|
|
93
129
|
return function clientManualChunks(id) {
|
|
130
|
+
if (id === "\0virtual:vinext-client-reference-eager") return "vinext";
|
|
94
131
|
const slashedId = toSlash(id);
|
|
95
132
|
if (slashedId.startsWith(shimsDir)) {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
}
|
|
133
|
+
const relativeId = slashedId.slice(shimsDir.length).split("?", 1)[0] ?? "";
|
|
134
|
+
const extensionIndex = relativeId.lastIndexOf(".");
|
|
135
|
+
const shimName = extensionIndex === -1 ? relativeId : relativeId.slice(0, extensionIndex);
|
|
136
|
+
if ((preserveRouteBoundaries ? ROUTE_OWNED_CLIENT_SHIMS : PAGE_OWNED_CLIENT_SHIMS).has(shimName)) return void 0;
|
|
137
|
+
if (!preserveRouteBoundaries && PAGES_APP_ROUTER_RUNTIME_SHIMS.has(shimName)) return "vinext-app-router";
|
|
102
138
|
return "vinext";
|
|
103
139
|
}
|
|
140
|
+
if (slashedId.startsWith(instrumentationStatePrefix)) return "vinext";
|
|
104
141
|
if (id.includes("node_modules")) {
|
|
105
142
|
const pkg = getPackageName(id);
|
|
106
143
|
if (!pkg) return void 0;
|
|
@@ -410,4 +447,4 @@ function hasUserClientChunkGroups(output, ownGroups) {
|
|
|
410
447
|
return Array.isArray(output) ? output.some((entry) => hasChunkGroups(entry, ownGroups)) : hasChunkGroups(output, ownGroups);
|
|
411
448
|
}
|
|
412
449
|
//#endregion
|
|
413
|
-
export { RSC_FRAMEWORK_CHUNK_TEST, assertClientOutDirIsSeparate, createClientAssetFileNames, createClientCodeSplittingConfig, createClientManualChunks, createClientOutputFileNameDefaults, createMultiStageChunkFileNames, createMultiStageCodeSplittingConfig, createRscFrameworkChunkOutputConfig, createWorkerFileNames, findUnsupportedClientOutputFileNames, getBuildBundlerOptions, getClientTreeshakeConfig, getOutputFileNames, hasUserClientChunkGroups, isRscFrameworkModule, sanitizeRscChunkFileName, withBuildBundlerOptions };
|
|
450
|
+
export { RESOLVED_EAGER_CLIENT_REFERENCES_ID, RSC_FRAMEWORK_CHUNK_TEST, assertClientOutDirIsSeparate, createClientAssetFileNames, createClientCodeSplittingConfig, createClientManualChunks, createClientOutputFileNameDefaults, createMultiStageChunkFileNames, createMultiStageCodeSplittingConfig, createRscFrameworkChunkOutputConfig, createWorkerFileNames, findUnsupportedClientOutputFileNames, getBuildBundlerOptions, getClientTreeshakeConfig, getOutputFileNames, hasUserClientChunkGroups, isRscFrameworkModule, sanitizeRscChunkFileName, withBuildBundlerOptions };
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
//#region src/build/client-reference-async.d.ts
|
|
2
|
+
type AsyncModuleGraphInfo = {
|
|
3
|
+
code: string | null;
|
|
4
|
+
importedIds: readonly string[];
|
|
5
|
+
};
|
|
6
|
+
/** A chunk of the emitted output, as `renderChunk`'s `meta.chunks` lists it. */
|
|
7
|
+
export type EmittedChunk = {
|
|
8
|
+
fileName: string;
|
|
9
|
+
/** The chunks it imports statically, by file name, and its externals. */
|
|
10
|
+
imports: readonly string[];
|
|
11
|
+
/** Its modules, with their code after tree-shaking. */
|
|
12
|
+
modules: Readonly<Record<string, {
|
|
13
|
+
code: string | null;
|
|
14
|
+
renderedLength: number;
|
|
15
|
+
}>>;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Whether `code` awaits at the top level of the module: an `await`, a
|
|
19
|
+
* `for await` or an `await using` outside any function. Code that fails to
|
|
20
|
+
* parse counts as synchronous.
|
|
21
|
+
*/
|
|
22
|
+
export declare function hasTopLevelAwait(code: string): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* The `roots` whose evaluation is asynchronous in the emitted output: the
|
|
25
|
+
* module, or a module it imports at any depth, awaits at its top level. Webpack
|
|
26
|
+
* calls these async modules, and React's Flight client suspends on them as they
|
|
27
|
+
* load. Only what the output keeps counts: modules tree-shaking dropped don't
|
|
28
|
+
* make a module async. Neither do imports of a module in a chunk the
|
|
29
|
+
* importer's chunks never load, nor of one `declaresSideEffects` reports, which
|
|
30
|
+
* the output drops when unused. Other imports stay: the imported module's side
|
|
31
|
+
* effects, its await included, run before the importer.
|
|
32
|
+
*/
|
|
33
|
+
export declare function collectAsyncModules(options: {
|
|
34
|
+
roots: readonly string[];
|
|
35
|
+
getModuleInfo: (id: string) => AsyncModuleGraphInfo | null;
|
|
36
|
+
chunks: readonly EmittedChunk[];
|
|
37
|
+
declaresSideEffects?: (id: string) => boolean;
|
|
38
|
+
}): Set<string>;
|
|
39
|
+
/**
|
|
40
|
+
* Whether a module's package declares which of its modules have side effects
|
|
41
|
+
* (`sideEffects` other than `true` in the nearest package.json naming a
|
|
42
|
+
* package or declaring it). A bundler drops an unused import of a module the
|
|
43
|
+
* declaration marks side-effect-free, which Rolldown's module info doesn't
|
|
44
|
+
* report, so an import into such a package may not survive.
|
|
45
|
+
*/
|
|
46
|
+
export declare function createSideEffectsDeclarationCheck(): (id: string) => boolean;
|
|
47
|
+
//#endregion
|
|
48
|
+
export {};
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import path from "../deps/.pnpm/pathslash@0.1.0/deps/pathslash/dist/index.js";
|
|
2
|
+
import { parseProgram, walkAst } from "../plugins/ast-utils.js";
|
|
3
|
+
import fs from "node:fs";
|
|
4
|
+
//#region src/build/client-reference-async.ts
|
|
5
|
+
/**
|
|
6
|
+
* Whether `code` awaits at the top level of the module: an `await`, a
|
|
7
|
+
* `for await` or an `await using` outside any function. Code that fails to
|
|
8
|
+
* parse counts as synchronous.
|
|
9
|
+
*/
|
|
10
|
+
function hasTopLevelAwait(code) {
|
|
11
|
+
if (!code.includes("await")) return false;
|
|
12
|
+
let program;
|
|
13
|
+
try {
|
|
14
|
+
program = parseProgram(code, { sourceType: "module" });
|
|
15
|
+
} catch {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
let found = false;
|
|
19
|
+
walkAst(program, (node) => {
|
|
20
|
+
if (found) return false;
|
|
21
|
+
if (node.type === "FunctionDeclaration" || node.type === "FunctionExpression" || node.type === "ArrowFunctionExpression") return false;
|
|
22
|
+
if (node.type === "AwaitExpression") {
|
|
23
|
+
found = true;
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
if (node.type === "ForOfStatement" && node.await || node.type === "VariableDeclaration" && node.kind === "await using") found = true;
|
|
27
|
+
});
|
|
28
|
+
return found;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* The `roots` whose evaluation is asynchronous in the emitted output: the
|
|
32
|
+
* module, or a module it imports at any depth, awaits at its top level. Webpack
|
|
33
|
+
* calls these async modules, and React's Flight client suspends on them as they
|
|
34
|
+
* load. Only what the output keeps counts: modules tree-shaking dropped don't
|
|
35
|
+
* make a module async. Neither do imports of a module in a chunk the
|
|
36
|
+
* importer's chunks never load, nor of one `declaresSideEffects` reports, which
|
|
37
|
+
* the output drops when unused. Other imports stay: the imported module's side
|
|
38
|
+
* effects, its await included, run before the importer.
|
|
39
|
+
*/
|
|
40
|
+
function collectAsyncModules(options) {
|
|
41
|
+
const chunkOf = /* @__PURE__ */ new Map();
|
|
42
|
+
for (const chunk of options.chunks) for (const [id, module] of Object.entries(chunk.modules)) if (module.renderedLength > 0) chunkOf.set(id, chunk);
|
|
43
|
+
const chunksByFile = new Map(options.chunks.map((chunk) => [chunk.fileName, chunk]));
|
|
44
|
+
const loadedChunks = /* @__PURE__ */ new Map();
|
|
45
|
+
const chunksLoadedWith = (chunk) => {
|
|
46
|
+
let files = loadedChunks.get(chunk);
|
|
47
|
+
if (files) return files;
|
|
48
|
+
files = /* @__PURE__ */ new Set([chunk.fileName]);
|
|
49
|
+
const queue = [chunk];
|
|
50
|
+
for (let index = 0; index < queue.length; index++) for (const file of queue[index].imports) {
|
|
51
|
+
const imported = chunksByFile.get(file);
|
|
52
|
+
if (!imported || files.has(file)) continue;
|
|
53
|
+
files.add(file);
|
|
54
|
+
queue.push(imported);
|
|
55
|
+
}
|
|
56
|
+
loadedChunks.set(chunk, files);
|
|
57
|
+
return files;
|
|
58
|
+
};
|
|
59
|
+
const importers = /* @__PURE__ */ new Map();
|
|
60
|
+
const awaiting = [];
|
|
61
|
+
const visited = /* @__PURE__ */ new Set();
|
|
62
|
+
const stack = options.roots.filter((id) => chunkOf.has(id));
|
|
63
|
+
while (stack.length > 0) {
|
|
64
|
+
const id = stack.pop();
|
|
65
|
+
if (visited.has(id)) continue;
|
|
66
|
+
visited.add(id);
|
|
67
|
+
const chunk = chunkOf.get(id);
|
|
68
|
+
const info = options.getModuleInfo(id);
|
|
69
|
+
const code = chunk.modules[id].code ?? info?.code ?? null;
|
|
70
|
+
if (code !== null && hasTopLevelAwait(code)) awaiting.push(id);
|
|
71
|
+
const loaded = chunksLoadedWith(chunk);
|
|
72
|
+
for (const imported of info?.importedIds ?? []) {
|
|
73
|
+
const importedChunk = chunkOf.get(imported);
|
|
74
|
+
if (!importedChunk || !loaded.has(importedChunk.fileName)) continue;
|
|
75
|
+
if (options.declaresSideEffects?.(imported)) continue;
|
|
76
|
+
let list = importers.get(imported);
|
|
77
|
+
if (!list) importers.set(imported, list = []);
|
|
78
|
+
list.push(id);
|
|
79
|
+
stack.push(imported);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const asyncModules = new Set(awaiting);
|
|
83
|
+
for (let index = 0; index < awaiting.length; index++) for (const importer of importers.get(awaiting[index]) ?? []) {
|
|
84
|
+
if (asyncModules.has(importer)) continue;
|
|
85
|
+
asyncModules.add(importer);
|
|
86
|
+
awaiting.push(importer);
|
|
87
|
+
}
|
|
88
|
+
return new Set(options.roots.filter((id) => asyncModules.has(id)));
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Whether a module's package declares which of its modules have side effects
|
|
92
|
+
* (`sideEffects` other than `true` in the nearest package.json naming a
|
|
93
|
+
* package or declaring it). A bundler drops an unused import of a module the
|
|
94
|
+
* declaration marks side-effect-free, which Rolldown's module info doesn't
|
|
95
|
+
* report, so an import into such a package may not survive.
|
|
96
|
+
*/
|
|
97
|
+
function createSideEffectsDeclarationCheck() {
|
|
98
|
+
const byDirectory = /* @__PURE__ */ new Map();
|
|
99
|
+
const declares = (directory) => {
|
|
100
|
+
const cached = byDirectory.get(directory);
|
|
101
|
+
if (cached !== void 0) return cached;
|
|
102
|
+
let pkg;
|
|
103
|
+
try {
|
|
104
|
+
pkg = JSON.parse(fs.readFileSync(path.join(directory, "package.json"), "utf8"));
|
|
105
|
+
} catch {
|
|
106
|
+
pkg = void 0;
|
|
107
|
+
}
|
|
108
|
+
let result;
|
|
109
|
+
if (pkg && typeof pkg === "object" && ("sideEffects" in pkg || "name" in pkg)) result = "sideEffects" in pkg && pkg.sideEffects !== true;
|
|
110
|
+
else {
|
|
111
|
+
const parent = path.dirname(directory);
|
|
112
|
+
result = parent !== directory && declares(parent);
|
|
113
|
+
}
|
|
114
|
+
byDirectory.set(directory, result);
|
|
115
|
+
return result;
|
|
116
|
+
};
|
|
117
|
+
return (id) => {
|
|
118
|
+
const file = id.split("?")[0];
|
|
119
|
+
return !id.startsWith("\0") && path.isAbsolute(file) && declares(path.dirname(file));
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
//#endregion
|
|
123
|
+
export { collectAsyncModules, createSideEffectsDeclarationCheck, hasTopLevelAwait };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { ClientReferenceChunks } from "../utils/client-reference-chunks.js";
|
|
2
|
+
import { ResolvedConfig, Rollup } from "vite";
|
|
3
|
+
//#region src/build/client-reference-chunks.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Collect what each App Router client reference loads in the browser from the
|
|
6
|
+
* client bundle: the chunk holding the module that registers it (see
|
|
7
|
+
* plugins/rsc-client-reference-loaders.ts), and the JS chunks and stylesheets
|
|
8
|
+
* that chunk needs, as Vite's preload helper would load them for a dynamic
|
|
9
|
+
* import. JS chunks the App browser entry imports statically have loaded
|
|
10
|
+
* before any Flight row decodes, so they are left out.
|
|
11
|
+
*
|
|
12
|
+
* @param moduleKeys Client reference modules by resolved id, with the keys of
|
|
13
|
+
* the references each registers.
|
|
14
|
+
* @param modulePreload The client build's `build.modulePreload`, which picks
|
|
15
|
+
* the JS chunks to modulepreload, as it does for Vite's preload helper. Its
|
|
16
|
+
* `resolveDependencies` sees the chunk that dynamically imports each
|
|
17
|
+
* registering module as the host, as Vite passes it.
|
|
18
|
+
*/
|
|
19
|
+
export declare function collectClientReferenceChunks(bundle: Rollup.OutputBundle, moduleKeys: ReadonlyMap<string, readonly string[]>, appBrowserEntry: Rollup.OutputChunk | undefined, modulePreload?: ResolvedConfig["build"]["modulePreload"]): ClientReferenceChunks | undefined;
|
|
20
|
+
/**
|
|
21
|
+
* Vite's build manifest keys a dynamic import by the module it imports, and
|
|
22
|
+
* next/dynamic's SSR preloads look up the module a boundary imports (see
|
|
23
|
+
* shims/dynamic-preload-chunks.tsx). The client build imports a client
|
|
24
|
+
* reference outside every group through the module that registers it, not
|
|
25
|
+
* the reference's own module, so map the reference's module to the chunk of
|
|
26
|
+
* the module that registers it, keyed as Vite keys a manifest entry.
|
|
27
|
+
*
|
|
28
|
+
* @param getImportedIds A module's static imports, as the bundler resolved
|
|
29
|
+
* them.
|
|
30
|
+
*/
|
|
31
|
+
export declare function collectClientReferenceSources(bundle: Rollup.OutputBundle, getImportedIds: (moduleId: string) => readonly string[] | undefined, root: string): Record<string, string> | undefined;
|
|
32
|
+
//#endregion
|