import * as Effect from "effect-app/Effect";
import { type HttpHeaders } from "effect-app/http";
import * as Layer from "effect-app/Layer";
import { type GetEffectContext, type RpcContextMap } from "effect-app/rpc/RpcContextMap";
import * as S from "effect-app/Schema";
import { type TypeTestId } from "effect-app/TypeTest";
import { type Yieldable } from "effect/Effect";
import type * as Scope from "effect/Scope";
import * as Stream from "effect/Stream";
import { Rpc, type RpcSerialization } from "effect/unstable/rpc";
export * from "./routing/middleware.js";
export declare const applyRequestTypeInterruptibility: (requestType: "command" | "query", effect: Effect.Effect) => Effect.Effect | Rpc.Wrapper>;
export type AnyRequestModule = S.Top & {
_tag: string;
type: "command" | "query";
stream: boolean;
config: any;
success: S.Top;
error: S.Top;
};
export interface AddAction = {}> {
accum: Accum;
add>(a: A): A extends Handler ? Exclude extends never ? Accum & {
[K in M["_tag"]]: A;
} : AddAction, Accum & {
[K in M["_tag"]]: A;
}> & Accum & {
[K in M["_tag"]]: A;
} : never;
}
declare namespace RequestTypes {
const DECODED: "d";
type DECODED = typeof DECODED;
const RAW: "raw";
type RAW = typeof RAW;
}
type RequestType = (typeof RequestTypes)[keyof typeof RequestTypes];
type GetSuccess = T extends {
success: S.Top;
} ? T["success"] : typeof S.Void;
type GetFailure = T["error"] extends never ? typeof S.Never : T["error"];
type GetSuccessShape = {
d: S.Schema.Type>;
raw: S.Codec.Encoded>;
}[RT];
interface HandlerBase {
new (): {};
_tag: RT;
stack: string;
handler: (req: S.Schema.Type, headers: HttpHeaders.Headers) => Effect.Effect | Stream.Stream;
}
export interface Handler extends HandlerBase, S.Schema.Type> | S.SchemaError, R> {
}
type AnyHandler = Handler;
type FilterRequestModules = {
[K in keyof T as T[K] extends AnyRequestModule ? K : never]: T[K];
};
type EffectMatch, RequestContextMap extends Record, RT extends RequestType, Key extends keyof Resource> = , R2 = never, E = never>(f: (req: S.Schema.Type) => Effect.Effect) => Handler>, Scope.Scope>>;
type StreamMatch, RequestContextMap extends Record, RT extends RequestType, Key extends keyof Resource> = , R2 = never, E = never>(f: (req: S.Schema.Type) => Stream.Stream) => Handler>, Scope.Scope>>;
type Match, RequestContextMap extends Record, RT extends RequestType, Key extends keyof Resource> = Resource[Key] extends {
stream: true;
} ? StreamMatch : EffectMatch;
export type RouteMatcher, Resource extends Record> = {
[Key in keyof FilterRequestModules]: Match & {
success: Resource[Key]["success"];
successRaw: S.Codec>;
error: Resource[Key]["error"];
/**
* Requires the Encoded shape (e.g directly undecoded from DB, so that we don't do multiple Decode/Encode)
*/
raw: Match;
};
};
export declare const skipOnProd: Effect.Effect;
type ProvidesOf = MW extends {
readonly provides: infer P;
} ? P : never;
type RequestContextMapOf = MW extends {
requestContextMap: infer RCM extends Record;
} ? RCM : Record;
type LayerNormalize = L extends Layer.Layer ? Layer.Layer : Layer.Layer;
type LayerSuccess = L extends Layer.Layer ? A : never;
/**
* Middleware tags are typically passed to `makeRpcClient` as the class value, so
* the captured `MW` is a constructor type. Layers carry the *instance* type as
* their success channel. Bridge the two so the constraint compares like-with-like.
*
* Effect middleware classes declare `new(_: never): Shape` which the standard
* `T extends abstract new (...args: any) => infer I` form sometimes fails to
* narrow. Use the `prototype` member instead — it is always the instance type.
*/
type MWService = MW extends {
readonly prototype: infer P;
} ? P : MW;
/**
* Type-level guard: emits a structural mismatch on `Resource` when the middleware
* service identifier extracted from the resource's request classes is not provided
* by the layer passed to `makeRouter`. When `MW` is `never` (no middleware on the
* resource) or already a subtype of the layer's success, this resolves to `unknown`
* and intersects harmlessly with `Resource`.
*/
type EnsureMiddlewareProvided = [MW] extends [never] ? unknown : [MWService] extends [LayerSuccess] ? unknown : {
readonly __middlewareNotProvidedByRouterLayer: {
readonly expected: MWService;
readonly providedByLayer: LayerSuccess;
};
};
type SafeGetEffectContext = RCM extends Record ? GetEffectContext : never;
export declare const makeRouter: = Layer.Layer>(middlewareLive?: Live) => {
matchAll: ;
}>(handlers: T) => Layer.Layer, Layer.Services<(typeof handlers)[keyof typeof handlers]>>;
Router: , MW = Exclude<{ [K in keyof Resource]: Resource[K] extends {
readonly middleware?: infer MW_1;
} ? NonNullable : never; }[keyof Resource], never>>(rsc: Resource & EnsureMiddlewareProvided, options?: {
check?: Effect.Effect;
}) => {
;
effect: (match: ]: (Resource[K] extends infer T ? T extends Resource[K] ? T extends {
stream: true;
} ? (req: S.Schema.Type) => Stream.Stream>, S.SchemaError | S.Schema.Type>, ProvidesOf | SafeGetEffectContext, T["config"]>> : ((req: S.Schema.Type) => Effect.Effect>, S.SchemaError | S.Schema.Type>, ProvidesOf | SafeGetEffectContext, T["config"]>>) | ((req: S.Schema.Type) => Generator>, ProvidesOf | SafeGetEffectContext, T["config"]>>, S.Schema.Type>, never>) : never : never) | (Resource[K] extends infer T_1 ? T_1 extends Resource[K] ? T_1 extends {
stream: true;
} ? {
raw: (req: S.Schema.Type) => Stream.Stream>, S.SchemaError | S.Schema.Type>, ProvidesOf | SafeGetEffectContext, T_1["config"]>>;
} : {
raw: (req: S.Schema.Type) => Generator>, ProvidesOf | SafeGetEffectContext, T_1["config"]>>, S.Codec.Encoded>, never>;
} | {
raw: (req: S.Schema.Type) => Effect.Effect>, S.SchemaError | S.Schema.Type>, ProvidesOf | SafeGetEffectContext, T_1["config"]>>;
} : never : never); }>(impl: Impl) => { [K in keyof Impl & keyof FilterRequestModules]: Handler[K], Impl[K] extends {
raw: any;
} ? RequestTypes.RAW : RequestTypes.DECODED, Exclude Effect.Effect ? R : Impl[K]["raw"] extends (...args: any[]) => Stream.Stream ? R : Impl[K]["raw"] extends (...args: any[]) => Generator> ? R : never : Impl[K] extends (...args: any[]) => Effect.Effect ? R : Impl[K] extends (...args: any[]) => Stream.Stream ? R : Impl[K] extends (...args: any[]) => Generator> ? R : never, SafeGetEffectContext, Resource[K]["config"]> | ProvidesOf>, Scope.Scope>>; }) => Generator, { [K in keyof FilterRequestModules]: AnyHandler; }>;
/** @deprecated */
readonly ಠ_ಠ: never;
}>(make: Make): Layer.Layer | MakeDepsE | Layer.Error>, MakeDepsIn | Layer.Services> | Exclude, MakeDepsOut> | RpcSerialization.RpcSerialization> & {
[TypeTestId]: Make;
};
;
effect: (match: ]: (Resource[K] extends infer T ? T extends Resource[K] ? T extends {
stream: true;
} ? (req: S.Schema.Type) => Stream.Stream>, S.SchemaError | S.Schema.Type>, ProvidesOf | SafeGetEffectContext, T["config"]>> : ((req: S.Schema.Type) => Effect.Effect>, S.SchemaError | S.Schema.Type>, ProvidesOf | SafeGetEffectContext, T["config"]>>) | ((req: S.Schema.Type) => Generator>, ProvidesOf | SafeGetEffectContext, T["config"]>>, S.Schema.Type>, never>) : never : never) | (Resource[K] extends infer T_1 ? T_1 extends Resource[K] ? T_1 extends {
stream: true;
} ? {
raw: (req: S.Schema.Type) => Stream.Stream>, S.SchemaError | S.Schema.Type>, ProvidesOf | SafeGetEffectContext, T_1["config"]>>;
} : {
raw: (req: S.Schema.Type) => Generator>, ProvidesOf | SafeGetEffectContext, T_1["config"]>>, S.Codec.Encoded>, never>;
} | {
raw: (req: S.Schema.Type) => Effect.Effect>, S.SchemaError | S.Schema.Type>, ProvidesOf | SafeGetEffectContext, T_1["config"]>>;
} : never : never); }>(impl: Impl) => { [K in keyof Impl & keyof FilterRequestModules]: Handler[K], Impl[K] extends {
raw: any;
} ? RequestTypes.RAW : RequestTypes.DECODED, Exclude Effect.Effect ? R : Impl[K]["raw"] extends (...args: any[]) => Stream.Stream ? R : Impl[K]["raw"] extends (...args: any[]) => Generator> ? R : never : Impl[K] extends (...args: any[]) => Effect.Effect ? R : Impl[K] extends (...args: any[]) => Stream.Stream ? R : Impl[K] extends (...args: any[]) => Generator> ? R : never, SafeGetEffectContext, Resource[K]["config"]> | ProvidesOf>, Scope.Scope>>; }) => Generator, { [K in keyof FilterRequestModules]: AnyHandler; }>;
}>(make: Make): Layer.Layer | MakeDepsE | Layer.Error>, MakeDepsIn | Layer.Services> | Exclude, MakeDepsOut> | RpcSerialization.RpcSerialization> & {
readonly [TypeTestId]: Make;
};
};
};
export type MakeDeps = Make extends {
readonly dependencies: ReadonlyArray;
} ? Make["dependencies"][number] : never;
export type MakeErrors = Make extends {
readonly effect: (_: any) => Generator>;
} ? never : Make extends {
readonly effect: (_: any) => Generator>;
} ? E : never;
export type MakeContext = Make extends {
readonly effect: (_: any) => Generator>;
} ? never : Make extends {
readonly effect: (_: any) => Generator>;
} ? R : never;
export type MakeHandlers> = Make extends {
readonly effect: (_: any) => Generator;
} ? S : never;
export type MakeDepsE = Layer.Error>;
export type MakeDepsIn = Layer.Services>;
export type MakeDepsOut = Layer.Success>;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGluZy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9yb3V0aW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE9BQU8sS0FBSyxNQUFNLE1BQU0sbUJBQW1CLENBQUE7QUFDM0MsT0FBTyxFQUFFLEtBQUssV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDbEQsT0FBTyxLQUFLLEtBQUssTUFBTSxrQkFBa0IsQ0FBQTtBQUV6QyxPQUFPLEVBQUUsS0FBSyxnQkFBZ0IsRUFBdUIsS0FBSyxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTtBQUM3RyxPQUFPLEtBQUssQ0FBQyxNQUFNLG1CQUFtQixDQUFBO0FBQ3RDLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBRXJELE9BQU8sRUFBRSxLQUFLLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUc5QyxPQUFPLEtBQUssS0FBSyxLQUFLLE1BQU0sY0FBYyxDQUFBO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0sZUFBZSxDQUFBO0FBQ3ZDLE9BQU8sRUFBRSxHQUFHLEVBQVksS0FBSyxnQkFBZ0IsRUFBYSxNQUFNLHFCQUFxQixDQUFBO0FBSXJGLGNBQWMseUJBQXlCLENBQUE7QUFFdkMsZUFBTyxNQUFNLGdDQUFnQyxHQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxlQUN6QyxTQUFTLEdBQUcsT0FBTyxVQUN4QixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLGlFQUNxQyxDQUFBO0FBSXJFLE1BQU0sTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHO0lBQ3JDLElBQUksRUFBRSxNQUFNLENBQUE7SUFDWixJQUFJLEVBQUUsU0FBUyxHQUFHLE9BQU8sQ0FBQTtJQUN6QixNQUFNLEVBQUUsT0FBTyxDQUFBO0lBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQTtJQUNY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