UNPKG

27 kBJavaScriptView Raw
1"use strict";
2module.exports = function() {
3var makeSelfResolutionError = function () {
4 return new TypeError("circular promise resolution chain\u000a\u000a See http://goo.gl/MqrFmX\u000a");
5};
6var reflectHandler = function() {
7 return new Promise.PromiseInspection(this._target());
8};
9var apiRejection = function(msg) {
10 return Promise.reject(new TypeError(msg));
11};
12function Proxyable() {}
13var UNDEFINED_BINDING = {};
14var util = require("./util");
15util.setReflectHandler(reflectHandler);
16
17var getDomain = function() {
18 var domain = process.domain;
19 if (domain === undefined) {
20 return null;
21 }
22 return domain;
23};
24var getContextDefault = function() {
25 return null;
26};
27var getContextDomain = function() {
28 return {
29 domain: getDomain(),
30 async: null
31 };
32};
33var AsyncResource = util.isNode && util.nodeSupportsAsyncResource ?
34 require("async_hooks").AsyncResource : null;
35var getContextAsyncHooks = function() {
36 return {
37 domain: getDomain(),
38 async: new AsyncResource("Bluebird::Promise")
39 };
40};
41var getContext = util.isNode ? getContextDomain : getContextDefault;
42util.notEnumerableProp(Promise, "_getContext", getContext);
43var enableAsyncHooks = function() {
44 getContext = getContextAsyncHooks;
45 util.notEnumerableProp(Promise, "_getContext", getContextAsyncHooks);
46};
47var disableAsyncHooks = function() {
48 getContext = getContextDomain;
49 util.notEnumerableProp(Promise, "_getContext", getContextDomain);
50};
51
52var es5 = require("./es5");
53var Async = require("./async");
54var async = new Async();
55es5.defineProperty(Promise, "_async", {value: async});
56var errors = require("./errors");
57var TypeError = Promise.TypeError = errors.TypeError;
58Promise.RangeError = errors.RangeError;
59var CancellationError = Promise.CancellationError = errors.CancellationError;
60Promise.TimeoutError = errors.TimeoutError;
61Promise.OperationalError = errors.OperationalError;
62Promise.RejectionError = errors.OperationalError;
63Promise.AggregateError = errors.AggregateError;
64var INTERNAL = function(){};
65var APPLY = {};
66var NEXT_FILTER = {};
67var tryConvertToPromise = require("./thenables")(Promise, INTERNAL);
68var PromiseArray =
69 require("./promise_array")(Promise, INTERNAL,
70 tryConvertToPromise, apiRejection, Proxyable);
71var Context = require("./context")(Promise);
72 /*jshint unused:false*/
73var createContext = Context.create;
74
75var debug = require("./debuggability")(Promise, Context,
76 enableAsyncHooks, disableAsyncHooks);
77var CapturedTrace = debug.CapturedTrace;
78var PassThroughHandlerContext =
79 require("./finally")(Promise, tryConvertToPromise, NEXT_FILTER);
80var catchFilter = require("./catch_filter")(NEXT_FILTER);
81var nodebackForPromise = require("./nodeback");
82var errorObj = util.errorObj;
83var tryCatch = util.tryCatch;
84function check(self, executor) {
85 if (self == null || self.constructor !== Promise) {
86 throw new TypeError("the promise constructor cannot be invoked directly\u000a\u000a See http://goo.gl/MqrFmX\u000a");
87 }
88 if (typeof executor !== "function") {
89 throw new TypeError("expecting a function but got " + util.classString(executor));
90 }
91
92}
93
94function Promise(executor) {
95 if (executor !== INTERNAL) {
96 check(this, executor);
97 }
98 this._bitField = 0;
99 this._fulfillmentHandler0 = undefined;
100 this._rejectionHandler0 = undefined;
101 this._promise0 = undefined;
102 this._receiver0 = undefined;
103 this._resolveFromExecutor(executor);
104 this._promiseCreated();
105 this._fireEvent("promiseCreated", this);
106}
107
108Promise.prototype.toString = function () {
109 return "[object Promise]";
110};
111
112Promise.prototype.caught = Promise.prototype["catch"] = function (fn) {
113 var len = arguments.length;
114 if (len > 1) {
115 var catchInstances = new Array(len - 1),
116 j = 0, i;
117 for (i = 0; i < len - 1; ++i) {
118 var item = arguments[i];
119 if (util.isObject(item)) {
120 catchInstances[j++] = item;
121 } else {
122 return apiRejection("Catch statement predicate: " +
123 "expecting an object but got " + util.classString(item));
124 }
125 }
126 catchInstances.length = j;
127 fn = arguments[i];
128
129 if (typeof fn !== "function") {
130 throw new TypeError("The last argument to .catch() " +
131 "must be a function, got " + util.toString(fn));
132 }
133 return this.then(undefined, catchFilter(catchInstances, fn, this));
134 }
135 return this.then(undefined, fn);
136};
137
138Promise.prototype.reflect = function () {
139 return this._then(reflectHandler,
140 reflectHandler, undefined, this, undefined);
141};
142
143Promise.prototype.then = function (didFulfill, didReject) {
144 if (debug.warnings() && arguments.length > 0 &&
145 typeof didFulfill !== "function" &&
146 typeof didReject !== "function") {
147 var msg = ".then() only accepts functions but was passed: " +
148 util.classString(didFulfill);
149 if (arguments.length > 1) {
150 msg += ", " + util.classString(didReject);
151 }
152 this._warn(msg);
153 }
154 return this._then(didFulfill, didReject, undefined, undefined, undefined);
155};
156
157Promise.prototype.done = function (didFulfill, didReject) {
158 var promise =
159 this._then(didFulfill, didReject, undefined, undefined, undefined);
160 promise._setIsFinal();
161};
162
163Promise.prototype.spread = function (fn) {
164 if (typeof fn !== "function") {
165 return apiRejection("expecting a function but got " + util.classString(fn));
166 }
167 return this.all()._then(fn, undefined, undefined, APPLY, undefined);
168};
169
170Promise.prototype.toJSON = function () {
171 var ret = {
172 isFulfilled: false,
173 isRejected: false,
174 fulfillmentValue: undefined,
175 rejectionReason: undefined
176 };
177 if (this.isFulfilled()) {
178 ret.fulfillmentValue = this.value();
179 ret.isFulfilled = true;
180 } else if (this.isRejected()) {
181 ret.rejectionReason = this.reason();
182 ret.isRejected = true;
183 }
184 return ret;
185};
186
187Promise.prototype.all = function () {
188 if (arguments.length > 0) {
189 this._warn(".all() was passed arguments but it does not take any");
190 }
191 return new PromiseArray(this).promise();
192};
193
194Promise.prototype.error = function (fn) {
195 return this.caught(util.originatesFromRejection, fn);
196};
197
198Promise.getNewLibraryCopy = module.exports;
199
200Promise.is = function (val) {
201 return val instanceof Promise;
202};
203
204Promise.fromNode = Promise.fromCallback = function(fn) {
205 var ret = new Promise(INTERNAL);
206 ret._captureStackTrace();
207 var multiArgs = arguments.length > 1 ? !!Object(arguments[1]).multiArgs
208 : false;
209 var result = tryCatch(fn)(nodebackForPromise(ret, multiArgs));
210 if (result === errorObj) {
211 ret._rejectCallback(result.e, true);
212 }
213 if (!ret._isFateSealed()) ret._setAsyncGuaranteed();
214 return ret;
215};
216
217Promise.all = function (promises) {
218 return new PromiseArray(promises).promise();
219};
220
221Promise.cast = function (obj) {
222 var ret = tryConvertToPromise(obj);
223 if (!(ret instanceof Promise)) {
224 ret = new Promise(INTERNAL);
225 ret._captureStackTrace();
226 ret._setFulfilled();
227 ret._rejectionHandler0 = obj;
228 }
229 return ret;
230};
231
232Promise.resolve = Promise.fulfilled = Promise.cast;
233
234Promise.reject = Promise.rejected = function (reason) {
235 var ret = new Promise(INTERNAL);
236 ret._captureStackTrace();
237 ret._rejectCallback(reason, true);
238 return ret;
239};
240
241Promise.setScheduler = function(fn) {
242 if (typeof fn !== "function") {
243 throw new TypeError("expecting a function but got " + util.classString(fn));
244 }
245 return async.setScheduler(fn);
246};
247
248Promise.prototype._then = function (
249 didFulfill,
250 didReject,
251 _, receiver,
252 internalData
253) {
254 var haveInternalData = internalData !== undefined;
255 var promise = haveInternalData ? internalData : new Promise(INTERNAL);
256 var target = this._target();
257 var bitField = target._bitField;
258
259 if (!haveInternalData) {
260 promise._propagateFrom(this, 3);
261 promise._captureStackTrace();
262 if (receiver === undefined &&
263 ((this._bitField & 2097152) !== 0)) {
264 if (!((bitField & 50397184) === 0)) {
265 receiver = this._boundValue();
266 } else {
267 receiver = target === this ? undefined : this._boundTo;
268 }
269 }
270 this._fireEvent("promiseChained", this, promise);
271 }
272
273 var context = getContext();
274 if (!((bitField & 50397184) === 0)) {
275 var handler, value, settler = target._settlePromiseCtx;
276 if (((bitField & 33554432) !== 0)) {
277 value = target._rejectionHandler0;
278 handler = didFulfill;
279 } else if (((bitField & 16777216) !== 0)) {
280 value = target._fulfillmentHandler0;
281 handler = didReject;
282 target._unsetRejectionIsUnhandled();
283 } else {
284 settler = target._settlePromiseLateCancellationObserver;
285 value = new CancellationError("late cancellation observer");
286 target._attachExtraTrace(value);
287 handler = didReject;
288 }
289
290 async.invoke(settler, target, {
291 handler: util.contextBind(context, handler),
292 promise: promise,
293 receiver: receiver,
294 value: value
295 });
296 } else {
297 target._addCallbacks(didFulfill, didReject, promise,
298 receiver, context);
299 }
300
301 return promise;
302};
303
304Promise.prototype._length = function () {
305 return this._bitField & 65535;
306};
307
308Promise.prototype._isFateSealed = function () {
309 return (this._bitField & 117506048) !== 0;
310};
311
312Promise.prototype._isFollowing = function () {
313 return (this._bitField & 67108864) === 67108864;
314};
315
316Promise.prototype._setLength = function (len) {
317 this._bitField = (this._bitField & -65536) |
318 (len & 65535);
319};
320
321Promise.prototype._setFulfilled = function () {
322 this._bitField = this._bitField | 33554432;
323 this._fireEvent("promiseFulfilled", this);
324};
325
326Promise.prototype._setRejected = function () {
327 this._bitField = this._bitField | 16777216;
328 this._fireEvent("promiseRejected", this);
329};
330
331Promise.prototype._setFollowing = function () {
332 this._bitField = this._bitField | 67108864;
333 this._fireEvent("promiseResolved", this);
334};
335
336Promise.prototype._setIsFinal = function () {
337 this._bitField = this._bitField | 4194304;
338};
339
340Promise.prototype._isFinal = function () {
341 return (this._bitField & 4194304) > 0;
342};
343
344Promise.prototype._unsetCancelled = function() {
345 this._bitField = this._bitField & (~65536);
346};
347
348Promise.prototype._setCancelled = function() {
349 this._bitField = this._bitField | 65536;
350 this._fireEvent("promiseCancelled", this);
351};
352
353Promise.prototype._setWillBeCancelled = function() {
354 this._bitField = this._bitField | 8388608;
355};
356
357Promise.prototype._setAsyncGuaranteed = function() {
358 if (async.hasCustomScheduler()) return;
359 var bitField = this._bitField;
360 this._bitField = bitField |
361 (((bitField & 536870912) >> 2) ^
362 134217728);
363};
364
365Promise.prototype._setNoAsyncGuarantee = function() {
366 this._bitField = (this._bitField | 536870912) &
367 (~134217728);
368};
369
370Promise.prototype._receiverAt = function (index) {
371 var ret = index === 0 ? this._receiver0 : this[
372 index * 4 - 4 + 3];
373 if (ret === UNDEFINED_BINDING) {
374 return undefined;
375 } else if (ret === undefined && this._isBound()) {
376 return this._boundValue();
377 }
378 return ret;
379};
380
381Promise.prototype._promiseAt = function (index) {
382 return this[
383 index * 4 - 4 + 2];
384};
385
386Promise.prototype._fulfillmentHandlerAt = function (index) {
387 return this[
388 index * 4 - 4 + 0];
389};
390
391Promise.prototype._rejectionHandlerAt = function (index) {
392 return this[
393 index * 4 - 4 + 1];
394};
395
396Promise.prototype._boundValue = function() {};
397
398Promise.prototype._migrateCallback0 = function (follower) {
399 var bitField = follower._bitField;
400 var fulfill = follower._fulfillmentHandler0;
401 var reject = follower._rejectionHandler0;
402 var promise = follower._promise0;
403 var receiver = follower._receiverAt(0);
404 if (receiver === undefined) receiver = UNDEFINED_BINDING;
405 this._addCallbacks(fulfill, reject, promise, receiver, null);
406};
407
408Promise.prototype._migrateCallbackAt = function (follower, index) {
409 var fulfill = follower._fulfillmentHandlerAt(index);
410 var reject = follower._rejectionHandlerAt(index);
411 var promise = follower._promiseAt(index);
412 var receiver = follower._receiverAt(index);
413 if (receiver === undefined) receiver = UNDEFINED_BINDING;
414 this._addCallbacks(fulfill, reject, promise, receiver, null);
415};
416
417Promise.prototype._addCallbacks = function (
418 fulfill,
419 reject,
420 promise,
421 receiver,
422 context
423) {
424 var index = this._length();
425
426 if (index >= 65535 - 4) {
427 index = 0;
428 this._setLength(0);
429 }
430
431 if (index === 0) {
432 this._promise0 = promise;
433 this._receiver0 = receiver;
434 if (typeof fulfill === "function") {
435 this._fulfillmentHandler0 = util.contextBind(context, fulfill);
436 }
437 if (typeof reject === "function") {
438 this._rejectionHandler0 = util.contextBind(context, reject);
439 }
440 } else {
441 var base = index * 4 - 4;
442 this[base + 2] = promise;
443 this[base + 3] = receiver;
444 if (typeof fulfill === "function") {
445 this[base + 0] =
446 util.contextBind(context, fulfill);
447 }
448 if (typeof reject === "function") {
449 this[base + 1] =
450 util.contextBind(context, reject);
451 }
452 }
453 this._setLength(index + 1);
454 return index;
455};
456
457Promise.prototype._proxy = function (proxyable, arg) {
458 this._addCallbacks(undefined, undefined, arg, proxyable, null);
459};
460
461Promise.prototype._resolveCallback = function(value, shouldBind) {
462 if (((this._bitField & 117506048) !== 0)) return;
463 if (value === this)
464 return this._rejectCallback(makeSelfResolutionError(), false);
465 var maybePromise = tryConvertToPromise(value, this);
466 if (!(maybePromise instanceof Promise)) return this._fulfill(value);
467
468 if (shouldBind) this._propagateFrom(maybePromise, 2);
469
470
471 var promise = maybePromise._target();
472
473 if (promise === this) {
474 this._reject(makeSelfResolutionError());
475 return;
476 }
477
478 var bitField = promise._bitField;
479 if (((bitField & 50397184) === 0)) {
480 var len = this._length();
481 if (len > 0) promise._migrateCallback0(this);
482 for (var i = 1; i < len; ++i) {
483 promise._migrateCallbackAt(this, i);
484 }
485 this._setFollowing();
486 this._setLength(0);
487 this._setFollowee(maybePromise);
488 } else if (((bitField & 33554432) !== 0)) {
489 this._fulfill(promise._value());
490 } else if (((bitField & 16777216) !== 0)) {
491 this._reject(promise._reason());
492 } else {
493 var reason = new CancellationError("late cancellation observer");
494 promise._attachExtraTrace(reason);
495 this._reject(reason);
496 }
497};
498
499Promise.prototype._rejectCallback =
500function(reason, synchronous, ignoreNonErrorWarnings) {
501 var trace = util.ensureErrorObject(reason);
502 var hasStack = trace === reason;
503 if (!hasStack && !ignoreNonErrorWarnings && debug.warnings()) {
504 var message = "a promise was rejected with a non-error: " +
505 util.classString(reason);
506 this._warn(message, true);
507 }
508 this._attachExtraTrace(trace, synchronous ? hasStack : false);
509 this._reject(reason);
510};
511
512Promise.prototype._resolveFromExecutor = function (executor) {
513 if (executor === INTERNAL) return;
514 var promise = this;
515 this._captureStackTrace();
516 this._pushContext();
517 var synchronous = true;
518 var r = this._execute(executor, function(value) {
519 promise._resolveCallback(value);
520 }, function (reason) {
521 promise._rejectCallback(reason, synchronous);
522 });
523 synchronous = false;
524 this._popContext();
525
526 if (r !== undefined) {
527 promise._rejectCallback(r, true);
528 }
529};
530
531Promise.prototype._settlePromiseFromHandler = function (
532 handler, receiver, value, promise
533) {
534 var bitField = promise._bitField;
535 if (((bitField & 65536) !== 0)) return;
536 promise._pushContext();
537 var x;
538 if (receiver === APPLY) {
539 if (!value || typeof value.length !== "number") {
540 x = errorObj;
541 x.e = new TypeError("cannot .spread() a non-array: " +
542 util.classString(value));
543 } else {
544 x = tryCatch(handler).apply(this._boundValue(), value);
545 }
546 } else {
547 x = tryCatch(handler).call(receiver, value);
548 }
549 var promiseCreated = promise._popContext();
550 bitField = promise._bitField;
551 if (((bitField & 65536) !== 0)) return;
552
553 if (x === NEXT_FILTER) {
554 promise._reject(value);
555 } else if (x === errorObj) {
556 promise._rejectCallback(x.e, false);
557 } else {
558 debug.checkForgottenReturns(x, promiseCreated, "", promise, this);
559 promise._resolveCallback(x);
560 }
561};
562
563Promise.prototype._target = function() {
564 var ret = this;
565 while (ret._isFollowing()) ret = ret._followee();
566 return ret;
567};
568
569Promise.prototype._followee = function() {
570 return this._rejectionHandler0;
571};
572
573Promise.prototype._setFollowee = function(promise) {
574 this._rejectionHandler0 = promise;
575};
576
577Promise.prototype._settlePromise = function(promise, handler, receiver, value) {
578 var isPromise = promise instanceof Promise;
579 var bitField = this._bitField;
580 var asyncGuaranteed = ((bitField & 134217728) !== 0);
581 if (((bitField & 65536) !== 0)) {
582 if (isPromise) promise._invokeInternalOnCancel();
583
584 if (receiver instanceof PassThroughHandlerContext &&
585 receiver.isFinallyHandler()) {
586 receiver.cancelPromise = promise;
587 if (tryCatch(handler).call(receiver, value) === errorObj) {
588 promise._reject(errorObj.e);
589 }
590 } else if (handler === reflectHandler) {
591 promise._fulfill(reflectHandler.call(receiver));
592 } else if (receiver instanceof Proxyable) {
593 receiver._promiseCancelled(promise);
594 } else if (isPromise || promise instanceof PromiseArray) {
595 promise._cancel();
596 } else {
597 receiver.cancel();
598 }
599 } else if (typeof handler === "function") {
600 if (!isPromise) {
601 handler.call(receiver, value, promise);
602 } else {
603 if (asyncGuaranteed) promise._setAsyncGuaranteed();
604 this._settlePromiseFromHandler(handler, receiver, value, promise);
605 }
606 } else if (receiver instanceof Proxyable) {
607 if (!receiver._isResolved()) {
608 if (((bitField & 33554432) !== 0)) {
609 receiver._promiseFulfilled(value, promise);
610 } else {
611 receiver._promiseRejected(value, promise);
612 }
613 }
614 } else if (isPromise) {
615 if (asyncGuaranteed) promise._setAsyncGuaranteed();
616 if (((bitField & 33554432) !== 0)) {
617 promise._fulfill(value);
618 } else {
619 promise._reject(value);
620 }
621 }
622};
623
624Promise.prototype._settlePromiseLateCancellationObserver = function(ctx) {
625 var handler = ctx.handler;
626 var promise = ctx.promise;
627 var receiver = ctx.receiver;
628 var value = ctx.value;
629 if (typeof handler === "function") {
630 if (!(promise instanceof Promise)) {
631 handler.call(receiver, value, promise);
632 } else {
633 this._settlePromiseFromHandler(handler, receiver, value, promise);
634 }
635 } else if (promise instanceof Promise) {
636 promise._reject(value);
637 }
638};
639
640Promise.prototype._settlePromiseCtx = function(ctx) {
641 this._settlePromise(ctx.promise, ctx.handler, ctx.receiver, ctx.value);
642};
643
644Promise.prototype._settlePromise0 = function(handler, value, bitField) {
645 var promise = this._promise0;
646 var receiver = this._receiverAt(0);
647 this._promise0 = undefined;
648 this._receiver0 = undefined;
649 this._settlePromise(promise, handler, receiver, value);
650};
651
652Promise.prototype._clearCallbackDataAtIndex = function(index) {
653 var base = index * 4 - 4;
654 this[base + 2] =
655 this[base + 3] =
656 this[base + 0] =
657 this[base + 1] = undefined;
658};
659
660Promise.prototype._fulfill = function (value) {
661 var bitField = this._bitField;
662 if (((bitField & 117506048) >>> 16)) return;
663 if (value === this) {
664 var err = makeSelfResolutionError();
665 this._attachExtraTrace(err);
666 return this._reject(err);
667 }
668 this._setFulfilled();
669 this._rejectionHandler0 = value;
670
671 if ((bitField & 65535) > 0) {
672 if (((bitField & 134217728) !== 0)) {
673 this._settlePromises();
674 } else {
675 async.settlePromises(this);
676 }
677 this._dereferenceTrace();
678 }
679};
680
681Promise.prototype._reject = function (reason) {
682 var bitField = this._bitField;
683 if (((bitField & 117506048) >>> 16)) return;
684 this._setRejected();
685 this._fulfillmentHandler0 = reason;
686
687 if (this._isFinal()) {
688 return async.fatalError(reason, util.isNode);
689 }
690
691 if ((bitField & 65535) > 0) {
692 async.settlePromises(this);
693 } else {
694 this._ensurePossibleRejectionHandled();
695 }
696};
697
698Promise.prototype._fulfillPromises = function (len, value) {
699 for (var i = 1; i < len; i++) {
700 var handler = this._fulfillmentHandlerAt(i);
701 var promise = this._promiseAt(i);
702 var receiver = this._receiverAt(i);
703 this._clearCallbackDataAtIndex(i);
704 this._settlePromise(promise, handler, receiver, value);
705 }
706};
707
708Promise.prototype._rejectPromises = function (len, reason) {
709 for (var i = 1; i < len; i++) {
710 var handler = this._rejectionHandlerAt(i);
711 var promise = this._promiseAt(i);
712 var receiver = this._receiverAt(i);
713 this._clearCallbackDataAtIndex(i);
714 this._settlePromise(promise, handler, receiver, reason);
715 }
716};
717
718Promise.prototype._settlePromises = function () {
719 var bitField = this._bitField;
720 var len = (bitField & 65535);
721
722 if (len > 0) {
723 if (((bitField & 16842752) !== 0)) {
724 var reason = this._fulfillmentHandler0;
725 this._settlePromise0(this._rejectionHandler0, reason, bitField);
726 this._rejectPromises(len, reason);
727 } else {
728 var value = this._rejectionHandler0;
729 this._settlePromise0(this._fulfillmentHandler0, value, bitField);
730 this._fulfillPromises(len, value);
731 }
732 this._setLength(0);
733 }
734 this._clearCancellationData();
735};
736
737Promise.prototype._settledValue = function() {
738 var bitField = this._bitField;
739 if (((bitField & 33554432) !== 0)) {
740 return this._rejectionHandler0;
741 } else if (((bitField & 16777216) !== 0)) {
742 return this._fulfillmentHandler0;
743 }
744};
745
746if (typeof Symbol !== "undefined" && Symbol.toStringTag) {
747 es5.defineProperty(Promise.prototype, Symbol.toStringTag, {
748 get: function () {
749 return "Object";
750 }
751 });
752}
753
754function deferResolve(v) {this.promise._resolveCallback(v);}
755function deferReject(v) {this.promise._rejectCallback(v, false);}
756
757Promise.defer = Promise.pending = function() {
758 debug.deprecated("Promise.defer", "new Promise");
759 var promise = new Promise(INTERNAL);
760 return {
761 promise: promise,
762 resolve: deferResolve,
763 reject: deferReject
764 };
765};
766
767util.notEnumerableProp(Promise,
768 "_makeSelfResolutionError",
769 makeSelfResolutionError);
770
771require("./method")(Promise, INTERNAL, tryConvertToPromise, apiRejection,
772 debug);
773require("./bind")(Promise, INTERNAL, tryConvertToPromise, debug);
774require("./cancel")(Promise, PromiseArray, apiRejection, debug);
775require("./direct_resolve")(Promise);
776require("./synchronous_inspection")(Promise);
777require("./join")(
778 Promise, PromiseArray, tryConvertToPromise, INTERNAL, async);
779Promise.Promise = Promise;
780Promise.version = "3.7.2";
781require('./call_get.js')(Promise);
782require('./generators.js')(Promise, apiRejection, INTERNAL, tryConvertToPromise, Proxyable, debug);
783require('./map.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug);
784require('./nodeify.js')(Promise);
785require('./promisify.js')(Promise, INTERNAL);
786require('./props.js')(Promise, PromiseArray, tryConvertToPromise, apiRejection);
787require('./race.js')(Promise, INTERNAL, tryConvertToPromise, apiRejection);
788require('./reduce.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug);
789require('./settle.js')(Promise, PromiseArray, debug);
790require('./some.js')(Promise, PromiseArray, apiRejection);
791require('./timers.js')(Promise, INTERNAL, debug);
792require('./using.js')(Promise, apiRejection, tryConvertToPromise, createContext, INTERNAL, debug);
793require('./any.js')(Promise);
794require('./each.js')(Promise, INTERNAL);
795require('./filter.js')(Promise, INTERNAL);
796
797 util.toFastProperties(Promise);
798 util.toFastProperties(Promise.prototype);
799 function fillTypes(value) {
800 var p = new Promise(INTERNAL);
801 p._fulfillmentHandler0 = value;
802 p._rejectionHandler0 = value;
803 p._promise0 = value;
804 p._receiver0 = value;
805 }
806 // Complete slack tracking, opt out of field-type tracking and
807 // stabilize map
808 fillTypes({a: 1});
809 fillTypes({b: 2});
810 fillTypes({c: 3});
811 fillTypes(1);
812 fillTypes(function(){});
813 fillTypes(undefined);
814 fillTypes(false);
815 fillTypes(new Promise(INTERNAL));
816 debug.setBounds(Async.firstLineError, util.lastLineError);
817 return Promise;
818
819};