vinext 1.2.1 → 1.3.1
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 +12 -9
- package/dist/_virtual/_rolldown/runtime.js +1 -1
- 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 +77 -6
- package/dist/build/client-build-config.js +176 -12
- 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 +171 -0
- package/dist/build/client-reference-groups.js +572 -0
- 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/layout-classification.d.ts +2 -1
- package/dist/build/module-dependency-cache.d.ts +33 -1
- package/dist/build/module-dependency-cache.js +51 -1
- package/dist/build/next-client-runtime-manifests.d.ts +12 -2
- package/dist/build/next-client-runtime-manifests.js +19 -4
- package/dist/build/nitro-public-files.d.ts +24 -0
- package/dist/build/nitro-public-files.js +60 -0
- package/dist/build/pages-client-assets-module.js +1 -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-paths.js +5 -2
- 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 +5 -4
- package/dist/build/report.d.ts +2 -1
- package/dist/build/route-classification-injector.d.ts +2 -1
- package/dist/build/route-classification-manifest.d.ts +2 -1
- package/dist/build/run-prerender.d.ts +2 -1
- package/dist/build/server-actions-encryption-key.d.ts +24 -0
- package/dist/build/server-actions-encryption-key.js +101 -0
- package/dist/build/ssr-manifest.d.ts +3 -0
- package/dist/build/ssr-manifest.js +34 -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 +4 -0
- package/dist/cli-args.d.ts +2 -1
- package/dist/cli.js +2 -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-rewrite-params.d.ts +9 -0
- package/dist/client/client-rewrite-params.js +20 -0
- 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 +2 -1
- package/dist/client/index.js +1 -2
- package/dist/client/instrumentation-client-state.js +5 -5
- package/dist/client/navigation-runtime.d.ts +28 -3
- package/dist/client/navigation-runtime.js +42 -11
- package/dist/client/pages-router-link-navigation.d.ts +2 -1
- package/dist/client/vinext-next-data.d.ts +25 -2
- package/dist/client/window-next.d.ts +2 -1
- package/dist/config/config-matchers.d.ts +27 -41
- package/dist/config/config-matchers.js +293 -270
- package/dist/config/config-source.d.ts +34 -0
- package/dist/config/config-source.js +141 -0
- package/dist/config/dotenv.d.ts +2 -1
- package/dist/config/header-params.d.ts +29 -0
- package/dist/config/header-params.js +106 -0
- package/dist/config/next-config.d.ts +20 -6
- package/dist/config/next-config.js +149 -11
- package/dist/config/tsconfig-paths.d.ts +2 -1
- 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/ua-parser-js@1.0.35/deps/ua-parser-js/src/ua-parser.js +2 -2
- package/dist/entries/app-browser-entry.d.ts +34 -6
- package/dist/entries/app-browser-entry.js +103 -40
- package/dist/entries/app-rsc-entry.d.ts +4 -1
- package/dist/entries/app-rsc-entry.js +131 -66
- package/dist/entries/app-rsc-manifest.d.ts +12 -1
- package/dist/entries/app-rsc-manifest.js +73 -1
- package/dist/entries/app-ssr-entry.d.ts +4 -1
- package/dist/entries/app-ssr-entry.js +9 -2
- package/dist/entries/pages-client-entry.d.ts +1 -0
- package/dist/entries/pages-client-entry.js +6 -6
- 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 +18 -15
- 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.d.ts +11 -0
- package/dist/index.js +340 -116
- package/dist/init.js +17 -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/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/og-assets.d.ts +2 -1
- package/dist/plugins/og-assets.js +2 -3
- package/dist/plugins/optimize-imports.d.ts +27 -3
- package/dist/plugins/optimize-imports.js +106 -20
- package/dist/plugins/pages-node-externals.d.ts +2 -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 +53 -1
- package/dist/plugins/rsc-client-reference-loaders.js +447 -27
- 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 +5 -0
- package/dist/plugins/use-cache-callable.js +30 -8
- package/dist/plugins/worker-image-imports.d.ts +1 -0
- package/dist/plugins/worker-image-imports.js +2 -2
- package/dist/plugins/worker-use-server.d.ts +2 -1
- package/dist/routing/app-route-graph.d.ts +41 -1
- package/dist/routing/app-route-graph.js +122 -50
- package/dist/routing/browser-route-manifest.d.ts +44 -0
- package/dist/routing/browser-route-manifest.js +195 -0
- package/dist/routing/hashed-route-patterns.d.ts +4 -0
- package/dist/routing/hashed-route-patterns.js +22 -0
- package/dist/routing/optimistic-route-trie.d.ts +28 -0
- package/dist/routing/optimistic-route-trie.js +102 -0
- package/dist/routing/route-matching.d.ts +2 -1
- package/dist/routing/route-pattern.d.ts +2 -1
- package/dist/routing/route-validation.d.ts +6 -1
- package/dist/routing/route-validation.js +26 -10
- package/dist/server/accept-encoding.d.ts +2 -1
- package/dist/server/app-action-forwarding.d.ts +10 -1
- package/dist/server/app-action-forwarding.js +15 -1
- package/dist/server/app-bfcache-identity.d.ts +2 -1
- package/dist/server/app-browser-action-result.d.ts +2 -1
- package/dist/server/app-browser-client-reuse-manifest.d.ts +2 -1
- package/dist/server/app-browser-entry.js +175 -64
- package/dist/server/app-browser-error.d.ts +5 -2
- package/dist/server/app-browser-error.js +7 -2
- package/dist/server/app-browser-history-controller.d.ts +2 -1
- package/dist/server/app-browser-hydration.d.ts +2 -1
- package/dist/server/app-browser-interception-context.d.ts +4 -3
- package/dist/server/app-browser-mpa-navigation.d.ts +1 -0
- package/dist/server/app-browser-mpa-navigation.js +6 -5
- package/dist/server/app-browser-navigation-controller.d.ts +17 -6
- package/dist/server/app-browser-navigation-controller.js +103 -36
- 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-server-action-client.d.ts +2 -1
- package/dist/server/app-browser-state.d.ts +2 -2
- package/dist/server/app-browser-state.js +1 -1
- package/dist/server/app-browser-stream.d.ts +2 -1
- package/dist/server/app-browser-visible-commit.d.ts +6 -5
- 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 +45 -2
- package/dist/server/app-client-reference-preloader.js +48 -10
- package/dist/server/app-elements-wire.d.ts +2 -1
- package/dist/server/app-elements.d.ts +2 -0
- package/dist/server/app-elements.js +3 -1
- package/dist/server/app-fallback-renderer.d.ts +9 -2
- package/dist/server/app-fallback-renderer.js +6 -2
- package/dist/server/app-history-state.d.ts +2 -1
- package/dist/server/app-inline-css-client.d.ts +2 -1
- package/dist/server/app-layout-param-observation.d.ts +2 -1
- package/dist/server/app-metadata-tracing.d.ts +2 -1
- package/dist/server/app-middleware.d.ts +6 -0
- package/dist/server/app-middleware.js +8 -10
- package/dist/server/app-optimistic-routing.d.ts +26 -11
- package/dist/server/app-optimistic-routing.js +38 -96
- package/dist/server/app-page-boundary-render.d.ts +20 -2
- package/dist/server/app-page-boundary-render.js +229 -39
- package/dist/server/app-page-boundary.d.ts +34 -5
- package/dist/server/app-page-boundary.js +40 -7
- package/dist/server/app-page-cache-finalizer.d.ts +2 -1
- package/dist/server/app-page-cache-finalizer.js +1 -1
- package/dist/server/app-page-cache-render.d.ts +10 -2
- package/dist/server/app-page-cache-render.js +15 -2
- package/dist/server/app-page-cache.js +2 -2
- package/dist/server/app-page-dispatch.d.ts +34 -1
- package/dist/server/app-page-dispatch.js +165 -34
- package/dist/server/app-page-element-builder.d.ts +17 -1
- package/dist/server/app-page-element-builder.js +187 -66
- package/dist/server/app-page-execution.d.ts +28 -1
- package/dist/server/app-page-execution.js +114 -5
- package/dist/server/app-page-head.d.ts +95 -3
- package/dist/server/app-page-head.js +307 -152
- package/dist/server/app-page-http-access-fallback-metadata.d.ts +48 -2
- package/dist/server/app-page-http-access-fallback-metadata.js +76 -1
- package/dist/server/app-page-method.d.ts +2 -1
- package/dist/server/app-page-probe.d.ts +2 -1
- package/dist/server/app-page-render-identity.d.ts +2 -1
- package/dist/server/app-page-render.d.ts +7 -1
- package/dist/server/app-page-render.js +38 -11
- package/dist/server/app-page-request.d.ts +14 -1
- package/dist/server/app-page-request.js +1 -1
- package/dist/server/app-page-route-wiring.d.ts +52 -2
- package/dist/server/app-page-route-wiring.js +197 -47
- package/dist/server/app-page-rsc-render-status.d.ts +3 -1
- package/dist/server/app-page-rsc-render-status.js +1 -0
- package/dist/server/app-page-search-params-observation.d.ts +8 -6
- package/dist/server/app-page-search-params-observation.js +16 -11
- package/dist/server/app-page-segment-plan.d.ts +2 -1
- package/dist/server/app-page-stream.d.ts +38 -1
- package/dist/server/app-page-stream.js +24 -4
- package/dist/server/app-pages-bridge.d.ts +4 -2
- package/dist/server/app-pages-bridge.js +11 -7
- 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-prerender-static-params.js +3 -2
- package/dist/server/app-render-dependency.d.ts +11 -1
- package/dist/server/app-render-dependency.js +65 -6
- package/dist/server/app-request-stage-independent-entry.d.ts +2 -1
- package/dist/server/app-request-stage-independent-entry.js +2 -2
- package/dist/server/app-response-stage-entry.d.ts +2 -1
- package/dist/server/app-response-stage-entry.js +3 -3
- package/dist/server/app-route-handler-cache.d.ts +2 -1
- package/dist/server/app-route-handler-dispatch.d.ts +2 -1
- package/dist/server/app-route-handler-dispatch.js +4 -2
- package/dist/server/app-route-handler-execution.d.ts +4 -1
- package/dist/server/app-route-handler-execution.js +9 -2
- package/dist/server/app-route-handler-middleware-context.d.ts +2 -1
- package/dist/server/app-route-handler-middleware-context.js +3 -3
- package/dist/server/app-route-handler-response.d.ts +4 -2
- package/dist/server/app-route-handler-response.js +2 -2
- package/dist/server/app-route-handler-runtime.d.ts +4 -1
- package/dist/server/app-route-handler-runtime.js +20 -3
- package/dist/server/app-route-module-loader.d.ts +18 -1
- package/dist/server/app-route-module-loader.js +15 -6
- package/dist/server/app-route-tree-prefetch.d.ts +2 -1
- package/dist/server/app-route-tree.d.ts +20 -0
- package/dist/server/app-route-tree.js +18 -0
- package/dist/server/app-router-entry.js +2 -2
- package/dist/server/app-rsc-combined-handler.js +8 -1
- package/dist/server/app-rsc-error-handler.d.ts +2 -1
- package/dist/server/app-rsc-errors.d.ts +9 -1
- package/dist/server/app-rsc-errors.js +9 -2
- package/dist/server/app-rsc-handler.d.ts +6 -2
- package/dist/server/app-rsc-handler.js +152 -140
- package/dist/server/app-rsc-response-finalizer.d.ts +7 -1
- package/dist/server/app-rsc-response-finalizer.js +4 -1
- package/dist/server/app-rsc-response-stage.js +3 -1
- package/dist/server/app-rsc-route-matching.d.ts +39 -1
- package/dist/server/app-rsc-route-matching.js +25 -1
- 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 +25 -7
- package/dist/server/app-server-action-execution.js +53 -59
- package/dist/server/app-ssr-entry.d.ts +12 -0
- package/dist/server/app-ssr-entry.js +104 -48
- 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 +29 -10
- package/dist/server/app-ssr-stream.js +311 -67
- 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 +2 -1
- package/dist/server/app-worker-stages.d.ts +2 -1
- package/dist/server/artifact-compatibility.d.ts +2 -1
- package/dist/server/bfcache-identity.d.ts +2 -1
- package/dist/server/cache-headers.d.ts +2 -1
- package/dist/server/cacheability-request.d.ts +2 -1
- package/dist/server/client-reuse-manifest.d.ts +2 -1
- package/dist/server/config-headers.d.ts +2 -1
- package/dist/server/config-headers.js +12 -3
- 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 +10 -3
- 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/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/isolate-shared-promise.d.ts +10 -0
- package/dist/server/isolate-shared-promise.js +33 -0
- package/dist/server/isr-cache.js +3 -2
- 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 +1 -1
- package/dist/server/metadata-routes.d.ts +2 -1
- package/dist/server/middleware-matcher-pattern.d.ts +0 -1
- package/dist/server/middleware-matcher-pattern.js +11 -140
- package/dist/server/middleware-matcher.js +5 -6
- package/dist/server/middleware-response-headers.d.ts +31 -0
- package/dist/server/middleware-response-headers.js +57 -1
- package/dist/server/middleware-runtime.d.ts +2 -1
- package/dist/server/middleware-runtime.js +26 -13
- package/dist/server/navigation-planner.d.ts +2 -2
- 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 +39 -0
- package/dist/server/nitro-public-files-plugin.js +106 -0
- package/dist/server/nitro-public-files.d.ts +22 -0
- package/dist/server/nitro-public-files.js +39 -0
- 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-asset-tags.d.ts +7 -1
- package/dist/server/pages-asset-tags.js +9 -2
- package/dist/server/pages-body-parser-config.d.ts +2 -1
- package/dist/server/pages-client-assets.d.ts +8 -1
- 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-i18n.d.ts +18 -0
- package/dist/server/pages-i18n.js +18 -2
- package/dist/server/pages-node-compat.d.ts +5 -3
- package/dist/server/pages-node-compat.js +35 -16
- 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 +16 -7
- 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 +8 -2
- package/dist/server/pages-request-pipeline.js +35 -40
- package/dist/server/pages-request-stage-entry.d.ts +2 -1
- package/dist/server/pages-request-stage-entry.js +16 -6
- package/dist/server/pages-response-stage-entry.d.ts +2 -1
- package/dist/server/pages-response-stage-entry.js +1 -1
- package/dist/server/pages-revalidate.js +1 -0
- package/dist/server/pages-route-data-kind.d.ts +2 -1
- package/dist/server/pages-router-entry.js +1 -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.d.ts +2 -2
- package/dist/server/prod-server.js +80 -36
- package/dist/server/proxy-trust.d.ts +6 -0
- package/dist/server/proxy-trust.js +12 -6
- package/dist/server/request-log.d.ts +2 -1
- package/dist/server/request-pipeline.d.ts +5 -0
- package/dist/server/request-pipeline.js +12 -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/server-reference-loader.js +10 -1
- package/dist/server/static-file-cache.d.ts +2 -1
- package/dist/server/static-file-cache.js +16 -3
- package/dist/server/static-layout-client-reuse-proof.d.ts +2 -1
- package/dist/server/worker-revalidation-context.d.ts +2 -1
- package/dist/server/worker-stages.d.ts +2 -1
- package/dist/server/worker-utils.js +1 -1
- 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 +32 -11
- package/dist/shims/cache-request-state.d.ts +40 -3
- package/dist/shims/cache-request-state.js +70 -5
- package/dist/shims/cache-runtime.js +47 -19
- package/dist/shims/cache.d.ts +2 -2
- package/dist/shims/cache.js +17 -8
- 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-purge-routes.d.ts +25 -0
- package/dist/shims/cdn-purge-routes.js +77 -0
- package/dist/shims/client-locale.js +2 -1
- package/dist/shims/client-page-root.d.ts +2 -1
- 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 +17 -4
- package/dist/shims/error-boundary.d.ts +39 -3
- package/dist/shims/error-boundary.js +31 -16
- 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 +9 -4
- 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-props.d.ts +93 -0
- package/dist/shims/image-props.js +323 -0
- package/dist/shims/image.d.ts +4 -39
- package/dist/shims/image.js +4 -319
- 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 +9 -0
- package/dist/shims/internal/headers-state.js +19 -2
- package/dist/shims/internal/hybrid-client-route-owner-direct.d.ts +6 -2
- package/dist/shims/internal/hybrid-client-route-owner-direct.js +31 -14
- package/dist/shims/internal/hybrid-client-route-owner.js +8 -8
- package/dist/shims/internal/interpolate-as.d.ts +2 -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 +198 -53
- package/dist/shims/metadata.d.ts +32 -11
- package/dist/shims/metadata.js +88 -26
- package/dist/shims/navigation-errors.d.ts +2 -1
- package/dist/shims/navigation.d.ts +23 -3
- package/dist/shims/navigation.js +91 -25
- package/dist/shims/og.js +35 -10
- package/dist/shims/pages-router-runtime.d.ts +2 -1
- package/dist/shims/ppr-fallback-shell.d.ts +2 -1
- package/dist/shims/request-context.d.ts +13 -0
- package/dist/shims/router.js +33 -43
- package/dist/shims/server.d.ts +31 -4
- package/dist/shims/server.js +58 -10
- package/dist/shims/thenable-params.d.ts +6 -1
- package/dist/shims/thenable-params.js +11 -2
- package/dist/shims/unified-request-context.d.ts +5 -0
- package/dist/shims/unified-request-context.js +5 -3
- package/dist/typegen.d.ts +2 -1
- package/dist/utils/asset-prefix.d.ts +7 -0
- package/dist/utils/asset-prefix.js +10 -1
- package/dist/utils/client-build-manifest.d.ts +4 -1
- package/dist/utils/client-build-manifest.js +20 -6
- 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 +10 -1
- package/dist/utils/client-runtime-metadata.js +53 -9
- package/dist/utils/compare.d.ts +9 -0
- package/dist/utils/compare.js +15 -1
- package/dist/utils/lazy-chunks.d.ts +18 -0
- package/dist/utils/lazy-chunks.js +27 -1
- package/dist/utils/manifest-paths.d.ts +14 -0
- package/dist/utils/manifest-paths.js +22 -1
- package/dist/utils/middleware-request-headers.d.ts +2 -1
- package/dist/utils/path-to-regexp.d.ts +21 -0
- package/dist/{server/middleware-path-to-regexp.js → utils/path-to-regexp.js} +14 -11
- package/dist/utils/plugin-react-version.d.ts +15 -0
- package/dist/utils/plugin-react-version.js +64 -0
- package/dist/utils/project.d.ts +2 -1
- package/dist/utils/project.js +9 -1
- package/dist/utils/public-routes.d.ts +2 -0
- package/dist/utils/public-routes.js +18 -7
- package/dist/utils/query.d.ts +2 -1
- package/dist/utils/sorted-array.d.ts +2 -1
- package/dist/utils/vite-cli-invocation.d.ts +2 -1
- package/package.json +5 -5
- package/dist/deps/.pnpm/image-size@2.0.2/deps/image-size/dist/index.js +0 -808
- package/dist/server/default-not-found-module.d.ts +0 -19
- package/dist/server/default-not-found-module.js +0 -18
- package/dist/server/middleware-path-to-regexp.d.ts +0 -13
- package/dist/server/rsc-stream-hints.d.ts +0 -21
- package/dist/server/rsc-stream-hints.js +0 -227
- package/dist/utils/regex-safety.d.ts +0 -17
- package/dist/utils/regex-safety.js +0 -789
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import path from "../deps/.pnpm/pathslash@0.1.0/deps/pathslash/dist/index.js";
|
|
2
2
|
import fs from "node:fs";
|
|
3
|
+
import os from "node:os";
|
|
3
4
|
//#region src/server/dev-lockfile.ts
|
|
4
5
|
/**
|
|
5
6
|
* Dev server lock file.
|
|
@@ -21,6 +22,9 @@ import fs from "node:fs";
|
|
|
21
22
|
* (`process.kill(pid, 0)`), which is good enough for the dev-server
|
|
22
23
|
* "another server is running" use case. Race conditions on lock acquisition
|
|
23
24
|
* are tolerated: at worst, two dev servers race and one fails to bind a port.
|
|
25
|
+
* Unlike a `flock()`, the lock file survives a hard restart, so a lock
|
|
26
|
+
* written before the current boot is treated as stale whatever its PID: the
|
|
27
|
+
* PID may now belong to an unrelated process. See `predatesCurrentBoot()`.
|
|
24
28
|
* - Lock file lives in `<root>/.vinext/dev/lock.json` (mirroring Next.js'
|
|
25
29
|
* `.next/dev/lock` layout). `.vinext/` is already used by the fonts plugin
|
|
26
30
|
* to cache self-hosted Google Fonts, so this re-uses the same project-local
|
|
@@ -71,6 +75,46 @@ function isPidAlive(pid) {
|
|
|
71
75
|
}
|
|
72
76
|
}
|
|
73
77
|
/**
|
|
78
|
+
* Slack for the boot-time comparison in `predatesCurrentBoot`. `os.uptime()`
|
|
79
|
+
* has whole-second resolution on some platforms (macOS derives it from
|
|
80
|
+
* `kern.boottime`), so the derived boot time is only accurate to about a
|
|
81
|
+
* second.
|
|
82
|
+
*/
|
|
83
|
+
const BOOT_TIME_TOLERANCE_MS = 5e3;
|
|
84
|
+
/**
|
|
85
|
+
* Returns true if a lock with the given `startedAt` was written before the
|
|
86
|
+
* machine last booted.
|
|
87
|
+
*
|
|
88
|
+
* Such a lock was left behind by a session whose exit handler never ran (a
|
|
89
|
+
* crash, a forced restart, power loss). PIDs are handed out again after a
|
|
90
|
+
* boot, so the lock's PID may be held by an unrelated process, and
|
|
91
|
+
* `isPidAlive()` alone would report the dead server as running.
|
|
92
|
+
*
|
|
93
|
+
* The boot time is derived from `Date.now() - os.uptime()`. Stepping the wall
|
|
94
|
+
* clock forward moves it too (`os.uptime()` doesn't change), so a forward
|
|
95
|
+
* step larger than the uptime at which a server started makes its lock look
|
|
96
|
+
* stale, e.g. a VM resuming after the host slept. The second `vinext dev`
|
|
97
|
+
* then takes over, as in the acquisition race tolerated below: Vite moves it
|
|
98
|
+
* to another port, or it fails to bind with `strictPort`.
|
|
99
|
+
*
|
|
100
|
+
* Known limitations, where a lock is still checked by PID alone:
|
|
101
|
+
* - A wall clock that comes back from a reboot behind the previous session
|
|
102
|
+
* (an RTC running slow, or NTP stepping it back) can leave the lock's
|
|
103
|
+
* `startedAt` after the derived boot time.
|
|
104
|
+
* - Windows Fast Startup shuts down by hibernating the kernel, so
|
|
105
|
+
* `os.uptime()` keeps counting across that shutdown.
|
|
106
|
+
* - A container restart doesn't reset the host's uptime.
|
|
107
|
+
*/
|
|
108
|
+
function predatesCurrentBoot(startedAt) {
|
|
109
|
+
let uptime;
|
|
110
|
+
try {
|
|
111
|
+
uptime = os.uptime();
|
|
112
|
+
} catch {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
return startedAt < Date.now() - uptime * 1e3 - BOOT_TIME_TOLERANCE_MS;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
74
118
|
* Writes the lock file with the given content. Creates the parent directory
|
|
75
119
|
* if it doesn't exist.
|
|
76
120
|
*
|
|
@@ -128,7 +172,7 @@ function tryAcquireLockfile(opts) {
|
|
|
128
172
|
const lockfilePath = getLockfilePath(root);
|
|
129
173
|
const existing = readLockfile(lockfilePath);
|
|
130
174
|
if (existing) {
|
|
131
|
-
if (isPidAlive(existing.pid)) return {
|
|
175
|
+
if (!predatesCurrentBoot(existing.startedAt) && isPidAlive(existing.pid)) return {
|
|
132
176
|
ok: false,
|
|
133
177
|
existing,
|
|
134
178
|
lockfilePath
|
|
@@ -178,4 +222,4 @@ function tryAcquireLockfile(opts) {
|
|
|
178
222
|
};
|
|
179
223
|
}
|
|
180
224
|
//#endregion
|
|
181
|
-
export { formatAlreadyRunningError, getLockfilePath, isPidAlive, readLockfile, tryAcquireLockfile };
|
|
225
|
+
export { formatAlreadyRunningError, getLockfilePath, isPidAlive, predatesCurrentBoot, readLockfile, tryAcquireLockfile };
|
|
@@ -41,7 +41,7 @@ import { PAGES_PREVIEW_CACHE_CONTROL, appendPagesPreviewClearCookies, getPagesPr
|
|
|
41
41
|
import { attachPagesRequestCookies } from "./pages-node-compat.js";
|
|
42
42
|
import { randomUUID } from "node:crypto";
|
|
43
43
|
import React from "react";
|
|
44
|
-
import { renderToReadableStream } from "react-dom/server
|
|
44
|
+
import { renderToReadableStream } from "react-dom/server";
|
|
45
45
|
//#region src/server/dev-server.ts
|
|
46
46
|
/**
|
|
47
47
|
* Render a React element to a string using renderToReadableStream.
|
|
@@ -112,6 +112,7 @@ function writeGsspRedirect(res, redirect, isDataReq, props, options) {
|
|
|
112
112
|
...props,
|
|
113
113
|
pageProps: props.pageProps
|
|
114
114
|
});
|
|
115
|
+
if (options.method === "getServerSideProps" && !res.getHeader("Cache-Control")) res.setHeader("Cache-Control", NEVER_CACHE_CONTROL);
|
|
115
116
|
const gsspHeaders = Object.fromEntries(Object.entries(res.getHeaders()).filter((entry) => entry[1] !== void 0));
|
|
116
117
|
if (isDangerousScheme(resolved.destination)) {
|
|
117
118
|
const deploymentId = process.env.__VINEXT_DEPLOYMENT_ID || process.env.NEXT_DEPLOYMENT_ID;
|
|
@@ -643,14 +644,17 @@ function createSSRHandler(server, runner, routes, pagesDir, i18nConfig, fileMatc
|
|
|
643
644
|
const deploymentId = process.env.__VINEXT_DEPLOYMENT_ID || process.env.NEXT_DEPLOYMENT_ID;
|
|
644
645
|
stripDevPagesNotFoundFramingHeaders(res);
|
|
645
646
|
if (!res.hasHeader("Content-Type")) res.setHeader("Content-Type", "application/json");
|
|
647
|
+
if (!res.getHeader("Cache-Control")) res.setHeader("Cache-Control", NEVER_CACHE_CONTROL);
|
|
646
648
|
if (deploymentId && !res.hasHeader("x-nextjs-deployment-id")) res.setHeader(NEXTJS_DEPLOYMENT_ID_HEADER, deploymentId);
|
|
647
649
|
res.writeHead(404);
|
|
648
650
|
res.end("{\"notFound\":true}");
|
|
649
651
|
return;
|
|
650
652
|
}
|
|
653
|
+
if (!res.getHeader("Cache-Control")) res.setHeader("Cache-Control", NEVER_CACHE_CONTROL);
|
|
651
654
|
await renderErrorPage(server, runner, req, res, url, pagesDir, 404, routerShim.wrapWithRouterContext, void 0, void 0, reactStrictMode, {
|
|
652
655
|
...errorPageContext,
|
|
653
|
-
notFoundSrcPage: patternToNextFormat(route.pattern)
|
|
656
|
+
notFoundSrcPage: patternToNextFormat(route.pattern),
|
|
657
|
+
cacheControl: requestPreview.data === false && !requestPreview.shouldClear ? DEV_PAGES_CACHE_CONTROL : PAGES_PREVIEW_CACHE_CONTROL
|
|
654
658
|
});
|
|
655
659
|
return;
|
|
656
660
|
}
|
|
@@ -1130,7 +1134,8 @@ async function renderErrorPage(server, runner, req, res, url, pagesDir, statusCo
|
|
|
1130
1134
|
getTailHeadHTML: () => getClientTraceMetadataHTML(context.clientTraceMetadata),
|
|
1131
1135
|
setDocumentInitialHead: typeof headShim.setDocumentInitialHead === "function" ? headShim.setDocumentInitialHead : void 0,
|
|
1132
1136
|
crossOrigin: context.crossOrigin,
|
|
1133
|
-
preserveExistingContentType: statusCode === 404
|
|
1137
|
+
preserveExistingContentType: statusCode === 404,
|
|
1138
|
+
extraHeaders: context.cacheControl ? { "Cache-Control": context.cacheControl } : void 0
|
|
1134
1139
|
});
|
|
1135
1140
|
else {
|
|
1136
1141
|
const bodyHtml = await tracePagesDocument(errorPage, () => renderToStringAsync(element));
|
|
@@ -1155,6 +1160,7 @@ async function renderErrorPage(server, runner, req, res, url, pagesDir, statusCo
|
|
|
1155
1160
|
configuredCrossOrigin: context.crossOrigin,
|
|
1156
1161
|
protectedAssetMarker
|
|
1157
1162
|
}), protectedAssetMarker);
|
|
1163
|
+
if (context.cacheControl) res.setHeader("Cache-Control", context.cacheControl);
|
|
1158
1164
|
res.writeHead(statusCode, statusCode === 404 && res.hasHeader("Content-Type") ? void 0 : { "Content-Type": "text/html; charset=utf-8" });
|
|
1159
1165
|
res.end(transformedHtml);
|
|
1160
1166
|
}
|
|
@@ -1173,6 +1179,7 @@ async function renderErrorPage(server, runner, req, res, url, pagesDir, statusCo
|
|
|
1173
1179
|
defaultResponse.headers.forEach((value, key) => {
|
|
1174
1180
|
headers[key] = value;
|
|
1175
1181
|
});
|
|
1182
|
+
if (context.cacheControl) headers["cache-control"] = context.cacheControl;
|
|
1176
1183
|
res.writeHead(defaultResponse.status, headers);
|
|
1177
1184
|
res.end(await defaultResponse.text());
|
|
1178
1185
|
return;
|
|
@@ -24,4 +24,5 @@ type FileBasedMetadataOptions = {
|
|
|
24
24
|
basePath?: string;
|
|
25
25
|
};
|
|
26
26
|
export declare function applyFileBasedMetadata(metadata: Metadata | null, routePath: string, params: AppPageParams, metadataRoutes: readonly MetadataFileRoute[] | null | undefined, options?: FileBasedMetadataOptions): Promise<Metadata | null>;
|
|
27
|
-
//#endregion
|
|
27
|
+
//#endregion
|
|
28
|
+
export {};
|
|
@@ -43,4 +43,5 @@ export type FrameworkTracer = {
|
|
|
43
43
|
};
|
|
44
44
|
export declare function recordFrameworkSpanError(span: FrameworkSpan, error: unknown): void;
|
|
45
45
|
export declare function createFrameworkTracer(integrations: readonly FrameworkTracingIntegration[]): FrameworkTracer;
|
|
46
|
-
//#endregion
|
|
46
|
+
//#endregion
|
|
47
|
+
export {};
|
package/dist/server/html.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
//#region src/server/html.d.ts
|
|
2
2
|
export declare function safeJsonStringify(data: unknown): string;
|
|
3
|
+
export declare function scriptSafeJsonStringify(data: unknown): string;
|
|
3
4
|
export declare function escapeHtmlAttr(value: string): string;
|
|
4
5
|
export declare function htmlTokenListContains(value: string | null, token: string): boolean;
|
|
5
6
|
export declare function createNonceAttribute(nonce?: string): string;
|
package/dist/server/html.js
CHANGED
|
@@ -37,6 +37,24 @@ function safeJsonStringify(data) {
|
|
|
37
37
|
if (!HTML_UNSAFE_JSON_CHAR_RE.test(json)) return json;
|
|
38
38
|
return json.replace(HTML_UNSAFE_JSON_CHARS_RE, escapeHtmlUnsafeJsonChar);
|
|
39
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* Minimal escaping for JSON that is only ever embedded as the content of a
|
|
42
|
+
* classic inline <script> element. The HTML spec only forbids "<!--",
|
|
43
|
+
* "<script" and "<\/script" (ASCII case-insensitive) in script content, so
|
|
44
|
+
* only a '<' that begins one of those is escaped; '>' and '&' have no
|
|
45
|
+
* meaning there.
|
|
46
|
+
* https://html.spec.whatwg.org/multipage/scripting.html#restrictions-for-contents-of-script-elements
|
|
47
|
+
*
|
|
48
|
+
* Used for the large RSC payload chunks: leaving markup such as "<p>" intact
|
|
49
|
+
* lets compression match it against the identical SSR markup. Do not use
|
|
50
|
+
* this for values that can land outside a script element.
|
|
51
|
+
*/
|
|
52
|
+
const SCRIPT_UNSAFE_JSON_CHARS_RE = /<(?=!--|\/?script)|[\u2028\u2029]/gi;
|
|
53
|
+
function scriptSafeJsonStringify(data) {
|
|
54
|
+
const json = JSON.stringify(data);
|
|
55
|
+
if (json === void 0) throw new TypeError("Cannot serialize value as JSON");
|
|
56
|
+
return json.replace(SCRIPT_UNSAFE_JSON_CHARS_RE, escapeHtmlUnsafeJsonChar);
|
|
57
|
+
}
|
|
40
58
|
function escapeHtmlAttr(value) {
|
|
41
59
|
return value.replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<").replace(/>/g, ">");
|
|
42
60
|
}
|
|
@@ -53,4 +71,4 @@ function createInlineScriptTag(content, nonce) {
|
|
|
53
71
|
return `<script${createNonceAttribute(nonce)}>${content}<\/script>`;
|
|
54
72
|
}
|
|
55
73
|
//#endregion
|
|
56
|
-
export { createInlineScriptTag, createNonceAttribute, escapeHtmlAttr, htmlTokenListContains, safeJsonStringify };
|
|
74
|
+
export { createInlineScriptTag, createNonceAttribute, escapeHtmlAttr, htmlTokenListContains, safeJsonStringify, scriptSafeJsonStringify };
|
|
@@ -29,4 +29,5 @@ type StaticConditionalHeaders = {
|
|
|
29
29
|
export type StaticPreconditionResult = "proceed" | "not-modified" | "precondition-failed";
|
|
30
30
|
/** Evaluate static representation preconditions in RFC 9110 section 13.2.2 order. */
|
|
31
31
|
export declare function evaluateStaticPreconditions(headers: StaticConditionalHeaders, method: string | undefined, etag: string | undefined, mtimeMs: number): StaticPreconditionResult;
|
|
32
|
-
//#endregion
|
|
32
|
+
//#endregion
|
|
33
|
+
export {};
|
|
@@ -88,4 +88,5 @@ export declare function payloadTooLargeResponse(): Response;
|
|
|
88
88
|
* to use the canonical "Internal Server Error" body.
|
|
89
89
|
*/
|
|
90
90
|
export declare function internalServerErrorResponse(message?: string, init?: ErrorResponseInit): Response;
|
|
91
|
-
//#endregion
|
|
91
|
+
//#endregion
|
|
92
|
+
export {};
|
|
@@ -2,4 +2,5 @@
|
|
|
2
2
|
type AppCacheLeafKind = "page" | "route";
|
|
3
3
|
export declare function buildAppPageTags(cleanPathname: string, extraTags: string[], routeSegments: readonly string[]): string[];
|
|
4
4
|
export declare function buildPageCacheTags(pathname: string, extraTags: string[], routeSegments: string[], leafKind: AppCacheLeafKind): string[];
|
|
5
|
-
//#endregion
|
|
5
|
+
//#endregion
|
|
6
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ExecutionContextLike } from "../shims/request-context.js";
|
|
2
|
+
//#region src/server/isolate-shared-promise.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* Register `promise` with the creating request's `waitUntil()` and return it.
|
|
5
|
+
*
|
|
6
|
+
* @param ctx - The creating request's execution context. Defaults to the one
|
|
7
|
+
* in scope, for callers inside `runWithExecutionContext()`.
|
|
8
|
+
*/
|
|
9
|
+
export declare function shareIsolatePromise<T>(promise: Promise<T>, ctx?: Partial<Pick<ExecutionContextLike, "waitUntil">> | null): Promise<T>;
|
|
10
|
+
//#endregion
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { getRequestExecutionContext } from "../shims/request-context.js";
|
|
2
|
+
//#region src/server/isolate-shared-promise.ts
|
|
3
|
+
/**
|
|
4
|
+
* Keep the request that creates an isolate-shared promise alive until it
|
|
5
|
+
* settles.
|
|
6
|
+
*
|
|
7
|
+
* workerd binds the I/O a promise waits on (timers, fetches, dynamic
|
|
8
|
+
* `import()` under the legacy module registry) to the request that started it.
|
|
9
|
+
* If that request is canceled first, for example because the client navigated
|
|
10
|
+
* away or aborted a prefetch, the continuations are dropped and the promise
|
|
11
|
+
* never settles. A promise memoized for the isolate is awaited by every later
|
|
12
|
+
* request too, so they would all wait forever. `waitUntil()` keeps the creating
|
|
13
|
+
* request's context running after cancellation, so the work finishes for
|
|
14
|
+
* everyone.
|
|
15
|
+
*
|
|
16
|
+
* Call this only where the shared promise is created. Later requests that
|
|
17
|
+
* merely await it need nothing.
|
|
18
|
+
*/
|
|
19
|
+
function ignore() {}
|
|
20
|
+
/**
|
|
21
|
+
* Register `promise` with the creating request's `waitUntil()` and return it.
|
|
22
|
+
*
|
|
23
|
+
* @param ctx - The creating request's execution context. Defaults to the one
|
|
24
|
+
* in scope, for callers inside `runWithExecutionContext()`.
|
|
25
|
+
*/
|
|
26
|
+
function shareIsolatePromise(promise, ctx) {
|
|
27
|
+
(typeof ctx?.waitUntil === "function" ? ctx : getRequestExecutionContext())?.waitUntil?.(promise.then(ignore, ignore));
|
|
28
|
+
return promise;
|
|
29
|
+
}
|
|
30
|
+
const SHARE_ISOLATE_PROMISE_KEY = Symbol.for("vinext.shareIsolatePromise");
|
|
31
|
+
globalThis[SHARE_ISOLATE_PROMISE_KEY] ??= shareIsolatePromise;
|
|
32
|
+
//#endregion
|
|
33
|
+
export { shareIsolatePromise };
|
package/dist/server/isr-cache.js
CHANGED
|
@@ -4,6 +4,7 @@ import { getRequestExecutionContext } from "../shims/request-context.js";
|
|
|
4
4
|
import { isInterceptionMatchedUrlPath } from "./normalize-path.js";
|
|
5
5
|
import { reportRequestError } from "./instrumentation.js";
|
|
6
6
|
import { getCdnCacheAdapter } from "../shims/cdn-cache.js";
|
|
7
|
+
import { shareIsolatePromise } from "./isolate-shared-promise.js";
|
|
7
8
|
import { normalizeMountedSlotsHeader } from "./app-mounted-slots-header.js";
|
|
8
9
|
import { APP_RSC_RENDER_MODE_NAVIGATION, getRscRenderModeCacheVariant } from "./app-rsc-render-mode.js";
|
|
9
10
|
import { getRevalidateSecret, isOnDemandRevalidateRequest, isRevalidateSecret } from "./revalidation-request.js";
|
|
@@ -93,9 +94,9 @@ const pendingOnDemandRegenerations = _g[_PENDING_ON_DEMAND_REGEN_KEY] ??= /* @__
|
|
|
93
94
|
function coalesceOnDemandRevalidation(key, renderFn) {
|
|
94
95
|
const pending = pendingOnDemandRegenerations.get(key);
|
|
95
96
|
if (pending) return pending;
|
|
96
|
-
const promise = Promise.resolve().then(renderFn).finally(() => {
|
|
97
|
+
const promise = shareIsolatePromise(Promise.resolve().then(renderFn).finally(() => {
|
|
97
98
|
if (pendingOnDemandRegenerations.get(key) === promise) pendingOnDemandRegenerations.delete(key);
|
|
98
|
-
});
|
|
99
|
+
}));
|
|
99
100
|
pendingOnDemandRegenerations.set(key, promise);
|
|
100
101
|
return promise;
|
|
101
102
|
}
|
|
@@ -19,4 +19,5 @@ type MetadataRouteEntryData = {
|
|
|
19
19
|
export declare function createMetadataRouteEntryData(route: MetadataFileRoute): MetadataRouteEntryData;
|
|
20
20
|
export declare function createMetadataRouteEntrySource(input: MetadataRouteEntrySourceInput): string;
|
|
21
21
|
export declare function createMetadataRouteEntriesSource(routes: readonly MetadataFileRoute[], moduleNames: ReadonlyMap<string, string>): string[];
|
|
22
|
-
//#endregion
|
|
22
|
+
//#endregion
|
|
23
|
+
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { routePatternParts } from "../routing/route-pattern.js";
|
|
2
2
|
import { getMetadataRouteKind } from "./metadata-routes.js";
|
|
3
|
-
import imageSize from "../deps/.pnpm/image-size@2.0.
|
|
3
|
+
import { imageSize } from "../deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/lookup.js";
|
|
4
4
|
import fs from "node:fs";
|
|
5
5
|
import { createHash } from "node:crypto";
|
|
6
6
|
//#region src/server/metadata-route-build-data.ts
|
|
@@ -37,4 +37,5 @@ export type PrerenderableMetadataRoute = {
|
|
|
37
37
|
export declare function getPrerenderableMetadataRoutePaths(metadataRoutes: readonly MetadataRuntimeRoute[]): Promise<PrerenderableMetadataRoute[]>;
|
|
38
38
|
export declare function isMetadataRouteRequestPath(metadataRoutes: readonly MetadataRuntimeRoute[], cleanPathname: string): boolean;
|
|
39
39
|
export declare function handleMetadataRouteRequest(options: MetadataRouteRequestOptions): Promise<Response | null>;
|
|
40
|
-
//#endregion
|
|
40
|
+
//#endregion
|
|
41
|
+
export {};
|
|
@@ -17,8 +17,8 @@ import { ensureFetchPatch, getCollectedFetchTags, setCurrentFetchSoftTags } from
|
|
|
17
17
|
import { isValidMetadataImageId, manifestToJson, matchMetadataRoutePattern, robotsToText, sitemapToXml } from "./metadata-routes.js";
|
|
18
18
|
import { applyPrerenderCacheLifeHeader, applyPrerenderCacheTagsHeader } from "./prerender-cache-life-header.js";
|
|
19
19
|
import { canonicalizeAppPageParams } from "./app-page-segment-state.js";
|
|
20
|
-
import { buildPageCacheTags } from "./implicit-tags.js";
|
|
21
20
|
import { buildAppRouteCacheValue, buildRouteHandlerCachedResponse } from "./app-route-handler-response.js";
|
|
21
|
+
import { buildPageCacheTags } from "./implicit-tags.js";
|
|
22
22
|
import { createStaticGenerationHeadersContext } from "./app-static-generation.js";
|
|
23
23
|
import { completeAppRouteHandlerResponse } from "./app-route-handler-execution.js";
|
|
24
24
|
//#region src/server/metadata-route-response.ts
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { middlewarePathTokensToRegExp, normalizeMiddlewarePathTokens, parseMiddlewarePath } from "./middleware-path-to-regexp.js";
|
|
1
|
+
import { normalizePathTokens, parsePathPattern, pathTokensToRegExpSource } from "../utils/path-to-regexp.js";
|
|
3
2
|
//#region src/server/middleware-matcher-pattern.ts
|
|
4
3
|
const MATCHER_OBJECT_KEYS = /* @__PURE__ */ new Set([
|
|
5
4
|
"source",
|
|
@@ -52,154 +51,26 @@ function matcherObjectSource(value) {
|
|
|
52
51
|
function isValidMiddlewareMatcherObjectConfig(value) {
|
|
53
52
|
return matcherObjectSource(value).error === void 0;
|
|
54
53
|
}
|
|
55
|
-
function
|
|
56
|
-
|
|
57
|
-
return new RegExp(`^(?:${pattern})$`).test(value);
|
|
58
|
-
} catch {
|
|
59
|
-
return false;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
function atomsOverlap(left, right) {
|
|
63
|
-
return regexAtomsMayOverlap(left, right, true);
|
|
64
|
-
}
|
|
65
|
-
function groupCanMatchEmpty(group) {
|
|
66
|
-
if (/^\?(?:[=!]|<[=!])/.test(group)) return true;
|
|
67
|
-
return patternMatches(group.startsWith("?:") ? group.slice(2) : group, "");
|
|
68
|
-
}
|
|
69
|
-
function hasOverlappingSequentialRepetition(pattern) {
|
|
70
|
-
const repeatedAtDepth = [[]];
|
|
71
|
-
const groupStarts = [];
|
|
72
|
-
let depth = 0;
|
|
73
|
-
for (let index = 0; index < pattern.length; index++) {
|
|
74
|
-
const character = pattern[index];
|
|
75
|
-
if (character === "(") {
|
|
76
|
-
groupStarts.push(index);
|
|
77
|
-
depth++;
|
|
78
|
-
repeatedAtDepth[depth] = [];
|
|
79
|
-
if (pattern[index + 1] === "?") {
|
|
80
|
-
index++;
|
|
81
|
-
if (pattern[index + 1] === "<" && /[=!]/.test(pattern[index + 2] ?? "")) index += 2;
|
|
82
|
-
else if (/[=:!]/.test(pattern[index + 1] ?? "")) index++;
|
|
83
|
-
}
|
|
84
|
-
continue;
|
|
85
|
-
}
|
|
86
|
-
if (character === ")") {
|
|
87
|
-
const groupStart = groupStarts.pop();
|
|
88
|
-
repeatedAtDepth[depth] = [];
|
|
89
|
-
depth = Math.max(0, depth - 1);
|
|
90
|
-
if (groupStart !== void 0) {
|
|
91
|
-
const modifier = pattern[index + 1];
|
|
92
|
-
if (!(modifier === "*" || modifier === "?" || modifier === "{" && /^\{0(?:,\d*)?\}/.test(pattern.slice(index + 1))) && !groupCanMatchEmpty(pattern.slice(groupStart + 1, index))) repeatedAtDepth[depth] = [];
|
|
93
|
-
}
|
|
94
|
-
continue;
|
|
95
|
-
}
|
|
96
|
-
if (character === "|") {
|
|
97
|
-
repeatedAtDepth[depth] = [];
|
|
98
|
-
continue;
|
|
99
|
-
}
|
|
100
|
-
if (character === "^" || character === "$") continue;
|
|
101
|
-
if (character === "*" || character === "+" || character === "?" || character === "{") continue;
|
|
102
|
-
let atom = character;
|
|
103
|
-
if (character === "\\") {
|
|
104
|
-
if (index + 1 >= pattern.length) return true;
|
|
105
|
-
atom += pattern[++index];
|
|
106
|
-
} else if (character === "[") {
|
|
107
|
-
let classEnd = index + 1;
|
|
108
|
-
if (pattern[classEnd] === "^") classEnd++;
|
|
109
|
-
while (classEnd < pattern.length && pattern[classEnd] !== "]") {
|
|
110
|
-
if (pattern[classEnd] === "\\") classEnd++;
|
|
111
|
-
classEnd++;
|
|
112
|
-
}
|
|
113
|
-
if (classEnd >= pattern.length) return true;
|
|
114
|
-
atom = pattern.slice(index, classEnd + 1);
|
|
115
|
-
index = classEnd;
|
|
116
|
-
} else if (character === ".") atom = ".";
|
|
117
|
-
const quantifierStart = index + 1;
|
|
118
|
-
const quantifier = pattern[quantifierStart];
|
|
119
|
-
let unbounded = quantifier === "*" || quantifier === "+";
|
|
120
|
-
let canBeEmpty = quantifier === "*";
|
|
121
|
-
let quantifierEnd = quantifierStart;
|
|
122
|
-
if (quantifier === "{") {
|
|
123
|
-
const match = /^\{(\d+),\}/.exec(pattern.slice(quantifierStart));
|
|
124
|
-
if (match) {
|
|
125
|
-
unbounded = true;
|
|
126
|
-
canBeEmpty = Number(match[1]) === 0;
|
|
127
|
-
quantifierEnd += match[0].length - 1;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
if (!unbounded) {
|
|
131
|
-
if (quantifier !== "?") repeatedAtDepth[depth] = [];
|
|
132
|
-
if (quantifier === "?") index = quantifierStart;
|
|
133
|
-
continue;
|
|
134
|
-
}
|
|
135
|
-
if (repeatedAtDepth[depth].some((previous) => atomsOverlap(previous, atom))) return true;
|
|
136
|
-
repeatedAtDepth[depth] = canBeEmpty ? [...repeatedAtDepth[depth], atom] : [atom];
|
|
137
|
-
index = quantifierEnd;
|
|
138
|
-
}
|
|
139
|
-
return false;
|
|
140
|
-
}
|
|
141
|
-
function unsafeTokenReason(token, namedGroups) {
|
|
142
|
-
const regexSafetyIssue = analyzeRegexSafety(token.pattern, {
|
|
143
|
-
ignoreCase: true,
|
|
144
|
-
namedGroups
|
|
145
|
-
});
|
|
146
|
-
if (regexSafetyIssue) {
|
|
147
|
-
if (regexSafetyIssue === "analysis budget exceeded") return `parameter "${token.name}" exceeds the regex analysis budget`;
|
|
148
|
-
return `parameter "${token.name}" contains ${regexSafetyIssue}`;
|
|
149
|
-
}
|
|
150
|
-
if (hasOverlappingSequentialRepetition(token.pattern)) return `parameter "${token.name}" contains overlapping sequential repetition`;
|
|
151
|
-
if (token.modifier !== "*" && token.modifier !== "+") return null;
|
|
152
|
-
if (patternMatches(token.pattern, "") || patternMatches(token.pattern, "/")) return `repeated parameter "${token.name}" may match an empty value or path delimiter`;
|
|
153
|
-
return null;
|
|
154
|
-
}
|
|
155
|
-
function validateTokens(tokens) {
|
|
156
|
-
const namedGroups = tokens.some((token) => typeof token !== "string" && mayHaveNamedGroups(token.pattern));
|
|
157
|
-
for (const token of tokens) {
|
|
158
|
-
if (typeof token === "string") continue;
|
|
159
|
-
const reason = unsafeTokenReason(token, namedGroups);
|
|
160
|
-
if (reason) return reason;
|
|
161
|
-
}
|
|
162
|
-
return null;
|
|
54
|
+
function middlewareRegExp(tokens) {
|
|
55
|
+
return new RegExp(`${pathTokensToRegExpSource(tokens)}[\\/#\\?]?$`);
|
|
163
56
|
}
|
|
164
57
|
function compileMiddlewareMatcherPattern(source) {
|
|
165
|
-
if (!source.startsWith("/")) return {
|
|
166
|
-
|
|
167
|
-
error: "source must start with /"
|
|
168
|
-
};
|
|
169
|
-
if (source.length > 4096) return {
|
|
170
|
-
kind: "invalid",
|
|
171
|
-
error: "source exceeds max built length of 4096"
|
|
172
|
-
};
|
|
58
|
+
if (!source.startsWith("/")) return { error: "source must start with /" };
|
|
59
|
+
if (source.length > 4096) return { error: "source exceeds max built length of 4096" };
|
|
173
60
|
let tokens;
|
|
174
61
|
try {
|
|
175
|
-
tokens =
|
|
62
|
+
tokens = parsePathPattern(source);
|
|
176
63
|
} catch (error) {
|
|
177
|
-
return {
|
|
178
|
-
kind: "invalid",
|
|
179
|
-
error: error instanceof Error ? error.message : "matcher could not be parsed"
|
|
180
|
-
};
|
|
64
|
+
return { error: error instanceof Error ? error.message : "matcher could not be parsed" };
|
|
181
65
|
}
|
|
182
|
-
const unsafeReason = validateTokens(tokens);
|
|
183
|
-
if (unsafeReason) return {
|
|
184
|
-
kind: "unsafe",
|
|
185
|
-
error: unsafeReason
|
|
186
|
-
};
|
|
187
66
|
try {
|
|
188
|
-
return { regexp:
|
|
67
|
+
return { regexp: middlewareRegExp(tokens) };
|
|
189
68
|
} catch {
|
|
190
|
-
const normalizedTokens =
|
|
191
|
-
const normalizedUnsafeReason = validateTokens(normalizedTokens);
|
|
192
|
-
if (normalizedUnsafeReason) return {
|
|
193
|
-
kind: "unsafe",
|
|
194
|
-
error: normalizedUnsafeReason
|
|
195
|
-
};
|
|
69
|
+
const normalizedTokens = normalizePathTokens(tokens);
|
|
196
70
|
try {
|
|
197
|
-
return { regexp:
|
|
71
|
+
return { regexp: middlewareRegExp(normalizedTokens) };
|
|
198
72
|
} catch (error) {
|
|
199
|
-
return {
|
|
200
|
-
kind: "invalid",
|
|
201
|
-
error: error instanceof Error ? error.message : "matcher could not be compiled"
|
|
202
|
-
};
|
|
73
|
+
return { error: error instanceof Error ? error.message : "matcher could not be compiled" };
|
|
203
74
|
}
|
|
204
75
|
}
|
|
205
76
|
}
|
|
@@ -8,7 +8,7 @@ const EMPTY_MIDDLEWARE_REQUEST_CONTEXT = {
|
|
|
8
8
|
query: new URLSearchParams(),
|
|
9
9
|
host: ""
|
|
10
10
|
};
|
|
11
|
-
const
|
|
11
|
+
const INVALID_MATCHER_PATTERN = Symbol("invalid matcher pattern");
|
|
12
12
|
const _mwPatternCache = /* @__PURE__ */ new Map();
|
|
13
13
|
function matchesMiddleware(pathname, matcher, request, i18nConfig, localeContext) {
|
|
14
14
|
if (!matcher) return true;
|
|
@@ -63,7 +63,7 @@ function matchObjectMatcher(pathname, matcher, i18nConfig, localeContext) {
|
|
|
63
63
|
return matchPattern(localeContext?.kind === "defaulted" ? `/${localeContext.defaultLocale}${pathname === "/" ? "" : pathname}` : pathname, matcher.source);
|
|
64
64
|
}
|
|
65
65
|
function matchNextDataPattern(pathname, source, i18nConfig, localized) {
|
|
66
|
-
if (compiledPattern(source) ===
|
|
66
|
+
if (compiledPattern(source) === INVALID_MATCHER_PATTERN) return true;
|
|
67
67
|
return matchPattern(pathname, nextDataMatcherSource(source, i18nConfig, localized));
|
|
68
68
|
}
|
|
69
69
|
/**
|
|
@@ -89,7 +89,7 @@ function stripFirstPathSegment(pathname) {
|
|
|
89
89
|
function matchPattern(pathname, pattern) {
|
|
90
90
|
if (pattern === "/" && (pathname === "//" || pathname === "/?" || pathname === "/#")) return false;
|
|
91
91
|
const compiled = compiledPattern(pattern);
|
|
92
|
-
if (compiled ===
|
|
92
|
+
if (compiled === INVALID_MATCHER_PATTERN) return true;
|
|
93
93
|
return compiled.test(pathname);
|
|
94
94
|
}
|
|
95
95
|
function compiledPattern(pattern) {
|
|
@@ -103,9 +103,8 @@ function compiledPattern(pattern) {
|
|
|
103
103
|
function compileMatcherPattern(pattern) {
|
|
104
104
|
const result = compileMiddlewareMatcherPattern(pattern);
|
|
105
105
|
if (result.regexp) return result.regexp;
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
return UNSAFE_MATCHER_PATTERN;
|
|
106
|
+
console.warn(`[vinext] Rejecting invalid middleware matcher: ${pattern}\n ${result.error}.\n Middleware will run for all paths to avoid bypassing request guards.`);
|
|
107
|
+
return INVALID_MATCHER_PATTERN;
|
|
109
108
|
}
|
|
110
109
|
//#endregion
|
|
111
110
|
export { matchPattern, matchesMiddleware, matchesMiddlewarePathname };
|
|
@@ -8,4 +8,35 @@ export declare function mergeVaryHeader(target: Headers, value: string): void;
|
|
|
8
8
|
* response headers like Cache-Control.
|
|
9
9
|
*/
|
|
10
10
|
export declare function mergeMiddlewareResponseHeaders(target: Headers, middlewareHeaders: Headers | null): void;
|
|
11
|
+
export type MiddlewareResponseMergeOptions = {
|
|
12
|
+
/**
|
|
13
|
+
* Keep the response's WWW-Authenticate and Proxy-Authenticate after
|
|
14
|
+
* middleware's, as Next.js does for App route handlers. Pages API handlers
|
|
15
|
+
* write to the Node response that already holds middleware's headers, so
|
|
16
|
+
* their callers opt out.
|
|
17
|
+
*/
|
|
18
|
+
appendResponseChallenges?: boolean;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Merge middleware response headers onto an already-built response's headers.
|
|
22
|
+
*
|
|
23
|
+
* Next.js writes middleware response headers before the handler runs and then
|
|
24
|
+
* appends the handler response's Set-Cookie, WWW-Authenticate and
|
|
25
|
+
* Proxy-Authenticate values, so middleware values come first and the
|
|
26
|
+
* response's own are kept. A handler's cookie for the same name (a logout
|
|
27
|
+
* deletion or session rotation) is then the one the browser applies last.
|
|
28
|
+
*/
|
|
29
|
+
export declare function mergeMiddlewareResponseHeadersOntoResponse(target: Headers, middlewareHeaders: Headers | null, options?: MiddlewareResponseMergeOptions): void;
|
|
30
|
+
/**
|
|
31
|
+
* Build the response for an external rewrite from the headers routing staged
|
|
32
|
+
* before proxying.
|
|
33
|
+
*
|
|
34
|
+
* Next.js writes the staged config and middleware headers to its outgoing
|
|
35
|
+
* response and then proxies, and the proxy sets each upstream header over
|
|
36
|
+
* them. Its Set-Cookie patch keeps middleware's cookies ahead of the
|
|
37
|
+
* upstream's, so an upstream cookie replaces a staged config cookie while
|
|
38
|
+
* middleware's are kept. Without an upstream Set-Cookie the staged cookies
|
|
39
|
+
* stay as they are.
|
|
40
|
+
*/
|
|
41
|
+
export declare function withExternalRewriteResponseHeaders(upstream: Response, staged: Headers, middlewareCookies: readonly string[]): Response;
|
|
11
42
|
//#endregion
|