@wular/pnext 0.0.4 → 0.0.7
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 +22 -16
- package/bin/pnext +6 -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 +87 -22
- package/reference/config.md +40 -93
- package/reference/css.md +42 -33
- package/reference/dev.md +26 -33
- package/reference/env.md +18 -20
- package/reference/getting-started.md +132 -0
- package/reference/metadata.md +31 -46
- package/reference/navigation.md +65 -105
- package/reference/performance.md +21 -142
- package/reference/rendering.md +78 -75
- package/reference/routing.md +97 -107
- package/reference/typegen.md +27 -29
- package/src/api/cache.ts +36 -37
- package/src/api/client-cache.ts +2 -2
- package/src/api/client-navigation.ts +121 -114
- package/src/api/dynamic.tsx +58 -55
- package/src/api/link.tsx +52 -53
- 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 +72 -64
- package/src/cli/dev.ts +116 -116
- package/src/cli/index.ts +94 -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 +802 -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 +32 -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 +2022 -1995
- package/src/{api → client}/router/types.ts +98 -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 +86 -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 +2087 -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 +87 -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 +954 -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 +428 -406
- package/src/styles.d.ts +9 -0
- package/src/types.ts +324 -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/reference/overview.md +0 -35
- 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
|
@@ -14,13 +14,13 @@
|
|
|
14
14
|
// Ownership boundary: the CLIENT-side `compiler.define` merge lives in client/build.ts, not here - this
|
|
15
15
|
// file only handles the SERVER graph.
|
|
16
16
|
|
|
17
|
-
import { realpathSync } from 'node:fs'
|
|
18
|
-
import { readFile } from 'node:fs/promises'
|
|
19
|
-
import path from 'node:path'
|
|
20
|
-
import type { OnLoadResult, Plugin } from 'esbuild'
|
|
21
|
-
import type { ResolvedConfig } from '../../config'
|
|
22
|
-
import type { ServerEsbuildPluginOptions } from '../../extensions'
|
|
23
|
-
import { compatAliases, nextCompatEnabled, rewriteNextFontSource } from '../../compat'
|
|
17
|
+
import { realpathSync } from 'node:fs'
|
|
18
|
+
import { readFile } from 'node:fs/promises'
|
|
19
|
+
import path from 'node:path'
|
|
20
|
+
import type { OnLoadResult, Plugin } from 'esbuild'
|
|
21
|
+
import type { ResolvedConfig } from '../../config'
|
|
22
|
+
import type { ServerEsbuildPluginOptions } from '../../extensions'
|
|
23
|
+
import { compatAliases, nextCompatEnabled, rewriteNextFontSource } from '../../compat/aliases'
|
|
24
24
|
import {
|
|
25
25
|
getBundlerExtensions,
|
|
26
26
|
getCompatModeExtensions,
|
|
@@ -32,7 +32,7 @@ import {
|
|
|
32
32
|
setBundlerExtensions,
|
|
33
33
|
setCompatModeExtensions,
|
|
34
34
|
withSniff,
|
|
35
|
-
} from '../../extensions'
|
|
35
|
+
} from '../../extensions'
|
|
36
36
|
import {
|
|
37
37
|
isEsmModuleFile,
|
|
38
38
|
isWorkspacePackage,
|
|
@@ -44,9 +44,9 @@ import {
|
|
|
44
44
|
setExternalPackagePolicy,
|
|
45
45
|
setResolveExtensions,
|
|
46
46
|
setTsConfigPath,
|
|
47
|
-
} from '../../resolve/imports'
|
|
48
|
-
import { setServerBundleConditions } from '../../runtime/
|
|
49
|
-
import { escapeRegex, specifierSniffTokens } from '../../utils/
|
|
47
|
+
} from '../../resolve/imports'
|
|
48
|
+
import { setServerBundleConditions } from '../../runtime/loader'
|
|
49
|
+
import { escapeRegex, specifierSniffTokens } from '../../utils/code'
|
|
50
50
|
import {
|
|
51
51
|
cacheComponentsEnabled,
|
|
52
52
|
compilerDefines,
|
|
@@ -63,21 +63,21 @@ import {
|
|
|
63
63
|
tsconfigPath,
|
|
64
64
|
transpilePackages,
|
|
65
65
|
turbopackResolveAlias,
|
|
66
|
-
} from '../bundler/config'
|
|
67
|
-
import { createModularizeImportsTransform } from '../bundler/modularize-imports'
|
|
66
|
+
} from '../bundler/config'
|
|
67
|
+
import { createModularizeImportsTransform } from '../bundler/modularize-imports'
|
|
68
68
|
import {
|
|
69
69
|
createOptimizePackageImportsTransform,
|
|
70
70
|
optimizedPackageSet,
|
|
71
|
-
} from '../bundler/optimize-package-imports'
|
|
72
|
-
import { createRelayTransform } from '../bundler/relay-transform'
|
|
71
|
+
} from '../bundler/optimize-package-imports'
|
|
72
|
+
import { createRelayTransform } from '../bundler/relay-transform'
|
|
73
73
|
import {
|
|
74
74
|
polyfillsChunkFileName,
|
|
75
75
|
POLYFILLS_NOMODULE_SOURCE,
|
|
76
76
|
POLYFILL_USAGE_TOKENS,
|
|
77
77
|
rewriteUsagePolyfillImports,
|
|
78
|
-
} from '../bundler/polyfill'
|
|
79
|
-
import { rewriteBunBuiltinExternals } from '../bundler/bun-externals'
|
|
80
|
-
import { clientExternalPackageResolvePlugin } from '../bundler/externals'
|
|
78
|
+
} from '../bundler/polyfill'
|
|
79
|
+
import { rewriteBunBuiltinExternals } from '../bundler/bun-externals'
|
|
80
|
+
import { clientExternalPackageResolvePlugin } from '../bundler/externals'
|
|
81
81
|
import {
|
|
82
82
|
clientDynamicCommonJsImportsPlugin,
|
|
83
83
|
clientReferenceLoad,
|
|
@@ -86,63 +86,59 @@ import {
|
|
|
86
86
|
recoverCommonJsNamedExportsPlugin,
|
|
87
87
|
rewriteClientDynamicImportPromises,
|
|
88
88
|
rewriteStaticCommonJsNamespaceImports,
|
|
89
|
-
} from '../bundler/cjs-exports'
|
|
90
|
-
import { rewriteImportMetaUrlSource } from '../bundler/import-meta-url'
|
|
91
|
-
import {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
} from '../bundler/
|
|
95
|
-
import {
|
|
96
|
-
import {
|
|
97
|
-
import {
|
|
98
|
-
import {
|
|
99
|
-
import { fileMemoAsync } from '../bundler/source-cache';
|
|
100
|
-
import { serverSymlinkImportPlugin, symlinkedImportsPossible } from '../bundler/symlink-imports';
|
|
101
|
-
import { registerWasmModuleRuntime, wasmModulePlugin } from '../bundler/wasm';
|
|
89
|
+
} from '../bundler/cjs-exports'
|
|
90
|
+
import { rewriteImportMetaUrlSource } from '../bundler/import-meta-url'
|
|
91
|
+
import { rewriteNewUrlAssetClientSource, rewriteNewUrlAssetSource } from '../bundler/new-url-asset'
|
|
92
|
+
import { rewriteReactProfilerImport } from '../bundler/react-compiler'
|
|
93
|
+
import { rewriteRequireContextSource } from '../bundler/require-context'
|
|
94
|
+
import { clientResolveExtensionsPlugin } from '../bundler/resolve-extensions'
|
|
95
|
+
import { tsconfigPathsPlugin } from '../bundler/tsconfig-paths'
|
|
96
|
+
import { fileMemoAsync } from '../bundler/source-cache'
|
|
97
|
+
import { serverSymlinkImportPlugin, symlinkedImportsPossible } from '../bundler/symlink-imports'
|
|
98
|
+
import { registerWasmModuleRuntime, wasmModulePlugin } from '../bundler/wasm'
|
|
102
99
|
import {
|
|
103
100
|
hasWebpackLoaderRuleFor,
|
|
104
101
|
registerWebpackLoaderRuleRuntime,
|
|
105
102
|
rewriteResolveAliasImports,
|
|
106
103
|
webpackLoaderRuleModule,
|
|
107
104
|
webpackLoaderRulesPlugin,
|
|
108
|
-
} from '../bundler/webpack-loaders'
|
|
109
|
-
import { rewriteStaticCompatImports } from '../bundler/static-imports'
|
|
110
|
-
import { createClientWorkerTransform } from '../bundler/worker'
|
|
111
|
-
import { rewriteStyledJsxSource } from '../css/styled-jsx'
|
|
112
|
-
import { getImagesConfig } from '../next/image/config'
|
|
113
|
-
import { appUsesBlurPlaceholder } from '../next/
|
|
114
|
-
import {
|
|
115
|
-
import {
|
|
116
|
-
import { pagesClientModulePlugin } from '../pages/client-plugin';
|
|
105
|
+
} from '../bundler/webpack-loaders'
|
|
106
|
+
import { rewriteStaticCompatImports } from '../bundler/static-imports'
|
|
107
|
+
import { createClientWorkerTransform } from '../bundler/worker'
|
|
108
|
+
import { rewriteStyledJsxSource } from '../css/styled-jsx'
|
|
109
|
+
import { getImagesConfig } from '../next/image/config'
|
|
110
|
+
import { appUsesBlurPlaceholder, appUsesLegacyLink } from '../next/usage'
|
|
111
|
+
import { rewriteLegacyLinkValidation } from '../next/link-transform'
|
|
112
|
+
import { pagesClientModulePlugin } from '../pages/client-plugin'
|
|
117
113
|
|
|
118
114
|
export function registerBundlerExtensions(config: ResolvedConfig): void {
|
|
119
115
|
// The alias registries (setImportAliasExtensions + setModuleAliases) are boot
|
|
120
116
|
// facts — the route scanner and the server runtime latch them before the
|
|
121
117
|
// first compile, so register-boot.ts owns them.
|
|
122
|
-
if (!nextCompatEnabled(config)) return
|
|
118
|
+
if (!nextCompatEnabled(config)) return
|
|
123
119
|
|
|
124
120
|
// B3: user-configured resolver extension order (empty -> core default). The
|
|
125
121
|
// server resolver consumes it via setResolveExtensions; the client esbuild
|
|
126
122
|
// graph gets a probe plugin applying the same order (registered further down
|
|
127
123
|
// with the other client plugins, only when configured).
|
|
128
|
-
const configuredExtensions = resolveExtensions()
|
|
129
|
-
setResolveExtensions(configuredExtensions)
|
|
124
|
+
const configuredExtensions = resolveExtensions()
|
|
125
|
+
setResolveExtensions(configuredExtensions)
|
|
130
126
|
// A custom `typescript.tsconfigPath` keeps compiler `paths` in a
|
|
131
127
|
// non-default file esbuild never discovers; the client build then needs an
|
|
132
128
|
// explicit resolver plugin (server graph consults setTsConfigPath directly).
|
|
133
|
-
const customTsconfigPath = tsconfigPath()
|
|
134
|
-
setTsConfigPath(customTsconfigPath ? path.resolve(config.root, customTsconfigPath) : undefined)
|
|
129
|
+
const customTsconfigPath = tsconfigPath()
|
|
130
|
+
setTsConfigPath(customTsconfigPath ? path.resolve(config.root, customTsconfigPath) : undefined)
|
|
135
131
|
|
|
136
132
|
// `turbopack.rules` loader chains: the esbuild-plugin form (webpackLoaderPlugins
|
|
137
133
|
// below) only covers the vendor/client build() passes. The server runtime's
|
|
138
134
|
// per-file SSR loading goes through Bun's own require hooks instead, so a
|
|
139
135
|
// configured rule extension without other pnext handling (e.g. `*.txt`) needs
|
|
140
136
|
// its own registration to preempt Bun's native fallback loader.
|
|
141
|
-
registerWebpackLoaderRuleRuntime(config)
|
|
137
|
+
registerWebpackLoaderRuleRuntime(config)
|
|
142
138
|
// Same story for a bare `.wasm` import the server runtime loads directly (a
|
|
143
139
|
// `this.importModule()` target's graph): Bun's native loader has no named
|
|
144
140
|
// exports, so the runtime needs its own instantiating hook.
|
|
145
|
-
registerWasmModuleRuntime(config)
|
|
141
|
+
registerWasmModuleRuntime(config)
|
|
146
142
|
// A configured loader rule for an image/asset extension must preempt core's generic image/asset
|
|
147
143
|
// resolver so the loader chain runs; core consults `hasLoaderRuleFor` before claiming the extension for
|
|
148
144
|
// its own pipeline, then pulls the chain's output through `loaderRuleModule` - the server graph compiles
|
|
@@ -150,11 +146,11 @@ export function registerBundlerExtensions(config: ResolvedConfig): void {
|
|
|
150
146
|
setAssetExtensions({
|
|
151
147
|
hasLoaderRuleFor: hasWebpackLoaderRuleFor,
|
|
152
148
|
loaderRuleModule: (specifier, importer) => webpackLoaderRuleModule(config, specifier, importer),
|
|
153
|
-
})
|
|
149
|
+
})
|
|
154
150
|
|
|
155
151
|
// B7: external/transpile package policy consulted by the server compile sites.
|
|
156
|
-
const externals = serverExternalPackages()
|
|
157
|
-
const transpile = new Set(transpilePackages())
|
|
152
|
+
const externals = serverExternalPackages()
|
|
153
|
+
const transpile = new Set(transpilePackages())
|
|
158
154
|
setExternalPackagePolicy({
|
|
159
155
|
external: name => externals.has(name),
|
|
160
156
|
transpile: name =>
|
|
@@ -163,108 +159,111 @@ export function registerBundlerExtensions(config: ResolvedConfig): void {
|
|
|
163
159
|
// symlinks to real paths, so they never reach a filter as node_modules.
|
|
164
160
|
transpiled: () => [...transpile].filter(name => !externals.has(name)),
|
|
165
161
|
esmExternals,
|
|
166
|
-
})
|
|
162
|
+
})
|
|
167
163
|
setExternalLoadResolver(({ root, fromFile, specifier, target }) => {
|
|
168
164
|
const packageName = specifier.startsWith('#')
|
|
169
165
|
? packageNameForFile(fromFile)
|
|
170
|
-
: packageNameOfSpecifier(specifier)
|
|
171
|
-
if (!packageName || !externals.has(packageName)) return undefined
|
|
166
|
+
: packageNameOfSpecifier(specifier)
|
|
167
|
+
if (!packageName || !externals.has(packageName)) return undefined
|
|
172
168
|
|
|
173
169
|
const conditions =
|
|
174
170
|
target === 'client'
|
|
175
171
|
? ['import', 'browser', 'require', 'default']
|
|
176
172
|
: target === 'edge'
|
|
177
173
|
? ['react-server', 'edge-light', 'browser', 'module', 'import', 'default']
|
|
178
|
-
: ['node', 'import', 'default']
|
|
174
|
+
: ['node', 'import', 'default']
|
|
179
175
|
if (specifier.startsWith('#')) {
|
|
180
|
-
return resolvePackageImportSpecifier(root, fromFile, specifier, conditions)
|
|
176
|
+
return resolvePackageImportSpecifier(root, fromFile, specifier, conditions)
|
|
181
177
|
}
|
|
182
178
|
|
|
183
|
-
const imported = resolvePackageSpecifier(root, fromFile, specifier, conditions)
|
|
179
|
+
const imported = resolvePackageSpecifier(root, fromFile, specifier, conditions)
|
|
184
180
|
if (target === 'client' || !imported || esmExternals() !== true || isEsmModuleFile(imported)) {
|
|
185
|
-
return imported
|
|
181
|
+
return imported
|
|
186
182
|
}
|
|
187
183
|
const requireConditions =
|
|
188
184
|
target === 'edge'
|
|
189
185
|
? ['react-server', 'edge-light', 'browser', 'module', 'require', 'import', 'default']
|
|
190
|
-
: ['node', 'require', 'default']
|
|
191
|
-
return resolvePackageSpecifier(root, fromFile, specifier, requireConditions) ?? imported
|
|
192
|
-
})
|
|
186
|
+
: ['node', 'require', 'default']
|
|
187
|
+
return resolvePackageSpecifier(root, fromFile, specifier, requireConditions) ?? imported
|
|
188
|
+
})
|
|
193
189
|
// B4/B5(next-js): rendering follows it only with Cache Components; core
|
|
194
190
|
// adds react-server for server vendor bundles.
|
|
195
|
-
setServerBundleConditions(() => (cacheComponentsEnabled() ? ['next-js'] : []))
|
|
191
|
+
setServerBundleConditions(() => (cacheComponentsEnabled() ? ['next-js'] : []))
|
|
196
192
|
|
|
197
193
|
// modularizeImports: split barrel `import { A, B } from '<spec>'` into
|
|
198
194
|
// per-member imports BEFORE path-alias resolution, so the emitted specifiers
|
|
199
195
|
// still flow through tsconfig `paths`. Registered as a server pre-transform
|
|
200
196
|
// (runs ahead of the static-compat alias rewrites below) and a client
|
|
201
197
|
// transform; a no-op when unconfigured.
|
|
202
|
-
const modularize = modularizeImports()
|
|
198
|
+
const modularize = modularizeImports()
|
|
203
199
|
if (Object.keys(modularize).length > 0) {
|
|
204
|
-
const modularizeTransform = createModularizeImportsTransform(modularize)
|
|
205
|
-
registerServerSourcePreTransforms(modularizeTransform)
|
|
206
|
-
registerClientSourceTransforms(modularizeTransform)
|
|
200
|
+
const modularizeTransform = createModularizeImportsTransform(modularize)
|
|
201
|
+
registerServerSourcePreTransforms(modularizeTransform)
|
|
202
|
+
registerClientSourceTransforms(modularizeTransform)
|
|
207
203
|
}
|
|
208
204
|
|
|
209
205
|
// optimizePackageImports: rewrite a barrel package's named imports to the leaf modules its entry
|
|
210
206
|
// re-exports them from, so the vendor pipeline compiles - and the server evaluates - only what the
|
|
211
207
|
// route named. Same chain position as modularizeImports, so the emitted leaf specifiers still flow
|
|
212
208
|
// through alias/path resolution.
|
|
213
|
-
const optimizedPackages = optimizedPackageSet(optimizePackageImports())
|
|
214
|
-
const optimizeTransform = createOptimizePackageImportsTransform(optimizedPackages, config.root)
|
|
215
|
-
registerServerSourcePreTransforms(optimizeTransform)
|
|
216
|
-
registerClientSourceTransforms(optimizeTransform)
|
|
209
|
+
const optimizedPackages = optimizedPackageSet(optimizePackageImports())
|
|
210
|
+
const optimizeTransform = createOptimizePackageImportsTransform(optimizedPackages, config.root)
|
|
211
|
+
registerServerSourcePreTransforms(optimizeTransform)
|
|
212
|
+
registerClientSourceTransforms(optimizeTransform)
|
|
217
213
|
|
|
218
214
|
// compiler.relay: replace `graphql`...`` tagged templates with the artifact
|
|
219
215
|
// relay-compiler generated for the operation. Registered as a pre-transform
|
|
220
216
|
// for the same reason modularizeImports is — the injected artifact imports
|
|
221
217
|
// must still flow through alias/path resolution.
|
|
222
|
-
const relay = relayCompilerConfig()
|
|
218
|
+
const relay = relayCompilerConfig()
|
|
223
219
|
if (relay) {
|
|
224
|
-
const relayTransform = createRelayTransform(relay)
|
|
225
|
-
registerServerSourcePreTransforms(relayTransform)
|
|
226
|
-
registerClientSourceTransforms(relayTransform)
|
|
220
|
+
const relayTransform = createRelayTransform(relay)
|
|
221
|
+
registerServerSourcePreTransforms(relayTransform)
|
|
222
|
+
registerClientSourceTransforms(relayTransform)
|
|
227
223
|
}
|
|
228
224
|
|
|
229
225
|
// Next font/root-params rewrites must precede generic server transforms.
|
|
230
|
-
const fontSniff = ['next/font', 'next/root-params']
|
|
226
|
+
const fontSniff = ['next/font', 'next/root-params']
|
|
231
227
|
registerServerSourcePreTransforms(
|
|
232
228
|
withSniff(fontSniff, (source, file, root) =>
|
|
233
229
|
rewriteNextFontSource(source, file, 'server', root),
|
|
234
230
|
),
|
|
235
|
-
)
|
|
231
|
+
)
|
|
236
232
|
registerClientSourceTransforms(
|
|
237
233
|
withSniff(fontSniff, (source, file, root) =>
|
|
238
234
|
rewriteNextFontSource(source, file, 'client', root),
|
|
239
235
|
),
|
|
240
|
-
)
|
|
241
|
-
const linkSniff = ['Link', 'legacyBehavior']
|
|
242
|
-
registerServerSourcePreTransforms(withSniff(linkSniff, rewriteLegacyLinkValidation))
|
|
243
|
-
registerClientSourceTransforms(withSniff(linkSniff, rewriteLegacyLinkValidation))
|
|
244
|
-
registerServerSourcePreTransforms(withSniff(['<style'], rewriteStyledJsxSource))
|
|
245
|
-
registerClientSourceTransforms(withSniff(['<style'], rewriteStyledJsxSource))
|
|
246
|
-
registerServerSourceTransforms(withSniff(["'bun", '"bun'], rewriteBunBuiltinExternals))
|
|
236
|
+
)
|
|
237
|
+
const linkSniff = ['Link', 'legacyBehavior']
|
|
238
|
+
registerServerSourcePreTransforms(withSniff(linkSniff, rewriteLegacyLinkValidation))
|
|
239
|
+
registerClientSourceTransforms(withSniff(linkSniff, rewriteLegacyLinkValidation))
|
|
240
|
+
registerServerSourcePreTransforms(withSniff(['<style'], rewriteStyledJsxSource))
|
|
241
|
+
registerClientSourceTransforms(withSniff(['<style'], rewriteStyledJsxSource))
|
|
242
|
+
registerServerSourceTransforms(withSniff(["'bun", '"bun'], rewriteBunBuiltinExternals))
|
|
247
243
|
// Materialized fixtures can re-import original sources outside esbuild's
|
|
248
244
|
// alias graph. Keep their static compat imports on the registered facades.
|
|
249
245
|
// Leave React entrypoints for the resolver: RSC/proxy/middleware needs the
|
|
250
246
|
// stricter react-server-layer overrides instead of the ordinary shims.
|
|
251
|
-
const staticServerAliases = compatAliases(config, 'server')
|
|
252
|
-
delete staticServerAliases.react
|
|
253
|
-
delete staticServerAliases['react-dom']
|
|
247
|
+
const staticServerAliases = compatAliases(config, 'server')
|
|
248
|
+
delete staticServerAliases.react
|
|
249
|
+
delete staticServerAliases['react-dom']
|
|
254
250
|
// The CJS facades live in compat/next, one level up from this register dir.
|
|
255
|
-
const nextRoot = path.resolve(import.meta.dirname, '..', 'next')
|
|
251
|
+
const nextRoot = path.resolve(import.meta.dirname, '..', 'next')
|
|
256
252
|
const requireAliases = {
|
|
257
253
|
'next/navigation': path.join(nextRoot, 'navigation.cjs'),
|
|
258
254
|
'next/router': path.join(nextRoot, 'router.cjs'),
|
|
259
|
-
}
|
|
255
|
+
}
|
|
260
256
|
registerServerSourceTransforms(
|
|
261
257
|
withSniff(
|
|
262
258
|
specifierSniffTokens([...Object.keys(staticServerAliases), ...Object.keys(requireAliases)]),
|
|
263
|
-
(source, file) =>
|
|
259
|
+
(source, file) =>
|
|
260
|
+
rewriteStaticCompatImports(source, file, staticServerAliases, requireAliases),
|
|
264
261
|
),
|
|
265
|
-
)
|
|
266
|
-
const namespaceImportSniff = [/import\s+\*/]
|
|
267
|
-
registerServerSourceTransforms(
|
|
262
|
+
)
|
|
263
|
+
const namespaceImportSniff = [/import\s+\*/]
|
|
264
|
+
registerServerSourceTransforms(
|
|
265
|
+
withSniff(namespaceImportSniff, rewriteStaticCommonJsNamespaceImports),
|
|
266
|
+
)
|
|
268
267
|
// `turbopack.resolveAlias` bare specifiers: the esbuild/Bun onResolve hooks
|
|
269
268
|
// cover the graphs they own, but Bun's runtime resolver rejects an unknown
|
|
270
269
|
// bare package before plugins run, so modules the server runtime loads
|
|
@@ -274,24 +273,26 @@ export function registerBundlerExtensions(config: ResolvedConfig): void {
|
|
|
274
273
|
withSniff(specifierSniffTokens(Object.keys(turbopackResolveAlias())), (source, file) =>
|
|
275
274
|
rewriteResolveAliasImports(source, file, config.root),
|
|
276
275
|
),
|
|
277
|
-
)
|
|
278
|
-
registerClientSourceTransforms(
|
|
276
|
+
)
|
|
277
|
+
registerClientSourceTransforms(
|
|
278
|
+
withSniff(namespaceImportSniff, rewriteStaticCommonJsNamespaceImports),
|
|
279
|
+
)
|
|
279
280
|
|
|
280
281
|
// B5: compiler.define + compiler.defineServer, both graphs, through the
|
|
281
282
|
// bundler's own `define`. The server graph inlines both; the client graph
|
|
282
283
|
// inlines `define` and folds `defineServer` keys to `undefined` so client
|
|
283
284
|
// fallback branches stay reachable. `define` wins a key present in both.
|
|
284
|
-
const { define, defineServer } = compilerDefines()
|
|
285
|
-
const serverDefines = { ...define, ...defineServer }
|
|
285
|
+
const { define, defineServer } = compilerDefines()
|
|
286
|
+
const serverDefines = { ...define, ...defineServer }
|
|
286
287
|
const clientDefines = {
|
|
287
288
|
...Object.fromEntries(Object.keys(defineServer).map(key => [key, 'undefined'])),
|
|
288
289
|
...define,
|
|
289
|
-
}
|
|
290
|
+
}
|
|
290
291
|
|
|
291
292
|
// B5: compiler.removeConsole — strip console.* calls from the client graph
|
|
292
293
|
// via esbuild's `pure` option (unused-result calls are dropped in the
|
|
293
294
|
// minified production build).
|
|
294
|
-
const removeConsole = removeConsoleTargets()
|
|
295
|
+
const removeConsole = removeConsoleTargets()
|
|
295
296
|
|
|
296
297
|
// experimental.swcEnvOptions: core-js polyfills for the targeted features, on
|
|
297
298
|
// the client graph only — the server graph runs on the current Node/Bun and
|
|
@@ -301,7 +302,7 @@ export function registerBundlerExtensions(config: ResolvedConfig): void {
|
|
|
301
302
|
withSniff(POLYFILL_USAGE_TOKENS, (source, file) =>
|
|
302
303
|
rewriteUsagePolyfillImports(source, file, config),
|
|
303
304
|
),
|
|
304
|
-
)
|
|
305
|
+
)
|
|
305
306
|
}
|
|
306
307
|
|
|
307
308
|
// B: `new URL('./asset.png', import.meta.url)` -> emitted /_next/static/media
|
|
@@ -313,8 +314,8 @@ export function registerBundlerExtensions(config: ResolvedConfig): void {
|
|
|
313
314
|
withSniff(['import.meta.url', 'Profiler'], (source, file) =>
|
|
314
315
|
rewriteNewUrlAssetSource(source, file),
|
|
315
316
|
),
|
|
316
|
-
)
|
|
317
|
-
registerServerSourceTransforms(withSniff(['import.meta.url'], rewriteImportMetaUrlSource))
|
|
317
|
+
)
|
|
318
|
+
registerServerSourceTransforms(withSniff(['import.meta.url'], rewriteImportMetaUrlSource))
|
|
318
319
|
// Client order is load-bearing: the worker pass (async, registered below) and
|
|
319
320
|
// the new-URL asset pass both read `import.meta.url`, which this one inlines.
|
|
320
321
|
registerClientSourceTransforms(
|
|
@@ -322,49 +323,51 @@ export function registerBundlerExtensions(config: ResolvedConfig): void {
|
|
|
322
323
|
withSniff(['Profiler'], rewriteReactProfilerImport),
|
|
323
324
|
withSniff([/\.then\s*\(/], source => rewriteClientDynamicImportPromises(source)),
|
|
324
325
|
withSniff(['import.meta.url'], rewriteImportMetaUrlSource),
|
|
325
|
-
)
|
|
326
|
+
)
|
|
326
327
|
// webpack's `require.context(dir, recursive, regExp)`: expanded on disk into static imports plus a
|
|
327
328
|
// synthesized context object. Registered as a source transform, not an esbuild onLoad plugin, so it
|
|
328
329
|
// reaches every consumer of the compiled source without preempting the extension-specific loaders -
|
|
329
330
|
// the server graph through `rewriteServerSource` and the client graph through
|
|
330
331
|
// `applyClientSourceTransforms`.
|
|
331
|
-
const requireContextPaths = { outPath: config.outPath, workspaceRoot: config.workspaceRoot }
|
|
332
|
+
const requireContextPaths = { outPath: config.outPath, workspaceRoot: config.workspaceRoot }
|
|
332
333
|
registerServerSourceTransforms(
|
|
333
334
|
withSniff(['.context('], (source, file) =>
|
|
334
335
|
rewriteRequireContextSource(source, file, requireContextPaths),
|
|
335
336
|
),
|
|
336
|
-
)
|
|
337
|
+
)
|
|
337
338
|
registerClientSourceTransforms(
|
|
338
339
|
withSniff(['.context('], (source, file) =>
|
|
339
340
|
rewriteRequireContextSource(source, file, requireContextPaths),
|
|
340
341
|
),
|
|
341
|
-
)
|
|
342
|
+
)
|
|
342
343
|
// Web Worker bundling: an async pre-transform, so it sees `import.meta.url`
|
|
343
344
|
// before the sync chain above inlines it. The rest of the chain then runs on
|
|
344
345
|
// its output — no companion re-application needed.
|
|
345
|
-
const workerTransform = createClientWorkerTransform(config, configuredExtensions)
|
|
346
|
+
const workerTransform = createClientWorkerTransform(config, configuredExtensions)
|
|
346
347
|
registerClientSourceAsyncPreTransforms(
|
|
347
|
-
withSniff(['new Worker(', 'new SharedWorker('], (source, file) =>
|
|
348
|
-
|
|
348
|
+
withSniff(['new Worker(', 'new SharedWorker('], (source, file) =>
|
|
349
|
+
workerTransform(source, file),
|
|
350
|
+
),
|
|
351
|
+
)
|
|
349
352
|
|
|
350
353
|
// next.config's `reactCompiler` is the same switch as pnext's own
|
|
351
354
|
// `compat.reactCompiler`: fold it into the compat-mode options so the single
|
|
352
355
|
// compiler pass (core's client-source loader) sees one answer.
|
|
353
|
-
const priorReactCompilerOptions = getCompatModeExtensions().reactCompilerOptions
|
|
356
|
+
const priorReactCompilerOptions = getCompatModeExtensions().reactCompilerOptions
|
|
354
357
|
setCompatModeExtensions({
|
|
355
358
|
reactCompilerOptions: cfg =>
|
|
356
359
|
priorReactCompilerOptions(cfg) ?? (reactCompilerEnabled() ? { target: '18' } : undefined),
|
|
357
|
-
})
|
|
360
|
+
})
|
|
358
361
|
|
|
359
362
|
// Created once, not per build: the memo spans the hundreds of server builds
|
|
360
363
|
// a vendor pass runs over the same workspace sources.
|
|
361
364
|
const firstPartyRewrite = createFirstPartySourceRewrite(config, {
|
|
362
365
|
transform: optimizeTransform,
|
|
363
366
|
sniff: specifierSniffTokens(optimizedPackages),
|
|
364
|
-
})
|
|
365
|
-
const priorClient = getBundlerExtensions().clientEsbuildPlugins
|
|
366
|
-
const priorServer = getBundlerExtensions().serverEsbuildPlugins
|
|
367
|
-
const priorPure = getBundlerExtensions().clientPureFunctions
|
|
367
|
+
})
|
|
368
|
+
const priorClient = getBundlerExtensions().clientEsbuildPlugins
|
|
369
|
+
const priorServer = getBundlerExtensions().serverEsbuildPlugins
|
|
370
|
+
const priorPure = getBundlerExtensions().clientPureFunctions
|
|
368
371
|
setBundlerExtensions({
|
|
369
372
|
clientPureFunctions: cfg => [...priorPure(cfg), ...(removeConsole ?? [])],
|
|
370
373
|
serverDefines: () => serverDefines,
|
|
@@ -374,7 +377,7 @@ export function registerBundlerExtensions(config: ResolvedConfig): void {
|
|
|
374
377
|
clientDefines: () => ({
|
|
375
378
|
...clientDefines,
|
|
376
379
|
__PNEXT_IMAGE_BLUR__: String(appUsesBlurPlaceholder(config.root)),
|
|
377
|
-
// Same one-sided source scan for `<Link legacyBehavior>` (
|
|
380
|
+
// Same one-sided source scan for `<Link legacyBehavior>` (usage.ts).
|
|
378
381
|
__PNEXT_LINK_LEGACY__: String(appUsesLegacyLink(config.root)),
|
|
379
382
|
// next.config `images` only ever reached the server global, so the client
|
|
380
383
|
// fell back to the defaults — config-dependent props (path, qualities,
|
|
@@ -429,17 +432,17 @@ export function registerBundlerExtensions(config: ResolvedConfig): void {
|
|
|
429
432
|
...priorServer(cfg, opts),
|
|
430
433
|
],
|
|
431
434
|
serverBundleEntry: commonJsInteropEntry,
|
|
432
|
-
})
|
|
435
|
+
})
|
|
433
436
|
}
|
|
434
437
|
|
|
435
438
|
/** Spread helper for the plugins that skip registration when unconfigured. */
|
|
436
439
|
function optional(plugin: Plugin | undefined): Plugin[] {
|
|
437
|
-
return plugin ? [plugin] : []
|
|
440
|
+
return plugin ? [plugin] : []
|
|
438
441
|
}
|
|
439
442
|
|
|
440
443
|
function webpackLoaderPlugins(cfg: ResolvedConfig, target: 'client' | 'server'): Plugin[] {
|
|
441
|
-
const plugin = webpackLoaderRulesPlugin(cfg, target)
|
|
442
|
-
return plugin ? [plugin] : []
|
|
444
|
+
const plugin = webpackLoaderRulesPlugin(cfg, target)
|
|
445
|
+
return plugin ? [plugin] : []
|
|
443
446
|
}
|
|
444
447
|
|
|
445
448
|
// Source rewrites a bundle has to get BEFORE resolution, applied where esbuild reads the file:
|
|
@@ -451,44 +454,46 @@ function webpackLoaderPlugins(cfg: ResolvedConfig, target: 'client' | 'server'):
|
|
|
451
454
|
// rewrite and the whole catalogue was compiled and evaluated.
|
|
452
455
|
// Both are idempotent: re-running either on already-rewritten source is a no-op.
|
|
453
456
|
interface FirstPartySourceRewrite {
|
|
454
|
-
rewrite: (file: string) => Promise<OnLoadResult | undefined
|
|
457
|
+
rewrite: (file: string) => Promise<OnLoadResult | undefined>
|
|
455
458
|
/** node_modules dirs transpilePackages opts back into the rewrite. */
|
|
456
|
-
transpiledFilter?: RegExp
|
|
459
|
+
transpiledFilter?: RegExp
|
|
457
460
|
}
|
|
458
461
|
|
|
459
462
|
function createFirstPartySourceRewrite(
|
|
460
463
|
config: ResolvedConfig,
|
|
461
464
|
optimize: { transform: (source: string, file: string) => string; sniff: readonly string[] },
|
|
462
465
|
): FirstPartySourceRewrite {
|
|
463
|
-
const transpiled = transpilePackages()
|
|
466
|
+
const transpiled = transpilePackages()
|
|
464
467
|
const rewrite = fileMemoAsync(async (file: string): Promise<OnLoadResult | undefined> => {
|
|
465
|
-
let source: string
|
|
468
|
+
let source: string
|
|
466
469
|
try {
|
|
467
|
-
source = await readFile(file, 'utf8')
|
|
470
|
+
source = await readFile(file, 'utf8')
|
|
468
471
|
} catch {
|
|
469
|
-
return undefined
|
|
472
|
+
return undefined
|
|
470
473
|
}
|
|
471
|
-
let contents = source
|
|
474
|
+
let contents = source
|
|
472
475
|
if (contents.includes('next/font/')) {
|
|
473
|
-
contents = rewriteNextFontSource(contents, file, 'server', config.root)
|
|
476
|
+
contents = rewriteNextFontSource(contents, file, 'server', config.root)
|
|
474
477
|
}
|
|
475
478
|
// TS only: what reaches this hook is first-party or transpiled source, and
|
|
476
479
|
// both ship .ts/.tsx. The sniff keeps the parse off everything else.
|
|
477
480
|
if (/\.tsx?$/.test(file) && optimize.sniff.some(token => contents.includes(token))) {
|
|
478
|
-
contents = optimize.transform(contents, file)
|
|
481
|
+
contents = optimize.transform(contents, file)
|
|
479
482
|
}
|
|
480
|
-
if (contents === source) return undefined
|
|
483
|
+
if (contents === source) return undefined
|
|
481
484
|
// Keep the file's own syntax: `.ts` must not parse as `.tsx` (`<T>`
|
|
482
485
|
// casts), and .js/.mjs/.cjs app source may legitimately contain JSX.
|
|
483
|
-
return { contents, loader: file.endsWith('.ts') ? 'ts' : 'tsx' }
|
|
484
|
-
})
|
|
486
|
+
return { contents, loader: file.endsWith('.ts') ? 'ts' : 'tsx' }
|
|
487
|
+
})
|
|
485
488
|
return {
|
|
486
489
|
rewrite,
|
|
487
490
|
transpiledFilter:
|
|
488
491
|
transpiled.length > 0
|
|
489
|
-
? new RegExp(
|
|
492
|
+
? new RegExp(
|
|
493
|
+
`[\\\\/]node_modules[\\\\/](?:${transpiled.map(escapeRegex).join('|')})[\\\\/]`,
|
|
494
|
+
)
|
|
490
495
|
: undefined,
|
|
491
|
-
}
|
|
496
|
+
}
|
|
492
497
|
}
|
|
493
498
|
|
|
494
499
|
/**
|
|
@@ -508,8 +513,8 @@ function serverSourceLoadPlugin(
|
|
|
508
513
|
build.onLoad({ filter: /\.[cm]?[jt]sx?$/, namespace: 'file' }, async args => {
|
|
509
514
|
// `use client` in a CommonJS file -> tag its exports as references.
|
|
510
515
|
if (/\.c?js$/.test(args.path)) {
|
|
511
|
-
const references = await clientReferenceLoad(args.path)
|
|
512
|
-
if (references) return references
|
|
516
|
+
const references = await clientReferenceLoad(args.path)
|
|
517
|
+
if (references) return references
|
|
513
518
|
}
|
|
514
519
|
// First-party (or transpilePackages-opted) source: font/OPI rewrites.
|
|
515
520
|
// Everything else under node_modules keeps esbuild's native load path.
|
|
@@ -517,13 +522,13 @@ function serverSourceLoadPlugin(
|
|
|
517
522
|
!args.path.includes(`${path.sep}node_modules${path.sep}`) ||
|
|
518
523
|
firstParty.transpiledFilter?.test(args.path)
|
|
519
524
|
) {
|
|
520
|
-
const rewritten = await firstParty.rewrite(args.path)
|
|
521
|
-
if (rewritten) return rewritten
|
|
525
|
+
const rewritten = await firstParty.rewrite(args.path)
|
|
526
|
+
if (rewritten) return rewritten
|
|
522
527
|
}
|
|
523
|
-
return vendorClientBoundary?.(args.path)
|
|
524
|
-
})
|
|
528
|
+
return vendorClientBoundary?.(args.path)
|
|
529
|
+
})
|
|
525
530
|
},
|
|
526
|
-
}
|
|
531
|
+
}
|
|
527
532
|
}
|
|
528
533
|
|
|
529
534
|
// Client twin of firstPartySourceLoadPlugin, OPI rewrite only (the client pipeline handles next/font
|
|
@@ -537,19 +542,19 @@ function firstPartyClientOptimizeImportsLoadPlugin(
|
|
|
537
542
|
transform: (source: string, file: string) => string,
|
|
538
543
|
sniff: readonly string[],
|
|
539
544
|
): Plugin {
|
|
540
|
-
const roots = clientSourceRootPrefixes(config)
|
|
545
|
+
const roots = clientSourceRootPrefixes(config)
|
|
541
546
|
const rewriteFile = fileMemoAsync(async (file: string) => {
|
|
542
|
-
let source: string
|
|
547
|
+
let source: string
|
|
543
548
|
try {
|
|
544
|
-
source = await readFile(file, 'utf8')
|
|
549
|
+
source = await readFile(file, 'utf8')
|
|
545
550
|
} catch {
|
|
546
|
-
return undefined
|
|
551
|
+
return undefined
|
|
547
552
|
}
|
|
548
|
-
if (!/\.tsx?$/.test(file) || !sniff.some(token => source.includes(token))) return undefined
|
|
549
|
-
const contents = transform(source, file)
|
|
550
|
-
if (contents === source) return undefined
|
|
551
|
-
return { contents, loader: file.endsWith('.ts') ? ('ts' as const) : ('tsx' as const) }
|
|
552
|
-
})
|
|
553
|
+
if (!/\.tsx?$/.test(file) || !sniff.some(token => source.includes(token))) return undefined
|
|
554
|
+
const contents = transform(source, file)
|
|
555
|
+
if (contents === source) return undefined
|
|
556
|
+
return { contents, loader: file.endsWith('.ts') ? ('ts' as const) : ('tsx' as const) }
|
|
557
|
+
})
|
|
553
558
|
return {
|
|
554
559
|
name: 'pnext-first-party-client-optimize-imports-load',
|
|
555
560
|
setup(build) {
|
|
@@ -558,30 +563,30 @@ function firstPartyClientOptimizeImportsLoadPlugin(
|
|
|
558
563
|
roots.some(root => args.path.startsWith(root))
|
|
559
564
|
? undefined
|
|
560
565
|
: rewriteFile(args.path),
|
|
561
|
-
)
|
|
566
|
+
)
|
|
562
567
|
},
|
|
563
|
-
}
|
|
568
|
+
}
|
|
564
569
|
}
|
|
565
570
|
|
|
566
571
|
// The roots core's client-source loader claims under (client/build.ts
|
|
567
572
|
// `clientSourceRoots`), each with a trailing separator so a sibling directory
|
|
568
573
|
// sharing the prefix is not swallowed.
|
|
569
574
|
function clientSourceRootPrefixes(config: ResolvedConfig): string[] {
|
|
570
|
-
const roots = new Set<string>()
|
|
575
|
+
const roots = new Set<string>()
|
|
571
576
|
for (const root of [config.root, config.workspaceRoot]) {
|
|
572
|
-
const resolved = path.resolve(root)
|
|
573
|
-
roots.add(resolved + path.sep)
|
|
577
|
+
const resolved = path.resolve(root)
|
|
578
|
+
roots.add(resolved + path.sep)
|
|
574
579
|
try {
|
|
575
|
-
roots.add(realpathSync.native(resolved) + path.sep)
|
|
580
|
+
roots.add(realpathSync.native(resolved) + path.sep)
|
|
576
581
|
} catch {
|
|
577
582
|
// Unresolvable root: its literal form already covers the files under it.
|
|
578
583
|
}
|
|
579
584
|
}
|
|
580
|
-
return [...roots]
|
|
585
|
+
return [...roots]
|
|
581
586
|
}
|
|
582
587
|
|
|
583
588
|
// First-party workspace source is implicitly transpiled. Hoisting puts the
|
|
584
589
|
// package only in the workspace root's node_modules, so both roots are asked.
|
|
585
590
|
function isLinkedWorkspacePackage(config: ResolvedConfig, name: string) {
|
|
586
|
-
return isWorkspacePackage(config.root, name) || isWorkspacePackage(config.workspaceRoot, name)
|
|
591
|
+
return isWorkspacePackage(config.root, name) || isWorkspacePackage(config.workspaceRoot, name)
|
|
587
592
|
}
|