import type { AnyLayer, InferIn, InferOut, Layer } from "./index.js"; /** * Combines one or more layers into a composite layer. * * Layers defined as a tuple are applied from the inside out. This means that * the last layer becomes the innermost layer, while the first layer becomes the * outermost layer. */ export declare const layerTuple: (...layers: LayerChain) => LayerTuple; /** * A combination of multiple layers. * * @see {@link layerTuple} */ export declare class LayerTuple> = InferOut>, In extends InferIn> = InferIn>> implements Layer { private readonly layers; constructor(layers: LayerChain); layer(inner: In): Out; } export type FirstLayer = T[0]; export type LastLayer = T extends readonly [...unknown[], infer U] ? U : FirstLayer; export type LayerChain = Layers & ValidateLayerChain; export type ValidateLayerChain = Layers extends [ infer L1 extends AnyLayer, infer L2 extends AnyLayer, ...infer Rest extends AnyLayer[] ] ? [Layer, InferOut>, ...ValidateLayerChain<[L2, ...Rest]>] : Layers extends [infer Last extends AnyLayer] ? [Layer, InferIn>] : never;