import { Stream, Effect, Context, type ManagedRuntime } from 'effect';
import type { ExtractStaticProps, Subscribable } from '@/types';
export type IsEffect<T> = T extends Effect.Effect<infer A, infer E, infer R> ? Effect.Effect<A, E, R> : never;
export declare const createProxy: <T extends Record<PropertyKey, unknown>>(value: T) => Subscribable<NoInfer<T>> & T;
export declare const createProxyStreamMap: <T extends Record<Exclude<PropertyKey, keyof Subscribable<NoInfer<T>>>, unknown>>(proxyState: Subscribable<T> & T, onKeyAccess?: (key: PropertyKey) => void) => Effect.Effect<{ [K in Exclude<keyof T & string, keyof ExtractStaticProps<T>> | Exclude<keyof T & number, keyof ExtractStaticProps<T>> | Exclude<keyof T & symbol, keyof ExtractStaticProps<T>>]: Stream.Stream<NonNullable<T[K]>, never, never>; } & { [K_1 in keyof ExtractStaticProps<T> & PropertyKey]: Stream.Stream<NonNullable<ExtractStaticProps<T>[K_1]>, never, never>; } extends infer T_1 ? { [KeyType in keyof T_1]: T_1[KeyType]; } : never, never, import("effect/Scope").Scope>;
export type PropKey<K extends PropertyKey> = {
    __propKey: K;
};
export declare const enhanceRuntime: <RProps>() => <R, E>(runtime: ManagedRuntime.ManagedRuntime<R, E>) => ManagedRuntime.ManagedRuntime<R | RProps, E>;
export type PropService = Context.TagClassShape<'PropService', never>;
export declare const createGetPropTag: <T extends (...args: any[]) => any>(tag: <const Id extends string>(id: Id) => T) => <C extends Record<PropertyKey, unknown>>() => {
    PropService: T extends (...args: any[]) => infer R ? R extends Context.TagClass<unknown, string, unknown> ? Context.TagClass<PropService, "PropService", { [K in Exclude<keyof C & string, keyof ExtractStaticProps<C>> | Exclude<keyof C & number, keyof ExtractStaticProps<C>> | Exclude<keyof C & symbol, keyof ExtractStaticProps<C>>]: Stream.Stream<NonNullable<C[K]>, never, never>; } & { [K_1 in keyof ExtractStaticProps<C> & PropertyKey]: Stream.Stream<NonNullable<ExtractStaticProps<C>[K_1]>, never, never>; } extends infer T_2 ? { [KeyType in keyof T_2]: T_2[KeyType]; } : never> : never : never;
};
export declare const getPropTag: <C extends Record<PropertyKey, unknown>>() => {
    PropService: Context.TagClass<PropService, "PropService", { [K in Exclude<keyof C & string, keyof ExtractStaticProps<C>> | Exclude<keyof C & number, keyof ExtractStaticProps<C>> | Exclude<keyof C & symbol, keyof ExtractStaticProps<C>>]: Stream.Stream<NonNullable<C[K]>, never, never>; } & { [K_1 in keyof ExtractStaticProps<C> & PropertyKey]: Stream.Stream<NonNullable<ExtractStaticProps<C>[K_1]>, never, never>; } extends infer T_1 ? { [KeyType in keyof T_1]: T_1[KeyType]; } : never>;
};
