import { Atom, AtomSeed, EventStream, EventStreamSeed, MethodDesc, ObservableSeed, Property, PropertySeed, Scope, Subscribe } from "./abstractions";
import { HKT } from "./hkt";
export declare type SubscriptionTransformer = (subscribe: Subscribe) => Subscribe;
export declare type StreamTransformer = SubscriptionTransformer;
export declare type Transformer = {
changes: StreamTransformer;
init: (value: A) => B;
};
export declare type StatefulTransformResult = O extends PropertySeed ? PropertySeed : O extends EventStreamSeed ? EventStreamSeed : never;
export declare type StatefulTransformResultScoped = O extends PropertySeed ? Property : O extends EventStreamSeed ? EventStream : never;
export declare type StatefulUnaryTransformResult = O extends AtomSeed ? AtomSeed : O extends PropertySeed ? PropertySeed : O extends EventStreamSeed ? EventStreamSeed : never;
export declare type StatefulUnaryTransformResultScoped = O extends AtomSeed ? Atom : O extends PropertySeed ? Property : O extends EventStreamSeed ? EventStream : never;
export declare type StatefulUnaryTransformResultFor = O extends AtomSeed ? AtomSeed : O extends PropertySeed ? PropertySeed : O extends EventStreamSeed ? EventStreamSeed : never;
export declare type StatefulUnaryTransformResultScopedFor = O extends AtomSeed ? Atom : O extends PropertySeed ? Property : O extends EventStreamSeed ? EventStream : never;
export interface GenericTransformOp {
(o: In): StatefulUnaryTransformResult;
}
export interface GenericTransformOpScoped {
(o: In): StatefulUnaryTransformResultScoped;
}
export interface BinaryTransformOp {
(o: In): StatefulTransformResult;
}
export interface BinaryTransformOpScoped {
(o: In): StatefulTransformResultScoped;
}
export interface StreamTransformOp {
(seed: EventStreamSeed | EventStream): EventStreamSeed;
}
export interface StreamTransformOpScoped {
(seed: EventStreamSeed | EventStream): EventStream;
}
export declare type In = HKT & ObservableSeed;
export interface UnaryTransformOp {
(o: In): StatefulUnaryTransformResultFor;
}
export interface UnaryTransformOpScoped {
(o: In): StatefulUnaryTransformResultScopedFor;
}
export declare const IdentityTransformer: {
changes: (subscribe: Subscribe) => Subscribe;
init: (value: A_1) => A_1;
};
export declare function transform(desc: MethodDesc, transformer: Transformer): UnaryTransformOp;
export declare function transform(desc: MethodDesc, transformer: Transformer, scope: Scope): UnaryTransformOpScoped;
export declare function transform(desc: MethodDesc, transformer: Transformer): BinaryTransformOp;
export declare function transform(desc: MethodDesc, transformer: Transformer, scope: Scope): BinaryTransformOpScoped;
export declare function transform(desc: MethodDesc, transformer: StreamTransformer): StreamTransformOp;
export declare function transform(desc: MethodDesc, transformer: StreamTransformer, scope: Scope): StreamTransformOpScoped;