@craft-ts/core 0.7.0-beta.13 → 0.7.0-beta.16
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/package.json +10 -2
- package/src/index.d.ts +156 -148
- package/src/index.js +153 -142
- package/src/lib/after-recomputation.d.ts +3 -4
- package/src/lib/after-recomputation.js +3 -4
- package/src/lib/app-checked-di.d.ts +3 -4
- package/src/lib/app-checked-di.js +0 -1
- package/src/lib/async-process.d.ts +18 -19
- package/src/lib/async-process.js +24 -25
- package/src/lib/branded-component/branded-component.d.ts +3 -4
- package/src/lib/branded-component/branded-component.js +0 -1
- package/src/lib/browser-boundaries.d.ts +6 -7
- package/src/lib/browser-boundaries.js +5 -6
- package/src/lib/client-di-requirement.d.ts +1 -2
- package/src/lib/client-di-requirement.js +0 -1
- package/src/lib/client-function-middleware.d.ts +8 -92
- package/src/lib/client-function-middleware.js +89 -90
- package/src/lib/component-monitoring.d.ts +1 -2
- package/src/lib/component-monitoring.js +2 -3
- package/src/lib/component-register.d.ts +1 -2
- package/src/lib/component-register.js +1 -2
- package/src/lib/computed-source.d.ts +3 -4
- package/src/lib/computed-source.js +2 -3
- package/src/lib/correlation-id-plugin.d.ts +1 -2
- package/src/lib/correlation-id-plugin.js +6 -7
- package/src/lib/correlation-id.d.ts +4 -5
- package/src/lib/correlation-id.js +3 -4
- package/src/lib/craft-a11y.d.ts +3 -4
- package/src/lib/craft-a11y.js +5 -6
- package/src/lib/craft-activated-route.d.ts +2 -3
- package/src/lib/craft-activated-route.js +2 -3
- package/src/lib/craft-app-config.d.ts +4 -5
- package/src/lib/craft-app-config.js +3 -4
- package/src/lib/craft-codec.d.ts +0 -1
- package/src/lib/craft-codec.js +0 -1
- package/src/lib/craft-computed.d.ts +6 -7
- package/src/lib/craft-computed.js +7 -8
- package/src/lib/craft-control-flow.d.ts +0 -1
- package/src/lib/craft-control-flow.js +2 -3
- package/src/lib/craft-effect.d.ts +2 -3
- package/src/lib/craft-effect.js +7 -8
- package/src/lib/craft-exception.d.ts +0 -1
- package/src/lib/craft-exception.js +0 -1
- package/src/lib/craft-gen.d.ts +1 -2
- package/src/lib/craft-gen.js +2 -3
- package/src/lib/craft-generator-runtime.d.ts +21 -5
- package/src/lib/craft-generator-runtime.js +28 -6
- package/src/lib/craft-guard-runtime.d.ts +4 -5
- package/src/lib/craft-guard-runtime.js +6 -7
- package/src/lib/craft-handshake.d.ts +1 -2
- package/src/lib/craft-handshake.js +0 -1
- package/src/lib/craft-http-client.d.ts +3 -4
- package/src/lib/craft-http-client.js +4 -5
- package/src/lib/craft-http-trace.d.ts +1 -2
- package/src/lib/craft-http-trace.js +5 -2
- package/src/lib/craft-hydration.d.ts +11 -0
- package/src/lib/craft-hydration.js +2 -0
- package/src/lib/craft-lazy.d.ts +3 -4
- package/src/lib/craft-lazy.js +5 -6
- package/src/lib/craft-load-retry.d.ts +2 -3
- package/src/lib/craft-load-retry.js +11 -4
- package/src/lib/craft-machine-history.d.ts +6 -7
- package/src/lib/craft-machine-history.js +6 -7
- package/src/lib/craft-match.d.ts +0 -1
- package/src/lib/craft-match.js +0 -1
- package/src/lib/craft-method.d.ts +3 -4
- package/src/lib/craft-method.js +5 -6
- package/src/lib/craft-node-directive.d.ts +3 -4
- package/src/lib/craft-node-directive.js +2 -3
- package/src/lib/craft-pending.d.ts +3 -4
- package/src/lib/craft-pending.js +2 -3
- package/src/lib/craft-pipe.d.ts +1 -2
- package/src/lib/craft-pipe.js +7 -8
- package/src/lib/craft-platform.d.ts +2 -3
- package/src/lib/craft-platform.js +2 -3
- package/src/lib/craft-primitive-gen.d.ts +7 -8
- package/src/lib/craft-primitive-gen.js +4 -5
- package/src/lib/craft-primitive-registry.d.ts +4 -2
- package/src/lib/craft-primitive-registry.js +5 -3
- package/src/lib/craft-program-operators.d.ts +3 -4
- package/src/lib/craft-program-operators.js +4 -5
- package/src/lib/craft-program-runtime.d.ts +3 -4
- package/src/lib/craft-program-runtime.js +7 -8
- package/src/lib/craft-register-for-runtime.d.ts +2 -3
- package/src/lib/craft-register-for-runtime.js +2 -3
- package/src/lib/craft-register-for.d.ts +3 -4
- package/src/lib/craft-register-for.js +6 -7
- package/src/lib/craft-render-identity.d.ts +0 -1
- package/src/lib/craft-render-identity.js +1 -2
- package/src/lib/craft-replay.d.ts +0 -1
- package/src/lib/craft-replay.js +0 -1
- package/src/lib/craft-request-context.d.ts +15 -0
- package/src/lib/craft-request-context.js +40 -0
- package/src/lib/craft-resolve.d.ts +2 -3
- package/src/lib/craft-resolve.js +0 -1
- package/src/lib/craft-resource.d.ts +2 -3
- package/src/lib/craft-resource.js +14 -6
- package/src/lib/craft-route-exceptions.d.ts +27 -28
- package/src/lib/craft-route-exceptions.js +3 -4
- package/src/lib/craft-route-load-error.d.ts +92 -93
- package/src/lib/craft-route-load-error.js +6 -7
- package/src/lib/craft-route-meta.d.ts +4 -5
- package/src/lib/craft-route-meta.js +0 -1
- package/src/lib/craft-route-target.d.ts +1 -2
- package/src/lib/craft-route-target.js +1 -2
- package/src/lib/craft-router-outlet.d.ts +7 -7
- package/src/lib/craft-router-outlet.js +24 -18
- package/src/lib/craft-router-tokens.d.ts +3 -4
- package/src/lib/craft-router-tokens.js +2 -3
- package/src/lib/craft-router-trace.d.ts +3 -4
- package/src/lib/craft-router-trace.js +9 -3
- package/src/lib/craft-router.d.ts +16 -17
- package/src/lib/craft-router.js +75 -74
- package/src/lib/craft-routes.d.ts +20 -15
- package/src/lib/craft-routes.js +13 -12
- package/src/lib/craft-runtime-mode.d.ts +13 -0
- package/src/lib/craft-runtime-mode.js +21 -0
- package/src/lib/craft-security.d.ts +87 -0
- package/src/lib/craft-security.js +117 -0
- package/src/lib/craft-service.d.ts +12 -13
- package/src/lib/craft-service.js +11 -12
- package/src/lib/craft-service.shared.d.ts +0 -1
- package/src/lib/craft-service.shared.js +0 -1
- package/src/lib/craft-settled.d.ts +23 -16
- package/src/lib/craft-settled.js +9 -10
- package/src/lib/craft-ssr.d.ts +2 -3
- package/src/lib/craft-ssr.js +4 -5
- package/src/lib/craft-state-machine-runtime.d.ts +2 -3
- package/src/lib/craft-state-machine-runtime.js +3 -4
- package/src/lib/craft-state-machine.d.ts +5 -6
- package/src/lib/craft-state-machine.js +9 -10
- package/src/lib/craft-target-runtime.d.ts +1 -2
- package/src/lib/craft-target-runtime.js +2 -3
- package/src/lib/craft-transfer-snapshot.d.ts +10 -5
- package/src/lib/craft-transfer-snapshot.js +139 -14
- package/src/lib/craft-unique.d.ts +0 -1
- package/src/lib/craft-unique.js +0 -1
- package/src/lib/craft-until-settled.d.ts +5 -6
- package/src/lib/craft-until-settled.js +4 -5
- package/src/lib/craft-use.d.ts +0 -1
- package/src/lib/craft-use.js +2 -3
- package/src/lib/craft-view-transition.d.ts +2 -3
- package/src/lib/craft-view-transition.js +2 -3
- package/src/lib/dev-tools.d.ts +7 -0
- package/src/lib/dev-tools.js +244 -0
- package/src/lib/dom-event-hook.d.ts +1 -2
- package/src/lib/dom-event-hook.js +1 -2
- package/src/lib/fn-wrapper.d.ts +2 -3
- package/src/lib/fn-wrapper.js +3 -4
- package/src/lib/form/craft-field.d.ts +2 -3
- package/src/lib/form/craft-field.directive.d.ts +6 -7
- package/src/lib/form/craft-field.directive.js +5 -6
- package/src/lib/form/craft-field.js +1 -2
- package/src/lib/form/field-exception.d.ts +4 -5
- package/src/lib/form/field-exception.js +1 -2
- package/src/lib/form/field-lens.d.ts +0 -1
- package/src/lib/form/field-lens.js +0 -1
- package/src/lib/form/insert-form-attributes.d.ts +6 -7
- package/src/lib/form/insert-form-attributes.js +5 -6
- package/src/lib/form/insert-form-internals.d.ts +11 -12
- package/src/lib/form/insert-form-internals.js +9 -10
- package/src/lib/form/insert-form-schema.d.ts +3 -4
- package/src/lib/form/insert-form-schema.js +4 -5
- package/src/lib/form/insert-form-submit.d.ts +7 -8
- package/src/lib/form/insert-form-submit.js +3 -4
- package/src/lib/form/insert-form.d.ts +6 -7
- package/src/lib/form/insert-form.js +8 -9
- package/src/lib/form/insert-select-form-tree.d.ts +2 -3
- package/src/lib/form/insert-select-form-tree.js +5 -6
- package/src/lib/form/insert-sub-form-field.d.ts +3 -4
- package/src/lib/form/insert-sub-form-field.js +6 -7
- package/src/lib/form/make-form-tree-insert.d.ts +1 -2
- package/src/lib/form/make-form-tree-insert.js +3 -4
- package/src/lib/form/target-form-field.d.ts +0 -1
- package/src/lib/form/target-form-field.js +0 -1
- package/src/lib/form/validator.d.ts +5 -6
- package/src/lib/form/validator.js +3 -4
- package/src/lib/from-event-to-source$.d.ts +2 -3
- package/src/lib/from-event-to-source$.js +3 -4
- package/src/lib/global-persister-handler.service.d.ts +1 -2
- package/src/lib/global-persister-handler.service.js +2 -3
- package/src/lib/host/craft-compat.d.ts +2 -3
- package/src/lib/host/craft-compat.js +2 -3
- package/src/lib/host/craft-dom.d.ts +0 -1
- package/src/lib/host/craft-dom.js +0 -1
- package/src/lib/host/craft-http.d.ts +0 -1
- package/src/lib/host/craft-http.js +0 -1
- package/src/lib/host/craft-injector-host.d.ts +2 -3
- package/src/lib/host/craft-injector-host.js +1 -2
- package/src/lib/host/craft-injector.d.ts +0 -1
- package/src/lib/host/craft-injector.js +0 -1
- package/src/lib/host/craft-linked-signal.d.ts +1 -2
- package/src/lib/host/craft-linked-signal.js +2 -3
- package/src/lib/host/craft-router-runtime.d.ts +0 -1
- package/src/lib/host/craft-router-runtime.js +0 -1
- package/src/lib/host/craft-router-types.d.ts +1 -2
- package/src/lib/host/craft-router-types.js +1 -2
- package/src/lib/host/craft-signal.d.ts +0 -1
- package/src/lib/host/craft-signal.js +1 -2
- package/src/lib/host/craft-test-bed.d.ts +2 -3
- package/src/lib/host/craft-test-bed.js +2 -3
- package/src/lib/host-tag.d.ts +1 -2
- package/src/lib/host-tag.js +1 -2
- package/src/lib/http-server.d.ts +156 -0
- package/src/lib/http-server.js +590 -0
- package/src/lib/insert-entities.d.ts +5 -6
- package/src/lib/insert-entities.js +1 -2
- package/src/lib/insert-noop-typing-anchor.d.ts +1 -2
- package/src/lib/insert-noop-typing-anchor.js +0 -1
- package/src/lib/insert-pagination-placeholder-data.d.ts +5 -6
- package/src/lib/insert-pagination-placeholder-data.js +5 -6
- package/src/lib/insert-react-on-mutation.d.ts +5 -6
- package/src/lib/insert-react-on-mutation.js +2 -3
- package/src/lib/insert-select-resource.d.ts +2 -3
- package/src/lib/insert-select-resource.js +1 -2
- package/src/lib/insert-select.d.ts +5 -6
- package/src/lib/insert-select.js +18 -19
- package/src/lib/insert-storage-persister.d.ts +4 -5
- package/src/lib/insert-storage-persister.js +2 -3
- package/src/lib/insert-typed-pipes.d.ts +3 -4
- package/src/lib/insert-typed-pipes.js +2 -3
- package/src/lib/lambda-adapter.d.ts +52 -0
- package/src/lib/lambda-adapter.js +101 -0
- package/src/lib/linked-source.d.ts +3 -4
- package/src/lib/linked-source.js +2 -3
- package/src/lib/local-storage-persister.d.ts +2 -3
- package/src/lib/local-storage-persister.js +3 -4
- package/src/lib/middleware-schema-shared.d.ts +9 -21
- package/src/lib/middleware-schema-shared.js +6 -1
- package/src/lib/mock-http-request-for-route.d.ts +3 -4
- package/src/lib/mock-http-request-for-route.js +0 -1
- package/src/lib/mutation.d.ts +18 -19
- package/src/lib/mutation.js +23 -24
- package/src/lib/on$.d.ts +6 -7
- package/src/lib/on$.js +4 -5
- package/src/lib/portable-server-function.d.ts +8 -9
- package/src/lib/portable-server-function.js +12 -5
- package/src/lib/preserved-resource.d.ts +2 -3
- package/src/lib/preserved-resource.js +4 -5
- package/src/lib/primitive-method-runtime-context.d.ts +1 -2
- package/src/lib/primitive-method-runtime-context.js +2 -3
- package/src/lib/primitive-resource-runtime-context.d.ts +1 -2
- package/src/lib/primitive-resource-runtime-context.js +2 -3
- package/src/lib/query-params.d.ts +12 -13
- package/src/lib/query-params.js +15 -16
- package/src/lib/query.core.d.ts +15 -14
- package/src/lib/query.core.js +1 -2
- package/src/lib/query.d.ts +19 -20
- package/src/lib/query.js +23 -24
- package/src/lib/reactive-read.d.ts +2 -3
- package/src/lib/reactive-read.js +2 -3
- package/src/lib/render/channels.d.ts +130 -0
- package/src/lib/render/channels.js +0 -0
- package/src/lib/resource-by-id.d.ts +4 -5
- package/src/lib/resource-by-id.js +4 -5
- package/src/lib/resource-exception.d.ts +2 -3
- package/src/lib/resource-exception.js +1 -2
- package/src/lib/route-checked-di.d.ts +4 -5
- package/src/lib/route-checked-di.js +0 -1
- package/src/lib/schema-validation.d.ts +4 -5
- package/src/lib/schema-validation.js +2 -3
- package/src/lib/send-context-to-ai.d.ts +3 -4
- package/src/lib/send-context-to-ai.js +1 -2
- package/src/lib/send-context-to-ai.tokens.d.ts +1 -2
- package/src/lib/send-context-to-ai.tokens.js +0 -1
- package/src/lib/server-function-client.d.ts +18 -7
- package/src/lib/server-function-client.js +31 -9
- package/src/lib/server-function-contract.d.ts +1 -2
- package/src/lib/server-function-contract.js +0 -1
- package/src/lib/server-function-middleware.d.ts +49 -132
- package/src/lib/server-function-middleware.js +83 -103
- package/src/lib/server-function.d.ts +58 -8
- package/src/lib/server-function.js +20 -6
- package/src/lib/server-layer.d.ts +3 -4
- package/src/lib/server-layer.js +1 -2
- package/src/lib/server.d.ts +39 -6
- package/src/lib/server.js +259 -27
- package/src/lib/setup-craft-service-test.d.ts +3 -4
- package/src/lib/setup-craft-service-test.js +6 -7
- package/src/lib/setup-craft-service-testing-by-register.d.ts +4 -5
- package/src/lib/setup-craft-service-testing-by-register.js +4 -5
- package/src/lib/signal-proxy.d.ts +2 -3
- package/src/lib/signal-proxy.js +1 -2
- package/src/lib/signal-source.d.ts +3 -4
- package/src/lib/signal-source.js +7 -8
- package/src/lib/source$.d.ts +3 -4
- package/src/lib/source$.js +7 -8
- package/src/lib/source-from-event.d.ts +2 -3
- package/src/lib/source-from-event.js +2 -3
- package/src/lib/stacked-source.d.ts +1 -2
- package/src/lib/stacked-source.js +1 -2
- package/src/lib/standard-schema.d.ts +0 -1
- package/src/lib/standard-schema.js +0 -1
- package/src/lib/state-method-runtime-context.d.ts +2 -3
- package/src/lib/state-method-runtime-context.js +1 -2
- package/src/lib/state.d.ts +13 -14
- package/src/lib/state.js +17 -18
- package/src/lib/storage-persister.service.d.ts +3 -4
- package/src/lib/storage-persister.service.js +3 -4
- package/src/lib/take-app-snapshot.d.ts +1 -2
- package/src/lib/take-app-snapshot.js +10 -4
- package/src/lib/template-trace.d.ts +1 -2
- package/src/lib/template-trace.js +5 -2
- package/src/lib/temporal-runtime.d.ts +1 -2
- package/src/lib/temporal-runtime.js +1 -2
- package/src/lib/to-source.d.ts +3 -4
- package/src/lib/to-source.js +2 -3
- package/src/lib/util/craft-resource-ref.d.ts +2 -3
- package/src/lib/util/craft-resource-ref.js +0 -1
- package/src/lib/util/craft-resource-status.d.ts +1 -2
- package/src/lib/util/craft-resource-status.js +0 -1
- package/src/lib/util/entities-util.d.ts +0 -1
- package/src/lib/util/entities-util.js +0 -1
- package/src/lib/util/explicit-effect.d.ts +1 -2
- package/src/lib/util/explicit-effect.js +1 -2
- package/src/lib/util/extract-signal-props-and-methods.d.ts +2 -3
- package/src/lib/util/extract-signal-props-and-methods.js +0 -1
- package/src/lib/util/method-trigger-nonce.d.ts +1 -2
- package/src/lib/util/method-trigger-nonce.js +0 -1
- package/src/lib/util/persister.type.d.ts +2 -3
- package/src/lib/util/persister.type.js +0 -1
- package/src/lib/util/persister.util.d.ts +0 -1
- package/src/lib/util/persister.util.js +0 -1
- package/src/lib/util/react-on-mutation-effect.d.ts +5 -6
- package/src/lib/util/react-on-mutation-effect.js +4 -5
- package/src/lib/util/resource-by-id-changes-tracker.util.d.ts +2 -3
- package/src/lib/util/resource-by-id-changes-tracker.util.js +2 -3
- package/src/lib/util/source.type.d.ts +2 -3
- package/src/lib/util/source.type.js +0 -1
- package/src/lib/util/types/access-type-object-property-by-dotted-path.type.d.ts +1 -2
- package/src/lib/util/types/access-type-object-property-by-dotted-path.type.js +0 -1
- package/src/lib/util/types/boolean-or-mapper-fn-by-path-by-id.type.d.ts +4 -5
- package/src/lib/util/types/boolean-or-mapper-fn-by-path-by-id.type.js +0 -1
- package/src/lib/util/types/boolean-or-mapper-fn-by-path.type.d.ts +3 -4
- package/src/lib/util/types/boolean-or-mapper-fn-by-path.type.js +0 -1
- package/src/lib/util/types/brand.d.ts +0 -1
- package/src/lib/util/types/brand.js +0 -1
- package/src/lib/util/types/object-deep-path-mapper.type.d.ts +1 -2
- package/src/lib/util/types/object-deep-path-mapper.type.js +0 -1
- package/src/lib/util/types/resource-by-id-config.type.d.ts +3 -4
- package/src/lib/util/types/resource-by-id-config.type.js +0 -1
- package/src/lib/util/types/resource-with-params-or-params-fn.type.d.ts +2 -3
- package/src/lib/util/types/resource-with-params-or-params-fn.type.js +0 -1
- package/src/lib/util/types/shared.type.d.ts +6 -7
- package/src/lib/util/types/shared.type.js +0 -1
- package/src/lib/util/types/util.d.ts +2 -3
- package/src/lib/util/types/util.js +3 -3
- package/src/lib/util/types/util.type.d.ts +3 -4
- package/src/lib/util/types/util.type.js +0 -1
- package/src/lib/util/update-state.util.d.ts +0 -1
- package/src/lib/util/update-state.util.js +0 -1
- package/src/lib/util/util.d.ts +2 -3
- package/src/lib/util/util.js +1 -2
- package/src/lib/util/util.type.d.ts +5 -6
- package/src/lib/util/util.type.js +0 -1
- package/src/lib/worker-adapter.d.ts +8 -0
- package/src/lib/worker-adapter.js +8 -0
- package/src/lib/yieldable.d.ts +4 -5
- package/src/lib/yieldable.js +4 -5
- package/src/index.d.ts.map +0 -1
- package/src/index.js.map +0 -1
- package/src/lib/after-recomputation.d.ts.map +0 -1
- package/src/lib/after-recomputation.js.map +0 -1
- package/src/lib/app-checked-di.d.ts.map +0 -1
- package/src/lib/app-checked-di.js.map +0 -1
- package/src/lib/async-process.d.ts.map +0 -1
- package/src/lib/async-process.js.map +0 -1
- package/src/lib/branded-component/branded-component.d.ts.map +0 -1
- package/src/lib/branded-component/branded-component.js.map +0 -1
- package/src/lib/browser-boundaries.d.ts.map +0 -1
- package/src/lib/browser-boundaries.js.map +0 -1
- package/src/lib/client-di-requirement.d.ts.map +0 -1
- package/src/lib/client-di-requirement.js.map +0 -1
- package/src/lib/client-function-middleware.d.ts.map +0 -1
- package/src/lib/client-function-middleware.js.map +0 -1
- package/src/lib/component-monitoring.d.ts.map +0 -1
- package/src/lib/component-monitoring.js.map +0 -1
- package/src/lib/component-register.d.ts.map +0 -1
- package/src/lib/component-register.js.map +0 -1
- package/src/lib/computed-source.d.ts.map +0 -1
- package/src/lib/computed-source.js.map +0 -1
- package/src/lib/correlation-id-plugin.d.ts.map +0 -1
- package/src/lib/correlation-id-plugin.js.map +0 -1
- package/src/lib/correlation-id.d.ts.map +0 -1
- package/src/lib/correlation-id.js.map +0 -1
- package/src/lib/craft-a11y.d.ts.map +0 -1
- package/src/lib/craft-a11y.js.map +0 -1
- package/src/lib/craft-activated-route.d.ts.map +0 -1
- package/src/lib/craft-activated-route.js.map +0 -1
- package/src/lib/craft-app-config.d.ts.map +0 -1
- package/src/lib/craft-app-config.js.map +0 -1
- package/src/lib/craft-codec.d.ts.map +0 -1
- package/src/lib/craft-codec.js.map +0 -1
- package/src/lib/craft-computed.d.ts.map +0 -1
- package/src/lib/craft-computed.js.map +0 -1
- package/src/lib/craft-control-flow.d.ts.map +0 -1
- package/src/lib/craft-control-flow.js.map +0 -1
- package/src/lib/craft-effect.d.ts.map +0 -1
- package/src/lib/craft-effect.js.map +0 -1
- package/src/lib/craft-exception.d.ts.map +0 -1
- package/src/lib/craft-exception.js.map +0 -1
- package/src/lib/craft-gen.d.ts.map +0 -1
- package/src/lib/craft-gen.js.map +0 -1
- package/src/lib/craft-generator-runtime.d.ts.map +0 -1
- package/src/lib/craft-generator-runtime.js.map +0 -1
- package/src/lib/craft-guard-runtime.d.ts.map +0 -1
- package/src/lib/craft-guard-runtime.js.map +0 -1
- package/src/lib/craft-handshake.d.ts.map +0 -1
- package/src/lib/craft-handshake.js.map +0 -1
- package/src/lib/craft-http-client.d.ts.map +0 -1
- package/src/lib/craft-http-client.js.map +0 -1
- package/src/lib/craft-http-trace.d.ts.map +0 -1
- package/src/lib/craft-http-trace.js.map +0 -1
- package/src/lib/craft-lazy.d.ts.map +0 -1
- package/src/lib/craft-lazy.js.map +0 -1
- package/src/lib/craft-load-retry.d.ts.map +0 -1
- package/src/lib/craft-load-retry.js.map +0 -1
- package/src/lib/craft-machine-history.d.ts.map +0 -1
- package/src/lib/craft-machine-history.js.map +0 -1
- package/src/lib/craft-match.d.ts.map +0 -1
- package/src/lib/craft-match.js.map +0 -1
- package/src/lib/craft-method.d.ts.map +0 -1
- package/src/lib/craft-method.js.map +0 -1
- package/src/lib/craft-node-directive.d.ts.map +0 -1
- package/src/lib/craft-node-directive.js.map +0 -1
- package/src/lib/craft-pending.d.ts.map +0 -1
- package/src/lib/craft-pending.js.map +0 -1
- package/src/lib/craft-pipe.d.ts.map +0 -1
- package/src/lib/craft-pipe.js.map +0 -1
- package/src/lib/craft-platform.d.ts.map +0 -1
- package/src/lib/craft-platform.js.map +0 -1
- package/src/lib/craft-primitive-gen.d.ts.map +0 -1
- package/src/lib/craft-primitive-gen.js.map +0 -1
- package/src/lib/craft-primitive-registry.d.ts.map +0 -1
- package/src/lib/craft-primitive-registry.js.map +0 -1
- package/src/lib/craft-program-operators.d.ts.map +0 -1
- package/src/lib/craft-program-operators.js.map +0 -1
- package/src/lib/craft-program-runtime.d.ts.map +0 -1
- package/src/lib/craft-program-runtime.js.map +0 -1
- package/src/lib/craft-register-for-runtime.d.ts.map +0 -1
- package/src/lib/craft-register-for-runtime.js.map +0 -1
- package/src/lib/craft-register-for.d.ts.map +0 -1
- package/src/lib/craft-register-for.js.map +0 -1
- package/src/lib/craft-render-identity.d.ts.map +0 -1
- package/src/lib/craft-render-identity.js.map +0 -1
- package/src/lib/craft-replay.d.ts.map +0 -1
- package/src/lib/craft-replay.js.map +0 -1
- package/src/lib/craft-resolve.d.ts.map +0 -1
- package/src/lib/craft-resolve.js.map +0 -1
- package/src/lib/craft-resource.d.ts.map +0 -1
- package/src/lib/craft-resource.js.map +0 -1
- package/src/lib/craft-route-exceptions.d.ts.map +0 -1
- package/src/lib/craft-route-exceptions.js.map +0 -1
- package/src/lib/craft-route-load-error.d.ts.map +0 -1
- package/src/lib/craft-route-load-error.js.map +0 -1
- package/src/lib/craft-route-meta.d.ts.map +0 -1
- package/src/lib/craft-route-meta.js.map +0 -1
- package/src/lib/craft-route-target.d.ts.map +0 -1
- package/src/lib/craft-route-target.js.map +0 -1
- package/src/lib/craft-router-outlet.d.ts.map +0 -1
- package/src/lib/craft-router-outlet.js.map +0 -1
- package/src/lib/craft-router-tokens.d.ts.map +0 -1
- package/src/lib/craft-router-tokens.js.map +0 -1
- package/src/lib/craft-router-trace.d.ts.map +0 -1
- package/src/lib/craft-router-trace.js.map +0 -1
- package/src/lib/craft-router.d.ts.map +0 -1
- package/src/lib/craft-router.js.map +0 -1
- package/src/lib/craft-routes.d.ts.map +0 -1
- package/src/lib/craft-routes.js.map +0 -1
- package/src/lib/craft-service.d.ts.map +0 -1
- package/src/lib/craft-service.js.map +0 -1
- package/src/lib/craft-service.shared.d.ts.map +0 -1
- package/src/lib/craft-service.shared.js.map +0 -1
- package/src/lib/craft-settled.d.ts.map +0 -1
- package/src/lib/craft-settled.js.map +0 -1
- package/src/lib/craft-ssr.d.ts.map +0 -1
- package/src/lib/craft-ssr.js.map +0 -1
- package/src/lib/craft-state-machine-runtime.d.ts.map +0 -1
- package/src/lib/craft-state-machine-runtime.js.map +0 -1
- package/src/lib/craft-state-machine.d.ts.map +0 -1
- package/src/lib/craft-state-machine.js.map +0 -1
- package/src/lib/craft-target-runtime.d.ts.map +0 -1
- package/src/lib/craft-target-runtime.js.map +0 -1
- package/src/lib/craft-transfer-snapshot.d.ts.map +0 -1
- package/src/lib/craft-transfer-snapshot.js.map +0 -1
- package/src/lib/craft-unique.d.ts.map +0 -1
- package/src/lib/craft-unique.js.map +0 -1
- package/src/lib/craft-until-settled.d.ts.map +0 -1
- package/src/lib/craft-until-settled.js.map +0 -1
- package/src/lib/craft-use.d.ts.map +0 -1
- package/src/lib/craft-use.js.map +0 -1
- package/src/lib/craft-view-transition.d.ts.map +0 -1
- package/src/lib/craft-view-transition.js.map +0 -1
- package/src/lib/dom-event-hook.d.ts.map +0 -1
- package/src/lib/dom-event-hook.js.map +0 -1
- package/src/lib/fn-wrapper.d.ts.map +0 -1
- package/src/lib/fn-wrapper.js.map +0 -1
- package/src/lib/form/craft-field.d.ts.map +0 -1
- package/src/lib/form/craft-field.directive.d.ts.map +0 -1
- package/src/lib/form/craft-field.directive.js.map +0 -1
- package/src/lib/form/craft-field.js.map +0 -1
- package/src/lib/form/field-exception.d.ts.map +0 -1
- package/src/lib/form/field-exception.js.map +0 -1
- package/src/lib/form/field-lens.d.ts.map +0 -1
- package/src/lib/form/field-lens.js.map +0 -1
- package/src/lib/form/insert-form-attributes.d.ts.map +0 -1
- package/src/lib/form/insert-form-attributes.js.map +0 -1
- package/src/lib/form/insert-form-internals.d.ts.map +0 -1
- package/src/lib/form/insert-form-internals.js.map +0 -1
- package/src/lib/form/insert-form-schema.d.ts.map +0 -1
- package/src/lib/form/insert-form-schema.js.map +0 -1
- package/src/lib/form/insert-form-submit.d.ts.map +0 -1
- package/src/lib/form/insert-form-submit.js.map +0 -1
- package/src/lib/form/insert-form.d.ts.map +0 -1
- package/src/lib/form/insert-form.js.map +0 -1
- package/src/lib/form/insert-select-form-tree.d.ts.map +0 -1
- package/src/lib/form/insert-select-form-tree.js.map +0 -1
- package/src/lib/form/insert-sub-form-field.d.ts.map +0 -1
- package/src/lib/form/insert-sub-form-field.js.map +0 -1
- package/src/lib/form/make-form-tree-insert.d.ts.map +0 -1
- package/src/lib/form/make-form-tree-insert.js.map +0 -1
- package/src/lib/form/target-form-field.d.ts.map +0 -1
- package/src/lib/form/target-form-field.js.map +0 -1
- package/src/lib/form/validator.d.ts.map +0 -1
- package/src/lib/form/validator.js.map +0 -1
- package/src/lib/from-event-to-source$.d.ts.map +0 -1
- package/src/lib/from-event-to-source$.js.map +0 -1
- package/src/lib/global-persister-handler.service.d.ts.map +0 -1
- package/src/lib/global-persister-handler.service.js.map +0 -1
- package/src/lib/host/craft-compat.d.ts.map +0 -1
- package/src/lib/host/craft-compat.js.map +0 -1
- package/src/lib/host/craft-dom.d.ts.map +0 -1
- package/src/lib/host/craft-dom.js.map +0 -1
- package/src/lib/host/craft-http.d.ts.map +0 -1
- package/src/lib/host/craft-http.js.map +0 -1
- package/src/lib/host/craft-injector-host.d.ts.map +0 -1
- package/src/lib/host/craft-injector-host.js.map +0 -1
- package/src/lib/host/craft-injector.d.ts.map +0 -1
- package/src/lib/host/craft-injector.js.map +0 -1
- package/src/lib/host/craft-linked-signal.d.ts.map +0 -1
- package/src/lib/host/craft-linked-signal.js.map +0 -1
- package/src/lib/host/craft-router-runtime.d.ts.map +0 -1
- package/src/lib/host/craft-router-runtime.js.map +0 -1
- package/src/lib/host/craft-router-types.d.ts.map +0 -1
- package/src/lib/host/craft-router-types.js.map +0 -1
- package/src/lib/host/craft-signal.d.ts.map +0 -1
- package/src/lib/host/craft-signal.js.map +0 -1
- package/src/lib/host/craft-test-bed.d.ts.map +0 -1
- package/src/lib/host/craft-test-bed.js.map +0 -1
- package/src/lib/host-tag.d.ts.map +0 -1
- package/src/lib/host-tag.js.map +0 -1
- package/src/lib/insert-entities.d.ts.map +0 -1
- package/src/lib/insert-entities.js.map +0 -1
- package/src/lib/insert-noop-typing-anchor.d.ts.map +0 -1
- package/src/lib/insert-noop-typing-anchor.js.map +0 -1
- package/src/lib/insert-pagination-placeholder-data.d.ts.map +0 -1
- package/src/lib/insert-pagination-placeholder-data.js.map +0 -1
- package/src/lib/insert-react-on-mutation.d.ts.map +0 -1
- package/src/lib/insert-react-on-mutation.js.map +0 -1
- package/src/lib/insert-select-resource.d.ts.map +0 -1
- package/src/lib/insert-select-resource.js.map +0 -1
- package/src/lib/insert-select.d.ts.map +0 -1
- package/src/lib/insert-select.js.map +0 -1
- package/src/lib/insert-storage-persister.d.ts.map +0 -1
- package/src/lib/insert-storage-persister.js.map +0 -1
- package/src/lib/insert-typed-pipes.d.ts.map +0 -1
- package/src/lib/insert-typed-pipes.js.map +0 -1
- package/src/lib/linked-source.d.ts.map +0 -1
- package/src/lib/linked-source.js.map +0 -1
- package/src/lib/local-storage-persister.d.ts.map +0 -1
- package/src/lib/local-storage-persister.js.map +0 -1
- package/src/lib/middleware-schema-shared.d.ts.map +0 -1
- package/src/lib/middleware-schema-shared.js.map +0 -1
- package/src/lib/mock-http-request-for-route.d.ts.map +0 -1
- package/src/lib/mock-http-request-for-route.js.map +0 -1
- package/src/lib/mutation.d.ts.map +0 -1
- package/src/lib/mutation.js.map +0 -1
- package/src/lib/on$.d.ts.map +0 -1
- package/src/lib/on$.js.map +0 -1
- package/src/lib/portable-server-function.d.ts.map +0 -1
- package/src/lib/portable-server-function.js.map +0 -1
- package/src/lib/preserved-resource.d.ts.map +0 -1
- package/src/lib/preserved-resource.js.map +0 -1
- package/src/lib/primitive-method-runtime-context.d.ts.map +0 -1
- package/src/lib/primitive-method-runtime-context.js.map +0 -1
- package/src/lib/primitive-resource-runtime-context.d.ts.map +0 -1
- package/src/lib/primitive-resource-runtime-context.js.map +0 -1
- package/src/lib/query-params.d.ts.map +0 -1
- package/src/lib/query-params.js.map +0 -1
- package/src/lib/query.core.d.ts.map +0 -1
- package/src/lib/query.core.js.map +0 -1
- package/src/lib/query.d.ts.map +0 -1
- package/src/lib/query.js.map +0 -1
- package/src/lib/reactive-read.d.ts.map +0 -1
- package/src/lib/reactive-read.js.map +0 -1
- package/src/lib/resource-by-id.d.ts.map +0 -1
- package/src/lib/resource-by-id.js.map +0 -1
- package/src/lib/resource-exception.d.ts.map +0 -1
- package/src/lib/resource-exception.js.map +0 -1
- package/src/lib/route-checked-di.d.ts.map +0 -1
- package/src/lib/route-checked-di.js.map +0 -1
- package/src/lib/schema-validation.d.ts.map +0 -1
- package/src/lib/schema-validation.js.map +0 -1
- package/src/lib/send-context-to-ai.d.ts.map +0 -1
- package/src/lib/send-context-to-ai.js.map +0 -1
- package/src/lib/send-context-to-ai.tokens.d.ts.map +0 -1
- package/src/lib/send-context-to-ai.tokens.js.map +0 -1
- package/src/lib/server-function-client.d.ts.map +0 -1
- package/src/lib/server-function-client.js.map +0 -1
- package/src/lib/server-function-contract.d.ts.map +0 -1
- package/src/lib/server-function-contract.js.map +0 -1
- package/src/lib/server-function-middleware.d.ts.map +0 -1
- package/src/lib/server-function-middleware.js.map +0 -1
- package/src/lib/server-function.d.ts.map +0 -1
- package/src/lib/server-function.js.map +0 -1
- package/src/lib/server-layer.d.ts.map +0 -1
- package/src/lib/server-layer.js.map +0 -1
- package/src/lib/server.d.ts.map +0 -1
- package/src/lib/server.js.map +0 -1
- package/src/lib/setup-craft-service-test.d.ts.map +0 -1
- package/src/lib/setup-craft-service-test.js.map +0 -1
- package/src/lib/setup-craft-service-testing-by-register.d.ts.map +0 -1
- package/src/lib/setup-craft-service-testing-by-register.js.map +0 -1
- package/src/lib/signal-proxy.d.ts.map +0 -1
- package/src/lib/signal-proxy.js.map +0 -1
- package/src/lib/signal-source.d.ts.map +0 -1
- package/src/lib/signal-source.js.map +0 -1
- package/src/lib/source$.d.ts.map +0 -1
- package/src/lib/source$.js.map +0 -1
- package/src/lib/source-from-event.d.ts.map +0 -1
- package/src/lib/source-from-event.js.map +0 -1
- package/src/lib/stacked-source.d.ts.map +0 -1
- package/src/lib/stacked-source.js.map +0 -1
- package/src/lib/standard-schema.d.ts.map +0 -1
- package/src/lib/standard-schema.js.map +0 -1
- package/src/lib/state-method-runtime-context.d.ts.map +0 -1
- package/src/lib/state-method-runtime-context.js.map +0 -1
- package/src/lib/state.d.ts.map +0 -1
- package/src/lib/state.js.map +0 -1
- package/src/lib/storage-persister.service.d.ts.map +0 -1
- package/src/lib/storage-persister.service.js.map +0 -1
- package/src/lib/take-app-snapshot.d.ts.map +0 -1
- package/src/lib/take-app-snapshot.js.map +0 -1
- package/src/lib/template-trace.d.ts.map +0 -1
- package/src/lib/template-trace.js.map +0 -1
- package/src/lib/temporal-runtime.d.ts.map +0 -1
- package/src/lib/temporal-runtime.js.map +0 -1
- package/src/lib/to-source.d.ts.map +0 -1
- package/src/lib/to-source.js.map +0 -1
- package/src/lib/util/craft-resource-ref.d.ts.map +0 -1
- package/src/lib/util/craft-resource-ref.js.map +0 -1
- package/src/lib/util/craft-resource-status.d.ts.map +0 -1
- package/src/lib/util/craft-resource-status.js.map +0 -1
- package/src/lib/util/entities-util.d.ts.map +0 -1
- package/src/lib/util/entities-util.js.map +0 -1
- package/src/lib/util/explicit-effect.d.ts.map +0 -1
- package/src/lib/util/explicit-effect.js.map +0 -1
- package/src/lib/util/extract-signal-props-and-methods.d.ts.map +0 -1
- package/src/lib/util/extract-signal-props-and-methods.js.map +0 -1
- package/src/lib/util/method-trigger-nonce.d.ts.map +0 -1
- package/src/lib/util/method-trigger-nonce.js.map +0 -1
- package/src/lib/util/persister.type.d.ts.map +0 -1
- package/src/lib/util/persister.type.js.map +0 -1
- package/src/lib/util/persister.util.d.ts.map +0 -1
- package/src/lib/util/persister.util.js.map +0 -1
- package/src/lib/util/react-on-mutation-effect.d.ts.map +0 -1
- package/src/lib/util/react-on-mutation-effect.js.map +0 -1
- package/src/lib/util/resource-by-id-changes-tracker.util.d.ts.map +0 -1
- package/src/lib/util/resource-by-id-changes-tracker.util.js.map +0 -1
- package/src/lib/util/source.type.d.ts.map +0 -1
- package/src/lib/util/source.type.js.map +0 -1
- package/src/lib/util/types/access-type-object-property-by-dotted-path.type.d.ts.map +0 -1
- package/src/lib/util/types/access-type-object-property-by-dotted-path.type.js.map +0 -1
- package/src/lib/util/types/boolean-or-mapper-fn-by-path-by-id.type.d.ts.map +0 -1
- package/src/lib/util/types/boolean-or-mapper-fn-by-path-by-id.type.js.map +0 -1
- package/src/lib/util/types/boolean-or-mapper-fn-by-path.type.d.ts.map +0 -1
- package/src/lib/util/types/boolean-or-mapper-fn-by-path.type.js.map +0 -1
- package/src/lib/util/types/brand.d.ts.map +0 -1
- package/src/lib/util/types/brand.js.map +0 -1
- package/src/lib/util/types/object-deep-path-mapper.type.d.ts.map +0 -1
- package/src/lib/util/types/object-deep-path-mapper.type.js.map +0 -1
- package/src/lib/util/types/resource-by-id-config.type.d.ts.map +0 -1
- package/src/lib/util/types/resource-by-id-config.type.js.map +0 -1
- package/src/lib/util/types/resource-with-params-or-params-fn.type.d.ts.map +0 -1
- package/src/lib/util/types/resource-with-params-or-params-fn.type.js.map +0 -1
- package/src/lib/util/types/shared.type.d.ts.map +0 -1
- package/src/lib/util/types/shared.type.js.map +0 -1
- package/src/lib/util/types/util.d.ts.map +0 -1
- package/src/lib/util/types/util.js.map +0 -1
- package/src/lib/util/types/util.type.d.ts.map +0 -1
- package/src/lib/util/types/util.type.js.map +0 -1
- package/src/lib/util/update-state.util.d.ts.map +0 -1
- package/src/lib/util/update-state.util.js.map +0 -1
- package/src/lib/util/util.d.ts.map +0 -1
- package/src/lib/util/util.js.map +0 -1
- package/src/lib/util/util.type.d.ts.map +0 -1
- package/src/lib/util/util.type.js.map +0 -1
- package/src/lib/yieldable.d.ts.map +0 -1
- package/src/lib/yieldable.js.map +0 -1
|
@@ -1,99 +1,64 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import type
|
|
4
|
-
import type {
|
|
5
|
-
import type
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import * as Context from 'effect/Context';
|
|
2
|
+
import * as Effect from 'effect/Effect';
|
|
3
|
+
import { assertMiddlewareId, type CraftMiddlewareResult, type MergeOptionalSchemaOutputs, type MergeSchemaInputs, type MergeSchemaOutputs, type MiddlewareContext, type OverwriteContext } from './middleware-schema-shared.js';
|
|
4
|
+
import type { AnyCraftClientMiddleware, ClientMiddlewareContextOf, ClientMiddlewareProvidesOf, ClientMiddlewareRunContext, CraftClientMiddleware } from './client-function-middleware.js';
|
|
5
|
+
import type { CraftSchema } from './schema-validation.js';
|
|
6
|
+
import type { ServerFunctionToken } from './client-di-requirement.js';
|
|
7
|
+
export { assertMiddlewareId, type CraftMiddlewareResult, type MergeOptionalSchemaOutputs, type MergeSchemaInputs, type MergeSchemaOutputs, type MiddlewareContext, type OverwriteContext, };
|
|
8
|
+
export type MiddlewareSchemasOf<Middleware> = Middleware extends CraftMiddleware<any, infer Schemas, any, any, any, any, any> ? Schemas : readonly [];
|
|
8
9
|
export type MiddlewareSchemasOfAll<Middlewares extends readonly AnyCraftMiddleware[]> = Middlewares extends readonly [
|
|
9
10
|
infer Head extends AnyCraftMiddleware,
|
|
10
11
|
...infer Tail extends readonly AnyCraftMiddleware[]
|
|
11
12
|
] ? readonly [...MiddlewareSchemasOf<Head>, ...MiddlewareSchemasOfAll<Tail>] : readonly [];
|
|
12
|
-
export type
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
export type
|
|
23
|
-
export type
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
13
|
+
export type MiddlewareClientContextsOf<Middleware> = Middleware extends CraftMiddleware<any, any, any, any, any, infer ClientSchemas, any> ? ClientSchemas : readonly [];
|
|
14
|
+
export type MiddlewareClientContextsOfAll<Middlewares extends readonly AnyCraftMiddleware[]> = Middlewares extends readonly [
|
|
15
|
+
infer Head extends AnyCraftMiddleware,
|
|
16
|
+
...infer Tail extends readonly AnyCraftMiddleware[]
|
|
17
|
+
] ? readonly [
|
|
18
|
+
...MiddlewareClientContextsOf<Head>,
|
|
19
|
+
...MiddlewareClientContextsOfAll<Tail>
|
|
20
|
+
] : readonly [];
|
|
21
|
+
export type MiddlewareContextOf<Middleware> = Middleware extends CraftMiddleware<any, any, any, infer Context, any, any, any> ? Context : never;
|
|
22
|
+
export type MiddlewareValueOf<Middleware> = Middleware extends CraftMiddleware<any, any, infer Value, any, any, any, any> ? Value : never;
|
|
23
|
+
export type MiddlewareErrorOf<Middleware> = Middleware extends CraftMiddleware<any, any, any, any, infer Error, any, any> ? Error : never;
|
|
24
|
+
export type MiddlewareRequirementsOf<Middleware> = Middleware extends CraftMiddleware<any, any, any, any, any, any, infer Requirements> ? Requirements : never;
|
|
25
|
+
export type MergedMiddlewareContext<Middlewares extends readonly AnyCraftMiddleware[]> = Middlewares extends readonly [
|
|
26
|
+
infer Head extends AnyCraftMiddleware,
|
|
27
|
+
...infer Tail extends readonly AnyCraftMiddleware[]
|
|
28
|
+
] ? OverwriteContext<MiddlewareContextOf<Head>, MergedMiddlewareContext<Tail>> : Record<never, never>;
|
|
29
|
+
export type MergedMiddlewareError<Middlewares extends readonly AnyCraftMiddleware[]> = MiddlewareErrorOf<Middlewares[number]>;
|
|
30
|
+
export type MergedMiddlewareRequirements<Middlewares extends readonly AnyCraftMiddleware[]> = MiddlewareRequirementsOf<Middlewares[number]>;
|
|
31
|
+
export type MiddlewareRunContext<Schemas extends readonly CraftSchema[], ContextIn extends MiddlewareContext> = {
|
|
27
32
|
readonly input: MergeSchemaOutputs<Schemas>;
|
|
28
33
|
readonly context: ContextIn;
|
|
29
|
-
/**
|
|
30
|
-
* Ce que le middleware a déclaré attendre du navigateur, via
|
|
31
|
-
* `clientContext(schema)` dans le `.pipe(...)`, validé par le registre avant l'entrée dans la
|
|
32
|
-
* chaîne. Donnée **non fiable** par nature : c'est précisément ce qu'un
|
|
33
|
-
* middleware d'autorisation est là pour confronter à la vraie session.
|
|
34
|
-
*/
|
|
35
|
-
readonly clientContext: MergeOptionalSchemaOutputs<ClientSchemas>;
|
|
36
|
-
readonly next: MiddlewareNext<Program>;
|
|
37
|
-
/** Résout une dépendance dans le runtime serveur de la server function. */
|
|
38
34
|
readonly resolve: <Value>(token: ServerFunctionToken<Value>) => Value;
|
|
39
35
|
};
|
|
40
|
-
|
|
36
|
+
type ServerMiddlewareProgram<Value, ContextOut extends MiddlewareContext, Error, Requirements> = Effect.Effect<CraftMiddlewareResult<Value, ContextOut>, Error, Requirements>;
|
|
37
|
+
export interface CraftMiddleware<Id extends string = string, Schemas extends readonly CraftSchema[] = readonly CraftSchema[], Value = unknown, ContextOut extends MiddlewareContext = MiddlewareContext, Error = never, ClientSchemas extends readonly CraftSchema[] = readonly CraftSchema[], Requirements = never> {
|
|
41
38
|
readonly kind: 'server-function-middleware';
|
|
42
39
|
readonly id: Id;
|
|
43
40
|
readonly inputs: Schemas;
|
|
44
|
-
/** Schémas du contexte client exigés, dépendances comprises. */
|
|
45
41
|
readonly clientContexts: ClientSchemas;
|
|
46
42
|
readonly dependencies: readonly AnyCraftMiddleware[];
|
|
47
|
-
readonly run: (context: MiddlewareRunContext<Schemas, MiddlewareContext
|
|
48
|
-
|
|
43
|
+
readonly run: (context: MiddlewareRunContext<Schemas, MiddlewareContext>) => ServerMiddlewareProgram<Value, ContextOut, Error, Requirements>;
|
|
44
|
+
[Symbol.iterator](): {
|
|
45
|
+
next(...args: ReadonlyArray<any>): IteratorResult<Effect.Effect<Value, Error, Requirements>, Value>;
|
|
46
|
+
};
|
|
49
47
|
readonly __contextOut?: ContextOut;
|
|
50
|
-
|
|
51
|
-
readonly
|
|
48
|
+
readonly __value?: Value;
|
|
49
|
+
readonly __error?: Error;
|
|
50
|
+
readonly __requirements?: Requirements;
|
|
52
51
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
*/
|
|
57
|
-
export type PortableServerMiddleware<Program = unknown, Id extends string = string, Schemas extends readonly CraftSchema[] = readonly CraftSchema[], ContextOut extends MiddlewareContext = MiddlewareContext, Error = unknown, Requirements = unknown, ClientSchemas extends readonly CraftSchema[] = readonly CraftSchema[]> = CraftMiddleware<Id, Schemas, ContextOut, Error, Requirements, ClientSchemas, Program>;
|
|
58
|
-
export declare function portableServerMiddleware<const Id extends string, Program>(id: Id, run: (context: MiddlewareRunContext<readonly [], Record<never, never>, readonly [], Program>) => Program): PortableServerMiddleware<Program, Id, readonly [], MiddlewareContext, never, never, readonly []>;
|
|
52
|
+
export type PortableServerMiddleware<Program = unknown, Id extends string = string, Schemas extends readonly CraftSchema[] = readonly CraftSchema[], ContextOut extends MiddlewareContext = MiddlewareContext, Error = unknown, Requirements = unknown, ClientSchemas extends readonly CraftSchema[] = readonly CraftSchema[]> = CraftMiddleware<Id, Schemas, unknown, ContextOut, Error, ClientSchemas, Requirements> & {
|
|
53
|
+
readonly __program?: Program;
|
|
54
|
+
};
|
|
59
55
|
export type AnyCraftMiddleware = CraftMiddleware<string, readonly CraftSchema[], any, any, any, readonly CraftSchema[], any>;
|
|
60
|
-
/**
|
|
61
|
-
* Déclaration portable d'un fragment de contexte attendu du navigateur.
|
|
62
|
-
*
|
|
63
|
-
* Cette valeur est une insertion de déclaration, pas un middleware exécutable :
|
|
64
|
-
* elle enrichit l'état du builder jusqu'au terminal `.server(...)`.
|
|
65
|
-
*/
|
|
66
56
|
export interface CraftClientContextDeclaration<Schema extends CraftSchema = CraftSchema> {
|
|
67
57
|
readonly kind: 'server-function-client-context';
|
|
68
58
|
readonly schema: Schema;
|
|
69
59
|
}
|
|
70
60
|
export type AnyCraftMiddlewarePipeMember = AnyCraftMiddleware | AnyCraftClientMiddleware | CraftClientContextDeclaration;
|
|
71
|
-
/** Déclare dans un pipe de middleware la forme attendue du contexte client. */
|
|
72
61
|
export declare function clientContext<Schema extends CraftSchema>(schema: Schema): CraftClientContextDeclaration<Schema>;
|
|
73
|
-
export type MiddlewareClientContextsOf<Middleware> = Middleware extends CraftMiddleware<any, any, any, any, any, infer ClientSchemas, any> ? ClientSchemas : readonly [];
|
|
74
|
-
/** Schémas de contexte client de toute une chaîne, dépendances comprises. */
|
|
75
|
-
export type MiddlewareClientContextsOfAll<Middlewares extends readonly AnyCraftMiddleware[]> = Middlewares extends readonly [
|
|
76
|
-
infer Head extends AnyCraftMiddleware,
|
|
77
|
-
...infer Tail extends readonly AnyCraftMiddleware[]
|
|
78
|
-
] ? readonly [
|
|
79
|
-
...MiddlewareClientContextsOf<Head>,
|
|
80
|
-
...MiddlewareClientContextsOfAll<Tail>
|
|
81
|
-
] : readonly [];
|
|
82
|
-
export type MiddlewareSchemasOf<Middleware> = Middleware extends CraftMiddleware<any, infer Schemas, any, any, any, any, any> ? Schemas : readonly [];
|
|
83
|
-
export type MiddlewareContextOf<Middleware> = Middleware extends CraftMiddleware<any, any, infer Context, any, any, any, any> ? Context : never;
|
|
84
|
-
export type MiddlewareErrorOf<Middleware> = Middleware extends CraftMiddleware<any, any, any, infer Error, any, any, any> ? Error : never;
|
|
85
|
-
export type MiddlewareRequirementsOf<Middleware> = Middleware extends CraftMiddleware<any, any, any, any, infer Requirements, any, any> ? Requirements : never;
|
|
86
|
-
/**
|
|
87
|
-
* Fold ordonné des contextes : le dernier middleware gagne. Les dépendances
|
|
88
|
-
* transitives sont déjà aplaties dans le contexte publié par chaque middleware,
|
|
89
|
-
* le fold reste donc à un seul niveau.
|
|
90
|
-
*/
|
|
91
|
-
export type MergedMiddlewareContext<Middlewares extends readonly AnyCraftMiddleware[]> = Middlewares extends readonly [
|
|
92
|
-
infer Head extends AnyCraftMiddleware,
|
|
93
|
-
...infer Tail extends readonly AnyCraftMiddleware[]
|
|
94
|
-
] ? OverwriteContext<MiddlewareContextOf<Head>, MergedMiddlewareContext<Tail>> : Record<never, never>;
|
|
95
|
-
export type MergedMiddlewareError<Middlewares extends readonly AnyCraftMiddleware[]> = MiddlewareErrorOf<Middlewares[number]>;
|
|
96
|
-
export type MergedMiddlewareRequirements<Middlewares extends readonly AnyCraftMiddleware[]> = MiddlewareRequirementsOf<Middlewares[number]>;
|
|
97
62
|
type CraftMiddlewareBuilderState = {
|
|
98
63
|
readonly schemas: readonly CraftSchema[];
|
|
99
64
|
readonly contextIn: MiddlewareContext;
|
|
@@ -103,10 +68,7 @@ type CraftMiddlewareBuilderState = {
|
|
|
103
68
|
readonly clientSchemas: readonly CraftSchema[];
|
|
104
69
|
};
|
|
105
70
|
type ApplyCraftMiddlewarePipeMember<State extends CraftMiddlewareBuilderState, Member extends AnyCraftMiddlewarePipeMember> = Member extends AnyCraftMiddleware ? {
|
|
106
|
-
readonly schemas: readonly [
|
|
107
|
-
...State['schemas'],
|
|
108
|
-
...MiddlewareSchemasOf<Member>
|
|
109
|
-
];
|
|
71
|
+
readonly schemas: readonly [...State['schemas'], ...MiddlewareSchemasOf<Member>];
|
|
110
72
|
readonly contextIn: OverwriteContext<State['contextIn'], MiddlewareContextOf<Member>>;
|
|
111
73
|
readonly error: State['error'] | MiddlewareErrorOf<Member>;
|
|
112
74
|
readonly requirements: State['requirements'] | MiddlewareRequirementsOf<Member>;
|
|
@@ -142,12 +104,6 @@ type ApplyCraftMiddlewarePipe<State extends CraftMiddlewareBuilderState, Members
|
|
|
142
104
|
] ? ApplyCraftMiddlewarePipe<ApplyCraftMiddlewarePipeMember<State, Head>, Tail> : State;
|
|
143
105
|
type CraftMiddlewareBuilderFromState<Id extends string, State extends CraftMiddlewareBuilderState> = CraftMiddlewareBuilder<Id, State['schemas'], State['contextIn'], State['error'], State['requirements'], State['provides'], State['clientSchemas']>;
|
|
144
106
|
export interface CraftMiddlewareBuilder<Id extends string, Schemas extends readonly CraftSchema[], ContextIn extends MiddlewareContext, Error, Requirements, Provides extends readonly CraftSchema[] = readonly [], ClientSchemas extends readonly CraftSchema[] = readonly []> {
|
|
145
|
-
/**
|
|
146
|
-
* Accumule des middleware et des déclarations dans l'état du builder.
|
|
147
|
-
* Chaque membre enrichit ce que le terminal `.server(...)` recevra : un
|
|
148
|
-
* middleware ajoute ses entrées, son contexte et ses dépendances ;
|
|
149
|
-
* `clientContext(schema)` ajoute une forme attendue du navigateur.
|
|
150
|
-
*/
|
|
151
107
|
readonly pipe: <const Members extends readonly AnyCraftMiddlewarePipeMember[]>(...members: Members) => CraftMiddlewareBuilderFromState<Id, ApplyCraftMiddlewarePipe<{
|
|
152
108
|
readonly schemas: Schemas;
|
|
153
109
|
readonly contextIn: ContextIn;
|
|
@@ -156,67 +112,28 @@ export interface CraftMiddlewareBuilder<Id extends string, Schemas extends reado
|
|
|
156
112
|
readonly provides: Provides;
|
|
157
113
|
readonly clientSchemas: ClientSchemas;
|
|
158
114
|
}, Members>>;
|
|
159
|
-
/**
|
|
160
|
-
* Déclare une dépendance : son contexte, ses schémas et ses canaux sont
|
|
161
|
-
* hérités. Les deux familles sont acceptées, mais pas mélangées : le
|
|
162
|
-
* terminal (`.server` ou `.client`) refuse une dépendance de l'autre famille.
|
|
163
|
-
*/
|
|
164
115
|
readonly use: {
|
|
165
116
|
<Middleware extends AnyCraftMiddleware>(middleware: Middleware): CraftMiddlewareBuilder<Id, readonly [...Schemas, ...MiddlewareSchemasOf<Middleware>], OverwriteContext<ContextIn, MiddlewareContextOf<Middleware>>, Error | MiddlewareErrorOf<Middleware>, Requirements | MiddlewareRequirementsOf<Middleware>, Provides, readonly [...ClientSchemas, ...MiddlewareClientContextsOf<Middleware>]>;
|
|
166
|
-
<Middleware extends AnyCraftClientMiddleware>(middleware: Middleware): CraftMiddlewareBuilder<Id, Schemas,
|
|
117
|
+
<Middleware extends AnyCraftClientMiddleware>(middleware: Middleware): CraftMiddlewareBuilder<Id, Schemas, ContextIn, Error, Requirements, readonly [...Provides, ...ClientMiddlewareProvidesOf<Middleware>], ClientSchemas>;
|
|
167
118
|
};
|
|
168
|
-
/** Ajoute un fragment d'input, fusionné dans celui de la server function. */
|
|
169
119
|
readonly input: <Schema extends CraftSchema>(schema: Schema) => CraftMiddlewareBuilder<Id, readonly [...Schemas, Schema], ContextIn, Error, Requirements, Provides, ClientSchemas>;
|
|
170
|
-
/**
|
|
171
|
-
* Déclare ce que ce middleware **serveur** attend du navigateur.
|
|
172
|
-
*
|
|
173
|
-
* Le schéma remonte dans le contexte client attendu par toute server function
|
|
174
|
-
* qui l'utilise — même mécanique que la fusion des schémas d'input. Le
|
|
175
|
-
* registre le valide en amont de la chaîne, et le middleware le lit sous
|
|
176
|
-
* `clientContext`, séparé de `context` : c'est une déclaration du client, à
|
|
177
|
-
* confronter à la session, jamais à accepter telle quelle.
|
|
178
|
-
*/
|
|
179
120
|
readonly clientContext: <Schema extends CraftSchema>(schema: Schema) => CraftMiddlewareBuilder<Id, Schemas, ContextIn, Error, Requirements, Provides, readonly [...ClientSchemas, Schema]>;
|
|
180
|
-
/**
|
|
181
|
-
* Déclare ce qu'un middleware **client** publie dans le contexte transporté.
|
|
182
|
-
* Ce schéma est le contrat lisible par le serveur : il valide la sortie de la
|
|
183
|
-
* chaîne côté navigateur, et c'est lui que le graphe d'architecture compare
|
|
184
|
-
* au `clientContext` attendu par la server function.
|
|
185
|
-
*/
|
|
186
121
|
readonly provides: <Schema extends CraftSchema>(schema: Schema) => CraftMiddlewareBuilder<Id, Schemas, ContextIn, Error, Requirements, readonly [...Provides, Schema], ClientSchemas>;
|
|
187
|
-
readonly server:
|
|
188
|
-
|
|
189
|
-
* Forme courte : un enrichissement direct est fusionné puis la chaîne
|
|
190
|
-
* continue automatiquement. Pour un programme Effect, utiliser la
|
|
191
|
-
* surcharge suivante et appeler `next()`.
|
|
192
|
-
*/
|
|
193
|
-
<ContextOut extends MiddlewareContext>(run: (context: MiddlewareRunContext<Schemas, ContextIn, ClientSchemas>) => MiddlewareDirectResult<ContextOut>): CraftMiddleware<Id, Schemas, OverwriteContext<ContextIn, ContextOut>, Error, Requirements, ClientSchemas, MiddlewareDirectResult<ContextOut>>;
|
|
194
|
-
<ContextOut extends MiddlewareContext, RunError, RunRequirements>(run: (context: MiddlewareRunContext<Schemas, ContextIn, ClientSchemas>) => Effect.Effect<MiddlewareResult<ContextOut>, RunError, RunRequirements>): CraftMiddleware<Id, Schemas, OverwriteContext<ContextIn, ContextOut>, Error | Exclude<RunError, MiddlewareDownstreamError>, Requirements | RunRequirements, ClientSchemas, Effect.Effect<unknown, Error | RunError, Requirements | RunRequirements>>;
|
|
195
|
-
};
|
|
196
|
-
/**
|
|
197
|
-
* Terminal client : `run` est un générateur craft nu, drivé par le runtime
|
|
198
|
-
* craft (le même que les guards), et non un Effect.
|
|
199
|
-
*/
|
|
200
|
-
readonly client: <ContextOut extends MiddlewareContext>(run: (context: ClientMiddlewareRunContext<ContextIn>) => Generator<unknown, MiddlewareResult<ContextOut>, unknown>) => CraftClientMiddleware<Id, Provides, OverwriteContext<ContextIn, ContextOut>>;
|
|
122
|
+
readonly server: <Value, ContextOut extends MiddlewareContext = Record<never, never>, RunError = never, RunRequirements = never>(run: (context: MiddlewareRunContext<Schemas, ContextIn>) => ServerMiddlewareProgram<Value, ContextOut, RunError, RunRequirements>) => CraftMiddleware<Id, Schemas, Value, OverwriteContext<ContextIn, ContextOut>, Error | RunError, ClientSchemas, Requirements | RunRequirements>;
|
|
123
|
+
readonly client: <ContextOut extends MiddlewareContext>(run: (context: ClientMiddlewareRunContext<ContextIn>) => Generator<unknown, ContextOut, unknown>) => CraftClientMiddleware<Id, Provides, OverwriteContext<ContextIn, ContextOut>>;
|
|
201
124
|
}
|
|
202
125
|
export declare function craftMiddleware<const Id extends string>(id: Id): CraftMiddlewareBuilder<Id, readonly [], Record<never, never>, never, never, readonly [], readonly []>;
|
|
203
126
|
export declare function isCraftMiddleware(value: unknown): value is AnyCraftMiddleware;
|
|
204
|
-
/** Aplatit les dépendances (profondeur d'abord) et déduplique par identifiant. */
|
|
205
127
|
export declare function flattenMiddlewares(middlewares: readonly AnyCraftMiddleware[]): readonly AnyCraftMiddleware[];
|
|
206
|
-
/** Schémas d'input collectés le long de la chaîne, dédupliqués, contrat en tête. */
|
|
207
128
|
export declare function collectMiddlewareSchemas(contractInput: CraftSchema, middlewares: readonly AnyCraftMiddleware[]): readonly CraftSchema[];
|
|
208
|
-
/** Même mécanique, appliquée au canal du contexte client. */
|
|
209
129
|
export declare function collectMiddlewareClientContextSchemas(contractClientContext: CraftSchema | undefined, middlewares: readonly AnyCraftMiddleware[]): readonly CraftSchema[];
|
|
210
130
|
export type MiddlewareChainHandler = (context: {
|
|
211
131
|
readonly input: unknown;
|
|
212
132
|
readonly context: MiddlewareContext;
|
|
213
133
|
}) => unknown;
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
*/
|
|
221
|
-
export declare function runMiddlewareChain(middlewares: readonly AnyCraftMiddleware[], input: unknown, handler: MiddlewareChainHandler, clientContext?: MiddlewareContext, resolve?: <Value>(token: ServerFunctionToken<Value>) => Value): unknown;
|
|
222
|
-
//# sourceMappingURL=server-function-middleware.d.ts.map
|
|
134
|
+
export type MiddlewareExecutionScope = {
|
|
135
|
+
readonly execute: (middleware: AnyCraftMiddleware) => Effect.Effect<unknown, unknown, unknown>;
|
|
136
|
+
readonly context: MiddlewareContext;
|
|
137
|
+
};
|
|
138
|
+
export declare const MiddlewareExecutionScope: Context.Service<MiddlewareExecutionScope, MiddlewareExecutionScope>;
|
|
139
|
+
export declare function runMiddlewareChain(middlewares: readonly AnyCraftMiddleware[], input: unknown, handler: MiddlewareChainHandler, _clientContext?: MiddlewareContext, resolve?: <Value>(token: ServerFunctionToken<Value>) => Value): Effect.Effect<unknown, unknown, unknown>;
|
|
@@ -1,22 +1,10 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as Context from 'effect/Context';
|
|
2
|
+
import * as Effect from 'effect/Effect';
|
|
3
|
+
import { assertMiddlewareId, flattenMiddlewareGraph, } from './middleware-schema-shared.js';
|
|
4
|
+
import { createClientMiddlewareYieldable } from './client-function-middleware.js';
|
|
2
5
|
export { assertMiddlewareId, };
|
|
3
|
-
export function portableServerMiddleware(id, run) {
|
|
4
|
-
assertMiddlewareId(id);
|
|
5
|
-
return Object.freeze({
|
|
6
|
-
kind: 'server-function-middleware',
|
|
7
|
-
id,
|
|
8
|
-
inputs: [],
|
|
9
|
-
clientContexts: [],
|
|
10
|
-
dependencies: [],
|
|
11
|
-
run,
|
|
12
|
-
});
|
|
13
|
-
}
|
|
14
|
-
/** Déclare dans un pipe de middleware la forme attendue du contexte client. */
|
|
15
6
|
export function clientContext(schema) {
|
|
16
|
-
return Object.freeze({
|
|
17
|
-
kind: 'server-function-client-context',
|
|
18
|
-
schema,
|
|
19
|
-
});
|
|
7
|
+
return Object.freeze({ kind: 'server-function-client-context', schema });
|
|
20
8
|
}
|
|
21
9
|
export function craftMiddleware(id) {
|
|
22
10
|
assertMiddlewareId(id);
|
|
@@ -34,30 +22,21 @@ function makeBuilder(id, inputs, dependencies, provides, clientContexts) {
|
|
|
34
22
|
nextClientContexts = [...nextClientContexts, member.schema];
|
|
35
23
|
continue;
|
|
36
24
|
}
|
|
37
|
-
nextInputs =
|
|
38
|
-
member.
|
|
39
|
-
|
|
40
|
-
: nextInputs;
|
|
25
|
+
nextInputs = member.kind === 'server-function-middleware'
|
|
26
|
+
? [...nextInputs, ...member.inputs]
|
|
27
|
+
: nextInputs;
|
|
41
28
|
nextDependencies = [...nextDependencies, member];
|
|
42
|
-
nextProvides =
|
|
43
|
-
member.
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
? [...nextClientContexts, ...member.clientContexts]
|
|
49
|
-
: nextClientContexts;
|
|
29
|
+
nextProvides = member.kind === 'client-function-middleware'
|
|
30
|
+
? [...nextProvides, ...member.provides]
|
|
31
|
+
: nextProvides;
|
|
32
|
+
nextClientContexts = member.kind === 'server-function-middleware'
|
|
33
|
+
? [...nextClientContexts, ...member.clientContexts]
|
|
34
|
+
: nextClientContexts;
|
|
50
35
|
}
|
|
51
36
|
return makeBuilder(id, nextInputs, nextDependencies, nextProvides, nextClientContexts);
|
|
52
37
|
},
|
|
53
38
|
use(middleware) {
|
|
54
|
-
return makeBuilder(id, middleware.kind === 'server-function-middleware'
|
|
55
|
-
? [...inputs, ...middleware.inputs]
|
|
56
|
-
: inputs, [...dependencies, middleware], middleware.kind === 'client-function-middleware'
|
|
57
|
-
? [...provides, ...middleware.provides]
|
|
58
|
-
: provides, middleware.kind === 'server-function-middleware'
|
|
59
|
-
? [...clientContexts, ...middleware.clientContexts]
|
|
60
|
-
: clientContexts);
|
|
39
|
+
return makeBuilder(id, middleware.kind === 'server-function-middleware' ? [...inputs, ...middleware.inputs] : inputs, [...dependencies, middleware], middleware.kind === 'client-function-middleware' ? [...provides, ...middleware.provides] : provides, middleware.kind === 'server-function-middleware' ? [...clientContexts, ...middleware.clientContexts] : clientContexts);
|
|
61
40
|
},
|
|
62
41
|
input(schema) {
|
|
63
42
|
return makeBuilder(id, [...inputs, schema], dependencies, provides, clientContexts);
|
|
@@ -66,40 +45,41 @@ function makeBuilder(id, inputs, dependencies, provides, clientContexts) {
|
|
|
66
45
|
return makeBuilder(id, inputs, dependencies, [...provides, schema], clientContexts);
|
|
67
46
|
},
|
|
68
47
|
clientContext(schema) {
|
|
69
|
-
return makeBuilder(id, inputs, dependencies, provides, [
|
|
70
|
-
...clientContexts,
|
|
71
|
-
schema,
|
|
72
|
-
]);
|
|
48
|
+
return makeBuilder(id, inputs, dependencies, provides, [...clientContexts, schema]);
|
|
73
49
|
},
|
|
74
50
|
server(run) {
|
|
75
|
-
|
|
51
|
+
const middleware = {
|
|
76
52
|
kind: 'server-function-middleware',
|
|
77
53
|
id,
|
|
78
54
|
inputs,
|
|
79
55
|
clientContexts,
|
|
80
56
|
dependencies: assertSameFamily(id, dependencies, 'server-function-middleware'),
|
|
81
57
|
run,
|
|
82
|
-
|
|
58
|
+
*[Symbol.iterator]() {
|
|
59
|
+
const scope = yield* MiddlewareExecutionScope;
|
|
60
|
+
return yield* scope.execute(middleware);
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
return Object.freeze(middleware);
|
|
83
64
|
},
|
|
84
65
|
client(run) {
|
|
85
|
-
|
|
66
|
+
const middleware = {
|
|
86
67
|
kind: 'client-function-middleware',
|
|
87
68
|
id,
|
|
88
69
|
provides,
|
|
89
70
|
dependencies: assertSameFamily(id, dependencies, 'client-function-middleware'),
|
|
90
71
|
run,
|
|
91
|
-
|
|
72
|
+
*[Symbol.iterator]() {
|
|
73
|
+
return yield* createClientMiddlewareYieldable(middleware);
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
return Object.freeze(middleware);
|
|
92
77
|
},
|
|
93
78
|
};
|
|
94
79
|
}
|
|
95
80
|
function isClientContextDeclaration(value) {
|
|
96
81
|
return value.kind === 'server-function-client-context';
|
|
97
82
|
}
|
|
98
|
-
/**
|
|
99
|
-
* Un middleware client et un middleware serveur ne s'exécutent ni au même
|
|
100
|
-
* endroit ni avec le même moteur : les composer serait un contresens, et le
|
|
101
|
-
* runtime ne saurait pas quoi faire de la dépendance étrangère.
|
|
102
|
-
*/
|
|
103
83
|
function assertSameFamily(id, dependencies, kind) {
|
|
104
84
|
for (const dependency of dependencies) {
|
|
105
85
|
if (dependency.kind !== kind) {
|
|
@@ -109,81 +89,81 @@ function assertSameFamily(id, dependencies, kind) {
|
|
|
109
89
|
return dependencies;
|
|
110
90
|
}
|
|
111
91
|
export function isCraftMiddleware(value) {
|
|
112
|
-
return
|
|
113
|
-
value
|
|
114
|
-
value.kind === 'server-function-middleware');
|
|
92
|
+
return typeof value === 'object' && value !== null &&
|
|
93
|
+
value.kind === 'server-function-middleware';
|
|
115
94
|
}
|
|
116
|
-
/** Aplatit les dépendances (profondeur d'abord) et déduplique par identifiant. */
|
|
117
95
|
export function flattenMiddlewares(middlewares) {
|
|
118
96
|
return flattenMiddlewareGraph(middlewares);
|
|
119
97
|
}
|
|
120
|
-
/** Schémas d'input collectés le long de la chaîne, dédupliqués, contrat en tête. */
|
|
121
98
|
export function collectMiddlewareSchemas(contractInput, middlewares) {
|
|
122
99
|
const schemas = [contractInput];
|
|
123
100
|
for (const middleware of flattenMiddlewares(middlewares)) {
|
|
124
|
-
for (const schema of middleware.inputs)
|
|
101
|
+
for (const schema of middleware.inputs)
|
|
125
102
|
if (!schemas.includes(schema))
|
|
126
103
|
schemas.push(schema);
|
|
127
|
-
}
|
|
128
104
|
}
|
|
129
105
|
return schemas;
|
|
130
106
|
}
|
|
131
|
-
/** Même mécanique, appliquée au canal du contexte client. */
|
|
132
107
|
export function collectMiddlewareClientContextSchemas(contractClientContext, middlewares) {
|
|
133
|
-
const schemas = contractClientContext
|
|
134
|
-
? [contractClientContext]
|
|
135
|
-
: [];
|
|
108
|
+
const schemas = contractClientContext ? [contractClientContext] : [];
|
|
136
109
|
for (const middleware of flattenMiddlewares(middlewares)) {
|
|
137
|
-
for (const schema of middleware.clientContexts
|
|
110
|
+
for (const schema of middleware.clientContexts)
|
|
138
111
|
if (!schemas.includes(schema))
|
|
139
112
|
schemas.push(schema);
|
|
140
|
-
}
|
|
141
113
|
}
|
|
142
114
|
return schemas;
|
|
143
115
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
const step = (index, context) => {
|
|
156
|
-
const middleware = chain[index];
|
|
157
|
-
if (!middleware)
|
|
158
|
-
return handler({ input, context });
|
|
159
|
-
const result = middleware.run({
|
|
160
|
-
input: input,
|
|
161
|
-
context,
|
|
162
|
-
clientContext: clientContext,
|
|
163
|
-
resolve,
|
|
164
|
-
next: ((patch) => step(index + 1, { ...context, ...patch.context })),
|
|
165
|
-
});
|
|
166
|
-
if (isMiddlewareContextPatch(result)) {
|
|
167
|
-
return step(index + 1, { ...context, ...result.context });
|
|
116
|
+
export const MiddlewareExecutionScope = Context.Service('craft/server-function-middleware-scope');
|
|
117
|
+
function createMiddlewareExecutionScope(input, resolve) {
|
|
118
|
+
const cache = new Map();
|
|
119
|
+
const running = new Set();
|
|
120
|
+
let context = {};
|
|
121
|
+
const execute = (middleware) => {
|
|
122
|
+
const cached = cache.get(middleware.id);
|
|
123
|
+
if (cached)
|
|
124
|
+
return Effect.succeed(cached.value);
|
|
125
|
+
if (running.has(middleware.id)) {
|
|
126
|
+
return Effect.die(new Error(`Cyclic middleware execution involving "${middleware.id}".`));
|
|
168
127
|
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
128
|
+
return Effect.gen(function* () {
|
|
129
|
+
running.add(middleware.id);
|
|
130
|
+
try {
|
|
131
|
+
const result = yield* middleware.run({ input: input, context: context, resolve });
|
|
132
|
+
const normalized = normalizeMiddlewareResult(result);
|
|
133
|
+
const published = normalized.context ?? {};
|
|
134
|
+
context = { ...context, ...published };
|
|
135
|
+
cache.set(middleware.id, { value: normalized.value, context: published });
|
|
136
|
+
return normalized.value;
|
|
137
|
+
}
|
|
138
|
+
finally {
|
|
139
|
+
running.delete(middleware.id);
|
|
140
|
+
}
|
|
141
|
+
});
|
|
173
142
|
};
|
|
174
|
-
return
|
|
143
|
+
return { execute, get context() { return context; } };
|
|
175
144
|
}
|
|
176
|
-
function
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
145
|
+
function normalizeMiddlewareResult(value) {
|
|
146
|
+
if (typeof value === 'object' && value !== null && 'value' in value) {
|
|
147
|
+
const candidate = value;
|
|
148
|
+
return {
|
|
149
|
+
value: candidate.value,
|
|
150
|
+
context: typeof candidate.context === 'object' && candidate.context !== null
|
|
151
|
+
? candidate.context
|
|
152
|
+
: undefined,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
return { value };
|
|
182
156
|
}
|
|
183
|
-
function
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
157
|
+
export function runMiddlewareChain(middlewares, input, handler, _clientContext = {}, resolve = () => {
|
|
158
|
+
throw new Error('This server middleware requires DI, but no server runtime resolver was provided.');
|
|
159
|
+
}) {
|
|
160
|
+
const chain = flattenMiddlewares(middlewares);
|
|
161
|
+
const scope = createMiddlewareExecutionScope(input, resolve);
|
|
162
|
+
const program = Effect.gen(function* () {
|
|
163
|
+
for (const middleware of chain)
|
|
164
|
+
yield* scope.execute(middleware);
|
|
165
|
+
const result = handler({ input, context: scope.context });
|
|
166
|
+
return Effect.isEffect(result) ? yield* result : result;
|
|
167
|
+
});
|
|
168
|
+
return Effect.provideService(program, MiddlewareExecutionScope, scope);
|
|
188
169
|
}
|
|
189
|
-
//# sourceMappingURL=server-function-middleware.js.map
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { type ServerFunctionContract, type ServerFunctionExposure } from './server-function-contract';
|
|
2
|
-
import type { ServerFunctionPipe, ServerFunctionToken } from './client-di-requirement';
|
|
3
|
-
import { type AnyCraftMiddleware, type MergedMiddlewareContext, type MergedMiddlewareError, type MergedMiddlewareRequirements, type MergeSchemaInputs, type MergeSchemaOutputs, type MiddlewareClientContextsOfAll, type MiddlewareSchemasOf, type MiddlewareSchemasOfAll } from './server-function-middleware';
|
|
4
|
-
import type { MergeOptionalSchemaInputs, MergeOptionalSchemaOutputs } from './middleware-schema-shared';
|
|
5
|
-
import type { AnyServerLayer } from './server-layer';
|
|
6
|
-
import type { CraftSchema } from './schema-validation';
|
|
1
|
+
import { type ServerFunctionContract, type ServerFunctionExposure } from './server-function-contract.js';
|
|
2
|
+
import type { ServerFunctionPipe, ServerFunctionToken } from './client-di-requirement.js';
|
|
3
|
+
import { type AnyCraftMiddleware, type MergedMiddlewareContext, type MergedMiddlewareError, type MergedMiddlewareRequirements, type MergeSchemaInputs, type MergeSchemaOutputs, type MiddlewareClientContextsOfAll, type MiddlewareSchemasOf, type MiddlewareSchemasOfAll } from './server-function-middleware.js';
|
|
4
|
+
import type { MergeOptionalSchemaInputs, MergeOptionalSchemaOutputs } from './middleware-schema-shared.js';
|
|
5
|
+
import type { AnyServerLayer } from './server-layer.js';
|
|
6
|
+
import type { CraftSchema } from './schema-validation.js';
|
|
7
|
+
import type { CraftExceptionResult } from './craft-exception.js';
|
|
7
8
|
import type * as Effect from 'effect/Effect';
|
|
8
9
|
/** Résout un token dans le DI **du serveur**, via le `runtime` du registre. */
|
|
9
10
|
export type ServerFunctionRequired = <Value>(token: ServerFunctionToken<Value>) => Value;
|
|
@@ -34,8 +35,44 @@ export type ServerFunctionHandlerContext<Contract extends ServerFunctionContract
|
|
|
34
35
|
readonly clientContext: MergeOptionalSchemaOutputs<ServerFunctionClientContextSchemas<Contract, Middlewares>>;
|
|
35
36
|
readonly required: ServerFunctionRequired;
|
|
36
37
|
readonly pipes: Pipes;
|
|
38
|
+
/** Aborts when the HTTP client disconnects or the invocation times out. */
|
|
39
|
+
readonly signal: AbortSignal;
|
|
40
|
+
/** Stable correlation id; never contains request payload data. */
|
|
41
|
+
readonly requestId?: string;
|
|
37
42
|
};
|
|
38
43
|
export type ServerFunctionHandler<Contract extends ServerFunctionContract<any, any, any>, Pipes extends readonly ServerFunctionPipe[] = readonly ServerFunctionPipe[], Output = unknown, Middlewares extends readonly AnyCraftMiddleware[] = readonly [], Schemas extends readonly CraftSchema[] = readonly [Contract['input']]> = (context: ServerFunctionHandlerContext<Contract, Pipes, Middlewares, Schemas>) => Output;
|
|
44
|
+
/** Payload returned by an HTTP error exposure callback. */
|
|
45
|
+
export type ServerFunctionPublicError = Readonly<{
|
|
46
|
+
readonly code: string;
|
|
47
|
+
readonly status?: number;
|
|
48
|
+
readonly message?: string;
|
|
49
|
+
/** Properties explicitly allowed to cross the HTTP boundary. */
|
|
50
|
+
readonly payload?: Readonly<Record<string, unknown>>;
|
|
51
|
+
}>;
|
|
52
|
+
type EffectErrorOf<Output> = Output extends Effect.Effect<infer _Success, infer Error, infer _Requirements> ? Error : never;
|
|
53
|
+
type TaggedErrorOf<Error> = Extract<Error, {
|
|
54
|
+
readonly _tag: string;
|
|
55
|
+
}>;
|
|
56
|
+
/**
|
|
57
|
+
* The callback sees the business payload, not the transport metadata.
|
|
58
|
+
* Craft exceptions already have a nested `payload`; tagged Effect errors use
|
|
59
|
+
* their own properties as the payload.
|
|
60
|
+
*/
|
|
61
|
+
export type ServerFunctionErrorPayload<Error> = Error extends CraftExceptionResult<any, infer Payload> ? unknown extends Payload ? Error extends {
|
|
62
|
+
readonly _tag: string;
|
|
63
|
+
} ? Omit<Error, '_tag'> : Payload : Payload : Error extends {
|
|
64
|
+
readonly _tag: string;
|
|
65
|
+
} ? Omit<Error, '_tag'> : never;
|
|
66
|
+
export type ServerFunctionErrorExposure<Error> = [
|
|
67
|
+
TaggedErrorOf<Error>
|
|
68
|
+
] extends [never] ? Record<never, never> : {
|
|
69
|
+
readonly [Tag in TaggedErrorOf<Error>['_tag']]: (errorPayload: ServerFunctionErrorPayload<Extract<TaggedErrorOf<Error>, {
|
|
70
|
+
readonly _tag: Tag;
|
|
71
|
+
}>>) => ServerFunctionPublicError;
|
|
72
|
+
};
|
|
73
|
+
type ServerFunctionErrorExposureOf<Output> = ServerFunctionErrorExposure<EffectErrorOf<Output>>;
|
|
74
|
+
/** Compile-time marker added only after `.exposeErrors(...)` was called. */
|
|
75
|
+
export declare const SERVER_FUNCTION_ERRORS_EXPOSED: unique symbol;
|
|
39
76
|
export type ServerFunctionDefinition<Contract extends ServerFunctionContract<any, any, any> = ServerFunctionContract, Pipes extends readonly ServerFunctionPipe[] = readonly ServerFunctionPipe[], Output = unknown, Middlewares extends readonly AnyCraftMiddleware[] = readonly AnyCraftMiddleware[]> = {
|
|
40
77
|
readonly kind: 'server-function';
|
|
41
78
|
/** Selects whether the registry must hand the result to an opaque adapter. */
|
|
@@ -54,12 +91,26 @@ export type ServerFunctionDefinition<Contract extends ServerFunctionContract<any
|
|
|
54
91
|
/** Idem pour le contexte client attendu du navigateur. */
|
|
55
92
|
readonly clientContextSchemas: readonly CraftSchema[];
|
|
56
93
|
readonly handler: ServerFunctionHandler<Contract, Pipes, Output, Middlewares>;
|
|
94
|
+
readonly errorExposure?: ServerFunctionErrorExposureOf<Output>;
|
|
95
|
+
exposeErrors(exposure: ServerFunctionErrorExposureOf<Output>): ServerFunctionDefinition<Contract, Pipes, Output, Middlewares>;
|
|
57
96
|
readonly invoke: (input: unknown, runtime?: ServerFunctionRuntime, clientContext?: Record<string, unknown>) => Output | Promise<Output>;
|
|
58
97
|
};
|
|
98
|
+
/** A definition that explicitly chose its HTTP error exposure policy. */
|
|
99
|
+
export type ExposedServerFunctionDefinition<Contract extends ServerFunctionContract<any, any, any> = ServerFunctionContract, Pipes extends readonly ServerFunctionPipe[] = readonly ServerFunctionPipe[], Output = unknown, Middlewares extends readonly AnyCraftMiddleware[] = readonly AnyCraftMiddleware[]> = Omit<ServerFunctionDefinition<Contract, Pipes, Output, Middlewares>, 'errorExposure' | 'exposeErrors'> & {
|
|
100
|
+
readonly errorExposure: ServerFunctionErrorExposureOf<Output>;
|
|
101
|
+
exposeErrors(exposure: ServerFunctionErrorExposureOf<Output>): ExposedServerFunctionDefinition<Contract, Pipes, Output, Middlewares>;
|
|
102
|
+
readonly [SERVER_FUNCTION_ERRORS_EXPOSED]: true;
|
|
103
|
+
};
|
|
104
|
+
/** Definition returned by `.handler(...)`, before the exposure policy exists. */
|
|
105
|
+
export type UnexposedServerFunctionDefinition<Contract extends ServerFunctionContract<any, any, any> = ServerFunctionContract, Pipes extends readonly ServerFunctionPipe[] = readonly ServerFunctionPipe[], Output = unknown, Middlewares extends readonly AnyCraftMiddleware[] = readonly AnyCraftMiddleware[]> = Omit<ServerFunctionDefinition<Contract, Pipes, Output, Middlewares>, 'exposeErrors'> & {
|
|
106
|
+
exposeErrors(exposure: ServerFunctionErrorExposureOf<Output>): ExposedServerFunctionDefinition<Contract, Pipes, Output, Middlewares>;
|
|
107
|
+
};
|
|
59
108
|
/** Vrai dès que la fonction attend un contexte du navigateur. */
|
|
60
109
|
export declare function requiresClientContext(definition: ServerFunctionDefinition<any, any, any, any>): boolean;
|
|
61
110
|
export type ServerFunctionRuntime = {
|
|
62
111
|
readonly resolve?: <Value>(token: ServerFunctionToken<Value>) => Value;
|
|
112
|
+
readonly signal?: AbortSignal;
|
|
113
|
+
readonly requestId?: string;
|
|
63
114
|
};
|
|
64
115
|
/**
|
|
65
116
|
* Dès qu'un middleware est branché, le handler doit renvoyer un Effect : c'est
|
|
@@ -72,7 +123,7 @@ type ComposedOutput<Middlewares extends readonly AnyCraftMiddleware[], Output> =
|
|
|
72
123
|
export type ServerFunctionBuilder<Contract extends ServerFunctionContract<any, any, any>, Pipes extends readonly ServerFunctionPipe[], Middlewares extends readonly AnyCraftMiddleware[] = readonly [], Schemas extends readonly CraftSchema[] = readonly [Contract['input']]> = {
|
|
73
124
|
readonly pipe: <Pipe extends ServerFunctionPipe>(pipe: Pipe) => ServerFunctionBuilder<Contract, readonly [...Pipes, Pipe], Middlewares, Schemas>;
|
|
74
125
|
readonly use: <Middleware extends AnyCraftMiddleware>(middleware: Middleware) => ServerFunctionBuilder<Contract, Pipes, readonly [...Middlewares, Middleware], readonly [...Schemas, ...MiddlewareSchemasOf<Middleware>]>;
|
|
75
|
-
readonly handler: <Output extends HandlerOutputConstraint<Middlewares>>(handler: ServerFunctionHandler<Contract, Pipes, Output, Middlewares, Schemas>) =>
|
|
126
|
+
readonly handler: <Output extends HandlerOutputConstraint<Middlewares>>(handler: ServerFunctionHandler<Contract, Pipes, Output, Middlewares, Schemas>) => UnexposedServerFunctionDefinition<Contract, Pipes, ComposedOutput<Middlewares, Output>, Middlewares>;
|
|
76
127
|
};
|
|
77
128
|
export declare function serverFunction<const Id extends string, Schema extends CraftSchema>(id: Id, input: Schema): ServerFunctionBuilder<ServerFunctionContract<Schema, 'server', undefined, Id>, readonly []>;
|
|
78
129
|
export declare function serverFunction<const Id extends string, Schema extends CraftSchema, Exposure extends ServerFunctionExposure, OutputSchema extends CraftSchema | undefined = undefined, ClientContextSchema extends CraftSchema | undefined = undefined>(id: Id, input: Schema, options: {
|
|
@@ -111,4 +162,3 @@ export type ServerFunctionFactory<Defaults extends readonly AnyCraftMiddleware[]
|
|
|
111
162
|
};
|
|
112
163
|
export declare function createServerFunctionFactory<const Defaults extends readonly AnyCraftMiddleware[]>(defaultServerMiddlewares: Defaults): ServerFunctionFactory<Defaults>;
|
|
113
164
|
export {};
|
|
114
|
-
//# sourceMappingURL=server-function.d.ts.map
|