UNPKG

with-defer

Version:

Run a function with an injected go-like defer helper

47 lines (43 loc) 1.13 kB
var __defProp = Object.defineProperty; var __markAsModule = (target) => __defProp(target, "__esModule", {value: true}); var __export = (target, all) => { for (var name in all) __defProp(target, name, {get: all[name], enumerable: true}); }; // src/index.ts __markAsModule(exports); __export(exports, { AggregateError: () => AggregateError, runWithDefer: () => runWithDefer }); // src/error.ts var AggregateError = class extends Error { constructor(errors, message = "") { super(message); this.message = message; this.name = "AggregateError"; this.errors = [...errors]; } }; // src/cleanup.ts async function runWithDefer(func) { const onCleanup = []; const defer = (deferredFn) => { onCleanup.unshift(deferredFn); }; try { return await func(defer); } finally { let errors = []; for (const onCleanupFn of onCleanup) { try { await onCleanupFn(); } catch (err) { errors.push(err); } } if (errors.length) { throw new AggregateError(errors, "One or more exceptions caught while executing deferred clean-up functions"); } } }