@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
package/src/compat-bootstrap.ts
CHANGED
|
@@ -16,38 +16,38 @@
|
|
|
16
16
|
//
|
|
17
17
|
// The enablement gate is inlined here (a pure read of config.compat) rather than imported from
|
|
18
18
|
// compat, so this file carries no static edge into compat. It must stay in sync with
|
|
19
|
-
// compat/
|
|
19
|
+
// compat/aliases.ts reactCompatEnabled/nextCompatEnabled.
|
|
20
20
|
|
|
21
|
-
import type { ResolvedConfig } from './config'
|
|
22
|
-
import { onExtensionHostReset } from './extensions'
|
|
21
|
+
import type { ResolvedConfig } from './config'
|
|
22
|
+
import { onExtensionHostReset } from './extensions'
|
|
23
23
|
|
|
24
24
|
/** True when either Next or React compatibility (or the React compiler) is on. */
|
|
25
25
|
function compatEnabled(config: ResolvedConfig): boolean {
|
|
26
|
-
const compat = config.compat
|
|
27
|
-
return Boolean(compat?.next || compat?.react || compat?.reactCompiler)
|
|
26
|
+
const compat = config.compat
|
|
27
|
+
return Boolean(compat?.next || compat?.react || compat?.reactCompiler)
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
let bootRegistration: Promise<void> | undefined
|
|
31
|
-
let registration: Promise<void> | undefined
|
|
30
|
+
let bootRegistration: Promise<void> | undefined
|
|
31
|
+
let registration: Promise<void> | undefined
|
|
32
32
|
|
|
33
33
|
// A fresh host has none of compat's registrations, so the "already registered"
|
|
34
34
|
// memo has to go with it — otherwise the next bootstrap call is a no-op and the
|
|
35
35
|
// host stays empty for the rest of the process.
|
|
36
36
|
onExtensionHostReset(() => {
|
|
37
|
-
bootRegistration = undefined
|
|
38
|
-
registration = undefined
|
|
39
|
-
})
|
|
37
|
+
bootRegistration = undefined
|
|
38
|
+
registration = undefined
|
|
39
|
+
})
|
|
40
40
|
|
|
41
41
|
/**
|
|
42
42
|
* Register the boot tier: the compat facts core consults before the first
|
|
43
43
|
* compile. No-op (and no compat code loaded) for a pure-core app.
|
|
44
44
|
*/
|
|
45
45
|
export function bootstrapCompatBoot(config: ResolvedConfig): Promise<void> {
|
|
46
|
-
if (!compatEnabled(config)) return Promise.resolve()
|
|
46
|
+
if (!compatEnabled(config)) return Promise.resolve()
|
|
47
47
|
bootRegistration ??= import('./compat/register/boot').then(module =>
|
|
48
48
|
module.registerCompatBootExtensions(config),
|
|
49
|
-
)
|
|
50
|
-
return bootRegistration
|
|
49
|
+
)
|
|
50
|
+
return bootRegistration
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
/**
|
|
@@ -59,9 +59,9 @@ export function bootstrapCompat(
|
|
|
59
59
|
config: ResolvedConfig,
|
|
60
60
|
options: { serve?: boolean } = {},
|
|
61
61
|
): Promise<void> {
|
|
62
|
-
if (!compatEnabled(config)) return Promise.resolve()
|
|
62
|
+
if (!compatEnabled(config)) return Promise.resolve()
|
|
63
63
|
registration ??= bootstrapCompatBoot(config)
|
|
64
64
|
.then(() => import('./compat/register/index'))
|
|
65
|
-
.then(module => module.registerCompatExtensions(config, options))
|
|
66
|
-
return registration
|
|
65
|
+
.then(module => module.registerCompatExtensions(config, options))
|
|
66
|
+
return registration
|
|
67
67
|
}
|
package/src/config.ts
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
import { existsSync, realpathSync } from 'node:fs'
|
|
2
|
-
import { fileURLToPath, pathToFileURL } from 'node:url'
|
|
3
|
-
import path from 'node:path'
|
|
4
|
-
import { loadEnv } from './env'
|
|
5
|
-
import { findWorkspaceRoot } from './resolve/imports'
|
|
6
|
-
import type
|
|
7
|
-
import { setCacheComponents } from './ppr'
|
|
1
|
+
import { existsSync, realpathSync } from 'node:fs'
|
|
2
|
+
import { fileURLToPath, pathToFileURL } from 'node:url'
|
|
3
|
+
import path from 'node:path'
|
|
4
|
+
import { loadEnv } from './env'
|
|
5
|
+
import { findWorkspaceRoot } from './resolve/imports'
|
|
6
|
+
import { PREFETCH_MODES, type PNextConfig } from './types'
|
|
7
|
+
import { setCacheComponents } from './render/ppr'
|
|
8
8
|
|
|
9
9
|
export type ResolvedConfig = Required<Pick<PNextConfig, 'outDir' | 'basePath'>> &
|
|
10
10
|
Omit<PNextConfig, 'outDir' | 'basePath'> & {
|
|
11
|
-
root: string
|
|
12
|
-
workspaceRoot: string
|
|
13
|
-
appDir: string
|
|
14
|
-
publicDir: 'public'
|
|
15
|
-
appPath: string
|
|
16
|
-
publicPath: string
|
|
11
|
+
root: string
|
|
12
|
+
workspaceRoot: string
|
|
13
|
+
appDir: string
|
|
14
|
+
publicDir: 'public'
|
|
15
|
+
appPath: string
|
|
16
|
+
publicPath: string
|
|
17
17
|
/** Where this process writes and serves from: the out root, or `<outRoot>/dev` in dev. */
|
|
18
|
-
outPath: string
|
|
18
|
+
outPath: string
|
|
19
19
|
/** The out root itself (`.pnext`), identical in dev and build. */
|
|
20
|
-
outRootPath: string
|
|
20
|
+
outRootPath: string
|
|
21
21
|
/** Generated types — always under the out root, because tsconfig points at it. */
|
|
22
|
-
typesPath: string
|
|
23
|
-
}
|
|
22
|
+
typesPath: string
|
|
23
|
+
}
|
|
24
24
|
|
|
25
25
|
const defaultConfig = {
|
|
26
26
|
outDir: '.pnext',
|
|
27
27
|
basePath: '',
|
|
28
|
-
} satisfies Required<Pick<PNextConfig, 'outDir' | 'basePath'
|
|
28
|
+
} satisfies Required<Pick<PNextConfig, 'outDir' | 'basePath'>>
|
|
29
29
|
|
|
30
30
|
// configSources seam. Core owns the shape; compat populates it.
|
|
31
31
|
//
|
|
@@ -38,22 +38,22 @@ const defaultConfig = {
|
|
|
38
38
|
// dynamic import when compat.next is enabled - mirroring the compat-bootstrap gate so core keeps no static
|
|
39
39
|
// edge into compat.
|
|
40
40
|
export interface ConfigSourceOverrides {
|
|
41
|
-
basePath?: string
|
|
42
|
-
trailingSlash?: boolean
|
|
43
|
-
skipTrailingSlashRedirect?: boolean
|
|
44
|
-
outDir?: string
|
|
45
|
-
assetPrefix?: string
|
|
46
|
-
productionBrowserSourceMaps?: boolean
|
|
41
|
+
basePath?: string
|
|
42
|
+
trailingSlash?: boolean
|
|
43
|
+
skipTrailingSlashRedirect?: boolean
|
|
44
|
+
outDir?: string
|
|
45
|
+
assetPrefix?: string
|
|
46
|
+
productionBrowserSourceMaps?: boolean
|
|
47
47
|
}
|
|
48
48
|
export type ConfigSource = (
|
|
49
49
|
root: string,
|
|
50
50
|
options: { dev?: boolean },
|
|
51
|
-
) => Promise<ConfigSourceOverrides
|
|
51
|
+
) => Promise<ConfigSourceOverrides>
|
|
52
52
|
|
|
53
|
-
let configSource: ConfigSource | undefined
|
|
53
|
+
let configSource: ConfigSource | undefined
|
|
54
54
|
|
|
55
55
|
export function registerConfigSource(source: ConfigSource): void {
|
|
56
|
-
configSource = source
|
|
56
|
+
configSource = source
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
async function resolveConfigSource(
|
|
@@ -61,44 +61,45 @@ async function resolveConfigSource(
|
|
|
61
61
|
root: string,
|
|
62
62
|
options: { dev?: boolean },
|
|
63
63
|
): Promise<ConfigSourceOverrides> {
|
|
64
|
-
if (!config.compat?.next) return {}
|
|
64
|
+
if (!config.compat?.next) return {}
|
|
65
65
|
if (!configSource) {
|
|
66
|
-
await import('./compat/register/config').then(module => module.registerConfigSource())
|
|
66
|
+
await import('./compat/register/config').then(module => module.registerConfigSource())
|
|
67
67
|
}
|
|
68
|
-
if (!configSource) return {}
|
|
69
|
-
return configSource(root, options)
|
|
68
|
+
if (!configSource) return {}
|
|
69
|
+
return configSource(root, options)
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
export async function loadConfig(
|
|
73
73
|
rootInput = process.cwd(),
|
|
74
74
|
options: { dev?: boolean } = {},
|
|
75
75
|
): Promise<ResolvedConfig> {
|
|
76
|
-
const root = canonicalRoot(path.resolve(rootInput))
|
|
77
|
-
await loadEnv(root, options)
|
|
78
|
-
const configPath = path.join(root, 'pnext.config.ts')
|
|
76
|
+
const root = canonicalRoot(path.resolve(rootInput))
|
|
77
|
+
await loadEnv(root, options)
|
|
78
|
+
const configPath = path.join(root, 'pnext.config.ts')
|
|
79
79
|
const loadedConfig = existsSync(configPath)
|
|
80
80
|
? ((await import(pathToFileHref(configPath))) as { default?: PNextConfig })
|
|
81
|
-
: {}
|
|
81
|
+
: {}
|
|
82
82
|
const config: PNextConfig = {
|
|
83
83
|
...(loadedConfig.default ?? {}),
|
|
84
84
|
// eslint-disable-next-line turbo/no-undeclared-env-vars
|
|
85
85
|
...(process.env.PNEXT_COMPAT === 'next'
|
|
86
86
|
? { compat: { ...(loadedConfig.default?.compat ?? {}), next: true } }
|
|
87
87
|
: {}),
|
|
88
|
-
}
|
|
88
|
+
}
|
|
89
|
+
validateConfig(config)
|
|
89
90
|
// cacheComponents is a per-app flag on a process-global cell: clear it before
|
|
90
91
|
// the next.config source re-derives it, so a pure-core (or flag-off) app
|
|
91
92
|
// loaded after a cacheComponents app never inherits the previous build's flag.
|
|
92
|
-
setCacheComponents(false)
|
|
93
|
-
const sourceOverrides = stripUndefined(await resolveConfigSource(config, root, options))
|
|
94
|
-
const merged = { ...defaultConfig, ...config, ...sourceOverrides }
|
|
95
|
-
const appPath = await resolveAppPath(root, config)
|
|
96
|
-
const outRootPath = path.resolve(root, merged.outDir)
|
|
93
|
+
setCacheComponents(false)
|
|
94
|
+
const sourceOverrides = stripUndefined(await resolveConfigSource(config, root, options))
|
|
95
|
+
const merged = { ...defaultConfig, ...config, ...sourceOverrides }
|
|
96
|
+
const appPath = await resolveAppPath(root, config)
|
|
97
|
+
const outRootPath = path.resolve(root, merged.outDir)
|
|
97
98
|
const workspaceRoot = canonicalRoot(
|
|
98
99
|
config.workspaceRoot
|
|
99
100
|
? path.resolve(root, config.workspaceRoot)
|
|
100
101
|
: (findWorkspaceRoot(root) ?? root),
|
|
101
|
-
)
|
|
102
|
+
)
|
|
102
103
|
|
|
103
104
|
return {
|
|
104
105
|
...config,
|
|
@@ -125,11 +126,27 @@ export async function loadConfig(
|
|
|
125
126
|
outPath: options.dev ? path.join(outRootPath, devOutSegment) : outRootPath,
|
|
126
127
|
outRootPath,
|
|
127
128
|
typesPath: path.join(outRootPath, 'types'),
|
|
128
|
-
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// One row per enum-valued config field; validateConfig checks them all.
|
|
133
|
+
const enumFields: readonly [keyof PNextConfig, readonly unknown[]][] = [
|
|
134
|
+
['prefetch', PREFETCH_MODES],
|
|
135
|
+
]
|
|
136
|
+
|
|
137
|
+
function validateConfig(config: PNextConfig) {
|
|
138
|
+
for (const [field, allowed] of enumFields) {
|
|
139
|
+
const value = config[field]
|
|
140
|
+
if (value === undefined || allowed.includes(value)) continue
|
|
141
|
+
const list = allowed.map(v => (typeof v === 'string' ? `'${v}'` : String(v))).join(', ')
|
|
142
|
+
throw new Error(
|
|
143
|
+
`Invalid pnext config: '${field}' must be one of ${list} (received ${JSON.stringify(value)}).`,
|
|
144
|
+
)
|
|
145
|
+
}
|
|
129
146
|
}
|
|
130
147
|
|
|
131
148
|
/** Dev's private subtree under the out root. Build never touches it. */
|
|
132
|
-
export const devOutSegment = 'dev'
|
|
149
|
+
export const devOutSegment = 'dev'
|
|
133
150
|
|
|
134
151
|
// Relative-import resolution realpaths the importing file (so a materialized shim resolves `./sibling`
|
|
135
152
|
// against real source), so every containment check against root/workspaceRoot compares realpaths.
|
|
@@ -138,21 +155,21 @@ export const devOutSegment = 'dev';
|
|
|
138
155
|
// resolving. A no-op when the path holds no symlinks.
|
|
139
156
|
function canonicalRoot(dir: string) {
|
|
140
157
|
try {
|
|
141
|
-
return realpathSync(dir)
|
|
158
|
+
return realpathSync(dir)
|
|
142
159
|
} catch {
|
|
143
|
-
return dir
|
|
160
|
+
return dir
|
|
144
161
|
}
|
|
145
162
|
}
|
|
146
163
|
|
|
147
164
|
function stripUndefined<T extends object>(value: T): T {
|
|
148
|
-
return Object.fromEntries(Object.entries(value).filter(([, v]) => v !== undefined)) as T
|
|
165
|
+
return Object.fromEntries(Object.entries(value).filter(([, v]) => v !== undefined)) as T
|
|
149
166
|
}
|
|
150
167
|
|
|
151
168
|
export function pathToFileHref(filePath: string) {
|
|
152
169
|
// pathToFileURL percent-encodes literal special characters (notably `%`, so a
|
|
153
170
|
// directory physically named `%5Ffoo` on disk stays `%255Ffoo` in the href and
|
|
154
171
|
// import() decodes it back to the literal `%5Ffoo` rather than to `_foo`).
|
|
155
|
-
return pathToFileURL(path.resolve(filePath)).href
|
|
172
|
+
return pathToFileURL(path.resolve(filePath)).href
|
|
156
173
|
}
|
|
157
174
|
|
|
158
175
|
export function publicEnvDefines() {
|
|
@@ -167,7 +184,7 @@ export function publicEnvDefines() {
|
|
|
167
184
|
`process.env.${key}`,
|
|
168
185
|
value === undefined ? 'undefined' : JSON.stringify(value),
|
|
169
186
|
]),
|
|
170
|
-
)
|
|
187
|
+
)
|
|
171
188
|
}
|
|
172
189
|
|
|
173
190
|
type FrameworkRuntimeAlias =
|
|
@@ -177,15 +194,15 @@ type FrameworkRuntimeAlias =
|
|
|
177
194
|
| 'preact/compat/client'
|
|
178
195
|
| 'preact/jsx-runtime'
|
|
179
196
|
| 'preact/jsx-dev-runtime'
|
|
180
|
-
| 'react-compiler-runtime'
|
|
197
|
+
| 'react-compiler-runtime'
|
|
181
198
|
|
|
182
|
-
export type CompatAliasTarget = 'server' | 'client'
|
|
199
|
+
export type CompatAliasTarget = 'server' | 'client'
|
|
183
200
|
|
|
184
201
|
/**
|
|
185
202
|
* Seven `import.meta.resolve` calls against the framework's OWN install - the answer cannot change for the
|
|
186
203
|
* life of the process, and every esbuild build builds an alias map (a vendor pass runs hundreds of those).
|
|
187
204
|
*/
|
|
188
|
-
let frameworkRuntimeAliases: Record<FrameworkRuntimeAlias, string> | undefined
|
|
205
|
+
let frameworkRuntimeAliases: Record<FrameworkRuntimeAlias, string> | undefined
|
|
189
206
|
|
|
190
207
|
export function frameworkRuntimeAliasEntries(): Record<FrameworkRuntimeAlias, string> {
|
|
191
208
|
frameworkRuntimeAliases ??= {
|
|
@@ -196,37 +213,37 @@ export function frameworkRuntimeAliasEntries(): Record<FrameworkRuntimeAlias, st
|
|
|
196
213
|
'preact/jsx-runtime': resolveRuntimeModule('preact/jsx-runtime'),
|
|
197
214
|
'preact/jsx-dev-runtime': resolveRuntimeModule('preact/jsx-dev-runtime'),
|
|
198
215
|
'react-compiler-runtime': resolveRuntimeModule('react-compiler-runtime'),
|
|
199
|
-
}
|
|
200
|
-
return frameworkRuntimeAliases
|
|
216
|
+
}
|
|
217
|
+
return frameworkRuntimeAliases
|
|
201
218
|
}
|
|
202
219
|
|
|
203
220
|
function resolveRuntimeModule(specifier: string) {
|
|
204
|
-
return fileURLToPath(import.meta.resolve(specifier))
|
|
221
|
+
return fileURLToPath(import.meta.resolve(specifier))
|
|
205
222
|
}
|
|
206
223
|
|
|
207
224
|
export function pnextAliases(target: CompatAliasTarget): Record<string, string> {
|
|
208
|
-
if (target !== 'client') return {}
|
|
225
|
+
if (target !== 'client') return {}
|
|
209
226
|
return {
|
|
210
227
|
'@wular/pnext/cache': path.resolve(import.meta.dirname, 'api/client-cache.ts'),
|
|
211
|
-
}
|
|
228
|
+
}
|
|
212
229
|
}
|
|
213
230
|
|
|
214
231
|
async function resolveAppPath(root: string, config: PNextConfig) {
|
|
215
|
-
const rootApp = path.join(root, 'app')
|
|
232
|
+
const rootApp = path.join(root, 'app')
|
|
216
233
|
if (config.compat?.next) {
|
|
217
|
-
const pagesPath = path.join(root, 'pages')
|
|
218
|
-
const hasPages = existsSync(pagesPath)
|
|
234
|
+
const pagesPath = path.join(root, 'pages')
|
|
235
|
+
const hasPages = existsSync(pagesPath)
|
|
219
236
|
if (existsSync(rootApp)) {
|
|
220
237
|
if (hasPages) {
|
|
221
|
-
const { materializePagesApp } = await import('./compat/pages')
|
|
222
|
-
const hybrid = await materializePagesApp(root)
|
|
223
|
-
if (hybrid) return hybrid
|
|
238
|
+
const { materializePagesApp } = await import('./compat/pages/router')
|
|
239
|
+
const hybrid = await materializePagesApp(root)
|
|
240
|
+
if (hybrid) return hybrid
|
|
224
241
|
}
|
|
225
|
-
return rootApp
|
|
242
|
+
return rootApp
|
|
226
243
|
}
|
|
227
|
-
const { materializePagesApp } = await import('./compat/pages')
|
|
228
|
-
const pagesApp = await materializePagesApp(root)
|
|
229
|
-
if (pagesApp) return pagesApp
|
|
230
|
-
} else if (existsSync(rootApp)) return rootApp
|
|
231
|
-
return path.join(root, 'src', 'app')
|
|
244
|
+
const { materializePagesApp } = await import('./compat/pages/router')
|
|
245
|
+
const pagesApp = await materializePagesApp(root)
|
|
246
|
+
if (pagesApp) return pagesApp
|
|
247
|
+
} else if (existsSync(rootApp)) return rootApp
|
|
248
|
+
return path.join(root, 'src', 'app')
|
|
232
249
|
}
|