Commit 973bc58 for mammothjs

commit 973bc5820a702ebedbaeb4ceecfea64f148dbafb
Author: Michael Williamson <mike@zwobble.org>
Date:   Wed Sep 16 23:39:44 2026 +0100

    Implement props in promises module

diff --git a/lib/promises.js b/lib/promises.js
index b292331..6ceee1c 100644
--- a/lib/promises.js
+++ b/lib/promises.js
@@ -3,10 +3,38 @@ var bluebird = require("bluebird/js/release/promise")();

 exports.defer = defer;
 exports.resolve = bluebird.resolve;
-exports.props = bluebird.props;
 exports.reject = bluebird.reject;
 exports.mapSeries = bluebird.mapSeries;

+var props = exports.props = function(obj) {
+    // We rely on .keys() and .values() returning properties in the same order.
+    var keys = Object.keys(obj);
+    var values = Object.values(obj);
+
+    var result = bluebird.all(values).then(function(resolvedValues) {
+        var resolvedObj = {};
+        for (var index = 0; index < keys.length; index++) {
+            resolvedObj[keys[index]] = resolvedValues[index];
+        }
+        return resolvedObj;
+    });
+
+    return addAlsoToPromise(result);
+};
+
+function addAlsoToPromise(promise) {
+    promise.also = function(func) {
+        var result = this.then(function(value) {
+            var returnValue = _.extend({}, value, func(value));
+            return props(returnValue);
+        });
+
+        return addAlsoToPromise(result);
+    };
+
+    return promise;
+}
+
 exports.try = function(func) {
     try {
         return bluebird.resolve(func());