aboutsummaryrefslogtreecommitdiff
path: root/node_modules/immediate
diff options
context:
space:
mode:
authorruki <waruqi@gmail.com>2018-11-08 00:38:48 +0800
committerruki <waruqi@gmail.com>2018-11-07 21:53:09 +0800
commit26105034da4fcce7ac883c899d781f016559310d (patch)
treec459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/immediate
parent2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff)
downloadxmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz
xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip
switch to vuepress
Diffstat (limited to 'node_modules/immediate')
-rw-r--r--node_modules/immediate/.travis.yml12
-rw-r--r--node_modules/immediate/LICENSE.txt20
-rw-r--r--node_modules/immediate/README.md81
-rw-r--r--node_modules/immediate/bench.js89
-rw-r--r--node_modules/immediate/bower.json13
-rw-r--r--node_modules/immediate/component.json13
-rw-r--r--node_modules/immediate/dist/immediate.js165
-rw-r--r--node_modules/immediate/dist/immediate.min.js1
-rw-r--r--node_modules/immediate/lib/index.js96
-rw-r--r--node_modules/immediate/lib/messageChannel.js18
-rw-r--r--node_modules/immediate/lib/mutation.js22
-rw-r--r--node_modules/immediate/lib/nextTick.js11
-rw-r--r--node_modules/immediate/lib/stateChange.js24
-rw-r--r--node_modules/immediate/lib/timeout.js10
-rw-r--r--node_modules/immediate/package.json48
15 files changed, 623 insertions, 0 deletions
diff --git a/node_modules/immediate/.travis.yml b/node_modules/immediate/.travis.yml
new file mode 100644
index 00000000..8c2c20b7
--- /dev/null
+++ b/node_modules/immediate/.travis.yml
@@ -0,0 +1,12 @@
+language: node_js
+node_js:
+ - '0.10'
+notifications:
+ email: false
+
+before_script:
+ - "export DISPLAY=:99.0"
+ - "sh -e /etc/init.d/xvfb start"
+ - "sleep 5"
+ # Workaround for Selenium #3280 issue
+ - "sudo sed -i 's/^127\\.0\\.0\\.1.*$/127.0.0.1 localhost/' /etc/hosts" \ No newline at end of file
diff --git a/node_modules/immediate/LICENSE.txt b/node_modules/immediate/LICENSE.txt
new file mode 100644
index 00000000..88c18c27
--- /dev/null
+++ b/node_modules/immediate/LICENSE.txt
@@ -0,0 +1,20 @@
+Copyright (c) 2012 Barnesandnoble.com, llc, Donavon West, Domenic Denicola, Brian Cavalier
+
+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.
diff --git a/node_modules/immediate/README.md b/node_modules/immediate/README.md
new file mode 100644
index 00000000..6d31c87f
--- /dev/null
+++ b/node_modules/immediate/README.md
@@ -0,0 +1,81 @@
+# immediate [![Build Status](https://travis-ci.org/calvinmetcalf/immediate.svg?branch=master)](https://travis-ci.org/calvinmetcalf/immediate)
+
+[![testling status](https://ci.testling.com/calvinmetcalf/immediate.png)](https://ci.testling.com/calvinmetcalf/immediate)
+
+```
+npm install immediate --save
+```
+
+then
+
+```js
+var immediate = require("immediate");
+
+immediate(function () {
+ // this will run soon
+});
+
+immediate(function (arg1, arg2) {
+ // get your args like in iojs
+}, thing1, thing2);
+```
+
+## Introduction
+
+**immediate** is a microtask library, decended from [NobleJS's setImmediate](https://github.com/NobleJS/setImmediate), but including ideas from [Cujo's When](https://github.com/cujojs/when) and [RSVP][RSVP].
+
+immediate takes the tricks from setImmedate and RSVP and combines them with the schedualer inspired (vaugly) by whens.
+
+Note versions 2.6.5 and earlier were strictly speaking a 'macrotask' library not a microtask one, [see this for the difference](https://github.com/YuzuJS/setImmediate#macrotasks-and-microtasks), if you need a macrotask library, [I got you covered](https://github.com/calvinmetcalf/macrotask).
+
+Several new features were added in versions 3.1.0 and 3.2.0 to maintain parity with
+process.nextTick, but the 3.0.x series is still being kept up to date if you just need
+the small barebones version
+
+## The Tricks
+
+### `process.nextTick`
+
+Note that we check for *actual* Node.js environments, not emulated ones like those produced by browserify or similar.
+
+### `MutationObserver`
+
+This is what [RSVP][RSVP] uses, it's very fast, details on [MDN](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver).
+
+
+### `MessageChannel`
+
+Unfortunately, `postMessage` has completely different semantics inside web workers, and so cannot be used there. So we
+turn to [`MessageChannel`][MessageChannel], which has worse browser support, but does work inside a web worker.
+
+### `<script> onreadystatechange`
+
+For our last trick, we pull something out to make things fast in Internet Explorer versions 6 through 8: namely,
+creating a `<script>` element and firing our calls in its `onreadystatechange` event. This does execute in a future
+turn of the event loop, and is also faster than `setTimeout(…, 0)`, so hey, why not?
+
+## Tricks we don't use
+
+### `setImmediate`
+We avoid this process.nextTick in node is better suited to our needs and in Internet Explorer 10 there is a broken version of setImmediate we avoid using this.
+
+
+## Reference and Reading
+
+ * [Efficient Script Yielding W3C Editor's Draft][spec]
+ * [W3C mailing list post introducing the specification][list-post]
+ * [IE Test Drive demo][ie-demo]
+ * [Introductory blog post by Nicholas C. Zakas][ncz]
+ * I wrote a couple blog pots on this, [part 1][my-blog-1] and [part 2][my-blog-2]
+
+[RSVP]: https://github.com/tildeio/rsvp.js
+[spec]: https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/setImmediate/Overview.html
+[list-post]: http://lists.w3.org/Archives/Public/public-web-perf/2011Jun/0100.html
+[ie-demo]: http://ie.microsoft.com/testdrive/Performance/setImmediateSorting/Default.html
+[ncz]: http://www.nczonline.net/blog/2011/09/19/script-yielding-with-setimmediate/
+[nextTick]: http://nodejs.org/docs/v0.8.16/api/process.html#process_process_nexttick_callback
+[postMessage]: http://www.whatwg.org/specs/web-apps/current-work/multipage/web-messaging.html#posting-messages
+[MessageChannel]: http://www.whatwg.org/specs/web-apps/current-work/multipage/web-messaging.html#channel-messaging
+[cross-browser-demo]: http://calvinmetcalf.github.io/setImmediate-shim-demo
+[my-blog-1]:http://calvinmetcalf.com/post/61672207151/setimmediate-etc
+[my-blog-2]:http://calvinmetcalf.com/post/61761231881/javascript-schedulers
diff --git a/node_modules/immediate/bench.js b/node_modules/immediate/bench.js
new file mode 100644
index 00000000..590ed350
--- /dev/null
+++ b/node_modules/immediate/bench.js
@@ -0,0 +1,89 @@
+var immediate = require('./lib/index');
+
+function bench (num, done) {
+ var i = 1e3;
+ var time = process.hrtime();
+ function next(i) {
+ var total = 50000;
+ var todo = total;
+ function nextInt1() {
+ if (--todo !== 0) {
+ return;
+ }
+ immediate(next, i -1);
+ }
+ function nextInt2() {
+ if (--todo !== 0) {
+ return;
+ }
+ immediate(next, i -1);
+ }
+ function nextInt3() {
+ if (--todo !== 0) {
+ return;
+ }
+ immediate(next, i -1);
+ }
+ function nextInt4() {
+ if (--todo !== 0) {
+ return;
+ }
+ immediate(next, i -1);
+ }
+ function nextInt5() {
+ if (--todo !== 0) {
+ return;
+ }
+ immediate(next, i -1);
+ }
+ if (i > 0) {
+ var j = 0;
+ while (j++ < total) {
+ switch (j % 5) {
+ case 0:
+ immediate(nextInt1);
+ break;
+ case 1:
+ immediate(nextInt2, 'arg');
+ break;
+ case 2:
+ immediate(nextInt3, 'arg', 'another arg');
+ break;
+ case 3:
+ immediate(nextInt4, 'arg', 'another arg', 'third arg');
+ break;
+ case 4:
+ immediate(nextInt5, 'arg', 'another arg', 'third arg', '4th arg');
+ break;
+ }
+ }
+ } else {
+ after();
+ }
+ }
+
+ immediate(next, i);
+ function after() {
+ var diff = process.hrtime(time);
+ var units = 'nanoseconds';
+ var diftime = diff[0] * 1e9 + diff[1];
+ if (diftime > 1e6) {
+ diftime /= 1e6;
+ units = 'milliseconds';
+ }
+ if (diftime > 1000) {
+ diftime /= 1000;
+ units = 'seconds';
+ }
+ console.log(`Benchmark ${num < 10 ? ('0' + num): num} took ${diftime.toFixed(4)} ${units}`);
+ done(num);
+ }
+}
+var runs = 20;
+function afterRun(num) {
+ if (num === runs) {
+ return;
+ }
+ bench(num + 1, afterRun);
+}
+afterRun(0);
diff --git a/node_modules/immediate/bower.json b/node_modules/immediate/bower.json
new file mode 100644
index 00000000..8a2d604a
--- /dev/null
+++ b/node_modules/immediate/bower.json
@@ -0,0 +1,13 @@
+{
+ "name": "immediate",
+ "version": "3.2.1",
+ "description": "A cross browser microtask library",
+ "homepage": "https://github.com/calvinmetcalf/immediate",
+ "authors": [
+ "Domenic Denicola <domenic@domenicdenicola.com> (http://domenicdenicola.com)",
+ "Donavon West <github@donavon.com> (http://donavon.com)",
+ "Yaffle",
+ "Calvin Metcalf <calvin.metcalf@gmail.com>"
+ ],
+ "main": "dist/immediate.js"
+}
diff --git a/node_modules/immediate/component.json b/node_modules/immediate/component.json
new file mode 100644
index 00000000..16d6143d
--- /dev/null
+++ b/node_modules/immediate/component.json
@@ -0,0 +1,13 @@
+{
+ "name": "immediate",
+ "version": "3.2.1",
+ "description": "A cross browser microtask library",
+ "repo": "calvinmetcalf/immediate",
+ "keywords": [],
+ "development": {},
+ "license": "MIT",
+ "main": "dist/immediate.js",
+ "scripts": [
+ "dist/immediate.js"
+ ]
+}
diff --git a/node_modules/immediate/dist/immediate.js b/node_modules/immediate/dist/immediate.js
new file mode 100644
index 00000000..8516dcf3
--- /dev/null
+++ b/node_modules/immediate/dist/immediate.js
@@ -0,0 +1,165 @@
+(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.immediate = f()}})(function(){var define,module,exports;return (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(_dereq_,module,exports){
+'use strict';
+var types = [
+ _dereq_('./nextTick'),
+ _dereq_('./mutation.js'),
+ _dereq_('./messageChannel'),
+ _dereq_('./stateChange'),
+ _dereq_('./timeout')
+];
+var draining;
+var currentQueue;
+var queueIndex = -1;
+var queue = [];
+var scheduled = false;
+function cleanUpNextTick() {
+ draining = false;
+ if (currentQueue && currentQueue.length) {
+ queue = currentQueue.concat(queue);
+ } else {
+ queueIndex = -1;
+ }
+ if (queue.length) {
+ nextTick();
+ }
+}
+
+//named nextTick for less confusing stack traces
+function nextTick() {
+ scheduled = false;
+ draining = true;
+ var len = queue.length;
+ var timeout = setTimeout(cleanUpNextTick);
+ while (len) {
+ currentQueue = queue;
+ queue = [];
+ while (++queueIndex < len) {
+ currentQueue[queueIndex].run();
+ }
+ queueIndex = -1;
+ len = queue.length;
+ }
+ queueIndex = -1;
+ draining = false;
+ clearTimeout(timeout);
+}
+var scheduleDrain;
+var i = -1;
+var len = types.length;
+while (++i < len) {
+ if (types[i] && types[i].test && types[i].test()) {
+ scheduleDrain = types[i].install(nextTick);
+ break;
+ }
+}
+// v8 likes predictible objects
+function Item(fun, array) {
+ this.fun = fun;
+ this.array = array;
+}
+Item.prototype.run = function () {
+ this.fun.apply(null, this.array);
+};
+module.exports = immediate;
+function immediate(task) {
+ var args = new Array(arguments.length - 1);
+ if (arguments.length > 1) {
+ for (var i = 1; i < arguments.length; i++) {
+ args[i - 1] = arguments[i];
+ }
+ }
+ queue.push(new Item(task, args));
+ if (!scheduled && !draining) {
+ scheduled = true;
+ scheduleDrain();
+ }
+}
+
+},{"./messageChannel":2,"./mutation.js":3,"./nextTick":6,"./stateChange":4,"./timeout":5}],2:[function(_dereq_,module,exports){
+(function (global){
+'use strict';
+
+exports.test = function () {
+ if (global.setImmediate) {
+ // we can only get here in IE10
+ // which doesn't handel postMessage well
+ return false;
+ }
+ return typeof global.MessageChannel !== 'undefined';
+};
+
+exports.install = function (func) {
+ var channel = new global.MessageChannel();
+ channel.port1.onmessage = func;
+ return function () {
+ channel.port2.postMessage(0);
+ };
+};
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{}],3:[function(_dereq_,module,exports){
+(function (global){
+'use strict';
+//based off rsvp https://github.com/tildeio/rsvp.js
+//license https://github.com/tildeio/rsvp.js/blob/master/LICENSE
+//https://github.com/tildeio/rsvp.js/blob/master/lib/rsvp/asap.js
+
+var Mutation = global.MutationObserver || global.WebKitMutationObserver;
+
+exports.test = function () {
+ return Mutation;
+};
+
+exports.install = function (handle) {
+ var called = 0;
+ var observer = new Mutation(handle);
+ var element = global.document.createTextNode('');
+ observer.observe(element, {
+ characterData: true
+ });
+ return function () {
+ element.data = (called = ++called % 2);
+ };
+};
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{}],4:[function(_dereq_,module,exports){
+(function (global){
+'use strict';
+
+exports.test = function () {
+ return 'document' in global && 'onreadystatechange' in global.document.createElement('script');
+};
+
+exports.install = function (handle) {
+ return function () {
+
+ // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted
+ // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.
+ var scriptEl = global.document.createElement('script');
+ scriptEl.onreadystatechange = function () {
+ handle();
+
+ scriptEl.onreadystatechange = null;
+ scriptEl.parentNode.removeChild(scriptEl);
+ scriptEl = null;
+ };
+ global.document.documentElement.appendChild(scriptEl);
+
+ return handle;
+ };
+};
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{}],5:[function(_dereq_,module,exports){
+'use strict';
+exports.test = function () {
+ return true;
+};
+
+exports.install = function (t) {
+ return function () {
+ setTimeout(t, 0);
+ };
+};
+},{}],6:[function(_dereq_,module,exports){
+
+},{}]},{},[1])(1)
+});
diff --git a/node_modules/immediate/dist/immediate.min.js b/node_modules/immediate/dist/immediate.min.js
new file mode 100644
index 00000000..7a2c4849
--- /dev/null
+++ b/node_modules/immediate/dist/immediate.min.js
@@ -0,0 +1 @@
+!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var n;n="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,n.immediate=e()}}(function(){return function e(n,t,o){function i(u,f){if(!t[u]){if(!n[u]){var a="function"==typeof require&&require;if(!f&&a)return a(u,!0);if(r)return r(u,!0);var s=new Error("Cannot find module '"+u+"'");throw s.code="MODULE_NOT_FOUND",s}var l=t[u]={exports:{}};n[u][0].call(l.exports,function(e){var t=n[u][1][e];return i(t?t:e)},l,l.exports,e,n,t,o)}return t[u].exports}for(var r="function"==typeof require&&require,u=0;u<o.length;u++)i(o[u]);return i}({1:[function(e,n,t){"use strict";function o(){f=!1,a&&a.length?d=a.concat(d):c=-1,d.length&&i()}function i(){p=!1,f=!0;for(var e=d.length,n=setTimeout(o);e;){for(a=d,d=[];++c<e;)a[c].run();c=-1,e=d.length}c=-1,f=!1,clearTimeout(n)}function r(e,n){this.fun=e,this.array=n}function u(e){var n=new Array(arguments.length-1);if(arguments.length>1)for(var t=1;t<arguments.length;t++)n[t-1]=arguments[t];d.push(new r(e,n)),p||f||(p=!0,s())}for(var f,a,s,l=[e("./nextTick"),e("./mutation.js"),e("./messageChannel"),e("./stateChange"),e("./timeout")],c=-1,d=[],p=!1,g=-1,m=l.length;++g<m;)if(l[g]&&l[g].test&&l[g].test()){s=l[g].install(i);break}r.prototype.run=function(){this.fun.apply(null,this.array)},n.exports=u},{"./messageChannel":2,"./mutation.js":3,"./nextTick":6,"./stateChange":4,"./timeout":5}],2:[function(e,n,t){(function(e){"use strict";t.test=function(){return e.setImmediate?!1:"undefined"!=typeof e.MessageChannel},t.install=function(n){var t=new e.MessageChannel;return t.port1.onmessage=n,function(){t.port2.postMessage(0)}}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],3:[function(e,n,t){(function(e){"use strict";var n=e.MutationObserver||e.WebKitMutationObserver;t.test=function(){return n},t.install=function(t){var o=0,i=new n(t),r=e.document.createTextNode("");return i.observe(r,{characterData:!0}),function(){r.data=o=++o%2}}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],4:[function(e,n,t){(function(e){"use strict";t.test=function(){return"document"in e&&"onreadystatechange"in e.document.createElement("script")},t.install=function(n){return function(){var t=e.document.createElement("script");return t.onreadystatechange=function(){n(),t.onreadystatechange=null,t.parentNode.removeChild(t),t=null},e.document.documentElement.appendChild(t),n}}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],5:[function(e,n,t){"use strict";t.test=function(){return!0},t.install=function(e){return function(){setTimeout(e,0)}}},{}],6:[function(e,n,t){},{}]},{},[1])(1)});
diff --git a/node_modules/immediate/lib/index.js b/node_modules/immediate/lib/index.js
new file mode 100644
index 00000000..90c006ad
--- /dev/null
+++ b/node_modules/immediate/lib/index.js
@@ -0,0 +1,96 @@
+'use strict';
+var types = [
+ require('./nextTick'),
+ require('./mutation.js'),
+ require('./messageChannel'),
+ require('./stateChange'),
+ require('./timeout')
+];
+var draining;
+var currentQueue;
+var queueIndex = -1;
+var queue = [];
+var scheduled = false;
+function cleanUpNextTick() {
+ if (!draining || !currentQueue) {
+ return;
+ }
+ draining = false;
+ if (currentQueue.length) {
+ queue = currentQueue.concat(queue);
+ } else {
+ queueIndex = -1;
+ }
+ if (queue.length) {
+ nextTick();
+ }
+}
+
+//named nextTick for less confusing stack traces
+function nextTick() {
+ if (draining) {
+ return;
+ }
+ scheduled = false;
+ draining = true;
+ var len = queue.length;
+ var timeout = setTimeout(cleanUpNextTick);
+ while (len) {
+ currentQueue = queue;
+ queue = [];
+ while (currentQueue && ++queueIndex < len) {
+ currentQueue[queueIndex].run();
+ }
+ queueIndex = -1;
+ len = queue.length;
+ }
+ currentQueue = null;
+ queueIndex = -1;
+ draining = false;
+ clearTimeout(timeout);
+}
+var scheduleDrain;
+var i = -1;
+var len = types.length;
+while (++i < len) {
+ if (types[i] && types[i].test && types[i].test()) {
+ scheduleDrain = types[i].install(nextTick);
+ break;
+ }
+}
+// v8 likes predictible objects
+function Item(fun, array) {
+ this.fun = fun;
+ this.array = array;
+}
+Item.prototype.run = function () {
+ var fun = this.fun;
+ var array = this.array;
+ switch (array.length) {
+ case 0:
+ return fun();
+ case 1:
+ return fun(array[0]);
+ case 2:
+ return fun(array[0], array[1]);
+ case 3:
+ return fun(array[0], array[1], array[2]);
+ default:
+ return fun.apply(null, array);
+ }
+
+};
+module.exports = immediate;
+function immediate(task) {
+ var args = new Array(arguments.length - 1);
+ if (arguments.length > 1) {
+ for (var i = 1; i < arguments.length; i++) {
+ args[i - 1] = arguments[i];
+ }
+ }
+ queue.push(new Item(task, args));
+ if (!scheduled && !draining) {
+ scheduled = true;
+ scheduleDrain();
+ }
+}
diff --git a/node_modules/immediate/lib/messageChannel.js b/node_modules/immediate/lib/messageChannel.js
new file mode 100644
index 00000000..a6ce360b
--- /dev/null
+++ b/node_modules/immediate/lib/messageChannel.js
@@ -0,0 +1,18 @@
+'use strict';
+
+exports.test = function () {
+ if (global.setImmediate) {
+ // we can only get here in IE10
+ // which doesn't handel postMessage well
+ return false;
+ }
+ return typeof global.MessageChannel !== 'undefined';
+};
+
+exports.install = function (func) {
+ var channel = new global.MessageChannel();
+ channel.port1.onmessage = func;
+ return function () {
+ channel.port2.postMessage(0);
+ };
+}; \ No newline at end of file
diff --git a/node_modules/immediate/lib/mutation.js b/node_modules/immediate/lib/mutation.js
new file mode 100644
index 00000000..f1597412
--- /dev/null
+++ b/node_modules/immediate/lib/mutation.js
@@ -0,0 +1,22 @@
+'use strict';
+//based off rsvp https://github.com/tildeio/rsvp.js
+//license https://github.com/tildeio/rsvp.js/blob/master/LICENSE
+//https://github.com/tildeio/rsvp.js/blob/master/lib/rsvp/asap.js
+
+var Mutation = global.MutationObserver || global.WebKitMutationObserver;
+
+exports.test = function () {
+ return Mutation;
+};
+
+exports.install = function (handle) {
+ var called = 0;
+ var observer = new Mutation(handle);
+ var element = global.document.createTextNode('');
+ observer.observe(element, {
+ characterData: true
+ });
+ return function () {
+ element.data = (called = ++called % 2);
+ };
+}; \ No newline at end of file
diff --git a/node_modules/immediate/lib/nextTick.js b/node_modules/immediate/lib/nextTick.js
new file mode 100644
index 00000000..6acc0d76
--- /dev/null
+++ b/node_modules/immediate/lib/nextTick.js
@@ -0,0 +1,11 @@
+'use strict';
+exports.test = function () {
+ // Don't get fooled by e.g. browserify environments.
+ return (typeof process !== 'undefined') && !process.browser;
+};
+
+exports.install = function (func) {
+ return function () {
+ process.nextTick(func);
+ };
+};
diff --git a/node_modules/immediate/lib/stateChange.js b/node_modules/immediate/lib/stateChange.js
new file mode 100644
index 00000000..5b2316d7
--- /dev/null
+++ b/node_modules/immediate/lib/stateChange.js
@@ -0,0 +1,24 @@
+'use strict';
+
+exports.test = function () {
+ return 'document' in global && 'onreadystatechange' in global.document.createElement('script');
+};
+
+exports.install = function (handle) {
+ return function () {
+
+ // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted
+ // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.
+ var scriptEl = global.document.createElement('script');
+ scriptEl.onreadystatechange = function () {
+ handle();
+
+ scriptEl.onreadystatechange = null;
+ scriptEl.parentNode.removeChild(scriptEl);
+ scriptEl = null;
+ };
+ global.document.documentElement.appendChild(scriptEl);
+
+ return handle;
+ };
+}; \ No newline at end of file
diff --git a/node_modules/immediate/lib/timeout.js b/node_modules/immediate/lib/timeout.js
new file mode 100644
index 00000000..bd97fd2f
--- /dev/null
+++ b/node_modules/immediate/lib/timeout.js
@@ -0,0 +1,10 @@
+'use strict';
+exports.test = function () {
+ return true;
+};
+
+exports.install = function (t) {
+ return function () {
+ setTimeout(t, 0);
+ };
+}; \ No newline at end of file
diff --git a/node_modules/immediate/package.json b/node_modules/immediate/package.json
new file mode 100644
index 00000000..8b490972
--- /dev/null
+++ b/node_modules/immediate/package.json
@@ -0,0 +1,48 @@
+{
+ "name": "immediate",
+ "version": "3.2.3",
+ "description": "A cross browser microtask library",
+ "contributors": [
+ "Domenic Denicola <domenic@domenicdenicola.com> (http://domenicdenicola.com)",
+ "Donavon West <github@donavon.com> (http://donavon.com)",
+ "Yaffle",
+ "Calvin Metcalf <calvin.metcalf@gmail.com>"
+ ],
+ "testling": {
+ "files": "test/tests.js",
+ "browsers": [
+ "ie/6..latest",
+ "chrome/latest",
+ "firefox/3..latest",
+ "opera/10..latest",
+ "safari/4..latest",
+ "iphone/latest",
+ "ipad/latest",
+ "android-browser/latest"
+ ]
+ },
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/calvinmetcalf/immediate.git"
+ },
+ "browser": {
+ "./nextTick": false
+ },
+ "bugs": "https://github.com/calvinmetcalf/immediate/issues",
+ "main": "lib/index.js",
+ "scripts": {
+ "build": "npm run build-js && npm run uglify",
+ "uglify": "uglifyjs dist/immediate.js -mc > dist/immediate.min.js",
+ "build-js": "browserify -s immediate ./lib/index.js | derequire > dist/immediate.js",
+ "test": "jshint lib/*.js && node test/tests.js | tspec"
+ },
+ "devDependencies": {
+ "browserify": "^10.0.0",
+ "derequire": "^2.0.0",
+ "jshint": "^2.5.1",
+ "tap-spec": "^3.0.0",
+ "tape": "^4.0.0",
+ "uglify-js": "^2.4.13"
+ }
+}