/** * The handle returned from `scopeExit` that allows calling or skipping the provided `onExit` function. * * Calling `.call()` will call the provided `onExit` function immediately, and prevent it from being called again. * * Calling `.skip()` will prevent the `onExit` function from being called. * * If neither `.call()` nor `.skip()` is called, the `onExit` function will be called automatically when the handle is disposed. */ export declare class ScopeExitHandle Promise | void)> { private constructor(); /** Whether the `onExit` function has been called */ get called(): boolean; /** Whether the `onExit` function has been skipped */ get skipped(): boolean; /** * Call the `onExit` function immediately if it has not been called or skipped yet, and prevent it from being called again. */ call(): ReturnType | void; /** Prevent the `onExit` function from being called if it has not been called yet */ skip(): void; [Symbol.dispose](): void; [Symbol.asyncDispose](): Promise; } /** * Create a scope exit handle that will call the provided callback when disposed, to be used with `using` or `await using`. * * For example, this code: * ```typescript * import {scopeExit} from "lifecycle-utils"; * * function example() { * using exitHandle = scopeExit(() => { * console.log("exiting scope"); * }); * console.log("inside scope"); * } * * async function asyncExample() { * await using exitHandle = scopeExit(async () => { * await new Promise((resolve) => setTimeout(resolve, 100)); * console.log("exiting async scope"); * }); * console.log("inside async scope"); * } * * example(); * console.log("example done"); * console.log() * * await asyncExample(); * console.log("asyncExample done"); * ``` * * Will print this: * ``` * inside scope * exiting scope * example done * * inside async scope * exiting async scope * asyncExample done * ``` */ export declare function scopeExit Promise | void)>(onExit: Callback): ScopeExit; export type ScopeExit Promise | void)> = { readonly called: boolean; readonly skipped: boolean; call(): ReturnType | void; skip(): void; } & ((Promise extends ReturnType ? true : false) extends true ? { [Symbol.asyncDispose](): Promise; } : { [Symbol.dispose](): void; }); //# sourceMappingURL=ScopeExit.d.ts.map