From ebf064e75bf98b01b59c37d62212fb2388fcd8aa Mon Sep 17 00:00:00 2001
From: Chuck Grindel <chuck.grindel@gmail.com>
Date: Thu, 11 May 2023 04:26:59 -0600
Subject: [PATCH] chore(utils/array): add isNotNullOrUndefined (#22081)

---
 lib/util/array.spec.ts | 12 ++++++++++++
 lib/util/array.ts      |  9 +++++++++
 2 files changed, 21 insertions(+)
 create mode 100644 lib/util/array.spec.ts

diff --git a/lib/util/array.spec.ts b/lib/util/array.spec.ts
new file mode 100644
index 0000000000..57356be7de
--- /dev/null
+++ b/lib/util/array.spec.ts
@@ -0,0 +1,12 @@
+import { isNotNullOrUndefined } from './array';
+
+describe('util/array', () => {
+  it.each`
+    a                  | exp
+    ${null}            | ${false}
+    ${undefined}       | ${false}
+    ${{ name: 'foo' }} | ${true}
+  `('.isNotNullOrUndefined', ({ a, exp }) => {
+    expect(isNotNullOrUndefined(a)).toEqual(exp);
+  });
+});
diff --git a/lib/util/array.ts b/lib/util/array.ts
index 6862260bc2..0175fabf26 100644
--- a/lib/util/array.ts
+++ b/lib/util/array.ts
@@ -10,3 +10,12 @@ export function coerceArray<T>(input: T[] | null | undefined): T[] {
 export function sortNumeric(a: number, b: number): number {
   return a - b;
 }
+
+// Useful for filtering an array so that it includes values that are not null or
+// undefined. This predicate acts as a type guard so that the resulting type for
+// `values.filter(isNotNullOrUndefined)` is `T[]`.
+export function isNotNullOrUndefined<T>(
+  value: T | undefined | null
+): value is T {
+  return !is.nullOrUndefined(value);
+}
-- 
GitLab