source: frontend/node_modules/bluebird/js/release/props.js

Last change on this file was 9af201e, checked in by MBK <marija.karapandzova@…>, 13 days ago

Fix frontend appearance

  • Property mode set to 100644
File size: 3.0 KB
Line 
1"use strict";
2module.exports = function(
3 Promise, PromiseArray, tryConvertToPromise, apiRejection) {
4var util = require("./util");
5var isObject = util.isObject;
6var es5 = require("./es5");
7var Es6Map;
8if (typeof Map === "function") Es6Map = Map;
9
10var mapToEntries = (function() {
11 var index = 0;
12 var size = 0;
13
14 function extractEntry(value, key) {
15 this[index] = value;
16 this[index + size] = key;
17 index++;
18 }
19
20 return function mapToEntries(map) {
21 size = map.size;
22 index = 0;
23 var ret = new Array(map.size * 2);
24 map.forEach(extractEntry, ret);
25 return ret;
26 };
27})();
28
29var entriesToMap = function(entries) {
30 var ret = new Es6Map();
31 var length = entries.length / 2 | 0;
32 for (var i = 0; i < length; ++i) {
33 var key = entries[length + i];
34 var value = entries[i];
35 ret.set(key, value);
36 }
37 return ret;
38};
39
40function PropertiesPromiseArray(obj) {
41 var isMap = false;
42 var entries;
43 if (Es6Map !== undefined && obj instanceof Es6Map) {
44 entries = mapToEntries(obj);
45 isMap = true;
46 } else {
47 var keys = es5.keys(obj);
48 var len = keys.length;
49 entries = new Array(len * 2);
50 for (var i = 0; i < len; ++i) {
51 var key = keys[i];
52 entries[i] = obj[key];
53 entries[i + len] = key;
54 }
55 }
56 this.constructor$(entries);
57 this._isMap = isMap;
58 this._init$(undefined, isMap ? -6 : -3);
59}
60util.inherits(PropertiesPromiseArray, PromiseArray);
61
62PropertiesPromiseArray.prototype._init = function () {};
63
64PropertiesPromiseArray.prototype._promiseFulfilled = function (value, index) {
65 this._values[index] = value;
66 var totalResolved = ++this._totalResolved;
67 if (totalResolved >= this._length) {
68 var val;
69 if (this._isMap) {
70 val = entriesToMap(this._values);
71 } else {
72 val = {};
73 var keyOffset = this.length();
74 for (var i = 0, len = this.length(); i < len; ++i) {
75 val[this._values[i + keyOffset]] = this._values[i];
76 }
77 }
78 this._resolve(val);
79 return true;
80 }
81 return false;
82};
83
84PropertiesPromiseArray.prototype.shouldCopyValues = function () {
85 return false;
86};
87
88PropertiesPromiseArray.prototype.getActualLength = function (len) {
89 return len >> 1;
90};
91
92function props(promises) {
93 var ret;
94 var castValue = tryConvertToPromise(promises);
95
96 if (!isObject(castValue)) {
97 return apiRejection("cannot await properties of a non-object\u000a\u000a See http://goo.gl/MqrFmX\u000a");
98 } else if (castValue instanceof Promise) {
99 ret = castValue._then(
100 Promise.props, undefined, undefined, undefined, undefined);
101 } else {
102 ret = new PropertiesPromiseArray(castValue).promise();
103 }
104
105 if (castValue instanceof Promise) {
106 ret._propagateFrom(castValue, 2);
107 }
108 return ret;
109}
110
111Promise.prototype.props = function () {
112 return props(this);
113};
114
115Promise.props = function (promises) {
116 return props(promises);
117};
118};
Note: See TracBrowser for help on using the repository browser.