@wular/pnext 0.0.4 → 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 -1992
- 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 -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 +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} +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 +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 +827 -815
- 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
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
exports.PHASE_EXPORT = 'phase-export'
|
|
2
|
-
exports.PHASE_PRODUCTION_BUILD = 'phase-production-build'
|
|
3
|
-
exports.PHASE_PRODUCTION_SERVER = 'phase-production-server'
|
|
4
|
-
exports.PHASE_DEVELOPMENT_SERVER = 'phase-development-server'
|
|
5
|
-
exports.PHASE_TEST = 'phase-test'
|
|
6
|
-
exports.PHASE_INFO = 'phase-info'
|
|
1
|
+
exports.PHASE_EXPORT = 'phase-export'
|
|
2
|
+
exports.PHASE_PRODUCTION_BUILD = 'phase-production-build'
|
|
3
|
+
exports.PHASE_PRODUCTION_SERVER = 'phase-production-server'
|
|
4
|
+
exports.PHASE_DEVELOPMENT_SERVER = 'phase-development-server'
|
|
5
|
+
exports.PHASE_TEST = 'phase-test'
|
|
6
|
+
exports.PHASE_INFO = 'phase-info'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export const PHASE_EXPORT = 'phase-export'
|
|
2
|
-
export const PHASE_PRODUCTION_BUILD = 'phase-production-build'
|
|
3
|
-
export const PHASE_PRODUCTION_SERVER = 'phase-production-server'
|
|
4
|
-
export const PHASE_DEVELOPMENT_SERVER = 'phase-development-server'
|
|
5
|
-
export const PHASE_TEST = 'phase-test'
|
|
6
|
-
export const PHASE_INFO = 'phase-info'
|
|
1
|
+
export const PHASE_EXPORT = 'phase-export'
|
|
2
|
+
export const PHASE_PRODUCTION_BUILD = 'phase-production-build'
|
|
3
|
+
export const PHASE_PRODUCTION_SERVER = 'phase-production-server'
|
|
4
|
+
export const PHASE_DEVELOPMENT_SERVER = 'phase-development-server'
|
|
5
|
+
export const PHASE_TEST = 'phase-test'
|
|
6
|
+
export const PHASE_INFO = 'phase-info'
|
|
@@ -13,27 +13,27 @@
|
|
|
13
13
|
// Only a missing, symlinked, or previously shimmed `node_modules/next` is replaced: the e2e harness
|
|
14
14
|
// links the real Next checkout for tsc typechecks, and fixtures with a genuinely installed `next` are
|
|
15
15
|
// left alone.
|
|
16
|
-
import { existsSync, lstatSync, readFileSync } from 'node:fs'
|
|
17
|
-
import { mkdir, rm, writeFile } from 'node:fs/promises'
|
|
18
|
-
import path from 'node:path'
|
|
19
|
-
import type { ResolvedConfig } from '../../config'
|
|
16
|
+
import { existsSync, lstatSync, readFileSync } from 'node:fs'
|
|
17
|
+
import { mkdir, rm, writeFile } from 'node:fs/promises'
|
|
18
|
+
import path from 'node:path'
|
|
19
|
+
import type { ResolvedConfig } from '../../config'
|
|
20
20
|
|
|
21
|
-
const SERVER_ENTRY_NAMES = ['server.js', 'server.mjs', 'server.cjs', 'server.ts']
|
|
22
|
-
const SHIM_VERSION = '0.0.0-pnext-custom-server'
|
|
21
|
+
const SERVER_ENTRY_NAMES = ['server.js', 'server.mjs', 'server.cjs', 'server.ts']
|
|
22
|
+
const SHIM_VERSION = '0.0.0-pnext-custom-server'
|
|
23
23
|
|
|
24
24
|
/** Whether the app root ships a custom server entry that imports 'next'. */
|
|
25
25
|
export function hasCustomServerEntry(root: string): boolean {
|
|
26
26
|
for (const name of SERVER_ENTRY_NAMES) {
|
|
27
|
-
const file = path.join(root, name)
|
|
28
|
-
if (!existsSync(file)) continue
|
|
27
|
+
const file = path.join(root, name)
|
|
28
|
+
if (!existsSync(file)) continue
|
|
29
29
|
try {
|
|
30
|
-
const source = readFileSync(file, 'utf8')
|
|
31
|
-
if (/(?:require\(\s*['"]next['"]\s*\)|from\s+['"]next['"])/.test(source)) return true
|
|
30
|
+
const source = readFileSync(file, 'utf8')
|
|
31
|
+
if (/(?:require\(\s*['"]next['"]\s*\)|from\s+['"]next['"])/.test(source)) return true
|
|
32
32
|
} catch {
|
|
33
33
|
// Unreadable entry — skip.
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
|
-
return false
|
|
36
|
+
return false
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
/**
|
|
@@ -42,32 +42,34 @@ export function hasCustomServerEntry(root: string): boolean {
|
|
|
42
42
|
* third-party install (absent, symlinked, or an earlier shim is replaced).
|
|
43
43
|
*/
|
|
44
44
|
export async function emitCustomServerShim(config: ResolvedConfig): Promise<void> {
|
|
45
|
-
if (!hasCustomServerEntry(config.root)) return
|
|
46
|
-
const target = path.join(config.root, 'node_modules', 'next')
|
|
45
|
+
if (!hasCustomServerEntry(config.root)) return
|
|
46
|
+
const target = path.join(config.root, 'node_modules', 'next')
|
|
47
47
|
try {
|
|
48
|
-
const stat = lstatSync(target)
|
|
48
|
+
const stat = lstatSync(target)
|
|
49
49
|
// A previously emitted shim is a real directory too — refresh it, so a
|
|
50
50
|
// rebuild in an existing test dir never keeps a stale copy.
|
|
51
|
-
if (!stat.isSymbolicLink() && !isEmittedShim(target)) return
|
|
52
|
-
await rm(target, { recursive: true, force: true })
|
|
51
|
+
if (!stat.isSymbolicLink() && !isEmittedShim(target)) return // real install — leave it alone
|
|
52
|
+
await rm(target, { recursive: true, force: true })
|
|
53
53
|
} catch {
|
|
54
54
|
// Missing — create fresh below.
|
|
55
55
|
}
|
|
56
|
-
await mkdir(target, { recursive: true })
|
|
56
|
+
await mkdir(target, { recursive: true })
|
|
57
57
|
await writeFile(
|
|
58
58
|
path.join(target, 'package.json'),
|
|
59
59
|
`${JSON.stringify({ name: 'next', version: SHIM_VERSION, main: 'index.cjs' }, null, 2)}\n`,
|
|
60
|
-
)
|
|
61
|
-
await writeFile(path.join(target, 'index.cjs'), customServerShimSource())
|
|
60
|
+
)
|
|
61
|
+
await writeFile(path.join(target, 'index.cjs'), customServerShimSource())
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
/** Whether `node_modules/next` is a shim this build emitted earlier. */
|
|
65
65
|
function isEmittedShim(target: string): boolean {
|
|
66
66
|
try {
|
|
67
|
-
const pkg = JSON.parse(readFileSync(path.join(target, 'package.json'), 'utf8')) as {
|
|
68
|
-
|
|
67
|
+
const pkg = JSON.parse(readFileSync(path.join(target, 'package.json'), 'utf8')) as {
|
|
68
|
+
version?: string
|
|
69
|
+
}
|
|
70
|
+
return pkg.version === SHIM_VERSION
|
|
69
71
|
} catch {
|
|
70
|
-
return false
|
|
72
|
+
return false
|
|
71
73
|
}
|
|
72
74
|
}
|
|
73
75
|
|
|
@@ -76,7 +78,7 @@ function isEmittedShim(target: string): boolean {
|
|
|
76
78
|
* same runtime the harness/build used, from any app directory.
|
|
77
79
|
*/
|
|
78
80
|
function customServerShimSource(): string {
|
|
79
|
-
const cliPath = path.resolve(import.meta.dirname, '..', '..', 'cli', 'index.ts')
|
|
81
|
+
const cliPath = path.resolve(import.meta.dirname, '..', '..', 'cli', 'index.ts')
|
|
80
82
|
return `'use strict';
|
|
81
83
|
// pnext custom-server shim for require('next') / import next from 'next'.
|
|
82
84
|
// Generated by pnext build; see src/compat/next/custom-server.ts.
|
|
@@ -232,5 +234,5 @@ function createServer(options = {}) {
|
|
|
232
234
|
|
|
233
235
|
module.exports = createServer;
|
|
234
236
|
module.exports.default = createServer;
|
|
235
|
-
|
|
237
|
+
`
|
|
236
238
|
}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
// Header-name constants matching
|
|
2
2
|
// next/src/client/components/app-router-headers.ts exactly.
|
|
3
|
-
export const RSC_HEADER = 'rsc' as const
|
|
4
|
-
export const ACTION_HEADER = 'next-action' as const
|
|
5
|
-
export const NEXT_ROUTER_STATE_TREE_HEADER = 'next-router-state-tree' as const
|
|
6
|
-
export const NEXT_ROUTER_PREFETCH_HEADER = 'next-router-prefetch' as const
|
|
7
|
-
export const NEXT_ROUTER_SEGMENT_PREFETCH_HEADER = 'next-router-segment-prefetch' as const
|
|
8
|
-
export const NEXT_HMR_REFRESH_HEADER = 'next-hmr-refresh' as const
|
|
9
|
-
export const NEXT_HMR_REFRESH_HASH_COOKIE = '__next_hmr_refresh_hash__' as const
|
|
10
|
-
export const NEXT_URL = 'next-url' as const
|
|
11
|
-
export const RSC_CONTENT_TYPE_HEADER = 'text/x-component' as const
|
|
3
|
+
export const RSC_HEADER = 'rsc' as const
|
|
4
|
+
export const ACTION_HEADER = 'next-action' as const
|
|
5
|
+
export const NEXT_ROUTER_STATE_TREE_HEADER = 'next-router-state-tree' as const
|
|
6
|
+
export const NEXT_ROUTER_PREFETCH_HEADER = 'next-router-prefetch' as const
|
|
7
|
+
export const NEXT_ROUTER_SEGMENT_PREFETCH_HEADER = 'next-router-segment-prefetch' as const
|
|
8
|
+
export const NEXT_HMR_REFRESH_HEADER = 'next-hmr-refresh' as const
|
|
9
|
+
export const NEXT_HMR_REFRESH_HASH_COOKIE = '__next_hmr_refresh_hash__' as const
|
|
10
|
+
export const NEXT_URL = 'next-url' as const
|
|
11
|
+
export const RSC_CONTENT_TYPE_HEADER = 'text/x-component' as const
|
|
12
12
|
|
|
13
|
-
export const NEXT_INSTANT_TEST_COOKIE = 'next-instant-navigation-testing' as const
|
|
13
|
+
export const NEXT_INSTANT_TEST_COOKIE = 'next-instant-navigation-testing' as const
|
|
14
14
|
|
|
15
15
|
export const FLIGHT_HEADERS = [
|
|
16
16
|
RSC_HEADER,
|
|
@@ -18,15 +18,15 @@ export const FLIGHT_HEADERS = [
|
|
|
18
18
|
NEXT_ROUTER_PREFETCH_HEADER,
|
|
19
19
|
NEXT_HMR_REFRESH_HEADER,
|
|
20
20
|
NEXT_ROUTER_SEGMENT_PREFETCH_HEADER,
|
|
21
|
-
] as const
|
|
21
|
+
] as const
|
|
22
22
|
|
|
23
|
-
export const NEXT_RSC_UNION_QUERY = '_rsc' as const
|
|
24
|
-
export const NEXT_ROUTER_STALE_TIME_HEADER = 'x-nextjs-stale-time' as const
|
|
25
|
-
export const NEXT_DID_POSTPONE_HEADER = 'x-nextjs-postponed' as const
|
|
26
|
-
export const NEXT_REWRITTEN_PATH_HEADER = 'x-nextjs-rewritten-path' as const
|
|
27
|
-
export const NEXT_REWRITTEN_QUERY_HEADER = 'x-nextjs-rewritten-query' as const
|
|
28
|
-
export const NEXT_IS_PRERENDER_HEADER = 'x-nextjs-prerender' as const
|
|
29
|
-
export const NEXT_ACTION_NOT_FOUND_HEADER = 'x-nextjs-action-not-found' as const
|
|
30
|
-
export const NEXT_REQUEST_ID_HEADER = 'x-nextjs-request-id' as const
|
|
31
|
-
export const NEXT_HTML_REQUEST_ID_HEADER = 'x-nextjs-html-request-id' as const
|
|
32
|
-
export const NEXT_ACTION_REVALIDATED_HEADER = 'x-action-revalidated' as const
|
|
23
|
+
export const NEXT_RSC_UNION_QUERY = '_rsc' as const
|
|
24
|
+
export const NEXT_ROUTER_STALE_TIME_HEADER = 'x-nextjs-stale-time' as const
|
|
25
|
+
export const NEXT_DID_POSTPONE_HEADER = 'x-nextjs-postponed' as const
|
|
26
|
+
export const NEXT_REWRITTEN_PATH_HEADER = 'x-nextjs-rewritten-path' as const
|
|
27
|
+
export const NEXT_REWRITTEN_QUERY_HEADER = 'x-nextjs-rewritten-query' as const
|
|
28
|
+
export const NEXT_IS_PRERENDER_HEADER = 'x-nextjs-prerender' as const
|
|
29
|
+
export const NEXT_ACTION_NOT_FOUND_HEADER = 'x-nextjs-action-not-found' as const
|
|
30
|
+
export const NEXT_REQUEST_ID_HEADER = 'x-nextjs-request-id' as const
|
|
31
|
+
export const NEXT_HTML_REQUEST_ID_HEADER = 'x-nextjs-html-request-id' as const
|
|
32
|
+
export const NEXT_ACTION_REVALIDATED_HEADER = 'x-action-revalidated' as const
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
// framework populates during a render. Next backs that with an
|
|
7
7
|
// AsyncLocalStorage whose store carries `type` ('request' | 'prerender' |
|
|
8
8
|
// 'prerender-runtime') plus, for a request work unit, `cookies`/`headers`.
|
|
9
|
-
// pnext keeps that state in core (src/request/context.ts, src/ppr.ts) and
|
|
9
|
+
// pnext keeps that state in core (src/request/context.ts, src/render/ppr.ts) and
|
|
10
10
|
// publishes a getter onto globalThis, which this module reflects — so a direct
|
|
11
11
|
// import observes the live store rather than a separate, empty instance.
|
|
12
12
|
//
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
// requirable. The same module as a `.ts` external is forced through that
|
|
17
17
|
// transform, becomes an async module, and `require()` throws
|
|
18
18
|
// "require() async module ... is unsupported". Same rule as constants.cjs /
|
|
19
|
-
// navigation.cjs — see the note in src/compat/
|
|
19
|
+
// navigation.cjs — see the note in src/compat/aliases.ts.
|
|
20
20
|
const WORK_UNIT_EXTERNAL = Symbol.for('pnext.workUnitExternal')
|
|
21
21
|
/** @type {Record<PropertyKey, unknown>} */
|
|
22
22
|
const root = globalThis
|
|
@@ -24,8 +24,7 @@ const root = globalThis
|
|
|
24
24
|
const workUnitAsyncStorage = {
|
|
25
25
|
// Never undefined: fixtures do `getStore().type` during build prerenders as
|
|
26
26
|
// well as live requests. Core's getter always answers with a store.
|
|
27
|
-
getStore: () =>
|
|
28
|
-
/** @type {(() => unknown) | undefined} */ (root[WORK_UNIT_EXTERNAL])?.(),
|
|
27
|
+
getStore: () => /** @type {(() => unknown) | undefined} */ (root[WORK_UNIT_EXTERNAL])?.(),
|
|
29
28
|
/**
|
|
30
29
|
* @param {unknown} _store
|
|
31
30
|
* @param {(...args: unknown[]) => unknown} callback
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { revalidatePath, revalidateTag } from '../../../../cache'
|
|
1
|
+
export { revalidatePath, revalidateTag } from '../../../../cache'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { unstable_cache } from '../../../../cache'
|
|
1
|
+
export { unstable_cache } from '../../../../cache'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { unstable_noStore } from '../../../../cache'
|
|
1
|
+
export { unstable_noStore } from '../../../../cache'
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { h, type ComponentType } from 'preact'
|
|
2
|
-
import { lazy, Suspense } from 'preact/compat'
|
|
1
|
+
import { h, type ComponentType } from 'preact'
|
|
2
|
+
import { lazy, Suspense } from 'preact/compat'
|
|
3
3
|
import {
|
|
4
4
|
dynamic as pnextDynamic,
|
|
5
5
|
dynamicReferenceSymbol,
|
|
@@ -8,9 +8,9 @@ import {
|
|
|
8
8
|
type DynamicOptions,
|
|
9
9
|
type DynamicReference,
|
|
10
10
|
type DynamicTarget,
|
|
11
|
-
} from '../../api/dynamic'
|
|
11
|
+
} from '../../api/dynamic'
|
|
12
12
|
|
|
13
|
-
export type { DynamicLoader, DynamicModule, DynamicOptions }
|
|
13
|
+
export type { DynamicLoader, DynamicModule, DynamicOptions }
|
|
14
14
|
|
|
15
15
|
export default function dynamic<Props extends object = object>(
|
|
16
16
|
loader: DynamicLoader<Props>,
|
|
@@ -18,33 +18,36 @@ export default function dynamic<Props extends object = object>(
|
|
|
18
18
|
// Injected by the server compile; see rewriteDynamicCallTargets.
|
|
19
19
|
target?: DynamicTarget,
|
|
20
20
|
) {
|
|
21
|
-
if (typeof loader === 'string') return pnextDynamic(loader, options, target)
|
|
21
|
+
if (typeof loader === 'string') return pnextDynamic(loader, options, target)
|
|
22
22
|
|
|
23
|
-
const coreDynamic = pnextDynamic(loader, options, target) as DynamicWithReference<Props
|
|
24
|
-
const Lazy = lazy(() => loader().then(module => ({ default: componentFromModule(module) })))
|
|
23
|
+
const coreDynamic = pnextDynamic(loader, options, target) as DynamicWithReference<Props>
|
|
24
|
+
const Lazy = lazy(() => loader().then(module => ({ default: componentFromModule(module) })))
|
|
25
25
|
const DynamicComponent = ((props: Props) => {
|
|
26
|
-
const Loading = options.loading
|
|
26
|
+
const Loading = options.loading
|
|
27
27
|
// ssr:false renders nothing on the server, so the client mount is a *hydration* whose only child
|
|
28
28
|
// suspends. preact/compat nulls a hydrating vnode's type when it unmounts, and Suspense reuses the
|
|
29
29
|
// same props.children vnode on its resolve re-render - the poisoned element then renders as text.
|
|
30
30
|
// The hooks-based core component loads without suspending, so that boundary is never entered.
|
|
31
31
|
if (options.ssr === false) {
|
|
32
|
-
return h(
|
|
33
|
-
|
|
32
|
+
return h(
|
|
33
|
+
'pnext-dynamic',
|
|
34
|
+
{ style: { display: 'contents' } },
|
|
35
|
+
!process.browser && typeof window === 'undefined' ? null : h(coreDynamic, props),
|
|
36
|
+
)
|
|
34
37
|
}
|
|
35
|
-
return h(Suspense, { fallback: Loading ? h(Loading, props) : null }, h(Lazy, props))
|
|
36
|
-
}) as DynamicWithReference<Props
|
|
38
|
+
return h(Suspense, { fallback: Loading ? h(Loading, props) : null }, h(Lazy, props))
|
|
39
|
+
}) as DynamicWithReference<Props>
|
|
37
40
|
|
|
38
|
-
DynamicComponent[dynamicReferenceSymbol] = coreDynamic[dynamicReferenceSymbol]
|
|
39
|
-
return DynamicComponent
|
|
41
|
+
DynamicComponent[dynamicReferenceSymbol] = coreDynamic[dynamicReferenceSymbol]
|
|
42
|
+
return DynamicComponent
|
|
40
43
|
}
|
|
41
44
|
|
|
42
|
-
export { dynamic }
|
|
45
|
+
export { dynamic }
|
|
43
46
|
|
|
44
47
|
type DynamicWithReference<Props extends object> = ComponentType<Props> & {
|
|
45
|
-
[dynamicReferenceSymbol]?: DynamicReference<Props
|
|
46
|
-
}
|
|
48
|
+
[dynamicReferenceSymbol]?: DynamicReference<Props>
|
|
49
|
+
}
|
|
47
50
|
|
|
48
51
|
function componentFromModule<Props>(module: DynamicModule<Props>) {
|
|
49
|
-
return typeof module === 'function' ? module : module.default
|
|
52
|
+
return typeof module === 'function' ? module : module.default
|
|
50
53
|
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
'use client'
|
|
1
|
+
'use client'
|
|
2
2
|
|
|
3
|
-
import { Component, Fragment, h, type ComponentChildren, type ComponentType } from 'preact'
|
|
4
|
-
import { isControlFlowError } from '../client/errors/control-flow'
|
|
5
|
-
import { untagPrimitiveThrow } from '../client/errors/primitive-throw'
|
|
3
|
+
import { Component, Fragment, h, type ComponentChildren, type ComponentType } from 'preact'
|
|
4
|
+
import { isControlFlowError } from '../client/errors/control-flow'
|
|
5
|
+
import { untagPrimitiveThrow } from '../client/errors/primitive-throw'
|
|
6
6
|
|
|
7
7
|
export interface ErrorInfo {
|
|
8
|
-
error: unknown
|
|
9
|
-
reset: () => void
|
|
10
|
-
unstable_retry: () => void
|
|
8
|
+
error: unknown
|
|
9
|
+
reset: () => void
|
|
10
|
+
unstable_retry: () => void
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
// Island error-boundary protocol (see render/renderer.ts): when a Server Component inside this
|
|
@@ -17,64 +17,64 @@ export interface ErrorInfo {
|
|
|
17
17
|
// state and the server-rendered fallback hydrates interactive. Without this handoff the client would
|
|
18
18
|
// remount with "no error" and blank out the fallback. The renderer only performs the handoff for
|
|
19
19
|
// components carrying `Symbol.for('pnext.islandErrorBoundary')`, stamped below.
|
|
20
|
-
const ISLAND_BOUNDARY_ERROR_PROP = '__pnextBoundaryError'
|
|
21
|
-
const islandErrorBoundarySymbol = Symbol.for('pnext.islandErrorBoundary')
|
|
20
|
+
const ISLAND_BOUNDARY_ERROR_PROP = '__pnextBoundaryError'
|
|
21
|
+
const islandErrorBoundarySymbol = Symbol.for('pnext.islandErrorBoundary')
|
|
22
22
|
|
|
23
23
|
interface IslandBoundaryErrorMarker {
|
|
24
|
-
name?: string
|
|
25
|
-
message?: string
|
|
26
|
-
digest?: string
|
|
24
|
+
name?: string
|
|
25
|
+
message?: string
|
|
26
|
+
digest?: string
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
interface CatchErrorProps {
|
|
30
|
-
children?: ComponentChildren
|
|
31
|
-
clearError?: () => void
|
|
32
|
-
[ISLAND_BOUNDARY_ERROR_PROP]?: IslandBoundaryErrorMarker
|
|
30
|
+
children?: ComponentChildren
|
|
31
|
+
clearError?: () => void
|
|
32
|
+
[ISLAND_BOUNDARY_ERROR_PROP]?: IslandBoundaryErrorMarker
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
interface CatchErrorState {
|
|
36
|
-
error: unknown
|
|
37
|
-
hasError: boolean
|
|
38
|
-
version: number
|
|
36
|
+
error: unknown
|
|
37
|
+
hasError: boolean
|
|
38
|
+
version: number
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
function reviveBoundaryError(marker: IslandBoundaryErrorMarker): Error & { digest?: string } {
|
|
42
|
-
const error = new Error(String(marker.message ?? '')) as Error & { digest?: string }
|
|
43
|
-
if (marker.name) error.name = String(marker.name)
|
|
44
|
-
if (typeof marker.digest === 'string') error.digest = marker.digest
|
|
45
|
-
return error
|
|
42
|
+
const error = new Error(String(marker.message ?? '')) as Error & { digest?: string }
|
|
43
|
+
if (marker.name) error.name = String(marker.name)
|
|
44
|
+
if (typeof marker.digest === 'string') error.digest = marker.digest
|
|
45
|
+
return error
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
function initialCatchErrorState(props: CatchErrorProps): CatchErrorState {
|
|
49
|
-
const marker = props[ISLAND_BOUNDARY_ERROR_PROP]
|
|
49
|
+
const marker = props[ISLAND_BOUNDARY_ERROR_PROP]
|
|
50
50
|
if (marker && typeof marker === 'object') {
|
|
51
|
-
return { error: reviveBoundaryError(marker), hasError: true, version: 0 }
|
|
51
|
+
return { error: reviveBoundaryError(marker), hasError: true, version: 0 }
|
|
52
52
|
}
|
|
53
|
-
return { error: undefined, hasError: false, version: 0 }
|
|
53
|
+
return { error: undefined, hasError: false, version: 0 }
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
export function unstable_catchError<Props extends Record<string, unknown>>(
|
|
57
57
|
Fallback: (props: Props, info: ErrorInfo) => ComponentChildren,
|
|
58
58
|
): ComponentType<Props & CatchErrorProps> {
|
|
59
59
|
class CatchError extends Component<Props & CatchErrorProps, CatchErrorState> {
|
|
60
|
-
state: CatchErrorState = initialCatchErrorState(this.props)
|
|
60
|
+
state: CatchErrorState = initialCatchErrorState(this.props)
|
|
61
61
|
|
|
62
62
|
static getDerivedStateFromError(error: unknown): Partial<CatchErrorState> {
|
|
63
63
|
// Router signals belong to their owning route boundary. Capturing one
|
|
64
64
|
// here turns a redirect/notFound into a stale local fallback instead of
|
|
65
65
|
// letting the client control-flow handler complete the navigation.
|
|
66
|
-
if (isControlFlowError(error)) throw error
|
|
67
|
-
return { error: normalizeBoundaryError(error), hasError: true }
|
|
66
|
+
if (isControlFlowError(error)) throw error
|
|
67
|
+
return { error: normalizeBoundaryError(error), hasError: true }
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
reset = () => {
|
|
71
|
-
this.props.clearError?.()
|
|
71
|
+
this.props.clearError?.()
|
|
72
72
|
this.setState(state => ({
|
|
73
73
|
error: undefined,
|
|
74
74
|
hasError: false,
|
|
75
75
|
version: state.version + 1,
|
|
76
|
-
}))
|
|
77
|
-
}
|
|
76
|
+
}))
|
|
77
|
+
}
|
|
78
78
|
|
|
79
79
|
unstable_retry = () => {
|
|
80
80
|
// App-Router only: `unstable_retry` re-runs the server render, which the Pages Router has no
|
|
@@ -84,52 +84,52 @@ export function unstable_catchError<Props extends Record<string, unknown>>(
|
|
|
84
84
|
if (!isAppRouterDocument()) {
|
|
85
85
|
throw new Error(
|
|
86
86
|
'`unstable_retry()` can only be used in the App Router. Use `reset()` in the Pages Router.',
|
|
87
|
-
)
|
|
87
|
+
)
|
|
88
88
|
}
|
|
89
89
|
if (!process.browser && typeof window === 'undefined') {
|
|
90
|
-
this.reset()
|
|
91
|
-
return
|
|
90
|
+
this.reset()
|
|
91
|
+
return
|
|
92
92
|
}
|
|
93
93
|
// Refresh FIRST, reset when it settles. Resetting immediately re-renders the children while the
|
|
94
94
|
// refresh response is still in flight; anything the user does in that window is wiped when the
|
|
95
95
|
// body swap lands, so a rapid retry-then-interact cycle loses the new state. Deferring the reset
|
|
96
96
|
// closes that window (if the swap remounted this boundary the setState is a no-op on an unmounted
|
|
97
97
|
// instance, which preact ignores). A failed refresh still resets.
|
|
98
|
-
const refreshed = routerRefresh()
|
|
98
|
+
const refreshed = routerRefresh()
|
|
99
99
|
void Promise.resolve(refreshed)
|
|
100
100
|
.catch(() => undefined)
|
|
101
|
-
.then(() => this.reset())
|
|
102
|
-
}
|
|
101
|
+
.then(() => this.reset())
|
|
102
|
+
}
|
|
103
103
|
|
|
104
104
|
render(props: Props & CatchErrorProps, state: CatchErrorState) {
|
|
105
105
|
if (state.hasError) {
|
|
106
106
|
// Strip the internal handoff marker; the user's fallback gets the
|
|
107
107
|
// component's own props (title, clearError, ...), matching Next.
|
|
108
|
-
const { [ISLAND_BOUNDARY_ERROR_PROP]: _marker, ...rest } = props
|
|
108
|
+
const { [ISLAND_BOUNDARY_ERROR_PROP]: _marker, ...rest } = props
|
|
109
109
|
return Fallback(rest as unknown as Props, {
|
|
110
110
|
error: state.error,
|
|
111
111
|
reset: this.reset,
|
|
112
112
|
unstable_retry: this.unstable_retry,
|
|
113
|
-
})
|
|
113
|
+
})
|
|
114
114
|
}
|
|
115
|
-
return h(Fragment, { key: state.version }, props.children)
|
|
115
|
+
return h(Fragment, { key: state.version }, props.children)
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
118
|
// Opt in to the renderer's island error-boundary handoff (see above).
|
|
119
|
-
(CatchError as unknown as Record<symbol, boolean>)[islandErrorBoundarySymbol] = true
|
|
120
|
-
return CatchError
|
|
119
|
+
;(CatchError as unknown as Record<symbol, boolean>)[islandErrorBoundarySymbol] = true
|
|
120
|
+
return CatchError
|
|
121
121
|
}
|
|
122
122
|
|
|
123
123
|
function isAppRouterDocument(): boolean {
|
|
124
|
-
if (typeof document === 'undefined') return false
|
|
125
|
-
return Boolean(document.querySelector('pnext-layout, [data-pnext-root]'))
|
|
124
|
+
if (typeof document === 'undefined') return false
|
|
125
|
+
return Boolean(document.querySelector('pnext-layout, [data-pnext-root]'))
|
|
126
126
|
}
|
|
127
127
|
|
|
128
128
|
function routerRefresh() {
|
|
129
129
|
const global = window as unknown as {
|
|
130
|
-
__PNEXT_ROUTER__?: { refresh?: () => Promise<void> | void }
|
|
131
|
-
}
|
|
132
|
-
return global.__PNEXT_ROUTER__?.refresh?.()
|
|
130
|
+
__PNEXT_ROUTER__?: { refresh?: () => Promise<void> | void }
|
|
131
|
+
}
|
|
132
|
+
return global.__PNEXT_ROUTER__?.refresh?.()
|
|
133
133
|
}
|
|
134
134
|
|
|
135
135
|
function normalizeBoundaryError(error: unknown): unknown {
|
|
@@ -137,12 +137,12 @@ function normalizeBoundaryError(error: unknown): unknown {
|
|
|
137
137
|
// `throw undefined`/`null` arrives here re-thrown as a tagged Error so it
|
|
138
138
|
// survived preact's own `e.then` suspense check without crashing. Unwrap
|
|
139
139
|
// back to the raw value Next passes to error UIs.
|
|
140
|
-
const untagged = untagPrimitiveThrow(error)
|
|
141
|
-
if (untagged !== error) return untagged
|
|
140
|
+
const untagged = untagPrimitiveThrow(error)
|
|
141
|
+
if (untagged !== error) return untagged
|
|
142
142
|
if (error instanceof Error) {
|
|
143
143
|
// Fallback for any crash that slips through un-tagged (defense in depth).
|
|
144
|
-
if (error.message === "Cannot read properties of undefined (reading 'then')") return undefined
|
|
145
|
-
if (error.message === "Cannot read properties of null (reading 'then')") return null
|
|
144
|
+
if (error.message === "Cannot read properties of undefined (reading 'then')") return undefined
|
|
145
|
+
if (error.message === "Cannot read properties of null (reading 'then')") return null
|
|
146
146
|
}
|
|
147
|
-
return error
|
|
147
|
+
return error
|
|
148
148
|
}
|