@wular/pnext 0.1.5 → 0.1.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/bin/pnext +9 -2
- package/dist/server/_chunks/aliases-j47a10ce.js +44 -0
- package/dist/server/_chunks/analyze-arswqe6s.js +445 -0
- package/dist/server/_chunks/boot-af0mv3dy.js +36 -0
- package/dist/server/_chunks/build-spy3dxp4.js +84 -0
- package/dist/server/_chunks/build-t9h0hec3.js +3550 -0
- package/dist/server/_chunks/build-tier-m7yvqz61.js +2472 -0
- package/dist/server/_chunks/compile-53j02j27.js +22 -0
- package/dist/server/_chunks/config-1yzwexq6.js +27 -0
- package/dist/server/_chunks/config-n2z7yxps.js +22 -0
- package/dist/server/_chunks/create-meec9hs6.js +134 -0
- package/dist/server/_chunks/dev-fjmqg6en.js +220 -0
- package/dist/server/_chunks/esbuild-yyktfrtt.js +15 -0
- package/dist/server/_chunks/generate-n9sh6hzt.js +21 -0
- package/dist/server/_chunks/index-0374j2b9.js +66 -0
- package/dist/server/_chunks/index-06nyqntx.js +213 -0
- package/dist/server/_chunks/index-1011cscr.js +5263 -0
- package/dist/server/_chunks/index-11sfk4hb.js +170 -0
- package/dist/server/_chunks/index-20ppawv7.js +297 -0
- package/dist/server/_chunks/index-2dv4y4wd.js +1065 -0
- package/dist/server/_chunks/index-2vz0wzdn.js +59 -0
- package/dist/server/_chunks/index-2wfv4kvx.js +182 -0
- package/dist/server/_chunks/index-357na4a8.js +109 -0
- package/dist/server/_chunks/index-3b3at80h.js +109 -0
- package/dist/server/_chunks/index-3tf1xjsp.js +6166 -0
- package/dist/server/_chunks/index-3xbr4eyv.js +105 -0
- package/dist/server/_chunks/index-4399bvd2.js +18 -0
- package/dist/server/_chunks/index-4hgjrqh7.js +851 -0
- package/dist/server/_chunks/index-4q2gbfwk.js +2530 -0
- package/dist/server/_chunks/index-4t92hdxd.js +172 -0
- package/dist/server/_chunks/index-4zzebszd.js +10 -0
- package/dist/server/_chunks/index-5gyr4emz.js +107 -0
- package/dist/server/_chunks/index-5hr4062s.js +70 -0
- package/dist/server/_chunks/index-68m3mwbd.js +84 -0
- package/dist/server/_chunks/index-6b009mt0.js +56 -0
- package/dist/server/_chunks/index-6e4fqv30.js +588 -0
- package/dist/server/_chunks/index-6gex3pfa.js +15 -0
- package/dist/server/_chunks/index-6kp9r0d9.js +11 -0
- package/dist/server/_chunks/index-6q7zvrap.js +134 -0
- package/dist/server/_chunks/index-73z4esab.js +38 -0
- package/dist/server/_chunks/index-79ngvam8.js +60 -0
- package/dist/server/_chunks/index-7wc9n8be.js +25 -0
- package/dist/server/_chunks/index-8k7pfejn.js +1599 -0
- package/dist/server/_chunks/index-8kcxdfya.js +206 -0
- package/dist/server/_chunks/index-91x12ykq.js +274 -0
- package/dist/server/_chunks/index-9ch50vtq.js +18 -0
- package/dist/server/_chunks/index-9hx2641q.js +28 -0
- package/dist/server/_chunks/index-9n2914ww.js +535 -0
- package/dist/server/_chunks/index-9ych9ma8.js +207 -0
- package/dist/server/_chunks/index-b6wtkdp4.js +24 -0
- package/dist/server/_chunks/index-bcws5eh2.js +35 -0
- package/dist/server/_chunks/index-c0g2wf3z.js +92 -0
- package/dist/server/_chunks/index-cf4rvxv6.js +95 -0
- package/dist/server/_chunks/index-cjgqs13g.js +65 -0
- package/dist/server/_chunks/index-ckkdpht5.js +41 -0
- package/dist/server/_chunks/index-cyfednwb.js +87 -0
- package/dist/server/_chunks/index-danncfhy.js +311 -0
- package/dist/server/_chunks/index-dg0f05zs.js +199 -0
- package/dist/server/_chunks/index-e3a6yx84.js +18 -0
- package/dist/server/_chunks/index-e88tyv35.js +45 -0
- package/dist/server/_chunks/index-eajaspjk.js +1253 -0
- package/dist/server/_chunks/index-eeaanp2e.js +483 -0
- package/dist/server/_chunks/index-egykcqg3.js +101 -0
- package/dist/server/_chunks/index-en7n9f7m.js +22 -0
- package/dist/server/_chunks/index-ezgj0tr1.js +88 -0
- package/dist/server/_chunks/index-fkp000p1.js +590 -0
- package/dist/server/_chunks/index-fn1chkkd.js +214 -0
- package/dist/server/_chunks/index-fp8r0sqs.js +64 -0
- package/dist/server/_chunks/index-ggk2j965.js +9432 -0
- package/dist/server/_chunks/index-grta8ap3.js +238 -0
- package/dist/server/_chunks/index-h2a70tg4.js +7 -0
- package/dist/server/_chunks/index-h4xy648y.js +51 -0
- package/dist/server/_chunks/index-hkdfj58q.js +92 -0
- package/dist/server/_chunks/index-j2zrcp1k.js +66 -0
- package/dist/server/_chunks/index-jcsjq3d1.js +20 -0
- package/dist/server/_chunks/index-jepjvcrf.js +198 -0
- package/dist/server/_chunks/index-jks0x0a1.js +14 -0
- package/dist/server/_chunks/index-jx7bqvw1.js +57 -0
- package/dist/server/_chunks/index-k1g3epw0.js +1299 -0
- package/dist/server/_chunks/index-knp0s912.js +7 -0
- package/dist/server/_chunks/index-kq8kpzye.js +472 -0
- package/dist/server/_chunks/index-kqyy1d4f.js +50 -0
- package/dist/server/_chunks/index-kresp2n8.js +445 -0
- package/dist/server/_chunks/index-ms9v9tnx.js +31 -0
- package/dist/server/_chunks/index-n4hxpng2.js +11 -0
- package/dist/server/_chunks/index-ncnes8c6.js +17 -0
- package/dist/server/_chunks/index-nqh3xhdc.js +57 -0
- package/dist/server/_chunks/index-nyrba2kr.js +4130 -0
- package/dist/server/_chunks/index-p77b4kcx.js +296 -0
- package/dist/server/_chunks/index-pym1cezq.js +39 -0
- package/dist/server/_chunks/index-q738kkhj.js +100 -0
- package/dist/server/_chunks/index-qjj6gddn.js +54 -0
- package/dist/server/_chunks/index-qm6kmhqs.js +110 -0
- package/dist/server/_chunks/index-qn4z5s3c.js +819 -0
- package/dist/server/_chunks/index-qpwsgt3a.js +158 -0
- package/dist/server/_chunks/index-r97ptz1q.js +97 -0
- package/dist/server/_chunks/index-ras0sdab.js +26 -0
- package/dist/server/_chunks/index-rcs322t1.js +19 -0
- package/dist/server/_chunks/index-rn8dyr1f.js +126 -0
- package/dist/server/_chunks/index-rt9qq1va.js +4 -0
- package/dist/server/_chunks/index-rthrsed5.js +356 -0
- package/dist/server/_chunks/index-sctcgyvv.js +185 -0
- package/dist/server/_chunks/index-sjpckxqn.js +213 -0
- package/dist/server/_chunks/index-sq3kvz3g.js +200 -0
- package/dist/server/_chunks/index-stbk3jhn.js +31 -0
- package/dist/server/_chunks/index-sv8m6789.js +266 -0
- package/dist/server/_chunks/index-tgcakdxc.js +125 -0
- package/dist/server/_chunks/index-tgsfjmep.js +74 -0
- package/dist/server/_chunks/index-tq0pc7eg.js +154 -0
- package/dist/server/_chunks/index-tq1f96v7.js +51 -0
- package/dist/server/_chunks/index-tqn2qnnn.js +241 -0
- package/dist/server/_chunks/index-tvqkq6e6.js +128 -0
- package/dist/server/_chunks/index-v1ags1na.js +132 -0
- package/dist/server/_chunks/index-vvmmknm1.js +1431 -0
- package/dist/server/_chunks/index-vvq7rqtn.js +329 -0
- package/dist/server/_chunks/index-vz0km5qk.js +33 -0
- package/dist/server/_chunks/index-w6h8m6vp.js +138 -0
- package/dist/server/_chunks/index-web361b8.js +138 -0
- package/dist/server/_chunks/index-wpfhfbs4.js +194 -0
- package/dist/server/_chunks/index-x0y005nh.js +283 -0
- package/dist/server/_chunks/index-x3yn4ywm.js +22 -0
- package/dist/server/_chunks/index-x93hv0sc.js +271 -0
- package/dist/server/_chunks/index-xvj80c3a.js +30 -0
- package/dist/server/_chunks/index-xywjg2vc.js +100 -0
- package/dist/server/_chunks/index-y2jr2n72.js +152 -0
- package/dist/server/_chunks/index-y36a0ybw.js +57 -0
- package/dist/server/_chunks/index-ye9hmsvf.js +47 -0
- package/dist/server/_chunks/index-yhxkxghe.js +56 -0
- package/dist/server/_chunks/index-ym67zqxp.js +130 -0
- package/dist/server/_chunks/index-ytjvpbm2.js +736 -0
- package/dist/server/_chunks/index-yz54pxrh.js +960 -0
- package/dist/server/_chunks/index-z4z9zv3b.js +733 -0
- package/dist/server/_chunks/index-z84ab1w0.js +1270 -0
- package/dist/server/_chunks/index-z88qv16t.js +11 -0
- package/dist/server/_chunks/index-zqpqyg8p.js +666 -0
- package/dist/server/_chunks/loader-7yw0j98z.js +78 -0
- package/dist/server/_chunks/modules-jn8bmbn8.js +74 -0
- package/dist/server/_chunks/pipeline-yy9jhydf.js +832 -0
- package/dist/server/_chunks/production-jar9ztm3.js +44 -0
- package/dist/server/_chunks/proxy-config-j84dgksn.js +21 -0
- package/dist/server/_chunks/proxy-w1d0wmsn.js +33 -0
- package/dist/server/_chunks/router-k1reahfn.js +498 -0
- package/dist/server/_chunks/routes-2s277fc6.js +64 -0
- package/dist/server/_chunks/run-pvd8bs1t.js +696 -0
- package/dist/server/_chunks/server-mt4a994c.js +1835 -0
- package/dist/server/_chunks/tsconfig-defaults-1nb3308g.js +20 -0
- package/dist/server/_chunks/typegen-0qr0459b.js +35 -0
- package/dist/server/api/client-cache.js +14 -0
- package/dist/server/cli/index.js +378 -0
- package/dist/server/cli/start.js +137 -0
- package/dist/server/client/reference.js +16 -0
- package/dist/server/compat/next/cache.js +56 -0
- package/dist/server/compat/next/canonical-url.js +13 -0
- package/dist/server/compat/next/client-cache.js +57 -0
- package/dist/server/compat/next/client-navigation.js +232 -0
- package/dist/server/compat/next/client-only.js +1 -0
- package/dist/server/compat/next/client-script.js +178 -0
- package/dist/server/compat/next/client-server.js +34 -0
- package/dist/server/compat/next/config-headers.js +32 -0
- package/dist/server/compat/next/config-loader.js +25 -0
- package/dist/server/compat/next/config.js +10 -0
- package/dist/server/compat/next/constants.js +18 -0
- package/dist/server/compat/next/custom-server.js +10 -0
- package/dist/server/compat/next/dist/client/components/app-router-headers.js +48 -0
- package/dist/server/compat/next/dist/server/web/spec-extension/revalidate.js +27 -0
- package/dist/server/compat/next/dist/server/web/spec-extension/unstable-cache.js +25 -0
- package/dist/server/compat/next/dist/server/web/spec-extension/unstable-no-store.js +25 -0
- package/dist/server/compat/next/dynamic.js +32 -0
- package/dist/server/compat/next/error.js +112 -0
- package/dist/server/compat/next/font/cache.js +14 -0
- package/dist/server/compat/next/font/google.js +3 -0
- package/dist/server/compat/next/font/index.js +1 -0
- package/dist/server/compat/next/font/local.js +22 -0
- package/dist/server/compat/next/font/runtime-client.js +33 -0
- package/dist/server/compat/next/font/runtime.js +41 -0
- package/dist/server/compat/next/font/shared.js +22 -0
- package/dist/server/compat/next/form.js +129 -0
- package/dist/server/compat/next/head.js +10 -0
- package/dist/server/compat/next/headers.js +30 -0
- package/dist/server/compat/next/image/client.js +11 -0
- package/dist/server/compat/next/image/config.js +18 -0
- package/dist/server/compat/next/image/optimizer.js +25 -0
- package/dist/server/compat/next/image/patterns.js +12 -0
- package/dist/server/compat/next/image/props.js +16 -0
- package/dist/server/compat/next/image/shared.js +86 -0
- package/dist/server/compat/next/image/static-metadata.js +32 -0
- package/dist/server/compat/next/image/validate.js +8 -0
- package/dist/server/compat/next/image.js +59 -0
- package/dist/server/compat/next/index.js +1 -0
- package/dist/server/compat/next/legacy-image.js +78 -0
- package/dist/server/compat/next/legacy-request-apis.js +24 -0
- package/dist/server/compat/next/link-transform.js +14 -0
- package/dist/server/compat/next/link.js +14 -0
- package/dist/server/compat/next/navigation.js +190 -0
- package/dist/server/compat/next/offline.js +45 -0
- package/dist/server/compat/next/og.js +8 -0
- package/dist/server/compat/next/preferred-region.js +8 -0
- package/dist/server/compat/next/redirects.js +30 -0
- package/dist/server/compat/next/resource-hints.js +30 -0
- package/dist/server/compat/next/rewrites.js +41 -0
- package/dist/server/compat/next/root-params.js +121 -0
- package/dist/server/compat/next/route-state.js +23 -0
- package/dist/server/compat/next/router.js +103 -0
- package/dist/server/compat/next/script.js +37 -0
- package/dist/server/compat/next/server-only.js +1 -0
- package/dist/server/compat/next/server.js +131 -0
- package/dist/server/compat/next/svgr.js +14 -0
- package/dist/server/compat/next/telemetry.js +10 -0
- package/dist/server/compat/next/usage.js +13 -0
- package/dist/server/compat/next/user-agent.js +12 -0
- package/dist/server/compat/next/web-vitals.js +35 -0
- package/dist/server/compat/react/action-state.js +11 -0
- package/dist/server/compat/react/client-lite.js +83 -0
- package/dist/server/compat/react/client.js +131 -0
- package/dist/server/compat/react/compiler-runtime.js +42 -0
- package/dist/server/compat/react/dom-client.js +106 -0
- package/dist/server/compat/react/dom-react-server.js +37 -0
- package/dist/server/compat/react/dom-server.js +40 -0
- package/dist/server/compat/react/dom.js +52 -0
- package/dist/server/compat/react/hooks-extra.js +12 -0
- package/dist/server/compat/react/internals.js +14 -0
- package/dist/server/compat/react/parity.js +11 -0
- package/dist/server/compat/react/preact.js +113 -0
- package/dist/server/compat/react/react-server.js +133 -0
- package/dist/server/compat/react/router-shim.js +8 -0
- package/dist/server/compat/react/server-component-use.js +14 -0
- package/dist/server/compat/react/server-inserted-html.js +14 -0
- package/dist/server/compat/react/server.js +194 -0
- package/dist/server/compat/react/style-values.js +10 -0
- package/dist/server/compat/react/use.js +10 -0
- package/dist/server/compat/react/view-transition.js +12 -0
- package/dist/server/generation.json +1 -0
- package/package.json +4 -1
- package/src/api/dynamic.tsx +2 -0
- package/src/api/server.ts +24 -6
- package/src/cli/adapters/vercel-warm.ts +315 -61
- package/src/cli/adapters/vercel.ts +348 -71
- package/src/cli/build.ts +58 -33
- package/src/cli/index.ts +23 -10
- package/src/cli/serve/entry.ts +21 -159
- package/src/cli/serve/immutable.ts +31 -0
- package/src/cli/serve/pipeline.ts +82 -84
- package/src/cli/start.ts +3 -1
- package/src/client/chunk-fold.ts +19 -6
- package/src/client/react-tier.ts +3 -2
- package/src/client/reference-stub.ts +21 -2
- package/src/compat/actions/client-plugin.ts +4 -2
- package/src/compat/actions/config.ts +6 -5
- package/src/compat/actions/extensions.ts +2 -3
- package/src/compat/aliases.ts +8 -1
- package/src/compat/bundler/config.ts +88 -0
- package/src/compat/bundler/optimize-package-imports.ts +86 -26
- package/src/compat/bundler/relay-transform.ts +15 -3
- package/src/compat/cache-control.ts +16 -8
- package/src/compat/css/modules.ts +18 -5
- package/src/compat/lifecycle/error-funnel.ts +1 -1
- package/src/compat/lifecycle/instrumentation.ts +117 -24
- package/src/compat/lifecycle/testmode.ts +3 -2
- package/src/compat/next/config-loader.ts +137 -13
- package/src/compat/next/font/runtime.ts +22 -2
- package/src/compat/next/og.ts +3 -3
- package/src/compat/next/usage.ts +3 -2
- package/src/compat/pages/api.ts +83 -14
- package/src/compat/pages/router.ts +30 -14
- package/src/compat/register/bundler.ts +3 -1
- package/src/compat/register/middleware.ts +1 -1
- package/src/compat/register/otel.ts +5 -9
- package/src/compat/register/render.ts +3 -1
- package/src/compat/register/use-cache.ts +3 -1
- package/src/compat/release.ts +46 -0
- package/src/compat/segment/serve.ts +1 -1
- package/src/compat/validation/validate.ts +10 -7
- package/src/config.ts +51 -7
- package/src/css/assets.ts +213 -0
- package/src/css/build.ts +174 -238
- package/src/dev/server.ts +27 -8
- package/src/extensions.ts +4 -0
- package/src/render/hooks.ts +13 -0
- package/src/render/renderer.ts +52 -32
- package/src/request/context.ts +9 -0
- package/src/resolve/dynamic.ts +3 -1
- package/src/resolve/imports.ts +12 -52
- package/src/resolve/package-json.ts +56 -0
- package/src/resolve/scan-facts.ts +65 -0
- package/src/routing/href.ts +10 -3
- package/src/routing/match.ts +287 -0
- package/src/routing/metadata-files.ts +19 -5
- package/src/routing/proxy-config.ts +137 -0
- package/src/routing/proxy.ts +35 -134
- package/src/routing/routes.ts +22 -281
- package/src/runtime/fingerprint.ts +23 -8
- package/src/runtime/load.ts +170 -0
- package/src/runtime/loader.ts +215 -43
- package/src/runtime/module-cache.ts +13 -0
- package/src/runtime/modules.ts +370 -81
- package/src/runtime/prebundle.ts +81 -0
- package/src/runtime/production.ts +391 -0
- package/src/runtime/release-graph.ts +334 -0
- package/src/runtime/vendor-build.ts +724 -13
- package/src/runtime/vendor.ts +16 -3
- package/src/types.ts +2 -0
- package/src/utils/fs.ts +89 -3
|
@@ -0,0 +1,483 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import { join as __pnextJoin } from "node:path";
|
|
3
|
+
const __PNEXT_PACKAGE_ROOT__ = __pnextJoin(import.meta.dirname, "../../..");
|
|
4
|
+
import {
|
|
5
|
+
isReleaseCompile
|
|
6
|
+
} from "./index-3xbr4eyv.js";
|
|
7
|
+
import {
|
|
8
|
+
actionId,
|
|
9
|
+
moduleActionExports,
|
|
10
|
+
moduleLevelUseCache,
|
|
11
|
+
moduleLevelUseServer
|
|
12
|
+
} from "./index-6q7zvrap.js";
|
|
13
|
+
import {
|
|
14
|
+
readText,
|
|
15
|
+
toPosixPath
|
|
16
|
+
} from "./index-20ppawv7.js";
|
|
17
|
+
import {
|
|
18
|
+
frameworkRuntimeAliasEntries,
|
|
19
|
+
pnextAliases
|
|
20
|
+
} from "./index-x93hv0sc.js";
|
|
21
|
+
import {
|
|
22
|
+
escapeRegex,
|
|
23
|
+
isIdentifier,
|
|
24
|
+
uniqueIdentifier
|
|
25
|
+
} from "./index-qjj6gddn.js";
|
|
26
|
+
import {
|
|
27
|
+
__require
|
|
28
|
+
} from "./index-rt9qq1va.js";
|
|
29
|
+
|
|
30
|
+
// src/compat/aliases.ts
|
|
31
|
+
import path2 from "path";
|
|
32
|
+
import { createRequire } from "module";
|
|
33
|
+
|
|
34
|
+
// src/compat/actions/client-plugin.ts
|
|
35
|
+
import path from "path";
|
|
36
|
+
import { realpathSync } from "fs";
|
|
37
|
+
|
|
38
|
+
// src/compat/actions/client-stub.ts
|
|
39
|
+
function clientStubSource(module) {
|
|
40
|
+
const lines = [];
|
|
41
|
+
lines.push(`// Generated pnext server-action client stub.`);
|
|
42
|
+
lines.push(`// Module: ${sanitizeComment(module.modulePath)}`);
|
|
43
|
+
lines.push(RUNTIME);
|
|
44
|
+
for (const name of module.exports) {
|
|
45
|
+
const id = module.actionIds[name];
|
|
46
|
+
if (!id)
|
|
47
|
+
continue;
|
|
48
|
+
const decl = name === "default" ? "export default" : `export const ${name} =`;
|
|
49
|
+
lines.push(`${decl} __pnextAction(${JSON.stringify(id)});`);
|
|
50
|
+
}
|
|
51
|
+
return lines.join(`
|
|
52
|
+
`) + `
|
|
53
|
+
`;
|
|
54
|
+
}
|
|
55
|
+
var RUNTIME = `
|
|
56
|
+
function __pnextAction(id) {
|
|
57
|
+
const action = async function (...args) {
|
|
58
|
+
const runtime = (process.browser || typeof window !== 'undefined') ? window.__PNEXT_ACTIONS__ : undefined;
|
|
59
|
+
if (runtime) {
|
|
60
|
+
return runtime.call(id, args);
|
|
61
|
+
}
|
|
62
|
+
// Called on the SERVER: a client-imported 'use server' function invoked during a server
|
|
63
|
+
// render/action (a bound action a client page's useActionState registered, dispatched in the no-JS
|
|
64
|
+
// progressive path). Route it through the endpoint's server-side dispatcher, which resolves the id
|
|
65
|
+
// to the real compiled action and runs it in the active request scope, instead of throwing as if
|
|
66
|
+
// the browser runtime were missing.
|
|
67
|
+
const server =
|
|
68
|
+
typeof globalThis !== 'undefined' ? globalThis.__PNEXT_SERVER_ACTIONS__ : undefined;
|
|
69
|
+
if (server) {
|
|
70
|
+
return server.call(id, args);
|
|
71
|
+
}
|
|
72
|
+
throw new Error('pnext action runtime is not installed (is Next compat enabled?)');
|
|
73
|
+
};
|
|
74
|
+
action.$$pnextActionId = id;
|
|
75
|
+
return action;
|
|
76
|
+
}
|
|
77
|
+
`;
|
|
78
|
+
function sanitizeComment(value) {
|
|
79
|
+
return value.replace(/\*\//g, "*\\/").replace(/[\r\n]/g, " ");
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// src/compat/actions/client-plugin.ts
|
|
83
|
+
var clientActionState;
|
|
84
|
+
function setClientActionModules(root, files) {
|
|
85
|
+
const originals = new Set;
|
|
86
|
+
const canonicalFiles = new Set;
|
|
87
|
+
for (const file of files) {
|
|
88
|
+
originals.add(path.resolve(file));
|
|
89
|
+
canonicalFiles.add(canonical(file));
|
|
90
|
+
}
|
|
91
|
+
clientActionState = originals.size > 0 ? { root, files: originals, canonicalFiles } : undefined;
|
|
92
|
+
}
|
|
93
|
+
function canonical(file) {
|
|
94
|
+
const abs = path.resolve(file);
|
|
95
|
+
try {
|
|
96
|
+
return realpathSync.native(abs);
|
|
97
|
+
} catch {
|
|
98
|
+
return abs;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
function clearClientActionModules() {
|
|
102
|
+
clientActionState = undefined;
|
|
103
|
+
}
|
|
104
|
+
function hasClientActionModules() {
|
|
105
|
+
return clientActionState !== undefined && clientActionState.files.size > 0;
|
|
106
|
+
}
|
|
107
|
+
function isActionModule(file) {
|
|
108
|
+
if (!clientActionState)
|
|
109
|
+
return false;
|
|
110
|
+
return clientActionState.files.has(path.resolve(file)) || clientActionState.canonicalFiles.has(canonical(file));
|
|
111
|
+
}
|
|
112
|
+
function isClientActionModule(file) {
|
|
113
|
+
return isActionModule(file);
|
|
114
|
+
}
|
|
115
|
+
function clientActionModulesRoot() {
|
|
116
|
+
return clientActionState?.root;
|
|
117
|
+
}
|
|
118
|
+
function clientActionModuleFiles() {
|
|
119
|
+
return clientActionState ? [...clientActionState.files] : [];
|
|
120
|
+
}
|
|
121
|
+
function actionStubSourceFor(file, root) {
|
|
122
|
+
return stubSourceFor(file, root ?? clientActionState?.root);
|
|
123
|
+
}
|
|
124
|
+
function actionClientStubPlugin() {
|
|
125
|
+
const paths = clientActionState ? [...clientActionState.files, ...clientActionState.canonicalFiles] : [];
|
|
126
|
+
const filter = new RegExp(`^(?:${[...new Set(paths)].map(escapeRegex).join("|")})$`);
|
|
127
|
+
return {
|
|
128
|
+
name: "pnext-action-client-stub",
|
|
129
|
+
setup(build) {
|
|
130
|
+
if (paths.length === 0)
|
|
131
|
+
return;
|
|
132
|
+
build.onLoad({ filter, namespace: "file" }, async (args) => {
|
|
133
|
+
if (!isActionModule(args.path))
|
|
134
|
+
return;
|
|
135
|
+
return {
|
|
136
|
+
contents: await stubSourceFor(args.path, clientActionState?.root),
|
|
137
|
+
loader: "js"
|
|
138
|
+
};
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
async function stubSourceFor(file, root) {
|
|
144
|
+
const source = await readText(file);
|
|
145
|
+
return stubSourceFromSource(file, source, root);
|
|
146
|
+
}
|
|
147
|
+
function stubSourceFromSource(file, source, root) {
|
|
148
|
+
if (!moduleLevelUseServer(source) && !moduleLevelUseCache(source))
|
|
149
|
+
return "export {};";
|
|
150
|
+
const exports = moduleActionExports(source);
|
|
151
|
+
const actionIds = {};
|
|
152
|
+
for (const name of exports)
|
|
153
|
+
actionIds[name] = canonicalActionId(file, name, root);
|
|
154
|
+
const modulePath = root ? toPosixPath(path.relative(root, file)) : file;
|
|
155
|
+
return clientStubSource({ modulePath, exports, actionIds });
|
|
156
|
+
}
|
|
157
|
+
async function loadClientActionSource(file, root) {
|
|
158
|
+
const source = await readText(file);
|
|
159
|
+
if (!moduleLevelUseServer(source) && !moduleLevelUseCache(source))
|
|
160
|
+
return { source };
|
|
161
|
+
return { source, stubSource: stubSourceFromSource(file, source, root) };
|
|
162
|
+
}
|
|
163
|
+
function canonicalActionId(file, exportName, root) {
|
|
164
|
+
return actionId(canonical(file), exportName, root ? canonical(root) : undefined);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// src/compat/ppr/root-params-transform.ts
|
|
168
|
+
var ROOT_PARAMS_SPECIFIER = /['"]next\/root-params['"]/;
|
|
169
|
+
var IMPORT_RE = /^[ \t]*import\s+\{([^}]*)\}\s+from\s+['"]next\/root-params['"]\s*;?[ \t]*(?:\r?\n)?/gm;
|
|
170
|
+
function parseBindings(clause) {
|
|
171
|
+
return clause.split(",").map((part) => part.trim()).filter(Boolean).flatMap((part) => {
|
|
172
|
+
if (part.startsWith("type "))
|
|
173
|
+
return [];
|
|
174
|
+
const [importedRaw, localRaw] = part.split(/\s+as\s+/);
|
|
175
|
+
const imported = importedRaw?.trim();
|
|
176
|
+
const local = (localRaw ?? importedRaw)?.trim();
|
|
177
|
+
if (!imported || !local || !isIdentifier(imported) || !isIdentifier(local))
|
|
178
|
+
return [];
|
|
179
|
+
return [{ imported, local }];
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
function rewriteRootParamsSource(source) {
|
|
183
|
+
if (!ROOT_PARAMS_SPECIFIER.test(source))
|
|
184
|
+
return source;
|
|
185
|
+
const proxyName = uniqueIdentifier(source, "__pnextRootParams");
|
|
186
|
+
const declarations = [];
|
|
187
|
+
let importedProxy = false;
|
|
188
|
+
const rewritten = source.replace(IMPORT_RE, (_statement, clause) => {
|
|
189
|
+
const bindings = parseBindings(clause);
|
|
190
|
+
if (bindings.length === 0)
|
|
191
|
+
return "";
|
|
192
|
+
importedProxy = true;
|
|
193
|
+
for (const { imported, local } of bindings) {
|
|
194
|
+
declarations.push(`const ${local} = ${proxyName}[${JSON.stringify(imported)}];`);
|
|
195
|
+
}
|
|
196
|
+
return "";
|
|
197
|
+
});
|
|
198
|
+
if (!importedProxy)
|
|
199
|
+
return source;
|
|
200
|
+
return [
|
|
201
|
+
`import ${proxyName} from ${JSON.stringify("next/root-params")};`,
|
|
202
|
+
...declarations,
|
|
203
|
+
rewritten
|
|
204
|
+
].join(`
|
|
205
|
+
`);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
// src/compat/aliases.ts
|
|
209
|
+
function reactCompatEnabled(config) {
|
|
210
|
+
return Boolean(config.compat?.next || config.compat?.react || reactCompilerOptions(config));
|
|
211
|
+
}
|
|
212
|
+
function reactCompilerOptions(config) {
|
|
213
|
+
if (!config.compat?.reactCompiler)
|
|
214
|
+
return;
|
|
215
|
+
return { target: "18" };
|
|
216
|
+
}
|
|
217
|
+
function nextCompatEnabled(config) {
|
|
218
|
+
return Boolean(config.compat?.next);
|
|
219
|
+
}
|
|
220
|
+
var SHIMMED_NEXT_DIST_PATHS = [
|
|
221
|
+
"next/dist/client/components/app-router-headers",
|
|
222
|
+
"next/dist/server/web/spec-extension/unstable-cache",
|
|
223
|
+
"next/dist/server/web/spec-extension/unstable-no-store",
|
|
224
|
+
"next/dist/server/web/spec-extension/revalidate",
|
|
225
|
+
"next/dist/server/app-render/work-unit-async-storage.external"
|
|
226
|
+
];
|
|
227
|
+
function missingCompatImportError(config, specifier) {
|
|
228
|
+
if (/^next(\/|$)/.test(specifier)) {
|
|
229
|
+
if (!nextCompatEnabled(config)) {
|
|
230
|
+
return `'${specifier}' requires Next compatibility. Enable compat.next in pnext.config.ts.`;
|
|
231
|
+
}
|
|
232
|
+
if (specifier.startsWith("next/dist/")) {
|
|
233
|
+
const bare = specifier.replace(/\.js$/, "");
|
|
234
|
+
if (!SHIMMED_NEXT_DIST_PATHS.includes(bare)) {
|
|
235
|
+
return `'${specifier}' is not a supported import: next/dist internals are not part of the ` + `public surface pnext shims. Only these next/dist/* paths are shimmed:
|
|
236
|
+
` + SHIMMED_NEXT_DIST_PATHS.map((path3) => ` - ${path3}`).join(`
|
|
237
|
+
`) + `
|
|
238
|
+
See https://pnext.dev/docs/compat ("Smaller surfaces") and report the library that needs a new shim.`;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
if (/^react(-dom)?(\/|$)/.test(specifier) && !reactCompatEnabled(config)) {
|
|
244
|
+
return `'${specifier}' requires React compatibility. Enable compat.react (or compat.next) in pnext.config.ts.`;
|
|
245
|
+
}
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
function compatAliases(config, target) {
|
|
249
|
+
return {
|
|
250
|
+
...frameworkRuntimeAliasEntries(),
|
|
251
|
+
...pnextAliases(target),
|
|
252
|
+
...reactCompatAliases(config, target),
|
|
253
|
+
...nextCompatAliases(config, target)
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
function reactServerLayerAliases(config) {
|
|
257
|
+
if (!reactCompatEnabled(config))
|
|
258
|
+
return {};
|
|
259
|
+
const reactRoot = path2.resolve(__PNEXT_PACKAGE_ROOT__ + "/src/compat", "react");
|
|
260
|
+
return {
|
|
261
|
+
react: path2.join(reactRoot, "react-server.ts"),
|
|
262
|
+
"react-dom": path2.join(reactRoot, "dom-react-server.ts")
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
function reactCompatAliases(config, target) {
|
|
266
|
+
if (!reactCompatEnabled(config))
|
|
267
|
+
return {};
|
|
268
|
+
const reactRoot = path2.resolve(__PNEXT_PACKAGE_ROOT__ + "/src/compat", "react");
|
|
269
|
+
const runtime = frameworkRuntimeAliasEntries();
|
|
270
|
+
return {
|
|
271
|
+
react: path2.join(reactRoot, target === "client" ? "client.ts" : "server.ts"),
|
|
272
|
+
"react-dom": path2.join(reactRoot, "dom.ts"),
|
|
273
|
+
"react-dom/client": runtime["preact/compat/client"],
|
|
274
|
+
"react-dom/server": path2.join(reactRoot, "dom-server.ts"),
|
|
275
|
+
"react-dom/server.edge": path2.join(reactRoot, "dom-server.ts"),
|
|
276
|
+
"react-dom/server.browser": path2.join(reactRoot, "dom-server.ts"),
|
|
277
|
+
"react/jsx-runtime": runtime["preact/jsx-runtime"],
|
|
278
|
+
"react/jsx-dev-runtime": runtime["preact/jsx-dev-runtime"],
|
|
279
|
+
"react/compiler-runtime": path2.join(reactRoot, "compiler-runtime.ts"),
|
|
280
|
+
"react-compiler-runtime": path2.join(reactRoot, "compiler-runtime.ts")
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
function nextCompatAliases(config, target) {
|
|
284
|
+
if (!nextCompatEnabled(config))
|
|
285
|
+
return {};
|
|
286
|
+
return nextCompatAliasEntries(target);
|
|
287
|
+
}
|
|
288
|
+
function nextCompatAliasEntries(target) {
|
|
289
|
+
const nextRoot = path2.resolve(__PNEXT_PACKAGE_ROOT__ + "/src/compat", "next");
|
|
290
|
+
return withJsExtensionAliases({
|
|
291
|
+
next: path2.join(nextRoot, "index.ts"),
|
|
292
|
+
"next/cache": path2.join(nextRoot, target === "client" ? "client-cache.ts" : "cache.ts"),
|
|
293
|
+
"next/config": path2.join(nextRoot, "config.ts"),
|
|
294
|
+
"next/constants": path2.join(nextRoot, "constants.cjs"),
|
|
295
|
+
"next/dynamic": path2.join(nextRoot, "dynamic.tsx"),
|
|
296
|
+
"next/error": path2.join(nextRoot, "error.tsx"),
|
|
297
|
+
"next/font": path2.join(nextRoot, "font", "index.ts"),
|
|
298
|
+
"next/font/google": path2.join(nextRoot, "font", "google.ts"),
|
|
299
|
+
"next/font/local": path2.join(nextRoot, "font", "local.ts"),
|
|
300
|
+
"next/form": path2.join(nextRoot, "form.tsx"),
|
|
301
|
+
"next/head": path2.join(nextRoot, "head.tsx"),
|
|
302
|
+
"next/headers": path2.join(nextRoot, "headers.ts"),
|
|
303
|
+
"next/image": path2.join(nextRoot, "image.tsx"),
|
|
304
|
+
"next/legacy/image": path2.join(nextRoot, "legacy-image.tsx"),
|
|
305
|
+
"next/link": path2.join(nextRoot, "link.tsx"),
|
|
306
|
+
"next/navigation": path2.join(nextRoot, target === "client" ? "client-navigation.ts" : "navigation.ts"),
|
|
307
|
+
"next/offline": path2.join(nextRoot, "offline.ts"),
|
|
308
|
+
"next/og": path2.join(nextRoot, "og.ts"),
|
|
309
|
+
"@vercel/og": path2.join(nextRoot, "og.ts"),
|
|
310
|
+
"next/root-params": path2.join(nextRoot, "root-params.ts"),
|
|
311
|
+
"next/router": path2.join(nextRoot, "router.ts"),
|
|
312
|
+
"next/script": path2.join(nextRoot, target === "client" ? "client-script.tsx" : "script.tsx"),
|
|
313
|
+
"next/web-vitals": path2.join(nextRoot, "web-vitals.ts"),
|
|
314
|
+
"next/server": path2.join(nextRoot, target === "client" ? "client-server.ts" : "server.ts"),
|
|
315
|
+
...target === "server" ? { "server-only": path2.join(nextRoot, "server-only.ts") } : {},
|
|
316
|
+
"client-only": path2.join(nextRoot, "client-only.ts"),
|
|
317
|
+
"styled-jsx": path2.join(nextRoot, "..", "css", "styled-jsx-runtime.ts"),
|
|
318
|
+
"next/dist/client/components/app-router-headers": path2.join(nextRoot, "dist", "client", "components", "app-router-headers.ts"),
|
|
319
|
+
"next/dist/server/web/spec-extension/unstable-cache": path2.join(nextRoot, "dist", "server", "web", "spec-extension", "unstable-cache.ts"),
|
|
320
|
+
"next/dist/server/web/spec-extension/unstable-no-store": path2.join(nextRoot, "dist", "server", "web", "spec-extension", "unstable-no-store.ts"),
|
|
321
|
+
"next/dist/server/web/spec-extension/revalidate": path2.join(nextRoot, "dist", "server", "web", "spec-extension", "revalidate.ts"),
|
|
322
|
+
...target === "server" ? {
|
|
323
|
+
"next/dist/server/app-render/work-unit-async-storage.external": path2.join(nextRoot, "dist", "server", "app-render", "work-unit-async-storage.external.cjs")
|
|
324
|
+
} : {}
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
function withJsExtensionAliases(aliases) {
|
|
328
|
+
const entries = { ...aliases };
|
|
329
|
+
for (const [specifier, target] of Object.entries(aliases)) {
|
|
330
|
+
if (specifier !== "next")
|
|
331
|
+
entries[`${specifier}.js`] = target;
|
|
332
|
+
}
|
|
333
|
+
return entries;
|
|
334
|
+
}
|
|
335
|
+
function compatAliasPlugin(config) {
|
|
336
|
+
const aliases = compatAliases(config, "client");
|
|
337
|
+
const specifiers = Object.keys(aliases);
|
|
338
|
+
return {
|
|
339
|
+
name: "pnext-compat-alias",
|
|
340
|
+
setup(build) {
|
|
341
|
+
if (nextCompatEnabled(config) && hasClientActionModules()) {
|
|
342
|
+
actionClientStubPlugin().setup(build);
|
|
343
|
+
}
|
|
344
|
+
build.onResolve({ filter: /^(?:react(?:-dom)?|next)(?:\/|$)/ }, (args) => {
|
|
345
|
+
if (aliases[args.path])
|
|
346
|
+
return;
|
|
347
|
+
const message = missingCompatImportError(config, args.path);
|
|
348
|
+
return message ? { errors: [{ text: message }] } : undefined;
|
|
349
|
+
});
|
|
350
|
+
if (specifiers.length === 0)
|
|
351
|
+
return;
|
|
352
|
+
build.onResolve({ filter: new RegExp(`^(${specifiers.map(escapeRegex).join("|")})$`) }, async (args) => {
|
|
353
|
+
const target = aliases[args.path];
|
|
354
|
+
if (!target)
|
|
355
|
+
return;
|
|
356
|
+
if (path2.isAbsolute(target))
|
|
357
|
+
return { path: target };
|
|
358
|
+
return build.resolve(target, {
|
|
359
|
+
kind: args.kind,
|
|
360
|
+
importer: args.importer,
|
|
361
|
+
namespace: args.namespace,
|
|
362
|
+
resolveDir: args.resolveDir
|
|
363
|
+
});
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
var compatSuspense;
|
|
369
|
+
async function ensureCompatSuspense(config) {
|
|
370
|
+
if (compatSuspense !== undefined || !reactCompatEnabled(config))
|
|
371
|
+
return;
|
|
372
|
+
compatSuspense = (await import("preact/compat")).Suspense;
|
|
373
|
+
}
|
|
374
|
+
function compatSuspenseType() {
|
|
375
|
+
return compatSuspense;
|
|
376
|
+
}
|
|
377
|
+
var fontRuntimePaths = {
|
|
378
|
+
server: path2.join(__PNEXT_PACKAGE_ROOT__ + "/src/compat", "next", "font", "runtime.ts"),
|
|
379
|
+
client: path2.join(__PNEXT_PACKAGE_ROOT__ + "/src/compat", "next", "font", "runtime-client.ts")
|
|
380
|
+
};
|
|
381
|
+
function rewriteNextFontSource(source, file, target = "server", root) {
|
|
382
|
+
if (!source.includes("next/font") && !source.includes("next/root-params"))
|
|
383
|
+
return source;
|
|
384
|
+
source = rewriteRootParamsSource(source);
|
|
385
|
+
const runtimePath = fontRuntimePaths[target];
|
|
386
|
+
let next = rewriteNextGoogleFontImports(source, runtimePath);
|
|
387
|
+
const localFontNames = nextLocalFontImportNames(next);
|
|
388
|
+
if (localFontNames.size === 0)
|
|
389
|
+
return next;
|
|
390
|
+
const absoluteCaller = localFontCallerFile(file, root);
|
|
391
|
+
const callerFile = isReleaseCompile() && root && path2.isAbsolute(absoluteCaller) ? toPosixPath(path2.relative(root, absoluteCaller)) : absoluteCaller;
|
|
392
|
+
for (const name of localFontNames) {
|
|
393
|
+
next = next.replace(new RegExp(`(?<![.$\\w])${escapeRegex(name)}\\s*\\(`, "g"), `${name}.withFile(${JSON.stringify(callerFile)})(`);
|
|
394
|
+
}
|
|
395
|
+
for (const name of localFontNames) {
|
|
396
|
+
next = next.replace(new RegExp(`((?:export\\s+)?(?:const|let|var)\\s+)([A-Za-z_$][\\w$]*)(\\s*=\\s*)${escapeRegex(name)}\\.withFile\\(([^)]*)\\)\\(`, "g"), (_statement, declaration, binding, equals, caller) => `${declaration}${binding}${equals}${name}.withFile(${caller}, ${JSON.stringify(binding)})(`);
|
|
397
|
+
}
|
|
398
|
+
next = next.replace(/^[ \t]*import\s+([A-Za-z_$][\w$]*)\s+from\s+(['"])([^'"]+)\2\s*;?[ \t]*$/gm, (statement, name, _quote, specifier) => {
|
|
399
|
+
if (!isNextLocalFontSpecifier(specifier))
|
|
400
|
+
return statement;
|
|
401
|
+
return `import { localFont as ${name} } from ${JSON.stringify(runtimePath)};`;
|
|
402
|
+
});
|
|
403
|
+
return next;
|
|
404
|
+
}
|
|
405
|
+
function rewriteNextGoogleFontImports(source, runtimePath) {
|
|
406
|
+
const statements = [];
|
|
407
|
+
const helperName = uniqueIdentifier(source, "__pnextGoogleFont");
|
|
408
|
+
const namespaceHelperName = uniqueIdentifier(source, "__pnextGoogleFonts", helperName);
|
|
409
|
+
const rewritten = source.replace(/^[ \t]*import\s+(?!type\b)((?:[^\n;]|\n(?![ \t]*(?:import|export)\b))*?)\s+from\s+['"]next\/font\/google['"]\s*;?[ \t]*(?:\r?\n)?/gm, (_statement, clause) => {
|
|
410
|
+
const bindings = nextGoogleFontBindings(clause);
|
|
411
|
+
if (bindings.length === 0)
|
|
412
|
+
return "";
|
|
413
|
+
statements.push(...bindings.map((binding) => googleFontBindingSource(binding, helperName, namespaceHelperName)));
|
|
414
|
+
return "";
|
|
415
|
+
});
|
|
416
|
+
if (statements.length === 0)
|
|
417
|
+
return source;
|
|
418
|
+
return [
|
|
419
|
+
`import { googleFont as ${helperName} } from ${JSON.stringify(runtimePath)};`,
|
|
420
|
+
`const ${namespaceHelperName} = new Proxy({}, { get: (_target, key) => typeof key === 'string' ? ${helperName}(key.replace(/_/g, ' ')) : undefined });`,
|
|
421
|
+
...statements,
|
|
422
|
+
rewritten
|
|
423
|
+
].join(`
|
|
424
|
+
`);
|
|
425
|
+
}
|
|
426
|
+
function nextGoogleFontBindings(clause) {
|
|
427
|
+
const trimmed = clause.trim();
|
|
428
|
+
const namespace = /^\*\s+as\s+([A-Za-z_$][\w$]*)$/.exec(trimmed)?.[1];
|
|
429
|
+
if (namespace)
|
|
430
|
+
return [{ imported: namespace, local: namespace, namespace: true }];
|
|
431
|
+
const named = /\{([\s\S]*)\}/.exec(trimmed)?.[1];
|
|
432
|
+
if (!named)
|
|
433
|
+
return [];
|
|
434
|
+
return named.split(",").map((part) => part.trim()).filter(Boolean).flatMap((part) => {
|
|
435
|
+
if (part.startsWith("type "))
|
|
436
|
+
return [];
|
|
437
|
+
const [importedRaw, localRaw] = part.split(/\s+as\s+/);
|
|
438
|
+
const imported = importedRaw?.trim();
|
|
439
|
+
const local = (localRaw ?? importedRaw)?.trim();
|
|
440
|
+
if (!imported || !local || !isIdentifier(imported) || !isIdentifier(local))
|
|
441
|
+
return [];
|
|
442
|
+
return [{ imported, local }];
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
function googleFontBindingSource(binding, helperName, namespaceHelperName) {
|
|
446
|
+
if (binding.namespace)
|
|
447
|
+
return `const ${binding.local} = ${namespaceHelperName};`;
|
|
448
|
+
return `const ${binding.local} = ${helperName}(${JSON.stringify(googleFontFamily(binding.imported))});`;
|
|
449
|
+
}
|
|
450
|
+
function googleFontFamily(exportName) {
|
|
451
|
+
return exportName.replace(/_/g, " ");
|
|
452
|
+
}
|
|
453
|
+
function nextLocalFontImportNames(source) {
|
|
454
|
+
const names = new Set;
|
|
455
|
+
const pattern = /\bimport\s+([A-Za-z_$][\w$]*)\s+from\s+(['"])([^'"]+)\2/g;
|
|
456
|
+
let match;
|
|
457
|
+
while (match = pattern.exec(source)) {
|
|
458
|
+
if (match[1] && match[3] && isNextLocalFontSpecifier(match[3]))
|
|
459
|
+
names.add(match[1]);
|
|
460
|
+
}
|
|
461
|
+
return names;
|
|
462
|
+
}
|
|
463
|
+
function isNextLocalFontSpecifier(specifier) {
|
|
464
|
+
if (specifier === "next/font/local" || specifier === "next/font/local.js")
|
|
465
|
+
return true;
|
|
466
|
+
const normalized = specifier.replace(/^file:\/\//, "").replace(/\\/g, "/");
|
|
467
|
+
return /\/compat\/next\/font\/local\.[jt]s$/.test(normalized);
|
|
468
|
+
}
|
|
469
|
+
function localFontCallerFile(file, root) {
|
|
470
|
+
if (path2.isAbsolute(file))
|
|
471
|
+
return file;
|
|
472
|
+
if (file.startsWith("."))
|
|
473
|
+
return path2.resolve(root ?? process.cwd(), file);
|
|
474
|
+
if (!root)
|
|
475
|
+
return file;
|
|
476
|
+
try {
|
|
477
|
+
return createRequire(path2.join(root, "pnext-resolve.cjs")).resolve(file);
|
|
478
|
+
} catch {
|
|
479
|
+
return file;
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
export { setClientActionModules, canonical, clearClientActionModules, isClientActionModule, clientActionModulesRoot, clientActionModuleFiles, actionStubSourceFor, actionClientStubPlugin, loadClientActionSource, canonicalActionId, reactCompatEnabled, reactCompilerOptions, nextCompatEnabled, SHIMMED_NEXT_DIST_PATHS, missingCompatImportError, compatAliases, reactServerLayerAliases, reactCompatAliases, nextCompatAliases, nextCompatAliasEntries, compatAliasPlugin, ensureCompatSuspense, compatSuspenseType, rewriteNextFontSource };
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import {
|
|
3
|
+
compileSource,
|
|
4
|
+
evaluateConditions,
|
|
5
|
+
loadNextConfig,
|
|
6
|
+
loadResolvedNextConfig,
|
|
7
|
+
parseConditions,
|
|
8
|
+
substitute
|
|
9
|
+
} from "./index-z84ab1w0.js";
|
|
10
|
+
|
|
11
|
+
// src/compat/next/config-headers.ts
|
|
12
|
+
async function loadCompatHeaders(root) {
|
|
13
|
+
let config = await loadResolvedNextConfig(root);
|
|
14
|
+
if (typeof config?.headers !== "function")
|
|
15
|
+
config = await loadNextConfig(root);
|
|
16
|
+
const producer = config?.headers;
|
|
17
|
+
if (typeof producer !== "function")
|
|
18
|
+
return [];
|
|
19
|
+
let value;
|
|
20
|
+
try {
|
|
21
|
+
value = await producer();
|
|
22
|
+
} catch {
|
|
23
|
+
return [];
|
|
24
|
+
}
|
|
25
|
+
if (!Array.isArray(value))
|
|
26
|
+
return [];
|
|
27
|
+
const rules = [];
|
|
28
|
+
for (const entry of value) {
|
|
29
|
+
if (!entry?.source || !Array.isArray(entry.headers))
|
|
30
|
+
continue;
|
|
31
|
+
const headers = parseHeaderPairs(entry.headers);
|
|
32
|
+
if (headers.length === 0)
|
|
33
|
+
continue;
|
|
34
|
+
const has = parseConditions(entry.has);
|
|
35
|
+
const missing = parseConditions(entry.missing);
|
|
36
|
+
if (has === null || missing === null)
|
|
37
|
+
continue;
|
|
38
|
+
const compiled = compileSource(entry.source);
|
|
39
|
+
if (!compiled)
|
|
40
|
+
continue;
|
|
41
|
+
rules.push({
|
|
42
|
+
...compiled,
|
|
43
|
+
headers,
|
|
44
|
+
has,
|
|
45
|
+
missing,
|
|
46
|
+
outsideBasePath: entry.basePath === false
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
return rules;
|
|
50
|
+
}
|
|
51
|
+
function parseHeaderPairs(value) {
|
|
52
|
+
const pairs = [];
|
|
53
|
+
for (const raw of value) {
|
|
54
|
+
if (!raw || typeof raw !== "object")
|
|
55
|
+
continue;
|
|
56
|
+
const { key, value: headerValue } = raw;
|
|
57
|
+
if (typeof key !== "string" || typeof headerValue !== "string")
|
|
58
|
+
continue;
|
|
59
|
+
pairs.push({ key, value: headerValue });
|
|
60
|
+
}
|
|
61
|
+
return pairs;
|
|
62
|
+
}
|
|
63
|
+
function resolveCompatHeaders(rules, pathname, ctx) {
|
|
64
|
+
const context = ctx ?? {
|
|
65
|
+
host: "",
|
|
66
|
+
headers: new Headers,
|
|
67
|
+
cookies: {},
|
|
68
|
+
query: new URLSearchParams
|
|
69
|
+
};
|
|
70
|
+
const resolved = [];
|
|
71
|
+
for (const rule of rules) {
|
|
72
|
+
const match = rule.regex.exec(pathname);
|
|
73
|
+
if (!match)
|
|
74
|
+
continue;
|
|
75
|
+
const params = {};
|
|
76
|
+
rule.paramNames.forEach((name, index) => {
|
|
77
|
+
params[name] = match[index + 1] ?? "";
|
|
78
|
+
});
|
|
79
|
+
const conditionParams = evaluateConditions(rule, context);
|
|
80
|
+
if (conditionParams === null)
|
|
81
|
+
continue;
|
|
82
|
+
Object.assign(params, conditionParams);
|
|
83
|
+
const hasParams = Object.keys(params).length > 0;
|
|
84
|
+
for (const pair of rule.headers) {
|
|
85
|
+
resolved.push(hasParams ? {
|
|
86
|
+
key: substitute(pair.key, params).pathname,
|
|
87
|
+
value: substitute(pair.value, params).pathname
|
|
88
|
+
} : pair);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return resolved;
|
|
92
|
+
}
|
|
93
|
+
function appPathname(pathname, basePath) {
|
|
94
|
+
if (!basePath)
|
|
95
|
+
return pathname;
|
|
96
|
+
if (pathname === basePath)
|
|
97
|
+
return "/";
|
|
98
|
+
return pathname.startsWith(`${basePath}/`) ? pathname.slice(basePath.length) : undefined;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export { loadCompatHeaders, resolveCompatHeaders, appPathname };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import {
|
|
3
|
+
getWorkUnit
|
|
4
|
+
} from "./index-grta8ap3.js";
|
|
5
|
+
|
|
6
|
+
// src/compat/next/canonical-url.ts
|
|
7
|
+
var CANONICAL_URL_KEY = Symbol.for("pnext.compat.navigation.canonicalUrl");
|
|
8
|
+
function recordCanonicalUrl(from) {
|
|
9
|
+
const unit = getWorkUnit();
|
|
10
|
+
if (!unit)
|
|
11
|
+
return;
|
|
12
|
+
const compat = unit.compat ??= {};
|
|
13
|
+
if (typeof compat[CANONICAL_URL_KEY] === "string")
|
|
14
|
+
return;
|
|
15
|
+
compat[CANONICAL_URL_KEY] = from.href;
|
|
16
|
+
}
|
|
17
|
+
function canonicalUrlHref() {
|
|
18
|
+
const value = getWorkUnit()?.compat?.[CANONICAL_URL_KEY];
|
|
19
|
+
return typeof value === "string" ? value : undefined;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export { recordCanonicalUrl, canonicalUrlHref };
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import {
|
|
3
|
+
readSourceSync
|
|
4
|
+
} from "./index-fp8r0sqs.js";
|
|
5
|
+
|
|
6
|
+
// src/compat/next/usage.ts
|
|
7
|
+
import { existsSync, readdirSync } from "fs";
|
|
8
|
+
import path from "path";
|
|
9
|
+
var skipDirs = new Set(["node_modules", "dist", "build", "out", "coverage", "public", "target"]);
|
|
10
|
+
var sourceFile = /\.(?:[cm]?[jt]sx?|mdx)$/;
|
|
11
|
+
var imageApi = /next\/(?:legacy\/)?image|getImageProps|unstable_getImgProps/;
|
|
12
|
+
var literalBlur = /\bplaceholder\s*[=:]\s*\{?\s*['"`]blur['"`]/;
|
|
13
|
+
var opaquePlaceholder = /\bplaceholder\s*[=:]\s*(?!\{?\s*['"`])/;
|
|
14
|
+
var opaqueProps = /\{\s*\.\.\.|export\s[^;]*from\s*['"]next\/(?:legacy\/)?image/;
|
|
15
|
+
var cache = new Map;
|
|
16
|
+
function scanRoots(root) {
|
|
17
|
+
const roots = [root];
|
|
18
|
+
for (let dir = path.dirname(root);dir !== path.dirname(dir); dir = path.dirname(dir)) {
|
|
19
|
+
if (!existsSync(path.join(dir, "pnpm-workspace.yaml")) && !existsSync(path.join(dir, "lerna.json"))) {
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
const packages = path.join(dir, "packages");
|
|
23
|
+
if (existsSync(packages))
|
|
24
|
+
roots.push(packages);
|
|
25
|
+
break;
|
|
26
|
+
}
|
|
27
|
+
return roots;
|
|
28
|
+
}
|
|
29
|
+
function appUsesBlurPlaceholder(root) {
|
|
30
|
+
const cached = cache.get(root);
|
|
31
|
+
if (cached !== undefined)
|
|
32
|
+
return cached;
|
|
33
|
+
const used = scanFirstPartySource(root, blurSource);
|
|
34
|
+
cache.set(root, used);
|
|
35
|
+
return used;
|
|
36
|
+
}
|
|
37
|
+
function blurSource(source) {
|
|
38
|
+
if (!imageApi.test(source))
|
|
39
|
+
return false;
|
|
40
|
+
return literalBlur.test(source) || opaquePlaceholder.test(source) || opaqueProps.test(source);
|
|
41
|
+
}
|
|
42
|
+
function scanFirstPartySource(root, match) {
|
|
43
|
+
return scanRoots(root).some((dir) => scan(dir, match));
|
|
44
|
+
}
|
|
45
|
+
function scan(dir, match) {
|
|
46
|
+
let entries;
|
|
47
|
+
try {
|
|
48
|
+
entries = readdirSync(dir, { withFileTypes: true });
|
|
49
|
+
} catch {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
for (const entry of entries) {
|
|
53
|
+
if (entry.name.startsWith("."))
|
|
54
|
+
continue;
|
|
55
|
+
const file = path.join(dir, entry.name);
|
|
56
|
+
if (entry.isDirectory()) {
|
|
57
|
+
if (skipDirs.has(entry.name))
|
|
58
|
+
continue;
|
|
59
|
+
if (scan(file, match))
|
|
60
|
+
return true;
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
if (!sourceFile.test(entry.name))
|
|
64
|
+
continue;
|
|
65
|
+
let source;
|
|
66
|
+
try {
|
|
67
|
+
source = readSourceSync(file);
|
|
68
|
+
} catch {
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
if (match(source))
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
var legacyProp = /\blegacyBehavior\b/;
|
|
77
|
+
var reexportedLink = /export\s[^;]*from\s*['"]next\/link['"]/;
|
|
78
|
+
var legacyLinkCache = new Map;
|
|
79
|
+
function appUsesLegacyLink(root) {
|
|
80
|
+
const cached = legacyLinkCache.get(root);
|
|
81
|
+
if (cached !== undefined)
|
|
82
|
+
return cached;
|
|
83
|
+
const used = scanFirstPartySource(root, (source) => legacyProp.test(source) || reexportedLink.test(source));
|
|
84
|
+
legacyLinkCache.set(root, used);
|
|
85
|
+
return used;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export { appUsesBlurPlaceholder, scanFirstPartySource, appUsesLegacyLink };
|