import { type NonEmptyArray, type NonEmptyReadonlyArray } from "effect/Array"; import * as Effect from "effect/Effect"; import * as Layer from "effect/Layer"; import * as S from "effect/Schema"; import type * as Scope from "effect/Scope"; import { type Simplify } from "effect/Types"; import { Rpc, type RpcGroup, type RpcSchema } from "effect/unstable/rpc"; import { type HandlersFrom } from "effect/unstable/rpc/RpcGroup"; import * as Context from "../Context.js"; import { type TypeTestId } from "../TypeTest.js"; import { type GetContextConfig, type RequestContextMapTagAny, type RpcContextMap } from "./RpcContextMap.js"; import { type AddMiddleware, type AnyDynamic, type RpcDynamic, type TagClassAny } from "./RpcMiddleware.js"; import * as RpcMiddlewareX from "./RpcMiddleware.js"; type MakeTags = A; export interface MiddlewareMaker, MiddlewareProviders extends ReadonlyArray> extends RpcMiddlewareX.TagClass, MiddlewareMaker.ManyProvided> extends never ? {} : { readonly requires: MakeTags, MiddlewareMaker.ManyProvided>>; }) & (MiddlewareMaker.ManyErrors extends never ? {} : { readonly error: S.Codec>; }) & (MiddlewareMaker.ManyProvided extends never ? {} : { readonly provides: MakeTags>; })>, { provides: MiddlewareMaker.ManyProvided extends never ? never : MakeTags>; requires: Exclude, MiddlewareMaker.ManyProvided> extends never ? never : MakeTags, MiddlewareMaker.ManyProvided>>; }> { readonly layer: Layer.Layer>; readonly requestContext: RequestContextTag; readonly requestContextMap: RequestContextMap; } export interface RequestContextTag> extends Context.Service<"RequestContextConfig", GetContextConfig> { } export declare namespace MiddlewareMaker { type Any = TagClassAny; type ApplyServices = Exclude> | Required; type ApplyManyServices, R> = Exclude; }[number]> | { [K in keyof A]: Required; }[number]; type ManyProvided> = A extends NonEmptyReadonlyArray ? { [K in keyof A]: Provided; }[number] : Provided; type ManyRequired> = A extends NonEmptyReadonlyArray ? { [K in keyof A]: Required; }[number] : Required; type ManyErrors> = A extends NonEmptyReadonlyArray ? { [K in keyof A]: Errors; }[number] : Errors; type Provided = T extends TagClassAny ? T extends { provides: infer _P; } ? _P : never : never; type Errors = T extends TagClassAny ? T extends { error: S.Top; } ? T["error"]["Type"] : never : never; type Required = T extends TagClassAny ? T extends { requires: infer _R; } ? _R : never : never; } type GetDependsOnKeys = MW extends { dependsOn: NonEmptyReadonlyArray; } ? { [K in keyof MW["dependsOn"]]: MW["dependsOn"][K] extends AnyDynamic ? MW["dependsOn"][K]["dynamic"]["key"] : never; }[keyof MW["dependsOn"]] : never; type FilterInDynamicMiddlewares, RequestContextMap extends Record> = { [K in keyof MWs]: MWs[K] extends { dynamic: RpcDynamic; } ? MWs[K] : never; }; type RecursiveHandleMWsSideways; provided: keyof R["rcm"]; middlewares: ReadonlyArray; dmp: any; middlewareR: any; }> = MWs extends [] ? R : MWs extends [infer F, ...infer Rest extends ReadonlyArray] ? F extends MiddlewareMaker.Any ? RecursiveHandleMWsSideways[number]["dynamic"]["key"], GetDependsOnKeys>; middlewares: [...R["middlewares"], F]; dmp: [FilterInDynamicMiddlewares<[F], R["rcm"]>[number]] extends [never] ? R["dmp"] : R["dmp"] & { [U in FilterInDynamicMiddlewares<[F], R["rcm"]>[number] as U["dynamic"]["key"]]: U; }; middlewareR: MiddlewareMaker.ApplyManyServices<[F], R["middlewareR"]>; }> : `Absurd: F must extend MiddlewareMaker.Any` : never; export interface BuildingMiddleware, Provided extends keyof RequestContextMap, Middlewares extends ReadonlyArray, DynamicMiddlewareProviders, out MiddlewareR extends { _tag: string; } = never> { rpc: = {}>(tag: Tag, options?: { readonly payload?: Payload; readonly success?: Success; readonly error?: Error; readonly stream?: Stream; readonly config?: Config; readonly primaryKey?: [Payload] extends [S.Struct.Fields] ? ((payload: Payload extends S.Struct.Fields ? Simplify["Type"]> : Payload["Type"]) => string) : never; }) => Rpc.Rpc : Payload, Stream extends true ? RpcSchema.Stream : Success, Stream extends true ? typeof S.Never : Error> & { readonly config: Config; }; middleware>(...mw: MWs): RecursiveHandleMWsSideways extends infer Res extends { self: any; id: string; rcm: RequestContextMap; provided: keyof RequestContextMap; middlewares: ReadonlyArray; dmp: any; middlewareR: any; } ? MiddlewaresBuilder : never; readonly [TypeTestId]: { missingDynamicMiddlewares: Exclude; missingContext: MiddlewareR; }; } export type MiddlewaresBuilder, Provided extends keyof RequestContextMap = never, Middlewares extends ReadonlyArray = [], DynamicMiddlewareProviders = unknown, MiddlewareR extends { _tag: string; } = never> = BuildingMiddleware & // keyof Omit extends never is true when all the dynamic middlewares are provided (keyof Omit extends never ? [MiddlewareR] extends [never] ? MiddlewareMaker : { new (_: never): {}; } : { new (_: never): {}; }); export declare const Tag: () => (id: Id, rcm: RequestContextMap) => MiddlewaresBuilder; export declare const middlewareGroup: , Middleware extends RpcMiddlewareX.TagClassAny & { readonly requestContext: RequestContextTag; readonly requestContextMap: RequestContextMap; }>(middleware: Middleware) => (group: RpcGroup.RpcGroup) => RpcGroup.RpcGroup> & { toLayerDynamic: >, EX = never, RX = never>(build: Handlers | Effect.Effect) => Layer.Layer>, EX, Exclude | RpcMiddlewareX.HandlersContext, Handlers>>; }; export {}; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlkZGxld2FyZU1ha2VyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnBjL01pZGRsZXdhcmVNYWtlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsS0FBSyxhQUFhLEVBQUUsS0FBSyxxQkFBcUIsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUM3RSxPQUFPLEtBQUssTUFBTSxNQUFNLGVBQWUsQ0FBQTtBQUN2QyxPQUFPLEtBQUssS0FBSyxNQUFNLGNBQWMsQ0FBQTtBQUNyQyxPQUFPLEtBQUssQ0FBQyxNQUFNLGVBQWUsQ0FBQTtBQUNsQyxPQUFPLEtBQUssS0FBSyxLQUFLLE1BQU0sY0FBYyxDQUFBO0FBQzFDLE9BQU8sRUFBRSxLQUFLLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUM1QyxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssUUFBUSxFQUFFLEtBQUssU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDeEUsT0FBTyxFQUFFLEtBQUssWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUE7QUFDaEUsT0FBTyxLQUFLLE9BQU8sTUFBTSxlQUFlLENBQUE7QUFFeEMsT0FBTyxFQUFFLEtBQUssVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDaEQsT0FBTyxFQUFFLEtBQUssZ0JBQWdCLEVBQUUsS0FBSyx1QkFBdUIsRUFBRSxLQUFLLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQzVHLE9BQU8sRUFBRSxLQUFLLGFBQWEsRUFBRSxLQUFLLFVBQVUsRUFBRSxLQUFLLFVBQVUsRUFBd0IsS0FBSyxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUNqSSxPQUFPLEtBQUssY0FBYyxNQUFNLG9CQUFvQixDQUFBO0FBSXBELEtBQUssUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUE7QUFFcEIsTUFBTSxXQUFXLGVBQWUsQ0FDOUIsSUFBSSxFQUNKLEVBQUUsU0FBUyxNQUFNLEVB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LElBQUksTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsR0FDdEQ7U0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUFFLENBQUMsTUFBTSxDQUFDLENBQUE7SUFFOUMsS0FBWSxZQUFZLENBQUMsQ0FBQyxTQUFTLGFBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMscUJBQXFCLENBQUMsV0FBVyxDQUFDLEdBQ3pHO1NBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FBRSxDQUFDLE1BQU0sQ0FBQyxHQUMxQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDdkIsS0FBWSxZQUFZLENBQUMsQ0FBQyxTQUFTLGFBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMscUJBQXFCLENBQUMsV0FBVyxDQUFDLEdBQ3pHO1NBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FBRSxDQUFDLE1BQU0sQ0FBQyxHQUMxQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDdkIsS0FBWSxVQUFVLENBQUMsQ0FBQyxTQUFTLGFBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMscUJBQXFCLENBQUMsV0FBVyxDQUFDLEdBQ3ZHO1NBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FBRSxDQUFDLE1BQU0sQ0FBQyxHQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFFckIsS0FBWSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxXQUFXLEdB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