@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/api/server.ts
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
import { safeDecode } from '../utils/decode'
|
|
2
|
-
import { getProxyExtensions, getProxyResponseProtocol } from '../extensions'
|
|
3
|
-
import { getBasePathPrefix } from '../routing/href'
|
|
1
|
+
import { safeDecode } from '../utils/decode'
|
|
2
|
+
import { getProxyExtensions, getProxyResponseProtocol } from '../extensions'
|
|
3
|
+
import { getBasePathPrefix } from '../routing/href'
|
|
4
4
|
import type {
|
|
5
5
|
NextRequest as NextRequestLike,
|
|
6
6
|
NextRequestCookie,
|
|
7
7
|
NextRequestCookies,
|
|
8
8
|
NextURL,
|
|
9
9
|
NextResponseCookies,
|
|
10
|
-
} from '../types'
|
|
10
|
+
} from '../types'
|
|
11
11
|
|
|
12
|
-
const nextResponseMetaSymbol = Symbol.for('pnext.nextResponse')
|
|
12
|
+
const nextResponseMetaSymbol = Symbol.for('pnext.nextResponse')
|
|
13
13
|
|
|
14
|
-
export type { NextFetchEvent } from '../types'
|
|
14
|
+
export type { NextFetchEvent } from '../types'
|
|
15
15
|
|
|
16
16
|
export interface NextRequestGeo {
|
|
17
|
-
city?: string
|
|
18
|
-
country?: string
|
|
19
|
-
region?: string
|
|
20
|
-
latitude?: string
|
|
21
|
-
longitude?: string
|
|
17
|
+
city?: string
|
|
18
|
+
country?: string
|
|
19
|
+
region?: string
|
|
20
|
+
latitude?: string
|
|
21
|
+
longitude?: string
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
/**
|
|
@@ -27,79 +27,79 @@ export interface NextRequestGeo {
|
|
|
27
27
|
* plain Requests via toNextRequest().
|
|
28
28
|
*/
|
|
29
29
|
export class NextRequest extends Request implements NextRequestLike {
|
|
30
|
-
readonly cookies: NextRequestCookies
|
|
31
|
-
readonly nextUrl: NextURL
|
|
32
|
-
readonly geo?: NextRequestGeo
|
|
33
|
-
readonly ip?: string
|
|
30
|
+
readonly cookies: NextRequestCookies
|
|
31
|
+
readonly nextUrl: NextURL
|
|
32
|
+
readonly geo?: NextRequestGeo
|
|
33
|
+
readonly ip?: string
|
|
34
34
|
|
|
35
35
|
constructor(input: RequestInfo | URL, init?: RequestInit) {
|
|
36
|
-
super(input, init)
|
|
37
|
-
this.cookies = requestCookies(this.headers)
|
|
38
|
-
this.nextUrl = createNextUrl(this.url)
|
|
36
|
+
super(input, init)
|
|
37
|
+
this.cookies = requestCookies(this.headers)
|
|
38
|
+
this.nextUrl = createNextUrl(this.url)
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
export type NextResponseKind = 'next' | 'rewrite'
|
|
42
|
+
export type NextResponseKind = 'next' | 'rewrite'
|
|
43
43
|
|
|
44
44
|
export interface NextResponseMeta {
|
|
45
|
-
kind: NextResponseKind
|
|
46
|
-
url?: string
|
|
47
|
-
requestHeaders?: Headers
|
|
45
|
+
kind: NextResponseKind
|
|
46
|
+
url?: string
|
|
47
|
+
requestHeaders?: Headers
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
type NextResponseInit = ResponseInit & {
|
|
51
51
|
request?: {
|
|
52
|
-
headers?: HeadersInit
|
|
53
|
-
}
|
|
54
|
-
}
|
|
52
|
+
headers?: HeadersInit
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
55
|
|
|
56
56
|
export class NextResponse extends Response {
|
|
57
|
-
readonly cookies: NextResponseCookies
|
|
58
|
-
readonly [nextResponseMetaSymbol]?: NextResponseMeta
|
|
57
|
+
readonly cookies: NextResponseCookies
|
|
58
|
+
readonly [nextResponseMetaSymbol]?: NextResponseMeta
|
|
59
59
|
|
|
60
60
|
constructor(body?: BodyInit | null, init?: ResponseInit) {
|
|
61
|
-
super(body, init)
|
|
62
|
-
this.cookies = responseCookies(this.headers)
|
|
61
|
+
super(body, init)
|
|
62
|
+
this.cookies = responseCookies(this.headers)
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
static json<JsonBody>(body: JsonBody, init?: ResponseInit) {
|
|
66
|
-
const headers = new Headers(init?.headers)
|
|
67
|
-
if (!headers.has('content-type')) headers.set('content-type', 'application/json')
|
|
66
|
+
const headers = new Headers(init?.headers)
|
|
67
|
+
if (!headers.has('content-type')) headers.set('content-type', 'application/json')
|
|
68
68
|
return new NextResponse(JSON.stringify(body), {
|
|
69
69
|
...init,
|
|
70
70
|
headers,
|
|
71
|
-
})
|
|
71
|
+
})
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
static next(init?: NextResponseInit) {
|
|
75
|
-
const response = new NextResponse(null, init)
|
|
76
|
-
response.headers.set(getProxyResponseProtocol().nextHeader, '1')
|
|
77
|
-
defineMeta(response, { kind: 'next', ...requestMeta(init) })
|
|
78
|
-
return response
|
|
75
|
+
const response = new NextResponse(null, init)
|
|
76
|
+
response.headers.set(getProxyResponseProtocol().nextHeader, '1')
|
|
77
|
+
defineMeta(response, { kind: 'next', ...requestMeta(init) })
|
|
78
|
+
return response
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
static rewrite(url: string | URL, init?: NextResponseInit) {
|
|
82
|
-
const response = new NextResponse(null, init)
|
|
83
|
-
response.headers.set(getProxyResponseProtocol().rewriteHeader, String(url))
|
|
84
|
-
defineMeta(response, { kind: 'rewrite', url: String(url), ...requestMeta(init) })
|
|
85
|
-
return response
|
|
82
|
+
const response = new NextResponse(null, init)
|
|
83
|
+
response.headers.set(getProxyResponseProtocol().rewriteHeader, String(url))
|
|
84
|
+
defineMeta(response, { kind: 'rewrite', url: String(url), ...requestMeta(init) })
|
|
85
|
+
return response
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
static redirect(url: string | URL, init: number | ResponseInit = 307) {
|
|
89
|
-
const responseInit = typeof init === 'number' ? { status: init } : init
|
|
90
|
-
const headers = new Headers(responseInit.headers)
|
|
91
|
-
headers.set('location', String(url))
|
|
89
|
+
const responseInit = typeof init === 'number' ? { status: init } : init
|
|
90
|
+
const headers = new Headers(responseInit.headers)
|
|
91
|
+
headers.set('location', String(url))
|
|
92
92
|
return new NextResponse(null, {
|
|
93
93
|
...responseInit,
|
|
94
94
|
status: responseInit.status ?? 307,
|
|
95
95
|
headers,
|
|
96
|
-
})
|
|
96
|
+
})
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
|
|
100
100
|
export function toNextRequest(request: Request): NextRequestLike {
|
|
101
|
-
const nextRequest = request as Partial<NextRequestLike
|
|
102
|
-
if (nextRequest.cookies && nextRequest.nextUrl) return request as NextRequestLike
|
|
101
|
+
const nextRequest = request as Partial<NextRequestLike>
|
|
102
|
+
if (nextRequest.cookies && nextRequest.nextUrl) return request as NextRequestLike
|
|
103
103
|
|
|
104
104
|
Object.defineProperties(request, {
|
|
105
105
|
cookies: {
|
|
@@ -112,37 +112,39 @@ export function toNextRequest(request: Request): NextRequestLike {
|
|
|
112
112
|
enumerable: true,
|
|
113
113
|
value: createNextUrl(request.url),
|
|
114
114
|
},
|
|
115
|
-
})
|
|
116
|
-
return request as NextRequestLike
|
|
115
|
+
})
|
|
116
|
+
return request as NextRequestLike
|
|
117
117
|
}
|
|
118
118
|
|
|
119
119
|
export function nextResponseMeta(response: Response): NextResponseMeta | undefined {
|
|
120
|
-
const meta = (response as Response & { [nextResponseMetaSymbol]?: NextResponseMeta })[
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
return
|
|
120
|
+
const meta = (response as Response & { [nextResponseMetaSymbol]?: NextResponseMeta })[
|
|
121
|
+
nextResponseMetaSymbol
|
|
122
|
+
]
|
|
123
|
+
if (meta) return meta
|
|
124
|
+
|
|
125
|
+
const protocol = getProxyResponseProtocol()
|
|
126
|
+
const rewrite = response.headers.get(protocol.rewriteHeader)
|
|
127
|
+
if (rewrite) return { kind: 'rewrite', url: rewrite }
|
|
128
|
+
if (response.headers.get(protocol.nextHeader)) return { kind: 'next' }
|
|
129
|
+
return undefined
|
|
128
130
|
}
|
|
129
131
|
|
|
130
132
|
export function copyMiddlewareHeaders(from: Response, to: Response) {
|
|
131
|
-
const internalHeaders = proxyInternalHeaders()
|
|
133
|
+
const internalHeaders = proxyInternalHeaders()
|
|
132
134
|
from.headers.forEach((value, key) => {
|
|
133
|
-
if (internalHeaders.has(key) || key === 'content-length' || key === 'set-cookie') return
|
|
135
|
+
if (internalHeaders.has(key) || key === 'content-length' || key === 'set-cookie') return
|
|
134
136
|
// Vary is merged, never overwritten: the middleware's vary tokens join the
|
|
135
137
|
// handler/page's own (both survive for CDN correctness). Every other header
|
|
136
138
|
// is the middleware's to set.
|
|
137
|
-
if (key === 'vary') mergeVaryInto(to.headers, value)
|
|
138
|
-
else to.headers.set(key, value)
|
|
139
|
-
})
|
|
140
|
-
const middlewareCookies = getSetCookie(from.headers)
|
|
141
|
-
if (middlewareCookies.length === 0) return
|
|
142
|
-
const responseCookies = getSetCookie(to.headers)
|
|
143
|
-
to.headers.delete('set-cookie')
|
|
144
|
-
for (const cookie of middlewareCookies) to.headers.append('set-cookie', cookie)
|
|
145
|
-
for (const cookie of responseCookies) to.headers.append('set-cookie', cookie)
|
|
139
|
+
if (key === 'vary') mergeVaryInto(to.headers, value)
|
|
140
|
+
else to.headers.set(key, value)
|
|
141
|
+
})
|
|
142
|
+
const middlewareCookies = getSetCookie(from.headers)
|
|
143
|
+
if (middlewareCookies.length === 0) return
|
|
144
|
+
const responseCookies = getSetCookie(to.headers)
|
|
145
|
+
to.headers.delete('set-cookie')
|
|
146
|
+
for (const cookie of middlewareCookies) to.headers.append('set-cookie', cookie)
|
|
147
|
+
for (const cookie of responseCookies) to.headers.append('set-cookie', cookie)
|
|
146
148
|
}
|
|
147
149
|
|
|
148
150
|
// Forward a middleware response's non-internal headers onto the DOWNSTREAM REQUEST (in addition to
|
|
@@ -150,42 +152,48 @@ export function copyMiddlewareHeaders(from: Response, to: Response) {
|
|
|
150
152
|
// the final response, so NextResponse.next({ headers }) values are visible to route handlers and
|
|
151
153
|
// pages as request headers. set-cookie is handled separately and never forwarded here.
|
|
152
154
|
export function forwardMiddlewareRequestHeaders(from: Response, request: Request): Request {
|
|
153
|
-
const additions: [string, string][] = []
|
|
154
|
-
const internalHeaders = proxyInternalHeaders()
|
|
155
|
+
const additions: [string, string][] = []
|
|
156
|
+
const internalHeaders = proxyInternalHeaders()
|
|
155
157
|
from.headers.forEach((value, key) => {
|
|
156
|
-
if (internalHeaders.has(key) || key === 'content-length' || key === 'set-cookie') return
|
|
157
|
-
additions.push([key, value])
|
|
158
|
-
})
|
|
159
|
-
if (additions.length === 0) return request
|
|
160
|
-
const headers = new Headers(request.headers)
|
|
161
|
-
for (const [key, value] of additions) headers.set(key, value)
|
|
162
|
-
return new Request(request, { headers })
|
|
158
|
+
if (internalHeaders.has(key) || key === 'content-length' || key === 'set-cookie') return
|
|
159
|
+
additions.push([key, value])
|
|
160
|
+
})
|
|
161
|
+
if (additions.length === 0) return request
|
|
162
|
+
const headers = new Headers(request.headers)
|
|
163
|
+
for (const [key, value] of additions) headers.set(key, value)
|
|
164
|
+
return new Request(request, { headers })
|
|
163
165
|
}
|
|
164
166
|
|
|
165
167
|
function proxyInternalHeaders() {
|
|
166
|
-
const protocol = getProxyResponseProtocol()
|
|
167
|
-
return new Set([protocol.nextHeader, protocol.rewriteHeader])
|
|
168
|
+
const protocol = getProxyResponseProtocol()
|
|
169
|
+
return new Set([protocol.nextHeader, protocol.rewriteHeader])
|
|
168
170
|
}
|
|
169
171
|
|
|
170
172
|
// Append `value`'s comma-separated tokens to the response's Vary, preserving
|
|
171
173
|
// existing tokens and never duplicating (case-insensitive).
|
|
172
174
|
function mergeVaryInto(headers: Headers, value: string) {
|
|
173
|
-
const existing = headers.get('vary')
|
|
175
|
+
const existing = headers.get('vary')
|
|
174
176
|
const seen = new Set(
|
|
175
177
|
(existing ?? '')
|
|
176
178
|
.split(',')
|
|
177
179
|
.map(token => token.trim().toLowerCase())
|
|
178
180
|
.filter(Boolean),
|
|
179
|
-
)
|
|
181
|
+
)
|
|
180
182
|
const merged = existing
|
|
181
|
-
? existing
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
183
|
+
? existing
|
|
184
|
+
.split(',')
|
|
185
|
+
.map(token => token.trim())
|
|
186
|
+
.filter(Boolean)
|
|
187
|
+
: []
|
|
188
|
+
for (const token of value
|
|
189
|
+
.split(',')
|
|
190
|
+
.map(part => part.trim())
|
|
191
|
+
.filter(Boolean)) {
|
|
192
|
+
if (seen.has(token.toLowerCase())) continue
|
|
193
|
+
seen.add(token.toLowerCase())
|
|
194
|
+
merged.push(token)
|
|
187
195
|
}
|
|
188
|
-
if (merged.length > 0) headers.set('vary', merged.join(', '))
|
|
196
|
+
if (merged.length > 0) headers.set('vary', merged.join(', '))
|
|
189
197
|
}
|
|
190
198
|
|
|
191
199
|
function defineMeta(response: NextResponse, meta: NextResponseMeta) {
|
|
@@ -193,111 +201,111 @@ function defineMeta(response: NextResponse, meta: NextResponseMeta) {
|
|
|
193
201
|
configurable: false,
|
|
194
202
|
enumerable: false,
|
|
195
203
|
value: meta,
|
|
196
|
-
})
|
|
204
|
+
})
|
|
197
205
|
}
|
|
198
206
|
|
|
199
207
|
function requestMeta(init: NextResponseInit | undefined): Pick<NextResponseMeta, 'requestHeaders'> {
|
|
200
|
-
return init?.request?.headers ? { requestHeaders: new Headers(init.request.headers) } : {}
|
|
208
|
+
return init?.request?.headers ? { requestHeaders: new Headers(init.request.headers) } : {}
|
|
201
209
|
}
|
|
202
210
|
|
|
203
211
|
function createNextUrl(url: string | URL): NextURL {
|
|
204
|
-
const nextUrl = new URL(url) as NextURL
|
|
212
|
+
const nextUrl = new URL(url) as NextURL
|
|
205
213
|
Object.defineProperty(nextUrl, 'clone', {
|
|
206
214
|
configurable: true,
|
|
207
215
|
enumerable: false,
|
|
208
216
|
value: () => createNextUrl(nextUrl.href),
|
|
209
|
-
})
|
|
217
|
+
})
|
|
210
218
|
// Next's NextURL exposes basePath (the configured prefix, '' when unset) and
|
|
211
219
|
// locale ('' without i18n). The request URL reaching middleware already has
|
|
212
220
|
// any basePath stripped, so pathname stays app-relative while basePath holds
|
|
213
221
|
// the prefix. Defaulting these to strings (never undefined) matches Next, so
|
|
214
222
|
// `req.nextUrl.basePath` reads as a falsy '' rather than the string
|
|
215
223
|
// "undefined" when forwarded through a header.
|
|
216
|
-
nextUrl.basePath = getBasePathPrefix()
|
|
217
|
-
nextUrl.locale = getProxyExtensions().locale(nextUrl)
|
|
218
|
-
return nextUrl
|
|
224
|
+
nextUrl.basePath = getBasePathPrefix()
|
|
225
|
+
nextUrl.locale = getProxyExtensions().locale(nextUrl)
|
|
226
|
+
return nextUrl
|
|
219
227
|
}
|
|
220
228
|
|
|
221
229
|
function requestCookies(headers: Headers): NextRequestCookies {
|
|
222
|
-
let cookies = parseCookies(headers.get('cookie') ?? '')
|
|
230
|
+
let cookies = parseCookies(headers.get('cookie') ?? '')
|
|
223
231
|
const sync = () => {
|
|
224
|
-
const header = requestCookieHeader(cookies)
|
|
225
|
-
if (header) headers.set('cookie', header)
|
|
226
|
-
else headers.delete('cookie')
|
|
227
|
-
}
|
|
232
|
+
const header = requestCookieHeader(cookies)
|
|
233
|
+
if (header) headers.set('cookie', header)
|
|
234
|
+
else headers.delete('cookie')
|
|
235
|
+
}
|
|
228
236
|
return {
|
|
229
237
|
get(name) {
|
|
230
|
-
return cookies.find(cookie => cookie.name === name)
|
|
238
|
+
return cookies.find(cookie => cookie.name === name)
|
|
231
239
|
},
|
|
232
240
|
getAll(name) {
|
|
233
|
-
return name ? cookies.filter(cookie => cookie.name === name) : [...cookies]
|
|
241
|
+
return name ? cookies.filter(cookie => cookie.name === name) : [...cookies]
|
|
234
242
|
},
|
|
235
243
|
has(name) {
|
|
236
|
-
return cookies.some(cookie => cookie.name === name)
|
|
244
|
+
return cookies.some(cookie => cookie.name === name)
|
|
237
245
|
},
|
|
238
246
|
set(name, value) {
|
|
239
|
-
cookies = [...cookies.filter(cookie => cookie.name !== name), { name, value }]
|
|
240
|
-
sync()
|
|
241
|
-
return this
|
|
247
|
+
cookies = [...cookies.filter(cookie => cookie.name !== name), { name, value }]
|
|
248
|
+
sync()
|
|
249
|
+
return this
|
|
242
250
|
},
|
|
243
251
|
delete(name) {
|
|
244
|
-
const existed = cookies.some(cookie => cookie.name === name)
|
|
245
|
-
cookies = cookies.filter(cookie => cookie.name !== name)
|
|
246
|
-
sync()
|
|
247
|
-
return existed
|
|
252
|
+
const existed = cookies.some(cookie => cookie.name === name)
|
|
253
|
+
cookies = cookies.filter(cookie => cookie.name !== name)
|
|
254
|
+
sync()
|
|
255
|
+
return existed
|
|
248
256
|
},
|
|
249
257
|
clear() {
|
|
250
|
-
cookies = []
|
|
251
|
-
sync()
|
|
258
|
+
cookies = []
|
|
259
|
+
sync()
|
|
252
260
|
},
|
|
253
|
-
}
|
|
261
|
+
}
|
|
254
262
|
}
|
|
255
263
|
|
|
256
264
|
function responseCookies(headers: Headers): NextResponseCookies {
|
|
257
265
|
return {
|
|
258
|
-
set(
|
|
266
|
+
set(
|
|
267
|
+
nameOrOptions: string | ResponseCookie,
|
|
268
|
+
value?: string,
|
|
269
|
+
options: ResponseCookieOptions = {},
|
|
270
|
+
) {
|
|
259
271
|
const cookie: ResponseCookie =
|
|
260
272
|
typeof nameOrOptions === 'string'
|
|
261
273
|
? { ...options, name: nameOrOptions, value: value ?? '' }
|
|
262
|
-
: nameOrOptions
|
|
263
|
-
headers.append('set-cookie', serializeCookie(cookie.name, cookie.value, cookie))
|
|
264
|
-
return this
|
|
274
|
+
: nameOrOptions
|
|
275
|
+
headers.append('set-cookie', serializeCookie(cookie.name, cookie.value, cookie))
|
|
276
|
+
return this
|
|
265
277
|
},
|
|
266
278
|
delete(name) {
|
|
267
|
-
headers.append('set-cookie', serializeCookie(name, '', { maxAge: 0, path: '/' }))
|
|
268
|
-
return this
|
|
279
|
+
headers.append('set-cookie', serializeCookie(name, '', { maxAge: 0, path: '/' }))
|
|
280
|
+
return this
|
|
269
281
|
},
|
|
270
|
-
}
|
|
282
|
+
}
|
|
271
283
|
}
|
|
272
284
|
|
|
273
285
|
interface ResponseCookieOptions {
|
|
274
|
-
path?: string
|
|
275
|
-
maxAge?: number
|
|
276
|
-
httpOnly?: boolean
|
|
277
|
-
secure?: boolean
|
|
278
|
-
sameSite?: 'strict' | 'lax' | 'none'
|
|
286
|
+
path?: string
|
|
287
|
+
maxAge?: number
|
|
288
|
+
httpOnly?: boolean
|
|
289
|
+
secure?: boolean
|
|
290
|
+
sameSite?: 'strict' | 'lax' | 'none'
|
|
279
291
|
}
|
|
280
292
|
|
|
281
293
|
interface ResponseCookie extends ResponseCookieOptions {
|
|
282
|
-
name: string
|
|
283
|
-
value: string
|
|
294
|
+
name: string
|
|
295
|
+
value: string
|
|
284
296
|
}
|
|
285
297
|
|
|
286
|
-
function serializeCookie(
|
|
287
|
-
name
|
|
288
|
-
value: string,
|
|
289
|
-
options: ResponseCookieOptions,
|
|
290
|
-
) {
|
|
291
|
-
const parts = [`${encodeURIComponent(name)}=${encodeURIComponent(value)}`];
|
|
298
|
+
function serializeCookie(name: string, value: string, options: ResponseCookieOptions) {
|
|
299
|
+
const parts = [`${encodeURIComponent(name)}=${encodeURIComponent(value)}`]
|
|
292
300
|
// Next's ResponseCookies default the cookie path to '/' when unspecified,
|
|
293
301
|
// so a route handler's Set-Cookie is visible to sibling routes/middleware
|
|
294
302
|
// (not scoped to the request path). Match that default.
|
|
295
|
-
parts.push(`Path=${options.path ?? '/'}`)
|
|
296
|
-
if (options.maxAge !== undefined) parts.push(`Max-Age=${options.maxAge}`)
|
|
297
|
-
if (options.httpOnly) parts.push('HttpOnly')
|
|
298
|
-
if (options.secure) parts.push('Secure')
|
|
299
|
-
if (options.sameSite) parts.push(`SameSite=${options.sameSite}`)
|
|
300
|
-
return parts.join('; ')
|
|
303
|
+
parts.push(`Path=${options.path ?? '/'}`)
|
|
304
|
+
if (options.maxAge !== undefined) parts.push(`Max-Age=${options.maxAge}`)
|
|
305
|
+
if (options.httpOnly) parts.push('HttpOnly')
|
|
306
|
+
if (options.secure) parts.push('Secure')
|
|
307
|
+
if (options.sameSite) parts.push(`SameSite=${options.sameSite}`)
|
|
308
|
+
return parts.join('; ')
|
|
301
309
|
}
|
|
302
310
|
|
|
303
311
|
export function parseCookies(header: string): NextRequestCookie[] {
|
|
@@ -306,18 +314,18 @@ export function parseCookies(header: string): NextRequestCookie[] {
|
|
|
306
314
|
.map(part => part.trim())
|
|
307
315
|
.filter(Boolean)
|
|
308
316
|
.map(part => {
|
|
309
|
-
const [key = '', ...rest] = part.split('=')
|
|
310
|
-
return { name: safeDecode(key), value: safeDecode(rest.join('=')) }
|
|
311
|
-
})
|
|
317
|
+
const [key = '', ...rest] = part.split('=')
|
|
318
|
+
return { name: safeDecode(key), value: safeDecode(rest.join('=')) }
|
|
319
|
+
})
|
|
312
320
|
}
|
|
313
321
|
|
|
314
322
|
export function requestCookieHeader(cookies: NextRequestCookie[]) {
|
|
315
323
|
return cookies
|
|
316
324
|
.map(cookie => `${encodeURIComponent(cookie.name)}=${encodeURIComponent(cookie.value)}`)
|
|
317
|
-
.join('; ')
|
|
325
|
+
.join('; ')
|
|
318
326
|
}
|
|
319
327
|
|
|
320
328
|
export function getSetCookie(headers: Headers) {
|
|
321
|
-
const withSetCookie = headers as Headers & { getSetCookie?: () => string[] }
|
|
322
|
-
return withSetCookie.getSetCookie?.() ?? []
|
|
329
|
+
const withSetCookie = headers as Headers & { getSetCookie?: () => string[] }
|
|
330
|
+
return withSetCookie.getSetCookie?.() ?? []
|
|
323
331
|
}
|
package/src/api/suspense.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type { ComponentChildren } from 'preact'
|
|
1
|
+
import type { ComponentChildren } from 'preact'
|
|
2
2
|
|
|
3
3
|
export interface SuspenseProps {
|
|
4
|
-
fallback?: ComponentChildren
|
|
5
|
-
children?: ComponentChildren
|
|
4
|
+
fallback?: ComponentChildren
|
|
5
|
+
children?: ComponentChildren
|
|
6
6
|
}
|
|
7
7
|
|
|
8
8
|
/**
|
|
@@ -12,5 +12,5 @@ export interface SuspenseProps {
|
|
|
12
12
|
* it passes children through.
|
|
13
13
|
*/
|
|
14
14
|
export function Suspense(props: SuspenseProps): ComponentChildren {
|
|
15
|
-
return props.children ?? null
|
|
15
|
+
return props.children ?? null
|
|
16
16
|
}
|