@wular/pnext 0.0.3 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -11
- package/bin/pnext +1 -1
- package/config/lint/base.js +7 -7
- package/config/ts/base.json +2 -4
- package/config/ts/react.json +2 -6
- package/package.json +23 -2
- package/reference/compat.md +1 -1
- package/reference/config.md +2 -2
- package/reference/css.md +13 -9
- package/reference/dev.md +1 -1
- package/reference/metadata.md +7 -7
- package/reference/navigation.md +35 -28
- package/reference/performance.md +70 -70
- package/reference/rendering.md +17 -17
- package/reference/routing.md +17 -17
- package/reference/typegen.md +12 -8
- package/src/api/cache.ts +36 -37
- package/src/api/client-cache.ts +2 -2
- package/src/api/client-navigation.ts +113 -109
- package/src/api/dynamic.tsx +58 -55
- package/src/api/link.tsx +49 -52
- package/src/api/navigation.ts +59 -58
- package/src/api/server.ts +152 -144
- package/src/api/suspense.ts +4 -4
- package/src/cli/adapters/vercel-warm.ts +126 -121
- package/src/cli/adapters/vercel.ts +437 -443
- package/src/cli/analyze.ts +333 -144
- package/src/cli/{named-bin.ts → boot/named-bin.ts} +37 -37
- package/src/cli/{boot-trace.ts → boot/trace.ts} +10 -10
- package/src/cli/build.ts +976 -978
- package/src/cli/create.ts +71 -63
- package/src/cli/dev.ts +116 -116
- package/src/cli/index.ts +88 -85
- package/src/cli/migrate/package-json.ts +73 -71
- package/src/cli/migrate/report.ts +32 -33
- package/src/cli/migrate/{index.ts → run.ts} +48 -49
- package/src/cli/migrate/scan.ts +46 -46
- package/src/cli/migrate/spinner.ts +9 -9
- package/src/cli/migrate/tsconfig.ts +35 -35
- package/src/cli/{server-entry.ts → serve/entry.ts} +57 -57
- package/src/cli/{request-pipeline.ts → serve/pipeline.ts} +386 -394
- package/src/cli/{serve-ui.ts → serve/ui.ts} +47 -47
- package/src/cli/start.ts +65 -66
- package/src/{typegen.ts → cli/typegen.ts} +59 -59
- package/src/client/build.ts +794 -768
- package/src/client/chunk-fold.ts +245 -240
- package/src/client/{paths.ts → chunk-name.ts} +6 -6
- package/src/client/entry.ts +162 -147
- package/src/client/prebuilt.ts +231 -223
- package/src/client/profile.ts +29 -29
- package/src/client/react-compiler.ts +20 -15
- package/src/client/{compat-surface.ts → react-tier.ts} +64 -64
- package/src/client/reference-stub.ts +51 -51
- package/src/client/reference.ts +19 -19
- package/src/{api → client}/router/events.ts +17 -17
- package/src/{api → client}/router/history.ts +16 -16
- package/src/{api → client}/router/hub.ts +52 -53
- package/src/{api/router.ts → client/router/index.ts} +61 -60
- package/src/{api → client}/router/policies.ts +24 -24
- package/src/{api → client}/router/runtime.ts +1988 -1961
- package/src/{api → client}/router/types.ts +93 -98
- package/src/compat/actions/client-plugin.ts +42 -43
- package/src/compat/actions/client-stub.ts +14 -14
- package/src/compat/actions/{action-client.ts → client.ts} +194 -193
- package/src/compat/actions/config.ts +63 -64
- package/src/compat/actions/detect.ts +68 -68
- package/src/compat/actions/discovery.ts +105 -105
- package/src/compat/actions/{action-dispatch.ts → dispatch.ts} +277 -274
- package/src/compat/actions/early-submit.ts +1 -1
- package/src/compat/actions/endpoint.ts +198 -198
- package/src/compat/actions/extensions.ts +811 -0
- package/src/compat/actions/flight.ts +23 -23
- package/src/compat/actions/form-state.ts +34 -34
- package/src/compat/actions/hoist.ts +382 -236
- package/src/compat/actions/ids.ts +7 -12
- package/src/compat/actions/index.ts +8 -8
- package/src/compat/actions/instances.ts +46 -46
- package/src/compat/actions/origin.ts +47 -48
- package/src/compat/actions/protocol.ts +22 -22
- package/src/compat/actions/registry.ts +19 -19
- package/src/compat/{misc/action-return.ts → actions/return.ts} +60 -57
- package/src/compat/actions/rewrite.ts +125 -125
- package/src/compat/actions/{action-router.ts → router.ts} +10 -10
- package/src/compat/actions/serve.ts +132 -136
- package/src/compat/actions/server-tag.ts +4 -4
- package/src/compat/actions/{action-shared.ts → shared.ts} +34 -34
- package/src/compat/actions/unrecognized-error.ts +4 -4
- package/src/compat/{index.ts → aliases.ts} +112 -109
- package/src/compat/bundler/bun-externals.ts +18 -18
- package/src/compat/bundler/cjs-exports.ts +271 -223
- package/src/compat/bundler/config.ts +116 -111
- package/src/compat/bundler/externals.ts +12 -12
- package/src/compat/bundler/import-meta-url.ts +19 -19
- package/src/compat/bundler/modularize-imports.ts +36 -33
- package/src/compat/bundler/new-url-asset.ts +22 -24
- package/src/compat/bundler/optimize-package-imports.ts +111 -107
- package/src/compat/bundler/polyfill.ts +28 -28
- package/src/compat/bundler/react-compiler.ts +35 -29
- package/src/compat/bundler/react-profiler.tsx +11 -11
- package/src/compat/bundler/relay-transform.ts +48 -47
- package/src/compat/bundler/require-context.ts +119 -113
- package/src/compat/bundler/resolve-extensions.ts +19 -19
- package/src/compat/bundler/source-cache.ts +25 -25
- package/src/compat/bundler/static-imports.ts +7 -7
- package/src/compat/bundler/symlink-imports.ts +46 -46
- package/src/compat/bundler/tsconfig-paths.ts +13 -15
- package/src/compat/bundler/wasm.ts +58 -60
- package/src/compat/bundler/webpack-loaders.ts +254 -241
- package/src/compat/bundler/worker.ts +101 -104
- package/src/compat/cache/build-flags.ts +29 -29
- package/src/compat/cache/build-prerender-errors.ts +40 -44
- package/src/compat/cache/custom-handler.ts +60 -53
- package/src/compat/cache/fetch-patch.ts +240 -240
- package/src/compat/cache/handler.ts +27 -31
- package/src/compat/cache/modern-handler.ts +148 -126
- package/src/compat/cache/resume-data-cache.ts +47 -45
- package/src/compat/cache/revalidate.ts +233 -232
- package/src/compat/cache/runtime-error.ts +35 -35
- package/src/compat/cache/use-cache-transform.ts +442 -417
- package/src/compat/cache/use-cache.ts +650 -614
- package/src/compat/cache-control.ts +140 -142
- package/src/compat/client/base-path.ts +21 -20
- package/src/compat/client/css-order.ts +18 -18
- package/src/compat/client/errors/bare-boundary.ts +11 -11
- package/src/compat/client/errors/control-flow.ts +23 -23
- package/src/compat/client/errors/error-boundary.ts +61 -61
- package/src/compat/client/errors/global-error.ts +101 -91
- package/src/compat/client/errors/install.ts +71 -72
- package/src/compat/client/errors/lazy.ts +23 -23
- package/src/compat/client/errors/primitive-throw.ts +47 -45
- package/src/compat/client/errors/soft-refresh.ts +4 -4
- package/src/compat/client/link-status.ts +33 -33
- package/src/compat/client/{nav-compat-runtime.ts → nav-runtime.ts} +20 -20
- package/src/compat/client/{nav-compat.ts → nav.ts} +12 -13
- package/src/compat/client/navigation-scroll.ts +63 -63
- package/src/compat/client/optimistic-routing.ts +93 -88
- package/src/compat/client/prefetch-cache.ts +23 -24
- package/src/compat/client/route-announcer.ts +35 -35
- package/src/compat/client/segment-cache-policy.ts +20 -20
- package/src/compat/client/segment-cache.ts +309 -315
- package/src/compat/client/segment-prefetch.ts +127 -132
- package/src/compat/client/trailing-slash.ts +5 -4
- package/src/compat/css/chunking.ts +113 -116
- package/src/compat/css/inline-css.ts +21 -21
- package/src/compat/css/lightningcss.ts +37 -38
- package/src/compat/css/modules.ts +161 -175
- package/src/compat/css/nonce.ts +7 -7
- package/src/compat/css/sass-plugin.ts +18 -21
- package/src/compat/css/sass.ts +150 -152
- package/src/compat/css/styled-jsx-runtime.ts +27 -27
- package/src/compat/css/styled-jsx.ts +21 -21
- package/src/compat/edge-runtime.ts +27 -27
- package/src/compat/{adapter → export}/build-complete.ts +72 -75
- package/src/compat/export/client.ts +29 -31
- package/src/compat/export/{index.ts → emit.ts} +111 -110
- package/src/compat/export/standalone.ts +62 -54
- package/src/compat/image-optimizer/cache.ts +51 -49
- package/src/compat/image-optimizer/detect.ts +52 -52
- package/src/compat/image-optimizer/{index.ts → optimize.ts} +189 -194
- package/src/compat/image-optimizer/source.ts +77 -80
- package/src/compat/lifecycle/after-scope.ts +26 -26
- package/src/compat/lifecycle/after.ts +48 -45
- package/src/compat/lifecycle/error-funnel.ts +98 -102
- package/src/compat/lifecycle/error-serialize.ts +30 -26
- package/src/compat/lifecycle/error-ui.ts +67 -32
- package/src/compat/lifecycle/instrumentation-client.ts +36 -38
- package/src/compat/lifecycle/instrumentation.ts +85 -85
- package/src/compat/lifecycle/node-console.ts +11 -11
- package/src/compat/lifecycle/testmode.ts +160 -132
- package/src/compat/mdx/compile.ts +60 -57
- package/src/compat/mdx/plugin.ts +11 -11
- package/src/compat/mdx/{next-mdx-stub.ts → stub.ts} +5 -5
- package/src/compat/{metadata-route-artifacts.ts → metadata-artifacts.ts} +195 -191
- package/src/compat/metadata.ts +75 -81
- package/src/compat/next/cache.ts +68 -69
- package/src/compat/next/canonical-url.ts +9 -9
- package/src/compat/next/client-cache.ts +19 -19
- package/src/compat/next/client-navigation.ts +112 -116
- package/src/compat/next/client-only.ts +1 -1
- package/src/compat/next/client-script.tsx +99 -93
- package/src/compat/next/client-server.ts +10 -10
- package/src/compat/next/config-loader.ts +176 -173
- package/src/compat/next/config.ts +7 -7
- package/src/compat/next/constants.cjs +6 -6
- package/src/compat/next/constants.ts +6 -6
- package/src/compat/next/custom-server.ts +26 -24
- package/src/compat/next/dist/client/components/app-router-headers.ts +21 -21
- package/src/compat/next/dist/server/app-render/work-unit-async-storage.external.cjs +3 -4
- package/src/compat/next/dist/server/web/spec-extension/revalidate.ts +1 -1
- package/src/compat/next/dist/server/web/spec-extension/unstable-cache.ts +1 -1
- package/src/compat/next/dist/server/web/spec-extension/unstable-no-store.ts +1 -1
- package/src/compat/next/dynamic.tsx +21 -18
- package/src/compat/next/error.tsx +52 -52
- package/src/compat/next/font/cache.ts +74 -74
- package/src/compat/next/font/google.ts +2 -2
- package/src/compat/next/font/index.ts +1 -1
- package/src/compat/next/font/local.ts +3 -3
- package/src/compat/next/font/runtime-client.ts +17 -15
- package/src/compat/next/font/runtime.ts +443 -408
- package/src/compat/next/font/shared.ts +120 -108
- package/src/compat/next/form.tsx +63 -63
- package/src/compat/next/head.tsx +2 -2
- package/src/compat/next/headers.ts +103 -95
- package/src/compat/next/image/client.tsx +220 -0
- package/src/compat/next/image/config.ts +56 -58
- package/src/compat/next/image/optimizer.ts +40 -36
- package/src/compat/next/image/patterns.ts +37 -40
- package/src/compat/next/{image-props.ts → image/props.ts} +208 -202
- package/src/compat/next/image/shared.ts +65 -57
- package/src/compat/next/image/static-metadata.ts +98 -107
- package/src/compat/next/image/validate.ts +79 -88
- package/src/compat/next/image.tsx +19 -23
- package/src/compat/next/index.ts +1 -1
- package/src/compat/next/legacy-image.tsx +59 -60
- package/src/compat/next/{link-validation-transform.ts → link-transform.ts} +95 -96
- package/src/compat/next/link.tsx +158 -158
- package/src/compat/next/navigation.cjs +12 -3
- package/src/compat/next/navigation.ts +48 -50
- package/src/compat/next/offline.ts +27 -27
- package/src/compat/next/og.ts +121 -124
- package/src/compat/next/preferred-region.ts +13 -14
- package/src/compat/next/redirects.ts +58 -56
- package/src/compat/next/resource-hints.ts +73 -76
- package/src/compat/next/rewrites.ts +130 -133
- package/src/compat/next/root-params.ts +45 -45
- package/src/compat/next/{optimistic-route-state.ts → route-state.ts} +52 -52
- package/src/compat/next/router.cjs +4 -2
- package/src/compat/next/router.ts +58 -61
- package/src/compat/next/script.tsx +108 -108
- package/src/compat/next/server-only.ts +1 -1
- package/src/compat/next/server.ts +19 -19
- package/src/compat/next/svgr.ts +18 -17
- package/src/compat/next/telemetry.ts +24 -24
- package/src/compat/next/{image-usage.ts → usage.ts} +70 -39
- package/src/compat/next/user-agent.ts +53 -49
- package/src/compat/next/web-vitals.ts +22 -24
- package/src/compat/otel/api.ts +41 -41
- package/src/compat/otel/client-trace-metadata.ts +25 -27
- package/src/compat/otel/fetch-span.ts +29 -29
- package/src/compat/otel/tracer.ts +331 -331
- package/src/compat/pages/api.ts +456 -0
- package/src/compat/pages/client-plugin.ts +36 -36
- package/src/compat/pages/router-state.ts +34 -34
- package/src/compat/pages/{index.ts → router.ts} +130 -135
- package/src/compat/ppr/io.ts +12 -12
- package/src/compat/ppr/missing-root-params.ts +34 -38
- package/src/compat/ppr/root-params-scan.ts +66 -66
- package/src/compat/ppr/root-params-transform.ts +24 -26
- package/src/compat/ppr/root-params.ts +30 -30
- package/src/compat/ppr/segment-config-incompat.ts +6 -7
- package/src/compat/protocol.ts +71 -70
- package/src/compat/react/action-state.ts +47 -48
- package/src/compat/react/client-lite.ts +15 -15
- package/src/compat/react/client.ts +4 -4
- package/src/compat/react/compiler-runtime.ts +11 -11
- package/src/compat/react/dom-client.ts +44 -44
- package/src/compat/react/dom-react-server.ts +10 -16
- package/src/compat/react/dom-server.ts +10 -10
- package/src/compat/react/dom.ts +52 -52
- package/src/compat/react/hooks-extra.ts +34 -35
- package/src/compat/react/parity.ts +64 -61
- package/src/compat/react/preact.ts +81 -82
- package/src/compat/react/react-server.ts +28 -28
- package/src/compat/react/router-shim.ts +1 -1
- package/src/compat/react/server-component-use.ts +8 -8
- package/src/compat/react/server-inserted-html.ts +30 -31
- package/src/compat/react/server.ts +53 -55
- package/src/compat/react/use.ts +32 -32
- package/src/compat/react/view-transition.ts +20 -20
- package/src/compat/register/actions.ts +35 -824
- package/src/compat/register/boot.ts +41 -41
- package/src/compat/register/build-tier.ts +5 -5
- package/src/compat/register/build.ts +74 -70
- package/src/compat/register/bundler.ts +161 -156
- package/src/compat/register/cache.ts +20 -20
- package/src/compat/register/client-errors.ts +3 -3
- package/src/compat/register/config.ts +6 -6
- package/src/compat/register/css-extras.ts +30 -34
- package/src/compat/register/edge-runtime.ts +3 -3
- package/src/compat/register/errors.ts +10 -12
- package/src/compat/register/export.ts +16 -16
- package/src/compat/register/font.ts +11 -11
- package/src/compat/register/hooks.ts +2 -2
- package/src/compat/register/image.ts +40 -40
- package/src/compat/register/index.ts +59 -62
- package/src/compat/register/instrumentation-client.ts +10 -10
- package/src/compat/register/lifecycle.ts +25 -28
- package/src/compat/register/mdx.ts +10 -10
- package/src/compat/register/middleware.ts +226 -16
- package/src/compat/register/otel.ts +80 -88
- package/src/compat/register/pages-api.ts +10 -463
- package/src/compat/register/ppr.ts +16 -16
- package/src/compat/register/protocol.ts +17 -18
- package/src/compat/register/proxy.ts +49 -51
- package/src/compat/register/render.ts +79 -76
- package/src/compat/register/routing.ts +162 -159
- package/src/compat/register/segment.ts +24 -1887
- package/src/compat/register/static-image.ts +3 -3
- package/src/compat/register/{misc.ts → taint.ts} +9 -9
- package/src/compat/register/typed-routes.ts +14 -14
- package/src/compat/register/{usecache.ts → use-cache.ts} +39 -39
- package/src/compat/register/validation.ts +18 -18
- package/src/compat/segment/loading-boundary.ts +43 -45
- package/src/compat/segment/page-slot.ts +69 -69
- package/src/compat/segment/serve.ts +1884 -0
- package/src/compat/segment/tree.ts +113 -112
- package/src/compat/segment/vary-key.ts +38 -38
- package/src/compat/segment/vary-params.ts +138 -142
- package/src/compat/static-params.ts +14 -12
- package/src/compat/tsconfig-defaults.ts +87 -91
- package/src/compat/typecheck/{index.ts → check.ts} +234 -212
- package/src/compat/typecheck/worker.ts +15 -12
- package/src/compat/typed-routes/{index.ts → generate.ts} +36 -36
- package/src/compat/typed-routes/manifest.ts +174 -170
- package/src/compat/typed-routes/typegen.ts +127 -110
- package/src/compat/validation/errors.ts +16 -19
- package/src/compat/validation/prerender-diagnostics.ts +521 -504
- package/src/compat/validation/{index.ts → validate.ts} +647 -648
- package/src/compat-bootstrap.ts +16 -16
- package/src/config.ts +69 -69
- package/src/css/build.ts +230 -227
- package/src/css/postcss.ts +79 -80
- package/src/css/worker.ts +14 -15
- package/src/dev/client-actions.ts +10 -10
- package/src/dev/client-chunk-store.ts +27 -27
- package/src/dev/{client-key-cache.ts → restart/client-key.ts} +76 -76
- package/src/dev/{restart-cache.ts → restart/enabled.ts} +1 -1
- package/src/dev/{global-css-cache.ts → restart/global-css.ts} +91 -83
- package/src/dev/{node-module-bundle-cache.ts → restart/node-modules.ts} +24 -24
- package/src/dev/{route-bundle-key-cache.ts → restart/route-bundle-key.ts} +53 -53
- package/src/dev/{route-facts-cache.ts → restart/route-facts.ts} +82 -82
- package/src/dev/server.ts +804 -820
- package/src/env.ts +46 -43
- package/src/extensions.ts +491 -478
- package/src/index.ts +8 -8
- package/src/internal.ts +20 -23
- package/src/{islands → render}/boundary-error.ts +3 -3
- package/src/render/hooks.ts +71 -71
- package/src/render/island-context.ts +14 -14
- package/src/render/metadata.ts +310 -310
- package/src/{ppr-postpone.ts → render/postpone.ts} +5 -5
- package/src/{ppr.ts → render/ppr.ts} +244 -245
- package/src/render/renderer.ts +2076 -2082
- package/src/render/resource-hints.ts +16 -17
- package/src/render/slots.tsx +224 -235
- package/src/{islands → render}/static-children.ts +9 -12
- package/src/{islands → render}/static-slots.ts +37 -37
- package/src/{cache/context.ts → request/cache.ts} +20 -20
- package/src/request/context.ts +107 -107
- package/src/{dynamic/source.ts → resolve/dynamic.ts} +152 -143
- package/src/resolve/engine.ts +90 -77
- package/src/resolve/imports.ts +475 -463
- package/src/resolve/scan-facts.ts +442 -186
- package/src/resolve/source-text.ts +37 -37
- package/src/{dynamic → resolve}/tree-shake.ts +132 -128
- package/src/routing/forwarded.ts +19 -19
- package/src/routing/handler.ts +84 -91
- package/src/routing/href.ts +69 -70
- package/src/routing/{metadata.ts → metadata-files.ts} +403 -401
- package/src/{proxy.ts → routing/proxy.ts} +306 -312
- package/src/routing/{request-runtime.ts → request-environment.ts} +10 -10
- package/src/routing/routes.ts +833 -848
- package/src/routing/slots.ts +164 -160
- package/src/runtime/loader.ts +952 -0
- package/src/{dev → runtime}/module-cache.ts +309 -287
- package/src/{dev → runtime}/module-generations.ts +9 -9
- package/src/{dev → runtime}/module-transform.ts +81 -72
- package/src/{dev/imports.ts → runtime/modules.ts} +934 -847
- package/src/runtime/{server.ts → vendor-build.ts} +848 -1696
- package/src/runtime/vendor.ts +425 -404
- package/src/styles.d.ts +9 -0
- package/src/types.ts +320 -335
- package/src/utils/ansi.ts +5 -5
- package/src/utils/{source.ts → code.ts} +15 -12
- package/src/utils/content-type.ts +3 -3
- package/src/utils/decode.ts +2 -2
- package/src/utils/dev-profile.ts +13 -13
- package/src/utils/error-log.ts +6 -6
- package/src/utils/esbuild.ts +18 -18
- package/src/utils/fs-cache.ts +13 -13
- package/src/utils/fs.ts +57 -49
- package/src/utils/html.ts +20 -24
- package/src/utils/native-require.ts +8 -8
- package/src/utils/serialize.ts +139 -146
- package/src/utils/verbose.ts +18 -18
- package/src/cli/analyze-print.ts +0 -181
- package/src/compat/middleware/manifest.ts +0 -210
- package/src/compat/next/image-client.tsx +0 -215
- package/src/compat/next/link-usage.ts +0 -29
- package/src/css/index.ts +0 -2
- package/src/render/index.ts +0 -1
- package/src/style-modules.d.ts +0 -9
package/src/request/context.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AsyncLocalStorage } from 'node:async_hooks'
|
|
1
|
+
import { AsyncLocalStorage } from 'node:async_hooks'
|
|
2
2
|
import {
|
|
3
3
|
cacheComponents,
|
|
4
4
|
hangingPromise,
|
|
@@ -6,8 +6,8 @@ import {
|
|
|
6
6
|
isRuntimePrefetchPrerender,
|
|
7
7
|
markRuntimeApiOnAwait,
|
|
8
8
|
PostponeError,
|
|
9
|
-
} from '../ppr'
|
|
10
|
-
import type { NextRequest, RouteParamValue } from '../types'
|
|
9
|
+
} from '../render/ppr'
|
|
10
|
+
import type { NextRequest, RouteParamValue } from '../types'
|
|
11
11
|
|
|
12
12
|
// Request work-unit store (CORE seam for compat after()/onRequestError).
|
|
13
13
|
//
|
|
@@ -21,56 +21,56 @@ import type { NextRequest, RouteParamValue } from '../types';
|
|
|
21
21
|
// proxying on top of these accessors. Core only owns the store and the flush.
|
|
22
22
|
|
|
23
23
|
/** The lifecycle phase the request is currently executing in. */
|
|
24
|
-
export type WorkUnitPhase = 'render' | 'action' | 'handler' | 'middleware' | 'after'
|
|
24
|
+
export type WorkUnitPhase = 'render' | 'action' | 'handler' | 'middleware' | 'after'
|
|
25
25
|
|
|
26
26
|
/** How the matched route is being served — set by the responding call site. */
|
|
27
|
-
export type WorkUnitRouteKind = 'html' | 'data' | 'static-asset' | 'route-handler'
|
|
27
|
+
export type WorkUnitRouteKind = 'html' | 'data' | 'static-asset' | 'route-handler'
|
|
28
28
|
|
|
29
29
|
/** Per-request work unit carrying phase + the after-task queue. */
|
|
30
30
|
export interface WorkUnit {
|
|
31
|
-
phase: WorkUnitPhase
|
|
31
|
+
phase: WorkUnitPhase
|
|
32
32
|
/** Tasks queued via queueAfterTask, drained once on response close. */
|
|
33
|
-
afterTasks: (() => unknown)[]
|
|
33
|
+
afterTasks: (() => unknown)[]
|
|
34
34
|
/** Guard so the after-queue flushes exactly once across all close paths. */
|
|
35
|
-
flushed: boolean
|
|
35
|
+
flushed: boolean
|
|
36
36
|
/** How the response is being produced (set by the responding call site). */
|
|
37
|
-
routeKind?: WorkUnitRouteKind
|
|
37
|
+
routeKind?: WorkUnitRouteKind
|
|
38
38
|
/** Caching disposition of the matched route, when known. */
|
|
39
|
-
routeMode?: 'static' | 'isr' | 'dynamic'
|
|
39
|
+
routeMode?: 'static' | 'isr' | 'dynamic'
|
|
40
40
|
/** Opaque hints for response finalizers. */
|
|
41
|
-
responseHints?: Record<string, unknown
|
|
41
|
+
responseHints?: Record<string, unknown>
|
|
42
42
|
/**
|
|
43
43
|
* Opaque compat scratch space keyed by well-known symbols (testmode proxy
|
|
44
44
|
* info, onRequestError dedupe flag). Core never reads these; it only carries
|
|
45
45
|
* the store across the request lifecycle. Kept off the typed surface so core
|
|
46
46
|
* grows no dependency on compat.
|
|
47
47
|
*/
|
|
48
|
-
compat?: Record<symbol, unknown
|
|
48
|
+
compat?: Record<symbol, unknown>
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
// Anchored on globalThis (like requestStorage below) so compiled compat
|
|
52
52
|
// bundles that inline their own copy of this module still observe the same
|
|
53
53
|
// per-request work unit — canonical-URL recording happens in core while its
|
|
54
54
|
// readers (pages-router SSR state, navigation hooks) run from built bundles.
|
|
55
|
-
const WORK_UNIT_STORAGE = Symbol.for('pnext.workUnitStorage')
|
|
55
|
+
const WORK_UNIT_STORAGE = Symbol.for('pnext.workUnitStorage')
|
|
56
56
|
const workUnitStorage = ((globalThis as Record<PropertyKey, unknown>)[WORK_UNIT_STORAGE] ??=
|
|
57
|
-
new AsyncLocalStorage<WorkUnit>()) as AsyncLocalStorage<WorkUnit
|
|
57
|
+
new AsyncLocalStorage<WorkUnit>()) as AsyncLocalStorage<WorkUnit>
|
|
58
58
|
|
|
59
59
|
/** Run `callback` inside a fresh request work unit (start/dev per-request scope). */
|
|
60
60
|
export function runWithWorkUnit<T>(phase: WorkUnitPhase, callback: () => T): T {
|
|
61
|
-
const unit: WorkUnit = { phase, afterTasks: [], flushed: false }
|
|
62
|
-
return workUnitStorage.run(unit, callback)
|
|
61
|
+
const unit: WorkUnit = { phase, afterTasks: [], flushed: false }
|
|
62
|
+
return workUnitStorage.run(unit, callback)
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
/** The active request work unit, or undefined outside a request scope. */
|
|
66
66
|
export function getWorkUnit(): WorkUnit | undefined {
|
|
67
|
-
return workUnitStorage.getStore()
|
|
67
|
+
return workUnitStorage.getStore()
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
/** Set the current work-unit phase (compat toggles render/action/handler/...). */
|
|
71
71
|
export function setPhase(phase: WorkUnitPhase): void {
|
|
72
|
-
const unit = workUnitStorage.getStore()
|
|
73
|
-
if (unit) unit.phase = phase
|
|
72
|
+
const unit = workUnitStorage.getStore()
|
|
73
|
+
if (unit) unit.phase = phase
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
/** Record how the current request is being served (drives finalizers + funnel). */
|
|
@@ -79,11 +79,11 @@ export function setWorkUnitRoute(
|
|
|
79
79
|
routeMode?: WorkUnit['routeMode'],
|
|
80
80
|
responseHints?: Record<string, unknown>,
|
|
81
81
|
): void {
|
|
82
|
-
const unit = workUnitStorage.getStore()
|
|
83
|
-
if (!unit) return
|
|
84
|
-
unit.routeKind = routeKind
|
|
85
|
-
if (routeMode) unit.routeMode = routeMode
|
|
86
|
-
if (responseHints) unit.responseHints = responseHints
|
|
82
|
+
const unit = workUnitStorage.getStore()
|
|
83
|
+
if (!unit) return
|
|
84
|
+
unit.routeKind = routeKind
|
|
85
|
+
if (routeMode) unit.routeMode = routeMode
|
|
86
|
+
if (responseHints) unit.responseHints = responseHints
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
/**
|
|
@@ -91,10 +91,10 @@ export function setWorkUnitRoute(
|
|
|
91
91
|
* work unit is active. Compat's after() delegates here; core never enqueues.
|
|
92
92
|
*/
|
|
93
93
|
export function queueAfterTask(task: () => unknown): boolean {
|
|
94
|
-
const unit = workUnitStorage.getStore()
|
|
95
|
-
if (!unit) return false
|
|
96
|
-
unit.afterTasks.push(task)
|
|
97
|
-
return true
|
|
94
|
+
const unit = workUnitStorage.getStore()
|
|
95
|
+
if (!unit) return false
|
|
96
|
+
unit.afterTasks.push(task)
|
|
97
|
+
return true
|
|
98
98
|
}
|
|
99
99
|
|
|
100
100
|
/**
|
|
@@ -104,9 +104,9 @@ export function queueAfterTask(task: () => unknown): boolean {
|
|
|
104
104
|
* multiple close paths (stream end / redirect / abort / error).
|
|
105
105
|
*/
|
|
106
106
|
export function flushWorkUnit(unit: WorkUnit | undefined = workUnitStorage.getStore()): void {
|
|
107
|
-
if (!unit || unit.flushed) return
|
|
108
|
-
unit.flushed = true
|
|
109
|
-
if (unit.afterTasks.length === 0) return
|
|
107
|
+
if (!unit || unit.flushed) return
|
|
108
|
+
unit.flushed = true
|
|
109
|
+
if (unit.afterTasks.length === 0) return
|
|
110
110
|
// Drain under a SHALLOW COPY carrying `phase: 'after'` rather than mutating
|
|
111
111
|
// the shared unit. The flush is detached and async, so setting `phase` on the
|
|
112
112
|
// unit itself leaked: every later render seen under that unit (the build/PPR
|
|
@@ -115,36 +115,36 @@ export function flushWorkUnit(unit: WorkUnit | undefined = workUnitStorage.getSt
|
|
|
115
115
|
// after()". Every other field stays shared by reference; only the phase and
|
|
116
116
|
// the queue diverge, and nested after() enqueues onto the copy's queue via
|
|
117
117
|
// the store, which is exactly what this loop drains.
|
|
118
|
-
const afterUnit: WorkUnit = { ...unit, phase: 'after' }
|
|
118
|
+
const afterUnit: WorkUnit = { ...unit, phase: 'after' }
|
|
119
119
|
const flushing = workUnitStorage.run(afterUnit, async () => {
|
|
120
120
|
while (afterUnit.afterTasks.length) {
|
|
121
|
-
const tasks = afterUnit.afterTasks
|
|
122
|
-
afterUnit.afterTasks = []
|
|
121
|
+
const tasks = afterUnit.afterTasks
|
|
122
|
+
afterUnit.afterTasks = []
|
|
123
123
|
for (const task of tasks) {
|
|
124
124
|
try {
|
|
125
|
-
await task()
|
|
125
|
+
await task()
|
|
126
126
|
} catch (error) {
|
|
127
|
-
console.error('after() task failed:', error)
|
|
127
|
+
console.error('after() task failed:', error)
|
|
128
128
|
}
|
|
129
129
|
}
|
|
130
130
|
}
|
|
131
|
-
})
|
|
132
|
-
pendingFlushes.add(flushing)
|
|
133
|
-
void flushing.finally(() => pendingFlushes.delete(flushing))
|
|
131
|
+
})
|
|
132
|
+
pendingFlushes.add(flushing)
|
|
133
|
+
void flushing.finally(() => pendingFlushes.delete(flushing))
|
|
134
134
|
}
|
|
135
135
|
|
|
136
|
-
const pendingFlushes = new Set<Promise<void>>()
|
|
136
|
+
const pendingFlushes = new Set<Promise<void>>()
|
|
137
137
|
|
|
138
138
|
/**
|
|
139
139
|
* Await all in-flight after-queue flushes (graceful shutdown). Bounded by
|
|
140
140
|
* timeoutMs so a hung after() task can't block process exit.
|
|
141
141
|
*/
|
|
142
142
|
export async function drainWorkUnits(timeoutMs = 10_000): Promise<void> {
|
|
143
|
-
if (pendingFlushes.size === 0) return
|
|
143
|
+
if (pendingFlushes.size === 0) return
|
|
144
144
|
await Promise.race([
|
|
145
145
|
Promise.allSettled([...pendingFlushes]),
|
|
146
146
|
new Promise(resolve => setTimeout(resolve, timeoutMs)),
|
|
147
|
-
])
|
|
147
|
+
])
|
|
148
148
|
}
|
|
149
149
|
|
|
150
150
|
/**
|
|
@@ -158,52 +158,52 @@ export function flushWorkUnitOnClose(
|
|
|
158
158
|
unit: WorkUnit | undefined,
|
|
159
159
|
signal?: AbortSignal,
|
|
160
160
|
): Response {
|
|
161
|
-
if (!unit) return response
|
|
162
|
-
if (signal) signal.addEventListener('abort', () => flushWorkUnit(unit), { once: true })
|
|
161
|
+
if (!unit) return response
|
|
162
|
+
if (signal) signal.addEventListener('abort', () => flushWorkUnit(unit), { once: true })
|
|
163
163
|
if (!response.body) {
|
|
164
|
-
flushWorkUnit(unit)
|
|
165
|
-
return response
|
|
164
|
+
flushWorkUnit(unit)
|
|
165
|
+
return response
|
|
166
166
|
}
|
|
167
167
|
// An explicit Content-Length means the body is fully buffered upstream (image
|
|
168
168
|
// optimizer, static files) — nothing can enqueue after-tasks while it drains.
|
|
169
169
|
// Re-wrapping it in a close-observing stream would switch the transfer to
|
|
170
170
|
// chunked and drop the Content-Length header; flush immediately instead.
|
|
171
171
|
if (response.headers.has('content-length')) {
|
|
172
|
-
flushWorkUnit(unit)
|
|
173
|
-
return response
|
|
172
|
+
flushWorkUnit(unit)
|
|
173
|
+
return response
|
|
174
174
|
}
|
|
175
175
|
const observed = response.body.pipeThrough(
|
|
176
176
|
new TransformStream({
|
|
177
177
|
transform(chunk, controller) {
|
|
178
|
-
controller.enqueue(chunk)
|
|
178
|
+
controller.enqueue(chunk)
|
|
179
179
|
},
|
|
180
180
|
flush() {
|
|
181
|
-
flushWorkUnit(unit)
|
|
181
|
+
flushWorkUnit(unit)
|
|
182
182
|
},
|
|
183
183
|
}),
|
|
184
|
-
)
|
|
184
|
+
)
|
|
185
185
|
return new Response(observed, {
|
|
186
186
|
status: response.status,
|
|
187
187
|
statusText: response.statusText,
|
|
188
188
|
headers: response.headers,
|
|
189
|
-
})
|
|
189
|
+
})
|
|
190
190
|
}
|
|
191
191
|
|
|
192
192
|
interface RequestScope {
|
|
193
|
-
request: NextRequest
|
|
194
|
-
params: Record<string, RouteParamValue
|
|
193
|
+
request: NextRequest
|
|
194
|
+
params: Record<string, RouteParamValue>
|
|
195
195
|
/** Work registered via after() from 'next/server', flushed once the request callback settles. */
|
|
196
|
-
afterCallbacks?: (() => unknown)[]
|
|
196
|
+
afterCallbacks?: (() => unknown)[]
|
|
197
197
|
/** Optional response-headers channel render/handler paths may provide (e.g. draftMode set-cookie). */
|
|
198
|
-
responseHeaders?: Headers
|
|
198
|
+
responseHeaders?: Headers
|
|
199
199
|
}
|
|
200
200
|
|
|
201
|
-
const REQUEST_STORAGE = Symbol.for('pnext.requestStorage')
|
|
201
|
+
const REQUEST_STORAGE = Symbol.for('pnext.requestStorage')
|
|
202
202
|
const requestStorage = ((globalThis as Record<PropertyKey, unknown>)[REQUEST_STORAGE] ??=
|
|
203
|
-
new AsyncLocalStorage<RequestScope>()) as AsyncLocalStorage<RequestScope
|
|
203
|
+
new AsyncLocalStorage<RequestScope>()) as AsyncLocalStorage<RequestScope>
|
|
204
204
|
|
|
205
205
|
export function currentRequest() {
|
|
206
|
-
return requestStorage.getStore()?.request
|
|
206
|
+
return requestStorage.getStore()?.request
|
|
207
207
|
}
|
|
208
208
|
|
|
209
209
|
// Work-unit store bridge for the deep-internal shim
|
|
@@ -217,29 +217,29 @@ export function currentRequest() {
|
|
|
217
217
|
// The store is NEVER undefined: callers do `getStore().type` during build prerenders as well as live
|
|
218
218
|
// requests. `prerender-runtime` mirrors Next's runtime-prefetch work unit; `prerender` covers any other
|
|
219
219
|
// prerender scope, including the fallback when no request scope exists.
|
|
220
|
-
const WORK_UNIT_EXTERNAL = Symbol.for('pnext.workUnitExternal')
|
|
220
|
+
const WORK_UNIT_EXTERNAL = Symbol.for('pnext.workUnitExternal')
|
|
221
221
|
|
|
222
222
|
interface WorkUnitExternalStore {
|
|
223
|
-
type: 'request' | 'prerender' | 'prerender-runtime'
|
|
224
|
-
cookies: unknown
|
|
225
|
-
headers: Headers
|
|
223
|
+
type: 'request' | 'prerender' | 'prerender-runtime'
|
|
224
|
+
cookies: unknown
|
|
225
|
+
headers: Headers
|
|
226
226
|
}
|
|
227
227
|
|
|
228
228
|
function workUnitExternalStore(): WorkUnitExternalStore {
|
|
229
|
-
const request = currentRequest()
|
|
229
|
+
const request = currentRequest()
|
|
230
230
|
const type = isRuntimePrefetchPrerender()
|
|
231
231
|
? 'prerender-runtime'
|
|
232
232
|
: isPrerendering() || !request
|
|
233
233
|
? 'prerender'
|
|
234
|
-
: 'request'
|
|
234
|
+
: 'request'
|
|
235
235
|
return {
|
|
236
236
|
type,
|
|
237
237
|
cookies: request?.cookies,
|
|
238
238
|
headers: request?.headers ?? new Headers(),
|
|
239
|
-
}
|
|
239
|
+
}
|
|
240
240
|
}
|
|
241
241
|
|
|
242
|
-
(globalThis as Record<PropertyKey, unknown>)[WORK_UNIT_EXTERNAL] = workUnitExternalStore
|
|
242
|
+
;(globalThis as Record<PropertyKey, unknown>)[WORK_UNIT_EXTERNAL] = workUnitExternalStore
|
|
243
243
|
|
|
244
244
|
/**
|
|
245
245
|
* Capture the current request scope (if any) and return a wrapper that re-runs a function inside it.
|
|
@@ -249,13 +249,13 @@ function workUnitExternalStore(): WorkUnitExternalStore {
|
|
|
249
249
|
* throws - matching Next's phase semantics.
|
|
250
250
|
*/
|
|
251
251
|
export function captureRequestScope(): <T>(fn: () => T) => T {
|
|
252
|
-
const scope = requestStorage.getStore()
|
|
253
|
-
if (!scope) return fn => fn()
|
|
254
|
-
return fn => requestStorage.run(scope, fn)
|
|
252
|
+
const scope = requestStorage.getStore()
|
|
253
|
+
if (!scope) return fn => fn()
|
|
254
|
+
return fn => requestStorage.run(scope, fn)
|
|
255
255
|
}
|
|
256
256
|
|
|
257
257
|
export function currentParams() {
|
|
258
|
-
return requestStorage.getStore()?.params ?? {}
|
|
258
|
+
return requestStorage.getStore()?.params ?? {}
|
|
259
259
|
}
|
|
260
260
|
|
|
261
261
|
export function runWithRequest<T>(
|
|
@@ -264,28 +264,28 @@ export function runWithRequest<T>(
|
|
|
264
264
|
params: Record<string, RouteParamValue> = {},
|
|
265
265
|
extras: { responseHeaders?: Headers } = {},
|
|
266
266
|
): T {
|
|
267
|
-
if (!request) return callback()
|
|
267
|
+
if (!request) return callback()
|
|
268
268
|
const scope: RequestScope = {
|
|
269
269
|
request,
|
|
270
270
|
params,
|
|
271
271
|
afterCallbacks: [],
|
|
272
272
|
responseHeaders: extras.responseHeaders,
|
|
273
|
-
}
|
|
274
|
-
const result = requestStorage.run(scope, callback)
|
|
273
|
+
}
|
|
274
|
+
const result = requestStorage.run(scope, callback)
|
|
275
275
|
if (isThenable(result)) {
|
|
276
276
|
return (result as PromiseLike<unknown>).then(
|
|
277
277
|
value => {
|
|
278
|
-
void flushAfterCallbacks(scope)
|
|
279
|
-
return value
|
|
278
|
+
void flushAfterCallbacks(scope)
|
|
279
|
+
return value
|
|
280
280
|
},
|
|
281
281
|
error => {
|
|
282
|
-
void flushAfterCallbacks(scope)
|
|
283
|
-
throw error
|
|
282
|
+
void flushAfterCallbacks(scope)
|
|
283
|
+
throw error
|
|
284
284
|
},
|
|
285
|
-
) as T
|
|
285
|
+
) as T
|
|
286
286
|
}
|
|
287
|
-
void flushAfterCallbacks(scope)
|
|
288
|
-
return result
|
|
287
|
+
void flushAfterCallbacks(scope)
|
|
288
|
+
return result
|
|
289
289
|
}
|
|
290
290
|
|
|
291
291
|
/**
|
|
@@ -293,33 +293,33 @@ export function runWithRequest<T>(
|
|
|
293
293
|
* settles. Returns false when no request scope is active.
|
|
294
294
|
*/
|
|
295
295
|
export function registerAfterCallback(callback: () => unknown): boolean {
|
|
296
|
-
const scope = requestStorage.getStore()
|
|
297
|
-
if (!scope) return false
|
|
298
|
-
(scope.afterCallbacks ??= []).push(callback)
|
|
299
|
-
return true
|
|
296
|
+
const scope = requestStorage.getStore()
|
|
297
|
+
if (!scope) return false
|
|
298
|
+
;(scope.afterCallbacks ??= []).push(callback)
|
|
299
|
+
return true
|
|
300
300
|
}
|
|
301
301
|
|
|
302
302
|
/** Response-headers channel for the active request scope, when a caller provided one. */
|
|
303
303
|
export function currentResponseHeaders(): Headers | undefined {
|
|
304
|
-
return requestStorage.getStore()?.responseHeaders
|
|
304
|
+
return requestStorage.getStore()?.responseHeaders
|
|
305
305
|
}
|
|
306
306
|
|
|
307
307
|
async function flushAfterCallbacks(scope: RequestScope) {
|
|
308
308
|
while (scope.afterCallbacks?.length) {
|
|
309
|
-
const callbacks = scope.afterCallbacks
|
|
310
|
-
scope.afterCallbacks = []
|
|
309
|
+
const callbacks = scope.afterCallbacks
|
|
310
|
+
scope.afterCallbacks = []
|
|
311
311
|
for (const callback of callbacks) {
|
|
312
312
|
try {
|
|
313
|
-
await requestStorage.run(scope, callback)
|
|
313
|
+
await requestStorage.run(scope, callback)
|
|
314
314
|
} catch (error) {
|
|
315
|
-
console.error('after() callback failed:', error)
|
|
315
|
+
console.error('after() callback failed:', error)
|
|
316
316
|
}
|
|
317
317
|
}
|
|
318
318
|
}
|
|
319
319
|
}
|
|
320
320
|
|
|
321
321
|
function isThenable(value: unknown): value is PromiseLike<unknown> {
|
|
322
|
-
return typeof (value as { then?: unknown } | null | undefined)?.then === 'function'
|
|
322
|
+
return typeof (value as { then?: unknown } | null | undefined)?.then === 'function'
|
|
323
323
|
}
|
|
324
324
|
|
|
325
325
|
/**
|
|
@@ -331,39 +331,39 @@ function isThenable(value: unknown): value is PromiseLike<unknown> {
|
|
|
331
331
|
* the same flag, and module-level rather than ALS-scoped because the calls it
|
|
332
332
|
* looks for run outside the render's async context by definition.
|
|
333
333
|
*/
|
|
334
|
-
const BAILOUT_PROBE = Symbol.for('pnext.dynamicBailoutProbe')
|
|
334
|
+
const BAILOUT_PROBE = Symbol.for('pnext.dynamicBailoutProbe')
|
|
335
335
|
|
|
336
336
|
export function beginDynamicBailoutProbe(route: string): void {
|
|
337
|
-
(globalThis as Record<PropertyKey, unknown>)[BAILOUT_PROBE] = route
|
|
337
|
+
;(globalThis as Record<PropertyKey, unknown>)[BAILOUT_PROBE] = route
|
|
338
338
|
}
|
|
339
339
|
|
|
340
340
|
export function endDynamicBailoutProbe(): void {
|
|
341
|
-
delete (globalThis as Record<PropertyKey, unknown>)[BAILOUT_PROBE]
|
|
341
|
+
delete (globalThis as Record<PropertyKey, unknown>)[BAILOUT_PROBE]
|
|
342
342
|
}
|
|
343
343
|
|
|
344
344
|
function dynamicBailoutRoute(): string | undefined {
|
|
345
|
-
const route = (globalThis as Record<PropertyKey, unknown>)[BAILOUT_PROBE]
|
|
346
|
-
return typeof route === 'string' ? route : undefined
|
|
345
|
+
const route = (globalThis as Record<PropertyKey, unknown>)[BAILOUT_PROBE]
|
|
346
|
+
return typeof route === 'string' ? route : undefined
|
|
347
347
|
}
|
|
348
348
|
|
|
349
349
|
export function requireRequest(api: string) {
|
|
350
|
-
const probeRoute = dynamicBailoutRoute()
|
|
350
|
+
const probeRoute = dynamicBailoutRoute()
|
|
351
351
|
if (probeRoute !== undefined) {
|
|
352
352
|
const error = new Error(
|
|
353
353
|
`Route ${probeRoute} couldn't be rendered statically because it used \`${api.replace(/\(\)$/, '')}\`. ` +
|
|
354
354
|
`See more info here: https://nextjs.org/docs/messages/dynamic-server-error`,
|
|
355
|
-
)
|
|
356
|
-
error.name = 'DynamicServerError'
|
|
357
|
-
throw error
|
|
355
|
+
)
|
|
356
|
+
error.name = 'DynamicServerError'
|
|
357
|
+
throw error
|
|
358
358
|
}
|
|
359
|
-
const request = currentRequest()
|
|
359
|
+
const request = currentRequest()
|
|
360
360
|
if (!request) {
|
|
361
361
|
// In a partial prerender, request access marks the surrounding Suspense
|
|
362
362
|
// boundary as a dynamic hole rather than failing the build.
|
|
363
|
-
if (isPrerendering()) throw new PostponeError(api)
|
|
364
|
-
throw new Error(`${api} can only be used while rendering a dynamic PNext request.`)
|
|
363
|
+
if (isPrerendering()) throw new PostponeError(api)
|
|
364
|
+
throw new Error(`${api} can only be used while rendering a dynamic PNext request.`)
|
|
365
365
|
}
|
|
366
|
-
return request
|
|
366
|
+
return request
|
|
367
367
|
}
|
|
368
368
|
|
|
369
369
|
/**
|
|
@@ -386,11 +386,11 @@ export function requestApiPromise<T>(api: string, produce: () => T): Promise<T>
|
|
|
386
386
|
// Awaiting the resolved value arms the sync-IO abort: anything the render
|
|
387
387
|
// computes with Date.now() & co. AFTER a runtime API resolved belongs to
|
|
388
388
|
// the navigation, not the prefetch (see runWithRuntimePrefetchSyncIoAbort).
|
|
389
|
-
return markRuntimeApiOnAwait(Promise.resolve(produce()))
|
|
389
|
+
return markRuntimeApiOnAwait(Promise.resolve(produce()))
|
|
390
390
|
}
|
|
391
|
-
return hangingPromise<T>(api)
|
|
391
|
+
return hangingPromise<T>(api)
|
|
392
392
|
}
|
|
393
393
|
// Legacy PPR (experimental_ppr, cacheComponents off): keep the call-site
|
|
394
394
|
// throw so the existing shell path postpones exactly as before.
|
|
395
|
-
return Promise.resolve(produce())
|
|
395
|
+
return Promise.resolve(produce())
|
|
396
396
|
}
|