@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/resolve/engine.ts
CHANGED
|
@@ -1,19 +1,29 @@
|
|
|
1
|
-
import { existsSync } from 'node:fs'
|
|
2
|
-
import path from 'node:path'
|
|
3
|
-
import type { ResolverFactory, NapiResolveOptions } from 'oxc-resolver'
|
|
4
|
-
import { loadNative } from '../utils/native-require'
|
|
1
|
+
import { existsSync } from 'node:fs'
|
|
2
|
+
import path from 'node:path'
|
|
3
|
+
import type { ResolverFactory, NapiResolveOptions } from 'oxc-resolver'
|
|
4
|
+
import { loadNative } from '../utils/native-require'
|
|
5
5
|
|
|
6
6
|
// Lazy: the native binding costs ~1.3 MB RSS and a prod server may never resolve.
|
|
7
7
|
function createResolverFactory(options: NapiResolveOptions): ResolverFactory {
|
|
8
8
|
const { ResolverFactory: Factory } = loadNative(
|
|
9
9
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
10
10
|
() => require('oxc-resolver') as typeof import('oxc-resolver'),
|
|
11
|
-
)
|
|
12
|
-
return new Factory(options)
|
|
13
|
-
}
|
|
14
|
-
import { clearNodeModulesFsCache } from '../utils/fs-cache'
|
|
15
|
-
|
|
16
|
-
const sourceExtensions = [
|
|
11
|
+
)
|
|
12
|
+
return new Factory(options)
|
|
13
|
+
}
|
|
14
|
+
import { clearNodeModulesFsCache } from '../utils/fs-cache'
|
|
15
|
+
|
|
16
|
+
const sourceExtensions = [
|
|
17
|
+
'.tsx',
|
|
18
|
+
'.ts',
|
|
19
|
+
'.jsx',
|
|
20
|
+
'.js',
|
|
21
|
+
'.mjs',
|
|
22
|
+
'.mts',
|
|
23
|
+
'.cts',
|
|
24
|
+
'.module.css',
|
|
25
|
+
'.css',
|
|
26
|
+
]
|
|
17
27
|
|
|
18
28
|
// An ESM `import './x.js'` is authored against the source file that compiles to
|
|
19
29
|
// it — a source convention only (see isSourceRequest / probePackageTarget).
|
|
@@ -22,41 +32,41 @@ const extensionAlias = {
|
|
|
22
32
|
'.jsx': ['.tsx', '.jsx'],
|
|
23
33
|
'.mjs': ['.mts', '.mjs'],
|
|
24
34
|
'.cjs': ['.cts', '.cjs'],
|
|
25
|
-
}
|
|
35
|
+
}
|
|
26
36
|
|
|
27
37
|
export interface ResolvedModule {
|
|
28
|
-
path: string
|
|
38
|
+
path: string
|
|
29
39
|
}
|
|
30
40
|
|
|
31
41
|
/** The package answered "no" for this subpath (Node's ERR_PACKAGE_PATH_NOT_EXPORTED). */
|
|
32
42
|
export interface UnexportedModule {
|
|
33
|
-
notExported: true
|
|
43
|
+
notExported: true
|
|
34
44
|
}
|
|
35
45
|
|
|
36
|
-
export type ResolveOutcome = ResolvedModule | UnexportedModule | undefined
|
|
46
|
+
export type ResolveOutcome = ResolvedModule | UnexportedModule | undefined
|
|
37
47
|
|
|
38
|
-
let configuredExtensions: string[] | undefined
|
|
39
|
-
let configuredTsConfigPath: string | undefined
|
|
48
|
+
let configuredExtensions: string[] | undefined
|
|
49
|
+
let configuredTsConfigPath: string | undefined
|
|
40
50
|
|
|
41
|
-
let baseFactory: ResolverFactory | undefined
|
|
42
|
-
const factories = new Map<string, ResolverFactory>()
|
|
43
|
-
const tsConfigFiles = new Map<string, string | undefined>()
|
|
51
|
+
let baseFactory: ResolverFactory | undefined
|
|
52
|
+
const factories = new Map<string, ResolverFactory>()
|
|
53
|
+
const tsConfigFiles = new Map<string, string | undefined>()
|
|
44
54
|
|
|
45
55
|
export function setEngineExtensions(extensions: readonly string[] | undefined): void {
|
|
46
|
-
configuredExtensions = extensions && extensions.length > 0 ? [...extensions] : undefined
|
|
47
|
-
resetEngine()
|
|
56
|
+
configuredExtensions = extensions && extensions.length > 0 ? [...extensions] : undefined
|
|
57
|
+
resetEngine()
|
|
48
58
|
}
|
|
49
59
|
|
|
50
60
|
export function setEngineTsConfigPath(file: string | undefined): void {
|
|
51
|
-
configuredTsConfigPath = file
|
|
52
|
-
resetEngine()
|
|
61
|
+
configuredTsConfigPath = file
|
|
62
|
+
resetEngine()
|
|
53
63
|
}
|
|
54
64
|
|
|
55
65
|
function resetEngine() {
|
|
56
|
-
baseFactory = undefined
|
|
57
|
-
factories.clear()
|
|
58
|
-
tsConfigFiles.clear()
|
|
59
|
-
nodeModulesOutcomes.clear()
|
|
66
|
+
baseFactory = undefined
|
|
67
|
+
factories.clear()
|
|
68
|
+
tsConfigFiles.clear()
|
|
69
|
+
nodeModulesOutcomes.clear()
|
|
60
70
|
}
|
|
61
71
|
|
|
62
72
|
/**
|
|
@@ -65,24 +75,24 @@ function resetEngine() {
|
|
|
65
75
|
* constructed, only their fs cache is emptied.
|
|
66
76
|
*/
|
|
67
77
|
export function clearResolverFsCache(): void {
|
|
68
|
-
baseFactory?.clearCache()
|
|
69
|
-
for (const factory of factories.values()) factory.clearCache()
|
|
70
|
-
nodeModulesOutcomes.clear()
|
|
71
|
-
clearNodeModulesFsCache()
|
|
78
|
+
baseFactory?.clearCache()
|
|
79
|
+
for (const factory of factories.values()) factory.clearCache()
|
|
80
|
+
nodeModulesOutcomes.clear()
|
|
81
|
+
clearNodeModulesFsCache()
|
|
72
82
|
}
|
|
73
83
|
|
|
74
84
|
/** The tsconfig (or jsconfig) driving `paths`/`baseUrl` for a resolution root. */
|
|
75
85
|
export function tsConfigFileFor(root: string): string | undefined {
|
|
76
|
-
const key = path.resolve(root)
|
|
77
|
-
if (tsConfigFiles.has(key)) return tsConfigFiles.get(key)
|
|
86
|
+
const key = path.resolve(root)
|
|
87
|
+
if (tsConfigFiles.has(key)) return tsConfigFiles.get(key)
|
|
78
88
|
const candidates = [
|
|
79
89
|
...(configuredTsConfigPath ? [path.resolve(key, configuredTsConfigPath)] : []),
|
|
80
90
|
path.join(key, 'tsconfig.json'),
|
|
81
91
|
path.join(key, 'jsconfig.json'),
|
|
82
|
-
]
|
|
83
|
-
const file = candidates.find(candidate => existsSync(candidate))
|
|
84
|
-
tsConfigFiles.set(key, file)
|
|
85
|
-
return file
|
|
92
|
+
]
|
|
93
|
+
const file = candidates.find(candidate => existsSync(candidate))
|
|
94
|
+
tsConfigFiles.set(key, file)
|
|
95
|
+
return file
|
|
86
96
|
}
|
|
87
97
|
|
|
88
98
|
/**
|
|
@@ -91,11 +101,11 @@ export function tsConfigFileFor(root: string): string | undefined {
|
|
|
91
101
|
* package-imports specifier, not a fragment.
|
|
92
102
|
*/
|
|
93
103
|
export function splitResourceQuery(specifier: string): { path: string; query: string } {
|
|
94
|
-
const offset = specifier.startsWith('#') ? 1 : 0
|
|
95
|
-
const match = /[?#]/.exec(specifier.slice(offset))
|
|
96
|
-
if (!match) return { path: specifier, query: '' }
|
|
97
|
-
const index = offset + match.index
|
|
98
|
-
return { path: specifier.slice(0, index), query: specifier.slice(index) }
|
|
104
|
+
const offset = specifier.startsWith('#') ? 1 : 0
|
|
105
|
+
const match = /[?#]/.exec(specifier.slice(offset))
|
|
106
|
+
if (!match) return { path: specifier, query: '' }
|
|
107
|
+
const index = offset + match.index
|
|
108
|
+
return { path: specifier.slice(0, index), query: specifier.slice(index) }
|
|
99
109
|
}
|
|
100
110
|
|
|
101
111
|
/**
|
|
@@ -108,14 +118,14 @@ export function resolveFrom(
|
|
|
108
118
|
conditions: readonly string[],
|
|
109
119
|
tsConfigRoot?: string,
|
|
110
120
|
): ResolveOutcome {
|
|
111
|
-
const { path: request } = splitResourceQuery(specifier)
|
|
112
|
-
const tsconfig = tsConfigRoot ? tsConfigFileFor(tsConfigRoot) : undefined
|
|
113
|
-
return resolveRequest(dir, request, conditions, tsconfig, isSourceRequest(request))
|
|
121
|
+
const { path: request } = splitResourceQuery(specifier)
|
|
122
|
+
const tsconfig = tsConfigRoot ? tsConfigFileFor(tsConfigRoot) : undefined
|
|
123
|
+
return resolveRequest(dir, request, conditions, tsconfig, isSourceRequest(request))
|
|
114
124
|
}
|
|
115
125
|
|
|
116
126
|
/** Probe a literal on-disk path with the resolver's extension/index rules. */
|
|
117
127
|
export function probeFile(target: string, conditions: readonly string[]): string | undefined {
|
|
118
|
-
return probe(target, conditions, true)
|
|
128
|
+
return probe(target, conditions, true)
|
|
119
129
|
}
|
|
120
130
|
|
|
121
131
|
/**
|
|
@@ -124,26 +134,29 @@ export function probeFile(target: string, conditions: readonly string[]): string
|
|
|
124
134
|
* source alias: Node and webpack read a package's stated target literally, so a
|
|
125
135
|
* stale `x.ts` next to the built `x.js` must never win.
|
|
126
136
|
*/
|
|
127
|
-
export function probePackageTarget(
|
|
128
|
-
|
|
137
|
+
export function probePackageTarget(
|
|
138
|
+
target: string,
|
|
139
|
+
conditions: readonly string[],
|
|
140
|
+
): string | undefined {
|
|
141
|
+
return probe(target, conditions, false)
|
|
129
142
|
}
|
|
130
143
|
|
|
131
144
|
function probe(target: string, conditions: readonly string[], sourceAlias: boolean) {
|
|
132
|
-
const { path: file } = splitResourceQuery(target)
|
|
133
|
-
const request = `./${path.basename(file)}
|
|
134
|
-
const outcome = resolveRequest(path.dirname(file), request, conditions, undefined, sourceAlias)
|
|
135
|
-
return outcome && 'path' in outcome ? outcome.path : undefined
|
|
145
|
+
const { path: file } = splitResourceQuery(target)
|
|
146
|
+
const request = `./${path.basename(file)}`
|
|
147
|
+
const outcome = resolveRequest(path.dirname(file), request, conditions, undefined, sourceAlias)
|
|
148
|
+
return outcome && 'path' in outcome ? outcome.path : undefined
|
|
136
149
|
}
|
|
137
150
|
|
|
138
151
|
/** Runtime-cache reset (bench/tests): drop memoized node_modules resolutions. */
|
|
139
152
|
export function clearNodeModulesResolutionCache(): void {
|
|
140
|
-
nodeModulesOutcomes.clear()
|
|
153
|
+
nodeModulesOutcomes.clear()
|
|
141
154
|
}
|
|
142
155
|
|
|
143
156
|
// Lookups FROM node_modules only: installed layouts are process-immutable,
|
|
144
157
|
// app-source resolution must stay live under watch (see clearResolverFsCache).
|
|
145
|
-
const nodeModulesOutcomes = new Map<string, ResolveOutcome>()
|
|
146
|
-
const NODE_MODULES_SEGMENT = `${path.sep}node_modules${path.sep}
|
|
158
|
+
const nodeModulesOutcomes = new Map<string, ResolveOutcome>()
|
|
159
|
+
const NODE_MODULES_SEGMENT = `${path.sep}node_modules${path.sep}`
|
|
147
160
|
|
|
148
161
|
function resolveRequest(
|
|
149
162
|
dir: string,
|
|
@@ -154,9 +167,9 @@ function resolveRequest(
|
|
|
154
167
|
): ResolveOutcome {
|
|
155
168
|
const key = dir.includes(NODE_MODULES_SEGMENT)
|
|
156
169
|
? `${dir}\0${request}\0${conditions.join(',')}\0${tsconfig ?? ''}\0${sourceAlias}`
|
|
157
|
-
: undefined
|
|
158
|
-
if (key !== undefined && nodeModulesOutcomes.has(key)) return nodeModulesOutcomes.get(key)
|
|
159
|
-
const { path: file, error } = resolverFor(conditions, tsconfig, sourceAlias).sync(dir, request)
|
|
170
|
+
: undefined
|
|
171
|
+
if (key !== undefined && nodeModulesOutcomes.has(key)) return nodeModulesOutcomes.get(key)
|
|
172
|
+
const { path: file, error } = resolverFor(conditions, tsconfig, sourceAlias).sync(dir, request)
|
|
160
173
|
// Declaration files carry no runtime and are never a valid resolution.
|
|
161
174
|
const outcome: ResolveOutcome = file
|
|
162
175
|
? isDeclarationFile(file)
|
|
@@ -164,9 +177,9 @@ function resolveRequest(
|
|
|
164
177
|
: { path: file }
|
|
165
178
|
: error?.includes('is not exported')
|
|
166
179
|
? { notExported: true }
|
|
167
|
-
: undefined
|
|
168
|
-
if (key !== undefined) nodeModulesOutcomes.set(key, outcome)
|
|
169
|
-
return outcome
|
|
180
|
+
: undefined
|
|
181
|
+
if (key !== undefined) nodeModulesOutcomes.set(key, outcome)
|
|
182
|
+
return outcome
|
|
170
183
|
}
|
|
171
184
|
|
|
172
185
|
// oxc applies `extensionAlias` to the target it reads out of a package's
|
|
@@ -174,7 +187,7 @@ function resolveRequest(
|
|
|
174
187
|
// (relative or absolute, authored against the file its own build emits) gets
|
|
175
188
|
// the `.js` -> `.ts` rewrite. Bare specifiers are package lookups.
|
|
176
189
|
function isSourceRequest(request: string) {
|
|
177
|
-
return request.startsWith('.') || path.isAbsolute(request)
|
|
190
|
+
return request.startsWith('.') || path.isAbsolute(request)
|
|
178
191
|
}
|
|
179
192
|
|
|
180
193
|
function resolverFor(
|
|
@@ -182,8 +195,8 @@ function resolverFor(
|
|
|
182
195
|
tsconfig: string | undefined,
|
|
183
196
|
sourceExtensionAlias: boolean,
|
|
184
197
|
) {
|
|
185
|
-
const key = `${conditions.join(',')}\0${tsconfig ?? ''}\0${sourceExtensionAlias}
|
|
186
|
-
let resolver = factories.get(key)
|
|
198
|
+
const key = `${conditions.join(',')}\0${tsconfig ?? ''}\0${sourceExtensionAlias}`
|
|
199
|
+
let resolver = factories.get(key)
|
|
187
200
|
if (!resolver) {
|
|
188
201
|
// cloneWithOptions replaces the option set rather than merging it, so the
|
|
189
202
|
// base options are repeated here; the clone shares the base file-system cache.
|
|
@@ -192,12 +205,12 @@ function resolverFor(
|
|
|
192
205
|
extensionAlias: sourceExtensionAlias ? extensionAlias : {},
|
|
193
206
|
conditionNames: [...conditions],
|
|
194
207
|
mainFields: mainFieldsFor(conditions),
|
|
195
|
-
}
|
|
196
|
-
if (tsconfig) options.tsconfig = { configFile: tsconfig }
|
|
197
|
-
resolver = baseResolver().cloneWithOptions(options)
|
|
198
|
-
factories.set(key, resolver)
|
|
208
|
+
}
|
|
209
|
+
if (tsconfig) options.tsconfig = { configFile: tsconfig }
|
|
210
|
+
resolver = baseResolver().cloneWithOptions(options)
|
|
211
|
+
factories.set(key, resolver)
|
|
199
212
|
}
|
|
200
|
-
return resolver
|
|
213
|
+
return resolver
|
|
201
214
|
}
|
|
202
215
|
|
|
203
216
|
function baseOptions(): NapiResolveOptions {
|
|
@@ -206,24 +219,24 @@ function baseOptions(): NapiResolveOptions {
|
|
|
206
219
|
// Symlink policy is the caller's (see realLinkedPackageFile in imports.ts):
|
|
207
220
|
// pnpm virtual-store paths carry version identity that must not collapse.
|
|
208
221
|
symlinks: false,
|
|
209
|
-
}
|
|
222
|
+
}
|
|
210
223
|
}
|
|
211
224
|
|
|
212
225
|
function baseResolver() {
|
|
213
|
-
baseFactory ??= createResolverFactory(baseOptions())
|
|
214
|
-
return baseFactory
|
|
226
|
+
baseFactory ??= createResolverFactory(baseOptions())
|
|
227
|
+
return baseFactory
|
|
215
228
|
}
|
|
216
229
|
|
|
217
230
|
// `edge-light`/`browser` are plain package.json main fields in Next/webpack, not
|
|
218
231
|
// only `exports` conditions — a package shipping just `main`/`module`/`edge-light`
|
|
219
232
|
// must still prefer `edge-light` on the edge layer.
|
|
220
233
|
function mainFieldsFor(conditions: readonly string[]) {
|
|
221
|
-
const fields = ['module', 'main']
|
|
222
|
-
if (conditions.includes('browser')) fields.unshift('browser')
|
|
223
|
-
if (conditions.includes('edge-light')) fields.unshift('edge-light')
|
|
224
|
-
return fields
|
|
234
|
+
const fields = ['module', 'main']
|
|
235
|
+
if (conditions.includes('browser')) fields.unshift('browser')
|
|
236
|
+
if (conditions.includes('edge-light')) fields.unshift('edge-light')
|
|
237
|
+
return fields
|
|
225
238
|
}
|
|
226
239
|
|
|
227
240
|
function isDeclarationFile(file: string) {
|
|
228
|
-
return /\.d\.[cm]?ts$/.test(file)
|
|
241
|
+
return /\.d\.[cm]?ts$/.test(file)
|
|
229
242
|
}
|