@nifrajs/web 4.0.2 → 5.1.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/README.md +19 -0
- package/dist/build-vite.d.ts +19 -0
- package/dist/build-vite.d.ts.map +1 -1
- package/dist/build-vite.js +31 -10
- package/dist/build-vite.js.map +1 -1
- package/dist/build.d.ts +8 -10
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +90 -31
- package/dist/build.js.map +1 -1
- package/dist/cdn.d.ts +8 -0
- package/dist/cdn.d.ts.map +1 -1
- package/dist/cdn.js +14 -15
- package/dist/cdn.js.map +1 -1
- package/dist/client.d.ts +6 -6
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +46 -18
- package/dist/client.js.map +1 -1
- package/dist/deferred.d.ts +2 -2
- package/dist/deferred.d.ts.map +1 -1
- package/dist/deferred.js +28 -7
- package/dist/deferred.js.map +1 -1
- package/dist/dev-feed.d.ts.map +1 -1
- package/dist/dev-feed.js +24 -5
- package/dist/dev-feed.js.map +1 -1
- package/dist/dev-port.d.ts +3 -2
- package/dist/dev-port.d.ts.map +1 -1
- package/dist/dev-port.js +2 -6
- package/dist/dev-port.js.map +1 -1
- package/dist/dev-session.d.ts.map +1 -1
- package/dist/dev-session.js +4 -14
- package/dist/dev-session.js.map +1 -1
- package/dist/dev.d.ts +7 -17
- package/dist/dev.d.ts.map +1 -1
- package/dist/dev.js +13 -1
- package/dist/dev.js.map +1 -1
- package/dist/draft.d.ts +8 -5
- package/dist/draft.d.ts.map +1 -1
- package/dist/draft.js +30 -13
- package/dist/draft.js.map +1 -1
- package/dist/fonts-google.d.ts.map +1 -1
- package/dist/fonts-google.js +7 -0
- package/dist/fonts-google.js.map +1 -1
- package/dist/index.d.ts +5 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/internal/codegen.d.ts +1 -0
- package/dist/internal/codegen.d.ts.map +1 -1
- package/dist/internal/codegen.js +56 -29
- package/dist/internal/codegen.js.map +1 -1
- package/dist/internal/disposable-dir.d.ts +8 -0
- package/dist/internal/disposable-dir.d.ts.map +1 -0
- package/dist/internal/disposable-dir.js +25 -0
- package/dist/internal/disposable-dir.js.map +1 -0
- package/dist/internal/entry-chunks.d.ts +9 -0
- package/dist/internal/entry-chunks.d.ts.map +1 -0
- package/dist/internal/entry-chunks.js +15 -0
- package/dist/internal/entry-chunks.js.map +1 -0
- package/dist/internal/evidence-traversal.d.ts +12 -0
- package/dist/internal/evidence-traversal.d.ts.map +1 -0
- package/dist/internal/evidence-traversal.js +48 -0
- package/dist/internal/evidence-traversal.js.map +1 -0
- package/dist/internal/head-merge.d.ts +6 -0
- package/dist/internal/head-merge.d.ts.map +1 -1
- package/dist/internal/head-merge.js +9 -0
- package/dist/internal/head-merge.js.map +1 -1
- package/dist/internal/js-string.d.ts +2 -0
- package/dist/internal/js-string.d.ts.map +1 -1
- package/dist/internal/js-string.js +5 -1
- package/dist/internal/js-string.js.map +1 -1
- package/dist/internal/mount-shadow.js +1 -1
- package/dist/internal/mount-shadow.js.map +1 -1
- package/dist/internal/output-guard.d.ts +7 -0
- package/dist/internal/output-guard.d.ts.map +1 -1
- package/dist/internal/output-guard.js +80 -8
- package/dist/internal/output-guard.js.map +1 -1
- package/dist/internal/package-entries.d.ts +34 -0
- package/dist/internal/package-entries.d.ts.map +1 -0
- package/dist/internal/package-entries.js +324 -0
- package/dist/internal/package-entries.js.map +1 -0
- package/dist/internal/page-execution.d.ts +6 -0
- package/dist/internal/page-execution.d.ts.map +1 -1
- package/dist/internal/page-execution.js +437 -114
- package/dist/internal/page-execution.js.map +1 -1
- package/dist/internal/parity.d.ts.map +1 -1
- package/dist/internal/parity.js +15 -2
- package/dist/internal/parity.js.map +1 -1
- package/dist/internal/private-env.d.ts +8 -0
- package/dist/internal/private-env.d.ts.map +1 -1
- package/dist/internal/private-env.js +25 -10
- package/dist/internal/private-env.js.map +1 -1
- package/dist/internal/progressive-cookies.d.ts +14 -0
- package/dist/internal/progressive-cookies.d.ts.map +1 -0
- package/dist/internal/progressive-cookies.js +43 -0
- package/dist/internal/progressive-cookies.js.map +1 -0
- package/dist/internal/public-env.d.ts +2 -0
- package/dist/internal/public-env.d.ts.map +1 -0
- package/dist/internal/public-env.js +13 -0
- package/dist/internal/public-env.js.map +1 -0
- package/dist/internal/render-document.d.ts +5 -44
- package/dist/internal/render-document.d.ts.map +1 -1
- package/dist/internal/render-document.js +51 -63
- package/dist/internal/render-document.js.map +1 -1
- package/dist/internal/response-controls.d.ts +2 -0
- package/dist/internal/response-controls.d.ts.map +1 -1
- package/dist/internal/response-controls.js +26 -16
- package/dist/internal/response-controls.js.map +1 -1
- package/dist/internal/revive-dates.d.ts +16 -0
- package/dist/internal/revive-dates.d.ts.map +1 -0
- package/dist/internal/revive-dates.js +32 -0
- package/dist/internal/revive-dates.js.map +1 -0
- package/dist/internal/route-path.d.ts +14 -0
- package/dist/internal/route-path.d.ts.map +1 -0
- package/dist/internal/route-path.js +19 -0
- package/dist/internal/route-path.js.map +1 -0
- package/dist/internal/secret-scan.d.ts.map +1 -1
- package/dist/internal/secret-scan.js +190 -20
- package/dist/internal/secret-scan.js.map +1 -1
- package/dist/internal/server-boundary.d.ts.map +1 -1
- package/dist/internal/server-boundary.js +33 -5
- package/dist/internal/server-boundary.js.map +1 -1
- package/dist/internal/web-app.d.ts +25 -18
- package/dist/internal/web-app.d.ts.map +1 -1
- package/dist/internal/web-app.js +81 -24
- package/dist/internal/web-app.js.map +1 -1
- package/dist/internal/wire-date.d.ts +3 -0
- package/dist/internal/wire-date.d.ts.map +1 -0
- package/dist/internal/wire-date.js +14 -0
- package/dist/internal/wire-date.js.map +1 -0
- package/dist/internal/without-query.d.ts +4 -0
- package/dist/internal/without-query.d.ts.map +1 -0
- package/dist/internal/without-query.js +9 -0
- package/dist/internal/without-query.js.map +1 -0
- package/dist/internal/zone-graph.d.ts +4 -0
- package/dist/internal/zone-graph.d.ts.map +1 -1
- package/dist/internal/zone-graph.js +71 -20
- package/dist/internal/zone-graph.js.map +1 -1
- package/dist/isr.d.ts +59 -3
- package/dist/isr.d.ts.map +1 -1
- package/dist/isr.js +311 -41
- package/dist/isr.js.map +1 -1
- package/dist/llms-txt.d.ts +2 -0
- package/dist/llms-txt.d.ts.map +1 -1
- package/dist/llms-txt.js +29 -3
- package/dist/llms-txt.js.map +1 -1
- package/dist/manifest.d.ts +37 -4
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +4 -0
- package/dist/manifest.js.map +1 -1
- package/dist/open-resolved.d.ts +18 -0
- package/dist/open-resolved.d.ts.map +1 -0
- package/dist/open-resolved.js +62 -0
- package/dist/open-resolved.js.map +1 -0
- package/dist/plugins/kit.d.ts +1 -0
- package/dist/plugins/kit.d.ts.map +1 -1
- package/dist/plugins/kit.js +26 -11
- package/dist/plugins/kit.js.map +1 -1
- package/dist/plugins/vite-leak-guard.d.ts +9 -1
- package/dist/plugins/vite-leak-guard.d.ts.map +1 -1
- package/dist/plugins/vite-leak-guard.js +84 -7
- package/dist/plugins/vite-leak-guard.js.map +1 -1
- package/dist/plugins/vite-zone-guard.d.ts.map +1 -1
- package/dist/plugins/vite-zone-guard.js +17 -21
- package/dist/plugins/vite-zone-guard.js.map +1 -1
- package/dist/plugins/zone-guard.d.ts.map +1 -1
- package/dist/plugins/zone-guard.js +44 -3
- package/dist/plugins/zone-guard.js.map +1 -1
- package/dist/prerender.d.ts +5 -1
- package/dist/prerender.d.ts.map +1 -1
- package/dist/prerender.js +41 -19
- package/dist/prerender.js.map +1 -1
- package/dist/public-dir.d.ts +8 -1
- package/dist/public-dir.d.ts.map +1 -1
- package/dist/public-dir.js +17 -6
- package/dist/public-dir.js.map +1 -1
- package/dist/query.d.ts +13 -4
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +89 -26
- package/dist/query.js.map +1 -1
- package/dist/render-seam.d.ts +25 -2
- package/dist/render-seam.d.ts.map +1 -1
- package/dist/render-seam.js +1 -0
- package/dist/render-seam.js.map +1 -1
- package/dist/route-types.d.ts.map +1 -1
- package/dist/route-types.js +20 -9
- package/dist/route-types.js.map +1 -1
- package/dist/router.d.ts +9 -2
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +47 -50
- package/dist/router.js.map +1 -1
- package/dist/seo.d.ts +49 -0
- package/dist/seo.d.ts.map +1 -0
- package/dist/seo.js +48 -0
- package/dist/seo.js.map +1 -0
- package/dist/server-components/build-info.d.ts +3 -0
- package/dist/server-components/build-info.d.ts.map +1 -0
- package/dist/server-components/build-info.js +7 -0
- package/dist/server-components/build-info.js.map +1 -0
- package/dist/server-components/build-target.d.ts +12 -0
- package/dist/server-components/build-target.d.ts.map +1 -0
- package/dist/server-components/build-target.js +153 -0
- package/dist/server-components/build-target.js.map +1 -0
- package/dist/server-components/build.d.ts +24 -0
- package/dist/server-components/build.d.ts.map +1 -0
- package/dist/server-components/build.js +366 -0
- package/dist/server-components/build.js.map +1 -0
- package/dist/server-components/bundle-proof.d.ts +3 -0
- package/dist/server-components/bundle-proof.d.ts.map +1 -0
- package/dist/server-components/bundle-proof.js +23 -0
- package/dist/server-components/bundle-proof.js.map +1 -0
- package/dist/server-components/client.d.ts +46 -0
- package/dist/server-components/client.d.ts.map +1 -0
- package/dist/server-components/client.js +594 -0
- package/dist/server-components/client.js.map +1 -0
- package/dist/server-components/definition.d.ts +11 -0
- package/dist/server-components/definition.d.ts.map +1 -0
- package/dist/server-components/definition.js +94 -0
- package/dist/server-components/definition.js.map +1 -0
- package/dist/server-components/dev-http.d.ts +5 -0
- package/dist/server-components/dev-http.d.ts.map +1 -0
- package/dist/server-components/dev-http.js +71 -0
- package/dist/server-components/dev-http.js.map +1 -0
- package/dist/server-components/error.d.ts +9 -0
- package/dist/server-components/error.d.ts.map +1 -0
- package/dist/server-components/error.js +24 -0
- package/dist/server-components/error.js.map +1 -0
- package/dist/server-components/frames.d.ts +7 -0
- package/dist/server-components/frames.d.ts.map +1 -0
- package/dist/server-components/frames.js +169 -0
- package/dist/server-components/frames.js.map +1 -0
- package/dist/server-components/html-policy.d.ts +6 -0
- package/dist/server-components/html-policy.d.ts.map +1 -0
- package/dist/server-components/html-policy.js +75 -0
- package/dist/server-components/html-policy.js.map +1 -0
- package/dist/server-components/html.d.ts +4 -0
- package/dist/server-components/html.d.ts.map +1 -0
- package/dist/server-components/html.js +67 -0
- package/dist/server-components/html.js.map +1 -0
- package/dist/server-components/islands.d.ts +44 -0
- package/dist/server-components/islands.d.ts.map +1 -0
- package/dist/server-components/islands.js +42 -0
- package/dist/server-components/islands.js.map +1 -0
- package/dist/server-components/native.d.ts +4 -0
- package/dist/server-components/native.d.ts.map +1 -0
- package/dist/server-components/native.js +81 -0
- package/dist/server-components/native.js.map +1 -0
- package/dist/server-components/portal.d.ts +6 -0
- package/dist/server-components/portal.d.ts.map +1 -0
- package/dist/server-components/portal.js +35 -0
- package/dist/server-components/portal.js.map +1 -0
- package/dist/server-components/props.d.ts +3 -0
- package/dist/server-components/props.d.ts.map +1 -0
- package/dist/server-components/props.js +14 -0
- package/dist/server-components/props.js.map +1 -0
- package/dist/server-components/protocol.d.ts +44 -0
- package/dist/server-components/protocol.d.ts.map +1 -0
- package/dist/server-components/protocol.js +139 -0
- package/dist/server-components/protocol.js.map +1 -0
- package/dist/server-components/range.d.ts +24 -0
- package/dist/server-components/range.d.ts.map +1 -0
- package/dist/server-components/range.js +263 -0
- package/dist/server-components/range.js.map +1 -0
- package/dist/server-components/registry.d.ts +6 -0
- package/dist/server-components/registry.d.ts.map +1 -0
- package/dist/server-components/registry.js +30 -0
- package/dist/server-components/registry.js.map +1 -0
- package/dist/server-components/response.d.ts +4 -0
- package/dist/server-components/response.d.ts.map +1 -0
- package/dist/server-components/response.js +32 -0
- package/dist/server-components/response.js.map +1 -0
- package/dist/server-components/router-integration.d.ts +9 -0
- package/dist/server-components/router-integration.d.ts.map +1 -0
- package/dist/server-components/router-integration.js +29 -0
- package/dist/server-components/router-integration.js.map +1 -0
- package/dist/server-components/runtime.d.ts +14 -0
- package/dist/server-components/runtime.d.ts.map +1 -0
- package/dist/server-components/runtime.js +276 -0
- package/dist/server-components/runtime.js.map +1 -0
- package/dist/server-components/scheduler.d.ts +14 -0
- package/dist/server-components/scheduler.d.ts.map +1 -0
- package/dist/server-components/scheduler.js +74 -0
- package/dist/server-components/scheduler.js.map +1 -0
- package/dist/server-components/schema.d.ts +4 -0
- package/dist/server-components/schema.d.ts.map +1 -0
- package/dist/server-components/schema.js +77 -0
- package/dist/server-components/schema.js.map +1 -0
- package/dist/server-components/server-entry.d.ts +12 -0
- package/dist/server-components/server-entry.d.ts.map +1 -0
- package/dist/server-components/server-entry.js +90 -0
- package/dist/server-components/server-entry.js.map +1 -0
- package/dist/server-components/source.d.ts +15 -0
- package/dist/server-components/source.d.ts.map +1 -0
- package/dist/server-components/source.js +269 -0
- package/dist/server-components/source.js.map +1 -0
- package/dist/server-components/state.d.ts +4 -0
- package/dist/server-components/state.d.ts.map +1 -0
- package/dist/server-components/state.js +123 -0
- package/dist/server-components/state.js.map +1 -0
- package/dist/server-components/stream.d.ts +6 -0
- package/dist/server-components/stream.d.ts.map +1 -0
- package/dist/server-components/stream.js +70 -0
- package/dist/server-components/stream.js.map +1 -0
- package/dist/server-components/trusted-html.d.ts +3 -0
- package/dist/server-components/trusted-html.d.ts.map +1 -0
- package/dist/server-components/trusted-html.js +14 -0
- package/dist/server-components/trusted-html.js.map +1 -0
- package/dist/server-components/types.d.ts +107 -0
- package/dist/server-components/types.d.ts.map +1 -0
- package/dist/server-components/types.js +2 -0
- package/dist/server-components/types.js.map +1 -0
- package/dist/server-components/typescript.d.ts +11 -0
- package/dist/server-components/typescript.d.ts.map +1 -0
- package/dist/server-components/typescript.js +28 -0
- package/dist/server-components/typescript.js.map +1 -0
- package/dist/server-components/value.d.ts +5 -0
- package/dist/server-components/value.d.ts.map +1 -0
- package/dist/server-components/value.js +77 -0
- package/dist/server-components/value.js.map +1 -0
- package/dist/server-components/vite.d.ts +12 -0
- package/dist/server-components/vite.d.ts.map +1 -0
- package/dist/server-components/vite.js +197 -0
- package/dist/server-components/vite.js.map +1 -0
- package/dist/server-components.d.ts +5 -0
- package/dist/server-components.d.ts.map +1 -0
- package/dist/server-components.js +4 -0
- package/dist/server-components.js.map +1 -0
- package/dist/service-worker.d.ts +8 -1
- package/dist/service-worker.d.ts.map +1 -1
- package/dist/service-worker.js +20 -6
- package/dist/service-worker.js.map +1 -1
- package/dist/vite.d.ts +12 -0
- package/dist/vite.d.ts.map +1 -1
- package/dist/vite.js +7 -1
- package/dist/vite.js.map +1 -1
- package/dist/zones.d.ts +64 -2
- package/dist/zones.d.ts.map +1 -1
- package/dist/zones.js +331 -28
- package/dist/zones.js.map +1 -1
- package/package.json +102 -4
- package/src/build-vite.ts +31 -9
- package/src/build.ts +109 -31
- package/src/cdn.ts +18 -12
- package/src/client.ts +48 -17
- package/src/deferred.ts +27 -9
- package/src/dev-feed.ts +24 -5
- package/src/dev-port.ts +4 -10
- package/src/dev-session.ts +4 -13
- package/src/dev.ts +29 -1
- package/src/draft.ts +35 -14
- package/src/fonts-google.ts +10 -0
- package/src/index.ts +5 -6
- package/src/internal/codegen.ts +60 -29
- package/src/internal/disposable-dir.ts +24 -0
- package/src/internal/entry-chunks.ts +18 -0
- package/src/internal/evidence-traversal.ts +57 -0
- package/src/internal/head-merge.ts +16 -0
- package/src/internal/js-string.ts +6 -1
- package/src/internal/mount-shadow.ts +1 -1
- package/src/internal/output-guard.ts +88 -7
- package/src/internal/package-entries.ts +331 -0
- package/src/internal/page-execution.ts +573 -114
- package/src/internal/parity.ts +15 -2
- package/src/internal/private-env.ts +27 -13
- package/src/internal/progressive-cookies.ts +60 -0
- package/src/internal/public-env.ts +14 -0
- package/src/internal/render-document.ts +66 -89
- package/src/internal/response-controls.ts +31 -14
- package/src/internal/revive-dates.ts +35 -0
- package/src/internal/route-path.ts +24 -0
- package/src/internal/secret-scan.ts +190 -18
- package/src/internal/server-boundary.ts +29 -5
- package/src/internal/web-app.ts +126 -42
- package/src/internal/wire-date.ts +16 -0
- package/src/internal/without-query.ts +8 -0
- package/src/internal/zone-graph.ts +78 -25
- package/src/isr.ts +364 -45
- package/src/llms-txt.ts +32 -3
- package/src/manifest.ts +38 -4
- package/src/open-resolved.ts +64 -0
- package/src/plugins/kit.ts +31 -11
- package/src/plugins/vite-leak-guard.ts +104 -8
- package/src/plugins/vite-zone-guard.ts +21 -19
- package/src/plugins/zone-guard.ts +41 -2
- package/src/prerender.ts +39 -18
- package/src/public-dir.ts +27 -8
- package/src/query.ts +107 -26
- package/src/render-seam.ts +30 -2
- package/src/route-types.ts +34 -7
- package/src/router.ts +66 -59
- package/src/seo.ts +68 -0
- package/src/server-components/build-info.ts +11 -0
- package/src/server-components/build-target.ts +194 -0
- package/src/server-components/build.ts +419 -0
- package/src/server-components/bundle-proof.ts +33 -0
- package/src/server-components/client.ts +663 -0
- package/src/server-components/definition.ts +125 -0
- package/src/server-components/dev-http.ts +75 -0
- package/src/server-components/error.ts +24 -0
- package/src/server-components/frames.ts +181 -0
- package/src/server-components/html-policy.ts +94 -0
- package/src/server-components/html.ts +81 -0
- package/src/server-components/islands.ts +111 -0
- package/src/server-components/native.ts +101 -0
- package/src/server-components/portal.ts +42 -0
- package/src/server-components/props.ts +19 -0
- package/src/server-components/protocol.ts +167 -0
- package/src/server-components/range.ts +313 -0
- package/src/server-components/registry.ts +34 -0
- package/src/server-components/response.ts +44 -0
- package/src/server-components/router-integration.ts +40 -0
- package/src/server-components/runtime.ts +376 -0
- package/src/server-components/scheduler.ts +84 -0
- package/src/server-components/schema.ts +69 -0
- package/src/server-components/server-entry.ts +98 -0
- package/src/server-components/source.ts +324 -0
- package/src/server-components/state.ts +143 -0
- package/src/server-components/stream.ts +71 -0
- package/src/server-components/trusted-html.ts +21 -0
- package/src/server-components/types.ts +138 -0
- package/src/server-components/typescript.ts +39 -0
- package/src/server-components/value.ts +82 -0
- package/src/server-components/vite.ts +242 -0
- package/src/server-components.ts +32 -0
- package/src/service-worker.ts +24 -7
- package/src/vite.ts +8 -1
- package/src/zones.ts +418 -32
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import { ServerComponentError } from "./error.js";
|
|
2
|
+
import { validateComponentTag } from "./html-policy.js";
|
|
3
|
+
import { isClientIsland } from "./islands.js";
|
|
4
|
+
import { guardComponentProps } from "./props.js";
|
|
5
|
+
function failure() {
|
|
6
|
+
return new ServerComponentError("component_protocol", 400);
|
|
7
|
+
}
|
|
8
|
+
/** Parse inertly and reject executable content before it can reach a live document. */
|
|
9
|
+
export function parseComponentHTML(html, context, trustedHTML) {
|
|
10
|
+
const range = document.createRange();
|
|
11
|
+
range.selectNodeContents(context);
|
|
12
|
+
// A TT policy only authorizes inert parsing here. Validation still precedes insertion.
|
|
13
|
+
// biome-ignore lint/plugin/requireSafetyCommentForTypeAssertion: Preparation validates the complete record and owned DOM topology; only this adapter creates the prepared plan and native range.
|
|
14
|
+
const source = (trustedHTML === undefined ? html : trustedHTML(html));
|
|
15
|
+
const inert = new DOMParser().parseFromString(source, "text/html");
|
|
16
|
+
validateHTML(inert);
|
|
17
|
+
const fragment = range.createContextualFragment(source);
|
|
18
|
+
validateHTML(fragment);
|
|
19
|
+
return fragment;
|
|
20
|
+
}
|
|
21
|
+
function validateHTML(root) {
|
|
22
|
+
for (const element of root.querySelectorAll("*")) {
|
|
23
|
+
validateComponentTag(element.localName, [...element.attributes]);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function hosts(fragment, islands) {
|
|
27
|
+
const map = new Map();
|
|
28
|
+
for (const host of fragment.querySelectorAll("[data-nifra-island]")) {
|
|
29
|
+
let parent = host.parentElement;
|
|
30
|
+
let nested = false;
|
|
31
|
+
while (parent !== null && parent !== fragment) {
|
|
32
|
+
if (parent.hasAttribute("data-nifra-component")) {
|
|
33
|
+
nested = true;
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
parent = parent.parentElement;
|
|
37
|
+
}
|
|
38
|
+
if (nested)
|
|
39
|
+
continue;
|
|
40
|
+
const id = host.getAttribute("data-nifra-island");
|
|
41
|
+
if (id === null ||
|
|
42
|
+
map.has(id) ||
|
|
43
|
+
host.localName !== "nifra-island" ||
|
|
44
|
+
(host.parentElement?.closest("nifra-island") !== null &&
|
|
45
|
+
host.parentElement?.closest("nifra-island") !== undefined))
|
|
46
|
+
throw failure();
|
|
47
|
+
map.set(id, host);
|
|
48
|
+
}
|
|
49
|
+
if (map.size !== islands.length || islands.some((record) => !map.has(record.renderId)))
|
|
50
|
+
throw failure();
|
|
51
|
+
return map;
|
|
52
|
+
}
|
|
53
|
+
class NativeRange {
|
|
54
|
+
#host;
|
|
55
|
+
#options;
|
|
56
|
+
#mounted = new Map();
|
|
57
|
+
#disposed = false;
|
|
58
|
+
#pending = Promise.resolve();
|
|
59
|
+
constructor(host, options) {
|
|
60
|
+
this.#host = host;
|
|
61
|
+
this.#options = options;
|
|
62
|
+
}
|
|
63
|
+
async initialize(prepared, current) {
|
|
64
|
+
const actual = hosts(this.#host, prepared.islands);
|
|
65
|
+
try {
|
|
66
|
+
for (const record of prepared.islands) {
|
|
67
|
+
if (!current())
|
|
68
|
+
throw failure();
|
|
69
|
+
const host = actual.get(record.renderId);
|
|
70
|
+
const contract = prepared.contracts.get(record.reference);
|
|
71
|
+
const root = await this.#options.runtime.hydrate(host, contract, record, current);
|
|
72
|
+
await root.ready;
|
|
73
|
+
if (!current()) {
|
|
74
|
+
await root.dispose();
|
|
75
|
+
throw failure();
|
|
76
|
+
}
|
|
77
|
+
this.#mounted.set(record.renderId, { host, root, record });
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
await this.dispose();
|
|
82
|
+
throw error;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
commit(prepared, current) {
|
|
86
|
+
const pending = this.#pending.then(() => this.#commit(prepared, current));
|
|
87
|
+
this.#pending = pending.catch(() => {
|
|
88
|
+
/* The calling refresh owns the failure; later generations can proceed. */
|
|
89
|
+
});
|
|
90
|
+
return pending;
|
|
91
|
+
}
|
|
92
|
+
async #commit(prepared, current) {
|
|
93
|
+
if (!current() || this.#disposed)
|
|
94
|
+
return;
|
|
95
|
+
const nextHosts = hosts(prepared.fragment, prepared.islands);
|
|
96
|
+
const retainedChildren = new Map();
|
|
97
|
+
for (const host of this.#host.querySelectorAll("[data-nifra-component]")) {
|
|
98
|
+
const id = host.getAttribute("data-nifra-component");
|
|
99
|
+
if (id !== null && prepared.nested.has(id))
|
|
100
|
+
retainedChildren.set(id, host);
|
|
101
|
+
}
|
|
102
|
+
const next = new Map();
|
|
103
|
+
const active = document.activeElement;
|
|
104
|
+
const selection = active instanceof HTMLInputElement || active instanceof HTMLTextAreaElement
|
|
105
|
+
? [active.selectionStart, active.selectionEnd, active.selectionDirection]
|
|
106
|
+
: undefined;
|
|
107
|
+
const acquired = [];
|
|
108
|
+
const slots = [];
|
|
109
|
+
try {
|
|
110
|
+
for (const record of prepared.islands) {
|
|
111
|
+
const previous = this.#mounted.get(record.renderId);
|
|
112
|
+
const placeholder = nextHosts.get(record.renderId);
|
|
113
|
+
if (previous !== undefined &&
|
|
114
|
+
previous.record.reference === record.reference &&
|
|
115
|
+
previous.record.key === record.key) {
|
|
116
|
+
for (const name of new Set([
|
|
117
|
+
...Object.keys(previous.record.slots ?? {}),
|
|
118
|
+
...Object.keys(record.slots ?? {}),
|
|
119
|
+
])) {
|
|
120
|
+
const slot = [...previous.host.querySelectorAll("nifra-slot[data-nifra-slot]")].find((element) => element.getAttribute("data-nifra-slot") === name);
|
|
121
|
+
if (slot === undefined)
|
|
122
|
+
throw failure();
|
|
123
|
+
slots.push({
|
|
124
|
+
host: slot,
|
|
125
|
+
fragment: parseComponentHTML(record.slots?.[name] ?? "", slot, this.#options.trustedHTML),
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
next.set(record.renderId, { ...previous, record });
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
const root = await this.#options.runtime.hydrate(placeholder, prepared.contracts.get(record.reference), record, current);
|
|
132
|
+
acquired.push(root);
|
|
133
|
+
await root.ready;
|
|
134
|
+
if (!current() || this.#disposed) {
|
|
135
|
+
await Promise.all(acquired.map((root) => root.dispose()));
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
next.set(record.renderId, { host: placeholder, root, record });
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
if (!current() || this.#disposed) {
|
|
142
|
+
await Promise.all(acquired.map((root) => root.dispose()));
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
const removed = [...this.#mounted.values()].filter((previous) => next.get(previous.record.renderId)?.root !== previous.root);
|
|
146
|
+
// No await inside this transaction: cancellation cannot detach a live retained root.
|
|
147
|
+
for (const [id, previous] of this.#mounted)
|
|
148
|
+
if (next.get(id)?.root === previous.root)
|
|
149
|
+
nextHosts.get(id).replaceWith(previous.host);
|
|
150
|
+
for (const [id, child] of retainedChildren)
|
|
151
|
+
prepared.nested.get(id).replaceWith(child);
|
|
152
|
+
for (const slot of slots)
|
|
153
|
+
slot.host.replaceChildren(slot.fragment);
|
|
154
|
+
this.#host.replaceChildren(prepared.fragment);
|
|
155
|
+
this.#mounted = next;
|
|
156
|
+
const updates = [];
|
|
157
|
+
for (const record of prepared.islands) {
|
|
158
|
+
if (!current() || this.#disposed)
|
|
159
|
+
return;
|
|
160
|
+
const previous = next.get(record.renderId);
|
|
161
|
+
if (previous !== undefined && !acquired.includes(previous.root))
|
|
162
|
+
// biome-ignore lint/plugin/requireSafetyCommentForTypeAssertion: Preparation validates the complete record and owned DOM topology; only this adapter creates the prepared plan and native range.
|
|
163
|
+
updates.push(previous.root.update(record.props, current));
|
|
164
|
+
}
|
|
165
|
+
await Promise.all(updates);
|
|
166
|
+
if (active instanceof HTMLElement && active.isConnected && current()) {
|
|
167
|
+
active.focus({ preventScroll: true });
|
|
168
|
+
if (selection !== undefined &&
|
|
169
|
+
(active instanceof HTMLInputElement || active instanceof HTMLTextAreaElement) &&
|
|
170
|
+
selection[0] !== null &&
|
|
171
|
+
selection[1] !== null)
|
|
172
|
+
active.setSelectionRange(selection[0], selection[1], selection[2] ?? undefined);
|
|
173
|
+
}
|
|
174
|
+
await Promise.all(removed.map((island) => island.root.dispose()));
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
await Promise.all(acquired
|
|
178
|
+
.filter((root) => ![...this.#mounted.values()].some((island) => island.root === root))
|
|
179
|
+
.map((root) => root.dispose()));
|
|
180
|
+
if (current())
|
|
181
|
+
await this.dispose();
|
|
182
|
+
throw error;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
update() {
|
|
186
|
+
throw new ServerComponentError("component_contract");
|
|
187
|
+
}
|
|
188
|
+
async dispose() {
|
|
189
|
+
if (this.#disposed)
|
|
190
|
+
return;
|
|
191
|
+
this.#disposed = true;
|
|
192
|
+
try {
|
|
193
|
+
await Promise.all([...this.#mounted.values()].map((island) => island.root.dispose()));
|
|
194
|
+
}
|
|
195
|
+
finally {
|
|
196
|
+
this.#mounted.clear();
|
|
197
|
+
this.#host.replaceChildren();
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
export function nativeComponentClient(options) {
|
|
202
|
+
const contracts = new Map();
|
|
203
|
+
for (const contract of options.islands) {
|
|
204
|
+
if (!isClientIsland(contract) ||
|
|
205
|
+
contract.reference === undefined ||
|
|
206
|
+
contracts.has(contract.reference))
|
|
207
|
+
throw new ServerComponentError("component_contract");
|
|
208
|
+
contracts.set(contract.reference, contract);
|
|
209
|
+
}
|
|
210
|
+
return {
|
|
211
|
+
name: options.adapter,
|
|
212
|
+
async prepare(record, current, host, context) {
|
|
213
|
+
const islands = [];
|
|
214
|
+
for (const island of record.islands ?? []) {
|
|
215
|
+
const contract = contracts.get(island.reference);
|
|
216
|
+
if (contract === undefined ||
|
|
217
|
+
Object.keys(island.slots ?? {}).some((name) => !contract.slots.includes(name)))
|
|
218
|
+
throw failure();
|
|
219
|
+
const props = await guardComponentProps(contract.props, island.props);
|
|
220
|
+
if (!current())
|
|
221
|
+
throw failure();
|
|
222
|
+
// biome-ignore lint/plugin/requireSafetyCommentForTypeAssertion: Preparation validates the complete record and owned DOM topology; only this adapter creates the prepared plan and native range.
|
|
223
|
+
islands.push({ ...island, props: props });
|
|
224
|
+
}
|
|
225
|
+
const parseContext = host ?? document.createElement("nifra-component");
|
|
226
|
+
const fragment = parseComponentHTML(record.html, parseContext, options.trustedHTML);
|
|
227
|
+
hosts(fragment, islands);
|
|
228
|
+
const nested = new Map();
|
|
229
|
+
for (const child of fragment.querySelectorAll("[data-nifra-component]")) {
|
|
230
|
+
if (child.parentElement?.closest("[data-nifra-component]") != null)
|
|
231
|
+
continue;
|
|
232
|
+
const id = child.getAttribute("data-nifra-component");
|
|
233
|
+
if (id === null ||
|
|
234
|
+
nested.has(id) ||
|
|
235
|
+
!(context?.records ?? []).some((item) => item.instance === id && item.parent === record.instance))
|
|
236
|
+
throw failure();
|
|
237
|
+
nested.set(id, child);
|
|
238
|
+
}
|
|
239
|
+
return { fragment, islands, contracts, nested };
|
|
240
|
+
},
|
|
241
|
+
async hydrate(host, _record, prepared, current) {
|
|
242
|
+
const range = new NativeRange(host, options);
|
|
243
|
+
// biome-ignore lint/plugin/requireSafetyCommentForTypeAssertion: Preparation validates the complete record and owned DOM topology; only this adapter creates the prepared plan and native range.
|
|
244
|
+
await range.initialize(prepared, current);
|
|
245
|
+
return range;
|
|
246
|
+
},
|
|
247
|
+
async create(host, _record, prepared, current) {
|
|
248
|
+
if (!current())
|
|
249
|
+
throw failure();
|
|
250
|
+
// biome-ignore lint/plugin/requireSafetyCommentForTypeAssertion: Preparation validates the complete record and owned DOM topology; only this adapter creates the prepared plan and native range.
|
|
251
|
+
host.replaceChildren(prepared.fragment);
|
|
252
|
+
const range = new NativeRange(host, options);
|
|
253
|
+
// biome-ignore lint/plugin/requireSafetyCommentForTypeAssertion: Preparation validates the complete record and owned DOM topology; only this adapter creates the prepared plan and native range.
|
|
254
|
+
await range.initialize(prepared, current);
|
|
255
|
+
return range;
|
|
256
|
+
},
|
|
257
|
+
update(root, _record, prepared, current) {
|
|
258
|
+
// biome-ignore lint/plugin/requireSafetyCommentForTypeAssertion: Preparation validates the complete record and owned DOM topology; only this adapter creates the prepared plan and native range.
|
|
259
|
+
return root.commit(prepared, current);
|
|
260
|
+
},
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
//# sourceMappingURL=range.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"range.js","sourceRoot":"","sources":["../../src/server-components/range.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ComponentController } from "./client.js";
|
|
2
|
+
export declare const componentControllers: Set<ComponentController>;
|
|
3
|
+
export declare function invalidateComponentScope(): Promise<void>;
|
|
4
|
+
export declare function registerComponentController(controller: ComponentController): void;
|
|
5
|
+
export declare function unregisterComponentController(controller: ComponentController): void;
|
|
6
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/server-components/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEtD,eAAO,MAAM,oBAAoB,0BAAiC,CAAA;AAgBlE,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC,CAG9D;AAED,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,mBAAmB,GAAG,IAAI,CAGjF;AACD,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,mBAAmB,GAAG,IAAI,CAMnF"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export const componentControllers = new Set();
|
|
2
|
+
let channel;
|
|
3
|
+
function connectInvalidation() {
|
|
4
|
+
if (typeof window === "undefined" ||
|
|
5
|
+
typeof BroadcastChannel === "undefined" ||
|
|
6
|
+
channel !== undefined)
|
|
7
|
+
return;
|
|
8
|
+
channel = new BroadcastChannel("nifra-component-scope-v1");
|
|
9
|
+
channel.onmessage = (event) => {
|
|
10
|
+
if (event.data === 1)
|
|
11
|
+
for (const controller of componentControllers)
|
|
12
|
+
void controller.invalidateScope().catch(() => controller.reportError("component_failed"));
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export async function invalidateComponentScope() {
|
|
16
|
+
await Promise.all([...componentControllers].map((controller) => controller.invalidateScope()));
|
|
17
|
+
channel?.postMessage(1);
|
|
18
|
+
}
|
|
19
|
+
export function registerComponentController(controller) {
|
|
20
|
+
componentControllers.add(controller);
|
|
21
|
+
connectInvalidation();
|
|
22
|
+
}
|
|
23
|
+
export function unregisterComponentController(controller) {
|
|
24
|
+
componentControllers.delete(controller);
|
|
25
|
+
if (componentControllers.size === 0) {
|
|
26
|
+
channel?.close();
|
|
27
|
+
channel = undefined;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/server-components/registry.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAuB,CAAA;AAClE,IAAI,OAAqC,CAAA;AACzC,SAAS,mBAAmB;IAC1B,IACE,OAAO,MAAM,KAAK,WAAW;QAC7B,OAAO,gBAAgB,KAAK,WAAW;QACvC,OAAO,KAAK,SAAS;QAErB,OAAM;IACR,OAAO,GAAG,IAAI,gBAAgB,CAAC,0BAA0B,CAAC,CAAA;IAC1D,OAAO,CAAC,SAAS,GAAG,CAAC,KAA4B,EAAE,EAAE;QACnD,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC;YAClB,KAAK,MAAM,UAAU,IAAI,oBAAoB;gBAC3C,KAAK,UAAU,CAAC,eAAe,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAA;IAC/F,CAAC,CAAA;AACH,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,wBAAwB;IAC5C,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC,CAAA;IAC9F,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAAA;AACzB,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,UAA+B;IACzE,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IACpC,mBAAmB,EAAE,CAAA;AACvB,CAAC;AACD,MAAM,UAAU,6BAA6B,CAAC,UAA+B;IAC3E,oBAAoB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IACvC,IAAI,oBAAoB,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,EAAE,KAAK,EAAE,CAAA;QAChB,OAAO,GAAG,SAAS,CAAA;IACrB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ServerComponentError } from "./error.js";
|
|
2
|
+
/** Read a small terminal envelope; an ordinary owner error keeps its HTTP status and safe code. */
|
|
3
|
+
export declare function componentResponseFailure(response: Response, signal: AbortSignal): Promise<ServerComponentError>;
|
|
4
|
+
//# sourceMappingURL=response.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/server-components/response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkD,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAKjG,mGAAmG;AACnG,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,oBAAoB,CAAC,CAkC/B"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { COMPONENT_ERROR_CODES, ServerComponentError } from "./error.js";
|
|
2
|
+
import { COMPONENT_LIMITS } from "./protocol.js";
|
|
3
|
+
import { readComponentBytes } from "./stream.js";
|
|
4
|
+
import { componentValue } from "./value.js";
|
|
5
|
+
/** Read a small terminal envelope; an ordinary owner error keeps its HTTP status and safe code. */
|
|
6
|
+
export async function componentResponseFailure(response, signal) {
|
|
7
|
+
if (response.body === null ||
|
|
8
|
+
response.headers.get("content-type")?.split(";")[0]?.trim() !== "application/json")
|
|
9
|
+
return new ServerComponentError("component_failed", response.status);
|
|
10
|
+
let value;
|
|
11
|
+
try {
|
|
12
|
+
value = componentValue(JSON.parse(new TextDecoder("utf-8", { fatal: true }).decode(await readComponentBytes(response.body, signal, COMPONENT_LIMITS.headerBytes))), COMPONENT_LIMITS.headerBytes);
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
if (error instanceof ServerComponentError)
|
|
16
|
+
throw error;
|
|
17
|
+
return new ServerComponentError("component_failed", response.status);
|
|
18
|
+
}
|
|
19
|
+
if (typeof value !== "object" || value === null || Array.isArray(value))
|
|
20
|
+
return new ServerComponentError("component_failed", response.status);
|
|
21
|
+
// biome-ignore lint/plugin/requireSafetyCommentForTypeAssertion: The bounded error envelope and exact error-code vocabulary are checked before constructing the typed failure.
|
|
22
|
+
const envelope = value;
|
|
23
|
+
if (Object.keys(envelope).length !== 2 ||
|
|
24
|
+
envelope.v !== 1 ||
|
|
25
|
+
typeof envelope.error !== "string" ||
|
|
26
|
+
// biome-ignore lint/plugin/requireSafetyCommentForTypeAssertion: The bounded error envelope and exact error-code vocabulary are checked before constructing the typed failure.
|
|
27
|
+
!COMPONENT_ERROR_CODES.includes(envelope.error))
|
|
28
|
+
return new ServerComponentError("component_failed", response.status);
|
|
29
|
+
// biome-ignore lint/plugin/requireSafetyCommentForTypeAssertion: The bounded error envelope and exact error-code vocabulary are checked before constructing the typed failure.
|
|
30
|
+
return new ServerComponentError(envelope.error, response.status);
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=response.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/server-components/response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAA2B,oBAAoB,EAAE,MAAM,YAAY,CAAA;AACjG,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAE3C,mGAAmG;AACnG,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,QAAkB,EAClB,MAAmB;IAEnB,IACE,QAAQ,CAAC,IAAI,KAAK,IAAI;QACtB,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,kBAAkB;QAElF,OAAO,IAAI,oBAAoB,CAAC,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;IACtE,IAAI,KAAc,CAAA;IAClB,IAAI,CAAC;QACH,KAAK,GAAG,cAAc,CACpB,IAAI,CAAC,KAAK,CACR,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAC9C,MAAM,kBAAkB,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAC9E,CACF,EACD,gBAAgB,CAAC,WAAW,CAC7B,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,oBAAoB;YAAE,MAAM,KAAK,CAAA;QACtD,OAAO,IAAI,oBAAoB,CAAC,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;IACtE,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrE,OAAO,IAAI,oBAAoB,CAAC,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;IACtE,+KAA+K;IAC/K,MAAM,QAAQ,GAAG,KAAgC,CAAA;IACjD,IACE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC;QAClC,QAAQ,CAAC,CAAC,KAAK,CAAC;QAChB,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ;QAClC,+KAA+K;QAC/K,CAAE,qBAA2C,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;QAEtE,OAAO,IAAI,oBAAoB,CAAC,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;IACtE,+KAA+K;IAC/K,OAAO,IAAI,oBAAoB,CAAC,QAAQ,CAAC,KAA2B,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;AACxF,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ClientRouter } from "../router.js";
|
|
2
|
+
import type { ComponentController } from "./client.js";
|
|
3
|
+
/** Optional router integration; imported only by opted-in application entries. */
|
|
4
|
+
export declare function bindComponentRouter(router: Pick<ClientRouter, "snapshot" | "subscribe">): () => void;
|
|
5
|
+
/** Refresh only after the existing mutation transport reports success. */
|
|
6
|
+
export declare function refreshAfterComponentMutation<T extends {
|
|
7
|
+
readonly ok: boolean;
|
|
8
|
+
}>(mutation: Promise<T>, controller: ComponentController, instances: readonly string[]): Promise<T>;
|
|
9
|
+
//# sourceMappingURL=router-integration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router-integration.d.ts","sourceRoot":"","sources":["../../src/server-components/router-integration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAGtD,kFAAkF;AAClF,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,GAAG,WAAW,CAAC,GACnD,MAAM,IAAI,CAoBZ;AAED,0EAA0E;AAC1E,wBAAsB,6BAA6B,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAA;CAAE,EACpF,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,EACpB,UAAU,EAAE,mBAAmB,EAC/B,SAAS,EAAE,SAAS,MAAM,EAAE,GAC3B,OAAO,CAAC,CAAC,CAAC,CAKZ"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { componentControllers } from "./registry.js";
|
|
2
|
+
/** Optional router integration; imported only by opted-in application entries. */
|
|
3
|
+
export function bindComponentRouter(router) {
|
|
4
|
+
let previous = router.snapshot();
|
|
5
|
+
return router.subscribe(() => {
|
|
6
|
+
const next = router.snapshot();
|
|
7
|
+
if (next.pending && next.pendingPath !== previous.pendingPath)
|
|
8
|
+
for (const controller of componentControllers)
|
|
9
|
+
controller.cancelPending();
|
|
10
|
+
if (!next.pending &&
|
|
11
|
+
(next.serverComponents !== previous.serverComponents || next.path !== previous.path)) {
|
|
12
|
+
for (const controller of componentControllers) {
|
|
13
|
+
const task = next.serverComponents === undefined
|
|
14
|
+
? controller.navigate()
|
|
15
|
+
: controller.adopt(next.serverComponents, next.path);
|
|
16
|
+
void task.catch(() => controller.reportError("component_failed"));
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
previous = next;
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
/** Refresh only after the existing mutation transport reports success. */
|
|
23
|
+
export async function refreshAfterComponentMutation(mutation, controller, instances) {
|
|
24
|
+
const result = await mutation;
|
|
25
|
+
if (result.ok)
|
|
26
|
+
await Promise.all([...new Set(instances)].map((instance) => controller.refresh(instance)));
|
|
27
|
+
return result;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=router-integration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router-integration.js","sourceRoot":"","sources":["../../src/server-components/router-integration.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAEpD,kFAAkF;AAClF,MAAM,UAAU,mBAAmB,CACjC,MAAoD;IAEpD,IAAI,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAA;IAChC,OAAO,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE;QAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAA;QAC9B,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,KAAK,QAAQ,CAAC,WAAW;YAC3D,KAAK,MAAM,UAAU,IAAI,oBAAoB;gBAAE,UAAU,CAAC,aAAa,EAAE,CAAA;QAC3E,IACE,CAAC,IAAI,CAAC,OAAO;YACb,CAAC,IAAI,CAAC,gBAAgB,KAAK,QAAQ,CAAC,gBAAgB,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,EACpF,CAAC;YACD,KAAK,MAAM,UAAU,IAAI,oBAAoB,EAAE,CAAC;gBAC9C,MAAM,IAAI,GACR,IAAI,CAAC,gBAAgB,KAAK,SAAS;oBACjC,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE;oBACvB,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;gBACxD,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAA;YACnE,CAAC;QACH,CAAC;QACD,QAAQ,GAAG,IAAI,CAAA;IACjB,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,0EAA0E;AAC1E,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,QAAoB,EACpB,UAA+B,EAC/B,SAA4B;IAE5B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAA;IAC7B,IAAI,MAAM,CAAC,EAAE;QACX,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;IAC5F,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { CapabilityDefinition } from "@nifrajs/core/capabilities";
|
|
2
|
+
import type { ComponentInstance, ComponentOwner, ServerComponent, ServerComponentHandle, ServerComponentRenderAdapter, ServerComponentRuntime } from "./types.js";
|
|
3
|
+
export interface ServerComponentsOptions {
|
|
4
|
+
readonly build: string;
|
|
5
|
+
readonly adapter: ServerComponentRenderAdapter;
|
|
6
|
+
readonly owners: Readonly<Record<string, ComponentOwner>>;
|
|
7
|
+
readonly capabilities?: readonly CapabilityDefinition[];
|
|
8
|
+
readonly assets?: readonly string[];
|
|
9
|
+
}
|
|
10
|
+
export declare function serverComponentInstance<Input, Props, View>(component: ServerComponent<Input, Props, View>, key: string | number, input: Input, parent?: string): ComponentInstance;
|
|
11
|
+
export declare function defineComponentOwner<const Owner extends ComponentOwner>(owner: Owner): Owner;
|
|
12
|
+
export declare function serverComponentIdentity(owner: string, component: ServerComponentHandle, key: string | number, parent?: string | null): Promise<string>;
|
|
13
|
+
export declare function createServerComponents(options: ServerComponentsOptions): ServerComponentRuntime;
|
|
14
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/server-components/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AAqBtE,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EAEd,eAAe,EAEf,qBAAqB,EACrB,4BAA4B,EAC5B,sBAAsB,EACvB,MAAM,YAAY,CAAA;AAUnB,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,OAAO,EAAE,4BAA4B,CAAA;IAC9C,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAA;IACzD,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAA;IACvD,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACpC;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EACxD,SAAS,EAAE,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,EAC9C,GAAG,EAAE,MAAM,GAAG,MAAM,EACpB,KAAK,EAAE,KAAK,EACZ,MAAM,CAAC,EAAE,MAAM,GACd,iBAAiB,CAInB;AAED,wBAAgB,oBAAoB,CAAC,KAAK,CAAC,KAAK,SAAS,cAAc,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,CAE5F;AAMD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,qBAAqB,EAChC,GAAG,EAAE,MAAM,GAAG,MAAM,EACpB,MAAM,GAAE,MAAM,GAAG,IAAW,GAC3B,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,uBAAuB,GAAG,sBAAsB,CAqS/F"}
|