@beignet/core
Version:
Core framework primitives for Beignet
36 lines • 1.29 kB
JavaScript
export const DEFAULT_ERROR_REPORTING_TIMEOUT_MS = 1000;
export class ErrorReportingTimeoutError extends Error {
code = "ERROR_REPORTING_TIMEOUT";
timeoutMs;
constructor(timeoutMs) {
super(`Error reporting timed out after ${timeoutMs}ms.`);
this.name = "ErrorReportingTimeoutError";
this.timeoutMs = timeoutMs;
}
}
export function errorReportingObserverTimeout(timeoutMs) {
return timeoutMs === false || (Number.isFinite(timeoutMs) && timeoutMs > 0)
? timeoutMs
: DEFAULT_ERROR_REPORTING_TIMEOUT_MS;
}
export async function runErrorReportingOperation(operation, timeoutMs = DEFAULT_ERROR_REPORTING_TIMEOUT_MS) {
if (timeoutMs === false)
return operation();
if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {
throw new TypeError("Error reporting timeoutMs must be a positive number.");
}
let timeout;
try {
return await Promise.race([
Promise.resolve().then(operation),
new Promise((_, reject) => {
timeout = setTimeout(() => reject(new ErrorReportingTimeoutError(timeoutMs)), timeoutMs);
}),
]);
}
finally {
if (timeout !== undefined)
clearTimeout(timeout);
}
}
//# sourceMappingURL=internal.js.map