declare type TypeCTXRef = { [key: string]: any; }; export interface ICTXFN { (context: Context): any; } interface Init { (ctxRef?: TypeCTXRef, parentContext?: Context | void): TypeCTXRef | null; } declare type ContextOptions = { use: () => Context | void; set: (value: any) => any; addQueryableProperties: (ctxRef: TypeCTXRef) => TQueryableProperties; init?: Init; }; declare type TQueryableProperties = { [key: string]: true; }; export declare type TCTX = { use: () => Context | void; run: (ctxRef: TypeCTXRef, fn: ICTXFN) => any; bind: (ctxRef: TypeCTXRef, fn: (...args: any[]) => any, ...args: any[]) => (...runTimeArgs: any[]) => any; }; declare class Context { private _parentContext; [key: string]: any; static is(value: any): value is Context; constructor({ use, set, addQueryableProperties, init }: ContextOptions, ctxRef: TypeCTXRef); addLookupProperty(key: string): void; private lookup; private setParentContext; get parentContext(): Context | null; } declare function createContext(init?: Init): { use: () => Context | void; run: (ctxRef: TypeCTXRef, fn: ICTXFN) => any; bind: (ctxRef: TypeCTXRef, fn: (...args: any[]) => any, ...args: any[]) => (...runTimeArgs: any[]) => any; }; export default createContext;