diff --git a/.eslintrc.js b/.eslintrc.js index 73c7d4a11cd..ecc336961d9 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -31,7 +31,6 @@ module.exports = { }, ], "no-useless-escape": "warn", // TODO(bkendall): remove, allow to error. - "prefer-promise-reject-errors": "warn", // TODO(bkendall): remove, allow to error. }, overrides: [ { diff --git a/src/emulator/commandUtils.ts b/src/emulator/commandUtils.ts index 4306ca0fa69..06019ec27f1 100644 --- a/src/emulator/commandUtils.ts +++ b/src/emulator/commandUtils.ts @@ -336,7 +336,7 @@ function processKillSignal( res(); } catch (e: unknown) { logger.debug(e as any); - rej(); + rej(getError(e)); } }; } @@ -394,7 +394,11 @@ async function runScript(script: string, extraEnv: Record): Prom return new Promise((resolve, reject) => { proc.on("error", (err: any) => { utils.logWarning(`There was an error running the script: ${JSON.stringify(err)}`); - reject(); + reject( + new FirebaseError("There was an error running the script.", { + original: err instanceof Error ? err : undefined, + }), + ); }); // Due to the async nature of the node child_process library, sometimes @@ -406,7 +410,9 @@ async function runScript(script: string, extraEnv: Record): Prom proc.once("exit", (code, signal) => { if (signal) { utils.logWarning(`Script exited with signal: ${signal}`); - setTimeout(reject, exitDelayMs); + setTimeout(() => { + reject(new FirebaseError(`Script exited with signal: ${signal}`)); + }, exitDelayMs); return; } diff --git a/src/emulator/dataconnectEmulator.ts b/src/emulator/dataconnectEmulator.ts index a0f129604ea..be01789fd0f 100644 --- a/src/emulator/dataconnectEmulator.ts +++ b/src/emulator/dataconnectEmulator.ts @@ -175,7 +175,11 @@ export class DataConnectEmulator implements EmulatorInstance { "dataconnect", "Could not connect to SQL Connect emulator. Check dataconnect-debug.log for more details.", ); - return Promise.reject(); + return Promise.reject( + new FirebaseError( + "Could not connect to SQL Connect emulator. Check dataconnect-debug.log for more details.", + ), + ); } return Promise.resolve(); } diff --git a/src/emulator/eventarcEmulator.ts b/src/emulator/eventarcEmulator.ts index 12bbc5200a8..baf4f622c2a 100644 --- a/src/emulator/eventarcEmulator.ts +++ b/src/emulator/eventarcEmulator.ts @@ -168,7 +168,9 @@ export class EventarcEmulator implements EmulatorInstance { async triggerEventFunction(channel: string, event: CloudEvent): Promise { if (!EmulatorRegistry.isRunning(Emulators.FUNCTIONS)) { this.logger.log("INFO", "Functions emulator not found. This should not happen."); - return Promise.reject(); + return Promise.reject( + new FirebaseError("Functions emulator not found. This should not happen."), + ); } const key = `${event.type}-${channel}`; const triggers = this.events[key] || []; diff --git a/src/emulator/workQueue.spec.ts b/src/emulator/workQueue.spec.ts index df2ad4dbbb1..0e71af45075 100644 --- a/src/emulator/workQueue.spec.ts +++ b/src/emulator/workQueue.spec.ts @@ -130,7 +130,7 @@ describe("WorkQueue", () => { let hasRun1 = false; const work1 = () => { hasRun1 = true; - return Promise.reject(); + return Promise.reject(new Error("job failed")); }; let hasRun2 = false; diff --git a/src/profileReport.ts b/src/profileReport.ts index ff658406ded..e6749a6ceab 100644 --- a/src/profileReport.ts +++ b/src/profileReport.ts @@ -555,8 +555,14 @@ export class ProfileReport { } } }); - rl.on("error", () => { - reject(); + rl.on("error", (err) => { + reject( + err instanceof Error + ? err + : new FirebaseError("There was an error creating the report.", { + original: err as any, + }), + ); }); outStream.on("error", () => { errored = true; diff --git a/src/throttler/throttler.spec.ts b/src/throttler/throttler.spec.ts index 5157e414223..f494a6266a1 100644 --- a/src/throttler/throttler.spec.ts +++ b/src/throttler/throttler.spec.ts @@ -168,7 +168,7 @@ const throttlerTest = (ThrottlerConstructor: ThrottlerConstructorType): void => if (count > 2) { return Promise.resolve(); } - return Promise.reject(); + return Promise.reject(new Error("retry")); }; const q = new ThrottlerConstructor({ diff --git a/src/utils.spec.ts b/src/utils.spec.ts index e8302ef82bf..9b1fdc77527 100644 --- a/src/utils.spec.ts +++ b/src/utils.spec.ts @@ -206,6 +206,7 @@ describe("utils", () => { it("should settle all promises", async () => { const result = await utils.promiseAllSettled([ Promise.resolve("foo"), + // eslint-disable-next-line prefer-promise-reject-errors Promise.reject("bar"), Promise.resolve("baz"), ]); @@ -322,6 +323,7 @@ describe("utils", () => { it("waits for all settled", async () => { // Intetionally failing with a non-error to make matching easier + // eslint-disable-next-line prefer-promise-reject-errors const reject = Promise.reject("fail fast"); const resolve = new Promise((res) => { setTimeout(() => res(42), 20);