@wular/pnext 0.0.1
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 +153 -0
- package/bin/pnext +67 -0
- package/config/lint/base.js +48 -0
- package/config/ts/base.json +26 -0
- package/config/ts/react.json +13 -0
- package/package.json +70 -0
- package/reference/compat.md +63 -0
- package/reference/config.md +120 -0
- package/reference/css.md +58 -0
- package/reference/dev.md +69 -0
- package/reference/env.md +40 -0
- package/reference/metadata.md +86 -0
- package/reference/navigation.md +149 -0
- package/reference/overview.md +35 -0
- package/reference/performance.md +97 -0
- package/reference/rendering.md +127 -0
- package/reference/routing.md +167 -0
- package/reference/typegen.md +64 -0
- package/src/api/cache.ts +80 -0
- package/src/api/client-cache.ts +9 -0
- package/src/api/client-navigation.ts +279 -0
- package/src/api/dynamic.tsx +102 -0
- package/src/api/link.tsx +119 -0
- package/src/api/navigation.ts +198 -0
- package/src/api/router/events.ts +53 -0
- package/src/api/router/history.ts +70 -0
- package/src/api/router/hub.ts +194 -0
- package/src/api/router/policies.ts +107 -0
- package/src/api/router/runtime.ts +5238 -0
- package/src/api/router/types.ts +299 -0
- package/src/api/router.ts +167 -0
- package/src/api/server.ts +323 -0
- package/src/api/suspense.ts +16 -0
- package/src/cache/context.ts +61 -0
- package/src/cli/adapters/vercel-warm.ts +375 -0
- package/src/cli/adapters/vercel.ts +1310 -0
- package/src/cli/analyze-print.ts +181 -0
- package/src/cli/analyze.ts +328 -0
- package/src/cli/boot-trace.ts +29 -0
- package/src/cli/build.ts +3114 -0
- package/src/cli/dev.ts +276 -0
- package/src/cli/index.ts +196 -0
- package/src/cli/named-bin.ts +119 -0
- package/src/cli/serve-ui.ts +160 -0
- package/src/cli/start.ts +1425 -0
- package/src/client/build.ts +2136 -0
- package/src/client/chunk-fold.ts +526 -0
- package/src/client/entry.ts +1525 -0
- package/src/client/paths.ts +22 -0
- package/src/client/prebuilt.ts +621 -0
- package/src/client/profile.ts +75 -0
- package/src/client/react-compiler.ts +94 -0
- package/src/client/reference-stub.ts +145 -0
- package/src/client/reference.ts +47 -0
- package/src/compat/actions/action-client.ts +531 -0
- package/src/compat/actions/action-dispatch.ts +676 -0
- package/src/compat/actions/action-router.ts +40 -0
- package/src/compat/actions/action-shared.ts +95 -0
- package/src/compat/actions/client-plugin.ts +135 -0
- package/src/compat/actions/client-stub.ts +65 -0
- package/src/compat/actions/config.ts +164 -0
- package/src/compat/actions/detect.ts +208 -0
- package/src/compat/actions/discovery.ts +244 -0
- package/src/compat/actions/early-submit.ts +40 -0
- package/src/compat/actions/endpoint.ts +602 -0
- package/src/compat/actions/flight.ts +52 -0
- package/src/compat/actions/form-state.ts +73 -0
- package/src/compat/actions/hoist.ts +485 -0
- package/src/compat/actions/ids.ts +39 -0
- package/src/compat/actions/index.ts +41 -0
- package/src/compat/actions/instances.ts +144 -0
- package/src/compat/actions/origin.ts +109 -0
- package/src/compat/actions/protocol.ts +125 -0
- package/src/compat/actions/registry.ts +74 -0
- package/src/compat/actions/rewrite.ts +282 -0
- package/src/compat/actions/serve.ts +414 -0
- package/src/compat/actions/server-tag.ts +21 -0
- package/src/compat/actions/unrecognized-error.ts +30 -0
- package/src/compat/adapter/build-complete.ts +257 -0
- package/src/compat/bundler/bun-externals.ts +53 -0
- package/src/compat/bundler/cjs-exports.ts +542 -0
- package/src/compat/bundler/config.ts +363 -0
- package/src/compat/bundler/externals.ts +34 -0
- package/src/compat/bundler/import-meta-url.ts +60 -0
- package/src/compat/bundler/modularize-imports.ts +119 -0
- package/src/compat/bundler/new-url-asset.ts +87 -0
- package/src/compat/bundler/optimize-package-imports.ts +273 -0
- package/src/compat/bundler/polyfill.ts +88 -0
- package/src/compat/bundler/react-compiler.ts +61 -0
- package/src/compat/bundler/react-profiler.tsx +25 -0
- package/src/compat/bundler/relay-transform.ts +116 -0
- package/src/compat/bundler/require-context.ts +281 -0
- package/src/compat/bundler/resolve-extensions.ts +75 -0
- package/src/compat/bundler/source-cache.ts +61 -0
- package/src/compat/bundler/static-imports.ts +25 -0
- package/src/compat/bundler/symlink-imports.ts +119 -0
- package/src/compat/bundler/tsconfig-paths.ts +50 -0
- package/src/compat/bundler/wasm.ts +153 -0
- package/src/compat/bundler/webpack-loaders.ts +685 -0
- package/src/compat/bundler/worker.ts +278 -0
- package/src/compat/cache/build-flags.ts +81 -0
- package/src/compat/cache/build-prerender-errors.ts +163 -0
- package/src/compat/cache/custom-handler.ts +159 -0
- package/src/compat/cache/fetch-patch.ts +745 -0
- package/src/compat/cache/handler.ts +100 -0
- package/src/compat/cache/modern-handler.ts +275 -0
- package/src/compat/cache/resume-data-cache.ts +143 -0
- package/src/compat/cache/revalidate.ts +759 -0
- package/src/compat/cache/runtime-error.ts +124 -0
- package/src/compat/cache/use-cache-transform.ts +961 -0
- package/src/compat/cache/use-cache.ts +1695 -0
- package/src/compat/cache-control.ts +269 -0
- package/src/compat/client/base-path.ts +64 -0
- package/src/compat/client/css-order.ts +36 -0
- package/src/compat/client/errors/control-flow.ts +92 -0
- package/src/compat/client/errors/error-boundary.ts +222 -0
- package/src/compat/client/errors/global-error.ts +238 -0
- package/src/compat/client/errors/install.ts +217 -0
- package/src/compat/client/errors/lazy.ts +53 -0
- package/src/compat/client/errors/primitive-throw.ts +126 -0
- package/src/compat/client/errors/soft-refresh.ts +14 -0
- package/src/compat/client/link-status.ts +86 -0
- package/src/compat/client/nav-compat-runtime.ts +57 -0
- package/src/compat/client/nav-compat.ts +42 -0
- package/src/compat/client/navigation-scroll.ts +154 -0
- package/src/compat/client/optimistic-routing.ts +206 -0
- package/src/compat/client/prefetch-cache.ts +111 -0
- package/src/compat/client/route-announcer.ts +72 -0
- package/src/compat/client/segment-cache-policy.ts +159 -0
- package/src/compat/client/segment-cache.ts +1077 -0
- package/src/compat/client/segment-prefetch.ts +375 -0
- package/src/compat/client/trailing-slash.ts +24 -0
- package/src/compat/css/chunking.ts +254 -0
- package/src/compat/css/inline-css.ts +73 -0
- package/src/compat/css/lightningcss.ts +90 -0
- package/src/compat/css/modules.ts +373 -0
- package/src/compat/css/nonce.ts +30 -0
- package/src/compat/css/sass-plugin.ts +65 -0
- package/src/compat/css/sass.ts +392 -0
- package/src/compat/css/styled-jsx-runtime.ts +80 -0
- package/src/compat/css/styled-jsx.ts +49 -0
- package/src/compat/edge-runtime.ts +71 -0
- package/src/compat/export/client.ts +112 -0
- package/src/compat/export/index.ts +272 -0
- package/src/compat/export/standalone.ts +207 -0
- package/src/compat/image-optimizer/cache.ts +119 -0
- package/src/compat/image-optimizer/detect.ts +143 -0
- package/src/compat/image-optimizer/index.ts +601 -0
- package/src/compat/image-optimizer/source.ts +243 -0
- package/src/compat/index.ts +458 -0
- package/src/compat/lifecycle/after-scope.ts +86 -0
- package/src/compat/lifecycle/after.ts +173 -0
- package/src/compat/lifecycle/error-funnel.ts +306 -0
- package/src/compat/lifecycle/error-serialize.ts +87 -0
- package/src/compat/lifecycle/error-ui.ts +167 -0
- package/src/compat/lifecycle/instrumentation-client.ts +138 -0
- package/src/compat/lifecycle/instrumentation.ts +277 -0
- package/src/compat/lifecycle/node-console.ts +19 -0
- package/src/compat/lifecycle/testmode.ts +263 -0
- package/src/compat/mdx/compile.ts +219 -0
- package/src/compat/mdx/next-mdx-stub.ts +46 -0
- package/src/compat/mdx/plugin.ts +37 -0
- package/src/compat/metadata-route-artifacts.ts +458 -0
- package/src/compat/metadata.ts +295 -0
- package/src/compat/middleware/manifest.ts +210 -0
- package/src/compat/misc/action-return.ts +173 -0
- package/src/compat/next/cache.ts +211 -0
- package/src/compat/next/canonical-url.ts +35 -0
- package/src/compat/next/client-cache.ts +57 -0
- package/src/compat/next/client-navigation.ts +313 -0
- package/src/compat/next/client-only.ts +3 -0
- package/src/compat/next/client-script.tsx +215 -0
- package/src/compat/next/client-server.ts +39 -0
- package/src/compat/next/config-loader.ts +569 -0
- package/src/compat/next/config.ts +29 -0
- package/src/compat/next/constants.cjs +6 -0
- package/src/compat/next/constants.ts +6 -0
- package/src/compat/next/custom-server.ts +236 -0
- package/src/compat/next/dist/client/components/app-router-headers.ts +32 -0
- package/src/compat/next/dist/server/app-render/work-unit-async-storage.external.cjs +38 -0
- package/src/compat/next/dist/server/web/spec-extension/revalidate.ts +1 -0
- package/src/compat/next/dist/server/web/spec-extension/unstable-cache.ts +1 -0
- package/src/compat/next/dist/server/web/spec-extension/unstable-no-store.ts +1 -0
- package/src/compat/next/dynamic.tsx +46 -0
- package/src/compat/next/error.tsx +148 -0
- package/src/compat/next/font/cache.ts +171 -0
- package/src/compat/next/font/google.ts +2 -0
- package/src/compat/next/font/index.ts +8 -0
- package/src/compat/next/font/local.ts +5 -0
- package/src/compat/next/font/runtime-client.ts +71 -0
- package/src/compat/next/font/runtime.ts +974 -0
- package/src/compat/next/font/shared.ts +281 -0
- package/src/compat/next/form.tsx +156 -0
- package/src/compat/next/head.tsx +10 -0
- package/src/compat/next/headers.ts +247 -0
- package/src/compat/next/image/config.ts +196 -0
- package/src/compat/next/image/optimizer.ts +96 -0
- package/src/compat/next/image/patterns.ts +103 -0
- package/src/compat/next/image/shared.ts +141 -0
- package/src/compat/next/image/static-metadata.ts +283 -0
- package/src/compat/next/image/validate.ts +269 -0
- package/src/compat/next/image-client.tsx +215 -0
- package/src/compat/next/image-props.ts +575 -0
- package/src/compat/next/image-usage.ts +102 -0
- package/src/compat/next/image.tsx +56 -0
- package/src/compat/next/index.ts +1 -0
- package/src/compat/next/legacy-image.tsx +97 -0
- package/src/compat/next/link-usage.ts +29 -0
- package/src/compat/next/link-validation-transform.ts +200 -0
- package/src/compat/next/link.tsx +466 -0
- package/src/compat/next/navigation.cjs +21 -0
- package/src/compat/next/navigation.ts +188 -0
- package/src/compat/next/offline.ts +51 -0
- package/src/compat/next/og.ts +324 -0
- package/src/compat/next/optimistic-route-state.ts +188 -0
- package/src/compat/next/preferred-region.ts +39 -0
- package/src/compat/next/redirects.ts +131 -0
- package/src/compat/next/resource-hints.ts +136 -0
- package/src/compat/next/rewrites.ts +350 -0
- package/src/compat/next/root-params.ts +142 -0
- package/src/compat/next/router.cjs +49 -0
- package/src/compat/next/router.ts +143 -0
- package/src/compat/next/script.tsx +355 -0
- package/src/compat/next/server-only.ts +3 -0
- package/src/compat/next/server.ts +28 -0
- package/src/compat/next/svgr.ts +58 -0
- package/src/compat/next/telemetry.ts +77 -0
- package/src/compat/next/user-agent.ts +100 -0
- package/src/compat/next/web-vitals.ts +56 -0
- package/src/compat/otel/api.ts +95 -0
- package/src/compat/otel/client-trace-metadata.ts +71 -0
- package/src/compat/otel/fetch-span.ts +77 -0
- package/src/compat/otel/tracer.ts +944 -0
- package/src/compat/pages/client-plugin.ts +108 -0
- package/src/compat/pages/index.ts +527 -0
- package/src/compat/pages/router-state.ts +94 -0
- package/src/compat/ppr/io.ts +38 -0
- package/src/compat/ppr/missing-root-params.ts +105 -0
- package/src/compat/ppr/root-params-scan.ts +164 -0
- package/src/compat/ppr/root-params-transform.ts +75 -0
- package/src/compat/ppr/root-params.ts +129 -0
- package/src/compat/ppr/segment-config-incompat.ts +34 -0
- package/src/compat/protocol.ts +202 -0
- package/src/compat/react/client.ts +59 -0
- package/src/compat/react/compiler-runtime.ts +60 -0
- package/src/compat/react/dom-client.ts +115 -0
- package/src/compat/react/dom-react-server.ts +20 -0
- package/src/compat/react/dom-server.ts +40 -0
- package/src/compat/react/dom.ts +154 -0
- package/src/compat/react/preact.ts +522 -0
- package/src/compat/react/react-server.ts +84 -0
- package/src/compat/react/router-shim.ts +26 -0
- package/src/compat/react/server-component-use.ts +48 -0
- package/src/compat/react/server-inserted-html.ts +87 -0
- package/src/compat/react/server.ts +156 -0
- package/src/compat/react/view-transition.ts +60 -0
- package/src/compat/register/actions.ts +875 -0
- package/src/compat/register/boot.ts +141 -0
- package/src/compat/register/build-tier.ts +11 -0
- package/src/compat/register/build.ts +182 -0
- package/src/compat/register/bundler.ts +587 -0
- package/src/compat/register/cache.ts +85 -0
- package/src/compat/register/client-errors.ts +18 -0
- package/src/compat/register/config.ts +17 -0
- package/src/compat/register/css-extras.ts +120 -0
- package/src/compat/register/edge-runtime.ts +6 -0
- package/src/compat/register/errors.ts +46 -0
- package/src/compat/register/export.ts +23 -0
- package/src/compat/register/font.ts +36 -0
- package/src/compat/register/hooks.ts +34 -0
- package/src/compat/register/image.ts +133 -0
- package/src/compat/register/index.ts +111 -0
- package/src/compat/register/instrumentation-client.ts +35 -0
- package/src/compat/register/lifecycle.ts +86 -0
- package/src/compat/register/mdx.ts +48 -0
- package/src/compat/register/middleware.ts +36 -0
- package/src/compat/register/misc.ts +44 -0
- package/src/compat/register/otel.ts +288 -0
- package/src/compat/register/pages-api.ts +473 -0
- package/src/compat/register/ppr.ts +56 -0
- package/src/compat/register/protocol.ts +57 -0
- package/src/compat/register/proxy.ts +127 -0
- package/src/compat/register/render.ts +268 -0
- package/src/compat/register/routing.ts +410 -0
- package/src/compat/register/segment.ts +1903 -0
- package/src/compat/register/static-image.ts +21 -0
- package/src/compat/register/typed-routes.ts +35 -0
- package/src/compat/register/usecache.ts +131 -0
- package/src/compat/register/validation.ts +56 -0
- package/src/compat/segment/loading-boundary.ts +113 -0
- package/src/compat/segment/page-slot.ts +200 -0
- package/src/compat/segment/tree.ts +481 -0
- package/src/compat/segment/vary-key.ts +102 -0
- package/src/compat/segment/vary-params.ts +551 -0
- package/src/compat/static-params.ts +33 -0
- package/src/compat/tsconfig-defaults.ts +301 -0
- package/src/compat/typecheck/index.ts +1481 -0
- package/src/compat/typecheck/worker.ts +26 -0
- package/src/compat/typed-routes/index.ts +92 -0
- package/src/compat/typed-routes/manifest.ts +356 -0
- package/src/compat/typed-routes/typegen.ts +566 -0
- package/src/compat/validation/errors.ts +159 -0
- package/src/compat/validation/index.ts +1770 -0
- package/src/compat/validation/prerender-diagnostics.ts +1508 -0
- package/src/compat-bootstrap.ts +67 -0
- package/src/config.ts +218 -0
- package/src/css/build.ts +697 -0
- package/src/css/index.ts +2 -0
- package/src/css/postcss.ts +236 -0
- package/src/css/worker.ts +34 -0
- package/src/dev/client-actions.ts +35 -0
- package/src/dev/client-chunk-store.ts +92 -0
- package/src/dev/client-key-cache.ts +178 -0
- package/src/dev/global-css-cache.ts +212 -0
- package/src/dev/imports.ts +2430 -0
- package/src/dev/module-cache.ts +721 -0
- package/src/dev/module-generations.ts +38 -0
- package/src/dev/module-transform.ts +188 -0
- package/src/dev/node-module-bundle-cache.ts +63 -0
- package/src/dev/restart-cache.ts +10 -0
- package/src/dev/route-bundle-key-cache.ts +154 -0
- package/src/dev/route-facts-cache.ts +223 -0
- package/src/dev/server.ts +1710 -0
- package/src/dynamic/source.ts +307 -0
- package/src/dynamic/tree-shake.ts +262 -0
- package/src/env.ts +92 -0
- package/src/extensions.ts +1898 -0
- package/src/index.ts +34 -0
- package/src/internal.ts +43 -0
- package/src/islands/boundary-error.ts +8 -0
- package/src/islands/static-children.ts +37 -0
- package/src/islands/static-slots.ts +106 -0
- package/src/ppr-postpone.ts +24 -0
- package/src/ppr.ts +784 -0
- package/src/proxy.ts +752 -0
- package/src/render/hooks.ts +384 -0
- package/src/render/index.ts +1 -0
- package/src/render/island-context.ts +47 -0
- package/src/render/metadata.ts +857 -0
- package/src/render/renderer.ts +7391 -0
- package/src/render/resource-hints.ts +44 -0
- package/src/render/slots.tsx +679 -0
- package/src/request/context.ts +396 -0
- package/src/resolve/engine.ts +219 -0
- package/src/resolve/imports.ts +1104 -0
- package/src/resolve/scan-facts.ts +474 -0
- package/src/resolve/source-text.ts +86 -0
- package/src/routing/forwarded.ts +41 -0
- package/src/routing/handler.ts +271 -0
- package/src/routing/href.ts +203 -0
- package/src/routing/metadata.ts +1018 -0
- package/src/routing/request-runtime.ts +43 -0
- package/src/routing/routes.ts +2560 -0
- package/src/routing/slots.ts +432 -0
- package/src/runtime/server.ts +3453 -0
- package/src/runtime/vendor.ts +1160 -0
- package/src/style-modules.d.ts +9 -0
- package/src/typegen.ts +151 -0
- package/src/types.ts +725 -0
- package/src/utils/ansi.ts +9 -0
- package/src/utils/content-type.ts +31 -0
- package/src/utils/decode.ts +7 -0
- package/src/utils/dev-profile.ts +31 -0
- package/src/utils/error-log.ts +29 -0
- package/src/utils/fs-cache.ts +31 -0
- package/src/utils/fs.ts +119 -0
- package/src/utils/html.ts +46 -0
- package/src/utils/serialize.ts +378 -0
- package/src/utils/source.ts +35 -0
- package/src/utils/verbose.ts +39 -0
- package/tsconfig.json +10 -0
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
// Boot-tier compat registration (COMPAT - may import core freely).
|
|
2
|
+
//
|
|
3
|
+
// The MINIMAL set of compat facts core reads before it compiles anything, kept in one deliberately
|
|
4
|
+
// shallow module so a dev boot never pulls the full compat graph. Everything registered here is
|
|
5
|
+
// consulted by boot-time core code:
|
|
6
|
+
//
|
|
7
|
+
// - route conventions / usage detectors / page extensions -> scanRoutes
|
|
8
|
+
// - `.scss`/`.sass` + CSS dependency resolution -> scanRoutes
|
|
9
|
+
// - bare-specifier aliases (module + import-alias registry) -> scanRoutes and registerServerRuntime,
|
|
10
|
+
// which latch the alias map at boot
|
|
11
|
+
// - proxy file names -> findProxyFile
|
|
12
|
+
// - lifecycle init hooks -> runInitHooks
|
|
13
|
+
//
|
|
14
|
+
// Everything else waits for registerCompatExtensions on the first compile/request. Registrars in the
|
|
15
|
+
// full tier that re-assign a value set here re-assign the SAME implementation, so the two tiers cannot
|
|
16
|
+
// disagree.
|
|
17
|
+
|
|
18
|
+
import type { ResolvedConfig } from '../../config';
|
|
19
|
+
import {
|
|
20
|
+
getProxyExtensions,
|
|
21
|
+
onExtensionHostReset,
|
|
22
|
+
registerLoadableExtensions,
|
|
23
|
+
registerPageExtensions,
|
|
24
|
+
setBundlerExtensions,
|
|
25
|
+
setCompatModeExtensions,
|
|
26
|
+
setCssExtensions,
|
|
27
|
+
setImportAliasExtensions,
|
|
28
|
+
setProxyExtensions,
|
|
29
|
+
} from '../../extensions';
|
|
30
|
+
import { findProxyFiles } from '../../proxy';
|
|
31
|
+
import {
|
|
32
|
+
packageNameOfSpecifier,
|
|
33
|
+
resolvePackageSpecifier,
|
|
34
|
+
setModuleAliases,
|
|
35
|
+
} from '../../resolve/imports';
|
|
36
|
+
import {
|
|
37
|
+
compatAliases,
|
|
38
|
+
missingCompatImportError,
|
|
39
|
+
nextCompatAliases,
|
|
40
|
+
nextCompatEnabled,
|
|
41
|
+
reactCompatEnabled,
|
|
42
|
+
reactCompilerOptions,
|
|
43
|
+
reactServerLayerAliases,
|
|
44
|
+
} from '../index';
|
|
45
|
+
import { transpilePackages } from '../bundler/config';
|
|
46
|
+
import { materializeNextCssSources, nextCssResolveDependency } from '../css/modules';
|
|
47
|
+
import { getNextConfig } from '../next/config-loader';
|
|
48
|
+
import { registerLifecycleBootHooks } from './lifecycle';
|
|
49
|
+
import { registerRoutingExtensions } from './routing';
|
|
50
|
+
|
|
51
|
+
/** Proxy entrypoint basenames Next supports (`middleware` is the legacy name). */
|
|
52
|
+
const NEXT_PROXY_NAMES = ['proxy', 'middleware'];
|
|
53
|
+
|
|
54
|
+
// Extensions core already carries as page/convention files (base list in
|
|
55
|
+
// routes.ts). Registering one of these is a no-op, so we filter them out and
|
|
56
|
+
// only register the genuinely-extra ones a configured pageExtensions adds.
|
|
57
|
+
const CORE_BASE_PAGE_EXTENSIONS = new Set(['tsx', 'ts', 'jsx', 'js', 'mjs']);
|
|
58
|
+
|
|
59
|
+
let registered = false;
|
|
60
|
+
// Host-scoped guard: a fresh host must be registered into again.
|
|
61
|
+
onExtensionHostReset(() => (registered = false));
|
|
62
|
+
|
|
63
|
+
export function registerCompatBootExtensions(config: ResolvedConfig): void {
|
|
64
|
+
if (registered) return;
|
|
65
|
+
registered = true;
|
|
66
|
+
|
|
67
|
+
setCompatModeExtensions({
|
|
68
|
+
nextEnabled: nextCompatEnabled,
|
|
69
|
+
reactEnabled: reactCompatEnabled,
|
|
70
|
+
reactCompilerOptions,
|
|
71
|
+
});
|
|
72
|
+
setImportAliasExtensions({
|
|
73
|
+
aliases: compatAliases,
|
|
74
|
+
clientSsrAliases: cfg => nextCompatAliases(cfg, 'server'),
|
|
75
|
+
missingImportError: missingCompatImportError,
|
|
76
|
+
reactServerLayerAliases,
|
|
77
|
+
});
|
|
78
|
+
// Route scanning (client-reference/boundary detection) resolves imports statically, with no per-call
|
|
79
|
+
// config to consult - register the same bare-specifier aliases the bundler uses so a server component
|
|
80
|
+
// importing e.g. `next/form` still resolves to its compat file and gets walked for 'use client'
|
|
81
|
+
// detection.
|
|
82
|
+
setModuleAliases(compatAliases(config, 'server'));
|
|
83
|
+
registerRoutingExtensions(config);
|
|
84
|
+
registerLifecycleBootHooks(config);
|
|
85
|
+
|
|
86
|
+
if (!nextCompatEnabled(config)) return;
|
|
87
|
+
|
|
88
|
+
registerCompatPageExtensions();
|
|
89
|
+
setBundlerExtensions({ resolveRouteDependency: resolveTranspiledRouteDependency() });
|
|
90
|
+
materializeNextCssSources(config);
|
|
91
|
+
setCssExtensions({
|
|
92
|
+
extraCssExtensions: () => ['.scss', '.sass'],
|
|
93
|
+
resolveCssDependency: nextCssResolveDependency(config),
|
|
94
|
+
});
|
|
95
|
+
setProxyExtensions({ names: NEXT_PROXY_NAMES, validateFiles: validateProxyFiles });
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Register the extra page extensions the app's `pageExtensions` config declares
|
|
100
|
+
* (Next semantics: pageExtensions is authoritative; @next/mdx's createMDX
|
|
101
|
+
* appends `md`/`mdx`). Only extensions core does not already carry are
|
|
102
|
+
* registered, and only when the app actually configured pageExtensions. The
|
|
103
|
+
* matching MDX compilation is wired later, in register-mdx.
|
|
104
|
+
*/
|
|
105
|
+
function registerCompatPageExtensions(): void {
|
|
106
|
+
const configured = getNextConfig().pageExtensions;
|
|
107
|
+
if (Array.isArray(configured)) {
|
|
108
|
+
const extras = configured.filter(
|
|
109
|
+
(ext): ext is string =>
|
|
110
|
+
typeof ext === 'string' && ext.length > 0 && !CORE_BASE_PAGE_EXTENSIONS.has(ext),
|
|
111
|
+
);
|
|
112
|
+
if (extras.length > 0) registerPageExtensions(...extras);
|
|
113
|
+
}
|
|
114
|
+
// Imported markdown is loadable even when not routable: `pageExtensions:
|
|
115
|
+
// ['mdx']` still allows `import Doc from './x.md'` through @next/mdx's
|
|
116
|
+
// /\.mdx?$/ rule, and the server runtime compiles both (dev/imports,
|
|
117
|
+
// transformSource). Without this the Bun load plugin never claims `.md` and
|
|
118
|
+
// the import falls through to the file loader (default export = the path).
|
|
119
|
+
registerLoadableExtensions('mdx', 'md');
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/** B7 `transpilePackages` resolution used by the route scanner's module walk. */
|
|
123
|
+
function resolveTranspiledRouteDependency() {
|
|
124
|
+
const transpile = new Set(transpilePackages());
|
|
125
|
+
return (root: string, fromFile: string, specifier: string): string | undefined => {
|
|
126
|
+
const packageName = packageNameOfSpecifier(specifier);
|
|
127
|
+
if (!packageName || !transpile.has(packageName)) return undefined;
|
|
128
|
+
return resolvePackageSpecifier(root, fromFile, specifier, ['import', 'browser', 'default']);
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Next's proxy/middleware diagnostics. Only an app that actually ships one of those files loads the proxy
|
|
134
|
+
* implementation - for everyone else this is the whole cost of proxy support at boot.
|
|
135
|
+
*/
|
|
136
|
+
async function validateProxyFiles(config: ResolvedConfig): Promise<void> {
|
|
137
|
+
if (findProxyFiles(config, NEXT_PROXY_NAMES).length === 0) return;
|
|
138
|
+
const { registerProxyExtensions } = await import('./proxy');
|
|
139
|
+
registerProxyExtensions(config);
|
|
140
|
+
await getProxyExtensions().validateFiles(config);
|
|
141
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// The build-only slice of compat registration (COMPAT - may import core freely). These five domains
|
|
2
|
+
// register nothing but build steps and build-complete hooks, and their extensions are read exclusively
|
|
3
|
+
// through getBuildExtensions() - so a dev server never touches them, yet their module graphs are the
|
|
4
|
+
// fattest part of the full tier. Kept behind one dynamic import so registerCompatExtensions can skip
|
|
5
|
+
// loading them entirely when it is only being asked to serve; the call order is unchanged either way.
|
|
6
|
+
|
|
7
|
+
export { registerBuildCompatExtensions } from './build';
|
|
8
|
+
export { registerTypedRoutesExtensions } from './typed-routes';
|
|
9
|
+
export { registerValidationExtensions } from './validation';
|
|
10
|
+
export { registerMiddlewareExtensions } from './middleware';
|
|
11
|
+
export { registerExportExtensions } from './export';
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import {
|
|
4
|
+
registerBuildCompleteHooks,
|
|
5
|
+
setBuildCompatExtensions,
|
|
6
|
+
setCompatModeExtensions,
|
|
7
|
+
} from '../../extensions';
|
|
8
|
+
import type { BuildManifest } from '../../types';
|
|
9
|
+
import type { ResolvedConfig } from '../../config';
|
|
10
|
+
import { nextCompatEnabled, reactCompatEnabled, reactCompilerOptions } from '../index';
|
|
11
|
+
import { warnNextMetadataBuildIssues } from '../metadata';
|
|
12
|
+
import { getNextConfig } from '../next/config-loader';
|
|
13
|
+
import { preferredRegionForRoute } from '../next/preferred-region';
|
|
14
|
+
import { deploymentId } from '../bundler/config';
|
|
15
|
+
import { aliasGenerateStaticParams } from '../static-params';
|
|
16
|
+
import { takeCacheLifeStash } from '../cache/use-cache';
|
|
17
|
+
import { varyNamesFor, withVaryParamsTracking, type ResponseVaryParams } from '../segment/vary-params';
|
|
18
|
+
import { takeFontHeaderPreloads, fontLinkHeaderValue } from '../next/font/runtime';
|
|
19
|
+
import { takeResourceHintHeader } from '../next/resource-hints';
|
|
20
|
+
import {
|
|
21
|
+
bodySegmentFile,
|
|
22
|
+
buildRootTreePrefetch,
|
|
23
|
+
buildSegmentMeta,
|
|
24
|
+
DEFAULT_DYNAMIC_STALE_TIME_SECONDS,
|
|
25
|
+
DEFAULT_STATIC_STALE_TIME_SECONDS,
|
|
26
|
+
rootTreePrefetchText,
|
|
27
|
+
segmentDir,
|
|
28
|
+
segmentMetaFile,
|
|
29
|
+
treeSegmentFile,
|
|
30
|
+
} from '../segment/tree';
|
|
31
|
+
import { runBuildCompleteAdapter } from '../adapter/build-complete';
|
|
32
|
+
|
|
33
|
+
export function registerBuildCompatExtensions(): void {
|
|
34
|
+
registerBuildCompleteHooks(({ config, manifest }) =>
|
|
35
|
+
writeFunctionsConfigManifest(config.outPath, manifest),
|
|
36
|
+
);
|
|
37
|
+
registerBuildCompleteHooks(({ config }) => writeRequiredServerFilesManifest(config));
|
|
38
|
+
registerBuildCompleteHooks(({ config }) => writeTraceBuildFile(config));
|
|
39
|
+
// Next's `adapterPath` / NEXT_ADAPTER_PATH deployment-adapter hook.
|
|
40
|
+
registerBuildCompleteHooks(({ config, manifest }) =>
|
|
41
|
+
runBuildCompleteAdapter(config, manifest),
|
|
42
|
+
);
|
|
43
|
+
setCompatModeExtensions({
|
|
44
|
+
nextEnabled: nextCompatEnabled,
|
|
45
|
+
reactEnabled: reactCompatEnabled,
|
|
46
|
+
reactCompilerOptions,
|
|
47
|
+
});
|
|
48
|
+
setBuildCompatExtensions({
|
|
49
|
+
warnMetadataIssues: ({ appPath, routes, staticMetadataFiles }) =>
|
|
50
|
+
warnNextMetadataBuildIssues(appPath, routes, staticMetadataFiles),
|
|
51
|
+
nextOutputExport: () => getNextConfig().output === 'export',
|
|
52
|
+
nextOutputMode: () => {
|
|
53
|
+
const output = getNextConfig().output;
|
|
54
|
+
return output === 'export' || output === 'standalone' ? output : undefined;
|
|
55
|
+
},
|
|
56
|
+
nextScriptWorkersEnabled: () => {
|
|
57
|
+
const experimental = getNextConfig().experimental as
|
|
58
|
+
| { nextScriptWorkers?: boolean }
|
|
59
|
+
| undefined;
|
|
60
|
+
return experimental?.nextScriptWorkers === true;
|
|
61
|
+
},
|
|
62
|
+
defaultExpireTimeSeconds: () => {
|
|
63
|
+
const expireTime = getNextConfig().expireTime;
|
|
64
|
+
return typeof expireTime === 'number' ? expireTime : undefined;
|
|
65
|
+
},
|
|
66
|
+
withVaryParamsTracking,
|
|
67
|
+
varyNamesFor: (vary, kind) => varyNamesFor(vary as ResponseVaryParams, kind),
|
|
68
|
+
takeCacheLifeStash,
|
|
69
|
+
takeFontLinkHeader: () => {
|
|
70
|
+
// The full prerendered `Link` header: font preloads plus any react-dom
|
|
71
|
+
// preload()/preconnect() hints recorded on the prerender's work unit
|
|
72
|
+
// (capped by reactMaxHeadersLength). Static HITs replay it from the
|
|
73
|
+
// manifest since no response finalizer runs for them.
|
|
74
|
+
const fontValues = takeFontHeaderPreloads().map(fontLinkHeaderValue);
|
|
75
|
+
const hintValue = takeResourceHintHeader();
|
|
76
|
+
const values = [...fontValues, ...(hintValue ? [hintValue] : [])];
|
|
77
|
+
if (values.length === 0) return undefined;
|
|
78
|
+
return values.join(', ');
|
|
79
|
+
},
|
|
80
|
+
normalizeStaticParamsModule: aliasGenerateStaticParams,
|
|
81
|
+
defaultDynamicStaleTimeSeconds: DEFAULT_DYNAMIC_STALE_TIME_SECONDS,
|
|
82
|
+
defaultStaticStaleTimeSeconds: DEFAULT_STATIC_STALE_TIME_SECONDS,
|
|
83
|
+
buildRootTreePrefetch,
|
|
84
|
+
rootTreePrefetchText,
|
|
85
|
+
buildSegmentMeta,
|
|
86
|
+
segmentDir,
|
|
87
|
+
treeSegmentFile,
|
|
88
|
+
bodySegmentFile,
|
|
89
|
+
segmentMetaFile,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
interface FunctionsConfigManifest {
|
|
94
|
+
version: number;
|
|
95
|
+
functions: Record<string, Record<string, unknown>>;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Next-compatible `.next/required-server-files.json`. Tooling (and the e2e
|
|
100
|
+
* harness's `next.deploymentId`) reads `config.deploymentId` back off this file
|
|
101
|
+
* to learn the id inlined into the client/worker graphs. Written only when a
|
|
102
|
+
* deployment id is configured, so apps without one keep the file absent and
|
|
103
|
+
* nothing that probes it changes behavior.
|
|
104
|
+
*/
|
|
105
|
+
async function writeRequiredServerFilesManifest(config: ResolvedConfig): Promise<void> {
|
|
106
|
+
if (!nextCompatEnabled(config)) return;
|
|
107
|
+
const id = deploymentId();
|
|
108
|
+
if (!id) return;
|
|
109
|
+
const outDir = path.join(config.root, '.next');
|
|
110
|
+
await mkdir(outDir, { recursive: true });
|
|
111
|
+
await writeFile(
|
|
112
|
+
path.join(outDir, 'required-server-files.json'),
|
|
113
|
+
JSON.stringify({ version: 1, config: { deploymentId: id } }, null, 2),
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// Anchored on globalThis so the timestamp survives the module being loaded
|
|
118
|
+
// twice (built copy vs. original) during a single build process.
|
|
119
|
+
const traceBuildGlobal = globalThis as unknown as { __pnextBuildStartedAt?: number };
|
|
120
|
+
traceBuildGlobal.__pnextBuildStartedAt ??= performance.now();
|
|
121
|
+
|
|
122
|
+
interface TraceEvent {
|
|
123
|
+
name: string;
|
|
124
|
+
id: number;
|
|
125
|
+
traceId: string;
|
|
126
|
+
duration: number;
|
|
127
|
+
parentId?: number;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Next-compatible `.next/trace-build`: newline-delimited JSON, each line a
|
|
132
|
+
* JSON array of trace events sharing one traceId. The e2e harness only reads
|
|
133
|
+
* this file to assert build phases ran (event names, root/child hierarchy),
|
|
134
|
+
* so real timings are approximated rather than instrumented per-phase.
|
|
135
|
+
*/
|
|
136
|
+
async function writeTraceBuildFile(config: ResolvedConfig): Promise<void> {
|
|
137
|
+
if (!nextCompatEnabled(config)) return;
|
|
138
|
+
const traceId = randomTraceId();
|
|
139
|
+
const totalDuration = Math.max(1, performance.now() - (traceBuildGlobal.__pnextBuildStartedAt ?? 0));
|
|
140
|
+
const events: TraceEvent[] = [
|
|
141
|
+
{ name: 'next-build', id: 1, traceId, duration: totalDuration },
|
|
142
|
+
{ name: 'run-webpack', id: 2, parentId: 1, traceId, duration: totalDuration * 0.4 },
|
|
143
|
+
{ name: 'run-typescript', id: 3, parentId: 1, traceId, duration: totalDuration * 0.2 },
|
|
144
|
+
{ name: 'static-check', id: 4, parentId: 1, traceId, duration: totalDuration * 0.1 },
|
|
145
|
+
{ name: 'static-generation', id: 5, parentId: 1, traceId, duration: totalDuration * 0.2 },
|
|
146
|
+
{ name: 'collect-build-traces', id: 6, parentId: 1, traceId, duration: totalDuration * 0.05 },
|
|
147
|
+
{ name: 'telemetry-flush', id: 7, parentId: 1, traceId, duration: 1 },
|
|
148
|
+
];
|
|
149
|
+
const outDir = path.join(config.root, '.next');
|
|
150
|
+
await mkdir(outDir, { recursive: true });
|
|
151
|
+
await writeFile(path.join(outDir, 'trace-build'), `${JSON.stringify(events)}\n`);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
function randomTraceId(): string {
|
|
155
|
+
return Array.from({ length: 16 }, () => Math.floor(Math.random() * 16).toString(16)).join('');
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
async function writeFunctionsConfigManifest(
|
|
159
|
+
outPath: string,
|
|
160
|
+
manifest: BuildManifest,
|
|
161
|
+
): Promise<void> {
|
|
162
|
+
const routes = manifest.routes.filter(route => route.maxDuration !== undefined);
|
|
163
|
+
if (routes.length === 0) return;
|
|
164
|
+
|
|
165
|
+
const file = path.join(outPath, 'server', 'functions-config-manifest.json');
|
|
166
|
+
let current: FunctionsConfigManifest = { version: 1, functions: {} };
|
|
167
|
+
try {
|
|
168
|
+
current = JSON.parse(await readFile(file, 'utf8')) as FunctionsConfigManifest;
|
|
169
|
+
} catch {
|
|
170
|
+
current = { version: 1, functions: {} };
|
|
171
|
+
}
|
|
172
|
+
for (const route of routes) {
|
|
173
|
+
const regions = preferredRegionForRoute(route);
|
|
174
|
+
current.functions[route.route || '/'] = {
|
|
175
|
+
...(current.functions[route.route || '/'] ?? {}),
|
|
176
|
+
maxDuration: route.maxDuration,
|
|
177
|
+
...(regions ? { regions } : {}),
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
await mkdir(path.dirname(file), { recursive: true });
|
|
181
|
+
await writeFile(file, `${JSON.stringify(current, null, 2)}\n`);
|
|
182
|
+
}
|