FRE-600: Fix code review blockers

- Consolidated duplicate UndoManagers to single instance
- Fixed connection promise to only resolve on 'connected' status
- Fixed WebSocketProvider import (WebsocketProvider)
- Added proper doc.destroy() cleanup
- Renamed isPresenceInitialized property to avoid conflict

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
2026-04-25 00:08:01 -04:00
parent 65b552bb08
commit 7c684a42cc
48450 changed files with 5679671 additions and 383 deletions

7
node_modules/immediate/.travis.yml generated vendored Normal file
View File

@@ -0,0 +1,7 @@
language: node_js
node_js:
- '0.10'
- '0.12'
- 'lts/*'
notifications:
email: false

20
node_modules/immediate/LICENSE.txt generated vendored Normal file
View File

@@ -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.

85
node_modules/immediate/README.md generated vendored Normal file
View File

@@ -0,0 +1,85 @@
# 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, descended 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 setImmediate and RSVP and combines them with the scheduler inspired (vaguely) by when's.
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.
### `queueMicrotask`
Function available in major browser these days which you can use to add a function into the microtask queue managed by V8.
### `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 using `setImmediate` because node's `process.nextTick` is better suited to our needs. Additionally, Internet Explorer 10's implementation of `setImmediate` is broken.
## 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 of blog posts 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

13
node_modules/immediate/bower.json generated vendored Normal file
View File

@@ -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"
}

13
node_modules/immediate/component.json generated vendored Normal file
View File

@@ -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"
]
}

201
node_modules/immediate/dist/immediate.js generated vendored Normal file
View File

@@ -0,0 +1,201 @@
(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(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(_dereq_,module,exports){
'use strict';
var types = [
_dereq_('./nextTick'),
_dereq_('./queueMicrotask'),
_dereq_('./mutation.js'),
_dereq_('./messageChannel'),
_dereq_('./stateChange'),
_dereq_('./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();
}
}
},{"./messageChannel":2,"./mutation.js":3,"./nextTick":7,"./queueMicrotask":4,"./stateChange":5,"./timeout":6}],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 typeof global.queueMicrotask === 'function';
};
exports.install = function (func) {
return function () {
global.queueMicrotask(func);
};
};
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
},{}],5:[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 : {})
},{}],6:[function(_dereq_,module,exports){
'use strict';
exports.test = function () {
return true;
};
exports.install = function (t) {
return function () {
setTimeout(t, 0);
};
};
},{}],7:[function(_dereq_,module,exports){
},{}]},{},[1])(1)
});

1
node_modules/immediate/dist/immediate.min.js generated vendored Normal file
View File

@@ -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(){function e(n,t,o){function i(r,f){if(!t[r]){if(!n[r]){var a="function"==typeof require&&require;if(!f&&a)return a(r,!0);if(u)return u(r,!0);var s=new Error("Cannot find module '"+r+"'");throw s.code="MODULE_NOT_FOUND",s}var l=t[r]={exports:{}};n[r][0].call(l.exports,function(e){return i(n[r][1][e]||e)},l,l.exports,e,n,t,o)}return t[r].exports}for(var u="function"==typeof require&&require,r=0;r<o.length;r++)i(o[r]);return i}return e}()({1:[function(e,n,t){"use strict";function o(){f&&a&&(f=!1,a.length?d=a.concat(d):c=-1,d.length&&i())}function i(){if(!f){p=!1,f=!0;for(var e=d.length,n=setTimeout(o);e;){for(a=d,d=[];a&&++c<e;)a[c].run();c=-1,e=d.length}a=null,c=-1,f=!1,clearTimeout(n)}}function u(e,n){this.fun=e,this.array=n}function r(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 u(e,n)),p||f||(p=!0,s())}for(var f,a,s,l=[e("./nextTick"),e("./queueMicrotask"),e("./mutation.js"),e("./messageChannel"),e("./stateChange"),e("./timeout")],c=-1,d=[],p=!1,h=-1,g=l.length;++h<g;)if(l[h]&&l[h].test&&l[h].test()){s=l[h].install(i);break}u.prototype.run=function(){var e=this.fun,n=this.array;switch(n.length){case 0:return e();case 1:return e(n[0]);case 2:return e(n[0],n[1]);case 3:return e(n[0],n[1],n[2]);default:return e.apply(null,n)}},n.exports=r},{"./messageChannel":2,"./mutation.js":3,"./nextTick":7,"./queueMicrotask":4,"./stateChange":5,"./timeout":6}],2:[function(e,n,t){(function(e){"use strict";t.test=function(){return!e.setImmediate&&void 0!==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),u=e.document.createTextNode("");return i.observe(u,{characterData:!0}),function(){u.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"function"==typeof e.queueMicrotask},t.install=function(n){return function(){e.queueMicrotask(n)}}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],5:[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:{})},{}],6:[function(e,n,t){"use strict";t.test=function(){return!0},t.install=function(e){return function(){setTimeout(e,0)}}},{}],7:[function(e,n,t){},{}]},{},[1])(1)});

97
node_modules/immediate/lib/index.js generated vendored Normal file
View File

@@ -0,0 +1,97 @@
'use strict';
var types = [
require('./nextTick'),
require('./queueMicrotask'),
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();
}
}

18
node_modules/immediate/lib/messageChannel.js generated vendored Normal file
View File

@@ -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);
};
};

22
node_modules/immediate/lib/mutation.js generated vendored Normal file
View File

@@ -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);
};
};

11
node_modules/immediate/lib/nextTick.js generated vendored Normal file
View File

@@ -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);
};
};

10
node_modules/immediate/lib/queueMicrotask.js generated vendored Normal file
View File

@@ -0,0 +1,10 @@
'use strict';
exports.test = function () {
return typeof global.queueMicrotask === 'function';
};
exports.install = function (func) {
return function () {
global.queueMicrotask(func);
};
};

24
node_modules/immediate/lib/stateChange.js generated vendored Normal file
View File

@@ -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;
};
};

10
node_modules/immediate/lib/timeout.js generated vendored Normal file
View File

@@ -0,0 +1,10 @@
'use strict';
exports.test = function () {
return true;
};
exports.install = function (t) {
return function () {
setTimeout(t, 0);
};
};

48
node_modules/immediate/package.json generated vendored Normal file
View File

@@ -0,0 +1,48 @@
{
"name": "immediate",
"version": "3.3.0",
"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": {
"./lib/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": "^16.5.1",
"derequire": "^2.1.1",
"jshint": "^2.5.1",
"tap-spec": "^5.0.0",
"tape": "^4.0.0",
"uglify-js": "^2.4.13"
}
}