define("rsvp/all", ["rsvp/promise","exports"], function(__dependency1__, __exports__) { "use strict"; var Promise = __dependency1__.Promise; /* global toString */ function all(promises) { if (Object.prototype.toString.call(promises) !== "[object Array]") { throw new TypeError('You must pass an array to all.'); } return new Promise(function(resolve, reject) { var results = [], remaining = promises.length, promise; if (remaining === 0) { resolve([]); } function resolver(index) { return function(value) { resolveAll(index, value); }; } function resolveAll(index, value) { results[index] = value; if (--remaining === 0) { resolve(results); } } for (var i = 0; i < promises.length; i++) { promise = promises[i]; if (promise && typeof promise.then === 'function') { promise.then(resolver(i), reject); } else { resolveAll(i, promise); } } }); } __exports__.all = all; }); define("rsvp/async", ["exports"], function(__exports__) { "use strict"; var browserGlobal = (typeof window !== 'undefined') ? window : {}; var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver; var async; var local = (typeof global !== 'undefined') ? global : this; // old node function useNextTick() { return function(callback, arg) { process.nextTick(function() { callback(arg); }); }; } // node >= 0.10.x function useSetImmediate() { return function(callback, arg) { /* global setImmediate */ setImmediate(function(){ callback(arg); }); }; } function useMutationObserver() { var queue = []; var observer = new BrowserMutationObserver(function() { var toProcess = queue.slice(); queue = []; toProcess.forEach(function(tuple) { var callback = tuple[0], arg= tuple[1]; callback(arg); }); }); var element = document.createElement('div'); observer.observe(element, { attributes: true }); // Chrome Memory Leak: https://bugs.webkit.org/show_bug.cgi?id=93661 window.addEventListener('unload', function(){ observer.disconnect(); observer = null; }, false); return function(callback, arg) { queue.push([callback, arg]); element.setAttribute('drainQueue', 'drainQueue'); }; } function useSetTimeout() { return function(callback, arg) { local.setTimeout(function() { callback(arg); }, 1); }; } if (typeof setImmediate === 'function') { async = useSetImmediate(); } else if (typeof process !== 'undefined' && {}.toString.call(process) === '[object process]') { async = useNextTick(); } else if (BrowserMutationObserver) { async = useMutationObserver(); } else { async = useSetTimeout(); } __exports__.async = async; }); define("rsvp/config", ["rsvp/async","exports"], function(__dependency1__, __exports__) { "use strict"; var async = __dependency1__.async; var config = {}; config.async = async; __exports__.config = config; }); define("rsvp/defer", ["rsvp/promise","exports"], function(__dependency1__, __exports__) { "use strict"; var Promise = __dependency1__.Promise; function defer() { var deferred = { // pre-allocate shape resolve: undefined, reject: undefined, promise: undefined }; deferred.promise = new Promise(function(resolve, reject) { deferred.resolve = resolve; deferred.reject = reject; }); return deferred; } __exports__.defer = defer; }); define("rsvp/events", ["exports"], function(__exports__) { "use strict"; var Event = function(type, options) { this.type = type; for (var option in options) { if (!options.hasOwnProperty(option)) { continue; } this[option] = options[option]; } }; var indexOf = function(callbacks, callback) { for (var i=0, l=callbacks.length; i 2) { resolve(Array.prototype.slice.call(arguments, 1)); } else { resolve(value); } }; } function denodeify(nodeFunc) { return function() { var nodeArgs = Array.prototype.slice.call(arguments), resolve, reject; var thisArg = this; var promise = new Promise(function(nodeResolve, nodeReject) { resolve = nodeResolve; reject = nodeReject; }); all(nodeArgs).then(function(nodeArgs) { nodeArgs.push(makeNodeCallbackFor(resolve, reject)); try { nodeFunc.apply(thisArg, nodeArgs); } catch(e) { reject(e); } }); return promise; }; } __exports__.denodeify = denodeify; }); define("rsvp/promise", ["rsvp/config","rsvp/events","exports"], function(__dependency1__, __dependency2__, __exports__) { "use strict"; var config = __dependency1__.config; var EventTarget = __dependency2__.EventTarget; function objectOrFunction(x) { return isFunction(x) || (typeof x === "object" && x !== null); } function isFunction(x){ return typeof x === "function"; } var Promise = function(resolver) { var promise = this, resolved = false; if (typeof resolver !== 'function') { throw new TypeError('You must pass a resolver function as the sole argument to the promise constructor'); } if (!(promise instanceof Promise)) { return new Promise(resolver); } var resolvePromise = function(value) { if (resolved) { return; } resolved = true; resolve(promise, value); }; var rejectPromise = function(value) { if (resolved) { return; } resolved = true; reject(promise, value); }; this.on('promise:failed', function(event) { this.trigger('error', { detail: event.detail }); }, this); this.on('error', onerror); try { resolver(resolvePromise, rejectPromise); } catch(e) { rejectPromise(e); } }; function onerror(event) { if (config.onerror) { config.onerror(event.detail); } } var invokeCallback = function(type, promise, callback, event) { var hasCallback = isFunction(callback), value, error, succeeded, failed; if (hasCallback) { try { value = callback(event.detail); succeeded = true; } catch(e) { failed = true; error = e; } } else { value = event.detail; succeeded = true; } if (handleThenable(promise, value)) { return; } else if (hasCallback && succeeded) { resolve(promise, value); } else if (failed) { reject(promise, error); } else if (type === 'resolve') { resolve(promise, value); } else if (type === 'reject') { reject(promise, value); } }; Promise.prototype = { constructor: Promise, isRejected: undefined, isFulfilled: undefined, rejectedReason: undefined, fulfillmentValue: undefined, then: function(done, fail) { this.off('error', onerror); var thenPromise = new this.constructor(function() {}); if (this.isFulfilled) { config.async(function(promise) { invokeCallback('resolve', thenPromise, done, { detail: promise.fulfillmentValue }); }, this); } if (this.isRejected) { config.async(function(promise) { invokeCallback('reject', thenPromise, fail, { detail: promise.rejectedReason }); }, this); } this.on('promise:resolved', function(event) { invokeCallback('resolve', thenPromise, done, event); }); this.on('promise:failed', function(event) { invokeCallback('reject', thenPromise, fail, event); }); return thenPromise; }, fail: function(fail) { return this.then(null, fail); } }; EventTarget.mixin(Promise.prototype); function resolve(promise, value) { if (promise === value) { fulfill(promise, value); } else if (!handleThenable(promise, value)) { fulfill(promise, value); } } function handleThenable(promise, value) { var then = null, resolved; try { if (promise === value) { throw new TypeError("A promises callback cannot return that same promise."); } if (objectOrFunction(value)) { then = value.then; if (isFunction(then)) { then.call(value, function(val) { if (resolved) { return true; } resolved = true; if (value !== val) { resolve(promise, val); } else { fulfill(promise, val); } }, function(val) { if (resolved) { return true; } resolved = true; reject(promise, val); }); return true; } } } catch (error) { reject(promise, error); return true; } return false; } function fulfill(promise, value) { config.async(function() { promise.trigger('promise:resolved', { detail: value }); promise.isFulfilled = true; promise.fulfillmentValue = value; }); } function reject(promise, value) { config.async(function() { promise.trigger('promise:failed', { detail: value }); promise.isRejected = true; promise.rejectedReason = value; }); } __exports__.Promise = Promise; }); define("rsvp/reject", ["rsvp/promise","exports"], function(__dependency1__, __exports__) { "use strict"; var Promise = __dependency1__.Promise; function reject(reason) { return new Promise(function (resolve, reject) { reject(reason); }); } __exports__.reject = reject; }); define("rsvp/resolve", ["rsvp/promise","exports"], function(__dependency1__, __exports__) { "use strict"; var Promise = __dependency1__.Promise; function resolve(thenable) { return new Promise(function(resolve, reject) { resolve(thenable); }); } __exports__.resolve = resolve; }); define("rsvp/rethrow", ["exports"], function(__exports__) { "use strict"; var local = (typeof global === "undefined") ? this : global; function rethrow(reason) { local.setTimeout(function() { throw reason; }); throw reason; } __exports__.rethrow = rethrow; }); define("rsvp", ["rsvp/events","rsvp/promise","rsvp/node","rsvp/all","rsvp/hash","rsvp/rethrow","rsvp/defer","rsvp/config","rsvp/resolve","rsvp/reject","exports"], function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __exports__) { "use strict"; var EventTarget = __dependency1__.EventTarget; var Promise = __dependency2__.Promise; var denodeify = __dependency3__.denodeify; var all = __dependency4__.all; var hash = __dependency5__.hash; var rethrow = __dependency6__.rethrow; var defer = __dependency7__.defer; var config = __dependency8__.config; var resolve = __dependency9__.resolve; var reject = __dependency10__.reject; function configure(name, value) { config[name] = value; } __exports__.Promise = Promise; __exports__.EventTarget = EventTarget; __exports__.all = all; __exports__.hash = hash; __exports__.rethrow = rethrow; __exports__.defer = defer; __exports__.denodeify = denodeify; __exports__.configure = configure; __exports__.resolve = resolve; __exports__.reject = reject; });