@sentry/core
Version:
Base implementation for all Sentry JavaScript SDKs
50 lines (47 loc) • 1.27 kB
JavaScript
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