@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,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-asset naming and the CSS-module runtime: what a render needs to link stylesheets. The CSS
|
|
3
|
+
* compiler lives in `./build`; a production server never loads it.
|
|
4
|
+
*/
|
|
5
|
+
import { existsSync } from 'node:fs'
|
|
6
|
+
import { readFile, writeFile } from 'node:fs/promises'
|
|
7
|
+
import path from 'node:path'
|
|
8
|
+
import { getCssExtensions } from '../extensions'
|
|
9
|
+
import { nextCompatEnabled } from '../render/hooks'
|
|
10
|
+
import { productionRelease } from '../runtime/production'
|
|
11
|
+
import { hashedAssetName } from '../utils/asset-hash'
|
|
12
|
+
import { cssModuleScopePath, ensureDir, readText } from '../utils/fs'
|
|
13
|
+
import type { ResolvedConfig } from '../config'
|
|
14
|
+
import type { RouteManifestEntry } from '../types'
|
|
15
|
+
|
|
16
|
+
let build: Promise<typeof import('./build')> | undefined
|
|
17
|
+
|
|
18
|
+
export async function globalCssHref(config: ResolvedConfig) {
|
|
19
|
+
const sources =
|
|
20
|
+
productionRelease(config)?.globalCss ??
|
|
21
|
+
(await (build ??= import('./build'))).globalCssSources(config)
|
|
22
|
+
return sources.length > 0 ? assetHref(config, 'global.css') : undefined
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export type AssetHrefConfig = Pick<ResolvedConfig, 'assetPrefix' | 'compat' | 'outPath'>
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Logical build-asset name -> the content-hashed name the build actually emitted
|
|
29
|
+
* (`global.css` -> `global-1f4a9c2b3d5e6f70.css`). A production asset name must
|
|
30
|
+
* carry its content, or the URL cannot honestly be served `immutable`: the same
|
|
31
|
+
* name would answer different bytes after a deploy.
|
|
32
|
+
*
|
|
33
|
+
* Keyed by outPath, never process-global: one process builds several apps (the
|
|
34
|
+
* test suite does it constantly) and their names must not cross. Empty in dev,
|
|
35
|
+
* where names stay flat and every asset is served `no-cache` anyway.
|
|
36
|
+
*/
|
|
37
|
+
const emittedAssets = new Map<string, Map<string, string>>()
|
|
38
|
+
|
|
39
|
+
export function recordEmittedAsset(outPath: string, logical: string, emitted: string): void {
|
|
40
|
+
const names = emittedAssets.get(outPath) ?? new Map<string, string>()
|
|
41
|
+
names.set(logical, emitted)
|
|
42
|
+
emittedAssets.set(outPath, names)
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** Re-publish the build's name map at server boot (see BuildManifest.assetNames). */
|
|
46
|
+
export function publishEmittedAssets(
|
|
47
|
+
outPath: string,
|
|
48
|
+
names: Record<string, string> | undefined,
|
|
49
|
+
): void {
|
|
50
|
+
if (!names) return
|
|
51
|
+
for (const [logical, emitted] of Object.entries(names))
|
|
52
|
+
recordEmittedAsset(outPath, logical, emitted)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export function emittedAssetNames(outPath: string): Record<string, string> {
|
|
56
|
+
return Object.fromEntries(emittedAssets.get(outPath) ?? [])
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export function clearEmittedAssets(outPath: string): void {
|
|
60
|
+
emittedAssets.delete(outPath)
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/** The file name a logical asset name resolves to. Identity until a build records one. */
|
|
64
|
+
export function emittedAssetName(
|
|
65
|
+
config: Pick<ResolvedConfig, 'outPath'> | undefined,
|
|
66
|
+
name: string,
|
|
67
|
+
): string {
|
|
68
|
+
if (!config?.outPath) return name
|
|
69
|
+
return emittedAssets.get(config.outPath)?.get(name) ?? name
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Where a built asset lives in the URL space. next-compat serves the build output under Next's
|
|
73
|
+
// static path, so a compat app's document references its CSS/JS exactly as Next does; core keeps
|
|
74
|
+
// `/assets/`. Every document-emitted build-asset URL goes through here (and the dev/prod servers
|
|
75
|
+
// accept both spellings), so an emitted href can never name a path the server will not serve —
|
|
76
|
+
// including the content hash the production name carries.
|
|
77
|
+
export function assetPathname(
|
|
78
|
+
config: Pick<ResolvedConfig, 'compat' | 'outPath'> | undefined,
|
|
79
|
+
name: string,
|
|
80
|
+
) {
|
|
81
|
+
const emitted = emittedAssetName(config, name)
|
|
82
|
+
return nextCompatEnabled(config ?? {}) ? `/_next/static/${emitted}` : `/assets/${emitted}`
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export function assetHref(config: AssetHrefConfig | undefined, name: string) {
|
|
86
|
+
return withAssetPrefix(config, assetPathname(config, name))
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// A route's built CSS filenames - the one rule behind the document's links, the
|
|
90
|
+
// inline-CSS path and analyze, so no consumer can disagree about whether a
|
|
91
|
+
// route has CSS. compat cssChunking records split names in cssAssets.
|
|
92
|
+
export function routeCssAssetNames(
|
|
93
|
+
route: Pick<RouteManifestEntry, 'id' | 'cssImports' | 'cssAssets'>,
|
|
94
|
+
): string[] {
|
|
95
|
+
if (route.cssImports.length === 0) return []
|
|
96
|
+
return route.cssAssets?.length ? route.cssAssets : [`${route.id}.css`]
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export function routeCssHref(
|
|
100
|
+
route: RouteManifestEntry,
|
|
101
|
+
config?: AssetHrefConfig,
|
|
102
|
+
): string | string[] | undefined {
|
|
103
|
+
const assets = routeCssAssetNames(route)
|
|
104
|
+
if (assets.length === 0) return undefined
|
|
105
|
+
return assets.map(asset => assetHref(config, asset))
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Put a render's next/font rules in the first stylesheet chunk, matching Next's
|
|
110
|
+
* linked CSS delivery without changing the rest of the route's chunk order.
|
|
111
|
+
*/
|
|
112
|
+
export async function emitFontCssStylesheet(
|
|
113
|
+
config: ResolvedConfig,
|
|
114
|
+
routeId: string,
|
|
115
|
+
fontCss: string,
|
|
116
|
+
baseAsset: string | undefined,
|
|
117
|
+
options: { dev: boolean },
|
|
118
|
+
) {
|
|
119
|
+
const outDir = path.join(config.outPath, options.dev ? 'cache' : 'static', 'assets')
|
|
120
|
+
await ensureDir(outDir)
|
|
121
|
+
const baseFile = baseAsset ? path.join(outDir, baseAsset) : undefined
|
|
122
|
+
const baseCss = baseFile && existsSync(baseFile) ? await readFile(baseFile, 'utf8') : ''
|
|
123
|
+
const contents = [fontCss, baseCss].filter(Boolean).join('\n')
|
|
124
|
+
const logicalName = baseAsset
|
|
125
|
+
? baseAsset.replace(/-[0-9a-f]{16}(?=\.css$)/, '')
|
|
126
|
+
: `${routeId}.css`
|
|
127
|
+
const name = hashedAssetName(logicalName, contents)
|
|
128
|
+
const file = path.join(outDir, name)
|
|
129
|
+
if (!existsSync(file) || (await readFile(file, 'utf8')) !== contents)
|
|
130
|
+
await writeFile(file, contents)
|
|
131
|
+
return name
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// Prepend the configured assetPrefix (a CDN origin or path) to an app-absolute
|
|
135
|
+
// asset URL. Link hrefs use basePath instead and must NOT go through here.
|
|
136
|
+
export function withAssetPrefix(
|
|
137
|
+
config: Pick<ResolvedConfig, 'assetPrefix'> | undefined,
|
|
138
|
+
href: string,
|
|
139
|
+
) {
|
|
140
|
+
const prefix = config?.assetPrefix
|
|
141
|
+
if (!prefix) return href
|
|
142
|
+
return `${prefix.replace(/\/$/, '')}${href}`
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
let cssRuntimeRegistered = false
|
|
146
|
+
|
|
147
|
+
export function registerCssRuntime() {
|
|
148
|
+
if (cssRuntimeRegistered) return
|
|
149
|
+
cssRuntimeRegistered = true
|
|
150
|
+
|
|
151
|
+
Bun.plugin({
|
|
152
|
+
name: 'pnext-css-runtime',
|
|
153
|
+
setup(plugin) {
|
|
154
|
+
plugin.onLoad({ filter: /\.(?:css|scss|sass)$/ }, async ({ path: file }) =>
|
|
155
|
+
isCssModuleFile(file)
|
|
156
|
+
? {
|
|
157
|
+
exports: { default: await cssModuleMapping(file) },
|
|
158
|
+
loader: 'object',
|
|
159
|
+
}
|
|
160
|
+
: {
|
|
161
|
+
contents: 'export default undefined;',
|
|
162
|
+
loader: 'js',
|
|
163
|
+
},
|
|
164
|
+
)
|
|
165
|
+
},
|
|
166
|
+
})
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// Sass is unsupported (no compiler); its imports still must not break the
|
|
170
|
+
// bundle, so .scss/.sass load as empty modules with module class-name maps.
|
|
171
|
+
export function isCssModuleFile(file: string) {
|
|
172
|
+
return /\.module\.(?:css|scss|sass)$/.test(file)
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
export async function cssModuleMapping(file: string) {
|
|
176
|
+
// Compat handles *.module.{scss,sass} (sass compiles + scopes); core keeps
|
|
177
|
+
// plain .module.css. Lazy read: the registry populates at compat bootstrap.
|
|
178
|
+
const compatMapping = getCssExtensions().resolveCssModule(file)
|
|
179
|
+
if (compatMapping) return compatMapping
|
|
180
|
+
const source = await readText(file)
|
|
181
|
+
const classNames = cssClassNames(source)
|
|
182
|
+
|
|
183
|
+
return Object.fromEntries(
|
|
184
|
+
[...classNames].map(className => [className, cssModuleClassName(file, className)]),
|
|
185
|
+
)
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
export function cssClassNames(source: string) {
|
|
189
|
+
const classNames = new Set<string>()
|
|
190
|
+
const classPattern = /(^|[^\\])\.(-?[_a-zA-Z][\w-]*)/g
|
|
191
|
+
let match: RegExpExecArray | null
|
|
192
|
+
|
|
193
|
+
while ((match = classPattern.exec(source))) {
|
|
194
|
+
if (match[2]) classNames.add(match[2])
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
return classNames
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
export function cssModuleClassName(file: string, className: string) {
|
|
201
|
+
const base = path
|
|
202
|
+
.basename(file)
|
|
203
|
+
.replace(/\.module\.css$/, '')
|
|
204
|
+
.replace(/[^_a-zA-Z0-9]/g, '_')
|
|
205
|
+
const hash = pathHash(cssModuleScopePath(file))
|
|
206
|
+
return `${base}_${className}_${hash}`
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
function pathHash(file: string) {
|
|
210
|
+
let hash = 5381
|
|
211
|
+
for (const char of file) hash = ((hash << 5) + hash) ^ char.charCodeAt(0)
|
|
212
|
+
return (hash >>> 0).toString(36).slice(0, 5)
|
|
213
|
+
}
|