@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
|
@@ -2,44 +2,54 @@
|
|
|
2
2
|
// Ported near-verbatim from Next 16.3's router-utils/typegen.ts (non-strict
|
|
3
3
|
// variants) so the generated output matches the exact substrings the
|
|
4
4
|
// typed-routes / typed-routes-validator e2e suites assert on. Compat-only.
|
|
5
|
-
import type { ManifestRouteInfo, RouteTypesManifest } from './manifest'
|
|
5
|
+
import type { ManifestRouteInfo, RouteTypesManifest } from './manifest'
|
|
6
6
|
|
|
7
7
|
function isDynamicRoute(route: string): boolean {
|
|
8
|
-
return /\[.+\]/.test(route)
|
|
8
|
+
return /\[.+\]/.test(route)
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
function generateRouteTypes(manifest: RouteTypesManifest): string {
|
|
12
|
-
const appRoutes = Object.keys(manifest.appRoutes).sort()
|
|
13
|
-
const pageRoutes = Object.keys(manifest.pageRoutes).sort()
|
|
14
|
-
const layoutRoutes = Object.keys(manifest.layoutRoutes).sort()
|
|
15
|
-
const redirectRoutes = Object.keys(manifest.redirectRoutes).sort()
|
|
16
|
-
const rewriteRoutes = Object.keys(manifest.rewriteRoutes).sort()
|
|
17
|
-
const appRouteHandlerRoutes = Object.keys(manifest.appRouteHandlerRoutes).sort()
|
|
18
|
-
const hasAppRouteHandlers = appRouteHandlerRoutes.length > 0
|
|
19
|
-
|
|
20
|
-
const union = (list: string[]) => list.map(route => JSON.stringify(route)).join(' | ')
|
|
21
|
-
|
|
22
|
-
let result = ''
|
|
23
|
-
result +=
|
|
12
|
+
const appRoutes = Object.keys(manifest.appRoutes).sort()
|
|
13
|
+
const pageRoutes = Object.keys(manifest.pageRoutes).sort()
|
|
14
|
+
const layoutRoutes = Object.keys(manifest.layoutRoutes).sort()
|
|
15
|
+
const redirectRoutes = Object.keys(manifest.redirectRoutes).sort()
|
|
16
|
+
const rewriteRoutes = Object.keys(manifest.rewriteRoutes).sort()
|
|
17
|
+
const appRouteHandlerRoutes = Object.keys(manifest.appRouteHandlerRoutes).sort()
|
|
18
|
+
const hasAppRouteHandlers = appRouteHandlerRoutes.length > 0
|
|
19
|
+
|
|
20
|
+
const union = (list: string[]) => list.map(route => JSON.stringify(route)).join(' | ')
|
|
21
|
+
|
|
22
|
+
let result = ''
|
|
23
|
+
result +=
|
|
24
|
+
appRoutes.length > 0 ? `type AppRoutes = ${union(appRoutes)}\n` : 'type AppRoutes = never\n'
|
|
24
25
|
if (hasAppRouteHandlers) {
|
|
25
|
-
result += `type AppRouteHandlerRoutes = ${union(appRouteHandlerRoutes)}\n
|
|
26
|
+
result += `type AppRouteHandlerRoutes = ${union(appRouteHandlerRoutes)}\n`
|
|
26
27
|
}
|
|
27
|
-
result += pageRoutes.length > 0 ? `type PageRoutes = ${union(pageRoutes)}\n` : 'type PageRoutes = never\n';
|
|
28
28
|
result +=
|
|
29
|
-
|
|
29
|
+
pageRoutes.length > 0 ? `type PageRoutes = ${union(pageRoutes)}\n` : 'type PageRoutes = never\n'
|
|
30
|
+
result +=
|
|
31
|
+
layoutRoutes.length > 0
|
|
32
|
+
? `type LayoutRoutes = ${union(layoutRoutes)}\n`
|
|
33
|
+
: 'type LayoutRoutes = never\n'
|
|
30
34
|
result +=
|
|
31
35
|
redirectRoutes.length > 0
|
|
32
36
|
? `type RedirectRoutes = ${union(redirectRoutes)}\n`
|
|
33
|
-
: 'type RedirectRoutes = never\n'
|
|
37
|
+
: 'type RedirectRoutes = never\n'
|
|
34
38
|
result +=
|
|
35
39
|
rewriteRoutes.length > 0
|
|
36
40
|
? `type RewriteRoutes = ${union(rewriteRoutes)}\n`
|
|
37
|
-
: 'type RewriteRoutes = never\n'
|
|
41
|
+
: 'type RewriteRoutes = never\n'
|
|
38
42
|
|
|
39
|
-
const routeUnionParts = [
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
+
const routeUnionParts = [
|
|
44
|
+
'AppRoutes',
|
|
45
|
+
'PageRoutes',
|
|
46
|
+
'LayoutRoutes',
|
|
47
|
+
'RedirectRoutes',
|
|
48
|
+
'RewriteRoutes',
|
|
49
|
+
]
|
|
50
|
+
if (hasAppRouteHandlers) routeUnionParts.push('AppRouteHandlerRoutes')
|
|
51
|
+
result += `type Routes = ${routeUnionParts.join(' | ')}\n`
|
|
52
|
+
return result
|
|
43
53
|
}
|
|
44
54
|
|
|
45
55
|
function generateParamTypes(manifest: RouteTypesManifest): string {
|
|
@@ -50,79 +60,79 @@ function generateParamTypes(manifest: RouteTypesManifest): string {
|
|
|
50
60
|
...manifest.layoutRoutes,
|
|
51
61
|
...manifest.redirectRoutes,
|
|
52
62
|
...manifest.rewriteRoutes,
|
|
53
|
-
}
|
|
63
|
+
}
|
|
54
64
|
|
|
55
|
-
let paramTypes = 'interface ParamMap {\n'
|
|
56
|
-
const sortedRoutes = Object.entries(allRoutes).sort(([a], [b]) => a.localeCompare(b))
|
|
65
|
+
let paramTypes = 'interface ParamMap {\n'
|
|
66
|
+
const sortedRoutes = Object.entries(allRoutes).sort(([a], [b]) => a.localeCompare(b))
|
|
57
67
|
for (const [route, routeInfo] of sortedRoutes) {
|
|
58
|
-
const groups = routeInfo.groups
|
|
68
|
+
const groups = routeInfo.groups
|
|
59
69
|
if (!isDynamicRoute(route) || Object.keys(groups ?? {}).length === 0) {
|
|
60
|
-
paramTypes += ` ${JSON.stringify(route)}: {}\n
|
|
61
|
-
continue
|
|
70
|
+
paramTypes += ` ${JSON.stringify(route)}: {}\n`
|
|
71
|
+
continue
|
|
62
72
|
}
|
|
63
|
-
let paramType = '{'
|
|
73
|
+
let paramType = '{'
|
|
64
74
|
for (const [key, group] of Object.entries(groups)) {
|
|
65
|
-
const escapedKey = JSON.stringify(key)
|
|
75
|
+
const escapedKey = JSON.stringify(key)
|
|
66
76
|
if (group.repeat) {
|
|
67
|
-
paramType += group.optional ? ` ${escapedKey}?: string[];` : ` ${escapedKey}: string[]
|
|
77
|
+
paramType += group.optional ? ` ${escapedKey}?: string[];` : ` ${escapedKey}: string[];`
|
|
68
78
|
} else {
|
|
69
|
-
paramType += group.optional ? ` ${escapedKey}?: string;` : ` ${escapedKey}: string
|
|
79
|
+
paramType += group.optional ? ` ${escapedKey}?: string;` : ` ${escapedKey}: string;`
|
|
70
80
|
}
|
|
71
81
|
}
|
|
72
|
-
paramType += ' }'
|
|
73
|
-
paramTypes += ` ${JSON.stringify(route)}: ${paramType}\n
|
|
82
|
+
paramType += ' }'
|
|
83
|
+
paramTypes += ` ${JSON.stringify(route)}: ${paramType}\n`
|
|
74
84
|
}
|
|
75
|
-
paramTypes += '}\n'
|
|
76
|
-
return paramTypes
|
|
85
|
+
paramTypes += '}\n'
|
|
86
|
+
return paramTypes
|
|
77
87
|
}
|
|
78
88
|
|
|
79
89
|
function generateLayoutSlotMap(manifest: RouteTypesManifest): string {
|
|
80
|
-
let slotMap = 'interface LayoutSlotMap {\n'
|
|
81
|
-
const sorted = Object.entries(manifest.layoutRoutes).sort(([a], [b]) => a.localeCompare(b))
|
|
90
|
+
let slotMap = 'interface LayoutSlotMap {\n'
|
|
91
|
+
const sorted = Object.entries(manifest.layoutRoutes).sort(([a], [b]) => a.localeCompare(b))
|
|
82
92
|
for (const [route, routeInfo] of sorted) {
|
|
83
|
-
const slots = [...routeInfo.slots].sort()
|
|
93
|
+
const slots = [...routeInfo.slots].sort()
|
|
84
94
|
slotMap +=
|
|
85
95
|
slots.length > 0
|
|
86
96
|
? ` ${JSON.stringify(route)}: ${slots.map(slot => JSON.stringify(slot)).join(' | ')}\n`
|
|
87
|
-
: ` ${JSON.stringify(route)}: never\n
|
|
97
|
+
: ` ${JSON.stringify(route)}: never\n`
|
|
88
98
|
}
|
|
89
|
-
slotMap += '}\n'
|
|
90
|
-
return slotMap
|
|
99
|
+
slotMap += '}\n'
|
|
100
|
+
return slotMap
|
|
91
101
|
}
|
|
92
102
|
|
|
93
103
|
function formatRouteToRouteType(route: string): { isDynamic: boolean; routeType: string } {
|
|
94
|
-
const isDynamic = isDynamicRoute(route)
|
|
95
|
-
let routeType = route
|
|
104
|
+
const isDynamic = isDynamicRoute(route)
|
|
105
|
+
let routeType = route
|
|
96
106
|
if (isDynamic) {
|
|
97
107
|
routeType = route
|
|
98
108
|
.split('/')
|
|
99
109
|
.map(part => {
|
|
100
110
|
if (part.startsWith('[') && part.endsWith(']')) {
|
|
101
|
-
if (part.startsWith('[[...') && part.endsWith(']]')) return '${OptionalCatchAllSlug<T>}'
|
|
102
|
-
if (part.startsWith('[...')) return '${CatchAllSlug<T>}'
|
|
103
|
-
return '${SafeSlug<T>}'
|
|
111
|
+
if (part.startsWith('[[...') && part.endsWith(']]')) return '${OptionalCatchAllSlug<T>}'
|
|
112
|
+
if (part.startsWith('[...')) return '${CatchAllSlug<T>}'
|
|
113
|
+
return '${SafeSlug<T>}'
|
|
104
114
|
}
|
|
105
|
-
return part
|
|
115
|
+
return part
|
|
106
116
|
})
|
|
107
|
-
.join('/')
|
|
117
|
+
.join('/')
|
|
108
118
|
}
|
|
109
|
-
return { isDynamic, routeType }
|
|
119
|
+
return { isDynamic, routeType }
|
|
110
120
|
}
|
|
111
121
|
|
|
112
122
|
function serializeRouteTypes(routeTypes: [routeType: string, cause: string][]): string {
|
|
113
|
-
routeTypes.sort(([a], [b]) => a.localeCompare(b))
|
|
114
|
-
let union = ''
|
|
123
|
+
routeTypes.sort(([a], [b]) => a.localeCompare(b))
|
|
124
|
+
let union = ''
|
|
115
125
|
for (const [route, cause] of routeTypes) {
|
|
116
|
-
union += `\n | \`${route}\` // ${cause}
|
|
126
|
+
union += `\n | \`${route}\` // ${cause}`
|
|
117
127
|
}
|
|
118
|
-
return union
|
|
128
|
+
return union
|
|
119
129
|
}
|
|
120
130
|
|
|
121
131
|
export function generateRouteTypesFile(manifest: RouteTypesManifest): string {
|
|
122
|
-
const routeTypes = generateRouteTypes(manifest)
|
|
123
|
-
const paramTypes = generateParamTypes(manifest)
|
|
124
|
-
const layoutSlotMap = generateLayoutSlotMap(manifest)
|
|
125
|
-
const hasAppRouteHandlers = Object.keys(manifest.appRouteHandlerRoutes).length > 0
|
|
132
|
+
const routeTypes = generateRouteTypes(manifest)
|
|
133
|
+
const paramTypes = generateParamTypes(manifest)
|
|
134
|
+
const layoutSlotMap = generateLayoutSlotMap(manifest)
|
|
135
|
+
const hasAppRouteHandlers = Object.keys(manifest.appRouteHandlerRoutes).length > 0
|
|
126
136
|
|
|
127
137
|
const routeExports = [
|
|
128
138
|
'AppRoutes',
|
|
@@ -131,9 +141,9 @@ export function generateRouteTypesFile(manifest: RouteTypesManifest): string {
|
|
|
131
141
|
'RedirectRoutes',
|
|
132
142
|
'RewriteRoutes',
|
|
133
143
|
'ParamMap',
|
|
134
|
-
]
|
|
135
|
-
if (hasAppRouteHandlers) routeExports.push('AppRouteHandlerRoutes')
|
|
136
|
-
const exportStatement = `export type { ${routeExports.join(', ')} }
|
|
144
|
+
]
|
|
145
|
+
if (hasAppRouteHandlers) routeExports.push('AppRouteHandlerRoutes')
|
|
146
|
+
const exportStatement = `export type { ${routeExports.join(', ')} }`
|
|
137
147
|
|
|
138
148
|
const routeContextInterface = hasAppRouteHandlers
|
|
139
149
|
? `
|
|
@@ -151,7 +161,7 @@ export function generateRouteTypesFile(manifest: RouteTypesManifest): string {
|
|
|
151
161
|
interface RouteContext<AppRouteHandlerRoute extends AppRouteHandlerRoutes> {
|
|
152
162
|
params: Promise<ParamMap[AppRouteHandlerRoute]>
|
|
153
163
|
}`
|
|
154
|
-
: ''
|
|
164
|
+
: ''
|
|
155
165
|
|
|
156
166
|
return `// This file is generated automatically by Next.js
|
|
157
167
|
// Do not edit this file manually
|
|
@@ -199,13 +209,13 @@ declare global {
|
|
|
199
209
|
[K in LayoutSlotMap[LayoutRoute]]: React.ReactNode
|
|
200
210
|
}${routeContextInterface}
|
|
201
211
|
}
|
|
202
|
-
|
|
212
|
+
`
|
|
203
213
|
}
|
|
204
214
|
|
|
205
215
|
export function generateLinkTypesFile(manifest: RouteTypesManifest): string {
|
|
206
|
-
const visited = new Set<string>()
|
|
207
|
-
const staticRouteTypes: [routeType: string, cause: string][] = []
|
|
208
|
-
const dynamicRouteTypes: [routeType: string, cause: string][] = []
|
|
216
|
+
const visited = new Set<string>()
|
|
217
|
+
const staticRouteTypes: [routeType: string, cause: string][] = []
|
|
218
|
+
const dynamicRouteTypes: [routeType: string, cause: string][] = []
|
|
209
219
|
|
|
210
220
|
for (const routeMap of [
|
|
211
221
|
manifest.appRoutes,
|
|
@@ -215,25 +225,25 @@ export function generateLinkTypesFile(manifest: RouteTypesManifest): string {
|
|
|
215
225
|
manifest.appRouteHandlerRoutes,
|
|
216
226
|
]) {
|
|
217
227
|
for (const route in routeMap) {
|
|
218
|
-
if (visited.has(route)) continue
|
|
219
|
-
visited.add(route)
|
|
220
|
-
const { isDynamic, routeType } = formatRouteToRouteType(route)
|
|
221
|
-
const cause = routeMap[route]!.path
|
|
222
|
-
(isDynamic ? dynamicRouteTypes : staticRouteTypes).push([routeType, cause])
|
|
228
|
+
if (visited.has(route)) continue
|
|
229
|
+
visited.add(route)
|
|
230
|
+
const { isDynamic, routeType } = formatRouteToRouteType(route)
|
|
231
|
+
const cause = routeMap[route]!.path
|
|
232
|
+
;(isDynamic ? dynamicRouteTypes : staticRouteTypes).push([routeType, cause])
|
|
223
233
|
}
|
|
224
234
|
}
|
|
225
235
|
|
|
226
236
|
for (const filePath of manifest.pageApiRoutes) {
|
|
227
|
-
if (visited.has(filePath)) continue
|
|
228
|
-
visited.add(filePath)
|
|
229
|
-
const { isDynamic, routeType } = formatRouteToRouteType(filePath)
|
|
230
|
-
(isDynamic ? dynamicRouteTypes : staticRouteTypes).push([routeType, filePath])
|
|
237
|
+
if (visited.has(filePath)) continue
|
|
238
|
+
visited.add(filePath)
|
|
239
|
+
const { isDynamic, routeType } = formatRouteToRouteType(filePath)
|
|
240
|
+
;(isDynamic ? dynamicRouteTypes : staticRouteTypes).push([routeType, filePath])
|
|
231
241
|
}
|
|
232
242
|
|
|
233
|
-
const serializedStaticRouteTypes = serializeRouteTypes(staticRouteTypes)
|
|
234
|
-
const serializedDynamicRouteTypes = serializeRouteTypes(dynamicRouteTypes)
|
|
243
|
+
const serializedStaticRouteTypes = serializeRouteTypes(staticRouteTypes)
|
|
244
|
+
const serializedDynamicRouteTypes = serializeRouteTypes(dynamicRouteTypes)
|
|
235
245
|
const routeTypesFallback =
|
|
236
|
-
!serializedStaticRouteTypes && !serializedDynamicRouteTypes ? 'string & {}' : ''
|
|
246
|
+
!serializedStaticRouteTypes && !serializedDynamicRouteTypes ? 'string & {}' : ''
|
|
237
247
|
|
|
238
248
|
return `// This file is generated automatically by Next.js
|
|
239
249
|
// Do not edit this file manually
|
|
@@ -368,7 +378,7 @@ declare module 'next/form' {
|
|
|
368
378
|
|
|
369
379
|
export default function Form<RouteType>(props: FormProps<RouteType>): JSX.Element
|
|
370
380
|
}
|
|
371
|
-
|
|
381
|
+
`
|
|
372
382
|
}
|
|
373
383
|
|
|
374
384
|
/**
|
|
@@ -382,7 +392,12 @@ export function generateValidatorFile(
|
|
|
382
392
|
): string {
|
|
383
393
|
const generateValidations = (
|
|
384
394
|
paths: string[],
|
|
385
|
-
type:
|
|
395
|
+
type:
|
|
396
|
+
| 'AppPageConfig'
|
|
397
|
+
| 'PagesPageConfig'
|
|
398
|
+
| 'LayoutConfig'
|
|
399
|
+
| 'RouteHandlerConfig'
|
|
400
|
+
| 'ApiRouteConfig',
|
|
386
401
|
pathToRouteMap?: Map<string, string>,
|
|
387
402
|
) =>
|
|
388
403
|
paths
|
|
@@ -393,13 +408,13 @@ export function generateValidatorFile(
|
|
|
393
408
|
type !== 'AppPageConfig' || filePath.endsWith('page.ts') || filePath.endsWith('page.tsx'),
|
|
394
409
|
)
|
|
395
410
|
.map(filePath => {
|
|
396
|
-
const importPath = toImportSpecifier(filePath)
|
|
397
|
-
const route = pathToRouteMap?.get(filePath)
|
|
411
|
+
const importPath = toImportSpecifier(filePath)
|
|
412
|
+
const route = pathToRouteMap?.get(filePath)
|
|
398
413
|
const typeWithRoute =
|
|
399
414
|
route &&
|
|
400
415
|
(type === 'AppPageConfig' || type === 'LayoutConfig' || type === 'RouteHandlerConfig')
|
|
401
416
|
? `${type}<${JSON.stringify(route)}>`
|
|
402
|
-
: type
|
|
417
|
+
: type
|
|
403
418
|
return `// Validate ${filePath}
|
|
404
419
|
{
|
|
405
420
|
type __IsExpected<Specific extends ${typeWithRoute}> = Specific
|
|
@@ -407,37 +422,37 @@ export function generateValidatorFile(
|
|
|
407
422
|
type __Check = __IsExpected<typeof handler>
|
|
408
423
|
// @ts-ignore
|
|
409
424
|
type __Unused = __Check
|
|
410
|
-
}
|
|
425
|
+
}`
|
|
411
426
|
})
|
|
412
|
-
.join('\n\n')
|
|
427
|
+
.join('\n\n')
|
|
413
428
|
|
|
414
429
|
const appPageValidations = generateValidations(
|
|
415
430
|
[...manifest.appPagePaths].sort(),
|
|
416
431
|
'AppPageConfig',
|
|
417
432
|
manifest.filePathToRoute,
|
|
418
|
-
)
|
|
433
|
+
)
|
|
419
434
|
const appRouteHandlerValidations = generateValidations(
|
|
420
435
|
[...manifest.appRouteHandlers].sort(),
|
|
421
436
|
'RouteHandlerConfig',
|
|
422
437
|
manifest.filePathToRoute,
|
|
423
|
-
)
|
|
438
|
+
)
|
|
424
439
|
const pagesRouterPageValidations = generateValidations(
|
|
425
440
|
[...manifest.pagesRouterPagePaths].sort(),
|
|
426
441
|
'PagesPageConfig',
|
|
427
|
-
)
|
|
442
|
+
)
|
|
428
443
|
const pagesApiRouteValidations = generateValidations(
|
|
429
444
|
[...manifest.pageApiRoutes].sort(),
|
|
430
445
|
'ApiRouteConfig',
|
|
431
|
-
)
|
|
446
|
+
)
|
|
432
447
|
const layoutValidations = generateValidations(
|
|
433
448
|
[...manifest.layoutPaths].sort(),
|
|
434
449
|
'LayoutConfig',
|
|
435
450
|
manifest.filePathToRoute,
|
|
436
|
-
)
|
|
451
|
+
)
|
|
437
452
|
|
|
438
|
-
const hasAppRouteHandlers = Object.keys(manifest.appRouteHandlerRoutes).length > 0
|
|
453
|
+
const hasAppRouteHandlers = Object.keys(manifest.appRouteHandlerRoutes).length > 0
|
|
439
454
|
|
|
440
|
-
let typeDefinitions = ''
|
|
455
|
+
let typeDefinitions = ''
|
|
441
456
|
if (appPageValidations) {
|
|
442
457
|
typeDefinitions += `type AppPageConfig<Route extends AppRoutes = AppRoutes> = {
|
|
443
458
|
default: React.JSXElementConstructor<PageProps<Route>> | ((props: { params: Promise<ParamMap[Route]>, searchParams: Promise<any> }) => React.ReactNode | Promise<React.ReactNode> | never | void | Promise<void>)
|
|
@@ -454,7 +469,7 @@ export function generateValidatorFile(
|
|
|
454
469
|
viewport?: any
|
|
455
470
|
}
|
|
456
471
|
|
|
457
|
-
|
|
472
|
+
`
|
|
458
473
|
}
|
|
459
474
|
|
|
460
475
|
if (pagesRouterPageValidations) {
|
|
@@ -475,7 +490,7 @@ export function generateValidatorFile(
|
|
|
475
490
|
}
|
|
476
491
|
}
|
|
477
492
|
|
|
478
|
-
|
|
493
|
+
`
|
|
479
494
|
}
|
|
480
495
|
|
|
481
496
|
if (layoutValidations) {
|
|
@@ -494,7 +509,7 @@ export function generateValidatorFile(
|
|
|
494
509
|
viewport?: any
|
|
495
510
|
}
|
|
496
511
|
|
|
497
|
-
|
|
512
|
+
`
|
|
498
513
|
}
|
|
499
514
|
|
|
500
515
|
if (appRouteHandlerValidations) {
|
|
@@ -508,7 +523,7 @@ export function generateValidatorFile(
|
|
|
508
523
|
OPTIONS?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void
|
|
509
524
|
}
|
|
510
525
|
|
|
511
|
-
|
|
526
|
+
`
|
|
512
527
|
}
|
|
513
528
|
|
|
514
529
|
if (pagesApiRouteValidations) {
|
|
@@ -525,26 +540,28 @@ export function generateValidatorFile(
|
|
|
525
540
|
}
|
|
526
541
|
}
|
|
527
542
|
|
|
528
|
-
|
|
543
|
+
`
|
|
529
544
|
}
|
|
530
545
|
|
|
531
|
-
const routeImports: string[] = []
|
|
532
|
-
if (appPageValidations) routeImports.push('AppRoutes')
|
|
533
|
-
if (layoutValidations) routeImports.push('LayoutRoutes')
|
|
534
|
-
if (appPageValidations || layoutValidations || appRouteHandlerValidations)
|
|
535
|
-
|
|
546
|
+
const routeImports: string[] = []
|
|
547
|
+
if (appPageValidations) routeImports.push('AppRoutes')
|
|
548
|
+
if (layoutValidations) routeImports.push('LayoutRoutes')
|
|
549
|
+
if (appPageValidations || layoutValidations || appRouteHandlerValidations)
|
|
550
|
+
routeImports.push('ParamMap')
|
|
551
|
+
if (hasAppRouteHandlers) routeImports.push('AppRouteHandlerRoutes')
|
|
536
552
|
const routeImportStatement =
|
|
537
|
-
routeImports.length > 0 ? `import type { ${routeImports.join(', ')} } from "./routes.js"` : ''
|
|
553
|
+
routeImports.length > 0 ? `import type { ${routeImports.join(', ')} } from "./routes.js"` : ''
|
|
538
554
|
|
|
539
555
|
const nextRequestImport = hasAppRouteHandlers
|
|
540
556
|
? "import type { NextRequest } from 'next/server.js'\n"
|
|
541
|
-
: ''
|
|
557
|
+
: ''
|
|
542
558
|
|
|
543
|
-
const nextTypes: string[] = []
|
|
544
|
-
if (pagesApiRouteValidations) nextTypes.push('NextApiHandler')
|
|
545
|
-
if (appPageValidations || layoutValidations)
|
|
559
|
+
const nextTypes: string[] = []
|
|
560
|
+
if (pagesApiRouteValidations) nextTypes.push('NextApiHandler')
|
|
561
|
+
if (appPageValidations || layoutValidations)
|
|
562
|
+
nextTypes.push('ResolvingMetadata', 'ResolvingViewport')
|
|
546
563
|
const nextTypesImport =
|
|
547
|
-
nextTypes.length > 0 ? `import type { ${nextTypes.join(', ')} } from "next/types.js"\n` : ''
|
|
564
|
+
nextTypes.length > 0 ? `import type { ${nextTypes.join(', ')} } from "next/types.js"\n` : ''
|
|
548
565
|
|
|
549
566
|
return `// This file is generated automatically by Next.js
|
|
550
567
|
// Do not edit this file manually
|
|
@@ -562,5 +579,5 @@ ${pagesRouterPageValidations}
|
|
|
562
579
|
${pagesApiRouteValidations}
|
|
563
580
|
|
|
564
581
|
${layoutValidations}
|
|
565
|
-
|
|
582
|
+
`
|
|
566
583
|
}
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* root `layout.*` providing `<html>`/`<body>`.
|
|
18
18
|
*/
|
|
19
19
|
export function missingRootLayoutMessage(pageFile: string): string {
|
|
20
|
-
return `${pageFile} doesn't have a root layout. To fix this error, make sure every page has a root layout
|
|
20
|
+
return `${pageFile} doesn't have a root layout. To fix this error, make sure every page has a root layout.`
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
/**
|
|
@@ -25,12 +25,12 @@ export function missingRootLayoutMessage(pageFile: string): string {
|
|
|
25
25
|
* (`conflicting-app-page-error`).
|
|
26
26
|
*/
|
|
27
27
|
export function conflictingAppAndPageMessage(conflicts: { page: string; app: string }[]): string {
|
|
28
|
-
const numConflicting = conflicts.length
|
|
29
|
-
const list = conflicts.map(item => ` "${item.page}" - "${item.app}"`).join('\n')
|
|
28
|
+
const numConflicting = conflicts.length
|
|
29
|
+
const list = conflicts.map(item => ` "${item.page}" - "${item.app}"`).join('\n')
|
|
30
30
|
return (
|
|
31
31
|
`Conflicting app and page file${numConflicting === 1 ? ' was' : 's were'} found, ` +
|
|
32
32
|
`please remove the conflicting files to continue:\n${list}\n`
|
|
33
|
-
)
|
|
33
|
+
)
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
/**
|
|
@@ -43,23 +43,20 @@ export function conflictingParallelPagesMessage(existingPath: string, appPath: s
|
|
|
43
43
|
`Please check ${existingPath} and ${appPath}. ` +
|
|
44
44
|
`Refer to the route group docs for more information: ` +
|
|
45
45
|
`https://nextjs.org/docs/app/building-your-application/routing/route-groups`
|
|
46
|
-
)
|
|
46
|
+
)
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
/**
|
|
50
50
|
* A non-leaf parallel `@slot` segment missing its `default.js` fallback
|
|
51
51
|
* (`parallel-routes-leaf-segments`) — Next's MissingDefaultParallelRouteError.
|
|
52
52
|
*/
|
|
53
|
-
export function missingDefaultParallelRouteMessage(
|
|
54
|
-
segmentPath: string,
|
|
55
|
-
slotName: string,
|
|
56
|
-
): string {
|
|
53
|
+
export function missingDefaultParallelRouteMessage(segmentPath: string, slotName: string): string {
|
|
57
54
|
return (
|
|
58
55
|
`Missing required default.js file for parallel route at ${segmentPath}\n` +
|
|
59
56
|
`The parallel route slot "${slotName}" is missing a default.js file. ` +
|
|
60
57
|
`When using parallel routes, each slot must have a default.js file to serve as a fallback.\n\n` +
|
|
61
58
|
`Create a default.js file at: ${segmentPath}/default.js`
|
|
62
|
-
)
|
|
59
|
+
)
|
|
63
60
|
}
|
|
64
61
|
|
|
65
62
|
/**
|
|
@@ -76,7 +73,7 @@ export function missingSuspenseWithCsrBailoutMessage(page: string): string {
|
|
|
76
73
|
// the page rather than the source file. Reproduce that frame so the error
|
|
77
74
|
// still says which page's render bailed.
|
|
78
75
|
` at Page (.next/server/app${page === '/' ? '' : page}/page.js)`
|
|
79
|
-
)
|
|
76
|
+
)
|
|
80
77
|
}
|
|
81
78
|
|
|
82
79
|
/**
|
|
@@ -87,7 +84,7 @@ export function missingSuspenseWithCsrBailoutMessage(page: string): string {
|
|
|
87
84
|
* the caller emits the file path on its own line ahead of this message.
|
|
88
85
|
*/
|
|
89
86
|
export function incompatibleCacheComponentsSegmentConfigMessage(key: string): string {
|
|
90
|
-
return `Route segment config "${key}" is not compatible with \`nextConfig.cacheComponents\`. Please remove it
|
|
87
|
+
return `Route segment config "${key}" is not compatible with \`nextConfig.cacheComponents\`. Please remove it.`
|
|
91
88
|
}
|
|
92
89
|
|
|
93
90
|
/**
|
|
@@ -96,7 +93,7 @@ export function incompatibleCacheComponentsSegmentConfigMessage(key: string): st
|
|
|
96
93
|
*/
|
|
97
94
|
export function undefinedDefaultExportMessage(componentPath: string): string {
|
|
98
95
|
return `Error occurred prerendering page "${componentPath.replace(/\/(?:page|layout|not-found)$/, '') || '/'}". Read more: https://nextjs.org/docs/messages/prerender-error
|
|
99
|
-
Error: The default export is not a React Component in "${componentPath}"
|
|
96
|
+
Error: The default export is not a React Component in "${componentPath}"`
|
|
100
97
|
}
|
|
101
98
|
|
|
102
99
|
/**
|
|
@@ -104,7 +101,7 @@ Error: The default export is not a React Component in "${componentPath}"`;
|
|
|
104
101
|
* (`app-dir-export`).
|
|
105
102
|
*/
|
|
106
103
|
export function missingGenerateStaticParamsForExportMessage(page: string): string {
|
|
107
|
-
return `Page "${page}" is missing "generateStaticParams()" so it cannot be used with "output: export" config
|
|
104
|
+
return `Page "${page}" is missing "generateStaticParams()" so it cannot be used with "output: export" config.`
|
|
108
105
|
}
|
|
109
106
|
|
|
110
107
|
/**
|
|
@@ -115,7 +112,7 @@ export function dynamicForceDynamicWithExportMessage(page: string): string {
|
|
|
115
112
|
return (
|
|
116
113
|
`export const dynamic = "force-dynamic" on page "${page}" cannot be used with "output: export". ` +
|
|
117
114
|
`See more info here: https://nextjs.org/docs/advanced-features/static-html-export`
|
|
118
|
-
)
|
|
115
|
+
)
|
|
119
116
|
}
|
|
120
117
|
|
|
121
118
|
/**
|
|
@@ -129,14 +126,14 @@ export function forceDynamicPageWithExportMessage(): string {
|
|
|
129
126
|
`\`output: "export"\` requires all pages be renderable statically ` +
|
|
130
127
|
`because there is no runtime server to dynamically render routes in this output format. ` +
|
|
131
128
|
`Learn more: https://nextjs.org/docs/app/building-your-application/deploying/static-exports`
|
|
132
|
-
)
|
|
129
|
+
)
|
|
133
130
|
}
|
|
134
131
|
|
|
135
132
|
export function routeHandlerNotStaticWithExportMessage(route: string): string {
|
|
136
133
|
return (
|
|
137
134
|
`export const dynamic = "force-static"/export const revalidate not configured on route "${route}" ` +
|
|
138
135
|
`with "output: export".`
|
|
139
|
-
)
|
|
136
|
+
)
|
|
140
137
|
}
|
|
141
138
|
|
|
142
139
|
/**
|
|
@@ -147,7 +144,7 @@ export function exportPathMapWithAppDirMessage(): string {
|
|
|
147
144
|
`The "exportPathMap" configuration cannot be used with the "app" directory. ` +
|
|
148
145
|
`Please use generateStaticParams() instead. ` +
|
|
149
146
|
`See more info here: https://nextjs.org/docs/app/building-your-application/deploying/static-exports`
|
|
150
|
-
)
|
|
147
|
+
)
|
|
151
148
|
}
|
|
152
149
|
|
|
153
150
|
export function unresolvedCodemodCommentMessage(note: string): string {
|
|
@@ -155,5 +152,5 @@ export function unresolvedCodemodCommentMessage(note: string): string {
|
|
|
155
152
|
`You have an unresolved @next/codemod comment "${note}" that needs review.\n` +
|
|
156
153
|
`After review, either remove the comment if you made the necessary changes or replace ` +
|
|
157
154
|
`"@next-codemod-error" with "@next-codemod-ignore" to bypass the build error if no action at this line can be taken.`
|
|
158
|
-
)
|
|
155
|
+
)
|
|
159
156
|
}
|