8ab26669874aeaa9b37d415901d540ab51e018bb
[platform/framework/web/wrtjs.git] / d2d_app / node_modules / express / node_modules / promise / domains / es6-extensions.js
1 'use strict';
2
3 //This file contains the ES6 extensions to the core Promises/A+ API
4
5 var Promise = require('./core.js');
6
7 module.exports = Promise;
8
9 /* Static Functions */
10
11 var TRUE = valuePromise(true);
12 var FALSE = valuePromise(false);
13 var NULL = valuePromise(null);
14 var UNDEFINED = valuePromise(undefined);
15 var ZERO = valuePromise(0);
16 var EMPTYSTRING = valuePromise('');
17
18 function valuePromise(value) {
19   var p = new Promise(Promise._61);
20   p._65 = 1;
21   p._55 = value;
22   return p;
23 }
24 Promise.resolve = function (value) {
25   if (value instanceof Promise) return value;
26
27   if (value === null) return NULL;
28   if (value === undefined) return UNDEFINED;
29   if (value === true) return TRUE;
30   if (value === false) return FALSE;
31   if (value === 0) return ZERO;
32   if (value === '') return EMPTYSTRING;
33
34   if (typeof value === 'object' || typeof value === 'function') {
35     try {
36       var then = value.then;
37       if (typeof then === 'function') {
38         return new Promise(then.bind(value));
39       }
40     } catch (ex) {
41       return new Promise(function (resolve, reject) {
42         reject(ex);
43       });
44     }
45   }
46   return valuePromise(value);
47 };
48
49 Promise.all = function (arr) {
50   var args = Array.prototype.slice.call(arr);
51
52   return new Promise(function (resolve, reject) {
53     if (args.length === 0) return resolve([]);
54     var remaining = args.length;
55     function res(i, val) {
56       if (val && (typeof val === 'object' || typeof val === 'function')) {
57         if (val instanceof Promise && val.then === Promise.prototype.then) {
58           while (val._65 === 3) {
59             val = val._55;
60           }
61           if (val._65 === 1) return res(i, val._55);
62           if (val._65 === 2) reject(val._55);
63           val.then(function (val) {
64             res(i, val);
65           }, reject);
66           return;
67         } else {
68           var then = val.then;
69           if (typeof then === 'function') {
70             var p = new Promise(then.bind(val));
71             p.then(function (val) {
72               res(i, val);
73             }, reject);
74             return;
75           }
76         }
77       }
78       args[i] = val;
79       if (--remaining === 0) {
80         resolve(args);
81       }
82     }
83     for (var i = 0; i < args.length; i++) {
84       res(i, args[i]);
85     }
86   });
87 };
88
89 Promise.reject = function (value) {
90   return new Promise(function (resolve, reject) {
91     reject(value);
92   });
93 };
94
95 Promise.race = function (values) {
96   return new Promise(function (resolve, reject) {
97     values.forEach(function(value){
98       Promise.resolve(value).then(resolve, reject);
99     });
100   });
101 };
102
103 /* Prototype Methods */
104
105 Promise.prototype['catch'] = function (onRejected) {
106   return this.then(null, onRejected);
107 };