UNPKG

@sentry/core

Version:
50 lines (47 loc) 1.27 kB
import { resolvedSyncPromise, rejectedSyncPromise } from './syncpromise.js'; import { safeUnref } from './timer.js'; const SENTRY_BUFFER_FULL_ERROR = /* @__PURE__ */ Symbol.for("SentryBufferFullError"); function makePromiseBuffer(limit = 100) { const buffer = /* @__PURE__ */ new Set(); function isReady() { return buffer.size < limit; } function remove(task) { buffer.delete(task); } function add(taskProducer) { if (!isReady()) { return rejectedSyncPromise(SENTRY_BUFFER_FULL_ERROR); } const task = taskProducer(); buffer.add(task); void task.then( () => remove(task), () => remove(task) ); return task; } function drain(timeout) { if (!buffer.size) { return resolvedSyncPromise(true); } const drainPromise = Promise.allSettled(Array.from(buffer)).then(() => true); if (!timeout) { return drainPromise; } const promises = [ drainPromise, new Promise((resolve) => safeUnref(setTimeout(() => resolve(false), timeout))) ]; return Promise.race(promises); } return { get $() { return Array.from(buffer); }, add, drain }; } export { SENTRY_BUFFER_FULL_ERROR, makePromiseBuffer }; //# sourceMappingURL=promisebuffer.js.map