///
export type Context = {
[key: string]: any;
};
export type BindCallbackFn = (...args: any[]) => T;
export type RunCallbackFn = (context: Context) => T;
export interface Namespace {
readonly name: string; // Note: this is readonly because changing it does not actually rename it
readonly active: Context; // Note: this is readonly because changing it manually will break functionality
createContext(): Context;
set(key: string, value: T): T;
get(key: string): T | undefined;
run(callback: RunCallbackFn): Context;
runAndReturn(callback: RunCallbackFn): T;
bind(callback: BindCallbackFn, context?: Context): BindCallbackFn;
bindEmitter(emitter: NodeJS.EventEmitter): void;
enter(context: Context): void;
exit(context: Context): void;
}
export function createNamespace(name: string): Namespace;
export function getNamespace(name: string): Namespace | undefined;
export function destroyNamespace(name: string): void;
export function reset(): void;
// declare namespace process {
// var namespaces: ContinuationLocalStorage.Namespace[];
// }