@obsfx/trekker 0.1.7 → 0.1.9
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/dist/index.js +216 -154
- package/package.json +1 -1
- package/webapp-dist/.next/BUILD_ID +1 -1
- package/webapp-dist/.next/build-manifest.json +2 -2
- package/webapp-dist/.next/prerender-manifest.json +3 -3
- package/webapp-dist/.next/server/app/_global-error.html +2 -2
- package/webapp-dist/.next/server/app/_global-error.rsc +1 -1
- package/webapp-dist/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/webapp-dist/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/webapp-dist/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/webapp-dist/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/webapp-dist/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/webapp-dist/.next/server/app/_not-found.html +2 -2
- package/webapp-dist/.next/server/app/_not-found.rsc +1 -1
- package/webapp-dist/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/webapp-dist/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/webapp-dist/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/webapp-dist/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/webapp-dist/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/webapp-dist/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/webapp-dist/.next/server/app/index.html +2 -2
- package/webapp-dist/.next/server/app/index.rsc +1 -1
- package/webapp-dist/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/webapp-dist/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/webapp-dist/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/webapp-dist/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/webapp-dist/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/webapp-dist/.next/server/pages/404.html +2 -2
- package/webapp-dist/.next/server/pages/500.html +2 -2
- package/webapp-dist/.next/server/server-reference-manifest.js +1 -1
- package/webapp-dist/.next/server/server-reference-manifest.json +1 -1
- package/webapp-dist/vendor/@img/colour/color.cjs +1594 -0
- package/webapp-dist/vendor/@img/colour/index.cjs +1 -0
- package/webapp-dist/vendor/@img/colour/package.json +45 -0
- package/webapp-dist/vendor/@img/sharp-darwin-arm64/lib/sharp-darwin-arm64.node +0 -0
- package/webapp-dist/vendor/@img/sharp-darwin-arm64/package.json +40 -0
- package/webapp-dist/vendor/@img/sharp-libvips-darwin-arm64/README.md +46 -0
- package/webapp-dist/vendor/@img/sharp-libvips-darwin-arm64/lib/glib-2.0/include/glibconfig.h +220 -0
- package/webapp-dist/vendor/@img/sharp-libvips-darwin-arm64/lib/index.js +1 -0
- package/webapp-dist/vendor/@img/sharp-libvips-darwin-arm64/lib/libvips-cpp.8.17.3.dylib +0 -0
- package/webapp-dist/vendor/@img/sharp-libvips-darwin-arm64/package.json +36 -0
- package/webapp-dist/vendor/@img/sharp-libvips-darwin-arm64/versions.json +30 -0
- package/webapp-dist/vendor/@swc/helpers/cjs/_interop_require_default.cjs +6 -0
- package/webapp-dist/vendor/@swc/helpers/cjs/_interop_require_wildcard.cjs +38 -0
- package/webapp-dist/vendor/@swc/helpers/package.json +471 -0
- package/webapp-dist/vendor/next/dist/build/adapter/build-complete.js +993 -0
- package/webapp-dist/vendor/next/dist/build/after-production-compile.js +95 -0
- package/webapp-dist/vendor/next/dist/build/analysis/extract-const-value.js +205 -0
- package/webapp-dist/vendor/next/dist/build/analysis/get-page-static-info.js +601 -0
- package/webapp-dist/vendor/next/dist/build/analysis/parse-module.js +20 -0
- package/webapp-dist/vendor/next/dist/build/analyze/index.js +242 -0
- package/webapp-dist/vendor/next/dist/build/babel/loader/get-config.js +429 -0
- package/webapp-dist/vendor/next/dist/build/babel/loader/index.js +56 -0
- package/webapp-dist/vendor/next/dist/build/babel/loader/transform.js +103 -0
- package/webapp-dist/vendor/next/dist/build/babel/loader/util.js +20 -0
- package/webapp-dist/vendor/next/dist/build/babel/plugins/commonjs.js +42 -0
- package/webapp-dist/vendor/next/dist/build/babel/plugins/jsx-pragma.js +74 -0
- package/webapp-dist/vendor/next/dist/build/babel/plugins/next-font-unsupported.js +36 -0
- package/webapp-dist/vendor/next/dist/build/babel/plugins/next-page-config.js +104 -0
- package/webapp-dist/vendor/next/dist/build/babel/plugins/next-page-disallow-re-export-all-exports.js +29 -0
- package/webapp-dist/vendor/next/dist/build/babel/plugins/next-ssg-transform.js +345 -0
- package/webapp-dist/vendor/next/dist/build/babel/plugins/optimize-hook-destructuring.js +60 -0
- package/webapp-dist/vendor/next/dist/build/babel/plugins/react-loadable-plugin.js +145 -0
- package/webapp-dist/vendor/next/dist/build/babel/preset.js +250 -0
- package/webapp-dist/vendor/next/dist/build/build-context.js +58 -0
- package/webapp-dist/vendor/next/dist/build/collect-build-traces.js +536 -0
- package/webapp-dist/vendor/next/dist/build/compiler.js +88 -0
- package/webapp-dist/vendor/next/dist/build/create-compiler-aliases.js +436 -0
- package/webapp-dist/vendor/next/dist/build/define-env.js +237 -0
- package/webapp-dist/vendor/next/dist/build/duration-to-string.js +99 -0
- package/webapp-dist/vendor/next/dist/build/entries.js +798 -0
- package/webapp-dist/vendor/next/dist/build/generate-build-id.js +31 -0
- package/webapp-dist/vendor/next/dist/build/generate-routes-manifest.js +91 -0
- package/webapp-dist/vendor/next/dist/build/get-babel-config-file.js +35 -0
- package/webapp-dist/vendor/next/dist/build/get-babel-loader-config.js +109 -0
- package/webapp-dist/vendor/next/dist/build/get-static-info-including-layouts.js +81 -0
- package/webapp-dist/vendor/next/dist/build/handle-entrypoints.js +176 -0
- package/webapp-dist/vendor/next/dist/build/handle-externals.js +290 -0
- package/webapp-dist/vendor/next/dist/build/index.js +2683 -0
- package/webapp-dist/vendor/next/dist/build/is-writeable.js +26 -0
- package/webapp-dist/vendor/next/dist/build/jest/__mocks__/empty.js +10 -0
- package/webapp-dist/vendor/next/dist/build/jest/__mocks__/fileMock.js +15 -0
- package/webapp-dist/vendor/next/dist/build/jest/__mocks__/nextFontMock.js +20 -0
- package/webapp-dist/vendor/next/dist/build/jest/__mocks__/styleMock.js +10 -0
- package/webapp-dist/vendor/next/dist/build/jest/jest.js +227 -0
- package/webapp-dist/vendor/next/dist/build/jest/object-proxy.js +50 -0
- package/webapp-dist/vendor/next/dist/build/load-entrypoint.js +30 -0
- package/webapp-dist/vendor/next/dist/build/load-jsconfig.js +162 -0
- package/webapp-dist/vendor/next/dist/build/lockfile.js +160 -0
- package/webapp-dist/vendor/next/dist/build/manifests/formatter/format-manifest.js +19 -0
- package/webapp-dist/vendor/next/dist/build/next-config-ts/require-hook.js +85 -0
- package/webapp-dist/vendor/next/dist/build/next-config-ts/transpile-config.js +172 -0
- package/webapp-dist/vendor/next/dist/build/next-dir-paths.js +37 -0
- package/webapp-dist/vendor/next/dist/build/normalize-catchall-routes.js +76 -0
- package/webapp-dist/vendor/next/dist/build/output/format.js +84 -0
- package/webapp-dist/vendor/next/dist/build/output/index.js +186 -0
- package/webapp-dist/vendor/next/dist/build/output/log.js +135 -0
- package/webapp-dist/vendor/next/dist/build/output/store.js +204 -0
- package/webapp-dist/vendor/next/dist/build/page-extensions-type.js +6 -0
- package/webapp-dist/vendor/next/dist/build/polyfills/fetch/index.js +6 -0
- package/webapp-dist/vendor/next/dist/build/polyfills/fetch/whatwg-fetch.js +7 -0
- package/webapp-dist/vendor/next/dist/build/polyfills/object-assign.js +6 -0
- package/webapp-dist/vendor/next/dist/build/polyfills/object.assign/auto.js +4 -0
- package/webapp-dist/vendor/next/dist/build/polyfills/object.assign/implementation.js +4 -0
- package/webapp-dist/vendor/next/dist/build/polyfills/object.assign/index.js +19 -0
- package/webapp-dist/vendor/next/dist/build/polyfills/object.assign/polyfill.js +6 -0
- package/webapp-dist/vendor/next/dist/build/polyfills/object.assign/shim.js +6 -0
- package/webapp-dist/vendor/next/dist/build/polyfills/polyfill-module.js +1 -0
- package/webapp-dist/vendor/next/dist/build/polyfills/polyfill-nomodule.js +1 -0
- package/webapp-dist/vendor/next/dist/build/polyfills/process.js +5 -0
- package/webapp-dist/vendor/next/dist/build/preview-key-utils.js +91 -0
- package/webapp-dist/vendor/next/dist/build/progress.js +151 -0
- package/webapp-dist/vendor/next/dist/build/rendering-mode.js +26 -0
- package/webapp-dist/vendor/next/dist/build/segment-config/app/app-segment-config.js +145 -0
- package/webapp-dist/vendor/next/dist/build/segment-config/app/app-segments.js +137 -0
- package/webapp-dist/vendor/next/dist/build/segment-config/app/collect-root-param-keys.js +52 -0
- package/webapp-dist/vendor/next/dist/build/segment-config/middleware/middleware-config.js +121 -0
- package/webapp-dist/vendor/next/dist/build/segment-config/pages/pages-segment-config.js +62 -0
- package/webapp-dist/vendor/next/dist/build/sort-by-page-exts.js +30 -0
- package/webapp-dist/vendor/next/dist/build/spinner.js +138 -0
- package/webapp-dist/vendor/next/dist/build/static-paths/app/extract-pathname-route-param-segments-from-loader-tree.js +137 -0
- package/webapp-dist/vendor/next/dist/build/static-paths/app.js +682 -0
- package/webapp-dist/vendor/next/dist/build/static-paths/pages.js +169 -0
- package/webapp-dist/vendor/next/dist/build/static-paths/types.js +6 -0
- package/webapp-dist/vendor/next/dist/build/static-paths/utils.js +119 -0
- package/webapp-dist/vendor/next/dist/build/swc/helpers.js +15 -0
- package/webapp-dist/vendor/next/dist/build/swc/index.js +1271 -0
- package/webapp-dist/vendor/next/dist/build/swc/install-bindings.js +30 -0
- package/webapp-dist/vendor/next/dist/build/swc/jest-transformer.js +75 -0
- package/webapp-dist/vendor/next/dist/build/swc/options.js +386 -0
- package/webapp-dist/vendor/next/dist/build/swc/types.js +6 -0
- package/webapp-dist/vendor/next/dist/build/templates/app-page.js +1071 -0
- package/webapp-dist/vendor/next/dist/build/templates/app-route.js +420 -0
- package/webapp-dist/vendor/next/dist/build/templates/edge-app-route.js +85 -0
- package/webapp-dist/vendor/next/dist/build/templates/edge-ssr-app.js +309 -0
- package/webapp-dist/vendor/next/dist/build/templates/edge-ssr.js +335 -0
- package/webapp-dist/vendor/next/dist/build/templates/edge-wrapper.js +24 -0
- package/webapp-dist/vendor/next/dist/build/templates/helpers.js +36 -0
- package/webapp-dist/vendor/next/dist/build/templates/middleware.js +115 -0
- package/webapp-dist/vendor/next/dist/build/templates/pages-api.js +194 -0
- package/webapp-dist/vendor/next/dist/build/templates/pages-edge-api.js +39 -0
- package/webapp-dist/vendor/next/dist/build/templates/pages.js +155 -0
- package/webapp-dist/vendor/next/dist/build/turbopack-analyze/index.js +116 -0
- package/webapp-dist/vendor/next/dist/build/turbopack-build/impl.js +244 -0
- package/webapp-dist/vendor/next/dist/build/turbopack-build/index.js +85 -0
- package/webapp-dist/vendor/next/dist/build/turborepo-access-trace/env.js +29 -0
- package/webapp-dist/vendor/next/dist/build/turborepo-access-trace/helpers.js +104 -0
- package/webapp-dist/vendor/next/dist/build/turborepo-access-trace/index.js +30 -0
- package/webapp-dist/vendor/next/dist/build/turborepo-access-trace/result.js +51 -0
- package/webapp-dist/vendor/next/dist/build/turborepo-access-trace/tcp.js +41 -0
- package/webapp-dist/vendor/next/dist/build/turborepo-access-trace/types.js +8 -0
- package/webapp-dist/vendor/next/dist/build/type-check.js +151 -0
- package/webapp-dist/vendor/next/dist/build/utils.js +1261 -0
- package/webapp-dist/vendor/next/dist/build/validate-app-paths.js +242 -0
- package/webapp-dist/vendor/next/dist/build/webpack/alias/react-dom-server-experimental.js +32 -0
- package/webapp-dist/vendor/next/dist/build/webpack/alias/react-dom-server.js +32 -0
- package/webapp-dist/vendor/next/dist/build/webpack/cache-invalidation.js +91 -0
- package/webapp-dist/vendor/next/dist/build/webpack/config/blocks/base.js +82 -0
- package/webapp-dist/vendor/next/dist/build/webpack/config/blocks/css/index.js +562 -0
- package/webapp-dist/vendor/next/dist/build/webpack/config/blocks/css/loaders/client.js +49 -0
- package/webapp-dist/vendor/next/dist/build/webpack/config/blocks/css/loaders/file-resolve.js +21 -0
- package/webapp-dist/vendor/next/dist/build/webpack/config/blocks/css/loaders/getCssModuleLocalIdent.js +37 -0
- package/webapp-dist/vendor/next/dist/build/webpack/config/blocks/css/loaders/global.js +65 -0
- package/webapp-dist/vendor/next/dist/build/webpack/config/blocks/css/loaders/index.js +22 -0
- package/webapp-dist/vendor/next/dist/build/webpack/config/blocks/css/loaders/modules.js +86 -0
- package/webapp-dist/vendor/next/dist/build/webpack/config/blocks/css/loaders/next-font.js +62 -0
- package/webapp-dist/vendor/next/dist/build/webpack/config/blocks/css/messages.js +45 -0
- package/webapp-dist/vendor/next/dist/build/webpack/config/blocks/css/plugins.js +190 -0
- package/webapp-dist/vendor/next/dist/build/webpack/config/blocks/images/index.js +42 -0
- package/webapp-dist/vendor/next/dist/build/webpack/config/blocks/images/messages.js +16 -0
- package/webapp-dist/vendor/next/dist/build/webpack/config/helpers.js +78 -0
- package/webapp-dist/vendor/next/dist/build/webpack/config/index.js +46 -0
- package/webapp-dist/vendor/next/dist/build/webpack/config/utils.js +13 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/css-loader/src/CssSyntaxError.js +32 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/css-loader/src/camelcase.js +93 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/css-loader/src/index.js +287 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/css-loader/src/plugins/index.js +36 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/css-loader/src/plugins/postcss-icss-parser.js +105 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/css-loader/src/plugins/postcss-import-parser.js +220 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/css-loader/src/plugins/postcss-url-parser.js +307 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/css-loader/src/runtime/api.js +83 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/css-loader/src/runtime/getUrl.js +23 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/css-loader/src/utils.js +459 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/devtool/devtool-style-inject.js +129 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/empty-loader.js +14 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/error-loader.js +36 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/get-module-build-info.js +15 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/lightningcss-loader/src/codegen.js +156 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/lightningcss-loader/src/index.js +27 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/lightningcss-loader/src/interface.js +17 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/lightningcss-loader/src/loader.js +429 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/lightningcss-loader/src/minify.js +94 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/lightningcss-loader/src/utils.js +58 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/metadata/discover.js +122 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/metadata/resolve-route-data.js +171 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/metadata/types.js +7 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/modularize-import-loader.js +39 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/next-app-loader/create-app-route-code.js +65 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/next-app-loader/index.js +765 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/next-barrel-loader.js +268 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/next-client-pages-loader.js +37 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/next-edge-app-route-loader/index.js +51 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/next-edge-function-loader.js +52 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/next-edge-ssr-loader/index.js +93 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/next-error-browser-binary-loader.js +21 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/next-flight-action-entry-loader.js +32 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js +45 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/next-flight-client-module-loader.js +49 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/next-flight-css-loader.js +56 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/next-flight-loader/action-client-wrapper.js +33 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/next-flight-loader/action-validate.js +27 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/next-flight-loader/cache-wrapper.js +13 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/next-flight-loader/index.js +211 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/next-flight-loader/module-proxy.js +14 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/next-flight-loader/server-reference.js +13 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/next-flight-loader/track-dynamic-import.js +13 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/next-flight-server-reference-proxy-loader.js +29 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/next-font-loader/index.js +133 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/next-font-loader/postcss-next-font.js +169 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/next-image-loader/blur.js +73 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/next-image-loader/index.js +80 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/next-invalid-import-error-loader.js +28 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/next-metadata-image-loader.js +158 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/next-metadata-route-loader.js +342 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/next-middleware-asset-loader.js +46 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/next-middleware-loader.js +59 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/next-middleware-wasm-loader.js +46 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/next-root-params-loader.js +164 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/next-route-loader/index.js +141 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/next-style-loader/index.js +220 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/next-style-loader/runtime/injectStylesIntoLinkTag.js +61 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/next-style-loader/runtime/injectStylesIntoStyleTag.js +221 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/next-style-loader/runtime/isEqualLocals.js +27 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/next-swc-loader.js +241 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/postcss-loader/src/Error.js +40 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/postcss-loader/src/Warning.js +35 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/postcss-loader/src/index.js +125 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/postcss-loader/src/utils.js +86 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/resolve-url-loader/index.js +101 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/resolve-url-loader/lib/file-protocol.js +78 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/resolve-url-loader/lib/join-function.js +190 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/resolve-url-loader/lib/postcss.js +92 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/resolve-url-loader/lib/value-processor.js +97 -0
- package/webapp-dist/vendor/next/dist/build/webpack/loaders/utils.js +100 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/build-manifest-plugin-utils.js +79 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/build-manifest-plugin.js +183 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/copy-file-plugin.js +67 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/css-chunking-plugin.js +277 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/css-minimizer-plugin.js +92 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/devtools-ignore-list-plugin.js +78 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/eval-source-map-dev-tool-plugin.js +191 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/flight-client-entry-plugin.js +793 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/flight-manifest-plugin.js +420 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/force-complete-runtime.js +42 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/jsconfig-paths-plugin.js +219 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/memory-with-gc-cache-plugin.js +114 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/middleware-plugin.js +614 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/mini-css-extract-plugin.js +24 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/minify-webpack-plugin/src/index.js +188 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/next-font-manifest-plugin.js +120 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/next-trace-entrypoints-plugin.js +542 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/next-types-plugin/index.js +428 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/next-types-plugin/shared.js +14 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/nextjs-require-cache-hot-reloader.js +57 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/optional-peer-dependency-resolve-plugin.js +45 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/pages-manifest-plugin.js +146 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/profiling-plugin.js +282 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/react-loadable-plugin.js +169 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/rspack-flight-client-entry-plugin.js +97 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/rspack-profiling-plugin.js +62 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/slow-module-detection-plugin.js +190 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/subresource-integrity-plugin.js +62 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/telemetry-plugin/telemetry-plugin.js +188 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/telemetry-plugin/update-telemetry-loader-context-from-swc.js +28 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/telemetry-plugin/use-cache-tracker-utils.js +43 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/wellknown-errors-plugin/getModuleTrace.js +89 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/wellknown-errors-plugin/index.js +43 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/wellknown-errors-plugin/parse-dynamic-code-evaluation-error.js +19 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/wellknown-errors-plugin/parseBabel.js +29 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/wellknown-errors-plugin/parseCss.js +29 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/wellknown-errors-plugin/parseNextAppLoaderError.js +26 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/wellknown-errors-plugin/parseNextFontError.js +33 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/wellknown-errors-plugin/parseNextInvalidImportError.js +26 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/wellknown-errors-plugin/parseNotFoundError.js +166 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/wellknown-errors-plugin/parseScss.js +42 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/wellknown-errors-plugin/simpleWebpackError.js +18 -0
- package/webapp-dist/vendor/next/dist/build/webpack/plugins/wellknown-errors-plugin/webpackModuleError.js +138 -0
- package/webapp-dist/vendor/next/dist/build/webpack/stringify-request.js +15 -0
- package/webapp-dist/vendor/next/dist/build/webpack/utils.js +109 -0
- package/webapp-dist/vendor/next/dist/build/webpack-build/impl.js +381 -0
- package/webapp-dist/vendor/next/dist/build/webpack-build/index.js +179 -0
- package/webapp-dist/vendor/next/dist/build/webpack-config-rules/resolve.js +55 -0
- package/webapp-dist/vendor/next/dist/build/webpack-config.js +2343 -0
- package/webapp-dist/vendor/next/dist/build/worker.js +35 -0
- package/webapp-dist/vendor/next/dist/build/write-build-id.js +19 -0
- package/webapp-dist/vendor/next/dist/cli/next-test.js +169 -0
- package/webapp-dist/vendor/next/dist/client/add-base-path.js +24 -0
- package/webapp-dist/vendor/next/dist/client/app-build-id.js +49 -0
- package/webapp-dist/vendor/next/dist/client/app-call-server.js +34 -0
- package/webapp-dist/vendor/next/dist/client/app-find-source-map-url.js +38 -0
- package/webapp-dist/vendor/next/dist/client/assign-location.js +29 -0
- package/webapp-dist/vendor/next/dist/client/components/app-router-announcer.js +78 -0
- package/webapp-dist/vendor/next/dist/client/components/app-router-headers.js +128 -0
- package/webapp-dist/vendor/next/dist/client/components/app-router-instance.js +319 -0
- package/webapp-dist/vendor/next/dist/client/components/app-router-utils.js +62 -0
- package/webapp-dist/vendor/next/dist/client/components/app-router.js +495 -0
- package/webapp-dist/vendor/next/dist/client/components/builtin/default.js +35 -0
- package/webapp-dist/vendor/next/dist/client/components/builtin/global-error.js +82 -0
- package/webapp-dist/vendor/next/dist/client/components/dev-root-http-access-fallback-boundary.js +52 -0
- package/webapp-dist/vendor/next/dist/client/components/error-boundary.js +134 -0
- package/webapp-dist/vendor/next/dist/client/components/errors/graceful-degrade-boundary.js +86 -0
- package/webapp-dist/vendor/next/dist/client/components/errors/root-error-boundary.js +41 -0
- package/webapp-dist/vendor/next/dist/client/components/forbidden.js +48 -0
- package/webapp-dist/vendor/next/dist/client/components/handle-isr-error.js +31 -0
- package/webapp-dist/vendor/next/dist/client/components/hooks-server-context.js +42 -0
- package/webapp-dist/vendor/next/dist/client/components/http-access-fallback/error-boundary.js +125 -0
- package/webapp-dist/vendor/next/dist/client/components/http-access-fallback/http-access-fallback.js +72 -0
- package/webapp-dist/vendor/next/dist/client/components/is-next-router-error.js +23 -0
- package/webapp-dist/vendor/next/dist/client/components/links.js +292 -0
- package/webapp-dist/vendor/next/dist/client/components/match-segments.js +32 -0
- package/webapp-dist/vendor/next/dist/client/components/nav-failure-handler.js +61 -0
- package/webapp-dist/vendor/next/dist/client/components/navigation-devtools.js +126 -0
- package/webapp-dist/vendor/next/dist/client/components/navigation-untracked.js +65 -0
- package/webapp-dist/vendor/next/dist/client/components/navigation.js +198 -0
- package/webapp-dist/vendor/next/dist/client/components/navigation.react-server.js +72 -0
- package/webapp-dist/vendor/next/dist/client/components/not-found.js +42 -0
- package/webapp-dist/vendor/next/dist/client/components/readonly-url-search-params.js +41 -0
- package/webapp-dist/vendor/next/dist/client/components/redirect-boundary.js +107 -0
- package/webapp-dist/vendor/next/dist/client/components/redirect-error.js +52 -0
- package/webapp-dist/vendor/next/dist/client/components/redirect-status-code.js +24 -0
- package/webapp-dist/vendor/next/dist/client/components/redirect.js +91 -0
- package/webapp-dist/vendor/next/dist/client/components/router-reducer/compute-changed-path.js +128 -0
- package/webapp-dist/vendor/next/dist/client/components/router-reducer/create-href-from-url.js +21 -0
- package/webapp-dist/vendor/next/dist/client/components/router-reducer/create-initial-router-state.js +59 -0
- package/webapp-dist/vendor/next/dist/client/components/router-reducer/create-router-cache-key.js +32 -0
- package/webapp-dist/vendor/next/dist/client/components/router-reducer/fetch-server-response.js +340 -0
- package/webapp-dist/vendor/next/dist/client/components/router-reducer/handle-mutable.js +66 -0
- package/webapp-dist/vendor/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js +51 -0
- package/webapp-dist/vendor/next/dist/client/components/router-reducer/ppr-navigations.js +1129 -0
- package/webapp-dist/vendor/next/dist/client/components/router-reducer/reducers/find-head-in-cache.js +64 -0
- package/webapp-dist/vendor/next/dist/client/components/router-reducer/reducers/has-interception-route-in-current-tree.js +38 -0
- package/webapp-dist/vendor/next/dist/client/components/router-reducer/reducers/hmr-refresh-reducer.js +23 -0
- package/webapp-dist/vendor/next/dist/client/components/router-reducer/reducers/navigate-reducer.js +168 -0
- package/webapp-dist/vendor/next/dist/client/components/router-reducer/reducers/refresh-reducer.js +68 -0
- package/webapp-dist/vendor/next/dist/client/components/router-reducer/reducers/restore-reducer.js +78 -0
- package/webapp-dist/vendor/next/dist/client/components/router-reducer/reducers/server-action-reducer.js +292 -0
- package/webapp-dist/vendor/next/dist/client/components/router-reducer/reducers/server-patch-reducer.js +56 -0
- package/webapp-dist/vendor/next/dist/client/components/router-reducer/router-reducer-types.js +61 -0
- package/webapp-dist/vendor/next/dist/client/components/router-reducer/router-reducer.js +66 -0
- package/webapp-dist/vendor/next/dist/client/components/router-reducer/set-cache-busting-search-param.js +60 -0
- package/webapp-dist/vendor/next/dist/client/components/segment-cache/cache-key.js +28 -0
- package/webapp-dist/vendor/next/dist/client/components/segment-cache/cache-map.js +305 -0
- package/webapp-dist/vendor/next/dist/client/components/segment-cache/cache.js +1432 -0
- package/webapp-dist/vendor/next/dist/client/components/segment-cache/lru.js +145 -0
- package/webapp-dist/vendor/next/dist/client/components/segment-cache/navigation.js +459 -0
- package/webapp-dist/vendor/next/dist/client/components/segment-cache/prefetch.js +31 -0
- package/webapp-dist/vendor/next/dist/client/components/segment-cache/scheduler.js +1150 -0
- package/webapp-dist/vendor/next/dist/client/components/segment-cache/types.js +69 -0
- package/webapp-dist/vendor/next/dist/client/components/segment-cache/vary-path.js +216 -0
- package/webapp-dist/vendor/next/dist/client/components/static-generation-bailout.js +42 -0
- package/webapp-dist/vendor/next/dist/client/components/unauthorized.js +49 -0
- package/webapp-dist/vendor/next/dist/client/components/unrecognized-action-error.js +39 -0
- package/webapp-dist/vendor/next/dist/client/components/unresolved-thenable.js +23 -0
- package/webapp-dist/vendor/next/dist/client/components/unstable-rethrow.browser.js +28 -0
- package/webapp-dist/vendor/next/dist/client/components/unstable-rethrow.js +25 -0
- package/webapp-dist/vendor/next/dist/client/components/unstable-rethrow.server.js +32 -0
- package/webapp-dist/vendor/next/dist/client/components/use-action-queue.js +102 -0
- package/webapp-dist/vendor/next/dist/client/dev/debug-channel.js +72 -0
- package/webapp-dist/vendor/next/dist/client/flight-data-helpers.js +219 -0
- package/webapp-dist/vendor/next/dist/client/has-base-path.js +23 -0
- package/webapp-dist/vendor/next/dist/client/lib/console.js +177 -0
- package/webapp-dist/vendor/next/dist/client/normalize-trailing-slash.js +36 -0
- package/webapp-dist/vendor/next/dist/client/remove-base-path.js +32 -0
- package/webapp-dist/vendor/next/dist/client/route-params.js +230 -0
- package/webapp-dist/vendor/next/dist/compiled/@edge-runtime/cookies/index.js +339 -0
- package/webapp-dist/vendor/next/dist/compiled/@edge-runtime/cookies/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/@edge-runtime/ponyfill/index.js +46 -0
- package/webapp-dist/vendor/next/dist/compiled/@edge-runtime/ponyfill/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/@edge-runtime/primitives/abort-controller.js.text.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/@edge-runtime/primitives/console.js.text.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/@edge-runtime/primitives/events.js.text.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/@edge-runtime/primitives/index.js +5 -0
- package/webapp-dist/vendor/next/dist/compiled/@edge-runtime/primitives/load.js +18713 -0
- package/webapp-dist/vendor/next/dist/compiled/@edge-runtime/primitives/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/@edge-runtime/primitives/stream.js +44 -0
- package/webapp-dist/vendor/next/dist/compiled/@edge-runtime/primitives/timers.js.text.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/@edge-runtime/primitives/url.js.text.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/@hapi/accept/index.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/@hapi/accept/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/@mswjs/interceptors/ClientRequest/index.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/@mswjs/interceptors/ClientRequest/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/@napi-rs/triples/index.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/@napi-rs/triples/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/@opentelemetry/api/index.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/@opentelemetry/api/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/async-retry/index.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/async-retry/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/async-sema/index.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/async-sema/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/babel/code-frame.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/babel/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/babel-code-frame/index.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/babel-code-frame/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/busboy/index.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/busboy/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/bytes/index.js +8 -0
- package/webapp-dist/vendor/next/dist/compiled/bytes/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/ci-info/index.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/ci-info/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/commander/index.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/commander/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/comment-json/index.js +7 -0
- package/webapp-dist/vendor/next/dist/compiled/comment-json/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/compression/index.js +58 -0
- package/webapp-dist/vendor/next/dist/compiled/compression/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/conf/index.js +15 -0
- package/webapp-dist/vendor/next/dist/compiled/conf/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/content-disposition/index.js +6 -0
- package/webapp-dist/vendor/next/dist/compiled/content-disposition/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/cookie/index.js +7 -0
- package/webapp-dist/vendor/next/dist/compiled/cookie/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/cross-spawn/index.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/cross-spawn/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/debug/index.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/debug/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/edge-runtime/index.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/edge-runtime/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/find-up/index.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/find-up/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/fresh/index.js +8 -0
- package/webapp-dist/vendor/next/dist/compiled/fresh/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/http-proxy/index.js +34 -0
- package/webapp-dist/vendor/next/dist/compiled/http-proxy/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/image-detector/detector.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/image-size/index.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/image-size/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/ipaddr.js/ipaddr.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/ipaddr.js/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/is-animated/index.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/is-animated/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/is-docker/index.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/is-docker/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/is-wsl/index.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/is-wsl/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/jsonwebtoken/index.js +11 -0
- package/webapp-dist/vendor/next/dist/compiled/jsonwebtoken/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/nanoid/index.cjs +1 -0
- package/webapp-dist/vendor/next/dist/compiled/nanoid/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js +24 -0
- package/webapp-dist/vendor/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js +24 -0
- package/webapp-dist/vendor/next/dist/compiled/next-server/app-route-turbo.runtime.prod.js +6 -0
- package/webapp-dist/vendor/next/dist/compiled/next-server/pages-turbo.runtime.prod.js +20 -0
- package/webapp-dist/vendor/next/dist/compiled/p-limit/index.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/p-limit/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/p-queue/index.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/p-queue/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/path-browserify/index.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/path-browserify/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/path-to-regexp/index.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/path-to-regexp/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/picomatch/index.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/picomatch/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/react-is/cjs/react-is.development.js +133 -0
- package/webapp-dist/vendor/next/dist/compiled/react-is/cjs/react-is.production.js +130 -0
- package/webapp-dist/vendor/next/dist/compiled/react-is/index.js +7 -0
- package/webapp-dist/vendor/next/dist/compiled/react-is/package.json +26 -0
- package/webapp-dist/vendor/next/dist/compiled/regenerator-runtime/package.json +19 -0
- package/webapp-dist/vendor/next/dist/compiled/regenerator-runtime/runtime.js +729 -0
- package/webapp-dist/vendor/next/dist/compiled/semver/index.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/semver/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/send/index.js +70 -0
- package/webapp-dist/vendor/next/dist/compiled/send/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/source-map/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/source-map/source-map.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/stacktrace-parser/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/string-hash/index.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/string-hash/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/strip-ansi/index.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/strip-ansi/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/superstruct/index.cjs +1 -0
- package/webapp-dist/vendor/next/dist/compiled/superstruct/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/tar/index.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/tar/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/text-table/index.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/text-table/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/watchpack/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/watchpack/watchpack.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/ws/index.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/ws/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/zod/index.cjs +1 -0
- package/webapp-dist/vendor/next/dist/compiled/zod/package.json +1 -0
- package/webapp-dist/vendor/next/dist/compiled/zod-validation-error/index.js +1 -0
- package/webapp-dist/vendor/next/dist/compiled/zod-validation-error/package.json +1 -0
- package/webapp-dist/vendor/next/dist/experimental/testmode/context.js +57 -0
- package/webapp-dist/vendor/next/dist/experimental/testmode/fetch.js +142 -0
- package/webapp-dist/vendor/next/dist/experimental/testmode/httpget.js +26 -0
- package/webapp-dist/vendor/next/dist/experimental/testmode/server-edge.js +32 -0
- package/webapp-dist/vendor/next/dist/experimental/testmode/server.js +62 -0
- package/webapp-dist/vendor/next/dist/export/helpers/create-incremental-cache.js +61 -0
- package/webapp-dist/vendor/next/dist/lib/batcher.js +65 -0
- package/webapp-dist/vendor/next/dist/lib/build-custom-route.js +46 -0
- package/webapp-dist/vendor/next/dist/lib/bundler.js +97 -0
- package/webapp-dist/vendor/next/dist/lib/client-and-server-references.js +54 -0
- package/webapp-dist/vendor/next/dist/lib/coalesced-function.js +39 -0
- package/webapp-dist/vendor/next/dist/lib/compile-error.js +14 -0
- package/webapp-dist/vendor/next/dist/lib/constants.js +405 -0
- package/webapp-dist/vendor/next/dist/lib/create-client-router-filter.js +67 -0
- package/webapp-dist/vendor/next/dist/lib/default-transpiled-packages.json +1 -0
- package/webapp-dist/vendor/next/dist/lib/detached-promise.js +32 -0
- package/webapp-dist/vendor/next/dist/lib/detect-typo.js +51 -0
- package/webapp-dist/vendor/next/dist/lib/download-swc.js +183 -0
- package/webapp-dist/vendor/next/dist/lib/error-telemetry-utils.js +42 -0
- package/webapp-dist/vendor/next/dist/lib/fallback.js +100 -0
- package/webapp-dist/vendor/next/dist/lib/fatal-error.js +14 -0
- package/webapp-dist/vendor/next/dist/lib/file-exists.js +53 -0
- package/webapp-dist/vendor/next/dist/lib/find-config.js +102 -0
- package/webapp-dist/vendor/next/dist/lib/find-pages-dir.js +65 -0
- package/webapp-dist/vendor/next/dist/lib/find-root.js +122 -0
- package/webapp-dist/vendor/next/dist/lib/format-cli-help-output.js +84 -0
- package/webapp-dist/vendor/next/dist/lib/format-dynamic-import-path.js +24 -0
- package/webapp-dist/vendor/next/dist/lib/format-server-error.js +74 -0
- package/webapp-dist/vendor/next/dist/lib/framework/boundary-components.js +62 -0
- package/webapp-dist/vendor/next/dist/lib/framework/boundary-constants.js +36 -0
- package/webapp-dist/vendor/next/dist/lib/fs/rename.js +87 -0
- package/webapp-dist/vendor/next/dist/lib/fs/write-atomic.js +28 -0
- package/webapp-dist/vendor/next/dist/lib/generate-interception-routes-rewrites.js +69 -0
- package/webapp-dist/vendor/next/dist/lib/get-files-in-dir.js +33 -0
- package/webapp-dist/vendor/next/dist/lib/get-network-host.js +44 -0
- package/webapp-dist/vendor/next/dist/lib/get-package-version.js +118 -0
- package/webapp-dist/vendor/next/dist/lib/get-project-dir.js +51 -0
- package/webapp-dist/vendor/next/dist/lib/has-necessary-dependencies.js +49 -0
- package/webapp-dist/vendor/next/dist/lib/helpers/get-cache-directory.js +66 -0
- package/webapp-dist/vendor/next/dist/lib/helpers/get-npx-command.js +29 -0
- package/webapp-dist/vendor/next/dist/lib/helpers/get-online.js +50 -0
- package/webapp-dist/vendor/next/dist/lib/helpers/get-pkg-manager.js +63 -0
- package/webapp-dist/vendor/next/dist/lib/helpers/get-registry.js +45 -0
- package/webapp-dist/vendor/next/dist/lib/helpers/get-reserved-port.js +116 -0
- package/webapp-dist/vendor/next/dist/lib/helpers/install.js +83 -0
- package/webapp-dist/vendor/next/dist/lib/import-next-warning.js +50 -0
- package/webapp-dist/vendor/next/dist/lib/inline-static-env.js +112 -0
- package/webapp-dist/vendor/next/dist/lib/install-dependencies.js +40 -0
- package/webapp-dist/vendor/next/dist/lib/interop-default.js +15 -0
- package/webapp-dist/vendor/next/dist/lib/is-api-route.js +15 -0
- package/webapp-dist/vendor/next/dist/lib/is-app-page-route.js +15 -0
- package/webapp-dist/vendor/next/dist/lib/is-app-route-route.js +15 -0
- package/webapp-dist/vendor/next/dist/lib/is-edge-runtime.js +16 -0
- package/webapp-dist/vendor/next/dist/lib/is-error.js +78 -0
- package/webapp-dist/vendor/next/dist/lib/is-internal-component.js +36 -0
- package/webapp-dist/vendor/next/dist/lib/is-serializable-props.js +106 -0
- package/webapp-dist/vendor/next/dist/lib/known-edge-safe-packages.json +1 -0
- package/webapp-dist/vendor/next/dist/lib/load-custom-routes.js +550 -0
- package/webapp-dist/vendor/next/dist/lib/memory/gc-observer.js +53 -0
- package/webapp-dist/vendor/next/dist/lib/memory/shutdown.js +29 -0
- package/webapp-dist/vendor/next/dist/lib/memory/startup.js +47 -0
- package/webapp-dist/vendor/next/dist/lib/memory/trace.js +109 -0
- package/webapp-dist/vendor/next/dist/lib/metadata/constants.js +40 -0
- package/webapp-dist/vendor/next/dist/lib/metadata/default-metadata.js +82 -0
- package/webapp-dist/vendor/next/dist/lib/metadata/generate/alternate.js +55 -0
- package/webapp-dist/vendor/next/dist/lib/metadata/generate/basic.js +307 -0
- package/webapp-dist/vendor/next/dist/lib/metadata/generate/icon-mark.js +22 -0
- package/webapp-dist/vendor/next/dist/lib/metadata/generate/icons.js +64 -0
- package/webapp-dist/vendor/next/dist/lib/metadata/generate/meta.js +123 -0
- package/webapp-dist/vendor/next/dist/lib/metadata/generate/opengraph.js +478 -0
- package/webapp-dist/vendor/next/dist/lib/metadata/generate/utils.js +52 -0
- package/webapp-dist/vendor/next/dist/lib/metadata/get-metadata-route.js +114 -0
- package/webapp-dist/vendor/next/dist/lib/metadata/is-metadata-route.js +221 -0
- package/webapp-dist/vendor/next/dist/lib/metadata/metadata-context.js +18 -0
- package/webapp-dist/vendor/next/dist/lib/metadata/metadata.js +243 -0
- package/webapp-dist/vendor/next/dist/lib/metadata/resolve-metadata.js +859 -0
- package/webapp-dist/vendor/next/dist/lib/metadata/resolvers/resolve-basics.js +232 -0
- package/webapp-dist/vendor/next/dist/lib/metadata/resolvers/resolve-icons.js +56 -0
- package/webapp-dist/vendor/next/dist/lib/metadata/resolvers/resolve-opengraph.js +199 -0
- package/webapp-dist/vendor/next/dist/lib/metadata/resolvers/resolve-title.js +40 -0
- package/webapp-dist/vendor/next/dist/lib/metadata/resolvers/resolve-url.js +135 -0
- package/webapp-dist/vendor/next/dist/lib/metadata/types/alternative-urls-types.js +7 -0
- package/webapp-dist/vendor/next/dist/lib/metadata/types/extra-types.js +9 -0
- package/webapp-dist/vendor/next/dist/lib/metadata/types/icons.js +6 -0
- package/webapp-dist/vendor/next/dist/lib/metadata/types/manifest-types.js +6 -0
- package/webapp-dist/vendor/next/dist/lib/metadata/types/metadata-interface.js +18 -0
- package/webapp-dist/vendor/next/dist/lib/metadata/types/metadata-types.js +10 -0
- package/webapp-dist/vendor/next/dist/lib/metadata/types/opengraph-types.js +6 -0
- package/webapp-dist/vendor/next/dist/lib/metadata/types/resolvers.js +6 -0
- package/webapp-dist/vendor/next/dist/lib/metadata/types/twitter-types.js +7 -0
- package/webapp-dist/vendor/next/dist/lib/mime-type.js +20 -0
- package/webapp-dist/vendor/next/dist/lib/mkcert.js +204 -0
- package/webapp-dist/vendor/next/dist/lib/multi-file-writer.js +75 -0
- package/webapp-dist/vendor/next/dist/lib/needs-experimental-react.js +16 -0
- package/webapp-dist/vendor/next/dist/lib/non-nullable.js +15 -0
- package/webapp-dist/vendor/next/dist/lib/normalize-path.js +21 -0
- package/webapp-dist/vendor/next/dist/lib/oxford-comma-list.js +15 -0
- package/webapp-dist/vendor/next/dist/lib/page-types.js +18 -0
- package/webapp-dist/vendor/next/dist/lib/patch-incorrect-lockfile.js +185 -0
- package/webapp-dist/vendor/next/dist/lib/pick.js +19 -0
- package/webapp-dist/vendor/next/dist/lib/picocolors.js +177 -0
- package/webapp-dist/vendor/next/dist/lib/pretty-bytes.js +74 -0
- package/webapp-dist/vendor/next/dist/lib/realpath.js +20 -0
- package/webapp-dist/vendor/next/dist/lib/recursive-copy.js +76 -0
- package/webapp-dist/vendor/next/dist/lib/recursive-delete.js +137 -0
- package/webapp-dist/vendor/next/dist/lib/recursive-readdir.js +124 -0
- package/webapp-dist/vendor/next/dist/lib/redirect-status.js +46 -0
- package/webapp-dist/vendor/next/dist/lib/require-instrumentation-client.js +26 -0
- package/webapp-dist/vendor/next/dist/lib/resolve-build-paths.js +149 -0
- package/webapp-dist/vendor/next/dist/lib/resolve-from.js +65 -0
- package/webapp-dist/vendor/next/dist/lib/route-pattern-normalizer.js +107 -0
- package/webapp-dist/vendor/next/dist/lib/scheduler.js +64 -0
- package/webapp-dist/vendor/next/dist/lib/semver-noop.js +18 -0
- package/webapp-dist/vendor/next/dist/lib/server-external-packages.jsonc +103 -0
- package/webapp-dist/vendor/next/dist/lib/setup-exception-listeners.js +11 -0
- package/webapp-dist/vendor/next/dist/lib/static-env.js +92 -0
- package/webapp-dist/vendor/next/dist/lib/try-to-parse-path.js +68 -0
- package/webapp-dist/vendor/next/dist/lib/turbopack-warning.js +186 -0
- package/webapp-dist/vendor/next/dist/lib/typescript/diagnosticFormatter.js +240 -0
- package/webapp-dist/vendor/next/dist/lib/typescript/getTypeScriptConfiguration.js +73 -0
- package/webapp-dist/vendor/next/dist/lib/typescript/getTypeScriptIntent.js +52 -0
- package/webapp-dist/vendor/next/dist/lib/typescript/missingDependencyError.js +27 -0
- package/webapp-dist/vendor/next/dist/lib/typescript/runTypeCheck.js +151 -0
- package/webapp-dist/vendor/next/dist/lib/typescript/type-paths.js +56 -0
- package/webapp-dist/vendor/next/dist/lib/typescript/writeAppTypeDeclarations.js +65 -0
- package/webapp-dist/vendor/next/dist/lib/typescript/writeConfigurationDefaults.js +394 -0
- package/webapp-dist/vendor/next/dist/lib/url.js +75 -0
- package/webapp-dist/vendor/next/dist/lib/verify-partytown-setup.js +115 -0
- package/webapp-dist/vendor/next/dist/lib/verify-root-layout.js +165 -0
- package/webapp-dist/vendor/next/dist/lib/verify-typescript-setup.js +178 -0
- package/webapp-dist/vendor/next/dist/lib/wait.js +19 -0
- package/webapp-dist/vendor/next/dist/lib/with-promise-cache.js +24 -0
- package/webapp-dist/vendor/next/dist/lib/worker.js +223 -0
- package/webapp-dist/vendor/next/dist/next-devtools/server/shared.js +61 -0
- package/webapp-dist/vendor/next/dist/server/ReactDOMServerPages.js +16 -0
- package/webapp-dist/vendor/next/dist/server/accept-header.js +132 -0
- package/webapp-dist/vendor/next/dist/server/after/after-context.js +140 -0
- package/webapp-dist/vendor/next/dist/server/after/after.js +26 -0
- package/webapp-dist/vendor/next/dist/server/after/awaiter.js +74 -0
- package/webapp-dist/vendor/next/dist/server/after/builtin-request-context.js +38 -0
- package/webapp-dist/vendor/next/dist/server/after/index.js +21 -0
- package/webapp-dist/vendor/next/dist/server/after/run-with-after.js +35 -0
- package/webapp-dist/vendor/next/dist/server/api-utils/get-cookie-parser.js +22 -0
- package/webapp-dist/vendor/next/dist/server/api-utils/index.js +201 -0
- package/webapp-dist/vendor/next/dist/server/api-utils/node/api-resolver.js +395 -0
- package/webapp-dist/vendor/next/dist/server/api-utils/node/parse-body.js +79 -0
- package/webapp-dist/vendor/next/dist/server/api-utils/node/try-get-preview-data.js +86 -0
- package/webapp-dist/vendor/next/dist/server/api-utils/web.js +17 -0
- package/webapp-dist/vendor/next/dist/server/app-render/action-async-storage-instance.js +14 -0
- package/webapp-dist/vendor/next/dist/server/app-render/action-async-storage.external.js +13 -0
- package/webapp-dist/vendor/next/dist/server/app-render/action-handler.js +952 -0
- package/webapp-dist/vendor/next/dist/server/app-render/after-task-async-storage-instance.js +14 -0
- package/webapp-dist/vendor/next/dist/server/app-render/after-task-async-storage.external.js +13 -0
- package/webapp-dist/vendor/next/dist/server/app-render/app-render-prerender-utils.js +249 -0
- package/webapp-dist/vendor/next/dist/server/app-render/app-render-render-utils.js +112 -0
- package/webapp-dist/vendor/next/dist/server/app-render/app-render-scheduling.js +188 -0
- package/webapp-dist/vendor/next/dist/server/app-render/app-render.js +3526 -0
- package/webapp-dist/vendor/next/dist/server/app-render/async-local-storage.js +76 -0
- package/webapp-dist/vendor/next/dist/server/app-render/cache-signal.js +181 -0
- package/webapp-dist/vendor/next/dist/server/app-render/collect-segment-data.js +276 -0
- package/webapp-dist/vendor/next/dist/server/app-render/console-async-storage-instance.js +14 -0
- package/webapp-dist/vendor/next/dist/server/app-render/console-async-storage.external.js +13 -0
- package/webapp-dist/vendor/next/dist/server/app-render/create-component-styles-and-scripts.js +33 -0
- package/webapp-dist/vendor/next/dist/server/app-render/create-component-tree.js +754 -0
- package/webapp-dist/vendor/next/dist/server/app-render/create-error-handler.js +187 -0
- package/webapp-dist/vendor/next/dist/server/app-render/create-flight-router-state-from-loader-tree.js +76 -0
- package/webapp-dist/vendor/next/dist/server/app-render/csrf-protection.js +75 -0
- package/webapp-dist/vendor/next/dist/server/app-render/dynamic-access-async-storage-instance.js +14 -0
- package/webapp-dist/vendor/next/dist/server/app-render/dynamic-access-async-storage.external.js +13 -0
- package/webapp-dist/vendor/next/dist/server/app-render/dynamic-rendering.js +828 -0
- package/webapp-dist/vendor/next/dist/server/app-render/encryption-utils-server.js +114 -0
- package/webapp-dist/vendor/next/dist/server/app-render/encryption-utils.js +93 -0
- package/webapp-dist/vendor/next/dist/server/app-render/encryption.js +238 -0
- package/webapp-dist/vendor/next/dist/server/app-render/entry-base.js +237 -0
- package/webapp-dist/vendor/next/dist/server/app-render/flight-render-result.js +28 -0
- package/webapp-dist/vendor/next/dist/server/app-render/get-asset-query-string.js +29 -0
- package/webapp-dist/vendor/next/dist/server/app-render/get-css-inlined-link-tags.js +49 -0
- package/webapp-dist/vendor/next/dist/server/app-render/get-layer-assets.js +65 -0
- package/webapp-dist/vendor/next/dist/server/app-render/get-preloadable-fonts.js +39 -0
- package/webapp-dist/vendor/next/dist/server/app-render/get-script-nonce-from-header.js +44 -0
- package/webapp-dist/vendor/next/dist/server/app-render/get-short-dynamic-param-type.js +25 -0
- package/webapp-dist/vendor/next/dist/server/app-render/has-loading-component-in-tree.js +19 -0
- package/webapp-dist/vendor/next/dist/server/app-render/interop-default.js +17 -0
- package/webapp-dist/vendor/next/dist/server/app-render/make-get-server-inserted-html.js +92 -0
- package/webapp-dist/vendor/next/dist/server/app-render/manifests-singleton.js +257 -0
- package/webapp-dist/vendor/next/dist/server/app-render/metadata-insertion/create-server-inserted-metadata.js +28 -0
- package/webapp-dist/vendor/next/dist/server/app-render/module-loading/track-dynamic-import.js +57 -0
- package/webapp-dist/vendor/next/dist/server/app-render/module-loading/track-module-loading.external.js +32 -0
- package/webapp-dist/vendor/next/dist/server/app-render/module-loading/track-module-loading.instance.js +66 -0
- package/webapp-dist/vendor/next/dist/server/app-render/parse-and-validate-flight-router-state.js +49 -0
- package/webapp-dist/vendor/next/dist/server/app-render/postponed-state.js +156 -0
- package/webapp-dist/vendor/next/dist/server/app-render/prospective-render-utils.js +73 -0
- package/webapp-dist/vendor/next/dist/server/app-render/react-large-shell-error.js +17 -0
- package/webapp-dist/vendor/next/dist/server/app-render/react-server.node.js +39 -0
- package/webapp-dist/vendor/next/dist/server/app-render/render-css-resource.js +52 -0
- package/webapp-dist/vendor/next/dist/server/app-render/required-scripts.js +76 -0
- package/webapp-dist/vendor/next/dist/server/app-render/rsc/postpone.js +18 -0
- package/webapp-dist/vendor/next/dist/server/app-render/rsc/preloads.js +74 -0
- package/webapp-dist/vendor/next/dist/server/app-render/rsc/taint.js +79 -0
- package/webapp-dist/vendor/next/dist/server/app-render/segment-explorer-path.js +103 -0
- package/webapp-dist/vendor/next/dist/server/app-render/server-inserted-html.js +77 -0
- package/webapp-dist/vendor/next/dist/server/app-render/staged-rendering.js +273 -0
- package/webapp-dist/vendor/next/dist/server/app-render/staged-validation.js +32 -0
- package/webapp-dist/vendor/next/dist/server/app-render/strip-flight-headers.js +18 -0
- package/webapp-dist/vendor/next/dist/server/app-render/types.js +59 -0
- package/webapp-dist/vendor/next/dist/server/app-render/use-flight-response.js +212 -0
- package/webapp-dist/vendor/next/dist/server/app-render/walk-tree-with-flight-router-state.js +185 -0
- package/webapp-dist/vendor/next/dist/server/app-render/work-async-storage-instance.js +14 -0
- package/webapp-dist/vendor/next/dist/server/app-render/work-async-storage.external.js +13 -0
- package/webapp-dist/vendor/next/dist/server/app-render/work-unit-async-storage-instance.js +14 -0
- package/webapp-dist/vendor/next/dist/server/app-render/work-unit-async-storage.external.js +252 -0
- package/webapp-dist/vendor/next/dist/server/async-storage/draft-mode-provider.js +62 -0
- package/webapp-dist/vendor/next/dist/server/async-storage/request-store.js +144 -0
- package/webapp-dist/vendor/next/dist/server/async-storage/with-store.js +6 -0
- package/webapp-dist/vendor/next/dist/server/async-storage/work-store.js +94 -0
- package/webapp-dist/vendor/next/dist/server/base-http/helpers.js +36 -0
- package/webapp-dist/vendor/next/dist/server/base-http/index.js +54 -0
- package/webapp-dist/vendor/next/dist/server/base-http/node.js +147 -0
- package/webapp-dist/vendor/next/dist/server/base-http/web.js +124 -0
- package/webapp-dist/vendor/next/dist/server/base-server.js +1842 -0
- package/webapp-dist/vendor/next/dist/server/body-streams.js +114 -0
- package/webapp-dist/vendor/next/dist/server/cache-dir.js +26 -0
- package/webapp-dist/vendor/next/dist/server/capsize-font-metrics.json +181516 -0
- package/webapp-dist/vendor/next/dist/server/ci-info.js +41 -0
- package/webapp-dist/vendor/next/dist/server/client-component-renderer-logger.js +70 -0
- package/webapp-dist/vendor/next/dist/server/config-schema.js +630 -0
- package/webapp-dist/vendor/next/dist/server/config-shared.js +309 -0
- package/webapp-dist/vendor/next/dist/server/config-utils.js +185 -0
- package/webapp-dist/vendor/next/dist/server/config.js +1468 -0
- package/webapp-dist/vendor/next/dist/server/create-deduped-by-callsite-server-error-logger.js +96 -0
- package/webapp-dist/vendor/next/dist/server/crypto-utils.js +70 -0
- package/webapp-dist/vendor/next/dist/server/dev/browser-logs/file-logger.js +183 -0
- package/webapp-dist/vendor/next/dist/server/dev/browser-logs/receive-logs.js +512 -0
- package/webapp-dist/vendor/next/dist/server/dev/browser-logs/source-map.js +225 -0
- package/webapp-dist/vendor/next/dist/server/dev/debug-channel.js +87 -0
- package/webapp-dist/vendor/next/dist/server/dev/dev-indicator-server-state.js +15 -0
- package/webapp-dist/vendor/next/dist/server/dev/get-source-map-from-file.js +100 -0
- package/webapp-dist/vendor/next/dist/server/dev/hot-middleware.js +274 -0
- package/webapp-dist/vendor/next/dist/server/dev/hot-reloader-rspack.js +171 -0
- package/webapp-dist/vendor/next/dist/server/dev/hot-reloader-shared-utils.js +56 -0
- package/webapp-dist/vendor/next/dist/server/dev/hot-reloader-turbopack.js +1247 -0
- package/webapp-dist/vendor/next/dist/server/dev/hot-reloader-types.js +58 -0
- package/webapp-dist/vendor/next/dist/server/dev/hot-reloader-webpack.js +1382 -0
- package/webapp-dist/vendor/next/dist/server/dev/log-requests.js +141 -0
- package/webapp-dist/vendor/next/dist/server/dev/messages.js +74 -0
- package/webapp-dist/vendor/next/dist/server/dev/middleware-turbopack.js +393 -0
- package/webapp-dist/vendor/next/dist/server/dev/middleware-webpack.js +473 -0
- package/webapp-dist/vendor/next/dist/server/dev/node-stack-frames.js +72 -0
- package/webapp-dist/vendor/next/dist/server/dev/on-demand-entry-handler.js +704 -0
- package/webapp-dist/vendor/next/dist/server/dev/parse-version-info.js +108 -0
- package/webapp-dist/vendor/next/dist/server/dev/require-cache.js +49 -0
- package/webapp-dist/vendor/next/dist/server/dev/serialized-errors.js +67 -0
- package/webapp-dist/vendor/next/dist/server/dev/static-paths-worker.js +103 -0
- package/webapp-dist/vendor/next/dist/server/dev/turbopack-utils.js +696 -0
- package/webapp-dist/vendor/next/dist/server/dynamic-rendering-utils.js +86 -0
- package/webapp-dist/vendor/next/dist/server/font-utils.js +43 -0
- package/webapp-dist/vendor/next/dist/server/get-app-route-from-entrypoint.js +30 -0
- package/webapp-dist/vendor/next/dist/server/get-page-files.js +23 -0
- package/webapp-dist/vendor/next/dist/server/get-route-from-entrypoint.js +35 -0
- package/webapp-dist/vendor/next/dist/server/htmlescape.js +37 -0
- package/webapp-dist/vendor/next/dist/server/image-optimizer.js +1067 -0
- package/webapp-dist/vendor/next/dist/server/instrumentation/types.js +6 -0
- package/webapp-dist/vendor/next/dist/server/instrumentation/utils.js +21 -0
- package/webapp-dist/vendor/next/dist/server/internal-utils.js +39 -0
- package/webapp-dist/vendor/next/dist/server/is-private-ip.js +36 -0
- package/webapp-dist/vendor/next/dist/server/lib/app-dir-module.js +59 -0
- package/webapp-dist/vendor/next/dist/server/lib/app-info-log.js +154 -0
- package/webapp-dist/vendor/next/dist/server/lib/async-callback-set.js +29 -0
- package/webapp-dist/vendor/next/dist/server/lib/cache-control.js +22 -0
- package/webapp-dist/vendor/next/dist/server/lib/cache-handlers/default.external.js +18 -0
- package/webapp-dist/vendor/next/dist/server/lib/cache-handlers/default.js +160 -0
- package/webapp-dist/vendor/next/dist/server/lib/cache-handlers/types.js +8 -0
- package/webapp-dist/vendor/next/dist/server/lib/chrome-devtools-workspace.js +116 -0
- package/webapp-dist/vendor/next/dist/server/lib/clone-response.js +77 -0
- package/webapp-dist/vendor/next/dist/server/lib/cpu-profile.js +28 -0
- package/webapp-dist/vendor/next/dist/server/lib/decode-query-path-parameter.js +26 -0
- package/webapp-dist/vendor/next/dist/server/lib/dedupe-fetch.js +163 -0
- package/webapp-dist/vendor/next/dist/server/lib/dev-bundler-service.js +95 -0
- package/webapp-dist/vendor/next/dist/server/lib/etag.js +56 -0
- package/webapp-dist/vendor/next/dist/server/lib/experimental/create-env-definitions.js +48 -0
- package/webapp-dist/vendor/next/dist/server/lib/experimental/ppr.js +47 -0
- package/webapp-dist/vendor/next/dist/server/lib/find-page-file.js +127 -0
- package/webapp-dist/vendor/next/dist/server/lib/fix-mojibake.js +25 -0
- package/webapp-dist/vendor/next/dist/server/lib/format-hostname.js +16 -0
- package/webapp-dist/vendor/next/dist/server/lib/i18n-provider.js +129 -0
- package/webapp-dist/vendor/next/dist/server/lib/implicit-tags.js +77 -0
- package/webapp-dist/vendor/next/dist/server/lib/incremental-cache/file-system-cache.js +333 -0
- package/webapp-dist/vendor/next/dist/server/lib/incremental-cache/index.js +479 -0
- package/webapp-dist/vendor/next/dist/server/lib/incremental-cache/memory-cache.external.js +40 -0
- package/webapp-dist/vendor/next/dist/server/lib/incremental-cache/shared-cache-controls.external.js +73 -0
- package/webapp-dist/vendor/next/dist/server/lib/incremental-cache/tags-manifest.external.js +55 -0
- package/webapp-dist/vendor/next/dist/server/lib/is-ipv6.js +41 -0
- package/webapp-dist/vendor/next/dist/server/lib/lazy-result.js +46 -0
- package/webapp-dist/vendor/next/dist/server/lib/lru-cache.js +177 -0
- package/webapp-dist/vendor/next/dist/server/lib/match-next-data-pathname.js +18 -0
- package/webapp-dist/vendor/next/dist/server/lib/mock-request.js +416 -0
- package/webapp-dist/vendor/next/dist/server/lib/module-loader/module-loader.js +8 -0
- package/webapp-dist/vendor/next/dist/server/lib/module-loader/node-module-loader.js +25 -0
- package/webapp-dist/vendor/next/dist/server/lib/module-loader/route-module-loader.js +26 -0
- package/webapp-dist/vendor/next/dist/server/lib/node-fs-methods.js +28 -0
- package/webapp-dist/vendor/next/dist/server/lib/parse-stack.js +46 -0
- package/webapp-dist/vendor/next/dist/server/lib/patch-fetch.js +945 -0
- package/webapp-dist/vendor/next/dist/server/lib/patch-set-header.js +38 -0
- package/webapp-dist/vendor/next/dist/server/lib/render-server.js +152 -0
- package/webapp-dist/vendor/next/dist/server/lib/router-server.js +672 -0
- package/webapp-dist/vendor/next/dist/server/lib/router-utils/block-cross-site.js +76 -0
- package/webapp-dist/vendor/next/dist/server/lib/router-utils/build-data-route.js +48 -0
- package/webapp-dist/vendor/next/dist/server/lib/router-utils/build-prefetch-segment-data-route.js +50 -0
- package/webapp-dist/vendor/next/dist/server/lib/router-utils/cache-life-type-utils.js +211 -0
- package/webapp-dist/vendor/next/dist/server/lib/router-utils/decode-path-params.js +42 -0
- package/webapp-dist/vendor/next/dist/server/lib/router-utils/filesystem.js +590 -0
- package/webapp-dist/vendor/next/dist/server/lib/router-utils/instrumentation-globals.external.js +89 -0
- package/webapp-dist/vendor/next/dist/server/lib/router-utils/instrumentation-node-extensions.js +96 -0
- package/webapp-dist/vendor/next/dist/server/lib/router-utils/is-postpone.js +16 -0
- package/webapp-dist/vendor/next/dist/server/lib/router-utils/proxy-request.js +118 -0
- package/webapp-dist/vendor/next/dist/server/lib/router-utils/resolve-routes.js +608 -0
- package/webapp-dist/vendor/next/dist/server/lib/router-utils/route-types-utils.js +286 -0
- package/webapp-dist/vendor/next/dist/server/lib/router-utils/router-server-context.js +26 -0
- package/webapp-dist/vendor/next/dist/server/lib/router-utils/typegen.js +613 -0
- package/webapp-dist/vendor/next/dist/server/lib/router-utils/types.js +6 -0
- package/webapp-dist/vendor/next/dist/server/lib/server-action-request-meta.js +53 -0
- package/webapp-dist/vendor/next/dist/server/lib/server-ipc/utils.js +80 -0
- package/webapp-dist/vendor/next/dist/server/lib/source-maps.js +196 -0
- package/webapp-dist/vendor/next/dist/server/lib/start-server.js +460 -0
- package/webapp-dist/vendor/next/dist/server/lib/streaming-metadata.js +38 -0
- package/webapp-dist/vendor/next/dist/server/lib/to-route.js +37 -0
- package/webapp-dist/vendor/next/dist/server/lib/trace/constants.js +203 -0
- package/webapp-dist/vendor/next/dist/server/lib/trace/tracer.js +270 -0
- package/webapp-dist/vendor/next/dist/server/lib/trace/utils.js +16 -0
- package/webapp-dist/vendor/next/dist/server/lib/types.js +6 -0
- package/webapp-dist/vendor/next/dist/server/lib/utils.js +249 -0
- package/webapp-dist/vendor/next/dist/server/lib/worker-utils.js +36 -0
- package/webapp-dist/vendor/next/dist/server/load-components.js +177 -0
- package/webapp-dist/vendor/next/dist/server/load-default-error-components.js +41 -0
- package/webapp-dist/vendor/next/dist/server/load-manifest.external.js +97 -0
- package/webapp-dist/vendor/next/dist/server/match-bundle.js +25 -0
- package/webapp-dist/vendor/next/dist/server/mcp/get-mcp-middleware.js +49 -0
- package/webapp-dist/vendor/next/dist/server/mcp/get-or-create-mcp-server.js +41 -0
- package/webapp-dist/vendor/next/dist/server/mcp/mcp-telemetry-tracker.js +82 -0
- package/webapp-dist/vendor/next/dist/server/mcp/tools/get-errors.js +107 -0
- package/webapp-dist/vendor/next/dist/server/mcp/tools/get-logs.js +61 -0
- package/webapp-dist/vendor/next/dist/server/mcp/tools/get-page-metadata.js +180 -0
- package/webapp-dist/vendor/next/dist/server/mcp/tools/get-project-metadata.js +55 -0
- package/webapp-dist/vendor/next/dist/server/mcp/tools/get-routes.js +171 -0
- package/webapp-dist/vendor/next/dist/server/mcp/tools/get-server-action-by-id.js +113 -0
- package/webapp-dist/vendor/next/dist/server/mcp/tools/next-instance-error-state.js +31 -0
- package/webapp-dist/vendor/next/dist/server/mcp/tools/utils/browser-communication.js +90 -0
- package/webapp-dist/vendor/next/dist/server/mcp/tools/utils/format-errors.js +147 -0
- package/webapp-dist/vendor/next/dist/server/next-server.js +1459 -0
- package/webapp-dist/vendor/next/dist/server/next-typescript.js +13 -0
- package/webapp-dist/vendor/next/dist/server/next.js +452 -0
- package/webapp-dist/vendor/next/dist/server/node-environment-baseline.js +25 -0
- package/webapp-dist/vendor/next/dist/server/node-environment-extensions/console-dim.external.js +246 -0
- package/webapp-dist/vendor/next/dist/server/node-environment-extensions/console-exit.js +49 -0
- package/webapp-dist/vendor/next/dist/server/node-environment-extensions/console-file.js +56 -0
- package/webapp-dist/vendor/next/dist/server/node-environment-extensions/date.js +52 -0
- package/webapp-dist/vendor/next/dist/server/node-environment-extensions/error-inspect.js +8 -0
- package/webapp-dist/vendor/next/dist/server/node-environment-extensions/fast-set-immediate.external.js +570 -0
- package/webapp-dist/vendor/next/dist/server/node-environment-extensions/global-behaviors.js +33 -0
- package/webapp-dist/vendor/next/dist/server/node-environment-extensions/node-crypto.js +103 -0
- package/webapp-dist/vendor/next/dist/server/node-environment-extensions/random.js +28 -0
- package/webapp-dist/vendor/next/dist/server/node-environment-extensions/unhandled-rejection.js +489 -0
- package/webapp-dist/vendor/next/dist/server/node-environment-extensions/utils.js +186 -0
- package/webapp-dist/vendor/next/dist/server/node-environment-extensions/web-crypto.js +45 -0
- package/webapp-dist/vendor/next/dist/server/node-environment.js +19 -0
- package/webapp-dist/vendor/next/dist/server/node-polyfill-crypto.js +21 -0
- package/webapp-dist/vendor/next/dist/server/normalizers/absolute-filename-normalizer.js +33 -0
- package/webapp-dist/vendor/next/dist/server/normalizers/built/app/app-bundle-path-normalizer.js +54 -0
- package/webapp-dist/vendor/next/dist/server/normalizers/built/app/app-filename-normalizer.js +22 -0
- package/webapp-dist/vendor/next/dist/server/normalizers/built/app/app-page-normalizer.js +40 -0
- package/webapp-dist/vendor/next/dist/server/normalizers/built/app/app-pathname-normalizer.js +55 -0
- package/webapp-dist/vendor/next/dist/server/normalizers/built/app/index.js +42 -0
- package/webapp-dist/vendor/next/dist/server/normalizers/built/pages/index.js +44 -0
- package/webapp-dist/vendor/next/dist/server/normalizers/built/pages/pages-bundle-path-normalizer.js +55 -0
- package/webapp-dist/vendor/next/dist/server/normalizers/built/pages/pages-filename-normalizer.js +22 -0
- package/webapp-dist/vendor/next/dist/server/normalizers/built/pages/pages-page-normalizer.js +19 -0
- package/webapp-dist/vendor/next/dist/server/normalizers/built/pages/pages-pathname-normalizer.js +19 -0
- package/webapp-dist/vendor/next/dist/server/normalizers/locale-route-normalizer.js +26 -0
- package/webapp-dist/vendor/next/dist/server/normalizers/normalizer.js +6 -0
- package/webapp-dist/vendor/next/dist/server/normalizers/normalizers.js +23 -0
- package/webapp-dist/vendor/next/dist/server/normalizers/prefixing-normalizer.js +26 -0
- package/webapp-dist/vendor/next/dist/server/normalizers/request/base-path.js +25 -0
- package/webapp-dist/vendor/next/dist/server/normalizers/request/next-data.js +38 -0
- package/webapp-dist/vendor/next/dist/server/normalizers/request/pathname-normalizer.js +6 -0
- package/webapp-dist/vendor/next/dist/server/normalizers/request/prefix.js +39 -0
- package/webapp-dist/vendor/next/dist/server/normalizers/request/rsc.js +19 -0
- package/webapp-dist/vendor/next/dist/server/normalizers/request/segment-prefix-rsc.js +32 -0
- package/webapp-dist/vendor/next/dist/server/normalizers/request/suffix.js +27 -0
- package/webapp-dist/vendor/next/dist/server/normalizers/underscore-normalizer.js +17 -0
- package/webapp-dist/vendor/next/dist/server/normalizers/wrap-normalizer-fn.js +17 -0
- package/webapp-dist/vendor/next/dist/server/og/image-response.js +53 -0
- package/webapp-dist/vendor/next/dist/server/patch-error-inspect.js +436 -0
- package/webapp-dist/vendor/next/dist/server/pipe-readable.js +140 -0
- package/webapp-dist/vendor/next/dist/server/post-process.js +39 -0
- package/webapp-dist/vendor/next/dist/server/render-result.js +195 -0
- package/webapp-dist/vendor/next/dist/server/render.js +1138 -0
- package/webapp-dist/vendor/next/dist/server/request/connection.js +111 -0
- package/webapp-dist/vendor/next/dist/server/request/cookies.js +220 -0
- package/webapp-dist/vendor/next/dist/server/request/draft-mode.js +207 -0
- package/webapp-dist/vendor/next/dist/server/request/fallback-params.js +69 -0
- package/webapp-dist/vendor/next/dist/server/request/headers.js +219 -0
- package/webapp-dist/vendor/next/dist/server/request/params.js +415 -0
- package/webapp-dist/vendor/next/dist/server/request/pathname.js +104 -0
- package/webapp-dist/vendor/next/dist/server/request/root-params.js +157 -0
- package/webapp-dist/vendor/next/dist/server/request/search-params.js +432 -0
- package/webapp-dist/vendor/next/dist/server/request/utils.js +51 -0
- package/webapp-dist/vendor/next/dist/server/request-meta.js +55 -0
- package/webapp-dist/vendor/next/dist/server/require-hook.js +71 -0
- package/webapp-dist/vendor/next/dist/server/require.js +109 -0
- package/webapp-dist/vendor/next/dist/server/response-cache/index.js +211 -0
- package/webapp-dist/vendor/next/dist/server/response-cache/types.js +41 -0
- package/webapp-dist/vendor/next/dist/server/response-cache/utils.js +103 -0
- package/webapp-dist/vendor/next/dist/server/response-cache/web.js +101 -0
- package/webapp-dist/vendor/next/dist/server/resume-data-cache/cache-store.js +84 -0
- package/webapp-dist/vendor/next/dist/server/resume-data-cache/resume-data-cache.js +96 -0
- package/webapp-dist/vendor/next/dist/server/revalidation-utils.js +152 -0
- package/webapp-dist/vendor/next/dist/server/route-definitions/app-page-route-definition.js +16 -0
- package/webapp-dist/vendor/next/dist/server/route-definitions/app-route-route-definition.js +6 -0
- package/webapp-dist/vendor/next/dist/server/route-definitions/locale-route-definition.js +6 -0
- package/webapp-dist/vendor/next/dist/server/route-definitions/pages-api-route-definition.js +6 -0
- package/webapp-dist/vendor/next/dist/server/route-definitions/pages-route-definition.js +6 -0
- package/webapp-dist/vendor/next/dist/server/route-definitions/route-definition.js +6 -0
- package/webapp-dist/vendor/next/dist/server/route-kind.js +32 -0
- package/webapp-dist/vendor/next/dist/server/route-matcher-managers/default-route-matcher-manager.js +239 -0
- package/webapp-dist/vendor/next/dist/server/route-matcher-managers/dev-route-matcher-manager.js +120 -0
- package/webapp-dist/vendor/next/dist/server/route-matcher-managers/route-matcher-manager.js +6 -0
- package/webapp-dist/vendor/next/dist/server/route-matcher-providers/app-page-route-matcher-provider.js +55 -0
- package/webapp-dist/vendor/next/dist/server/route-matcher-providers/app-route-route-matcher-provider.js +43 -0
- package/webapp-dist/vendor/next/dist/server/route-matcher-providers/dev/dev-app-page-route-matcher-provider.js +90 -0
- package/webapp-dist/vendor/next/dist/server/route-matcher-providers/dev/dev-app-route-route-matcher-provider.js +112 -0
- package/webapp-dist/vendor/next/dist/server/route-matcher-providers/dev/dev-pages-api-route-matcher-provider.js +77 -0
- package/webapp-dist/vendor/next/dist/server/route-matcher-providers/dev/dev-pages-route-matcher-provider.js +77 -0
- package/webapp-dist/vendor/next/dist/server/route-matcher-providers/dev/file-cache-route-matcher-provider.js +28 -0
- package/webapp-dist/vendor/next/dist/server/route-matcher-providers/dev/helpers/file-reader/batched-file-reader.js +106 -0
- package/webapp-dist/vendor/next/dist/server/route-matcher-providers/dev/helpers/file-reader/default-file-reader.js +42 -0
- package/webapp-dist/vendor/next/dist/server/route-matcher-providers/dev/helpers/file-reader/file-reader.js +6 -0
- package/webapp-dist/vendor/next/dist/server/route-matcher-providers/helpers/cached-route-matcher-provider.js +30 -0
- package/webapp-dist/vendor/next/dist/server/route-matcher-providers/helpers/manifest-loaders/manifest-loader.js +6 -0
- package/webapp-dist/vendor/next/dist/server/route-matcher-providers/helpers/manifest-loaders/node-manifest-loader.js +34 -0
- package/webapp-dist/vendor/next/dist/server/route-matcher-providers/helpers/manifest-loaders/server-manifest-loader.js +20 -0
- package/webapp-dist/vendor/next/dist/server/route-matcher-providers/manifest-route-matcher-provider.js +21 -0
- package/webapp-dist/vendor/next/dist/server/route-matcher-providers/pages-api-route-matcher-provider.js +55 -0
- package/webapp-dist/vendor/next/dist/server/route-matcher-providers/pages-route-matcher-provider.js +64 -0
- package/webapp-dist/vendor/next/dist/server/route-matcher-providers/route-matcher-provider.js +6 -0
- package/webapp-dist/vendor/next/dist/server/route-matchers/app-page-route-matcher.js +18 -0
- package/webapp-dist/vendor/next/dist/server/route-matchers/app-route-route-matcher.js +15 -0
- package/webapp-dist/vendor/next/dist/server/route-matchers/locale-route-matcher.js +68 -0
- package/webapp-dist/vendor/next/dist/server/route-matchers/pages-api-route-matcher.js +30 -0
- package/webapp-dist/vendor/next/dist/server/route-matchers/pages-route-matcher.js +30 -0
- package/webapp-dist/vendor/next/dist/server/route-matchers/route-matcher.js +54 -0
- package/webapp-dist/vendor/next/dist/server/route-matches/app-page-route-match.js +6 -0
- package/webapp-dist/vendor/next/dist/server/route-matches/app-route-route-match.js +6 -0
- package/webapp-dist/vendor/next/dist/server/route-matches/locale-route-match.js +6 -0
- package/webapp-dist/vendor/next/dist/server/route-matches/pages-api-route-match.js +16 -0
- package/webapp-dist/vendor/next/dist/server/route-matches/pages-route-match.js +6 -0
- package/webapp-dist/vendor/next/dist/server/route-matches/route-match.js +6 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-page/helpers/prerender-manifest-matcher.js +48 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-page/module.compiled.js +36 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-page/module.js +132 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-page/module.render.js +24 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-page/vendored/contexts/app-router-context.js +4 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-page/vendored/contexts/entrypoints.js +87 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-page/vendored/contexts/head-manager-context.js +4 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-page/vendored/contexts/hooks-client-context.js +4 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-page/vendored/contexts/image-config-context.js +4 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-page/vendored/contexts/router-context.js +4 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-page/vendored/contexts/server-inserted-html.js +4 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-page/vendored/rsc/entrypoints.js +140 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-page/vendored/rsc/react-compiler-runtime.js +4 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-page/vendored/rsc/react-dom.js +4 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-page/vendored/rsc/react-jsx-dev-runtime.js +4 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-page/vendored/rsc/react-jsx-runtime.js +4 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-turbopack-server.js +4 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-turbopack-static.js +4 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server.js +4 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-static.js +4 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-page/vendored/rsc/react.js +4 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-page/vendored/ssr/entrypoints.js +125 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-page/vendored/ssr/react-compiler-runtime.js +4 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-page/vendored/ssr/react-dom-server.js +4 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-page/vendored/ssr/react-dom.js +4 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js +4 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js +4 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-page/vendored/ssr/react-server-dom-turbopack-client.js +4 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-page/vendored/ssr/react-server-dom-webpack-client.js +4 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-page/vendored/ssr/react.js +4 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-route/helpers/auto-implement-methods.js +85 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-route/helpers/clean-url.js +24 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-route/helpers/get-pathname-from-absolute-path.js +29 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-route/helpers/is-static-gen-enabled.js +15 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-route/helpers/parsed-url-query-to-params.js +20 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-route/module.compiled.js +36 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-route/module.js +889 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/app-route/shared-modules.js +56 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/checks.js +45 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/pages/builtin/_error.js +100 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/pages/module.compiled.js +20 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/pages/module.js +92 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/pages/module.render.js +24 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/pages/pages-handler.js +522 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/pages/vendored/contexts/app-router-context.js +4 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/pages/vendored/contexts/entrypoints.js +102 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/pages/vendored/contexts/head-manager-context.js +4 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/pages/vendored/contexts/hooks-client-context.js +4 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/pages/vendored/contexts/html-context.js +4 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/pages/vendored/contexts/image-config-context.js +4 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/pages/vendored/contexts/loadable-context.js +4 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/pages/vendored/contexts/loadable.js +4 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/pages/vendored/contexts/router-context.js +4 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/pages/vendored/contexts/server-inserted-html.js +4 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/pages-api/module.compiled.js +20 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/pages-api/module.js +58 -0
- package/webapp-dist/vendor/next/dist/server/route-modules/route-module.js +594 -0
- package/webapp-dist/vendor/next/dist/server/runtime-reacts.external.js +46 -0
- package/webapp-dist/vendor/next/dist/server/send-payload.js +88 -0
- package/webapp-dist/vendor/next/dist/server/send-response.js +70 -0
- package/webapp-dist/vendor/next/dist/server/serve-static.js +66 -0
- package/webapp-dist/vendor/next/dist/server/server-route-utils.js +30 -0
- package/webapp-dist/vendor/next/dist/server/server-utils.js +323 -0
- package/webapp-dist/vendor/next/dist/server/setup-http-agent-env.js +31 -0
- package/webapp-dist/vendor/next/dist/server/stream-utils/encoded-tags.js +114 -0
- package/webapp-dist/vendor/next/dist/server/stream-utils/node-web-streams-helper.js +737 -0
- package/webapp-dist/vendor/next/dist/server/stream-utils/uint8array-helpers.js +69 -0
- package/webapp-dist/vendor/next/dist/server/typescript/constant.js +97 -0
- package/webapp-dist/vendor/next/dist/server/typescript/index.js +199 -0
- package/webapp-dist/vendor/next/dist/server/typescript/rules/client-boundary.js +97 -0
- package/webapp-dist/vendor/next/dist/server/typescript/rules/config.js +501 -0
- package/webapp-dist/vendor/next/dist/server/typescript/rules/entry.js +149 -0
- package/webapp-dist/vendor/next/dist/server/typescript/rules/error.js +38 -0
- package/webapp-dist/vendor/next/dist/server/typescript/rules/metadata.js +234 -0
- package/webapp-dist/vendor/next/dist/server/typescript/rules/server-boundary.js +115 -0
- package/webapp-dist/vendor/next/dist/server/typescript/rules/server.js +79 -0
- package/webapp-dist/vendor/next/dist/server/typescript/utils.js +212 -0
- package/webapp-dist/vendor/next/dist/server/use-cache/cache-life.js +161 -0
- package/webapp-dist/vendor/next/dist/server/use-cache/cache-tag.js +50 -0
- package/webapp-dist/vendor/next/dist/server/use-cache/constants.js +28 -0
- package/webapp-dist/vendor/next/dist/server/use-cache/handlers.js +121 -0
- package/webapp-dist/vendor/next/dist/server/use-cache/use-cache-errors.js +36 -0
- package/webapp-dist/vendor/next/dist/server/use-cache/use-cache-wrapper.js +1336 -0
- package/webapp-dist/vendor/next/dist/server/utils.js +73 -0
- package/webapp-dist/vendor/next/dist/server/web/adapter.js +388 -0
- package/webapp-dist/vendor/next/dist/server/web/edge-route-module-wrapper.js +122 -0
- package/webapp-dist/vendor/next/dist/server/web/error.js +54 -0
- package/webapp-dist/vendor/next/dist/server/web/exports/index.js +56 -0
- package/webapp-dist/vendor/next/dist/server/web/get-edge-preview-props.js +23 -0
- package/webapp-dist/vendor/next/dist/server/web/globals.js +128 -0
- package/webapp-dist/vendor/next/dist/server/web/http.js +39 -0
- package/webapp-dist/vendor/next/dist/server/web/internal-edge-wait-until.js +64 -0
- package/webapp-dist/vendor/next/dist/server/web/next-url.js +195 -0
- package/webapp-dist/vendor/next/dist/server/web/sandbox/context.js +462 -0
- package/webapp-dist/vendor/next/dist/server/web/sandbox/fetch-inline-assets.js +35 -0
- package/webapp-dist/vendor/next/dist/server/web/sandbox/index.js +28 -0
- package/webapp-dist/vendor/next/dist/server/web/sandbox/resource-managers.js +88 -0
- package/webapp-dist/vendor/next/dist/server/web/sandbox/sandbox.js +134 -0
- package/webapp-dist/vendor/next/dist/server/web/spec-extension/adapters/headers.js +192 -0
- package/webapp-dist/vendor/next/dist/server/web/spec-extension/adapters/next-request.js +142 -0
- package/webapp-dist/vendor/next/dist/server/web/spec-extension/adapters/reflect.js +30 -0
- package/webapp-dist/vendor/next/dist/server/web/spec-extension/adapters/request-cookies.js +211 -0
- package/webapp-dist/vendor/next/dist/server/web/spec-extension/cookies.js +29 -0
- package/webapp-dist/vendor/next/dist/server/web/spec-extension/fetch-event.js +98 -0
- package/webapp-dist/vendor/next/dist/server/web/spec-extension/image-response.js +22 -0
- package/webapp-dist/vendor/next/dist/server/web/spec-extension/request.js +99 -0
- package/webapp-dist/vendor/next/dist/server/web/spec-extension/response.js +136 -0
- package/webapp-dist/vendor/next/dist/server/web/spec-extension/revalidate.js +206 -0
- package/webapp-dist/vendor/next/dist/server/web/spec-extension/unstable-cache.js +284 -0
- package/webapp-dist/vendor/next/dist/server/web/spec-extension/unstable-no-store.js +49 -0
- package/webapp-dist/vendor/next/dist/server/web/spec-extension/url-pattern.js +14 -0
- package/webapp-dist/vendor/next/dist/server/web/spec-extension/user-agent.js +46 -0
- package/webapp-dist/vendor/next/dist/server/web/types.js +6 -0
- package/webapp-dist/vendor/next/dist/server/web/utils.js +151 -0
- package/webapp-dist/vendor/next/dist/server/web/web-on-close.js +87 -0
- package/webapp-dist/vendor/next/dist/shared/lib/action-revalidation-kind.js +31 -0
- package/webapp-dist/vendor/next/dist/shared/lib/app-router-context.shared-runtime.js +50 -0
- package/webapp-dist/vendor/next/dist/shared/lib/app-router-types.js +27 -0
- package/webapp-dist/vendor/next/dist/shared/lib/constants.js +448 -0
- package/webapp-dist/vendor/next/dist/shared/lib/deep-freeze.js +30 -0
- package/webapp-dist/vendor/next/dist/shared/lib/deployment-id.js +36 -0
- package/webapp-dist/vendor/next/dist/shared/lib/dset.js +34 -0
- package/webapp-dist/vendor/next/dist/shared/lib/encode-uri-path.js +15 -0
- package/webapp-dist/vendor/next/dist/shared/lib/entry-constants.js +36 -0
- package/webapp-dist/vendor/next/dist/shared/lib/error-source.js +36 -0
- package/webapp-dist/vendor/next/dist/shared/lib/errors/canary-only-config-error.js +39 -0
- package/webapp-dist/vendor/next/dist/shared/lib/errors/constants.js +19 -0
- package/webapp-dist/vendor/next/dist/shared/lib/errors/empty-generate-static-params-error.js +24 -0
- package/webapp-dist/vendor/next/dist/shared/lib/errors/hard-deprecated-config-error.js +20 -0
- package/webapp-dist/vendor/next/dist/shared/lib/escape-regexp.js +22 -0
- package/webapp-dist/vendor/next/dist/shared/lib/get-hostname.js +23 -0
- package/webapp-dist/vendor/next/dist/shared/lib/hash.js +42 -0
- package/webapp-dist/vendor/next/dist/shared/lib/head-manager-context.shared-runtime.js +18 -0
- package/webapp-dist/vendor/next/dist/shared/lib/head.js +163 -0
- package/webapp-dist/vendor/next/dist/shared/lib/hooks-client-context.shared-runtime.js +60 -0
- package/webapp-dist/vendor/next/dist/shared/lib/html-context.shared-runtime.js +40 -0
- package/webapp-dist/vendor/next/dist/shared/lib/i18n/detect-domain-locale.js +25 -0
- package/webapp-dist/vendor/next/dist/shared/lib/i18n/get-locale-redirect.js +59 -0
- package/webapp-dist/vendor/next/dist/shared/lib/i18n/normalize-locale-path.js +54 -0
- package/webapp-dist/vendor/next/dist/shared/lib/image-blur-svg.js +22 -0
- package/webapp-dist/vendor/next/dist/shared/lib/image-config-context.shared-runtime.js +19 -0
- package/webapp-dist/vendor/next/dist/shared/lib/image-config.js +74 -0
- package/webapp-dist/vendor/next/dist/shared/lib/invariant-error.js +18 -0
- package/webapp-dist/vendor/next/dist/shared/lib/is-internal.js +39 -0
- package/webapp-dist/vendor/next/dist/shared/lib/is-plain-object.js +42 -0
- package/webapp-dist/vendor/next/dist/shared/lib/is-thenable.js +20 -0
- package/webapp-dist/vendor/next/dist/shared/lib/isomorphic/path.js +14 -0
- package/webapp-dist/vendor/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js +37 -0
- package/webapp-dist/vendor/next/dist/shared/lib/loadable-context.shared-runtime.js +19 -0
- package/webapp-dist/vendor/next/dist/shared/lib/loadable.shared-runtime.js +246 -0
- package/webapp-dist/vendor/next/dist/shared/lib/magic-identifier.js +218 -0
- package/webapp-dist/vendor/next/dist/shared/lib/match-local-pattern.js +46 -0
- package/webapp-dist/vendor/next/dist/shared/lib/match-remote-pattern.js +63 -0
- package/webapp-dist/vendor/next/dist/shared/lib/modern-browserslist-target.js +15 -0
- package/webapp-dist/vendor/next/dist/shared/lib/no-fallback-error.external.js +18 -0
- package/webapp-dist/vendor/next/dist/shared/lib/normalized-asset-prefix.js +28 -0
- package/webapp-dist/vendor/next/dist/shared/lib/page-path/absolute-path-to-page.js +26 -0
- package/webapp-dist/vendor/next/dist/shared/lib/page-path/denormalize-page-path.js +18 -0
- package/webapp-dist/vendor/next/dist/shared/lib/page-path/ensure-leading-slash.js +18 -0
- package/webapp-dist/vendor/next/dist/shared/lib/page-path/get-page-paths.js +40 -0
- package/webapp-dist/vendor/next/dist/shared/lib/page-path/normalize-data-path.js +23 -0
- package/webapp-dist/vendor/next/dist/shared/lib/page-path/normalize-page-path.js +26 -0
- package/webapp-dist/vendor/next/dist/shared/lib/page-path/normalize-path-sep.js +19 -0
- package/webapp-dist/vendor/next/dist/shared/lib/page-path/remove-page-path-tail.js +20 -0
- package/webapp-dist/vendor/next/dist/shared/lib/promise-with-resolvers.js +26 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/adapters.js +136 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/routes/app.js +122 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/utils/add-locale.js +28 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/utils/add-path-prefix.js +20 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/utils/add-path-suffix.js +20 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/utils/app-paths.js +51 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/utils/as-path-to-search-params.js +17 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/utils/cache-busting-search-param.js +24 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/utils/escape-path-delimiters.js +16 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/utils/format-next-pathname-info.js +27 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/utils/format-url.js +111 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/utils/get-dynamic-param.js +167 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/utils/get-next-pathname-info.js +52 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/utils/get-route-from-asset-path.js +25 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/utils/get-segment-param.js +90 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/utils/html-bots.js +17 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/utils/index.js +30 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/utils/interception-prefix-from-param-type.js +33 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/utils/interception-routes.js +108 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/utils/is-bot.js +57 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/utils/is-dynamic.js +26 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/utils/middleware-route-matcher.js +31 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/utils/parse-loader-tree.js +29 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/utils/parse-path.js +33 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/utils/parse-relative-url.js +36 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/utils/parse-url.js +32 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/utils/path-has-prefix.js +20 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/utils/path-match.js +49 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/utils/prepare-destination.js +292 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/utils/querystring.js +79 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/utils/relativize-url.js +40 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/utils/remove-path-prefix.js +39 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/utils/remove-trailing-slash.js +21 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/utils/resolve-param-value.js +116 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/utils/route-match-utils.js +113 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/utils/route-matcher.js +45 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/utils/route-regex.js +256 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router/utils/sorted-routes.js +244 -0
- package/webapp-dist/vendor/next/dist/shared/lib/router-context.shared-runtime.js +18 -0
- package/webapp-dist/vendor/next/dist/shared/lib/segment-cache/output-export-prefetch-encoding.js +52 -0
- package/webapp-dist/vendor/next/dist/shared/lib/segment-cache/segment-value-encoding.js +99 -0
- package/webapp-dist/vendor/next/dist/shared/lib/segment.js +102 -0
- package/webapp-dist/vendor/next/dist/shared/lib/server-inserted-html.shared-runtime.js +35 -0
- package/webapp-dist/vendor/next/dist/shared/lib/server-reference-info.js +52 -0
- package/webapp-dist/vendor/next/dist/shared/lib/side-effect.js +63 -0
- package/webapp-dist/vendor/next/dist/shared/lib/turbopack/internal-error.js +53 -0
- package/webapp-dist/vendor/next/dist/shared/lib/turbopack/utils.js +279 -0
- package/webapp-dist/vendor/next/dist/shared/lib/utils/warn-once.js +22 -0
- package/webapp-dist/vendor/next/dist/shared/lib/utils.js +207 -0
- package/webapp-dist/vendor/next/dist/shared/lib/zod.js +101 -0
- package/webapp-dist/vendor/next/dist/telemetry/anonymous-meta.js +89 -0
- package/webapp-dist/vendor/next/dist/telemetry/detached-flush.js +56 -0
- package/webapp-dist/vendor/next/dist/telemetry/events/build.js +174 -0
- package/webapp-dist/vendor/next/dist/telemetry/events/index.js +41 -0
- package/webapp-dist/vendor/next/dist/telemetry/events/plugins.js +51 -0
- package/webapp-dist/vendor/next/dist/telemetry/events/swc-load-failure.js +55 -0
- package/webapp-dist/vendor/next/dist/telemetry/events/version.js +66 -0
- package/webapp-dist/vendor/next/dist/telemetry/flush-telemetry.js +19 -0
- package/webapp-dist/vendor/next/dist/telemetry/post-telemetry-payload.js +48 -0
- package/webapp-dist/vendor/next/dist/telemetry/project-id.js +48 -0
- package/webapp-dist/vendor/next/dist/telemetry/storage.js +301 -0
- package/webapp-dist/vendor/next/dist/trace/index.js +54 -0
- package/webapp-dist/vendor/next/dist/trace/report/index.js +37 -0
- package/webapp-dist/vendor/next/dist/trace/report/to-json-build.js +137 -0
- package/webapp-dist/vendor/next/dist/trace/report/to-json.js +151 -0
- package/webapp-dist/vendor/next/dist/trace/report/to-telemetry.js +36 -0
- package/webapp-dist/vendor/next/dist/trace/shared.js +39 -0
- package/webapp-dist/vendor/next/dist/trace/trace.js +197 -0
- package/webapp-dist/vendor/next/package.json +380 -0
- /package/webapp-dist/.next/static/{6d9vQZJNWnbBaVrpBo9kx → BH8VS7faThzSEOQAvL7PS}/_buildManifest.js +0 -0
- /package/webapp-dist/.next/static/{6d9vQZJNWnbBaVrpBo9kx → BH8VS7faThzSEOQAvL7PS}/_clientMiddlewareManifest.json +0 -0
- /package/webapp-dist/.next/static/{6d9vQZJNWnbBaVrpBo9kx → BH8VS7faThzSEOQAvL7PS}/_ssgManifest.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/@next/env/dist/index.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/@next/env/package.json +0 -0
- /package/webapp-dist/{node_modules → vendor}/buffer-from/index.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/buffer-from/package.json +0 -0
- /package/webapp-dist/{node_modules → vendor}/client-only/index.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/client-only/package.json +0 -0
- /package/webapp-dist/{node_modules → vendor}/detect-libc/lib/detect-libc.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/detect-libc/lib/elf.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/detect-libc/lib/filesystem.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/detect-libc/lib/process.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/detect-libc/package.json +0 -0
- /package/webapp-dist/{node_modules → vendor}/react/cjs/react-jsx-dev-runtime.production.min.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/react/cjs/react-jsx-runtime.production.min.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/react/cjs/react.production.min.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/react/index.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/react/jsx-dev-runtime.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/react/jsx-runtime.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/react/package.json +0 -0
- /package/webapp-dist/{node_modules → vendor}/react-dom/cjs/react-dom-server-legacy.browser.production.min.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/react-dom/cjs/react-dom-server-legacy.node.production.min.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/react-dom/cjs/react-dom-server.browser.production.min.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/react-dom/cjs/react-dom-server.node.production.min.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/react-dom/cjs/react-dom.production.min.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/react-dom/index.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/react-dom/package.json +0 -0
- /package/webapp-dist/{node_modules → vendor}/react-dom/server.browser.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/react-dom/server.node.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/scheduler/cjs/scheduler.development.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/scheduler/cjs/scheduler.production.min.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/scheduler/index.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/scheduler/package.json +0 -0
- /package/webapp-dist/{node_modules → vendor}/semver/classes/comparator.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/semver/classes/range.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/semver/classes/semver.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/semver/functions/cmp.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/semver/functions/coerce.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/semver/functions/compare.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/semver/functions/eq.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/semver/functions/gt.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/semver/functions/gte.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/semver/functions/lt.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/semver/functions/lte.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/semver/functions/neq.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/semver/functions/parse.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/semver/functions/satisfies.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/semver/internal/constants.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/semver/internal/debug.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/semver/internal/identifiers.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/semver/internal/lrucache.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/semver/internal/parse-options.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/semver/internal/re.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/semver/package.json +0 -0
- /package/webapp-dist/{node_modules → vendor}/sharp/lib/channel.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/sharp/lib/colour.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/sharp/lib/composite.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/sharp/lib/constructor.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/sharp/lib/index.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/sharp/lib/input.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/sharp/lib/is.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/sharp/lib/libvips.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/sharp/lib/operation.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/sharp/lib/output.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/sharp/lib/resize.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/sharp/lib/sharp.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/sharp/lib/utility.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/sharp/package.json +0 -0
- /package/webapp-dist/{node_modules → vendor}/source-map/lib/array-set.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/source-map/lib/base64-vlq.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/source-map/lib/base64.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/source-map/lib/binary-search.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/source-map/lib/mapping-list.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/source-map/lib/quick-sort.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/source-map/lib/source-map-consumer.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/source-map/lib/source-map-generator.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/source-map/lib/source-node.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/source-map/lib/util.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/source-map/package.json +0 -0
- /package/webapp-dist/{node_modules → vendor}/source-map/source-map.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/source-map-support/LICENSE.md +0 -0
- /package/webapp-dist/{node_modules → vendor}/source-map-support/README.md +0 -0
- /package/webapp-dist/{node_modules → vendor}/source-map-support/browser-source-map-support.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/source-map-support/package.json +0 -0
- /package/webapp-dist/{node_modules → vendor}/source-map-support/register-hook-require.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/source-map-support/register.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/source-map-support/source-map-support.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/styled-jsx/dist/index/index.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/styled-jsx/index.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/styled-jsx/package.json +0 -0
- /package/webapp-dist/{node_modules → vendor}/styled-jsx/style.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/typescript/lib/_tsc.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/typescript/lib/_tsserver.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/typescript/lib/_typingsInstaller.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/typescript/lib/cs/diagnosticMessages.generated.json +0 -0
- /package/webapp-dist/{node_modules → vendor}/typescript/lib/de/diagnosticMessages.generated.json +0 -0
- /package/webapp-dist/{node_modules → vendor}/typescript/lib/es/diagnosticMessages.generated.json +0 -0
- /package/webapp-dist/{node_modules → vendor}/typescript/lib/fr/diagnosticMessages.generated.json +0 -0
- /package/webapp-dist/{node_modules → vendor}/typescript/lib/it/diagnosticMessages.generated.json +0 -0
- /package/webapp-dist/{node_modules → vendor}/typescript/lib/ja/diagnosticMessages.generated.json +0 -0
- /package/webapp-dist/{node_modules → vendor}/typescript/lib/ko/diagnosticMessages.generated.json +0 -0
- /package/webapp-dist/{node_modules → vendor}/typescript/lib/pl/diagnosticMessages.generated.json +0 -0
- /package/webapp-dist/{node_modules → vendor}/typescript/lib/pt-br/diagnosticMessages.generated.json +0 -0
- /package/webapp-dist/{node_modules → vendor}/typescript/lib/ru/diagnosticMessages.generated.json +0 -0
- /package/webapp-dist/{node_modules → vendor}/typescript/lib/tr/diagnosticMessages.generated.json +0 -0
- /package/webapp-dist/{node_modules → vendor}/typescript/lib/tsc.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/typescript/lib/tsserver.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/typescript/lib/tsserverlibrary.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/typescript/lib/typesMap.json +0 -0
- /package/webapp-dist/{node_modules → vendor}/typescript/lib/typescript.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/typescript/lib/typingsInstaller.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/typescript/lib/watchGuard.js +0 -0
- /package/webapp-dist/{node_modules → vendor}/typescript/lib/zh-cn/diagnosticMessages.generated.json +0 -0
- /package/webapp-dist/{node_modules → vendor}/typescript/lib/zh-tw/diagnosticMessages.generated.json +0 -0
- /package/webapp-dist/{node_modules → vendor}/typescript/package.json +0 -0
|
@@ -0,0 +1,3526 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "renderToHTMLOrFlight", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return renderToHTMLOrFlight;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _jsxruntime = require("react/jsx-runtime");
|
|
12
|
+
const _workasyncstorageexternal = require("../app-render/work-async-storage.external");
|
|
13
|
+
const _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
|
|
14
|
+
const _renderresult = /*#__PURE__*/ _interop_require_default(require("../render-result"));
|
|
15
|
+
const _nodewebstreamshelper = require("../stream-utils/node-web-streams-helper");
|
|
16
|
+
const _internalutils = require("../internal-utils");
|
|
17
|
+
const _approuterheaders = require("../../client/components/app-router-headers");
|
|
18
|
+
const _metadatacontext = require("../../lib/metadata/metadata-context");
|
|
19
|
+
const _requeststore = require("../async-storage/request-store");
|
|
20
|
+
const _workstore = require("../async-storage/work-store");
|
|
21
|
+
const _httpaccessfallback = require("../../client/components/http-access-fallback/http-access-fallback");
|
|
22
|
+
const _redirect = require("../../client/components/redirect");
|
|
23
|
+
const _redirecterror = require("../../client/components/redirect-error");
|
|
24
|
+
const _implicittags = require("../lib/implicit-tags");
|
|
25
|
+
const _constants = require("../lib/trace/constants");
|
|
26
|
+
const _tracer = require("../lib/trace/tracer");
|
|
27
|
+
const _flightrenderresult = require("./flight-render-result");
|
|
28
|
+
const _createerrorhandler = require("./create-error-handler");
|
|
29
|
+
const _getshortdynamicparamtype = require("./get-short-dynamic-param-type");
|
|
30
|
+
const _getsegmentparam = require("../../shared/lib/router/utils/get-segment-param");
|
|
31
|
+
const _getscriptnoncefromheader = require("./get-script-nonce-from-header");
|
|
32
|
+
const _parseandvalidateflightrouterstate = require("./parse-and-validate-flight-router-state");
|
|
33
|
+
const _createflightrouterstatefromloadertree = require("./create-flight-router-state-from-loader-tree");
|
|
34
|
+
const _actionhandler = require("./action-handler");
|
|
35
|
+
const _bailouttocsr = require("../../shared/lib/lazy-dynamic/bailout-to-csr");
|
|
36
|
+
const _log = require("../../build/output/log");
|
|
37
|
+
const _requestcookies = require("../web/spec-extension/adapters/request-cookies");
|
|
38
|
+
const _serverinsertedhtml = require("./server-inserted-html");
|
|
39
|
+
const _requiredscripts = require("./required-scripts");
|
|
40
|
+
const _addpathprefix = require("../../shared/lib/router/utils/add-path-prefix");
|
|
41
|
+
const _makegetserverinsertedhtml = require("./make-get-server-inserted-html");
|
|
42
|
+
const _walktreewithflightrouterstate = require("./walk-tree-with-flight-router-state");
|
|
43
|
+
const _createcomponenttree = require("./create-component-tree");
|
|
44
|
+
const _getassetquerystring = require("./get-asset-query-string");
|
|
45
|
+
const _manifestssingleton = require("./manifests-singleton");
|
|
46
|
+
const _postponedstate = require("./postponed-state");
|
|
47
|
+
const _hooksservercontext = require("../../client/components/hooks-server-context");
|
|
48
|
+
const _useflightresponse = require("./use-flight-response");
|
|
49
|
+
const _staticgenerationbailout = require("../../client/components/static-generation-bailout");
|
|
50
|
+
const _formatservererror = require("../../lib/format-server-error");
|
|
51
|
+
const _dynamicrendering = require("./dynamic-rendering");
|
|
52
|
+
const _clientcomponentrendererlogger = require("../client-component-renderer-logger");
|
|
53
|
+
const _helpers = require("../base-http/helpers");
|
|
54
|
+
const _parserelativeurl = require("../../shared/lib/router/utils/parse-relative-url");
|
|
55
|
+
const _approuter = /*#__PURE__*/ _interop_require_default(require("../../client/components/app-router"));
|
|
56
|
+
const _serveractionrequestmeta = require("../lib/server-action-request-meta");
|
|
57
|
+
const _createinitialrouterstate = require("../../client/components/router-reducer/create-initial-router-state");
|
|
58
|
+
const _approuterinstance = require("../../client/components/app-router-instance");
|
|
59
|
+
const _utils = require("../instrumentation/utils");
|
|
60
|
+
const _segment = require("../../shared/lib/segment");
|
|
61
|
+
const _apprenderprerenderutils = require("./app-render-prerender-utils");
|
|
62
|
+
const _prospectiverenderutils = require("./prospective-render-utils");
|
|
63
|
+
const _apprenderrenderutils = require("./app-render-render-utils");
|
|
64
|
+
const _scheduler = require("../../lib/scheduler");
|
|
65
|
+
const _workunitasyncstorageexternal = require("./work-unit-async-storage.external");
|
|
66
|
+
const _consoleasyncstorageexternal = require("./console-async-storage.external");
|
|
67
|
+
const _cachesignal = require("./cache-signal");
|
|
68
|
+
const _utils1 = require("../lib/trace/utils");
|
|
69
|
+
const _invarianterror = require("../../shared/lib/invariant-error");
|
|
70
|
+
const _constants1 = require("../../lib/constants");
|
|
71
|
+
const _createcomponentstylesandscripts = require("./create-component-styles-and-scripts");
|
|
72
|
+
const _parseloadertree = require("../../shared/lib/router/utils/parse-loader-tree");
|
|
73
|
+
const _resumedatacache = require("../resume-data-cache/resume-data-cache");
|
|
74
|
+
const _iserror = /*#__PURE__*/ _interop_require_default(require("../../lib/is-error"));
|
|
75
|
+
const _createserverinsertedmetadata = require("./metadata-insertion/create-server-inserted-metadata");
|
|
76
|
+
const _serverutils = require("../server-utils");
|
|
77
|
+
const _revalidationutils = require("../revalidation-utils");
|
|
78
|
+
const _trackmoduleloadingexternal = require("./module-loading/track-module-loading.external");
|
|
79
|
+
const _reactlargeshellerror = require("./react-large-shell-error");
|
|
80
|
+
const _segmentexplorerpath = require("./segment-explorer-path");
|
|
81
|
+
const _requestmeta = require("../request-meta");
|
|
82
|
+
const _getdynamicparam = require("../../shared/lib/router/utils/get-dynamic-param");
|
|
83
|
+
const _promisewithresolvers = require("../../shared/lib/promise-with-resolvers");
|
|
84
|
+
const _imageconfigcontextsharedruntime = require("../../shared/lib/image-config-context.shared-runtime");
|
|
85
|
+
const _imageconfig = require("../../shared/lib/image-config");
|
|
86
|
+
const _stagedrendering = require("./staged-rendering");
|
|
87
|
+
const _stagedvalidation = require("./staged-validation");
|
|
88
|
+
const _warnonce = require("../../shared/lib/utils/warn-once");
|
|
89
|
+
function _interop_require_default(obj) {
|
|
90
|
+
return obj && obj.__esModule ? obj : {
|
|
91
|
+
default: obj
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
95
|
+
if (typeof WeakMap !== "function") return null;
|
|
96
|
+
var cacheBabelInterop = new WeakMap();
|
|
97
|
+
var cacheNodeInterop = new WeakMap();
|
|
98
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
99
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
100
|
+
})(nodeInterop);
|
|
101
|
+
}
|
|
102
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
|
103
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
104
|
+
return obj;
|
|
105
|
+
}
|
|
106
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
107
|
+
return {
|
|
108
|
+
default: obj
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
112
|
+
if (cache && cache.has(obj)) {
|
|
113
|
+
return cache.get(obj);
|
|
114
|
+
}
|
|
115
|
+
var newObj = {
|
|
116
|
+
__proto__: null
|
|
117
|
+
};
|
|
118
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
119
|
+
for(var key in obj){
|
|
120
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
121
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
122
|
+
if (desc && (desc.get || desc.set)) {
|
|
123
|
+
Object.defineProperty(newObj, key, desc);
|
|
124
|
+
} else {
|
|
125
|
+
newObj[key] = obj[key];
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
newObj.default = obj;
|
|
130
|
+
if (cache) {
|
|
131
|
+
cache.set(obj, newObj);
|
|
132
|
+
}
|
|
133
|
+
return newObj;
|
|
134
|
+
}
|
|
135
|
+
const flightDataPathHeadKey = 'h';
|
|
136
|
+
const getFlightViewportKey = (requestId)=>requestId + 'v';
|
|
137
|
+
const getFlightMetadataKey = (requestId)=>requestId + 'm';
|
|
138
|
+
const filterStackFrame = process.env.NODE_ENV !== 'production' ? require('../lib/source-maps').filterStackFrameDEV : undefined;
|
|
139
|
+
function parseRequestHeaders(headers, options) {
|
|
140
|
+
// runtime prefetch requests are *not* treated as prefetch requests
|
|
141
|
+
// (TODO: this is confusing, we should refactor this to express this better)
|
|
142
|
+
const isPrefetchRequest = headers[_approuterheaders.NEXT_ROUTER_PREFETCH_HEADER] === '1';
|
|
143
|
+
const isRuntimePrefetchRequest = headers[_approuterheaders.NEXT_ROUTER_PREFETCH_HEADER] === '2';
|
|
144
|
+
const isHmrRefresh = headers[_approuterheaders.NEXT_HMR_REFRESH_HEADER] !== undefined;
|
|
145
|
+
const isRSCRequest = headers[_approuterheaders.RSC_HEADER] !== undefined;
|
|
146
|
+
const shouldProvideFlightRouterState = isRSCRequest && (!isPrefetchRequest || !options.isRoutePPREnabled);
|
|
147
|
+
const flightRouterState = shouldProvideFlightRouterState ? (0, _parseandvalidateflightrouterstate.parseAndValidateFlightRouterState)(headers[_approuterheaders.NEXT_ROUTER_STATE_TREE_HEADER]) : undefined;
|
|
148
|
+
// Checks if this is a prefetch of the Route Tree by the Segment Cache
|
|
149
|
+
const isRouteTreePrefetchRequest = headers[_approuterheaders.NEXT_ROUTER_SEGMENT_PREFETCH_HEADER] === '/_tree';
|
|
150
|
+
const csp = headers['content-security-policy'] || headers['content-security-policy-report-only'];
|
|
151
|
+
const nonce = typeof csp === 'string' ? (0, _getscriptnoncefromheader.getScriptNonceFromHeader)(csp) : undefined;
|
|
152
|
+
const previouslyRevalidatedTags = (0, _serverutils.getPreviouslyRevalidatedTags)(headers, options.previewModeId);
|
|
153
|
+
let requestId;
|
|
154
|
+
let htmlRequestId;
|
|
155
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
156
|
+
// The request IDs are only used in development mode to send debug
|
|
157
|
+
// information to the matching client (identified by the HTML request ID
|
|
158
|
+
// that was sent to the client with the HTML document) for the current
|
|
159
|
+
// request (identified by the request ID, as defined by the client).
|
|
160
|
+
requestId = typeof headers[_approuterheaders.NEXT_REQUEST_ID_HEADER] === 'string' ? headers[_approuterheaders.NEXT_REQUEST_ID_HEADER] : undefined;
|
|
161
|
+
htmlRequestId = typeof headers[_approuterheaders.NEXT_HTML_REQUEST_ID_HEADER] === 'string' ? headers[_approuterheaders.NEXT_HTML_REQUEST_ID_HEADER] : undefined;
|
|
162
|
+
}
|
|
163
|
+
return {
|
|
164
|
+
flightRouterState,
|
|
165
|
+
isPrefetchRequest,
|
|
166
|
+
isRuntimePrefetchRequest,
|
|
167
|
+
isRouteTreePrefetchRequest,
|
|
168
|
+
isHmrRefresh,
|
|
169
|
+
isRSCRequest,
|
|
170
|
+
nonce,
|
|
171
|
+
previouslyRevalidatedTags,
|
|
172
|
+
requestId,
|
|
173
|
+
htmlRequestId
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
function createNotFoundLoaderTree(loaderTree) {
|
|
177
|
+
const components = loaderTree[2];
|
|
178
|
+
const hasGlobalNotFound = !!components['global-not-found'];
|
|
179
|
+
const notFoundTreeComponents = hasGlobalNotFound ? {
|
|
180
|
+
layout: components['global-not-found'],
|
|
181
|
+
page: [
|
|
182
|
+
()=>null,
|
|
183
|
+
'next/dist/client/components/builtin/empty-stub'
|
|
184
|
+
]
|
|
185
|
+
} : {
|
|
186
|
+
page: components['not-found']
|
|
187
|
+
};
|
|
188
|
+
return [
|
|
189
|
+
'',
|
|
190
|
+
{
|
|
191
|
+
children: [
|
|
192
|
+
_segment.PAGE_SEGMENT_KEY,
|
|
193
|
+
{},
|
|
194
|
+
notFoundTreeComponents
|
|
195
|
+
]
|
|
196
|
+
},
|
|
197
|
+
// When global-not-found is present, skip layout from components
|
|
198
|
+
hasGlobalNotFound ? components : {}
|
|
199
|
+
];
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Returns a function that parses the dynamic segment and return the associated value.
|
|
203
|
+
*/ function makeGetDynamicParamFromSegment(interpolatedParams, fallbackRouteParams) {
|
|
204
|
+
return function getDynamicParamFromSegment(// [slug] / [[slug]] / [...slug]
|
|
205
|
+
segment) {
|
|
206
|
+
const segmentParam = (0, _getsegmentparam.getSegmentParam)(segment);
|
|
207
|
+
if (!segmentParam) {
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
const segmentKey = segmentParam.paramName;
|
|
211
|
+
const dynamicParamType = _getshortdynamicparamtype.dynamicParamTypes[segmentParam.paramType];
|
|
212
|
+
return (0, _getdynamicparam.getDynamicParam)(interpolatedParams, segmentKey, dynamicParamType, fallbackRouteParams);
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
function NonIndex({ createElement, pagePath, statusCode, isPossibleServerAction }) {
|
|
216
|
+
const is404Page = pagePath === '/404';
|
|
217
|
+
const isInvalidStatusCode = typeof statusCode === 'number' && statusCode > 400;
|
|
218
|
+
// Only render noindex for page request, skip for server actions
|
|
219
|
+
// TODO: is this correct if `isPossibleServerAction` is a false positive?
|
|
220
|
+
if (!isPossibleServerAction && (is404Page || isInvalidStatusCode)) {
|
|
221
|
+
return createElement('meta', {
|
|
222
|
+
name: 'robots',
|
|
223
|
+
content: 'noindex'
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
return null;
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* This is used by server actions & client-side navigations to generate RSC data from a client-side request.
|
|
230
|
+
* This function is only called on "dynamic" requests (ie, there wasn't already a static response).
|
|
231
|
+
* It uses request headers (namely `next-router-state-tree`) to determine where to start rendering.
|
|
232
|
+
*/ async function generateDynamicRSCPayload(ctx, options) {
|
|
233
|
+
// Flight data that is going to be passed to the browser.
|
|
234
|
+
// Currently a single item array but in the future multiple patches might be combined in a single request.
|
|
235
|
+
// We initialize `flightData` to an empty string because the client router knows how to tolerate
|
|
236
|
+
// it (treating it as an MPA navigation). The only time this function wouldn't generate flight data
|
|
237
|
+
// is for server actions, if the server action handler instructs this function to skip it. When the server
|
|
238
|
+
// action reducer sees a falsy value, it'll simply resolve the action with no data.
|
|
239
|
+
let flightData = '';
|
|
240
|
+
const { componentMod: { routeModule: { userland: { loaderTree } }, createElement, createMetadataComponents, Fragment }, getDynamicParamFromSegment, query, requestId, flightRouterState, workStore, url } = ctx;
|
|
241
|
+
const serveStreamingMetadata = !!ctx.renderOpts.serveStreamingMetadata;
|
|
242
|
+
if (!(options == null ? void 0 : options.skipPageRendering)) {
|
|
243
|
+
const preloadCallbacks = [];
|
|
244
|
+
const { Viewport, Metadata, MetadataOutlet } = createMetadataComponents({
|
|
245
|
+
tree: loaderTree,
|
|
246
|
+
parsedQuery: query,
|
|
247
|
+
pathname: url.pathname,
|
|
248
|
+
metadataContext: (0, _metadatacontext.createMetadataContext)(ctx.renderOpts),
|
|
249
|
+
getDynamicParamFromSegment,
|
|
250
|
+
workStore,
|
|
251
|
+
serveStreamingMetadata
|
|
252
|
+
});
|
|
253
|
+
flightData = (await (0, _walktreewithflightrouterstate.walkTreeWithFlightRouterState)({
|
|
254
|
+
ctx,
|
|
255
|
+
loaderTreeToFilter: loaderTree,
|
|
256
|
+
parentParams: {},
|
|
257
|
+
flightRouterState,
|
|
258
|
+
// For flight, render metadata inside leaf page
|
|
259
|
+
rscHead: createElement(Fragment, {
|
|
260
|
+
key: flightDataPathHeadKey
|
|
261
|
+
}, createElement(NonIndex, {
|
|
262
|
+
createElement,
|
|
263
|
+
pagePath: ctx.pagePath,
|
|
264
|
+
statusCode: ctx.res.statusCode,
|
|
265
|
+
isPossibleServerAction: ctx.isPossibleServerAction
|
|
266
|
+
}), createElement(Viewport, {
|
|
267
|
+
key: getFlightViewportKey(requestId)
|
|
268
|
+
}), createElement(Metadata, {
|
|
269
|
+
key: getFlightMetadataKey(requestId)
|
|
270
|
+
})),
|
|
271
|
+
injectedCSS: new Set(),
|
|
272
|
+
injectedJS: new Set(),
|
|
273
|
+
injectedFontPreloadTags: new Set(),
|
|
274
|
+
rootLayoutIncluded: false,
|
|
275
|
+
preloadCallbacks,
|
|
276
|
+
MetadataOutlet
|
|
277
|
+
})).map((path)=>path.slice(1)) // remove the '' (root) segment
|
|
278
|
+
;
|
|
279
|
+
}
|
|
280
|
+
const varyHeader = ctx.res.getHeader('vary');
|
|
281
|
+
const couldBeIntercepted = typeof varyHeader === 'string' && varyHeader.includes(_approuterheaders.NEXT_URL);
|
|
282
|
+
// If we have an action result, then this is a server action response.
|
|
283
|
+
// We can rely on this because `ActionResult` will always be a promise, even if
|
|
284
|
+
// the result is falsey.
|
|
285
|
+
if (options == null ? void 0 : options.actionResult) {
|
|
286
|
+
return {
|
|
287
|
+
a: options.actionResult,
|
|
288
|
+
f: flightData,
|
|
289
|
+
b: ctx.sharedContext.buildId,
|
|
290
|
+
q: getRenderedSearch(query),
|
|
291
|
+
i: !!couldBeIntercepted
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
// Otherwise, it's a regular RSC response.
|
|
295
|
+
const baseResponse = {
|
|
296
|
+
b: ctx.sharedContext.buildId,
|
|
297
|
+
f: flightData,
|
|
298
|
+
q: getRenderedSearch(query),
|
|
299
|
+
i: !!couldBeIntercepted,
|
|
300
|
+
S: workStore.isStaticGeneration
|
|
301
|
+
};
|
|
302
|
+
// For runtime prefetches, we encode the stale time and isPartial flag in the response body
|
|
303
|
+
// rather than relying on response headers. Both of these values will be transformed
|
|
304
|
+
// by a transform stream before being sent to the client.
|
|
305
|
+
if ((options == null ? void 0 : options.runtimePrefetchSentinel) !== undefined) {
|
|
306
|
+
return {
|
|
307
|
+
...baseResponse,
|
|
308
|
+
rp: [
|
|
309
|
+
options.runtimePrefetchSentinel
|
|
310
|
+
]
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
return baseResponse;
|
|
314
|
+
}
|
|
315
|
+
function createErrorContext(ctx, renderSource) {
|
|
316
|
+
return {
|
|
317
|
+
routerKind: 'App Router',
|
|
318
|
+
routePath: ctx.pagePath,
|
|
319
|
+
// TODO: is this correct if `isPossibleServerAction` is a false positive?
|
|
320
|
+
routeType: ctx.isPossibleServerAction ? 'action' : 'render',
|
|
321
|
+
renderSource,
|
|
322
|
+
revalidateReason: (0, _utils.getRevalidateReason)(ctx.workStore)
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Produces a RenderResult containing the Flight data for the given request. See
|
|
327
|
+
* `generateDynamicRSCPayload` for information on the contents of the render result.
|
|
328
|
+
*/ async function generateDynamicFlightRenderResult(req, ctx, requestStore, options) {
|
|
329
|
+
const { componentMod: { renderToReadableStream }, htmlRequestId, renderOpts, requestId, workStore } = ctx;
|
|
330
|
+
const { dev = false, onInstrumentationRequestError, setReactDebugChannel, nextExport = false } = renderOpts;
|
|
331
|
+
function onFlightDataRenderError(err, silenceLog) {
|
|
332
|
+
return onInstrumentationRequestError == null ? void 0 : onInstrumentationRequestError(err, req, createErrorContext(ctx, 'react-server-components-payload'), silenceLog);
|
|
333
|
+
}
|
|
334
|
+
const onError = (0, _createerrorhandler.createReactServerErrorHandler)(dev, nextExport, workStore.reactServerErrorsByDigest, onFlightDataRenderError);
|
|
335
|
+
const debugChannel = setReactDebugChannel && createDebugChannel();
|
|
336
|
+
if (debugChannel) {
|
|
337
|
+
setReactDebugChannel(debugChannel.clientSide, htmlRequestId, requestId);
|
|
338
|
+
}
|
|
339
|
+
const { clientModules } = (0, _manifestssingleton.getClientReferenceManifest)();
|
|
340
|
+
// For app dir, use the bundled version of Flight server renderer (renderToReadableStream)
|
|
341
|
+
// which contains the subset React.
|
|
342
|
+
const rscPayload = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, generateDynamicRSCPayload, ctx, options);
|
|
343
|
+
const flightReadableStream = _workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, renderToReadableStream, rscPayload, clientModules, {
|
|
344
|
+
onError,
|
|
345
|
+
temporaryReferences: options == null ? void 0 : options.temporaryReferences,
|
|
346
|
+
filterStackFrame,
|
|
347
|
+
debugChannel: debugChannel == null ? void 0 : debugChannel.serverSide
|
|
348
|
+
});
|
|
349
|
+
return new _flightrenderresult.FlightRenderResult(flightReadableStream, {
|
|
350
|
+
fetchMetrics: workStore.fetchMetrics
|
|
351
|
+
}, options == null ? void 0 : options.waitUntil);
|
|
352
|
+
}
|
|
353
|
+
async function stagedRenderToReadableStreamWithoutCachesInDev(ctx, requestStore, getPayload, options) {
|
|
354
|
+
const { componentMod: { renderToReadableStream } } = ctx;
|
|
355
|
+
// We're rendering while bypassing caches,
|
|
356
|
+
// so we have no hope of showing a useful runtime stage.
|
|
357
|
+
// But we still want things like `params` to show up in devtools correctly,
|
|
358
|
+
// which relies on mechanisms we've set up for staged rendering,
|
|
359
|
+
// so we do a 2-task version (Static -> Dynamic) instead.
|
|
360
|
+
// We aren't doing any validation in this kind of render so we say there
|
|
361
|
+
// is not runtime prefetch regardless of whether there is or not
|
|
362
|
+
const hasRuntimePrefetch = false;
|
|
363
|
+
// We aren't filling caches so we don't need to abort this render, it'll
|
|
364
|
+
// stream in a single pass
|
|
365
|
+
const abortSignal = null;
|
|
366
|
+
const stageController = new _stagedrendering.StagedRenderingController(abortSignal, hasRuntimePrefetch);
|
|
367
|
+
const environmentName = ()=>{
|
|
368
|
+
const currentStage = stageController.currentStage;
|
|
369
|
+
switch(currentStage){
|
|
370
|
+
case _stagedrendering.RenderStage.Before:
|
|
371
|
+
case _stagedrendering.RenderStage.Static:
|
|
372
|
+
return 'Prerender';
|
|
373
|
+
case _stagedrendering.RenderStage.Runtime:
|
|
374
|
+
case _stagedrendering.RenderStage.Dynamic:
|
|
375
|
+
case _stagedrendering.RenderStage.Abandoned:
|
|
376
|
+
return 'Server';
|
|
377
|
+
default:
|
|
378
|
+
currentStage;
|
|
379
|
+
throw Object.defineProperty(new _invarianterror.InvariantError(`Invalid render stage: ${currentStage}`), "__NEXT_ERROR_CODE", {
|
|
380
|
+
value: "E881",
|
|
381
|
+
enumerable: false,
|
|
382
|
+
configurable: true
|
|
383
|
+
});
|
|
384
|
+
}
|
|
385
|
+
};
|
|
386
|
+
requestStore.stagedRendering = stageController;
|
|
387
|
+
requestStore.asyncApiPromises = createAsyncApiPromisesInDev(stageController, requestStore.cookies, requestStore.mutableCookies, requestStore.headers);
|
|
388
|
+
const { clientModules } = (0, _manifestssingleton.getClientReferenceManifest)();
|
|
389
|
+
const rscPayload = await getPayload(requestStore);
|
|
390
|
+
return await _workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, _apprenderrenderutils.scheduleInSequentialTasks, ()=>{
|
|
391
|
+
stageController.advanceStage(_stagedrendering.RenderStage.Static);
|
|
392
|
+
return renderToReadableStream(rscPayload, clientModules, {
|
|
393
|
+
...options,
|
|
394
|
+
environmentName
|
|
395
|
+
});
|
|
396
|
+
}, ()=>{
|
|
397
|
+
stageController.advanceStage(_stagedrendering.RenderStage.Dynamic);
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* Fork of `generateDynamicFlightRenderResult` that renders using `renderWithRestartOnCacheMissInDev`
|
|
402
|
+
* to ensure correct separation of environments Prerender/Server (for use in Cache Components)
|
|
403
|
+
*/ async function generateDynamicFlightRenderResultWithStagesInDev(req, ctx, initialRequestStore, createRequestStore, devFallbackParams) {
|
|
404
|
+
const { htmlRequestId, renderOpts, requestId, workStore, componentMod: { createElement }, url } = ctx;
|
|
405
|
+
const { dev = false, onInstrumentationRequestError, setReactDebugChannel, setCacheStatus, nextExport = false } = renderOpts;
|
|
406
|
+
function onFlightDataRenderError(err, silenceLog) {
|
|
407
|
+
return onInstrumentationRequestError == null ? void 0 : onInstrumentationRequestError(err, req, createErrorContext(ctx, 'react-server-components-payload'), silenceLog);
|
|
408
|
+
}
|
|
409
|
+
const onError = (0, _createerrorhandler.createReactServerErrorHandler)(dev, nextExport, workStore.reactServerErrorsByDigest, onFlightDataRenderError);
|
|
410
|
+
// We only validate RSC requests if it is for HMR refreshes since we know we
|
|
411
|
+
// will render all the layouts necessary to perform the validation.
|
|
412
|
+
const shouldValidate = !isBypassingCachesInDev(renderOpts, initialRequestStore) && initialRequestStore.isHmrRefresh === true;
|
|
413
|
+
const getPayload = async (requestStore)=>{
|
|
414
|
+
const payload = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, generateDynamicRSCPayload, ctx, undefined);
|
|
415
|
+
if (isBypassingCachesInDev(renderOpts, requestStore)) {
|
|
416
|
+
// Mark the RSC payload to indicate that caches were bypassed in dev.
|
|
417
|
+
// This lets the client know not to cache anything based on this render.
|
|
418
|
+
payload._bypassCachesInDev = createElement(WarnForBypassCachesInDev, {
|
|
419
|
+
route: workStore.route
|
|
420
|
+
});
|
|
421
|
+
} else if (shouldValidate) {
|
|
422
|
+
// If this payload will be used for validation, it needs to contain the
|
|
423
|
+
// canonical URL. Without it we'd get an error.
|
|
424
|
+
payload.c = prepareInitialCanonicalUrl(url);
|
|
425
|
+
}
|
|
426
|
+
return payload;
|
|
427
|
+
};
|
|
428
|
+
let debugChannel;
|
|
429
|
+
let stream;
|
|
430
|
+
if (// We only do this flow if we can safely recreate the store from scratch
|
|
431
|
+
// (which is not the case for renders after an action)
|
|
432
|
+
createRequestStore && // We only do this flow if we're not bypassing caches in dev using
|
|
433
|
+
// "disable cache" in devtools or a hard refresh (cache-control: "no-store")
|
|
434
|
+
!isBypassingCachesInDev(renderOpts, initialRequestStore)) {
|
|
435
|
+
// Before we kick off the render, we set the cache status back to it's initial state
|
|
436
|
+
// in case a previous render bypassed the cache.
|
|
437
|
+
if (setCacheStatus) {
|
|
438
|
+
setCacheStatus('ready', htmlRequestId);
|
|
439
|
+
}
|
|
440
|
+
const { stream: serverStream, accumulatedChunksPromise, staticInterruptReason, runtimeInterruptReason, staticStageEndTime, runtimeStageEndTime, debugChannel: returnedDebugChannel, requestStore: finalRequestStore } = await renderWithRestartOnCacheMissInDev(ctx, initialRequestStore, createRequestStore, getPayload, onError);
|
|
441
|
+
if (shouldValidate) {
|
|
442
|
+
let validationDebugChannelClient = undefined;
|
|
443
|
+
if (returnedDebugChannel) {
|
|
444
|
+
const [t1, t2] = returnedDebugChannel.clientSide.readable.tee();
|
|
445
|
+
returnedDebugChannel.clientSide.readable = t1;
|
|
446
|
+
validationDebugChannelClient = nodeStreamFromReadableStream(t2);
|
|
447
|
+
}
|
|
448
|
+
_consoleasyncstorageexternal.consoleAsyncStorage.run({
|
|
449
|
+
dim: true
|
|
450
|
+
}, spawnStaticShellValidationInDev, accumulatedChunksPromise, staticInterruptReason, runtimeInterruptReason, staticStageEndTime, runtimeStageEndTime, ctx, finalRequestStore, devFallbackParams, validationDebugChannelClient);
|
|
451
|
+
}
|
|
452
|
+
debugChannel = returnedDebugChannel;
|
|
453
|
+
stream = serverStream;
|
|
454
|
+
} else {
|
|
455
|
+
// We're either bypassing caches or we can't restart the render.
|
|
456
|
+
// Do a dynamic render, but with (basic) environment labels.
|
|
457
|
+
// Set cache status to bypass when specifically bypassing caches in dev
|
|
458
|
+
if (setCacheStatus) {
|
|
459
|
+
setCacheStatus('bypass', htmlRequestId);
|
|
460
|
+
}
|
|
461
|
+
debugChannel = setReactDebugChannel && createDebugChannel();
|
|
462
|
+
stream = await stagedRenderToReadableStreamWithoutCachesInDev(ctx, initialRequestStore, getPayload, {
|
|
463
|
+
onError: onError,
|
|
464
|
+
filterStackFrame,
|
|
465
|
+
debugChannel: debugChannel == null ? void 0 : debugChannel.serverSide
|
|
466
|
+
});
|
|
467
|
+
}
|
|
468
|
+
if (debugChannel && setReactDebugChannel) {
|
|
469
|
+
setReactDebugChannel(debugChannel.clientSide, htmlRequestId, requestId);
|
|
470
|
+
}
|
|
471
|
+
return new _flightrenderresult.FlightRenderResult(stream, {
|
|
472
|
+
fetchMetrics: workStore.fetchMetrics
|
|
473
|
+
});
|
|
474
|
+
}
|
|
475
|
+
async function generateRuntimePrefetchResult(req, ctx, requestStore) {
|
|
476
|
+
const { workStore, renderOpts } = ctx;
|
|
477
|
+
const { nextExport = false, onInstrumentationRequestError } = renderOpts;
|
|
478
|
+
function onFlightDataRenderError(err, silenceLog) {
|
|
479
|
+
return onInstrumentationRequestError == null ? void 0 : onInstrumentationRequestError(err, req, // TODO(runtime-ppr): should we use a different value?
|
|
480
|
+
createErrorContext(ctx, 'react-server-components-payload'), silenceLog);
|
|
481
|
+
}
|
|
482
|
+
const onError = (0, _createerrorhandler.createReactServerErrorHandler)(false, nextExport, workStore.reactServerErrorsByDigest, onFlightDataRenderError);
|
|
483
|
+
const metadata = {};
|
|
484
|
+
// Generate a random sentinel that will be used as a placeholder in the payload
|
|
485
|
+
// and later replaced by the transform stream
|
|
486
|
+
const runtimePrefetchSentinel = Math.floor(Math.random() * Number.MAX_SAFE_INTEGER);
|
|
487
|
+
const generatePayload = ()=>generateDynamicRSCPayload(ctx, {
|
|
488
|
+
runtimePrefetchSentinel
|
|
489
|
+
});
|
|
490
|
+
const { componentMod: { routeModule: { userland: { loaderTree } } }, getDynamicParamFromSegment } = ctx;
|
|
491
|
+
const rootParams = (0, _createcomponenttree.getRootParams)(loaderTree, getDynamicParamFromSegment);
|
|
492
|
+
// We need to share caches between the prospective prerender and the final prerender,
|
|
493
|
+
// but we're not going to persist this anywhere.
|
|
494
|
+
const prerenderResumeDataCache = (0, _resumedatacache.createPrerenderResumeDataCache)();
|
|
495
|
+
// We're not resuming an existing render.
|
|
496
|
+
const renderResumeDataCache = null;
|
|
497
|
+
await prospectiveRuntimeServerPrerender(ctx, generatePayload, prerenderResumeDataCache, renderResumeDataCache, rootParams, requestStore.headers, requestStore.cookies, requestStore.draftMode);
|
|
498
|
+
const response = await finalRuntimeServerPrerender(ctx, generatePayload, prerenderResumeDataCache, renderResumeDataCache, rootParams, requestStore.headers, requestStore.cookies, requestStore.draftMode, onError, runtimePrefetchSentinel);
|
|
499
|
+
applyMetadataFromPrerenderResult(response, metadata, workStore);
|
|
500
|
+
metadata.fetchMetrics = ctx.workStore.fetchMetrics;
|
|
501
|
+
return new _flightrenderresult.FlightRenderResult(response.result.prelude, metadata);
|
|
502
|
+
}
|
|
503
|
+
async function prospectiveRuntimeServerPrerender(ctx, getPayload, prerenderResumeDataCache, renderResumeDataCache, rootParams, headers, cookies, draftMode) {
|
|
504
|
+
const { implicitTags, renderOpts, workStore } = ctx;
|
|
505
|
+
const { ComponentMod } = renderOpts;
|
|
506
|
+
// Prerender controller represents the lifetime of the prerender.
|
|
507
|
+
// It will be aborted when a Task is complete or a synchronously aborting
|
|
508
|
+
// API is called. Notably during cache-filling renders this does not actually
|
|
509
|
+
// terminate the render itself which will continue until all caches are filled
|
|
510
|
+
const initialServerPrerenderController = new AbortController();
|
|
511
|
+
// This controller represents the lifetime of the React render call. Notably
|
|
512
|
+
// during the cache-filling render it is different from the prerender controller
|
|
513
|
+
// because we don't want to end the react render until all caches are filled.
|
|
514
|
+
const initialServerRenderController = new AbortController();
|
|
515
|
+
// The cacheSignal helps us track whether caches are still filling or we are ready
|
|
516
|
+
// to cut the render off.
|
|
517
|
+
const cacheSignal = new _cachesignal.CacheSignal();
|
|
518
|
+
const initialServerPrerenderStore = {
|
|
519
|
+
type: 'prerender-runtime',
|
|
520
|
+
phase: 'render',
|
|
521
|
+
rootParams,
|
|
522
|
+
implicitTags,
|
|
523
|
+
renderSignal: initialServerRenderController.signal,
|
|
524
|
+
controller: initialServerPrerenderController,
|
|
525
|
+
// During the initial prerender we need to track all cache reads to ensure
|
|
526
|
+
// we render long enough to fill every cache it is possible to visit during
|
|
527
|
+
// the final prerender.
|
|
528
|
+
cacheSignal,
|
|
529
|
+
// We only need to track dynamic accesses during the final prerender.
|
|
530
|
+
dynamicTracking: null,
|
|
531
|
+
// Runtime prefetches are never cached server-side, only client-side,
|
|
532
|
+
// so we set `expire` and `revalidate` to their minimum values just in case.
|
|
533
|
+
revalidate: 1,
|
|
534
|
+
expire: 0,
|
|
535
|
+
stale: _constants1.INFINITE_CACHE,
|
|
536
|
+
tags: [
|
|
537
|
+
...implicitTags.tags
|
|
538
|
+
],
|
|
539
|
+
renderResumeDataCache,
|
|
540
|
+
prerenderResumeDataCache,
|
|
541
|
+
hmrRefreshHash: undefined,
|
|
542
|
+
// We only need task sequencing in the final prerender.
|
|
543
|
+
runtimeStagePromise: null,
|
|
544
|
+
// These are not present in regular prerenders, but allowed in a runtime prerender.
|
|
545
|
+
headers,
|
|
546
|
+
cookies,
|
|
547
|
+
draftMode
|
|
548
|
+
};
|
|
549
|
+
const { clientModules } = (0, _manifestssingleton.getClientReferenceManifest)();
|
|
550
|
+
// We're not going to use the result of this render because the only time it could be used
|
|
551
|
+
// is if it completes in a microtask and that's likely very rare for any non-trivial app
|
|
552
|
+
const initialServerPayload = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(initialServerPrerenderStore, getPayload);
|
|
553
|
+
const pendingInitialServerResult = _workunitasyncstorageexternal.workUnitAsyncStorage.run(initialServerPrerenderStore, ComponentMod.prerender, initialServerPayload, clientModules, {
|
|
554
|
+
filterStackFrame,
|
|
555
|
+
onError: (err)=>{
|
|
556
|
+
const digest = (0, _createerrorhandler.getDigestForWellKnownError)(err);
|
|
557
|
+
if (digest) {
|
|
558
|
+
return digest;
|
|
559
|
+
}
|
|
560
|
+
if (initialServerPrerenderController.signal.aborted) {
|
|
561
|
+
// The render aborted before this error was handled which indicates
|
|
562
|
+
// the error is caused by unfinished components within the render
|
|
563
|
+
return;
|
|
564
|
+
} else if (process.env.NEXT_DEBUG_BUILD || process.env.__NEXT_VERBOSE_LOGGING) {
|
|
565
|
+
(0, _prospectiverenderutils.printDebugThrownValueForProspectiveRender)(err, workStore.route, _prospectiverenderutils.Phase.ProspectiveRender);
|
|
566
|
+
}
|
|
567
|
+
},
|
|
568
|
+
// We don't want to stop rendering until the cacheSignal is complete so we pass
|
|
569
|
+
// a different signal to this render call than is used by dynamic APIs to signify
|
|
570
|
+
// transitioning out of the prerender environment
|
|
571
|
+
signal: initialServerRenderController.signal
|
|
572
|
+
});
|
|
573
|
+
// Wait for all caches to be finished filling and for async imports to resolve
|
|
574
|
+
(0, _trackmoduleloadingexternal.trackPendingModules)(cacheSignal);
|
|
575
|
+
await cacheSignal.cacheReady();
|
|
576
|
+
initialServerRenderController.abort();
|
|
577
|
+
initialServerPrerenderController.abort();
|
|
578
|
+
// We don't need to continue the prerender process if we already
|
|
579
|
+
// detected invalid dynamic usage in the initial prerender phase.
|
|
580
|
+
if (workStore.invalidDynamicUsageError) {
|
|
581
|
+
throw workStore.invalidDynamicUsageError;
|
|
582
|
+
}
|
|
583
|
+
try {
|
|
584
|
+
return await (0, _apprenderprerenderutils.createReactServerPrerenderResult)(pendingInitialServerResult);
|
|
585
|
+
} catch (err) {
|
|
586
|
+
if (initialServerRenderController.signal.aborted || initialServerPrerenderController.signal.aborted) {
|
|
587
|
+
// These are expected errors that might error the prerender. we ignore them.
|
|
588
|
+
} else if (process.env.NEXT_DEBUG_BUILD || process.env.__NEXT_VERBOSE_LOGGING) {
|
|
589
|
+
// We don't normally log these errors because we are going to retry anyway but
|
|
590
|
+
// it can be useful for debugging Next.js itself to get visibility here when needed
|
|
591
|
+
(0, _prospectiverenderutils.printDebugThrownValueForProspectiveRender)(err, workStore.route, _prospectiverenderutils.Phase.ProspectiveRender);
|
|
592
|
+
}
|
|
593
|
+
return null;
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
/**
|
|
597
|
+
* Updates the runtime prefetch metadata in the RSC payload as it streams:
|
|
598
|
+
* "rp":[<sentinel>] -> "rp":[<isPartial>,<staleTime>]
|
|
599
|
+
*
|
|
600
|
+
* We use a transform stream to do this to avoid needing to trigger an additional render.
|
|
601
|
+
* A random sentinel number guarantees no collision with user data.
|
|
602
|
+
*/ function createRuntimePrefetchTransformStream(sentinel, isPartial, staleTime) {
|
|
603
|
+
const encoder = new TextEncoder();
|
|
604
|
+
// Search for: [<sentinel>]
|
|
605
|
+
// Replace with: [<isPartial>,<staleTime>]
|
|
606
|
+
const search = encoder.encode(`[${sentinel}]`);
|
|
607
|
+
const first = search[0];
|
|
608
|
+
const replace = encoder.encode(`[${isPartial},${staleTime}]`);
|
|
609
|
+
const searchLen = search.length;
|
|
610
|
+
let currentChunk = null;
|
|
611
|
+
let found = false;
|
|
612
|
+
function processChunk(controller, nextChunk) {
|
|
613
|
+
if (found) {
|
|
614
|
+
if (nextChunk) {
|
|
615
|
+
controller.enqueue(nextChunk);
|
|
616
|
+
}
|
|
617
|
+
return;
|
|
618
|
+
}
|
|
619
|
+
if (currentChunk) {
|
|
620
|
+
// We can't search past the index that can contain a full match
|
|
621
|
+
let exclusiveUpperBound = currentChunk.length - (searchLen - 1);
|
|
622
|
+
if (nextChunk) {
|
|
623
|
+
// If we have any overflow bytes we can search up to the chunk's final byte
|
|
624
|
+
exclusiveUpperBound += Math.min(nextChunk.length, searchLen - 1);
|
|
625
|
+
}
|
|
626
|
+
if (exclusiveUpperBound < 1) {
|
|
627
|
+
// we can't match the current chunk.
|
|
628
|
+
controller.enqueue(currentChunk);
|
|
629
|
+
currentChunk = nextChunk // advance so we don't process this chunk again
|
|
630
|
+
;
|
|
631
|
+
return;
|
|
632
|
+
}
|
|
633
|
+
let currentIndex = currentChunk.indexOf(first);
|
|
634
|
+
// check the current candidate match if it is within the bounds of our search space for the currentChunk
|
|
635
|
+
candidateLoop: while(-1 < currentIndex && currentIndex < exclusiveUpperBound){
|
|
636
|
+
// We already know index 0 matches because we used indexOf to find the candidateIndex so we start at index 1
|
|
637
|
+
let matchIndex = 1;
|
|
638
|
+
while(matchIndex < searchLen){
|
|
639
|
+
const candidateIndex = currentIndex + matchIndex;
|
|
640
|
+
const candidateValue = candidateIndex < currentChunk.length ? currentChunk[candidateIndex] : nextChunk[candidateIndex - currentChunk.length];
|
|
641
|
+
if (candidateValue !== search[matchIndex]) {
|
|
642
|
+
// No match, reset and continue the search from the next position
|
|
643
|
+
currentIndex = currentChunk.indexOf(first, currentIndex + 1);
|
|
644
|
+
continue candidateLoop;
|
|
645
|
+
}
|
|
646
|
+
matchIndex++;
|
|
647
|
+
}
|
|
648
|
+
// We found a complete match. currentIndex is our starting point to replace the value.
|
|
649
|
+
found = true;
|
|
650
|
+
// enqueue everything up to the match
|
|
651
|
+
controller.enqueue(currentChunk.subarray(0, currentIndex));
|
|
652
|
+
// enqueue the replacement value
|
|
653
|
+
controller.enqueue(replace);
|
|
654
|
+
// If there are bytes in the currentChunk after the match enqueue them
|
|
655
|
+
if (currentIndex + searchLen < currentChunk.length) {
|
|
656
|
+
controller.enqueue(currentChunk.slice(currentIndex + searchLen));
|
|
657
|
+
}
|
|
658
|
+
// If we have a next chunk we enqueue it now
|
|
659
|
+
if (nextChunk) {
|
|
660
|
+
// if replacement spills over to the next chunk we first exclude the replaced bytes
|
|
661
|
+
const overflowBytes = currentIndex + searchLen - currentChunk.length;
|
|
662
|
+
const truncatedChunk = overflowBytes > 0 ? nextChunk.subarray(overflowBytes) : nextChunk;
|
|
663
|
+
controller.enqueue(truncatedChunk);
|
|
664
|
+
}
|
|
665
|
+
// We are now in found mode and don't need to track currentChunk anymore
|
|
666
|
+
currentChunk = null;
|
|
667
|
+
return;
|
|
668
|
+
}
|
|
669
|
+
// No match found in this chunk, emit it and wait for the next one
|
|
670
|
+
controller.enqueue(currentChunk);
|
|
671
|
+
}
|
|
672
|
+
// Advance to the next chunk
|
|
673
|
+
currentChunk = nextChunk;
|
|
674
|
+
}
|
|
675
|
+
return new TransformStream({
|
|
676
|
+
transform (chunk, controller) {
|
|
677
|
+
processChunk(controller, chunk);
|
|
678
|
+
},
|
|
679
|
+
flush (controller) {
|
|
680
|
+
processChunk(controller, null);
|
|
681
|
+
}
|
|
682
|
+
});
|
|
683
|
+
}
|
|
684
|
+
async function finalRuntimeServerPrerender(ctx, getPayload, prerenderResumeDataCache, renderResumeDataCache, rootParams, headers, cookies, draftMode, onError, runtimePrefetchSentinel) {
|
|
685
|
+
const { implicitTags, renderOpts } = ctx;
|
|
686
|
+
const { ComponentMod, experimental, isDebugDynamicAccesses } = renderOpts;
|
|
687
|
+
const selectStaleTime = createSelectStaleTime(experimental);
|
|
688
|
+
let serverIsDynamic = false;
|
|
689
|
+
const finalServerController = new AbortController();
|
|
690
|
+
const serverDynamicTracking = (0, _dynamicrendering.createDynamicTrackingState)(isDebugDynamicAccesses);
|
|
691
|
+
const { promise: runtimeStagePromise, resolve: resolveBlockedRuntimeAPIs } = (0, _promisewithresolvers.createPromiseWithResolvers)();
|
|
692
|
+
const finalServerPrerenderStore = {
|
|
693
|
+
type: 'prerender-runtime',
|
|
694
|
+
phase: 'render',
|
|
695
|
+
rootParams,
|
|
696
|
+
implicitTags,
|
|
697
|
+
renderSignal: finalServerController.signal,
|
|
698
|
+
controller: finalServerController,
|
|
699
|
+
// All caches we could read must already be filled so no tracking is necessary
|
|
700
|
+
cacheSignal: null,
|
|
701
|
+
dynamicTracking: serverDynamicTracking,
|
|
702
|
+
// Runtime prefetches are never cached server-side, only client-side,
|
|
703
|
+
// so we set `expire` and `revalidate` to their minimum values just in case.
|
|
704
|
+
revalidate: 1,
|
|
705
|
+
expire: 0,
|
|
706
|
+
stale: _constants1.INFINITE_CACHE,
|
|
707
|
+
tags: [
|
|
708
|
+
...implicitTags.tags
|
|
709
|
+
],
|
|
710
|
+
prerenderResumeDataCache,
|
|
711
|
+
renderResumeDataCache,
|
|
712
|
+
hmrRefreshHash: undefined,
|
|
713
|
+
// Used to separate the "Static" stage from the "Runtime" stage.
|
|
714
|
+
runtimeStagePromise,
|
|
715
|
+
// These are not present in regular prerenders, but allowed in a runtime prerender.
|
|
716
|
+
headers,
|
|
717
|
+
cookies,
|
|
718
|
+
draftMode
|
|
719
|
+
};
|
|
720
|
+
const { clientModules } = (0, _manifestssingleton.getClientReferenceManifest)();
|
|
721
|
+
const finalRSCPayload = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(finalServerPrerenderStore, getPayload);
|
|
722
|
+
let prerenderIsPending = true;
|
|
723
|
+
const result = await (0, _apprenderprerenderutils.prerenderAndAbortInSequentialTasksWithStages)(async ()=>{
|
|
724
|
+
// Static stage
|
|
725
|
+
const prerenderResult = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(finalServerPrerenderStore, ComponentMod.prerender, finalRSCPayload, clientModules, {
|
|
726
|
+
filterStackFrame,
|
|
727
|
+
onError,
|
|
728
|
+
signal: finalServerController.signal
|
|
729
|
+
});
|
|
730
|
+
prerenderIsPending = false;
|
|
731
|
+
return prerenderResult;
|
|
732
|
+
}, ()=>{
|
|
733
|
+
// Advance to the runtime stage.
|
|
734
|
+
//
|
|
735
|
+
// We make runtime APIs hang during the first task (above), and unblock them in the following task (here).
|
|
736
|
+
// This makes sure that, at this point, we'll have finished all the static parts (what we'd prerender statically).
|
|
737
|
+
// We know that they don't contain any incorrect sync IO, because that'd have caused a build error.
|
|
738
|
+
// After we unblock Runtime APIs, if we encounter sync IO (e.g. `await cookies(); Date.now()`),
|
|
739
|
+
// we'll abort, but we'll produce at least as much output as a static prerender would.
|
|
740
|
+
resolveBlockedRuntimeAPIs();
|
|
741
|
+
}, ()=>{
|
|
742
|
+
// Abort.
|
|
743
|
+
if (finalServerController.signal.aborted) {
|
|
744
|
+
// If the server controller is already aborted we must have called something
|
|
745
|
+
// that required aborting the prerender synchronously such as with new Date()
|
|
746
|
+
serverIsDynamic = true;
|
|
747
|
+
return;
|
|
748
|
+
}
|
|
749
|
+
if (prerenderIsPending) {
|
|
750
|
+
// If prerenderIsPending then we have blocked for longer than a Task and we assume
|
|
751
|
+
// there is something unfinished.
|
|
752
|
+
serverIsDynamic = true;
|
|
753
|
+
}
|
|
754
|
+
finalServerController.abort();
|
|
755
|
+
});
|
|
756
|
+
// Update the RSC payload stream to replace the sentinel with actual values.
|
|
757
|
+
// React has already serialized the payload with the sentinel, so we need to transform the stream.
|
|
758
|
+
const collectedStale = selectStaleTime(finalServerPrerenderStore.stale);
|
|
759
|
+
result.prelude = result.prelude.pipeThrough(createRuntimePrefetchTransformStream(runtimePrefetchSentinel, serverIsDynamic, collectedStale));
|
|
760
|
+
return {
|
|
761
|
+
result,
|
|
762
|
+
// TODO(runtime-ppr): do we need to produce a digest map here?
|
|
763
|
+
// digestErrorsMap: ...,
|
|
764
|
+
dynamicAccess: serverDynamicTracking,
|
|
765
|
+
isPartial: serverIsDynamic,
|
|
766
|
+
collectedRevalidate: finalServerPrerenderStore.revalidate,
|
|
767
|
+
collectedExpire: finalServerPrerenderStore.expire,
|
|
768
|
+
collectedStale,
|
|
769
|
+
collectedTags: finalServerPrerenderStore.tags
|
|
770
|
+
};
|
|
771
|
+
}
|
|
772
|
+
/**
|
|
773
|
+
* Crawlers will inadvertently think the canonicalUrl in the RSC payload should be crawled
|
|
774
|
+
* when our intention is to just seed the router state with the current URL.
|
|
775
|
+
* This function splits up the pathname so that we can later join it on
|
|
776
|
+
* when we're ready to consume the path.
|
|
777
|
+
*/ function prepareInitialCanonicalUrl(url) {
|
|
778
|
+
return (url.pathname + url.search).split('/');
|
|
779
|
+
}
|
|
780
|
+
function getRenderedSearch(query) {
|
|
781
|
+
// Inlined implementation of querystring.encode, which is not available in
|
|
782
|
+
// the Edge runtime.
|
|
783
|
+
const pairs = [];
|
|
784
|
+
for(const key in query){
|
|
785
|
+
const value = query[key];
|
|
786
|
+
if (value == null) continue;
|
|
787
|
+
if (Array.isArray(value)) {
|
|
788
|
+
for (const v of value){
|
|
789
|
+
pairs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(v))}`);
|
|
790
|
+
}
|
|
791
|
+
} else {
|
|
792
|
+
pairs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);
|
|
793
|
+
}
|
|
794
|
+
}
|
|
795
|
+
// The result should match the format of a web URL's `search` property, since
|
|
796
|
+
// this is the format that's stored in the App Router state.
|
|
797
|
+
// TODO: We're a bit inconsistent about this. The x-nextjs-rewritten-query
|
|
798
|
+
// header omits the leading question mark. Should refactor to always do
|
|
799
|
+
// that instead.
|
|
800
|
+
if (pairs.length === 0) {
|
|
801
|
+
// If the search string is empty, return an empty string.
|
|
802
|
+
return '';
|
|
803
|
+
}
|
|
804
|
+
// Prepend '?' to the search params string.
|
|
805
|
+
return '?' + pairs.join('&');
|
|
806
|
+
}
|
|
807
|
+
// This is the data necessary to render <AppRouter /> when no SSR errors are encountered
|
|
808
|
+
async function getRSCPayload(tree, ctx, is404) {
|
|
809
|
+
const injectedCSS = new Set();
|
|
810
|
+
const injectedJS = new Set();
|
|
811
|
+
const injectedFontPreloadTags = new Set();
|
|
812
|
+
let missingSlots;
|
|
813
|
+
// We only track missing parallel slots in development
|
|
814
|
+
if (process.env.NODE_ENV === 'development') {
|
|
815
|
+
missingSlots = new Set();
|
|
816
|
+
}
|
|
817
|
+
const { getDynamicParamFromSegment, query, appUsingSizeAdjustment, componentMod: { createMetadataComponents, createElement, Fragment }, url, workStore } = ctx;
|
|
818
|
+
const initialTree = (0, _createflightrouterstatefromloadertree.createFlightRouterStateFromLoaderTree)(tree, getDynamicParamFromSegment, query);
|
|
819
|
+
const serveStreamingMetadata = !!ctx.renderOpts.serveStreamingMetadata;
|
|
820
|
+
const hasGlobalNotFound = !!tree[2]['global-not-found'];
|
|
821
|
+
const { Viewport, Metadata, MetadataOutlet } = createMetadataComponents({
|
|
822
|
+
tree,
|
|
823
|
+
// When it's using global-not-found, metadata errorType is undefined, which will retrieve the
|
|
824
|
+
// metadata from the page.
|
|
825
|
+
// When it's using not-found, metadata errorType is 'not-found', which will retrieve the
|
|
826
|
+
// metadata from the not-found.js boundary.
|
|
827
|
+
// TODO: remove this condition and keep it undefined when global-not-found is stabilized.
|
|
828
|
+
errorType: is404 && !hasGlobalNotFound ? 'not-found' : undefined,
|
|
829
|
+
parsedQuery: query,
|
|
830
|
+
pathname: url.pathname,
|
|
831
|
+
metadataContext: (0, _metadatacontext.createMetadataContext)(ctx.renderOpts),
|
|
832
|
+
getDynamicParamFromSegment,
|
|
833
|
+
workStore,
|
|
834
|
+
serveStreamingMetadata
|
|
835
|
+
});
|
|
836
|
+
const preloadCallbacks = [];
|
|
837
|
+
const seedData = await (0, _createcomponenttree.createComponentTree)({
|
|
838
|
+
ctx,
|
|
839
|
+
loaderTree: tree,
|
|
840
|
+
parentParams: {},
|
|
841
|
+
injectedCSS,
|
|
842
|
+
injectedJS,
|
|
843
|
+
injectedFontPreloadTags,
|
|
844
|
+
rootLayoutIncluded: false,
|
|
845
|
+
missingSlots,
|
|
846
|
+
preloadCallbacks,
|
|
847
|
+
authInterrupts: ctx.renderOpts.experimental.authInterrupts,
|
|
848
|
+
MetadataOutlet
|
|
849
|
+
});
|
|
850
|
+
// When the `vary` response header is present with `Next-URL`, that means there's a chance
|
|
851
|
+
// it could respond differently if there's an interception route. We provide this information
|
|
852
|
+
// to `AppRouter` so that it can properly seed the prefetch cache with a prefix, if needed.
|
|
853
|
+
const varyHeader = ctx.res.getHeader('vary');
|
|
854
|
+
const couldBeIntercepted = typeof varyHeader === 'string' && varyHeader.includes(_approuterheaders.NEXT_URL);
|
|
855
|
+
const initialHead = createElement(Fragment, {
|
|
856
|
+
key: flightDataPathHeadKey
|
|
857
|
+
}, createElement(NonIndex, {
|
|
858
|
+
createElement,
|
|
859
|
+
pagePath: ctx.pagePath,
|
|
860
|
+
statusCode: ctx.res.statusCode,
|
|
861
|
+
isPossibleServerAction: ctx.isPossibleServerAction
|
|
862
|
+
}), createElement(Viewport, null), createElement(Metadata, null), appUsingSizeAdjustment ? createElement('meta', {
|
|
863
|
+
name: 'next-size-adjust',
|
|
864
|
+
content: ''
|
|
865
|
+
}) : null);
|
|
866
|
+
const { GlobalError, styles: globalErrorStyles } = await getGlobalErrorStyles(tree, ctx);
|
|
867
|
+
// Assume the head we're rendering contains only partial data if PPR is
|
|
868
|
+
// enabled and this is a statically generated response. This is used by the
|
|
869
|
+
// client Segment Cache after a prefetch to determine if it can skip the
|
|
870
|
+
// second request to fill in the dynamic data.
|
|
871
|
+
//
|
|
872
|
+
// See similar comment in create-component-tree.tsx for more context.
|
|
873
|
+
const isPossiblyPartialHead = workStore.isStaticGeneration && ctx.renderOpts.experimental.isRoutePPREnabled === true;
|
|
874
|
+
return {
|
|
875
|
+
// See the comment above the `Preloads` component (below) for why this is part of the payload
|
|
876
|
+
P: createElement(Preloads, {
|
|
877
|
+
preloadCallbacks: preloadCallbacks
|
|
878
|
+
}),
|
|
879
|
+
b: ctx.sharedContext.buildId,
|
|
880
|
+
c: prepareInitialCanonicalUrl(url),
|
|
881
|
+
q: getRenderedSearch(query),
|
|
882
|
+
i: !!couldBeIntercepted,
|
|
883
|
+
f: [
|
|
884
|
+
[
|
|
885
|
+
initialTree,
|
|
886
|
+
seedData,
|
|
887
|
+
initialHead,
|
|
888
|
+
isPossiblyPartialHead
|
|
889
|
+
]
|
|
890
|
+
],
|
|
891
|
+
m: missingSlots,
|
|
892
|
+
G: [
|
|
893
|
+
GlobalError,
|
|
894
|
+
globalErrorStyles
|
|
895
|
+
],
|
|
896
|
+
S: workStore.isStaticGeneration
|
|
897
|
+
};
|
|
898
|
+
}
|
|
899
|
+
/**
|
|
900
|
+
* Preload calls (such as `ReactDOM.preloadStyle` and `ReactDOM.preloadFont`) need to be called during rendering
|
|
901
|
+
* in order to create the appropriate preload tags in the DOM, otherwise they're a no-op. Since we invoke
|
|
902
|
+
* renderToReadableStream with a function that returns component props rather than a component itself, we use
|
|
903
|
+
* this component to "render " the preload calls.
|
|
904
|
+
*/ function Preloads({ preloadCallbacks }) {
|
|
905
|
+
preloadCallbacks.forEach((preloadFn)=>preloadFn());
|
|
906
|
+
return null;
|
|
907
|
+
}
|
|
908
|
+
// This is the data necessary to render <AppRouter /> when an error state is triggered
|
|
909
|
+
async function getErrorRSCPayload(tree, ctx, ssrError, errorType) {
|
|
910
|
+
const { getDynamicParamFromSegment, query, componentMod: { createMetadataComponents, createElement, Fragment }, url, workStore } = ctx;
|
|
911
|
+
const serveStreamingMetadata = !!ctx.renderOpts.serveStreamingMetadata;
|
|
912
|
+
const { Viewport, Metadata } = createMetadataComponents({
|
|
913
|
+
tree,
|
|
914
|
+
parsedQuery: query,
|
|
915
|
+
pathname: url.pathname,
|
|
916
|
+
metadataContext: (0, _metadatacontext.createMetadataContext)(ctx.renderOpts),
|
|
917
|
+
errorType,
|
|
918
|
+
getDynamicParamFromSegment,
|
|
919
|
+
workStore,
|
|
920
|
+
serveStreamingMetadata: serveStreamingMetadata
|
|
921
|
+
});
|
|
922
|
+
const initialHead = createElement(Fragment, {
|
|
923
|
+
key: flightDataPathHeadKey
|
|
924
|
+
}, createElement(NonIndex, {
|
|
925
|
+
createElement,
|
|
926
|
+
pagePath: ctx.pagePath,
|
|
927
|
+
statusCode: ctx.res.statusCode,
|
|
928
|
+
isPossibleServerAction: ctx.isPossibleServerAction
|
|
929
|
+
}), createElement(Viewport, null), process.env.NODE_ENV === 'development' && createElement('meta', {
|
|
930
|
+
name: 'next-error',
|
|
931
|
+
content: 'not-found'
|
|
932
|
+
}), createElement(Metadata, null));
|
|
933
|
+
const initialTree = (0, _createflightrouterstatefromloadertree.createFlightRouterStateFromLoaderTree)(tree, getDynamicParamFromSegment, query);
|
|
934
|
+
let err = undefined;
|
|
935
|
+
if (ssrError) {
|
|
936
|
+
err = (0, _iserror.default)(ssrError) ? ssrError : Object.defineProperty(new Error(ssrError + ''), "__NEXT_ERROR_CODE", {
|
|
937
|
+
value: "E394",
|
|
938
|
+
enumerable: false,
|
|
939
|
+
configurable: true
|
|
940
|
+
});
|
|
941
|
+
}
|
|
942
|
+
// For metadata notFound error there's no global not found boundary on top
|
|
943
|
+
// so we create a not found page with AppRouter
|
|
944
|
+
const seedData = [
|
|
945
|
+
createElement('html', {
|
|
946
|
+
id: '__next_error__'
|
|
947
|
+
}, createElement('head', null), createElement('body', null, process.env.NODE_ENV !== 'production' && err ? createElement('template', {
|
|
948
|
+
'data-next-error-message': err.message,
|
|
949
|
+
'data-next-error-digest': 'digest' in err ? err.digest : '',
|
|
950
|
+
'data-next-error-stack': err.stack
|
|
951
|
+
}) : null)),
|
|
952
|
+
{},
|
|
953
|
+
null,
|
|
954
|
+
false,
|
|
955
|
+
false
|
|
956
|
+
];
|
|
957
|
+
const { GlobalError, styles: globalErrorStyles } = await getGlobalErrorStyles(tree, ctx);
|
|
958
|
+
const isPossiblyPartialHead = workStore.isStaticGeneration && ctx.renderOpts.experimental.isRoutePPREnabled === true;
|
|
959
|
+
return {
|
|
960
|
+
b: ctx.sharedContext.buildId,
|
|
961
|
+
c: prepareInitialCanonicalUrl(url),
|
|
962
|
+
q: getRenderedSearch(query),
|
|
963
|
+
m: undefined,
|
|
964
|
+
i: false,
|
|
965
|
+
f: [
|
|
966
|
+
[
|
|
967
|
+
initialTree,
|
|
968
|
+
seedData,
|
|
969
|
+
initialHead,
|
|
970
|
+
isPossiblyPartialHead
|
|
971
|
+
]
|
|
972
|
+
],
|
|
973
|
+
G: [
|
|
974
|
+
GlobalError,
|
|
975
|
+
globalErrorStyles
|
|
976
|
+
],
|
|
977
|
+
S: workStore.isStaticGeneration
|
|
978
|
+
};
|
|
979
|
+
}
|
|
980
|
+
// This component must run in an SSR context. It will render the RSC root component
|
|
981
|
+
function App({ reactServerStream, reactDebugStream, debugEndTime, preinitScripts, ServerInsertedHTMLProvider, nonce, images }) {
|
|
982
|
+
preinitScripts();
|
|
983
|
+
const response = _react.use((0, _useflightresponse.getFlightStream)(reactServerStream, reactDebugStream, debugEndTime, nonce));
|
|
984
|
+
const initialState = (0, _createinitialrouterstate.createInitialRouterState)({
|
|
985
|
+
// This is not used during hydration, so we don't have to pass a
|
|
986
|
+
// real timestamp.
|
|
987
|
+
navigatedAt: -1,
|
|
988
|
+
initialFlightData: response.f,
|
|
989
|
+
initialCanonicalUrlParts: response.c,
|
|
990
|
+
initialRenderedSearch: response.q,
|
|
991
|
+
// location is not initialized in the SSR render
|
|
992
|
+
// it's set to window.location during hydration
|
|
993
|
+
location: null
|
|
994
|
+
});
|
|
995
|
+
const actionQueue = (0, _approuterinstance.createMutableActionQueue)(initialState, null);
|
|
996
|
+
const { HeadManagerContext } = require('../../shared/lib/head-manager-context.shared-runtime');
|
|
997
|
+
return /*#__PURE__*/ (0, _jsxruntime.jsx)(HeadManagerContext.Provider, {
|
|
998
|
+
value: {
|
|
999
|
+
appDir: true,
|
|
1000
|
+
nonce
|
|
1001
|
+
},
|
|
1002
|
+
children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_imageconfigcontextsharedruntime.ImageConfigContext.Provider, {
|
|
1003
|
+
value: images ?? _imageconfig.imageConfigDefault,
|
|
1004
|
+
children: /*#__PURE__*/ (0, _jsxruntime.jsx)(ServerInsertedHTMLProvider, {
|
|
1005
|
+
children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_approuter.default, {
|
|
1006
|
+
actionQueue: actionQueue,
|
|
1007
|
+
globalErrorState: response.G
|
|
1008
|
+
})
|
|
1009
|
+
})
|
|
1010
|
+
})
|
|
1011
|
+
});
|
|
1012
|
+
/* eslint-enable @next/internal/no-ambiguous-jsx -- React Client */ }
|
|
1013
|
+
// @TODO our error stream should be probably just use the same root component. But it was previously
|
|
1014
|
+
// different I don't want to figure out if that is meaningful at this time so just keeping the behavior
|
|
1015
|
+
// consistent for now.
|
|
1016
|
+
function ErrorApp({ reactServerStream, preinitScripts, ServerInsertedHTMLProvider, nonce, images }) {
|
|
1017
|
+
/* eslint-disable @next/internal/no-ambiguous-jsx -- React Client */ preinitScripts();
|
|
1018
|
+
const response = _react.use((0, _useflightresponse.getFlightStream)(reactServerStream, undefined, undefined, nonce));
|
|
1019
|
+
const initialState = (0, _createinitialrouterstate.createInitialRouterState)({
|
|
1020
|
+
// This is not used during hydration, so we don't have to pass a
|
|
1021
|
+
// real timestamp.
|
|
1022
|
+
navigatedAt: -1,
|
|
1023
|
+
initialFlightData: response.f,
|
|
1024
|
+
initialCanonicalUrlParts: response.c,
|
|
1025
|
+
initialRenderedSearch: response.q,
|
|
1026
|
+
// location is not initialized in the SSR render
|
|
1027
|
+
// it's set to window.location during hydration
|
|
1028
|
+
location: null
|
|
1029
|
+
});
|
|
1030
|
+
const actionQueue = (0, _approuterinstance.createMutableActionQueue)(initialState, null);
|
|
1031
|
+
return /*#__PURE__*/ (0, _jsxruntime.jsx)(_imageconfigcontextsharedruntime.ImageConfigContext.Provider, {
|
|
1032
|
+
value: images ?? _imageconfig.imageConfigDefault,
|
|
1033
|
+
children: /*#__PURE__*/ (0, _jsxruntime.jsx)(ServerInsertedHTMLProvider, {
|
|
1034
|
+
children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_approuter.default, {
|
|
1035
|
+
actionQueue: actionQueue,
|
|
1036
|
+
globalErrorState: response.G
|
|
1037
|
+
})
|
|
1038
|
+
})
|
|
1039
|
+
});
|
|
1040
|
+
/* eslint-enable @next/internal/no-ambiguous-jsx -- React Client */ }
|
|
1041
|
+
async function renderToHTMLOrFlightImpl(req, res, url, pagePath, query, renderOpts, workStore, parsedRequestHeaders, postponedState, serverComponentsHmrCache, sharedContext, interpolatedParams, fallbackRouteParams) {
|
|
1042
|
+
const isNotFoundPath = pagePath === '/404';
|
|
1043
|
+
if (isNotFoundPath) {
|
|
1044
|
+
res.statusCode = 404;
|
|
1045
|
+
}
|
|
1046
|
+
// A unique request timestamp used by development to ensure that it's
|
|
1047
|
+
// consistent and won't change during this request. This is important to
|
|
1048
|
+
// avoid that resources can be deduped by React Float if the same resource is
|
|
1049
|
+
// rendered or preloaded multiple times: `<link href="a.css?v={Date.now()}"/>`.
|
|
1050
|
+
const requestTimestamp = Date.now();
|
|
1051
|
+
const { ComponentMod, nextFontManifest, serverActions, assetPrefix = '', enableTainting, cacheComponents } = renderOpts;
|
|
1052
|
+
// We need to expose the bundled `require` API globally for
|
|
1053
|
+
// react-server-dom-webpack. This is a hack until we find a better way.
|
|
1054
|
+
if (ComponentMod.__next_app__) {
|
|
1055
|
+
const instrumented = (0, _clientcomponentrendererlogger.wrapClientComponentLoader)(ComponentMod);
|
|
1056
|
+
// When we are prerendering if there is a cacheSignal for tracking
|
|
1057
|
+
// cache reads we track calls to `loadChunk` and `require`. This allows us
|
|
1058
|
+
// to treat chunk/module loading with similar semantics as cache reads to avoid
|
|
1059
|
+
// module loading from causing a prerender to abort too early.
|
|
1060
|
+
const shouldTrackModuleLoading = ()=>{
|
|
1061
|
+
if (!cacheComponents) {
|
|
1062
|
+
return false;
|
|
1063
|
+
}
|
|
1064
|
+
if (renderOpts.dev) {
|
|
1065
|
+
return true;
|
|
1066
|
+
}
|
|
1067
|
+
const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore();
|
|
1068
|
+
if (!workUnitStore) {
|
|
1069
|
+
return false;
|
|
1070
|
+
}
|
|
1071
|
+
switch(workUnitStore.type){
|
|
1072
|
+
case 'prerender':
|
|
1073
|
+
case 'prerender-client':
|
|
1074
|
+
case 'prerender-runtime':
|
|
1075
|
+
case 'cache':
|
|
1076
|
+
case 'private-cache':
|
|
1077
|
+
return true;
|
|
1078
|
+
case 'prerender-ppr':
|
|
1079
|
+
case 'prerender-legacy':
|
|
1080
|
+
case 'request':
|
|
1081
|
+
case 'unstable-cache':
|
|
1082
|
+
return false;
|
|
1083
|
+
default:
|
|
1084
|
+
workUnitStore;
|
|
1085
|
+
}
|
|
1086
|
+
};
|
|
1087
|
+
const __next_require__ = (...args)=>{
|
|
1088
|
+
const exportsOrPromise = instrumented.require(...args);
|
|
1089
|
+
if (shouldTrackModuleLoading()) {
|
|
1090
|
+
// requiring an async module returns a promise.
|
|
1091
|
+
(0, _trackmoduleloadingexternal.trackPendingImport)(exportsOrPromise);
|
|
1092
|
+
}
|
|
1093
|
+
return exportsOrPromise;
|
|
1094
|
+
};
|
|
1095
|
+
// @ts-expect-error
|
|
1096
|
+
globalThis.__next_require__ = __next_require__;
|
|
1097
|
+
const __next_chunk_load__ = (...args)=>{
|
|
1098
|
+
const loadingChunk = instrumented.loadChunk(...args);
|
|
1099
|
+
if (shouldTrackModuleLoading()) {
|
|
1100
|
+
(0, _trackmoduleloadingexternal.trackPendingChunkLoad)(loadingChunk);
|
|
1101
|
+
}
|
|
1102
|
+
return loadingChunk;
|
|
1103
|
+
};
|
|
1104
|
+
// @ts-expect-error
|
|
1105
|
+
globalThis.__next_chunk_load__ = __next_chunk_load__;
|
|
1106
|
+
}
|
|
1107
|
+
if (process.env.NODE_ENV === 'development' && renderOpts.setIsrStatus && !cacheComponents) {
|
|
1108
|
+
// Reset the ISR status at start of request.
|
|
1109
|
+
const { pathname } = new URL(req.url || '/', 'http://n');
|
|
1110
|
+
renderOpts.setIsrStatus(pathname, // Only pages using the Node runtime can use ISR, Edge is always dynamic.
|
|
1111
|
+
process.env.NEXT_RUNTIME === 'edge' ? false : undefined);
|
|
1112
|
+
}
|
|
1113
|
+
if (// The type check here ensures that `req` is correctly typed, and the
|
|
1114
|
+
// environment variable check provides dead code elimination.
|
|
1115
|
+
process.env.NEXT_RUNTIME !== 'edge' && (0, _helpers.isNodeNextRequest)(req)) {
|
|
1116
|
+
res.onClose(()=>{
|
|
1117
|
+
// We stop tracking fetch metrics when the response closes, since we
|
|
1118
|
+
// report them at that time.
|
|
1119
|
+
workStore.shouldTrackFetchMetrics = false;
|
|
1120
|
+
});
|
|
1121
|
+
req.originalRequest.on('end', ()=>{
|
|
1122
|
+
if ('performance' in globalThis) {
|
|
1123
|
+
const metrics = (0, _clientcomponentrendererlogger.getClientComponentLoaderMetrics)({
|
|
1124
|
+
reset: true
|
|
1125
|
+
});
|
|
1126
|
+
if (metrics) {
|
|
1127
|
+
(0, _tracer.getTracer)().startSpan(_constants.NextNodeServerSpan.clientComponentLoading, {
|
|
1128
|
+
startTime: metrics.clientComponentLoadStart,
|
|
1129
|
+
attributes: {
|
|
1130
|
+
'next.clientComponentLoadCount': metrics.clientComponentLoadCount,
|
|
1131
|
+
'next.span_type': _constants.NextNodeServerSpan.clientComponentLoading
|
|
1132
|
+
}
|
|
1133
|
+
}).end(metrics.clientComponentLoadStart + metrics.clientComponentLoadTimes);
|
|
1134
|
+
}
|
|
1135
|
+
}
|
|
1136
|
+
});
|
|
1137
|
+
}
|
|
1138
|
+
const metadata = {
|
|
1139
|
+
statusCode: isNotFoundPath ? 404 : undefined
|
|
1140
|
+
};
|
|
1141
|
+
const appUsingSizeAdjustment = !!(nextFontManifest == null ? void 0 : nextFontManifest.appUsingSizeAdjust);
|
|
1142
|
+
ComponentMod.patchFetch();
|
|
1143
|
+
// Pull out the hooks/references from the component.
|
|
1144
|
+
const { routeModule: { userland: { loaderTree } }, taintObjectReference } = ComponentMod;
|
|
1145
|
+
if (enableTainting) {
|
|
1146
|
+
taintObjectReference('Do not pass process.env to Client Components since it will leak sensitive data', process.env);
|
|
1147
|
+
}
|
|
1148
|
+
workStore.fetchMetrics = [];
|
|
1149
|
+
metadata.fetchMetrics = workStore.fetchMetrics;
|
|
1150
|
+
// don't modify original query object
|
|
1151
|
+
query = {
|
|
1152
|
+
...query
|
|
1153
|
+
};
|
|
1154
|
+
(0, _internalutils.stripInternalQueries)(query);
|
|
1155
|
+
const { isStaticGeneration } = workStore;
|
|
1156
|
+
let requestId;
|
|
1157
|
+
let htmlRequestId;
|
|
1158
|
+
const { flightRouterState, isPrefetchRequest, isRuntimePrefetchRequest, isRSCRequest, isHmrRefresh, nonce } = parsedRequestHeaders;
|
|
1159
|
+
if (parsedRequestHeaders.requestId) {
|
|
1160
|
+
// If the client has provided a request ID (in development mode), we use it.
|
|
1161
|
+
requestId = parsedRequestHeaders.requestId;
|
|
1162
|
+
} else {
|
|
1163
|
+
// Otherwise we generate a new request ID.
|
|
1164
|
+
if (isStaticGeneration) {
|
|
1165
|
+
requestId = Buffer.from(await crypto.subtle.digest('SHA-1', Buffer.from(req.url))).toString('hex');
|
|
1166
|
+
} else if (process.env.NEXT_RUNTIME === 'edge') {
|
|
1167
|
+
requestId = crypto.randomUUID();
|
|
1168
|
+
} else {
|
|
1169
|
+
requestId = require('next/dist/compiled/nanoid').nanoid();
|
|
1170
|
+
}
|
|
1171
|
+
}
|
|
1172
|
+
// If the client has provided an HTML request ID, we use it to associate the
|
|
1173
|
+
// request with the HTML document from which it originated, which is used to
|
|
1174
|
+
// send debug information to the associated WebSocket client. Otherwise, this
|
|
1175
|
+
// is the request for the HTML document, so we use the request ID also as the
|
|
1176
|
+
// HTML request ID.
|
|
1177
|
+
htmlRequestId = parsedRequestHeaders.htmlRequestId || requestId;
|
|
1178
|
+
const getDynamicParamFromSegment = makeGetDynamicParamFromSegment(interpolatedParams, fallbackRouteParams);
|
|
1179
|
+
const isPossibleActionRequest = (0, _serveractionrequestmeta.getIsPossibleServerAction)(req);
|
|
1180
|
+
const implicitTags = await (0, _implicittags.getImplicitTags)(workStore.page, url, fallbackRouteParams);
|
|
1181
|
+
const ctx = {
|
|
1182
|
+
componentMod: ComponentMod,
|
|
1183
|
+
url,
|
|
1184
|
+
renderOpts,
|
|
1185
|
+
workStore,
|
|
1186
|
+
parsedRequestHeaders,
|
|
1187
|
+
getDynamicParamFromSegment,
|
|
1188
|
+
query,
|
|
1189
|
+
isPrefetch: isPrefetchRequest,
|
|
1190
|
+
isPossibleServerAction: isPossibleActionRequest,
|
|
1191
|
+
requestTimestamp,
|
|
1192
|
+
appUsingSizeAdjustment,
|
|
1193
|
+
flightRouterState,
|
|
1194
|
+
requestId,
|
|
1195
|
+
htmlRequestId,
|
|
1196
|
+
pagePath,
|
|
1197
|
+
assetPrefix,
|
|
1198
|
+
isNotFoundPath,
|
|
1199
|
+
nonce,
|
|
1200
|
+
res,
|
|
1201
|
+
sharedContext,
|
|
1202
|
+
implicitTags
|
|
1203
|
+
};
|
|
1204
|
+
(0, _tracer.getTracer)().setRootSpanAttribute('next.route', pagePath);
|
|
1205
|
+
if (isStaticGeneration) {
|
|
1206
|
+
// We're either building or revalidating. In either case we need to
|
|
1207
|
+
// prerender our page rather than render it.
|
|
1208
|
+
const prerenderToStreamWithTracing = (0, _tracer.getTracer)().wrap(_constants.AppRenderSpan.getBodyResult, {
|
|
1209
|
+
spanName: `prerender route (app) ${pagePath}`,
|
|
1210
|
+
attributes: {
|
|
1211
|
+
'next.route': pagePath
|
|
1212
|
+
}
|
|
1213
|
+
}, prerenderToStream);
|
|
1214
|
+
const response = await prerenderToStreamWithTracing(req, res, ctx, metadata, loaderTree, fallbackRouteParams);
|
|
1215
|
+
// If we're debugging partial prerendering, print all the dynamic API accesses
|
|
1216
|
+
// that occurred during the render.
|
|
1217
|
+
// @TODO move into renderToStream function
|
|
1218
|
+
if (response.dynamicAccess && (0, _dynamicrendering.accessedDynamicData)(response.dynamicAccess) && renderOpts.isDebugDynamicAccesses) {
|
|
1219
|
+
(0, _log.warn)('The following dynamic usage was detected:');
|
|
1220
|
+
for (const access of (0, _dynamicrendering.formatDynamicAPIAccesses)(response.dynamicAccess)){
|
|
1221
|
+
(0, _log.warn)(access);
|
|
1222
|
+
}
|
|
1223
|
+
}
|
|
1224
|
+
// If we encountered any unexpected errors during build we fail the
|
|
1225
|
+
// prerendering phase and the build.
|
|
1226
|
+
if (workStore.invalidDynamicUsageError) {
|
|
1227
|
+
(0, _dynamicrendering.logDisallowedDynamicError)(workStore, workStore.invalidDynamicUsageError);
|
|
1228
|
+
throw new _staticgenerationbailout.StaticGenBailoutError();
|
|
1229
|
+
}
|
|
1230
|
+
if (response.digestErrorsMap.size) {
|
|
1231
|
+
const buildFailingError = response.digestErrorsMap.values().next().value;
|
|
1232
|
+
if (buildFailingError) throw buildFailingError;
|
|
1233
|
+
}
|
|
1234
|
+
// Pick first userland SSR error, which is also not a RSC error.
|
|
1235
|
+
if (response.ssrErrors.length) {
|
|
1236
|
+
const buildFailingError = response.ssrErrors.find((err)=>(0, _createerrorhandler.isUserLandError)(err));
|
|
1237
|
+
if (buildFailingError) throw buildFailingError;
|
|
1238
|
+
}
|
|
1239
|
+
const options = {
|
|
1240
|
+
metadata,
|
|
1241
|
+
contentType: _constants1.HTML_CONTENT_TYPE_HEADER
|
|
1242
|
+
};
|
|
1243
|
+
// If we have pending revalidates, wait until they are all resolved.
|
|
1244
|
+
if (workStore.pendingRevalidates || workStore.pendingRevalidateWrites || workStore.pendingRevalidatedTags) {
|
|
1245
|
+
const pendingPromise = (0, _revalidationutils.executeRevalidates)(workStore).finally(()=>{
|
|
1246
|
+
if (process.env.NEXT_PRIVATE_DEBUG_CACHE) {
|
|
1247
|
+
console.log('pending revalidates promise finished for:', url);
|
|
1248
|
+
}
|
|
1249
|
+
});
|
|
1250
|
+
if (renderOpts.waitUntil) {
|
|
1251
|
+
renderOpts.waitUntil(pendingPromise);
|
|
1252
|
+
} else {
|
|
1253
|
+
options.waitUntil = pendingPromise;
|
|
1254
|
+
}
|
|
1255
|
+
}
|
|
1256
|
+
applyMetadataFromPrerenderResult(response, metadata, workStore);
|
|
1257
|
+
if (response.renderResumeDataCache) {
|
|
1258
|
+
metadata.renderResumeDataCache = response.renderResumeDataCache;
|
|
1259
|
+
}
|
|
1260
|
+
return new _renderresult.default(await (0, _nodewebstreamshelper.streamToString)(response.stream), options);
|
|
1261
|
+
} else {
|
|
1262
|
+
// We're rendering dynamically
|
|
1263
|
+
const renderResumeDataCache = renderOpts.renderResumeDataCache ?? (postponedState == null ? void 0 : postponedState.renderResumeDataCache) ?? null;
|
|
1264
|
+
const rootParams = (0, _createcomponenttree.getRootParams)(loaderTree, ctx.getDynamicParamFromSegment);
|
|
1265
|
+
const devFallbackParams = (0, _requestmeta.getRequestMeta)(req, 'devFallbackParams') || null;
|
|
1266
|
+
const createRequestStore = _requeststore.createRequestStoreForRender.bind(null, req, res, url, rootParams, implicitTags, renderOpts.onUpdateCookies, renderOpts.previewProps, isHmrRefresh, serverComponentsHmrCache, renderResumeDataCache, devFallbackParams);
|
|
1267
|
+
const requestStore = createRequestStore();
|
|
1268
|
+
if (process.env.NODE_ENV === 'development' && renderOpts.setIsrStatus && !cacheComponents && // Only pages using the Node runtime can use ISR, so we only need to
|
|
1269
|
+
// update the status for those.
|
|
1270
|
+
// The type check here ensures that `req` is correctly typed, and the
|
|
1271
|
+
// environment variable check provides dead code elimination.
|
|
1272
|
+
process.env.NEXT_RUNTIME !== 'edge' && (0, _helpers.isNodeNextRequest)(req)) {
|
|
1273
|
+
const setIsrStatus = renderOpts.setIsrStatus;
|
|
1274
|
+
req.originalRequest.on('end', ()=>{
|
|
1275
|
+
const { pathname } = new URL(req.url || '/', 'http://n');
|
|
1276
|
+
const isStatic = !requestStore.usedDynamic && !workStore.forceDynamic;
|
|
1277
|
+
setIsrStatus(pathname, isStatic);
|
|
1278
|
+
});
|
|
1279
|
+
}
|
|
1280
|
+
if (isRSCRequest) {
|
|
1281
|
+
if (isRuntimePrefetchRequest) {
|
|
1282
|
+
return generateRuntimePrefetchResult(req, ctx, requestStore);
|
|
1283
|
+
} else {
|
|
1284
|
+
if (process.env.NODE_ENV === 'development' && process.env.NEXT_RUNTIME !== 'edge' && cacheComponents) {
|
|
1285
|
+
return generateDynamicFlightRenderResultWithStagesInDev(req, ctx, requestStore, createRequestStore, devFallbackParams);
|
|
1286
|
+
} else {
|
|
1287
|
+
return generateDynamicFlightRenderResult(req, ctx, requestStore);
|
|
1288
|
+
}
|
|
1289
|
+
}
|
|
1290
|
+
}
|
|
1291
|
+
let didExecuteServerAction = false;
|
|
1292
|
+
let formState = null;
|
|
1293
|
+
if (isPossibleActionRequest) {
|
|
1294
|
+
// For action requests, we don't want to use the resume data cache.
|
|
1295
|
+
requestStore.renderResumeDataCache = null;
|
|
1296
|
+
// For action requests, we handle them differently with a special render result.
|
|
1297
|
+
const actionRequestResult = await (0, _actionhandler.handleAction)({
|
|
1298
|
+
req,
|
|
1299
|
+
res,
|
|
1300
|
+
ComponentMod,
|
|
1301
|
+
generateFlight: generateDynamicFlightRenderResult,
|
|
1302
|
+
workStore,
|
|
1303
|
+
requestStore,
|
|
1304
|
+
serverActions,
|
|
1305
|
+
ctx,
|
|
1306
|
+
metadata
|
|
1307
|
+
});
|
|
1308
|
+
if (actionRequestResult) {
|
|
1309
|
+
if (actionRequestResult.type === 'not-found') {
|
|
1310
|
+
const notFoundLoaderTree = createNotFoundLoaderTree(loaderTree);
|
|
1311
|
+
res.statusCode = 404;
|
|
1312
|
+
metadata.statusCode = 404;
|
|
1313
|
+
const stream = await renderToStream(requestStore, req, res, ctx, notFoundLoaderTree, formState, postponedState, metadata, undefined, devFallbackParams);
|
|
1314
|
+
return new _renderresult.default(stream, {
|
|
1315
|
+
metadata,
|
|
1316
|
+
contentType: _constants1.HTML_CONTENT_TYPE_HEADER
|
|
1317
|
+
});
|
|
1318
|
+
} else if (actionRequestResult.type === 'done') {
|
|
1319
|
+
if (actionRequestResult.result) {
|
|
1320
|
+
actionRequestResult.result.assignMetadata(metadata);
|
|
1321
|
+
return actionRequestResult.result;
|
|
1322
|
+
} else if (actionRequestResult.formState) {
|
|
1323
|
+
formState = actionRequestResult.formState;
|
|
1324
|
+
}
|
|
1325
|
+
}
|
|
1326
|
+
}
|
|
1327
|
+
didExecuteServerAction = true;
|
|
1328
|
+
// Restore the resume data cache
|
|
1329
|
+
requestStore.renderResumeDataCache = renderResumeDataCache;
|
|
1330
|
+
}
|
|
1331
|
+
const options = {
|
|
1332
|
+
metadata,
|
|
1333
|
+
contentType: _constants1.HTML_CONTENT_TYPE_HEADER
|
|
1334
|
+
};
|
|
1335
|
+
const stream = await renderToStream(// NOTE: in Cache Components (dev), if the render is restarted, it will use a different requestStore
|
|
1336
|
+
// than the one that we're passing in here.
|
|
1337
|
+
requestStore, req, res, ctx, loaderTree, formState, postponedState, metadata, // If we're rendering HTML after an action, we don't want restartable-render behavior
|
|
1338
|
+
// because the result should be dynamic, like it is in prod.
|
|
1339
|
+
// Also, the request store might have been mutated by the action (e.g. enabling draftMode)
|
|
1340
|
+
// and we currently we don't copy changes over when creating a new store,
|
|
1341
|
+
// so the restarted render wouldn't be correct.
|
|
1342
|
+
didExecuteServerAction ? undefined : createRequestStore, devFallbackParams);
|
|
1343
|
+
// Invalid dynamic usages should only error the request in development.
|
|
1344
|
+
// In production, it's better to produce a result.
|
|
1345
|
+
// (the dynamic error will still be thrown inside the component tree, but it's catchable by error boundaries)
|
|
1346
|
+
if (workStore.invalidDynamicUsageError && workStore.dev) {
|
|
1347
|
+
throw workStore.invalidDynamicUsageError;
|
|
1348
|
+
}
|
|
1349
|
+
// If we have pending revalidates, wait until they are all resolved.
|
|
1350
|
+
if (workStore.pendingRevalidates || workStore.pendingRevalidateWrites || workStore.pendingRevalidatedTags) {
|
|
1351
|
+
const pendingPromise = (0, _revalidationutils.executeRevalidates)(workStore).finally(()=>{
|
|
1352
|
+
if (process.env.NEXT_PRIVATE_DEBUG_CACHE) {
|
|
1353
|
+
console.log('pending revalidates promise finished for:', url);
|
|
1354
|
+
}
|
|
1355
|
+
});
|
|
1356
|
+
if (renderOpts.waitUntil) {
|
|
1357
|
+
renderOpts.waitUntil(pendingPromise);
|
|
1358
|
+
} else {
|
|
1359
|
+
options.waitUntil = pendingPromise;
|
|
1360
|
+
}
|
|
1361
|
+
}
|
|
1362
|
+
// Create the new render result for the response.
|
|
1363
|
+
return new _renderresult.default(stream, options);
|
|
1364
|
+
}
|
|
1365
|
+
}
|
|
1366
|
+
const renderToHTMLOrFlight = (req, res, pagePath, query, fallbackRouteParams, renderOpts, serverComponentsHmrCache, sharedContext)=>{
|
|
1367
|
+
var _renderOpts_previewProps;
|
|
1368
|
+
if (!req.url) {
|
|
1369
|
+
throw Object.defineProperty(new Error('Invalid URL'), "__NEXT_ERROR_CODE", {
|
|
1370
|
+
value: "E182",
|
|
1371
|
+
enumerable: false,
|
|
1372
|
+
configurable: true
|
|
1373
|
+
});
|
|
1374
|
+
}
|
|
1375
|
+
const url = (0, _parserelativeurl.parseRelativeUrl)(req.url, undefined, false);
|
|
1376
|
+
// We read these values from the request object as, in certain cases,
|
|
1377
|
+
// base-server will strip them to opt into different rendering behavior.
|
|
1378
|
+
const parsedRequestHeaders = parseRequestHeaders(req.headers, {
|
|
1379
|
+
isRoutePPREnabled: renderOpts.experimental.isRoutePPREnabled === true,
|
|
1380
|
+
previewModeId: (_renderOpts_previewProps = renderOpts.previewProps) == null ? void 0 : _renderOpts_previewProps.previewModeId
|
|
1381
|
+
});
|
|
1382
|
+
const { isPrefetchRequest, previouslyRevalidatedTags, nonce } = parsedRequestHeaders;
|
|
1383
|
+
let interpolatedParams;
|
|
1384
|
+
let postponedState = null;
|
|
1385
|
+
// If provided, the postpone state should be parsed so it can be provided to
|
|
1386
|
+
// React.
|
|
1387
|
+
if (typeof renderOpts.postponed === 'string') {
|
|
1388
|
+
if (fallbackRouteParams) {
|
|
1389
|
+
throw Object.defineProperty(new _invarianterror.InvariantError('postponed state should not be provided when fallback params are provided'), "__NEXT_ERROR_CODE", {
|
|
1390
|
+
value: "E592",
|
|
1391
|
+
enumerable: false,
|
|
1392
|
+
configurable: true
|
|
1393
|
+
});
|
|
1394
|
+
}
|
|
1395
|
+
interpolatedParams = (0, _getdynamicparam.interpolateParallelRouteParams)(renderOpts.ComponentMod.routeModule.userland.loaderTree, renderOpts.params ?? {}, pagePath, fallbackRouteParams);
|
|
1396
|
+
postponedState = (0, _postponedstate.parsePostponedState)(renderOpts.postponed, interpolatedParams);
|
|
1397
|
+
} else {
|
|
1398
|
+
interpolatedParams = (0, _getdynamicparam.interpolateParallelRouteParams)(renderOpts.ComponentMod.routeModule.userland.loaderTree, renderOpts.params ?? {}, pagePath, fallbackRouteParams);
|
|
1399
|
+
}
|
|
1400
|
+
if ((postponedState == null ? void 0 : postponedState.renderResumeDataCache) && renderOpts.renderResumeDataCache) {
|
|
1401
|
+
throw Object.defineProperty(new _invarianterror.InvariantError('postponed state and dev warmup immutable resume data cache should not be provided together'), "__NEXT_ERROR_CODE", {
|
|
1402
|
+
value: "E589",
|
|
1403
|
+
enumerable: false,
|
|
1404
|
+
configurable: true
|
|
1405
|
+
});
|
|
1406
|
+
}
|
|
1407
|
+
const workStore = (0, _workstore.createWorkStore)({
|
|
1408
|
+
page: renderOpts.routeModule.definition.page,
|
|
1409
|
+
renderOpts,
|
|
1410
|
+
// @TODO move to workUnitStore of type Request
|
|
1411
|
+
isPrefetchRequest,
|
|
1412
|
+
buildId: sharedContext.buildId,
|
|
1413
|
+
previouslyRevalidatedTags,
|
|
1414
|
+
nonce
|
|
1415
|
+
});
|
|
1416
|
+
return _workasyncstorageexternal.workAsyncStorage.run(workStore, // The function to run
|
|
1417
|
+
renderToHTMLOrFlightImpl, // all of it's args
|
|
1418
|
+
req, res, url, pagePath, query, renderOpts, workStore, parsedRequestHeaders, postponedState, serverComponentsHmrCache, sharedContext, interpolatedParams, fallbackRouteParams);
|
|
1419
|
+
};
|
|
1420
|
+
function applyMetadataFromPrerenderResult(response, metadata, workStore) {
|
|
1421
|
+
if (response.collectedTags) {
|
|
1422
|
+
metadata.fetchTags = response.collectedTags.join(',');
|
|
1423
|
+
}
|
|
1424
|
+
// Let the client router know how long to keep the cached entry around.
|
|
1425
|
+
const staleHeader = String(response.collectedStale);
|
|
1426
|
+
metadata.headers ??= {};
|
|
1427
|
+
metadata.headers[_approuterheaders.NEXT_ROUTER_STALE_TIME_HEADER] = staleHeader;
|
|
1428
|
+
// If force static is specifically set to false, we should not revalidate
|
|
1429
|
+
// the page.
|
|
1430
|
+
if (workStore.forceStatic === false || response.collectedRevalidate === 0) {
|
|
1431
|
+
metadata.cacheControl = {
|
|
1432
|
+
revalidate: 0,
|
|
1433
|
+
expire: undefined
|
|
1434
|
+
};
|
|
1435
|
+
} else {
|
|
1436
|
+
// Copy the cache control value onto the render result metadata.
|
|
1437
|
+
metadata.cacheControl = {
|
|
1438
|
+
revalidate: response.collectedRevalidate >= _constants1.INFINITE_CACHE ? false : response.collectedRevalidate,
|
|
1439
|
+
expire: response.collectedExpire >= _constants1.INFINITE_CACHE ? undefined : response.collectedExpire
|
|
1440
|
+
};
|
|
1441
|
+
}
|
|
1442
|
+
// provide bailout info for debugging
|
|
1443
|
+
if (metadata.cacheControl.revalidate === 0) {
|
|
1444
|
+
metadata.staticBailoutInfo = {
|
|
1445
|
+
description: workStore.dynamicUsageDescription,
|
|
1446
|
+
stack: workStore.dynamicUsageStack
|
|
1447
|
+
};
|
|
1448
|
+
}
|
|
1449
|
+
}
|
|
1450
|
+
async function renderToStream(requestStore, req, res, ctx, tree, formState, postponedState, metadata, createRequestStore, devFallbackParams) {
|
|
1451
|
+
/* eslint-disable @next/internal/no-ambiguous-jsx -- React Client */ const { assetPrefix, htmlRequestId, nonce, pagePath, renderOpts, requestId, workStore } = ctx;
|
|
1452
|
+
const { basePath, buildManifest, ComponentMod: { createElement, renderToReadableStream: serverRenderToReadableStream }, crossOrigin, dev = false, experimental, nextExport = false, onInstrumentationRequestError, page, reactMaxHeadersLength, setReactDebugChannel, shouldWaitOnAllReady, subresourceIntegrityManifest, supportsDynamicResponse, cacheComponents } = renderOpts;
|
|
1453
|
+
const { ServerInsertedHTMLProvider, renderServerInsertedHTML } = (0, _serverinsertedhtml.createServerInsertedHTML)();
|
|
1454
|
+
const getServerInsertedMetadata = (0, _createserverinsertedmetadata.createServerInsertedMetadata)(nonce);
|
|
1455
|
+
const tracingMetadata = (0, _utils1.getTracedMetadata)((0, _tracer.getTracer)().getTracePropagationData(), experimental.clientTraceMetadata);
|
|
1456
|
+
const polyfills = buildManifest.polyfillFiles.filter((polyfill)=>polyfill.endsWith('.js') && !polyfill.endsWith('.module.js')).map((polyfill)=>({
|
|
1457
|
+
src: `${assetPrefix}/_next/${polyfill}${(0, _getassetquerystring.getAssetQueryString)(ctx, false)}`,
|
|
1458
|
+
integrity: subresourceIntegrityManifest == null ? void 0 : subresourceIntegrityManifest[polyfill],
|
|
1459
|
+
crossOrigin,
|
|
1460
|
+
noModule: true,
|
|
1461
|
+
nonce
|
|
1462
|
+
}));
|
|
1463
|
+
const [preinitScripts, bootstrapScript] = (0, _requiredscripts.getRequiredScripts)(buildManifest, // Why is assetPrefix optional on renderOpts?
|
|
1464
|
+
// @TODO make it default empty string on renderOpts and get rid of it from ctx
|
|
1465
|
+
assetPrefix, crossOrigin, subresourceIntegrityManifest, (0, _getassetquerystring.getAssetQueryString)(ctx, true), nonce, page);
|
|
1466
|
+
// In development mode, set the request ID as a global variable, before the
|
|
1467
|
+
// bootstrap script is executed, which depends on it during hydration.
|
|
1468
|
+
const bootstrapScriptContent = process.env.NODE_ENV !== 'production' ? `self.__next_r=${JSON.stringify(requestId)}` : undefined;
|
|
1469
|
+
// Create the "render route (app)" span manually so we can keep it open during streaming.
|
|
1470
|
+
// This is necessary because errors inside Suspense boundaries are reported asynchronously
|
|
1471
|
+
// during stream consumption, after a typical wrapped function would have ended the span.
|
|
1472
|
+
// Note: We pass the full span name as the first argument since startSpan uses it directly.
|
|
1473
|
+
const renderSpan = (0, _tracer.getTracer)().startSpan(`render route (app) ${pagePath}`, {
|
|
1474
|
+
attributes: {
|
|
1475
|
+
'next.span_name': `render route (app) ${pagePath}`,
|
|
1476
|
+
'next.span_type': _constants.AppRenderSpan.getBodyResult,
|
|
1477
|
+
'next.route': pagePath
|
|
1478
|
+
}
|
|
1479
|
+
});
|
|
1480
|
+
// Helper to end the span with error status (used when throwing from catch blocks)
|
|
1481
|
+
const endSpanWithError = (err)=>{
|
|
1482
|
+
if (!renderSpan.isRecording()) return;
|
|
1483
|
+
if (err instanceof Error) {
|
|
1484
|
+
renderSpan.recordException(err);
|
|
1485
|
+
renderSpan.setAttribute('error.type', err.name);
|
|
1486
|
+
}
|
|
1487
|
+
renderSpan.setStatus({
|
|
1488
|
+
code: _tracer.SpanStatusCode.ERROR,
|
|
1489
|
+
message: err instanceof Error ? err.message : undefined
|
|
1490
|
+
});
|
|
1491
|
+
renderSpan.end();
|
|
1492
|
+
};
|
|
1493
|
+
// Run the rest of the function within the span's context so child spans
|
|
1494
|
+
// (like "build component tree", "generateMetadata") are properly parented.
|
|
1495
|
+
return (0, _tracer.getTracer)().withSpan(renderSpan, async ()=>{
|
|
1496
|
+
const { reactServerErrorsByDigest } = workStore;
|
|
1497
|
+
function onHTMLRenderRSCError(err, silenceLog) {
|
|
1498
|
+
return onInstrumentationRequestError == null ? void 0 : onInstrumentationRequestError(err, req, createErrorContext(ctx, 'react-server-components'), silenceLog);
|
|
1499
|
+
}
|
|
1500
|
+
const serverComponentsErrorHandler = (0, _createerrorhandler.createReactServerErrorHandler)(dev, nextExport, reactServerErrorsByDigest, onHTMLRenderRSCError, renderSpan);
|
|
1501
|
+
function onHTMLRenderSSRError(err) {
|
|
1502
|
+
// We don't need to silence logs here. onHTMLRenderSSRError won't be called
|
|
1503
|
+
// at all if the error was logged before in the RSC error handler.
|
|
1504
|
+
const silenceLog = false;
|
|
1505
|
+
return onInstrumentationRequestError == null ? void 0 : onInstrumentationRequestError(err, req, createErrorContext(ctx, 'server-rendering'), silenceLog);
|
|
1506
|
+
}
|
|
1507
|
+
const allCapturedErrors = [];
|
|
1508
|
+
const htmlRendererErrorHandler = (0, _createerrorhandler.createHTMLErrorHandler)(dev, nextExport, reactServerErrorsByDigest, allCapturedErrors, onHTMLRenderSSRError, renderSpan);
|
|
1509
|
+
let reactServerResult = null;
|
|
1510
|
+
let reactDebugStream;
|
|
1511
|
+
const setHeader = res.setHeader.bind(res);
|
|
1512
|
+
const appendHeader = res.appendHeader.bind(res);
|
|
1513
|
+
const { clientModules } = (0, _manifestssingleton.getClientReferenceManifest)();
|
|
1514
|
+
try {
|
|
1515
|
+
if (// We only want this behavior when we have React's dev builds available
|
|
1516
|
+
process.env.NODE_ENV === 'development' && // We only want this behavior when running `next dev`
|
|
1517
|
+
dev && // Edge routes never prerender so we don't have a Prerender environment for anything in edge runtime
|
|
1518
|
+
process.env.NEXT_RUNTIME !== 'edge' && // We only have a Prerender environment for projects opted into cacheComponents
|
|
1519
|
+
cacheComponents) {
|
|
1520
|
+
let debugChannel;
|
|
1521
|
+
const getPayload = async (// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
1522
|
+
requestStore)=>{
|
|
1523
|
+
const payload = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, getRSCPayload, tree, ctx, res.statusCode === 404);
|
|
1524
|
+
if (isBypassingCachesInDev(renderOpts, requestStore)) {
|
|
1525
|
+
// Mark the RSC payload to indicate that caches were bypassed in dev.
|
|
1526
|
+
// This lets the client know not to cache anything based on this render.
|
|
1527
|
+
if (renderOpts.setCacheStatus) {
|
|
1528
|
+
// we know this is available when cacheComponents is enabled, but typeguard to be safe
|
|
1529
|
+
renderOpts.setCacheStatus('bypass', htmlRequestId);
|
|
1530
|
+
}
|
|
1531
|
+
payload._bypassCachesInDev = createElement(WarnForBypassCachesInDev, {
|
|
1532
|
+
route: workStore.route
|
|
1533
|
+
});
|
|
1534
|
+
}
|
|
1535
|
+
return payload;
|
|
1536
|
+
};
|
|
1537
|
+
if (// We only do this flow if we can safely recreate the store from scratch
|
|
1538
|
+
// (which is not the case for renders after an action)
|
|
1539
|
+
createRequestStore && // We only do this flow if we're not bypassing caches in dev using
|
|
1540
|
+
// "disable cache" in devtools or a hard refresh (cache-control: "no-store")
|
|
1541
|
+
!isBypassingCachesInDev(renderOpts, requestStore)) {
|
|
1542
|
+
const { stream: serverStream, accumulatedChunksPromise, staticInterruptReason, runtimeInterruptReason, staticStageEndTime, runtimeStageEndTime, debugChannel: returnedDebugChannel, requestStore: finalRequestStore } = await renderWithRestartOnCacheMissInDev(ctx, requestStore, createRequestStore, getPayload, serverComponentsErrorHandler);
|
|
1543
|
+
let validationDebugChannelClient = undefined;
|
|
1544
|
+
if (returnedDebugChannel) {
|
|
1545
|
+
const [t1, t2] = returnedDebugChannel.clientSide.readable.tee();
|
|
1546
|
+
returnedDebugChannel.clientSide.readable = t1;
|
|
1547
|
+
validationDebugChannelClient = nodeStreamFromReadableStream(t2);
|
|
1548
|
+
}
|
|
1549
|
+
_consoleasyncstorageexternal.consoleAsyncStorage.run({
|
|
1550
|
+
dim: true
|
|
1551
|
+
}, spawnStaticShellValidationInDev, accumulatedChunksPromise, staticInterruptReason, runtimeInterruptReason, staticStageEndTime, runtimeStageEndTime, ctx, finalRequestStore, devFallbackParams, validationDebugChannelClient);
|
|
1552
|
+
reactServerResult = new _apprenderprerenderutils.ReactServerResult(serverStream);
|
|
1553
|
+
requestStore = finalRequestStore;
|
|
1554
|
+
debugChannel = returnedDebugChannel;
|
|
1555
|
+
} else {
|
|
1556
|
+
// We're either bypassing caches or we can't restart the render.
|
|
1557
|
+
// Do a dynamic render, but with (basic) environment labels.
|
|
1558
|
+
debugChannel = setReactDebugChannel && createDebugChannel();
|
|
1559
|
+
const serverStream = await stagedRenderToReadableStreamWithoutCachesInDev(ctx, requestStore, getPayload, {
|
|
1560
|
+
onError: serverComponentsErrorHandler,
|
|
1561
|
+
filterStackFrame,
|
|
1562
|
+
debugChannel: debugChannel == null ? void 0 : debugChannel.serverSide
|
|
1563
|
+
});
|
|
1564
|
+
reactServerResult = new _apprenderprerenderutils.ReactServerResult(serverStream);
|
|
1565
|
+
}
|
|
1566
|
+
if (debugChannel && setReactDebugChannel) {
|
|
1567
|
+
const [readableSsr, readableBrowser] = debugChannel.clientSide.readable.tee();
|
|
1568
|
+
reactDebugStream = readableSsr;
|
|
1569
|
+
setReactDebugChannel({
|
|
1570
|
+
readable: readableBrowser
|
|
1571
|
+
}, htmlRequestId, requestId);
|
|
1572
|
+
}
|
|
1573
|
+
} else {
|
|
1574
|
+
// This is a dynamic render. We don't do dynamic tracking because we're not prerendering
|
|
1575
|
+
const RSCPayload = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, getRSCPayload, tree, ctx, res.statusCode === 404);
|
|
1576
|
+
const debugChannel = setReactDebugChannel && createDebugChannel();
|
|
1577
|
+
if (debugChannel) {
|
|
1578
|
+
const [readableSsr, readableBrowser] = debugChannel.clientSide.readable.tee();
|
|
1579
|
+
reactDebugStream = readableSsr;
|
|
1580
|
+
setReactDebugChannel({
|
|
1581
|
+
readable: readableBrowser
|
|
1582
|
+
}, htmlRequestId, requestId);
|
|
1583
|
+
}
|
|
1584
|
+
reactServerResult = new _apprenderprerenderutils.ReactServerResult(_workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, serverRenderToReadableStream, RSCPayload, clientModules, {
|
|
1585
|
+
filterStackFrame,
|
|
1586
|
+
onError: serverComponentsErrorHandler,
|
|
1587
|
+
debugChannel: debugChannel == null ? void 0 : debugChannel.serverSide
|
|
1588
|
+
}));
|
|
1589
|
+
}
|
|
1590
|
+
// React doesn't start rendering synchronously but we want the RSC render to have a chance to start
|
|
1591
|
+
// before we begin SSR rendering because we want to capture any available preload headers so we tick
|
|
1592
|
+
// one task before continuing
|
|
1593
|
+
await (0, _scheduler.waitAtLeastOneReactRenderTask)();
|
|
1594
|
+
// If provided, the postpone state should be parsed as JSON so it can be
|
|
1595
|
+
// provided to React.
|
|
1596
|
+
if (typeof renderOpts.postponed === 'string') {
|
|
1597
|
+
if ((postponedState == null ? void 0 : postponedState.type) === _postponedstate.DynamicState.DATA) {
|
|
1598
|
+
// We have a complete HTML Document in the prerender but we need to
|
|
1599
|
+
// still include the new server component render because it was not included
|
|
1600
|
+
// in the static prelude.
|
|
1601
|
+
const inlinedReactServerDataStream = (0, _useflightresponse.createInlinedDataReadableStream)(reactServerResult.tee(), nonce, formState);
|
|
1602
|
+
// End the span since there's no async rendering in this path
|
|
1603
|
+
if (renderSpan.isRecording()) renderSpan.end();
|
|
1604
|
+
return (0, _nodewebstreamshelper.chainStreams)(inlinedReactServerDataStream, (0, _nodewebstreamshelper.createDocumentClosingStream)());
|
|
1605
|
+
} else if (postponedState) {
|
|
1606
|
+
// We assume we have dynamic HTML requiring a resume render to complete
|
|
1607
|
+
const { postponed, preludeState } = (0, _postponedstate.getPostponedFromState)(postponedState);
|
|
1608
|
+
const resume = require('react-dom/server').resume;
|
|
1609
|
+
const htmlStream = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, resume, /*#__PURE__*/ (0, _jsxruntime.jsx)(App, {
|
|
1610
|
+
reactServerStream: reactServerResult.tee(),
|
|
1611
|
+
reactDebugStream: reactDebugStream,
|
|
1612
|
+
debugEndTime: undefined,
|
|
1613
|
+
preinitScripts: preinitScripts,
|
|
1614
|
+
ServerInsertedHTMLProvider: ServerInsertedHTMLProvider,
|
|
1615
|
+
nonce: nonce,
|
|
1616
|
+
images: ctx.renderOpts.images
|
|
1617
|
+
}), postponed, {
|
|
1618
|
+
onError: htmlRendererErrorHandler,
|
|
1619
|
+
nonce
|
|
1620
|
+
});
|
|
1621
|
+
// End the render span only after React completed rendering (including anything inside Suspense boundaries)
|
|
1622
|
+
htmlStream.allReady.finally(()=>{
|
|
1623
|
+
if (renderSpan.isRecording()) renderSpan.end();
|
|
1624
|
+
});
|
|
1625
|
+
const getServerInsertedHTML = (0, _makegetserverinsertedhtml.makeGetServerInsertedHTML)({
|
|
1626
|
+
polyfills,
|
|
1627
|
+
renderServerInsertedHTML,
|
|
1628
|
+
serverCapturedErrors: allCapturedErrors,
|
|
1629
|
+
basePath,
|
|
1630
|
+
tracingMetadata: tracingMetadata
|
|
1631
|
+
});
|
|
1632
|
+
return await (0, _nodewebstreamshelper.continueDynamicHTMLResume)(htmlStream, {
|
|
1633
|
+
// If the prelude is empty (i.e. is no static shell), we should wait for initial HTML to be rendered
|
|
1634
|
+
// to avoid injecting RSC data too early.
|
|
1635
|
+
// If we have a non-empty-prelude (i.e. a static HTML shell), then it's already been sent separately,
|
|
1636
|
+
// so we shouldn't wait for any HTML to be emitted from the resume before sending RSC data.
|
|
1637
|
+
delayDataUntilFirstHtmlChunk: preludeState === _postponedstate.DynamicHTMLPreludeState.Empty,
|
|
1638
|
+
inlinedDataStream: (0, _useflightresponse.createInlinedDataReadableStream)(reactServerResult.consume(), nonce, formState),
|
|
1639
|
+
getServerInsertedHTML,
|
|
1640
|
+
getServerInsertedMetadata
|
|
1641
|
+
});
|
|
1642
|
+
}
|
|
1643
|
+
}
|
|
1644
|
+
// This is a regular dynamic render
|
|
1645
|
+
const renderToReadableStream = require('react-dom/server').renderToReadableStream;
|
|
1646
|
+
const htmlStream = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, renderToReadableStream, /*#__PURE__*/ (0, _jsxruntime.jsx)(App, {
|
|
1647
|
+
reactServerStream: reactServerResult.tee(),
|
|
1648
|
+
reactDebugStream: reactDebugStream,
|
|
1649
|
+
debugEndTime: undefined,
|
|
1650
|
+
preinitScripts: preinitScripts,
|
|
1651
|
+
ServerInsertedHTMLProvider: ServerInsertedHTMLProvider,
|
|
1652
|
+
nonce: nonce,
|
|
1653
|
+
images: ctx.renderOpts.images
|
|
1654
|
+
}), {
|
|
1655
|
+
onError: htmlRendererErrorHandler,
|
|
1656
|
+
nonce,
|
|
1657
|
+
onHeaders: (headers)=>{
|
|
1658
|
+
headers.forEach((value, key)=>{
|
|
1659
|
+
appendHeader(key, value);
|
|
1660
|
+
});
|
|
1661
|
+
},
|
|
1662
|
+
maxHeadersLength: reactMaxHeadersLength,
|
|
1663
|
+
bootstrapScriptContent,
|
|
1664
|
+
bootstrapScripts: [
|
|
1665
|
+
bootstrapScript
|
|
1666
|
+
],
|
|
1667
|
+
formState
|
|
1668
|
+
});
|
|
1669
|
+
// End the render span only after React completed rendering (including anything inside Suspense boundaries)
|
|
1670
|
+
htmlStream.allReady.finally(()=>{
|
|
1671
|
+
if (renderSpan.isRecording()) renderSpan.end();
|
|
1672
|
+
});
|
|
1673
|
+
const getServerInsertedHTML = (0, _makegetserverinsertedhtml.makeGetServerInsertedHTML)({
|
|
1674
|
+
polyfills,
|
|
1675
|
+
renderServerInsertedHTML,
|
|
1676
|
+
serverCapturedErrors: allCapturedErrors,
|
|
1677
|
+
basePath,
|
|
1678
|
+
tracingMetadata: tracingMetadata
|
|
1679
|
+
});
|
|
1680
|
+
/**
|
|
1681
|
+
* Rules of Static & Dynamic HTML:
|
|
1682
|
+
*
|
|
1683
|
+
* 1.) We must generate static HTML unless the caller explicitly opts
|
|
1684
|
+
* in to dynamic HTML support.
|
|
1685
|
+
*
|
|
1686
|
+
* 2.) If dynamic HTML support is requested, we must honor that request
|
|
1687
|
+
* or throw an error. It is the sole responsibility of the caller to
|
|
1688
|
+
* ensure they aren't e.g. requesting dynamic HTML for a static page.
|
|
1689
|
+
*
|
|
1690
|
+
* 3.) If `shouldWaitOnAllReady` is true, which indicates we need to
|
|
1691
|
+
* resolve all suspenses and generate a full HTML. e.g. when it's a
|
|
1692
|
+
* html limited bot requests, we produce the full HTML content.
|
|
1693
|
+
*
|
|
1694
|
+
* These rules help ensure that other existing features like request caching,
|
|
1695
|
+
* coalescing, and ISR continue working as intended.
|
|
1696
|
+
*/ const generateStaticHTML = supportsDynamicResponse !== true || !!shouldWaitOnAllReady;
|
|
1697
|
+
return await (0, _nodewebstreamshelper.continueFizzStream)(htmlStream, {
|
|
1698
|
+
inlinedDataStream: (0, _useflightresponse.createInlinedDataReadableStream)(reactServerResult.consume(), nonce, formState),
|
|
1699
|
+
isStaticGeneration: generateStaticHTML,
|
|
1700
|
+
isBuildTimePrerendering: ctx.workStore.isBuildTimePrerendering === true,
|
|
1701
|
+
buildId: ctx.workStore.buildId,
|
|
1702
|
+
getServerInsertedHTML,
|
|
1703
|
+
getServerInsertedMetadata,
|
|
1704
|
+
validateRootLayout: dev
|
|
1705
|
+
});
|
|
1706
|
+
} catch (err) {
|
|
1707
|
+
if ((0, _staticgenerationbailout.isStaticGenBailoutError)(err) || typeof err === 'object' && err !== null && 'message' in err && typeof err.message === 'string' && err.message.includes('https://nextjs.org/docs/advanced-features/static-html-export')) {
|
|
1708
|
+
// Ensure that "next dev" prints the red error overlay
|
|
1709
|
+
endSpanWithError(err);
|
|
1710
|
+
throw err;
|
|
1711
|
+
}
|
|
1712
|
+
// If a bailout made it to this point, it means it wasn't wrapped inside
|
|
1713
|
+
// a suspense boundary.
|
|
1714
|
+
const shouldBailoutToCSR = (0, _bailouttocsr.isBailoutToCSRError)(err);
|
|
1715
|
+
if (shouldBailoutToCSR) {
|
|
1716
|
+
const stack = (0, _formatservererror.getStackWithoutErrorMessage)(err);
|
|
1717
|
+
(0, _log.error)(`${err.reason} should be wrapped in a suspense boundary at page "${pagePath}". Read more: https://nextjs.org/docs/messages/missing-suspense-with-csr-bailout\n${stack}`);
|
|
1718
|
+
endSpanWithError(err);
|
|
1719
|
+
throw err;
|
|
1720
|
+
}
|
|
1721
|
+
let errorType;
|
|
1722
|
+
if ((0, _httpaccessfallback.isHTTPAccessFallbackError)(err)) {
|
|
1723
|
+
res.statusCode = (0, _httpaccessfallback.getAccessFallbackHTTPStatus)(err);
|
|
1724
|
+
metadata.statusCode = res.statusCode;
|
|
1725
|
+
errorType = (0, _httpaccessfallback.getAccessFallbackErrorTypeByStatus)(res.statusCode);
|
|
1726
|
+
} else if ((0, _redirecterror.isRedirectError)(err)) {
|
|
1727
|
+
errorType = 'redirect';
|
|
1728
|
+
res.statusCode = (0, _redirect.getRedirectStatusCodeFromError)(err);
|
|
1729
|
+
metadata.statusCode = res.statusCode;
|
|
1730
|
+
const redirectUrl = (0, _addpathprefix.addPathPrefix)((0, _redirect.getURLFromRedirectError)(err), basePath);
|
|
1731
|
+
// If there were mutable cookies set, we need to set them on the
|
|
1732
|
+
// response.
|
|
1733
|
+
const headers = new Headers();
|
|
1734
|
+
if ((0, _requestcookies.appendMutableCookies)(headers, requestStore.mutableCookies)) {
|
|
1735
|
+
setHeader('set-cookie', Array.from(headers.values()));
|
|
1736
|
+
}
|
|
1737
|
+
setHeader('location', redirectUrl);
|
|
1738
|
+
} else if (!shouldBailoutToCSR) {
|
|
1739
|
+
res.statusCode = 500;
|
|
1740
|
+
metadata.statusCode = res.statusCode;
|
|
1741
|
+
}
|
|
1742
|
+
const [errorPreinitScripts, errorBootstrapScript] = (0, _requiredscripts.getRequiredScripts)(buildManifest, assetPrefix, crossOrigin, subresourceIntegrityManifest, (0, _getassetquerystring.getAssetQueryString)(ctx, false), nonce, '/_not-found/page');
|
|
1743
|
+
let errorRSCPayload;
|
|
1744
|
+
let errorServerStream;
|
|
1745
|
+
try {
|
|
1746
|
+
errorRSCPayload = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, getErrorRSCPayload, tree, ctx, reactServerErrorsByDigest.has(err.digest) ? null : err, errorType);
|
|
1747
|
+
errorServerStream = _workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, serverRenderToReadableStream, errorRSCPayload, clientModules, {
|
|
1748
|
+
filterStackFrame,
|
|
1749
|
+
onError: serverComponentsErrorHandler
|
|
1750
|
+
});
|
|
1751
|
+
if (reactServerResult === null) {
|
|
1752
|
+
// We errored when we did not have an RSC stream to read from. This is not just a render
|
|
1753
|
+
// error, we need to throw early
|
|
1754
|
+
endSpanWithError(err);
|
|
1755
|
+
throw err;
|
|
1756
|
+
}
|
|
1757
|
+
} catch (setupErr) {
|
|
1758
|
+
endSpanWithError(setupErr);
|
|
1759
|
+
throw setupErr;
|
|
1760
|
+
}
|
|
1761
|
+
try {
|
|
1762
|
+
const fizzStream = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, _nodewebstreamshelper.renderToInitialFizzStream, {
|
|
1763
|
+
ReactDOMServer: require('react-dom/server'),
|
|
1764
|
+
element: /*#__PURE__*/ (0, _jsxruntime.jsx)(ErrorApp, {
|
|
1765
|
+
reactServerStream: errorServerStream,
|
|
1766
|
+
ServerInsertedHTMLProvider: ServerInsertedHTMLProvider,
|
|
1767
|
+
preinitScripts: errorPreinitScripts,
|
|
1768
|
+
nonce: nonce,
|
|
1769
|
+
images: ctx.renderOpts.images
|
|
1770
|
+
}),
|
|
1771
|
+
streamOptions: {
|
|
1772
|
+
nonce,
|
|
1773
|
+
bootstrapScriptContent,
|
|
1774
|
+
// Include hydration scripts in the HTML
|
|
1775
|
+
bootstrapScripts: [
|
|
1776
|
+
errorBootstrapScript
|
|
1777
|
+
],
|
|
1778
|
+
formState
|
|
1779
|
+
}
|
|
1780
|
+
});
|
|
1781
|
+
// End the render span only after React completed rendering (including anything inside Suspense boundaries)
|
|
1782
|
+
fizzStream.allReady.finally(()=>{
|
|
1783
|
+
if (renderSpan.isRecording()) renderSpan.end();
|
|
1784
|
+
});
|
|
1785
|
+
/**
|
|
1786
|
+
* Rules of Static & Dynamic HTML:
|
|
1787
|
+
*
|
|
1788
|
+
* 1.) We must generate static HTML unless the caller explicitly opts
|
|
1789
|
+
* in to dynamic HTML support.
|
|
1790
|
+
*
|
|
1791
|
+
* 2.) If dynamic HTML support is requested, we must honor that request
|
|
1792
|
+
* or throw an error. It is the sole responsibility of the caller to
|
|
1793
|
+
* ensure they aren't e.g. requesting dynamic HTML for a static page.
|
|
1794
|
+
* 3.) If `shouldWaitOnAllReady` is true, which indicates we need to
|
|
1795
|
+
* resolve all suspenses and generate a full HTML. e.g. when it's a
|
|
1796
|
+
* html limited bot requests, we produce the full HTML content.
|
|
1797
|
+
*
|
|
1798
|
+
* These rules help ensure that other existing features like request caching,
|
|
1799
|
+
* coalescing, and ISR continue working as intended.
|
|
1800
|
+
*/ const generateStaticHTML = supportsDynamicResponse !== true || !!shouldWaitOnAllReady;
|
|
1801
|
+
return await (0, _nodewebstreamshelper.continueFizzStream)(fizzStream, {
|
|
1802
|
+
inlinedDataStream: (0, _useflightresponse.createInlinedDataReadableStream)(// This is intentionally using the readable datastream from the
|
|
1803
|
+
// main render rather than the flight data from the error page
|
|
1804
|
+
// render
|
|
1805
|
+
reactServerResult.consume(), nonce, formState),
|
|
1806
|
+
isStaticGeneration: generateStaticHTML,
|
|
1807
|
+
isBuildTimePrerendering: ctx.workStore.isBuildTimePrerendering === true,
|
|
1808
|
+
buildId: ctx.workStore.buildId,
|
|
1809
|
+
getServerInsertedHTML: (0, _makegetserverinsertedhtml.makeGetServerInsertedHTML)({
|
|
1810
|
+
polyfills,
|
|
1811
|
+
renderServerInsertedHTML,
|
|
1812
|
+
serverCapturedErrors: [],
|
|
1813
|
+
basePath,
|
|
1814
|
+
tracingMetadata: tracingMetadata
|
|
1815
|
+
}),
|
|
1816
|
+
getServerInsertedMetadata,
|
|
1817
|
+
validateRootLayout: dev
|
|
1818
|
+
});
|
|
1819
|
+
} catch (finalErr) {
|
|
1820
|
+
if (process.env.NODE_ENV === 'development' && (0, _httpaccessfallback.isHTTPAccessFallbackError)(finalErr)) {
|
|
1821
|
+
const { bailOnRootNotFound } = require('../../client/components/dev-root-http-access-fallback-boundary');
|
|
1822
|
+
bailOnRootNotFound();
|
|
1823
|
+
}
|
|
1824
|
+
endSpanWithError(finalErr);
|
|
1825
|
+
throw finalErr;
|
|
1826
|
+
}
|
|
1827
|
+
}
|
|
1828
|
+
});
|
|
1829
|
+
/* eslint-enable @next/internal/no-ambiguous-jsx */ }
|
|
1830
|
+
async function renderWithRestartOnCacheMissInDev(ctx, initialRequestStore, createRequestStore, getPayload, onError) {
|
|
1831
|
+
const { htmlRequestId, renderOpts, componentMod: { routeModule: { userland: { loaderTree } } } } = ctx;
|
|
1832
|
+
const { ComponentMod, setCacheStatus, setReactDebugChannel } = renderOpts;
|
|
1833
|
+
const hasRuntimePrefetch = await (0, _stagedvalidation.anySegmentHasRuntimePrefetchEnabled)(loaderTree);
|
|
1834
|
+
// If the render is restarted, we'll recreate a fresh request store
|
|
1835
|
+
let requestStore = initialRequestStore;
|
|
1836
|
+
const environmentName = ()=>{
|
|
1837
|
+
const currentStage = requestStore.stagedRendering.currentStage;
|
|
1838
|
+
switch(currentStage){
|
|
1839
|
+
case _stagedrendering.RenderStage.Before:
|
|
1840
|
+
case _stagedrendering.RenderStage.Static:
|
|
1841
|
+
return 'Prerender';
|
|
1842
|
+
case _stagedrendering.RenderStage.Runtime:
|
|
1843
|
+
return hasRuntimePrefetch ? 'Prefetch' : 'Prefetchable';
|
|
1844
|
+
case _stagedrendering.RenderStage.Dynamic:
|
|
1845
|
+
case _stagedrendering.RenderStage.Abandoned:
|
|
1846
|
+
return 'Server';
|
|
1847
|
+
default:
|
|
1848
|
+
currentStage;
|
|
1849
|
+
throw Object.defineProperty(new _invarianterror.InvariantError(`Invalid render stage: ${currentStage}`), "__NEXT_ERROR_CODE", {
|
|
1850
|
+
value: "E881",
|
|
1851
|
+
enumerable: false,
|
|
1852
|
+
configurable: true
|
|
1853
|
+
});
|
|
1854
|
+
}
|
|
1855
|
+
};
|
|
1856
|
+
//===============================================
|
|
1857
|
+
// Initial render
|
|
1858
|
+
//===============================================
|
|
1859
|
+
// Try to render the page and see if there's any cache misses.
|
|
1860
|
+
// If there are, wait for caches to finish and restart the render.
|
|
1861
|
+
// This render might end up being used as a prospective render (if there's cache misses),
|
|
1862
|
+
// so we need to set it up for filling caches.
|
|
1863
|
+
const cacheSignal = new _cachesignal.CacheSignal();
|
|
1864
|
+
// If we encounter async modules that delay rendering, we'll also need to restart.
|
|
1865
|
+
// TODO(restart-on-cache-miss): technically, we only need to wait for pending *server* modules here,
|
|
1866
|
+
// but `trackPendingModules` doesn't distinguish between client and server.
|
|
1867
|
+
(0, _trackmoduleloadingexternal.trackPendingModules)(cacheSignal);
|
|
1868
|
+
const prerenderResumeDataCache = (0, _resumedatacache.createPrerenderResumeDataCache)();
|
|
1869
|
+
const initialReactController = new AbortController();
|
|
1870
|
+
const initialDataController = new AbortController() // Controls hanging promises we create
|
|
1871
|
+
;
|
|
1872
|
+
const initialStageController = new _stagedrendering.StagedRenderingController(initialDataController.signal, hasRuntimePrefetch);
|
|
1873
|
+
requestStore.prerenderResumeDataCache = prerenderResumeDataCache;
|
|
1874
|
+
// `getRenderResumeDataCache` will fall back to using `prerenderResumeDataCache` as `renderResumeDataCache`,
|
|
1875
|
+
// so not having a resume data cache won't break any expectations in case we don't need to restart.
|
|
1876
|
+
requestStore.renderResumeDataCache = null;
|
|
1877
|
+
requestStore.stagedRendering = initialStageController;
|
|
1878
|
+
requestStore.asyncApiPromises = createAsyncApiPromisesInDev(initialStageController, requestStore.cookies, requestStore.mutableCookies, requestStore.headers);
|
|
1879
|
+
requestStore.cacheSignal = cacheSignal;
|
|
1880
|
+
let debugChannel = setReactDebugChannel && createDebugChannel();
|
|
1881
|
+
const { clientModules } = (0, _manifestssingleton.getClientReferenceManifest)();
|
|
1882
|
+
// Note: The stage controller starts out in the `Before` stage,
|
|
1883
|
+
// where sync IO does not cause aborts, so it's okay if it happens before render.
|
|
1884
|
+
const initialRscPayload = await getPayload(requestStore);
|
|
1885
|
+
const maybeInitialStreamResult = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, ()=>(0, _apprenderrenderutils.pipelineInSequentialTasks)(()=>{
|
|
1886
|
+
// Static stage
|
|
1887
|
+
initialStageController.advanceStage(_stagedrendering.RenderStage.Static);
|
|
1888
|
+
const stream = ComponentMod.renderToReadableStream(initialRscPayload, clientModules, {
|
|
1889
|
+
onError,
|
|
1890
|
+
environmentName,
|
|
1891
|
+
filterStackFrame,
|
|
1892
|
+
debugChannel: debugChannel == null ? void 0 : debugChannel.serverSide,
|
|
1893
|
+
signal: initialReactController.signal
|
|
1894
|
+
});
|
|
1895
|
+
// If we abort the render, we want to reject the stage-dependent promises as well.
|
|
1896
|
+
// Note that we want to install this listener after the render is started
|
|
1897
|
+
// so that it runs after react is finished running its abort code.
|
|
1898
|
+
initialReactController.signal.addEventListener('abort', ()=>{
|
|
1899
|
+
initialDataController.abort(initialReactController.signal.reason);
|
|
1900
|
+
});
|
|
1901
|
+
const [continuationStream, accumulatingStream] = stream.tee();
|
|
1902
|
+
const accumulatedChunksPromise = accumulateStreamChunks(accumulatingStream, initialStageController, initialDataController.signal);
|
|
1903
|
+
return {
|
|
1904
|
+
stream: continuationStream,
|
|
1905
|
+
accumulatedChunksPromise
|
|
1906
|
+
};
|
|
1907
|
+
}, ({ stream, accumulatedChunksPromise })=>{
|
|
1908
|
+
// Runtime stage
|
|
1909
|
+
if (initialStageController.currentStage === _stagedrendering.RenderStage.Abandoned) {
|
|
1910
|
+
// If we abandoned the render in the static stage, we won't proceed further.
|
|
1911
|
+
return null;
|
|
1912
|
+
}
|
|
1913
|
+
// If we had a cache miss in the static stage, we'll have to discard this stream
|
|
1914
|
+
// and render again once the caches are warm.
|
|
1915
|
+
// If we already advanced stages we similarly had sync IO that might be from module loading
|
|
1916
|
+
// and need to render again once the caches are warm.
|
|
1917
|
+
if (cacheSignal.hasPendingReads()) {
|
|
1918
|
+
// Regardless of whether we are going to abandon this
|
|
1919
|
+
// render we need the unblock runtime b/c it's essential
|
|
1920
|
+
// filling caches.
|
|
1921
|
+
initialStageController.abandonRender();
|
|
1922
|
+
return null;
|
|
1923
|
+
}
|
|
1924
|
+
initialStageController.advanceStage(_stagedrendering.RenderStage.Runtime);
|
|
1925
|
+
return {
|
|
1926
|
+
stream,
|
|
1927
|
+
accumulatedChunksPromise
|
|
1928
|
+
};
|
|
1929
|
+
}, (result)=>{
|
|
1930
|
+
// Dynamic stage
|
|
1931
|
+
if (result === null || initialStageController.currentStage === _stagedrendering.RenderStage.Abandoned) {
|
|
1932
|
+
// If we abandoned the render in the static or runtime stage, we won't proceed further.
|
|
1933
|
+
return null;
|
|
1934
|
+
}
|
|
1935
|
+
// If we had cache misses in either of the previous stages,
|
|
1936
|
+
// then we'll only use this render for filling caches.
|
|
1937
|
+
// We won't advance the stage, and thus leave dynamic APIs hanging,
|
|
1938
|
+
// because they won't be cached anyway, so it'd be wasted work.
|
|
1939
|
+
if (cacheSignal.hasPendingReads()) {
|
|
1940
|
+
initialStageController.abandonRender();
|
|
1941
|
+
return null;
|
|
1942
|
+
}
|
|
1943
|
+
// Regardless of whether we are going to abandon this
|
|
1944
|
+
// render we need the unblock runtime b/c it's essential
|
|
1945
|
+
// filling caches.
|
|
1946
|
+
initialStageController.advanceStage(_stagedrendering.RenderStage.Dynamic);
|
|
1947
|
+
return result;
|
|
1948
|
+
}));
|
|
1949
|
+
if (maybeInitialStreamResult !== null) {
|
|
1950
|
+
// No cache misses. We can use the result as-is.
|
|
1951
|
+
return {
|
|
1952
|
+
stream: maybeInitialStreamResult.stream,
|
|
1953
|
+
accumulatedChunksPromise: maybeInitialStreamResult.accumulatedChunksPromise,
|
|
1954
|
+
staticInterruptReason: initialStageController.getStaticInterruptReason(),
|
|
1955
|
+
runtimeInterruptReason: initialStageController.getRuntimeInterruptReason(),
|
|
1956
|
+
staticStageEndTime: initialStageController.getStaticStageEndTime(),
|
|
1957
|
+
runtimeStageEndTime: initialStageController.getRuntimeStageEndTime(),
|
|
1958
|
+
debugChannel,
|
|
1959
|
+
requestStore
|
|
1960
|
+
};
|
|
1961
|
+
}
|
|
1962
|
+
if (process.env.NODE_ENV === 'development' && setCacheStatus) {
|
|
1963
|
+
setCacheStatus('filling', htmlRequestId);
|
|
1964
|
+
}
|
|
1965
|
+
// Cache miss. We will use the initial render to fill caches, and discard its result.
|
|
1966
|
+
// Then, we can render again with warm caches.
|
|
1967
|
+
// TODO(restart-on-cache-miss):
|
|
1968
|
+
// This might end up waiting for more caches than strictly necessary,
|
|
1969
|
+
// because we can't abort the render yet, and we'll let runtime/dynamic APIs resolve.
|
|
1970
|
+
// Ideally we'd only wait for caches that are needed in the static stage.
|
|
1971
|
+
// This will be optimized in the future by not allowing runtime/dynamic APIs to resolve.
|
|
1972
|
+
await cacheSignal.cacheReady();
|
|
1973
|
+
initialReactController.abort();
|
|
1974
|
+
//===============================================
|
|
1975
|
+
// Final render (restarted)
|
|
1976
|
+
//===============================================
|
|
1977
|
+
// The initial render acted as a prospective render to warm the caches.
|
|
1978
|
+
requestStore = createRequestStore();
|
|
1979
|
+
// We are going to render this pass all the way through because we've already
|
|
1980
|
+
// filled any caches so we won't be aborting this time.
|
|
1981
|
+
const abortSignal = null;
|
|
1982
|
+
const finalStageController = new _stagedrendering.StagedRenderingController(abortSignal, hasRuntimePrefetch);
|
|
1983
|
+
// We've filled the caches, so now we can render as usual,
|
|
1984
|
+
// without any cache-filling mechanics.
|
|
1985
|
+
requestStore.prerenderResumeDataCache = null;
|
|
1986
|
+
requestStore.renderResumeDataCache = (0, _resumedatacache.createRenderResumeDataCache)(prerenderResumeDataCache);
|
|
1987
|
+
requestStore.stagedRendering = finalStageController;
|
|
1988
|
+
requestStore.cacheSignal = null;
|
|
1989
|
+
requestStore.asyncApiPromises = createAsyncApiPromisesInDev(finalStageController, requestStore.cookies, requestStore.mutableCookies, requestStore.headers);
|
|
1990
|
+
// The initial render already wrote to its debug channel.
|
|
1991
|
+
// We're not using it, so we need to create a new one.
|
|
1992
|
+
debugChannel = setReactDebugChannel && createDebugChannel();
|
|
1993
|
+
// Note: The stage controller starts out in the `Before` stage,
|
|
1994
|
+
// where sync IO does not cause aborts, so it's okay if it happens before render.
|
|
1995
|
+
const finalRscPayload = await getPayload(requestStore);
|
|
1996
|
+
const finalStreamResult = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(requestStore, ()=>(0, _apprenderrenderutils.pipelineInSequentialTasks)(()=>{
|
|
1997
|
+
// Static stage
|
|
1998
|
+
finalStageController.advanceStage(_stagedrendering.RenderStage.Static);
|
|
1999
|
+
const stream = ComponentMod.renderToReadableStream(finalRscPayload, clientModules, {
|
|
2000
|
+
onError,
|
|
2001
|
+
environmentName,
|
|
2002
|
+
filterStackFrame,
|
|
2003
|
+
debugChannel: debugChannel == null ? void 0 : debugChannel.serverSide
|
|
2004
|
+
});
|
|
2005
|
+
const [continuationStream, accumulatingStream] = stream.tee();
|
|
2006
|
+
const accumulatedChunksPromise = accumulateStreamChunks(accumulatingStream, finalStageController, null);
|
|
2007
|
+
return {
|
|
2008
|
+
stream: continuationStream,
|
|
2009
|
+
accumulatedChunksPromise
|
|
2010
|
+
};
|
|
2011
|
+
}, (result)=>{
|
|
2012
|
+
// Runtime stage
|
|
2013
|
+
finalStageController.advanceStage(_stagedrendering.RenderStage.Runtime);
|
|
2014
|
+
return result;
|
|
2015
|
+
}, (result)=>{
|
|
2016
|
+
// Dynamic stage
|
|
2017
|
+
finalStageController.advanceStage(_stagedrendering.RenderStage.Dynamic);
|
|
2018
|
+
return result;
|
|
2019
|
+
}));
|
|
2020
|
+
if (process.env.NODE_ENV === 'development' && setCacheStatus) {
|
|
2021
|
+
setCacheStatus('filled', htmlRequestId);
|
|
2022
|
+
}
|
|
2023
|
+
return {
|
|
2024
|
+
stream: finalStreamResult.stream,
|
|
2025
|
+
accumulatedChunksPromise: finalStreamResult.accumulatedChunksPromise,
|
|
2026
|
+
staticInterruptReason: finalStageController.getStaticInterruptReason(),
|
|
2027
|
+
runtimeInterruptReason: finalStageController.getRuntimeInterruptReason(),
|
|
2028
|
+
staticStageEndTime: finalStageController.getStaticStageEndTime(),
|
|
2029
|
+
runtimeStageEndTime: finalStageController.getRuntimeStageEndTime(),
|
|
2030
|
+
debugChannel,
|
|
2031
|
+
requestStore
|
|
2032
|
+
};
|
|
2033
|
+
}
|
|
2034
|
+
async function accumulateStreamChunks(stream, stageController, signal) {
|
|
2035
|
+
const staticChunks = [];
|
|
2036
|
+
const runtimeChunks = [];
|
|
2037
|
+
const dynamicChunks = [];
|
|
2038
|
+
const reader = stream.getReader();
|
|
2039
|
+
let cancelled = false;
|
|
2040
|
+
function cancel() {
|
|
2041
|
+
if (!cancelled) {
|
|
2042
|
+
cancelled = true;
|
|
2043
|
+
reader.cancel();
|
|
2044
|
+
}
|
|
2045
|
+
}
|
|
2046
|
+
if (signal) {
|
|
2047
|
+
signal.addEventListener('abort', cancel, {
|
|
2048
|
+
once: true
|
|
2049
|
+
});
|
|
2050
|
+
}
|
|
2051
|
+
try {
|
|
2052
|
+
while(!cancelled){
|
|
2053
|
+
const { done, value } = await reader.read();
|
|
2054
|
+
if (done) {
|
|
2055
|
+
cancel();
|
|
2056
|
+
break;
|
|
2057
|
+
}
|
|
2058
|
+
switch(stageController.currentStage){
|
|
2059
|
+
case _stagedrendering.RenderStage.Before:
|
|
2060
|
+
throw Object.defineProperty(new _invarianterror.InvariantError('Unexpected stream chunk while in Before stage'), "__NEXT_ERROR_CODE", {
|
|
2061
|
+
value: "E942",
|
|
2062
|
+
enumerable: false,
|
|
2063
|
+
configurable: true
|
|
2064
|
+
});
|
|
2065
|
+
case _stagedrendering.RenderStage.Static:
|
|
2066
|
+
staticChunks.push(value);
|
|
2067
|
+
// fall through
|
|
2068
|
+
case _stagedrendering.RenderStage.Runtime:
|
|
2069
|
+
runtimeChunks.push(value);
|
|
2070
|
+
// fall through
|
|
2071
|
+
case _stagedrendering.RenderStage.Dynamic:
|
|
2072
|
+
dynamicChunks.push(value);
|
|
2073
|
+
break;
|
|
2074
|
+
case _stagedrendering.RenderStage.Abandoned:
|
|
2075
|
+
break;
|
|
2076
|
+
default:
|
|
2077
|
+
stageController.currentStage;
|
|
2078
|
+
break;
|
|
2079
|
+
}
|
|
2080
|
+
}
|
|
2081
|
+
} catch {
|
|
2082
|
+
// When we release the lock we may reject the read
|
|
2083
|
+
}
|
|
2084
|
+
return {
|
|
2085
|
+
staticChunks,
|
|
2086
|
+
runtimeChunks,
|
|
2087
|
+
dynamicChunks
|
|
2088
|
+
};
|
|
2089
|
+
}
|
|
2090
|
+
function createAsyncApiPromisesInDev(stagedRendering, cookies, mutableCookies, headers) {
|
|
2091
|
+
return {
|
|
2092
|
+
// Runtime APIs
|
|
2093
|
+
cookies: stagedRendering.delayUntilStage(_stagedrendering.RenderStage.Runtime, 'cookies', cookies),
|
|
2094
|
+
mutableCookies: stagedRendering.delayUntilStage(_stagedrendering.RenderStage.Runtime, 'cookies', mutableCookies),
|
|
2095
|
+
headers: stagedRendering.delayUntilStage(_stagedrendering.RenderStage.Runtime, 'headers', headers),
|
|
2096
|
+
// These are not used directly, but we chain other `params`/`searchParams` promises off of them.
|
|
2097
|
+
sharedParamsParent: stagedRendering.delayUntilStage(_stagedrendering.RenderStage.Runtime, undefined, '<internal params>'),
|
|
2098
|
+
sharedSearchParamsParent: stagedRendering.delayUntilStage(_stagedrendering.RenderStage.Runtime, undefined, '<internal searchParams>'),
|
|
2099
|
+
connection: stagedRendering.delayUntilStage(_stagedrendering.RenderStage.Dynamic, 'connection', undefined)
|
|
2100
|
+
};
|
|
2101
|
+
}
|
|
2102
|
+
function createDebugChannel() {
|
|
2103
|
+
if (process.env.NODE_ENV === 'production') {
|
|
2104
|
+
return undefined;
|
|
2105
|
+
}
|
|
2106
|
+
let readableController;
|
|
2107
|
+
let clientSideReadable = new ReadableStream({
|
|
2108
|
+
start (controller) {
|
|
2109
|
+
readableController = controller;
|
|
2110
|
+
}
|
|
2111
|
+
});
|
|
2112
|
+
return {
|
|
2113
|
+
serverSide: {
|
|
2114
|
+
writable: new WritableStream({
|
|
2115
|
+
write (chunk) {
|
|
2116
|
+
readableController == null ? void 0 : readableController.enqueue(chunk);
|
|
2117
|
+
},
|
|
2118
|
+
close () {
|
|
2119
|
+
readableController == null ? void 0 : readableController.close();
|
|
2120
|
+
},
|
|
2121
|
+
abort (err) {
|
|
2122
|
+
readableController == null ? void 0 : readableController.error(err);
|
|
2123
|
+
}
|
|
2124
|
+
})
|
|
2125
|
+
},
|
|
2126
|
+
clientSide: {
|
|
2127
|
+
readable: clientSideReadable
|
|
2128
|
+
}
|
|
2129
|
+
};
|
|
2130
|
+
}
|
|
2131
|
+
/**
|
|
2132
|
+
* Logs the given messages, and sends the error instances to the browser as an
|
|
2133
|
+
* RSC stream, where they can be deserialized and logged (or otherwise presented
|
|
2134
|
+
* in the devtools), while leveraging React's capabilities to not only
|
|
2135
|
+
* source-map the stack frames (via findSourceMapURL), but also create virtual
|
|
2136
|
+
* server modules that allow users to inspect the server source code in the
|
|
2137
|
+
* browser.
|
|
2138
|
+
*/ async function logMessagesAndSendErrorsToBrowser(messages, ctx) {
|
|
2139
|
+
const { componentMod: ComponentMod, htmlRequestId, renderOpts } = ctx;
|
|
2140
|
+
const { sendErrorsToBrowser } = renderOpts;
|
|
2141
|
+
const errors = [];
|
|
2142
|
+
for (const message of messages){
|
|
2143
|
+
// Log the error to the CLI. Prevent the logs from being dimmed, which we
|
|
2144
|
+
// apply for other logs during the spawned validation.
|
|
2145
|
+
_consoleasyncstorageexternal.consoleAsyncStorage.exit(()=>{
|
|
2146
|
+
console.error(message);
|
|
2147
|
+
});
|
|
2148
|
+
// Error instances are also sent to the browser. We're currently using a
|
|
2149
|
+
// non-Error message only in debug build mode as a message that is only
|
|
2150
|
+
// meant for the CLI. FIXME: This is a bit spooky action at a distance. We
|
|
2151
|
+
// should maybe have a more explicit way of determining which messages
|
|
2152
|
+
// should be sent to the browser. Regardless, only real errors with a proper
|
|
2153
|
+
// stack make sense to be "replayed" in the browser.
|
|
2154
|
+
if (message instanceof Error) {
|
|
2155
|
+
errors.push(message);
|
|
2156
|
+
}
|
|
2157
|
+
}
|
|
2158
|
+
if (errors.length > 0) {
|
|
2159
|
+
if (!sendErrorsToBrowser) {
|
|
2160
|
+
throw Object.defineProperty(new _invarianterror.InvariantError('Expected `sendErrorsToBrowser` to be defined in renderOpts.'), "__NEXT_ERROR_CODE", {
|
|
2161
|
+
value: "E947",
|
|
2162
|
+
enumerable: false,
|
|
2163
|
+
configurable: true
|
|
2164
|
+
});
|
|
2165
|
+
}
|
|
2166
|
+
const { clientModules } = (0, _manifestssingleton.getClientReferenceManifest)();
|
|
2167
|
+
const errorsRscStream = ComponentMod.renderToReadableStream(errors, clientModules, {
|
|
2168
|
+
filterStackFrame
|
|
2169
|
+
});
|
|
2170
|
+
sendErrorsToBrowser(errorsRscStream, htmlRequestId);
|
|
2171
|
+
}
|
|
2172
|
+
}
|
|
2173
|
+
/**
|
|
2174
|
+
* This function is a fork of prerenderToStream cacheComponents branch.
|
|
2175
|
+
* While it doesn't return a stream we want it to have identical
|
|
2176
|
+
* prerender semantics to prerenderToStream and should update it
|
|
2177
|
+
* in conjunction with any changes to that function.
|
|
2178
|
+
*/ async function spawnStaticShellValidationInDev(accumulatedChunksPromise, staticInterruptReason, runtimeInterruptReason, staticStageEndTime, runtimeStageEndTime, ctx, requestStore, fallbackRouteParams, debugChannelClient) {
|
|
2179
|
+
const { componentMod: ComponentMod, getDynamicParamFromSegment, renderOpts, workStore } = ctx;
|
|
2180
|
+
const { allowEmptyStaticShell = false } = renderOpts;
|
|
2181
|
+
const rootParams = (0, _createcomponenttree.getRootParams)(ComponentMod.routeModule.userland.loaderTree, getDynamicParamFromSegment);
|
|
2182
|
+
const hmrRefreshHash = (0, _workunitasyncstorageexternal.getHmrRefreshHash)(workStore, requestStore);
|
|
2183
|
+
// We don't need to continue the prerender process if we already
|
|
2184
|
+
// detected invalid dynamic usage in the initial prerender phase.
|
|
2185
|
+
const { invalidDynamicUsageError } = workStore;
|
|
2186
|
+
if (invalidDynamicUsageError) {
|
|
2187
|
+
return logMessagesAndSendErrorsToBrowser([
|
|
2188
|
+
invalidDynamicUsageError
|
|
2189
|
+
], ctx);
|
|
2190
|
+
}
|
|
2191
|
+
if (staticInterruptReason) {
|
|
2192
|
+
return logMessagesAndSendErrorsToBrowser([
|
|
2193
|
+
staticInterruptReason
|
|
2194
|
+
], ctx);
|
|
2195
|
+
}
|
|
2196
|
+
if (runtimeInterruptReason) {
|
|
2197
|
+
return logMessagesAndSendErrorsToBrowser([
|
|
2198
|
+
runtimeInterruptReason
|
|
2199
|
+
], ctx);
|
|
2200
|
+
}
|
|
2201
|
+
const { staticChunks, runtimeChunks, dynamicChunks } = await accumulatedChunksPromise;
|
|
2202
|
+
// First we warmup SSR with the runtime chunks. This ensures that when we do
|
|
2203
|
+
// the full prerender pass with dynamic tracking module loading won't
|
|
2204
|
+
// interrupt the prerender and can properly observe the entire content
|
|
2205
|
+
await warmupModuleCacheForRuntimeValidationInDev(runtimeChunks, dynamicChunks, rootParams, fallbackRouteParams, allowEmptyStaticShell, ctx);
|
|
2206
|
+
let debugChunks = null;
|
|
2207
|
+
if (debugChannelClient) {
|
|
2208
|
+
debugChunks = [];
|
|
2209
|
+
debugChannelClient.on('data', (c)=>debugChunks.push(c));
|
|
2210
|
+
}
|
|
2211
|
+
const runtimeResult = await validateStagedShell(runtimeChunks, dynamicChunks, debugChunks, runtimeStageEndTime, rootParams, fallbackRouteParams, allowEmptyStaticShell, ctx, hmrRefreshHash, _dynamicrendering.trackDynamicHoleInRuntimeShell);
|
|
2212
|
+
if (runtimeResult.length > 0) {
|
|
2213
|
+
// We have something to report from the runtime validation
|
|
2214
|
+
// We can skip the static validation
|
|
2215
|
+
return logMessagesAndSendErrorsToBrowser(runtimeResult, ctx);
|
|
2216
|
+
}
|
|
2217
|
+
const staticResult = await validateStagedShell(staticChunks, dynamicChunks, debugChunks, staticStageEndTime, rootParams, fallbackRouteParams, allowEmptyStaticShell, ctx, hmrRefreshHash, _dynamicrendering.trackDynamicHoleInStaticShell);
|
|
2218
|
+
return logMessagesAndSendErrorsToBrowser(staticResult, ctx);
|
|
2219
|
+
}
|
|
2220
|
+
async function warmupModuleCacheForRuntimeValidationInDev(runtimeServerChunks, allServerChunks, rootParams, fallbackRouteParams, allowEmptyStaticShell, ctx) {
|
|
2221
|
+
const { implicitTags, nonce, workStore } = ctx;
|
|
2222
|
+
// Warmup SSR
|
|
2223
|
+
const initialClientPrerenderController = new AbortController();
|
|
2224
|
+
const initialClientReactController = new AbortController();
|
|
2225
|
+
const initialClientRenderController = new AbortController();
|
|
2226
|
+
const preinitScripts = ()=>{};
|
|
2227
|
+
const { ServerInsertedHTMLProvider } = (0, _serverinsertedhtml.createServerInsertedHTML)();
|
|
2228
|
+
const initialClientPrerenderStore = {
|
|
2229
|
+
type: 'prerender-client',
|
|
2230
|
+
phase: 'render',
|
|
2231
|
+
rootParams,
|
|
2232
|
+
fallbackRouteParams,
|
|
2233
|
+
implicitTags,
|
|
2234
|
+
renderSignal: initialClientRenderController.signal,
|
|
2235
|
+
controller: initialClientPrerenderController,
|
|
2236
|
+
// For HTML Generation the only cache tracked activity
|
|
2237
|
+
// is module loading, which has it's own cache signal
|
|
2238
|
+
cacheSignal: null,
|
|
2239
|
+
dynamicTracking: null,
|
|
2240
|
+
allowEmptyStaticShell,
|
|
2241
|
+
revalidate: _constants1.INFINITE_CACHE,
|
|
2242
|
+
expire: _constants1.INFINITE_CACHE,
|
|
2243
|
+
stale: _constants1.INFINITE_CACHE,
|
|
2244
|
+
tags: [
|
|
2245
|
+
...implicitTags.tags
|
|
2246
|
+
],
|
|
2247
|
+
// TODO should this be removed from client stores?
|
|
2248
|
+
prerenderResumeDataCache: null,
|
|
2249
|
+
renderResumeDataCache: null,
|
|
2250
|
+
hmrRefreshHash: undefined
|
|
2251
|
+
};
|
|
2252
|
+
const runtimeServerStream = createNodeStreamFromChunks(runtimeServerChunks, allServerChunks, initialClientReactController.signal);
|
|
2253
|
+
const prerender = require('react-dom/static').prerender;
|
|
2254
|
+
const pendingInitialClientResult = _workunitasyncstorageexternal.workUnitAsyncStorage.run(initialClientPrerenderStore, prerender, // eslint-disable-next-line @next/internal/no-ambiguous-jsx -- React Client
|
|
2255
|
+
/*#__PURE__*/ (0, _jsxruntime.jsx)(App, {
|
|
2256
|
+
reactServerStream: runtimeServerStream,
|
|
2257
|
+
reactDebugStream: undefined,
|
|
2258
|
+
debugEndTime: undefined,
|
|
2259
|
+
preinitScripts: preinitScripts,
|
|
2260
|
+
ServerInsertedHTMLProvider: ServerInsertedHTMLProvider,
|
|
2261
|
+
nonce: nonce,
|
|
2262
|
+
images: ctx.renderOpts.images
|
|
2263
|
+
}), {
|
|
2264
|
+
signal: initialClientReactController.signal,
|
|
2265
|
+
onError: (err)=>{
|
|
2266
|
+
const digest = (0, _createerrorhandler.getDigestForWellKnownError)(err);
|
|
2267
|
+
if (digest) {
|
|
2268
|
+
return digest;
|
|
2269
|
+
}
|
|
2270
|
+
if ((0, _reactlargeshellerror.isReactLargeShellError)(err)) {
|
|
2271
|
+
// TODO: Aggregate
|
|
2272
|
+
console.error(err);
|
|
2273
|
+
return undefined;
|
|
2274
|
+
}
|
|
2275
|
+
if (initialClientReactController.signal.aborted) {
|
|
2276
|
+
// These are expected errors that might error the prerender. we ignore them.
|
|
2277
|
+
} else if (process.env.NEXT_DEBUG_BUILD || process.env.__NEXT_VERBOSE_LOGGING) {
|
|
2278
|
+
// We don't normally log these errors because we are going to retry anyway but
|
|
2279
|
+
// it can be useful for debugging Next.js itself to get visibility here when needed
|
|
2280
|
+
(0, _prospectiverenderutils.printDebugThrownValueForProspectiveRender)(err, workStore.route, _prospectiverenderutils.Phase.ProspectiveRender);
|
|
2281
|
+
}
|
|
2282
|
+
}
|
|
2283
|
+
});
|
|
2284
|
+
// The listener to abort our own render controller must be added after React
|
|
2285
|
+
// has added its listener, to ensure that pending I/O is not
|
|
2286
|
+
// aborted/rejected too early.
|
|
2287
|
+
initialClientReactController.signal.addEventListener('abort', ()=>{
|
|
2288
|
+
initialClientRenderController.abort();
|
|
2289
|
+
}, {
|
|
2290
|
+
once: true
|
|
2291
|
+
});
|
|
2292
|
+
pendingInitialClientResult.catch((err)=>{
|
|
2293
|
+
if (initialClientReactController.signal.aborted || (0, _dynamicrendering.isPrerenderInterruptedError)(err)) {
|
|
2294
|
+
// These are expected errors that might error the prerender. we ignore them.
|
|
2295
|
+
} else if (process.env.NEXT_DEBUG_BUILD || process.env.__NEXT_VERBOSE_LOGGING) {
|
|
2296
|
+
// We don't normally log these errors because we are going to retry anyway but
|
|
2297
|
+
// it can be useful for debugging Next.js itself to get visibility here when needed
|
|
2298
|
+
(0, _prospectiverenderutils.printDebugThrownValueForProspectiveRender)(err, workStore.route, _prospectiverenderutils.Phase.ProspectiveRender);
|
|
2299
|
+
}
|
|
2300
|
+
});
|
|
2301
|
+
// This is mostly needed for dynamic `import()`s in client components.
|
|
2302
|
+
// Promises passed to client were already awaited above (assuming that they came from cached functions)
|
|
2303
|
+
const cacheSignal = new _cachesignal.CacheSignal();
|
|
2304
|
+
(0, _trackmoduleloadingexternal.trackPendingModules)(cacheSignal);
|
|
2305
|
+
await cacheSignal.cacheReady();
|
|
2306
|
+
initialClientReactController.abort();
|
|
2307
|
+
}
|
|
2308
|
+
async function validateStagedShell(stageChunks, allServerChunks, debugChunks, debugEndTime, rootParams, fallbackRouteParams, allowEmptyStaticShell, ctx, hmrRefreshHash, trackDynamicHole) {
|
|
2309
|
+
const { implicitTags, nonce, workStore } = ctx;
|
|
2310
|
+
const clientDynamicTracking = (0, _dynamicrendering.createDynamicTrackingState)(false //isDebugDynamicAccesses
|
|
2311
|
+
);
|
|
2312
|
+
const clientReactController = new AbortController();
|
|
2313
|
+
const clientRenderController = new AbortController();
|
|
2314
|
+
const preinitScripts = ()=>{};
|
|
2315
|
+
const { ServerInsertedHTMLProvider } = (0, _serverinsertedhtml.createServerInsertedHTML)();
|
|
2316
|
+
const finalClientPrerenderStore = {
|
|
2317
|
+
type: 'prerender-client',
|
|
2318
|
+
phase: 'render',
|
|
2319
|
+
rootParams,
|
|
2320
|
+
fallbackRouteParams,
|
|
2321
|
+
implicitTags,
|
|
2322
|
+
renderSignal: clientRenderController.signal,
|
|
2323
|
+
controller: clientReactController,
|
|
2324
|
+
// No APIs require a cacheSignal through the workUnitStore during the HTML prerender
|
|
2325
|
+
cacheSignal: null,
|
|
2326
|
+
dynamicTracking: clientDynamicTracking,
|
|
2327
|
+
allowEmptyStaticShell,
|
|
2328
|
+
revalidate: _constants1.INFINITE_CACHE,
|
|
2329
|
+
expire: _constants1.INFINITE_CACHE,
|
|
2330
|
+
stale: _constants1.INFINITE_CACHE,
|
|
2331
|
+
tags: [
|
|
2332
|
+
...implicitTags.tags
|
|
2333
|
+
],
|
|
2334
|
+
// TODO should this be removed from client stores?
|
|
2335
|
+
prerenderResumeDataCache: null,
|
|
2336
|
+
renderResumeDataCache: null,
|
|
2337
|
+
hmrRefreshHash
|
|
2338
|
+
};
|
|
2339
|
+
let runtimeDynamicValidation = (0, _dynamicrendering.createDynamicValidationState)();
|
|
2340
|
+
const serverStream = createNodeStreamFromChunks(stageChunks, allServerChunks, clientReactController.signal);
|
|
2341
|
+
const debugChannelClient = debugChunks ? createNodeStreamFromChunks(debugChunks, debugChunks, clientReactController.signal) : undefined;
|
|
2342
|
+
const prerender = require('react-dom/static').prerender;
|
|
2343
|
+
try {
|
|
2344
|
+
let { prelude: unprocessedPrelude } = await (0, _apprenderprerenderutils.prerenderAndAbortInSequentialTasks)(()=>{
|
|
2345
|
+
const pendingFinalClientResult = _workunitasyncstorageexternal.workUnitAsyncStorage.run(finalClientPrerenderStore, prerender, // eslint-disable-next-line @next/internal/no-ambiguous-jsx -- React Client
|
|
2346
|
+
/*#__PURE__*/ (0, _jsxruntime.jsx)(App, {
|
|
2347
|
+
reactServerStream: serverStream,
|
|
2348
|
+
reactDebugStream: debugChannelClient,
|
|
2349
|
+
debugEndTime: debugEndTime,
|
|
2350
|
+
preinitScripts: preinitScripts,
|
|
2351
|
+
ServerInsertedHTMLProvider: ServerInsertedHTMLProvider,
|
|
2352
|
+
nonce: nonce,
|
|
2353
|
+
images: ctx.renderOpts.images
|
|
2354
|
+
}), {
|
|
2355
|
+
signal: clientReactController.signal,
|
|
2356
|
+
onError: (err, errorInfo)=>{
|
|
2357
|
+
if ((0, _dynamicrendering.isPrerenderInterruptedError)(err) || clientReactController.signal.aborted) {
|
|
2358
|
+
const componentStack = errorInfo.componentStack;
|
|
2359
|
+
if (typeof componentStack === 'string') {
|
|
2360
|
+
trackDynamicHole(workStore, componentStack, runtimeDynamicValidation, clientDynamicTracking);
|
|
2361
|
+
}
|
|
2362
|
+
return;
|
|
2363
|
+
}
|
|
2364
|
+
if ((0, _reactlargeshellerror.isReactLargeShellError)(err)) {
|
|
2365
|
+
// TODO: Aggregate
|
|
2366
|
+
console.error(err);
|
|
2367
|
+
return undefined;
|
|
2368
|
+
}
|
|
2369
|
+
return (0, _createerrorhandler.getDigestForWellKnownError)(err);
|
|
2370
|
+
}
|
|
2371
|
+
});
|
|
2372
|
+
// The listener to abort our own render controller must be added after
|
|
2373
|
+
// React has added its listener, to ensure that pending I/O is not
|
|
2374
|
+
// aborted/rejected too early.
|
|
2375
|
+
clientReactController.signal.addEventListener('abort', ()=>{
|
|
2376
|
+
clientRenderController.abort();
|
|
2377
|
+
}, {
|
|
2378
|
+
once: true
|
|
2379
|
+
});
|
|
2380
|
+
return pendingFinalClientResult;
|
|
2381
|
+
}, ()=>{
|
|
2382
|
+
clientReactController.abort();
|
|
2383
|
+
});
|
|
2384
|
+
const { preludeIsEmpty } = await (0, _apprenderprerenderutils.processPrelude)(unprocessedPrelude);
|
|
2385
|
+
return (0, _dynamicrendering.getStaticShellDisallowedDynamicReasons)(workStore, preludeIsEmpty ? _dynamicrendering.PreludeState.Empty : _dynamicrendering.PreludeState.Full, runtimeDynamicValidation);
|
|
2386
|
+
} catch (thrownValue) {
|
|
2387
|
+
// Even if the root errors we still want to report any cache components errors
|
|
2388
|
+
// that were discovered before the root errored.
|
|
2389
|
+
let errors = (0, _dynamicrendering.getStaticShellDisallowedDynamicReasons)(workStore, _dynamicrendering.PreludeState.Errored, runtimeDynamicValidation);
|
|
2390
|
+
if (process.env.NEXT_DEBUG_BUILD || process.env.__NEXT_VERBOSE_LOGGING) {
|
|
2391
|
+
errors.unshift('During dynamic validation the root of the page errored. The next logged error is the thrown value. It may be a duplicate of errors reported during the normal development mode render.', thrownValue);
|
|
2392
|
+
}
|
|
2393
|
+
return errors;
|
|
2394
|
+
}
|
|
2395
|
+
}
|
|
2396
|
+
/**
|
|
2397
|
+
* Determines whether we should generate static flight data.
|
|
2398
|
+
*/ function shouldGenerateStaticFlightData(workStore) {
|
|
2399
|
+
const { isStaticGeneration } = workStore;
|
|
2400
|
+
if (!isStaticGeneration) return false;
|
|
2401
|
+
return true;
|
|
2402
|
+
}
|
|
2403
|
+
async function prerenderToStream(req, res, ctx, metadata, tree, fallbackRouteParams) {
|
|
2404
|
+
// When prerendering formState is always null. We still include it
|
|
2405
|
+
// because some shared APIs expect a formState value and this is slightly
|
|
2406
|
+
// more explicit than making it an optional function argument
|
|
2407
|
+
const formState = null;
|
|
2408
|
+
const { assetPrefix, getDynamicParamFromSegment, implicitTags, nonce, pagePath, renderOpts, workStore } = ctx;
|
|
2409
|
+
const { allowEmptyStaticShell = false, basePath, buildManifest, ComponentMod, crossOrigin, dev = false, experimental, isDebugDynamicAccesses, nextExport = false, onInstrumentationRequestError, page, reactMaxHeadersLength, subresourceIntegrityManifest, cacheComponents } = renderOpts;
|
|
2410
|
+
const rootParams = (0, _createcomponenttree.getRootParams)(tree, getDynamicParamFromSegment);
|
|
2411
|
+
const { ServerInsertedHTMLProvider, renderServerInsertedHTML } = (0, _serverinsertedhtml.createServerInsertedHTML)();
|
|
2412
|
+
const getServerInsertedMetadata = (0, _createserverinsertedmetadata.createServerInsertedMetadata)(nonce);
|
|
2413
|
+
const tracingMetadata = (0, _utils1.getTracedMetadata)((0, _tracer.getTracer)().getTracePropagationData(), experimental.clientTraceMetadata);
|
|
2414
|
+
const polyfills = buildManifest.polyfillFiles.filter((polyfill)=>polyfill.endsWith('.js') && !polyfill.endsWith('.module.js')).map((polyfill)=>({
|
|
2415
|
+
src: `${assetPrefix}/_next/${polyfill}${(0, _getassetquerystring.getAssetQueryString)(ctx, false)}`,
|
|
2416
|
+
integrity: subresourceIntegrityManifest == null ? void 0 : subresourceIntegrityManifest[polyfill],
|
|
2417
|
+
crossOrigin,
|
|
2418
|
+
noModule: true,
|
|
2419
|
+
nonce
|
|
2420
|
+
}));
|
|
2421
|
+
const [preinitScripts, bootstrapScript] = (0, _requiredscripts.getRequiredScripts)(buildManifest, // Why is assetPrefix optional on renderOpts?
|
|
2422
|
+
// @TODO make it default empty string on renderOpts and get rid of it from ctx
|
|
2423
|
+
assetPrefix, crossOrigin, subresourceIntegrityManifest, (0, _getassetquerystring.getAssetQueryString)(ctx, true), nonce, page);
|
|
2424
|
+
const { reactServerErrorsByDigest } = workStore;
|
|
2425
|
+
// We don't report errors during prerendering through our instrumentation hooks
|
|
2426
|
+
const reportErrors = !experimental.isRoutePPREnabled;
|
|
2427
|
+
function onHTMLRenderRSCError(err, silenceLog) {
|
|
2428
|
+
if (reportErrors) {
|
|
2429
|
+
return onInstrumentationRequestError == null ? void 0 : onInstrumentationRequestError(err, req, createErrorContext(ctx, 'react-server-components'), silenceLog);
|
|
2430
|
+
}
|
|
2431
|
+
}
|
|
2432
|
+
const serverComponentsErrorHandler = (0, _createerrorhandler.createReactServerErrorHandler)(dev, nextExport, reactServerErrorsByDigest, onHTMLRenderRSCError);
|
|
2433
|
+
function onHTMLRenderSSRError(err) {
|
|
2434
|
+
if (reportErrors) {
|
|
2435
|
+
// We don't need to silence logs here. onHTMLRenderSSRError won't be
|
|
2436
|
+
// called at all if the error was logged before in the RSC error handler.
|
|
2437
|
+
const silenceLog = false;
|
|
2438
|
+
return onInstrumentationRequestError == null ? void 0 : onInstrumentationRequestError(err, req, createErrorContext(ctx, 'server-rendering'), silenceLog);
|
|
2439
|
+
}
|
|
2440
|
+
}
|
|
2441
|
+
const allCapturedErrors = [];
|
|
2442
|
+
const htmlRendererErrorHandler = (0, _createerrorhandler.createHTMLErrorHandler)(dev, nextExport, reactServerErrorsByDigest, allCapturedErrors, onHTMLRenderSSRError);
|
|
2443
|
+
let reactServerPrerenderResult = null;
|
|
2444
|
+
const setMetadataHeader = (name)=>{
|
|
2445
|
+
metadata.headers ??= {};
|
|
2446
|
+
metadata.headers[name] = res.getHeader(name);
|
|
2447
|
+
};
|
|
2448
|
+
const setHeader = (name, value)=>{
|
|
2449
|
+
res.setHeader(name, value);
|
|
2450
|
+
setMetadataHeader(name);
|
|
2451
|
+
return res;
|
|
2452
|
+
};
|
|
2453
|
+
const appendHeader = (name, value)=>{
|
|
2454
|
+
if (Array.isArray(value)) {
|
|
2455
|
+
value.forEach((item)=>{
|
|
2456
|
+
res.appendHeader(name, item);
|
|
2457
|
+
});
|
|
2458
|
+
} else {
|
|
2459
|
+
res.appendHeader(name, value);
|
|
2460
|
+
}
|
|
2461
|
+
setMetadataHeader(name);
|
|
2462
|
+
};
|
|
2463
|
+
const selectStaleTime = createSelectStaleTime(experimental);
|
|
2464
|
+
const { clientModules } = (0, _manifestssingleton.getClientReferenceManifest)();
|
|
2465
|
+
let prerenderStore = null;
|
|
2466
|
+
try {
|
|
2467
|
+
if (cacheComponents) {
|
|
2468
|
+
/**
|
|
2469
|
+
* cacheComponents with PPR
|
|
2470
|
+
*
|
|
2471
|
+
* The general approach is to render the RSC stream first allowing any cache reads to resolve.
|
|
2472
|
+
* Once we have settled all cache reads we restart the render and abort after a single Task.
|
|
2473
|
+
*
|
|
2474
|
+
* Unlike with the non PPR case we can't synchronously abort the render when a dynamic API is used
|
|
2475
|
+
* during the initial render because we need to ensure all caches can be filled as part of the initial Task
|
|
2476
|
+
* and a synchronous abort might prevent us from filling all caches.
|
|
2477
|
+
*
|
|
2478
|
+
* Once the render is complete we allow the SSR render to finish and use a combination of the postponed state
|
|
2479
|
+
* and the reactServerIsDynamic value to determine how to treat the resulting render
|
|
2480
|
+
*/ // The prerender controller represents the lifetime of the prerender. It
|
|
2481
|
+
// will be aborted when a task is complete or a synchronously aborting API
|
|
2482
|
+
// is called. Notably, during prospective prerenders, this does not
|
|
2483
|
+
// actually terminate the prerender itself, which will continue until all
|
|
2484
|
+
// caches are filled.
|
|
2485
|
+
const initialServerPrerenderController = new AbortController();
|
|
2486
|
+
// This controller is used to abort the React prerender.
|
|
2487
|
+
const initialServerReactController = new AbortController();
|
|
2488
|
+
// This controller represents the lifetime of the React prerender. Its
|
|
2489
|
+
// signal can be used for any I/O operation to abort the I/O and/or to
|
|
2490
|
+
// reject, when prerendering aborts. This includes our own hanging
|
|
2491
|
+
// promises for accessing request data, and for fetch calls. It might be
|
|
2492
|
+
// replaced in the future by React.cacheSignal(). It's aborted after the
|
|
2493
|
+
// React controller, so that no pending I/O can register abort listeners
|
|
2494
|
+
// that are called before React's abort listener is called. This ensures
|
|
2495
|
+
// that pending I/O is not rejected too early when aborting the prerender.
|
|
2496
|
+
// Notably, during the prospective prerender, it is different from the
|
|
2497
|
+
// prerender controller because we don't want to end the React prerender
|
|
2498
|
+
// until all caches are filled.
|
|
2499
|
+
const initialServerRenderController = new AbortController();
|
|
2500
|
+
// The cacheSignal helps us track whether caches are still filling or we are ready
|
|
2501
|
+
// to cut the render off.
|
|
2502
|
+
const cacheSignal = new _cachesignal.CacheSignal();
|
|
2503
|
+
let resumeDataCache;
|
|
2504
|
+
let renderResumeDataCache = null;
|
|
2505
|
+
let prerenderResumeDataCache = null;
|
|
2506
|
+
if (renderOpts.renderResumeDataCache) {
|
|
2507
|
+
// If a prefilled immutable render resume data cache is provided, e.g.
|
|
2508
|
+
// when prerendering an optional fallback shell after having prerendered
|
|
2509
|
+
// pages with defined params, we use this instead of a prerender resume
|
|
2510
|
+
// data cache.
|
|
2511
|
+
resumeDataCache = renderResumeDataCache = renderOpts.renderResumeDataCache;
|
|
2512
|
+
} else {
|
|
2513
|
+
// Otherwise we create a new mutable prerender resume data cache.
|
|
2514
|
+
resumeDataCache = prerenderResumeDataCache = (0, _resumedatacache.createPrerenderResumeDataCache)();
|
|
2515
|
+
}
|
|
2516
|
+
const initialServerPayloadPrerenderStore = {
|
|
2517
|
+
type: 'prerender',
|
|
2518
|
+
phase: 'render',
|
|
2519
|
+
rootParams,
|
|
2520
|
+
fallbackRouteParams,
|
|
2521
|
+
implicitTags,
|
|
2522
|
+
// While this render signal isn't going to be used to abort a React render while getting the RSC payload
|
|
2523
|
+
// various request data APIs bind to this controller to reject after completion.
|
|
2524
|
+
renderSignal: initialServerRenderController.signal,
|
|
2525
|
+
// When we generate the RSC payload we might abort this controller due to sync IO
|
|
2526
|
+
// but we don't actually care about sync IO in this phase so we use a throw away controller
|
|
2527
|
+
// that isn't connected to anything
|
|
2528
|
+
controller: new AbortController(),
|
|
2529
|
+
// During the initial prerender we need to track all cache reads to ensure
|
|
2530
|
+
// we render long enough to fill every cache it is possible to visit during
|
|
2531
|
+
// the final prerender.
|
|
2532
|
+
cacheSignal,
|
|
2533
|
+
dynamicTracking: null,
|
|
2534
|
+
allowEmptyStaticShell,
|
|
2535
|
+
revalidate: _constants1.INFINITE_CACHE,
|
|
2536
|
+
expire: _constants1.INFINITE_CACHE,
|
|
2537
|
+
stale: _constants1.INFINITE_CACHE,
|
|
2538
|
+
tags: [
|
|
2539
|
+
...implicitTags.tags
|
|
2540
|
+
],
|
|
2541
|
+
prerenderResumeDataCache,
|
|
2542
|
+
renderResumeDataCache,
|
|
2543
|
+
hmrRefreshHash: undefined
|
|
2544
|
+
};
|
|
2545
|
+
// We're not going to use the result of this render because the only time it could be used
|
|
2546
|
+
// is if it completes in a microtask and that's likely very rare for any non-trivial app
|
|
2547
|
+
const initialServerPayload = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(initialServerPayloadPrerenderStore, getRSCPayload, tree, ctx, res.statusCode === 404);
|
|
2548
|
+
const initialServerPrerenderStore = prerenderStore = {
|
|
2549
|
+
type: 'prerender',
|
|
2550
|
+
phase: 'render',
|
|
2551
|
+
rootParams,
|
|
2552
|
+
fallbackRouteParams,
|
|
2553
|
+
implicitTags,
|
|
2554
|
+
renderSignal: initialServerRenderController.signal,
|
|
2555
|
+
controller: initialServerPrerenderController,
|
|
2556
|
+
// During the initial prerender we need to track all cache reads to ensure
|
|
2557
|
+
// we render long enough to fill every cache it is possible to visit during
|
|
2558
|
+
// the final prerender.
|
|
2559
|
+
cacheSignal,
|
|
2560
|
+
dynamicTracking: null,
|
|
2561
|
+
allowEmptyStaticShell,
|
|
2562
|
+
revalidate: _constants1.INFINITE_CACHE,
|
|
2563
|
+
expire: _constants1.INFINITE_CACHE,
|
|
2564
|
+
stale: _constants1.INFINITE_CACHE,
|
|
2565
|
+
tags: [
|
|
2566
|
+
...implicitTags.tags
|
|
2567
|
+
],
|
|
2568
|
+
prerenderResumeDataCache,
|
|
2569
|
+
renderResumeDataCache,
|
|
2570
|
+
hmrRefreshHash: undefined
|
|
2571
|
+
};
|
|
2572
|
+
const pendingInitialServerResult = _workunitasyncstorageexternal.workUnitAsyncStorage.run(initialServerPrerenderStore, ComponentMod.prerender, initialServerPayload, clientModules, {
|
|
2573
|
+
filterStackFrame,
|
|
2574
|
+
onError: (err)=>{
|
|
2575
|
+
const digest = (0, _createerrorhandler.getDigestForWellKnownError)(err);
|
|
2576
|
+
if (digest) {
|
|
2577
|
+
return digest;
|
|
2578
|
+
}
|
|
2579
|
+
if ((0, _reactlargeshellerror.isReactLargeShellError)(err)) {
|
|
2580
|
+
// TODO: Aggregate
|
|
2581
|
+
console.error(err);
|
|
2582
|
+
return undefined;
|
|
2583
|
+
}
|
|
2584
|
+
if (initialServerPrerenderController.signal.aborted) {
|
|
2585
|
+
// The render aborted before this error was handled which indicates
|
|
2586
|
+
// the error is caused by unfinished components within the render
|
|
2587
|
+
return;
|
|
2588
|
+
} else if (process.env.NEXT_DEBUG_BUILD || process.env.__NEXT_VERBOSE_LOGGING) {
|
|
2589
|
+
(0, _prospectiverenderutils.printDebugThrownValueForProspectiveRender)(err, workStore.route, _prospectiverenderutils.Phase.ProspectiveRender);
|
|
2590
|
+
}
|
|
2591
|
+
},
|
|
2592
|
+
// We don't want to stop rendering until the cacheSignal is complete so we pass
|
|
2593
|
+
// a different signal to this render call than is used by dynamic APIs to signify
|
|
2594
|
+
// transitioning out of the prerender environment
|
|
2595
|
+
signal: initialServerReactController.signal
|
|
2596
|
+
});
|
|
2597
|
+
// The listener to abort our own render controller must be added after
|
|
2598
|
+
// React has added its listener, to ensure that pending I/O is not
|
|
2599
|
+
// aborted/rejected too early.
|
|
2600
|
+
initialServerReactController.signal.addEventListener('abort', ()=>{
|
|
2601
|
+
initialServerRenderController.abort();
|
|
2602
|
+
initialServerPrerenderController.abort();
|
|
2603
|
+
}, {
|
|
2604
|
+
once: true
|
|
2605
|
+
});
|
|
2606
|
+
// Wait for all caches to be finished filling and for async imports to resolve
|
|
2607
|
+
(0, _trackmoduleloadingexternal.trackPendingModules)(cacheSignal);
|
|
2608
|
+
await cacheSignal.cacheReady();
|
|
2609
|
+
initialServerReactController.abort();
|
|
2610
|
+
// We don't need to continue the prerender process if we already
|
|
2611
|
+
// detected invalid dynamic usage in the initial prerender phase.
|
|
2612
|
+
if (workStore.invalidDynamicUsageError) {
|
|
2613
|
+
(0, _dynamicrendering.logDisallowedDynamicError)(workStore, workStore.invalidDynamicUsageError);
|
|
2614
|
+
throw new _staticgenerationbailout.StaticGenBailoutError();
|
|
2615
|
+
}
|
|
2616
|
+
let initialServerResult;
|
|
2617
|
+
try {
|
|
2618
|
+
initialServerResult = await (0, _apprenderprerenderutils.createReactServerPrerenderResult)(pendingInitialServerResult);
|
|
2619
|
+
} catch (err) {
|
|
2620
|
+
if (initialServerReactController.signal.aborted || initialServerPrerenderController.signal.aborted) {
|
|
2621
|
+
// These are expected errors that might error the prerender. we ignore them.
|
|
2622
|
+
} else if (process.env.NEXT_DEBUG_BUILD || process.env.__NEXT_VERBOSE_LOGGING) {
|
|
2623
|
+
// We don't normally log these errors because we are going to retry anyway but
|
|
2624
|
+
// it can be useful for debugging Next.js itself to get visibility here when needed
|
|
2625
|
+
(0, _prospectiverenderutils.printDebugThrownValueForProspectiveRender)(err, workStore.route, _prospectiverenderutils.Phase.ProspectiveRender);
|
|
2626
|
+
}
|
|
2627
|
+
}
|
|
2628
|
+
if (initialServerResult) {
|
|
2629
|
+
const initialClientPrerenderController = new AbortController();
|
|
2630
|
+
const initialClientReactController = new AbortController();
|
|
2631
|
+
const initialClientRenderController = new AbortController();
|
|
2632
|
+
const initialClientPrerenderStore = {
|
|
2633
|
+
type: 'prerender-client',
|
|
2634
|
+
phase: 'render',
|
|
2635
|
+
rootParams,
|
|
2636
|
+
fallbackRouteParams,
|
|
2637
|
+
implicitTags,
|
|
2638
|
+
renderSignal: initialClientRenderController.signal,
|
|
2639
|
+
controller: initialClientPrerenderController,
|
|
2640
|
+
// For HTML Generation the only cache tracked activity
|
|
2641
|
+
// is module loading, which has it's own cache signal
|
|
2642
|
+
cacheSignal: null,
|
|
2643
|
+
dynamicTracking: null,
|
|
2644
|
+
allowEmptyStaticShell,
|
|
2645
|
+
revalidate: _constants1.INFINITE_CACHE,
|
|
2646
|
+
expire: _constants1.INFINITE_CACHE,
|
|
2647
|
+
stale: _constants1.INFINITE_CACHE,
|
|
2648
|
+
tags: [
|
|
2649
|
+
...implicitTags.tags
|
|
2650
|
+
],
|
|
2651
|
+
prerenderResumeDataCache,
|
|
2652
|
+
renderResumeDataCache,
|
|
2653
|
+
hmrRefreshHash: undefined
|
|
2654
|
+
};
|
|
2655
|
+
const prerender = require('react-dom/static').prerender;
|
|
2656
|
+
const pendingInitialClientResult = _workunitasyncstorageexternal.workUnitAsyncStorage.run(initialClientPrerenderStore, prerender, // eslint-disable-next-line @next/internal/no-ambiguous-jsx
|
|
2657
|
+
/*#__PURE__*/ (0, _jsxruntime.jsx)(App, {
|
|
2658
|
+
reactServerStream: initialServerResult.asUnclosingStream(),
|
|
2659
|
+
reactDebugStream: undefined,
|
|
2660
|
+
debugEndTime: undefined,
|
|
2661
|
+
preinitScripts: preinitScripts,
|
|
2662
|
+
ServerInsertedHTMLProvider: ServerInsertedHTMLProvider,
|
|
2663
|
+
nonce: nonce,
|
|
2664
|
+
images: ctx.renderOpts.images
|
|
2665
|
+
}), {
|
|
2666
|
+
signal: initialClientReactController.signal,
|
|
2667
|
+
onError: (err)=>{
|
|
2668
|
+
const digest = (0, _createerrorhandler.getDigestForWellKnownError)(err);
|
|
2669
|
+
if (digest) {
|
|
2670
|
+
return digest;
|
|
2671
|
+
}
|
|
2672
|
+
if ((0, _reactlargeshellerror.isReactLargeShellError)(err)) {
|
|
2673
|
+
// TODO: Aggregate
|
|
2674
|
+
console.error(err);
|
|
2675
|
+
return undefined;
|
|
2676
|
+
}
|
|
2677
|
+
if (initialClientReactController.signal.aborted) {
|
|
2678
|
+
// These are expected errors that might error the prerender. we ignore them.
|
|
2679
|
+
} else if (process.env.NEXT_DEBUG_BUILD || process.env.__NEXT_VERBOSE_LOGGING) {
|
|
2680
|
+
// We don't normally log these errors because we are going to retry anyway but
|
|
2681
|
+
// it can be useful for debugging Next.js itself to get visibility here when needed
|
|
2682
|
+
(0, _prospectiverenderutils.printDebugThrownValueForProspectiveRender)(err, workStore.route, _prospectiverenderutils.Phase.ProspectiveRender);
|
|
2683
|
+
}
|
|
2684
|
+
},
|
|
2685
|
+
bootstrapScripts: [
|
|
2686
|
+
bootstrapScript
|
|
2687
|
+
]
|
|
2688
|
+
});
|
|
2689
|
+
// The listener to abort our own render controller must be added after
|
|
2690
|
+
// React has added its listener, to ensure that pending I/O is not
|
|
2691
|
+
// aborted/rejected too early.
|
|
2692
|
+
initialClientReactController.signal.addEventListener('abort', ()=>{
|
|
2693
|
+
initialClientRenderController.abort();
|
|
2694
|
+
}, {
|
|
2695
|
+
once: true
|
|
2696
|
+
});
|
|
2697
|
+
pendingInitialClientResult.catch((err)=>{
|
|
2698
|
+
if (initialClientReactController.signal.aborted || (0, _dynamicrendering.isPrerenderInterruptedError)(err)) {
|
|
2699
|
+
// These are expected errors that might error the prerender. we ignore them.
|
|
2700
|
+
} else if (process.env.NEXT_DEBUG_BUILD || process.env.__NEXT_VERBOSE_LOGGING) {
|
|
2701
|
+
// We don't normally log these errors because we are going to retry anyway but
|
|
2702
|
+
// it can be useful for debugging Next.js itself to get visibility here when needed
|
|
2703
|
+
(0, _prospectiverenderutils.printDebugThrownValueForProspectiveRender)(err, workStore.route, _prospectiverenderutils.Phase.ProspectiveRender);
|
|
2704
|
+
}
|
|
2705
|
+
});
|
|
2706
|
+
// This is mostly needed for dynamic `import()`s in client components.
|
|
2707
|
+
// Promises passed to client were already awaited above (assuming that they came from cached functions)
|
|
2708
|
+
(0, _trackmoduleloadingexternal.trackPendingModules)(cacheSignal);
|
|
2709
|
+
await cacheSignal.cacheReady();
|
|
2710
|
+
initialClientReactController.abort();
|
|
2711
|
+
}
|
|
2712
|
+
const finalServerReactController = new AbortController();
|
|
2713
|
+
const finalServerRenderController = new AbortController();
|
|
2714
|
+
const finalServerPayloadPrerenderStore = {
|
|
2715
|
+
type: 'prerender',
|
|
2716
|
+
phase: 'render',
|
|
2717
|
+
rootParams,
|
|
2718
|
+
fallbackRouteParams,
|
|
2719
|
+
implicitTags,
|
|
2720
|
+
// While this render signal isn't going to be used to abort a React render while getting the RSC payload
|
|
2721
|
+
// various request data APIs bind to this controller to reject after completion.
|
|
2722
|
+
renderSignal: finalServerRenderController.signal,
|
|
2723
|
+
// When we generate the RSC payload we might abort this controller due to sync IO
|
|
2724
|
+
// but we don't actually care about sync IO in this phase so we use a throw away controller
|
|
2725
|
+
// that isn't connected to anything
|
|
2726
|
+
controller: new AbortController(),
|
|
2727
|
+
// All caches we could read must already be filled so no tracking is necessary
|
|
2728
|
+
cacheSignal: null,
|
|
2729
|
+
dynamicTracking: null,
|
|
2730
|
+
allowEmptyStaticShell,
|
|
2731
|
+
revalidate: _constants1.INFINITE_CACHE,
|
|
2732
|
+
expire: _constants1.INFINITE_CACHE,
|
|
2733
|
+
stale: _constants1.INFINITE_CACHE,
|
|
2734
|
+
tags: [
|
|
2735
|
+
...implicitTags.tags
|
|
2736
|
+
],
|
|
2737
|
+
prerenderResumeDataCache,
|
|
2738
|
+
renderResumeDataCache,
|
|
2739
|
+
hmrRefreshHash: undefined
|
|
2740
|
+
};
|
|
2741
|
+
const finalAttemptRSCPayload = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(finalServerPayloadPrerenderStore, getRSCPayload, tree, ctx, res.statusCode === 404);
|
|
2742
|
+
const serverDynamicTracking = (0, _dynamicrendering.createDynamicTrackingState)(isDebugDynamicAccesses);
|
|
2743
|
+
let serverIsDynamic = false;
|
|
2744
|
+
const finalServerPrerenderStore = prerenderStore = {
|
|
2745
|
+
type: 'prerender',
|
|
2746
|
+
phase: 'render',
|
|
2747
|
+
rootParams,
|
|
2748
|
+
fallbackRouteParams,
|
|
2749
|
+
implicitTags,
|
|
2750
|
+
renderSignal: finalServerRenderController.signal,
|
|
2751
|
+
controller: finalServerReactController,
|
|
2752
|
+
// All caches we could read must already be filled so no tracking is necessary
|
|
2753
|
+
cacheSignal: null,
|
|
2754
|
+
dynamicTracking: serverDynamicTracking,
|
|
2755
|
+
allowEmptyStaticShell,
|
|
2756
|
+
revalidate: _constants1.INFINITE_CACHE,
|
|
2757
|
+
expire: _constants1.INFINITE_CACHE,
|
|
2758
|
+
stale: _constants1.INFINITE_CACHE,
|
|
2759
|
+
tags: [
|
|
2760
|
+
...implicitTags.tags
|
|
2761
|
+
],
|
|
2762
|
+
prerenderResumeDataCache,
|
|
2763
|
+
renderResumeDataCache,
|
|
2764
|
+
hmrRefreshHash: undefined
|
|
2765
|
+
};
|
|
2766
|
+
let prerenderIsPending = true;
|
|
2767
|
+
const reactServerResult = reactServerPrerenderResult = await (0, _apprenderprerenderutils.createReactServerPrerenderResult)((0, _apprenderprerenderutils.prerenderAndAbortInSequentialTasks)(async ()=>{
|
|
2768
|
+
const pendingPrerenderResult = _workunitasyncstorageexternal.workUnitAsyncStorage.run(// The store to scope
|
|
2769
|
+
finalServerPrerenderStore, // The function to run
|
|
2770
|
+
ComponentMod.prerender, // ... the arguments for the function to run
|
|
2771
|
+
finalAttemptRSCPayload, clientModules, {
|
|
2772
|
+
filterStackFrame,
|
|
2773
|
+
onError: (err)=>{
|
|
2774
|
+
return serverComponentsErrorHandler(err);
|
|
2775
|
+
},
|
|
2776
|
+
signal: finalServerReactController.signal
|
|
2777
|
+
});
|
|
2778
|
+
// The listener to abort our own render controller must be added
|
|
2779
|
+
// after React has added its listener, to ensure that pending I/O
|
|
2780
|
+
// is not aborted/rejected too early.
|
|
2781
|
+
finalServerReactController.signal.addEventListener('abort', ()=>{
|
|
2782
|
+
finalServerRenderController.abort();
|
|
2783
|
+
}, {
|
|
2784
|
+
once: true
|
|
2785
|
+
});
|
|
2786
|
+
const prerenderResult = await pendingPrerenderResult;
|
|
2787
|
+
prerenderIsPending = false;
|
|
2788
|
+
return prerenderResult;
|
|
2789
|
+
}, ()=>{
|
|
2790
|
+
if (finalServerReactController.signal.aborted) {
|
|
2791
|
+
// If the server controller is already aborted we must have called something
|
|
2792
|
+
// that required aborting the prerender synchronously such as with new Date()
|
|
2793
|
+
serverIsDynamic = true;
|
|
2794
|
+
return;
|
|
2795
|
+
}
|
|
2796
|
+
if (prerenderIsPending) {
|
|
2797
|
+
// If prerenderIsPending then we have blocked for longer than a Task and we assume
|
|
2798
|
+
// there is something unfinished.
|
|
2799
|
+
serverIsDynamic = true;
|
|
2800
|
+
}
|
|
2801
|
+
finalServerReactController.abort();
|
|
2802
|
+
}));
|
|
2803
|
+
const clientDynamicTracking = (0, _dynamicrendering.createDynamicTrackingState)(isDebugDynamicAccesses);
|
|
2804
|
+
const finalClientReactController = new AbortController();
|
|
2805
|
+
const finalClientRenderController = new AbortController();
|
|
2806
|
+
const finalClientPrerenderStore = {
|
|
2807
|
+
type: 'prerender-client',
|
|
2808
|
+
phase: 'render',
|
|
2809
|
+
rootParams,
|
|
2810
|
+
fallbackRouteParams,
|
|
2811
|
+
implicitTags,
|
|
2812
|
+
renderSignal: finalClientRenderController.signal,
|
|
2813
|
+
controller: finalClientReactController,
|
|
2814
|
+
// No APIs require a cacheSignal through the workUnitStore during the HTML prerender
|
|
2815
|
+
cacheSignal: null,
|
|
2816
|
+
dynamicTracking: clientDynamicTracking,
|
|
2817
|
+
allowEmptyStaticShell,
|
|
2818
|
+
revalidate: _constants1.INFINITE_CACHE,
|
|
2819
|
+
expire: _constants1.INFINITE_CACHE,
|
|
2820
|
+
stale: _constants1.INFINITE_CACHE,
|
|
2821
|
+
tags: [
|
|
2822
|
+
...implicitTags.tags
|
|
2823
|
+
],
|
|
2824
|
+
prerenderResumeDataCache,
|
|
2825
|
+
renderResumeDataCache,
|
|
2826
|
+
hmrRefreshHash: undefined
|
|
2827
|
+
};
|
|
2828
|
+
let dynamicValidation = (0, _dynamicrendering.createDynamicValidationState)();
|
|
2829
|
+
const prerender = require('react-dom/static').prerender;
|
|
2830
|
+
let { prelude: unprocessedPrelude, postponed } = await (0, _apprenderprerenderutils.prerenderAndAbortInSequentialTasks)(()=>{
|
|
2831
|
+
const pendingFinalClientResult = _workunitasyncstorageexternal.workUnitAsyncStorage.run(finalClientPrerenderStore, prerender, // eslint-disable-next-line @next/internal/no-ambiguous-jsx
|
|
2832
|
+
/*#__PURE__*/ (0, _jsxruntime.jsx)(App, {
|
|
2833
|
+
reactServerStream: reactServerResult.asUnclosingStream(),
|
|
2834
|
+
reactDebugStream: undefined,
|
|
2835
|
+
debugEndTime: undefined,
|
|
2836
|
+
preinitScripts: preinitScripts,
|
|
2837
|
+
ServerInsertedHTMLProvider: ServerInsertedHTMLProvider,
|
|
2838
|
+
nonce: nonce,
|
|
2839
|
+
images: ctx.renderOpts.images
|
|
2840
|
+
}), {
|
|
2841
|
+
signal: finalClientReactController.signal,
|
|
2842
|
+
onError: (err, errorInfo)=>{
|
|
2843
|
+
if ((0, _dynamicrendering.isPrerenderInterruptedError)(err) || finalClientReactController.signal.aborted) {
|
|
2844
|
+
const componentStack = errorInfo.componentStack;
|
|
2845
|
+
if (typeof componentStack === 'string') {
|
|
2846
|
+
(0, _dynamicrendering.trackAllowedDynamicAccess)(workStore, componentStack, dynamicValidation, clientDynamicTracking);
|
|
2847
|
+
}
|
|
2848
|
+
return;
|
|
2849
|
+
}
|
|
2850
|
+
return htmlRendererErrorHandler(err, errorInfo);
|
|
2851
|
+
},
|
|
2852
|
+
onHeaders: (headers)=>{
|
|
2853
|
+
headers.forEach((value, key)=>{
|
|
2854
|
+
appendHeader(key, value);
|
|
2855
|
+
});
|
|
2856
|
+
},
|
|
2857
|
+
maxHeadersLength: reactMaxHeadersLength,
|
|
2858
|
+
bootstrapScripts: [
|
|
2859
|
+
bootstrapScript
|
|
2860
|
+
]
|
|
2861
|
+
});
|
|
2862
|
+
// The listener to abort our own render controller must be added
|
|
2863
|
+
// after React has added its listener, to ensure that pending I/O is
|
|
2864
|
+
// not aborted/rejected too early.
|
|
2865
|
+
finalClientReactController.signal.addEventListener('abort', ()=>{
|
|
2866
|
+
finalClientRenderController.abort();
|
|
2867
|
+
}, {
|
|
2868
|
+
once: true
|
|
2869
|
+
});
|
|
2870
|
+
return pendingFinalClientResult;
|
|
2871
|
+
}, ()=>{
|
|
2872
|
+
finalClientReactController.abort();
|
|
2873
|
+
});
|
|
2874
|
+
const { prelude, preludeIsEmpty } = await (0, _apprenderprerenderutils.processPrelude)(unprocessedPrelude);
|
|
2875
|
+
// If we've disabled throwing on empty static shell, then we don't need to
|
|
2876
|
+
// track any dynamic access that occurs above the suspense boundary because
|
|
2877
|
+
// we'll do so in the route shell.
|
|
2878
|
+
if (!allowEmptyStaticShell) {
|
|
2879
|
+
(0, _dynamicrendering.throwIfDisallowedDynamic)(workStore, preludeIsEmpty ? _dynamicrendering.PreludeState.Empty : _dynamicrendering.PreludeState.Full, dynamicValidation, serverDynamicTracking);
|
|
2880
|
+
}
|
|
2881
|
+
const getServerInsertedHTML = (0, _makegetserverinsertedhtml.makeGetServerInsertedHTML)({
|
|
2882
|
+
polyfills,
|
|
2883
|
+
renderServerInsertedHTML,
|
|
2884
|
+
serverCapturedErrors: allCapturedErrors,
|
|
2885
|
+
basePath,
|
|
2886
|
+
tracingMetadata: tracingMetadata
|
|
2887
|
+
});
|
|
2888
|
+
const flightData = await (0, _nodewebstreamshelper.streamToBuffer)(reactServerResult.asStream());
|
|
2889
|
+
metadata.flightData = flightData;
|
|
2890
|
+
metadata.segmentData = await collectSegmentData(flightData, finalServerPrerenderStore, ComponentMod, renderOpts);
|
|
2891
|
+
if (serverIsDynamic) {
|
|
2892
|
+
// Dynamic case
|
|
2893
|
+
// We will always need to perform a "resume" render of some kind when this route is accessed
|
|
2894
|
+
// because the RSC data itself is dynamic. We determine if there are any HTML holes or not
|
|
2895
|
+
// but generally this is a "partial" prerender in that there will be a per-request compute
|
|
2896
|
+
// concatenated to the static shell.
|
|
2897
|
+
if (postponed != null) {
|
|
2898
|
+
// Dynamic HTML case
|
|
2899
|
+
metadata.postponed = await (0, _postponedstate.getDynamicHTMLPostponedState)(postponed, preludeIsEmpty ? _postponedstate.DynamicHTMLPreludeState.Empty : _postponedstate.DynamicHTMLPreludeState.Full, fallbackRouteParams, resumeDataCache, cacheComponents);
|
|
2900
|
+
} else {
|
|
2901
|
+
// Dynamic Data case
|
|
2902
|
+
metadata.postponed = await (0, _postponedstate.getDynamicDataPostponedState)(resumeDataCache, cacheComponents);
|
|
2903
|
+
}
|
|
2904
|
+
reactServerResult.consume();
|
|
2905
|
+
return {
|
|
2906
|
+
digestErrorsMap: reactServerErrorsByDigest,
|
|
2907
|
+
ssrErrors: allCapturedErrors,
|
|
2908
|
+
stream: await (0, _nodewebstreamshelper.continueDynamicPrerender)(prelude, {
|
|
2909
|
+
getServerInsertedHTML,
|
|
2910
|
+
getServerInsertedMetadata
|
|
2911
|
+
}),
|
|
2912
|
+
dynamicAccess: (0, _dynamicrendering.consumeDynamicAccess)(serverDynamicTracking, clientDynamicTracking),
|
|
2913
|
+
// TODO: Should this include the SSR pass?
|
|
2914
|
+
collectedRevalidate: finalServerPrerenderStore.revalidate,
|
|
2915
|
+
collectedExpire: finalServerPrerenderStore.expire,
|
|
2916
|
+
collectedStale: selectStaleTime(finalServerPrerenderStore.stale),
|
|
2917
|
+
collectedTags: finalServerPrerenderStore.tags,
|
|
2918
|
+
renderResumeDataCache: (0, _resumedatacache.createRenderResumeDataCache)(resumeDataCache)
|
|
2919
|
+
};
|
|
2920
|
+
} else {
|
|
2921
|
+
// Static case
|
|
2922
|
+
// We will not perform resumption per request. The result can be served statically to the requestor
|
|
2923
|
+
// and if there was anything dynamic it will only be rendered in the browser.
|
|
2924
|
+
if (workStore.forceDynamic) {
|
|
2925
|
+
throw Object.defineProperty(new _staticgenerationbailout.StaticGenBailoutError('Invariant: a Page with `dynamic = "force-dynamic"` did not trigger the dynamic pathway. This is a bug in Next.js'), "__NEXT_ERROR_CODE", {
|
|
2926
|
+
value: "E598",
|
|
2927
|
+
enumerable: false,
|
|
2928
|
+
configurable: true
|
|
2929
|
+
});
|
|
2930
|
+
}
|
|
2931
|
+
let htmlStream = prelude;
|
|
2932
|
+
if (postponed != null) {
|
|
2933
|
+
// We postponed but nothing dynamic was used. We resume the render now and immediately abort it
|
|
2934
|
+
// so we can set all the postponed boundaries to client render mode before we store the HTML response
|
|
2935
|
+
const resume = require('react-dom/server').resume;
|
|
2936
|
+
// We don't actually want to render anything so we just pass a stream
|
|
2937
|
+
// that never resolves. The resume call is going to abort immediately anyway
|
|
2938
|
+
const foreverStream = new ReadableStream();
|
|
2939
|
+
const resumeStream = await resume(// eslint-disable-next-line @next/internal/no-ambiguous-jsx
|
|
2940
|
+
/*#__PURE__*/ (0, _jsxruntime.jsx)(App, {
|
|
2941
|
+
reactServerStream: foreverStream,
|
|
2942
|
+
reactDebugStream: undefined,
|
|
2943
|
+
debugEndTime: undefined,
|
|
2944
|
+
preinitScripts: ()=>{},
|
|
2945
|
+
ServerInsertedHTMLProvider: ServerInsertedHTMLProvider,
|
|
2946
|
+
nonce: nonce,
|
|
2947
|
+
images: ctx.renderOpts.images
|
|
2948
|
+
}), JSON.parse(JSON.stringify(postponed)), {
|
|
2949
|
+
signal: (0, _dynamicrendering.createRenderInBrowserAbortSignal)(),
|
|
2950
|
+
onError: htmlRendererErrorHandler,
|
|
2951
|
+
nonce
|
|
2952
|
+
});
|
|
2953
|
+
// First we write everything from the prerender, then we write everything from the aborted resume render
|
|
2954
|
+
htmlStream = (0, _nodewebstreamshelper.chainStreams)(prelude, resumeStream);
|
|
2955
|
+
}
|
|
2956
|
+
let finalStream;
|
|
2957
|
+
const hasFallbackRouteParams = fallbackRouteParams && fallbackRouteParams.size > 0;
|
|
2958
|
+
if (hasFallbackRouteParams) {
|
|
2959
|
+
// This is a "static fallback" prerender: although the page didn't
|
|
2960
|
+
// access any runtime params in a Server Component, it may have
|
|
2961
|
+
// accessed a runtime param in a client segment.
|
|
2962
|
+
//
|
|
2963
|
+
// TODO: If there were no client segments, we can use the fully static
|
|
2964
|
+
// path instead.
|
|
2965
|
+
//
|
|
2966
|
+
// Rather than use a dynamic server resume to fill in the params,
|
|
2967
|
+
// we can rely on the client to parse the params from the URL and use
|
|
2968
|
+
// that to hydrate the page.
|
|
2969
|
+
//
|
|
2970
|
+
// Send an empty InitialRSCPayload to the server component renderer
|
|
2971
|
+
// The data will be fetched by the client instead.
|
|
2972
|
+
// TODO: In the future, rather than defer the entire hydration payload
|
|
2973
|
+
// to be fetched by the client, we should only defer the client
|
|
2974
|
+
// segments, since those are the only ones whose data is not complete.
|
|
2975
|
+
const emptyReactServerResult = await (0, _apprenderprerenderutils.createReactServerPrerenderResultFromRender)(ComponentMod.renderToReadableStream([], clientModules, {
|
|
2976
|
+
filterStackFrame,
|
|
2977
|
+
onError: serverComponentsErrorHandler
|
|
2978
|
+
}));
|
|
2979
|
+
finalStream = await (0, _nodewebstreamshelper.continueStaticFallbackPrerender)(htmlStream, {
|
|
2980
|
+
inlinedDataStream: (0, _useflightresponse.createInlinedDataReadableStream)(emptyReactServerResult.consumeAsStream(), nonce, formState),
|
|
2981
|
+
getServerInsertedHTML,
|
|
2982
|
+
getServerInsertedMetadata,
|
|
2983
|
+
isBuildTimePrerendering: ctx.workStore.isBuildTimePrerendering === true,
|
|
2984
|
+
buildId: ctx.workStore.buildId
|
|
2985
|
+
});
|
|
2986
|
+
} else {
|
|
2987
|
+
// Normal static prerender case, no fallback param handling needed
|
|
2988
|
+
finalStream = await (0, _nodewebstreamshelper.continueStaticPrerender)(htmlStream, {
|
|
2989
|
+
inlinedDataStream: (0, _useflightresponse.createInlinedDataReadableStream)(reactServerResult.consumeAsStream(), nonce, formState),
|
|
2990
|
+
getServerInsertedHTML,
|
|
2991
|
+
getServerInsertedMetadata,
|
|
2992
|
+
isBuildTimePrerendering: ctx.workStore.isBuildTimePrerendering === true,
|
|
2993
|
+
buildId: ctx.workStore.buildId
|
|
2994
|
+
});
|
|
2995
|
+
}
|
|
2996
|
+
return {
|
|
2997
|
+
digestErrorsMap: reactServerErrorsByDigest,
|
|
2998
|
+
ssrErrors: allCapturedErrors,
|
|
2999
|
+
stream: finalStream,
|
|
3000
|
+
dynamicAccess: (0, _dynamicrendering.consumeDynamicAccess)(serverDynamicTracking, clientDynamicTracking),
|
|
3001
|
+
// TODO: Should this include the SSR pass?
|
|
3002
|
+
collectedRevalidate: finalServerPrerenderStore.revalidate,
|
|
3003
|
+
collectedExpire: finalServerPrerenderStore.expire,
|
|
3004
|
+
collectedStale: selectStaleTime(finalServerPrerenderStore.stale),
|
|
3005
|
+
collectedTags: finalServerPrerenderStore.tags,
|
|
3006
|
+
renderResumeDataCache: (0, _resumedatacache.createRenderResumeDataCache)(resumeDataCache)
|
|
3007
|
+
};
|
|
3008
|
+
}
|
|
3009
|
+
} else if (experimental.isRoutePPREnabled) {
|
|
3010
|
+
// We're statically generating with PPR and need to do dynamic tracking
|
|
3011
|
+
let dynamicTracking = (0, _dynamicrendering.createDynamicTrackingState)(isDebugDynamicAccesses);
|
|
3012
|
+
const prerenderResumeDataCache = (0, _resumedatacache.createPrerenderResumeDataCache)();
|
|
3013
|
+
const reactServerPrerenderStore = prerenderStore = {
|
|
3014
|
+
type: 'prerender-ppr',
|
|
3015
|
+
phase: 'render',
|
|
3016
|
+
rootParams,
|
|
3017
|
+
fallbackRouteParams,
|
|
3018
|
+
implicitTags,
|
|
3019
|
+
dynamicTracking,
|
|
3020
|
+
revalidate: _constants1.INFINITE_CACHE,
|
|
3021
|
+
expire: _constants1.INFINITE_CACHE,
|
|
3022
|
+
stale: _constants1.INFINITE_CACHE,
|
|
3023
|
+
tags: [
|
|
3024
|
+
...implicitTags.tags
|
|
3025
|
+
],
|
|
3026
|
+
prerenderResumeDataCache
|
|
3027
|
+
};
|
|
3028
|
+
const RSCPayload = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(reactServerPrerenderStore, getRSCPayload, tree, ctx, res.statusCode === 404);
|
|
3029
|
+
const reactServerResult = reactServerPrerenderResult = await (0, _apprenderprerenderutils.createReactServerPrerenderResultFromRender)(_workunitasyncstorageexternal.workUnitAsyncStorage.run(reactServerPrerenderStore, ComponentMod.renderToReadableStream, // ... the arguments for the function to run
|
|
3030
|
+
RSCPayload, clientModules, {
|
|
3031
|
+
filterStackFrame,
|
|
3032
|
+
onError: serverComponentsErrorHandler
|
|
3033
|
+
}));
|
|
3034
|
+
const ssrPrerenderStore = {
|
|
3035
|
+
type: 'prerender-ppr',
|
|
3036
|
+
phase: 'render',
|
|
3037
|
+
rootParams,
|
|
3038
|
+
fallbackRouteParams,
|
|
3039
|
+
implicitTags,
|
|
3040
|
+
dynamicTracking,
|
|
3041
|
+
revalidate: _constants1.INFINITE_CACHE,
|
|
3042
|
+
expire: _constants1.INFINITE_CACHE,
|
|
3043
|
+
stale: _constants1.INFINITE_CACHE,
|
|
3044
|
+
tags: [
|
|
3045
|
+
...implicitTags.tags
|
|
3046
|
+
],
|
|
3047
|
+
prerenderResumeDataCache
|
|
3048
|
+
};
|
|
3049
|
+
const prerender = require('react-dom/static').prerender;
|
|
3050
|
+
const { prelude: unprocessedPrelude, postponed } = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(ssrPrerenderStore, prerender, // eslint-disable-next-line @next/internal/no-ambiguous-jsx
|
|
3051
|
+
/*#__PURE__*/ (0, _jsxruntime.jsx)(App, {
|
|
3052
|
+
reactServerStream: reactServerResult.asUnclosingStream(),
|
|
3053
|
+
reactDebugStream: undefined,
|
|
3054
|
+
debugEndTime: undefined,
|
|
3055
|
+
preinitScripts: preinitScripts,
|
|
3056
|
+
ServerInsertedHTMLProvider: ServerInsertedHTMLProvider,
|
|
3057
|
+
nonce: nonce,
|
|
3058
|
+
images: ctx.renderOpts.images
|
|
3059
|
+
}), {
|
|
3060
|
+
onError: htmlRendererErrorHandler,
|
|
3061
|
+
onHeaders: (headers)=>{
|
|
3062
|
+
headers.forEach((value, key)=>{
|
|
3063
|
+
appendHeader(key, value);
|
|
3064
|
+
});
|
|
3065
|
+
},
|
|
3066
|
+
maxHeadersLength: reactMaxHeadersLength,
|
|
3067
|
+
bootstrapScripts: [
|
|
3068
|
+
bootstrapScript
|
|
3069
|
+
]
|
|
3070
|
+
});
|
|
3071
|
+
const getServerInsertedHTML = (0, _makegetserverinsertedhtml.makeGetServerInsertedHTML)({
|
|
3072
|
+
polyfills,
|
|
3073
|
+
renderServerInsertedHTML,
|
|
3074
|
+
serverCapturedErrors: allCapturedErrors,
|
|
3075
|
+
basePath,
|
|
3076
|
+
tracingMetadata: tracingMetadata
|
|
3077
|
+
});
|
|
3078
|
+
// After awaiting here we've waited for the entire RSC render to complete. Crucially this means
|
|
3079
|
+
// that when we detect whether we've used dynamic APIs below we know we'll have picked up even
|
|
3080
|
+
// parts of the React Server render that might not be used in the SSR render.
|
|
3081
|
+
const flightData = await (0, _nodewebstreamshelper.streamToBuffer)(reactServerResult.asStream());
|
|
3082
|
+
if (shouldGenerateStaticFlightData(workStore)) {
|
|
3083
|
+
metadata.flightData = flightData;
|
|
3084
|
+
metadata.segmentData = await collectSegmentData(flightData, ssrPrerenderStore, ComponentMod, renderOpts);
|
|
3085
|
+
}
|
|
3086
|
+
const { prelude, preludeIsEmpty } = await (0, _apprenderprerenderutils.processPrelude)(unprocessedPrelude);
|
|
3087
|
+
/**
|
|
3088
|
+
* When prerendering there are three outcomes to consider
|
|
3089
|
+
*
|
|
3090
|
+
* Dynamic HTML: The prerender has dynamic holes (caused by using Next.js Dynamic Rendering APIs)
|
|
3091
|
+
* We will need to resume this result when requests are handled and we don't include
|
|
3092
|
+
* any server inserted HTML or inlined flight data in the static HTML
|
|
3093
|
+
*
|
|
3094
|
+
* Dynamic Data: The prerender has no dynamic holes but dynamic APIs were used. We will not
|
|
3095
|
+
* resume this render when requests are handled but we will generate new inlined
|
|
3096
|
+
* flight data since it is dynamic and differences may end up reconciling on the client
|
|
3097
|
+
*
|
|
3098
|
+
* Static: The prerender has no dynamic holes and no dynamic APIs were used. We statically encode
|
|
3099
|
+
* all server inserted HTML and flight data
|
|
3100
|
+
*/ // First we check if we have any dynamic holes in our HTML prerender
|
|
3101
|
+
if ((0, _dynamicrendering.accessedDynamicData)(dynamicTracking.dynamicAccesses)) {
|
|
3102
|
+
if (postponed != null) {
|
|
3103
|
+
// Dynamic HTML case.
|
|
3104
|
+
metadata.postponed = await (0, _postponedstate.getDynamicHTMLPostponedState)(postponed, preludeIsEmpty ? _postponedstate.DynamicHTMLPreludeState.Empty : _postponedstate.DynamicHTMLPreludeState.Full, fallbackRouteParams, prerenderResumeDataCache, cacheComponents);
|
|
3105
|
+
} else {
|
|
3106
|
+
// Dynamic Data case.
|
|
3107
|
+
metadata.postponed = await (0, _postponedstate.getDynamicDataPostponedState)(prerenderResumeDataCache, cacheComponents);
|
|
3108
|
+
}
|
|
3109
|
+
// Regardless of whether this is the Dynamic HTML or Dynamic Data case we need to ensure we include
|
|
3110
|
+
// server inserted html in the static response because the html that is part of the prerender may depend on it
|
|
3111
|
+
// It is possible in the set of stream transforms for Dynamic HTML vs Dynamic Data may differ but currently both states
|
|
3112
|
+
// require the same set so we unify the code path here
|
|
3113
|
+
reactServerResult.consume();
|
|
3114
|
+
return {
|
|
3115
|
+
digestErrorsMap: reactServerErrorsByDigest,
|
|
3116
|
+
ssrErrors: allCapturedErrors,
|
|
3117
|
+
stream: await (0, _nodewebstreamshelper.continueDynamicPrerender)(prelude, {
|
|
3118
|
+
getServerInsertedHTML,
|
|
3119
|
+
getServerInsertedMetadata
|
|
3120
|
+
}),
|
|
3121
|
+
dynamicAccess: dynamicTracking.dynamicAccesses,
|
|
3122
|
+
// TODO: Should this include the SSR pass?
|
|
3123
|
+
collectedRevalidate: reactServerPrerenderStore.revalidate,
|
|
3124
|
+
collectedExpire: reactServerPrerenderStore.expire,
|
|
3125
|
+
collectedStale: selectStaleTime(reactServerPrerenderStore.stale),
|
|
3126
|
+
collectedTags: reactServerPrerenderStore.tags
|
|
3127
|
+
};
|
|
3128
|
+
} else if (fallbackRouteParams && fallbackRouteParams.size > 0) {
|
|
3129
|
+
// Rendering the fallback case.
|
|
3130
|
+
metadata.postponed = await (0, _postponedstate.getDynamicDataPostponedState)(prerenderResumeDataCache, cacheComponents);
|
|
3131
|
+
return {
|
|
3132
|
+
digestErrorsMap: reactServerErrorsByDigest,
|
|
3133
|
+
ssrErrors: allCapturedErrors,
|
|
3134
|
+
stream: await (0, _nodewebstreamshelper.continueDynamicPrerender)(prelude, {
|
|
3135
|
+
getServerInsertedHTML,
|
|
3136
|
+
getServerInsertedMetadata
|
|
3137
|
+
}),
|
|
3138
|
+
dynamicAccess: dynamicTracking.dynamicAccesses,
|
|
3139
|
+
// TODO: Should this include the SSR pass?
|
|
3140
|
+
collectedRevalidate: reactServerPrerenderStore.revalidate,
|
|
3141
|
+
collectedExpire: reactServerPrerenderStore.expire,
|
|
3142
|
+
collectedStale: selectStaleTime(reactServerPrerenderStore.stale),
|
|
3143
|
+
collectedTags: reactServerPrerenderStore.tags
|
|
3144
|
+
};
|
|
3145
|
+
} else {
|
|
3146
|
+
// Static case
|
|
3147
|
+
// We still have not used any dynamic APIs. At this point we can produce an entirely static prerender response
|
|
3148
|
+
if (workStore.forceDynamic) {
|
|
3149
|
+
throw Object.defineProperty(new _staticgenerationbailout.StaticGenBailoutError('Invariant: a Page with `dynamic = "force-dynamic"` did not trigger the dynamic pathway. This is a bug in Next.js'), "__NEXT_ERROR_CODE", {
|
|
3150
|
+
value: "E598",
|
|
3151
|
+
enumerable: false,
|
|
3152
|
+
configurable: true
|
|
3153
|
+
});
|
|
3154
|
+
}
|
|
3155
|
+
let htmlStream = prelude;
|
|
3156
|
+
if (postponed != null) {
|
|
3157
|
+
// We postponed but nothing dynamic was used. We resume the render now and immediately abort it
|
|
3158
|
+
// so we can set all the postponed boundaries to client render mode before we store the HTML response
|
|
3159
|
+
const resume = require('react-dom/server').resume;
|
|
3160
|
+
// We don't actually want to render anything so we just pass a stream
|
|
3161
|
+
// that never resolves. The resume call is going to abort immediately anyway
|
|
3162
|
+
const foreverStream = new ReadableStream();
|
|
3163
|
+
const resumeStream = await resume(// eslint-disable-next-line @next/internal/no-ambiguous-jsx
|
|
3164
|
+
/*#__PURE__*/ (0, _jsxruntime.jsx)(App, {
|
|
3165
|
+
reactServerStream: foreverStream,
|
|
3166
|
+
reactDebugStream: undefined,
|
|
3167
|
+
debugEndTime: undefined,
|
|
3168
|
+
preinitScripts: ()=>{},
|
|
3169
|
+
ServerInsertedHTMLProvider: ServerInsertedHTMLProvider,
|
|
3170
|
+
nonce: nonce,
|
|
3171
|
+
images: ctx.renderOpts.images
|
|
3172
|
+
}), JSON.parse(JSON.stringify(postponed)), {
|
|
3173
|
+
signal: (0, _dynamicrendering.createRenderInBrowserAbortSignal)(),
|
|
3174
|
+
onError: htmlRendererErrorHandler,
|
|
3175
|
+
nonce
|
|
3176
|
+
});
|
|
3177
|
+
// First we write everything from the prerender, then we write everything from the aborted resume render
|
|
3178
|
+
htmlStream = (0, _nodewebstreamshelper.chainStreams)(prelude, resumeStream);
|
|
3179
|
+
}
|
|
3180
|
+
return {
|
|
3181
|
+
digestErrorsMap: reactServerErrorsByDigest,
|
|
3182
|
+
ssrErrors: allCapturedErrors,
|
|
3183
|
+
stream: await (0, _nodewebstreamshelper.continueStaticPrerender)(htmlStream, {
|
|
3184
|
+
inlinedDataStream: (0, _useflightresponse.createInlinedDataReadableStream)(reactServerResult.consumeAsStream(), nonce, formState),
|
|
3185
|
+
getServerInsertedHTML,
|
|
3186
|
+
getServerInsertedMetadata,
|
|
3187
|
+
isBuildTimePrerendering: ctx.workStore.isBuildTimePrerendering === true,
|
|
3188
|
+
buildId: ctx.workStore.buildId
|
|
3189
|
+
}),
|
|
3190
|
+
dynamicAccess: dynamicTracking.dynamicAccesses,
|
|
3191
|
+
// TODO: Should this include the SSR pass?
|
|
3192
|
+
collectedRevalidate: reactServerPrerenderStore.revalidate,
|
|
3193
|
+
collectedExpire: reactServerPrerenderStore.expire,
|
|
3194
|
+
collectedStale: selectStaleTime(reactServerPrerenderStore.stale),
|
|
3195
|
+
collectedTags: reactServerPrerenderStore.tags
|
|
3196
|
+
};
|
|
3197
|
+
}
|
|
3198
|
+
} else {
|
|
3199
|
+
const prerenderLegacyStore = prerenderStore = {
|
|
3200
|
+
type: 'prerender-legacy',
|
|
3201
|
+
phase: 'render',
|
|
3202
|
+
rootParams,
|
|
3203
|
+
implicitTags,
|
|
3204
|
+
revalidate: _constants1.INFINITE_CACHE,
|
|
3205
|
+
expire: _constants1.INFINITE_CACHE,
|
|
3206
|
+
stale: _constants1.INFINITE_CACHE,
|
|
3207
|
+
tags: [
|
|
3208
|
+
...implicitTags.tags
|
|
3209
|
+
]
|
|
3210
|
+
};
|
|
3211
|
+
// This is a regular static generation. We don't do dynamic tracking because we rely on
|
|
3212
|
+
// the old-school dynamic error handling to bail out of static generation
|
|
3213
|
+
const RSCPayload = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(prerenderLegacyStore, getRSCPayload, tree, ctx, res.statusCode === 404);
|
|
3214
|
+
const reactServerResult = reactServerPrerenderResult = await (0, _apprenderprerenderutils.createReactServerPrerenderResultFromRender)(_workunitasyncstorageexternal.workUnitAsyncStorage.run(prerenderLegacyStore, ComponentMod.renderToReadableStream, RSCPayload, clientModules, {
|
|
3215
|
+
filterStackFrame,
|
|
3216
|
+
onError: serverComponentsErrorHandler
|
|
3217
|
+
}));
|
|
3218
|
+
const renderToReadableStream = require('react-dom/server').renderToReadableStream;
|
|
3219
|
+
const htmlStream = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(prerenderLegacyStore, renderToReadableStream, // eslint-disable-next-line @next/internal/no-ambiguous-jsx
|
|
3220
|
+
/*#__PURE__*/ (0, _jsxruntime.jsx)(App, {
|
|
3221
|
+
reactServerStream: reactServerResult.asUnclosingStream(),
|
|
3222
|
+
reactDebugStream: undefined,
|
|
3223
|
+
debugEndTime: undefined,
|
|
3224
|
+
preinitScripts: preinitScripts,
|
|
3225
|
+
ServerInsertedHTMLProvider: ServerInsertedHTMLProvider,
|
|
3226
|
+
nonce: nonce,
|
|
3227
|
+
images: ctx.renderOpts.images
|
|
3228
|
+
}), {
|
|
3229
|
+
onError: htmlRendererErrorHandler,
|
|
3230
|
+
nonce,
|
|
3231
|
+
bootstrapScripts: [
|
|
3232
|
+
bootstrapScript
|
|
3233
|
+
]
|
|
3234
|
+
});
|
|
3235
|
+
if (shouldGenerateStaticFlightData(workStore)) {
|
|
3236
|
+
const flightData = await (0, _nodewebstreamshelper.streamToBuffer)(reactServerResult.asStream());
|
|
3237
|
+
metadata.flightData = flightData;
|
|
3238
|
+
metadata.segmentData = await collectSegmentData(flightData, prerenderLegacyStore, ComponentMod, renderOpts);
|
|
3239
|
+
}
|
|
3240
|
+
const getServerInsertedHTML = (0, _makegetserverinsertedhtml.makeGetServerInsertedHTML)({
|
|
3241
|
+
polyfills,
|
|
3242
|
+
renderServerInsertedHTML,
|
|
3243
|
+
serverCapturedErrors: allCapturedErrors,
|
|
3244
|
+
basePath,
|
|
3245
|
+
tracingMetadata: tracingMetadata
|
|
3246
|
+
});
|
|
3247
|
+
return {
|
|
3248
|
+
digestErrorsMap: reactServerErrorsByDigest,
|
|
3249
|
+
ssrErrors: allCapturedErrors,
|
|
3250
|
+
stream: await (0, _nodewebstreamshelper.continueFizzStream)(htmlStream, {
|
|
3251
|
+
inlinedDataStream: (0, _useflightresponse.createInlinedDataReadableStream)(reactServerResult.consumeAsStream(), nonce, formState),
|
|
3252
|
+
isStaticGeneration: true,
|
|
3253
|
+
isBuildTimePrerendering: ctx.workStore.isBuildTimePrerendering === true,
|
|
3254
|
+
buildId: ctx.workStore.buildId,
|
|
3255
|
+
getServerInsertedHTML,
|
|
3256
|
+
getServerInsertedMetadata
|
|
3257
|
+
}),
|
|
3258
|
+
// TODO: Should this include the SSR pass?
|
|
3259
|
+
collectedRevalidate: prerenderLegacyStore.revalidate,
|
|
3260
|
+
collectedExpire: prerenderLegacyStore.expire,
|
|
3261
|
+
collectedStale: selectStaleTime(prerenderLegacyStore.stale),
|
|
3262
|
+
collectedTags: prerenderLegacyStore.tags
|
|
3263
|
+
};
|
|
3264
|
+
}
|
|
3265
|
+
} catch (err) {
|
|
3266
|
+
if ((0, _staticgenerationbailout.isStaticGenBailoutError)(err) || typeof err === 'object' && err !== null && 'message' in err && typeof err.message === 'string' && err.message.includes('https://nextjs.org/docs/advanced-features/static-html-export')) {
|
|
3267
|
+
// Ensure that "next dev" prints the red error overlay
|
|
3268
|
+
throw err;
|
|
3269
|
+
}
|
|
3270
|
+
// If this is a static generation error, we need to throw it so that it
|
|
3271
|
+
// can be handled by the caller if we're in static generation mode.
|
|
3272
|
+
if ((0, _hooksservercontext.isDynamicServerError)(err)) {
|
|
3273
|
+
throw err;
|
|
3274
|
+
}
|
|
3275
|
+
// If a bailout made it to this point, it means it wasn't wrapped inside
|
|
3276
|
+
// a suspense boundary.
|
|
3277
|
+
const shouldBailoutToCSR = (0, _bailouttocsr.isBailoutToCSRError)(err);
|
|
3278
|
+
if (shouldBailoutToCSR) {
|
|
3279
|
+
const stack = (0, _formatservererror.getStackWithoutErrorMessage)(err);
|
|
3280
|
+
(0, _log.error)(`${err.reason} should be wrapped in a suspense boundary at page "${pagePath}". Read more: https://nextjs.org/docs/messages/missing-suspense-with-csr-bailout\n${stack}`);
|
|
3281
|
+
throw err;
|
|
3282
|
+
}
|
|
3283
|
+
// If we errored when we did not have an RSC stream to read from. This is
|
|
3284
|
+
// not just a render error, we need to throw early.
|
|
3285
|
+
if (reactServerPrerenderResult === null) {
|
|
3286
|
+
throw err;
|
|
3287
|
+
}
|
|
3288
|
+
let errorType;
|
|
3289
|
+
if ((0, _httpaccessfallback.isHTTPAccessFallbackError)(err)) {
|
|
3290
|
+
res.statusCode = (0, _httpaccessfallback.getAccessFallbackHTTPStatus)(err);
|
|
3291
|
+
metadata.statusCode = res.statusCode;
|
|
3292
|
+
errorType = (0, _httpaccessfallback.getAccessFallbackErrorTypeByStatus)(res.statusCode);
|
|
3293
|
+
} else if ((0, _redirecterror.isRedirectError)(err)) {
|
|
3294
|
+
errorType = 'redirect';
|
|
3295
|
+
res.statusCode = (0, _redirect.getRedirectStatusCodeFromError)(err);
|
|
3296
|
+
metadata.statusCode = res.statusCode;
|
|
3297
|
+
const redirectUrl = (0, _addpathprefix.addPathPrefix)((0, _redirect.getURLFromRedirectError)(err), basePath);
|
|
3298
|
+
setHeader('location', redirectUrl);
|
|
3299
|
+
} else if (!shouldBailoutToCSR) {
|
|
3300
|
+
res.statusCode = 500;
|
|
3301
|
+
metadata.statusCode = res.statusCode;
|
|
3302
|
+
}
|
|
3303
|
+
const [errorPreinitScripts, errorBootstrapScript] = (0, _requiredscripts.getRequiredScripts)(buildManifest, assetPrefix, crossOrigin, subresourceIntegrityManifest, (0, _getassetquerystring.getAssetQueryString)(ctx, false), nonce, '/_not-found/page');
|
|
3304
|
+
const prerenderLegacyStore = prerenderStore = {
|
|
3305
|
+
type: 'prerender-legacy',
|
|
3306
|
+
phase: 'render',
|
|
3307
|
+
rootParams,
|
|
3308
|
+
implicitTags: implicitTags,
|
|
3309
|
+
revalidate: typeof (prerenderStore == null ? void 0 : prerenderStore.revalidate) !== 'undefined' ? prerenderStore.revalidate : _constants1.INFINITE_CACHE,
|
|
3310
|
+
expire: typeof (prerenderStore == null ? void 0 : prerenderStore.expire) !== 'undefined' ? prerenderStore.expire : _constants1.INFINITE_CACHE,
|
|
3311
|
+
stale: typeof (prerenderStore == null ? void 0 : prerenderStore.stale) !== 'undefined' ? prerenderStore.stale : _constants1.INFINITE_CACHE,
|
|
3312
|
+
tags: [
|
|
3313
|
+
...(prerenderStore == null ? void 0 : prerenderStore.tags) || implicitTags.tags
|
|
3314
|
+
]
|
|
3315
|
+
};
|
|
3316
|
+
const errorRSCPayload = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(prerenderLegacyStore, getErrorRSCPayload, tree, ctx, reactServerErrorsByDigest.has(err.digest) ? undefined : err, errorType);
|
|
3317
|
+
const errorServerStream = _workunitasyncstorageexternal.workUnitAsyncStorage.run(prerenderLegacyStore, ComponentMod.renderToReadableStream, errorRSCPayload, clientModules, {
|
|
3318
|
+
filterStackFrame,
|
|
3319
|
+
onError: serverComponentsErrorHandler
|
|
3320
|
+
});
|
|
3321
|
+
try {
|
|
3322
|
+
// TODO we should use the same prerender semantics that we initially rendered
|
|
3323
|
+
// with in this case too. The only reason why this is ok atm is because it's essentially
|
|
3324
|
+
// an empty page and no user code runs.
|
|
3325
|
+
const fizzStream = await _workunitasyncstorageexternal.workUnitAsyncStorage.run(prerenderLegacyStore, _nodewebstreamshelper.renderToInitialFizzStream, {
|
|
3326
|
+
ReactDOMServer: require('react-dom/server'),
|
|
3327
|
+
element: // eslint-disable-next-line @next/internal/no-ambiguous-jsx
|
|
3328
|
+
/*#__PURE__*/ (0, _jsxruntime.jsx)(ErrorApp, {
|
|
3329
|
+
reactServerStream: errorServerStream,
|
|
3330
|
+
ServerInsertedHTMLProvider: ServerInsertedHTMLProvider,
|
|
3331
|
+
preinitScripts: errorPreinitScripts,
|
|
3332
|
+
nonce: nonce,
|
|
3333
|
+
images: ctx.renderOpts.images
|
|
3334
|
+
}),
|
|
3335
|
+
streamOptions: {
|
|
3336
|
+
nonce,
|
|
3337
|
+
// Include hydration scripts in the HTML
|
|
3338
|
+
bootstrapScripts: [
|
|
3339
|
+
errorBootstrapScript
|
|
3340
|
+
],
|
|
3341
|
+
formState
|
|
3342
|
+
}
|
|
3343
|
+
});
|
|
3344
|
+
if (shouldGenerateStaticFlightData(workStore)) {
|
|
3345
|
+
const flightData = await (0, _nodewebstreamshelper.streamToBuffer)(reactServerPrerenderResult.asStream());
|
|
3346
|
+
metadata.flightData = flightData;
|
|
3347
|
+
metadata.segmentData = await collectSegmentData(flightData, prerenderLegacyStore, ComponentMod, renderOpts);
|
|
3348
|
+
}
|
|
3349
|
+
// This is intentionally using the readable datastream from the main
|
|
3350
|
+
// render rather than the flight data from the error page render
|
|
3351
|
+
const flightStream = reactServerPrerenderResult.consumeAsStream();
|
|
3352
|
+
return {
|
|
3353
|
+
// Returning the error that was thrown so it can be used to handle
|
|
3354
|
+
// the response in the caller.
|
|
3355
|
+
digestErrorsMap: reactServerErrorsByDigest,
|
|
3356
|
+
ssrErrors: allCapturedErrors,
|
|
3357
|
+
stream: await (0, _nodewebstreamshelper.continueFizzStream)(fizzStream, {
|
|
3358
|
+
inlinedDataStream: (0, _useflightresponse.createInlinedDataReadableStream)(flightStream, nonce, formState),
|
|
3359
|
+
isStaticGeneration: true,
|
|
3360
|
+
isBuildTimePrerendering: ctx.workStore.isBuildTimePrerendering === true,
|
|
3361
|
+
buildId: ctx.workStore.buildId,
|
|
3362
|
+
getServerInsertedHTML: (0, _makegetserverinsertedhtml.makeGetServerInsertedHTML)({
|
|
3363
|
+
polyfills,
|
|
3364
|
+
renderServerInsertedHTML,
|
|
3365
|
+
serverCapturedErrors: [],
|
|
3366
|
+
basePath,
|
|
3367
|
+
tracingMetadata: tracingMetadata
|
|
3368
|
+
}),
|
|
3369
|
+
getServerInsertedMetadata,
|
|
3370
|
+
validateRootLayout: dev
|
|
3371
|
+
}),
|
|
3372
|
+
dynamicAccess: null,
|
|
3373
|
+
collectedRevalidate: prerenderStore !== null ? prerenderStore.revalidate : _constants1.INFINITE_CACHE,
|
|
3374
|
+
collectedExpire: prerenderStore !== null ? prerenderStore.expire : _constants1.INFINITE_CACHE,
|
|
3375
|
+
collectedStale: selectStaleTime(prerenderStore !== null ? prerenderStore.stale : _constants1.INFINITE_CACHE),
|
|
3376
|
+
collectedTags: prerenderStore !== null ? prerenderStore.tags : null
|
|
3377
|
+
};
|
|
3378
|
+
} catch (finalErr) {
|
|
3379
|
+
if (process.env.NODE_ENV === 'development' && (0, _httpaccessfallback.isHTTPAccessFallbackError)(finalErr)) {
|
|
3380
|
+
const { bailOnRootNotFound } = require('../../client/components/dev-root-http-access-fallback-boundary');
|
|
3381
|
+
bailOnRootNotFound();
|
|
3382
|
+
}
|
|
3383
|
+
throw finalErr;
|
|
3384
|
+
}
|
|
3385
|
+
}
|
|
3386
|
+
}
|
|
3387
|
+
const getGlobalErrorStyles = async (tree, ctx)=>{
|
|
3388
|
+
const { modules: { 'global-error': globalErrorModule } } = (0, _parseloadertree.parseLoaderTree)(tree);
|
|
3389
|
+
const { componentMod: { createElement } } = ctx;
|
|
3390
|
+
const GlobalErrorComponent = ctx.componentMod.GlobalError;
|
|
3391
|
+
let globalErrorStyles;
|
|
3392
|
+
if (globalErrorModule) {
|
|
3393
|
+
const [, styles] = await (0, _createcomponentstylesandscripts.createComponentStylesAndScripts)({
|
|
3394
|
+
ctx,
|
|
3395
|
+
filePath: globalErrorModule[1],
|
|
3396
|
+
getComponent: globalErrorModule[0],
|
|
3397
|
+
injectedCSS: new Set(),
|
|
3398
|
+
injectedJS: new Set()
|
|
3399
|
+
});
|
|
3400
|
+
globalErrorStyles = styles;
|
|
3401
|
+
}
|
|
3402
|
+
if (ctx.renderOpts.dev) {
|
|
3403
|
+
const dir = (process.env.NEXT_RUNTIME === 'edge' ? process.env.__NEXT_EDGE_PROJECT_DIR : ctx.renderOpts.dir) || '';
|
|
3404
|
+
const globalErrorModulePath = (0, _segmentexplorerpath.normalizeConventionFilePath)(dir, globalErrorModule == null ? void 0 : globalErrorModule[1]);
|
|
3405
|
+
if (globalErrorModulePath) {
|
|
3406
|
+
const SegmentViewNode = ctx.componentMod.SegmentViewNode;
|
|
3407
|
+
globalErrorStyles = // This will be rendered next to GlobalError component under ErrorBoundary,
|
|
3408
|
+
// it requires a key to avoid React warning about duplicate keys.
|
|
3409
|
+
createElement(SegmentViewNode, {
|
|
3410
|
+
key: 'ge-svn',
|
|
3411
|
+
type: 'global-error',
|
|
3412
|
+
pagePath: globalErrorModulePath
|
|
3413
|
+
}, globalErrorStyles);
|
|
3414
|
+
}
|
|
3415
|
+
}
|
|
3416
|
+
return {
|
|
3417
|
+
GlobalError: GlobalErrorComponent,
|
|
3418
|
+
styles: globalErrorStyles
|
|
3419
|
+
};
|
|
3420
|
+
};
|
|
3421
|
+
function createSelectStaleTime(experimental) {
|
|
3422
|
+
return (stale)=>{
|
|
3423
|
+
var _experimental_staleTimes;
|
|
3424
|
+
return stale === _constants1.INFINITE_CACHE && typeof ((_experimental_staleTimes = experimental.staleTimes) == null ? void 0 : _experimental_staleTimes.static) === 'number' ? experimental.staleTimes.static : stale;
|
|
3425
|
+
};
|
|
3426
|
+
}
|
|
3427
|
+
async function collectSegmentData(fullPageDataBuffer, prerenderStore, ComponentMod, renderOpts) {
|
|
3428
|
+
// Per-segment prefetch data
|
|
3429
|
+
//
|
|
3430
|
+
// All of the segments for a page are generated simultaneously, including
|
|
3431
|
+
// during revalidations. This is to ensure consistency, because it's
|
|
3432
|
+
// possible for a mismatch between a layout and page segment can cause the
|
|
3433
|
+
// client to error during rendering. We want to preserve the ability of the
|
|
3434
|
+
// client to recover from such a mismatch by re-requesting all the segments
|
|
3435
|
+
// to get a consistent view of the page.
|
|
3436
|
+
//
|
|
3437
|
+
// For performance, we reuse the Flight output that was created when
|
|
3438
|
+
// generating the initial page HTML. The Flight stream for the whole page is
|
|
3439
|
+
// decomposed into a separate stream per segment.
|
|
3440
|
+
const { clientModules, edgeRscModuleMapping, rscModuleMapping } = (0, _manifestssingleton.getClientReferenceManifest)();
|
|
3441
|
+
// Manifest passed to the Flight client for reading the full-page Flight
|
|
3442
|
+
// stream. Based off similar code in use-cache-wrapper.ts.
|
|
3443
|
+
const isEdgeRuntime = process.env.NEXT_RUNTIME === 'edge';
|
|
3444
|
+
const serverConsumerManifest = {
|
|
3445
|
+
// moduleLoading must be null because we don't want to trigger preloads of ClientReferences
|
|
3446
|
+
// to be added to the consumer. Instead, we'll wait for any ClientReference to be emitted
|
|
3447
|
+
// which themselves will handle the preloading.
|
|
3448
|
+
moduleLoading: null,
|
|
3449
|
+
moduleMap: isEdgeRuntime ? edgeRscModuleMapping : rscModuleMapping,
|
|
3450
|
+
serverModuleMap: (0, _manifestssingleton.getServerModuleMap)()
|
|
3451
|
+
};
|
|
3452
|
+
const selectStaleTime = createSelectStaleTime(renderOpts.experimental);
|
|
3453
|
+
const staleTime = selectStaleTime(prerenderStore.stale);
|
|
3454
|
+
return await ComponentMod.collectSegmentData(renderOpts.cacheComponents, fullPageDataBuffer, staleTime, clientModules, serverConsumerManifest);
|
|
3455
|
+
}
|
|
3456
|
+
function isBypassingCachesInDev(renderOpts, requestStore) {
|
|
3457
|
+
return process.env.NODE_ENV === 'development' && !!renderOpts.dev && requestStore.headers.get('cache-control') === 'no-cache';
|
|
3458
|
+
}
|
|
3459
|
+
function WarnForBypassCachesInDev({ route }) {
|
|
3460
|
+
(0, _warnonce.warnOnce)(`Route ${route} is rendering with server caches disabled. For this navigation, Component Metadata in React DevTools will not accurately reflect what is statically prerenderable and runtime prefetchable. See more info here: https://nextjs.org/docs/messages/cache-bypass-in-dev`);
|
|
3461
|
+
return null;
|
|
3462
|
+
}
|
|
3463
|
+
function nodeStreamFromReadableStream(stream) {
|
|
3464
|
+
if (process.env.NEXT_RUNTIME === 'edge') {
|
|
3465
|
+
throw Object.defineProperty(new _invarianterror.InvariantError('nodeStreamFromReadableStream cannot be used in the edge runtime'), "__NEXT_ERROR_CODE", {
|
|
3466
|
+
value: "E944",
|
|
3467
|
+
enumerable: false,
|
|
3468
|
+
configurable: true
|
|
3469
|
+
});
|
|
3470
|
+
} else {
|
|
3471
|
+
const reader = stream.getReader();
|
|
3472
|
+
const { Readable } = require('node:stream');
|
|
3473
|
+
return new Readable({
|
|
3474
|
+
read () {
|
|
3475
|
+
reader.read().then(({ done, value })=>{
|
|
3476
|
+
if (done) {
|
|
3477
|
+
this.push(null);
|
|
3478
|
+
} else {
|
|
3479
|
+
this.push(value);
|
|
3480
|
+
}
|
|
3481
|
+
}).catch((err)=>this.destroy(err));
|
|
3482
|
+
}
|
|
3483
|
+
});
|
|
3484
|
+
}
|
|
3485
|
+
}
|
|
3486
|
+
function createNodeStreamFromChunks(partialChunks, allChunks, signal) {
|
|
3487
|
+
if (process.env.NEXT_RUNTIME === 'edge') {
|
|
3488
|
+
throw Object.defineProperty(new _invarianterror.InvariantError('createNodeStreamFromChunks cannot be used in the edge runtime'), "__NEXT_ERROR_CODE", {
|
|
3489
|
+
value: "E945",
|
|
3490
|
+
enumerable: false,
|
|
3491
|
+
configurable: true
|
|
3492
|
+
});
|
|
3493
|
+
} else {
|
|
3494
|
+
const { Readable } = require('node:stream');
|
|
3495
|
+
let nextIndex = 0;
|
|
3496
|
+
const readable = new Readable({
|
|
3497
|
+
read () {
|
|
3498
|
+
while(nextIndex < partialChunks.length){
|
|
3499
|
+
this.push(partialChunks[nextIndex]);
|
|
3500
|
+
nextIndex++;
|
|
3501
|
+
}
|
|
3502
|
+
}
|
|
3503
|
+
});
|
|
3504
|
+
signal.addEventListener('abort', ()=>{
|
|
3505
|
+
// Flush any remaining chunks from the original set
|
|
3506
|
+
while(nextIndex < partialChunks.length){
|
|
3507
|
+
readable.push(partialChunks[nextIndex]);
|
|
3508
|
+
nextIndex++;
|
|
3509
|
+
}
|
|
3510
|
+
// Flush all chunks since we're now aborted and can't schedule
|
|
3511
|
+
// any new work but these chunks might unblock debugInfo
|
|
3512
|
+
while(nextIndex < allChunks.length){
|
|
3513
|
+
readable.push(allChunks[nextIndex]);
|
|
3514
|
+
nextIndex++;
|
|
3515
|
+
}
|
|
3516
|
+
setImmediate(()=>{
|
|
3517
|
+
readable.push(null);
|
|
3518
|
+
});
|
|
3519
|
+
}, {
|
|
3520
|
+
once: true
|
|
3521
|
+
});
|
|
3522
|
+
return readable;
|
|
3523
|
+
}
|
|
3524
|
+
}
|
|
3525
|
+
|
|
3526
|
+
//# sourceMappingURL=app-render.js.map
|