UNPKG

rvx

Version:

A signal based rendering library

52 lines 1.27 kB
import { NOOP } from "./internals/noop.js"; import { TEARDOWN_STACK, useStack } from "./internals/stacks.js"; import { isolate } from "./isolate.js"; export { onLeak } from "./internals/stacks.js"; function dispose(hooks) { for (let i = hooks.length - 1; i >= 0; i--) { hooks[i](); } } export function capture(fn) { const hooks = []; try { useStack(TEARDOWN_STACK, hooks, fn); } catch (error) { isolate(dispose, hooks); throw error; } return hooks.length === 0 ? NOOP : () => isolate(dispose, hooks); } export function captureSelf(fn) { let disposed = false; let dispose = NOOP; let value; dispose = capture(() => { value = fn(() => { disposed = true; dispose(); }); }); if (disposed) { dispose(); } return value; } export function uncapture(fn) { return useStack(TEARDOWN_STACK, undefined, fn); } export function teardownOnError(fn) { let value; teardown(capture(() => { value = fn(); })); return value; } export function teardown(hook) { const length = TEARDOWN_STACK.length; if (length > 0) { TEARDOWN_STACK[length - 1]?.push(hook); } } //# sourceMappingURL=lifecycle.js.map