@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,110 @@
|
|
|
1
|
+
import { Injector, Signal } from '../host/craft-compat';
|
|
2
|
+
import type { InsertionStateFactoryContext } from '../query.core';
|
|
3
|
+
import { Source$ as SourceDollarType } from '../source$';
|
|
4
|
+
import { MergeObject } from '../util/types/util.type';
|
|
5
|
+
import { FilterSource, IsEmptyObject } from '../util/util.type';
|
|
6
|
+
import { CraftFieldTree } from './craft-field';
|
|
7
|
+
import { type NonYieldableInsertionMethod, type YieldableInsertionMethods } from '../yieldable';
|
|
8
|
+
import type { YieldableInsertionWrite } from '../query.core';
|
|
9
|
+
import { type CraftFieldExceptionSourceCarrier, type CraftFieldValidationCasesCarrier, type FieldValidationCasesFromInsertions } from './field-exception';
|
|
10
|
+
type Source$Method<SourceType> = [SourceType] extends [void] ? () => Generator<never, void, unknown> : (value: SourceType) => Generator<never, void, unknown>;
|
|
11
|
+
type RawExposedFormInsertions<Insertions> = YieldableInsertionMethods<MergeObject<IsEmptyObject<Insertions> extends true ? {} : FilterSource<Insertions>, {
|
|
12
|
+
[K in keyof FilterSource<Insertions> as FilterSource<Insertions>[K] extends SourceDollarType<any> ? K : never]: FilterSource<Insertions>[K] extends SourceDollarType<infer SourceType> ? Source$Method<SourceType> : never;
|
|
13
|
+
}>>;
|
|
14
|
+
type JoinFieldPath<Prefix extends string, Path extends string> = Prefix extends '' ? Path : Path extends '[]' ? `${Prefix}[]` : `${Prefix}.${Path}`;
|
|
15
|
+
type PrefixSelectedFormPath<Result, Prefix extends string> = Result extends FormWithInsertions<infer Model, infer Insertions, infer Path extends string> ? FormWithInsertions<Model, Insertions, JoinFieldPath<Prefix, Path>> : Result;
|
|
16
|
+
type PrefixSelectedFormMethod<Value, Prefix extends string> = Value extends NonYieldableInsertionMethod<infer Args, infer Result> ? NonYieldableInsertionMethod<Args, PrefixSelectedFormPath<Result, Prefix>> : Value;
|
|
17
|
+
type ExposedFormInsertions<Insertions, Path extends string = ''> = {
|
|
18
|
+
[Key in keyof RawExposedFormInsertions<Insertions>]: PrefixSelectedFormMethod<RawExposedFormInsertions<Insertions>[Key], Path>;
|
|
19
|
+
};
|
|
20
|
+
type FormExceptionSignal<Insertions, ExceptionName extends string> = `${Uncapitalize<ExceptionName>}Exceptions` extends keyof ExposedFormInsertions<Insertions> ? ExposedFormInsertions<Insertions>[`${Uncapitalize<ExceptionName>}Exceptions`] extends Signal<infer Exceptions> ? Exceptions : never : never;
|
|
21
|
+
type HasFormExceptionSignalPair<Insertions, ExceptionName extends string, HasExceptionKey extends keyof ExposedFormInsertions<Insertions>> = ExposedFormInsertions<Insertions>[HasExceptionKey] extends Signal<boolean> ? `${Uncapitalize<ExceptionName>}Exceptions` extends keyof ExposedFormInsertions<Insertions> ? ExposedFormInsertions<Insertions>[`${Uncapitalize<ExceptionName>}Exceptions`] extends Signal<unknown> ? true : false : false : false;
|
|
22
|
+
type FormExceptionMap<Insertions> = {
|
|
23
|
+
[K in keyof ExposedFormInsertions<Insertions> as K extends string ? K extends `has${infer Name}Exceptions` ? HasFormExceptionSignalPair<Insertions, Name, K> extends true ? Uncapitalize<Name> : never : never : never]: K extends `has${infer Name}Exceptions` ? FormExceptionSignal<Insertions, Name> : never;
|
|
24
|
+
};
|
|
25
|
+
type FormExceptionsInsertion<Insertions> = keyof FormExceptionMap<Insertions> extends never ? {} : {
|
|
26
|
+
hasExceptions: Signal<boolean>;
|
|
27
|
+
exceptions: Signal<FormExceptionMap<Insertions>>;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* The full type of a craft form, exposed by `insertForm`.
|
|
31
|
+
*
|
|
32
|
+
* It is a `CraftFieldTree<Model>` (with sub-field navigation) merged with all the
|
|
33
|
+
* insertion outputs (e.g. submit, exceptions, validators) and aggregated exception signals.
|
|
34
|
+
*/
|
|
35
|
+
export type FormWithInsertions<Model, Insertions, Path extends string = ''> = CraftFieldTree<Model> & ExposedFormInsertions<Insertions, Path> & CraftFieldValidationCasesCarrier<FieldValidationCasesFromInsertions<Insertions, Path>> & CraftFieldExceptionSourceCarrier & {
|
|
36
|
+
hasAttemptedSubmit: Signal<boolean>;
|
|
37
|
+
submitting: Signal<boolean>;
|
|
38
|
+
validatedFormValue: Signal<ValidatedFormValue<Model>>;
|
|
39
|
+
} & FormExceptionsInsertion<Insertions>;
|
|
40
|
+
export type InsertionFormFactoryContext<StateType, PreviousInsertionsOutputs, FormIdentifier extends string | number | unknown> = InsertionStateFactoryContext<StateType, PreviousInsertionsOutputs> & {
|
|
41
|
+
field: CraftFieldTree<StateType>;
|
|
42
|
+
hasAttemptedSubmit: Signal<boolean>;
|
|
43
|
+
submitting: Signal<boolean>;
|
|
44
|
+
validatedFormValue: Signal<ValidatedFormValue<StateType>>;
|
|
45
|
+
setAttemptedSubmit: () => void;
|
|
46
|
+
setSubmitting: (submitting: boolean) => void;
|
|
47
|
+
formIdentifier: FormIdentifier;
|
|
48
|
+
};
|
|
49
|
+
export type InsertionsFormFactory<State, FormIdentifier extends string | number | unknown, InsertionsOutputs, PreviousInsertionsOutputs = {}, Yielded = never> = (context: InsertionFormFactoryContext<State, PreviousInsertionsOutputs, FormIdentifier>) => InsertionsOutputs | Generator<Yielded, InsertionsOutputs, unknown>;
|
|
50
|
+
export declare const validatedFormValueSymbol: unique symbol;
|
|
51
|
+
export type ValidatedFormValue<FormValue> = (FormValue & {
|
|
52
|
+
[validatedFormValueSymbol]: true;
|
|
53
|
+
}) | undefined;
|
|
54
|
+
export declare function createFormExceptions(rawInsertionsOutput: Record<string, unknown>, exposedInsertionsOutput: Record<string, unknown>): {
|
|
55
|
+
hasExceptions?: undefined;
|
|
56
|
+
exceptions?: undefined;
|
|
57
|
+
} | {
|
|
58
|
+
hasExceptions: import("../..").ɵCraftSignal<boolean>;
|
|
59
|
+
exceptions: import("../..").ɵCraftSignal<{
|
|
60
|
+
[x: string]: unknown;
|
|
61
|
+
}>;
|
|
62
|
+
};
|
|
63
|
+
export type SubmissionController = {
|
|
64
|
+
hasAttemptedSubmit: Signal<boolean>;
|
|
65
|
+
submitting: Signal<boolean>;
|
|
66
|
+
setAttemptedSubmit: () => void;
|
|
67
|
+
setSubmitting: (submitting: boolean) => void;
|
|
68
|
+
reset: () => void;
|
|
69
|
+
};
|
|
70
|
+
export declare function createSubmissionController(): SubmissionController;
|
|
71
|
+
/**
|
|
72
|
+
* Wrap a CraftFieldTree with extra properties (insertion outputs, exception
|
|
73
|
+
* aggregates, submission state) so the merged object behaves like a
|
|
74
|
+
* `FormWithInsertions`. Used by sub-form builders.
|
|
75
|
+
*/
|
|
76
|
+
export declare function wrapSubFieldWithExtras<T>(subField: CraftFieldTree<T>, extras: Record<string, unknown>): CraftFieldTree<T>;
|
|
77
|
+
/**
|
|
78
|
+
* Build a fully-decorated sub-form (field tree + insertion outputs + exception
|
|
79
|
+
* aggregates) from a sub-field plus a state read/write pair. Used by both
|
|
80
|
+
* `insertSelectFormTree` (structural sub-fields) and `insertSubFormField`
|
|
81
|
+
* (derived sub-fields).
|
|
82
|
+
*/
|
|
83
|
+
export declare function buildSubForm<Sub>(options: {
|
|
84
|
+
parentContext: InsertionFormFactoryContext<unknown, unknown, unknown>;
|
|
85
|
+
subField: CraftFieldTree<Sub>;
|
|
86
|
+
subState: () => Sub;
|
|
87
|
+
setSub: (next: Sub) => void;
|
|
88
|
+
insertions: InsertionsFormFactory<Sub, unknown, Record<string, unknown>, Record<string, unknown>>[];
|
|
89
|
+
injector: Injector;
|
|
90
|
+
}): FormWithInsertions<Sub, Record<string, unknown>>;
|
|
91
|
+
export declare function executeFormInsertions<Model>(formInsertions: InsertionsFormFactory<Model, unknown, Record<string, unknown>, Record<string, unknown>>[], options: {
|
|
92
|
+
field: CraftFieldTree<Model>;
|
|
93
|
+
state: Signal<Model>;
|
|
94
|
+
submission: SubmissionController;
|
|
95
|
+
set: YieldableInsertionWrite<[newState: Model], Model>;
|
|
96
|
+
update: YieldableInsertionWrite<[
|
|
97
|
+
updateFn: (currentState: Model) => Model
|
|
98
|
+
], Model>;
|
|
99
|
+
patch: YieldableInsertionWrite<[
|
|
100
|
+
patchFn: (currentState: Model) => Partial<Model>
|
|
101
|
+
], Model>;
|
|
102
|
+
inheritedInsertions: Record<string, unknown>;
|
|
103
|
+
injector: Injector;
|
|
104
|
+
formIdentifier: string | number | unknown;
|
|
105
|
+
}): {
|
|
106
|
+
rawInsertionsOutput: Record<string, unknown>;
|
|
107
|
+
exposedInsertionsOutput: Record<string, unknown>;
|
|
108
|
+
};
|
|
109
|
+
export {};
|
|
110
|
+
//# sourceMappingURL=insert-form-internals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insert-form-internals.d.ts","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/form/insert-form-internals.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
import { computed, isSignal, runInInjectionContext, signal, } from '../host/craft-compat';
|
|
2
|
+
import { isGenerator, runCraftGenerator } from '../craft-generator-runtime';
|
|
3
|
+
import { injectFnWrapper } from '../fn-wrapper';
|
|
4
|
+
import { ɵcreateHostTaggedInjector } from '../craft-service';
|
|
5
|
+
import { isSource } from '../util/util';
|
|
6
|
+
import { createYieldableInsertionMethod, isNonYieldableInsertionMethod, yieldableInvocation, } from '../yieldable';
|
|
7
|
+
import { createYieldableReactiveValue, isYieldableReactiveValue, } from '../reactive-read';
|
|
8
|
+
export const validatedFormValueSymbol = Symbol('validatedFormValue');
|
|
9
|
+
function isSource$(value) {
|
|
10
|
+
return (typeof value === 'object' &&
|
|
11
|
+
value !== null &&
|
|
12
|
+
'emit' in value &&
|
|
13
|
+
typeof value.emit === 'function' &&
|
|
14
|
+
'subscribe' in value &&
|
|
15
|
+
typeof value.subscribe === 'function');
|
|
16
|
+
}
|
|
17
|
+
const FORM_INSERTION_METHOD_INVALID_YIELD_ERROR_MESSAGE = 'form insertion method generators can only yield craftService dependencies or exposed dependency helpers.';
|
|
18
|
+
const FORM_INSERTION_METHOD_APP_START_ERROR_MESSAGE = 'form insertion method generators do not support onAppStart(...).';
|
|
19
|
+
function createExposedInsertions(rawInsertionsOutput, injector) {
|
|
20
|
+
return Object.entries(rawInsertionsOutput).reduce((acc, [key, value]) => {
|
|
21
|
+
if (isSource(value))
|
|
22
|
+
return acc;
|
|
23
|
+
if (isSource$(value)) {
|
|
24
|
+
const localSource = value;
|
|
25
|
+
const sourceInjector = ɵcreateHostTaggedInjector(injector, `source:${key}`);
|
|
26
|
+
acc[key] = createYieldableInsertionMethod((payload) => localSource.emit(payload), {
|
|
27
|
+
injector: sourceInjector,
|
|
28
|
+
invalidYieldErrorMessage: FORM_INSERTION_METHOD_INVALID_YIELD_ERROR_MESSAGE,
|
|
29
|
+
multipleAppStartErrorMessage: FORM_INSERTION_METHOD_APP_START_ERROR_MESSAGE,
|
|
30
|
+
onAppStartNotSupportedErrorMessage: FORM_INSERTION_METHOD_APP_START_ERROR_MESSAGE,
|
|
31
|
+
});
|
|
32
|
+
return acc;
|
|
33
|
+
}
|
|
34
|
+
if (typeof value === 'function' &&
|
|
35
|
+
!isSignal(value) &&
|
|
36
|
+
!isYieldableReactiveValue(value) &&
|
|
37
|
+
!isNonYieldableInsertionMethod(value)) {
|
|
38
|
+
const methodInjector = ɵcreateHostTaggedInjector(injector, `method:${key}`);
|
|
39
|
+
const wrappedFn = runInInjectionContext(injector, () => injectFnWrapper()(value));
|
|
40
|
+
acc[key] = createYieldableInsertionMethod(wrappedFn, {
|
|
41
|
+
injector: methodInjector,
|
|
42
|
+
invalidYieldErrorMessage: FORM_INSERTION_METHOD_INVALID_YIELD_ERROR_MESSAGE,
|
|
43
|
+
multipleAppStartErrorMessage: FORM_INSERTION_METHOD_APP_START_ERROR_MESSAGE,
|
|
44
|
+
onAppStartNotSupportedErrorMessage: FORM_INSERTION_METHOD_APP_START_ERROR_MESSAGE,
|
|
45
|
+
});
|
|
46
|
+
return acc;
|
|
47
|
+
}
|
|
48
|
+
acc[key] = value;
|
|
49
|
+
return acc;
|
|
50
|
+
}, {});
|
|
51
|
+
}
|
|
52
|
+
function toExceptionInsertionName(name) {
|
|
53
|
+
return `${name.charAt(0).toLowerCase()}${name.slice(1)}`;
|
|
54
|
+
}
|
|
55
|
+
function toExceptionRecord(value) {
|
|
56
|
+
return typeof value === 'object' && value !== null
|
|
57
|
+
? value
|
|
58
|
+
: {};
|
|
59
|
+
}
|
|
60
|
+
export function createFormExceptions(rawInsertionsOutput, exposedInsertionsOutput) {
|
|
61
|
+
const directHasExceptions = isSignal(exposedInsertionsOutput['hasExceptions'])
|
|
62
|
+
? exposedInsertionsOutput['hasExceptions']
|
|
63
|
+
: undefined;
|
|
64
|
+
const directExceptions = isSignal(exposedInsertionsOutput['exceptions'])
|
|
65
|
+
? exposedInsertionsOutput['exceptions']
|
|
66
|
+
: undefined;
|
|
67
|
+
const exceptionInsertions = Object.entries(exposedInsertionsOutput).flatMap(([key, value]) => {
|
|
68
|
+
const match = /^has(.+)Exceptions$/.exec(key);
|
|
69
|
+
if (!match || typeof value !== 'function')
|
|
70
|
+
return [];
|
|
71
|
+
const insertionName = toExceptionInsertionName(match[1]);
|
|
72
|
+
const exceptionsKey = `${insertionName}Exceptions`;
|
|
73
|
+
const exceptionSignal = exposedInsertionsOutput[exceptionsKey];
|
|
74
|
+
if (typeof exceptionSignal !== 'function')
|
|
75
|
+
return [];
|
|
76
|
+
return [
|
|
77
|
+
{
|
|
78
|
+
insertionName,
|
|
79
|
+
hasExceptionSignal: value,
|
|
80
|
+
exceptionSignal: exceptionSignal,
|
|
81
|
+
},
|
|
82
|
+
];
|
|
83
|
+
});
|
|
84
|
+
if (exceptionInsertions.length === 0 &&
|
|
85
|
+
!directHasExceptions &&
|
|
86
|
+
!directExceptions) {
|
|
87
|
+
return {};
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
hasExceptions: computed(() => (directHasExceptions?.() ?? false) ||
|
|
91
|
+
exceptionInsertions.some(({ hasExceptionSignal }) => hasExceptionSignal())),
|
|
92
|
+
exceptions: computed(() => exceptionInsertions.reduce((acc, { insertionName, exceptionSignal }) => {
|
|
93
|
+
acc[insertionName] = exceptionSignal();
|
|
94
|
+
return acc;
|
|
95
|
+
}, {
|
|
96
|
+
...toExceptionRecord(directExceptions?.()),
|
|
97
|
+
})),
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
export function createSubmissionController() {
|
|
101
|
+
const attempted = signal(false);
|
|
102
|
+
const submitting = signal(false);
|
|
103
|
+
return {
|
|
104
|
+
hasAttemptedSubmit: attempted.asReadonly(),
|
|
105
|
+
submitting: submitting.asReadonly(),
|
|
106
|
+
setAttemptedSubmit: () => attempted.set(true),
|
|
107
|
+
setSubmitting: (next) => {
|
|
108
|
+
if (next)
|
|
109
|
+
attempted.set(true);
|
|
110
|
+
submitting.set(next);
|
|
111
|
+
},
|
|
112
|
+
reset: () => {
|
|
113
|
+
attempted.set(false);
|
|
114
|
+
submitting.set(false);
|
|
115
|
+
},
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Wrap a CraftFieldTree with extra properties (insertion outputs, exception
|
|
120
|
+
* aggregates, submission state) so the merged object behaves like a
|
|
121
|
+
* `FormWithInsertions`. Used by sub-form builders.
|
|
122
|
+
*/
|
|
123
|
+
export function wrapSubFieldWithExtras(subField, extras) {
|
|
124
|
+
return new Proxy(subField, {
|
|
125
|
+
get(_target, prop, receiver) {
|
|
126
|
+
if (typeof prop === 'string' && prop in extras)
|
|
127
|
+
return extras[prop];
|
|
128
|
+
return Reflect.get(subField, prop, receiver);
|
|
129
|
+
},
|
|
130
|
+
has(_target, prop) {
|
|
131
|
+
if (typeof prop === 'string' && prop in extras)
|
|
132
|
+
return true;
|
|
133
|
+
return prop in subField;
|
|
134
|
+
},
|
|
135
|
+
ownKeys() {
|
|
136
|
+
return [
|
|
137
|
+
...new Set([
|
|
138
|
+
...Reflect.ownKeys(subField),
|
|
139
|
+
...Object.keys(extras),
|
|
140
|
+
]),
|
|
141
|
+
];
|
|
142
|
+
},
|
|
143
|
+
getOwnPropertyDescriptor(_target, prop) {
|
|
144
|
+
if (typeof prop === 'string' && prop in extras) {
|
|
145
|
+
return {
|
|
146
|
+
enumerable: true,
|
|
147
|
+
configurable: true,
|
|
148
|
+
value: extras[prop],
|
|
149
|
+
writable: false,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
return Object.getOwnPropertyDescriptor(subField, prop);
|
|
153
|
+
},
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Build a fully-decorated sub-form (field tree + insertion outputs + exception
|
|
158
|
+
* aggregates) from a sub-field plus a state read/write pair. Used by both
|
|
159
|
+
* `insertSelectFormTree` (structural sub-fields) and `insertSubFormField`
|
|
160
|
+
* (derived sub-fields).
|
|
161
|
+
*/
|
|
162
|
+
export function buildSubForm(options) {
|
|
163
|
+
const stateSignal = computed(() => options.subState());
|
|
164
|
+
const subContext = {
|
|
165
|
+
state: stateSignal,
|
|
166
|
+
set: (next) => {
|
|
167
|
+
options.setSub(next);
|
|
168
|
+
return yieldableInvocation(next);
|
|
169
|
+
},
|
|
170
|
+
update: (fn) => {
|
|
171
|
+
const next = fn(options.subState());
|
|
172
|
+
options.setSub(next);
|
|
173
|
+
return yieldableInvocation(next);
|
|
174
|
+
},
|
|
175
|
+
patch: (fn) => {
|
|
176
|
+
const curr = options.subState();
|
|
177
|
+
const partial = fn(curr);
|
|
178
|
+
const next = curr && typeof curr === 'object' && !Array.isArray(curr)
|
|
179
|
+
? { ...curr, ...partial }
|
|
180
|
+
: partial;
|
|
181
|
+
options.setSub(next);
|
|
182
|
+
return yieldableInvocation(next);
|
|
183
|
+
},
|
|
184
|
+
insertions: (options.parentContext.insertions ?? {}),
|
|
185
|
+
};
|
|
186
|
+
const { rawInsertionsOutput, exposedInsertionsOutput } = executeFormInsertions(options.insertions, {
|
|
187
|
+
field: options.subField,
|
|
188
|
+
state: stateSignal,
|
|
189
|
+
submission: {
|
|
190
|
+
hasAttemptedSubmit: options.parentContext.hasAttemptedSubmit,
|
|
191
|
+
submitting: options.parentContext.submitting,
|
|
192
|
+
setAttemptedSubmit: options.parentContext.setAttemptedSubmit,
|
|
193
|
+
setSubmitting: options.parentContext.setSubmitting,
|
|
194
|
+
reset: () => {
|
|
195
|
+
/* parent owns reset */
|
|
196
|
+
},
|
|
197
|
+
},
|
|
198
|
+
set: subContext.set,
|
|
199
|
+
update: subContext.update,
|
|
200
|
+
patch: subContext.patch,
|
|
201
|
+
inheritedInsertions: subContext.insertions,
|
|
202
|
+
injector: options.injector,
|
|
203
|
+
formIdentifier: options.parentContext.formIdentifier,
|
|
204
|
+
});
|
|
205
|
+
const formExceptions = createFormExceptions(rawInsertionsOutput, exposedInsertionsOutput);
|
|
206
|
+
return wrapSubFieldWithExtras(options.subField, {
|
|
207
|
+
...exposedInsertionsOutput,
|
|
208
|
+
...formExceptions,
|
|
209
|
+
hasAttemptedSubmit: options.parentContext.hasAttemptedSubmit,
|
|
210
|
+
submitting: options.parentContext.submitting,
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
export function executeFormInsertions(formInsertions, options) {
|
|
214
|
+
const validatedFormValue = computed(() => {
|
|
215
|
+
const fieldRoot = options.field;
|
|
216
|
+
if (!fieldRoot.valid())
|
|
217
|
+
return undefined;
|
|
218
|
+
const value = fieldRoot.value();
|
|
219
|
+
if (value && typeof value === 'object') {
|
|
220
|
+
return Object.assign(value, {
|
|
221
|
+
[validatedFormValueSymbol]: true,
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
return value;
|
|
225
|
+
});
|
|
226
|
+
const FORM_INSERTION_INVALID_YIELD_ERROR_MESSAGE = 'insertSelectFormTree generators can only yield craftService dependencies or exposed dependency helpers.';
|
|
227
|
+
const FORM_INSERTION_APP_START_ERROR_MESSAGE = 'insertSelectFormTree generators do not support onAppStart(...).';
|
|
228
|
+
return formInsertions.reduce((acc, insertion) => {
|
|
229
|
+
const wrappedInsertion = runInInjectionContext(options.injector, () => injectFnWrapper()(insertion));
|
|
230
|
+
const insertionCallResult = runInInjectionContext(options.injector, () => wrappedInsertion({
|
|
231
|
+
state: createYieldableReactiveValue(options.state, 'state', {
|
|
232
|
+
primitive: 'form',
|
|
233
|
+
path: 'form.state',
|
|
234
|
+
}),
|
|
235
|
+
set: options.set,
|
|
236
|
+
update: options.update,
|
|
237
|
+
patch: options.patch,
|
|
238
|
+
field: options.field,
|
|
239
|
+
hasAttemptedSubmit: options.submission.hasAttemptedSubmit,
|
|
240
|
+
submitting: options.submission.submitting,
|
|
241
|
+
validatedFormValue,
|
|
242
|
+
setAttemptedSubmit: options.submission.setAttemptedSubmit,
|
|
243
|
+
setSubmitting: options.submission.setSubmitting,
|
|
244
|
+
formIdentifier: options.formIdentifier,
|
|
245
|
+
insertions: {
|
|
246
|
+
...options.inheritedInsertions,
|
|
247
|
+
...acc.exposedInsertionsOutput,
|
|
248
|
+
},
|
|
249
|
+
}));
|
|
250
|
+
const nextRawInsertions = (isGenerator(insertionCallResult)
|
|
251
|
+
? runInInjectionContext(options.injector, () => runCraftGenerator({
|
|
252
|
+
iterator: insertionCallResult,
|
|
253
|
+
injector: options.injector,
|
|
254
|
+
hostScope: 'function',
|
|
255
|
+
invalidYieldErrorMessage: FORM_INSERTION_INVALID_YIELD_ERROR_MESSAGE,
|
|
256
|
+
multipleAppStartErrorMessage: FORM_INSERTION_APP_START_ERROR_MESSAGE,
|
|
257
|
+
onAppStartNotSupportedErrorMessage: FORM_INSERTION_APP_START_ERROR_MESSAGE,
|
|
258
|
+
}).value)
|
|
259
|
+
: insertionCallResult);
|
|
260
|
+
const nextExposedInsertions = createExposedInsertions(nextRawInsertions, options.injector);
|
|
261
|
+
return {
|
|
262
|
+
rawInsertionsOutput: {
|
|
263
|
+
...acc.rawInsertionsOutput,
|
|
264
|
+
...nextRawInsertions,
|
|
265
|
+
},
|
|
266
|
+
exposedInsertionsOutput: {
|
|
267
|
+
...acc.exposedInsertionsOutput,
|
|
268
|
+
...nextExposedInsertions,
|
|
269
|
+
},
|
|
270
|
+
};
|
|
271
|
+
}, {
|
|
272
|
+
rawInsertionsOutput: {},
|
|
273
|
+
exposedInsertionsOutput: {},
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
//# sourceMappingURL=insert-form-internals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insert-form-internals.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/form/insert-form-internals.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n computed,\n Injector,\n isSignal,\n runInInjectionContext,\n signal,\n Signal,\n} from '../host/craft-compat';\nimport { isGenerator, runCraftGenerator } from '../craft-generator-runtime';\nimport { injectFnWrapper } from '../fn-wrapper';\nimport { ɵcreateHostTaggedInjector } from '../craft-service';\nimport type { InsertionStateFactoryContext } from '../query.core';\nimport { Source$ as SourceDollarType } from '../source$';\nimport { MergeObject } from '../util/types/util.type';\nimport { FilterSource, IsEmptyObject } from '../util/util.type';\nimport { isSource } from '../util/util';\nimport { CraftField, CraftFieldTree } from './craft-field';\nimport {\n createYieldableInsertionMethod,\n isNonYieldableInsertionMethod,\n yieldableInvocation,\n type NonYieldableInsertionMethod,\n type YieldableInsertionMethods,\n} from '../yieldable';\nimport type { YieldableInsertionWrite } from '../query.core';\nimport {\n createYieldableReactiveValue,\n isYieldableReactiveValue,\n} from '../reactive-read';\nimport {\n type CraftFieldExceptionSourceCarrier,\n type CraftFieldValidationCasesCarrier,\n type FieldValidationCasesFromInsertions,\n} from './field-exception';\n\ntype Source$Method<SourceType> = [SourceType] extends [void]\n ? () => Generator<never, void, unknown>\n : (value: SourceType) => Generator<never, void, unknown>;\n\ntype RawExposedFormInsertions<Insertions> = YieldableInsertionMethods<\n MergeObject<\n IsEmptyObject<Insertions> extends true ? {} : FilterSource<Insertions>,\n {\n [K in keyof FilterSource<Insertions> as FilterSource<Insertions>[K] extends SourceDollarType<any>\n ? K\n : never]: FilterSource<Insertions>[K] extends SourceDollarType<\n infer SourceType\n >\n ? Source$Method<SourceType>\n : never;\n }\n >\n>;\n\ntype JoinFieldPath<\n Prefix extends string,\n Path extends string,\n> = Prefix extends ''\n ? Path\n : Path extends '[]'\n ? `${Prefix}[]`\n : `${Prefix}.${Path}`;\n\ntype PrefixSelectedFormPath<Result, Prefix extends string> =\n Result extends FormWithInsertions<\n infer Model,\n infer Insertions,\n infer Path extends string\n >\n ? FormWithInsertions<Model, Insertions, JoinFieldPath<Prefix, Path>>\n : Result;\n\ntype PrefixSelectedFormMethod<Value, Prefix extends string> =\n Value extends NonYieldableInsertionMethod<infer Args, infer Result>\n ? NonYieldableInsertionMethod<Args, PrefixSelectedFormPath<Result, Prefix>>\n : Value;\n\ntype ExposedFormInsertions<Insertions, Path extends string = ''> = {\n [Key in keyof RawExposedFormInsertions<Insertions>]: PrefixSelectedFormMethod<\n RawExposedFormInsertions<Insertions>[Key],\n Path\n >;\n};\n\ntype FormExceptionSignal<\n Insertions,\n ExceptionName extends string,\n> = `${Uncapitalize<ExceptionName>}Exceptions` extends keyof ExposedFormInsertions<Insertions>\n ? ExposedFormInsertions<Insertions>[`${Uncapitalize<ExceptionName>}Exceptions`] extends Signal<\n infer Exceptions\n >\n ? Exceptions\n : never\n : never;\n\ntype HasFormExceptionSignalPair<\n Insertions,\n ExceptionName extends string,\n HasExceptionKey extends keyof ExposedFormInsertions<Insertions>,\n> =\n ExposedFormInsertions<Insertions>[HasExceptionKey] extends Signal<boolean>\n ? `${Uncapitalize<ExceptionName>}Exceptions` extends keyof ExposedFormInsertions<Insertions>\n ? ExposedFormInsertions<Insertions>[`${Uncapitalize<ExceptionName>}Exceptions`] extends Signal<unknown>\n ? true\n : false\n : false\n : false;\n\ntype FormExceptionMap<Insertions> = {\n [K in keyof ExposedFormInsertions<Insertions> as K extends string\n ? K extends `has${infer Name}Exceptions`\n ? HasFormExceptionSignalPair<Insertions, Name, K> extends true\n ? Uncapitalize<Name>\n : never\n : never\n : never]: K extends `has${infer Name}Exceptions`\n ? FormExceptionSignal<Insertions, Name>\n : never;\n};\n\ntype FormExceptionsInsertion<Insertions> =\n keyof FormExceptionMap<Insertions> extends never\n ? {}\n : {\n hasExceptions: Signal<boolean>;\n exceptions: Signal<FormExceptionMap<Insertions>>;\n };\n\n/**\n * The full type of a craft form, exposed by `insertForm`.\n *\n * It is a `CraftFieldTree<Model>` (with sub-field navigation) merged with all the\n * insertion outputs (e.g. submit, exceptions, validators) and aggregated exception signals.\n */\nexport type FormWithInsertions<\n Model,\n Insertions,\n Path extends string = '',\n> = CraftFieldTree<Model> &\n ExposedFormInsertions<Insertions, Path> &\n CraftFieldValidationCasesCarrier<\n FieldValidationCasesFromInsertions<Insertions, Path>\n > &\n CraftFieldExceptionSourceCarrier & {\n hasAttemptedSubmit: Signal<boolean>;\n submitting: Signal<boolean>;\n validatedFormValue: Signal<ValidatedFormValue<Model>>;\n } & FormExceptionsInsertion<Insertions>;\n\nexport type InsertionFormFactoryContext<\n StateType,\n PreviousInsertionsOutputs,\n FormIdentifier extends string | number | unknown,\n> = InsertionStateFactoryContext<StateType, PreviousInsertionsOutputs> & {\n field: CraftFieldTree<StateType>;\n hasAttemptedSubmit: Signal<boolean>;\n submitting: Signal<boolean>;\n validatedFormValue: Signal<ValidatedFormValue<StateType>>;\n setAttemptedSubmit: () => void;\n setSubmitting: (submitting: boolean) => void;\n formIdentifier: FormIdentifier;\n};\n\nexport type InsertionsFormFactory<\n State,\n FormIdentifier extends string | number | unknown,\n InsertionsOutputs,\n PreviousInsertionsOutputs = {},\n Yielded = never,\n> = (\n context: InsertionFormFactoryContext<\n State,\n PreviousInsertionsOutputs,\n FormIdentifier\n >,\n) => InsertionsOutputs | Generator<Yielded, InsertionsOutputs, unknown>;\n\nexport const validatedFormValueSymbol = Symbol('validatedFormValue');\nexport type ValidatedFormValue<FormValue> =\n | (FormValue & {\n [validatedFormValueSymbol]: true;\n })\n | undefined;\n\nfunction isSource$(value: unknown): value is SourceDollarType<unknown> {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'emit' in value &&\n typeof (value as SourceDollarType<unknown>).emit === 'function' &&\n 'subscribe' in value &&\n typeof (value as SourceDollarType<unknown>).subscribe === 'function'\n );\n}\n\nconst FORM_INSERTION_METHOD_INVALID_YIELD_ERROR_MESSAGE =\n 'form insertion method generators can only yield craftService dependencies or exposed dependency helpers.';\nconst FORM_INSERTION_METHOD_APP_START_ERROR_MESSAGE =\n 'form insertion method generators do not support onAppStart(...).';\n\nfunction createExposedInsertions(\n rawInsertionsOutput: Record<string, unknown>,\n injector: Injector,\n): Record<string, unknown> {\n return Object.entries(rawInsertionsOutput).reduce(\n (acc, [key, value]) => {\n if (isSource(value)) return acc;\n if (isSource$(value)) {\n const localSource = value;\n const sourceInjector = ɵcreateHostTaggedInjector(\n injector,\n `source:${key}`,\n );\n acc[key] = createYieldableInsertionMethod(\n (payload: unknown) => localSource.emit(payload as never),\n {\n injector: sourceInjector,\n invalidYieldErrorMessage:\n FORM_INSERTION_METHOD_INVALID_YIELD_ERROR_MESSAGE,\n multipleAppStartErrorMessage:\n FORM_INSERTION_METHOD_APP_START_ERROR_MESSAGE,\n onAppStartNotSupportedErrorMessage:\n FORM_INSERTION_METHOD_APP_START_ERROR_MESSAGE,\n },\n );\n return acc;\n }\n if (\n typeof value === 'function' &&\n !isSignal(value) &&\n !isYieldableReactiveValue(value) &&\n !isNonYieldableInsertionMethod(value)\n ) {\n const methodInjector = ɵcreateHostTaggedInjector(\n injector,\n `method:${key}`,\n );\n const wrappedFn = runInInjectionContext(injector, () =>\n injectFnWrapper()(value as (...args: unknown[]) => unknown),\n );\n acc[key] = createYieldableInsertionMethod(wrappedFn, {\n injector: methodInjector,\n invalidYieldErrorMessage:\n FORM_INSERTION_METHOD_INVALID_YIELD_ERROR_MESSAGE,\n multipleAppStartErrorMessage:\n FORM_INSERTION_METHOD_APP_START_ERROR_MESSAGE,\n onAppStartNotSupportedErrorMessage:\n FORM_INSERTION_METHOD_APP_START_ERROR_MESSAGE,\n });\n return acc;\n }\n acc[key] = value;\n return acc;\n },\n {} as Record<string, unknown>,\n );\n}\n\nfunction toExceptionInsertionName(name: string) {\n return `${name.charAt(0).toLowerCase()}${name.slice(1)}`;\n}\n\nfunction toExceptionRecord(value: unknown): Record<string, unknown> {\n return typeof value === 'object' && value !== null\n ? (value as Record<string, unknown>)\n : {};\n}\n\nexport function createFormExceptions(\n rawInsertionsOutput: Record<string, unknown>,\n exposedInsertionsOutput: Record<string, unknown>,\n) {\n const directHasExceptions = isSignal(exposedInsertionsOutput['hasExceptions'])\n ? (exposedInsertionsOutput['hasExceptions'] as Signal<boolean>)\n : undefined;\n const directExceptions = isSignal(exposedInsertionsOutput['exceptions'])\n ? (exposedInsertionsOutput['exceptions'] as Signal<unknown>)\n : undefined;\n\n const exceptionInsertions = Object.entries(exposedInsertionsOutput).flatMap(\n ([key, value]) => {\n const match = /^has(.+)Exceptions$/.exec(key);\n if (!match || typeof value !== 'function') return [];\n\n const insertionName = toExceptionInsertionName(match[1]);\n const exceptionsKey = `${insertionName}Exceptions`;\n const exceptionSignal = exposedInsertionsOutput[exceptionsKey];\n if (typeof exceptionSignal !== 'function') return [];\n\n return [\n {\n insertionName,\n hasExceptionSignal: value as Signal<boolean>,\n exceptionSignal: exceptionSignal as Signal<unknown>,\n },\n ];\n },\n );\n\n if (\n exceptionInsertions.length === 0 &&\n !directHasExceptions &&\n !directExceptions\n ) {\n return {};\n }\n\n return {\n hasExceptions: computed(\n () =>\n (directHasExceptions?.() ?? false) ||\n exceptionInsertions.some(({ hasExceptionSignal }) =>\n hasExceptionSignal(),\n ),\n ),\n exceptions: computed(() =>\n exceptionInsertions.reduce(\n (acc, { insertionName, exceptionSignal }) => {\n acc[insertionName] = exceptionSignal();\n return acc;\n },\n {\n ...toExceptionRecord(directExceptions?.()),\n },\n ),\n ),\n };\n}\n\nexport type SubmissionController = {\n hasAttemptedSubmit: Signal<boolean>;\n submitting: Signal<boolean>;\n setAttemptedSubmit: () => void;\n setSubmitting: (submitting: boolean) => void;\n reset: () => void;\n};\n\nexport function createSubmissionController(): SubmissionController {\n const attempted = signal(false);\n const submitting = signal(false);\n return {\n hasAttemptedSubmit: attempted.asReadonly(),\n submitting: submitting.asReadonly(),\n setAttemptedSubmit: () => attempted.set(true),\n setSubmitting: (next: boolean) => {\n if (next) attempted.set(true);\n submitting.set(next);\n },\n reset: () => {\n attempted.set(false);\n submitting.set(false);\n },\n };\n}\n\n/**\n * Wrap a CraftFieldTree with extra properties (insertion outputs, exception\n * aggregates, submission state) so the merged object behaves like a\n * `FormWithInsertions`. Used by sub-form builders.\n */\nexport function wrapSubFieldWithExtras<T>(\n subField: CraftFieldTree<T>,\n extras: Record<string, unknown>,\n): CraftFieldTree<T> {\n return new Proxy(subField as unknown as object, {\n get(_target, prop, receiver) {\n if (typeof prop === 'string' && prop in extras) return extras[prop];\n return Reflect.get(subField as object, prop, receiver);\n },\n has(_target, prop) {\n if (typeof prop === 'string' && prop in extras) return true;\n return prop in (subField as object);\n },\n ownKeys() {\n return [\n ...new Set([\n ...Reflect.ownKeys(subField as object),\n ...Object.keys(extras),\n ]),\n ];\n },\n getOwnPropertyDescriptor(_target, prop) {\n if (typeof prop === 'string' && prop in extras) {\n return {\n enumerable: true,\n configurable: true,\n value: extras[prop],\n writable: false,\n };\n }\n return Object.getOwnPropertyDescriptor(subField, prop);\n },\n }) as unknown as CraftFieldTree<T>;\n}\n\n/**\n * Build a fully-decorated sub-form (field tree + insertion outputs + exception\n * aggregates) from a sub-field plus a state read/write pair. Used by both\n * `insertSelectFormTree` (structural sub-fields) and `insertSubFormField`\n * (derived sub-fields).\n */\nexport function buildSubForm<Sub>(options: {\n parentContext: InsertionFormFactoryContext<unknown, unknown, unknown>;\n subField: CraftFieldTree<Sub>;\n subState: () => Sub;\n setSub: (next: Sub) => void;\n insertions: InsertionsFormFactory<\n Sub,\n unknown,\n Record<string, unknown>,\n Record<string, unknown>\n >[];\n injector: Injector;\n}): FormWithInsertions<Sub, Record<string, unknown>> {\n const stateSignal = computed(() => options.subState() as Sub);\n\n const subContext = {\n state: stateSignal,\n set: (next: Sub) => {\n options.setSub(next);\n return yieldableInvocation(next);\n },\n update: (fn: (curr: Sub) => Sub) => {\n const next = fn(options.subState());\n options.setSub(next);\n return yieldableInvocation(next);\n },\n patch: (fn: (curr: Sub) => Partial<Sub>) => {\n const curr = options.subState();\n const partial = fn(curr);\n const next =\n curr && typeof curr === 'object' && !Array.isArray(curr)\n ? ({ ...(curr as object), ...partial } as Sub)\n : (partial as Sub);\n options.setSub(next);\n return yieldableInvocation(next);\n },\n insertions: (options.parentContext.insertions ?? {}) as never,\n };\n\n const { rawInsertionsOutput, exposedInsertionsOutput } =\n executeFormInsertions(options.insertions, {\n field: options.subField,\n state: stateSignal,\n submission: {\n hasAttemptedSubmit: options.parentContext.hasAttemptedSubmit,\n submitting: options.parentContext.submitting,\n setAttemptedSubmit: options.parentContext.setAttemptedSubmit,\n setSubmitting: options.parentContext.setSubmitting,\n reset: () => {\n /* parent owns reset */\n },\n },\n set: subContext.set,\n update: subContext.update,\n patch: subContext.patch,\n inheritedInsertions: subContext.insertions as Record<string, unknown>,\n injector: options.injector,\n formIdentifier: options.parentContext.formIdentifier,\n });\n\n const formExceptions = createFormExceptions(\n rawInsertionsOutput,\n exposedInsertionsOutput,\n );\n\n return wrapSubFieldWithExtras(options.subField, {\n ...exposedInsertionsOutput,\n ...formExceptions,\n hasAttemptedSubmit: options.parentContext.hasAttemptedSubmit,\n submitting: options.parentContext.submitting,\n }) as unknown as FormWithInsertions<Sub, Record<string, unknown>>;\n}\n\nexport function executeFormInsertions<Model>(\n formInsertions: InsertionsFormFactory<\n Model,\n unknown,\n Record<string, unknown>,\n Record<string, unknown>\n >[],\n options: {\n field: CraftFieldTree<Model>;\n state: Signal<Model>;\n submission: SubmissionController;\n set: YieldableInsertionWrite<[newState: Model], Model>;\n update: YieldableInsertionWrite<[\n updateFn: (currentState: Model) => Model,\n ], Model>;\n patch: YieldableInsertionWrite<[\n patchFn: (currentState: Model) => Partial<Model>,\n ], Model>;\n inheritedInsertions: Record<string, unknown>;\n injector: Injector;\n formIdentifier: string | number | unknown;\n },\n) {\n const validatedFormValue = computed<ValidatedFormValue<Model>>(() => {\n const fieldRoot = options.field as unknown as CraftField<Model>;\n if (!fieldRoot.valid()) return undefined;\n const value = fieldRoot.value();\n if (value && typeof value === 'object') {\n return Object.assign(value as object, {\n [validatedFormValueSymbol]: true,\n }) as ValidatedFormValue<Model>;\n }\n return value as ValidatedFormValue<Model>;\n });\n\n const FORM_INSERTION_INVALID_YIELD_ERROR_MESSAGE =\n 'insertSelectFormTree generators can only yield craftService dependencies or exposed dependency helpers.';\n const FORM_INSERTION_APP_START_ERROR_MESSAGE =\n 'insertSelectFormTree generators do not support onAppStart(...).';\n\n return formInsertions.reduce(\n (acc, insertion) => {\n const wrappedInsertion = runInInjectionContext(options.injector, () =>\n injectFnWrapper()(insertion),\n );\n const insertionCallResult = runInInjectionContext(options.injector, () =>\n wrappedInsertion({\n state: createYieldableReactiveValue(options.state, 'state', {\n primitive: 'form',\n path: 'form.state',\n }),\n set: options.set,\n update: options.update,\n patch: options.patch,\n field: options.field,\n hasAttemptedSubmit: options.submission.hasAttemptedSubmit,\n submitting: options.submission.submitting,\n validatedFormValue,\n setAttemptedSubmit: options.submission.setAttemptedSubmit,\n setSubmitting: options.submission.setSubmitting,\n formIdentifier: options.formIdentifier!,\n insertions: {\n ...options.inheritedInsertions,\n ...acc.exposedInsertionsOutput,\n },\n }),\n );\n const nextRawInsertions = (\n isGenerator(insertionCallResult)\n ? runInInjectionContext(\n options.injector,\n () =>\n runCraftGenerator({\n iterator: insertionCallResult,\n injector: options.injector,\n hostScope: 'function',\n invalidYieldErrorMessage:\n FORM_INSERTION_INVALID_YIELD_ERROR_MESSAGE,\n multipleAppStartErrorMessage:\n FORM_INSERTION_APP_START_ERROR_MESSAGE,\n onAppStartNotSupportedErrorMessage:\n FORM_INSERTION_APP_START_ERROR_MESSAGE,\n }).value,\n )\n : insertionCallResult\n ) as Record<string, unknown>;\n const nextExposedInsertions = createExposedInsertions(\n nextRawInsertions,\n options.injector,\n );\n\n return {\n rawInsertionsOutput: {\n ...acc.rawInsertionsOutput,\n ...nextRawInsertions,\n },\n exposedInsertionsOutput: {\n ...acc.exposedInsertionsOutput,\n ...nextExposedInsertions,\n },\n };\n },\n {\n rawInsertionsOutput: {} as Record<string, unknown>,\n exposedInsertionsOutput: {} as Record<string, unknown>,\n },\n );\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type Signal } from '../host/craft-compat';
|
|
2
|
+
import { type CraftSchema, type SchemaInput, type SchemaValidationException } from '../schema-validation';
|
|
3
|
+
import type { InsertionsFormFactory } from './insert-form-internals';
|
|
4
|
+
export type FormSchemaInsertionOutputs = {
|
|
5
|
+
hasSchema: Signal<true>;
|
|
6
|
+
hasSchemaExceptions: Signal<boolean>;
|
|
7
|
+
schemaExceptions: Signal<ReadonlyArray<SchemaValidationException>>;
|
|
8
|
+
};
|
|
9
|
+
export declare function insertFormSchema<Schema extends CraftSchema>(schema: Schema): InsertionsFormFactory<SchemaInput<Schema>, unknown, FormSchemaInsertionOutputs, {}>;
|
|
10
|
+
//# sourceMappingURL=insert-form-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insert-form-schema.d.ts","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/form/insert-form-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,yBAAyB,EAC/B,MAAM,sBAAsB,CAAC;AAI9B,OAAO,KAAK,EAEV,qBAAqB,EACtB,MAAM,yBAAyB,CAAC;AAMjC,MAAM,MAAM,0BAA0B,GAAG;IACvC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACrC,gBAAgB,EAAE,MAAM,CAAC,aAAa,CAAC,yBAAyB,CAAC,CAAC,CAAC;CACpE,CAAC;AAuDF,wBAAgB,gBAAgB,CAAC,MAAM,SAAS,WAAW,EACzD,MAAM,EAAE,MAAM,GACb,qBAAqB,CACtB,WAAW,CAAC,MAAM,CAAC,EACnB,OAAO,EACP,0BAA0B,EAC1B,EAAE,CACH,CAuBA"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { computed, inject, Injector } from '../host/craft-compat';
|
|
2
|
+
import { createSchemaValidationException, parseSchema, } from '../schema-validation';
|
|
3
|
+
import { rawReactiveValue } from '../reactive-read';
|
|
4
|
+
import { craftLinkedSignal } from '../host/craft-linked-signal';
|
|
5
|
+
function normalizeIssuePath(path) {
|
|
6
|
+
if (!path)
|
|
7
|
+
return [];
|
|
8
|
+
const normalized = [];
|
|
9
|
+
for (const segment of path) {
|
|
10
|
+
const key = typeof segment === 'object' && segment !== null && 'key' in segment
|
|
11
|
+
? segment.key
|
|
12
|
+
: segment;
|
|
13
|
+
if (typeof key !== 'string' && typeof key !== 'number')
|
|
14
|
+
return [];
|
|
15
|
+
normalized.push(key);
|
|
16
|
+
}
|
|
17
|
+
return normalized;
|
|
18
|
+
}
|
|
19
|
+
function createSchemaErrorEntries(schema, value, context) {
|
|
20
|
+
const parsed = parseSchema(schema, value, {
|
|
21
|
+
primitive: 'form',
|
|
22
|
+
name: 'form',
|
|
23
|
+
stage: 'form',
|
|
24
|
+
operation: 'validate',
|
|
25
|
+
});
|
|
26
|
+
if (parsed instanceof Promise) {
|
|
27
|
+
throw new Error('Form schemas must be synchronous. Use cAsyncValidate or an async resource for asynchronous validation.');
|
|
28
|
+
}
|
|
29
|
+
if (parsed.ok)
|
|
30
|
+
return [];
|
|
31
|
+
return parsed.exception.payload.issues.map((issue) => ({
|
|
32
|
+
path: normalizeIssuePath(issue.path),
|
|
33
|
+
error: createSchemaValidationException({
|
|
34
|
+
issues: [issue],
|
|
35
|
+
value,
|
|
36
|
+
primitive: 'form',
|
|
37
|
+
name: 'form',
|
|
38
|
+
stage: 'form',
|
|
39
|
+
operation: 'validate',
|
|
40
|
+
...(context.formIdentifier === undefined
|
|
41
|
+
? {}
|
|
42
|
+
: { identifier: String(context.formIdentifier) }),
|
|
43
|
+
}),
|
|
44
|
+
}));
|
|
45
|
+
}
|
|
46
|
+
export function insertFormSchema(schema) {
|
|
47
|
+
return (context) => {
|
|
48
|
+
const stateValue = craftLinkedSignal({
|
|
49
|
+
source: () => rawReactiveValue(context.state)(),
|
|
50
|
+
computation: (value) => value,
|
|
51
|
+
injector: inject(Injector),
|
|
52
|
+
});
|
|
53
|
+
const errors = computed(() => createSchemaErrorEntries(schema, stateValue(), context));
|
|
54
|
+
context.field.ɵregisterSchemaErrorSource(errors);
|
|
55
|
+
return {
|
|
56
|
+
hasSchema: computed(() => true),
|
|
57
|
+
hasSchemaExceptions: computed(() => errors().length > 0),
|
|
58
|
+
schemaExceptions: computed(() => errors().map((entry) => entry.error)),
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=insert-form-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insert-form-schema.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/form/insert-form-schema.ts"],"names":[],"mappings":"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","sourcesContent":["import { computed, inject, Injector, type Signal } from '../host/craft-compat';\nimport {\n createSchemaValidationException,\n parseSchema,\n type CraftSchema,\n type SchemaInput,\n type SchemaValidationException,\n} from '../schema-validation';\nimport type { StandardSchemaV1PathSegment } from '../standard-schema';\nimport { rawReactiveValue } from '../reactive-read';\nimport { craftLinkedSignal } from '../host/craft-linked-signal';\nimport type {\n InsertionFormFactoryContext,\n InsertionsFormFactory,\n} from './insert-form-internals';\nimport type {\n CraftFieldSchemaErrorEntry,\n CraftFieldSchemaErrorSource,\n} from './craft-field';\n\nexport type FormSchemaInsertionOutputs = {\n hasSchema: Signal<true>;\n hasSchemaExceptions: Signal<boolean>;\n schemaExceptions: Signal<ReadonlyArray<SchemaValidationException>>;\n};\n\nfunction normalizeIssuePath(\n path: ReadonlyArray<PropertyKey | StandardSchemaV1PathSegment> | undefined,\n): ReadonlyArray<string | number> {\n if (!path) return [];\n\n const normalized: Array<string | number> = [];\n for (const segment of path) {\n const key =\n typeof segment === 'object' && segment !== null && 'key' in segment\n ? segment.key\n : segment;\n if (typeof key !== 'string' && typeof key !== 'number') return [];\n normalized.push(key);\n }\n return normalized;\n}\n\nfunction createSchemaErrorEntries<Schema extends CraftSchema>(\n schema: Schema,\n value: SchemaInput<Schema>,\n context: InsertionFormFactoryContext<SchemaInput<Schema>, {}, unknown>,\n): ReadonlyArray<CraftFieldSchemaErrorEntry> {\n const parsed = parseSchema<unknown>(schema, value, {\n primitive: 'form',\n name: 'form',\n stage: 'form',\n operation: 'validate',\n });\n\n if (parsed instanceof Promise) {\n throw new Error(\n 'Form schemas must be synchronous. Use cAsyncValidate or an async resource for asynchronous validation.',\n );\n }\n\n if (parsed.ok) return [];\n\n return parsed.exception.payload.issues.map((issue) => ({\n path: normalizeIssuePath(issue.path),\n error: createSchemaValidationException({\n issues: [issue],\n value,\n primitive: 'form',\n name: 'form',\n stage: 'form',\n operation: 'validate',\n ...(context.formIdentifier === undefined\n ? {}\n : { identifier: String(context.formIdentifier) }),\n }),\n }));\n}\n\nexport function insertFormSchema<Schema extends CraftSchema>(\n schema: Schema,\n): InsertionsFormFactory<\n SchemaInput<Schema>,\n unknown,\n FormSchemaInsertionOutputs,\n {}\n> {\n return (\n context: InsertionFormFactoryContext<SchemaInput<Schema>, {}, unknown>,\n ) => {\n const stateValue = craftLinkedSignal({\n source: () => rawReactiveValue(context.state)(),\n computation: (value) => value,\n injector: inject(Injector),\n });\n const errors = computed(() =>\n createSchemaErrorEntries(schema, stateValue(), context),\n ) as CraftFieldSchemaErrorSource;\n\n context.field.ɵregisterSchemaErrorSource(errors);\n\n return {\n hasSchema: computed(() => true as const),\n hasSchemaExceptions: computed(() => errors().length > 0),\n schemaExceptions: computed(() =>\n errors().map((entry) => entry.error as SchemaValidationException),\n ),\n };\n };\n}\n"]}
|