diff --git a/packages/utils/src/assert.spec.ts b/packages/utils/src/assert.spec.ts index 4b6374cfc0..d22b5c16cd 100644 --- a/packages/utils/src/assert.spec.ts +++ b/packages/utils/src/assert.spec.ts @@ -1,52 +1,54 @@ -import { assertDefined } from "./assert"; +import { assertDefinedAndNotNull } from "./assert"; describe("assert", () => { - describe("assertDefined", () => { + describe("assertDefinedAndNotNull", () => { it("passes for simple values", () => { { - const value: number | undefined = 123; - assertDefined(value); + const value: number | undefined | null = 123; + assertDefinedAndNotNull(value); expect(value).toEqual(123); } { - const value: string | undefined = "abc"; - assertDefined(value); + const value: string | undefined | null = "abc"; + assertDefinedAndNotNull(value); expect(value).toEqual("abc"); } }); it("passes for falsy values", () => { { - const value: number | undefined = 0; - assertDefined(value); + const value: number | undefined | null = 0; + assertDefinedAndNotNull(value); expect(value).toEqual(0); } { - const value: string | undefined = ""; - assertDefined(value); + const value: string | undefined | null = ""; + assertDefinedAndNotNull(value); expect(value).toEqual(""); } - { - const value: null | undefined = null; - assertDefined(value); - expect(value).toEqual(null); - } }); it("throws for undefined values", () => { { - const value: number | undefined = undefined; - expect(() => assertDefined(value)).toThrowError("value is undefined"); + const value: number | undefined | null = undefined; + expect(() => assertDefinedAndNotNull(value)).toThrowError("value is undefined or null"); } { - let value: string | undefined; - expect(() => assertDefined(value)).toThrowError("value is undefined"); + let value: string | undefined | null; + expect(() => assertDefinedAndNotNull(value)).toThrowError("value is undefined or null"); } }); + it("throws for null values", () => { + const value: number | undefined | null = null; + expect(() => assertDefinedAndNotNull(value)).toThrowError("value is undefined or null"); + }); + it("throws with custom message", () => { const value: number | undefined = undefined; - expect(() => assertDefined(value, "Bug in the data source")).toThrowError("Bug in the data source"); + expect(() => assertDefinedAndNotNull(value, "Bug in the data source")).toThrowError( + "Bug in the data source", + ); }); }); }); diff --git a/packages/utils/src/assert.ts b/packages/utils/src/assert.ts index 3c86b35378..14f37517ca 100644 --- a/packages/utils/src/assert.ts +++ b/packages/utils/src/assert.ts @@ -5,8 +5,8 @@ export function assert(condition: any, msg?: string): asserts condition { } } -export function assertDefined(value: T | undefined, msg?: string): asserts value is T { - if (value === undefined) { - throw new Error(msg || "value is undefined"); +export function assertDefinedAndNotNull(value: T | undefined | null, msg?: string): asserts value is T { + if (value === undefined || value === null) { + throw new Error(msg ?? "value is undefined or null"); } } diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index 391b2471c2..596d63db78 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -1,4 +1,4 @@ export { arrayContentEquals } from "./arrays"; -export { assert, assertDefined } from "./assert"; +export { assert, assertDefinedAndNotNull } from "./assert"; export { sleep } from "./sleep"; export { isNonNullObject, isUint8Array } from "./typechecks"; diff --git a/packages/utils/types/assert.d.ts b/packages/utils/types/assert.d.ts index 385fadf14f..65f3dfdb86 100644 --- a/packages/utils/types/assert.d.ts +++ b/packages/utils/types/assert.d.ts @@ -1,2 +1,5 @@ export declare function assert(condition: any, msg?: string): asserts condition; -export declare function assertDefined(value: T | undefined, msg?: string): asserts value is T; +export declare function assertDefinedAndNotNull( + value: T | undefined | null, + msg?: string, +): asserts value is T; diff --git a/packages/utils/types/index.d.ts b/packages/utils/types/index.d.ts index 391b2471c2..596d63db78 100644 --- a/packages/utils/types/index.d.ts +++ b/packages/utils/types/index.d.ts @@ -1,4 +1,4 @@ export { arrayContentEquals } from "./arrays"; -export { assert, assertDefined } from "./assert"; +export { assert, assertDefinedAndNotNull } from "./assert"; export { sleep } from "./sleep"; export { isNonNullObject, isUint8Array } from "./typechecks";