@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":"craft-field.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/form/craft-field.ts"],"names":[],"mappings":"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","sourcesContent":["import { computed, isSignal, signal, Signal, WritableSignal } from '../host/craft-compat';\nimport type { AnyCraftException } from '../craft-exception';\n\nexport type CraftFieldError = AnyCraftException;\n\nexport type CraftFieldSchemaErrorEntry = {\n readonly path: ReadonlyArray<string | number>;\n readonly error: CraftFieldError;\n};\n\nexport type CraftFieldSchemaErrorSource = Signal<\n ReadonlyArray<CraftFieldSchemaErrorEntry>\n>;\n\nexport type FieldAttributeMeta =\n | { kind: 'native-constraint'; target: 'min'; value: number | Date | undefined }\n | { kind: 'native-constraint'; target: 'max'; value: number | Date | undefined }\n | { kind: 'native-constraint'; target: 'minLength'; value: number | undefined }\n | { kind: 'native-constraint'; target: 'maxLength'; value: number | undefined }\n | { kind: 'native-constraint'; target: 'pattern'; value: RegExp | undefined }\n | { kind: 'native-constraint'; target: 'required'; value: boolean };\n\nexport type CraftValidatorPending = { pending: true };\nexport type CraftValidatorOutput =\n | undefined\n | CraftFieldError\n | ReadonlyArray<CraftFieldError>\n | CraftValidatorPending;\n\nexport type CraftValidatorContext<T> = {\n value: Signal<T>;\n field: CraftField<T>;\n identifier: unknown;\n};\n\nexport type CraftValidator<T = unknown> = (\n context: CraftValidatorContext<T>,\n) => {\n result: Signal<CraftValidatorOutput>;\n attribute?: Signal<FieldAttributeMeta | undefined>;\n};\n\nexport interface ControlSyncer<T> {\n /** Called when the model value changes. Implementation pushes value to DOM/component. */\n writeValue(next: T): void;\n /** Called on reset to force re-sync to DOM (even if model value did not change). */\n resync?(): void;\n /** Cleanup. */\n destroy?(): void;\n}\n\nexport interface CraftValueControl<T> {\n value: { (): T; set: (next: T) => void };\n}\n\nexport interface CraftCheckboxControl {\n checked: { (): boolean; set: (next: boolean) => void };\n}\n\nexport type FieldStateBindingKind = 'hidden' | 'disabled' | 'readonly';\n\ntype FieldRootBackingStore<T> = {\n read: () => T;\n set: (next: T) => void;\n asReadonly: () => Signal<T>;\n};\n\ntype ParentLink<TParent, T> = {\n parent: CraftFieldInternals<TParent>;\n segment: string | number;\n read: (parent: TParent) => T;\n write: (parent: TParent, next: T) => TParent;\n};\n\ntype CraftFieldInternals<T> = CraftField<T> & {\n __raw: () => T;\n __setRaw: (next: T) => void;\n __children: Map<string | number, CraftFieldInternals<unknown>>;\n __resetTriggerCount: WritableSignal<number>;\n __propagateDirty: (dirty: boolean) => void;\n __propagateTouched: (touched: boolean) => void;\n __resetCascade: () => void;\n __bumpRevision: () => void;\n __schemaErrorSources: CraftFieldSchemaErrorSource[];\n __schemaErrorRevision: WritableSignal<number>;\n};\n\nexport type CraftField<T> = {\n // Read\n value: Signal<T>;\n\n // Write\n set(next: T): void;\n patch(fn: (current: T) => Partial<T>): void;\n reset(initialValue?: T): void;\n\n // Status\n dirty: Signal<boolean>;\n touched: Signal<boolean>;\n hidden: Signal<boolean>;\n disabled: Signal<boolean>;\n readonly: Signal<boolean>;\n pending: Signal<boolean>;\n invalid: Signal<boolean>;\n valid: Signal<boolean>;\n errors: Signal<ReadonlyArray<CraftFieldError>>;\n\n // Native constraints\n required: Signal<boolean>;\n min: Signal<number | Date | undefined>;\n max: Signal<number | Date | undefined>;\n minLength: Signal<number | undefined>;\n maxLength: Signal<number | undefined>;\n pattern: Signal<RegExp | undefined>;\n disabledReasons: Signal<ReadonlyArray<string>>;\n\n // Internal — used by the directive and insertions\n ɵregisterControl(syncer: ControlSyncer<T>): () => void;\n ɵmarkTouched(): void;\n ɵmarkUntouched(): void;\n ɵmarkDirty(): void;\n ɵmarkPristine(): void;\n ɵregisterValidator(validator: CraftValidator<T>, identifier?: unknown): () => void;\n ɵregisterSchemaErrorSource(source: CraftFieldSchemaErrorSource): () => void;\n ɵregisterStateBinding(kind: FieldStateBindingKind, source: Signal<boolean>): () => void;\n ɵregisterDisabledReason(source: Signal<string | undefined>): () => void;\n ɵresetTrigger: Signal<number>;\n ɵpath: ReadonlyArray<string | number>;\n};\n\nexport type CraftFieldTree<T> = CraftField<T> &\n ([T] extends [ReadonlyArray<infer Item>]\n ? { item(index: number): CraftFieldTree<Item>; length: Signal<number> }\n : T extends Record<string, unknown>\n ? { [K in keyof T]-?: CraftFieldTree<T[K]> }\n : object);\n\n/** Returns whether a value exposes the public Craft field contract. */\nexport function isCraftField(value: unknown): value is CraftField<unknown> {\n if (typeof value !== 'object' || value === null) return false;\n const candidate = value as Partial<CraftField<unknown>>;\n return (\n typeof candidate.value === 'function' &&\n typeof candidate.set === 'function' &&\n typeof candidate.ɵregisterControl === 'function'\n );\n}\n\nconst FIELD_INTERNALS_TOKEN = Symbol('CraftFieldInternals');\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (value === null || typeof value !== 'object') return false;\n const proto = Object.getPrototypeOf(value);\n return proto === null || proto === Object.prototype;\n}\n\nfunction readAtSegment(parent: unknown, segment: string | number): unknown {\n if (parent == null) return undefined;\n return (parent as Record<string | number, unknown>)[segment];\n}\n\nfunction writeAtSegment<TParent>(parent: TParent, segment: string | number, value: unknown): TParent {\n if (Array.isArray(parent)) {\n const next = parent.slice();\n (next as unknown[])[segment as number] = value;\n return next as unknown as TParent;\n }\n if (isPlainObject(parent)) {\n return { ...parent, [segment]: value } as unknown as TParent;\n }\n return parent;\n}\n\nfunction pathsEqual(\n left: ReadonlyArray<string | number>,\n right: ReadonlyArray<string | number>,\n): boolean {\n return (\n left.length === right.length &&\n left.every((segment, index) => segment === right[index])\n );\n}\n\nfunction createCraftFieldInternals<T>(\n options:\n | { kind: 'root'; backing: FieldRootBackingStore<T>; path: ReadonlyArray<string | number> }\n | { kind: 'child'; link: ParentLink<unknown, T>; path: ReadonlyArray<string | number> },\n): CraftFieldInternals<T> {\n const path = options.path;\n\n const schemaErrorSources =\n options.kind === 'root'\n ? []\n : options.link.parent.__schemaErrorSources;\n const schemaErrorRevision =\n options.kind === 'root'\n ? signal(0)\n : options.link.parent.__schemaErrorRevision;\n\n // ---------- Value adapter ----------\n const readRaw = (): T => {\n if (options.kind === 'root') return options.backing.read();\n return options.link.read(options.link.parent.__raw());\n };\n\n const setRaw = (next: T): void => {\n if (options.kind === 'root') {\n options.backing.set(next);\n return;\n }\n const parent = options.link.parent;\n const nextParent = options.link.write(parent.__raw(), next);\n parent.__setRaw(nextParent);\n };\n\n const valueSignal: Signal<T> =\n options.kind === 'root'\n ? options.backing.asReadonly()\n : computed<T>(() => options.link.read(options.link.parent.value()));\n\n // ---------- Dirty / Touched ----------\n const localDirty = signal(false);\n const localTouched = signal(false);\n const childDirty = signal(false);\n const childTouched = signal(false);\n\n const dirty = computed(() => localDirty() || childDirty());\n const touched = computed(() => localTouched() || childTouched());\n\n const recomputeChildDirty = () => {\n let any = false;\n for (const child of children.values()) {\n if (child.dirty()) {\n any = true;\n break;\n }\n }\n childDirty.set(any);\n };\n const recomputeChildTouched = () => {\n let any = false;\n for (const child of children.values()) {\n if (child.touched()) {\n any = true;\n break;\n }\n }\n childTouched.set(any);\n };\n\n // ---------- State sources (hidden / disabled / readonly) ----------\n // Plain mutable arrays + a single revision signal so that registration\n // (which can happen lazily during template render) does not write to a\n // tracked signal — Angular forbids signal writes during render (NG0600).\n // The first read of any computed below captures whatever has been registered\n // so far, and subsequent reads track the inner source signals individually.\n const hiddenSources: Signal<boolean>[] = [];\n const disabledSources: Signal<boolean>[] = [];\n const readonlySources: Signal<boolean>[] = [];\n const registrationRevision = signal(0);\n\n const hiddenLocal = computed(() => {\n registrationRevision();\n return hiddenSources.some((src) => src());\n });\n const disabledLocal = computed(() => {\n registrationRevision();\n return disabledSources.some((src) => src());\n });\n const readonlyLocal = computed(() => {\n registrationRevision();\n return readonlySources.some((src) => src());\n });\n\n // ---------- Validators ----------\n type RegisteredValidator = {\n result: Signal<CraftValidatorOutput>;\n attribute?: Signal<FieldAttributeMeta | undefined>;\n };\n const validators: RegisteredValidator[] = [];\n\n const schemaErrors = computed<ReadonlyArray<CraftFieldError>>(() => {\n schemaErrorRevision();\n if (hiddenLocal() || disabledLocal() || readonlyLocal()) return [];\n return schemaErrorSources\n .flatMap((source) => source())\n .filter((entry) => pathsEqual(entry.path, path))\n .map((entry) => entry.error);\n });\n\n const validatorOutputs = computed(() => {\n registrationRevision();\n return validators.map((v) => ({\n result: v.result(),\n attribute: v.attribute?.(),\n }));\n });\n\n const errors = computed<ReadonlyArray<CraftFieldError>>(() => {\n // Track revision so newly-registered children/validators invalidate this\n // computed at the next tick.\n registrationRevision();\n if (hiddenLocal() || disabledLocal() || readonlyLocal()) return [];\n const list: CraftFieldError[] = [];\n for (const out of validatorOutputs()) {\n const r = out.result;\n if (r === undefined) continue;\n if (typeof r === 'object' && r !== null && 'pending' in r && (r as CraftValidatorPending).pending === true) {\n continue;\n }\n if (Array.isArray(r)) {\n for (const item of r) list.push(item);\n } else {\n list.push(r as CraftFieldError);\n }\n }\n list.push(...schemaErrors());\n // Aggregate errors from all child fields so that parent validity reflects\n // the entire sub-tree (a parent is invalid if any descendant is invalid).\n for (const child of children.values()) {\n const childErrors = child.errors();\n if (childErrors.length > 0) {\n for (const e of childErrors) list.push(e);\n }\n }\n return list;\n });\n\n const pending = computed(() => {\n registrationRevision();\n if (hiddenLocal() || disabledLocal() || readonlyLocal()) return false;\n if (\n validatorOutputs().some(\n (out) =>\n typeof out.result === 'object' &&\n out.result !== null &&\n 'pending' in (out.result as object) &&\n (out.result as CraftValidatorPending).pending === true,\n )\n ) {\n return true;\n }\n for (const child of children.values()) {\n if (child.pending()) return true;\n }\n return false;\n });\n const schemaInvalid = computed(() => {\n if (options.kind !== 'root') return false;\n if (hiddenLocal() || disabledLocal() || readonlyLocal()) return false;\n schemaErrorRevision();\n return schemaErrorSources.some((source) => source().length > 0);\n });\n const invalid = computed(() => schemaInvalid() || errors().length > 0);\n const valid = computed(() => !invalid() && !pending());\n\n // ---------- Native constraint signals ----------\n const constraintSignal = <V>(target: FieldAttributeMeta['target'], fallback: V) =>\n computed<V>(() => {\n let acc: V = fallback;\n let found = false;\n for (const out of validatorOutputs()) {\n const a = out.attribute;\n if (a && a.kind === 'native-constraint' && a.target === target) {\n if (target === 'required') {\n acc = ((acc as unknown as boolean) || (a.value as boolean)) as V;\n found = true;\n } else {\n acc = a.value as V;\n found = true;\n }\n }\n }\n return found ? acc : fallback;\n });\n\n const required = constraintSignal<boolean>('required', false);\n const min = constraintSignal<number | Date | undefined>('min', undefined);\n const max = constraintSignal<number | Date | undefined>('max', undefined);\n const minLength = constraintSignal<number | undefined>('minLength', undefined);\n const maxLength = constraintSignal<number | undefined>('maxLength', undefined);\n const pattern = constraintSignal<RegExp | undefined>('pattern', undefined);\n\n // ---------- Disabled reasons ----------\n const disabledReasonSources: Signal<string | undefined>[] = [];\n const disabledReasons = computed<ReadonlyArray<string>>(() => {\n registrationRevision();\n const out: string[] = [];\n for (const src of disabledReasonSources) {\n const r = src();\n if (typeof r === 'string' && r.length > 0) out.push(r);\n }\n return out;\n });\n\n // ---------- Children registry ----------\n const children: Map<string | number, CraftFieldInternals<unknown>> = new Map();\n\n // ---------- Reset trigger ----------\n const resetTriggerCount = signal(0);\n\n // ---------- Inherited state from parent ----------\n const inheritedDisabled = options.kind === 'child' ? options.link.parent.disabled : signal(false);\n const inheritedHidden = options.kind === 'child' ? options.link.parent.hidden : signal(false);\n const inheritedReadonly = options.kind === 'child' ? options.link.parent.readonly : signal(false);\n\n const disabled = computed(() => inheritedDisabled() || disabledLocal());\n const hidden = computed(() => inheritedHidden() || hiddenLocal());\n const readonlyComputed = computed(() => inheritedReadonly() || readonlyLocal());\n\n // ---------- Control syncers ----------\n const syncers = new Set<ControlSyncer<T>>();\n\n // ---------- Field methods ----------\n const set = (next: T): void => {\n setRaw(next);\n if (!localDirty()) localDirty.set(true);\n if (options.kind === 'child') {\n options.link.parent.__propagateDirty(true);\n }\n };\n\n const patch = (fn: (current: T) => Partial<T>): void => {\n const current = readRaw();\n const partial = fn(current);\n if (current && typeof current === 'object' && !Array.isArray(current)) {\n set({ ...(current as object), ...partial } as T);\n } else {\n set(partial as T);\n }\n };\n\n const propagateDirty = (childIsDirty: boolean) => {\n if (childIsDirty) {\n childDirty.set(true);\n } else {\n recomputeChildDirty();\n }\n if (options.kind === 'child') {\n options.link.parent.__propagateDirty(dirty());\n }\n };\n\n const propagateTouched = (childIsTouched: boolean) => {\n if (childIsTouched) {\n childTouched.set(true);\n } else {\n recomputeChildTouched();\n }\n if (options.kind === 'child') {\n options.link.parent.__propagateTouched(touched());\n }\n };\n\n const markTouched = () => {\n if (!localTouched()) localTouched.set(true);\n if (options.kind === 'child') options.link.parent.__propagateTouched(true);\n };\n\n const markUntouched = () => {\n localTouched.set(false);\n if (options.kind === 'child') options.link.parent.__propagateTouched(false);\n };\n\n const markDirty = () => {\n if (!localDirty()) localDirty.set(true);\n if (options.kind === 'child') options.link.parent.__propagateDirty(true);\n };\n\n const markPristine = () => {\n localDirty.set(false);\n if (options.kind === 'child') options.link.parent.__propagateDirty(false);\n };\n\n const resetCascade = () => {\n localDirty.set(false);\n localTouched.set(false);\n childDirty.set(false);\n childTouched.set(false);\n for (const child of children.values()) {\n child.__resetCascade();\n }\n resetTriggerCount.update((v) => v + 1);\n for (const syncer of syncers) {\n syncer.resync?.();\n }\n };\n\n const reset = (initialValue?: T): void => {\n if (initialValue !== undefined) {\n setRaw(initialValue);\n }\n resetCascade();\n if (options.kind === 'child') {\n options.link.parent.__propagateDirty(false);\n options.link.parent.__propagateTouched(false);\n }\n };\n\n // ---------- Registration helpers ----------\n const registerControl = (syncer: ControlSyncer<T>): (() => void) => {\n syncers.add(syncer);\n return () => {\n syncers.delete(syncer);\n syncer.destroy?.();\n };\n };\n\n const bumpRevision = () => {\n // The revision signal exists to invalidate computed signals when the\n // registration set changes AFTER it has already been observed. Writing\n // to a signal during template render is forbidden (NG0600), so we defer\n // the bump to a microtask. In the common case (registration happens\n // before any read), the bump is harmless; the first read will already\n // have captured the registered entries.\n queueMicrotask(() => registrationRevision.update((v) => v + 1));\n };\n\n const registerValidator = (\n validator: CraftValidator<T>,\n identifier?: unknown,\n ): (() => void) => {\n const ctxField = field as CraftField<T>;\n const out = validator({ value: valueSignal, field: ctxField, identifier });\n const entry: RegisteredValidator = { result: out.result, attribute: out.attribute };\n validators.push(entry);\n bumpRevision();\n return () => {\n const i = validators.indexOf(entry);\n if (i >= 0) validators.splice(i, 1);\n bumpRevision();\n };\n };\n\n const registerSchemaErrorSource = (\n source: CraftFieldSchemaErrorSource,\n ): (() => void) => {\n schemaErrorSources.push(source);\n schemaErrorRevision.update((value) => value + 1);\n return () => {\n const index = schemaErrorSources.indexOf(source);\n if (index >= 0) schemaErrorSources.splice(index, 1);\n schemaErrorRevision.update((value) => value + 1);\n };\n };\n\n const registerStateBinding = (\n kind: FieldStateBindingKind,\n source: Signal<boolean>,\n ): (() => void) => {\n const target =\n kind === 'hidden' ? hiddenSources : kind === 'disabled' ? disabledSources : readonlySources;\n target.push(source);\n bumpRevision();\n return () => {\n const i = target.indexOf(source);\n if (i >= 0) target.splice(i, 1);\n bumpRevision();\n };\n };\n\n const registerDisabledReason = (source: Signal<string | undefined>): (() => void) => {\n disabledReasonSources.push(source);\n bumpRevision();\n return () => {\n const i = disabledReasonSources.indexOf(source);\n if (i >= 0) disabledReasonSources.splice(i, 1);\n bumpRevision();\n };\n };\n\n // ---------- Field value sync to syncers ----------\n // Note: syncers call writeValue when registering; the directive itself sets up an effect\n // to track value changes. We don't auto-sync here to avoid effect ownership issues.\n\n const field: CraftFieldInternals<T> = {\n value: valueSignal,\n set,\n patch,\n reset,\n dirty,\n touched,\n hidden,\n disabled,\n readonly: readonlyComputed,\n pending,\n invalid,\n valid,\n errors,\n required,\n min,\n max,\n minLength,\n maxLength,\n pattern,\n disabledReasons,\n ɵregisterControl: registerControl,\n ɵmarkTouched: markTouched,\n ɵmarkUntouched: markUntouched,\n ɵmarkDirty: markDirty,\n ɵmarkPristine: markPristine,\n ɵregisterValidator: registerValidator,\n ɵregisterSchemaErrorSource: registerSchemaErrorSource,\n ɵregisterStateBinding: registerStateBinding,\n ɵregisterDisabledReason: registerDisabledReason,\n ɵresetTrigger: resetTriggerCount.asReadonly(),\n ɵpath: path,\n __raw: readRaw,\n __setRaw: setRaw,\n __children: children,\n __resetTriggerCount: resetTriggerCount,\n __propagateDirty: propagateDirty,\n __propagateTouched: propagateTouched,\n __resetCascade: resetCascade,\n __bumpRevision: bumpRevision,\n __schemaErrorSources: schemaErrorSources,\n __schemaErrorRevision: schemaErrorRevision,\n };\n\n return field;\n}\n\nfunction createTreeProxy<T>(internals: CraftFieldInternals<T>): CraftFieldTree<T> {\n const proxy = new Proxy(internals as unknown as object, {\n get(_target, prop, receiver) {\n if (typeof prop === 'symbol') {\n if (prop === FIELD_INTERNALS_TOKEN) return internals;\n return Reflect.get(internals as object, prop, receiver);\n }\n if (prop in internals) {\n return (internals as unknown as Record<string, unknown>)[prop];\n }\n const widenedInternals = internals as CraftFieldInternals<unknown>;\n // Array-like: support `length` and `item(index)`\n if (prop === 'item') {\n return (index: number) => getOrCreateChild(widenedInternals, index);\n }\n if (prop === 'length') {\n return computed(() => {\n const v = internals.value();\n return Array.isArray(v) ? v.length : 0;\n });\n }\n // Numeric index -> array child\n if (/^\\d+$/.test(prop)) {\n return getOrCreateChild(widenedInternals, Number(prop));\n }\n // Otherwise treat as object property child\n return getOrCreateChild(widenedInternals, prop);\n },\n has(_target, prop) {\n if (typeof prop === 'symbol') return prop === FIELD_INTERNALS_TOKEN;\n if (prop in internals) return true;\n return true;\n },\n ownKeys() {\n return Reflect.ownKeys(internals);\n },\n getOwnPropertyDescriptor(_target, prop) {\n return Object.getOwnPropertyDescriptor(internals, prop);\n },\n });\n\n return proxy as CraftFieldTree<T>;\n}\n\nfunction getOrCreateChild(\n parent: CraftFieldInternals<unknown>,\n segment: string | number,\n): CraftFieldTree<unknown> {\n const existing = parent.__children.get(segment);\n if (existing) {\n return (existing as unknown as { __proxy: CraftFieldTree<unknown> }).__proxy;\n }\n\n const link: ParentLink<unknown, unknown> = {\n parent,\n segment,\n read: (p: unknown) => readAtSegment(p, segment),\n write: (p: unknown, next: unknown) => writeAtSegment(p, segment, next),\n };\n\n const childInternals = createCraftFieldInternals<unknown>({\n kind: 'child',\n link,\n path: [...parent.ɵpath, segment],\n });\n parent.__children.set(segment, childInternals);\n const childProxy = createTreeProxy(childInternals);\n (childInternals as unknown as { __proxy: CraftFieldTree<unknown> }).__proxy = childProxy;\n // Notify parent so its computed `errors`/`pending`/`valid` re-evaluate and\n // pick up the newly-added child.\n parent.__bumpRevision();\n return childProxy;\n}\n\n/**\n * Create a Craft field tree from an external mutable backing store.\n * Used by `insertForm` to bridge the Craft `state()` signal into the field tree.\n */\nexport function createCraftFieldTree<T>(backing: FieldRootBackingStore<T>): CraftFieldTree<T> {\n const internals = createCraftFieldInternals<T>({\n kind: 'root',\n backing,\n path: [],\n });\n const proxy = createTreeProxy(internals);\n (internals as unknown as { __proxy: CraftFieldTree<T> }).__proxy = proxy;\n return proxy;\n}\n\n/**\n * Create a Craft field tree backed by a writable signal (convenience for tests / standalone usage).\n */\nexport function craftField<T>(initial: T | WritableSignal<T> | Signal<T>): CraftFieldTree<T> {\n if (isSignal(initial) && typeof (initial as WritableSignal<T>).set === 'function') {\n const s = initial as WritableSignal<T>;\n return createCraftFieldTree<T>({\n read: () => s(),\n set: (next) => s.set(next),\n asReadonly: () => s.asReadonly(),\n });\n }\n if (isSignal(initial)) {\n const s = initial as Signal<T>;\n return createCraftFieldTree<T>({\n read: () => s(),\n set: () => {\n throw new Error('craftField: cannot set on a readonly signal source.');\n },\n asReadonly: () => s,\n });\n }\n const s = signal(initial as T);\n return createCraftFieldTree<T>({\n read: () => s(),\n set: (next) => s.set(next),\n asReadonly: () => s.asReadonly(),\n });\n}\n\n/** @internal */\nexport function ɵgetCraftFieldInternals<T>(field: CraftField<T>): CraftFieldInternals<T> {\n return (field as unknown as Record<symbol, CraftFieldInternals<T>>)[FIELD_INTERNALS_TOKEN] ?? (field as unknown as CraftFieldInternals<T>);\n}\n\n/**\n * @internal\n * Create (or return a cached) child field whose value is **derived** from the\n * parent via an arbitrary lens (read + write functions), rather than indexed\n * by an object key or array index.\n *\n * The returned child plugs into the same `ParentLink` machinery used for\n * structural children, so dirty/touched/disabled/hidden/validation/reset\n * cascades work exactly the same way.\n *\n * Two calls with the same `name` on the same parent return the same child\n * instance — the lens passed on the first call wins.\n */\nexport function ɵgetOrCreateDerivedChild<Source, Sub>(\n parent: CraftField<Source>,\n name: string,\n lens: { read: (s: Source) => Sub; write: (s: Source, next: Sub) => Source },\n): CraftFieldTree<Sub> {\n const parentInternals = ɵgetCraftFieldInternals(parent) as CraftFieldInternals<Source>;\n const existing = parentInternals.__children.get(name);\n if (existing) {\n return (existing as unknown as { __proxy: CraftFieldTree<Sub> }).__proxy;\n }\n\n const link: ParentLink<Source, Sub> = {\n parent: parentInternals,\n segment: name,\n read: lens.read,\n write: lens.write,\n };\n\n const childInternals = createCraftFieldInternals<Sub>({\n kind: 'child',\n link: link as unknown as ParentLink<unknown, Sub>,\n path: [...parentInternals.ɵpath, name],\n });\n parentInternals.__children.set(name, childInternals as CraftFieldInternals<unknown>);\n const childProxy = createTreeProxy(childInternals);\n (childInternals as unknown as { __proxy: CraftFieldTree<Sub> }).__proxy = childProxy;\n return childProxy;\n}\n"]}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { InjectionToken, type Signal } from '../host/craft-compat';
|
|
2
|
+
import type { AnyCraftException } from '../craft-exception';
|
|
3
|
+
import type { CraftField } from './craft-field';
|
|
4
|
+
import type { ValidatorOutput } from './validator';
|
|
5
|
+
/** Type-only metadata carried by configured form fields. */
|
|
6
|
+
export declare const CRAFT_FIELD_VALIDATION_CASES: unique symbol;
|
|
7
|
+
/** Runtime validation source exposed by `insertFormAttributes`. */
|
|
8
|
+
export declare const CRAFT_FIELD_EXCEPTION_SOURCE: unique symbol;
|
|
9
|
+
/** Type-only validator metadata emitted by `insertFormAttributes`. */
|
|
10
|
+
export declare const CRAFT_FIELD_VALIDATORS: unique symbol;
|
|
11
|
+
export type FieldValidationCase<Path extends string, ValidatorName extends string, Exception extends AnyCraftException> = {
|
|
12
|
+
readonly path: Path;
|
|
13
|
+
readonly validatorName: ValidatorName;
|
|
14
|
+
readonly exception: Exception;
|
|
15
|
+
};
|
|
16
|
+
export type CraftFieldValidationCasesCarrier<Cases> = {
|
|
17
|
+
readonly [CRAFT_FIELD_VALIDATION_CASES]?: Cases;
|
|
18
|
+
};
|
|
19
|
+
export type CraftFieldValidatorsCarrier<Validators> = {
|
|
20
|
+
readonly [CRAFT_FIELD_VALIDATORS]?: Validators;
|
|
21
|
+
};
|
|
22
|
+
export type FieldValidationCasesOf<Field> = Field extends CraftFieldValidationCasesCarrier<infer Cases> ? Cases : never;
|
|
23
|
+
export type FieldExceptionVisibilityState = 'dirty' | 'touched' | 'submitted';
|
|
24
|
+
export type FieldExceptionVisibilityContext = {
|
|
25
|
+
readonly field: CraftField<unknown>;
|
|
26
|
+
readonly hasAttemptedSubmit: Signal<boolean>;
|
|
27
|
+
};
|
|
28
|
+
export type FieldExceptionVisibility = 'visibleExceptions' | 'always' | {
|
|
29
|
+
readonly anyOf: readonly FieldExceptionVisibilityState[];
|
|
30
|
+
} | ((context: FieldExceptionVisibilityContext) => boolean);
|
|
31
|
+
export type FieldExceptionCollection = {
|
|
32
|
+
readonly list: readonly AnyCraftException[];
|
|
33
|
+
readonly byValidator: Readonly<Record<string, AnyCraftException>>;
|
|
34
|
+
};
|
|
35
|
+
export type CraftFieldExceptionSource = {
|
|
36
|
+
readonly field: CraftField<unknown>;
|
|
37
|
+
readonly path: string;
|
|
38
|
+
readonly runtimePath: ReadonlyArray<string | number>;
|
|
39
|
+
readonly validatorNames: readonly string[];
|
|
40
|
+
readonly exceptions: Signal<FieldExceptionCollection>;
|
|
41
|
+
readonly visibleExceptions: Signal<FieldExceptionCollection>;
|
|
42
|
+
readonly firstLeftFailedValidation: Signal<AnyCraftException | undefined>;
|
|
43
|
+
readonly visibleFirstLeftFailedValidation: Signal<AnyCraftException | undefined>;
|
|
44
|
+
readonly hasAttemptedSubmit: Signal<boolean>;
|
|
45
|
+
};
|
|
46
|
+
export type CraftFieldExceptionSourceCarrier = {
|
|
47
|
+
readonly [CRAFT_FIELD_EXCEPTION_SOURCE]?: CraftFieldExceptionSource;
|
|
48
|
+
};
|
|
49
|
+
export type FieldExceptionBoundaryRegistration = {
|
|
50
|
+
readonly register: (source: CraftFieldExceptionSource, element?: Element) => () => void;
|
|
51
|
+
};
|
|
52
|
+
/** Nearest runtime boundary used by `CraftFieldDirective`. */
|
|
53
|
+
export declare const CRAFT_FIELD_EXCEPTION_BOUNDARY: InjectionToken<FieldExceptionBoundaryRegistration>;
|
|
54
|
+
export declare const DEFAULT_FIELD_EXCEPTION_VISIBILITY: {
|
|
55
|
+
readonly anyOf: readonly ["touched", "submitted"];
|
|
56
|
+
};
|
|
57
|
+
export declare function fieldExceptionVisibilityMatches(visibility: Exclude<FieldExceptionVisibility, 'visibleExceptions'>, context: FieldExceptionVisibilityContext): boolean;
|
|
58
|
+
type ValidatorCases<Validator, Path extends string> = Validator extends ValidatorOutput<any, infer Name extends string, infer Exceptions, any, any, any> ? Exceptions extends AnyCraftException ? FieldValidationCase<Path, Name, Exceptions> : never : never;
|
|
59
|
+
export type FieldValidationCasesFromInsertions<Insertions, Path extends string> = Insertions extends CraftFieldValidatorsCarrier<infer Validators> ? ValidatorCases<Validators, Path> : never;
|
|
60
|
+
export declare function staticFieldPath(runtimePath: ReadonlyArray<string | number>): string;
|
|
61
|
+
export {};
|
|
62
|
+
//# sourceMappingURL=field-exception.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-exception.d.ts","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/form/field-exception.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { InjectionToken } from '../host/craft-compat';
|
|
2
|
+
/** Runtime validation source exposed by `insertFormAttributes`. */
|
|
3
|
+
export const CRAFT_FIELD_EXCEPTION_SOURCE = Symbol.for('@craft-ts/core/field-exception-source');
|
|
4
|
+
/** Nearest runtime boundary used by `CraftFieldDirective`. */
|
|
5
|
+
export const CRAFT_FIELD_EXCEPTION_BOUNDARY = new InjectionToken('CRAFT_FIELD_EXCEPTION_BOUNDARY');
|
|
6
|
+
export const DEFAULT_FIELD_EXCEPTION_VISIBILITY = {
|
|
7
|
+
anyOf: ['touched', 'submitted'],
|
|
8
|
+
};
|
|
9
|
+
export function fieldExceptionVisibilityMatches(visibility, context) {
|
|
10
|
+
if (visibility === 'always')
|
|
11
|
+
return true;
|
|
12
|
+
if (typeof visibility === 'function')
|
|
13
|
+
return visibility(context);
|
|
14
|
+
return visibility.anyOf.some((state) => {
|
|
15
|
+
switch (state) {
|
|
16
|
+
case 'dirty':
|
|
17
|
+
return context.field.dirty();
|
|
18
|
+
case 'touched':
|
|
19
|
+
return context.field.touched();
|
|
20
|
+
case 'submitted':
|
|
21
|
+
return context.hasAttemptedSubmit();
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
export function staticFieldPath(runtimePath) {
|
|
26
|
+
let path = '';
|
|
27
|
+
for (const segment of runtimePath) {
|
|
28
|
+
if (typeof segment === 'number') {
|
|
29
|
+
path += '[]';
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
path += path ? `.${segment}` : segment;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return path;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=field-exception.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-exception.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/form/field-exception.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAe,MAAM,sBAAsB,CAAC;AAQnE,mEAAmE;AACnE,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAC,GAAG,CACpD,uCAAuC,CACxC,CAAC;AAuEF,8DAA8D;AAC9D,MAAM,CAAC,MAAM,8BAA8B,GACzC,IAAI,cAAc,CAChB,gCAAgC,CACjC,CAAC;AAEJ,MAAM,CAAC,MAAM,kCAAkC,GAAG;IAChD,KAAK,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC;CACY,CAAC;AAE9C,MAAM,UAAU,+BAA+B,CAC7C,UAAkE,EAClE,OAAwC;IAExC,IAAI,UAAU,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACzC,IAAI,OAAO,UAAU,KAAK,UAAU;QAAE,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;IACjE,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;QACrC,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,OAAO;gBACV,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YAC/B,KAAK,SAAS;gBACZ,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACjC,KAAK,WAAW;gBACd,OAAO,OAAO,CAAC,kBAAkB,EAAE,CAAC;QACxC,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAwBD,MAAM,UAAU,eAAe,CAC7B,WAA2C;IAE3C,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;QAClC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,IAAI,IAAI,IAAI,CAAC;QACf,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QACzC,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["import { InjectionToken, type Signal } from '../host/craft-compat';\nimport type { AnyCraftException } from '../craft-exception';\nimport type { CraftField } from './craft-field';\nimport type { ValidatorOutput } from './validator';\n\n/** Type-only metadata carried by configured form fields. */\nexport declare const CRAFT_FIELD_VALIDATION_CASES: unique symbol;\n\n/** Runtime validation source exposed by `insertFormAttributes`. */\nexport const CRAFT_FIELD_EXCEPTION_SOURCE = Symbol.for(\n '@craft-ts/core/field-exception-source',\n);\n\n/** Type-only validator metadata emitted by `insertFormAttributes`. */\nexport declare const CRAFT_FIELD_VALIDATORS: unique symbol;\n\nexport type FieldValidationCase<\n Path extends string,\n ValidatorName extends string,\n Exception extends AnyCraftException,\n> = {\n readonly path: Path;\n readonly validatorName: ValidatorName;\n readonly exception: Exception;\n};\n\nexport type CraftFieldValidationCasesCarrier<Cases> = {\n readonly [CRAFT_FIELD_VALIDATION_CASES]?: Cases;\n};\n\nexport type CraftFieldValidatorsCarrier<Validators> = {\n readonly [CRAFT_FIELD_VALIDATORS]?: Validators;\n};\n\nexport type FieldValidationCasesOf<Field> =\n Field extends CraftFieldValidationCasesCarrier<infer Cases> ? Cases : never;\n\nexport type FieldExceptionVisibilityState = 'dirty' | 'touched' | 'submitted';\n\nexport type FieldExceptionVisibilityContext = {\n readonly field: CraftField<unknown>;\n readonly hasAttemptedSubmit: Signal<boolean>;\n};\n\nexport type FieldExceptionVisibility =\n | 'visibleExceptions'\n | 'always'\n | {\n readonly anyOf: readonly FieldExceptionVisibilityState[];\n }\n | ((context: FieldExceptionVisibilityContext) => boolean);\n\nexport type FieldExceptionCollection = {\n readonly list: readonly AnyCraftException[];\n readonly byValidator: Readonly<Record<string, AnyCraftException>>;\n};\n\nexport type CraftFieldExceptionSource = {\n readonly field: CraftField<unknown>;\n readonly path: string;\n readonly runtimePath: ReadonlyArray<string | number>;\n readonly validatorNames: readonly string[];\n readonly exceptions: Signal<FieldExceptionCollection>;\n readonly visibleExceptions: Signal<FieldExceptionCollection>;\n readonly firstLeftFailedValidation: Signal<AnyCraftException | undefined>;\n readonly visibleFirstLeftFailedValidation: Signal<\n AnyCraftException | undefined\n >;\n readonly hasAttemptedSubmit: Signal<boolean>;\n};\n\nexport type CraftFieldExceptionSourceCarrier = {\n readonly [CRAFT_FIELD_EXCEPTION_SOURCE]?: CraftFieldExceptionSource;\n};\n\nexport type FieldExceptionBoundaryRegistration = {\n readonly register: (\n source: CraftFieldExceptionSource,\n element?: Element,\n ) => () => void;\n};\n\n/** Nearest runtime boundary used by `CraftFieldDirective`. */\nexport const CRAFT_FIELD_EXCEPTION_BOUNDARY =\n new InjectionToken<FieldExceptionBoundaryRegistration>(\n 'CRAFT_FIELD_EXCEPTION_BOUNDARY',\n );\n\nexport const DEFAULT_FIELD_EXCEPTION_VISIBILITY = {\n anyOf: ['touched', 'submitted'],\n} as const satisfies FieldExceptionVisibility;\n\nexport function fieldExceptionVisibilityMatches(\n visibility: Exclude<FieldExceptionVisibility, 'visibleExceptions'>,\n context: FieldExceptionVisibilityContext,\n): boolean {\n if (visibility === 'always') return true;\n if (typeof visibility === 'function') return visibility(context);\n return visibility.anyOf.some((state) => {\n switch (state) {\n case 'dirty':\n return context.field.dirty();\n case 'touched':\n return context.field.touched();\n case 'submitted':\n return context.hasAttemptedSubmit();\n }\n });\n}\n\ntype ValidatorCases<Validator, Path extends string> =\n Validator extends ValidatorOutput<\n any,\n infer Name extends string,\n infer Exceptions,\n any,\n any,\n any\n >\n ? Exceptions extends AnyCraftException\n ? FieldValidationCase<Path, Name, Exceptions>\n : never\n : never;\n\nexport type FieldValidationCasesFromInsertions<\n Insertions,\n Path extends string,\n> =\n Insertions extends CraftFieldValidatorsCarrier<infer Validators>\n ? ValidatorCases<Validators, Path>\n : never;\n\nexport function staticFieldPath(\n runtimePath: ReadonlyArray<string | number>,\n): string {\n let path = '';\n for (const segment of runtimePath) {\n if (typeof segment === 'number') {\n path += '[]';\n } else {\n path += path ? `.${segment}` : segment;\n }\n }\n return path;\n}\n"]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A lens describes how to read a derived value from a source, and how to
|
|
3
|
+
* write a new derived value back into the source. Used by `insertSubFormField`
|
|
4
|
+
* to expose computed sub-fields that stay in sync with their parent.
|
|
5
|
+
*/
|
|
6
|
+
export type FieldLens<Source, Sub> = {
|
|
7
|
+
read: (source: Source) => Sub;
|
|
8
|
+
write: (source: Source, next: Sub) => Source;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Lens that exposes the `index`-th half of a string split by `separator`.
|
|
12
|
+
* The write reassembles the source while preserving the other half.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* // source = '2026-05-10 12:00'
|
|
16
|
+
* splitLens(' ', 0).read(source) // '2026-05-10'
|
|
17
|
+
* splitLens(' ', 0).write(source, '2026-05-11') // '2026-05-11 12:00'
|
|
18
|
+
*/
|
|
19
|
+
export declare const splitLens: (separator: string, index: 0 | 1) => FieldLens<string, string>;
|
|
20
|
+
/**
|
|
21
|
+
* Pure 1-to-1 conversion lens. The write does not depend on the previous
|
|
22
|
+
* source value — typical for type conversions like `Number ↔ string` or
|
|
23
|
+
* `Date ↔ ISO string`.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* mapLens<string, number>((s) => Number(s), (n) => String(n))
|
|
27
|
+
*/
|
|
28
|
+
export declare const mapLens: <A, B>(forward: (a: A) => B, backward: (b: B) => A) => FieldLens<A, B>;
|
|
29
|
+
//# sourceMappingURL=field-lens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-lens.d.ts","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/form/field-lens.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,SAAS,CAAC,MAAM,EAAE,GAAG,IAAI;IACnC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,GAAG,CAAC;IAC9B,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,MAAM,CAAC;CAC9C,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,GACpB,WAAW,MAAM,EACjB,OAAO,CAAC,GAAG,CAAC,KACX,SAAS,CAAC,MAAM,EAAE,MAAM,CAQzB,CAAC;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,CAAC,EAC1B,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EACpB,UAAU,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KACpB,SAAS,CAAC,CAAC,EAAE,CAAC,CAGf,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lens that exposes the `index`-th half of a string split by `separator`.
|
|
3
|
+
* The write reassembles the source while preserving the other half.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* // source = '2026-05-10 12:00'
|
|
7
|
+
* splitLens(' ', 0).read(source) // '2026-05-10'
|
|
8
|
+
* splitLens(' ', 0).write(source, '2026-05-11') // '2026-05-11 12:00'
|
|
9
|
+
*/
|
|
10
|
+
export const splitLens = (separator, index) => ({
|
|
11
|
+
read: (source) => source.split(separator)[index] ?? '',
|
|
12
|
+
write: (source, next) => {
|
|
13
|
+
const parts = source.split(separator);
|
|
14
|
+
while (parts.length <= index)
|
|
15
|
+
parts.push('');
|
|
16
|
+
parts[index] = next;
|
|
17
|
+
return parts.join(separator);
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
/**
|
|
21
|
+
* Pure 1-to-1 conversion lens. The write does not depend on the previous
|
|
22
|
+
* source value — typical for type conversions like `Number ↔ string` or
|
|
23
|
+
* `Date ↔ ISO string`.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* mapLens<string, number>((s) => Number(s), (n) => String(n))
|
|
27
|
+
*/
|
|
28
|
+
export const mapLens = (forward, backward) => ({
|
|
29
|
+
read: forward,
|
|
30
|
+
write: (_source, next) => backward(next),
|
|
31
|
+
});
|
|
32
|
+
//# sourceMappingURL=field-lens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-lens.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/form/field-lens.ts"],"names":[],"mappings":"AAUA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,SAAiB,EACjB,KAAY,EACe,EAAE,CAAC,CAAC;IAC/B,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE;IACtD,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;QACtB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACtC,OAAO,KAAK,CAAC,MAAM,IAAI,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7C,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;QACpB,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC;CACF,CAAC,CAAC;AAEH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CACrB,OAAoB,EACpB,QAAqB,EACJ,EAAE,CAAC,CAAC;IACrB,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;CACzC,CAAC,CAAC","sourcesContent":["/**\n * A lens describes how to read a derived value from a source, and how to\n * write a new derived value back into the source. Used by `insertSubFormField`\n * to expose computed sub-fields that stay in sync with their parent.\n */\nexport type FieldLens<Source, Sub> = {\n read: (source: Source) => Sub;\n write: (source: Source, next: Sub) => Source;\n};\n\n/**\n * Lens that exposes the `index`-th half of a string split by `separator`.\n * The write reassembles the source while preserving the other half.\n *\n * @example\n * // source = '2026-05-10 12:00'\n * splitLens(' ', 0).read(source) // '2026-05-10'\n * splitLens(' ', 0).write(source, '2026-05-11') // '2026-05-11 12:00'\n */\nexport const splitLens = (\n separator: string,\n index: 0 | 1,\n): FieldLens<string, string> => ({\n read: (source) => source.split(separator)[index] ?? '',\n write: (source, next) => {\n const parts = source.split(separator);\n while (parts.length <= index) parts.push('');\n parts[index] = next;\n return parts.join(separator);\n },\n});\n\n/**\n * Pure 1-to-1 conversion lens. The write does not depend on the previous\n * source value — typical for type conversions like `Number ↔ string` or\n * `Date ↔ ISO string`.\n *\n * @example\n * mapLens<string, number>((s) => Number(s), (n) => String(n))\n */\nexport const mapLens = <A, B>(\n forward: (a: A) => B,\n backward: (b: B) => A,\n): FieldLens<A, B> => ({\n read: forward,\n write: (_source, next) => backward(next),\n});\n"]}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { type Signal, untracked } from '../host/craft-compat';
|
|
2
|
+
import { CraftExceptionResult } from '../craft-exception';
|
|
3
|
+
import type { MergeObject, Prettify, UnionToTuple } from '../util/util.type';
|
|
4
|
+
import { type CraftFieldValidatorsCarrier, type FieldExceptionCollection, type FieldExceptionVisibility } from './field-exception';
|
|
5
|
+
import type { InsertionFormFactoryContext, InsertionsFormFactory } from './insert-form-internals';
|
|
6
|
+
import { type ValidatorOutput } from './validator';
|
|
7
|
+
type FormAttributeInput<T> = Signal<T> | (() => T);
|
|
8
|
+
type AnyValidatorOutput = ValidatorOutput<any, string, any, any, any, any>;
|
|
9
|
+
export type FormNodeExceptions = {
|
|
10
|
+
list: FieldExceptionCollection['list'];
|
|
11
|
+
byValidator: FieldExceptionCollection['byValidator'];
|
|
12
|
+
};
|
|
13
|
+
export type InsertFormAttributesConfig<_S, Validators extends AnyValidatorOutput = never> = {
|
|
14
|
+
disable?: FormAttributeInput<boolean>;
|
|
15
|
+
hidden?: FormAttributeInput<boolean>;
|
|
16
|
+
readonly?: FormAttributeInput<boolean>;
|
|
17
|
+
validators?: Validators[];
|
|
18
|
+
/** Controls when `visibleExceptions` and the visible first/last helpers emit. */
|
|
19
|
+
exceptionVisibility?: Exclude<FieldExceptionVisibility, 'visibleExceptions'>;
|
|
20
|
+
};
|
|
21
|
+
export type InsertFormAttributesContext<TValue, PreviousInsertionsOutputs = {}, FormIdentifier extends string | number | unknown = unknown> = InsertionFormFactoryContext<TValue, PreviousInsertionsOutputs, FormIdentifier>;
|
|
22
|
+
type ExtractValidatorMetadata<Validator> = Validator extends ValidatorOutput<infer _TValue, infer _Name, infer Exceptions, infer _Type, infer _Identifier, infer _Meta> ? Exceptions : never;
|
|
23
|
+
type ExceptionsByValidatorFromTuple<ExceptionsTuple extends unknown[], Acc = {}> = ExceptionsTuple extends [infer Head, ...infer Tail] ? ExceptionsByValidatorFromTuple<Tail, Head extends CraftExceptionResult<infer M, infer _P> ? MergeObject<Acc, {
|
|
24
|
+
[Key in M['_tag']]: Head;
|
|
25
|
+
}> : Head> : Prettify<Acc>;
|
|
26
|
+
type ExceptionsList<Exception> = UnionToTuple<ExtractValidatorMetadata<NonNullable<Exception>>>;
|
|
27
|
+
type ExceptionsByValidator<Validators> = ExceptionsByValidatorFromTuple<UnionToTuple<ExtractValidatorMetadata<NonNullable<Validators>>>>;
|
|
28
|
+
type ExceptionUnion<Validators> = ExtractValidatorMetadata<NonNullable<Validators>>;
|
|
29
|
+
type FormAttributesOutputs<Validators> = CraftFieldValidatorsCarrier<Validators> & {
|
|
30
|
+
exceptions: Signal<{
|
|
31
|
+
list: ExceptionsList<Validators>;
|
|
32
|
+
byValidator: ExceptionsByValidator<NonNullable<Validators>>;
|
|
33
|
+
}>;
|
|
34
|
+
/**
|
|
35
|
+
* Exceptions that should be visible to the user. By default, all exceptions are
|
|
36
|
+
* hidden until the field is touched or the form has been attempted to be submitted at least once.
|
|
37
|
+
*/
|
|
38
|
+
visibleExceptions: Signal<{
|
|
39
|
+
list: ExceptionsList<Validators>;
|
|
40
|
+
byValidator: ExceptionsByValidator<NonNullable<Validators>>;
|
|
41
|
+
}>;
|
|
42
|
+
hasExceptions: Signal<boolean>;
|
|
43
|
+
/**
|
|
44
|
+
* The first failing validator's exception, scanning the `validators` array
|
|
45
|
+
* left-to-right. Useful in templates to display a single error without a `@for` loop.
|
|
46
|
+
* Returns `undefined` when the field is valid.
|
|
47
|
+
*/
|
|
48
|
+
firstLeftFailedValidation: Signal<ExceptionUnion<Validators> | undefined>;
|
|
49
|
+
/**
|
|
50
|
+
* The last failing validator's exception, scanning the `validators` array
|
|
51
|
+
* right-to-left. Useful when the rightmost validator is the most specific.
|
|
52
|
+
* Returns `undefined` when the field is valid.
|
|
53
|
+
*/
|
|
54
|
+
lastRightFailedValidation: Signal<ExceptionUnion<Validators> | undefined>;
|
|
55
|
+
/**
|
|
56
|
+
* Same as `firstLeftFailedValidation` but only emits once the field is touched
|
|
57
|
+
* or the form has been submitted at least once.
|
|
58
|
+
*/
|
|
59
|
+
visibleFirstLeftFailedValidation: Signal<ExceptionUnion<Validators> | undefined>;
|
|
60
|
+
/**
|
|
61
|
+
* Same as `lastRightFailedValidation` but only emits once the field is touched
|
|
62
|
+
* or the form has been submitted at least once.
|
|
63
|
+
*/
|
|
64
|
+
visibleLastRightFailedValidation: Signal<ExceptionUnion<Validators> | undefined>;
|
|
65
|
+
};
|
|
66
|
+
export declare function insertFormAttributes<StateType, Validators extends AnyValidatorOutput = never, FormIdentifier extends string | number | unknown = unknown, PreviousInsertionsOutputs = {}>(_factory: (context: InsertFormAttributesContext<StateType, PreviousInsertionsOutputs, FormIdentifier>) => InsertFormAttributesConfig<StateType, Validators>): InsertionsFormFactory<StateType, FormIdentifier, FormAttributesOutputs<Validators>, PreviousInsertionsOutputs>;
|
|
67
|
+
export declare function formAttributes<StateType, Validators extends AnyValidatorOutput = never, FormIdentifier extends string | number | unknown = unknown, PreviousInsertionsOutputs = {}>(context: InsertFormAttributesContext<StateType, PreviousInsertionsOutputs, FormIdentifier>, config: InsertFormAttributesConfig<StateType, Validators>): FormAttributesOutputs<Validators>;
|
|
68
|
+
export { untracked };
|
|
69
|
+
//# sourceMappingURL=insert-form-attributes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insert-form-attributes.d.ts","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/form/insert-form-attributes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { computed, inject, Injector, untracked, } from '../host/craft-compat';
|
|
2
|
+
import { ɵcreateHostTaggedInjector } from '../craft-service';
|
|
3
|
+
import { executeGeneratorCompatibleFactory } from '../craft-generator-runtime';
|
|
4
|
+
import { CRAFT_FIELD_EXCEPTION_SOURCE, DEFAULT_FIELD_EXCEPTION_VISIBILITY, fieldExceptionVisibilityMatches, staticFieldPath, } from './field-exception';
|
|
5
|
+
import { VALIDATOR_OUTPUT_SYMBOL } from './validator';
|
|
6
|
+
const EMPTY_EXCEPTIONS = {
|
|
7
|
+
list: [],
|
|
8
|
+
byValidator: {},
|
|
9
|
+
};
|
|
10
|
+
function attributeInputToSignal(input) {
|
|
11
|
+
if (input === undefined)
|
|
12
|
+
return undefined;
|
|
13
|
+
if (typeof input === 'function') {
|
|
14
|
+
return computed(() => input());
|
|
15
|
+
}
|
|
16
|
+
return input;
|
|
17
|
+
}
|
|
18
|
+
function getValidatorBrand(validator) {
|
|
19
|
+
if (typeof validator !== 'function')
|
|
20
|
+
return undefined;
|
|
21
|
+
const runtime = validator[VALIDATOR_OUTPUT_SYMBOL];
|
|
22
|
+
return runtime?.name;
|
|
23
|
+
}
|
|
24
|
+
function isObjectRecord(value) {
|
|
25
|
+
return typeof value === 'object' && value !== null;
|
|
26
|
+
}
|
|
27
|
+
function applyFormAttributes(context, config) {
|
|
28
|
+
const field = context.field;
|
|
29
|
+
// Register hidden / disabled / readonly state bindings on the field.
|
|
30
|
+
const hiddenSignal = attributeInputToSignal(config.hidden);
|
|
31
|
+
if (hiddenSignal)
|
|
32
|
+
field.ɵregisterStateBinding('hidden', hiddenSignal);
|
|
33
|
+
const disabledSignal = attributeInputToSignal(config.disable);
|
|
34
|
+
if (disabledSignal)
|
|
35
|
+
field.ɵregisterStateBinding('disabled', disabledSignal);
|
|
36
|
+
const readonlySignal = attributeInputToSignal(config.readonly);
|
|
37
|
+
if (readonlySignal)
|
|
38
|
+
field.ɵregisterStateBinding('readonly', readonlySignal);
|
|
39
|
+
// Register validators on the field. Each validator's brand is used to group exceptions.
|
|
40
|
+
const validatorBrands = [];
|
|
41
|
+
for (const validatorInput of config.validators ?? []) {
|
|
42
|
+
const brand = getValidatorBrand(validatorInput);
|
|
43
|
+
if (brand)
|
|
44
|
+
validatorBrands.push(brand);
|
|
45
|
+
const fieldInjector = inject(Injector);
|
|
46
|
+
const validatorInjector = ɵcreateHostTaggedInjector(fieldInjector, `validator:${brand ?? 'unknown'}`);
|
|
47
|
+
const finalValidator = (...args) => executeGeneratorCompatibleFactory({
|
|
48
|
+
factory: validatorInput,
|
|
49
|
+
thisArg: undefined,
|
|
50
|
+
getInjector: () => validatorInjector,
|
|
51
|
+
args,
|
|
52
|
+
invalidYieldErrorMessage: 'Form validators can only yield craftService dependencies.',
|
|
53
|
+
multipleAppStartErrorMessage: 'Form validators do not support onAppStart.',
|
|
54
|
+
onAppStartNotSupportedErrorMessage: 'Form validators do not support onAppStart.',
|
|
55
|
+
});
|
|
56
|
+
field.ɵregisterValidator(finalValidator, context.formIdentifier);
|
|
57
|
+
}
|
|
58
|
+
const shouldSkip = computed(() => field.hidden() || field.disabled() || field.readonly());
|
|
59
|
+
const exceptions = computed(() => {
|
|
60
|
+
if (shouldSkip())
|
|
61
|
+
return EMPTY_EXCEPTIONS;
|
|
62
|
+
const list = [];
|
|
63
|
+
const byValidator = {};
|
|
64
|
+
for (const error of field.errors()) {
|
|
65
|
+
if (!validatorBrands.length || matchesBrand(error, validatorBrands)) {
|
|
66
|
+
list.push(error);
|
|
67
|
+
const brand = error.__brand;
|
|
68
|
+
if (typeof brand === 'string') {
|
|
69
|
+
byValidator[brand] = error;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return { list, byValidator };
|
|
74
|
+
});
|
|
75
|
+
const visibleExceptions = computed(() => {
|
|
76
|
+
const visible = fieldExceptionVisibilityMatches(config.exceptionVisibility ?? DEFAULT_FIELD_EXCEPTION_VISIBILITY, {
|
|
77
|
+
field: field,
|
|
78
|
+
hasAttemptedSubmit: context.hasAttemptedSubmit,
|
|
79
|
+
});
|
|
80
|
+
if (!visible) {
|
|
81
|
+
return EMPTY_EXCEPTIONS;
|
|
82
|
+
}
|
|
83
|
+
return exceptions();
|
|
84
|
+
});
|
|
85
|
+
const firstLeftFailedValidation = computed(() => {
|
|
86
|
+
const byBrand = exceptions().byValidator;
|
|
87
|
+
for (const brand of validatorBrands) {
|
|
88
|
+
const error = byBrand[brand];
|
|
89
|
+
if (error !== undefined)
|
|
90
|
+
return error;
|
|
91
|
+
}
|
|
92
|
+
return undefined;
|
|
93
|
+
});
|
|
94
|
+
const lastRightFailedValidation = computed(() => {
|
|
95
|
+
const byBrand = exceptions().byValidator;
|
|
96
|
+
for (let i = validatorBrands.length - 1; i >= 0; i--) {
|
|
97
|
+
const error = byBrand[validatorBrands[i]];
|
|
98
|
+
if (error !== undefined)
|
|
99
|
+
return error;
|
|
100
|
+
}
|
|
101
|
+
return undefined;
|
|
102
|
+
});
|
|
103
|
+
const visibleFirstLeftFailedValidation = computed(() => {
|
|
104
|
+
const visible = visibleExceptions();
|
|
105
|
+
for (const brand of validatorBrands) {
|
|
106
|
+
const error = visible.byValidator[brand];
|
|
107
|
+
if (error !== undefined)
|
|
108
|
+
return error;
|
|
109
|
+
}
|
|
110
|
+
return undefined;
|
|
111
|
+
});
|
|
112
|
+
const visibleLastRightFailedValidation = computed(() => {
|
|
113
|
+
const visible = visibleExceptions();
|
|
114
|
+
for (let i = validatorBrands.length - 1; i >= 0; i--) {
|
|
115
|
+
const error = visible.byValidator[validatorBrands[i]];
|
|
116
|
+
if (error !== undefined)
|
|
117
|
+
return error;
|
|
118
|
+
}
|
|
119
|
+
return undefined;
|
|
120
|
+
});
|
|
121
|
+
const source = {
|
|
122
|
+
field: field,
|
|
123
|
+
path: staticFieldPath(field.ɵpath),
|
|
124
|
+
runtimePath: field.ɵpath,
|
|
125
|
+
validatorNames: validatorBrands,
|
|
126
|
+
exceptions: exceptions,
|
|
127
|
+
visibleExceptions: visibleExceptions,
|
|
128
|
+
firstLeftFailedValidation: firstLeftFailedValidation,
|
|
129
|
+
visibleFirstLeftFailedValidation: visibleFirstLeftFailedValidation,
|
|
130
|
+
hasAttemptedSubmit: context.hasAttemptedSubmit,
|
|
131
|
+
};
|
|
132
|
+
Object.defineProperty(context.field, CRAFT_FIELD_EXCEPTION_SOURCE, {
|
|
133
|
+
value: source,
|
|
134
|
+
configurable: true,
|
|
135
|
+
enumerable: false,
|
|
136
|
+
});
|
|
137
|
+
return {
|
|
138
|
+
exceptions,
|
|
139
|
+
visibleExceptions,
|
|
140
|
+
hasExceptions: computed(() => exceptions().list.length > 0),
|
|
141
|
+
firstLeftFailedValidation,
|
|
142
|
+
lastRightFailedValidation,
|
|
143
|
+
visibleFirstLeftFailedValidation,
|
|
144
|
+
visibleLastRightFailedValidation,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
export function insertFormAttributes(_factory) {
|
|
148
|
+
return (context) => applyFormAttributes(context, _factory(context));
|
|
149
|
+
}
|
|
150
|
+
export function formAttributes(context, config) {
|
|
151
|
+
return applyFormAttributes(context, config);
|
|
152
|
+
}
|
|
153
|
+
function matchesBrand(error, brands) {
|
|
154
|
+
if (!isObjectRecord(error))
|
|
155
|
+
return false;
|
|
156
|
+
const brand = error['__brand'];
|
|
157
|
+
if (typeof brand !== 'string')
|
|
158
|
+
return false;
|
|
159
|
+
return brands.includes(brand);
|
|
160
|
+
}
|
|
161
|
+
// Re-export untracked for backward compat (unused by current consumers)
|
|
162
|
+
export { untracked };
|
|
163
|
+
//# sourceMappingURL=insert-form-attributes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insert-form-attributes.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/form/insert-form-attributes.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n computed,\n inject,\n Injector,\n type Signal,\n untracked,\n} from '../host/craft-compat';\nimport { ɵcreateHostTaggedInjector } from '../craft-service';\nimport {\n CraftExceptionResult,\n type AnyCraftException,\n} from '../craft-exception';\nimport { executeGeneratorCompatibleFactory } from '../craft-generator-runtime';\nimport type { MergeObject, Prettify, UnionToTuple } from '../util/util.type';\nimport { CraftField, CraftValidator } from './craft-field';\nimport {\n CRAFT_FIELD_EXCEPTION_SOURCE,\n DEFAULT_FIELD_EXCEPTION_VISIBILITY,\n fieldExceptionVisibilityMatches,\n staticFieldPath,\n type CraftFieldExceptionSource,\n type CraftFieldValidatorsCarrier,\n type FieldExceptionCollection,\n type FieldExceptionVisibility,\n} from './field-exception';\nimport type {\n InsertionFormFactoryContext,\n InsertionsFormFactory,\n} from './insert-form-internals';\nimport { VALIDATOR_OUTPUT_SYMBOL, type ValidatorOutput } from './validator';\n\ntype FormAttributeInput<T> = Signal<T> | (() => T);\n\ntype AnyValidatorOutput = ValidatorOutput<any, string, any, any, any, any>;\n\nexport type FormNodeExceptions = {\n list: FieldExceptionCollection['list'];\n byValidator: FieldExceptionCollection['byValidator'];\n};\n\nexport type InsertFormAttributesConfig<\n _S,\n Validators extends AnyValidatorOutput = never,\n> = {\n disable?: FormAttributeInput<boolean>;\n hidden?: FormAttributeInput<boolean>;\n readonly?: FormAttributeInput<boolean>;\n validators?: Validators[];\n /** Controls when `visibleExceptions` and the visible first/last helpers emit. */\n exceptionVisibility?: Exclude<FieldExceptionVisibility, 'visibleExceptions'>;\n};\n\nexport type InsertFormAttributesContext<\n TValue,\n PreviousInsertionsOutputs = {},\n FormIdentifier extends string | number | unknown = unknown,\n> = InsertionFormFactoryContext<\n TValue,\n PreviousInsertionsOutputs,\n FormIdentifier\n>;\n\nconst EMPTY_EXCEPTIONS: FormNodeExceptions = {\n list: [],\n byValidator: {},\n};\n\nfunction attributeInputToSignal<T>(\n input: FormAttributeInput<T> | undefined,\n): Signal<T> | undefined {\n if (input === undefined) return undefined;\n if (typeof input === 'function') {\n return computed(() => (input as () => T)());\n }\n return input;\n}\n\nfunction getValidatorBrand(validator: unknown): string | undefined {\n if (typeof validator !== 'function') return undefined;\n const runtime = (\n validator as { [VALIDATOR_OUTPUT_SYMBOL]?: { name?: string } }\n )[VALIDATOR_OUTPUT_SYMBOL];\n return runtime?.name;\n}\n\nfunction isObjectRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\ntype ExtractValidatorMetadata<Validator> =\n Validator extends ValidatorOutput<\n infer _TValue,\n infer _Name,\n infer Exceptions,\n infer _Type,\n infer _Identifier,\n infer _Meta\n >\n ? Exceptions\n : never;\n\ntype ExceptionsByValidatorFromTuple<\n ExceptionsTuple extends unknown[],\n Acc = {},\n> = ExceptionsTuple extends [infer Head, ...infer Tail]\n ? ExceptionsByValidatorFromTuple<\n Tail,\n Head extends CraftExceptionResult<infer M, infer _P>\n ? MergeObject<\n Acc,\n {\n [Key in M['_tag']]: Head;\n }\n >\n : Head\n >\n : Prettify<Acc>;\n\ntype ExceptionsList<Exception> = UnionToTuple<\n ExtractValidatorMetadata<NonNullable<Exception>>\n>;\n\ntype ExceptionsByValidator<Validators> = ExceptionsByValidatorFromTuple<\n UnionToTuple<ExtractValidatorMetadata<NonNullable<Validators>>>\n>;\n\ntype ExceptionUnion<Validators> = ExtractValidatorMetadata<\n NonNullable<Validators>\n>;\n\ntype FormAttributesOutputs<Validators> =\n CraftFieldValidatorsCarrier<Validators> & {\n exceptions: Signal<{\n list: ExceptionsList<Validators>;\n byValidator: ExceptionsByValidator<NonNullable<Validators>>;\n }>;\n /**\n * Exceptions that should be visible to the user. By default, all exceptions are\n * hidden until the field is touched or the form has been attempted to be submitted at least once.\n */\n visibleExceptions: Signal<{\n list: ExceptionsList<Validators>;\n byValidator: ExceptionsByValidator<NonNullable<Validators>>;\n }>;\n hasExceptions: Signal<boolean>;\n /**\n * The first failing validator's exception, scanning the `validators` array\n * left-to-right. Useful in templates to display a single error without a `@for` loop.\n * Returns `undefined` when the field is valid.\n */\n firstLeftFailedValidation: Signal<ExceptionUnion<Validators> | undefined>;\n /**\n * The last failing validator's exception, scanning the `validators` array\n * right-to-left. Useful when the rightmost validator is the most specific.\n * Returns `undefined` when the field is valid.\n */\n lastRightFailedValidation: Signal<ExceptionUnion<Validators> | undefined>;\n /**\n * Same as `firstLeftFailedValidation` but only emits once the field is touched\n * or the form has been submitted at least once.\n */\n visibleFirstLeftFailedValidation: Signal<\n ExceptionUnion<Validators> | undefined\n >;\n /**\n * Same as `lastRightFailedValidation` but only emits once the field is touched\n * or the form has been submitted at least once.\n */\n visibleLastRightFailedValidation: Signal<\n ExceptionUnion<Validators> | undefined\n >;\n };\n\nfunction applyFormAttributes<\n StateType,\n Validators extends AnyValidatorOutput,\n FormIdentifier extends string | number | unknown,\n PreviousInsertionsOutputs,\n>(\n context: InsertFormAttributesContext<\n StateType,\n PreviousInsertionsOutputs,\n FormIdentifier\n >,\n config: InsertFormAttributesConfig<StateType, Validators>,\n): FormAttributesOutputs<Validators> {\n const field = context.field as unknown as CraftField<StateType>;\n\n // Register hidden / disabled / readonly state bindings on the field.\n const hiddenSignal = attributeInputToSignal(config.hidden);\n if (hiddenSignal) field.ɵregisterStateBinding('hidden', hiddenSignal);\n const disabledSignal = attributeInputToSignal(config.disable);\n if (disabledSignal) field.ɵregisterStateBinding('disabled', disabledSignal);\n const readonlySignal = attributeInputToSignal(config.readonly);\n if (readonlySignal) field.ɵregisterStateBinding('readonly', readonlySignal);\n\n // Register validators on the field. Each validator's brand is used to group exceptions.\n const validatorBrands: string[] = [];\n for (const validatorInput of config.validators ?? []) {\n const brand = getValidatorBrand(validatorInput);\n if (brand) validatorBrands.push(brand);\n\n const fieldInjector = inject(Injector);\n const validatorInjector = ɵcreateHostTaggedInjector(\n fieldInjector,\n `validator:${brand ?? 'unknown'}`,\n );\n const finalValidator = (...args: unknown[]) =>\n executeGeneratorCompatibleFactory({\n factory: validatorInput as (...args: unknown[]) => unknown,\n thisArg: undefined,\n getInjector: () => validatorInjector,\n args,\n invalidYieldErrorMessage:\n 'Form validators can only yield craftService dependencies.',\n multipleAppStartErrorMessage:\n 'Form validators do not support onAppStart.',\n onAppStartNotSupportedErrorMessage:\n 'Form validators do not support onAppStart.',\n });\n\n field.ɵregisterValidator(\n finalValidator as unknown as CraftValidator<StateType>,\n context.formIdentifier,\n );\n }\n\n const shouldSkip = computed(\n () => field.hidden() || field.disabled() || field.readonly(),\n );\n\n const exceptions = computed<FormNodeExceptions>(() => {\n if (shouldSkip()) return EMPTY_EXCEPTIONS;\n const list: AnyCraftException[] = [];\n const byValidator: Record<string, AnyCraftException> = {};\n for (const error of field.errors()) {\n if (!validatorBrands.length || matchesBrand(error, validatorBrands)) {\n list.push(error);\n const brand = (error as { __brand?: string }).__brand;\n if (typeof brand === 'string') {\n byValidator[brand] = error;\n }\n }\n }\n return { list, byValidator };\n });\n\n const visibleExceptions = computed<FormNodeExceptions>(() => {\n const visible = fieldExceptionVisibilityMatches(\n config.exceptionVisibility ?? DEFAULT_FIELD_EXCEPTION_VISIBILITY,\n {\n field: field as CraftField<unknown>,\n hasAttemptedSubmit: context.hasAttemptedSubmit,\n },\n );\n if (!visible) {\n return EMPTY_EXCEPTIONS;\n }\n return exceptions();\n });\n\n const firstLeftFailedValidation = computed<unknown>(() => {\n const byBrand = exceptions().byValidator;\n for (const brand of validatorBrands) {\n const error = byBrand[brand];\n if (error !== undefined) return error;\n }\n return undefined;\n });\n\n const lastRightFailedValidation = computed<unknown>(() => {\n const byBrand = exceptions().byValidator;\n for (let i = validatorBrands.length - 1; i >= 0; i--) {\n const error = byBrand[validatorBrands[i]];\n if (error !== undefined) return error;\n }\n return undefined;\n });\n\n const visibleFirstLeftFailedValidation = computed<unknown>(() => {\n const visible = visibleExceptions();\n for (const brand of validatorBrands) {\n const error = visible.byValidator[brand];\n if (error !== undefined) return error;\n }\n return undefined;\n });\n\n const visibleLastRightFailedValidation = computed<unknown>(() => {\n const visible = visibleExceptions();\n for (let i = validatorBrands.length - 1; i >= 0; i--) {\n const error = visible.byValidator[validatorBrands[i]];\n if (error !== undefined) return error;\n }\n return undefined;\n });\n\n const source: CraftFieldExceptionSource = {\n field: field as CraftField<unknown>,\n path: staticFieldPath(field.ɵpath),\n runtimePath: field.ɵpath,\n validatorNames: validatorBrands,\n exceptions: exceptions as CraftFieldExceptionSource['exceptions'],\n visibleExceptions:\n visibleExceptions as CraftFieldExceptionSource['visibleExceptions'],\n firstLeftFailedValidation:\n firstLeftFailedValidation as CraftFieldExceptionSource['firstLeftFailedValidation'],\n visibleFirstLeftFailedValidation:\n visibleFirstLeftFailedValidation as CraftFieldExceptionSource['visibleFirstLeftFailedValidation'],\n hasAttemptedSubmit: context.hasAttemptedSubmit,\n };\n Object.defineProperty(context.field, CRAFT_FIELD_EXCEPTION_SOURCE, {\n value: source,\n configurable: true,\n enumerable: false,\n });\n\n return {\n exceptions,\n visibleExceptions,\n hasExceptions: computed(() => exceptions().list.length > 0),\n firstLeftFailedValidation,\n lastRightFailedValidation,\n visibleFirstLeftFailedValidation,\n visibleLastRightFailedValidation,\n } as unknown as FormAttributesOutputs<Validators>;\n}\n\nexport function insertFormAttributes<\n StateType,\n Validators extends AnyValidatorOutput = never,\n FormIdentifier extends string | number | unknown = unknown,\n PreviousInsertionsOutputs = {},\n>(\n _factory: (\n context: InsertFormAttributesContext<\n StateType,\n PreviousInsertionsOutputs,\n FormIdentifier\n >,\n ) => InsertFormAttributesConfig<StateType, Validators>,\n): InsertionsFormFactory<\n StateType,\n FormIdentifier,\n FormAttributesOutputs<Validators>,\n PreviousInsertionsOutputs\n> {\n return (context) => applyFormAttributes(context, _factory(context));\n}\n\nexport function formAttributes<\n StateType,\n Validators extends AnyValidatorOutput = never,\n FormIdentifier extends string | number | unknown = unknown,\n PreviousInsertionsOutputs = {},\n>(\n context: InsertFormAttributesContext<\n StateType,\n PreviousInsertionsOutputs,\n FormIdentifier\n >,\n config: InsertFormAttributesConfig<StateType, Validators>,\n): FormAttributesOutputs<Validators> {\n return applyFormAttributes(context, config);\n}\n\nfunction matchesBrand(error: unknown, brands: ReadonlyArray<string>): boolean {\n if (!isObjectRecord(error)) return false;\n const brand = error['__brand'];\n if (typeof brand !== 'string') return false;\n return brands.includes(brand);\n}\n\n// Re-export untracked for backward compat (unused by current consumers)\nexport { untracked };\n"]}
|