From 9e3c08db40b8916968b9f30096c7be3f00ce9647 Mon Sep 17 00:00:00 2001
From: Daniel Baumann <daniel.baumann@progress-linux.org>
Date: Sun, 21 Apr 2024 13:44:51 +0200
Subject: Adding upstream version 1:115.7.0.

Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
---
 devtools/client/shared/redux/middleware/promise.js | 69 ++++++++++++++++++++++
 1 file changed, 69 insertions(+)
 create mode 100644 devtools/client/shared/redux/middleware/promise.js

(limited to 'devtools/client/shared/redux/middleware/promise.js')

diff --git a/devtools/client/shared/redux/middleware/promise.js b/devtools/client/shared/redux/middleware/promise.js
new file mode 100644
index 0000000000..7f88651a61
--- /dev/null
+++ b/devtools/client/shared/redux/middleware/promise.js
@@ -0,0 +1,69 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+"use strict";
+
+loader.lazyRequireGetter(
+  this,
+  "generateUUID",
+  "resource://devtools/shared/generate-uuid.js",
+  true
+);
+loader.lazyRequireGetter(
+  this,
+  ["entries", "executeSoon", "toObject"],
+  "resource://devtools/shared/DevToolsUtils.js",
+  true
+);
+
+const PROMISE = (exports.PROMISE = "@@dispatch/promise");
+
+function promiseMiddleware({ dispatch, getState }) {
+  return next => action => {
+    if (!(PROMISE in action)) {
+      return next(action);
+    }
+    // Return the promise so action creators can still compose if they
+    // want to.
+    return new Promise((resolve, reject) => {
+      const promiseInst = action[PROMISE];
+      const seqId = generateUUID().toString();
+
+      // Create a new action that doesn't have the promise field and has
+      // the `seqId` field that represents the sequence id
+      action = Object.assign(
+        toObject(entries(action).filter(pair => pair[0] !== PROMISE)),
+        { seqId }
+      );
+
+      dispatch(Object.assign({}, action, { status: "start" }));
+
+      promiseInst.then(
+        value => {
+          executeSoon(() => {
+            dispatch(
+              Object.assign({}, action, {
+                status: "done",
+                value,
+              })
+            );
+            resolve(value);
+          });
+        },
+        error => {
+          executeSoon(() => {
+            dispatch(
+              Object.assign({}, action, {
+                status: "error",
+                error: error.message || error,
+              })
+            );
+            reject(error);
+          });
+        }
+      );
+    });
+  };
+}
+
+exports.promise = promiseMiddleware;
-- 
cgit v1.2.3