@wular/pnext 0.1.6 → 0.1.8
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-pycbtjt1.js +46 -0
- package/dist/server/_chunks/analyze-4d9e00g9.js +449 -0
- package/dist/server/_chunks/boot-bhemypxz.js +38 -0
- package/dist/server/_chunks/build-c991dv65.js +86 -0
- package/dist/server/_chunks/build-kh5e3x48.js +3341 -0
- package/dist/server/_chunks/build-tier-0a96kmx3.js +2456 -0
- package/dist/server/_chunks/compile-040r79gj.js +22 -0
- package/dist/server/_chunks/config-0tvz03a6.js +24 -0
- package/dist/server/_chunks/config-27rj7830.js +36 -0
- package/dist/server/_chunks/create-9rvwshsp.js +135 -0
- package/dist/server/_chunks/dev-ex9exynt.js +220 -0
- package/dist/server/_chunks/esbuild-yyktfrtt.js +15 -0
- package/dist/server/_chunks/generate-myw9hef7.js +22 -0
- package/dist/server/_chunks/index-0r5eqfc7.js +279 -0
- package/dist/server/_chunks/index-0yjv5v47.js +105 -0
- package/dist/server/_chunks/index-11xpbfej.js +17 -0
- package/dist/server/_chunks/index-141vcwk6.js +109 -0
- package/dist/server/_chunks/index-1pzm1hdy.js +4130 -0
- package/dist/server/_chunks/index-29pq0kax.js +590 -0
- package/dist/server/_chunks/index-2vz0wzdn.js +59 -0
- package/dist/server/_chunks/index-2wfv4kvx.js +182 -0
- package/dist/server/_chunks/index-38xpdxwd.js +194 -0
- package/dist/server/_chunks/index-3e075kny.js +128 -0
- package/dist/server/_chunks/index-3ycf5ckv.js +472 -0
- package/dist/server/_chunks/index-4399bvd2.js +18 -0
- package/dist/server/_chunks/index-4da76t62.js +297 -0
- package/dist/server/_chunks/index-4t92hdxd.js +172 -0
- package/dist/server/_chunks/index-4zzebszd.js +10 -0
- package/dist/server/_chunks/index-52k54ykj.js +95 -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-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-71885zaq.js +284 -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-8ct7rqy3.js +198 -0
- package/dist/server/_chunks/index-8kcxdfya.js +206 -0
- package/dist/server/_chunks/index-9ch50vtq.js +18 -0
- package/dist/server/_chunks/index-9f49w76j.js +213 -0
- package/dist/server/_chunks/index-9hz3s0m8.js +851 -0
- package/dist/server/_chunks/index-akkrvjn6.js +535 -0
- package/dist/server/_chunks/index-b6wtkdp4.js +24 -0
- package/dist/server/_chunks/index-b7j671dj.js +207 -0
- package/dist/server/_chunks/index-bcws5eh2.js +35 -0
- package/dist/server/_chunks/index-bzd2ef7t.js +10 -0
- package/dist/server/_chunks/index-cjgqs13g.js +65 -0
- package/dist/server/_chunks/index-ckkdpht5.js +41 -0
- package/dist/server/_chunks/index-cn86z041.js +296 -0
- package/dist/server/_chunks/index-cvr4z22m.js +92 -0
- package/dist/server/_chunks/index-cyfednwb.js +87 -0
- package/dist/server/_chunks/index-d158y67j.js +152 -0
- package/dist/server/_chunks/index-d1jsmhhk.js +955 -0
- package/dist/server/_chunks/index-dg0f05zs.js +199 -0
- package/dist/server/_chunks/index-dgr390q7.js +9438 -0
- package/dist/server/_chunks/index-drwv61cc.js +185 -0
- package/dist/server/_chunks/index-e3a6yx84.js +18 -0
- package/dist/server/_chunks/index-e88tyv35.js +45 -0
- package/dist/server/_chunks/index-en7n9f7m.js +22 -0
- package/dist/server/_chunks/index-entm8bmz.js +28 -0
- package/dist/server/_chunks/index-evhd413j.js +57 -0
- package/dist/server/_chunks/index-ezgj0tr1.js +88 -0
- package/dist/server/_chunks/index-fjv96re1.js +5295 -0
- package/dist/server/_chunks/index-fn1chkkd.js +214 -0
- package/dist/server/_chunks/index-fp8r0sqs.js +64 -0
- package/dist/server/_chunks/index-gcmj16xy.js +92 -0
- package/dist/server/_chunks/index-gkndxkxf.js +736 -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-hdbwtdv2.js +352 -0
- package/dist/server/_chunks/index-he6n2bvp.js +1270 -0
- package/dist/server/_chunks/index-j0m1jxqa.js +1253 -0
- package/dist/server/_chunks/index-j2zrcp1k.js +66 -0
- package/dist/server/_chunks/index-j681c48a.js +2530 -0
- package/dist/server/_chunks/index-jbj7ehef.js +50 -0
- package/dist/server/_chunks/index-jcsjq3d1.js +20 -0
- package/dist/server/_chunks/index-jks0x0a1.js +14 -0
- package/dist/server/_chunks/index-jn9rbhrx.js +1599 -0
- package/dist/server/_chunks/index-jt8e1pje.js +12 -0
- package/dist/server/_chunks/index-kdhxpwyq.js +483 -0
- package/dist/server/_chunks/index-knp0s912.js +7 -0
- package/dist/server/_chunks/index-kqyy1d4f.js +50 -0
- package/dist/server/_chunks/index-kresp2n8.js +445 -0
- package/dist/server/_chunks/index-m63czgq5.js +590 -0
- package/dist/server/_chunks/index-ms9v9tnx.js +31 -0
- package/dist/server/_chunks/index-n4hxpng2.js +11 -0
- package/dist/server/_chunks/index-n629dy38.js +1071 -0
- package/dist/server/_chunks/index-nf3df4jy.js +266 -0
- package/dist/server/_chunks/index-nqh3xhdc.js +57 -0
- package/dist/server/_chunks/index-pym1cezq.js +39 -0
- package/dist/server/_chunks/index-q3r9z8mq.js +213 -0
- package/dist/server/_chunks/index-q738kkhj.js +100 -0
- package/dist/server/_chunks/index-qcrvt6er.js +112 -0
- package/dist/server/_chunks/index-qjj6gddn.js +54 -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-rgj5mx84.js +101 -0
- package/dist/server/_chunks/index-rjegyfx4.js +1435 -0
- package/dist/server/_chunks/index-rt9qq1va.js +4 -0
- package/dist/server/_chunks/index-rthrsed5.js +356 -0
- package/dist/server/_chunks/index-sq3kvz3g.js +200 -0
- package/dist/server/_chunks/index-stbk3jhn.js +31 -0
- package/dist/server/_chunks/index-tf4j19ge.js +130 -0
- package/dist/server/_chunks/index-tgcakdxc.js +125 -0
- package/dist/server/_chunks/index-tgsfjmep.js +74 -0
- package/dist/server/_chunks/index-tq1f96v7.js +51 -0
- package/dist/server/_chunks/index-tq3b39a5.js +107 -0
- package/dist/server/_chunks/index-typcbcsv.js +819 -0
- package/dist/server/_chunks/index-v1ags1na.js +132 -0
- package/dist/server/_chunks/index-vmr35jjw.js +170 -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-wm36rj4v.js +311 -0
- package/dist/server/_chunks/index-x0y005nh.js +283 -0
- package/dist/server/_chunks/index-x2m17v9c.js +6166 -0
- package/dist/server/_chunks/index-x3yn4ywm.js +22 -0
- package/dist/server/_chunks/index-x9c55pzy.js +871 -0
- package/dist/server/_chunks/index-xh1nbk46.js +1299 -0
- package/dist/server/_chunks/index-xvj80c3a.js +30 -0
- package/dist/server/_chunks/index-xywjg2vc.js +100 -0
- package/dist/server/_chunks/index-y4d02znn.js +66 -0
- package/dist/server/_chunks/index-y7mzvq2q.js +110 -0
- package/dist/server/_chunks/index-ye9hmsvf.js +47 -0
- package/dist/server/_chunks/index-yhxkxghe.js +56 -0
- package/dist/server/_chunks/index-yrjkqtfj.js +86 -0
- package/dist/server/_chunks/index-z88qv16t.js +11 -0
- package/dist/server/_chunks/index-zfrwq472.js +154 -0
- package/dist/server/_chunks/index-zqpqyg8p.js +666 -0
- package/dist/server/_chunks/loader-5en7wpt5.js +80 -0
- package/dist/server/_chunks/modules-t92favpj.js +76 -0
- package/dist/server/_chunks/pipeline-4t9q43ht.js +836 -0
- package/dist/server/_chunks/production-385bw8df.js +55 -0
- package/dist/server/_chunks/proxy-config-60gprphe.js +23 -0
- package/dist/server/_chunks/proxy-gfhmktbk.js +35 -0
- package/dist/server/_chunks/router-xnrva921.js +501 -0
- package/dist/server/_chunks/routes-ht868pdc.js +66 -0
- package/dist/server/_chunks/run-d40d63ag.js +697 -0
- package/dist/server/_chunks/server-2p8fgqq2.js +1839 -0
- package/dist/server/_chunks/tsconfig-defaults-bcn34eqb.js +21 -0
- package/dist/server/_chunks/typegen-dvtcjtaw.js +37 -0
- package/dist/server/api/client-cache.js +14 -0
- package/dist/server/cli/index.js +375 -0
- package/dist/server/cli/start.js +158 -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 +34 -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 +21 -0
- package/dist/server/compat/next/error.js +112 -0
- package/dist/server/compat/next/font/cache.js +16 -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 +24 -0
- package/dist/server/compat/next/font/runtime-client.js +33 -0
- package/dist/server/compat/next/font/runtime.js +43 -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 +15 -0
- package/dist/server/compat/next/link.js +14 -0
- package/dist/server/compat/next/navigation.js +191 -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 +32 -0
- package/dist/server/compat/next/resource-hints.js +30 -0
- package/dist/server/compat/next/rewrites.js +43 -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/reference/compat.md +1 -1
- package/reference/config.md +2 -2
- package/reference/dev.md +1 -1
- package/reference/getting-started.md +1 -1
- package/reference/rendering.md +4 -4
- package/src/api/dynamic.tsx +86 -4
- package/src/api/server.ts +24 -6
- package/src/cli/adapters/vercel-warm.ts +327 -62
- package/src/cli/adapters/vercel.ts +164 -1054
- package/src/cli/analyze.ts +3 -2
- package/src/cli/build/cache.ts +6 -6
- package/src/cli/build.ts +78 -45
- package/src/cli/index.ts +21 -3
- package/src/cli/serve/immutable.ts +31 -0
- package/src/cli/serve/pipeline.ts +97 -93
- package/src/cli/serve/standalone-worker.ts +8 -0
- package/src/cli/serve/standalone.ts +703 -0
- package/src/cli/start.ts +31 -8
- package/src/client/build.ts +1 -1
- package/src/client/chunk-fold.ts +19 -6
- package/src/client/react-tier.ts +3 -2
- package/src/client/reference-stub.ts +23 -36
- package/src/compat/actions/client-plugin.ts +4 -2
- package/src/compat/actions/config.ts +6 -5
- package/src/compat/actions/extensions.ts +5 -5
- 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/bundler/require-context.ts +2 -1
- package/src/compat/bundler/webpack-loaders.ts +3 -2
- package/src/compat/bundler/worker.ts +2 -2
- package/src/compat/cache-control.ts +16 -8
- package/src/compat/css/inline-css.ts +1 -1
- package/src/compat/css/modules.ts +18 -5
- package/src/compat/export/build-complete.ts +1 -1
- package/src/compat/export/emit.ts +4 -4
- package/src/compat/export/standalone.ts +30 -65
- package/src/compat/image-optimizer/optimize.ts +1 -1
- package/src/compat/lifecycle/error-funnel.ts +1 -1
- package/src/compat/lifecycle/instrumentation-client.ts +4 -3
- package/src/compat/lifecycle/instrumentation.ts +117 -24
- package/src/compat/lifecycle/testmode.ts +3 -2
- package/src/compat/metadata-artifacts.ts +1 -1
- package/src/compat/next/config-loader.ts +140 -13
- package/src/compat/next/dynamic.tsx +10 -23
- package/src/compat/next/font/cache.ts +2 -1
- package/src/compat/next/font/runtime.ts +23 -3
- 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/image.ts +1 -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/typecheck/check.ts +6 -4
- package/src/compat/validation/validate.ts +10 -7
- package/src/config.ts +76 -9
- package/src/css/assets.ts +213 -0
- package/src/css/build.ts +190 -247
- package/src/dev/client-chunk-store.ts +2 -1
- package/src/dev/restart/client-key.ts +2 -1
- package/src/dev/restart/global-css.ts +2 -1
- package/src/dev/restart/route-bundle-key.ts +2 -1
- package/src/dev/restart/route-facts.ts +2 -1
- package/src/dev/server.ts +34 -14
- package/src/extensions.ts +4 -0
- package/src/out-paths.ts +10 -0
- package/src/render/hooks.ts +13 -0
- package/src/render/renderer.ts +53 -33
- package/src/request/context.ts +9 -0
- package/src/resolve/dynamic.ts +7 -1
- package/src/resolve/engine.ts +2 -12
- package/src/resolve/imports.ts +12 -52
- package/src/resolve/package-json.ts +56 -0
- package/src/resolve/scan-facts.ts +250 -1
- package/src/routing/href.ts +10 -3
- package/src/routing/match.ts +287 -0
- package/src/routing/metadata-files.ts +20 -6
- 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 +218 -44
- package/src/runtime/module-cache.ts +15 -1
- package/src/runtime/modules.ts +405 -82
- package/src/runtime/prebundle.ts +101 -0
- package/src/runtime/production.ts +456 -0
- package/src/runtime/release-graph.ts +342 -0
- package/src/runtime/vendor-build.ts +750 -17
- package/src/runtime/vendor.ts +16 -3
- package/src/types.ts +4 -3
- package/src/utils/directive.ts +40 -0
- package/src/utils/fs.ts +95 -4
- package/src/utils/resource-query.ts +12 -0
- package/src/cli/serve/entry.ts +0 -45
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
// src/utils/native-require.ts
|
|
3
|
+
import realProcess from "process";
|
|
4
|
+
function loadNative(load) {
|
|
5
|
+
const globalObject = globalThis;
|
|
6
|
+
if (globalObject.process === realProcess)
|
|
7
|
+
return load();
|
|
8
|
+
const previous = Object.getOwnPropertyDescriptor(globalObject, "process");
|
|
9
|
+
Object.defineProperty(globalObject, "process", {
|
|
10
|
+
configurable: true,
|
|
11
|
+
enumerable: false,
|
|
12
|
+
writable: true,
|
|
13
|
+
value: realProcess
|
|
14
|
+
});
|
|
15
|
+
try {
|
|
16
|
+
return load();
|
|
17
|
+
} finally {
|
|
18
|
+
if (previous)
|
|
19
|
+
Object.defineProperty(globalObject, "process", previous);
|
|
20
|
+
else
|
|
21
|
+
delete globalObject.process;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export { loadNative };
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import {
|
|
3
|
+
readDirListing,
|
|
4
|
+
toPosixPath
|
|
5
|
+
} from "./index-4da76t62.js";
|
|
6
|
+
import {
|
|
7
|
+
extraPageExtensions
|
|
8
|
+
} from "./index-zqpqyg8p.js";
|
|
9
|
+
|
|
10
|
+
// src/routing/match.ts
|
|
11
|
+
import path from "path";
|
|
12
|
+
import { safeDecode } from "../../../src/utils/decode.ts";
|
|
13
|
+
var BASE_PAGE_EXTENSIONS = ["tsx", "ts", "jsx", "js", "mjs"];
|
|
14
|
+
function pageExtensions() {
|
|
15
|
+
return [...new Set([...BASE_PAGE_EXTENSIONS, ...extraPageExtensions()])];
|
|
16
|
+
}
|
|
17
|
+
var globalErrorBase = "global-error";
|
|
18
|
+
function conventionFileName(dir, base) {
|
|
19
|
+
const { files } = readDirListing(dir);
|
|
20
|
+
for (const extension of pageExtensions()) {
|
|
21
|
+
if (files.has(`${base}.${extension}`))
|
|
22
|
+
return path.join(dir, `${base}.${extension}`);
|
|
23
|
+
}
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
function findLayouts(appPath, routeFilePath) {
|
|
27
|
+
return findConventionFiles(appPath, routeFilePath, "layout");
|
|
28
|
+
}
|
|
29
|
+
function findConventionFiles(appPath, routeFilePath, name) {
|
|
30
|
+
const base = conventionBase(name);
|
|
31
|
+
const files = [];
|
|
32
|
+
let dir = path.dirname(routeFilePath);
|
|
33
|
+
while (dir.startsWith(appPath)) {
|
|
34
|
+
files.push(conventionFileName(dir, base) ?? path.join(dir, `${base}.tsx`));
|
|
35
|
+
if (dir === appPath)
|
|
36
|
+
break;
|
|
37
|
+
dir = path.dirname(dir);
|
|
38
|
+
}
|
|
39
|
+
return files.reverse();
|
|
40
|
+
}
|
|
41
|
+
function conventionBase(name) {
|
|
42
|
+
const match = new RegExp(`\\.(${pageExtensions().join("|")})$`).exec(name);
|
|
43
|
+
return match ? name.slice(0, -match[0].length) : name;
|
|
44
|
+
}
|
|
45
|
+
function findGlobalError(appPath) {
|
|
46
|
+
return conventionFileName(appPath, globalErrorBase);
|
|
47
|
+
}
|
|
48
|
+
function matchRoute(routes, pathname) {
|
|
49
|
+
const normalized = normalizePathname(pathname);
|
|
50
|
+
for (const route of routes) {
|
|
51
|
+
if (route.interception)
|
|
52
|
+
continue;
|
|
53
|
+
const match = routeRegex(route).exec(normalized);
|
|
54
|
+
if (!match)
|
|
55
|
+
continue;
|
|
56
|
+
return { route, params: routeMatchParams(route, match) };
|
|
57
|
+
}
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
function normalizePathname(pathname) {
|
|
61
|
+
return pathname.length > 1 ? pathname.replace(/\/+$/, "") || "/" : pathname;
|
|
62
|
+
}
|
|
63
|
+
function routeMatchParams(route, match) {
|
|
64
|
+
const params = {};
|
|
65
|
+
route.params.forEach((name, index) => {
|
|
66
|
+
const decoded = safeDecode(match[index + 1] ?? "");
|
|
67
|
+
params[name] = decoded === `[${name}]` ? encodeURIComponent(decoded) : decoded;
|
|
68
|
+
});
|
|
69
|
+
if (route.catchAll) {
|
|
70
|
+
params[route.catchAll] = (match[route.params.length + 1] ?? "").split("/").filter(Boolean).map(safeDecode);
|
|
71
|
+
}
|
|
72
|
+
return params;
|
|
73
|
+
}
|
|
74
|
+
function matchInterception(routes, pathname, fromPath) {
|
|
75
|
+
if (!fromPath)
|
|
76
|
+
return null;
|
|
77
|
+
const target = normalizePathname(pathname);
|
|
78
|
+
const from = normalizePathname(fromPath);
|
|
79
|
+
if (target === from)
|
|
80
|
+
return null;
|
|
81
|
+
let best = null;
|
|
82
|
+
let bestDepth = -1;
|
|
83
|
+
for (const route of routes) {
|
|
84
|
+
const interception = route.interception;
|
|
85
|
+
if (!interception)
|
|
86
|
+
continue;
|
|
87
|
+
const match = routeRegex(route).exec(target);
|
|
88
|
+
if (!match)
|
|
89
|
+
continue;
|
|
90
|
+
const basePattern = interception.basePattern ? `/${interception.basePattern}` : "";
|
|
91
|
+
if (!new RegExp(`^${basePattern}(?:/.*)?$`).test(from))
|
|
92
|
+
continue;
|
|
93
|
+
const depth = interception.base.split("/").filter(Boolean).length;
|
|
94
|
+
if (depth <= bestDepth)
|
|
95
|
+
continue;
|
|
96
|
+
bestDepth = depth;
|
|
97
|
+
best = { route, params: routeMatchParams(route, match) };
|
|
98
|
+
}
|
|
99
|
+
return best;
|
|
100
|
+
}
|
|
101
|
+
function selectRouteForRequest(routes, pathname, nav) {
|
|
102
|
+
const target = normalizePathname(pathname);
|
|
103
|
+
if (nav) {
|
|
104
|
+
const intercepted = matchInterception(routes, target, nav.children);
|
|
105
|
+
if (intercepted) {
|
|
106
|
+
if (!intercepted.route.interception?.slotDir) {
|
|
107
|
+
return {
|
|
108
|
+
route: intercepted.route,
|
|
109
|
+
params: intercepted.params,
|
|
110
|
+
childrenPath: target,
|
|
111
|
+
targetPath: target
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
const host = hostMatch(routes, nav.children);
|
|
115
|
+
if (host)
|
|
116
|
+
return { ...host, targetPath: target };
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
const matched = matchRoute(routes, target);
|
|
120
|
+
if (!matched)
|
|
121
|
+
return null;
|
|
122
|
+
if (nav && matched.route.synthetic && nav.children) {
|
|
123
|
+
const primary = matchRoute(routes.filter((route) => !route.synthetic), target);
|
|
124
|
+
const syntheticOwner = matched.route.syntheticSlotDir ? path.dirname(matched.route.syntheticSlotDir) : undefined;
|
|
125
|
+
const primaryFromOwner = primary && syntheticOwner ? path.relative(syntheticOwner, primary.route.file) : undefined;
|
|
126
|
+
if (primary && primaryFromOwner !== undefined && primaryFromOwner !== ".." && !primaryFromOwner.startsWith(`..${path.sep}`)) {
|
|
127
|
+
return {
|
|
128
|
+
route: primary.route,
|
|
129
|
+
params: primary.params,
|
|
130
|
+
childrenPath: target,
|
|
131
|
+
targetPath: target
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
const host = hostMatch(routes, nav.children);
|
|
135
|
+
if (host && host.route !== matched.route && matched.route.syntheticSlotDir && host.route.slotDirs?.includes(matched.route.syntheticSlotDir)) {
|
|
136
|
+
return { ...host, targetPath: target };
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return {
|
|
140
|
+
route: matched.route,
|
|
141
|
+
params: matched.params,
|
|
142
|
+
childrenPath: target,
|
|
143
|
+
targetPath: target
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
function parseNavState(request) {
|
|
147
|
+
if (!request.headers.get("x-pnext-soft-nav"))
|
|
148
|
+
return;
|
|
149
|
+
const raw = request.headers.get("x-pnext-nav-state");
|
|
150
|
+
if (!raw)
|
|
151
|
+
return {};
|
|
152
|
+
try {
|
|
153
|
+
const parsed = JSON.parse(decodeURIComponent(raw));
|
|
154
|
+
if (parsed && typeof parsed === "object")
|
|
155
|
+
return parsed;
|
|
156
|
+
} catch {}
|
|
157
|
+
return {};
|
|
158
|
+
}
|
|
159
|
+
function hostMatch(routes, fromPath) {
|
|
160
|
+
if (!fromPath)
|
|
161
|
+
return null;
|
|
162
|
+
const from = normalizePathname(fromPath);
|
|
163
|
+
const host = matchRoute(routes, from);
|
|
164
|
+
if (host?.route.kind !== "page")
|
|
165
|
+
return null;
|
|
166
|
+
return { route: host.route, params: host.params, childrenPath: from, targetPath: from };
|
|
167
|
+
}
|
|
168
|
+
var routeRegexCache = new WeakMap;
|
|
169
|
+
function routeRegex(route) {
|
|
170
|
+
let regex = routeRegexCache.get(route);
|
|
171
|
+
if (!regex) {
|
|
172
|
+
regex = new RegExp(`^${route.pattern}$`);
|
|
173
|
+
routeRegexCache.set(route, regex);
|
|
174
|
+
}
|
|
175
|
+
return regex;
|
|
176
|
+
}
|
|
177
|
+
function serverActionsUnsupportedMessage(offender) {
|
|
178
|
+
const file = offender.root ? toPosixPath(path.relative(offender.root, offender.file)) : offender.file;
|
|
179
|
+
const reach = offender.route ? `, reachable from the route ${offender.route}` : "";
|
|
180
|
+
return [
|
|
181
|
+
`Server actions need next compat, and this app is pure core.`,
|
|
182
|
+
``,
|
|
183
|
+
` ${file} has a 'use server' directive${reach}.`,
|
|
184
|
+
``,
|
|
185
|
+
`pnext will not build this app: core has no server-action registry and no`,
|
|
186
|
+
`dispatch endpoint, so the action could only render as a form that submits`,
|
|
187
|
+
`nowhere.`,
|
|
188
|
+
``,
|
|
189
|
+
`Fix it one of two ways:`,
|
|
190
|
+
` 1. Enable compat in pnext.config.ts:`,
|
|
191
|
+
` export default { compat: { next: true } }`,
|
|
192
|
+
` 2. Or delete the 'use server' directive from ${file}, if those exports are`,
|
|
193
|
+
` only ever called on the server (in core the directive does nothing).`
|
|
194
|
+
].join(`
|
|
195
|
+
`);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
export { pageExtensions, conventionFileName, findLayouts, findConventionFiles, findGlobalError, matchRoute, normalizePathname, matchInterception, selectRouteForRequest, parseNavState, serverActionsUnsupportedMessage };
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import { join as __pnextJoin } from "node:path";
|
|
3
|
+
const __PNEXT_PACKAGE_ROOT__ = __pnextJoin(import.meta.dirname, "../../..");
|
|
4
|
+
// src/compat/next/custom-server.ts
|
|
5
|
+
import { existsSync, lstatSync, readFileSync } from "fs";
|
|
6
|
+
import { mkdir, rm, writeFile } from "fs/promises";
|
|
7
|
+
import path from "path";
|
|
8
|
+
var SERVER_ENTRY_NAMES = ["server.js", "server.mjs", "server.cjs", "server.ts"];
|
|
9
|
+
var SHIM_VERSION = "0.0.0-pnext-custom-server";
|
|
10
|
+
function hasCustomServerEntry(root) {
|
|
11
|
+
for (const name of SERVER_ENTRY_NAMES) {
|
|
12
|
+
const file = path.join(root, name);
|
|
13
|
+
if (!existsSync(file))
|
|
14
|
+
continue;
|
|
15
|
+
try {
|
|
16
|
+
const source = readFileSync(file, "utf8");
|
|
17
|
+
if (/(?:require\(\s*['"]next['"]\s*\)|from\s+['"]next['"])/.test(source))
|
|
18
|
+
return true;
|
|
19
|
+
} catch {}
|
|
20
|
+
}
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
async function emitCustomServerShim(config) {
|
|
24
|
+
if (!hasCustomServerEntry(config.root))
|
|
25
|
+
return;
|
|
26
|
+
const target = path.join(config.root, "node_modules", "next");
|
|
27
|
+
try {
|
|
28
|
+
const stat = lstatSync(target);
|
|
29
|
+
if (!stat.isSymbolicLink() && !isEmittedShim(target))
|
|
30
|
+
return;
|
|
31
|
+
await rm(target, { recursive: true, force: true });
|
|
32
|
+
} catch {}
|
|
33
|
+
await mkdir(target, { recursive: true });
|
|
34
|
+
await writeFile(path.join(target, "package.json"), `${JSON.stringify({ name: "next", version: SHIM_VERSION, main: "index.cjs" }, null, 2)}
|
|
35
|
+
`);
|
|
36
|
+
await writeFile(path.join(target, "index.cjs"), customServerShimSource());
|
|
37
|
+
}
|
|
38
|
+
function isEmittedShim(target) {
|
|
39
|
+
try {
|
|
40
|
+
const pkg = JSON.parse(readFileSync(path.join(target, "package.json"), "utf8"));
|
|
41
|
+
return pkg.version === SHIM_VERSION;
|
|
42
|
+
} catch {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function customServerShimSource() {
|
|
47
|
+
const cliPath = path.resolve(__PNEXT_PACKAGE_ROOT__ + "/src/compat/next", "..", "..", "cli", "index.ts");
|
|
48
|
+
return `'use strict';
|
|
49
|
+
// pnext custom-server shim for require('next') / import next from 'next'.
|
|
50
|
+
// Generated by pnext build; see src/compat/next/custom-server.ts.
|
|
51
|
+
const { spawn } = require('node:child_process');
|
|
52
|
+
|
|
53
|
+
const PNEXT_CLI = ${JSON.stringify(cliPath)};
|
|
54
|
+
const HOP_BY_HOP = new Set([
|
|
55
|
+
'connection', 'keep-alive', 'proxy-authenticate', 'proxy-authorization',
|
|
56
|
+
'te', 'trailer', 'transfer-encoding', 'upgrade', 'host', 'accept-encoding',
|
|
57
|
+
]);
|
|
58
|
+
|
|
59
|
+
function createServer(options = {}) {
|
|
60
|
+
const dev = Boolean(options.dev);
|
|
61
|
+
const hostname = options.hostname || 'localhost';
|
|
62
|
+
const port = options.port || 3000;
|
|
63
|
+
let child;
|
|
64
|
+
let childExited;
|
|
65
|
+
let internalPort;
|
|
66
|
+
|
|
67
|
+
async function prepare() {
|
|
68
|
+
if (internalPort) return;
|
|
69
|
+
child = spawn(
|
|
70
|
+
'bun',
|
|
71
|
+
['--conditions=react-server', PNEXT_CLI, dev ? 'dev' : 'start', '--port', '0', '--hostname', '127.0.0.1'],
|
|
72
|
+
{
|
|
73
|
+
cwd: process.cwd(),
|
|
74
|
+
env: { ...process.env, BROWSER: 'none', NODE_ENV: dev ? 'development' : 'production' },
|
|
75
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
76
|
+
}
|
|
77
|
+
);
|
|
78
|
+
childExited = new Promise((resolve) => child.once('exit', resolve));
|
|
79
|
+
internalPort = await new Promise((resolve, reject) => {
|
|
80
|
+
const timer = setTimeout(
|
|
81
|
+
() => reject(new Error('pnext custom-server: timed out waiting for the pnext server to start')),
|
|
82
|
+
60000
|
|
83
|
+
);
|
|
84
|
+
let buffer = '';
|
|
85
|
+
// Echo the child's logs line by line, relabelling its "- Local: <internal>"
|
|
86
|
+
// ready banner: log scanners on THIS process's stdout (the Next e2e harness
|
|
87
|
+
// parses that exact line for the app URL) must not pick up the internal
|
|
88
|
+
// port, or every request would bypass the custom server. Line buffering
|
|
89
|
+
// keeps a coalesced/split chunk from slipping the raw banner through.
|
|
90
|
+
const echoLines = (out) => {
|
|
91
|
+
let tail = '';
|
|
92
|
+
const write = (text) => {
|
|
93
|
+
const merged = tail + text;
|
|
94
|
+
const cut = merged.lastIndexOf('\\n') + 1;
|
|
95
|
+
tail = merged.slice(cut);
|
|
96
|
+
if (cut === 0) return;
|
|
97
|
+
out.write(merged.slice(0, cut).replace(/-(\\s*)(Local|Network):/g, '[pnext internal]$1$2:'));
|
|
98
|
+
};
|
|
99
|
+
child.once('exit', () => { if (tail) { const rest = tail; tail = ''; out.write(rest); } });
|
|
100
|
+
return write;
|
|
101
|
+
};
|
|
102
|
+
const echoOut = echoLines(process.stdout);
|
|
103
|
+
const echoErr = echoLines(process.stderr);
|
|
104
|
+
const scan = (chunk, echo) => {
|
|
105
|
+
const text = chunk.toString('utf8');
|
|
106
|
+
echo(text);
|
|
107
|
+
if (internalPort) return;
|
|
108
|
+
buffer = (buffer + text).slice(-4096);
|
|
109
|
+
const match = /-\\s*Local:\\s+https?:\\/\\/[^:\\s]+:(\\d+)/.exec(buffer);
|
|
110
|
+
if (match) {
|
|
111
|
+
clearTimeout(timer);
|
|
112
|
+
resolve(Number(match[1]));
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
child.stdout.on('data', (chunk) => scan(chunk, echoOut));
|
|
116
|
+
child.stderr.on('data', (chunk) => scan(chunk, echoErr));
|
|
117
|
+
child.once('exit', (code) => {
|
|
118
|
+
clearTimeout(timer);
|
|
119
|
+
reject(new Error('pnext custom-server: the pnext server exited during startup (code ' + code + ')'));
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
async function handleRequest(req, res) {
|
|
125
|
+
if (!internalPort) throw new Error('pnext custom-server: prepare() must complete before handling requests');
|
|
126
|
+
const target = new URL(req.url || '/', 'http://127.0.0.1:' + internalPort);
|
|
127
|
+
const headers = {};
|
|
128
|
+
for (const [name, value] of Object.entries(req.headers)) {
|
|
129
|
+
if (value === undefined || HOP_BY_HOP.has(name)) continue;
|
|
130
|
+
headers[name] = Array.isArray(value) ? value.join(', ') : value;
|
|
131
|
+
}
|
|
132
|
+
if (req.headers.host) headers['x-forwarded-host'] = req.headers.host;
|
|
133
|
+
headers['x-forwarded-proto'] = 'http';
|
|
134
|
+
const method = (req.method || 'GET').toUpperCase();
|
|
135
|
+
const hasBody = method !== 'GET' && method !== 'HEAD';
|
|
136
|
+
const response = await fetch(target, {
|
|
137
|
+
method,
|
|
138
|
+
headers,
|
|
139
|
+
body: hasBody ? req : undefined,
|
|
140
|
+
duplex: hasBody ? 'half' : undefined,
|
|
141
|
+
redirect: 'manual',
|
|
142
|
+
});
|
|
143
|
+
res.statusCode = response.status;
|
|
144
|
+
for (const [name, value] of response.headers) {
|
|
145
|
+
if (['content-encoding', 'content-length', 'transfer-encoding', 'set-cookie'].includes(name)) continue;
|
|
146
|
+
if (name === 'location') {
|
|
147
|
+
// Rewrite child-origin absolute redirects back to a relative target so
|
|
148
|
+
// the browser stays on the custom server's host/port.
|
|
149
|
+
try {
|
|
150
|
+
const url = new URL(value);
|
|
151
|
+
if (url.hostname === '127.0.0.1' && Number(url.port) === internalPort) {
|
|
152
|
+
res.setHeader(name, url.pathname + url.search + url.hash);
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
} catch {}
|
|
156
|
+
}
|
|
157
|
+
res.setHeader(name, value);
|
|
158
|
+
}
|
|
159
|
+
const setCookies = typeof response.headers.getSetCookie === 'function' ? response.headers.getSetCookie() : [];
|
|
160
|
+
if (setCookies.length > 0) {
|
|
161
|
+
const existing = res.getHeader('set-cookie');
|
|
162
|
+
const merged = existing === undefined ? setCookies : [].concat(existing, setCookies);
|
|
163
|
+
res.setHeader('set-cookie', merged);
|
|
164
|
+
}
|
|
165
|
+
if (response.body) {
|
|
166
|
+
for await (const chunk of response.body) res.write(chunk);
|
|
167
|
+
}
|
|
168
|
+
res.end();
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
async function close() {
|
|
172
|
+
if (!child || child.exitCode !== null) return;
|
|
173
|
+
// Graceful: the pnext server stops accepting connections, drains pending
|
|
174
|
+
// after() callbacks, then exits 0. Escalate to SIGKILL only on a hang.
|
|
175
|
+
child.kill('SIGTERM');
|
|
176
|
+
await Promise.race([
|
|
177
|
+
childExited,
|
|
178
|
+
new Promise((resolve) => setTimeout(resolve, 15000).unref()),
|
|
179
|
+
]);
|
|
180
|
+
if (child.exitCode === null) child.kill('SIGKILL');
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
return {
|
|
184
|
+
hostname,
|
|
185
|
+
port,
|
|
186
|
+
prepare,
|
|
187
|
+
close,
|
|
188
|
+
getRequestHandler: () => (req, res) => handleRequest(req, res).catch((error) => {
|
|
189
|
+
console.error('pnext custom-server: request failed:', error);
|
|
190
|
+
if (!res.headersSent) res.statusCode = 500;
|
|
191
|
+
res.end('Internal Server Error');
|
|
192
|
+
}),
|
|
193
|
+
getUpgradeHandler: () => (_req, socket) => { socket.destroy(); },
|
|
194
|
+
setAssetPrefix: () => {},
|
|
195
|
+
logError: (...args) => console.error(...args),
|
|
196
|
+
render: async (req, res) => { await handleRequest(req, res); },
|
|
197
|
+
renderToHTML: async () => { throw new Error('renderToHTML is not supported by the pnext custom server'); },
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
module.exports = createServer;
|
|
202
|
+
module.exports.default = createServer;
|
|
203
|
+
`;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
export { hasCustomServerEntry, emitCustomServerShim };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
// src/compat/react/view-transition.ts
|
|
3
|
+
import { Fragment, h } from "preact";
|
|
4
|
+
function ViewTransition({ children }) {
|
|
5
|
+
return h(Fragment, null, children);
|
|
6
|
+
}
|
|
7
|
+
ViewTransition.displayName = "ViewTransition";
|
|
8
|
+
var pendingTransitionTypes = [];
|
|
9
|
+
function addTransitionType(type) {
|
|
10
|
+
if (typeof type !== "string" || pendingTransitionTypes.includes(type))
|
|
11
|
+
return;
|
|
12
|
+
pendingTransitionTypes.push(type);
|
|
13
|
+
}
|
|
14
|
+
function takeTransitionTypes() {
|
|
15
|
+
return pendingTransitionTypes.splice(0, pendingTransitionTypes.length);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export { ViewTransition, addTransitionType, takeTransitionTypes };
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import {
|
|
3
|
+
escapeHtml
|
|
4
|
+
} from "./index-ye9hmsvf.js";
|
|
5
|
+
import {
|
|
6
|
+
getNextConfig
|
|
7
|
+
} from "./index-m63czgq5.js";
|
|
8
|
+
import {
|
|
9
|
+
clearRenderBuffer,
|
|
10
|
+
registerResourceHint,
|
|
11
|
+
renderBuffer,
|
|
12
|
+
takeRenderBuffer
|
|
13
|
+
} from "./index-yhxkxghe.js";
|
|
14
|
+
|
|
15
|
+
// src/compat/next/script.tsx
|
|
16
|
+
import { jsx } from "preact/jsx-runtime";
|
|
17
|
+
function Script({
|
|
18
|
+
strategy = "afterInteractive",
|
|
19
|
+
children,
|
|
20
|
+
stylesheets,
|
|
21
|
+
...scriptProps
|
|
22
|
+
}) {
|
|
23
|
+
const src = typeof scriptProps.src === "string" ? scriptProps.src : undefined;
|
|
24
|
+
const dedupKey = typeof scriptProps.id === "string" && scriptProps.id || src;
|
|
25
|
+
if (dedupKey) {
|
|
26
|
+
const keys = executedScriptKeys();
|
|
27
|
+
if (keys.has(dedupKey))
|
|
28
|
+
return null;
|
|
29
|
+
keys.add(dedupKey);
|
|
30
|
+
}
|
|
31
|
+
const manualNonce = typeof scriptProps.nonce === "string" ? scriptProps.nonce : undefined;
|
|
32
|
+
if (src && strategy !== "lazyOnload") {
|
|
33
|
+
registerResourceHint({
|
|
34
|
+
rel: "preload",
|
|
35
|
+
url: src,
|
|
36
|
+
as: "script",
|
|
37
|
+
...manualNonce ? { nonce: manualNonce } : {},
|
|
38
|
+
...typeof scriptProps.crossOrigin === "string" ? { crossOrigin: scriptProps.crossOrigin } : {}
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
if (stylesheets) {
|
|
42
|
+
for (const url of stylesheets) {
|
|
43
|
+
registerResourceHint({ rel: "stylesheet", url });
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (strategy === "beforeInteractive") {
|
|
47
|
+
headScripts().push({
|
|
48
|
+
props: { "data-nscript": "beforeInteractive", ...scriptProps },
|
|
49
|
+
content: inlineScriptContent(scriptProps, children)
|
|
50
|
+
});
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
if (strategy === "worker" && nextScriptWorkersEnabled()) {
|
|
54
|
+
const partytownProps = {
|
|
55
|
+
...scriptProps,
|
|
56
|
+
type: "text/partytown",
|
|
57
|
+
"data-nscript": "worker"
|
|
58
|
+
};
|
|
59
|
+
const workerInline = typeof children === "string" ? { dangerouslySetInnerHTML: { __html: children } } : {};
|
|
60
|
+
return /* @__PURE__ */ jsx("script", {
|
|
61
|
+
...partytownProps,
|
|
62
|
+
...workerInline
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
const deferredContent = inlineScriptContent(scriptProps, children);
|
|
66
|
+
deferredScripts().push({
|
|
67
|
+
strategy: strategy === "lazyOnload" ? "lazyOnload" : "afterInteractive",
|
|
68
|
+
attrs: deferredAttrs({ ...scriptProps, ...manualNonce ? { nonce: manualNonce } : {} }),
|
|
69
|
+
...typeof scriptProps.id === "string" ? { id: scriptProps.id } : {},
|
|
70
|
+
...src ? { src } : {},
|
|
71
|
+
...deferredContent !== undefined ? { content: deferredContent } : {}
|
|
72
|
+
});
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
function nextScriptWorkersEnabled() {
|
|
76
|
+
const experimental = getNextConfig().experimental;
|
|
77
|
+
return experimental?.nextScriptWorkers === true;
|
|
78
|
+
}
|
|
79
|
+
var PARTYTOWN_LIB_PATH = "/_next/static/~partytown/";
|
|
80
|
+
function partytownHeadScripts() {
|
|
81
|
+
const config = getNextConfig();
|
|
82
|
+
if (config.experimental?.nextScriptWorkers !== true)
|
|
83
|
+
return [];
|
|
84
|
+
const partytownConfig = {
|
|
85
|
+
lib: PARTYTOWN_LIB_PATH,
|
|
86
|
+
...config.partytown ?? {}
|
|
87
|
+
};
|
|
88
|
+
return [
|
|
89
|
+
{
|
|
90
|
+
props: { "data-partytown-config": "" },
|
|
91
|
+
content: `partytown = ${JSON.stringify(partytownConfig)};`
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
props: { "data-partytown": "" },
|
|
95
|
+
content: partytownSnippet(partytownConfig.lib)
|
|
96
|
+
}
|
|
97
|
+
];
|
|
98
|
+
}
|
|
99
|
+
function renderPartytownHeadScripts() {
|
|
100
|
+
return partytownHeadScripts().map(renderHeadScript).join("");
|
|
101
|
+
}
|
|
102
|
+
function partytownSnippet(lib) {
|
|
103
|
+
return `!(function(w,p,f,c){` + `c=w[p]=Object.assign(w[p]||{},{lib:${JSON.stringify(lib)}});` + `c.forward=c.forward||[];` + `f=document.createElement('script');` + `f.async=!0;f.src=c.lib+'partytown.js';` + `document.head.appendChild(f);` + `})(window,'partytown');`;
|
|
104
|
+
}
|
|
105
|
+
function deferredScripts() {
|
|
106
|
+
return renderBuffer("deferred");
|
|
107
|
+
}
|
|
108
|
+
function clearDeferredScripts() {
|
|
109
|
+
clearRenderBuffer("deferred");
|
|
110
|
+
}
|
|
111
|
+
function takeDeferredScripts() {
|
|
112
|
+
return takeRenderBuffer("deferred");
|
|
113
|
+
}
|
|
114
|
+
var DEFERRED_SKIP_PROPS = new Set(["src", "strategy", "dangerouslysetinnerhtml", "id"]);
|
|
115
|
+
function deferredAttrs(props) {
|
|
116
|
+
const attrs = {};
|
|
117
|
+
for (const [key, value] of Object.entries(props)) {
|
|
118
|
+
const name = attrName(key);
|
|
119
|
+
if (!isAttrName(name) || DEFERRED_SKIP_PROPS.has(name) || name.startsWith("on"))
|
|
120
|
+
continue;
|
|
121
|
+
if (value == null || value === false || typeof value === "function")
|
|
122
|
+
continue;
|
|
123
|
+
if (value === true) {
|
|
124
|
+
attrs[name] = "";
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
if (name === "class" && Array.isArray(value)) {
|
|
128
|
+
const className = value.filter((item) => typeof item === "string" || typeof item === "number").join(" ");
|
|
129
|
+
if (className)
|
|
130
|
+
attrs[name] = className;
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
if (typeof value === "string" || typeof value === "number" || typeof value === "bigint") {
|
|
134
|
+
attrs[name] = String(value);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return attrs;
|
|
138
|
+
}
|
|
139
|
+
var scriptDedupRegistry = new WeakMap;
|
|
140
|
+
function executedScriptKeys() {
|
|
141
|
+
const arr = renderBuffer("hints");
|
|
142
|
+
let keys = scriptDedupRegistry.get(arr);
|
|
143
|
+
if (!keys) {
|
|
144
|
+
keys = new Set;
|
|
145
|
+
scriptDedupRegistry.set(arr, keys);
|
|
146
|
+
}
|
|
147
|
+
return keys;
|
|
148
|
+
}
|
|
149
|
+
function headScripts() {
|
|
150
|
+
return renderBuffer("head");
|
|
151
|
+
}
|
|
152
|
+
function clearHeadScripts() {
|
|
153
|
+
clearRenderBuffer("head");
|
|
154
|
+
}
|
|
155
|
+
function takeHeadScripts() {
|
|
156
|
+
return takeRenderBuffer("head");
|
|
157
|
+
}
|
|
158
|
+
function renderHeadScripts() {
|
|
159
|
+
return takeHeadScripts().map(renderHeadScript).join(`
|
|
160
|
+
`);
|
|
161
|
+
}
|
|
162
|
+
function renderHeadScript(script) {
|
|
163
|
+
const attrs = scriptAttrs(script.props);
|
|
164
|
+
const open = attrs ? `<script ${attrs}>` : "<script>";
|
|
165
|
+
return script.content === undefined ? `${open}</script>` : `${open}${escapeScriptText(script.content)}</script>`;
|
|
166
|
+
}
|
|
167
|
+
function inlineScriptContent(props, children) {
|
|
168
|
+
if (typeof children === "string")
|
|
169
|
+
return children;
|
|
170
|
+
const dangerous = props.dangerouslySetInnerHTML;
|
|
171
|
+
if (dangerous && typeof dangerous === "object" && typeof dangerous.__html === "string") {
|
|
172
|
+
return dangerous.__html;
|
|
173
|
+
}
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
function scriptAttrs(props) {
|
|
177
|
+
const attrs = Object.entries(props).flatMap(([key, value]) => scriptAttr(attrName(key), value));
|
|
178
|
+
return attrs.join(" ");
|
|
179
|
+
}
|
|
180
|
+
function scriptAttr(name, value) {
|
|
181
|
+
if (!isAttrName(name))
|
|
182
|
+
return [];
|
|
183
|
+
if (value == null || value === false || typeof value === "function")
|
|
184
|
+
return [];
|
|
185
|
+
if (name === "strategy" || name === "dangerouslysetinnerhtml" || name.startsWith("on"))
|
|
186
|
+
return [];
|
|
187
|
+
if (value === true)
|
|
188
|
+
return [name];
|
|
189
|
+
if (name === "class" && Array.isArray(value)) {
|
|
190
|
+
const className = value.filter((item) => typeof item === "string" || typeof item === "number").join(" ");
|
|
191
|
+
return className ? [`class="${escapeHtml(className)}"`] : [];
|
|
192
|
+
}
|
|
193
|
+
if (typeof value !== "string" && typeof value !== "number" && typeof value !== "bigint") {
|
|
194
|
+
return [];
|
|
195
|
+
}
|
|
196
|
+
return [`${name}="${escapeHtml(value)}"`];
|
|
197
|
+
}
|
|
198
|
+
function attrName(key) {
|
|
199
|
+
if (key === "className")
|
|
200
|
+
return "class";
|
|
201
|
+
if (key === "htmlFor")
|
|
202
|
+
return "for";
|
|
203
|
+
return key.toLowerCase();
|
|
204
|
+
}
|
|
205
|
+
function isAttrName(name) {
|
|
206
|
+
return /^[a-zA-Z_:][a-zA-Z0-9:._-]*$/.test(name);
|
|
207
|
+
}
|
|
208
|
+
var scriptTerminator = /(<\/|<)(s)(cript)/gi;
|
|
209
|
+
function escapeScriptText(text) {
|
|
210
|
+
return text.replace(scriptTerminator, (_, prefix, s, suffix) => `${prefix}${s === "s" ? "\\u0073" : "\\u0053"}${suffix}`);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
export { Script, PARTYTOWN_LIB_PATH, partytownHeadScripts, renderPartytownHeadScripts, clearDeferredScripts, takeDeferredScripts, clearHeadScripts, takeHeadScripts, renderHeadScripts };
|