/** * @since 1.0.0 */ import type * as Effect from "effect/Effect" import { dual } from "effect/Function" import type * as Schema from "effect/Schema" import type * as Types from "effect/Types" import * as Procedure from "./Procedure.js" import * as ProcedureList from "./ProcedureList.js" /** * @since 1.0.0 * @category models */ export interface SerializableProcedureList< State, Public extends Schema.TaggedRequest.All, Private extends Schema.TaggedRequest.All, R > extends Effect.Effect> { readonly [ProcedureList.TypeId]: ProcedureList.TypeId readonly initialState: State readonly public: ReadonlyArray> readonly private: ReadonlyArray> readonly identifier: string } /** * @since 1.0.0 * @category constructors */ export const make: ( initialState: State, options?: { readonly identifier?: string } ) => SerializableProcedureList = ProcedureList.make as any /** * @since 1.0.0 * @category combinators */ export const add: { /** * @since 1.0.0 * @category combinators */ < Req extends Schema.TaggedRequest.All, I, ReqR, State, Public extends Schema.TaggedRequest.All, Private extends Schema.TaggedRequest.All, R2 >( schema: Schema.Schema & { readonly _tag: Req["_tag"] }, handler: Procedure.Handler, Types.NoInfer | Types.NoInfer, R2> ): ( self: SerializableProcedureList ) => SerializableProcedureList< State, Req | Public, Private, R | R2 | Schema.SerializableWithResult.Context > /** * @since 1.0.0 * @category combinators */ < State, Public extends Schema.TaggedRequest.All, Private extends Schema.TaggedRequest.All, R, Req extends Schema.TaggedRequest.All, I, ReqR, R2 >( self: SerializableProcedureList, schema: Schema.Schema & { readonly _tag: Req["_tag"] }, handler: Procedure.Handler, Types.NoInfer | Types.NoInfer, R2> ): SerializableProcedureList> } = dual( 3, < State, Public extends Schema.TaggedRequest.All, Private extends Schema.TaggedRequest.All, R, Req extends Schema.TaggedRequest.All, I, ReqR, R2 >( self: SerializableProcedureList, schema: Schema.Schema & { readonly _tag: Req["_tag"] }, handler: Procedure.Handler, Types.NoInfer | Types.NoInfer, R2> ): SerializableProcedureList< State, Req | Public, Private, R | R2 | Schema.SerializableWithResult.Context > => ProcedureList.addProcedure(self, Procedure.makeSerializable()(schema, handler)) as any ) /** * @since 1.0.0 * @category combinators */ export const addPrivate: { /** * @since 1.0.0 * @category combinators */ < Req extends Schema.TaggedRequest.All, I, ReqR, State, Public extends Schema.TaggedRequest.All, Private extends Schema.TaggedRequest.All, R2 >( schema: Schema.Schema & { readonly _tag: Req["_tag"] }, handler: Procedure.Handler, Types.NoInfer | Types.NoInfer, R2> ): ( self: SerializableProcedureList ) => SerializableProcedureList< State, Public, Private | Req, R | R2 | Schema.SerializableWithResult.Context > /** * @since 1.0.0 * @category combinators */ < State, Public extends Schema.TaggedRequest.All, Private extends Schema.TaggedRequest.All, R, Req extends Schema.TaggedRequest.All, I, ReqR, R2 >( self: SerializableProcedureList, schema: Schema.Schema & { readonly _tag: Req["_tag"] }, handler: Procedure.Handler, Types.NoInfer | Types.NoInfer, R2> ): SerializableProcedureList> } = dual( 3, < State, Public extends Schema.TaggedRequest.All, Private extends Schema.TaggedRequest.All, R, Req extends Schema.TaggedRequest.All, I, ReqR, R2 >( self: SerializableProcedureList, schema: Schema.Schema & { readonly _tag: Req["_tag"] }, handler: Procedure.Handler, Types.NoInfer | Types.NoInfer, R2> ): SerializableProcedureList< State, Public, Private | Req, R | R2 | Schema.SerializableWithResult.Context > => ProcedureList.addProcedurePrivate(self, Procedure.makeSerializable()(schema, handler)) as any ) /** * @since 1.0.0 * @category combinators */ export const withInitialState: { /** * @since 1.0.0 * @category combinators */ (initialState: Types.NoInfer): ( self: SerializableProcedureList ) => SerializableProcedureList /** * @since 1.0.0 * @category combinators */ ( self: SerializableProcedureList, initialState: Types.NoInfer ): SerializableProcedureList } = ProcedureList.withInitialState as any