Hans 601f9b38f8 feat(@angular/cli): move angular-cli to @angular/cli (#4328)
This release is otherwise identical to beta.28.
2017-02-01 18:19:50 -08:00

69 lines
1.7 KiB
JavaScript

'use strict';
var RSVP = require('rsvp');
var Promise = RSVP.Promise;
module.exports = PromiseExt;
// Utility functions on the native CTOR need some massaging
module.exports.hash = function() {
return this.resolve(RSVP.hash.apply(null, arguments));
};
module.exports.denodeify = function() {
var fn = RSVP.denodeify.apply(null, arguments);
var Constructor = this;
var newFn = function() {
return Constructor.resolve(fn.apply(null, arguments));
};
newFn.__proto__ = arguments[0];
return newFn;
};
module.exports.filter = function() {
return this.resolve(RSVP.filter.apply(null, arguments));
};
module.exports.map = function() {
return this.resolve(RSVP.map.apply(null, arguments));
};
function PromiseExt(resolver, label) {
this._superConstructor(resolver, label);
}
PromiseExt.prototype = Object.create(Promise.prototype);
PromiseExt.prototype.constructor = PromiseExt;
PromiseExt.prototype._superConstructor = Promise;
PromiseExt.__proto__ = Promise;
PromiseExt.prototype.returns = function(value) {
return this.then(function() {
return value;
});
};
PromiseExt.prototype.invoke = function(method) {
var args = Array.prototype.slice(arguments, 1);
return this.then(function(value) {
return value[method].apply(value, args);
}, undefined, 'invoke: ' + method + ' with: ' + args);
};
function constructorMethod(promise, methodName, fn) {
var Constructor = promise.constructor;
return promise.then(function(values) {
return Constructor[methodName](values, fn);
});
}
PromiseExt.prototype.map = function(mapFn) {
return constructorMethod(this, 'map', mapFn);
};
PromiseExt.prototype.filter = function(filterFn) {
return constructorMethod(this, 'filter', filterFn);
};