@wular/pnext 0.0.4 → 0.0.7
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 +22 -16
- package/bin/pnext +6 -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 +87 -22
- package/reference/config.md +40 -93
- package/reference/css.md +42 -33
- package/reference/dev.md +26 -33
- package/reference/env.md +18 -20
- package/reference/getting-started.md +132 -0
- package/reference/metadata.md +31 -46
- package/reference/navigation.md +65 -105
- package/reference/performance.md +21 -142
- package/reference/rendering.md +78 -75
- package/reference/routing.md +97 -107
- package/reference/typegen.md +27 -29
- package/src/api/cache.ts +36 -37
- package/src/api/client-cache.ts +2 -2
- package/src/api/client-navigation.ts +121 -114
- package/src/api/dynamic.tsx +58 -55
- package/src/api/link.tsx +52 -53
- 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 +72 -64
- package/src/cli/dev.ts +116 -116
- package/src/cli/index.ts +94 -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 +802 -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 +32 -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 +2022 -1995
- package/src/{api → client}/router/types.ts +98 -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 -1897
- 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 +86 -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 +2087 -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} +139 -139
- package/src/resolve/engine.ts +90 -77
- package/src/resolve/imports.ts +475 -463
- package/src/resolve/scan-facts.ts +318 -296
- 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 +87 -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 +827 -815
- package/src/routing/slots.ts +164 -160
- package/src/runtime/loader.ts +954 -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 +428 -406
- package/src/styles.d.ts +9 -0
- package/src/types.ts +324 -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/reference/overview.md +0 -35
- 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
|
@@ -13,48 +13,47 @@
|
|
|
13
13
|
//
|
|
14
14
|
// Injected into the client at build time as `window.__PNEXT_STALE_TIMES__`; undefined means Next defaults.
|
|
15
15
|
|
|
16
|
-
|
|
17
16
|
/** Next's built-in prefetch staleTimes (milliseconds). */
|
|
18
17
|
// Since Next 15 the DYNAMIC default is 0: dynamic data is never reused across
|
|
19
18
|
// navigations unless `experimental.staleTimes.dynamic` opts in. (The loading
|
|
20
19
|
// shell of a dynamic route still reuses for the STATIC window.)
|
|
21
|
-
export const DEFAULT_DYNAMIC_STALE_TIME_MS = 0
|
|
22
|
-
export const DEFAULT_STATIC_STALE_TIME_MS = 300_000
|
|
20
|
+
export const DEFAULT_DYNAMIC_STALE_TIME_MS = 0
|
|
21
|
+
export const DEFAULT_STATIC_STALE_TIME_MS = 300_000
|
|
23
22
|
/** Next's runtime-prefetch stale threshold (RUNTIME_PREFETCH_DYNAMIC_STALE). */
|
|
24
|
-
const RUNTIME_DOCUMENT_STALE_TIME_MS = 30_000
|
|
23
|
+
const RUNTIME_DOCUMENT_STALE_TIME_MS = 30_000
|
|
25
24
|
|
|
26
25
|
/** Shape injected by the server (seconds, mirroring next.config). */
|
|
27
26
|
interface StaleTimesConfig {
|
|
28
27
|
/** experimental.staleTimes.dynamic (seconds). */
|
|
29
|
-
dynamic?: number
|
|
28
|
+
dynamic?: number
|
|
30
29
|
/** experimental.staleTimes.static (seconds). */
|
|
31
|
-
static?: number
|
|
30
|
+
static?: number
|
|
32
31
|
}
|
|
33
32
|
|
|
34
33
|
declare global {
|
|
35
34
|
interface Window {
|
|
36
|
-
__PNEXT_STALE_TIMES__?: StaleTimesConfig
|
|
35
|
+
__PNEXT_STALE_TIMES__?: StaleTimesConfig
|
|
37
36
|
}
|
|
38
37
|
}
|
|
39
38
|
|
|
40
39
|
function configuredStaleTimes(): StaleTimesConfig {
|
|
41
|
-
if (!process.browser && typeof window === 'undefined') return {}
|
|
42
|
-
return window.__PNEXT_STALE_TIMES__ ?? {}
|
|
40
|
+
if (!process.browser && typeof window === 'undefined') return {}
|
|
41
|
+
return window.__PNEXT_STALE_TIMES__ ?? {}
|
|
43
42
|
}
|
|
44
43
|
|
|
45
44
|
function windowFromSeconds(value: number | undefined, fallbackMs: number): number {
|
|
46
45
|
// A configured 0 means "always fresh" (never reuse) — honour it exactly.
|
|
47
|
-
return typeof value === 'number' && Number.isFinite(value) ? value * 1000 : fallbackMs
|
|
46
|
+
return typeof value === 'number' && Number.isFinite(value) ? value * 1000 : fallbackMs
|
|
48
47
|
}
|
|
49
48
|
|
|
50
49
|
/** The dynamic prefetch window in ms (config override or 30s default). */
|
|
51
50
|
export function dynamicStaleTimeMs(): number {
|
|
52
|
-
return windowFromSeconds(configuredStaleTimes().dynamic, DEFAULT_DYNAMIC_STALE_TIME_MS)
|
|
51
|
+
return windowFromSeconds(configuredStaleTimes().dynamic, DEFAULT_DYNAMIC_STALE_TIME_MS)
|
|
53
52
|
}
|
|
54
53
|
|
|
55
54
|
/** The static prefetch window in ms (config override or 300s default). */
|
|
56
55
|
export function staticStaleTimeMs(): number {
|
|
57
|
-
return windowFromSeconds(configuredStaleTimes().static, DEFAULT_STATIC_STALE_TIME_MS)
|
|
56
|
+
return windowFromSeconds(configuredStaleTimes().static, DEFAULT_STATIC_STALE_TIME_MS)
|
|
58
57
|
}
|
|
59
58
|
|
|
60
59
|
/**
|
|
@@ -74,11 +73,11 @@ export function staticStaleTimeMs(): number {
|
|
|
74
73
|
* applies only to the per-segment cache.
|
|
75
74
|
*/
|
|
76
75
|
export function staleTimeForEntryMs(options: {
|
|
77
|
-
headerStaleTimeSeconds?: number
|
|
78
|
-
prefetchFull?: boolean
|
|
79
|
-
static?: boolean
|
|
80
|
-
runtime?: boolean
|
|
81
|
-
runtimeDocument?: boolean
|
|
76
|
+
headerStaleTimeSeconds?: number
|
|
77
|
+
prefetchFull?: boolean
|
|
78
|
+
static?: boolean
|
|
79
|
+
runtime?: boolean
|
|
80
|
+
runtimeDocument?: boolean
|
|
82
81
|
}): number {
|
|
83
82
|
// A NAVIGATION document of an `allow-runtime` route: its header reports the route's PUBLIC cache
|
|
84
83
|
// window (the private/runtime caches resolve after the headers flushed), but the content is
|
|
@@ -89,23 +88,23 @@ export function staleTimeForEntryMs(options: {
|
|
|
89
88
|
const headerMs =
|
|
90
89
|
typeof options.headerStaleTimeSeconds === 'number'
|
|
91
90
|
? options.headerStaleTimeSeconds * 1000
|
|
92
|
-
: Number.POSITIVE_INFINITY
|
|
93
|
-
return Math.min(headerMs, RUNTIME_DOCUMENT_STALE_TIME_MS)
|
|
91
|
+
: Number.POSITIVE_INFINITY
|
|
92
|
+
return Math.min(headerMs, RUNTIME_DOCUMENT_STALE_TIME_MS)
|
|
94
93
|
}
|
|
95
94
|
if ((options.static || options.runtime) && typeof options.headerStaleTimeSeconds === 'number') {
|
|
96
|
-
return options.headerStaleTimeSeconds * 1000
|
|
95
|
+
return options.headerStaleTimeSeconds * 1000
|
|
97
96
|
}
|
|
98
|
-
if (options.runtime) return dynamicStaleTimeMs()
|
|
97
|
+
if (options.runtime) return dynamicStaleTimeMs()
|
|
99
98
|
if (options.prefetchFull) {
|
|
100
99
|
return Math.max(
|
|
101
100
|
staticStaleTimeMs(),
|
|
102
101
|
typeof options.headerStaleTimeSeconds === 'number'
|
|
103
102
|
? options.headerStaleTimeSeconds * 1000
|
|
104
103
|
: 0,
|
|
105
|
-
)
|
|
104
|
+
)
|
|
106
105
|
}
|
|
107
106
|
if (typeof options.headerStaleTimeSeconds === 'number') {
|
|
108
|
-
return options.headerStaleTimeSeconds * 1000
|
|
107
|
+
return options.headerStaleTimeSeconds * 1000
|
|
109
108
|
}
|
|
110
|
-
return dynamicStaleTimeMs()
|
|
109
|
+
return dynamicStaleTimeMs()
|
|
111
110
|
}
|
|
@@ -3,70 +3,70 @@
|
|
|
3
3
|
// readers announce client-side route changes that would otherwise be silent
|
|
4
4
|
// (no full document load). The DOM name is Next-specific, so it lives in compat;
|
|
5
5
|
// core exposes an `onNavigationCommit` hook that this module subscribes to.
|
|
6
|
-
import { onNavigationCommit } from '../../
|
|
6
|
+
import { onNavigationCommit } from '../../client/router/events'
|
|
7
7
|
|
|
8
|
-
const ANNOUNCER_TAG = 'next-route-announcer'
|
|
8
|
+
const ANNOUNCER_TAG = 'next-route-announcer'
|
|
9
9
|
|
|
10
|
-
let announcerNode: HTMLElement | undefined
|
|
10
|
+
let announcerNode: HTMLElement | undefined
|
|
11
11
|
|
|
12
12
|
// Next skips the very first render (no initial announcement): the announcer
|
|
13
13
|
// starts empty and only updates on subsequent navigations. `onNavigationCommit`
|
|
14
14
|
// only fires inside softNavigate, so it never runs for the hard load — but we
|
|
15
15
|
// also guard against announcing an unchanged value.
|
|
16
|
-
let lastAnnouncement = ''
|
|
16
|
+
let lastAnnouncement = ''
|
|
17
17
|
|
|
18
18
|
function ensureAnnouncer(): HTMLElement | undefined {
|
|
19
|
-
if (typeof document === 'undefined') return undefined
|
|
20
|
-
if (announcerNode?.isConnected) return announcerNode
|
|
19
|
+
if (typeof document === 'undefined') return undefined
|
|
20
|
+
if (announcerNode?.isConnected) return announcerNode
|
|
21
21
|
|
|
22
|
-
const existing = document.getElementsByTagName(ANNOUNCER_TAG)[0]
|
|
22
|
+
const existing = document.getElementsByTagName(ANNOUNCER_TAG)[0]
|
|
23
23
|
if (existing instanceof HTMLElement && existing.shadowRoot) {
|
|
24
|
-
announcerNode = existing.shadowRoot.childNodes[0] as HTMLElement
|
|
25
|
-
return announcerNode
|
|
24
|
+
announcerNode = existing.shadowRoot.childNodes[0] as HTMLElement
|
|
25
|
+
return announcerNode
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
const host = document.createElement(ANNOUNCER_TAG)
|
|
29
|
-
host.style.cssText = 'position:absolute'
|
|
30
|
-
const shadow = host.attachShadow({ mode: 'open' })
|
|
28
|
+
const host = document.createElement(ANNOUNCER_TAG)
|
|
29
|
+
host.style.cssText = 'position:absolute'
|
|
30
|
+
const shadow = host.attachShadow({ mode: 'open' })
|
|
31
31
|
// A <div>, matching Next's app-router announcer exactly — a <p> here leaks
|
|
32
32
|
// into shadow-piercing selectors (e.g. a test's `p` lookup racing an action
|
|
33
33
|
// result) that Next's DOM never matches.
|
|
34
|
-
const live = document.createElement('div')
|
|
35
|
-
live.setAttribute('aria-live', 'assertive')
|
|
36
|
-
live.setAttribute('id', '__next-route-announcer__')
|
|
37
|
-
live.setAttribute('role', 'alert')
|
|
34
|
+
const live = document.createElement('div')
|
|
35
|
+
live.setAttribute('aria-live', 'assertive')
|
|
36
|
+
live.setAttribute('id', '__next-route-announcer__')
|
|
37
|
+
live.setAttribute('role', 'alert')
|
|
38
38
|
// Visually hidden but available to assistive tech (Next's own styles).
|
|
39
39
|
live.style.cssText =
|
|
40
|
-
'position:absolute;border:0;height:1px;margin:-1px;padding:0;width:1px;clip:rect(0 0 0 0);overflow:hidden;white-space:nowrap;word-wrap:normal'
|
|
41
|
-
shadow.appendChild(live)
|
|
42
|
-
document.body.appendChild(host)
|
|
43
|
-
announcerNode = live
|
|
44
|
-
return live
|
|
40
|
+
'position:absolute;border:0;height:1px;margin:-1px;padding:0;width:1px;clip:rect(0 0 0 0);overflow:hidden;white-space:nowrap;word-wrap:normal'
|
|
41
|
+
shadow.appendChild(live)
|
|
42
|
+
document.body.appendChild(host)
|
|
43
|
+
announcerNode = live
|
|
44
|
+
return live
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
// Priority order matches Next: document.title, then the first <h1>, then the
|
|
48
48
|
// pathname. Read after the body swap + head sync so the new title/heading are
|
|
49
49
|
// already in the DOM.
|
|
50
50
|
function routeAnnouncement(): string {
|
|
51
|
-
if (document.title) return document.title
|
|
52
|
-
const h1 = document.querySelector('h1')
|
|
53
|
-
const text = h1?.textContent?.trim()
|
|
54
|
-
if (text) return text
|
|
55
|
-
return location.pathname
|
|
51
|
+
if (document.title) return document.title
|
|
52
|
+
const h1 = document.querySelector('h1')
|
|
53
|
+
const text = h1?.textContent?.trim()
|
|
54
|
+
if (text) return text
|
|
55
|
+
return location.pathname
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
function announce() {
|
|
59
|
-
const node = ensureAnnouncer()
|
|
60
|
-
if (!node) return
|
|
61
|
-
const next = routeAnnouncement()
|
|
62
|
-
if (next === lastAnnouncement) return
|
|
63
|
-
lastAnnouncement = next
|
|
64
|
-
node.textContent = next
|
|
59
|
+
const node = ensureAnnouncer()
|
|
60
|
+
if (!node) return
|
|
61
|
+
const next = routeAnnouncement()
|
|
62
|
+
if (next === lastAnnouncement) return
|
|
63
|
+
lastAnnouncement = next
|
|
64
|
+
node.textContent = next
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
export function installRouteAnnouncer() {
|
|
68
|
-
if (!process.browser && typeof window === 'undefined') return
|
|
68
|
+
if (!process.browser && typeof window === 'undefined') return
|
|
69
69
|
// Create the empty announcer up front so it exists on first load with `''`.
|
|
70
|
-
ensureAnnouncer()
|
|
71
|
-
onNavigationCommit(announce)
|
|
70
|
+
ensureAnnouncer()
|
|
71
|
+
onNavigationCommit(announce)
|
|
72
72
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// stays importable - and unit-testable - without pulling the router, and the whole DOM runtime, into
|
|
4
4
|
// the module graph.
|
|
5
5
|
|
|
6
|
-
import type { SegmentCacheHit, SegmentCachePolicy, SegmentCacheRecord } from '../../
|
|
6
|
+
import type { SegmentCacheHit, SegmentCachePolicy, SegmentCacheRecord } from '../../client/router'
|
|
7
7
|
import {
|
|
8
8
|
BODY_SEGMENT_PATHS,
|
|
9
9
|
clearSegmentCache,
|
|
@@ -23,8 +23,8 @@ import {
|
|
|
23
23
|
takeComposedSegment,
|
|
24
24
|
takeSegment,
|
|
25
25
|
type SegmentPayloadMeta,
|
|
26
|
-
} from './segment-cache'
|
|
27
|
-
import { resetSegmentPrefetchDedupe, scheduleAppShellPrefetch } from './segment-prefetch'
|
|
26
|
+
} from './segment-cache'
|
|
27
|
+
import { resetSegmentPrefetchDedupe, scheduleAppShellPrefetch } from './segment-prefetch'
|
|
28
28
|
|
|
29
29
|
export function installSegmentCachePolicy(): SegmentCachePolicy {
|
|
30
30
|
return {
|
|
@@ -41,7 +41,7 @@ export function installSegmentCachePolicy(): SegmentCachePolicy {
|
|
|
41
41
|
// LAYOUT varied, the prefetch fetches `/_layout` alone instead of the whole
|
|
42
42
|
// route. Inert until segment-split commit is enabled (the composition half
|
|
43
43
|
// is what makes the half-fetched document paintable).
|
|
44
|
-
needsLayoutFrameOnly:
|
|
44
|
+
needsLayoutFrameOnly: input => needsLayoutFrameOnly(input),
|
|
45
45
|
runtimePageFrameSatisfied,
|
|
46
46
|
// w9-segment-split (G2), the live half: when this URL's LAYOUT chain is
|
|
47
47
|
// already cached (or already on screen, for a same-URL click), the
|
|
@@ -61,10 +61,10 @@ export function installSegmentCachePolicy(): SegmentCachePolicy {
|
|
|
61
61
|
// set) must fall with the entries, or a revalidated route stays deduped - and stale - for its whole
|
|
62
62
|
// window. evictPageSegments deliberately keeps it, since a same-URL refresh keeps layout/head dedupe.
|
|
63
63
|
clear: () => {
|
|
64
|
-
clearSegmentCache()
|
|
65
|
-
resetSegmentPrefetchDedupe()
|
|
64
|
+
clearSegmentCache()
|
|
65
|
+
resetSegmentPrefetchDedupe()
|
|
66
66
|
},
|
|
67
|
-
}
|
|
67
|
+
}
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
function record(input: SegmentCacheRecord): void {
|
|
@@ -73,11 +73,11 @@ function record(input: SegmentCacheRecord): void {
|
|
|
73
73
|
? // A navigation response / the hard-loaded document: no framed payload
|
|
74
74
|
// and no vary set, so it keys on its exact URL (fix-forward 2).
|
|
75
75
|
decodeDocumentSegmentMeta(input.body)
|
|
76
|
-
: decodeSegmentPayload(input.body, input.segmentPath)
|
|
76
|
+
: decodeSegmentPayload(input.body, input.segmentPath)
|
|
77
77
|
// No decodable payload (a header-stripping proxy, a plain document): there is
|
|
78
78
|
// no vary metadata to key on, so nothing worth caching here — the router's
|
|
79
79
|
// own whole-URL caches already hold it.
|
|
80
|
-
if (!decoded) return
|
|
80
|
+
if (!decoded) return
|
|
81
81
|
// App Shells (fix-forward 5): a per-URL static prerender of a params-reading
|
|
82
82
|
// route also primes the route's SHARED shell, so navigations to its other
|
|
83
83
|
// params paint instantly. No-op unless experimental.appShells is on.
|
|
@@ -88,7 +88,7 @@ function record(input: SegmentCacheRecord): void {
|
|
|
88
88
|
static: input.static,
|
|
89
89
|
complete: input.complete,
|
|
90
90
|
runtime: input.runtime,
|
|
91
|
-
})
|
|
91
|
+
})
|
|
92
92
|
// App Shells: the per-URL prerender carried the route's shared shell. File it
|
|
93
93
|
// at the route's fallback vary path (empty vary = every param value) as a
|
|
94
94
|
// SHELL — it paints, but a navigation still fetches the per-URL remainder.
|
|
@@ -105,7 +105,7 @@ function record(input: SegmentCacheRecord): void {
|
|
|
105
105
|
vary: [],
|
|
106
106
|
route: decoded.shell.route,
|
|
107
107
|
params: decoded.params,
|
|
108
|
-
})
|
|
108
|
+
})
|
|
109
109
|
}
|
|
110
110
|
recordSegment({
|
|
111
111
|
segmentPath: input.segmentPath,
|
|
@@ -126,34 +126,34 @@ function record(input: SegmentCacheRecord): void {
|
|
|
126
126
|
...(decoded.staticSiblings ? { staticSiblings: decoded.staticSiblings } : {}),
|
|
127
127
|
route: decoded.route,
|
|
128
128
|
params: decoded.params,
|
|
129
|
-
})
|
|
129
|
+
})
|
|
130
130
|
}
|
|
131
131
|
|
|
132
132
|
function take(input: {
|
|
133
|
-
pathname: string
|
|
134
|
-
search: string
|
|
135
|
-
segmentPath: string
|
|
133
|
+
pathname: string
|
|
134
|
+
search: string
|
|
135
|
+
segmentPath: string
|
|
136
136
|
}): SegmentCacheHit | null {
|
|
137
|
-
const hit = takeSegment(input)
|
|
137
|
+
const hit = takeSegment(input)
|
|
138
138
|
if (hit) {
|
|
139
139
|
return {
|
|
140
140
|
html: hit.html,
|
|
141
141
|
networkFree: hit.networkFree,
|
|
142
142
|
prefetchSatisfied: hit.prefetchSatisfied,
|
|
143
|
-
}
|
|
143
|
+
}
|
|
144
144
|
}
|
|
145
145
|
// w9-segment-split: the whole-document entry missed because ONE of the two
|
|
146
146
|
// frames varied. Compose the cached layout + page frames instead of going to
|
|
147
147
|
// the network for both. No-op until segment-split commit is enabled.
|
|
148
148
|
if (!BODY_SEGMENT_PATHS.includes(input.segmentPath as (typeof BODY_SEGMENT_PATHS)[number])) {
|
|
149
|
-
return null
|
|
149
|
+
return null
|
|
150
150
|
}
|
|
151
|
-
const composed = takeComposedSegment({ pathname: input.pathname, search: input.search })
|
|
151
|
+
const composed = takeComposedSegment({ pathname: input.pathname, search: input.search })
|
|
152
152
|
return composed
|
|
153
153
|
? {
|
|
154
154
|
html: composed.html,
|
|
155
155
|
networkFree: composed.networkFree,
|
|
156
156
|
prefetchSatisfied: composed.prefetchSatisfied,
|
|
157
157
|
}
|
|
158
|
-
: null
|
|
158
|
+
: null
|
|
159
159
|
}
|