| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 | "use strict";module.exports = function(    Promise, PromiseArray, tryConvertToPromise, apiRejection) {var util = require("./util");var isObject = util.isObject;var es5 = require("./es5");var Es6Map;if (typeof Map === "function") Es6Map = Map;var mapToEntries = (function() {    var index = 0;    var size = 0;    function extractEntry(value, key) {        this[index] = value;        this[index + size] = key;        index++;    }    return function mapToEntries(map) {        size = map.size;        index = 0;        var ret = new Array(map.size * 2);        map.forEach(extractEntry, ret);        return ret;    };})();var entriesToMap = function(entries) {    var ret = new Es6Map();    var length = entries.length / 2 | 0;    for (var i = 0; i < length; ++i) {        var key = entries[length + i];        var value = entries[i];        ret.set(key, value);    }    return ret;};function PropertiesPromiseArray(obj) {    var isMap = false;    var entries;    if (Es6Map !== undefined && obj instanceof Es6Map) {        entries = mapToEntries(obj);        isMap = true;    } else {        var keys = es5.keys(obj);        var len = keys.length;        entries = new Array(len * 2);        for (var i = 0; i < len; ++i) {            var key = keys[i];            entries[i] = obj[key];            entries[i + len] = key;        }    }    this.constructor$(entries);    this._isMap = isMap;    this._init$(undefined, isMap ? -6 : -3);}util.inherits(PropertiesPromiseArray, PromiseArray);PropertiesPromiseArray.prototype._init = function () {};PropertiesPromiseArray.prototype._promiseFulfilled = function (value, index) {    this._values[index] = value;    var totalResolved = ++this._totalResolved;    if (totalResolved >= this._length) {        var val;        if (this._isMap) {            val = entriesToMap(this._values);        } else {            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);        return true;    }    return false;};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/MqrFmX\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, 2);    }    return ret;}Promise.prototype.props = function () {    return props(this);};Promise.props = function (promises) {    return props(promises);};};
 |