@wular/pnext 0.0.3 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -11
- package/bin/pnext +1 -1
- package/config/lint/base.js +7 -7
- package/config/ts/base.json +2 -4
- package/config/ts/react.json +2 -6
- package/package.json +23 -2
- package/reference/compat.md +1 -1
- package/reference/config.md +2 -2
- package/reference/css.md +13 -9
- package/reference/dev.md +1 -1
- package/reference/metadata.md +7 -7
- package/reference/navigation.md +35 -28
- package/reference/performance.md +70 -70
- package/reference/rendering.md +17 -17
- package/reference/routing.md +17 -17
- package/reference/typegen.md +12 -8
- package/src/api/cache.ts +36 -37
- package/src/api/client-cache.ts +2 -2
- package/src/api/client-navigation.ts +113 -109
- package/src/api/dynamic.tsx +58 -55
- package/src/api/link.tsx +49 -52
- package/src/api/navigation.ts +59 -58
- package/src/api/server.ts +152 -144
- package/src/api/suspense.ts +4 -4
- package/src/cli/adapters/vercel-warm.ts +126 -121
- package/src/cli/adapters/vercel.ts +437 -443
- package/src/cli/analyze.ts +333 -144
- package/src/cli/{named-bin.ts → boot/named-bin.ts} +37 -37
- package/src/cli/{boot-trace.ts → boot/trace.ts} +10 -10
- package/src/cli/build.ts +976 -978
- package/src/cli/create.ts +71 -63
- package/src/cli/dev.ts +116 -116
- package/src/cli/index.ts +88 -85
- package/src/cli/migrate/package-json.ts +73 -71
- package/src/cli/migrate/report.ts +32 -33
- package/src/cli/migrate/{index.ts → run.ts} +48 -49
- package/src/cli/migrate/scan.ts +46 -46
- package/src/cli/migrate/spinner.ts +9 -9
- package/src/cli/migrate/tsconfig.ts +35 -35
- package/src/cli/{server-entry.ts → serve/entry.ts} +57 -57
- package/src/cli/{request-pipeline.ts → serve/pipeline.ts} +386 -394
- package/src/cli/{serve-ui.ts → serve/ui.ts} +47 -47
- package/src/cli/start.ts +65 -66
- package/src/{typegen.ts → cli/typegen.ts} +59 -59
- package/src/client/build.ts +794 -768
- package/src/client/chunk-fold.ts +245 -240
- package/src/client/{paths.ts → chunk-name.ts} +6 -6
- package/src/client/entry.ts +162 -147
- package/src/client/prebuilt.ts +231 -223
- package/src/client/profile.ts +29 -29
- package/src/client/react-compiler.ts +20 -15
- package/src/client/{compat-surface.ts → react-tier.ts} +64 -64
- package/src/client/reference-stub.ts +51 -51
- package/src/client/reference.ts +19 -19
- package/src/{api → client}/router/events.ts +17 -17
- package/src/{api → client}/router/history.ts +16 -16
- package/src/{api → client}/router/hub.ts +52 -53
- package/src/{api/router.ts → client/router/index.ts} +61 -60
- package/src/{api → client}/router/policies.ts +24 -24
- package/src/{api → client}/router/runtime.ts +1988 -1961
- package/src/{api → client}/router/types.ts +93 -98
- package/src/compat/actions/client-plugin.ts +42 -43
- package/src/compat/actions/client-stub.ts +14 -14
- package/src/compat/actions/{action-client.ts → client.ts} +194 -193
- package/src/compat/actions/config.ts +63 -64
- package/src/compat/actions/detect.ts +68 -68
- package/src/compat/actions/discovery.ts +105 -105
- package/src/compat/actions/{action-dispatch.ts → dispatch.ts} +277 -274
- package/src/compat/actions/early-submit.ts +1 -1
- package/src/compat/actions/endpoint.ts +198 -198
- package/src/compat/actions/extensions.ts +811 -0
- package/src/compat/actions/flight.ts +23 -23
- package/src/compat/actions/form-state.ts +34 -34
- package/src/compat/actions/hoist.ts +382 -236
- package/src/compat/actions/ids.ts +7 -12
- package/src/compat/actions/index.ts +8 -8
- package/src/compat/actions/instances.ts +46 -46
- package/src/compat/actions/origin.ts +47 -48
- package/src/compat/actions/protocol.ts +22 -22
- package/src/compat/actions/registry.ts +19 -19
- package/src/compat/{misc/action-return.ts → actions/return.ts} +60 -57
- package/src/compat/actions/rewrite.ts +125 -125
- package/src/compat/actions/{action-router.ts → router.ts} +10 -10
- package/src/compat/actions/serve.ts +132 -136
- package/src/compat/actions/server-tag.ts +4 -4
- package/src/compat/actions/{action-shared.ts → shared.ts} +34 -34
- package/src/compat/actions/unrecognized-error.ts +4 -4
- package/src/compat/{index.ts → aliases.ts} +112 -109
- package/src/compat/bundler/bun-externals.ts +18 -18
- package/src/compat/bundler/cjs-exports.ts +271 -223
- package/src/compat/bundler/config.ts +116 -111
- package/src/compat/bundler/externals.ts +12 -12
- package/src/compat/bundler/import-meta-url.ts +19 -19
- package/src/compat/bundler/modularize-imports.ts +36 -33
- package/src/compat/bundler/new-url-asset.ts +22 -24
- package/src/compat/bundler/optimize-package-imports.ts +111 -107
- package/src/compat/bundler/polyfill.ts +28 -28
- package/src/compat/bundler/react-compiler.ts +35 -29
- package/src/compat/bundler/react-profiler.tsx +11 -11
- package/src/compat/bundler/relay-transform.ts +48 -47
- package/src/compat/bundler/require-context.ts +119 -113
- package/src/compat/bundler/resolve-extensions.ts +19 -19
- package/src/compat/bundler/source-cache.ts +25 -25
- package/src/compat/bundler/static-imports.ts +7 -7
- package/src/compat/bundler/symlink-imports.ts +46 -46
- package/src/compat/bundler/tsconfig-paths.ts +13 -15
- package/src/compat/bundler/wasm.ts +58 -60
- package/src/compat/bundler/webpack-loaders.ts +254 -241
- package/src/compat/bundler/worker.ts +101 -104
- package/src/compat/cache/build-flags.ts +29 -29
- package/src/compat/cache/build-prerender-errors.ts +40 -44
- package/src/compat/cache/custom-handler.ts +60 -53
- package/src/compat/cache/fetch-patch.ts +240 -240
- package/src/compat/cache/handler.ts +27 -31
- package/src/compat/cache/modern-handler.ts +148 -126
- package/src/compat/cache/resume-data-cache.ts +47 -45
- package/src/compat/cache/revalidate.ts +233 -232
- package/src/compat/cache/runtime-error.ts +35 -35
- package/src/compat/cache/use-cache-transform.ts +442 -417
- package/src/compat/cache/use-cache.ts +650 -614
- package/src/compat/cache-control.ts +140 -142
- package/src/compat/client/base-path.ts +21 -20
- package/src/compat/client/css-order.ts +18 -18
- package/src/compat/client/errors/bare-boundary.ts +11 -11
- package/src/compat/client/errors/control-flow.ts +23 -23
- package/src/compat/client/errors/error-boundary.ts +61 -61
- package/src/compat/client/errors/global-error.ts +101 -91
- package/src/compat/client/errors/install.ts +71 -72
- package/src/compat/client/errors/lazy.ts +23 -23
- package/src/compat/client/errors/primitive-throw.ts +47 -45
- package/src/compat/client/errors/soft-refresh.ts +4 -4
- package/src/compat/client/link-status.ts +33 -33
- package/src/compat/client/{nav-compat-runtime.ts → nav-runtime.ts} +20 -20
- package/src/compat/client/{nav-compat.ts → nav.ts} +12 -13
- package/src/compat/client/navigation-scroll.ts +63 -63
- package/src/compat/client/optimistic-routing.ts +93 -88
- package/src/compat/client/prefetch-cache.ts +23 -24
- package/src/compat/client/route-announcer.ts +35 -35
- package/src/compat/client/segment-cache-policy.ts +20 -20
- package/src/compat/client/segment-cache.ts +309 -315
- package/src/compat/client/segment-prefetch.ts +127 -132
- package/src/compat/client/trailing-slash.ts +5 -4
- package/src/compat/css/chunking.ts +113 -116
- package/src/compat/css/inline-css.ts +21 -21
- package/src/compat/css/lightningcss.ts +37 -38
- package/src/compat/css/modules.ts +161 -175
- package/src/compat/css/nonce.ts +7 -7
- package/src/compat/css/sass-plugin.ts +18 -21
- package/src/compat/css/sass.ts +150 -152
- package/src/compat/css/styled-jsx-runtime.ts +27 -27
- package/src/compat/css/styled-jsx.ts +21 -21
- package/src/compat/edge-runtime.ts +27 -27
- package/src/compat/{adapter → export}/build-complete.ts +72 -75
- package/src/compat/export/client.ts +29 -31
- package/src/compat/export/{index.ts → emit.ts} +111 -110
- package/src/compat/export/standalone.ts +62 -54
- package/src/compat/image-optimizer/cache.ts +51 -49
- package/src/compat/image-optimizer/detect.ts +52 -52
- package/src/compat/image-optimizer/{index.ts → optimize.ts} +189 -194
- package/src/compat/image-optimizer/source.ts +77 -80
- package/src/compat/lifecycle/after-scope.ts +26 -26
- package/src/compat/lifecycle/after.ts +48 -45
- package/src/compat/lifecycle/error-funnel.ts +98 -102
- package/src/compat/lifecycle/error-serialize.ts +30 -26
- package/src/compat/lifecycle/error-ui.ts +67 -32
- package/src/compat/lifecycle/instrumentation-client.ts +36 -38
- package/src/compat/lifecycle/instrumentation.ts +85 -85
- package/src/compat/lifecycle/node-console.ts +11 -11
- package/src/compat/lifecycle/testmode.ts +160 -132
- package/src/compat/mdx/compile.ts +60 -57
- package/src/compat/mdx/plugin.ts +11 -11
- package/src/compat/mdx/{next-mdx-stub.ts → stub.ts} +5 -5
- package/src/compat/{metadata-route-artifacts.ts → metadata-artifacts.ts} +195 -191
- package/src/compat/metadata.ts +75 -81
- package/src/compat/next/cache.ts +68 -69
- package/src/compat/next/canonical-url.ts +9 -9
- package/src/compat/next/client-cache.ts +19 -19
- package/src/compat/next/client-navigation.ts +112 -116
- package/src/compat/next/client-only.ts +1 -1
- package/src/compat/next/client-script.tsx +99 -93
- package/src/compat/next/client-server.ts +10 -10
- package/src/compat/next/config-loader.ts +176 -173
- package/src/compat/next/config.ts +7 -7
- package/src/compat/next/constants.cjs +6 -6
- package/src/compat/next/constants.ts +6 -6
- package/src/compat/next/custom-server.ts +26 -24
- package/src/compat/next/dist/client/components/app-router-headers.ts +21 -21
- package/src/compat/next/dist/server/app-render/work-unit-async-storage.external.cjs +3 -4
- package/src/compat/next/dist/server/web/spec-extension/revalidate.ts +1 -1
- package/src/compat/next/dist/server/web/spec-extension/unstable-cache.ts +1 -1
- package/src/compat/next/dist/server/web/spec-extension/unstable-no-store.ts +1 -1
- package/src/compat/next/dynamic.tsx +21 -18
- package/src/compat/next/error.tsx +52 -52
- package/src/compat/next/font/cache.ts +74 -74
- package/src/compat/next/font/google.ts +2 -2
- package/src/compat/next/font/index.ts +1 -1
- package/src/compat/next/font/local.ts +3 -3
- package/src/compat/next/font/runtime-client.ts +17 -15
- package/src/compat/next/font/runtime.ts +443 -408
- package/src/compat/next/font/shared.ts +120 -108
- package/src/compat/next/form.tsx +63 -63
- package/src/compat/next/head.tsx +2 -2
- package/src/compat/next/headers.ts +103 -95
- package/src/compat/next/image/client.tsx +220 -0
- package/src/compat/next/image/config.ts +56 -58
- package/src/compat/next/image/optimizer.ts +40 -36
- package/src/compat/next/image/patterns.ts +37 -40
- package/src/compat/next/{image-props.ts → image/props.ts} +208 -202
- package/src/compat/next/image/shared.ts +65 -57
- package/src/compat/next/image/static-metadata.ts +98 -107
- package/src/compat/next/image/validate.ts +79 -88
- package/src/compat/next/image.tsx +19 -23
- package/src/compat/next/index.ts +1 -1
- package/src/compat/next/legacy-image.tsx +59 -60
- package/src/compat/next/{link-validation-transform.ts → link-transform.ts} +95 -96
- package/src/compat/next/link.tsx +158 -158
- package/src/compat/next/navigation.cjs +12 -3
- package/src/compat/next/navigation.ts +48 -50
- package/src/compat/next/offline.ts +27 -27
- package/src/compat/next/og.ts +121 -124
- package/src/compat/next/preferred-region.ts +13 -14
- package/src/compat/next/redirects.ts +58 -56
- package/src/compat/next/resource-hints.ts +73 -76
- package/src/compat/next/rewrites.ts +130 -133
- package/src/compat/next/root-params.ts +45 -45
- package/src/compat/next/{optimistic-route-state.ts → route-state.ts} +52 -52
- package/src/compat/next/router.cjs +4 -2
- package/src/compat/next/router.ts +58 -61
- package/src/compat/next/script.tsx +108 -108
- package/src/compat/next/server-only.ts +1 -1
- package/src/compat/next/server.ts +19 -19
- package/src/compat/next/svgr.ts +18 -17
- package/src/compat/next/telemetry.ts +24 -24
- package/src/compat/next/{image-usage.ts → usage.ts} +70 -39
- package/src/compat/next/user-agent.ts +53 -49
- package/src/compat/next/web-vitals.ts +22 -24
- package/src/compat/otel/api.ts +41 -41
- package/src/compat/otel/client-trace-metadata.ts +25 -27
- package/src/compat/otel/fetch-span.ts +29 -29
- package/src/compat/otel/tracer.ts +331 -331
- package/src/compat/pages/api.ts +456 -0
- package/src/compat/pages/client-plugin.ts +36 -36
- package/src/compat/pages/router-state.ts +34 -34
- package/src/compat/pages/{index.ts → router.ts} +130 -135
- package/src/compat/ppr/io.ts +12 -12
- package/src/compat/ppr/missing-root-params.ts +34 -38
- package/src/compat/ppr/root-params-scan.ts +66 -66
- package/src/compat/ppr/root-params-transform.ts +24 -26
- package/src/compat/ppr/root-params.ts +30 -30
- package/src/compat/ppr/segment-config-incompat.ts +6 -7
- package/src/compat/protocol.ts +71 -70
- package/src/compat/react/action-state.ts +47 -48
- package/src/compat/react/client-lite.ts +15 -15
- package/src/compat/react/client.ts +4 -4
- package/src/compat/react/compiler-runtime.ts +11 -11
- package/src/compat/react/dom-client.ts +44 -44
- package/src/compat/react/dom-react-server.ts +10 -16
- package/src/compat/react/dom-server.ts +10 -10
- package/src/compat/react/dom.ts +52 -52
- package/src/compat/react/hooks-extra.ts +34 -35
- package/src/compat/react/parity.ts +64 -61
- package/src/compat/react/preact.ts +81 -82
- package/src/compat/react/react-server.ts +28 -28
- package/src/compat/react/router-shim.ts +1 -1
- package/src/compat/react/server-component-use.ts +8 -8
- package/src/compat/react/server-inserted-html.ts +30 -31
- package/src/compat/react/server.ts +53 -55
- package/src/compat/react/use.ts +32 -32
- package/src/compat/react/view-transition.ts +20 -20
- package/src/compat/register/actions.ts +35 -824
- package/src/compat/register/boot.ts +41 -41
- package/src/compat/register/build-tier.ts +5 -5
- package/src/compat/register/build.ts +74 -70
- package/src/compat/register/bundler.ts +161 -156
- package/src/compat/register/cache.ts +20 -20
- package/src/compat/register/client-errors.ts +3 -3
- package/src/compat/register/config.ts +6 -6
- package/src/compat/register/css-extras.ts +30 -34
- package/src/compat/register/edge-runtime.ts +3 -3
- package/src/compat/register/errors.ts +10 -12
- package/src/compat/register/export.ts +16 -16
- package/src/compat/register/font.ts +11 -11
- package/src/compat/register/hooks.ts +2 -2
- package/src/compat/register/image.ts +40 -40
- package/src/compat/register/index.ts +59 -62
- package/src/compat/register/instrumentation-client.ts +10 -10
- package/src/compat/register/lifecycle.ts +25 -28
- package/src/compat/register/mdx.ts +10 -10
- package/src/compat/register/middleware.ts +226 -16
- package/src/compat/register/otel.ts +80 -88
- package/src/compat/register/pages-api.ts +10 -463
- package/src/compat/register/ppr.ts +16 -16
- package/src/compat/register/protocol.ts +17 -18
- package/src/compat/register/proxy.ts +49 -51
- package/src/compat/register/render.ts +79 -76
- package/src/compat/register/routing.ts +162 -159
- package/src/compat/register/segment.ts +24 -1887
- package/src/compat/register/static-image.ts +3 -3
- package/src/compat/register/{misc.ts → taint.ts} +9 -9
- package/src/compat/register/typed-routes.ts +14 -14
- package/src/compat/register/{usecache.ts → use-cache.ts} +39 -39
- package/src/compat/register/validation.ts +18 -18
- package/src/compat/segment/loading-boundary.ts +43 -45
- package/src/compat/segment/page-slot.ts +69 -69
- package/src/compat/segment/serve.ts +1884 -0
- package/src/compat/segment/tree.ts +113 -112
- package/src/compat/segment/vary-key.ts +38 -38
- package/src/compat/segment/vary-params.ts +138 -142
- package/src/compat/static-params.ts +14 -12
- package/src/compat/tsconfig-defaults.ts +87 -91
- package/src/compat/typecheck/{index.ts → check.ts} +234 -212
- package/src/compat/typecheck/worker.ts +15 -12
- package/src/compat/typed-routes/{index.ts → generate.ts} +36 -36
- package/src/compat/typed-routes/manifest.ts +174 -170
- package/src/compat/typed-routes/typegen.ts +127 -110
- package/src/compat/validation/errors.ts +16 -19
- package/src/compat/validation/prerender-diagnostics.ts +521 -504
- package/src/compat/validation/{index.ts → validate.ts} +647 -648
- package/src/compat-bootstrap.ts +16 -16
- package/src/config.ts +69 -69
- package/src/css/build.ts +230 -227
- package/src/css/postcss.ts +79 -80
- package/src/css/worker.ts +14 -15
- package/src/dev/client-actions.ts +10 -10
- package/src/dev/client-chunk-store.ts +27 -27
- package/src/dev/{client-key-cache.ts → restart/client-key.ts} +76 -76
- package/src/dev/{restart-cache.ts → restart/enabled.ts} +1 -1
- package/src/dev/{global-css-cache.ts → restart/global-css.ts} +91 -83
- package/src/dev/{node-module-bundle-cache.ts → restart/node-modules.ts} +24 -24
- package/src/dev/{route-bundle-key-cache.ts → restart/route-bundle-key.ts} +53 -53
- package/src/dev/{route-facts-cache.ts → restart/route-facts.ts} +82 -82
- package/src/dev/server.ts +804 -820
- package/src/env.ts +46 -43
- package/src/extensions.ts +491 -478
- package/src/index.ts +8 -8
- package/src/internal.ts +20 -23
- package/src/{islands → render}/boundary-error.ts +3 -3
- package/src/render/hooks.ts +71 -71
- package/src/render/island-context.ts +14 -14
- package/src/render/metadata.ts +310 -310
- package/src/{ppr-postpone.ts → render/postpone.ts} +5 -5
- package/src/{ppr.ts → render/ppr.ts} +244 -245
- package/src/render/renderer.ts +2076 -2082
- package/src/render/resource-hints.ts +16 -17
- package/src/render/slots.tsx +224 -235
- package/src/{islands → render}/static-children.ts +9 -12
- package/src/{islands → render}/static-slots.ts +37 -37
- package/src/{cache/context.ts → request/cache.ts} +20 -20
- package/src/request/context.ts +107 -107
- package/src/{dynamic/source.ts → resolve/dynamic.ts} +152 -143
- package/src/resolve/engine.ts +90 -77
- package/src/resolve/imports.ts +475 -463
- package/src/resolve/scan-facts.ts +442 -186
- package/src/resolve/source-text.ts +37 -37
- package/src/{dynamic → resolve}/tree-shake.ts +132 -128
- package/src/routing/forwarded.ts +19 -19
- package/src/routing/handler.ts +84 -91
- package/src/routing/href.ts +69 -70
- package/src/routing/{metadata.ts → metadata-files.ts} +403 -401
- package/src/{proxy.ts → routing/proxy.ts} +306 -312
- package/src/routing/{request-runtime.ts → request-environment.ts} +10 -10
- package/src/routing/routes.ts +833 -848
- package/src/routing/slots.ts +164 -160
- package/src/runtime/loader.ts +952 -0
- package/src/{dev → runtime}/module-cache.ts +309 -287
- package/src/{dev → runtime}/module-generations.ts +9 -9
- package/src/{dev → runtime}/module-transform.ts +81 -72
- package/src/{dev/imports.ts → runtime/modules.ts} +934 -847
- package/src/runtime/{server.ts → vendor-build.ts} +848 -1696
- package/src/runtime/vendor.ts +425 -404
- package/src/styles.d.ts +9 -0
- package/src/types.ts +320 -335
- package/src/utils/ansi.ts +5 -5
- package/src/utils/{source.ts → code.ts} +15 -12
- package/src/utils/content-type.ts +3 -3
- package/src/utils/decode.ts +2 -2
- package/src/utils/dev-profile.ts +13 -13
- package/src/utils/error-log.ts +6 -6
- package/src/utils/esbuild.ts +18 -18
- package/src/utils/fs-cache.ts +13 -13
- package/src/utils/fs.ts +57 -49
- package/src/utils/html.ts +20 -24
- package/src/utils/native-require.ts +8 -8
- package/src/utils/serialize.ts +139 -146
- package/src/utils/verbose.ts +18 -18
- package/src/cli/analyze-print.ts +0 -181
- package/src/compat/middleware/manifest.ts +0 -210
- package/src/compat/next/image-client.tsx +0 -215
- package/src/compat/next/link-usage.ts +0 -29
- package/src/css/index.ts +0 -2
- package/src/render/index.ts +0 -1
- package/src/style-modules.d.ts +0 -9
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
import { readdirSync, realpathSync } from 'node:fs'
|
|
2
|
-
import { realpath } from 'node:fs/promises'
|
|
3
|
-
import path from 'node:path'
|
|
4
|
-
import type { Plugin } from 'esbuild'
|
|
5
|
-
import type { ResolvedConfig } from '../../config'
|
|
6
|
-
import { resolveImport } from '../../resolve/imports'
|
|
1
|
+
import { readdirSync, realpathSync } from 'node:fs'
|
|
2
|
+
import { realpath } from 'node:fs/promises'
|
|
3
|
+
import path from 'node:path'
|
|
4
|
+
import type { Plugin } from 'esbuild'
|
|
5
|
+
import type { ResolvedConfig } from '../../config'
|
|
6
|
+
import { resolveImport } from '../../resolve/imports'
|
|
7
7
|
|
|
8
|
-
const resolvedMarker = Symbol('pnext-symlink-import')
|
|
8
|
+
const resolvedMarker = Symbol('pnext-symlink-import')
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* Whether a file IS its own real path - asked once per relative import, so the same importers are
|
|
12
12
|
* re-resolved component-by-component across every build. Keyed on the path alone: a path's symlink
|
|
13
13
|
* identity changes only on an install, which already invalidates every resolved artifact key.
|
|
14
14
|
*/
|
|
15
|
-
const realPaths = new Map<string, Promise<boolean>>()
|
|
15
|
+
const realPaths = new Map<string, Promise<boolean>>()
|
|
16
16
|
|
|
17
17
|
function isRealPath(file: string) {
|
|
18
|
-
let real = realPaths.get(file)
|
|
18
|
+
let real = realPaths.get(file)
|
|
19
19
|
if (!real) {
|
|
20
20
|
real = realpath(file).then(
|
|
21
21
|
resolved => resolved === file,
|
|
22
22
|
() => true,
|
|
23
|
-
)
|
|
24
|
-
realPaths.set(file, real)
|
|
23
|
+
)
|
|
24
|
+
realPaths.set(file, real)
|
|
25
25
|
}
|
|
26
|
-
return real
|
|
26
|
+
return real
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
/**
|
|
@@ -33,9 +33,9 @@ function isRealPath(file: string) {
|
|
|
33
33
|
* these during node_modules resolution, so importers come out as realpaths
|
|
34
34
|
* 'other' pnpm trees, symlinked roots, stray source symlinks, or a failed scan
|
|
35
35
|
*/
|
|
36
|
-
type SymlinkLayout = 'none' | 'package-links' | 'other'
|
|
36
|
+
type SymlinkLayout = 'none' | 'package-links' | 'other'
|
|
37
37
|
|
|
38
|
-
const symlinkLayouts = new Map<string, SymlinkLayout>()
|
|
38
|
+
const symlinkLayouts = new Map<string, SymlinkLayout>()
|
|
39
39
|
|
|
40
40
|
/**
|
|
41
41
|
* Whether this build can see a SYMLINKED importer, so the plugin's onResolve is registered only where it
|
|
@@ -47,50 +47,47 @@ export function symlinkedImportsPossible(
|
|
|
47
47
|
config: ResolvedConfig,
|
|
48
48
|
realPathEntries?: boolean,
|
|
49
49
|
): boolean {
|
|
50
|
-
const key = `${config.root}\0${config.workspaceRoot}
|
|
51
|
-
let layout = symlinkLayouts.get(key)
|
|
50
|
+
const key = `${config.root}\0${config.workspaceRoot}`
|
|
51
|
+
let layout = symlinkLayouts.get(key)
|
|
52
52
|
if (layout === undefined) {
|
|
53
|
-
layout = detectSymlinkLayout(config)
|
|
54
|
-
symlinkLayouts.set(key, layout)
|
|
53
|
+
layout = detectSymlinkLayout(config)
|
|
54
|
+
symlinkLayouts.set(key, layout)
|
|
55
55
|
}
|
|
56
|
-
if (layout === 'none') return false
|
|
57
|
-
if (layout === 'package-links') return !realPathEntries
|
|
58
|
-
return true
|
|
56
|
+
if (layout === 'none') return false
|
|
57
|
+
if (layout === 'package-links') return !realPathEntries
|
|
58
|
+
return true
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
function detectSymlinkLayout(config: ResolvedConfig): SymlinkLayout {
|
|
62
62
|
try {
|
|
63
|
-
const roots = [...new Set([config.root, config.workspaceRoot])].map(root =>
|
|
64
|
-
|
|
65
|
-
);
|
|
66
|
-
let packageLinks = false;
|
|
63
|
+
const roots = [...new Set([config.root, config.workspaceRoot])].map(root => path.resolve(root))
|
|
64
|
+
let packageLinks = false
|
|
67
65
|
for (const root of roots) {
|
|
68
|
-
if (realpathSync(root) !== root) return 'other'
|
|
69
|
-
if (readDirEntries(root).some(entry => entry.isSymbolicLink())) return 'other'
|
|
70
|
-
const nodeModules = path.join(root, 'node_modules')
|
|
66
|
+
if (realpathSync(root) !== root) return 'other'
|
|
67
|
+
if (readDirEntries(root).some(entry => entry.isSymbolicLink())) return 'other'
|
|
68
|
+
const nodeModules = path.join(root, 'node_modules')
|
|
71
69
|
for (const entry of readDirEntries(nodeModules)) {
|
|
72
|
-
if (entry.name === '.pnpm') return 'other'
|
|
73
|
-
if (entry.isSymbolicLink()) packageLinks = true
|
|
70
|
+
if (entry.name === '.pnpm') return 'other'
|
|
71
|
+
if (entry.isSymbolicLink()) packageLinks = true
|
|
74
72
|
else if (entry.isDirectory() && entry.name.startsWith('@')) {
|
|
75
|
-
const scopeDir = path.join(nodeModules, entry.name)
|
|
76
|
-
if (readDirEntries(scopeDir).some(scoped => scoped.isSymbolicLink()))
|
|
77
|
-
packageLinks = true;
|
|
73
|
+
const scopeDir = path.join(nodeModules, entry.name)
|
|
74
|
+
if (readDirEntries(scopeDir).some(scoped => scoped.isSymbolicLink())) packageLinks = true
|
|
78
75
|
}
|
|
79
76
|
}
|
|
80
77
|
}
|
|
81
|
-
return packageLinks ? 'package-links' : 'none'
|
|
78
|
+
return packageLinks ? 'package-links' : 'none'
|
|
82
79
|
} catch {
|
|
83
|
-
return 'other'
|
|
80
|
+
return 'other'
|
|
84
81
|
}
|
|
85
82
|
}
|
|
86
83
|
|
|
87
84
|
/** Missing dir = no symlinks there; any other failure propagates as "uncertain". */
|
|
88
85
|
function readDirEntries(dir: string) {
|
|
89
86
|
try {
|
|
90
|
-
return readdirSync(dir, { withFileTypes: true })
|
|
87
|
+
return readdirSync(dir, { withFileTypes: true })
|
|
91
88
|
} catch (error) {
|
|
92
|
-
if ((error as NodeJS.ErrnoException).code === 'ENOENT') return []
|
|
93
|
-
throw error
|
|
89
|
+
if ((error as NodeJS.ErrnoException).code === 'ENOENT') return []
|
|
90
|
+
throw error
|
|
94
91
|
}
|
|
95
92
|
}
|
|
96
93
|
|
|
@@ -100,20 +97,23 @@ export function serverSymlinkImportPlugin(config: ResolvedConfig): Plugin {
|
|
|
100
97
|
name: 'pnext-symlink-imports',
|
|
101
98
|
setup(build) {
|
|
102
99
|
build.onResolve({ filter: /^\.\.?\// }, async args => {
|
|
103
|
-
if (
|
|
104
|
-
|
|
100
|
+
if (
|
|
101
|
+
!args.importer ||
|
|
102
|
+
(args.pluginData as Record<PropertyKey, unknown> | undefined)?.[resolvedMarker]
|
|
103
|
+
) {
|
|
104
|
+
return undefined
|
|
105
105
|
}
|
|
106
|
-
if (await isRealPath(args.importer)) return undefined
|
|
107
|
-
const target = resolveImport(config.root, args.importer, args.path)
|
|
108
|
-
if (!target) return undefined
|
|
106
|
+
if (await isRealPath(args.importer)) return undefined
|
|
107
|
+
const target = resolveImport(config.root, args.importer, args.path)
|
|
108
|
+
if (!target) return undefined
|
|
109
109
|
return build.resolve(target, {
|
|
110
110
|
kind: args.kind,
|
|
111
111
|
importer: args.importer,
|
|
112
112
|
namespace: args.namespace,
|
|
113
113
|
resolveDir: args.resolveDir,
|
|
114
114
|
pluginData: { ...(args.pluginData as object | undefined), [resolvedMarker]: true },
|
|
115
|
-
})
|
|
116
|
-
})
|
|
115
|
+
})
|
|
116
|
+
})
|
|
117
117
|
},
|
|
118
|
-
}
|
|
118
|
+
}
|
|
119
119
|
}
|
|
@@ -19,21 +19,19 @@
|
|
|
19
19
|
// anywhere -> no plugin.
|
|
20
20
|
// ---------------------------------------------------------------------------
|
|
21
21
|
|
|
22
|
-
import path from 'node:path'
|
|
23
|
-
import type { Plugin } from 'esbuild'
|
|
24
|
-
import type { ResolvedConfig } from '../../config'
|
|
25
|
-
import { configuredTsPathPatterns, resolveConfiguredTsPath } from '../../resolve/imports'
|
|
26
|
-
import { escapeRegex } from '../../utils/
|
|
22
|
+
import path from 'node:path'
|
|
23
|
+
import type { Plugin } from 'esbuild'
|
|
24
|
+
import type { ResolvedConfig } from '../../config'
|
|
25
|
+
import { configuredTsPathPatterns, resolveConfiguredTsPath } from '../../resolve/imports'
|
|
26
|
+
import { escapeRegex } from '../../utils/code'
|
|
27
27
|
|
|
28
28
|
export function tsconfigPathsPlugin(config: ResolvedConfig): Plugin | undefined {
|
|
29
|
-
const patterns = configuredTsPathPatterns(config.root, config.workspaceRoot)
|
|
30
|
-
if (patterns.length === 0) return undefined
|
|
29
|
+
const patterns = configuredTsPathPatterns(config.root, config.workspaceRoot)
|
|
30
|
+
if (patterns.length === 0) return undefined
|
|
31
31
|
// A TS `paths` key holds at most one `*`; everything else is literal.
|
|
32
32
|
const filter = new RegExp(
|
|
33
|
-
`^(?:${patterns
|
|
34
|
-
|
|
35
|
-
.join('|')})$`,
|
|
36
|
-
);
|
|
33
|
+
`^(?:${patterns.map(pattern => pattern.split('*').map(escapeRegex).join('[^:]*')).join('|')})$`,
|
|
34
|
+
)
|
|
37
35
|
return {
|
|
38
36
|
name: 'pnext-tsconfig-paths',
|
|
39
37
|
setup(build) {
|
|
@@ -42,9 +40,9 @@ export function tsconfigPathsPlugin(config: ResolvedConfig): Plugin | undefined
|
|
|
42
40
|
config.root,
|
|
43
41
|
path.join(args.resolveDir || config.root, 'pnext-resolve.ts'),
|
|
44
42
|
args.path,
|
|
45
|
-
)
|
|
46
|
-
return resolved ? { path: resolved } : undefined
|
|
47
|
-
})
|
|
43
|
+
)
|
|
44
|
+
return resolved ? { path: resolved } : undefined
|
|
45
|
+
})
|
|
48
46
|
},
|
|
49
|
-
}
|
|
47
|
+
}
|
|
50
48
|
}
|
|
@@ -1,51 +1,49 @@
|
|
|
1
|
-
import { createHash } from 'node:crypto'
|
|
2
|
-
import { existsSync } from 'node:fs'
|
|
3
|
-
import { mkdir, readFile, writeFile } from 'node:fs/promises'
|
|
4
|
-
import path from 'node:path'
|
|
5
|
-
import type { Plugin } from 'esbuild'
|
|
6
|
-
import type { ResolvedConfig } from '../../config'
|
|
1
|
+
import { createHash } from 'node:crypto'
|
|
2
|
+
import { existsSync } from 'node:fs'
|
|
3
|
+
import { mkdir, readFile, writeFile } from 'node:fs/promises'
|
|
4
|
+
import path from 'node:path'
|
|
5
|
+
import type { Plugin } from 'esbuild'
|
|
6
|
+
import type { ResolvedConfig } from '../../config'
|
|
7
7
|
|
|
8
8
|
interface WasmManifestBinding {
|
|
9
|
-
name: string
|
|
10
|
-
filePath: string
|
|
9
|
+
name: string
|
|
10
|
+
filePath: string
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
const WASM_MODULE_FILTER = /\.wasm\?module(?:[?#].*)
|
|
13
|
+
const WASM_MODULE_FILTER = /\.wasm\?module(?:[?#].*)?$/
|
|
14
14
|
|
|
15
15
|
// Keep one normalized binding list per build output root, so middleware manifest
|
|
16
16
|
// emission can include the same `wasm` entries Next’s real middleware manifest
|
|
17
17
|
// emits.
|
|
18
|
-
const manifestWasmBindings = new Map<string, Map<string, WasmManifestBinding>>()
|
|
18
|
+
const manifestWasmBindings = new Map<string, Map<string, WasmManifestBinding>>()
|
|
19
19
|
|
|
20
20
|
function outPathKey(outPath: string): string {
|
|
21
|
-
return path.resolve(outPath)
|
|
21
|
+
return path.resolve(outPath)
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
function sourcePathFromSpecifier(specifier: string, resolveDir: string): string | undefined {
|
|
25
|
-
const [sourcePath] = specifier.split(/[?#]/, 1)
|
|
26
|
-
if (!sourcePath) return undefined
|
|
27
|
-
return path.isAbsolute(sourcePath) ? sourcePath : path.resolve(resolveDir, sourcePath)
|
|
25
|
+
const [sourcePath] = specifier.split(/[?#]/, 1)
|
|
26
|
+
if (!sourcePath) return undefined
|
|
27
|
+
return path.isAbsolute(sourcePath) ? sourcePath : path.resolve(resolveDir, sourcePath)
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
function assetFileName(bytes: Uint8Array) {
|
|
31
|
-
const hash = createHash('sha256').update(bytes).digest('hex').slice(0, 16)
|
|
32
|
-
return `wasm_${hash}.wasm
|
|
31
|
+
const hash = createHash('sha256').update(bytes).digest('hex').slice(0, 16)
|
|
32
|
+
return `wasm_${hash}.wasm`
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
function registerManifestBinding(outPath: string, sourcePath: string, name: string) {
|
|
36
|
-
const key = outPathKey(outPath)
|
|
37
|
-
const bySource = manifestWasmBindings.get(key) ?? new Map<string, WasmManifestBinding>()
|
|
38
|
-
bySource.set(sourcePath, { name, filePath: `server/edge-chunks/${name}` })
|
|
39
|
-
manifestWasmBindings.set(key, bySource)
|
|
36
|
+
const key = outPathKey(outPath)
|
|
37
|
+
const bySource = manifestWasmBindings.get(key) ?? new Map<string, WasmManifestBinding>()
|
|
38
|
+
bySource.set(sourcePath, { name, filePath: `server/edge-chunks/${name}` })
|
|
39
|
+
manifestWasmBindings.set(key, bySource)
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
export function readMiddlewareWasmBindingsForOutPath(
|
|
43
|
-
outPath
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
if (!bindings || bindings.size === 0) return [];
|
|
48
|
-
return [...bindings.values()].sort((a, b) => a.name.localeCompare(b.name));
|
|
42
|
+
export function readMiddlewareWasmBindingsForOutPath(outPath: string): WasmManifestBinding[] {
|
|
43
|
+
const key = outPathKey(outPath)
|
|
44
|
+
const bindings = manifestWasmBindings.get(key)
|
|
45
|
+
if (!bindings || bindings.size === 0) return []
|
|
46
|
+
return [...bindings.values()].sort((a, b) => a.name.localeCompare(b.name))
|
|
49
47
|
}
|
|
50
48
|
|
|
51
49
|
/**
|
|
@@ -62,9 +60,9 @@ export function readMiddlewareWasmBindingsForOutPath(
|
|
|
62
60
|
*/
|
|
63
61
|
// The bare form (`import { add } from './add.wasm'`) is turbopack's default
|
|
64
62
|
// wasm semantics: the module's own exports become the module's named exports.
|
|
65
|
-
const WASM_FILTER = /\.wasm(?:[?#].*)
|
|
66
|
-
const WASM_INSTANCE_NAMESPACE = 'pnext-wasm-instance'
|
|
67
|
-
const IDENTIFIER = /^[A-Za-z_$][A-Za-z0-9_$]
|
|
63
|
+
const WASM_FILTER = /\.wasm(?:[?#].*)?$/
|
|
64
|
+
const WASM_INSTANCE_NAMESPACE = 'pnext-wasm-instance'
|
|
65
|
+
const IDENTIFIER = /^[A-Za-z_$][A-Za-z0-9_$]*$/
|
|
68
66
|
|
|
69
67
|
/**
|
|
70
68
|
* ESM source instantiating `bytes` and re-exporting the wasm module's own exports by name (plus the
|
|
@@ -74,13 +72,13 @@ const IDENTIFIER = /^[A-Za-z_$][A-Za-z0-9_$]*$/;
|
|
|
74
72
|
function wasmInstanceModuleSource(bytes: Uint8Array): string {
|
|
75
73
|
const names = WebAssembly.Module.exports(new WebAssembly.Module(bytes.buffer as ArrayBuffer))
|
|
76
74
|
.map(entry => entry.name)
|
|
77
|
-
.filter(name => IDENTIFIER.test(name))
|
|
75
|
+
.filter(name => IDENTIFIER.test(name))
|
|
78
76
|
return [
|
|
79
77
|
`const bytes = Uint8Array.from(atob(${JSON.stringify(Buffer.from(bytes).toString('base64'))}), c => c.charCodeAt(0));`,
|
|
80
78
|
'const wasmExports = new WebAssembly.Instance(new WebAssembly.Module(bytes), {}).exports;',
|
|
81
79
|
...names.map(name => `export const ${name} = wasmExports[${JSON.stringify(name)}];`),
|
|
82
80
|
'export default wasmExports;',
|
|
83
|
-
].join('\n')
|
|
81
|
+
].join('\n')
|
|
84
82
|
}
|
|
85
83
|
|
|
86
84
|
/**
|
|
@@ -90,44 +88,44 @@ function wasmInstanceModuleSource(bytes: Uint8Array): string {
|
|
|
90
88
|
* per project root.
|
|
91
89
|
*/
|
|
92
90
|
export function registerWasmModuleRuntime(config: ResolvedConfig): void {
|
|
93
|
-
const root = path.resolve(config.root)
|
|
94
|
-
if (wasmRuntimeRoots.has(root)) return
|
|
95
|
-
wasmRuntimeRoots.add(root)
|
|
91
|
+
const root = path.resolve(config.root)
|
|
92
|
+
if (wasmRuntimeRoots.has(root)) return
|
|
93
|
+
wasmRuntimeRoots.add(root)
|
|
96
94
|
Bun.plugin({
|
|
97
95
|
name: `pnext-compat-wasm-runtime-${root}`,
|
|
98
96
|
setup(plugin) {
|
|
99
97
|
plugin.onLoad({ filter: /\.wasm$/ }, async ({ path: file }) => ({
|
|
100
98
|
contents: wasmInstanceModuleSource(new Uint8Array(await readFile(file))),
|
|
101
99
|
loader: 'js',
|
|
102
|
-
}))
|
|
100
|
+
}))
|
|
103
101
|
},
|
|
104
|
-
})
|
|
102
|
+
})
|
|
105
103
|
}
|
|
106
104
|
|
|
107
|
-
const wasmRuntimeRoots = new Set<string>()
|
|
105
|
+
const wasmRuntimeRoots = new Set<string>()
|
|
108
106
|
|
|
109
107
|
export function wasmModulePlugin(config: ResolvedConfig): Plugin {
|
|
110
|
-
const edgeChunkDir = path.join(config.outPath, 'server', 'edge-chunks')
|
|
108
|
+
const edgeChunkDir = path.join(config.outPath, 'server', 'edge-chunks')
|
|
111
109
|
return {
|
|
112
110
|
name: 'pnext-compat-wasm-module',
|
|
113
|
-
|
|
111
|
+
setup(build) {
|
|
114
112
|
build.onResolve({ filter: WASM_MODULE_FILTER }, args => {
|
|
115
|
-
const sourcePath = sourcePathFromSpecifier(args.path, args.resolveDir)
|
|
116
|
-
if (!sourcePath) return undefined
|
|
117
|
-
return { path: sourcePath, namespace: 'pnext-wasm-module' }
|
|
118
|
-
})
|
|
113
|
+
const sourcePath = sourcePathFromSpecifier(args.path, args.resolveDir)
|
|
114
|
+
if (!sourcePath) return undefined
|
|
115
|
+
return { path: sourcePath, namespace: 'pnext-wasm-module' }
|
|
116
|
+
})
|
|
119
117
|
|
|
120
118
|
build.onLoad({ filter: /.*/, namespace: 'pnext-wasm-module' }, async args => {
|
|
121
|
-
const sourcePath = path.resolve(args.path)
|
|
122
|
-
const bytes = new Uint8Array(await readFile(sourcePath))
|
|
123
|
-
const name = assetFileName(bytes)
|
|
124
|
-
const outFile = path.join(edgeChunkDir, name)
|
|
119
|
+
const sourcePath = path.resolve(args.path)
|
|
120
|
+
const bytes = new Uint8Array(await readFile(sourcePath))
|
|
121
|
+
const name = assetFileName(bytes)
|
|
122
|
+
const outFile = path.join(edgeChunkDir, name)
|
|
125
123
|
if (!existsSync(outFile)) {
|
|
126
|
-
await mkdir(path.dirname(outFile), { recursive: true })
|
|
127
|
-
await writeFile(outFile, bytes)
|
|
124
|
+
await mkdir(path.dirname(outFile), { recursive: true })
|
|
125
|
+
await writeFile(outFile, bytes)
|
|
128
126
|
}
|
|
129
|
-
registerManifestBinding(config.outPath, sourcePath, name)
|
|
130
|
-
const moduleBytes = JSON.stringify([...bytes])
|
|
127
|
+
registerManifestBinding(config.outPath, sourcePath, name)
|
|
128
|
+
const moduleBytes = JSON.stringify([...bytes])
|
|
131
129
|
return {
|
|
132
130
|
contents: [
|
|
133
131
|
`const bytes = new Uint8Array(${moduleBytes});`,
|
|
@@ -135,19 +133,19 @@ export function wasmModulePlugin(config: ResolvedConfig): Plugin {
|
|
|
135
133
|
'export default module;',
|
|
136
134
|
].join('\n'),
|
|
137
135
|
loader: 'js',
|
|
138
|
-
}
|
|
139
|
-
})
|
|
136
|
+
}
|
|
137
|
+
})
|
|
140
138
|
|
|
141
139
|
// Bare `.wasm` (no `?module`): the instance's exports ARE the module's.
|
|
142
140
|
build.onResolve({ filter: WASM_FILTER }, args => {
|
|
143
|
-
if (WASM_MODULE_FILTER.test(args.path)) return undefined
|
|
144
|
-
const sourcePath = sourcePathFromSpecifier(args.path, args.resolveDir)
|
|
145
|
-
return sourcePath ? { path: sourcePath, namespace: WASM_INSTANCE_NAMESPACE } : undefined
|
|
146
|
-
})
|
|
141
|
+
if (WASM_MODULE_FILTER.test(args.path)) return undefined
|
|
142
|
+
const sourcePath = sourcePathFromSpecifier(args.path, args.resolveDir)
|
|
143
|
+
return sourcePath ? { path: sourcePath, namespace: WASM_INSTANCE_NAMESPACE } : undefined
|
|
144
|
+
})
|
|
147
145
|
build.onLoad({ filter: /.*/, namespace: WASM_INSTANCE_NAMESPACE }, async args => ({
|
|
148
146
|
contents: wasmInstanceModuleSource(new Uint8Array(await readFile(path.resolve(args.path)))),
|
|
149
147
|
loader: 'js',
|
|
150
|
-
}))
|
|
148
|
+
}))
|
|
151
149
|
},
|
|
152
|
-
}
|
|
150
|
+
}
|
|
153
151
|
}
|