@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
|
@@ -12,53 +12,53 @@
|
|
|
12
12
|
//
|
|
13
13
|
// When no tsconfig.json exists but the project contains TypeScript sources, one is created from scratch.
|
|
14
14
|
|
|
15
|
-
import { existsSync, readdirSync } from 'node:fs'
|
|
16
|
-
import { readFile } from 'node:fs/promises'
|
|
17
|
-
import { writeFileAtomic } from '../utils/fs'
|
|
18
|
-
import { createRequire } from 'node:module'
|
|
19
|
-
import path from 'node:path'
|
|
20
|
-
import type { ResolvedConfig } from '../config'
|
|
21
|
-
import { getNextConfig } from './next/config-loader'
|
|
15
|
+
import { existsSync, readdirSync } from 'node:fs'
|
|
16
|
+
import { readFile } from 'node:fs/promises'
|
|
17
|
+
import { writeFileAtomic } from '../utils/fs'
|
|
18
|
+
import { createRequire } from 'node:module'
|
|
19
|
+
import path from 'node:path'
|
|
20
|
+
import type { ResolvedConfig } from '../config'
|
|
21
|
+
import { getNextConfig } from './next/config-loader'
|
|
22
22
|
|
|
23
23
|
interface SuggestedOption {
|
|
24
|
-
suggested: unknown
|
|
25
|
-
reason?: string
|
|
24
|
+
suggested: unknown
|
|
25
|
+
reason?: string
|
|
26
26
|
}
|
|
27
27
|
interface RequiredOption {
|
|
28
|
-
parsedValue?: unknown
|
|
29
|
-
parsedValues?: unknown[]
|
|
30
|
-
value: unknown
|
|
31
|
-
reason: string
|
|
28
|
+
parsedValue?: unknown
|
|
29
|
+
parsedValues?: unknown[]
|
|
30
|
+
value: unknown
|
|
31
|
+
reason: string
|
|
32
32
|
}
|
|
33
|
-
type DesiredOption = SuggestedOption | RequiredOption
|
|
33
|
+
type DesiredOption = SuggestedOption | RequiredOption
|
|
34
34
|
|
|
35
35
|
interface TsconfigShape {
|
|
36
|
-
compilerOptions?: Record<string, unknown
|
|
37
|
-
include?: unknown
|
|
38
|
-
exclude?: unknown
|
|
39
|
-
[key: string]: unknown
|
|
36
|
+
compilerOptions?: Record<string, unknown>
|
|
37
|
+
include?: unknown
|
|
38
|
+
exclude?: unknown
|
|
39
|
+
[key: string]: unknown
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
// Whether the project carries any .ts/.tsx source (bounded walk skipping
|
|
43
43
|
// node_modules/dot-dirs) — Next's TS-detection gate for first-time setup.
|
|
44
44
|
function hasTypescriptSources(root: string, depth = 0): boolean {
|
|
45
|
-
if (depth > 6) return false
|
|
46
|
-
let entries: import('node:fs').Dirent[]
|
|
45
|
+
if (depth > 6) return false
|
|
46
|
+
let entries: import('node:fs').Dirent[]
|
|
47
47
|
try {
|
|
48
|
-
entries = readdirSync(root, { withFileTypes: true })
|
|
48
|
+
entries = readdirSync(root, { withFileTypes: true })
|
|
49
49
|
} catch {
|
|
50
|
-
return false
|
|
50
|
+
return false
|
|
51
51
|
}
|
|
52
52
|
for (const entry of entries) {
|
|
53
|
-
if (entry.name.startsWith('.') || entry.name === 'node_modules') continue
|
|
53
|
+
if (entry.name.startsWith('.') || entry.name === 'node_modules') continue
|
|
54
54
|
if (entry.isFile() && /\.(ts|tsx|mts|cts)$/.test(entry.name) && !entry.name.endsWith('.d.ts')) {
|
|
55
|
-
return true
|
|
55
|
+
return true
|
|
56
56
|
}
|
|
57
57
|
if (entry.isDirectory() && hasTypescriptSources(path.join(root, entry.name), depth + 1)) {
|
|
58
|
-
return true
|
|
58
|
+
return true
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
|
-
return false
|
|
61
|
+
return false
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
// The app's typescript version, else pnext's own. Read from package.json rather
|
|
@@ -67,19 +67,19 @@ function hasTypescriptSources(root: string, depth = 0): boolean {
|
|
|
67
67
|
function appTypescriptVersion(root: string): string {
|
|
68
68
|
for (const base of [root, import.meta.dirname]) {
|
|
69
69
|
try {
|
|
70
|
-
const require = createRequire(path.join(base, 'noop.js'))
|
|
71
|
-
const pkg = require('typescript/package.json') as { version?: string }
|
|
72
|
-
if (typeof pkg.version === 'string') return pkg.version
|
|
70
|
+
const require = createRequire(path.join(base, 'noop.js'))
|
|
71
|
+
const pkg = require('typescript/package.json') as { version?: string }
|
|
72
|
+
if (typeof pkg.version === 'string') return pkg.version
|
|
73
73
|
} catch {
|
|
74
74
|
// keep looking
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
|
-
return '5.9.0'
|
|
77
|
+
return '5.9.0'
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
function versionGte(version: string, major: number, minor: number): boolean {
|
|
81
|
-
const [maj = 0, min = 0] = version.split('.').map(part => Number.parseInt(part, 10))
|
|
82
|
-
return maj > major || (maj === major && min >= minor)
|
|
81
|
+
const [maj = 0, min = 0] = version.split('.').map(part => Number.parseInt(part, 10))
|
|
82
|
+
return maj > major || (maj === major && min >= minor)
|
|
83
83
|
}
|
|
84
84
|
|
|
85
85
|
function getDesiredCompilerOptions(
|
|
@@ -89,12 +89,12 @@ function getDesiredCompilerOptions(
|
|
|
89
89
|
const configuredModule =
|
|
90
90
|
typeof userTsConfig.compilerOptions?.module === 'string'
|
|
91
91
|
? userTsConfig.compilerOptions.module.toLowerCase()
|
|
92
|
-
: undefined
|
|
92
|
+
: undefined
|
|
93
93
|
const preferBundlerResolution =
|
|
94
94
|
versionGte(typescriptVersion, 5, 0) &&
|
|
95
95
|
configuredModule !== 'commonjs' &&
|
|
96
|
-
configuredModule !== 'amd'
|
|
97
|
-
const modulePreserve = versionGte(typescriptVersion, 5, 4) && configuredModule === 'preserve'
|
|
96
|
+
configuredModule !== 'amd'
|
|
97
|
+
const modulePreserve = versionGte(typescriptVersion, 5, 4) && configuredModule === 'preserve'
|
|
98
98
|
|
|
99
99
|
return {
|
|
100
100
|
target: {
|
|
@@ -148,7 +148,7 @@ function getDesiredCompilerOptions(
|
|
|
148
148
|
value: 'react-jsx',
|
|
149
149
|
reason: 'next.js uses the React automatic runtime',
|
|
150
150
|
},
|
|
151
|
-
}
|
|
151
|
+
}
|
|
152
152
|
}
|
|
153
153
|
|
|
154
154
|
// `<distDir>/types/**` plus the dev-mode variant, shortest first (Next sorts by
|
|
@@ -156,7 +156,7 @@ function getDesiredCompilerOptions(
|
|
|
156
156
|
function typeDefinitionGlobPatterns(distDir: string): string[] {
|
|
157
157
|
return [`${distDir}/types/**/*.ts`, `${distDir}/dev/types/**/*.ts`].sort(
|
|
158
158
|
(a, b) => a.length - b.length,
|
|
159
|
-
)
|
|
159
|
+
)
|
|
160
160
|
}
|
|
161
161
|
|
|
162
162
|
/**
|
|
@@ -166,80 +166,80 @@ function typeDefinitionGlobPatterns(distDir: string): string[] {
|
|
|
166
166
|
* every requirement.
|
|
167
167
|
*/
|
|
168
168
|
export async function writeTsconfigDefaults(config: ResolvedConfig): Promise<void> {
|
|
169
|
-
const tsConfigPath = path.join(config.root, 'tsconfig.json')
|
|
170
|
-
let isFirstTimeSetup = false
|
|
169
|
+
const tsConfigPath = path.join(config.root, 'tsconfig.json')
|
|
170
|
+
let isFirstTimeSetup = false
|
|
171
171
|
if (!existsSync(tsConfigPath)) {
|
|
172
|
-
if (!hasTypescriptSources(config.root)) return
|
|
173
|
-
isFirstTimeSetup = true
|
|
172
|
+
if (!hasTypescriptSources(config.root)) return
|
|
173
|
+
isFirstTimeSetup = true
|
|
174
174
|
// Atomic: the client build's tsconfig-paths reader runs in a parallel phase
|
|
175
175
|
// and must never see a truncated file.
|
|
176
|
-
await writeFileAtomic(tsConfigPath, '{}\n')
|
|
176
|
+
await writeFileAtomic(tsConfigPath, '{}\n')
|
|
177
177
|
}
|
|
178
178
|
|
|
179
|
-
let userTsConfig: TsconfigShape
|
|
179
|
+
let userTsConfig: TsconfigShape
|
|
180
180
|
try {
|
|
181
|
-
userTsConfig = JSON.parse(await readFile(tsConfigPath, 'utf8')) as TsconfigShape
|
|
181
|
+
userTsConfig = JSON.parse(await readFile(tsConfigPath, 'utf8')) as TsconfigShape
|
|
182
182
|
} catch {
|
|
183
|
-
return
|
|
183
|
+
return // JSONC / invalid — leave the user's file alone
|
|
184
184
|
}
|
|
185
|
-
if (userTsConfig === null || typeof userTsConfig !== 'object') return
|
|
185
|
+
if (userTsConfig === null || typeof userTsConfig !== 'object') return
|
|
186
186
|
// Automatic setup would clobber inherited options; Next bails here too.
|
|
187
|
-
if ('extends' in userTsConfig || 'references' in userTsConfig) return
|
|
187
|
+
if ('extends' in userTsConfig || 'references' in userTsConfig) return
|
|
188
188
|
|
|
189
|
-
if (userTsConfig.compilerOptions == null) userTsConfig.compilerOptions = {}
|
|
190
|
-
const compilerOptions = userTsConfig.compilerOptions
|
|
189
|
+
if (userTsConfig.compilerOptions == null) userTsConfig.compilerOptions = {}
|
|
190
|
+
const compilerOptions = userTsConfig.compilerOptions
|
|
191
191
|
|
|
192
|
-
const desired = getDesiredCompilerOptions(appTypescriptVersion(config.root), userTsConfig)
|
|
192
|
+
const desired = getDesiredCompilerOptions(appTypescriptVersion(config.root), userTsConfig)
|
|
193
193
|
|
|
194
|
-
const suggestedActions: string[] = []
|
|
195
|
-
const requiredActions: string[] = []
|
|
194
|
+
const suggestedActions: string[] = []
|
|
195
|
+
const requiredActions: string[] = []
|
|
196
196
|
for (const [optionKey, check] of Object.entries(desired)) {
|
|
197
197
|
if ('suggested' in check) {
|
|
198
198
|
if (!(optionKey in compilerOptions)) {
|
|
199
|
-
compilerOptions[optionKey] = check.suggested
|
|
199
|
+
compilerOptions[optionKey] = check.suggested
|
|
200
200
|
suggestedActions.push(
|
|
201
201
|
`${optionKey} was set to ${JSON.stringify(check.suggested)}` +
|
|
202
202
|
(check.reason ? ` (${check.reason})` : ''),
|
|
203
|
-
)
|
|
203
|
+
)
|
|
204
204
|
}
|
|
205
|
-
continue
|
|
205
|
+
continue
|
|
206
206
|
}
|
|
207
|
-
let existingValue = compilerOptions[optionKey]
|
|
208
|
-
if (typeof existingValue === 'string') existingValue = existingValue.toLowerCase()
|
|
207
|
+
let existingValue = compilerOptions[optionKey]
|
|
208
|
+
if (typeof existingValue === 'string') existingValue = existingValue.toLowerCase()
|
|
209
209
|
const satisfied = check.parsedValues
|
|
210
210
|
? check.parsedValues.includes(existingValue)
|
|
211
|
-
: (check.parsedValue ?? check.value) === existingValue
|
|
211
|
+
: (check.parsedValue ?? check.value) === existingValue
|
|
212
212
|
if (!satisfied) {
|
|
213
|
-
compilerOptions[optionKey] = check.value
|
|
214
|
-
requiredActions.push(`${optionKey} was set to ${String(check.value)} (${check.reason})`)
|
|
213
|
+
compilerOptions[optionKey] = check.value
|
|
214
|
+
requiredActions.push(`${optionKey} was set to ${String(check.value)} (${check.reason})`)
|
|
215
215
|
}
|
|
216
216
|
}
|
|
217
217
|
|
|
218
218
|
const hasAppDir =
|
|
219
|
-
existsSync(path.join(config.root, 'app')) || existsSync(path.join(config.root, 'src', 'app'))
|
|
219
|
+
existsSync(path.join(config.root, 'app')) || existsSync(path.join(config.root, 'src', 'app'))
|
|
220
220
|
const hasPagesDir =
|
|
221
221
|
existsSync(path.join(config.root, 'pages')) ||
|
|
222
|
-
existsSync(path.join(config.root, 'src', 'pages'))
|
|
222
|
+
existsSync(path.join(config.root, 'src', 'pages'))
|
|
223
223
|
// eslint-disable-next-line turbo/no-undeclared-env-vars
|
|
224
|
-
const strictRouteTypes = process.env.__NEXT_EXPERIMENTAL_STRICT_ROUTE_TYPES === 'true'
|
|
224
|
+
const strictRouteTypes = process.env.__NEXT_EXPERIMENTAL_STRICT_ROUTE_TYPES === 'true'
|
|
225
225
|
const distDir =
|
|
226
|
-
typeof getNextConfig().distDir === 'string' ? (getNextConfig().distDir as string) : '.next'
|
|
227
|
-
const nextTypes = typeDefinitionGlobPatterns(distDir)
|
|
226
|
+
typeof getNextConfig().distDir === 'string' ? (getNextConfig().distDir as string) : '.next'
|
|
227
|
+
const nextTypes = typeDefinitionGlobPatterns(distDir)
|
|
228
228
|
|
|
229
229
|
if (!('include' in userTsConfig)) {
|
|
230
230
|
const defaultInclude =
|
|
231
231
|
hasAppDir && !strictRouteTypes
|
|
232
232
|
? ['next-env.d.ts', ...nextTypes, '**/*.mts', '**/*.ts', '**/*.tsx']
|
|
233
|
-
: ['next-env.d.ts', '**/*.mts', '**/*.ts', '**/*.tsx']
|
|
234
|
-
userTsConfig.include = defaultInclude
|
|
233
|
+
: ['next-env.d.ts', '**/*.mts', '**/*.ts', '**/*.tsx']
|
|
234
|
+
userTsConfig.include = defaultInclude
|
|
235
235
|
suggestedActions.push(
|
|
236
236
|
`include was set to [${defaultInclude.map(type => `'${type}'`).join(', ')}]`,
|
|
237
|
-
)
|
|
237
|
+
)
|
|
238
238
|
} else if (hasAppDir && !strictRouteTypes && Array.isArray(userTsConfig.include)) {
|
|
239
239
|
for (const type of nextTypes) {
|
|
240
240
|
if (!userTsConfig.include.includes(type)) {
|
|
241
|
-
userTsConfig.include.push(type)
|
|
242
|
-
suggestedActions.push(`include was updated to add '${type}'`)
|
|
241
|
+
userTsConfig.include.push(type)
|
|
242
|
+
suggestedActions.push(`include was updated to add '${type}'`)
|
|
243
243
|
}
|
|
244
244
|
}
|
|
245
245
|
}
|
|
@@ -248,36 +248,32 @@ export async function writeTsconfigDefaults(config: ResolvedConfig): Promise<voi
|
|
|
248
248
|
const plugins = [
|
|
249
249
|
...(Array.isArray(userTsConfig.plugins) ? (userTsConfig.plugins as unknown[]) : []),
|
|
250
250
|
...(Array.isArray(compilerOptions.plugins) ? (compilerOptions.plugins as unknown[]) : []),
|
|
251
|
-
] as { name?: string }[]
|
|
251
|
+
] as { name?: string }[]
|
|
252
252
|
if (!plugins.some(plugin => plugin?.name === 'next')) {
|
|
253
|
-
if (!Array.isArray(compilerOptions.plugins)) compilerOptions.plugins = []
|
|
254
|
-
(compilerOptions.plugins as unknown[]).push({ name: 'next' })
|
|
255
|
-
suggestedActions.push(`plugins was updated to add { name: 'next' }`)
|
|
253
|
+
if (!Array.isArray(compilerOptions.plugins)) compilerOptions.plugins = []
|
|
254
|
+
;(compilerOptions.plugins as unknown[]).push({ name: 'next' })
|
|
255
|
+
suggestedActions.push(`plugins was updated to add { name: 'next' }`)
|
|
256
256
|
}
|
|
257
|
-
if (
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
!('strictNullChecks' in compilerOptions)
|
|
261
|
-
) {
|
|
262
|
-
compilerOptions.strictNullChecks = true;
|
|
263
|
-
suggestedActions.push('strictNullChecks was set to true');
|
|
257
|
+
if (hasPagesDir && !compilerOptions.strict && !('strictNullChecks' in compilerOptions)) {
|
|
258
|
+
compilerOptions.strictNullChecks = true
|
|
259
|
+
suggestedActions.push('strictNullChecks was set to true')
|
|
264
260
|
}
|
|
265
261
|
}
|
|
266
262
|
|
|
267
263
|
if (!('exclude' in userTsConfig)) {
|
|
268
|
-
userTsConfig.exclude = ['node_modules']
|
|
269
|
-
suggestedActions.push(`exclude was set to ['node_modules']`)
|
|
264
|
+
userTsConfig.exclude = ['node_modules']
|
|
265
|
+
suggestedActions.push(`exclude was set to ['node_modules']`)
|
|
270
266
|
}
|
|
271
267
|
|
|
272
|
-
if (suggestedActions.length === 0 && requiredActions.length === 0) return
|
|
268
|
+
if (suggestedActions.length === 0 && requiredActions.length === 0) return
|
|
273
269
|
|
|
274
|
-
await writeFileAtomic(tsConfigPath, `${JSON.stringify(userTsConfig, null, 2)}\n`)
|
|
270
|
+
await writeFileAtomic(tsConfigPath, `${JSON.stringify(userTsConfig, null, 2)}\n`)
|
|
275
271
|
|
|
276
272
|
if (isFirstTimeSetup) {
|
|
277
273
|
console.log(
|
|
278
274
|
'\nWe detected TypeScript in your project and created a tsconfig.json file for you.',
|
|
279
|
-
)
|
|
280
|
-
return
|
|
275
|
+
)
|
|
276
|
+
return
|
|
281
277
|
}
|
|
282
278
|
|
|
283
279
|
const lines = [
|
|
@@ -285,20 +281,20 @@ export async function writeTsconfigDefaults(config: ResolvedConfig): Promise<voi
|
|
|
285
281
|
`We detected TypeScript in your project and reconfigured your tsconfig.json file for you.${
|
|
286
282
|
compilerOptions.strict ? '' : ' Strict-mode is set to false by default.'
|
|
287
283
|
}`,
|
|
288
|
-
]
|
|
284
|
+
]
|
|
289
285
|
if (suggestedActions.length > 0) {
|
|
290
286
|
lines.push(
|
|
291
287
|
`The following suggested values were added to your tsconfig.json. These values can be changed to fit your project's needs:\n`,
|
|
292
288
|
...suggestedActions.map(action => `\t- ${action}`),
|
|
293
289
|
'',
|
|
294
|
-
)
|
|
290
|
+
)
|
|
295
291
|
}
|
|
296
292
|
if (requiredActions.length > 0) {
|
|
297
293
|
lines.push(
|
|
298
294
|
`The following mandatory changes were made to your tsconfig.json:\n`,
|
|
299
295
|
...requiredActions.map(action => `\t- ${action}`),
|
|
300
296
|
'',
|
|
301
|
-
)
|
|
297
|
+
)
|
|
302
298
|
}
|
|
303
|
-
console.log(lines.join('\n'))
|
|
299
|
+
console.log(lines.join('\n'))
|
|
304
300
|
}
|