@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,112 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import {
|
|
3
|
+
restartCacheEnabled
|
|
4
|
+
} from "./index-knp0s912.js";
|
|
5
|
+
import {
|
|
6
|
+
frameworkFingerprint
|
|
7
|
+
} from "./index-gcmj16xy.js";
|
|
8
|
+
import {
|
|
9
|
+
writeFileAtomic
|
|
10
|
+
} from "./index-4da76t62.js";
|
|
11
|
+
import {
|
|
12
|
+
outCachePath
|
|
13
|
+
} from "./index-bzd2ef7t.js";
|
|
14
|
+
|
|
15
|
+
// src/compat/next/font/cache.ts
|
|
16
|
+
import { existsSync, readFileSync, writeFileSync } from "fs";
|
|
17
|
+
import { mkdir, stat } from "fs/promises";
|
|
18
|
+
import path from "path";
|
|
19
|
+
var INDEX_VERSION = 2;
|
|
20
|
+
var indexes = new Map;
|
|
21
|
+
function fontIndex(config) {
|
|
22
|
+
const file = path.join(outCachePath(config.outPath), "fonts", "index.json");
|
|
23
|
+
const existing = indexes.get(file);
|
|
24
|
+
if (existing)
|
|
25
|
+
return existing;
|
|
26
|
+
const created = { file, fonts: readIndex(file), dirty: false };
|
|
27
|
+
indexes.set(file, created);
|
|
28
|
+
process.on("exit", () => {
|
|
29
|
+
if (!created.dirty)
|
|
30
|
+
return;
|
|
31
|
+
created.dirty = false;
|
|
32
|
+
try {
|
|
33
|
+
writeFileSync(created.file, serializeIndex(created.fonts));
|
|
34
|
+
} catch {}
|
|
35
|
+
});
|
|
36
|
+
return created;
|
|
37
|
+
}
|
|
38
|
+
async function persistedFont(config, key) {
|
|
39
|
+
if (!restartCacheEnabled())
|
|
40
|
+
return;
|
|
41
|
+
const entry = fontIndex(config).fonts.get(key);
|
|
42
|
+
if (!entry)
|
|
43
|
+
return;
|
|
44
|
+
if (!entry.files.every((file) => existsSync(file)))
|
|
45
|
+
return;
|
|
46
|
+
const stats = await Promise.all(entry.sourceStats.map(async ([file, mtimeMs, size]) => {
|
|
47
|
+
const current = await stat(file).catch(() => {
|
|
48
|
+
return;
|
|
49
|
+
});
|
|
50
|
+
return current?.mtimeMs === mtimeMs && current.size === size;
|
|
51
|
+
}));
|
|
52
|
+
if (!stats.every(Boolean))
|
|
53
|
+
return;
|
|
54
|
+
return entry;
|
|
55
|
+
}
|
|
56
|
+
async function persistFont(config, key, font) {
|
|
57
|
+
const index = fontIndex(config);
|
|
58
|
+
const sourceStats = await Promise.all((font.sources ?? []).map(async (file) => {
|
|
59
|
+
const stats = await stat(file).catch(() => {
|
|
60
|
+
return;
|
|
61
|
+
});
|
|
62
|
+
return stats ? [file, stats.mtimeMs, stats.size] : undefined;
|
|
63
|
+
}));
|
|
64
|
+
if (sourceStats.some((entry) => entry === undefined))
|
|
65
|
+
return;
|
|
66
|
+
index.fonts.set(key, { ...font, sourceStats });
|
|
67
|
+
persist(index);
|
|
68
|
+
}
|
|
69
|
+
function persist(index) {
|
|
70
|
+
index.dirty = true;
|
|
71
|
+
if (index.flush)
|
|
72
|
+
return;
|
|
73
|
+
index.flush = setTimeout(async () => {
|
|
74
|
+
index.flush = undefined;
|
|
75
|
+
if (!index.dirty)
|
|
76
|
+
return;
|
|
77
|
+
const contents = serializeIndex(index.fonts);
|
|
78
|
+
try {
|
|
79
|
+
await mkdir(path.dirname(index.file), { recursive: true });
|
|
80
|
+
await writeFileAtomic(index.file, contents);
|
|
81
|
+
index.dirty = false;
|
|
82
|
+
} catch {}
|
|
83
|
+
}, 50);
|
|
84
|
+
}
|
|
85
|
+
function readIndex(file) {
|
|
86
|
+
const fonts = new Map;
|
|
87
|
+
let parsed;
|
|
88
|
+
try {
|
|
89
|
+
parsed = JSON.parse(readFileSync(file, "utf8"));
|
|
90
|
+
} catch {
|
|
91
|
+
return fonts;
|
|
92
|
+
}
|
|
93
|
+
if (parsed?.version !== INDEX_VERSION || parsed.runtime !== runtimeFingerprint()) {
|
|
94
|
+
return fonts;
|
|
95
|
+
}
|
|
96
|
+
for (const [key, entry] of Object.entries(parsed.fonts ?? {})) {
|
|
97
|
+
if (entry && Array.isArray(entry.files) && Array.isArray(entry.sourceStats)) {
|
|
98
|
+
fonts.set(key, entry);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return fonts;
|
|
102
|
+
}
|
|
103
|
+
function serializeIndex(fonts) {
|
|
104
|
+
return JSON.stringify({
|
|
105
|
+
version: INDEX_VERSION,
|
|
106
|
+
runtime: runtimeFingerprint(),
|
|
107
|
+
fonts: Object.fromEntries(fonts)
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
var runtimeFingerprint = () => frameworkFingerprint();
|
|
111
|
+
|
|
112
|
+
export { persistedFont, persistFont };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
// src/utils/code.ts
|
|
3
|
+
function escapeRegex(value) {
|
|
4
|
+
return value.replace(/[\\^$.*+?()[\]{}|]/g, "\\$&");
|
|
5
|
+
}
|
|
6
|
+
function specifierSniffTokens(keys) {
|
|
7
|
+
const heads = [
|
|
8
|
+
...new Set([...keys].map((key) => {
|
|
9
|
+
const head = key.split("/").slice(0, key.startsWith("@") ? 2 : 1).join("/");
|
|
10
|
+
return head.replace(/\*.*$/, "");
|
|
11
|
+
}))
|
|
12
|
+
];
|
|
13
|
+
return heads.filter((head) => !heads.some((other) => other !== head && head.startsWith(other)));
|
|
14
|
+
}
|
|
15
|
+
function uniqueIdentifier(source, base, ...used) {
|
|
16
|
+
const usedNames = new Set(used);
|
|
17
|
+
let name = base;
|
|
18
|
+
let index = 0;
|
|
19
|
+
while (source.includes(name) || usedNames.has(name)) {
|
|
20
|
+
index += 1;
|
|
21
|
+
name = `${base}${index}`;
|
|
22
|
+
}
|
|
23
|
+
return name;
|
|
24
|
+
}
|
|
25
|
+
function isIdentifier(value) {
|
|
26
|
+
return /^[A-Za-z_$][\w$]*$/.test(value);
|
|
27
|
+
}
|
|
28
|
+
function esbuildEntryExportNames(code) {
|
|
29
|
+
const scope = entryCommonJsScope(code);
|
|
30
|
+
const assignments = [
|
|
31
|
+
...scope.matchAll(/module\.exports\s*=\s*(?:[A-Za-z_$][\w$]*\s*\(\s*)?([A-Za-z_$][\w$]*)\s*\)?\s*[;\n]/g)
|
|
32
|
+
];
|
|
33
|
+
const entryVar = assignments.at(-1)?.[1];
|
|
34
|
+
if (!entryVar)
|
|
35
|
+
return [];
|
|
36
|
+
const exportCall = new RegExp(`[A-Za-z_$][\\w$]*\\(\\s*${escapeRegex(entryVar)}\\s*,\\s*\\{([\\s\\S]*?)\\}\\s*\\)`).exec(scope);
|
|
37
|
+
if (!exportCall?.[1])
|
|
38
|
+
return [];
|
|
39
|
+
return [
|
|
40
|
+
...exportCall[1].matchAll(/(?:^|,)\s*(?:["']([^"']+)["']|([A-Za-z_$][\w$]*))\s*:\s*\(\s*\)\s*=>/g)
|
|
41
|
+
].map((match) => match[1] ?? match[2]).filter((name) => Boolean(name && isIdentifier(name)));
|
|
42
|
+
}
|
|
43
|
+
function entryCommonJsScope(code) {
|
|
44
|
+
const wrapper = /(^|\n)export default ([A-Za-z_$][\w$]*)\(\)/.exec(code)?.[2];
|
|
45
|
+
if (!wrapper)
|
|
46
|
+
return code;
|
|
47
|
+
const start = code.lastIndexOf(`var ${wrapper} = `);
|
|
48
|
+
return start === -1 ? code : code.slice(start);
|
|
49
|
+
}
|
|
50
|
+
function stripComments(source) {
|
|
51
|
+
return source.replace(/\/\*[\s\S]*?\*\//g, "").replace(/(^|[^:])\/\/.*$/gm, "$1");
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export { escapeRegex, specifierSniffTokens, uniqueIdentifier, isIdentifier, esbuildEntryExportNames, stripComments };
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import {
|
|
3
|
+
getWorkUnit,
|
|
4
|
+
runWithRequest
|
|
5
|
+
} from "./index-grta8ap3.js";
|
|
6
|
+
import {
|
|
7
|
+
getRenderExtensions,
|
|
8
|
+
reportRequestError
|
|
9
|
+
} from "./index-zqpqyg8p.js";
|
|
10
|
+
|
|
11
|
+
// src/routing/handler.ts
|
|
12
|
+
import { isNotFoundError, isRedirectError } from "../../../src/api/navigation.ts";
|
|
13
|
+
import { nextResponseMeta, toNextRequest } from "../../../src/api/server.ts";
|
|
14
|
+
import { safeDecode } from "../../../src/utils/decode.ts";
|
|
15
|
+
var routeMethods = ["GET", "HEAD", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"];
|
|
16
|
+
var httpMethods = new Set([
|
|
17
|
+
"GET",
|
|
18
|
+
"HEAD",
|
|
19
|
+
"POST",
|
|
20
|
+
"PUT",
|
|
21
|
+
"PATCH",
|
|
22
|
+
"DELETE",
|
|
23
|
+
"OPTIONS",
|
|
24
|
+
"CONNECT",
|
|
25
|
+
"TRACE"
|
|
26
|
+
]);
|
|
27
|
+
async function handleRouteModule(module, request, params, options = {}) {
|
|
28
|
+
const responseHeaders = new Headers;
|
|
29
|
+
const method = request.method.toUpperCase();
|
|
30
|
+
try {
|
|
31
|
+
if (!httpMethods.has(method))
|
|
32
|
+
return new Response(null, { status: 400 });
|
|
33
|
+
const handler = routeMethods.includes(method) ? module[method] : undefined;
|
|
34
|
+
if (!handler) {
|
|
35
|
+
if (method === "HEAD" && module.GET) {
|
|
36
|
+
const response = finalizeResponse(await callHandler(module.GET, request, params, responseHeaders), request, responseHeaders, options);
|
|
37
|
+
return new Response(null, { status: response.status, headers: response.headers });
|
|
38
|
+
}
|
|
39
|
+
return missingMethodResponse(module, method);
|
|
40
|
+
}
|
|
41
|
+
return finalizeResponse(await callHandler(handler, request, params, responseHeaders), request, responseHeaders, options);
|
|
42
|
+
} catch (error) {
|
|
43
|
+
if (isRedirectError(error)) {
|
|
44
|
+
const status = method === "POST" ? 303 : error.status;
|
|
45
|
+
return withResponseHeaders(new Response(null, { status, headers: { location: error.location } }), responseHeaders);
|
|
46
|
+
}
|
|
47
|
+
if (isNotFoundError(error)) {
|
|
48
|
+
return withResponseHeaders(new Response(null, { status: 404 }), responseHeaders);
|
|
49
|
+
}
|
|
50
|
+
await reportRequestError(error, { method, url: request.url, headers: request.headers }, { phase: "handler", routeKind: "route-handler", ...getWorkUnit()?.responseHints ?? {} });
|
|
51
|
+
console.error(error);
|
|
52
|
+
return new Response(null, { status: 500 });
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function finalizeResponse(response, request, responseHeaders, options) {
|
|
56
|
+
const method = request.method.toUpperCase();
|
|
57
|
+
if (!response) {
|
|
58
|
+
const file = options.routeFile ?? "<route>";
|
|
59
|
+
console.error(`No response is returned from route handler '${file}'. Expected a Response object but ` + `received '${typeof response}' (method: ${method}, url: ${request.url}). Ensure you ` + "return a `Response` or a `NextResponse` in all branches of your handler.");
|
|
60
|
+
return new Response(null, { status: 500 });
|
|
61
|
+
}
|
|
62
|
+
if (nextResponseMeta(response)?.kind === "next") {
|
|
63
|
+
console.error("https://nextjs.org/docs/messages/next-response-next-in-app-route-handler");
|
|
64
|
+
return new Response(null, { status: 500 });
|
|
65
|
+
}
|
|
66
|
+
return withResponseHeaders(response, responseHeaders);
|
|
67
|
+
}
|
|
68
|
+
function callHandler(handler, request, params, responseHeaders) {
|
|
69
|
+
const nextRequest = toNextRequest(request);
|
|
70
|
+
const context = Object.keys(params).length > 0 ? {
|
|
71
|
+
params: getRenderExtensions().legacySyncProps(Promise.resolve(params), "params", params)
|
|
72
|
+
} : {};
|
|
73
|
+
return runWithRequest(nextRequest, () => handler(nextRequest, context), params, {
|
|
74
|
+
responseHeaders
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
function withResponseHeaders(response, extra) {
|
|
78
|
+
const withSetCookie = extra;
|
|
79
|
+
const scopeCookies = withSetCookie.getSetCookie?.() ?? [];
|
|
80
|
+
let hasOthers = false;
|
|
81
|
+
extra.forEach((_, key) => {
|
|
82
|
+
if (key !== "set-cookie")
|
|
83
|
+
hasOthers = true;
|
|
84
|
+
});
|
|
85
|
+
if (scopeCookies.length === 0 && !hasOthers)
|
|
86
|
+
return response;
|
|
87
|
+
const apply = (headers) => {
|
|
88
|
+
extra.forEach((value, key) => {
|
|
89
|
+
if (key !== "set-cookie")
|
|
90
|
+
headers.set(key, value);
|
|
91
|
+
});
|
|
92
|
+
const responseCookies = headers.getSetCookie?.() ?? [];
|
|
93
|
+
const jar = new Map;
|
|
94
|
+
for (const cookie of [...scopeCookies, ...responseCookies]) {
|
|
95
|
+
jar.set(cookieName(cookie), normalizeSetCookie(cookie));
|
|
96
|
+
}
|
|
97
|
+
headers.delete("set-cookie");
|
|
98
|
+
for (const cookie of jar.values())
|
|
99
|
+
headers.append("set-cookie", cookie);
|
|
100
|
+
};
|
|
101
|
+
try {
|
|
102
|
+
apply(response.headers);
|
|
103
|
+
return response;
|
|
104
|
+
} catch {
|
|
105
|
+
const headers = new Headers(response.headers);
|
|
106
|
+
apply(headers);
|
|
107
|
+
return new Response(response.body, {
|
|
108
|
+
status: response.status,
|
|
109
|
+
statusText: response.statusText,
|
|
110
|
+
headers
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
function cookieName(setCookie) {
|
|
115
|
+
return (setCookie.split("=")[0] ?? "").trim();
|
|
116
|
+
}
|
|
117
|
+
function normalizeSetCookie(setCookie) {
|
|
118
|
+
return /;\s*path=/i.test(setCookie) ? setCookie : `${setCookie}; Path=/`;
|
|
119
|
+
}
|
|
120
|
+
async function staticRouteParams(route, module) {
|
|
121
|
+
if (typeof module.GET !== "function")
|
|
122
|
+
return [];
|
|
123
|
+
const config = route.segmentConfig;
|
|
124
|
+
const optedStatic = config?.dynamic === "force-static" || config?.dynamic === "error" || config?.revalidate === false || typeof config?.revalidate === "number" && config.revalidate > 0;
|
|
125
|
+
if (route.hasStaticParams)
|
|
126
|
+
return module.params?.() ?? [];
|
|
127
|
+
if (route.usesRequest && !optedStatic)
|
|
128
|
+
return [];
|
|
129
|
+
return route.mode === "static" || optedStatic ? [{}] : [];
|
|
130
|
+
}
|
|
131
|
+
function routeParamsFromPath(route, pathname) {
|
|
132
|
+
const match = new RegExp(`^${route.pattern}$`).exec(pathname);
|
|
133
|
+
const params = {};
|
|
134
|
+
if (!match)
|
|
135
|
+
return params;
|
|
136
|
+
for (let index = 0;index < route.params.length; index += 1) {
|
|
137
|
+
params[route.params[index]] = safeDecode(match[index + 1] ?? "");
|
|
138
|
+
}
|
|
139
|
+
if (route.catchAll) {
|
|
140
|
+
params[route.catchAll] = (match[route.params.length + 1] ?? "").split("/").filter(Boolean).map(safeDecode);
|
|
141
|
+
}
|
|
142
|
+
return params;
|
|
143
|
+
}
|
|
144
|
+
function missingMethodResponse(module, method) {
|
|
145
|
+
const headers = { Allow: allowedMethods(module).join(", ") };
|
|
146
|
+
if (method === "OPTIONS")
|
|
147
|
+
return new Response(null, { status: 204, headers });
|
|
148
|
+
return new Response(null, { status: 405, headers });
|
|
149
|
+
}
|
|
150
|
+
function allowedMethods(module) {
|
|
151
|
+
const allowed = new Set(routeMethods.filter((method) => typeof module[method] === "function"));
|
|
152
|
+
if (allowed.has("GET"))
|
|
153
|
+
allowed.add("HEAD");
|
|
154
|
+
allowed.add("OPTIONS");
|
|
155
|
+
return [...allowed].sort();
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
export { handleRouteModule, staticRouteParams, routeParamsFromPath };
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
// src/compat/next/user-agent.ts
|
|
3
|
+
var URLPattern = globalThis.URLPattern;
|
|
4
|
+
var botPattern = /bot|crawler|spider|crawling|slurp|bingpreview|facebookexternalhit|mediapartners|headless/i;
|
|
5
|
+
function userAgentFromString(input) {
|
|
6
|
+
const ua = input ?? "";
|
|
7
|
+
return {
|
|
8
|
+
ua,
|
|
9
|
+
browser: parseBrowser(ua),
|
|
10
|
+
os: parseOs(ua),
|
|
11
|
+
device: parseDevice(ua),
|
|
12
|
+
engine: parseEngine(ua),
|
|
13
|
+
cpu: parseCpu(ua),
|
|
14
|
+
isBot: botPattern.test(ua)
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function userAgent({ headers }) {
|
|
18
|
+
return userAgentFromString(headers.get("user-agent") ?? undefined);
|
|
19
|
+
}
|
|
20
|
+
function parseBrowser(ua) {
|
|
21
|
+
const edge = ua.match(/Edg(?:e|A|iOS)?\/([\d.]+)/);
|
|
22
|
+
if (edge)
|
|
23
|
+
return { name: "Edge", version: edge[1] };
|
|
24
|
+
const samsung = ua.match(/SamsungBrowser\/([\d.]+)/);
|
|
25
|
+
if (samsung)
|
|
26
|
+
return { name: "Samsung Internet", version: samsung[1] };
|
|
27
|
+
const chrome = ua.match(/(?:Chrome|CriOS)\/([\d.]+)/);
|
|
28
|
+
if (chrome)
|
|
29
|
+
return { name: "Chrome", version: chrome[1] };
|
|
30
|
+
const firefox = ua.match(/(?:Firefox|FxiOS)\/([\d.]+)/);
|
|
31
|
+
if (firefox)
|
|
32
|
+
return { name: "Firefox", version: firefox[1] };
|
|
33
|
+
if (ua.includes("Safari"))
|
|
34
|
+
return { name: "Safari", version: ua.match(/Version\/([\d.]+)/)?.[1] };
|
|
35
|
+
return {};
|
|
36
|
+
}
|
|
37
|
+
function parseEngine(ua) {
|
|
38
|
+
const gecko = ua.match(/rv:([\d.]+)\).*Gecko/);
|
|
39
|
+
if (gecko)
|
|
40
|
+
return { name: "Gecko", version: gecko[1] };
|
|
41
|
+
const webkit = ua.match(/AppleWebKit\/([\d.]+)/);
|
|
42
|
+
if (webkit) {
|
|
43
|
+
const chrome = ua.match(/(?:Chrome|CriOS|Edg(?:e|A|iOS)?|OPR)\/([\d.]+)/);
|
|
44
|
+
if (chrome)
|
|
45
|
+
return { name: "Blink", version: chrome[1] };
|
|
46
|
+
return { name: "WebKit", version: webkit[1] };
|
|
47
|
+
}
|
|
48
|
+
return {};
|
|
49
|
+
}
|
|
50
|
+
function parseCpu(ua) {
|
|
51
|
+
if (/arm64|aarch64/i.test(ua))
|
|
52
|
+
return { architecture: "arm64" };
|
|
53
|
+
if (/\barm\b/i.test(ua))
|
|
54
|
+
return { architecture: "arm" };
|
|
55
|
+
if (/x86_64|x64|Win64|WOW64/i.test(ua))
|
|
56
|
+
return { architecture: "amd64" };
|
|
57
|
+
if (/i686|\bx86\b/i.test(ua))
|
|
58
|
+
return { architecture: "ia32" };
|
|
59
|
+
return {};
|
|
60
|
+
}
|
|
61
|
+
function parseOs(ua) {
|
|
62
|
+
if (ua.includes("Windows"))
|
|
63
|
+
return { name: "Windows", version: ua.match(/Windows NT ([\d.]+)/)?.[1] };
|
|
64
|
+
if (ua.includes("Android"))
|
|
65
|
+
return { name: "Android", version: ua.match(/Android ([\d.]+)/)?.[1] };
|
|
66
|
+
if (/iPhone|iPad|iPod/.test(ua)) {
|
|
67
|
+
return { name: "iOS", version: ua.match(/OS (\d+(?:[_.]\d+)*)/)?.[1]?.replace(/_/g, ".") };
|
|
68
|
+
}
|
|
69
|
+
if (ua.includes("Mac OS X")) {
|
|
70
|
+
return {
|
|
71
|
+
name: "Mac OS",
|
|
72
|
+
version: ua.match(/Mac OS X (\d+(?:[_.]\d+)*)/)?.[1]?.replace(/_/g, ".")
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
if (ua.includes("Linux"))
|
|
76
|
+
return { name: "Linux" };
|
|
77
|
+
return {};
|
|
78
|
+
}
|
|
79
|
+
function parseDevice(ua) {
|
|
80
|
+
if (ua.includes("iPhone"))
|
|
81
|
+
return { type: "mobile", vendor: "Apple", model: "iPhone" };
|
|
82
|
+
if (ua.includes("iPad"))
|
|
83
|
+
return { type: "tablet", vendor: "Apple", model: "iPad" };
|
|
84
|
+
if (ua.includes("Android")) {
|
|
85
|
+
const type = ua.includes("Mobile") ? "mobile" : "tablet";
|
|
86
|
+
const samsung = ua.match(/\b(SM-[\w]+)\b/);
|
|
87
|
+
if (samsung)
|
|
88
|
+
return { type, vendor: "Samsung", model: samsung[1] };
|
|
89
|
+
const pixel = ua.match(/;\s*(Pixel[\w ]*?)\s*(?:Build|\))/);
|
|
90
|
+
if (pixel)
|
|
91
|
+
return { type, vendor: "Google", model: pixel[1] };
|
|
92
|
+
return { type };
|
|
93
|
+
}
|
|
94
|
+
return ua.includes("Mobile") ? { type: "mobile" } : {};
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export { URLPattern, userAgentFromString, userAgent };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
// src/client/reference.ts
|
|
3
|
+
import { createHash } from "crypto";
|
|
4
|
+
import path from "path";
|
|
5
|
+
var compiledClientReferences = new Set;
|
|
6
|
+
function noteCompiledClientReference(file) {
|
|
7
|
+
compiledClientReferences.add(path.resolve(file));
|
|
8
|
+
}
|
|
9
|
+
function compiledClientReferenceFiles() {
|
|
10
|
+
return compiledClientReferences;
|
|
11
|
+
}
|
|
12
|
+
var clientReferenceSymbol = Symbol.for("pnext.clientReference");
|
|
13
|
+
function clientReferenceId(file, exportName) {
|
|
14
|
+
return createHash("sha256").update(file).update("\x00").update(exportName).digest("hex").slice(0, 10);
|
|
15
|
+
}
|
|
16
|
+
function ssrClientReference(reference) {
|
|
17
|
+
if (reference.sideEffect)
|
|
18
|
+
return false;
|
|
19
|
+
if (reference.dynamic?.ssr === false)
|
|
20
|
+
return false;
|
|
21
|
+
if (reference.dynamic?.load === "visible" && reference.dynamic.ssr !== true)
|
|
22
|
+
return false;
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export { noteCompiledClientReference, compiledClientReferenceFiles, clientReferenceSymbol, clientReferenceId, ssrClientReference };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import {
|
|
3
|
+
getAssetExtensions
|
|
4
|
+
} from "./index-zqpqyg8p.js";
|
|
5
|
+
|
|
6
|
+
// src/cli/serve/immutable.ts
|
|
7
|
+
var immutableCacheControl = "public, max-age=31536000, immutable";
|
|
8
|
+
function immutableAssetPath(relativePath) {
|
|
9
|
+
return immutableAssetPrefixes().some((prefix) => relativePath.startsWith(prefix));
|
|
10
|
+
}
|
|
11
|
+
function immutableAssetPrefixes() {
|
|
12
|
+
return [
|
|
13
|
+
"assets/",
|
|
14
|
+
"_next/static/",
|
|
15
|
+
...getAssetExtensions().staticAssetPublicPrefixes().map((prefix) => prefix.replace(/^\/+/, ""))
|
|
16
|
+
];
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export { immutableCacheControl, immutableAssetPath, immutableAssetPrefixes };
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import {
|
|
3
|
+
compileSource,
|
|
4
|
+
evaluateConditions,
|
|
5
|
+
loadNextConfig,
|
|
6
|
+
loadResolvedNextConfig,
|
|
7
|
+
parseConditions,
|
|
8
|
+
substitute
|
|
9
|
+
} from "./index-he6n2bvp.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 };
|