From acd93917217fbacacfb704b64253231c11305748 Mon Sep 17 00:00:00 2001
From: Josh Kelley <joshkel@gmail.com>
Date: Wed, 20 Nov 2024 11:43:44 -0500
Subject: [PATCH] Switch to native Promise.allSettled

As discussed in code review, this is widely available.  Update tsconfig.json to recognize it.
---
 packages/workbox-core/src/_private.ts         |  2 -
 .../workbox-core/src/_private/allSettled.ts   | 46 -------------------
 .../workbox-strategies/src/StrategyHandler.ts |  8 +---
 tsconfig.json                                 |  2 +-
 4 files changed, 3 insertions(+), 55 deletions(-)
 delete mode 100644 packages/workbox-core/src/_private/allSettled.ts

diff --git a/packages/workbox-core/src/_private.ts b/packages/workbox-core/src/_private.ts
index 4721f190d..455b7cd08 100644
--- a/packages/workbox-core/src/_private.ts
+++ b/packages/workbox-core/src/_private.ts
@@ -7,7 +7,6 @@
 */
 
 // We either expose defaults or we expose every named export.
-import {allSettled} from './_private/allSettled.js';
 import {assert} from './_private/assert.js';
 import {cacheNames} from './_private/cacheNames.js';
 import {cacheMatchIgnoreParams} from './_private/cacheMatchIgnoreParams.js';
@@ -26,7 +25,6 @@ import {WorkboxError} from './_private/WorkboxError.js';
 import './_version.js';
 
 export {
-  allSettled,
   assert,
   cacheMatchIgnoreParams,
   cacheNames,
diff --git a/packages/workbox-core/src/_private/allSettled.ts b/packages/workbox-core/src/_private/allSettled.ts
deleted file mode 100644
index 29ee7e7b8..000000000
--- a/packages/workbox-core/src/_private/allSettled.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-import '../_version.js';
-
-export interface PromiseResolution<T> {
-  status: 'fulfilled';
-  value: T;
-}
-
-export interface PromiseRejection {
-  status: 'rejected';
-  reason: unknown;
-}
-
-export type PromiseResult<T> = PromiseResolution<T> | PromiseRejection;
-
-/**
- * Promise.allSettled polyfill based on
- *
- * https://github.com/es-shims/Promise.allSettled/blob/main/implementation.js
- *
- * which is (c) 2019 Jordan Harband and used under the terms of the MIT license.
- *
- * @private
- */
-function allSettled<T>(
-  iterable: Iterable<Promise<T>>,
-): Promise<PromiseResult<T>[]> {
-  const values = Array.from(iterable);
-  return Promise.all(
-    values.map(function (item) {
-      const onFulfill = function (value: T) {
-        return {status: 'fulfilled' as const, value: value};
-      };
-      const onReject = function (reason: unknown) {
-        return {status: 'rejected' as const, reason: reason};
-      };
-      const itemPromise = Promise.resolve(item);
-      try {
-        return itemPromise.then(onFulfill, onReject);
-      } catch (e) {
-        return Promise.reject(e);
-      }
-    }),
-  );
-}
-
-export {allSettled};
diff --git a/packages/workbox-strategies/src/StrategyHandler.ts b/packages/workbox-strategies/src/StrategyHandler.ts
index 6c1d7864d..56c60bcae 100644
--- a/packages/workbox-strategies/src/StrategyHandler.ts
+++ b/packages/workbox-strategies/src/StrategyHandler.ts
@@ -6,10 +6,6 @@
   https://opensource.org/licenses/MIT.
 */
 
-import {
-  allSettled,
-  PromiseRejection,
-} from 'workbox-core/_private/allSettled.js';
 import {assert} from 'workbox-core/_private/assert.js';
 import {cacheMatchIgnoreParams} from 'workbox-core/_private/cacheMatchIgnoreParams.js';
 import {Deferred} from 'workbox-core/_private/Deferred.js';
@@ -566,10 +562,10 @@ class StrategyHandler {
   async doneWaiting(): Promise<void> {
     while (this._extendLifetimePromises.length) {
       const promises = this._extendLifetimePromises.splice(0);
-      const result = await allSettled(promises);
+      const result = await Promise.allSettled(promises);
       const firstRejection = result.find((i) => i.status === 'rejected');
       if (firstRejection) {
-        throw (firstRejection as PromiseRejection).reason;
+        throw (firstRejection as PromiseRejectedResult).reason;
       }
     }
   }
diff --git a/tsconfig.json b/tsconfig.json
index 9ca662e37..37bf717ed 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -2,7 +2,7 @@
   "compilerOptions": {
     "composite": true,
     "declaration": true,
-    "lib": ["es2017", "webworker"],
+    "lib": ["es2020", "webworker"],
     "module": "esnext",
     "moduleResolution": "node",
     "noFallthroughCasesInSwitch": true,