@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
|
@@ -4,93 +4,92 @@
|
|
|
4
4
|
// pnext.config.ts, .gitignore, next-env.d.ts). Application source is never
|
|
5
5
|
// rewritten: it is scanned and reported so the user stays in control.
|
|
6
6
|
|
|
7
|
-
import { existsSync } from 'node:fs'
|
|
8
|
-
import { appendFile, readFile, rm, writeFile } from 'node:fs/promises'
|
|
9
|
-
import path from 'node:path'
|
|
10
|
-
import { bold } from '../../utils/ansi'
|
|
11
|
-
import { migratePackageJson, readPackageJson } from './package-json'
|
|
12
|
-
import { emptyResult, printHeader, printResult, type MigrationResult } from './report'
|
|
13
|
-
import { scanSources } from './scan'
|
|
14
|
-
import { withSpinner } from './spinner'
|
|
15
|
-
import { migrateTsconfig } from './tsconfig'
|
|
7
|
+
import { existsSync } from 'node:fs'
|
|
8
|
+
import { appendFile, readFile, rm, writeFile } from 'node:fs/promises'
|
|
9
|
+
import path from 'node:path'
|
|
10
|
+
import { bold } from '../../utils/ansi'
|
|
11
|
+
import { migratePackageJson, readPackageJson } from './package-json'
|
|
12
|
+
import { emptyResult, printHeader, printResult, type MigrationResult } from './report'
|
|
13
|
+
import { scanSources } from './scan'
|
|
14
|
+
import { withSpinner } from './spinner'
|
|
15
|
+
import { migrateTsconfig } from './tsconfig'
|
|
16
16
|
|
|
17
|
-
const NEXT_CONFIG_FILES = ['next.config.ts', 'next.config.js', 'next.config.mjs', 'next.config.cjs']
|
|
18
|
-
const PNEXT_CONFIG_FILES = ['pnext.config.ts', 'pnext.config.js', 'pnext.config.mjs']
|
|
17
|
+
const NEXT_CONFIG_FILES = ['next.config.ts', 'next.config.js', 'next.config.mjs', 'next.config.cjs']
|
|
18
|
+
const PNEXT_CONFIG_FILES = ['pnext.config.ts', 'pnext.config.js', 'pnext.config.mjs']
|
|
19
19
|
|
|
20
20
|
export async function migrateApp(directory: string | undefined, options: { dryRun: boolean }) {
|
|
21
|
-
const root = path.resolve(directory ?? process.cwd())
|
|
22
|
-
const pkg = await readPackageJson(root)
|
|
21
|
+
const root = path.resolve(directory ?? process.cwd())
|
|
22
|
+
const pkg = await readPackageJson(root)
|
|
23
23
|
const hasNextDependency = Boolean(
|
|
24
|
-
pkg &&
|
|
25
|
-
|
|
26
|
-
)
|
|
27
|
-
const hasNextConfig = NEXT_CONFIG_FILES.some(name => existsSync(path.join(root, name)));
|
|
24
|
+
pkg && (hasDependency(pkg.dependencies, 'next') || hasDependency(pkg.devDependencies, 'next')),
|
|
25
|
+
)
|
|
26
|
+
const hasNextConfig = NEXT_CONFIG_FILES.some(name => existsSync(path.join(root, name)))
|
|
28
27
|
|
|
29
28
|
if (!hasNextDependency && !hasNextConfig) {
|
|
30
29
|
console.error(
|
|
31
30
|
`${bold('Not a Next.js app')}: ${root}\n` +
|
|
32
31
|
` - ${pkg ? 'package.json has no "next" dependency' : 'no readable package.json'}\n` +
|
|
33
32
|
' - no next.config.{ts,js,mjs,cjs}',
|
|
34
|
-
)
|
|
35
|
-
return 1
|
|
33
|
+
)
|
|
34
|
+
return 1
|
|
36
35
|
}
|
|
37
36
|
|
|
38
|
-
printHeader(root, options.dryRun)
|
|
39
|
-
const result = emptyResult()
|
|
40
|
-
if (pkg) await migratePackageJson(root, pkg, result, options.dryRun)
|
|
41
|
-
await createPnextConfig(root, result, options.dryRun)
|
|
42
|
-
await migrateTsconfig(root, result, options.dryRun)
|
|
43
|
-
await removeNextEnv(root, result, options.dryRun)
|
|
44
|
-
await updateGitignore(root, result, options.dryRun)
|
|
45
|
-
await withSpinner('Scanning sources ...', () => scanSources(root, result))
|
|
37
|
+
printHeader(root, options.dryRun)
|
|
38
|
+
const result = emptyResult()
|
|
39
|
+
if (pkg) await migratePackageJson(root, pkg, result, options.dryRun)
|
|
40
|
+
await createPnextConfig(root, result, options.dryRun)
|
|
41
|
+
await migrateTsconfig(root, result, options.dryRun)
|
|
42
|
+
await removeNextEnv(root, result, options.dryRun)
|
|
43
|
+
await updateGitignore(root, result, options.dryRun)
|
|
44
|
+
await withSpinner('Scanning sources ...', () => scanSources(root, result))
|
|
46
45
|
|
|
47
|
-
printResult(result, { install: installCommand(root) })
|
|
48
|
-
return 0
|
|
46
|
+
printResult(result, { install: installCommand(root) })
|
|
47
|
+
return 0
|
|
49
48
|
}
|
|
50
49
|
|
|
51
50
|
async function createPnextConfig(root: string, result: MigrationResult, dryRun: boolean) {
|
|
52
|
-
const existing = PNEXT_CONFIG_FILES.find(name => existsSync(path.join(root, name)))
|
|
51
|
+
const existing = PNEXT_CONFIG_FILES.find(name => existsSync(path.join(root, name)))
|
|
53
52
|
if (existing) {
|
|
54
53
|
result.reports.push({
|
|
55
54
|
title: `${existing} already exists`,
|
|
56
55
|
detail: 'Make sure it sets compat: { next: true }. See reference/compat.md.',
|
|
57
|
-
})
|
|
58
|
-
return
|
|
56
|
+
})
|
|
57
|
+
return
|
|
59
58
|
}
|
|
60
59
|
if (!dryRun) {
|
|
61
60
|
await writeFile(
|
|
62
61
|
path.join(root, 'pnext.config.ts'),
|
|
63
62
|
'export default { compat: { next: true } };\n',
|
|
64
|
-
)
|
|
63
|
+
)
|
|
65
64
|
}
|
|
66
|
-
result.edits.push({ file: 'pnext.config.ts', description: 'created with compat.next enabled' })
|
|
65
|
+
result.edits.push({ file: 'pnext.config.ts', description: 'created with compat.next enabled' })
|
|
67
66
|
}
|
|
68
67
|
|
|
69
68
|
async function removeNextEnv(root: string, result: MigrationResult, dryRun: boolean) {
|
|
70
|
-
const file = path.join(root, 'next-env.d.ts')
|
|
71
|
-
if (!existsSync(file)) return
|
|
72
|
-
if (!dryRun) await rm(file)
|
|
73
|
-
result.edits.push({ file: 'next-env.d.ts', description: 'deleted' })
|
|
69
|
+
const file = path.join(root, 'next-env.d.ts')
|
|
70
|
+
if (!existsSync(file)) return
|
|
71
|
+
if (!dryRun) await rm(file)
|
|
72
|
+
result.edits.push({ file: 'next-env.d.ts', description: 'deleted' })
|
|
74
73
|
}
|
|
75
74
|
|
|
76
75
|
async function updateGitignore(root: string, result: MigrationResult, dryRun: boolean) {
|
|
77
|
-
const file = path.join(root, '.gitignore')
|
|
78
|
-
if (!existsSync(file)) return
|
|
79
|
-
const text = await readFile(file, 'utf8')
|
|
80
|
-
if (text.split(/\r?\n/).some(line => line.trim() === '.pnext/')) return
|
|
81
|
-
if (!dryRun) await appendFile(file, `${text.endsWith('\n') || text === '' ? '' : '\n'}.pnext/\n`)
|
|
82
|
-
result.edits.push({ file: '.gitignore', description: 'appended .pnext/' })
|
|
76
|
+
const file = path.join(root, '.gitignore')
|
|
77
|
+
if (!existsSync(file)) return
|
|
78
|
+
const text = await readFile(file, 'utf8')
|
|
79
|
+
if (text.split(/\r?\n/).some(line => line.trim() === '.pnext/')) return
|
|
80
|
+
if (!dryRun) await appendFile(file, `${text.endsWith('\n') || text === '' ? '' : '\n'}.pnext/\n`)
|
|
81
|
+
result.edits.push({ file: '.gitignore', description: 'appended .pnext/' })
|
|
83
82
|
}
|
|
84
83
|
|
|
85
84
|
function installCommand(root: string) {
|
|
86
85
|
if (existsSync(path.join(root, 'bun.lock')) || existsSync(path.join(root, 'bun.lockb'))) {
|
|
87
|
-
return 'bun install'
|
|
86
|
+
return 'bun install'
|
|
88
87
|
}
|
|
89
|
-
if (existsSync(path.join(root, 'pnpm-lock.yaml'))) return 'pnpm install'
|
|
90
|
-
if (existsSync(path.join(root, 'yarn.lock'))) return 'yarn'
|
|
91
|
-
return 'npm install'
|
|
88
|
+
if (existsSync(path.join(root, 'pnpm-lock.yaml'))) return 'pnpm install'
|
|
89
|
+
if (existsSync(path.join(root, 'yarn.lock'))) return 'yarn'
|
|
90
|
+
return 'npm install'
|
|
92
91
|
}
|
|
93
92
|
|
|
94
93
|
function hasDependency(bucket: unknown, name: string) {
|
|
95
|
-
return typeof bucket === 'object' && bucket !== null && name in bucket
|
|
94
|
+
return typeof bucket === 'object' && bucket !== null && name in bucket
|
|
96
95
|
}
|
package/src/cli/migrate/scan.ts
CHANGED
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
// from regexes over application code; text checks here only classify what to
|
|
3
3
|
// report and never drive a rewrite.
|
|
4
4
|
|
|
5
|
-
import { existsSync } from 'node:fs'
|
|
6
|
-
import { readdir, readFile } from 'node:fs/promises'
|
|
7
|
-
import path from 'node:path'
|
|
8
|
-
import type { MigrationResult } from './report'
|
|
5
|
+
import { existsSync } from 'node:fs'
|
|
6
|
+
import { readdir, readFile } from 'node:fs/promises'
|
|
7
|
+
import path from 'node:path'
|
|
8
|
+
import type { MigrationResult } from './report'
|
|
9
9
|
|
|
10
|
-
const SKIP_DIRS = new Set(['node_modules', '.next', '.pnext', '.git', 'dist', 'build'])
|
|
10
|
+
const SKIP_DIRS = new Set(['node_modules', '.next', '.pnext', '.git', 'dist', 'build'])
|
|
11
11
|
const LOADERS: Record<string, 'ts' | 'tsx' | 'js' | 'jsx'> = {
|
|
12
12
|
'.ts': 'ts',
|
|
13
13
|
'.tsx': 'tsx',
|
|
@@ -15,39 +15,39 @@ const LOADERS: Record<string, 'ts' | 'tsx' | 'js' | 'jsx'> = {
|
|
|
15
15
|
'.js': 'js',
|
|
16
16
|
'.mjs': 'js',
|
|
17
17
|
'.cjs': 'js',
|
|
18
|
-
}
|
|
19
|
-
const STREAMING_APIS = ['renderToReadableStream', 'renderToPipeableStream']
|
|
20
|
-
const SPECIAL_PAGES = ['_app', '_document', '_error']
|
|
18
|
+
}
|
|
19
|
+
const STREAMING_APIS = ['renderToReadableStream', 'renderToPipeableStream']
|
|
20
|
+
const SPECIAL_PAGES = ['_app', '_document', '_error']
|
|
21
21
|
|
|
22
22
|
export async function scanSources(root: string, result: MigrationResult) {
|
|
23
|
-
const { SHIMMED_NEXT_DIST_PATHS } = await import('../../compat')
|
|
24
|
-
const shimmed = new Set<string>(SHIMMED_NEXT_DIST_PATHS)
|
|
25
|
-
const deepImports: string[] = []
|
|
26
|
-
const streaming: string[] = []
|
|
27
|
-
const headImports: string[] = []
|
|
23
|
+
const { SHIMMED_NEXT_DIST_PATHS } = await import('../../compat/aliases')
|
|
24
|
+
const shimmed = new Set<string>(SHIMMED_NEXT_DIST_PATHS)
|
|
25
|
+
const deepImports: string[] = []
|
|
26
|
+
const streaming: string[] = []
|
|
27
|
+
const headImports: string[] = []
|
|
28
28
|
|
|
29
29
|
for await (const file of walk(root)) {
|
|
30
|
-
const loader = LOADERS[path.extname(file)]
|
|
31
|
-
if (!loader) continue
|
|
32
|
-
const text = await readFile(file, 'utf8')
|
|
33
|
-
let specifiers: string[]
|
|
30
|
+
const loader = LOADERS[path.extname(file)]
|
|
31
|
+
if (!loader) continue
|
|
32
|
+
const text = await readFile(file, 'utf8')
|
|
33
|
+
let specifiers: string[]
|
|
34
34
|
try {
|
|
35
|
-
specifiers = new Bun.Transpiler({ loader }).scanImports(text).map(item => item.path)
|
|
35
|
+
specifiers = new Bun.Transpiler({ loader }).scanImports(text).map(item => item.path)
|
|
36
36
|
} catch {
|
|
37
|
-
continue
|
|
37
|
+
continue // unparseable source is the app's problem, not migrate's
|
|
38
38
|
}
|
|
39
|
-
const relative = path.relative(root, file)
|
|
39
|
+
const relative = path.relative(root, file)
|
|
40
40
|
for (const specifier of specifiers) {
|
|
41
41
|
if (specifier.startsWith('next/dist/') && !shimmed.has(specifier.replace(/\.js$/, ''))) {
|
|
42
|
-
deepImports.push(`${relative} → ${specifier}`)
|
|
42
|
+
deepImports.push(`${relative} → ${specifier}`)
|
|
43
43
|
}
|
|
44
44
|
if (
|
|
45
45
|
/^react-dom\/server(\.|\/|$)/.test(specifier) &&
|
|
46
46
|
STREAMING_APIS.some(api => text.includes(api))
|
|
47
47
|
) {
|
|
48
|
-
streaming.push(relative)
|
|
48
|
+
streaming.push(relative)
|
|
49
49
|
}
|
|
50
|
-
if (specifier === 'next/head') headImports.push(relative)
|
|
50
|
+
if (specifier === 'next/head') headImports.push(relative)
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
53
|
|
|
@@ -57,7 +57,7 @@ export async function scanSources(root: string, result: MigrationResult) {
|
|
|
57
57
|
detail:
|
|
58
58
|
'Only five next/dist paths are shimmed — replace these with public APIs. See reference/compat.md ("Smaller surfaces").',
|
|
59
59
|
files: deepImports,
|
|
60
|
-
})
|
|
60
|
+
})
|
|
61
61
|
}
|
|
62
62
|
if (streaming.length > 0) {
|
|
63
63
|
result.reports.push({
|
|
@@ -65,7 +65,7 @@ export async function scanSources(root: string, result: MigrationResult) {
|
|
|
65
65
|
detail:
|
|
66
66
|
'preact/compat does not provide renderToReadableStream/renderToPipeableStream — use pnext rendering instead. See reference/compat.md.',
|
|
67
67
|
files: [...new Set(streaming)],
|
|
68
|
-
})
|
|
68
|
+
})
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
if (headImports.length > 0) {
|
|
@@ -74,62 +74,62 @@ export async function scanSources(root: string, result: MigrationResult) {
|
|
|
74
74
|
detail:
|
|
75
75
|
'Move these tags to metadata exports (or the root layout <head>) — next/head is a silent no-op under pnext. See reference/compat.md.',
|
|
76
76
|
files: [...new Set(headImports)],
|
|
77
|
-
})
|
|
77
|
+
})
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
-
scanSpecialPages(root, result)
|
|
81
|
-
await scanNextConfig(root, result)
|
|
80
|
+
scanSpecialPages(root, result)
|
|
81
|
+
await scanNextConfig(root, result)
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
function scanSpecialPages(root: string, result: MigrationResult) {
|
|
85
|
-
const found: string[] = []
|
|
85
|
+
const found: string[] = []
|
|
86
86
|
for (const base of ['pages', path.join('src', 'pages')]) {
|
|
87
87
|
for (const name of SPECIAL_PAGES) {
|
|
88
88
|
for (const extension of ['.tsx', '.ts', '.jsx', '.js']) {
|
|
89
|
-
const relative = path.join(base, `${name}${extension}`)
|
|
90
|
-
if (existsSync(path.join(root, relative))) found.push(relative)
|
|
89
|
+
const relative = path.join(base, `${name}${extension}`)
|
|
90
|
+
if (existsSync(path.join(root, relative))) found.push(relative)
|
|
91
91
|
}
|
|
92
92
|
}
|
|
93
93
|
}
|
|
94
|
-
if (found.length === 0) return
|
|
94
|
+
if (found.length === 0) return
|
|
95
95
|
result.reports.push({
|
|
96
96
|
title: 'pages/_app, _document and _error are ignored',
|
|
97
97
|
detail:
|
|
98
98
|
'Move this setup into the app-router root layout — pnext never loads these files. See reference/compat.md.',
|
|
99
99
|
files: found,
|
|
100
|
-
})
|
|
100
|
+
})
|
|
101
101
|
}
|
|
102
102
|
|
|
103
103
|
async function scanNextConfig(root: string, result: MigrationResult) {
|
|
104
104
|
for (const name of ['next.config.ts', 'next.config.js', 'next.config.mjs', 'next.config.cjs']) {
|
|
105
|
-
const file = path.join(root, name)
|
|
106
|
-
if (!existsSync(file)) continue
|
|
107
|
-
const text = await readFile(file, 'utf8')
|
|
108
|
-
if (!text.includes('webpack:') && !text.includes('webpack(')) return
|
|
109
|
-
const svgr = text.includes('@svgr/webpack')
|
|
105
|
+
const file = path.join(root, name)
|
|
106
|
+
if (!existsSync(file)) continue
|
|
107
|
+
const text = await readFile(file, 'utf8')
|
|
108
|
+
if (!text.includes('webpack:') && !text.includes('webpack(')) return
|
|
109
|
+
const svgr = text.includes('@svgr/webpack')
|
|
110
110
|
result.reports.push({
|
|
111
111
|
title: `${name} defines a webpack function`,
|
|
112
112
|
detail: svgr
|
|
113
113
|
? 'The webpack function is never executed; SVGR is auto-detected from @svgr/webpack, so SVG imports keep working. See reference/compat.md.'
|
|
114
114
|
: 'The webpack function is never executed — port any custom loaders/plugins to pnext config. See reference/compat.md.',
|
|
115
|
-
})
|
|
116
|
-
return
|
|
115
|
+
})
|
|
116
|
+
return
|
|
117
117
|
}
|
|
118
118
|
}
|
|
119
119
|
|
|
120
120
|
async function* walk(dir: string): AsyncGenerator<string> {
|
|
121
|
-
let entries: import('node:fs').Dirent[]
|
|
121
|
+
let entries: import('node:fs').Dirent[]
|
|
122
122
|
try {
|
|
123
|
-
entries = await readdir(dir, { withFileTypes: true })
|
|
123
|
+
entries = await readdir(dir, { withFileTypes: true })
|
|
124
124
|
} catch {
|
|
125
|
-
return
|
|
125
|
+
return
|
|
126
126
|
}
|
|
127
127
|
for (const entry of entries) {
|
|
128
128
|
if (entry.isDirectory()) {
|
|
129
|
-
if (SKIP_DIRS.has(entry.name)) continue
|
|
130
|
-
yield* walk(path.join(dir, entry.name))
|
|
129
|
+
if (SKIP_DIRS.has(entry.name)) continue
|
|
130
|
+
yield* walk(path.join(dir, entry.name))
|
|
131
131
|
} else if (entry.isFile()) {
|
|
132
|
-
yield path.join(dir, entry.name)
|
|
132
|
+
yield path.join(dir, entry.name)
|
|
133
133
|
}
|
|
134
134
|
}
|
|
135
135
|
}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
// Minimal braille spinner for the one step that can take a while (the source
|
|
2
2
|
// scan over a large app). TTY-only, so piped/CI output stays clean.
|
|
3
3
|
|
|
4
|
-
const FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏']
|
|
4
|
+
const FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏']
|
|
5
5
|
|
|
6
6
|
export async function withSpinner<T>(label: string, run: () => Promise<T>): Promise<T> {
|
|
7
|
-
if (!process.stdout.isTTY) return run()
|
|
7
|
+
if (!process.stdout.isTTY) return run()
|
|
8
8
|
|
|
9
|
-
let frame = 0
|
|
9
|
+
let frame = 0
|
|
10
10
|
const timer = setInterval(() => {
|
|
11
|
-
process.stdout.write(`\r${FRAMES[frame % FRAMES.length]} ${label}`)
|
|
12
|
-
frame += 1
|
|
13
|
-
}, 80)
|
|
11
|
+
process.stdout.write(`\r${FRAMES[frame % FRAMES.length]} ${label}`)
|
|
12
|
+
frame += 1
|
|
13
|
+
}, 80)
|
|
14
14
|
try {
|
|
15
|
-
return await run()
|
|
15
|
+
return await run()
|
|
16
16
|
} finally {
|
|
17
|
-
clearInterval(timer)
|
|
18
|
-
process.stdout.write('\r\x1b[2K')
|
|
17
|
+
clearInterval(timer)
|
|
18
|
+
process.stdout.write('\r\x1b[2K')
|
|
19
19
|
}
|
|
20
20
|
}
|
|
@@ -3,75 +3,75 @@
|
|
|
3
3
|
// never rewritten — the same bail compat/tsconfig-defaults.ts takes, since a
|
|
4
4
|
// JSON round-trip would strip the user's comments.
|
|
5
5
|
|
|
6
|
-
import { existsSync } from 'node:fs'
|
|
7
|
-
import { readFile, writeFile } from 'node:fs/promises'
|
|
8
|
-
import path from 'node:path'
|
|
9
|
-
import type { MigrationResult } from './report'
|
|
6
|
+
import { existsSync } from 'node:fs'
|
|
7
|
+
import { readFile, writeFile } from 'node:fs/promises'
|
|
8
|
+
import path from 'node:path'
|
|
9
|
+
import type { MigrationResult } from './report'
|
|
10
10
|
|
|
11
11
|
const MANUAL_STEPS =
|
|
12
|
-
'remove { "name": "next" } from compilerOptions.plugins and replace ".next/types" includes with ".pnext/types/**/*.ts".'
|
|
12
|
+
'remove { "name": "next" } from compilerOptions.plugins and replace ".next/types" includes with ".pnext/types/**/*.ts".'
|
|
13
13
|
|
|
14
14
|
export async function migrateTsconfig(root: string, result: MigrationResult, dryRun: boolean) {
|
|
15
|
-
const file = path.join(root, 'tsconfig.json')
|
|
16
|
-
if (!existsSync(file)) return
|
|
17
|
-
const text = await readFile(file, 'utf8')
|
|
15
|
+
const file = path.join(root, 'tsconfig.json')
|
|
16
|
+
if (!existsSync(file)) return
|
|
17
|
+
const text = await readFile(file, 'utf8')
|
|
18
18
|
|
|
19
|
-
let config: Record<string, unknown
|
|
19
|
+
let config: Record<string, unknown>
|
|
20
20
|
try {
|
|
21
|
-
config = JSON.parse(text) as Record<string, unknown
|
|
21
|
+
config = JSON.parse(text) as Record<string, unknown>
|
|
22
22
|
} catch {
|
|
23
23
|
result.reports.push({
|
|
24
24
|
title: 'tsconfig.json has comments (JSONC) — not edited',
|
|
25
25
|
detail: `Apply by hand: ${MANUAL_STEPS}`,
|
|
26
|
-
})
|
|
27
|
-
return
|
|
26
|
+
})
|
|
27
|
+
return
|
|
28
28
|
}
|
|
29
|
-
if (typeof config !== 'object' || config === null) return
|
|
29
|
+
if (typeof config !== 'object' || config === null) return
|
|
30
30
|
|
|
31
|
-
const changes: string[] = []
|
|
32
|
-
const compilerOptions = config.compilerOptions
|
|
31
|
+
const changes: string[] = []
|
|
32
|
+
const compilerOptions = config.compilerOptions
|
|
33
33
|
if (isObject(compilerOptions) && Array.isArray(compilerOptions.plugins)) {
|
|
34
34
|
const kept = compilerOptions.plugins.filter(
|
|
35
35
|
plugin => !(isObject(plugin) && plugin.name === 'next'),
|
|
36
|
-
)
|
|
36
|
+
)
|
|
37
37
|
if (kept.length !== compilerOptions.plugins.length) {
|
|
38
|
-
if (kept.length === 0) delete compilerOptions.plugins
|
|
39
|
-
else compilerOptions.plugins = kept
|
|
40
|
-
changes.push('next TypeScript plugin removed')
|
|
38
|
+
if (kept.length === 0) delete compilerOptions.plugins
|
|
39
|
+
else compilerOptions.plugins = kept
|
|
40
|
+
changes.push('next TypeScript plugin removed')
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
if (Array.isArray(config.include)) {
|
|
45
|
-
const seen = new Set<string>()
|
|
46
|
-
const include: unknown[] = []
|
|
47
|
-
let repointed = false
|
|
45
|
+
const seen = new Set<string>()
|
|
46
|
+
const include: unknown[] = []
|
|
47
|
+
let repointed = false
|
|
48
48
|
for (const entry of config.include) {
|
|
49
49
|
if (typeof entry !== 'string') {
|
|
50
|
-
include.push(entry)
|
|
51
|
-
continue
|
|
50
|
+
include.push(entry)
|
|
51
|
+
continue
|
|
52
52
|
}
|
|
53
53
|
const next =
|
|
54
54
|
entry.includes('.next/types') || entry.includes('.next/dev/types')
|
|
55
55
|
? '.pnext/types/**/*.ts'
|
|
56
|
-
: entry
|
|
57
|
-
if (next !== entry) repointed = true
|
|
58
|
-
if (seen.has(next)) continue
|
|
59
|
-
seen.add(next)
|
|
60
|
-
include.push(next)
|
|
56
|
+
: entry
|
|
57
|
+
if (next !== entry) repointed = true
|
|
58
|
+
if (seen.has(next)) continue
|
|
59
|
+
seen.add(next)
|
|
60
|
+
include.push(next)
|
|
61
61
|
}
|
|
62
62
|
if (repointed) {
|
|
63
|
-
config.include = include
|
|
64
|
-
changes.push('type includes repointed at .pnext/types')
|
|
63
|
+
config.include = include
|
|
64
|
+
changes.push('type includes repointed at .pnext/types')
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
if (changes.length === 0) return
|
|
69
|
-
if (!dryRun) await writeFile(file, `${JSON.stringify(config, null, 2)}\n`)
|
|
68
|
+
if (changes.length === 0) return
|
|
69
|
+
if (!dryRun) await writeFile(file, `${JSON.stringify(config, null, 2)}\n`)
|
|
70
70
|
for (const change of changes) {
|
|
71
|
-
result.edits.push({ file: 'tsconfig.json', description: change })
|
|
71
|
+
result.edits.push({ file: 'tsconfig.json', description: change })
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
function isObject(value: unknown): value is Record<string, unknown> {
|
|
76
|
-
return typeof value === 'object' && value !== null && !Array.isArray(value)
|
|
76
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value)
|
|
77
77
|
}
|