@nifrajs/web 3.3.0 → 4.0.0
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/dist/backend-only.d.ts +15 -0
- package/dist/backend-only.d.ts.map +1 -0
- package/dist/backend-only.js +16 -0
- package/dist/backend-only.js.map +1 -0
- package/dist/boundary.d.ts +5 -0
- package/dist/boundary.d.ts.map +1 -1
- package/dist/boundary.js +11 -2
- package/dist/boundary.js.map +1 -1
- package/dist/build-plan.d.ts +35 -6
- package/dist/build-plan.d.ts.map +1 -1
- package/dist/build-plan.js +89 -35
- package/dist/build-plan.js.map +1 -1
- package/dist/build-vite.d.ts +18 -0
- package/dist/build-vite.d.ts.map +1 -1
- package/dist/build-vite.js +97 -17
- package/dist/build-vite.js.map +1 -1
- package/dist/build.d.ts +72 -23
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +411 -98
- package/dist/build.js.map +1 -1
- package/dist/bun-dev-entry.d.ts +1 -1
- package/dist/bun-dev-entry.js +1 -1
- package/dist/cdn.d.ts +74 -0
- package/dist/cdn.d.ts.map +1 -0
- package/dist/cdn.js +132 -0
- package/dist/cdn.js.map +1 -0
- package/dist/client.d.ts +21 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +226 -15
- package/dist/client.js.map +1 -1
- package/dist/conformance.d.ts +4 -3
- package/dist/conformance.d.ts.map +1 -1
- package/dist/conformance.js +12 -3
- package/dist/conformance.js.map +1 -1
- package/dist/csp.d.ts +93 -0
- package/dist/csp.d.ts.map +1 -0
- package/dist/csp.js +122 -0
- package/dist/csp.js.map +1 -0
- package/dist/css-contract.d.ts +21 -0
- package/dist/css-contract.d.ts.map +1 -0
- package/dist/css-contract.js +28 -0
- package/dist/css-contract.js.map +1 -0
- package/dist/dev-client.d.ts +76 -0
- package/dist/dev-client.d.ts.map +1 -0
- package/dist/dev-client.js +280 -0
- package/dist/dev-client.js.map +1 -0
- package/dist/dev-diagnostics.d.ts +26 -2
- package/dist/dev-diagnostics.d.ts.map +1 -1
- package/dist/dev-diagnostics.js +38 -7
- package/dist/dev-diagnostics.js.map +1 -1
- package/dist/dev-error.d.ts +4 -13
- package/dist/dev-error.d.ts.map +1 -1
- package/dist/dev-error.js +46 -4
- package/dist/dev-error.js.map +1 -1
- package/dist/dev-feed.d.ts +298 -0
- package/dist/dev-feed.d.ts.map +1 -0
- package/dist/dev-feed.js +797 -0
- package/dist/dev-feed.js.map +1 -0
- package/dist/dev-indicator.d.ts +38 -0
- package/dist/dev-indicator.d.ts.map +1 -0
- package/dist/dev-indicator.js +93 -0
- package/dist/dev-indicator.js.map +1 -0
- package/dist/dev-session.d.ts +77 -0
- package/dist/dev-session.d.ts.map +1 -0
- package/dist/dev-session.js +580 -0
- package/dist/dev-session.js.map +1 -0
- package/dist/dev-sourcemap.d.ts +27 -0
- package/dist/dev-sourcemap.d.ts.map +1 -0
- package/dist/dev-sourcemap.js +235 -0
- package/dist/dev-sourcemap.js.map +1 -0
- package/dist/dev-ssr-graph.d.ts.map +1 -1
- package/dist/dev-ssr-graph.js +13 -5
- package/dist/dev-ssr-graph.js.map +1 -1
- package/dist/dev.d.ts +15 -2
- package/dist/dev.d.ts.map +1 -1
- package/dist/dev.js +69 -44
- package/dist/dev.js.map +1 -1
- package/dist/diagnostic-catalog.d.ts +35 -0
- package/dist/diagnostic-catalog.d.ts.map +1 -0
- package/dist/diagnostic-catalog.js +203 -0
- package/dist/diagnostic-catalog.js.map +1 -0
- package/dist/diagnostic-prompt.d.ts +49 -0
- package/dist/diagnostic-prompt.d.ts.map +1 -0
- package/dist/diagnostic-prompt.js +303 -0
- package/dist/diagnostic-prompt.js.map +1 -0
- package/dist/diagnostic.d.ts +17 -23
- package/dist/diagnostic.d.ts.map +1 -1
- package/dist/diagnostic.js +31 -39
- package/dist/diagnostic.js.map +1 -1
- package/dist/draft.d.ts.map +1 -1
- package/dist/draft.js +4 -1
- package/dist/draft.js.map +1 -1
- package/dist/fn.d.ts +5 -0
- package/dist/fn.d.ts.map +1 -1
- package/dist/fn.js +13 -3
- package/dist/fn.js.map +1 -1
- package/dist/fs.d.ts.map +1 -1
- package/dist/fs.js +4 -2
- package/dist/fs.js.map +1 -1
- package/dist/index.d.ts +15 -15
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -12
- package/dist/index.js.map +1 -1
- package/dist/internal/cdn/cloudflare.d.ts +48 -0
- package/dist/internal/cdn/cloudflare.d.ts.map +1 -0
- package/dist/internal/cdn/cloudflare.js +94 -0
- package/dist/internal/cdn/cloudflare.js.map +1 -0
- package/dist/internal/cdn/core.d.ts +91 -0
- package/dist/internal/cdn/core.d.ts.map +1 -0
- package/dist/internal/cdn/core.js +220 -0
- package/dist/internal/cdn/core.js.map +1 -0
- package/dist/internal/cdn/fastly.d.ts +17 -0
- package/dist/internal/cdn/fastly.d.ts.map +1 -0
- package/dist/internal/cdn/fastly.js +43 -0
- package/dist/internal/cdn/fastly.js.map +1 -0
- package/dist/internal/cdn/vercel.d.ts +31 -0
- package/dist/internal/cdn/vercel.d.ts.map +1 -0
- package/dist/internal/cdn/vercel.js +56 -0
- package/dist/internal/cdn/vercel.js.map +1 -0
- package/dist/internal/code-unit-order.d.ts +4 -0
- package/dist/internal/code-unit-order.d.ts.map +1 -0
- package/dist/internal/code-unit-order.js +6 -0
- package/dist/internal/code-unit-order.js.map +1 -0
- package/dist/internal/codegen.d.ts +3 -0
- package/dist/internal/codegen.d.ts.map +1 -1
- package/dist/internal/codegen.js +151 -30
- package/dist/internal/codegen.js.map +1 -1
- package/dist/internal/dev-csp.d.ts +24 -0
- package/dist/internal/dev-csp.d.ts.map +1 -0
- package/dist/internal/dev-csp.js +160 -0
- package/dist/internal/dev-csp.js.map +1 -0
- package/dist/internal/dev-reserved.d.ts +25 -0
- package/dist/internal/dev-reserved.d.ts.map +1 -0
- package/dist/internal/dev-reserved.js +39 -0
- package/dist/internal/dev-reserved.js.map +1 -0
- package/dist/internal/html-spans.d.ts +10 -0
- package/dist/internal/html-spans.d.ts.map +1 -0
- package/dist/internal/html-spans.js +46 -0
- package/dist/internal/html-spans.js.map +1 -0
- package/dist/internal/loading-runtime.d.ts +44 -0
- package/dist/internal/loading-runtime.d.ts.map +1 -0
- package/dist/internal/loading-runtime.js +206 -0
- package/dist/internal/loading-runtime.js.map +1 -0
- package/dist/internal/matches-runtime.d.ts +8 -0
- package/dist/internal/matches-runtime.d.ts.map +1 -0
- package/dist/internal/matches-runtime.js +61 -0
- package/dist/internal/matches-runtime.js.map +1 -0
- package/dist/internal/mount-shadow.d.ts +36 -0
- package/dist/internal/mount-shadow.d.ts.map +1 -0
- package/dist/internal/mount-shadow.js +65 -0
- package/dist/internal/mount-shadow.js.map +1 -0
- package/dist/internal/node-builtins.d.ts +3 -0
- package/dist/internal/node-builtins.d.ts.map +1 -0
- package/dist/internal/node-builtins.js +79 -0
- package/dist/internal/node-builtins.js.map +1 -0
- package/dist/internal/output-guard.d.ts +65 -0
- package/dist/internal/output-guard.d.ts.map +1 -0
- package/dist/internal/output-guard.js +630 -0
- package/dist/internal/output-guard.js.map +1 -0
- package/dist/internal/page-execution.d.ts +69 -0
- package/dist/internal/page-execution.d.ts.map +1 -0
- package/dist/internal/page-execution.js +1021 -0
- package/dist/internal/page-execution.js.map +1 -0
- package/dist/internal/parity.d.ts +21 -0
- package/dist/internal/parity.d.ts.map +1 -1
- package/dist/internal/parity.js +104 -22
- package/dist/internal/parity.js.map +1 -1
- package/dist/internal/private-env.d.ts +12 -0
- package/dist/internal/private-env.d.ts.map +1 -0
- package/dist/internal/private-env.js +335 -0
- package/dist/internal/private-env.js.map +1 -0
- package/dist/internal/public-url.d.ts +3 -0
- package/dist/internal/public-url.d.ts.map +1 -0
- package/dist/internal/public-url.js +18 -0
- package/dist/internal/public-url.js.map +1 -0
- package/dist/internal/render-document.d.ts +37 -21
- package/dist/internal/render-document.d.ts.map +1 -1
- package/dist/internal/render-document.js +104 -65
- package/dist/internal/render-document.js.map +1 -1
- package/dist/internal/request-url.d.ts +3 -0
- package/dist/internal/request-url.d.ts.map +1 -0
- package/dist/internal/request-url.js +14 -0
- package/dist/internal/request-url.js.map +1 -0
- package/dist/internal/response-controls.d.ts +75 -0
- package/dist/internal/response-controls.d.ts.map +1 -0
- package/dist/internal/response-controls.js +256 -0
- package/dist/internal/response-controls.js.map +1 -0
- package/dist/internal/runtime-contract.d.ts +11 -16
- package/dist/internal/runtime-contract.d.ts.map +1 -1
- package/dist/internal/runtime-contract.js.map +1 -1
- package/dist/internal/secret-scan.d.ts +104 -0
- package/dist/internal/secret-scan.d.ts.map +1 -0
- package/dist/internal/secret-scan.js +485 -0
- package/dist/internal/secret-scan.js.map +1 -0
- package/dist/internal/server-boundary.d.ts +6 -29
- package/dist/internal/server-boundary.d.ts.map +1 -1
- package/dist/internal/server-boundary.js +6 -66
- package/dist/internal/server-boundary.js.map +1 -1
- package/dist/internal/source-map.d.ts +47 -0
- package/dist/internal/source-map.d.ts.map +1 -0
- package/dist/internal/source-map.js +225 -0
- package/dist/internal/source-map.js.map +1 -0
- package/dist/internal/target-compat.d.ts +27 -0
- package/dist/internal/target-compat.d.ts.map +1 -0
- package/dist/internal/target-compat.js +77 -0
- package/dist/internal/target-compat.js.map +1 -0
- package/dist/internal/timing-safe-equal.d.ts +6 -0
- package/dist/internal/timing-safe-equal.d.ts.map +1 -1
- package/dist/internal/timing-safe-equal.js +10 -0
- package/dist/internal/timing-safe-equal.js.map +1 -1
- package/dist/internal/vitals-runtime.d.ts +18 -0
- package/dist/internal/vitals-runtime.d.ts.map +1 -0
- package/dist/internal/vitals-runtime.js +38 -0
- package/dist/internal/vitals-runtime.js.map +1 -0
- package/dist/internal/web-app.d.ts +56 -8
- package/dist/internal/web-app.d.ts.map +1 -1
- package/dist/internal/web-app.js +215 -772
- package/dist/internal/web-app.js.map +1 -1
- package/dist/internal/zone-graph.d.ts +89 -0
- package/dist/internal/zone-graph.d.ts.map +1 -0
- package/dist/internal/zone-graph.js +492 -0
- package/dist/internal/zone-graph.js.map +1 -0
- package/dist/isr.d.ts +83 -6
- package/dist/isr.d.ts.map +1 -1
- package/dist/isr.js +301 -39
- package/dist/isr.js.map +1 -1
- package/dist/llms-txt.d.ts +3 -0
- package/dist/llms-txt.d.ts.map +1 -1
- package/dist/llms-txt.js +37 -9
- package/dist/llms-txt.js.map +1 -1
- package/dist/manifest.d.ts +221 -14
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +386 -9
- package/dist/manifest.js.map +1 -1
- package/dist/module-graph.d.ts +26 -5
- package/dist/module-graph.d.ts.map +1 -1
- package/dist/module-graph.js +17 -7
- package/dist/module-graph.js.map +1 -1
- package/dist/navigation.d.ts +17 -3
- package/dist/navigation.d.ts.map +1 -1
- package/dist/navigation.js +11 -5
- package/dist/navigation.js.map +1 -1
- package/dist/nonce.d.ts +47 -0
- package/dist/nonce.d.ts.map +1 -0
- package/dist/nonce.js +63 -0
- package/dist/nonce.js.map +1 -0
- package/dist/plugins/css-modules.d.ts.map +1 -1
- package/dist/plugins/css-modules.js +4 -3
- package/dist/plugins/css-modules.js.map +1 -1
- package/dist/plugins/kit.d.ts +9 -0
- package/dist/plugins/kit.d.ts.map +1 -1
- package/dist/plugins/kit.js +18 -0
- package/dist/plugins/kit.js.map +1 -1
- package/dist/plugins/svg.d.ts +22 -3
- package/dist/plugins/svg.d.ts.map +1 -1
- package/dist/plugins/svg.js +112 -1
- package/dist/plugins/svg.js.map +1 -1
- package/dist/plugins/vite-leak-guard.d.ts +107 -3
- package/dist/plugins/vite-leak-guard.d.ts.map +1 -1
- package/dist/plugins/vite-leak-guard.js +378 -17
- package/dist/plugins/vite-leak-guard.js.map +1 -1
- package/dist/plugins/vite-zone-guard.d.ts +61 -0
- package/dist/plugins/vite-zone-guard.d.ts.map +1 -0
- package/dist/plugins/vite-zone-guard.js +208 -0
- package/dist/plugins/vite-zone-guard.js.map +1 -0
- package/dist/plugins/zone-guard.d.ts +27 -0
- package/dist/plugins/zone-guard.d.ts.map +1 -0
- package/dist/plugins/zone-guard.js +72 -0
- package/dist/plugins/zone-guard.js.map +1 -0
- package/dist/prerender.d.ts +10 -0
- package/dist/prerender.d.ts.map +1 -1
- package/dist/prerender.js +35 -3
- package/dist/prerender.js.map +1 -1
- package/dist/public-dir.d.ts +9 -0
- package/dist/public-dir.d.ts.map +1 -1
- package/dist/public-dir.js +131 -48
- package/dist/public-dir.js.map +1 -1
- package/dist/pwa-manifest.d.ts +68 -0
- package/dist/pwa-manifest.d.ts.map +1 -0
- package/dist/pwa-manifest.js +178 -0
- package/dist/pwa-manifest.js.map +1 -0
- package/dist/query.js +4 -4
- package/dist/query.js.map +1 -1
- package/dist/render-seam.d.ts +42 -2
- package/dist/render-seam.d.ts.map +1 -1
- package/dist/render-seam.js +6 -0
- package/dist/render-seam.js.map +1 -1
- package/dist/route-manifest.d.ts +3 -0
- package/dist/route-manifest.d.ts.map +1 -1
- package/dist/route-manifest.js +26 -3
- package/dist/route-manifest.js.map +1 -1
- package/dist/route-types.d.ts +24 -0
- package/dist/route-types.d.ts.map +1 -0
- package/dist/route-types.js +195 -0
- package/dist/route-types.js.map +1 -0
- package/dist/router.d.ts +28 -6
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +129 -40
- package/dist/router.js.map +1 -1
- package/dist/trusted-html.d.ts +34 -0
- package/dist/trusted-html.d.ts.map +1 -0
- package/dist/trusted-html.js +35 -0
- package/dist/trusted-html.js.map +1 -0
- package/dist/vitals.d.ts +33 -0
- package/dist/vitals.d.ts.map +1 -0
- package/dist/vitals.js +16 -0
- package/dist/vitals.js.map +1 -0
- package/dist/vite.d.ts +16 -1
- package/dist/vite.d.ts.map +1 -1
- package/dist/vite.js +187 -36
- package/dist/vite.js.map +1 -1
- package/dist/zones.d.ts +70 -0
- package/dist/zones.d.ts.map +1 -0
- package/dist/zones.js +365 -0
- package/dist/zones.js.map +1 -0
- package/package.json +67 -14
- package/src/backend-only.ts +16 -0
- package/src/boundary.ts +18 -5
- package/src/build-plan.ts +113 -36
- package/src/build-vite.ts +124 -15
- package/src/build.ts +535 -102
- package/src/bun-dev-entry.ts +1 -1
- package/src/cdn.ts +216 -0
- package/src/client.ts +251 -18
- package/src/conformance.ts +16 -3
- package/src/csp.ts +194 -0
- package/src/css-contract.ts +44 -0
- package/src/dev-client.ts +349 -0
- package/src/dev-diagnostics.ts +60 -7
- package/src/dev-error.ts +49 -5
- package/src/dev-feed.ts +1140 -0
- package/src/dev-indicator.ts +113 -0
- package/src/dev-session.ts +729 -0
- package/src/dev-sourcemap.ts +281 -0
- package/src/dev-ssr-graph.ts +16 -5
- package/src/dev.ts +86 -43
- package/src/diagnostic-catalog.ts +243 -0
- package/src/diagnostic-prompt.ts +355 -0
- package/src/diagnostic.ts +63 -66
- package/src/draft.ts +4 -1
- package/src/fn.ts +19 -3
- package/src/fs.ts +13 -2
- package/src/index.ts +57 -10
- package/src/internal/cdn/cloudflare.ts +146 -0
- package/src/internal/cdn/core.ts +316 -0
- package/src/internal/cdn/fastly.ts +62 -0
- package/src/internal/cdn/vercel.ts +95 -0
- package/src/internal/code-unit-order.ts +5 -0
- package/src/internal/codegen.ts +180 -29
- package/src/internal/dev-csp.ts +176 -0
- package/src/internal/dev-reserved.ts +52 -0
- package/src/internal/html-spans.ts +50 -0
- package/src/internal/loading-runtime.ts +244 -0
- package/src/internal/matches-runtime.ts +62 -0
- package/src/internal/mount-shadow.ts +88 -0
- package/src/internal/node-builtins.ts +79 -0
- package/src/internal/output-guard.ts +701 -0
- package/src/internal/page-execution.ts +1371 -0
- package/src/internal/parity.ts +150 -36
- package/src/internal/private-env.ts +334 -0
- package/src/internal/public-url.ts +22 -0
- package/src/internal/render-document.ts +153 -73
- package/src/internal/request-url.ts +14 -0
- package/src/internal/response-controls.ts +284 -0
- package/src/internal/runtime-contract.ts +10 -15
- package/src/internal/secret-scan.ts +623 -0
- package/src/internal/server-boundary.ts +6 -69
- package/src/internal/source-map.ts +256 -0
- package/src/internal/target-compat.ts +92 -0
- package/src/internal/timing-safe-equal.ts +13 -0
- package/src/internal/vitals-runtime.ts +53 -0
- package/src/internal/web-app.ts +290 -879
- package/src/internal/zone-graph.ts +593 -0
- package/src/isr.ts +366 -39
- package/src/llms-txt.ts +44 -8
- package/src/manifest.ts +671 -17
- package/src/module-graph.ts +53 -9
- package/src/navigation.ts +29 -6
- package/src/nonce.ts +104 -0
- package/src/plugins/css-modules.ts +5 -3
- package/src/plugins/kit.ts +24 -0
- package/src/plugins/svg.ts +135 -4
- package/src/plugins/vite-leak-guard.ts +529 -16
- package/src/plugins/vite-zone-guard.ts +263 -0
- package/src/plugins/zone-guard.ts +110 -0
- package/src/prerender.ts +49 -3
- package/src/public-dir.ts +135 -49
- package/src/pwa-manifest.ts +226 -0
- package/src/query.ts +4 -4
- package/src/render-seam.ts +46 -1
- package/src/route-manifest.ts +15 -3
- package/src/route-types.ts +264 -0
- package/src/router.ts +163 -63
- package/src/trusted-html.ts +44 -0
- package/src/vitals.ts +44 -0
- package/src/vite.ts +207 -36
- package/src/zones.ts +430 -0
- package/dist/plugins/vite-server-only.d.ts +0 -49
- package/dist/plugins/vite-server-only.d.ts.map +0 -1
- package/dist/plugins/vite-server-only.js +0 -57
- package/dist/plugins/vite-server-only.js.map +0 -1
- package/dist/server-only.d.ts +0 -21
- package/dist/server-only.d.ts.map +0 -1
- package/dist/server-only.js +0 -25
- package/dist/server-only.js.map +0 -1
- package/src/plugins/vite-server-only.ts +0 -75
- package/src/server-only.ts +0 -25
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@nifrajs/web/backend-only` - the poison-import marker (Next's `import "server-only"`). A module that
|
|
3
|
+
* must never reach a browser can say so with a side-effect import at its top:
|
|
4
|
+
*
|
|
5
|
+
* import "@nifrajs/web/backend-only"
|
|
6
|
+
*
|
|
7
|
+
* Every browser build and dev server refuses a module graph that reaches this specifier, naming the
|
|
8
|
+
* import chain. The zone rules already keep `backend/` and `*.backend.ts` out of the browser; the
|
|
9
|
+
* marker is for a module that must stay server-side wherever it is imported from, such as one inside
|
|
10
|
+
* a shared workspace package. On the server it is an empty module, so the marked file runs untouched.
|
|
11
|
+
*
|
|
12
|
+
* Pair it with the type-level {@link BackendOnly} brand (from `@nifrajs/web`) on the module's exports.
|
|
13
|
+
*/
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=backend-only.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend-only.d.ts","sourceRoot":"","sources":["../src/backend-only.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@nifrajs/web/backend-only` - the poison-import marker (Next's `import "server-only"`). A module that
|
|
3
|
+
* must never reach a browser can say so with a side-effect import at its top:
|
|
4
|
+
*
|
|
5
|
+
* import "@nifrajs/web/backend-only"
|
|
6
|
+
*
|
|
7
|
+
* Every browser build and dev server refuses a module graph that reaches this specifier, naming the
|
|
8
|
+
* import chain. The zone rules already keep `backend/` and `*.backend.ts` out of the browser; the
|
|
9
|
+
* marker is for a module that must stay server-side wherever it is imported from, such as one inside
|
|
10
|
+
* a shared workspace package. On the server it is an empty module, so the marked file runs untouched.
|
|
11
|
+
*
|
|
12
|
+
* Pair it with the type-level {@link BackendOnly} brand (from `@nifrajs/web`) on the module's exports.
|
|
13
|
+
*/
|
|
14
|
+
// Intentionally empty: the marker is the import itself.
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=backend-only.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend-only.js","sourceRoot":"","sources":["../src/backend-only.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,wDAAwD;AACxD,OAAO,EAAE,CAAA"}
|
package/dist/boundary.d.ts
CHANGED
|
@@ -16,6 +16,8 @@ export interface BoundaryRequestCtx {
|
|
|
16
16
|
/** Build-safe inputs available to a static boundary. It intentionally has no request/session/params API. */
|
|
17
17
|
export interface StaticCtx {
|
|
18
18
|
readonly phase: "build";
|
|
19
|
+
/** The deployment's origin, when the caller resolving static boundaries knows it. A request never
|
|
20
|
+
* supplies it: the value is cached for every visitor, and a Host header is the client's to choose. */
|
|
19
21
|
readonly origin?: string;
|
|
20
22
|
}
|
|
21
23
|
export type BoundaryMode = "static" | "dynamic" | {
|
|
@@ -109,11 +111,14 @@ export interface DynamicBoundaryBatch {
|
|
|
109
111
|
export interface StaticBoundaryCache {
|
|
110
112
|
get(boundary: BoundaryRegistration): Promise<unknown> | undefined;
|
|
111
113
|
set(boundary: BoundaryRegistration, value: Promise<unknown>): void;
|
|
114
|
+
/** Drop a value whose load failed, so the next request retries it. */
|
|
115
|
+
delete?(boundary: BoundaryRegistration): void;
|
|
112
116
|
}
|
|
113
117
|
export declare class MemoryStaticBoundaryCache implements StaticBoundaryCache {
|
|
114
118
|
#private;
|
|
115
119
|
get(boundary: BoundaryRegistration): Promise<unknown> | undefined;
|
|
116
120
|
set(boundary: BoundaryRegistration, value: Promise<unknown>): void;
|
|
121
|
+
delete(boundary: BoundaryRegistration): void;
|
|
117
122
|
}
|
|
118
123
|
export interface StaticBoundaryImportEdge {
|
|
119
124
|
readonly from: string;
|
package/dist/boundary.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boundary.d.ts","sourceRoot":"","sources":["../src/boundary.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"boundary.d.ts","sourceRoot":"","sources":["../src/boundary.ts"],"names":[],"mappings":"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"}
|
package/dist/boundary.js
CHANGED
|
@@ -11,6 +11,9 @@ export class MemoryStaticBoundaryCache {
|
|
|
11
11
|
set(boundary, value) {
|
|
12
12
|
this.#values.set(boundary, value);
|
|
13
13
|
}
|
|
14
|
+
delete(boundary) {
|
|
15
|
+
this.#values.delete(boundary);
|
|
16
|
+
}
|
|
14
17
|
}
|
|
15
18
|
/**
|
|
16
19
|
* Enforce the second half of the static-boundary safety boundary. A build adapter supplies the
|
|
@@ -204,8 +207,14 @@ export async function resolveStaticBoundaries(boundaries, context, cache = DEFAU
|
|
|
204
207
|
}
|
|
205
208
|
let value = cache.get(boundary);
|
|
206
209
|
if (value === undefined) {
|
|
207
|
-
|
|
208
|
-
cache.set(boundary,
|
|
210
|
+
const loading = Promise.resolve().then(() => boundary.load?.(context));
|
|
211
|
+
cache.set(boundary, loading);
|
|
212
|
+
// A failed load is not the boundary's value: the next request loads it again.
|
|
213
|
+
loading.catch(() => {
|
|
214
|
+
if (cache.get(boundary) === loading)
|
|
215
|
+
cache.delete?.(boundary);
|
|
216
|
+
});
|
|
217
|
+
value = loading;
|
|
209
218
|
}
|
|
210
219
|
try {
|
|
211
220
|
const data = await value;
|
package/dist/boundary.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boundary.js","sourceRoot":"","sources":["../src/boundary.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"boundary.js","sourceRoot":"","sources":["../src/boundary.ts"],"names":[],"mappings":"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"}
|
package/dist/build-plan.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { CssLoadingMode } from "./css-contract.js";
|
|
2
|
+
import type { SecretExemption } from "./internal/secret-scan.js";
|
|
1
3
|
import type { ClientModuleGraph } from "./module-graph.js";
|
|
2
4
|
export interface BuildManifest {
|
|
3
5
|
/** URL of the client entry module (content-hashed). */
|
|
@@ -17,6 +19,10 @@ export interface BuildManifest {
|
|
|
17
19
|
* imported the CSS; the always-safe fallback `createWebApp` links when a route has no per-route entry
|
|
18
20
|
* in {@link routeStyles}. Omitted when the app imports no CSS. */
|
|
19
21
|
readonly css?: readonly string[];
|
|
22
|
+
/** Whether the Vite client build kept CSS split by entry/chunk. Absent for the native Bun build. */
|
|
23
|
+
readonly cssCodeSplit?: boolean;
|
|
24
|
+
/** How framework-owned SSR stylesheet links should become active. Defaults to `blocking`. */
|
|
25
|
+
readonly cssLoading?: CssLoadingMode;
|
|
20
26
|
/** `routeId → [chain CSS URLs]` - only the stylesheets the matched route's layout chain + own file
|
|
21
27
|
* actually use (Bun emits a per-entrypoint CSS bundle per route/layout, with shared-component CSS
|
|
22
28
|
* inlined into each consumer). `createWebApp` links these instead of the aggregate, so a page ships
|
|
@@ -33,24 +39,29 @@ export interface ServerBuild {
|
|
|
33
39
|
readonly outputs: readonly string[];
|
|
34
40
|
}
|
|
35
41
|
/** A deploy target `nifra build --target <t>` can emit. `static` is pure SSG (no server). */
|
|
36
|
-
export declare const BUILD_TARGETS: readonly ["bun", "node", "deno", "
|
|
42
|
+
export declare const BUILD_TARGETS: readonly ["bun", "node", "deno", "cloudflare", "vercel", "static"];
|
|
37
43
|
export type BuildTarget = (typeof BUILD_TARGETS)[number];
|
|
38
44
|
/** A type guard narrowing an arbitrary string to a {@link BuildTarget}. */
|
|
39
45
|
export declare function isBuildTarget(value: string): value is BuildTarget;
|
|
46
|
+
/** `value` as a {@link BuildTarget}, or throw naming the valid ones (and the renamed `cf-pages`). */
|
|
47
|
+
export declare function parseBuildTarget(value: string, label?: string): BuildTarget;
|
|
40
48
|
export type ServerBuildTarget = "browser" | "node" | "bun";
|
|
41
49
|
export interface StaticBuildTargetPlan {
|
|
42
50
|
readonly target: "static";
|
|
43
51
|
readonly kind: "static";
|
|
44
52
|
readonly serverTarget: undefined;
|
|
45
53
|
readonly outputFile: undefined;
|
|
54
|
+
readonly staticDir: "";
|
|
46
55
|
readonly run: string;
|
|
47
56
|
}
|
|
48
57
|
export interface ServerBuildTargetPlan {
|
|
49
58
|
readonly target: Exclude<BuildTarget, "static">;
|
|
50
59
|
readonly kind: "server";
|
|
51
60
|
readonly serverTarget: ServerBuildTarget;
|
|
52
|
-
/** The worker's final
|
|
53
|
-
readonly outputFile: "_worker.js" | "index.js" | "server.js";
|
|
61
|
+
/** The worker's final path inside the assembled deploy directory. */
|
|
62
|
+
readonly outputFile: "_worker.js" | "functions/index.func/index.js" | "server.js";
|
|
63
|
+
/** Where the host serves static files from, relative to the deploy directory (`""` = its root). */
|
|
64
|
+
readonly staticDir: "" | "static";
|
|
54
65
|
readonly run: string;
|
|
55
66
|
}
|
|
56
67
|
export type BuildTargetPlan = StaticBuildTargetPlan | ServerBuildTargetPlan;
|
|
@@ -79,8 +90,14 @@ export interface Bundler {
|
|
|
79
90
|
readonly define?: Readonly<Record<string, string>>;
|
|
80
91
|
readonly publicDir?: string | false;
|
|
81
92
|
readonly publicEnvPrefix?: string;
|
|
93
|
+
/** Vite CSS splitting policy; the Bun strategy rejects `false` and otherwise preserves its native behavior. */
|
|
94
|
+
readonly cssCodeSplit?: boolean;
|
|
95
|
+
/** Framework-owned stylesheet activation policy; supported by both server strategies. */
|
|
96
|
+
readonly cssLoading?: CssLoadingMode;
|
|
82
97
|
/** Project root (Vite needs it; the Bun strategy ignores it). */
|
|
83
98
|
readonly root?: string;
|
|
99
|
+
/** Reviewed false positives of the secret scan. */
|
|
100
|
+
readonly secretExemptions?: readonly SecretExemption[];
|
|
84
101
|
}): Promise<BuildManifest>;
|
|
85
102
|
/** Build the server worker → the shared {@link ServerBuild}. */
|
|
86
103
|
buildServer(input: {
|
|
@@ -89,9 +106,19 @@ export interface Bundler {
|
|
|
89
106
|
readonly outDir: string;
|
|
90
107
|
readonly clientEntry: string;
|
|
91
108
|
readonly target: "browser" | "node" | "bun";
|
|
109
|
+
/** The client build's aggregate stylesheet URLs to bake into the server manifest. */
|
|
110
|
+
readonly styles?: readonly string[];
|
|
111
|
+
/** The client build's per-route stylesheet map to bake into the server manifest. */
|
|
112
|
+
readonly routeStyles?: Readonly<Record<string, readonly string[]>>;
|
|
92
113
|
readonly plugins?: readonly unknown[];
|
|
93
114
|
readonly define?: Readonly<Record<string, string>>;
|
|
115
|
+
/** CSS activation policy to bake into the generated server manifest. */
|
|
116
|
+
readonly cssLoading?: CssLoadingMode;
|
|
94
117
|
readonly root?: string;
|
|
118
|
+
/** Modules the zone rules treat as generated: the adapter module the generated entry imports. */
|
|
119
|
+
readonly generatedFiles?: readonly string[];
|
|
120
|
+
/** The public-env prefix browser code may read (default `"PUBLIC_"`). */
|
|
121
|
+
readonly publicEnvPrefix?: string;
|
|
95
122
|
}): Promise<ServerBuild>;
|
|
96
123
|
}
|
|
97
124
|
/** One `node:`-builtin-in-the-client finding: the offending builtin, the emitted chunk it landed in,
|
|
@@ -124,8 +151,8 @@ export interface NodeBuiltinFinding {
|
|
|
124
151
|
export declare function detectNodeBuiltinsInClient(graph: ClientModuleGraph): ReadonlyArray<NodeBuiltinFinding>;
|
|
125
152
|
/** The marker specifier an author imports to opt a module into the client-leak guard. Matched on the
|
|
126
153
|
* import edge's *as-written* `original` first (the robust signal: it's exactly what the author typed,
|
|
127
|
-
* before Bun resolves it to `src/
|
|
128
|
-
export declare const SERVER_ONLY_MARKER = "@nifrajs/web/
|
|
154
|
+
* before Bun resolves it to `src/backend-only.ts` / `dist/backend-only.js`). */
|
|
155
|
+
export declare const SERVER_ONLY_MARKER = "@nifrajs/web/backend-only";
|
|
129
156
|
/** One `server-only`-module-in-the-client finding: the offending module (the as-written marker-import
|
|
130
157
|
* chain's tail before the marker), the emitted chunk it landed in, and the shortest USER-module import
|
|
131
158
|
* chain that pulled it there (entry → … → the server-only module). */
|
|
@@ -140,7 +167,7 @@ export interface ServerOnlyFinding {
|
|
|
140
167
|
}
|
|
141
168
|
/**
|
|
142
169
|
* Scan a build's metafile for any module that opts into the `server-only` marker (a side-effect
|
|
143
|
-
* `import "@nifrajs/web/
|
|
170
|
+
* `import "@nifrajs/web/backend-only"`) yet landed in a CLIENT output chunk, returning a sorted, deduped
|
|
144
171
|
* list of {@link ServerOnlyFinding}s. Mirrors {@link detectNodeBuiltinsInClient}: it reads the SAME
|
|
145
172
|
* graph facts - which inputs import the marker (the "marked" modules), which chunk each landed in (the
|
|
146
173
|
* per-output `inputs`), and the shortest import chain from a user entry to it. The marker module ITSELF
|
|
@@ -205,6 +232,8 @@ export interface ManifestDrift {
|
|
|
205
232
|
export declare function parseManifestRouteFiles(source: string, _routesPrefix?: string): string[];
|
|
206
233
|
/** The baked `clientEntry` URL in a committed server-manifest, or `undefined` if absent. Pure. */
|
|
207
234
|
export declare function parseManifestClientEntry(source: string): string | undefined;
|
|
235
|
+
/** The baked framework stylesheet activation mode, or `undefined` for an older manifest. Pure. */
|
|
236
|
+
export declare function parseManifestCssLoading(source: string): CssLoadingMode | undefined;
|
|
208
237
|
/** The baked top-level `styles` array in a committed server-manifest (empty if absent/unparseable). Pure. */
|
|
209
238
|
export declare function parseManifestStyles(source: string): string[];
|
|
210
239
|
/** The baked per-route `routeStyles` map in a committed server-manifest (empty if absent/unparseable). Pure. */
|
package/dist/build-plan.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-plan.d.ts","sourceRoot":"","sources":["../src/build-plan.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAE1D,MAAM,WAAW,aAAa;IAC5B,uDAAuD;IACvD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;IAClC;;6GAEyG;IACzG,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAA;IAC5D;;kEAE8D;IAC9D,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACxC;;;sEAGkE;IAClE,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAChC;;;;;uEAKmE;IACnE,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAA;CACnE;AAED,iFAAiF;AACjF,MAAM,WAAW,WAAW;IAC1B,wDAAwD;IACxD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,oGAAoG;IACpG,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;CACpC;AAWD,6FAA6F;AAC7F,eAAO,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"build-plan.d.ts","sourceRoot":"","sources":["../src/build-plan.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAGvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAE1D,MAAM,WAAW,aAAa;IAC5B,uDAAuD;IACvD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;IAClC;;6GAEyG;IACzG,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAA;IAC5D;;kEAE8D;IAC9D,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACxC;;;sEAGkE;IAClE,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAChC,oGAAoG;IACpG,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;IAC/B,6FAA6F;IAC7F,QAAQ,CAAC,UAAU,CAAC,EAAE,cAAc,CAAA;IACpC;;;;;uEAKmE;IACnE,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAA;CACnE;AAED,iFAAiF;AACjF,MAAM,WAAW,WAAW;IAC1B,wDAAwD;IACxD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,oGAAoG;IACpG,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;CACpC;AAWD,6FAA6F;AAC7F,eAAO,MAAM,aAAa,oEAAqE,CAAA;AAC/F,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAA;AAExD,2EAA2E;AAC3E,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,WAAW,CAEjE;AAED,qGAAqG;AACrG,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAW,GAAG,WAAW,CAO7E;AAED,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,MAAM,GAAG,KAAK,CAAA;AAE1D,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAA;IACzB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;IACvB,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAA;IAChC,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAA;IAC9B,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAA;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;IAC/C,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;IACvB,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAA;IACxC,qEAAqE;IACrE,QAAQ,CAAC,UAAU,EAAE,YAAY,GAAG,+BAA+B,GAAG,WAAW,CAAA;IACjF,mGAAmG;IACnG,QAAQ,CAAC,SAAS,EAAE,EAAE,GAAG,QAAQ,CAAA;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,MAAM,eAAe,GAAG,qBAAqB,GAAG,qBAAqB,CAAA;AAgB3E;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe,CAwCpF;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,OAAO;IACtB,kEAAkE;IAClE,WAAW,CAAC,KAAK,EAAE;QACjB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;QAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;QACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;QAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,OAAO,EAAE,CAAA;QACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;QACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;QAClD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;QACnC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;QACjC,+GAA+G;QAC/G,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;QAC/B,yFAAyF;QACzF,QAAQ,CAAC,UAAU,CAAC,EAAE,cAAc,CAAA;QACpC,iEAAiE;QACjE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;QACtB,mDAAmD;QACnD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,eAAe,EAAE,CAAA;KACvD,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;IAC1B,gEAAgE;IAChE,WAAW,CAAC,KAAK,EAAE;QACjB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;QAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;QAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;QACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;QAC5B,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,KAAK,CAAA;QAC3C,qFAAqF;QACrF,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;QACnC,oFAAoF;QACpF,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAA;QAClE,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,OAAO,EAAE,CAAA;QACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;QAClD,wEAAwE;QACxE,QAAQ,CAAC,UAAU,CAAC,EAAE,cAAc,CAAA;QACpC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;QACtB,iGAAiG;QACjG,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;QAC3C,yEAAyE;QACzE,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;KAClC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;CACzB;AAwBD;2FAC2F;AAC3F,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB;;;;;2BAKuB;IACvB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;CAClC;AA+CD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,iBAAiB,GACvB,aAAa,CAAC,kBAAkB,CAAC,CA2DnC;AAYD;;gFAEgF;AAChF,eAAO,MAAM,kBAAkB,8BAA8B,CAAA;AAY7D;;sEAEsE;AACtE,MAAM,WAAW,iBAAiB;IAChC,4EAA4E;IAC5E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB;;;8DAG0D;IAC1D,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;CAClC;AAqED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,iBAAiB,GACvB,aAAa,CAAC,iBAAiB,CAAC,CAqDlC;AASD,0GAA0G;AAC1G,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,aAAa,CAAC,kBAAkB,CAAC,GAC1C,MAAM,GAAG,SAAS,CAWpB;AAED,+GAA+G;AAC/G,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,aAAa,CAAC,iBAAiB,CAAC,GACzC,MAAM,GAAG,SAAS,CAYpB;AAQD,8FAA8F;AAC9F,MAAM,WAAW,SAAS;IACxB,4DAA4D;IAC5D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,mCAAmC;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,+EAA+E;IAC/E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED,8EAA8E;AAC9E,MAAM,WAAW,UAAU;IACzB,8FAA8F;IAC9F,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAA;IACrC,sCAAsC;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,uCAAuC;IACvC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,GAAG,UAAU,CAW5E;AAED,mGAAmG;AACnG,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIjD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CA0B3D;AAUD,uFAAuF;AACvF,MAAM,WAAW,aAAa;IAC5B;uDACmD;IACnD,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC;qEACiE;IACjE,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;CAClC;AAeD;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAMxF;AAED,kGAAkG;AAClG,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE3E;AAED,kGAAkG;AAClG,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAElF;AAuBD,6GAA6G;AAC7G,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAS5D;AAED,gHAAgH;AAChH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAWjF;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,SAAS,MAAM,EAAE,EAChC,eAAe,EAAE,SAAS,MAAM,EAAE,GACjC,aAAa,CAOf;AAED,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAE9D;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,aAAa,EACpB,YAAY,SAAuB,GAClC,MAAM,GAAG,SAAS,CAiBpB"}
|
package/dist/build-plan.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { basename as pathBasename } from "node:path";
|
|
2
|
+
import { codeUnitOrder } from "./internal/code-unit-order.js";
|
|
3
|
+
import { isBareNodeBuiltin } from "./internal/node-builtins.js";
|
|
2
4
|
// ===================================================================================================
|
|
3
5
|
// `nifra build --target` - package the engine above into one command that emits a full deploy dir.
|
|
4
6
|
//
|
|
@@ -8,11 +10,19 @@ import { basename as pathBasename } from "node:path";
|
|
|
8
10
|
// …) - so we GENERATE it here (per target) instead of asking each app to ship five near-identical files.
|
|
9
11
|
// ===================================================================================================
|
|
10
12
|
/** A deploy target `nifra build --target <t>` can emit. `static` is pure SSG (no server). */
|
|
11
|
-
export const BUILD_TARGETS = ["bun", "node", "deno", "
|
|
13
|
+
export const BUILD_TARGETS = ["bun", "node", "deno", "cloudflare", "vercel", "static"];
|
|
12
14
|
/** A type guard narrowing an arbitrary string to a {@link BuildTarget}. */
|
|
13
15
|
export function isBuildTarget(value) {
|
|
14
16
|
return BUILD_TARGETS.includes(value);
|
|
15
17
|
}
|
|
18
|
+
/** `value` as a {@link BuildTarget}, or throw naming the valid ones (and the renamed `cf-pages`). */
|
|
19
|
+
export function parseBuildTarget(value, label = "target") {
|
|
20
|
+
if (isBuildTarget(value))
|
|
21
|
+
return value;
|
|
22
|
+
throw new Error(value === "cf-pages"
|
|
23
|
+
? `[nifra] the ${label} "cf-pages" is now "cloudflare"`
|
|
24
|
+
: `[nifra] unknown ${label} "${value}". Valid: ${BUILD_TARGETS.join(", ")}`);
|
|
25
|
+
}
|
|
16
26
|
const finalPathSegment = (path) => {
|
|
17
27
|
// Do not use a repeated, unanchored regex here: a separator-heavy path followed by a
|
|
18
28
|
// non-separator can make the regex engine retry every possible start position (ReDoS).
|
|
@@ -39,15 +49,17 @@ export function planBuildTarget(target, outDir) {
|
|
|
39
49
|
kind: "static",
|
|
40
50
|
serverTarget: undefined,
|
|
41
51
|
outputFile: undefined,
|
|
52
|
+
staticDir: "",
|
|
42
53
|
run: `static site → ${outDir} (serve the directory with any static host)`,
|
|
43
54
|
};
|
|
44
55
|
}
|
|
45
|
-
if (target === "
|
|
56
|
+
if (target === "cloudflare") {
|
|
46
57
|
return {
|
|
47
58
|
target,
|
|
48
59
|
kind: "server",
|
|
49
60
|
serverTarget: "browser",
|
|
50
61
|
outputFile: "_worker.js",
|
|
62
|
+
staticDir: "",
|
|
51
63
|
run: `Cloudflare Pages → ${outDir} (deploy: wrangler pages deploy ${finalPathSegment(outDir)})`,
|
|
52
64
|
};
|
|
53
65
|
}
|
|
@@ -56,8 +68,10 @@ export function planBuildTarget(target, outDir) {
|
|
|
56
68
|
target,
|
|
57
69
|
kind: "server",
|
|
58
70
|
serverTarget: "browser",
|
|
59
|
-
|
|
60
|
-
|
|
71
|
+
// Vercel's Build Output API: `vercel deploy --prebuilt` uploads this tree as it is.
|
|
72
|
+
outputFile: "functions/index.func/index.js",
|
|
73
|
+
staticDir: "static",
|
|
74
|
+
run: `Vercel (Build Output API) → ${outDir} (deploy: vercel deploy --prebuilt)`,
|
|
61
75
|
};
|
|
62
76
|
}
|
|
63
77
|
return {
|
|
@@ -65,6 +79,7 @@ export function planBuildTarget(target, outDir) {
|
|
|
65
79
|
kind: "server",
|
|
66
80
|
serverTarget: target === "node" ? "node" : target === "bun" ? "bun" : "browser",
|
|
67
81
|
outputFile: "server.js",
|
|
82
|
+
staticDir: "",
|
|
68
83
|
run: `${target} server → ${outDir} (run: ${target === "node" ? "node" : target} ${finalPathSegment(outDir)}/server.js)`,
|
|
69
84
|
};
|
|
70
85
|
}
|
|
@@ -74,7 +89,11 @@ const nodeBuiltinOf = (im) => {
|
|
|
74
89
|
return im.original;
|
|
75
90
|
if (im.path?.startsWith("node:"))
|
|
76
91
|
return im.path;
|
|
77
|
-
|
|
92
|
+
// A bare built-in only counts when the bundler left it external: a bundled `fs` resolved to an
|
|
93
|
+
// installed package (or a polyfill keyed `node:fs`) is handled above or is not a built-in at all.
|
|
94
|
+
// Labeled with the prefix, so `fs/promises` reads the same from either bundler.
|
|
95
|
+
const spec = im.external === true ? (im.original ?? im.path) : undefined;
|
|
96
|
+
return spec !== undefined && isBareNodeBuiltin(spec) ? `node:${spec}` : undefined;
|
|
78
97
|
};
|
|
79
98
|
/**
|
|
80
99
|
* BFS the metafile import graph for the SHORTEST user-module path that pulls `builtin` into the
|
|
@@ -159,43 +178,62 @@ export function detectNodeBuiltinsInClient(graph) {
|
|
|
159
178
|
chains.set(builtin, chain);
|
|
160
179
|
return chain;
|
|
161
180
|
};
|
|
181
|
+
// (1b) Builtins the bundler left EXTERNAL: the import ships in the importer's chunk but the module
|
|
182
|
+
// is in no output, so (2) can't find it as a chunk member. Bun does this for a dynamic
|
|
183
|
+
// `import("node:fs")` in a browser build; the browser then fails to load it.
|
|
184
|
+
const externalsOf = new Map();
|
|
185
|
+
for (const [inputKey, input] of Object.entries(inputs)) {
|
|
186
|
+
if (inputKey.startsWith("node:"))
|
|
187
|
+
continue;
|
|
188
|
+
for (const im of input.imports ?? []) {
|
|
189
|
+
if (im.external !== true)
|
|
190
|
+
continue;
|
|
191
|
+
const builtin = nodeBuiltinOf(im);
|
|
192
|
+
if (builtin === undefined)
|
|
193
|
+
continue;
|
|
194
|
+
const list = externalsOf.get(inputKey) ?? [];
|
|
195
|
+
if (!list.includes(builtin))
|
|
196
|
+
list.push(builtin);
|
|
197
|
+
externalsOf.set(inputKey, list);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
162
200
|
// (2) Locate which emitted chunk each user-imported builtin reached, via the per-output `inputs`.
|
|
163
201
|
const findings = new Map();
|
|
202
|
+
const report = (builtin, outputPath) => {
|
|
203
|
+
const chunk = basename(outputPath);
|
|
204
|
+
findings.set(`${builtin}\0${chunk}`, { builtin, chunk, chain: chainFor(builtin) });
|
|
205
|
+
};
|
|
164
206
|
for (const [outputPath, output] of Object.entries(graph.chunks)) {
|
|
165
207
|
for (const inputKey of output.modules) {
|
|
166
|
-
if (
|
|
167
|
-
|
|
168
|
-
const
|
|
169
|
-
|
|
170
|
-
builtin: inputKey,
|
|
171
|
-
chunk,
|
|
172
|
-
chain: chainFor(inputKey),
|
|
173
|
-
});
|
|
208
|
+
if (userImported.has(inputKey))
|
|
209
|
+
report(inputKey, outputPath);
|
|
210
|
+
for (const builtin of externalsOf.get(inputKey) ?? [])
|
|
211
|
+
report(builtin, outputPath);
|
|
174
212
|
}
|
|
175
213
|
}
|
|
176
|
-
return [...findings.values()].sort((a, b) => a.builtin === b.builtin ? a.chunk
|
|
214
|
+
return [...findings.values()].sort((a, b) => a.builtin === b.builtin ? codeUnitOrder(a.chunk, b.chunk) : codeUnitOrder(a.builtin, b.builtin));
|
|
177
215
|
}
|
|
178
216
|
// ---------------------------------------------------------------------------------------------------
|
|
179
|
-
// `
|
|
217
|
+
// `backend-only` poison-import guard (§3.3/§5.1). The complement to the zones + the
|
|
180
218
|
// node-builtin guard: a module of PURE server logic with NO `node:` import (a secret-bearing constant,
|
|
181
219
|
// a server-only API call) that an author wants to FAIL LOUD if it reaches the client opts in with a
|
|
182
|
-
// side-effect `import "@nifrajs/web/
|
|
220
|
+
// side-effect `import "@nifrajs/web/backend-only"` (Next's `import "server-only"`). On the SERVER build
|
|
183
221
|
// the marker is an empty no-op; the CLIENT build detects - via the SAME Bun metafile graph the
|
|
184
222
|
// node-builtin guard walks - any module that imports the marker AND lands in a client chunk, and fails
|
|
185
223
|
// the build with the import chain. Graph-based (never the emitted text), so it survives minification.
|
|
186
224
|
// ---------------------------------------------------------------------------------------------------
|
|
187
225
|
/** The marker specifier an author imports to opt a module into the client-leak guard. Matched on the
|
|
188
226
|
* import edge's *as-written* `original` first (the robust signal: it's exactly what the author typed,
|
|
189
|
-
* before Bun resolves it to `src/
|
|
190
|
-
export const SERVER_ONLY_MARKER = "@nifrajs/web/
|
|
227
|
+
* before Bun resolves it to `src/backend-only.ts` / `dist/backend-only.js`). */
|
|
228
|
+
export const SERVER_ONLY_MARKER = "@nifrajs/web/backend-only";
|
|
191
229
|
const isServerOnlyMarkerImport = (im) => {
|
|
192
230
|
if (im.original === SERVER_ONLY_MARKER)
|
|
193
231
|
return true;
|
|
194
|
-
return im.path !== undefined && /(^|\/)
|
|
232
|
+
return im.path !== undefined && /(^|\/)backend-only\.[cm]?[jt]s$/.test(im.path);
|
|
195
233
|
};
|
|
196
|
-
/** True when an INPUT graph key is the marker module file itself (`…/
|
|
234
|
+
/** True when an INPUT graph key is the marker module file itself (`…/backend-only.{ts,js}` under web).
|
|
197
235
|
* Excluded from the "marked" set - the marker is the import target, not an opt-in module. */
|
|
198
|
-
const isServerOnlyMarkerModule = (inputKey) => /(^|\/)
|
|
236
|
+
const isServerOnlyMarkerModule = (inputKey) => /(^|\/)backend-only\.[cm]?[jt]s$/.test(inputKey);
|
|
199
237
|
/**
|
|
200
238
|
* Build a resolver from an import EDGE to its INPUT-GRAPH KEY. Bun's metafile records edge `path`s as
|
|
201
239
|
* ABSOLUTE paths but keys `inputs` by CWD-RELATIVE paths, so a raw `inputs[im.path]` lookup misses
|
|
@@ -231,7 +269,7 @@ function inputKeyResolver(inputs) {
|
|
|
231
269
|
function shortestServerOnlyChain(inputs, entryInputs, markedModule, resolveTarget) {
|
|
232
270
|
// The label for the marked module's tail: its as-written specifier (filled when we cross the edge
|
|
233
271
|
// that reaches it) suffixed with `(marked server-only)`; the entry case uses the entry key itself.
|
|
234
|
-
const tail = (label) => `${label} (marked
|
|
272
|
+
const tail = (label) => `${label} (marked backend-only)`;
|
|
235
273
|
// An entry that is ITSELF the marked module - the chain is just that one node.
|
|
236
274
|
if (entryInputs.includes(markedModule))
|
|
237
275
|
return [tail(markedModule)];
|
|
@@ -263,7 +301,7 @@ function shortestServerOnlyChain(inputs, entryInputs, markedModule, resolveTarge
|
|
|
263
301
|
}
|
|
264
302
|
/**
|
|
265
303
|
* Scan a build's metafile for any module that opts into the `server-only` marker (a side-effect
|
|
266
|
-
* `import "@nifrajs/web/
|
|
304
|
+
* `import "@nifrajs/web/backend-only"`) yet landed in a CLIENT output chunk, returning a sorted, deduped
|
|
267
305
|
* list of {@link ServerOnlyFinding}s. Mirrors {@link detectNodeBuiltinsInClient}: it reads the SAME
|
|
268
306
|
* graph facts - which inputs import the marker (the "marked" modules), which chunk each landed in (the
|
|
269
307
|
* per-output `inputs`), and the shortest import chain from a user entry to it. The marker module ITSELF
|
|
@@ -302,18 +340,30 @@ export function detectServerOnlyInClient(graph) {
|
|
|
302
340
|
};
|
|
303
341
|
// (2) Locate which emitted chunk each marked module reached, via the per-output `inputs`.
|
|
304
342
|
const findings = new Map();
|
|
343
|
+
const placed = new Set();
|
|
305
344
|
for (const [outputPath, output] of Object.entries(graph.chunks)) {
|
|
306
345
|
for (const inputKey of output.modules) {
|
|
307
346
|
if (!marked.has(inputKey))
|
|
308
347
|
continue;
|
|
309
348
|
const chunk = basename(outputPath);
|
|
349
|
+
placed.add(inputKey);
|
|
310
350
|
findings.set(`${inputKey}\0${chunk}`, { chunk, chain: chainFor(inputKey) });
|
|
311
351
|
}
|
|
312
352
|
}
|
|
353
|
+
// A marked module the build loaded but no chunk lists: the bundler inlined what it exports (a
|
|
354
|
+
// constant ships without its module) or dropped it. The import crossed the boundary either way.
|
|
355
|
+
for (const inputKey of marked) {
|
|
356
|
+
if (placed.has(inputKey))
|
|
357
|
+
continue;
|
|
358
|
+
findings.set(`${inputKey}\0`, {
|
|
359
|
+
chunk: "none, inlined or shaken out",
|
|
360
|
+
chain: chainFor(inputKey),
|
|
361
|
+
});
|
|
362
|
+
}
|
|
313
363
|
return [...findings.values()].sort((a, b) => {
|
|
314
364
|
const am = a.chain[a.chain.length - 1] ?? "";
|
|
315
365
|
const bm = b.chain[b.chain.length - 1] ?? "";
|
|
316
|
-
return am === bm ? a.chunk
|
|
366
|
+
return am === bm ? codeUnitOrder(a.chunk, b.chunk) : codeUnitOrder(am, bm);
|
|
317
367
|
});
|
|
318
368
|
}
|
|
319
369
|
// ---------------------------------------------------------------------------------------------------
|
|
@@ -329,21 +379,19 @@ export function formatNodeBuiltinLeak(findings) {
|
|
|
329
379
|
const lines = findings.map((finding) => finding.chain.length > 1
|
|
330
380
|
? ` - ${finding.builtin} reached the client bundle via ${finding.chain.join(" → ")} (chunk: ${finding.chunk})`
|
|
331
381
|
: ` - ${finding.builtin} reached the client bundle via ${finding.chunk}`);
|
|
332
|
-
return (`[nifra/web] Node built-in(s) in the client bundle -
|
|
333
|
-
`
|
|
334
|
-
`top level):\n${lines.join("\n")}`);
|
|
382
|
+
return (`[nifra/web] Node built-in(s) in the client bundle - built-ins run on the server only: import ` +
|
|
383
|
+
`them in a route's backend half (x.backend.ts) or under backend/, never in browser code:\n${lines.join("\n")}`);
|
|
335
384
|
}
|
|
336
385
|
/** The build-failing message for `server-only`-marked modules that reached the client. `undefined` ⇒ clean. */
|
|
337
386
|
export function formatServerOnlyLeak(findings) {
|
|
338
387
|
if (findings.length === 0)
|
|
339
388
|
return undefined;
|
|
340
389
|
const lines = findings.map((finding) => finding.chain.length > 1
|
|
341
|
-
? ` -
|
|
342
|
-
: ` -
|
|
343
|
-
return (`[nifra/web]
|
|
344
|
-
`\`import "${SERVER_ONLY_MARKER}"\` reached the browser. Move it
|
|
345
|
-
`
|
|
346
|
-
`to the client:\n${lines.join("\n")}`);
|
|
390
|
+
? ` - backend-only module reached the client bundle via ${finding.chain.join(" → ")} (chunk: ${finding.chunk})`
|
|
391
|
+
: ` - backend-only module reached the client bundle via ${finding.chunk}`);
|
|
392
|
+
return (`[nifra/web] backend-only module(s) in the client bundle - a module marked ` +
|
|
393
|
+
`\`import "${SERVER_ONLY_MARKER}"\` reached the browser. Move it under backend/ and reach it ` +
|
|
394
|
+
`from a route's backend half (x.backend.ts) or a *.fn.ts server function:\n${lines.join("\n")}`);
|
|
347
395
|
}
|
|
348
396
|
/**
|
|
349
397
|
* Aggregate a list of measured chunks into a {@link SizeReport}: sort biggest-gzip-first (ties broken
|
|
@@ -351,7 +399,7 @@ export function formatServerOnlyLeak(findings) {
|
|
|
351
399
|
* file + gzipping it) happens in the orchestrator; this is the deterministic, unit-testable core.
|
|
352
400
|
*/
|
|
353
401
|
export function aggregateSizeReport(chunks) {
|
|
354
|
-
const sorted = [...chunks].sort((a, b) => b.gzip - a.gzip || b.bytes - a.bytes || a.name
|
|
402
|
+
const sorted = [...chunks].sort((a, b) => b.gzip - a.gzip || b.bytes - a.bytes || codeUnitOrder(a.name, b.name));
|
|
355
403
|
let totalBytes = 0;
|
|
356
404
|
let totalGzip = 0;
|
|
357
405
|
for (const chunk of sorted) {
|
|
@@ -402,6 +450,8 @@ export function renderSizeReport(report) {
|
|
|
402
450
|
const MANIFEST_ROUTE_ENTRY = /^[ \t]+(["'])([^"'\n]+)\1\s*:\s*(?:m\d+\b|\(\s*\)\s*=>\s*import\b)/gm;
|
|
403
451
|
// The baked client-entry line: `export const clientEntry = "…"`.
|
|
404
452
|
const MANIFEST_CLIENT_ENTRY = /export\s+const\s+clientEntry\s*=\s*["']([^"']+)["']/;
|
|
453
|
+
// The baked stylesheet activation line: `generateServerManifest` emits this after the style maps.
|
|
454
|
+
const MANIFEST_CSS_LOADING = /export\s+const\s+cssLoading\s*=\s*["'](blocking|deferred)["']/;
|
|
405
455
|
/**
|
|
406
456
|
* Extract the route-relative file list a committed server-manifest declares, as the same
|
|
407
457
|
* `routes/`-relative keys `discoverRoutes` produces (e.g. `docs/index.tsx`). Reads the route map's KEYS,
|
|
@@ -424,6 +474,10 @@ export function parseManifestRouteFiles(source, _routesPrefix) {
|
|
|
424
474
|
export function parseManifestClientEntry(source) {
|
|
425
475
|
return MANIFEST_CLIENT_ENTRY.exec(source)?.[1];
|
|
426
476
|
}
|
|
477
|
+
/** The baked framework stylesheet activation mode, or `undefined` for an older manifest. Pure. */
|
|
478
|
+
export function parseManifestCssLoading(source) {
|
|
479
|
+
return MANIFEST_CSS_LOADING.exec(source)?.[1];
|
|
480
|
+
}
|
|
427
481
|
// The baked asset lines `generateServerManifest` emits: `export const styles = […]` then
|
|
428
482
|
// `export const routeStyles = {…}`, each a JSON literal running to the next `export const`. Extracted
|
|
429
483
|
// with `indexOf` slicing rather than a lazy `[\s\S]*?` regex: the slice is multi-line by nature (a
|
|
@@ -436,7 +490,7 @@ function bakedManifestLiteral(source, name) {
|
|
|
436
490
|
return undefined;
|
|
437
491
|
const from = start + opener.length;
|
|
438
492
|
const end = source.indexOf("\nexport const ", from);
|
|
439
|
-
return end === -1 ?
|
|
493
|
+
return source.slice(from, end === -1 ? source.length : end).trim();
|
|
440
494
|
}
|
|
441
495
|
/** Parse a baked JSON literal captured from a committed manifest, tolerating a formatter's TRAILING COMMAS
|
|
442
496
|
* (biome/prettier add one when wrapping a multi-line array/object; strict `JSON.parse` would reject it).
|