@craft-ts/core 0.7.0-beta.13
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/LICENSE +21 -0
- package/package.json +58 -0
- package/src/index.d.ts +148 -0
- package/src/index.d.ts.map +1 -0
- package/src/index.js +150 -0
- package/src/index.js.map +1 -0
- package/src/lib/after-recomputation.d.ts +327 -0
- package/src/lib/after-recomputation.d.ts.map +1 -0
- package/src/lib/after-recomputation.js +25 -0
- package/src/lib/after-recomputation.js.map +1 -0
- package/src/lib/app-checked-di.d.ts +82 -0
- package/src/lib/app-checked-di.d.ts.map +1 -0
- package/src/lib/app-checked-di.js +1 -0
- package/src/lib/app-checked-di.js.map +1 -0
- package/src/lib/async-process.d.ts +411 -0
- package/src/lib/async-process.d.ts.map +1 -0
- package/src/lib/async-process.js +702 -0
- package/src/lib/async-process.js.map +1 -0
- package/src/lib/branded-component/branded-component.d.ts +129 -0
- package/src/lib/branded-component/branded-component.d.ts.map +1 -0
- package/src/lib/branded-component/branded-component.js +7 -0
- package/src/lib/branded-component/branded-component.js.map +1 -0
- package/src/lib/browser-boundaries.d.ts +165 -0
- package/src/lib/browser-boundaries.d.ts.map +1 -0
- package/src/lib/browser-boundaries.js +550 -0
- package/src/lib/browser-boundaries.js.map +1 -0
- package/src/lib/client-di-requirement.d.ts +28 -0
- package/src/lib/client-di-requirement.d.ts.map +1 -0
- package/src/lib/client-di-requirement.js +11 -0
- package/src/lib/client-di-requirement.js.map +1 -0
- package/src/lib/client-function-middleware.d.ts +130 -0
- package/src/lib/client-function-middleware.d.ts.map +1 -0
- package/src/lib/client-function-middleware.js +144 -0
- package/src/lib/client-function-middleware.js.map +1 -0
- package/src/lib/component-monitoring.d.ts +7 -0
- package/src/lib/component-monitoring.d.ts.map +1 -0
- package/src/lib/component-monitoring.js +28 -0
- package/src/lib/component-monitoring.js.map +1 -0
- package/src/lib/component-register.d.ts +12 -0
- package/src/lib/component-register.d.ts.map +1 -0
- package/src/lib/component-register.js +13 -0
- package/src/lib/component-register.js.map +1 -0
- package/src/lib/computed-source.d.ts +303 -0
- package/src/lib/computed-source.d.ts.map +1 -0
- package/src/lib/computed-source.js +319 -0
- package/src/lib/computed-source.js.map +1 -0
- package/src/lib/correlation-id-plugin.d.ts +3 -0
- package/src/lib/correlation-id-plugin.d.ts.map +1 -0
- package/src/lib/correlation-id-plugin.js +73 -0
- package/src/lib/correlation-id-plugin.js.map +1 -0
- package/src/lib/correlation-id.d.ts +30 -0
- package/src/lib/correlation-id.d.ts.map +1 -0
- package/src/lib/correlation-id.js +86 -0
- package/src/lib/correlation-id.js.map +1 -0
- package/src/lib/craft-a11y.d.ts +22 -0
- package/src/lib/craft-a11y.d.ts.map +1 -0
- package/src/lib/craft-a11y.js +32 -0
- package/src/lib/craft-a11y.js.map +1 -0
- package/src/lib/craft-activated-route.d.ts +21 -0
- package/src/lib/craft-activated-route.d.ts.map +1 -0
- package/src/lib/craft-activated-route.js +20 -0
- package/src/lib/craft-activated-route.js.map +1 -0
- package/src/lib/craft-app-config.d.ts +91 -0
- package/src/lib/craft-app-config.d.ts.map +1 -0
- package/src/lib/craft-app-config.js +64 -0
- package/src/lib/craft-app-config.js.map +1 -0
- package/src/lib/craft-codec.d.ts +16 -0
- package/src/lib/craft-codec.d.ts.map +1 -0
- package/src/lib/craft-codec.js +1 -0
- package/src/lib/craft-codec.js.map +1 -0
- package/src/lib/craft-computed.d.ts +31 -0
- package/src/lib/craft-computed.d.ts.map +1 -0
- package/src/lib/craft-computed.js +81 -0
- package/src/lib/craft-computed.js.map +1 -0
- package/src/lib/craft-control-flow.d.ts +14 -0
- package/src/lib/craft-control-flow.d.ts.map +1 -0
- package/src/lib/craft-control-flow.js +18 -0
- package/src/lib/craft-control-flow.js.map +1 -0
- package/src/lib/craft-effect.d.ts +13 -0
- package/src/lib/craft-effect.d.ts.map +1 -0
- package/src/lib/craft-effect.js +93 -0
- package/src/lib/craft-effect.js.map +1 -0
- package/src/lib/craft-exception.d.ts +40 -0
- package/src/lib/craft-exception.d.ts.map +1 -0
- package/src/lib/craft-exception.js +16 -0
- package/src/lib/craft-exception.js.map +1 -0
- package/src/lib/craft-gen.d.ts +123 -0
- package/src/lib/craft-gen.d.ts.map +1 -0
- package/src/lib/craft-gen.js +90 -0
- package/src/lib/craft-gen.js.map +1 -0
- package/src/lib/craft-generator-runtime.d.ts +110 -0
- package/src/lib/craft-generator-runtime.d.ts.map +1 -0
- package/src/lib/craft-generator-runtime.js +191 -0
- package/src/lib/craft-generator-runtime.js.map +1 -0
- package/src/lib/craft-guard-runtime.d.ts +70 -0
- package/src/lib/craft-guard-runtime.d.ts.map +1 -0
- package/src/lib/craft-guard-runtime.js +195 -0
- package/src/lib/craft-guard-runtime.js.map +1 -0
- package/src/lib/craft-handshake.d.ts +35 -0
- package/src/lib/craft-handshake.d.ts.map +1 -0
- package/src/lib/craft-handshake.js +34 -0
- package/src/lib/craft-handshake.js.map +1 -0
- package/src/lib/craft-http-client.d.ts +236 -0
- package/src/lib/craft-http-client.d.ts.map +1 -0
- package/src/lib/craft-http-client.js +437 -0
- package/src/lib/craft-http-client.js.map +1 -0
- package/src/lib/craft-http-trace.d.ts +12 -0
- package/src/lib/craft-http-trace.d.ts.map +1 -0
- package/src/lib/craft-http-trace.js +28 -0
- package/src/lib/craft-http-trace.js.map +1 -0
- package/src/lib/craft-lazy.d.ts +42 -0
- package/src/lib/craft-lazy.d.ts.map +1 -0
- package/src/lib/craft-lazy.js +83 -0
- package/src/lib/craft-lazy.js.map +1 -0
- package/src/lib/craft-load-retry.d.ts +76 -0
- package/src/lib/craft-load-retry.d.ts.map +1 -0
- package/src/lib/craft-load-retry.js +160 -0
- package/src/lib/craft-load-retry.js.map +1 -0
- package/src/lib/craft-machine-history.d.ts +145 -0
- package/src/lib/craft-machine-history.d.ts.map +1 -0
- package/src/lib/craft-machine-history.js +276 -0
- package/src/lib/craft-machine-history.js.map +1 -0
- package/src/lib/craft-match.d.ts +49 -0
- package/src/lib/craft-match.d.ts.map +1 -0
- package/src/lib/craft-match.js +58 -0
- package/src/lib/craft-match.js.map +1 -0
- package/src/lib/craft-method.d.ts +28 -0
- package/src/lib/craft-method.d.ts.map +1 -0
- package/src/lib/craft-method.js +45 -0
- package/src/lib/craft-method.js.map +1 -0
- package/src/lib/craft-node-directive.d.ts +32 -0
- package/src/lib/craft-node-directive.d.ts.map +1 -0
- package/src/lib/craft-node-directive.js +22 -0
- package/src/lib/craft-node-directive.js.map +1 -0
- package/src/lib/craft-pending.d.ts +115 -0
- package/src/lib/craft-pending.d.ts.map +1 -0
- package/src/lib/craft-pending.js +187 -0
- package/src/lib/craft-pending.js.map +1 -0
- package/src/lib/craft-pipe.d.ts +63 -0
- package/src/lib/craft-pipe.d.ts.map +1 -0
- package/src/lib/craft-pipe.js +57 -0
- package/src/lib/craft-pipe.js.map +1 -0
- package/src/lib/craft-platform.d.ts +50 -0
- package/src/lib/craft-platform.d.ts.map +1 -0
- package/src/lib/craft-platform.js +175 -0
- package/src/lib/craft-platform.js.map +1 -0
- package/src/lib/craft-primitive-gen.d.ts +137 -0
- package/src/lib/craft-primitive-gen.d.ts.map +1 -0
- package/src/lib/craft-primitive-gen.js +76 -0
- package/src/lib/craft-primitive-gen.js.map +1 -0
- package/src/lib/craft-primitive-registry.d.ts +113 -0
- package/src/lib/craft-primitive-registry.d.ts.map +1 -0
- package/src/lib/craft-primitive-registry.js +159 -0
- package/src/lib/craft-primitive-registry.js.map +1 -0
- package/src/lib/craft-program-operators.d.ts +101 -0
- package/src/lib/craft-program-operators.d.ts.map +1 -0
- package/src/lib/craft-program-operators.js +116 -0
- package/src/lib/craft-program-operators.js.map +1 -0
- package/src/lib/craft-program-runtime.d.ts +80 -0
- package/src/lib/craft-program-runtime.d.ts.map +1 -0
- package/src/lib/craft-program-runtime.js +166 -0
- package/src/lib/craft-program-runtime.js.map +1 -0
- package/src/lib/craft-register-for-runtime.d.ts +39 -0
- package/src/lib/craft-register-for-runtime.d.ts.map +1 -0
- package/src/lib/craft-register-for-runtime.js +96 -0
- package/src/lib/craft-register-for-runtime.js.map +1 -0
- package/src/lib/craft-register-for.d.ts +57 -0
- package/src/lib/craft-register-for.d.ts.map +1 -0
- package/src/lib/craft-register-for.js +200 -0
- package/src/lib/craft-register-for.js.map +1 -0
- package/src/lib/craft-render-identity.d.ts +19 -0
- package/src/lib/craft-render-identity.d.ts.map +1 -0
- package/src/lib/craft-render-identity.js +23 -0
- package/src/lib/craft-render-identity.js.map +1 -0
- package/src/lib/craft-replay.d.ts +5 -0
- package/src/lib/craft-replay.d.ts.map +1 -0
- package/src/lib/craft-replay.js +28 -0
- package/src/lib/craft-replay.js.map +1 -0
- package/src/lib/craft-resolve.d.ts +39 -0
- package/src/lib/craft-resolve.d.ts.map +1 -0
- package/src/lib/craft-resolve.js +9 -0
- package/src/lib/craft-resolve.js.map +1 -0
- package/src/lib/craft-resource.d.ts +11 -0
- package/src/lib/craft-resource.d.ts.map +1 -0
- package/src/lib/craft-resource.js +264 -0
- package/src/lib/craft-resource.js.map +1 -0
- package/src/lib/craft-route-exceptions.d.ts +785 -0
- package/src/lib/craft-route-exceptions.d.ts.map +1 -0
- package/src/lib/craft-route-exceptions.js +86 -0
- package/src/lib/craft-route-exceptions.js.map +1 -0
- package/src/lib/craft-route-load-error.d.ts +1145 -0
- package/src/lib/craft-route-load-error.d.ts.map +1 -0
- package/src/lib/craft-route-load-error.js +173 -0
- package/src/lib/craft-route-load-error.js.map +1 -0
- package/src/lib/craft-route-meta.d.ts +52 -0
- package/src/lib/craft-route-meta.d.ts.map +1 -0
- package/src/lib/craft-route-meta.js +16 -0
- package/src/lib/craft-route-meta.js.map +1 -0
- package/src/lib/craft-route-target.d.ts +27 -0
- package/src/lib/craft-route-target.d.ts.map +1 -0
- package/src/lib/craft-route-target.js +22 -0
- package/src/lib/craft-route-target.js.map +1 -0
- package/src/lib/craft-router-outlet.d.ts +105 -0
- package/src/lib/craft-router-outlet.d.ts.map +1 -0
- package/src/lib/craft-router-outlet.js +735 -0
- package/src/lib/craft-router-outlet.js.map +1 -0
- package/src/lib/craft-router-tokens.d.ts +49 -0
- package/src/lib/craft-router-tokens.d.ts.map +1 -0
- package/src/lib/craft-router-tokens.js +15 -0
- package/src/lib/craft-router-tokens.js.map +1 -0
- package/src/lib/craft-router-trace.d.ts +18 -0
- package/src/lib/craft-router-trace.d.ts.map +1 -0
- package/src/lib/craft-router-trace.js +54 -0
- package/src/lib/craft-router-trace.js.map +1 -0
- package/src/lib/craft-router.d.ts +248 -0
- package/src/lib/craft-router.d.ts.map +1 -0
- package/src/lib/craft-router.js +559 -0
- package/src/lib/craft-router.js.map +1 -0
- package/src/lib/craft-routes.d.ts +755 -0
- package/src/lib/craft-routes.d.ts.map +1 -0
- package/src/lib/craft-routes.js +510 -0
- package/src/lib/craft-routes.js.map +1 -0
- package/src/lib/craft-service.d.ts +1034 -0
- package/src/lib/craft-service.d.ts.map +1 -0
- package/src/lib/craft-service.js +1072 -0
- package/src/lib/craft-service.js.map +1 -0
- package/src/lib/craft-service.shared.d.ts +35 -0
- package/src/lib/craft-service.shared.d.ts.map +1 -0
- package/src/lib/craft-service.shared.js +4 -0
- package/src/lib/craft-service.shared.js.map +1 -0
- package/src/lib/craft-settled.d.ts +171 -0
- package/src/lib/craft-settled.d.ts.map +1 -0
- package/src/lib/craft-settled.js +130 -0
- package/src/lib/craft-settled.js.map +1 -0
- package/src/lib/craft-ssr.d.ts +29 -0
- package/src/lib/craft-ssr.d.ts.map +1 -0
- package/src/lib/craft-ssr.js +27 -0
- package/src/lib/craft-ssr.js.map +1 -0
- package/src/lib/craft-state-machine-runtime.d.ts +88 -0
- package/src/lib/craft-state-machine-runtime.d.ts.map +1 -0
- package/src/lib/craft-state-machine-runtime.js +167 -0
- package/src/lib/craft-state-machine-runtime.js.map +1 -0
- package/src/lib/craft-state-machine.d.ts +233 -0
- package/src/lib/craft-state-machine.d.ts.map +1 -0
- package/src/lib/craft-state-machine.js +254 -0
- package/src/lib/craft-state-machine.js.map +1 -0
- package/src/lib/craft-target-runtime.d.ts +20 -0
- package/src/lib/craft-target-runtime.d.ts.map +1 -0
- package/src/lib/craft-target-runtime.js +42 -0
- package/src/lib/craft-target-runtime.js.map +1 -0
- package/src/lib/craft-transfer-snapshot.d.ts +19 -0
- package/src/lib/craft-transfer-snapshot.d.ts.map +1 -0
- package/src/lib/craft-transfer-snapshot.js +90 -0
- package/src/lib/craft-transfer-snapshot.js.map +1 -0
- package/src/lib/craft-unique.d.ts +7 -0
- package/src/lib/craft-unique.d.ts.map +1 -0
- package/src/lib/craft-unique.js +16 -0
- package/src/lib/craft-unique.js.map +1 -0
- package/src/lib/craft-until-settled.d.ts +99 -0
- package/src/lib/craft-until-settled.d.ts.map +1 -0
- package/src/lib/craft-until-settled.js +81 -0
- package/src/lib/craft-until-settled.js.map +1 -0
- package/src/lib/craft-use.d.ts +26 -0
- package/src/lib/craft-use.d.ts.map +1 -0
- package/src/lib/craft-use.js +37 -0
- package/src/lib/craft-use.js.map +1 -0
- package/src/lib/craft-view-transition.d.ts +102 -0
- package/src/lib/craft-view-transition.d.ts.map +1 -0
- package/src/lib/craft-view-transition.js +130 -0
- package/src/lib/craft-view-transition.js.map +1 -0
- package/src/lib/dom-event-hook.d.ts +30 -0
- package/src/lib/dom-event-hook.d.ts.map +1 -0
- package/src/lib/dom-event-hook.js +16 -0
- package/src/lib/dom-event-hook.js.map +1 -0
- package/src/lib/fn-wrapper.d.ts +13 -0
- package/src/lib/fn-wrapper.d.ts.map +1 -0
- package/src/lib/fn-wrapper.js +66 -0
- package/src/lib/fn-wrapper.js.map +1 -0
- package/src/lib/form/craft-field.d.ts +155 -0
- package/src/lib/form/craft-field.d.ts.map +1 -0
- package/src/lib/form/craft-field.directive.d.ts +70 -0
- package/src/lib/form/craft-field.directive.d.ts.map +1 -0
- package/src/lib/form/craft-field.directive.js +549 -0
- package/src/lib/form/craft-field.directive.js.map +1 -0
- package/src/lib/form/craft-field.js +586 -0
- package/src/lib/form/craft-field.js.map +1 -0
- package/src/lib/form/field-exception.d.ts +62 -0
- package/src/lib/form/field-exception.d.ts.map +1 -0
- package/src/lib/form/field-exception.js +37 -0
- package/src/lib/form/field-exception.js.map +1 -0
- package/src/lib/form/field-lens.d.ts +29 -0
- package/src/lib/form/field-lens.d.ts.map +1 -0
- package/src/lib/form/field-lens.js +32 -0
- package/src/lib/form/field-lens.js.map +1 -0
- package/src/lib/form/insert-form-attributes.d.ts +69 -0
- package/src/lib/form/insert-form-attributes.d.ts.map +1 -0
- package/src/lib/form/insert-form-attributes.js +163 -0
- package/src/lib/form/insert-form-attributes.js.map +1 -0
- package/src/lib/form/insert-form-internals.d.ts +110 -0
- package/src/lib/form/insert-form-internals.d.ts.map +1 -0
- package/src/lib/form/insert-form-internals.js +276 -0
- package/src/lib/form/insert-form-internals.js.map +1 -0
- package/src/lib/form/insert-form-schema.d.ts +10 -0
- package/src/lib/form/insert-form-schema.d.ts.map +1 -0
- package/src/lib/form/insert-form-schema.js +62 -0
- package/src/lib/form/insert-form-schema.js.map +1 -0
- package/src/lib/form/insert-form-submit.d.ts +79 -0
- package/src/lib/form/insert-form-submit.d.ts.map +1 -0
- package/src/lib/form/insert-form-submit.js +126 -0
- package/src/lib/form/insert-form-submit.js.map +1 -0
- package/src/lib/form/insert-form.d.ts +39 -0
- package/src/lib/form/insert-form.d.ts.map +1 -0
- package/src/lib/form/insert-form.js +255 -0
- package/src/lib/form/insert-form.js.map +1 -0
- package/src/lib/form/insert-select-form-tree.d.ts +33 -0
- package/src/lib/form/insert-select-form-tree.d.ts.map +1 -0
- package/src/lib/form/insert-select-form-tree.js +144 -0
- package/src/lib/form/insert-select-form-tree.js.map +1 -0
- package/src/lib/form/insert-sub-form-field.d.ts +17 -0
- package/src/lib/form/insert-sub-form-field.d.ts.map +1 -0
- package/src/lib/form/insert-sub-form-field.js +41 -0
- package/src/lib/form/insert-sub-form-field.js.map +1 -0
- package/src/lib/form/make-form-tree-insert.d.ts +22 -0
- package/src/lib/form/make-form-tree-insert.d.ts.map +1 -0
- package/src/lib/form/make-form-tree-insert.js +43 -0
- package/src/lib/form/make-form-tree-insert.js.map +1 -0
- package/src/lib/form/target-form-field.d.ts +11 -0
- package/src/lib/form/target-form-field.d.ts.map +1 -0
- package/src/lib/form/target-form-field.js +1 -0
- package/src/lib/form/target-form-field.js.map +1 -0
- package/src/lib/form/validator.d.ts +174 -0
- package/src/lib/form/validator.d.ts.map +1 -0
- package/src/lib/form/validator.js +465 -0
- package/src/lib/form/validator.js.map +1 -0
- package/src/lib/from-event-to-source$.d.ts +210 -0
- package/src/lib/from-event-to-source$.d.ts.map +1 -0
- package/src/lib/from-event-to-source$.js +29 -0
- package/src/lib/from-event-to-source$.js.map +1 -0
- package/src/lib/global-persister-handler.service.d.ts +10 -0
- package/src/lib/global-persister-handler.service.d.ts.map +1 -0
- package/src/lib/global-persister-handler.service.js +40 -0
- package/src/lib/global-persister-handler.service.js.map +1 -0
- package/src/lib/host/craft-compat.d.ts +242 -0
- package/src/lib/host/craft-compat.d.ts.map +1 -0
- package/src/lib/host/craft-compat.js +444 -0
- package/src/lib/host/craft-compat.js.map +1 -0
- package/src/lib/host/craft-dom.d.ts +16 -0
- package/src/lib/host/craft-dom.d.ts.map +1 -0
- package/src/lib/host/craft-dom.js +24 -0
- package/src/lib/host/craft-dom.js.map +1 -0
- package/src/lib/host/craft-http.d.ts +22 -0
- package/src/lib/host/craft-http.d.ts.map +1 -0
- package/src/lib/host/craft-http.js +80 -0
- package/src/lib/host/craft-http.js.map +1 -0
- package/src/lib/host/craft-injector-host.d.ts +3 -0
- package/src/lib/host/craft-injector-host.d.ts.map +1 -0
- package/src/lib/host/craft-injector-host.js +2 -0
- package/src/lib/host/craft-injector-host.js.map +1 -0
- package/src/lib/host/craft-injector.d.ts +40 -0
- package/src/lib/host/craft-injector.d.ts.map +1 -0
- package/src/lib/host/craft-injector.js +318 -0
- package/src/lib/host/craft-injector.js.map +1 -0
- package/src/lib/host/craft-linked-signal.d.ts +17 -0
- package/src/lib/host/craft-linked-signal.d.ts.map +1 -0
- package/src/lib/host/craft-linked-signal.js +86 -0
- package/src/lib/host/craft-linked-signal.js.map +1 -0
- package/src/lib/host/craft-router-runtime.d.ts +61 -0
- package/src/lib/host/craft-router-runtime.d.ts.map +1 -0
- package/src/lib/host/craft-router-runtime.js +456 -0
- package/src/lib/host/craft-router-runtime.js.map +1 -0
- package/src/lib/host/craft-router-types.d.ts +84 -0
- package/src/lib/host/craft-router-types.d.ts.map +1 -0
- package/src/lib/host/craft-router-types.js +35 -0
- package/src/lib/host/craft-router-types.js.map +1 -0
- package/src/lib/host/craft-signal.d.ts +45 -0
- package/src/lib/host/craft-signal.d.ts.map +1 -0
- package/src/lib/host/craft-signal.js +161 -0
- package/src/lib/host/craft-signal.js.map +1 -0
- package/src/lib/host/craft-test-bed.d.ts +63 -0
- package/src/lib/host/craft-test-bed.d.ts.map +1 -0
- package/src/lib/host/craft-test-bed.js +114 -0
- package/src/lib/host/craft-test-bed.js.map +1 -0
- package/src/lib/host-tag.d.ts +2 -0
- package/src/lib/host-tag.d.ts.map +1 -0
- package/src/lib/host-tag.js +2 -0
- package/src/lib/host-tag.js.map +1 -0
- package/src/lib/insert-entities.d.ts +131 -0
- package/src/lib/insert-entities.d.ts.map +1 -0
- package/src/lib/insert-entities.js +159 -0
- package/src/lib/insert-entities.js.map +1 -0
- package/src/lib/insert-noop-typing-anchor.d.ts +15 -0
- package/src/lib/insert-noop-typing-anchor.d.ts.map +1 -0
- package/src/lib/insert-noop-typing-anchor.js +16 -0
- package/src/lib/insert-noop-typing-anchor.js.map +1 -0
- package/src/lib/insert-pagination-placeholder-data.d.ts +122 -0
- package/src/lib/insert-pagination-placeholder-data.d.ts.map +1 -0
- package/src/lib/insert-pagination-placeholder-data.js +244 -0
- package/src/lib/insert-pagination-placeholder-data.js.map +1 -0
- package/src/lib/insert-react-on-mutation.d.ts +261 -0
- package/src/lib/insert-react-on-mutation.d.ts.map +1 -0
- package/src/lib/insert-react-on-mutation.js +227 -0
- package/src/lib/insert-react-on-mutation.js.map +1 -0
- package/src/lib/insert-select-resource.d.ts +31 -0
- package/src/lib/insert-select-resource.d.ts.map +1 -0
- package/src/lib/insert-select-resource.js +27 -0
- package/src/lib/insert-select-resource.js.map +1 -0
- package/src/lib/insert-select.d.ts +126 -0
- package/src/lib/insert-select.d.ts.map +1 -0
- package/src/lib/insert-select.js +535 -0
- package/src/lib/insert-select.js.map +1 -0
- package/src/lib/insert-storage-persister.d.ts +27 -0
- package/src/lib/insert-storage-persister.d.ts.map +1 -0
- package/src/lib/insert-storage-persister.js +65 -0
- package/src/lib/insert-storage-persister.js.map +1 -0
- package/src/lib/insert-typed-pipes.d.ts +64 -0
- package/src/lib/insert-typed-pipes.d.ts.map +1 -0
- package/src/lib/insert-typed-pipes.js +32 -0
- package/src/lib/insert-typed-pipes.js.map +1 -0
- package/src/lib/linked-source.d.ts +8 -0
- package/src/lib/linked-source.d.ts.map +1 -0
- package/src/lib/linked-source.js +24 -0
- package/src/lib/linked-source.js.map +1 -0
- package/src/lib/local-storage-persister.d.ts +4 -0
- package/src/lib/local-storage-persister.d.ts.map +1 -0
- package/src/lib/local-storage-persister.js +342 -0
- package/src/lib/local-storage-persister.js.map +1 -0
- package/src/lib/middleware-schema-shared.d.ts +67 -0
- package/src/lib/middleware-schema-shared.d.ts.map +1 -0
- package/src/lib/middleware-schema-shared.js +34 -0
- package/src/lib/middleware-schema-shared.js.map +1 -0
- package/src/lib/mock-http-request-for-route.d.ts +173 -0
- package/src/lib/mock-http-request-for-route.d.ts.map +1 -0
- package/src/lib/mock-http-request-for-route.js +127 -0
- package/src/lib/mock-http-request-for-route.js.map +1 -0
- package/src/lib/mutation.d.ts +332 -0
- package/src/lib/mutation.d.ts.map +1 -0
- package/src/lib/mutation.js +923 -0
- package/src/lib/mutation.js.map +1 -0
- package/src/lib/on$.d.ts +26 -0
- package/src/lib/on$.d.ts.map +1 -0
- package/src/lib/on$.js +19 -0
- package/src/lib/on$.js.map +1 -0
- package/src/lib/portable-server-function.d.ts +68 -0
- package/src/lib/portable-server-function.d.ts.map +1 -0
- package/src/lib/portable-server-function.js +97 -0
- package/src/lib/portable-server-function.js.map +1 -0
- package/src/lib/preserved-resource.d.ts +4 -0
- package/src/lib/preserved-resource.d.ts.map +1 -0
- package/src/lib/preserved-resource.js +60 -0
- package/src/lib/preserved-resource.js.map +1 -0
- package/src/lib/primitive-method-runtime-context.d.ts +28 -0
- package/src/lib/primitive-method-runtime-context.d.ts.map +1 -0
- package/src/lib/primitive-method-runtime-context.js +38 -0
- package/src/lib/primitive-method-runtime-context.js.map +1 -0
- package/src/lib/primitive-resource-runtime-context.d.ts +46 -0
- package/src/lib/primitive-resource-runtime-context.d.ts.map +1 -0
- package/src/lib/primitive-resource-runtime-context.js +102 -0
- package/src/lib/primitive-resource-runtime-context.js.map +1 -0
- package/src/lib/query-params.d.ts +216 -0
- package/src/lib/query-params.d.ts.map +1 -0
- package/src/lib/query-params.js +324 -0
- package/src/lib/query-params.js.map +1 -0
- package/src/lib/query.core.d.ts +214 -0
- package/src/lib/query.core.d.ts.map +1 -0
- package/src/lib/query.core.js +210 -0
- package/src/lib/query.core.js.map +1 -0
- package/src/lib/query.d.ts +324 -0
- package/src/lib/query.d.ts.map +1 -0
- package/src/lib/query.js +971 -0
- package/src/lib/query.js.map +1 -0
- package/src/lib/reactive-read.d.ts +162 -0
- package/src/lib/reactive-read.d.ts.map +1 -0
- package/src/lib/reactive-read.js +389 -0
- package/src/lib/reactive-read.js.map +1 -0
- package/src/lib/resource-by-id.d.ts +71 -0
- package/src/lib/resource-by-id.d.ts.map +1 -0
- package/src/lib/resource-by-id.js +294 -0
- package/src/lib/resource-by-id.js.map +1 -0
- package/src/lib/resource-exception.d.ts +30 -0
- package/src/lib/resource-exception.d.ts.map +1 -0
- package/src/lib/resource-exception.js +86 -0
- package/src/lib/resource-exception.js.map +1 -0
- package/src/lib/route-checked-di.d.ts +229 -0
- package/src/lib/route-checked-di.d.ts.map +1 -0
- package/src/lib/route-checked-di.js +1 -0
- package/src/lib/route-checked-di.js.map +1 -0
- package/src/lib/schema-validation.d.ts +89 -0
- package/src/lib/schema-validation.d.ts.map +1 -0
- package/src/lib/schema-validation.js +110 -0
- package/src/lib/schema-validation.js.map +1 -0
- package/src/lib/send-context-to-ai.d.ts +20 -0
- package/src/lib/send-context-to-ai.d.ts.map +1 -0
- package/src/lib/send-context-to-ai.js +18 -0
- package/src/lib/send-context-to-ai.js.map +1 -0
- package/src/lib/send-context-to-ai.tokens.d.ts +12 -0
- package/src/lib/send-context-to-ai.tokens.d.ts.map +1 -0
- package/src/lib/send-context-to-ai.tokens.js +1 -0
- package/src/lib/send-context-to-ai.tokens.js.map +1 -0
- package/src/lib/server-function-client.d.ts +102 -0
- package/src/lib/server-function-client.d.ts.map +1 -0
- package/src/lib/server-function-client.js +106 -0
- package/src/lib/server-function-client.js.map +1 -0
- package/src/lib/server-function-contract.d.ts +42 -0
- package/src/lib/server-function-contract.d.ts.map +1 -0
- package/src/lib/server-function-contract.js +23 -0
- package/src/lib/server-function-contract.js.map +1 -0
- package/src/lib/server-function-middleware.d.ts +222 -0
- package/src/lib/server-function-middleware.d.ts.map +1 -0
- package/src/lib/server-function-middleware.js +189 -0
- package/src/lib/server-function-middleware.js.map +1 -0
- package/src/lib/server-function.d.ts +114 -0
- package/src/lib/server-function.d.ts.map +1 -0
- package/src/lib/server-function.js +80 -0
- package/src/lib/server-function.js.map +1 -0
- package/src/lib/server-layer.d.ts +185 -0
- package/src/lib/server-layer.d.ts.map +1 -0
- package/src/lib/server-layer.js +121 -0
- package/src/lib/server-layer.js.map +1 -0
- package/src/lib/server.d.ts +83 -0
- package/src/lib/server.d.ts.map +1 -0
- package/src/lib/server.js +266 -0
- package/src/lib/server.js.map +1 -0
- package/src/lib/setup-craft-service-test.d.ts +90 -0
- package/src/lib/setup-craft-service-test.d.ts.map +1 -0
- package/src/lib/setup-craft-service-test.js +193 -0
- package/src/lib/setup-craft-service-test.js.map +1 -0
- package/src/lib/setup-craft-service-testing-by-register.d.ts +245 -0
- package/src/lib/setup-craft-service-testing-by-register.d.ts.map +1 -0
- package/src/lib/setup-craft-service-testing-by-register.js +316 -0
- package/src/lib/setup-craft-service-testing-by-register.js.map +1 -0
- package/src/lib/signal-proxy.d.ts +21 -0
- package/src/lib/signal-proxy.d.ts.map +1 -0
- package/src/lib/signal-proxy.js +79 -0
- package/src/lib/signal-proxy.js.map +1 -0
- package/src/lib/signal-source.d.ts +392 -0
- package/src/lib/signal-source.d.ts.map +1 -0
- package/src/lib/signal-source.js +433 -0
- package/src/lib/signal-source.js.map +1 -0
- package/src/lib/source$.d.ts +121 -0
- package/src/lib/source$.d.ts.map +1 -0
- package/src/lib/source$.js +171 -0
- package/src/lib/source$.js.map +1 -0
- package/src/lib/source-from-event.d.ts +350 -0
- package/src/lib/source-from-event.d.ts.map +1 -0
- package/src/lib/source-from-event.js +26 -0
- package/src/lib/source-from-event.js.map +1 -0
- package/src/lib/stacked-source.d.ts +6 -0
- package/src/lib/stacked-source.d.ts.map +1 -0
- package/src/lib/stacked-source.js +29 -0
- package/src/lib/stacked-source.js.map +1 -0
- package/src/lib/standard-schema.d.ts +43 -0
- package/src/lib/standard-schema.d.ts.map +1 -0
- package/src/lib/standard-schema.js +1 -0
- package/src/lib/standard-schema.js.map +1 -0
- package/src/lib/state-method-runtime-context.d.ts +13 -0
- package/src/lib/state-method-runtime-context.d.ts.map +1 -0
- package/src/lib/state-method-runtime-context.js +11 -0
- package/src/lib/state-method-runtime-context.js.map +1 -0
- package/src/lib/state.d.ts +158 -0
- package/src/lib/state.d.ts.map +1 -0
- package/src/lib/state.js +388 -0
- package/src/lib/state.js.map +1 -0
- package/src/lib/storage-persister.service.d.ts +25 -0
- package/src/lib/storage-persister.service.d.ts.map +1 -0
- package/src/lib/storage-persister.service.js +27 -0
- package/src/lib/storage-persister.service.js.map +1 -0
- package/src/lib/take-app-snapshot.d.ts +31 -0
- package/src/lib/take-app-snapshot.d.ts.map +1 -0
- package/src/lib/take-app-snapshot.js +93 -0
- package/src/lib/take-app-snapshot.js.map +1 -0
- package/src/lib/template-trace.d.ts +37 -0
- package/src/lib/template-trace.d.ts.map +1 -0
- package/src/lib/template-trace.js +37 -0
- package/src/lib/template-trace.js.map +1 -0
- package/src/lib/temporal-runtime.d.ts +146 -0
- package/src/lib/temporal-runtime.d.ts.map +1 -0
- package/src/lib/temporal-runtime.js +375 -0
- package/src/lib/temporal-runtime.js.map +1 -0
- package/src/lib/to-source.d.ts +335 -0
- package/src/lib/to-source.d.ts.map +1 -0
- package/src/lib/to-source.js +359 -0
- package/src/lib/to-source.js.map +1 -0
- package/src/lib/util/craft-resource-ref.d.ts +29 -0
- package/src/lib/util/craft-resource-ref.d.ts.map +1 -0
- package/src/lib/util/craft-resource-ref.js +1 -0
- package/src/lib/util/craft-resource-ref.js.map +1 -0
- package/src/lib/util/craft-resource-status.d.ts +17 -0
- package/src/lib/util/craft-resource-status.d.ts.map +1 -0
- package/src/lib/util/craft-resource-status.js +14 -0
- package/src/lib/util/craft-resource-status.js.map +1 -0
- package/src/lib/util/entities-util.d.ts +340 -0
- package/src/lib/util/entities-util.d.ts.map +1 -0
- package/src/lib/util/entities-util.js +136 -0
- package/src/lib/util/entities-util.js.map +1 -0
- package/src/lib/util/explicit-effect.d.ts +42 -0
- package/src/lib/util/explicit-effect.d.ts.map +1 -0
- package/src/lib/util/explicit-effect.js +37 -0
- package/src/lib/util/explicit-effect.js.map +1 -0
- package/src/lib/util/extract-signal-props-and-methods.d.ts +20 -0
- package/src/lib/util/extract-signal-props-and-methods.d.ts.map +1 -0
- package/src/lib/util/extract-signal-props-and-methods.js +1 -0
- package/src/lib/util/extract-signal-props-and-methods.js.map +1 -0
- package/src/lib/util/method-trigger-nonce.d.ts +45 -0
- package/src/lib/util/method-trigger-nonce.d.ts.map +1 -0
- package/src/lib/util/method-trigger-nonce.js +58 -0
- package/src/lib/util/method-trigger-nonce.js.map +1 -0
- package/src/lib/util/persister.type.d.ts +37 -0
- package/src/lib/util/persister.type.d.ts.map +1 -0
- package/src/lib/util/persister.type.js +1 -0
- package/src/lib/util/persister.type.js.map +1 -0
- package/src/lib/util/persister.util.d.ts +8 -0
- package/src/lib/util/persister.util.d.ts.map +1 -0
- package/src/lib/util/persister.util.js +71 -0
- package/src/lib/util/persister.util.js.map +1 -0
- package/src/lib/util/react-on-mutation-effect.d.ts +16 -0
- package/src/lib/util/react-on-mutation-effect.d.ts.map +1 -0
- package/src/lib/util/react-on-mutation-effect.js +148 -0
- package/src/lib/util/react-on-mutation-effect.js.map +1 -0
- package/src/lib/util/resource-by-id-changes-tracker.util.d.ts +27 -0
- package/src/lib/util/resource-by-id-changes-tracker.util.d.ts.map +1 -0
- package/src/lib/util/resource-by-id-changes-tracker.util.js +97 -0
- package/src/lib/util/resource-by-id-changes-tracker.util.js.map +1 -0
- package/src/lib/util/source.type.d.ts +6 -0
- package/src/lib/util/source.type.d.ts.map +1 -0
- package/src/lib/util/source.type.js +1 -0
- package/src/lib/util/source.type.js.map +1 -0
- package/src/lib/util/types/access-type-object-property-by-dotted-path.type.d.ts +4 -0
- package/src/lib/util/types/access-type-object-property-by-dotted-path.type.d.ts.map +1 -0
- package/src/lib/util/types/access-type-object-property-by-dotted-path.type.js +1 -0
- package/src/lib/util/types/access-type-object-property-by-dotted-path.type.js.map +1 -0
- package/src/lib/util/types/boolean-or-mapper-fn-by-path-by-id.type.d.ts +27 -0
- package/src/lib/util/types/boolean-or-mapper-fn-by-path-by-id.type.d.ts.map +1 -0
- package/src/lib/util/types/boolean-or-mapper-fn-by-path-by-id.type.js +1 -0
- package/src/lib/util/types/boolean-or-mapper-fn-by-path-by-id.type.js.map +1 -0
- package/src/lib/util/types/boolean-or-mapper-fn-by-path.type.d.ts +24 -0
- package/src/lib/util/types/boolean-or-mapper-fn-by-path.type.d.ts.map +1 -0
- package/src/lib/util/types/boolean-or-mapper-fn-by-path.type.js +1 -0
- package/src/lib/util/types/boolean-or-mapper-fn-by-path.type.js.map +1 -0
- package/src/lib/util/types/brand.d.ts +7 -0
- package/src/lib/util/types/brand.d.ts.map +1 -0
- package/src/lib/util/types/brand.js +9 -0
- package/src/lib/util/types/brand.js.map +1 -0
- package/src/lib/util/types/object-deep-path-mapper.type.d.ts +13 -0
- package/src/lib/util/types/object-deep-path-mapper.type.d.ts.map +1 -0
- package/src/lib/util/types/object-deep-path-mapper.type.js +1 -0
- package/src/lib/util/types/object-deep-path-mapper.type.js.map +1 -0
- package/src/lib/util/types/resource-by-id-config.type.d.ts +115 -0
- package/src/lib/util/types/resource-by-id-config.type.d.ts.map +1 -0
- package/src/lib/util/types/resource-by-id-config.type.js +1 -0
- package/src/lib/util/types/resource-by-id-config.type.js.map +1 -0
- package/src/lib/util/types/resource-with-params-or-params-fn.type.d.ts +52 -0
- package/src/lib/util/types/resource-with-params-or-params-fn.type.d.ts.map +1 -0
- package/src/lib/util/types/resource-with-params-or-params-fn.type.js +1 -0
- package/src/lib/util/types/resource-with-params-or-params-fn.type.js.map +1 -0
- package/src/lib/util/types/shared.type.d.ts +66 -0
- package/src/lib/util/types/shared.type.d.ts.map +1 -0
- package/src/lib/util/types/shared.type.js +1 -0
- package/src/lib/util/types/shared.type.js.map +1 -0
- package/src/lib/util/types/util.d.ts +16 -0
- package/src/lib/util/types/util.d.ts.map +1 -0
- package/src/lib/util/types/util.js +60 -0
- package/src/lib/util/types/util.js.map +1 -0
- package/src/lib/util/types/util.type.d.ts +67 -0
- package/src/lib/util/types/util.type.d.ts.map +1 -0
- package/src/lib/util/types/util.type.js +5 -0
- package/src/lib/util/types/util.type.js.map +1 -0
- package/src/lib/util/update-state.util.d.ts +10 -0
- package/src/lib/util/update-state.util.d.ts.map +1 -0
- package/src/lib/util/update-state.util.js +31 -0
- package/src/lib/util/update-state.util.js.map +1 -0
- package/src/lib/util/util.d.ts +19 -0
- package/src/lib/util/util.d.ts.map +1 -0
- package/src/lib/util/util.js +50 -0
- package/src/lib/util/util.js.map +1 -0
- package/src/lib/util/util.type.d.ts +107 -0
- package/src/lib/util/util.type.d.ts.map +1 -0
- package/src/lib/util/util.type.js +9 -0
- package/src/lib/util/util.type.js.map +1 -0
- package/src/lib/yieldable.d.ts +94 -0
- package/src/lib/yieldable.d.ts.map +1 -0
- package/src/lib/yieldable.js +109 -0
- package/src/lib/yieldable.js.map +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-boundaries.js","sourceRoot":"","sources":["../../../../../libs/core/src/lib/browser-boundaries.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n abstract,\n craftService,\n type CraftServiceApi,\n type GetServiceYields,\n type ServiceTrackingMetadata,\n ɵHOST_TAG_LIST,\n ɵTRACK_TAGS_LIST,\n} from './craft-service';\nimport { type TrackTag } from './host-tag';\nimport {\n CORRELATION_ID_SERVICE,\n getCurrentStartCorrelationId,\n type CorrelationIdMetadata,\n} from './correlation-id';\nimport { SERVICE_YIELD_REQUEST_MARKER } from './craft-generator-runtime';\nimport type { Injector } from './host/craft-compat';\nimport { CRAFT_PLATFORM, type CraftPlatform } from './craft-platform';\nimport { getCurrentCraftInjector } from './host/craft-injector';\n\ntype AnyBrowserBoundaryMethod = (...args: any[]) => any;\ntype ConsoleMetadataMethod = 'debug' | 'info' | 'log' | 'warn' | 'error';\n\ntype MethodArgs<Method> = Method extends (...args: infer Args) => any\n ? Args\n : never;\n\ntype MethodResult<Method> = Method extends (...args: any[]) => infer Result\n ? Result\n : never;\n\ntype BrowserBoundaryDsl<Service extends object, Yielded = unknown> = {\n [Key in keyof Service]: Service[Key] extends (\n ...args: infer Args\n ) => infer Result\n ? (...args: Args) => Generator<Yielded, Result, unknown>\n : never;\n};\n\ntype BrowserBoundary<Service extends object> = (\n bindings?: undefined,\n expose?: (service: Service) => unknown,\n) => Generator<any, any, any>;\n\ntype BrowserBoundaryService<Name extends string, Output> = CraftServiceApi<\n Name,\n 'global',\n {},\n Output,\n ServiceTrackingMetadata<Name, 'global', Output, never, undefined, never, true>\n>;\n\ntype ConsoleMetaContext = {\n from: readonly string[];\n tags: readonly TrackTag[];\n correlation: CorrelationIdMetadata;\n};\n\ntype ConsoleMetaYield = Readonly<{\n [SERVICE_YIELD_REQUEST_MARKER]: true;\n providedIn: 'function';\n resolve: (injector: Injector) => ConsoleMetaContext;\n}>;\n\ntype ConsoleBoundaryYield =\n | GetServiceYields<\n BrowserBoundaryService<\n 'ConsoleService',\n ConsoleServiceApi\n >['ConsoleService']\n >\n | ConsoleMetaYield;\n\ntype BrowserCryptoYield = GetServiceYields<\n BrowserBoundaryService<\n 'BrowserCryptoService',\n BrowserCryptoServiceApi\n >['BrowserCryptoService']\n>;\n\ntype StorageLike = Pick<\n Storage,\n 'clear' | 'getItem' | 'key' | 'removeItem' | 'setItem'\n> & {\n readonly length: number;\n};\n\nexport type CookieSameSite = 'lax' | 'strict' | 'none';\n\nexport type CookieSetOptions = {\n domain?: string;\n expires?: Date | string;\n maxAge?: number;\n partitioned?: boolean;\n path?: string;\n sameSite?: CookieSameSite;\n secure?: boolean;\n};\n\nexport type CookieRemoveOptions = Omit<CookieSetOptions, 'expires' | 'maxAge'>;\n\nexport interface ConsoleServiceApi {\n debug(...data: unknown[]): void;\n info(...data: unknown[]): void;\n log(...data: unknown[]): void;\n warn(...data: unknown[]): void;\n error(...data: unknown[]): void;\n trace(...data: unknown[]): void;\n group(...label: unknown[]): void;\n groupCollapsed(...label: unknown[]): void;\n groupEnd(): void;\n time(label?: string): void;\n timeEnd(label?: string): void;\n}\n\nexport interface StorageServiceApi {\n getItem(key: string): string | null;\n setItem(key: string, value: string): void;\n removeItem(key: string): void;\n clear(): void;\n key(index: number): string | null;\n length(): number;\n}\n\n/** Storage backend selected by the application through DI. */\nconst storageService = craftService(\n { name: 'StorageService', providedIn: 'abstract' },\n abstract<StorageServiceApi>(),\n);\nexport const StorageService: typeof storageService.StorageService =\n storageService.StorageService;\nexport const StorageServiceRequirement: typeof storageService.StorageServiceRequirement =\n storageService.StorageServiceRequirement;\nexport const provideStorageService: typeof storageService.provideStorageService =\n storageService.provideStorageService;\n\nexport interface CookiesServiceApi {\n get(name: string): string | undefined;\n getAll(): Record<string, string>;\n set(name: string, value: string, options?: CookieSetOptions): void;\n remove(name: string, options?: CookieRemoveOptions): void;\n has(name: string): boolean;\n}\n\nexport interface BrowserLocationServiceApi {\n href(): string;\n origin(): string;\n protocol(): string;\n host(): string;\n hostname(): string;\n port(): string;\n pathname(): string;\n search(): string;\n hash(): string;\n assign(url: string | URL): void;\n replace(url: string | URL): void;\n reload(): void;\n}\n\nexport interface BrowserHistoryServiceApi {\n length(): number;\n state(): any;\n back(): void;\n forward(): void;\n go(delta?: number): void;\n pushState(data: any, unused: string, url?: string | URL | null): void;\n replaceState(data: any, unused: string, url?: string | URL | null): void;\n}\n\nexport interface BrowserNavigatorServiceApi {\n userAgent(): string;\n language(): string;\n languages(): readonly string[];\n onLine(): boolean;\n cookieEnabled(): boolean;\n sendBeacon(url: string | URL, data?: BodyInit | null): boolean;\n share(data?: ShareData): Promise<void>;\n}\n\nexport interface BrowserPerformanceServiceApi {\n now(): number;\n mark(name: string, options?: PerformanceMarkOptions): PerformanceMark;\n measure(\n measureName: string,\n startOrMeasureOptions?: string | PerformanceMeasureOptions,\n endMark?: string,\n ): PerformanceMeasure;\n clearMarks(markName?: string): void;\n clearMeasures(measureName?: string): void;\n}\n\nexport interface BrowserCryptoServiceApi {\n randomUUID(): string;\n getRandomValues<TypedArray extends ArrayBufferView>(\n typedArray: TypedArray,\n ): TypedArray;\n digest(\n algorithm: AlgorithmIdentifier,\n data: BufferSource,\n ): Promise<ArrayBuffer>;\n}\n\nexport interface BrowserDocumentServiceApi {\n title(): string;\n setTitle(value: string): void;\n lang(): string;\n setLang(value: string): void;\n dir(): 'ltr' | 'rtl' | 'auto' | '';\n setDir(value: 'ltr' | 'rtl' | 'auto' | ''): void;\n visibilityState(): DocumentVisibilityState;\n hasFocus(): boolean;\n}\n\nexport interface BrowserWindowServiceApi {\n innerWidth(): number;\n innerHeight(): number;\n scrollX(): number;\n scrollY(): number;\n scrollTo(...args: [options: ScrollToOptions] | [x: number, y: number]): void;\n alert(message?: string): void;\n confirm(message?: string): boolean;\n}\n\nfunction createBoundaryCall<\n Service extends object,\n ServiceHelper extends BrowserBoundary<Service> = BrowserBoundary<Service>,\n>(serviceHelper: ServiceHelper) {\n type Yielded = GetServiceYields<ServiceHelper>;\n\n return function <Key extends keyof Service & string>(key: Key) {\n return function* (\n ...args: MethodArgs<Service[Key]>\n ): Generator<Yielded, MethodResult<Service[Key]>, unknown> {\n const exposed = (yield* serviceHelper(undefined, (service) => ({\n method: service[key],\n }))) as {\n method: Service[Key];\n };\n\n return (exposed.method as AnyBrowserBoundaryMethod)(\n ...args,\n ) as MethodResult<Service[Key]>;\n };\n };\n}\n\nconst CONSOLE_INTERNAL_FRAME_PATTERNS = [\n 'runCraftGenerator',\n 'executeGeneratorCompatibleFactory',\n 'runInInjectionContext',\n 'createConsoleCall',\n 'Object.log',\n 'Object.info',\n 'Object.debug',\n 'Object.warn',\n 'Object.error',\n 'Object.trace',\n];\n\nfunction parseConsoleStackTrace(stack: string | undefined): string {\n if (!stack) return '';\n\n const lines = stack.split('\\n');\n\n const filtered = lines\n .slice(1) // remove the \"Error\" header line\n .filter(\n (line) =>\n !CONSOLE_INTERNAL_FRAME_PATTERNS.some((pattern) =>\n line.includes(pattern),\n ),\n );\n\n return filtered.join('\\n');\n}\n\ntype ConsoleBrowserInfo = {\n userAgent: string;\n language: string;\n languages: readonly string[];\n onLine: boolean;\n platform: string | undefined;\n screen: { width: number; height: number } | undefined;\n};\n\nfunction getConsoleBrowserInfo(): ConsoleBrowserInfo | undefined {\n const nav = globalThis.navigator;\n if (!nav) return undefined;\n\n const scr = globalThis.screen;\n\n return {\n userAgent: nav.userAgent,\n language: nav.language,\n languages: nav.languages,\n onLine: nav.onLine,\n platform:\n 'platform' in nav ? (nav as { platform?: string }).platform : undefined,\n screen: scr ? { width: scr.width, height: scr.height } : undefined,\n };\n}\n\nfunction createConsoleCall<Key extends ConsoleMetadataMethod>(key: Key) {\n return function* (\n ...args: MethodArgs<ConsoleServiceApi[Key]>\n ): Generator<\n ConsoleBoundaryYield,\n MethodResult<ConsoleServiceApi[Key]>,\n unknown\n > {\n const consoleService = yield* ConsoleService();\n const {\n from,\n tags,\n correlation: correlationMeta,\n } = (yield {\n [SERVICE_YIELD_REQUEST_MARKER]: true,\n providedIn: 'function' as const,\n resolve: (injector: Injector): ConsoleMetaContext => ({\n from: injector.get(ɵHOST_TAG_LIST),\n tags: injector.get(ɵTRACK_TAGS_LIST),\n correlation: {\n lastCorrelationId:\n injector.get(CORRELATION_ID_SERVICE, null)?.lastCorrelationId() ??\n null,\n mayCorrelatedIds:\n injector.get(CORRELATION_ID_SERVICE, null)?.mayCorrelatedIds() ??\n [],\n startCorrelationId: getCurrentStartCorrelationId(),\n },\n }),\n } satisfies ConsoleMetaYield) as unknown as ConsoleMetaContext;\n\n const metadata: {\n from: readonly string[];\n tags: readonly TrackTag[];\n trace: string;\n correlationId: CorrelationIdMetadata;\n timestamp: string;\n route: string;\n browser?: ConsoleBrowserInfo;\n } = {\n from,\n tags,\n trace: parseConsoleStackTrace(new Error().stack),\n correlationId: correlationMeta,\n timestamp: new Date().toUTCString(),\n route: globalThis.window?.location?.href ?? '',\n };\n\n if (key === 'error') {\n metadata.browser = getConsoleBrowserInfo();\n }\n\n return (consoleService[key] as AnyBrowserBoundaryMethod)(\n ...args,\n metadata,\n ) as MethodResult<ConsoleServiceApi[Key]>;\n };\n}\n\nfunction requireBrowserValue<Value>(\n value: Value | null | undefined,\n name: string,\n): Value {\n if (value === undefined || value === null) {\n throw new Error(\n `Browser boundary \"${name}\" is not available outside a browser environment.`,\n );\n }\n\n return value;\n}\n\nfunction getBrowserWindow() {\n return requireBrowserValue(\n getActivePlatform()?.window ?? globalThis.window,\n 'window',\n );\n}\n\nfunction getBrowserDocument() {\n return requireBrowserValue(\n getActivePlatform()?.document ?? globalThis.document,\n 'document',\n );\n}\n\nfunction getActivePlatform(): CraftPlatform | undefined {\n try {\n return getCurrentCraftInjector().get(CRAFT_PLATFORM, null) ?? undefined;\n } catch {\n return undefined;\n }\n}\n\n/** @internal Angular TitleStrategy writes the document title through the same boundary as `BrowserDocument.setTitle`. */\nexport function ɵapplyBrowserDocumentTitle(value: string): void {\n getBrowserDocument().title = value;\n}\n\nfunction createInMemoryStorage(): StorageLike {\n const values = new Map<string, string>();\n\n return {\n clear: () => {\n values.clear();\n },\n getItem: (key) => values.get(key) ?? null,\n key: (index) => Array.from(values.keys())[index] ?? null,\n removeItem: (key) => {\n values.delete(key);\n },\n setItem: (key, value) => {\n values.set(key, value);\n },\n get length() {\n return values.size;\n },\n };\n}\n\nfunction getBrowserStorage(\n name: 'localStorage' | 'sessionStorage',\n): StorageLike {\n const platform = getActivePlatform();\n if (platform) return platform[name];\n const browserWindow = getBrowserWindow() as unknown as Window &\n Record<string | symbol, unknown>;\n const candidate = browserWindow[name] as Partial<StorageLike> | undefined;\n\n if (\n candidate &&\n typeof candidate.getItem === 'function' &&\n typeof candidate.setItem === 'function' &&\n typeof candidate.removeItem === 'function' &&\n typeof candidate.clear === 'function' &&\n typeof candidate.key === 'function' &&\n typeof candidate.length === 'number'\n ) {\n return candidate as StorageLike;\n }\n\n const fallbackKey = Symbol.for(`craft.browser-boundary.${name}`);\n\n if (!(fallbackKey in browserWindow)) {\n Object.defineProperty(browserWindow, fallbackKey, {\n value: createInMemoryStorage(),\n enumerable: false,\n configurable: false,\n writable: false,\n });\n }\n\n return browserWindow[fallbackKey] as StorageLike;\n}\n\nfunction getBrowserLocalStorage() {\n return getBrowserStorage('localStorage');\n}\n\nfunction getBrowserSessionStorage() {\n return getBrowserStorage('sessionStorage');\n}\n\nfunction getBrowserLocation() {\n return requireBrowserValue(getBrowserWindow().location, 'location');\n}\n\nfunction getBrowserHistory() {\n return requireBrowserValue(getBrowserWindow().history, 'history');\n}\n\nfunction getBrowserNavigator() {\n return requireBrowserValue(getBrowserWindow().navigator, 'navigator');\n}\n\nfunction getBrowserPerformance() {\n return requireBrowserValue(getBrowserWindow().performance, 'performance');\n}\n\nfunction getBrowserCrypto() {\n return requireBrowserValue(getBrowserWindow().crypto, 'crypto');\n}\n\nfunction decodeCookieComponent(value: string): string {\n try {\n return decodeURIComponent(value);\n } catch {\n return value;\n }\n}\n\nfunction readCookieEntries(): Array<[string, string]> {\n const rawCookie = getBrowserDocument().cookie;\n\n if (!rawCookie) {\n return [];\n }\n\n return rawCookie\n .split(';')\n .map((part) => part.trim())\n .filter(Boolean)\n .map((part) => {\n const separatorIndex = part.indexOf('=');\n const rawName =\n separatorIndex === -1 ? part : part.slice(0, separatorIndex);\n const rawValue =\n separatorIndex === -1 ? '' : part.slice(separatorIndex + 1);\n\n return [\n decodeCookieComponent(rawName),\n decodeCookieComponent(rawValue),\n ] as const;\n });\n}\n\nfunction buildCookieMap() {\n return Object.fromEntries(readCookieEntries()) as Record<string, string>;\n}\n\nfunction formatCookieSameSite(value: CookieSameSite) {\n return value.charAt(0).toUpperCase() + value.slice(1).toLowerCase();\n}\n\nfunction writeCookie(name: string, value: string, options?: CookieSetOptions) {\n const segments = [`${encodeURIComponent(name)}=${encodeURIComponent(value)}`];\n\n if (options?.domain) {\n segments.push(`Domain=${options.domain}`);\n }\n\n if (options?.expires) {\n segments.push(\n `Expires=${\n options.expires instanceof Date\n ? options.expires.toUTCString()\n : options.expires\n }`,\n );\n }\n\n if (options?.maxAge !== undefined) {\n segments.push(`Max-Age=${options.maxAge}`);\n }\n\n if (options?.path) {\n segments.push(`Path=${options.path}`);\n }\n\n if (options?.sameSite) {\n segments.push(`SameSite=${formatCookieSameSite(options.sameSite)}`);\n }\n\n if (options?.secure) {\n segments.push('Secure');\n }\n\n if (options?.partitioned) {\n segments.push('Partitioned');\n }\n\n getBrowserDocument().cookie = segments.join('; ');\n}\n\nfunction removeCookie(name: string, options?: CookieRemoveOptions) {\n writeCookie(name, '', {\n ...options,\n expires: new Date(0),\n maxAge: 0,\n path: options?.path ?? '/',\n });\n}\n\nconst consoleService: BrowserBoundaryService<\n 'ConsoleService',\n ConsoleServiceApi\n> = craftService(\n {\n name: 'ConsoleService',\n providedIn: 'global',\n browserBoundary: true,\n },\n (): ConsoleServiceApi => ({\n debug: (...data) => globalThis.console.debug(...data),\n info: (...data) => globalThis.console.info(...data),\n log: (...data) => globalThis.console.log(...data),\n warn: (...data) => globalThis.console.warn(...data),\n error: (...data) => globalThis.console.error(...data),\n trace: (...data) => globalThis.console.trace(...data),\n group: (...label) => globalThis.console.group(...label),\n groupCollapsed: (...label) => globalThis.console.groupCollapsed(...label),\n groupEnd: () => globalThis.console.groupEnd(),\n time: (label) => globalThis.console.time(label),\n timeEnd: (label) => globalThis.console.timeEnd(label),\n }),\n);\nexport const ConsoleService: BrowserBoundaryService<\n 'ConsoleService',\n ConsoleServiceApi\n>['ConsoleService'] = consoleService.ConsoleService;\nexport const CONSOLE_SERVICE_META_DATA: BrowserBoundaryService<\n 'ConsoleService',\n ConsoleServiceApi\n>['CONSOLE_SERVICE_META_DATA'] = consoleService.CONSOLE_SERVICE_META_DATA;\n\nconst localStorageService: BrowserBoundaryService<\n 'LocalStorageService',\n StorageServiceApi\n> = craftService(\n {\n name: 'LocalStorageService',\n providedIn: 'global',\n browserBoundary: true,\n },\n (): StorageServiceApi => ({\n getItem: (key) => getBrowserLocalStorage().getItem(key),\n setItem: (key, value) => getBrowserLocalStorage().setItem(key, value),\n removeItem: (key) => getBrowserLocalStorage().removeItem(key),\n clear: () => getBrowserLocalStorage().clear(),\n key: (index) => getBrowserLocalStorage().key(index),\n length: () => getBrowserLocalStorage().length,\n }),\n);\nexport const LocalStorageService: BrowserBoundaryService<\n 'LocalStorageService',\n StorageServiceApi\n>['LocalStorageService'] = localStorageService.LocalStorageService;\nexport const LOCAL_STORAGE_SERVICE_META_DATA: BrowserBoundaryService<\n 'LocalStorageService',\n StorageServiceApi\n>['LOCAL_STORAGE_SERVICE_META_DATA'] =\n localStorageService.LOCAL_STORAGE_SERVICE_META_DATA;\n\nconst sessionStorageService: BrowserBoundaryService<\n 'SessionStorageService',\n StorageServiceApi\n> = craftService(\n {\n name: 'SessionStorageService',\n providedIn: 'global',\n browserBoundary: true,\n },\n (): StorageServiceApi => ({\n getItem: (key) => getBrowserSessionStorage().getItem(key),\n setItem: (key, value) => getBrowserSessionStorage().setItem(key, value),\n removeItem: (key) => getBrowserSessionStorage().removeItem(key),\n clear: () => getBrowserSessionStorage().clear(),\n key: (index) => getBrowserSessionStorage().key(index),\n length: () => getBrowserSessionStorage().length,\n }),\n);\nexport const SessionStorageService: BrowserBoundaryService<\n 'SessionStorageService',\n StorageServiceApi\n>['SessionStorageService'] = sessionStorageService.SessionStorageService;\nexport const SESSION_STORAGE_SERVICE_META_DATA: BrowserBoundaryService<\n 'SessionStorageService',\n StorageServiceApi\n>['SESSION_STORAGE_SERVICE_META_DATA'] =\n sessionStorageService.SESSION_STORAGE_SERVICE_META_DATA;\n\nconst cookiesService: BrowserBoundaryService<\n 'CookiesService',\n CookiesServiceApi\n> = craftService(\n {\n name: 'CookiesService',\n providedIn: 'global',\n browserBoundary: true,\n },\n (): CookiesServiceApi => ({\n get: (name) => buildCookieMap()[name],\n getAll: () => buildCookieMap(),\n set: (name, value, options) => writeCookie(name, value, options),\n remove: (name, options) => removeCookie(name, options),\n has: (name) => Object.prototype.hasOwnProperty.call(buildCookieMap(), name),\n }),\n);\nexport const CookiesService: BrowserBoundaryService<\n 'CookiesService',\n CookiesServiceApi\n>['CookiesService'] = cookiesService.CookiesService;\nexport const COOKIES_SERVICE_META_DATA: BrowserBoundaryService<\n 'CookiesService',\n CookiesServiceApi\n>['COOKIES_SERVICE_META_DATA'] = cookiesService.COOKIES_SERVICE_META_DATA;\n\nconst browserLocationService: BrowserBoundaryService<\n 'BrowserLocationService',\n BrowserLocationServiceApi\n> = craftService(\n {\n name: 'BrowserLocationService',\n providedIn: 'global',\n browserBoundary: true,\n },\n (): BrowserLocationServiceApi => ({\n href: () => getBrowserLocation().href,\n origin: () => getBrowserLocation().origin,\n protocol: () => getBrowserLocation().protocol,\n host: () => getBrowserLocation().host,\n hostname: () => getBrowserLocation().hostname,\n port: () => getBrowserLocation().port,\n pathname: () => getBrowserLocation().pathname,\n search: () => getBrowserLocation().search,\n hash: () => getBrowserLocation().hash,\n assign: (url) => getBrowserLocation().assign(url),\n replace: (url) => getBrowserLocation().replace(url),\n reload: () => getBrowserLocation().reload(),\n }),\n);\nexport const BrowserLocationService: BrowserBoundaryService<\n 'BrowserLocationService',\n BrowserLocationServiceApi\n>['BrowserLocationService'] = browserLocationService.BrowserLocationService;\nexport const BROWSER_LOCATION_SERVICE_META_DATA: BrowserBoundaryService<\n 'BrowserLocationService',\n BrowserLocationServiceApi\n>['BROWSER_LOCATION_SERVICE_META_DATA'] =\n browserLocationService.BROWSER_LOCATION_SERVICE_META_DATA;\n\nconst browserHistoryService: BrowserBoundaryService<\n 'BrowserHistoryService',\n BrowserHistoryServiceApi\n> = craftService(\n {\n name: 'BrowserHistoryService',\n providedIn: 'global',\n browserBoundary: true,\n },\n (): BrowserHistoryServiceApi => ({\n length: () => getBrowserHistory().length,\n state: () => getBrowserHistory().state,\n back: () => getBrowserHistory().back(),\n forward: () => getBrowserHistory().forward(),\n go: (delta) => getBrowserHistory().go(delta),\n pushState: (data, unused, url) =>\n getBrowserHistory().pushState(data, unused, url),\n replaceState: (data, unused, url) =>\n getBrowserHistory().replaceState(data, unused, url),\n }),\n);\nexport const BrowserHistoryService: BrowserBoundaryService<\n 'BrowserHistoryService',\n BrowserHistoryServiceApi\n>['BrowserHistoryService'] = browserHistoryService.BrowserHistoryService;\nexport const BROWSER_HISTORY_SERVICE_META_DATA: BrowserBoundaryService<\n 'BrowserHistoryService',\n BrowserHistoryServiceApi\n>['BROWSER_HISTORY_SERVICE_META_DATA'] =\n browserHistoryService.BROWSER_HISTORY_SERVICE_META_DATA;\n\nconst browserNavigatorService: BrowserBoundaryService<\n 'BrowserNavigatorService',\n BrowserNavigatorServiceApi\n> = craftService(\n {\n name: 'BrowserNavigatorService',\n providedIn: 'global',\n browserBoundary: true,\n },\n (): BrowserNavigatorServiceApi => ({\n userAgent: () => getBrowserNavigator().userAgent,\n language: () => getBrowserNavigator().language,\n languages: () => getBrowserNavigator().languages,\n onLine: () => getBrowserNavigator().onLine,\n cookieEnabled: () => getBrowserNavigator().cookieEnabled,\n sendBeacon: (url, data) => getBrowserNavigator().sendBeacon(url, data),\n share: (data) => getBrowserNavigator().share(data),\n }),\n);\nexport const BrowserNavigatorService: BrowserBoundaryService<\n 'BrowserNavigatorService',\n BrowserNavigatorServiceApi\n>['BrowserNavigatorService'] = browserNavigatorService.BrowserNavigatorService;\nexport const BROWSER_NAVIGATOR_SERVICE_META_DATA: BrowserBoundaryService<\n 'BrowserNavigatorService',\n BrowserNavigatorServiceApi\n>['BROWSER_NAVIGATOR_SERVICE_META_DATA'] =\n browserNavigatorService.BROWSER_NAVIGATOR_SERVICE_META_DATA;\n\nconst browserPerformanceService: BrowserBoundaryService<\n 'BrowserPerformanceService',\n BrowserPerformanceServiceApi\n> = craftService(\n {\n name: 'BrowserPerformanceService',\n providedIn: 'global',\n browserBoundary: true,\n },\n (): BrowserPerformanceServiceApi => ({\n now: () => getBrowserPerformance().now(),\n mark: (name, options) => getBrowserPerformance().mark(name, options),\n measure: (measureName, startOrMeasureOptions, endMark) => {\n if (endMark !== undefined) {\n return getBrowserPerformance().measure(\n measureName,\n startOrMeasureOptions as string,\n endMark,\n );\n }\n\n if (startOrMeasureOptions !== undefined) {\n return getBrowserPerformance().measure(\n measureName,\n startOrMeasureOptions as string | PerformanceMeasureOptions,\n );\n }\n\n return getBrowserPerformance().measure(measureName);\n },\n clearMarks: (markName) => getBrowserPerformance().clearMarks(markName),\n clearMeasures: (measureName) =>\n getBrowserPerformance().clearMeasures(measureName),\n }),\n);\nexport const BrowserPerformanceService: BrowserBoundaryService<\n 'BrowserPerformanceService',\n BrowserPerformanceServiceApi\n>['BrowserPerformanceService'] =\n browserPerformanceService.BrowserPerformanceService;\nexport const BROWSER_PERFORMANCE_SERVICE_META_DATA: BrowserBoundaryService<\n 'BrowserPerformanceService',\n BrowserPerformanceServiceApi\n>['BROWSER_PERFORMANCE_SERVICE_META_DATA'] =\n browserPerformanceService.BROWSER_PERFORMANCE_SERVICE_META_DATA;\n\nconst browserCryptoService: BrowserBoundaryService<\n 'BrowserCryptoService',\n BrowserCryptoServiceApi\n> = craftService(\n {\n name: 'BrowserCryptoService',\n providedIn: 'global',\n browserBoundary: true,\n },\n (): BrowserCryptoServiceApi => ({\n randomUUID: () => getBrowserCrypto().randomUUID(),\n getRandomValues: <TypedArray extends ArrayBufferView>(\n typedArray: TypedArray,\n // lib.dom narrowed getRandomValues to ArrayBufferView<ArrayBuffer>; the\n // boundary stays open to any view and hands it through unchanged.\n ) =>\n (\n getBrowserCrypto().getRandomValues as (\n view: ArrayBufferView,\n ) => ArrayBufferView\n )(typedArray) as TypedArray,\n digest: (algorithm, data) =>\n getBrowserCrypto().subtle.digest(algorithm, data),\n }),\n);\nexport const BrowserCryptoService: BrowserBoundaryService<\n 'BrowserCryptoService',\n BrowserCryptoServiceApi\n>['BrowserCryptoService'] = browserCryptoService.BrowserCryptoService;\nexport const BROWSER_CRYPTO_SERVICE_META_DATA: BrowserBoundaryService<\n 'BrowserCryptoService',\n BrowserCryptoServiceApi\n>['BROWSER_CRYPTO_SERVICE_META_DATA'] =\n browserCryptoService.BROWSER_CRYPTO_SERVICE_META_DATA;\n\nconst browserDocumentService: BrowserBoundaryService<\n 'BrowserDocumentService',\n BrowserDocumentServiceApi\n> = craftService(\n {\n name: 'BrowserDocumentService',\n providedIn: 'global',\n browserBoundary: true,\n },\n (): BrowserDocumentServiceApi => ({\n title: () => getBrowserDocument().title,\n setTitle: (value) => {\n ɵapplyBrowserDocumentTitle(value);\n },\n lang: () => getBrowserDocument().documentElement.lang,\n setLang: (value) => {\n getBrowserDocument().documentElement.lang = value;\n },\n dir: () =>\n (getBrowserDocument().documentElement.getAttribute('dir') ?? '') as\n | 'ltr'\n | 'rtl'\n | 'auto'\n | '',\n setDir: (value) => {\n const el = getBrowserDocument().documentElement;\n if (value) {\n el.setAttribute('dir', value);\n } else {\n el.removeAttribute('dir');\n }\n },\n visibilityState: () => getBrowserDocument().visibilityState,\n hasFocus: () => getBrowserDocument().hasFocus(),\n }),\n);\nexport const BrowserDocumentService: BrowserBoundaryService<\n 'BrowserDocumentService',\n BrowserDocumentServiceApi\n>['BrowserDocumentService'] = browserDocumentService.BrowserDocumentService;\nexport const BROWSER_DOCUMENT_SERVICE_META_DATA: BrowserBoundaryService<\n 'BrowserDocumentService',\n BrowserDocumentServiceApi\n>['BROWSER_DOCUMENT_SERVICE_META_DATA'] =\n browserDocumentService.BROWSER_DOCUMENT_SERVICE_META_DATA;\n\nconst browserWindowService: BrowserBoundaryService<\n 'BrowserWindowService',\n BrowserWindowServiceApi\n> = craftService(\n {\n name: 'BrowserWindowService',\n providedIn: 'global',\n browserBoundary: true,\n },\n (): BrowserWindowServiceApi => ({\n innerWidth: () => getBrowserWindow().innerWidth,\n innerHeight: () => getBrowserWindow().innerHeight,\n scrollX: () => getBrowserWindow().scrollX,\n scrollY: () => getBrowserWindow().scrollY,\n scrollTo: (...args) => {\n if (args.length === 1) {\n getBrowserWindow().scrollTo(args[0]);\n return;\n }\n\n getBrowserWindow().scrollTo(args[0], args[1]);\n },\n alert: (message) => getBrowserWindow().alert(message),\n confirm: (message) => getBrowserWindow().confirm(message),\n }),\n);\nexport const BrowserWindowService: BrowserBoundaryService<\n 'BrowserWindowService',\n BrowserWindowServiceApi\n>['BrowserWindowService'] = browserWindowService.BrowserWindowService;\nexport const BROWSER_WINDOW_SERVICE_META_DATA: BrowserBoundaryService<\n 'BrowserWindowService',\n BrowserWindowServiceApi\n>['BROWSER_WINDOW_SERVICE_META_DATA'] =\n browserWindowService.BROWSER_WINDOW_SERVICE_META_DATA;\n\nconst callRawConsole = createBoundaryCall<\n ConsoleServiceApi,\n typeof ConsoleService\n>(ConsoleService);\nconst callLocalStorage = createBoundaryCall<\n StorageServiceApi,\n typeof LocalStorageService\n>(LocalStorageService);\nconst callSessionStorage = createBoundaryCall<\n StorageServiceApi,\n typeof SessionStorageService\n>(SessionStorageService);\nconst callCookies = createBoundaryCall<\n CookiesServiceApi,\n typeof CookiesService\n>(CookiesService);\nconst callBrowserLocation = createBoundaryCall<\n BrowserLocationServiceApi,\n typeof BrowserLocationService\n>(BrowserLocationService);\nconst callBrowserHistory = createBoundaryCall<\n BrowserHistoryServiceApi,\n typeof BrowserHistoryService\n>(BrowserHistoryService);\nconst callBrowserNavigator = createBoundaryCall<\n BrowserNavigatorServiceApi,\n typeof BrowserNavigatorService\n>(BrowserNavigatorService);\nconst callBrowserPerformance = createBoundaryCall<\n BrowserPerformanceServiceApi,\n typeof BrowserPerformanceService\n>(BrowserPerformanceService);\nconst callBrowserCrypto = createBoundaryCall<\n BrowserCryptoServiceApi,\n typeof BrowserCryptoService\n>(BrowserCryptoService);\nconst callBrowserDocument = createBoundaryCall<\n BrowserDocumentServiceApi,\n typeof BrowserDocumentService\n>(BrowserDocumentService);\nconst callBrowserWindow = createBoundaryCall<\n BrowserWindowServiceApi,\n typeof BrowserWindowService\n>(BrowserWindowService);\n\nexport const Console: BrowserBoundaryDsl<\n ConsoleServiceApi,\n ConsoleBoundaryYield\n> = {\n debug: createConsoleCall('debug'),\n info: createConsoleCall('info'),\n log: createConsoleCall('log'),\n warn: createConsoleCall('warn'),\n error: createConsoleCall('error'),\n trace: callRawConsole('trace'),\n group: callRawConsole('group'),\n groupCollapsed: callRawConsole('groupCollapsed'),\n groupEnd: callRawConsole('groupEnd'),\n time: callRawConsole('time'),\n timeEnd: callRawConsole('timeEnd'),\n};\n\nexport const LocalStorage: BrowserBoundaryDsl<\n StorageServiceApi,\n GetServiceYields<typeof LocalStorageService>\n> = {\n getItem: callLocalStorage('getItem'),\n setItem: callLocalStorage('setItem'),\n removeItem: callLocalStorage('removeItem'),\n clear: callLocalStorage('clear'),\n key: callLocalStorage('key'),\n length: callLocalStorage('length'),\n};\n\nexport const SessionStorage: BrowserBoundaryDsl<\n StorageServiceApi,\n GetServiceYields<typeof SessionStorageService>\n> = {\n getItem: callSessionStorage('getItem'),\n setItem: callSessionStorage('setItem'),\n removeItem: callSessionStorage('removeItem'),\n clear: callSessionStorage('clear'),\n key: callSessionStorage('key'),\n length: callSessionStorage('length'),\n};\n\nexport const Cookies: BrowserBoundaryDsl<\n CookiesServiceApi,\n GetServiceYields<typeof CookiesService>\n> = {\n get: callCookies('get'),\n getAll: callCookies('getAll'),\n set: callCookies('set'),\n remove: callCookies('remove'),\n has: callCookies('has'),\n};\n\nexport const BrowserLocation: BrowserBoundaryDsl<\n BrowserLocationServiceApi,\n GetServiceYields<typeof BrowserLocationService>\n> = {\n href: callBrowserLocation('href'),\n origin: callBrowserLocation('origin'),\n protocol: callBrowserLocation('protocol'),\n host: callBrowserLocation('host'),\n hostname: callBrowserLocation('hostname'),\n port: callBrowserLocation('port'),\n pathname: callBrowserLocation('pathname'),\n search: callBrowserLocation('search'),\n hash: callBrowserLocation('hash'),\n assign: callBrowserLocation('assign'),\n replace: callBrowserLocation('replace'),\n reload: callBrowserLocation('reload'),\n};\n\nexport const BrowserHistory: BrowserBoundaryDsl<\n BrowserHistoryServiceApi,\n GetServiceYields<typeof BrowserHistoryService>\n> = {\n length: callBrowserHistory('length'),\n state: callBrowserHistory('state'),\n back: callBrowserHistory('back'),\n forward: callBrowserHistory('forward'),\n go: callBrowserHistory('go'),\n pushState: callBrowserHistory('pushState'),\n replaceState: callBrowserHistory('replaceState'),\n};\n\nexport const BrowserNavigator: BrowserBoundaryDsl<\n BrowserNavigatorServiceApi,\n GetServiceYields<typeof BrowserNavigatorService>\n> = {\n userAgent: callBrowserNavigator('userAgent'),\n language: callBrowserNavigator('language'),\n languages: callBrowserNavigator('languages'),\n onLine: callBrowserNavigator('onLine'),\n cookieEnabled: callBrowserNavigator('cookieEnabled'),\n sendBeacon: callBrowserNavigator('sendBeacon'),\n share: callBrowserNavigator('share'),\n};\n\nexport const BrowserPerformance: BrowserBoundaryDsl<\n BrowserPerformanceServiceApi,\n GetServiceYields<typeof BrowserPerformanceService>\n> = {\n now: callBrowserPerformance('now'),\n mark: callBrowserPerformance('mark'),\n measure: callBrowserPerformance('measure'),\n clearMarks: callBrowserPerformance('clearMarks'),\n clearMeasures: callBrowserPerformance('clearMeasures'),\n};\n\nexport const BrowserCrypto: BrowserBoundaryDsl<\n BrowserCryptoServiceApi,\n BrowserCryptoYield\n> = {\n randomUUID: callBrowserCrypto('randomUUID'),\n getRandomValues: function* <TypedArray extends ArrayBufferView>(\n typedArray: TypedArray,\n ): Generator<BrowserCryptoYield, TypedArray, unknown> {\n const cryptoService = yield* BrowserCryptoService();\n\n return cryptoService.getRandomValues(typedArray);\n },\n digest: callBrowserCrypto('digest'),\n};\n\nexport const BrowserDocument: BrowserBoundaryDsl<\n BrowserDocumentServiceApi,\n GetServiceYields<typeof BrowserDocumentService>\n> = {\n title: callBrowserDocument('title'),\n setTitle: callBrowserDocument('setTitle'),\n lang: callBrowserDocument('lang'),\n setLang: callBrowserDocument('setLang'),\n dir: callBrowserDocument('dir'),\n setDir: callBrowserDocument('setDir'),\n visibilityState: callBrowserDocument('visibilityState'),\n hasFocus: callBrowserDocument('hasFocus'),\n};\n\nexport const BrowserWindow: BrowserBoundaryDsl<\n BrowserWindowServiceApi,\n GetServiceYields<typeof BrowserWindowService>\n> = {\n innerWidth: callBrowserWindow('innerWidth'),\n innerHeight: callBrowserWindow('innerHeight'),\n scrollX: callBrowserWindow('scrollX'),\n scrollY: callBrowserWindow('scrollY'),\n scrollTo: callBrowserWindow('scrollTo'),\n alert: callBrowserWindow('alert'),\n confirm: callBrowserWindow('confirm'),\n};\n"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { InjectionToken } from './host/craft-compat';
|
|
2
|
+
export type ServerFunctionToken<Value> = InjectionToken<Value>;
|
|
3
|
+
export type ServerPermissionRequirement = {
|
|
4
|
+
readonly kind: 'server-permission';
|
|
5
|
+
readonly permission: string;
|
|
6
|
+
readonly __serverFunctionPipe: true;
|
|
7
|
+
};
|
|
8
|
+
export declare function requireServerPermission(permission: string): ServerPermissionRequirement;
|
|
9
|
+
/**
|
|
10
|
+
* Ce qu'un `.pipe(...)` accepte.
|
|
11
|
+
*
|
|
12
|
+
* `requireClientDI` a vécu ici jusqu'à ce que le canal client existe vraiment.
|
|
13
|
+
* Il déclarait un token, une clé de transport, un schéma et un mode — quatre
|
|
14
|
+
* choses pour dire « lis cette valeur dans le navigateur ». Un middleware
|
|
15
|
+
* client construit sur un handshake dit la même chose en la montrant :
|
|
16
|
+
*
|
|
17
|
+
* ```ts
|
|
18
|
+
* craftHandshakeMiddleware(claimedUser, function* () {
|
|
19
|
+
* return { userId: yield* ClaimedUserId() };
|
|
20
|
+
* });
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* La clé et le schéma viennent du handshake, donc les deux côtés ne peuvent
|
|
24
|
+
* plus en dire deux choses différentes, et la règle d'architecture sait de quoi
|
|
25
|
+
* elle parle. Le mode n'a plus lieu d'être : un générateur s'exécute à l'appel.
|
|
26
|
+
*/
|
|
27
|
+
export type ServerFunctionPipe = ServerPermissionRequirement;
|
|
28
|
+
//# sourceMappingURL=client-di-requirement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-di-requirement.d.ts","sourceRoot":"","sources":["../../../../../libs/core/src/lib/client-di-requirement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,MAAM,MAAM,mBAAmB,CAAC,KAAK,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC;AAE/D,MAAM,MAAM,2BAA2B,GAAG;IACxC,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,oBAAoB,EAAE,IAAI,CAAC;CACrC,CAAC;AAEF,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,GACjB,2BAA2B,CAS7B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,kBAAkB,GAAG,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export function requireServerPermission(permission) {
|
|
2
|
+
if (permission.length === 0) {
|
|
3
|
+
throw new Error('A server permission must not be empty.');
|
|
4
|
+
}
|
|
5
|
+
return Object.freeze({
|
|
6
|
+
kind: 'server-permission',
|
|
7
|
+
permission,
|
|
8
|
+
__serverFunctionPipe: true,
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=client-di-requirement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-di-requirement.js","sourceRoot":"","sources":["../../../../../libs/core/src/lib/client-di-requirement.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,uBAAuB,CACrC,UAAkB;IAElB,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,mBAAmB;QACzB,UAAU;QACV,oBAAoB,EAAE,IAAI;KACW,CAAC,CAAC;AAC3C,CAAC","sourcesContent":["import type { InjectionToken } from './host/craft-compat';\n\nexport type ServerFunctionToken<Value> = InjectionToken<Value>;\n\nexport type ServerPermissionRequirement = {\n readonly kind: 'server-permission';\n readonly permission: string;\n readonly __serverFunctionPipe: true;\n};\n\nexport function requireServerPermission(\n permission: string,\n): ServerPermissionRequirement {\n if (permission.length === 0) {\n throw new Error('A server permission must not be empty.');\n }\n return Object.freeze({\n kind: 'server-permission',\n permission,\n __serverFunctionPipe: true,\n } satisfies ServerPermissionRequirement);\n}\n\n/**\n * Ce qu'un `.pipe(...)` accepte.\n *\n * `requireClientDI` a vécu ici jusqu'à ce que le canal client existe vraiment.\n * Il déclarait un token, une clé de transport, un schéma et un mode — quatre\n * choses pour dire « lis cette valeur dans le navigateur ». Un middleware\n * client construit sur un handshake dit la même chose en la montrant :\n *\n * ```ts\n * craftHandshakeMiddleware(claimedUser, function* () {\n * return { userId: yield* ClaimedUserId() };\n * });\n * ```\n *\n * La clé et le schéma viennent du handshake, donc les deux côtés ne peuvent\n * plus en dire deux choses différentes, et la règle d'architecture sait de quoi\n * elle parle. Le mode n'a plus lieu d'être : un générateur s'exécute à l'appel.\n */\nexport type ServerFunctionPipe = ServerPermissionRequirement;\n"]}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { type MergeSchemaOutputs, type MiddlewareContext, type MiddlewareResult } from './middleware-schema-shared';
|
|
2
|
+
import type { Injector } from './host/craft-compat';
|
|
3
|
+
import type { CraftHandshakeSchema } from './craft-handshake';
|
|
4
|
+
import type { CraftSchema, SchemaInput } from './schema-validation';
|
|
5
|
+
/**
|
|
6
|
+
* Middleware **client** d'une server function : le pendant navigateur du
|
|
7
|
+
* middleware serveur, déclaré par `craftMiddleware(id).client(run)`.
|
|
8
|
+
*
|
|
9
|
+
* Deux différences assumées avec la famille serveur :
|
|
10
|
+
*
|
|
11
|
+
* - `run` est un **générateur craft nu** (`function* ({ next }) { ... }`), pas
|
|
12
|
+
* un Effect : c'est la même famille que les guards `canActivate`/`canMatch`,
|
|
13
|
+
* et le core reste sans dépendance runtime sur Effect côté client comme côté
|
|
14
|
+
* serveur. Un `yield* someEffect` reste possible si le pont Effect est
|
|
15
|
+
* installé dans l'application ;
|
|
16
|
+
* - ce qu'il publie n'est **pas** de la donnée de confiance : le contexte est
|
|
17
|
+
* transporté au serveur, revalidé par schéma, et atterrit dans un champ
|
|
18
|
+
* distinct (`clientContext`) pour que le handler ne le confonde jamais avec
|
|
19
|
+
* le contexte produit par la chaîne serveur.
|
|
20
|
+
*/
|
|
21
|
+
export type ClientMiddlewareNext = <Context extends MiddlewareContext>(patch: {
|
|
22
|
+
readonly context: Context;
|
|
23
|
+
}) => Generator<unknown, MiddlewareResult<Context>, unknown>;
|
|
24
|
+
export type ClientMiddlewareRunContext<ContextIn extends MiddlewareContext = MiddlewareContext> = {
|
|
25
|
+
/** L'input passé à la façade client, tel quel : il n'est pas validé ici. */
|
|
26
|
+
readonly input: unknown;
|
|
27
|
+
readonly context: ContextIn;
|
|
28
|
+
readonly next: ClientMiddlewareNext;
|
|
29
|
+
};
|
|
30
|
+
export interface CraftClientMiddleware<Id extends string = string, Provides extends readonly CraftSchema[] = readonly CraftSchema[], ContextOut extends MiddlewareContext = MiddlewareContext> {
|
|
31
|
+
readonly kind: 'client-function-middleware';
|
|
32
|
+
readonly id: Id;
|
|
33
|
+
/** Schémas déclarés par `.provides(...)`, dépendances comprises. */
|
|
34
|
+
readonly provides: Provides;
|
|
35
|
+
readonly dependencies: readonly AnyCraftClientMiddleware[];
|
|
36
|
+
readonly run: (context: ClientMiddlewareRunContext) => Generator<unknown, unknown, unknown>;
|
|
37
|
+
/** Porteur type-only du contexte publié, dépendances transitives comprises. */
|
|
38
|
+
readonly __clientContextOut?: ContextOut;
|
|
39
|
+
}
|
|
40
|
+
export type AnyCraftClientMiddleware = CraftClientMiddleware<string, readonly CraftSchema[], any>;
|
|
41
|
+
export type ClientMiddlewareProvidesOf<Middleware> = Middleware extends CraftClientMiddleware<any, infer Provides, any> ? Provides : readonly [];
|
|
42
|
+
export type ClientMiddlewareContextOf<Middleware> = Middleware extends CraftClientMiddleware<any, any, infer Context> ? Context : never;
|
|
43
|
+
/** Concatène les schémas `.provides(...)` d'une liste de middleware client. */
|
|
44
|
+
export type ClientMiddlewareProvidesOfAll<Middlewares extends readonly AnyCraftClientMiddleware[]> = Middlewares extends readonly [
|
|
45
|
+
infer Head extends AnyCraftClientMiddleware,
|
|
46
|
+
...infer Tail extends readonly AnyCraftClientMiddleware[]
|
|
47
|
+
] ? readonly [
|
|
48
|
+
...ClientMiddlewareProvidesOf<Head>,
|
|
49
|
+
...ClientMiddlewareProvidesOfAll<Tail>
|
|
50
|
+
] : readonly [];
|
|
51
|
+
/** Contexte publié par une liste de middleware client, fusionné dans l'ordre. */
|
|
52
|
+
export type MergedClientMiddlewareContext<Middlewares extends readonly AnyCraftClientMiddleware[]> = Middlewares extends readonly [
|
|
53
|
+
infer Head extends AnyCraftClientMiddleware,
|
|
54
|
+
...infer Tail extends readonly AnyCraftClientMiddleware[]
|
|
55
|
+
] ? ClientMiddlewareContextOf<Head> & MergedClientMiddlewareContext<Tail> : Record<never, never>;
|
|
56
|
+
export declare function isCraftClientMiddleware(value: unknown): value is AnyCraftClientMiddleware;
|
|
57
|
+
export declare function flattenClientMiddlewares(middlewares: readonly AnyCraftClientMiddleware[]): readonly AnyCraftClientMiddleware[];
|
|
58
|
+
/** Schémas `.provides(...)` collectés le long de la chaîne, dédupliqués. */
|
|
59
|
+
export declare function collectClientMiddlewareSchemas(middlewares: readonly AnyCraftClientMiddleware[]): readonly CraftSchema[];
|
|
60
|
+
export declare class ClientFunctionContextError extends Error {
|
|
61
|
+
readonly code = "CRAFT_CLIENT_FUNCTION_CONTEXT_INVALID";
|
|
62
|
+
readonly id: string;
|
|
63
|
+
readonly issues: readonly {
|
|
64
|
+
readonly message: string;
|
|
65
|
+
}[];
|
|
66
|
+
constructor(id: string, issues: readonly {
|
|
67
|
+
readonly message: string;
|
|
68
|
+
}[]);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Compose la chaîne client en oignon, comme `runMiddlewareChain` côté serveur,
|
|
72
|
+
* mais en pilotant des générateurs craft : le générateur retourné relaie les
|
|
73
|
+
* `yield` de chaque étape à l'hôte (`craftUse`, un loader, un guard…) et
|
|
74
|
+
* résout au contexte accumulé.
|
|
75
|
+
*
|
|
76
|
+
* Le brand `MiddlewareResult` reste purement type-level : à l'exécution, la
|
|
77
|
+
* valeur qui remonte est déjà le contexte final, qu'un middleware peut donc
|
|
78
|
+
* observer — voire remplacer — après l'appel à `next()`.
|
|
79
|
+
*/
|
|
80
|
+
export declare function runClientMiddlewareChain(middlewares: readonly AnyCraftClientMiddleware[], input: unknown): Generator<unknown, MiddlewareContext, unknown>;
|
|
81
|
+
/**
|
|
82
|
+
* Implémente un handshake côté navigateur, en une déclaration.
|
|
83
|
+
*
|
|
84
|
+
* Le corps est un générateur craft ordinaire — il se lit comme un service :
|
|
85
|
+
* on `yield*` ce dont on a besoin et on retourne le fragment de contexte. Le
|
|
86
|
+
* nom et le schéma ne sont pas répétés ici : ils viennent du handshake, donc le
|
|
87
|
+
* serveur et le client ne peuvent pas en dire deux choses différentes.
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```ts
|
|
91
|
+
* // shared/claimed-user.ts
|
|
92
|
+
* export const claimedUser = craftHandshake(
|
|
93
|
+
* 'demo.claimed-user',
|
|
94
|
+
* Schema.toStandardSchemaV1(Schema.Struct({ userId: Schema.String })),
|
|
95
|
+
* );
|
|
96
|
+
*
|
|
97
|
+
* // côté navigateur
|
|
98
|
+
* export const claimedUserContext = craftHandshakeMiddleware(
|
|
99
|
+
* claimedUser,
|
|
100
|
+
* function* () {
|
|
101
|
+
* return { userId: yield* ClaimedUserId() };
|
|
102
|
+
* },
|
|
103
|
+
* );
|
|
104
|
+
*
|
|
105
|
+
* // côté serveur — la même valeur, l'autre bout
|
|
106
|
+
* craftMiddleware('demo.matching-user')
|
|
107
|
+
* .pipe(clientContext(claimedUser))
|
|
108
|
+
* .server(…)
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
export declare function craftHandshakeMiddleware<Name extends string, Schema extends CraftSchema>(handshake: CraftHandshakeSchema<Name, Schema>, run: () => Generator<unknown, SchemaInput<Schema>, unknown>): CraftClientMiddleware<Name, readonly [Schema], SchemaInput<Schema>>;
|
|
112
|
+
/**
|
|
113
|
+
* Drive la chaîne sur la pompe **asynchrone** de craft.
|
|
114
|
+
*
|
|
115
|
+
* Le choix est délibéré : un middleware client lit typiquement une session, un
|
|
116
|
+
* profil, une préférence — des choses qu'un pont (l'adaptateur Effect, par
|
|
117
|
+
* exemple) résout de façon asynchrone. La pompe async restaure le contexte
|
|
118
|
+
* d'injection après chaque `await`, ce qu'un `craftUse` synchrone ne peut pas
|
|
119
|
+
* faire.
|
|
120
|
+
*/
|
|
121
|
+
export declare function runClientMiddlewareChainAsync(middlewares: readonly AnyCraftClientMiddleware[], input: unknown, injector: Injector): Promise<MiddlewareContext>;
|
|
122
|
+
/**
|
|
123
|
+
* Vérifie que la chaîne a bien produit ce que ses `.provides(...)` annoncent.
|
|
124
|
+
*
|
|
125
|
+
* C'est un garde-fou de développement, pas la garantie de sécurité : la vraie
|
|
126
|
+
* validation est celle du serveur, qui ne fait jamais confiance au navigateur.
|
|
127
|
+
*/
|
|
128
|
+
export declare function validateClientContext(id: string, schemas: readonly CraftSchema[], context: MiddlewareContext): Promise<void>;
|
|
129
|
+
export type ClientMiddlewareContextOfSchemas<Schemas extends readonly CraftSchema[]> = MergeSchemaOutputs<Schemas>;
|
|
130
|
+
//# sourceMappingURL=client-function-middleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-function-middleware.d.ts","sourceRoot":"","sources":["../../../../../libs/core/src/lib/client-function-middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACtB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAE9D,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEpE;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,SAAS,iBAAiB,EAAE,KAAK,EAAE;IAC5E,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B,KAAK,SAAS,CAAC,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;AAE7D,MAAM,MAAM,0BAA0B,CACpC,SAAS,SAAS,iBAAiB,GAAG,iBAAiB,IACrD;IACF,4EAA4E;IAC5E,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;CACrC,CAAC;AAEF,MAAM,WAAW,qBAAqB,CACpC,EAAE,SAAS,MAAM,GAAG,MAAM,EAC1B,QAAQ,SAAS,SAAS,WAAW,EAAE,GAAG,SAAS,WAAW,EAAE,EAChE,UAAU,SAAS,iBAAiB,GAAG,iBAAiB;IAExD,QAAQ,CAAC,IAAI,EAAE,4BAA4B,CAAC;IAC5C,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;IAChB,oEAAoE;IACpE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,SAAS,wBAAwB,EAAE,CAAC;IAC3D,QAAQ,CAAC,GAAG,EAAE,CACZ,OAAO,EAAE,0BAA0B,KAChC,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1C,+EAA+E;IAC/E,QAAQ,CAAC,kBAAkB,CAAC,EAAE,UAAU,CAAC;CAC1C;AAED,MAAM,MAAM,wBAAwB,GAAG,qBAAqB,CAC1D,MAAM,EACN,SAAS,WAAW,EAAE,EACtB,GAAG,CACJ,CAAC;AAEF,MAAM,MAAM,0BAA0B,CAAC,UAAU,IAC/C,UAAU,SAAS,qBAAqB,CAAC,GAAG,EAAE,MAAM,QAAQ,EAAE,GAAG,CAAC,GAC9D,QAAQ,GACR,SAAS,EAAE,CAAC;AAElB,MAAM,MAAM,yBAAyB,CAAC,UAAU,IAC9C,UAAU,SAAS,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC,GAC7D,OAAO,GACP,KAAK,CAAC;AAEZ,+EAA+E;AAC/E,MAAM,MAAM,6BAA6B,CACvC,WAAW,SAAS,SAAS,wBAAwB,EAAE,IACrD,WAAW,SAAS,SAAS;IAC/B,MAAM,IAAI,SAAS,wBAAwB;IAC3C,GAAG,MAAM,IAAI,SAAS,SAAS,wBAAwB,EAAE;CAC1D,GACG,SAAS;IACP,GAAG,0BAA0B,CAAC,IAAI,CAAC;IACnC,GAAG,6BAA6B,CAAC,IAAI,CAAC;CACvC,GACD,SAAS,EAAE,CAAC;AAEhB,iFAAiF;AACjF,MAAM,MAAM,6BAA6B,CACvC,WAAW,SAAS,SAAS,wBAAwB,EAAE,IACrD,WAAW,SAAS,SAAS;IAC/B,MAAM,IAAI,SAAS,wBAAwB;IAC3C,GAAG,MAAM,IAAI,SAAS,SAAS,wBAAwB,EAAE;CAC1D,GACG,yBAAyB,CAAC,IAAI,CAAC,GAAG,6BAA6B,CAAC,IAAI,CAAC,GACrE,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAEzB,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,wBAAwB,CAMnC;AAED,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,SAAS,wBAAwB,EAAE,GAC/C,SAAS,wBAAwB,EAAE,CAErC;AAED,4EAA4E;AAC5E,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,SAAS,wBAAwB,EAAE,GAC/C,SAAS,WAAW,EAAE,CAQxB;AAED,qBAAa,0BAA2B,SAAQ,KAAK;IACnD,QAAQ,CAAC,IAAI,2CAA2C;IACxD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,SAAS;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;gBAE7C,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE;CAUxE;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,SAAS,wBAAwB,EAAE,EAChD,KAAK,EAAE,OAAO,GACb,SAAS,CAAC,OAAO,EAAE,iBAAiB,EAAE,OAAO,CAAC,CAmBhD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,SAAS,MAAM,EACnB,MAAM,SAAS,WAAW,EAE1B,SAAS,EAAE,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,EAC7C,GAAG,EAAE,MAAM,SAAS,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,GAC1D,qBAAqB,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAiBrE;AAKD;;;;;;;;GAQG;AACH,wBAAsB,6BAA6B,CACjD,WAAW,EAAE,SAAS,wBAAwB,EAAE,EAChD,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,iBAAiB,CAAC,CAY5B;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,SAAS,WAAW,EAAE,EAC/B,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAKf;AAED,MAAM,MAAM,gCAAgC,CAC1C,OAAO,SAAS,SAAS,WAAW,EAAE,IACpC,kBAAkB,CAAC,OAAO,CAAC,CAAC"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { flattenMiddlewareGraph, } from './middleware-schema-shared';
|
|
2
|
+
import { executeGeneratorCompatibleFactoryAsync } from './craft-program-runtime';
|
|
3
|
+
import { CraftGenShortCircuit } from './craft-gen';
|
|
4
|
+
import { craftHandshakeName } from './craft-handshake';
|
|
5
|
+
export function isCraftClientMiddleware(value) {
|
|
6
|
+
return (typeof value === 'object' &&
|
|
7
|
+
value !== null &&
|
|
8
|
+
value.kind === 'client-function-middleware');
|
|
9
|
+
}
|
|
10
|
+
export function flattenClientMiddlewares(middlewares) {
|
|
11
|
+
return flattenMiddlewareGraph(middlewares);
|
|
12
|
+
}
|
|
13
|
+
/** Schémas `.provides(...)` collectés le long de la chaîne, dédupliqués. */
|
|
14
|
+
export function collectClientMiddlewareSchemas(middlewares) {
|
|
15
|
+
const schemas = [];
|
|
16
|
+
for (const middleware of flattenClientMiddlewares(middlewares)) {
|
|
17
|
+
for (const schema of middleware.provides) {
|
|
18
|
+
if (!schemas.includes(schema))
|
|
19
|
+
schemas.push(schema);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return schemas;
|
|
23
|
+
}
|
|
24
|
+
export class ClientFunctionContextError extends Error {
|
|
25
|
+
code = 'CRAFT_CLIENT_FUNCTION_CONTEXT_INVALID';
|
|
26
|
+
id;
|
|
27
|
+
issues;
|
|
28
|
+
constructor(id, issues) {
|
|
29
|
+
super(`CRAFT_CLIENT_FUNCTION_CONTEXT_INVALID: client middleware chain of "${id}" produced an invalid context: ${issues
|
|
30
|
+
.map((issue) => issue.message)
|
|
31
|
+
.join(', ')}`);
|
|
32
|
+
this.id = id;
|
|
33
|
+
this.issues = issues;
|
|
34
|
+
this.name = 'ClientFunctionContextError';
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Compose la chaîne client en oignon, comme `runMiddlewareChain` côté serveur,
|
|
39
|
+
* mais en pilotant des générateurs craft : le générateur retourné relaie les
|
|
40
|
+
* `yield` de chaque étape à l'hôte (`craftUse`, un loader, un guard…) et
|
|
41
|
+
* résout au contexte accumulé.
|
|
42
|
+
*
|
|
43
|
+
* Le brand `MiddlewareResult` reste purement type-level : à l'exécution, la
|
|
44
|
+
* valeur qui remonte est déjà le contexte final, qu'un middleware peut donc
|
|
45
|
+
* observer — voire remplacer — après l'appel à `next()`.
|
|
46
|
+
*/
|
|
47
|
+
export function runClientMiddlewareChain(middlewares, input) {
|
|
48
|
+
const chain = flattenClientMiddlewares(middlewares);
|
|
49
|
+
function* step(index, context) {
|
|
50
|
+
const middleware = chain[index];
|
|
51
|
+
if (!middleware)
|
|
52
|
+
return context;
|
|
53
|
+
const result = yield* middleware.run({
|
|
54
|
+
input,
|
|
55
|
+
context,
|
|
56
|
+
next: ((patch) => step(index + 1, { ...context, ...patch.context })),
|
|
57
|
+
});
|
|
58
|
+
return result;
|
|
59
|
+
}
|
|
60
|
+
return step(0, {});
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Implémente un handshake côté navigateur, en une déclaration.
|
|
64
|
+
*
|
|
65
|
+
* Le corps est un générateur craft ordinaire — il se lit comme un service :
|
|
66
|
+
* on `yield*` ce dont on a besoin et on retourne le fragment de contexte. Le
|
|
67
|
+
* nom et le schéma ne sont pas répétés ici : ils viennent du handshake, donc le
|
|
68
|
+
* serveur et le client ne peuvent pas en dire deux choses différentes.
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```ts
|
|
72
|
+
* // shared/claimed-user.ts
|
|
73
|
+
* export const claimedUser = craftHandshake(
|
|
74
|
+
* 'demo.claimed-user',
|
|
75
|
+
* Schema.toStandardSchemaV1(Schema.Struct({ userId: Schema.String })),
|
|
76
|
+
* );
|
|
77
|
+
*
|
|
78
|
+
* // côté navigateur
|
|
79
|
+
* export const claimedUserContext = craftHandshakeMiddleware(
|
|
80
|
+
* claimedUser,
|
|
81
|
+
* function* () {
|
|
82
|
+
* return { userId: yield* ClaimedUserId() };
|
|
83
|
+
* },
|
|
84
|
+
* );
|
|
85
|
+
*
|
|
86
|
+
* // côté serveur — la même valeur, l'autre bout
|
|
87
|
+
* craftMiddleware('demo.matching-user')
|
|
88
|
+
* .pipe(clientContext(claimedUser))
|
|
89
|
+
* .server(…)
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
92
|
+
export function craftHandshakeMiddleware(handshake, run) {
|
|
93
|
+
const name = craftHandshakeName(handshake);
|
|
94
|
+
if (name === undefined) {
|
|
95
|
+
throw new Error('craftHandshakeMiddleware(handshake, run) expects a craftHandshake(name, schema) as its first argument.');
|
|
96
|
+
}
|
|
97
|
+
return Object.freeze({
|
|
98
|
+
kind: 'client-function-middleware',
|
|
99
|
+
id: name,
|
|
100
|
+
provides: [handshake],
|
|
101
|
+
dependencies: [],
|
|
102
|
+
*run({ next }) {
|
|
103
|
+
const fragment = yield* run();
|
|
104
|
+
return yield* next({ context: fragment });
|
|
105
|
+
},
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
const INVALID_YIELD_ERROR_MESSAGE = 'A client function middleware can only yield craft dependencies, craft primitives, or — with the Effect bridge installed — an Effect.';
|
|
109
|
+
/**
|
|
110
|
+
* Drive la chaîne sur la pompe **asynchrone** de craft.
|
|
111
|
+
*
|
|
112
|
+
* Le choix est délibéré : un middleware client lit typiquement une session, un
|
|
113
|
+
* profil, une préférence — des choses qu'un pont (l'adaptateur Effect, par
|
|
114
|
+
* exemple) résout de façon asynchrone. La pompe async restaure le contexte
|
|
115
|
+
* d'injection après chaque `await`, ce qu'un `craftUse` synchrone ne peut pas
|
|
116
|
+
* faire.
|
|
117
|
+
*/
|
|
118
|
+
export async function runClientMiddlewareChainAsync(middlewares, input, injector) {
|
|
119
|
+
const settled = await executeGeneratorCompatibleFactoryAsync({
|
|
120
|
+
factory: () => runClientMiddlewareChain(middlewares, input),
|
|
121
|
+
thisArg: undefined,
|
|
122
|
+
getInjector: () => injector,
|
|
123
|
+
args: [],
|
|
124
|
+
invalidYieldErrorMessage: INVALID_YIELD_ERROR_MESSAGE,
|
|
125
|
+
});
|
|
126
|
+
if (settled.kind === 'shortCircuit') {
|
|
127
|
+
throw new CraftGenShortCircuit(settled.exception);
|
|
128
|
+
}
|
|
129
|
+
return (settled.value ?? {});
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Vérifie que la chaîne a bien produit ce que ses `.provides(...)` annoncent.
|
|
133
|
+
*
|
|
134
|
+
* C'est un garde-fou de développement, pas la garantie de sécurité : la vraie
|
|
135
|
+
* validation est celle du serveur, qui ne fait jamais confiance au navigateur.
|
|
136
|
+
*/
|
|
137
|
+
export async function validateClientContext(id, schemas, context) {
|
|
138
|
+
for (const schema of schemas) {
|
|
139
|
+
const result = await schema['~standard'].validate(context);
|
|
140
|
+
if (result.issues)
|
|
141
|
+
throw new ClientFunctionContextError(id, result.issues);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=client-function-middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-function-middleware.js","sourceRoot":"","sources":["../../../../../libs/core/src/lib/client-function-middleware.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n flattenMiddlewareGraph,\n type MergeSchemaOutputs,\n type MiddlewareContext,\n type MiddlewareResult,\n} from './middleware-schema-shared';\nimport { executeGeneratorCompatibleFactoryAsync } from './craft-program-runtime';\nimport { CraftGenShortCircuit } from './craft-gen';\nimport type { Injector } from './host/craft-compat';\nimport type { CraftHandshakeSchema } from './craft-handshake';\nimport { craftHandshakeName } from './craft-handshake';\nimport type { CraftSchema, SchemaInput } from './schema-validation';\n\n/**\n * Middleware **client** d'une server function : le pendant navigateur du\n * middleware serveur, déclaré par `craftMiddleware(id).client(run)`.\n *\n * Deux différences assumées avec la famille serveur :\n *\n * - `run` est un **générateur craft nu** (`function* ({ next }) { ... }`), pas\n * un Effect : c'est la même famille que les guards `canActivate`/`canMatch`,\n * et le core reste sans dépendance runtime sur Effect côté client comme côté\n * serveur. Un `yield* someEffect` reste possible si le pont Effect est\n * installé dans l'application ;\n * - ce qu'il publie n'est **pas** de la donnée de confiance : le contexte est\n * transporté au serveur, revalidé par schéma, et atterrit dans un champ\n * distinct (`clientContext`) pour que le handler ne le confonde jamais avec\n * le contexte produit par la chaîne serveur.\n */\nexport type ClientMiddlewareNext = <Context extends MiddlewareContext>(patch: {\n readonly context: Context;\n}) => Generator<unknown, MiddlewareResult<Context>, unknown>;\n\nexport type ClientMiddlewareRunContext<\n ContextIn extends MiddlewareContext = MiddlewareContext,\n> = {\n /** L'input passé à la façade client, tel quel : il n'est pas validé ici. */\n readonly input: unknown;\n readonly context: ContextIn;\n readonly next: ClientMiddlewareNext;\n};\n\nexport interface CraftClientMiddleware<\n Id extends string = string,\n Provides extends readonly CraftSchema[] = readonly CraftSchema[],\n ContextOut extends MiddlewareContext = MiddlewareContext,\n> {\n readonly kind: 'client-function-middleware';\n readonly id: Id;\n /** Schémas déclarés par `.provides(...)`, dépendances comprises. */\n readonly provides: Provides;\n readonly dependencies: readonly AnyCraftClientMiddleware[];\n readonly run: (\n context: ClientMiddlewareRunContext,\n ) => Generator<unknown, unknown, unknown>;\n /** Porteur type-only du contexte publié, dépendances transitives comprises. */\n readonly __clientContextOut?: ContextOut;\n}\n\nexport type AnyCraftClientMiddleware = CraftClientMiddleware<\n string,\n readonly CraftSchema[],\n any\n>;\n\nexport type ClientMiddlewareProvidesOf<Middleware> =\n Middleware extends CraftClientMiddleware<any, infer Provides, any>\n ? Provides\n : readonly [];\n\nexport type ClientMiddlewareContextOf<Middleware> =\n Middleware extends CraftClientMiddleware<any, any, infer Context>\n ? Context\n : never;\n\n/** Concatène les schémas `.provides(...)` d'une liste de middleware client. */\nexport type ClientMiddlewareProvidesOfAll<\n Middlewares extends readonly AnyCraftClientMiddleware[],\n> = Middlewares extends readonly [\n infer Head extends AnyCraftClientMiddleware,\n ...infer Tail extends readonly AnyCraftClientMiddleware[],\n]\n ? readonly [\n ...ClientMiddlewareProvidesOf<Head>,\n ...ClientMiddlewareProvidesOfAll<Tail>,\n ]\n : readonly [];\n\n/** Contexte publié par une liste de middleware client, fusionné dans l'ordre. */\nexport type MergedClientMiddlewareContext<\n Middlewares extends readonly AnyCraftClientMiddleware[],\n> = Middlewares extends readonly [\n infer Head extends AnyCraftClientMiddleware,\n ...infer Tail extends readonly AnyCraftClientMiddleware[],\n]\n ? ClientMiddlewareContextOf<Head> & MergedClientMiddlewareContext<Tail>\n : Record<never, never>;\n\nexport function isCraftClientMiddleware(\n value: unknown,\n): value is AnyCraftClientMiddleware {\n return (\n typeof value === 'object' &&\n value !== null &&\n (value as { kind?: unknown }).kind === 'client-function-middleware'\n );\n}\n\nexport function flattenClientMiddlewares(\n middlewares: readonly AnyCraftClientMiddleware[],\n): readonly AnyCraftClientMiddleware[] {\n return flattenMiddlewareGraph(middlewares);\n}\n\n/** Schémas `.provides(...)` collectés le long de la chaîne, dédupliqués. */\nexport function collectClientMiddlewareSchemas(\n middlewares: readonly AnyCraftClientMiddleware[],\n): readonly CraftSchema[] {\n const schemas: CraftSchema[] = [];\n for (const middleware of flattenClientMiddlewares(middlewares)) {\n for (const schema of middleware.provides) {\n if (!schemas.includes(schema)) schemas.push(schema);\n }\n }\n return schemas;\n}\n\nexport class ClientFunctionContextError extends Error {\n readonly code = 'CRAFT_CLIENT_FUNCTION_CONTEXT_INVALID';\n readonly id: string;\n readonly issues: readonly { readonly message: string }[];\n\n constructor(id: string, issues: readonly { readonly message: string }[]) {\n super(\n `CRAFT_CLIENT_FUNCTION_CONTEXT_INVALID: client middleware chain of \"${id}\" produced an invalid context: ${issues\n .map((issue) => issue.message)\n .join(', ')}`,\n );\n this.id = id;\n this.issues = issues;\n this.name = 'ClientFunctionContextError';\n }\n}\n\n/**\n * Compose la chaîne client en oignon, comme `runMiddlewareChain` côté serveur,\n * mais en pilotant des générateurs craft : le générateur retourné relaie les\n * `yield` de chaque étape à l'hôte (`craftUse`, un loader, un guard…) et\n * résout au contexte accumulé.\n *\n * Le brand `MiddlewareResult` reste purement type-level : à l'exécution, la\n * valeur qui remonte est déjà le contexte final, qu'un middleware peut donc\n * observer — voire remplacer — après l'appel à `next()`.\n */\nexport function runClientMiddlewareChain(\n middlewares: readonly AnyCraftClientMiddleware[],\n input: unknown,\n): Generator<unknown, MiddlewareContext, unknown> {\n const chain = flattenClientMiddlewares(middlewares);\n\n function* step(\n index: number,\n context: MiddlewareContext,\n ): Generator<unknown, MiddlewareContext, unknown> {\n const middleware = chain[index];\n if (!middleware) return context;\n const result = yield* middleware.run({\n input,\n context,\n next: ((patch: { readonly context: MiddlewareContext }) =>\n step(index + 1, { ...context, ...patch.context })) as never,\n });\n return result as MiddlewareContext;\n }\n\n return step(0, {});\n}\n\n/**\n * Implémente un handshake côté navigateur, en une déclaration.\n *\n * Le corps est un générateur craft ordinaire — il se lit comme un service :\n * on `yield*` ce dont on a besoin et on retourne le fragment de contexte. Le\n * nom et le schéma ne sont pas répétés ici : ils viennent du handshake, donc le\n * serveur et le client ne peuvent pas en dire deux choses différentes.\n *\n * @example\n * ```ts\n * // shared/claimed-user.ts\n * export const claimedUser = craftHandshake(\n * 'demo.claimed-user',\n * Schema.toStandardSchemaV1(Schema.Struct({ userId: Schema.String })),\n * );\n *\n * // côté navigateur\n * export const claimedUserContext = craftHandshakeMiddleware(\n * claimedUser,\n * function* () {\n * return { userId: yield* ClaimedUserId() };\n * },\n * );\n *\n * // côté serveur — la même valeur, l'autre bout\n * craftMiddleware('demo.matching-user')\n * .pipe(clientContext(claimedUser))\n * .server(…)\n * ```\n */\nexport function craftHandshakeMiddleware<\n Name extends string,\n Schema extends CraftSchema,\n>(\n handshake: CraftHandshakeSchema<Name, Schema>,\n run: () => Generator<unknown, SchemaInput<Schema>, unknown>,\n): CraftClientMiddleware<Name, readonly [Schema], SchemaInput<Schema>> {\n const name = craftHandshakeName(handshake);\n if (name === undefined) {\n throw new Error(\n 'craftHandshakeMiddleware(handshake, run) expects a craftHandshake(name, schema) as its first argument.',\n );\n }\n return Object.freeze({\n kind: 'client-function-middleware' as const,\n id: name as Name,\n provides: [handshake] as unknown as readonly [Schema],\n dependencies: [],\n *run({ next }: ClientMiddlewareRunContext) {\n const fragment = yield* run();\n return yield* next({ context: fragment as never });\n },\n }) as CraftClientMiddleware<Name, readonly [Schema], SchemaInput<Schema>>;\n}\n\nconst INVALID_YIELD_ERROR_MESSAGE =\n 'A client function middleware can only yield craft dependencies, craft primitives, or — with the Effect bridge installed — an Effect.';\n\n/**\n * Drive la chaîne sur la pompe **asynchrone** de craft.\n *\n * Le choix est délibéré : un middleware client lit typiquement une session, un\n * profil, une préférence — des choses qu'un pont (l'adaptateur Effect, par\n * exemple) résout de façon asynchrone. La pompe async restaure le contexte\n * d'injection après chaque `await`, ce qu'un `craftUse` synchrone ne peut pas\n * faire.\n */\nexport async function runClientMiddlewareChainAsync(\n middlewares: readonly AnyCraftClientMiddleware[],\n input: unknown,\n injector: Injector,\n): Promise<MiddlewareContext> {\n const settled = await executeGeneratorCompatibleFactoryAsync({\n factory: () => runClientMiddlewareChain(middlewares, input),\n thisArg: undefined,\n getInjector: () => injector,\n args: [],\n invalidYieldErrorMessage: INVALID_YIELD_ERROR_MESSAGE,\n });\n if (settled.kind === 'shortCircuit') {\n throw new CraftGenShortCircuit(settled.exception);\n }\n return (settled.value ?? {}) as MiddlewareContext;\n}\n\n/**\n * Vérifie que la chaîne a bien produit ce que ses `.provides(...)` annoncent.\n *\n * C'est un garde-fou de développement, pas la garantie de sécurité : la vraie\n * validation est celle du serveur, qui ne fait jamais confiance au navigateur.\n */\nexport async function validateClientContext(\n id: string,\n schemas: readonly CraftSchema[],\n context: MiddlewareContext,\n): Promise<void> {\n for (const schema of schemas) {\n const result = await schema['~standard'].validate(context);\n if (result.issues) throw new ClientFunctionContextError(id, result.issues);\n }\n}\n\nexport type ClientMiddlewareContextOfSchemas<\n Schemas extends readonly CraftSchema[],\n> = MergeSchemaOutputs<Schemas>;\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { InjectionToken, type Provider } from './host/craft-compat';
|
|
2
|
+
type ComponentMonitoringFactory = (() => void) | (() => Generator<unknown, void, unknown>);
|
|
3
|
+
export declare const COMPONENT_MONITORING: InjectionToken<ComponentMonitoringFactory>;
|
|
4
|
+
export declare function componentMonitoring(): void;
|
|
5
|
+
export declare function provideComponentMonitoring(fn: ComponentMonitoringFactory): Provider;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=component-monitoring.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component-monitoring.d.ts","sourceRoot":"","sources":["../../../../../libs/core/src/lib/component-monitoring.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,cAAc,EAEd,KAAK,QAAQ,EACd,MAAM,qBAAqB,CAAC;AAG7B,KAAK,0BAA0B,GAC3B,CAAC,MAAM,IAAI,CAAC,GACZ,CAAC,MAAM,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;AAE9C,eAAO,MAAM,oBAAoB,4CAI7B,CAAC;AAEL,wBAAgB,mBAAmB,IAAI,IAAI,CAqB1C;AAED,wBAAgB,0BAA0B,CACxC,EAAE,EAAE,0BAA0B,GAC7B,QAAQ,CAEV"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { assertInInjectionContext, inject, Injector, InjectionToken, runInInjectionContext, } from './host/craft-compat';
|
|
2
|
+
import { isGenerator, runCraftGenerator } from './craft-generator-runtime';
|
|
3
|
+
export const COMPONENT_MONITORING = new InjectionToken('COMPONENT_MONITORING', {
|
|
4
|
+
providedIn: 'root',
|
|
5
|
+
factory: () => () => undefined,
|
|
6
|
+
});
|
|
7
|
+
export function componentMonitoring() {
|
|
8
|
+
assertInInjectionContext(componentMonitoring);
|
|
9
|
+
const monitor = inject(COMPONENT_MONITORING);
|
|
10
|
+
const injector = inject(Injector);
|
|
11
|
+
runInInjectionContext(injector, () => {
|
|
12
|
+
const result = monitor();
|
|
13
|
+
if (isGenerator(result)) {
|
|
14
|
+
runCraftGenerator({
|
|
15
|
+
iterator: result,
|
|
16
|
+
injector,
|
|
17
|
+
hostScope: 'function',
|
|
18
|
+
invalidYieldErrorMessage: 'componentMonitoring generators can only yield craftService dependencies.',
|
|
19
|
+
multipleAppStartErrorMessage: 'componentMonitoring does not support onAppStart.',
|
|
20
|
+
onAppStartNotSupportedErrorMessage: 'componentMonitoring does not support onAppStart.',
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
export function provideComponentMonitoring(fn) {
|
|
26
|
+
return { provide: COMPONENT_MONITORING, useValue: fn };
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=component-monitoring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component-monitoring.js","sourceRoot":"","sources":["../../../../../libs/core/src/lib/component-monitoring.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,MAAM,EACN,QAAQ,EACR,cAAc,EACd,qBAAqB,GAEtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAM3E,MAAM,CAAC,MAAM,oBAAoB,GAC/B,IAAI,cAAc,CAA6B,sBAAsB,EAAE;IACrE,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,SAAS;CAC/B,CAAC,CAAC;AAEL,MAAM,UAAU,mBAAmB;IACjC,wBAAwB,CAAC,mBAAmB,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAElC,qBAAqB,CAAC,QAAQ,EAAE,GAAG,EAAE;QACnC,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC;QACzB,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;YACxB,iBAAiB,CAAC;gBAChB,QAAQ,EAAE,MAAM;gBAChB,QAAQ;gBACR,SAAS,EAAE,UAAU;gBACrB,wBAAwB,EACtB,0EAA0E;gBAC5E,4BAA4B,EAC1B,kDAAkD;gBACpD,kCAAkC,EAChC,kDAAkD;aACrD,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,EAA8B;IAE9B,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AACzD,CAAC","sourcesContent":["import {\n assertInInjectionContext,\n inject,\n Injector,\n InjectionToken,\n runInInjectionContext,\n type Provider,\n} from './host/craft-compat';\nimport { isGenerator, runCraftGenerator } from './craft-generator-runtime';\n\ntype ComponentMonitoringFactory =\n | (() => void)\n | (() => Generator<unknown, void, unknown>);\n\nexport const COMPONENT_MONITORING =\n new InjectionToken<ComponentMonitoringFactory>('COMPONENT_MONITORING', {\n providedIn: 'root',\n factory: () => () => undefined,\n });\n\nexport function componentMonitoring(): void {\n assertInInjectionContext(componentMonitoring);\n const monitor = inject(COMPONENT_MONITORING);\n const injector = inject(Injector);\n\n runInInjectionContext(injector, () => {\n const result = monitor();\n if (isGenerator(result)) {\n runCraftGenerator({\n iterator: result,\n injector,\n hostScope: 'function',\n invalidYieldErrorMessage:\n 'componentMonitoring generators can only yield craftService dependencies.',\n multipleAppStartErrorMessage:\n 'componentMonitoring does not support onAppStart.',\n onAppStartNotSupportedErrorMessage:\n 'componentMonitoring does not support onAppStart.',\n });\n }\n });\n}\n\nexport function provideComponentMonitoring(\n fn: ComponentMonitoringFactory,\n): Provider {\n return { provide: COMPONENT_MONITORING, useValue: fn };\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { GetDeps } from './branded-component/branded-component';
|
|
2
|
+
export type ComponentRegister = {
|
|
3
|
+
next(): number;
|
|
4
|
+
};
|
|
5
|
+
export declare function createComponentRegister(): ComponentRegister;
|
|
6
|
+
export declare const COMPONENT_REGISTER: import("..").CraftToken<ComponentRegister>;
|
|
7
|
+
export declare const ɵfallbackComponentRegister: ComponentRegister;
|
|
8
|
+
export type GenDeps_ComponentRegister = GetDeps<{
|
|
9
|
+
deps: {};
|
|
10
|
+
provided: {};
|
|
11
|
+
}>;
|
|
12
|
+
//# sourceMappingURL=component-register.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component-register.d.ts","sourceRoot":"","sources":["../../../../../libs/core/src/lib/component-register.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uCAAuC,CAAC;AAGrE,MAAM,MAAM,iBAAiB,GAAG;IAAE,IAAI,IAAI,MAAM,CAAA;CAAE,CAAC;AAEnD,wBAAgB,uBAAuB,IAAI,iBAAiB,CAQ3D;AAED,eAAO,MAAM,kBAAkB,4CACqB,CAAC;AAErD,eAAO,MAAM,0BAA0B,mBAA4B,CAAC;AAEpE,MAAM,MAAM,yBAAyB,GAAG,OAAO,CAAC;IAC9C,IAAI,EAAE,EAAE,CAAC;IACT,QAAQ,EAAE,EAAE,CAAC;CACd,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { craftToken } from './host/craft-injector';
|
|
2
|
+
export function createComponentRegister() {
|
|
3
|
+
let counter = 0;
|
|
4
|
+
return {
|
|
5
|
+
next() {
|
|
6
|
+
counter += 1;
|
|
7
|
+
return counter;
|
|
8
|
+
},
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export const COMPONENT_REGISTER = craftToken('ComponentRegister');
|
|
12
|
+
export const ɵfallbackComponentRegister = createComponentRegister();
|
|
13
|
+
//# sourceMappingURL=component-register.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component-register.js","sourceRoot":"","sources":["../../../../../libs/core/src/lib/component-register.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAInD,MAAM,UAAU,uBAAuB;IACrC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,OAAO;QACL,IAAI;YACF,OAAO,IAAI,CAAC,CAAC;YACb,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAC7B,UAAU,CAAoB,mBAAmB,CAAC,CAAC;AAErD,MAAM,CAAC,MAAM,0BAA0B,GAAG,uBAAuB,EAAE,CAAC","sourcesContent":["import type { GetDeps } from './branded-component/branded-component';\nimport { craftToken } from './host/craft-injector';\n\nexport type ComponentRegister = { next(): number };\n\nexport function createComponentRegister(): ComponentRegister {\n let counter = 0;\n return {\n next() {\n counter += 1;\n return counter;\n },\n };\n}\n\nexport const COMPONENT_REGISTER =\n craftToken<ComponentRegister>('ComponentRegister');\n\nexport const ɵfallbackComponentRegister = createComponentRegister();\n\nexport type GenDeps_ComponentRegister = GetDeps<{\n deps: {};\n provided: {};\n}>;\n"]}
|