зеркало из https://github.com/mozilla/pluotsorbet.git
394 строки
12 KiB
JavaScript
394 строки
12 KiB
JavaScript
|
/*
|
||
|
Copyright (c) 2013 Forbes Lindesay
|
||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||
|
of this software and associated documentation files (the "Software"), to deal
|
||
|
in the Software without restriction, including without limitation the rights
|
||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||
|
copies of the Software, and to permit persons to whom the Software is
|
||
|
furnished to do so, subject to the following conditions:
|
||
|
The above copyright notice and this permission notice shall be included in
|
||
|
all copies or substantial portions of the Software.
|
||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||
|
THE SOFTWARE.
|
||
|
*/
|
||
|
(function e(t, n, r) {
|
||
|
function s(o, u) {
|
||
|
if (!n[o]) {
|
||
|
if (!t[o]) {
|
||
|
var a = typeof require == "function" && require;
|
||
|
if (!u && a) return a(o, !0);
|
||
|
if (i) return i(o, !0);
|
||
|
var f = new Error("Cannot find module '" + o + "'");
|
||
|
throw f.code = "MODULE_NOT_FOUND", f;
|
||
|
}
|
||
|
var l = n[o] = {
|
||
|
exports: {}
|
||
|
};
|
||
|
t[o][0].call(l.exports, function(e) {
|
||
|
var n = t[o][1][e];
|
||
|
return s(n ? n : e);
|
||
|
}, l, l.exports, e, t, n, r);
|
||
|
}
|
||
|
return n[o].exports;
|
||
|
}
|
||
|
var i = typeof require == "function" && require;
|
||
|
for (var o = 0; o < r.length; o++) s(r[o]);
|
||
|
return s;
|
||
|
})({
|
||
|
1: [ function(require, module, exports) {
|
||
|
var process = module.exports = {};
|
||
|
process.nextTick = function() {
|
||
|
var canSetImmediate = typeof window !== "undefined" && window.setImmediate;
|
||
|
var canPost = typeof window !== "undefined" && window.postMessage && window.addEventListener;
|
||
|
if (canSetImmediate) {
|
||
|
return function(f) {
|
||
|
return window.setImmediate(f);
|
||
|
};
|
||
|
}
|
||
|
if (canPost) {
|
||
|
var queue = [];
|
||
|
window.addEventListener("message", function(ev) {
|
||
|
var source = ev.source;
|
||
|
if ((source === window || source === null) && ev.data === "process-tick") {
|
||
|
ev.stopPropagation();
|
||
|
if (queue.length > 0) {
|
||
|
var fn = queue.shift();
|
||
|
fn();
|
||
|
}
|
||
|
}
|
||
|
}, true);
|
||
|
return function nextTick(fn) {
|
||
|
queue.push(fn);
|
||
|
window.postMessage("process-tick", "*");
|
||
|
};
|
||
|
}
|
||
|
return function nextTick(fn) {
|
||
|
setTimeout(fn, 0);
|
||
|
};
|
||
|
}();
|
||
|
process.title = "browser";
|
||
|
process.browser = true;
|
||
|
process.env = {};
|
||
|
process.argv = [];
|
||
|
function noop() {}
|
||
|
process.on = noop;
|
||
|
process.addListener = noop;
|
||
|
process.once = noop;
|
||
|
process.off = noop;
|
||
|
process.removeListener = noop;
|
||
|
process.removeAllListeners = noop;
|
||
|
process.emit = noop;
|
||
|
process.binding = function(name) {
|
||
|
throw new Error("process.binding is not supported");
|
||
|
};
|
||
|
process.cwd = function() {
|
||
|
return "/";
|
||
|
};
|
||
|
process.chdir = function(dir) {
|
||
|
throw new Error("process.chdir is not supported");
|
||
|
};
|
||
|
}, {} ],
|
||
|
2: [ function(require, module, exports) {
|
||
|
"use strict";
|
||
|
var asap = require("asap");
|
||
|
module.exports = Promise;
|
||
|
function Promise(fn) {
|
||
|
if (typeof this !== "object") throw new TypeError("Promises must be constructed via new");
|
||
|
if (typeof fn !== "function") throw new TypeError("not a function");
|
||
|
var state = null;
|
||
|
var value = null;
|
||
|
var deferreds = [];
|
||
|
var self = this;
|
||
|
this.then = function(onFulfilled, onRejected) {
|
||
|
return new self.constructor(function(resolve, reject) {
|
||
|
handle(new Handler(onFulfilled, onRejected, resolve, reject));
|
||
|
});
|
||
|
};
|
||
|
function handle(deferred) {
|
||
|
if (state === null) {
|
||
|
deferreds.push(deferred);
|
||
|
return;
|
||
|
}
|
||
|
asap(function() {
|
||
|
var cb = state ? deferred.onFulfilled : deferred.onRejected;
|
||
|
if (cb === null) {
|
||
|
(state ? deferred.resolve : deferred.reject)(value);
|
||
|
return;
|
||
|
}
|
||
|
var ret;
|
||
|
try {
|
||
|
ret = cb(value);
|
||
|
} catch (e) {
|
||
|
deferred.reject(e);
|
||
|
return;
|
||
|
}
|
||
|
deferred.resolve(ret);
|
||
|
});
|
||
|
}
|
||
|
function resolve(newValue) {
|
||
|
try {
|
||
|
if (newValue === self) throw new TypeError("A promise cannot be resolved with itself.");
|
||
|
if (newValue && (typeof newValue === "object" || typeof newValue === "function")) {
|
||
|
var then = newValue.then;
|
||
|
if (typeof then === "function") {
|
||
|
doResolve(then.bind(newValue), resolve, reject);
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
state = true;
|
||
|
value = newValue;
|
||
|
finale();
|
||
|
} catch (e) {
|
||
|
reject(e);
|
||
|
}
|
||
|
}
|
||
|
function reject(newValue) {
|
||
|
state = false;
|
||
|
value = newValue;
|
||
|
finale();
|
||
|
}
|
||
|
function finale() {
|
||
|
for (var i = 0, len = deferreds.length; i < len; i++) handle(deferreds[i]);
|
||
|
deferreds = null;
|
||
|
}
|
||
|
doResolve(fn, resolve, reject);
|
||
|
}
|
||
|
function Handler(onFulfilled, onRejected, resolve, reject) {
|
||
|
this.onFulfilled = typeof onFulfilled === "function" ? onFulfilled : null;
|
||
|
this.onRejected = typeof onRejected === "function" ? onRejected : null;
|
||
|
this.resolve = resolve;
|
||
|
this.reject = reject;
|
||
|
}
|
||
|
function doResolve(fn, onFulfilled, onRejected) {
|
||
|
var done = false;
|
||
|
try {
|
||
|
fn(function(value) {
|
||
|
if (done) return;
|
||
|
done = true;
|
||
|
onFulfilled(value);
|
||
|
}, function(reason) {
|
||
|
if (done) return;
|
||
|
done = true;
|
||
|
onRejected(reason);
|
||
|
});
|
||
|
} catch (ex) {
|
||
|
if (done) return;
|
||
|
done = true;
|
||
|
onRejected(ex);
|
||
|
}
|
||
|
}
|
||
|
}, {
|
||
|
asap: 4
|
||
|
} ],
|
||
|
3: [ function(require, module, exports) {
|
||
|
"use strict";
|
||
|
var Promise = require("./core.js");
|
||
|
var asap = require("asap");
|
||
|
module.exports = Promise;
|
||
|
function ValuePromise(value) {
|
||
|
this.then = function(onFulfilled) {
|
||
|
if (typeof onFulfilled !== "function") return this;
|
||
|
return new Promise(function(resolve, reject) {
|
||
|
asap(function() {
|
||
|
try {
|
||
|
resolve(onFulfilled(value));
|
||
|
} catch (ex) {
|
||
|
reject(ex);
|
||
|
}
|
||
|
});
|
||
|
});
|
||
|
};
|
||
|
}
|
||
|
ValuePromise.prototype = Promise.prototype;
|
||
|
var TRUE = new ValuePromise(true);
|
||
|
var FALSE = new ValuePromise(false);
|
||
|
var NULL = new ValuePromise(null);
|
||
|
var UNDEFINED = new ValuePromise(undefined);
|
||
|
var ZERO = new ValuePromise(0);
|
||
|
var EMPTYSTRING = new ValuePromise("");
|
||
|
Promise.resolve = function(value) {
|
||
|
if (value instanceof Promise) return value;
|
||
|
if (value === null) return NULL;
|
||
|
if (value === undefined) return UNDEFINED;
|
||
|
if (value === true) return TRUE;
|
||
|
if (value === false) return FALSE;
|
||
|
if (value === 0) return ZERO;
|
||
|
if (value === "") return EMPTYSTRING;
|
||
|
if (typeof value === "object" || typeof value === "function") {
|
||
|
try {
|
||
|
var then = value.then;
|
||
|
if (typeof then === "function") {
|
||
|
return new Promise(then.bind(value));
|
||
|
}
|
||
|
} catch (ex) {
|
||
|
return new Promise(function(resolve, reject) {
|
||
|
reject(ex);
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
return new ValuePromise(value);
|
||
|
};
|
||
|
Promise.all = function(arr) {
|
||
|
var args = Array.prototype.slice.call(arr);
|
||
|
return new Promise(function(resolve, reject) {
|
||
|
if (args.length === 0) return resolve([]);
|
||
|
var remaining = args.length;
|
||
|
function res(i, val) {
|
||
|
try {
|
||
|
if (val && (typeof val === "object" || typeof val === "function")) {
|
||
|
var then = val.then;
|
||
|
if (typeof then === "function") {
|
||
|
then.call(val, function(val) {
|
||
|
res(i, val);
|
||
|
}, reject);
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
args[i] = val;
|
||
|
if (--remaining === 0) {
|
||
|
resolve(args);
|
||
|
}
|
||
|
} catch (ex) {
|
||
|
reject(ex);
|
||
|
}
|
||
|
}
|
||
|
for (var i = 0; i < args.length; i++) {
|
||
|
res(i, args[i]);
|
||
|
}
|
||
|
});
|
||
|
};
|
||
|
Promise.reject = function(value) {
|
||
|
return new Promise(function(resolve, reject) {
|
||
|
reject(value);
|
||
|
});
|
||
|
};
|
||
|
Promise.race = function(values) {
|
||
|
return new Promise(function(resolve, reject) {
|
||
|
values.forEach(function(value) {
|
||
|
Promise.resolve(value).then(resolve, reject);
|
||
|
});
|
||
|
});
|
||
|
};
|
||
|
Promise.prototype["catch"] = function(onRejected) {
|
||
|
return this.then(null, onRejected);
|
||
|
};
|
||
|
}, {
|
||
|
"./core.js": 2,
|
||
|
asap: 4
|
||
|
} ],
|
||
|
4: [ function(require, module, exports) {
|
||
|
(function(process) {
|
||
|
var head = {
|
||
|
task: void 0,
|
||
|
next: null
|
||
|
};
|
||
|
var tail = head;
|
||
|
var flushing = false;
|
||
|
var requestFlush = void 0;
|
||
|
var isNodeJS = false;
|
||
|
function flush() {
|
||
|
while (head.next) {
|
||
|
head = head.next;
|
||
|
var task = head.task;
|
||
|
head.task = void 0;
|
||
|
var domain = head.domain;
|
||
|
if (domain) {
|
||
|
head.domain = void 0;
|
||
|
domain.enter();
|
||
|
}
|
||
|
try {
|
||
|
task();
|
||
|
} catch (e) {
|
||
|
if (isNodeJS) {
|
||
|
if (domain) {
|
||
|
domain.exit();
|
||
|
}
|
||
|
setTimeout(flush, 0);
|
||
|
if (domain) {
|
||
|
domain.enter();
|
||
|
}
|
||
|
throw e;
|
||
|
} else {
|
||
|
setTimeout(function() {
|
||
|
throw e;
|
||
|
}, 0);
|
||
|
}
|
||
|
}
|
||
|
if (domain) {
|
||
|
domain.exit();
|
||
|
}
|
||
|
}
|
||
|
flushing = false;
|
||
|
}
|
||
|
if (typeof process !== "undefined" && process.nextTick) {
|
||
|
isNodeJS = true;
|
||
|
requestFlush = function() {
|
||
|
process.nextTick(flush);
|
||
|
};
|
||
|
} else if (typeof setImmediate === "function") {
|
||
|
if (typeof window !== "undefined") {
|
||
|
requestFlush = setImmediate.bind(window, flush);
|
||
|
} else {
|
||
|
requestFlush = function() {
|
||
|
setImmediate(flush);
|
||
|
};
|
||
|
}
|
||
|
} else if (typeof MessageChannel !== "undefined") {
|
||
|
var channel = new MessageChannel();
|
||
|
channel.port1.onmessage = flush;
|
||
|
requestFlush = function() {
|
||
|
channel.port2.postMessage(0);
|
||
|
};
|
||
|
} else {
|
||
|
requestFlush = function() {
|
||
|
setTimeout(flush, 0);
|
||
|
};
|
||
|
}
|
||
|
function asap(task) {
|
||
|
tail = tail.next = {
|
||
|
task: task,
|
||
|
domain: isNodeJS && process.domain,
|
||
|
next: null
|
||
|
};
|
||
|
if (!flushing) {
|
||
|
flushing = true;
|
||
|
requestFlush();
|
||
|
}
|
||
|
}
|
||
|
module.exports = asap;
|
||
|
}).call(this, require("_process"));
|
||
|
}, {
|
||
|
_process: 1
|
||
|
} ],
|
||
|
5: [ function(require, module, exports) {
|
||
|
if (typeof Promise.prototype.done !== "function") {
|
||
|
Promise.prototype.done = function(onFulfilled, onRejected) {
|
||
|
var self = arguments.length ? this.then.apply(this, arguments) : this;
|
||
|
self.then(null, function(err) {
|
||
|
setTimeout(function() {
|
||
|
throw err;
|
||
|
}, 0);
|
||
|
});
|
||
|
};
|
||
|
}
|
||
|
}, {} ],
|
||
|
6: [ function(require, module, exports) {
|
||
|
var asap = require("asap");
|
||
|
if (typeof Promise === "undefined") {
|
||
|
Promise = require("./lib/core.js");
|
||
|
require("./lib/es6-extensions.js");
|
||
|
}
|
||
|
require("./polyfill-done.js");
|
||
|
}, {
|
||
|
"./lib/core.js": 2,
|
||
|
"./lib/es6-extensions.js": 3,
|
||
|
"./polyfill-done.js": 5,
|
||
|
asap: 4
|
||
|
} ]
|
||
|
}, {}, [ 6 ]);
|
||
|
//# sourceMappingURL=/polyfills/promise-6.0.0.js.map
|