“use strict”; module.exports = function(
Promise, PromiseArray, tryConvertToPromise, apiRejection) {
var util = require(“./util.js”); var isObject = util.isObject; var es5 = require(“./es5.js”);
function PropertiesPromiseArray(obj) {
var keys = es5.keys(obj); var len = keys.length; var values = new Array(len * 2); for (var i = 0; i < len; ++i) { var key = keys[i]; values[i] = obj[key]; values[i + len] = key; } this.constructor$(values);
} util.inherits(PropertiesPromiseArray, PromiseArray);
PropertiesPromiseArray.prototype._init = function () {
this._init$(undefined, -3) ;
};
PropertiesPromiseArray.prototype._promiseFulfilled = function (value, index) {
this._values[index] = value; var totalResolved = ++this._totalResolved; if (totalResolved >= this._length) { var val = {}; var keyOffset = this.length(); for (var i = 0, len = this.length(); i < len; ++i) { val[this._values[i + keyOffset]] = this._values[i]; } this._resolve(val); }
};
PropertiesPromiseArray.prototype._promiseProgressed = function (value, index) {
this._promise._progress({ key: this._values[index + this.length()], value: value });
};
PropertiesPromiseArray.prototype.shouldCopyValues = function () {
return false;
};
PropertiesPromiseArray.prototype.getActualLength = function (len) {
return len >> 1;
};
function props(promises) {
var ret; var castValue = tryConvertToPromise(promises); if (!isObject(castValue)) { return apiRejection("cannot await properties of a non-object\u000a\u000a See http://goo.gl/OsFKC8\u000a"); } else if (castValue instanceof Promise) { ret = castValue._then( Promise.props, undefined, undefined, undefined, undefined); } else { ret = new PropertiesPromiseArray(castValue).promise(); } if (castValue instanceof Promise) { ret._propagateFrom(castValue, 4); } return ret;
}
Promise.prototype.props = function () {
return props(this);
};
Promise.props = function (promises) {
return props(promises);
}; };