@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
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
// safe defaults.
|
|
8
8
|
// ---------------------------------------------------------------------------
|
|
9
9
|
|
|
10
|
-
import { getNextConfig } from '../next/config-loader'
|
|
11
|
-
import type { ModularizeRule } from './modularize-imports'
|
|
10
|
+
import { getNextConfig } from '../next/config-loader'
|
|
11
|
+
import type { ModularizeRule } from './modularize-imports'
|
|
12
12
|
|
|
13
13
|
/** A predefined built-in set kept external server-side (Next ships this list). */
|
|
14
14
|
const PREDEFINED_SERVER_EXTERNAL_PACKAGES = [
|
|
@@ -18,10 +18,12 @@ const PREDEFINED_SERVER_EXTERNAL_PACKAGES = [
|
|
|
18
18
|
'canvas',
|
|
19
19
|
'@node-rs/argon2',
|
|
20
20
|
'@node-rs/bcrypt',
|
|
21
|
-
]
|
|
21
|
+
]
|
|
22
22
|
|
|
23
23
|
function stringArray(value: unknown): string[] {
|
|
24
|
-
return Array.isArray(value)
|
|
24
|
+
return Array.isArray(value)
|
|
25
|
+
? value.filter((item): item is string => typeof item === 'string')
|
|
26
|
+
: []
|
|
25
27
|
}
|
|
26
28
|
|
|
27
29
|
/**
|
|
@@ -29,11 +31,11 @@ function stringArray(value: unknown): string[] {
|
|
|
29
31
|
* (resolved from node_modules, never bundled) in the server graph.
|
|
30
32
|
*/
|
|
31
33
|
export function serverExternalPackages(): Set<string> {
|
|
32
|
-
const config = getNextConfig()
|
|
34
|
+
const config = getNextConfig()
|
|
33
35
|
return new Set([
|
|
34
36
|
...PREDEFINED_SERVER_EXTERNAL_PACKAGES,
|
|
35
37
|
...stringArray(config.serverExternalPackages),
|
|
36
|
-
])
|
|
38
|
+
])
|
|
37
39
|
}
|
|
38
40
|
|
|
39
41
|
/**
|
|
@@ -42,22 +44,22 @@ export function serverExternalPackages(): Set<string> {
|
|
|
42
44
|
* and written to `required-server-files.json` so tooling can read it back.
|
|
43
45
|
*/
|
|
44
46
|
export function deploymentId(): string | undefined {
|
|
45
|
-
const configured = getNextConfig().deploymentId
|
|
46
|
-
if (typeof configured === 'string' && configured.length > 0) return configured
|
|
47
|
+
const configured = getNextConfig().deploymentId
|
|
48
|
+
if (typeof configured === 'string' && configured.length > 0) return configured
|
|
47
49
|
// eslint-disable-next-line turbo/no-undeclared-env-vars
|
|
48
|
-
const fromEnv = process.env.NEXT_DEPLOYMENT_ID
|
|
49
|
-
return fromEnv && fromEnv.length > 0 ? fromEnv : undefined
|
|
50
|
+
const fromEnv = process.env.NEXT_DEPLOYMENT_ID
|
|
51
|
+
return fromEnv && fromEnv.length > 0 ? fromEnv : undefined
|
|
50
52
|
}
|
|
51
53
|
|
|
52
54
|
/** `publicRuntimeConfig`: the subset of runtime config safe to inline into client bundles. */
|
|
53
55
|
export function publicRuntimeConfig(): Record<string, unknown> {
|
|
54
|
-
const config = getNextConfig().publicRuntimeConfig
|
|
55
|
-
return config && typeof config === 'object' ? (config as Record<string, unknown>) : {}
|
|
56
|
+
const config = getNextConfig().publicRuntimeConfig
|
|
57
|
+
return config && typeof config === 'object' ? (config as Record<string, unknown>) : {}
|
|
56
58
|
}
|
|
57
59
|
|
|
58
60
|
/** `transpilePackages`: node_modules packages force-bundled + transpiled. */
|
|
59
61
|
export function transpilePackages(): string[] {
|
|
60
|
-
return stringArray(getNextConfig().transpilePackages)
|
|
62
|
+
return stringArray(getNextConfig().transpilePackages)
|
|
61
63
|
}
|
|
62
64
|
|
|
63
65
|
/**
|
|
@@ -67,19 +69,23 @@ export function transpilePackages(): string[] {
|
|
|
67
69
|
* malformed/object-template entries are dropped so a build still proceeds.
|
|
68
70
|
*/
|
|
69
71
|
export function modularizeImports(): Record<string, ModularizeRule> {
|
|
70
|
-
const raw = getNextConfig().modularizeImports
|
|
71
|
-
if (!raw || typeof raw !== 'object') return {}
|
|
72
|
-
const out: Record<string, ModularizeRule> = {}
|
|
72
|
+
const raw = getNextConfig().modularizeImports
|
|
73
|
+
if (!raw || typeof raw !== 'object') return {}
|
|
74
|
+
const out: Record<string, ModularizeRule> = {}
|
|
73
75
|
for (const [specifier, value] of Object.entries(raw as Record<string, unknown>)) {
|
|
74
|
-
if (
|
|
75
|
-
|
|
76
|
+
if (
|
|
77
|
+
value &&
|
|
78
|
+
typeof value === 'object' &&
|
|
79
|
+
typeof (value as ModularizeRule).transform === 'string'
|
|
80
|
+
) {
|
|
81
|
+
const rule = value as ModularizeRule
|
|
76
82
|
out[specifier] = {
|
|
77
83
|
transform: rule.transform,
|
|
78
84
|
skipDefaultConversion: Boolean(rule.skipDefaultConversion),
|
|
79
|
-
}
|
|
85
|
+
}
|
|
80
86
|
}
|
|
81
87
|
}
|
|
82
|
-
return out
|
|
88
|
+
return out
|
|
83
89
|
}
|
|
84
90
|
|
|
85
91
|
/**
|
|
@@ -89,19 +95,18 @@ export function modularizeImports(): Record<string, ModularizeRule> {
|
|
|
89
95
|
*/
|
|
90
96
|
export function optimizePackageImports(): string[] {
|
|
91
97
|
const experimental = getNextConfig().experimental as
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
return stringArray(experimental?.optimizePackageImports);
|
|
98
|
+
{ optimizePackageImports?: unknown } | undefined
|
|
99
|
+
return stringArray(experimental?.optimizePackageImports)
|
|
95
100
|
}
|
|
96
101
|
|
|
97
102
|
/** A normalized `compiler.relay` entry (see relay-transform.ts). */
|
|
98
103
|
export interface RelayCompilerConfig {
|
|
99
104
|
/** Source root the transform applies to, relative to `process.cwd()`. */
|
|
100
|
-
src: string
|
|
105
|
+
src: string
|
|
101
106
|
/** Where relay-compiler wrote its artifacts, relative to `process.cwd()`. */
|
|
102
|
-
artifactDirectory?: string
|
|
107
|
+
artifactDirectory?: string
|
|
103
108
|
/** The artifact language: decides the generated file's extension. */
|
|
104
|
-
language: 'javascript' | 'typescript' | 'flow'
|
|
109
|
+
language: 'javascript' | 'typescript' | 'flow'
|
|
105
110
|
}
|
|
106
111
|
|
|
107
112
|
/**
|
|
@@ -111,11 +116,10 @@ export interface RelayCompilerConfig {
|
|
|
111
116
|
*/
|
|
112
117
|
export function relayCompilerConfig(): RelayCompilerConfig | undefined {
|
|
113
118
|
const compiler = getNextConfig().compiler as
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
const language = relay.language;
|
|
119
|
+
{ relay?: { src?: unknown; artifactDirectory?: unknown; language?: unknown } } | undefined
|
|
120
|
+
const relay = compiler?.relay
|
|
121
|
+
if (!relay || typeof relay !== 'object' || typeof relay.src !== 'string') return undefined
|
|
122
|
+
const language = relay.language
|
|
119
123
|
return {
|
|
120
124
|
src: relay.src,
|
|
121
125
|
artifactDirectory:
|
|
@@ -124,7 +128,7 @@ export function relayCompilerConfig(): RelayCompilerConfig | undefined {
|
|
|
124
128
|
language === 'typescript' || language === 'flow' || language === 'javascript'
|
|
125
129
|
? language
|
|
126
130
|
: 'javascript',
|
|
127
|
-
}
|
|
131
|
+
}
|
|
128
132
|
}
|
|
129
133
|
|
|
130
134
|
/**
|
|
@@ -133,9 +137,8 @@ export function relayCompilerConfig(): RelayCompilerConfig | undefined {
|
|
|
133
137
|
*/
|
|
134
138
|
export function esmExternals(): boolean | 'loose' {
|
|
135
139
|
const experimental = getNextConfig().experimental as
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
return experimental?.esmExternals ?? true;
|
|
140
|
+
{ esmExternals?: boolean | 'loose' } | undefined
|
|
141
|
+
return experimental?.esmExternals ?? true
|
|
139
142
|
}
|
|
140
143
|
|
|
141
144
|
/**
|
|
@@ -143,56 +146,54 @@ export function esmExternals(): boolean | 'loose' {
|
|
|
143
146
|
* `turbopack.resolveExtensions`, and the legacy `experimental.turbo.resolveExtensions` spelling.
|
|
144
147
|
*/
|
|
145
148
|
export function resolveExtensions(): string[] | undefined {
|
|
146
|
-
const config = getNextConfig()
|
|
147
|
-
const turbopack = config.turbopack as { resolveExtensions?: unknown } | undefined
|
|
149
|
+
const config = getNextConfig()
|
|
150
|
+
const turbopack = config.turbopack as { resolveExtensions?: unknown } | undefined
|
|
148
151
|
const experimental = config.experimental as
|
|
149
|
-
|
|
150
|
-
| undefined;
|
|
152
|
+
{ turbo?: { resolveExtensions?: unknown } } | undefined
|
|
151
153
|
for (const value of [
|
|
152
154
|
config.resolveExtensions,
|
|
153
155
|
turbopack?.resolveExtensions,
|
|
154
156
|
experimental?.turbo?.resolveExtensions,
|
|
155
157
|
]) {
|
|
156
|
-
const list = stringArray(value)
|
|
157
|
-
if (list.length > 0) return list
|
|
158
|
+
const list = stringArray(value)
|
|
159
|
+
if (list.length > 0) return list
|
|
158
160
|
}
|
|
159
|
-
return undefined
|
|
161
|
+
return undefined
|
|
160
162
|
}
|
|
161
163
|
|
|
162
164
|
/** `typescript.tsconfigPath`: a non-default tsconfig location. */
|
|
163
165
|
export function tsconfigPath(): string | undefined {
|
|
164
|
-
const ts = getNextConfig().typescript as { tsconfigPath?: string } | undefined
|
|
165
|
-
return typeof ts?.tsconfigPath === 'string' ? ts.tsconfigPath : undefined
|
|
166
|
+
const ts = getNextConfig().typescript as { tsconfigPath?: string } | undefined
|
|
167
|
+
return typeof ts?.tsconfigPath === 'string' ? ts.tsconfigPath : undefined
|
|
166
168
|
}
|
|
167
169
|
|
|
168
170
|
export interface CompilerDefines {
|
|
169
171
|
/** Inlined into BOTH server and client bundles. */
|
|
170
|
-
define: Record<string, string
|
|
172
|
+
define: Record<string, string>
|
|
171
173
|
/** Inlined into the SERVER bundle only (client sees the fallback). */
|
|
172
|
-
defineServer: Record<string, string
|
|
174
|
+
defineServer: Record<string, string>
|
|
173
175
|
}
|
|
174
176
|
|
|
175
177
|
function normalizeDefineMap(value: unknown): Record<string, string> {
|
|
176
|
-
if (!value || typeof value !== 'object') return {}
|
|
177
|
-
const out: Record<string, string> = {}
|
|
178
|
+
if (!value || typeof value !== 'object') return {}
|
|
179
|
+
const out: Record<string, string> = {}
|
|
178
180
|
for (const [key, raw] of Object.entries(value as Record<string, unknown>)) {
|
|
179
181
|
// esbuild `define` values must be JS source text: strings need to be
|
|
180
182
|
// JSON-encoded, primitives stringified.
|
|
181
|
-
if (typeof raw === 'string') out[key] = JSON.stringify(raw)
|
|
182
|
-
else if (typeof raw === 'number' || typeof raw === 'boolean') out[key] = String(raw)
|
|
183
|
+
if (typeof raw === 'string') out[key] = JSON.stringify(raw)
|
|
184
|
+
else if (typeof raw === 'number' || typeof raw === 'boolean') out[key] = String(raw)
|
|
183
185
|
}
|
|
184
|
-
return out
|
|
186
|
+
return out
|
|
185
187
|
}
|
|
186
188
|
|
|
187
189
|
/** `compiler.define` / `compiler.defineServer` inlined-constant maps. */
|
|
188
190
|
export function compilerDefines(): CompilerDefines {
|
|
189
191
|
const compiler = getNextConfig().compiler as
|
|
190
|
-
|
|
191
|
-
| undefined;
|
|
192
|
+
{ define?: Record<string, unknown>; defineServer?: Record<string, unknown> } | undefined
|
|
192
193
|
return {
|
|
193
194
|
define: normalizeDefineMap(compiler?.define),
|
|
194
195
|
defineServer: normalizeDefineMap(compiler?.defineServer),
|
|
195
|
-
}
|
|
196
|
+
}
|
|
196
197
|
}
|
|
197
198
|
|
|
198
199
|
/** The console methods Next's SWC `removeConsole` transform can target. */
|
|
@@ -216,7 +217,7 @@ const CONSOLE_METHODS = [
|
|
|
216
217
|
'timeLog',
|
|
217
218
|
'trace',
|
|
218
219
|
'warn',
|
|
219
|
-
]
|
|
220
|
+
]
|
|
220
221
|
|
|
221
222
|
/**
|
|
222
223
|
* `compiler.removeConsole`: `true` strips every `console.*` call; `{ exclude }`
|
|
@@ -225,21 +226,20 @@ const CONSOLE_METHODS = [
|
|
|
225
226
|
*/
|
|
226
227
|
export function removeConsoleTargets(): string[] | undefined {
|
|
227
228
|
const compiler = getNextConfig().compiler as
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
if (!removeConsole) return undefined;
|
|
229
|
+
{ removeConsole?: boolean | { exclude?: unknown } } | undefined
|
|
230
|
+
const removeConsole = compiler?.removeConsole
|
|
231
|
+
if (!removeConsole) return undefined
|
|
232
232
|
const exclude = new Set(
|
|
233
233
|
typeof removeConsole === 'object' ? stringArray(removeConsole.exclude) : [],
|
|
234
|
-
)
|
|
235
|
-
return CONSOLE_METHODS.filter(method => !exclude.has(method)).map(method => `console.${method}`)
|
|
234
|
+
)
|
|
235
|
+
return CONSOLE_METHODS.filter(method => !exclude.has(method)).map(method => `console.${method}`)
|
|
236
236
|
}
|
|
237
237
|
|
|
238
238
|
/** `cacheComponents` (PPR): gates the `next-js` export condition. */
|
|
239
239
|
export function cacheComponentsEnabled(): boolean {
|
|
240
|
-
const config = getNextConfig()
|
|
241
|
-
const experimental = config.experimental as { cacheComponents?: boolean } | undefined
|
|
242
|
-
return Boolean(config.cacheComponents ?? experimental?.cacheComponents)
|
|
240
|
+
const config = getNextConfig()
|
|
241
|
+
const experimental = config.experimental as { cacheComponents?: boolean } | undefined
|
|
242
|
+
return Boolean(config.cacheComponents ?? experimental?.cacheComponents)
|
|
243
243
|
}
|
|
244
244
|
|
|
245
245
|
/**
|
|
@@ -251,39 +251,38 @@ export function cacheComponentsEnabled(): boolean {
|
|
|
251
251
|
*/
|
|
252
252
|
export function swcEnvUsageMode(): 'usage' | 'entry' | undefined {
|
|
253
253
|
const experimental = getNextConfig().experimental as
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
return mode === 'usage' || mode === 'entry' ? mode : undefined;
|
|
254
|
+
{ swcEnvOptions?: { mode?: unknown } } | undefined
|
|
255
|
+
const mode = experimental?.swcEnvOptions?.mode
|
|
256
|
+
return mode === 'usage' || mode === 'entry' ? mode : undefined
|
|
258
257
|
}
|
|
259
258
|
|
|
260
259
|
/** Next's `reactCompiler` / legacy experimental flag. */
|
|
261
260
|
export function reactCompilerEnabled(): boolean {
|
|
262
|
-
const config = getNextConfig()
|
|
263
|
-
const experimental = config.experimental as { reactCompiler?: boolean } | undefined
|
|
264
|
-
return Boolean(config.reactCompiler ?? experimental?.reactCompiler)
|
|
261
|
+
const config = getNextConfig()
|
|
262
|
+
const experimental = config.experimental as { reactCompiler?: boolean } | undefined
|
|
263
|
+
return Boolean(config.reactCompiler ?? experimental?.reactCompiler)
|
|
265
264
|
}
|
|
266
265
|
|
|
267
266
|
/** A single `turbopack.rules` entry, normalized to the shapes pnext supports. */
|
|
268
267
|
export interface WebpackLoaderRule {
|
|
269
268
|
/** The rule's glob key, e.g. `'*.txt'` or `'*.test-file.ts'`. Only a leading `*` wildcard is honored. */
|
|
270
|
-
glob: string
|
|
269
|
+
glob: string
|
|
271
270
|
/** Loader module specifiers (relative path or bare package name), applied in array order. */
|
|
272
|
-
loaders: string[]
|
|
271
|
+
loaders: string[]
|
|
273
272
|
/** The virtual extension of the loader chain's final output, e.g. `'*.js'`. */
|
|
274
|
-
as?: string
|
|
273
|
+
as?: string
|
|
275
274
|
/**
|
|
276
275
|
* A conditional rule guard: the rule only applies when the import's
|
|
277
276
|
* `resourceQuery` matches (string equality or a regex `.test`). Comes from the
|
|
278
277
|
* conditional-array rule form `'*.ext': [{ condition: { query }, loaders }]`.
|
|
279
278
|
*/
|
|
280
|
-
condition?: { query: string | RegExp }
|
|
279
|
+
condition?: { query: string | RegExp }
|
|
281
280
|
/**
|
|
282
281
|
* A no-loader `type` asset rule: how the raw file is represented as a module.
|
|
283
282
|
* `'resource'` emits the file under `/_next/static/media` and exports its URL
|
|
284
283
|
* string; `'bytes'` exports a `Uint8Array`; `'source'` exports the file text.
|
|
285
284
|
*/
|
|
286
|
-
assetType?: 'resource' | 'bytes' | 'source'
|
|
285
|
+
assetType?: 'resource' | 'bytes' | 'source'
|
|
287
286
|
}
|
|
288
287
|
|
|
289
288
|
/**
|
|
@@ -294,13 +293,13 @@ export interface WebpackLoaderRule {
|
|
|
294
293
|
* loader `type` asset rules (`{ type: 'asset' | 'bytes' | 'asset/source' }`).
|
|
295
294
|
*/
|
|
296
295
|
export function turbopackLoaderRules(): WebpackLoaderRule[] {
|
|
297
|
-
const config = getNextConfig()
|
|
298
|
-
const turbopack = config.turbopack as { rules?: Record<string, unknown> } | undefined
|
|
299
|
-
const rules = turbopack?.rules
|
|
300
|
-
if (!rules || typeof rules !== 'object') return []
|
|
301
|
-
const out: WebpackLoaderRule[] = []
|
|
302
|
-
for (const [glob, raw] of Object.entries(rules)) collectLoaderRuleEntries(glob, raw, out)
|
|
303
|
-
return out
|
|
296
|
+
const config = getNextConfig()
|
|
297
|
+
const turbopack = config.turbopack as { rules?: Record<string, unknown> } | undefined
|
|
298
|
+
const rules = turbopack?.rules
|
|
299
|
+
if (!rules || typeof rules !== 'object') return []
|
|
300
|
+
const out: WebpackLoaderRule[] = []
|
|
301
|
+
for (const [glob, raw] of Object.entries(rules)) collectLoaderRuleEntries(glob, raw, out)
|
|
302
|
+
return out
|
|
304
303
|
}
|
|
305
304
|
|
|
306
305
|
function collectLoaderRuleEntries(glob: string, raw: unknown, out: WebpackLoaderRule[]): void {
|
|
@@ -308,42 +307,48 @@ function collectLoaderRuleEntries(glob: string, raw: unknown, out: WebpackLoader
|
|
|
308
307
|
// A plain array of loader specifiers, or the conditional-array form whose
|
|
309
308
|
// entries are `{ condition, loaders, as }` objects.
|
|
310
309
|
if (raw.every(item => typeof item === 'string')) {
|
|
311
|
-
const loaders = stringArray(raw)
|
|
312
|
-
if (loaders.length > 0) out.push({ glob, loaders })
|
|
313
|
-
return
|
|
310
|
+
const loaders = stringArray(raw)
|
|
311
|
+
if (loaders.length > 0) out.push({ glob, loaders })
|
|
312
|
+
return
|
|
314
313
|
}
|
|
315
314
|
for (const item of raw) {
|
|
316
|
-
if (item && typeof item === 'object')
|
|
315
|
+
if (item && typeof item === 'object')
|
|
316
|
+
pushLoaderRuleObject(glob, item as Record<string, unknown>, out)
|
|
317
317
|
}
|
|
318
|
-
return
|
|
318
|
+
return
|
|
319
319
|
}
|
|
320
|
-
if (raw && typeof raw === 'object')
|
|
320
|
+
if (raw && typeof raw === 'object')
|
|
321
|
+
pushLoaderRuleObject(glob, raw as Record<string, unknown>, out)
|
|
321
322
|
}
|
|
322
323
|
|
|
323
|
-
function pushLoaderRuleObject(
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
324
|
+
function pushLoaderRuleObject(
|
|
325
|
+
glob: string,
|
|
326
|
+
entry: Record<string, unknown>,
|
|
327
|
+
out: WebpackLoaderRule[],
|
|
328
|
+
): void {
|
|
329
|
+
const loaders = stringArray(entry.loaders)
|
|
330
|
+
const as = typeof entry.as === 'string' ? entry.as : undefined
|
|
331
|
+
const condition = parseRuleCondition(entry.condition)
|
|
327
332
|
if (loaders.length > 0) {
|
|
328
|
-
out.push({ glob, loaders, as, ...(condition ? { condition } : {}) })
|
|
329
|
-
return
|
|
333
|
+
out.push({ glob, loaders, as, ...(condition ? { condition } : {}) })
|
|
334
|
+
return
|
|
330
335
|
}
|
|
331
|
-
const assetType = parseAssetRuleType(entry.type)
|
|
332
|
-
if (assetType) out.push({ glob, loaders: [], as, assetType })
|
|
336
|
+
const assetType = parseAssetRuleType(entry.type)
|
|
337
|
+
if (assetType) out.push({ glob, loaders: [], as, assetType })
|
|
333
338
|
}
|
|
334
339
|
|
|
335
340
|
function parseRuleCondition(value: unknown): { query: string | RegExp } | undefined {
|
|
336
|
-
if (!value || typeof value !== 'object') return undefined
|
|
337
|
-
const query = (value as { query?: unknown }).query
|
|
338
|
-
if (typeof query === 'string' || query instanceof RegExp) return { query }
|
|
339
|
-
return undefined
|
|
341
|
+
if (!value || typeof value !== 'object') return undefined
|
|
342
|
+
const query = (value as { query?: unknown }).query
|
|
343
|
+
if (typeof query === 'string' || query instanceof RegExp) return { query }
|
|
344
|
+
return undefined
|
|
340
345
|
}
|
|
341
346
|
|
|
342
347
|
function parseAssetRuleType(value: unknown): 'resource' | 'bytes' | 'source' | undefined {
|
|
343
|
-
if (value === 'asset' || value === 'asset/resource') return 'resource'
|
|
344
|
-
if (value === 'bytes') return 'bytes'
|
|
345
|
-
if (value === 'asset/source') return 'source'
|
|
346
|
-
return undefined
|
|
348
|
+
if (value === 'asset' || value === 'asset/resource') return 'resource'
|
|
349
|
+
if (value === 'bytes') return 'bytes'
|
|
350
|
+
if (value === 'asset/source') return 'source'
|
|
351
|
+
return undefined
|
|
347
352
|
}
|
|
348
353
|
|
|
349
354
|
/**
|
|
@@ -352,12 +357,12 @@ function parseAssetRuleType(value: unknown): 'resource' | 'bytes' | 'source' | u
|
|
|
352
357
|
* by the consumer.
|
|
353
358
|
*/
|
|
354
359
|
export function turbopackResolveAlias(): Record<string, string> {
|
|
355
|
-
const turbopack = getNextConfig().turbopack as { resolveAlias?: unknown } | undefined
|
|
356
|
-
const alias = turbopack?.resolveAlias
|
|
357
|
-
if (!alias || typeof alias !== 'object') return {}
|
|
358
|
-
const out: Record<string, string> = {}
|
|
360
|
+
const turbopack = getNextConfig().turbopack as { resolveAlias?: unknown } | undefined
|
|
361
|
+
const alias = turbopack?.resolveAlias
|
|
362
|
+
if (!alias || typeof alias !== 'object') return {}
|
|
363
|
+
const out: Record<string, string> = {}
|
|
359
364
|
for (const [key, value] of Object.entries(alias as Record<string, unknown>)) {
|
|
360
|
-
if (typeof value === 'string') out[key] = value
|
|
365
|
+
if (typeof value === 'string') out[key] = value
|
|
361
366
|
}
|
|
362
|
-
return out
|
|
367
|
+
return out
|
|
363
368
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { Plugin } from 'esbuild'
|
|
2
|
-
import type { ResolvedConfig } from '../../config'
|
|
3
|
-
import { packageNameOfSpecifier, resolvePackageSpecifier } from '../../resolve/imports'
|
|
4
|
-
import { escapeRegex } from '../../utils/
|
|
1
|
+
import type { Plugin } from 'esbuild'
|
|
2
|
+
import type { ResolvedConfig } from '../../config'
|
|
3
|
+
import { packageNameOfSpecifier, resolvePackageSpecifier } from '../../resolve/imports'
|
|
4
|
+
import { escapeRegex } from '../../utils/code'
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Bundle configured server externals into client output with browser exports.
|
|
@@ -13,22 +13,22 @@ export function clientExternalPackageResolvePlugin(
|
|
|
13
13
|
config: ResolvedConfig,
|
|
14
14
|
externals: ReadonlySet<string>,
|
|
15
15
|
): Plugin | undefined {
|
|
16
|
-
if (externals.size === 0) return undefined
|
|
17
|
-
const filter = new RegExp(`^(?:${[...externals].map(escapeRegex).join('|')})(?:/|$)`)
|
|
16
|
+
if (externals.size === 0) return undefined
|
|
17
|
+
const filter = new RegExp(`^(?:${[...externals].map(escapeRegex).join('|')})(?:/|$)`)
|
|
18
18
|
return {
|
|
19
19
|
name: 'pnext-client-external-package-resolve',
|
|
20
20
|
setup(build) {
|
|
21
21
|
build.onResolve({ filter }, args => {
|
|
22
|
-
const packageName = packageNameOfSpecifier(args.path)
|
|
23
|
-
if (!packageName || !externals.has(packageName)) return undefined
|
|
22
|
+
const packageName = packageNameOfSpecifier(args.path)
|
|
23
|
+
if (!packageName || !externals.has(packageName)) return undefined
|
|
24
24
|
const resolved = resolvePackageSpecifier(
|
|
25
25
|
config.root,
|
|
26
26
|
`${args.importer || config.root}/pnext-resolve.ts`,
|
|
27
27
|
args.path,
|
|
28
28
|
['import', 'browser', 'require', 'default'],
|
|
29
|
-
)
|
|
30
|
-
return resolved ? { path: resolved } : undefined
|
|
31
|
-
})
|
|
29
|
+
)
|
|
30
|
+
return resolved ? { path: resolved } : undefined
|
|
31
|
+
})
|
|
32
32
|
},
|
|
33
|
-
}
|
|
33
|
+
}
|
|
34
34
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { realpathSync } from 'node:fs'
|
|
2
|
-
import path from 'node:path'
|
|
3
|
-
import { pathToFileURL } from 'node:url'
|
|
4
|
-
import { rewriteFacts } from '../../resolve/scan-facts'
|
|
5
|
-
import { spliceSource } from '../../
|
|
1
|
+
import { realpathSync } from 'node:fs'
|
|
2
|
+
import path from 'node:path'
|
|
3
|
+
import { pathToFileURL } from 'node:url'
|
|
4
|
+
import { rewriteFacts } from '../../resolve/scan-facts'
|
|
5
|
+
import { spliceSource } from '../../runtime/module-transform'
|
|
6
6
|
|
|
7
7
|
export function sourceHasImportMetaUrl(source: string) {
|
|
8
|
-
return source.includes('import.meta.url')
|
|
8
|
+
return source.includes('import.meta.url')
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
/**
|
|
@@ -14,17 +14,17 @@ export function sourceHasImportMetaUrl(source: string) {
|
|
|
14
14
|
* the regex also fired inside strings and comments.
|
|
15
15
|
*/
|
|
16
16
|
export function rewriteImportMetaUrlSource(source: string, file: string) {
|
|
17
|
-
if (!sourceHasImportMetaUrl(source)) return source
|
|
18
|
-
const facts = rewriteFacts(file, source)
|
|
19
|
-
if (facts.unreliable) return legacyRewriteImportMetaUrl(source, file)
|
|
17
|
+
if (!sourceHasImportMetaUrl(source)) return source
|
|
18
|
+
const facts = rewriteFacts(file, source)
|
|
19
|
+
if (facts.unreliable) return legacyRewriteImportMetaUrl(source, file)
|
|
20
20
|
const edits = facts.importMetas
|
|
21
21
|
.filter(meta => /^\.url\b/.test(source.slice(meta.end, meta.end + 5)))
|
|
22
22
|
.map(meta => ({
|
|
23
23
|
start: meta.start,
|
|
24
24
|
end: meta.end + 4,
|
|
25
25
|
value: JSON.stringify(pathToFileURL(virtualFixturePath(realSourcePath(file))).href),
|
|
26
|
-
}))
|
|
27
|
-
return edits.length > 0 ? spliceSource(source, edits) : source
|
|
26
|
+
}))
|
|
27
|
+
return edits.length > 0 ? spliceSource(source, edits) : source
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
// A source oxc could only partially recover keeps the textual pass: an
|
|
@@ -33,7 +33,7 @@ function legacyRewriteImportMetaUrl(source: string, file: string) {
|
|
|
33
33
|
return source.replace(
|
|
34
34
|
/\bimport\.meta\.url\b/g,
|
|
35
35
|
JSON.stringify(pathToFileURL(virtualFixturePath(realSourcePath(file))).href),
|
|
36
|
-
)
|
|
36
|
+
)
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
// Modules can reach the bundler through the pages-compat mirror's source-app/
|
|
@@ -41,20 +41,20 @@ function legacyRewriteImportMetaUrl(source: string, file: string) {
|
|
|
41
41
|
// the filesystem relative to import.meta.url (Next inlines the real path).
|
|
42
42
|
function realSourcePath(file: string) {
|
|
43
43
|
try {
|
|
44
|
-
return realpathSync(file)
|
|
44
|
+
return realpathSync(file)
|
|
45
45
|
} catch {
|
|
46
|
-
return file
|
|
46
|
+
return file
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
function virtualFixturePath(file: string) {
|
|
51
51
|
// eslint-disable-next-line turbo/no-undeclared-env-vars
|
|
52
|
-
const root = process.env.PNEXT_IMPORT_META_URL_FIXTURE_ROOT
|
|
52
|
+
const root = process.env.PNEXT_IMPORT_META_URL_FIXTURE_ROOT
|
|
53
53
|
// eslint-disable-next-line turbo/no-undeclared-env-vars
|
|
54
|
-
const virtualRoot = process.env.PNEXT_IMPORT_META_URL_VIRTUAL_ROOT
|
|
55
|
-
if (!root || !virtualRoot) return file
|
|
56
|
-
const relative = path.relative(root, file)
|
|
54
|
+
const virtualRoot = process.env.PNEXT_IMPORT_META_URL_VIRTUAL_ROOT
|
|
55
|
+
if (!root || !virtualRoot) return file
|
|
56
|
+
const relative = path.relative(root, file)
|
|
57
57
|
return relative && !relative.startsWith(`..${path.sep}`) && relative !== '..'
|
|
58
58
|
? path.join(virtualRoot, relative)
|
|
59
|
-
: file
|
|
59
|
+
: file
|
|
60
60
|
}
|