feat: Add hardened error handling and retries (#2451)

- Closes #1830
 - Closes #2099
This commit is contained in:
Dermot Duffy
2026-06-30 17:45:12 -07:00
committed by dermotduffy
parent 4bc787e2b7
commit 47bcce93d3
182 changed files with 7877 additions and 4043 deletions
+8 -14
View File
@@ -1,6 +1,6 @@
import { allPromises } from '../basic';
type InitializationCallback = () => Promise<boolean>;
type InitializationCallback = () => Promise<void>;
/**
* Manages initialization state & calling initializers. There is no guarantee
@@ -12,30 +12,24 @@ export class Initializer {
public async initializeMultipleIfNecessary(
aspects: Record<string, InitializationCallback>,
): Promise<boolean> {
const results = await allPromises(
): Promise<void> {
await allPromises(
Object.entries(aspects),
async ([aspect, options]) => await this.initializeIfNecessary(aspect, options),
);
return results.every(Boolean);
}
public async initializeIfNecessary(
aspect: string,
initializer?: InitializationCallback,
): Promise<boolean> {
): Promise<void> {
if (this._initialized.has(aspect)) {
return true;
return;
}
if (!initializer) {
this._initialized.add(aspect);
return true;
if (initializer) {
await initializer();
}
if (await initializer()) {
this._initialized.add(aspect);
return true;
}
return false;
this._initialized.add(aspect);
}
public uninitialize(aspect: string): void {