Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

live-set

Package Overview
Dependencies
Maintainers
1
Versions
25
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

live-set - npm Package Compare versions

Comparing version 0.3.11 to 0.3.12

39

index.js

@@ -33,2 +33,3 @@ 'use strict';

this._values = null;
this._mutableValues = false;
this._active = null;

@@ -43,3 +44,3 @@ this._ended = false;

this._init = init;
}
} // Whether we can mutate the _values Set.

@@ -110,3 +111,2 @@ (0, _createClass3.default)(LiveSet, [{

if (this._values) {
var _values = this._values;
if (this._active) {

@@ -119,3 +119,8 @@ var _listenHandler = this._active.listenHandler;

}
return this._ended ? _values : new _set2.default(_values);
if (this._mutableValues) {
this._mutableValues = false;
makeSetImmutable(this._values);
}
/*:: if (!this._values) throw new Error(); */
return this._values;
} else {

@@ -125,3 +130,5 @@ if (this._active) {

}
return this._init.read();
var s = this._init.read();
makeSetImmutable(s);
return s;
}

@@ -228,2 +235,6 @@ }

if (!_this2._ended && !values.has(value)) {
if (!_this2._mutableValues) {
_this2._values = values = new _set2.default(values);
_this2._mutableValues = true;
}
values.add(value);

@@ -237,2 +248,6 @@ _this2._queueChange({ type: 'add', value: value });

if (!_this2._ended && values.has(value)) {
if (!_this2._mutableValues) {
_this2._values = values = new _set2.default(values);
_this2._mutableValues = true;
}
values.delete(value);

@@ -268,3 +283,5 @@ _this2._queueChange({ type: 'remove', value: value });

_setValues2 = setValuesError;
makeSetImmutable(values);
_this2._values = values;
_this2._mutableValues = false;
};

@@ -324,2 +341,3 @@ var listenHandlerOrFunction = this._init.listen(function (values) {

value: function constant(values) {
makeSetImmutable(values);
var shouldNotHappen = function shouldNotHappen() {

@@ -334,2 +352,3 @@ throw new Error('Should not happen');

ls._values = values;
ls._mutableValues = false;
return ls;

@@ -349,3 +368,13 @@ }

};
function makeSetImmutable(set) {
if (process.env.NODE_ENV !== 'production') {
set.add = set.delete = set.clear = readOnly;
}
}
function readOnly() {
throw new Error('Do not modify Set passed to or from LiveSet: Set is read-only in development');
}
module.exports = exports['default'];
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJMaXZlU2V0IiwiaW5pdCIsIl92YWx1ZXMiLCJfYWN0aXZlIiwiX2VuZGVkIiwiX2VuZGVkV2l0aEVycm9yIiwiX2Vycm9yIiwiX3F1ZXVlZENhbGwiLCJfY2hhbmdlUXVldWUiLCJfb2JzZXJ2ZXJzIiwiX2luaXQiLCJyZWNvcmQiLCJwdXNoIiwiY2hhbmdlcyIsIm9ic2VydmVyc1RvQ2FsbCIsImVuZGVkIiwic2xpY2UiLCJmb3JFYWNoIiwib2JzZXJ2ZXIiLCJpZ25vcmUiLCJvYnNlcnZlck5leHQiLCJuZXh0IiwiY2FsbCIsImNoYW5nZXNUb0RlbGl2ZXIiLCJsZW5ndGgiLCJlcnJvciIsImNvbXBsZXRlIiwiRXJyb3IiLCJsaXN0ZW5IYW5kbGVyIiwidW5zdWJzY3JpYmUiLCJ2YWx1ZXMiLCJwdWxsQ2hhbmdlcyIsInJlYWQiLCJvYnNlcnZlck9yT25OZXh0Iiwib25FcnJvciIsIm9uQ29tcGxldGUiLCJsaXZlU2V0Iiwic3Vic2NyaXB0aW9uIiwiY2xvc2VkIiwic3RhcnQiLCJvYnNlcnZlclJlY29yZCIsImlzU3RhcnRpbmciLCJ1bnN1YnNjcmliZWRJblN0YXJ0IiwiaW5kZXhPZiIsIml4Iiwic3BsaWNlIiwiX2RlYWN0aXZhdGUiLCJjaGFuZ2VRdWV1ZUxlbmd0aCIsIm9yaWdpbmFsTmV4dCIsImNvbnRyb2xsZXIiLCJhZGQiLCJoYXMiLCJ2YWx1ZSIsIl9xdWV1ZUNoYW5nZSIsInR5cGUiLCJyZW1vdmUiLCJkZWxldGUiLCJlcnIiLCJlbmQiLCJhY3RpdmUiLCJzZXRWYWx1ZXNFcnJvciIsInNldFZhbHVlcyIsImxpc3RlbkhhbmRsZXJPckZ1bmN0aW9uIiwibGlzdGVuIiwiVHlwZUVycm9yIiwiaW5pdGlhbFZhbHVlcyIsInNldCIsIl9jb250cm9sbGVyIiwic3Vic2NyaWJlIiwic2hvdWxkTm90SGFwcGVuIiwibHMiLCJwcm90b3R5cGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztB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QWtCLEVBQWxCO0FBQ0EsYUFBTyxFQUFDaEMsZ0JBQUQsRUFBVWEsWUFBYUEsVUFBdkIsRUFBUDtBQUNEOzs7NkJBRWtCbkIsTSxFQUE0QjtBQUM3QyxVQUFNdUMsa0JBQWtCLFNBQWxCQSxlQUFrQixHQUFNO0FBQzVCLGNBQU0sSUFBSTFDLEtBQUosQ0FBVSxtQkFBVixDQUFOO0FBQ0QsT0FGRDtBQUdBLFVBQU0yQyxLQUFLLElBQUl0RSxPQUFKLENBQVk7QUFDckJnQyxjQUFNcUMsZUFEZTtBQUVyQk4sZ0JBQVFNO0FBRmEsT0FBWixDQUFYO0FBSUFDLFNBQUdsRSxNQUFILEdBQVksSUFBWjtBQUNBa0UsU0FBR3BFLE9BQUgsR0FBYTRCLE1BQWI7QUFDQSxhQUFPd0MsRUFBUDtBQUNEOzs7OztBQWdQSDtBQUNBOzs7a0JBN1JxQnRFLE87QUE4UnBCQSxPQUFELENBQWN1RSxTQUFkLCtCQUF3QyxZQUFXO0FBQ2pELFNBQU8sSUFBUDtBQUNELENBRkQiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBAZmxvdyAqL1xuXG5pbXBvcnQgYXNhcCBmcm9tICdhc2FwJztcbmltcG9ydCAkJG9ic2VydmFibGUgZnJvbSAnc3ltYm9sLW9ic2VydmFibGUnO1xuXG5leHBvcnQgdHlwZSBMaXZlU2V0Q2hhbmdlUmVjb3JkPFQ+ID1cbiAge3R5cGU6ICdhZGQnLCB2YWx1ZTogVH0gfFxuICB7dHlwZTogJ3JlbW92ZScsIHZhbHVlOiBUfSB8XG4gIHt0eXBlOiAnZW5kJ307XG5cbmV4cG9ydCB0eXBlIExpdmVTZXRDb250cm9sbGVyPFQ+ID0ge1xuICBjbG9zZWQ6IGJvb2xlYW47XG4gIGFkZChpdGVtOiBUKTogdm9pZDtcbiAgcmVtb3ZlKGl0ZW06IFQpOiB2b2lkO1xuICBlcnJvcihlcnI6IGFueSk6IHZvaWQ7XG4gIGVuZCgpOiB2b2lkO1xufTtcblxuZXhwb3J0IHR5cGUgTGlzdGVuSGFuZGxlciA9IHtcbiAgdW5zdWJzY3JpYmUoKTogdm9pZDtcbiAgK3B1bGxDaGFuZ2VzPzogPygpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgdHlwZSBMaXZlU2V0SW5pdDxUPiA9IHtcbiAgcmVhZCgpOiBTZXQ8VD47XG4gIGxpc3RlbihcbiAgICBzZXRWYWx1ZXM6IHsgKHZhbHVlczogU2V0PFQ+KTogdm9pZCB9LFxuICAgIGNvbnRyb2xsZXI6IExpdmVTZXRDb250cm9sbGVyPFQ+XG4gICk6ID9MaXN0ZW5IYW5kbGVyfCgpPT52b2lkO1xufTtcblxuZXhwb3J0IHR5cGUgTGl2ZVNldFN1YnNjcmliZXI8VD4gPSAoY2hhbmdlczogQXJyYXk8TGl2ZVNldENoYW5nZVJlY29yZDxUPj4pID0+IHZvaWQ7XG5cbmV4cG9ydCB0eXBlIExpdmVTZXRTdWJzY3JpcHRpb24gPSB7XG4gIGNsb3NlZDogYm9vbGVhbjtcbiAgdW5zdWJzY3JpYmUoKTogdm9pZDtcbiAgcHVsbENoYW5nZXMoKTogdm9pZDtcbn07XG5cbmV4cG9ydCB0eXBlIExpdmVTZXRPYnNlcnZlcjxUPiA9IHtcbiAgc3RhcnQ/OiA/KHN1YnNjcmlwdGlvbjogTGl2ZVNldFN1YnNjcmlwdGlvbikgPT4gdm9pZDtcbiAgbmV4dD86ID8oY2hhbmdlczogQXJyYXk8TGl2ZVNldENoYW5nZVJlY29yZDxUPj4pID0+IHZvaWQ7XG4gIGVycm9yPzogPyhlcnI6IGFueSkgPT4gdm9pZDtcbiAgY29tcGxldGU/OiA/KCkgPT4gdm9pZDtcbn07XG5cbnR5cGUgTGl2ZVNldE9ic2VydmVyUmVjb3JkPFQ+ID0ge1xuICBpZ25vcmU6IG51bWJlcjtcbiAgb2JzZXJ2ZXI6IExpdmVTZXRPYnNlcnZlcjxUPjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpdmVTZXQ8VD4ge1xuICBfaW5pdDogTGl2ZVNldEluaXQ8VD47XG5cbiAgX3ZhbHVlczogP1NldDxUPiA9IG51bGw7XG4gIF9hY3RpdmU6ID97XG4gICAgY29udHJvbGxlcjogTGl2ZVNldENvbnRyb2xsZXI8VD47XG4gICAgbGlzdGVuSGFuZGxlcjogTGlzdGVuSGFuZGxlcjtcbiAgfSA9IG51bGw7XG4gIF9lbmRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBfZW5kZWRXaXRoRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgX2Vycm9yOiBhbnkgPSBudWxsO1xuICBfcXVldWVkQ2FsbDogYm9vbGVhbiA9IGZhbHNlO1xuICBfY2hhbmdlUXVldWU6IEFycmF5PExpdmVTZXRDaGFuZ2VSZWNvcmQ8VD4+ID0gW107XG4gIF9vYnNlcnZlcnM6IEFycmF5PExpdmVTZXRPYnNlcnZlclJlY29yZDxUPj4gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihpbml0OiBMaXZlU2V0SW5pdDxUPikge1xuICAgIHRoaXMuX2luaXQgPSBpbml0O1xuICB9XG5cbiAgc3RhdGljIGFjdGl2ZTxUPihpbml0aWFsVmFsdWVzOiA/U2V0PFQ+KToge2xpdmVTZXQ6IExpdmVTZXQ8VD4sIGNvbnRyb2xsZXI6IExpdmVTZXRDb250cm9sbGVyPFQ+fSB7XG4gICAgY29uc3Qgc2V0ID0gaW5pdGlhbFZhbHVlcyB8fCBuZXcgU2V0KCk7XG4gICAgbGV0IGNvbnRyb2xsZXI7XG4gICAgY29uc3QgbGl2ZVNldCA9IG5ldyBMaXZlU2V0KHtcbiAgICAgIHJlYWQ6ICgpID0+IHNldCxcbiAgICAgIGxpc3RlbjogKHNldFZhbHVlcywgX2NvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgc2V0VmFsdWVzKHNldCk7XG4gICAgICAgIGNvbnRyb2xsZXIgPSBfY29udHJvbGxlcjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBsaXZlU2V0LnN1YnNjcmliZSh7fSk7XG4gICAgcmV0dXJuIHtsaXZlU2V0LCBjb250cm9sbGVyOiAoY29udHJvbGxlcjogYW55KX07XG4gIH1cblxuICBzdGF0aWMgY29uc3RhbnQ8VD4odmFsdWVzOiBTZXQ8VD4pOiBMaXZlU2V0PFQ+IHtcbiAgICBjb25zdCBzaG91bGROb3RIYXBwZW4gPSAoKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Nob3VsZCBub3QgaGFwcGVuJyk7XG4gICAgfTtcbiAgICBjb25zdCBscyA9IG5ldyBMaXZlU2V0KHtcbiAgICAgIHJlYWQ6IHNob3VsZE5vdEhhcHBlbixcbiAgICAgIGxpc3Rlbjogc2hvdWxkTm90SGFwcGVuXG4gICAgfSk7XG4gICAgbHMuX2VuZGVkID0gdHJ1ZTtcbiAgICBscy5fdmFsdWVzID0gdmFsdWVzO1xuICAgIHJldHVybiBscztcbiAgfVxuXG4gIF9xdWV1ZUNoYW5nZShyZWNvcmQ6ID9MaXZlU2V0Q2hhbmdlUmVjb3JkPFQ+KSB7XG4gICAgaWYgKHJlY29yZCkge1xuICAgICAgdGhpcy5fY2hhbmdlUXVldWUucHVzaChyZWNvcmQpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX3F1ZXVlZENhbGwpIHtcbiAgICAgIHRoaXMuX3F1ZXVlZENhbGwgPSB0cnVlO1xuICAgICAgYXNhcCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX3F1ZXVlZENhbGwgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuX2NoYW5nZVF1ZXVlO1xuICAgICAgICB0aGlzLl9jaGFuZ2VRdWV1ZSA9IFtdO1xuICAgICAgICBsZXQgb2JzZXJ2ZXJzVG9DYWxsO1xuICAgICAgICBjb25zdCBlbmRlZCA9IHRoaXMuX2VuZGVkO1xuICAgICAgICBpZiAoZW5kZWQpIHtcbiAgICAgICAgICBvYnNlcnZlcnNUb0NhbGwgPSB0aGlzLl9vYnNlcnZlcnM7XG4gICAgICAgICAgdGhpcy5fb2JzZXJ2ZXJzID0gW107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2JzZXJ2ZXJzVG9DYWxsID0gdGhpcy5fb2JzZXJ2ZXJzLnNsaWNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgb2JzZXJ2ZXJzVG9DYWxsLmZvckVhY2gocmVjb3JkID0+IHtcbiAgICAgICAgICBjb25zdCB7b2JzZXJ2ZXIsIGlnbm9yZX0gPSByZWNvcmQ7XG4gICAgICAgICAgY29uc3Qgb2JzZXJ2ZXJOZXh0ID0gb2JzZXJ2ZXIubmV4dDtcbiAgICAgICAgICBpZiAob2JzZXJ2ZXJOZXh0KSB7XG4gICAgICAgICAgICBpZiAoaWdub3JlID09PSAwKSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyTmV4dC5jYWxsKG9ic2VydmVyLCBjaGFuZ2VzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlY29yZC5pZ25vcmUgPSAwO1xuICAgICAgICAgICAgICBjb25zdCBjaGFuZ2VzVG9EZWxpdmVyID0gY2hhbmdlcy5zbGljZShpZ25vcmUpO1xuICAgICAgICAgICAgICBpZiAoY2hhbmdlc1RvRGVsaXZlci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlck5leHQuY2FsbChvYnNlcnZlciwgY2hhbmdlc1RvRGVsaXZlcik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGVuZGVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZW5kZWRXaXRoRXJyb3IpIHtcbiAgICAgICAgICAgICAgaWYgKG9ic2VydmVyLmVycm9yKSBvYnNlcnZlci5lcnJvcih0aGlzLl9lcnJvcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAob2JzZXJ2ZXIuY29tcGxldGUpIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIF9kZWFjdGl2YXRlKCkge1xuICAgIGlmICghdGhpcy5fYWN0aXZlKSB0aHJvdyBuZXcgRXJyb3IoJ2FscmVhZHkgaW5hY3RpdmUnKTtcbiAgICBjb25zdCB7bGlzdGVuSGFuZGxlcn0gPSB0aGlzLl9hY3RpdmU7XG4gICAgdGhpcy5fYWN0aXZlID0gbnVsbDtcbiAgICBpZiAobGlzdGVuSGFuZGxlcikge1xuICAgICAgbGlzdGVuSGFuZGxlci51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHZhbHVlcygpOiBTZXQ8VD4ge1xuICAgIGlmICh0aGlzLl92YWx1ZXMpIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuX3ZhbHVlcztcbiAgICAgIGlmICh0aGlzLl9hY3RpdmUpIHtcbiAgICAgICAgY29uc3Qge2xpc3RlbkhhbmRsZXJ9ID0gdGhpcy5fYWN0aXZlO1xuICAgICAgICBpZiAobGlzdGVuSGFuZGxlci5wdWxsQ2hhbmdlcykge1xuICAgICAgICAgIGxpc3RlbkhhbmRsZXIucHVsbENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuX2VuZGVkID8gdmFsdWVzIDogbmV3IFNldCh2YWx1ZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndHJpZWQgdG8gY2FsbCB2YWx1ZXMoKSBvbiBsaXZlc2V0IGR1cmluZyBzdWJzY3JpcHRpb24gYmVmb3JlIHNldFZhbHVlcyB3YXMgY2FsbGVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5faW5pdC5yZWFkKCk7XG4gICAgfVxuICB9XG5cbiAgaXNFbmRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZW5kZWQ7XG4gIH1cblxuICBzdWJzY3JpYmUob2JzZXJ2ZXJPck9uTmV4dDogTGl2ZVNldE9ic2VydmVyPFQ+IHwgKGNoYW5nZXM6IEFycmF5PExpdmVTZXRDaGFuZ2VSZWNvcmQ8VD4+KSA9PiB2b2lkLCBvbkVycm9yOiA/KGVycjogYW55KSA9PiB2b2lkLCBvbkNvbXBsZXRlOiA/KCkgPT4gdm9pZCk6IExpdmVTZXRTdWJzY3JpcHRpb24ge1xuICAgIGNvbnN0IGxpdmVTZXQgPSB0aGlzO1xuXG4gICAgbGV0IG9ic2VydmVyO1xuICAgIGlmICh0eXBlb2Ygb2JzZXJ2ZXJPck9uTmV4dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb2JzZXJ2ZXIgPSB7XG4gICAgICAgIG5leHQ6IG9ic2VydmVyT3JPbk5leHQsXG4gICAgICAgIGVycm9yOiBvbkVycm9yLFxuICAgICAgICBjb21wbGV0ZTogb25Db21wbGV0ZVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JzZXJ2ZXIgPSBvYnNlcnZlck9yT25OZXh0O1xuICAgIH1cblxuICAgIChvYnNlcnZlcjogTGl2ZVNldE9ic2VydmVyPFQ+KTtcblxuICAgIGlmICh0aGlzLl9lbmRlZCkge1xuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0ge1xuICAgICAgICBjbG9zZWQ6IGZhbHNlLFxuICAgICAgICB1bnN1YnNjcmliZTogKCkgPT4ge1xuICAgICAgICAgIHN1YnNjcmlwdGlvbi5jbG9zZWQgPSB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBwdWxsQ2hhbmdlczogKCkgPT4ge31cbiAgICAgIH07XG4gICAgICBpZiAob2JzZXJ2ZXIuc3RhcnQpIHtcbiAgICAgICAgb2JzZXJ2ZXIuc3RhcnQoc3Vic2NyaXB0aW9uKTtcbiAgICAgIH1cbiAgICAgIGlmICghc3Vic2NyaXB0aW9uLmNsb3NlZCkge1xuICAgICAgICBpZiAodGhpcy5fZW5kZWRXaXRoRXJyb3IpIHtcbiAgICAgICAgICBpZiAob2JzZXJ2ZXIuZXJyb3IpIHtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKHRoaXMuX2Vycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKG9ic2VydmVyLmNvbXBsZXRlKSB7XG4gICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc3Vic2NyaXB0aW9uLmNsb3NlZCA9IHRydWU7XG4gICAgICByZXR1cm4gc3Vic2NyaXB0aW9uO1xuICAgIH1cblxuICAgIGNvbnN0IG9ic2VydmVyUmVjb3JkID0ge29ic2VydmVyLCBpZ25vcmU6IHRoaXMuX2NoYW5nZVF1ZXVlLmxlbmd0aH07XG5cbiAgICBsZXQgaXNTdGFydGluZyA9IHRydWU7XG4gICAgbGV0IHVuc3Vic2NyaWJlZEluU3RhcnQgPSBmYWxzZTtcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB7XG4gICAgICAvKjo6IGNsb3NlZDogZmFsc2UmJmAgKi8gZ2V0IGNsb3NlZCgpIHtcbiAgICAgICAgcmV0dXJuICFpc1N0YXJ0aW5nICYmIGxpdmVTZXQuX29ic2VydmVycy5pbmRleE9mKG9ic2VydmVyUmVjb3JkKSA8IDA7XG4gICAgICB9Lyo6OiBgICovLFxuICAgICAgdW5zdWJzY3JpYmU6ICgpID0+IHtcbiAgICAgICAgaWYgKGlzU3RhcnRpbmcpIHtcbiAgICAgICAgICB1bnN1YnNjcmliZWRJblN0YXJ0ID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXggPSB0aGlzLl9vYnNlcnZlcnMuaW5kZXhPZihvYnNlcnZlclJlY29yZCk7XG4gICAgICAgIGlmIChpeCA+PSAwKSB7XG4gICAgICAgICAgdGhpcy5fb2JzZXJ2ZXJzLnNwbGljZShpeCwgMSk7XG4gICAgICAgICAgaWYgKCF0aGlzLl9lbmRlZCAmJiB0aGlzLl9vYnNlcnZlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZXMgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fZGVhY3RpdmF0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHB1bGxDaGFuZ2VzOiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9hY3RpdmUgJiYgdGhpcy5fYWN0aXZlLmxpc3RlbkhhbmRsZXIgJiYgdGhpcy5fYWN0aXZlLmxpc3RlbkhhbmRsZXIucHVsbENoYW5nZXMpIHtcbiAgICAgICAgICB0aGlzLl9hY3RpdmUubGlzdGVuSGFuZGxlci5wdWxsQ2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoYW5nZVF1ZXVlTGVuZ3RoID0gdGhpcy5fY2hhbmdlUXVldWUubGVuZ3RoO1xuICAgICAgICBjb25zdCBvcmlnaW5hbE5leHQgPSBvYnNlcnZlci5uZXh0O1xuICAgICAgICBpZiAoY2hhbmdlUXVldWVMZW5ndGggIT09IDAgJiYgb3JpZ2luYWxOZXh0KSB7XG4gICAgICAgICAgY29uc3QgY2hhbmdlc1RvRGVsaXZlciA9IHRoaXMuX2NoYW5nZVF1ZXVlLnNsaWNlKG9ic2VydmVyUmVjb3JkLmlnbm9yZSk7XG4gICAgICAgICAgaWYgKGNoYW5nZXNUb0RlbGl2ZXIubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICBvYnNlcnZlclJlY29yZC5pZ25vcmUgPSBjaGFuZ2VRdWV1ZUxlbmd0aDtcbiAgICAgICAgICAgIG9yaWdpbmFsTmV4dC5jYWxsKG9ic2VydmVyLCBjaGFuZ2VzVG9EZWxpdmVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKCF0aGlzLl9hY3RpdmUpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2xsZXI6IExpdmVTZXRDb250cm9sbGVyPFQ+ID0ge1xuICAgICAgICAvLyBGbG93IGRvZXNuJ3Qgc3VwcG9ydCBnZXR0ZXJzIGFuZCBzZXR0ZXJzIHlldFxuICAgICAgICAvKjo6IGNsb3NlZDogZmFsc2UmJmAgKi8gZ2V0IGNsb3NlZCgpIHtcbiAgICAgICAgICByZXR1cm4gIWxpdmVTZXQuX2FjdGl2ZSB8fCBsaXZlU2V0Ll9hY3RpdmUuY29udHJvbGxlciAhPT0gdGhpcztcbiAgICAgICAgfS8qOjogYCAqLyxcbiAgICAgICAgYWRkOiB2YWx1ZSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5fdmFsdWVzO1xuICAgICAgICAgIGlmICghdmFsdWVzKSB0aHJvdyBuZXcgRXJyb3IoJ3NldFZhbHVlIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBjb250cm9sbGVyIGlzIHVzZWQnKTtcbiAgICAgICAgICBpZiAoIXRoaXMuX2VuZGVkICYmICF2YWx1ZXMuaGFzKHZhbHVlKSkge1xuICAgICAgICAgICAgdmFsdWVzLmFkZCh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLl9xdWV1ZUNoYW5nZSh7dHlwZTogJ2FkZCcsIHZhbHVlfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByZW1vdmU6IHZhbHVlID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLl92YWx1ZXM7XG4gICAgICAgICAgaWYgKCF2YWx1ZXMpIHRocm93IG5ldyBFcnJvcignc2V0VmFsdWUgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGNvbnRyb2xsZXIgaXMgdXNlZCcpO1xuICAgICAgICAgIGlmICghdGhpcy5fZW5kZWQgJiYgdmFsdWVzLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlcy5kZWxldGUodmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fcXVldWVDaGFuZ2Uoe3R5cGU6ICdyZW1vdmUnLCB2YWx1ZX0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2VuZGVkKSByZXR1cm47XG4gICAgICAgICAgdGhpcy5fZW5kZWQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuX2VuZGVkV2l0aEVycm9yID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9lcnJvciA9IGVycjtcbiAgICAgICAgICB0aGlzLl9xdWV1ZUNoYW5nZSgpO1xuICAgICAgICAgIHRoaXMuX2RlYWN0aXZhdGUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW5kOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2VuZGVkKSByZXR1cm47XG4gICAgICAgICAgdGhpcy5fZW5kZWQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuX3F1ZXVlQ2hhbmdlKCk7XG4gICAgICAgICAgdGhpcy5fZGVhY3RpdmF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgYWN0aXZlID0gdGhpcy5fYWN0aXZlID0ge1xuICAgICAgICBjb250cm9sbGVyLFxuICAgICAgICBsaXN0ZW5IYW5kbGVyOiB7XG4gICAgICAgICAgdW5zdWJzY3JpYmU6ICgpID0+IHt9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBzZXRWYWx1ZXNFcnJvciA9ICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZXRWYWx1ZXMgbXVzdCBiZSBjYWxsZWQgb25jZSBkdXJpbmcgbGlzdGVuJyk7XG4gICAgICB9O1xuICAgICAgbGV0IHNldFZhbHVlcyA9IHZhbHVlcyA9PiB7XG4gICAgICAgIHNldFZhbHVlcyA9IHNldFZhbHVlc0Vycm9yO1xuICAgICAgICB0aGlzLl92YWx1ZXMgPSB2YWx1ZXM7XG4gICAgICB9O1xuICAgICAgY29uc3QgbGlzdGVuSGFuZGxlck9yRnVuY3Rpb24gPSB0aGlzLl9pbml0Lmxpc3Rlbih2YWx1ZXMgPT4gc2V0VmFsdWVzKHZhbHVlcyksIGNvbnRyb2xsZXIpO1xuICAgICAgaWYgKCF0aGlzLl92YWx1ZXMpIHtcbiAgICAgICAgc2V0VmFsdWVzRXJyb3IoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgbGlzdGVuSGFuZGxlck9yRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgYWN0aXZlLmxpc3RlbkhhbmRsZXIgPSB7XG4gICAgICAgICAgdW5zdWJzY3JpYmU6IGxpc3RlbkhhbmRsZXJPckZ1bmN0aW9uXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKGxpc3RlbkhhbmRsZXJPckZ1bmN0aW9uICE9IG51bGwgJiYgdHlwZW9mIGxpc3RlbkhhbmRsZXJPckZ1bmN0aW9uLnVuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGFjdGl2ZS5saXN0ZW5IYW5kbGVyID0gbGlzdGVuSGFuZGxlck9yRnVuY3Rpb247XG4gICAgICB9IGVsc2UgaWYgKGxpc3RlbkhhbmRsZXJPckZ1bmN0aW9uICE9IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbGlzdGVuIG11c3QgcmV0dXJuIG9iamVjdCB3aXRoIHVuc3Vic2NyaWJlIG1ldGhvZCwgYSBmdW5jdGlvbiwgb3IgbnVsbCcpO1xuICAgICAgfVxuICAgICAgaWYgKGNvbnRyb2xsZXIuY2xvc2VkKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IGFjdGl2ZTtcbiAgICAgICAgdGhpcy5fZGVhY3RpdmF0ZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvYnNlcnZlci5zdGFydCkge1xuICAgICAgb2JzZXJ2ZXIuc3RhcnQoc3Vic2NyaXB0aW9uKTtcbiAgICB9XG4gICAgaXNTdGFydGluZyA9IGZhbHNlO1xuXG4gICAgb2JzZXJ2ZXJSZWNvcmQuaWdub3JlID0gdGhpcy5fY2hhbmdlUXVldWUubGVuZ3RoO1xuICAgIGlmICghdW5zdWJzY3JpYmVkSW5TdGFydCkge1xuICAgICAgdGhpcy5fb2JzZXJ2ZXJzLnB1c2gob2JzZXJ2ZXJSZWNvcmQpO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJzY3JpcHRpb247XG4gIH1cbn1cblxuLy8gQXNzaWduIGhlcmUgYmVjYXVzZSBGbG93IGRvZXNuJ3Qgc3VwcG9ydCBjb21wdXRlZCBwcm9wZXJ0eSBrZXlzIG9uIGNsYXNzZXM6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvMjI4NlxuKExpdmVTZXQ6YW55KS5wcm90b3R5cGVbJCRvYnNlcnZhYmxlXSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcztcbn07XG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJMaXZlU2V0IiwiaW5pdCIsIl92YWx1ZXMiLCJfbXV0YWJsZVZhbHVlcyIsIl9hY3RpdmUiLCJfZW5kZWQiLCJfZW5kZWRXaXRoRXJyb3IiLCJfZXJyb3IiLCJfcXVldWVkQ2FsbCIsIl9jaGFuZ2VRdWV1ZSIsIl9vYnNlcnZlcnMiLCJfaW5pdCIsInJlY29yZCIsInB1c2giLCJjaGFuZ2VzIiwib2JzZXJ2ZXJzVG9DYWxsIiwiZW5kZWQiLCJzbGljZSIsImZvckVhY2giLCJvYnNlcnZlciIsImlnbm9yZSIsIm9ic2VydmVyTmV4dCIsIm5leHQiLCJjYWxsIiwiY2hhbmdlc1RvRGVsaXZlciIsImxlbmd0aCIsImVycm9yIiwiY29tcGxldGUiLCJFcnJvciIsImxpc3RlbkhhbmRsZXIiLCJ1bnN1YnNjcmliZSIsInB1bGxDaGFuZ2VzIiwibWFrZVNldEltbXV0YWJsZSIsInMiLCJyZWFkIiwib2JzZXJ2ZXJPck9uTmV4dCIsIm9uRXJyb3IiLCJvbkNvbXBsZXRlIiwibGl2ZVNldCIsInN1YnNjcmlwdGlvbiIsImNsb3NlZCIsInN0YXJ0Iiwib2JzZXJ2ZXJSZWNvcmQiLCJpc1N0YXJ0aW5nIiwidW5zdWJzY3JpYmVkSW5TdGFydCIsImluZGV4T2YiLCJpeCIsInNwbGljZSIsIl9kZWFjdGl2YXRlIiwiY2hhbmdlUXVldWVMZW5ndGgiLCJvcmlnaW5hbE5leHQiLCJjb250cm9sbGVyIiwiYWRkIiwidmFsdWVzIiwiaGFzIiwidmFsdWUiLCJfcXVldWVDaGFuZ2UiLCJ0eXBlIiwicmVtb3ZlIiwiZGVsZXRlIiwiZXJyIiwiZW5kIiwiYWN0aXZlIiwic2V0VmFsdWVzRXJyb3IiLCJzZXRWYWx1ZXMiLCJsaXN0ZW5IYW5kbGVyT3JGdW5jdGlvbiIsImxpc3RlbiIsIlR5cGVFcnJvciIsImluaXRpYWxWYWx1ZXMiLCJzZXQiLCJfY29udHJvbGxlciIsInN1YnNjcmliZSIsInNob3VsZE5vdEhhcHBlbiIsImxzIiwicHJv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T0FBRCxDQUFjMEUsU0FBZCwrQkFBd0MsWUFBVztBQUNqRCxTQUFPLElBQVA7QUFDRCxDQUZEOztBQUlBLFNBQVMxQyxnQkFBVCxDQUEwQnFDLEdBQTFCLEVBQXlDO0FBQ3ZDLE1BQUlNLFFBQVFDLEdBQVIsQ0FBWUMsUUFBWixLQUF5QixZQUE3QixFQUEyQztBQUN4Q1IsT0FBRCxDQUFVakIsR0FBVixHQUFpQmlCLEdBQUQsQ0FBVVYsTUFBVixHQUFvQlUsR0FBRCxDQUFVUyxLQUFWLEdBQWtCQyxRQUFyRDtBQUNEO0FBQ0Y7O0FBRUQsU0FBU0EsUUFBVCxHQUFvQjtBQUNsQixRQUFNLElBQUluRCxLQUFKLENBQVUsOEVBQVYsQ0FBTjtBQUNEIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogQGZsb3cgKi9cblxuaW1wb3J0IGFzYXAgZnJvbSAnYXNhcCc7XG5pbXBvcnQgJCRvYnNlcnZhYmxlIGZyb20gJ3N5bWJvbC1vYnNlcnZhYmxlJztcblxuZXhwb3J0IHR5cGUgTGl2ZVNldENoYW5nZVJlY29yZDxUPiA9XG4gIHt0eXBlOiAnYWRkJywgdmFsdWU6IFR9IHxcbiAge3R5cGU6ICdyZW1vdmUnLCB2YWx1ZTogVH0gfFxuICB7dHlwZTogJ2VuZCd9O1xuXG5leHBvcnQgdHlwZSBMaXZlU2V0Q29udHJvbGxlcjxUPiA9IHtcbiAgY2xvc2VkOiBib29sZWFuO1xuICBhZGQoaXRlbTogVCk6IHZvaWQ7XG4gIHJlbW92ZShpdGVtOiBUKTogdm9pZDtcbiAgZXJyb3IoZXJyOiBhbnkpOiB2b2lkO1xuICBlbmQoKTogdm9pZDtcbn07XG5cbmV4cG9ydCB0eXBlIExpc3RlbkhhbmRsZXIgPSB7XG4gIHVuc3Vic2NyaWJlKCk6IHZvaWQ7XG4gICtwdWxsQ2hhbmdlcz86ID8oKSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IHR5cGUgTGl2ZVNldEluaXQ8VD4gPSB7XG4gIHJlYWQoKTogU2V0PFQ+O1xuICBsaXN0ZW4oXG4gICAgc2V0VmFsdWVzOiB7ICh2YWx1ZXM6IFNldDxUPik6IHZvaWQgfSxcbiAgICBjb250cm9sbGVyOiBMaXZlU2V0Q29udHJvbGxlcjxUPlxuICApOiA/TGlzdGVuSGFuZGxlcnwoKT0+dm9pZDtcbn07XG5cbmV4cG9ydCB0eXBlIExpdmVTZXRTdWJzY3JpYmVyPFQ+ID0gKGNoYW5nZXM6IEFycmF5PExpdmVTZXRDaGFuZ2VSZWNvcmQ8VD4+KSA9PiB2b2lkO1xuXG5leHBvcnQgdHlwZSBMaXZlU2V0U3Vic2NyaXB0aW9uID0ge1xuICBjbG9zZWQ6IGJvb2xlYW47XG4gIHVuc3Vic2NyaWJlKCk6IHZvaWQ7XG4gIHB1bGxDaGFuZ2VzKCk6IHZvaWQ7XG59O1xuXG5leHBvcnQgdHlwZSBMaXZlU2V0T2JzZXJ2ZXI8VD4gPSB7XG4gIHN0YXJ0PzogPyhzdWJzY3JpcHRpb246IExpdmVTZXRTdWJzY3JpcHRpb24pID0+IHZvaWQ7XG4gIG5leHQ/OiA/KGNoYW5nZXM6IEFycmF5PExpdmVTZXRDaGFuZ2VSZWNvcmQ8VD4+KSA9PiB2b2lkO1xuICBlcnJvcj86ID8oZXJyOiBhbnkpID0+IHZvaWQ7XG4gIGNvbXBsZXRlPzogPygpID0+IHZvaWQ7XG59O1xuXG50eXBlIExpdmVTZXRPYnNlcnZlclJlY29yZDxUPiA9IHtcbiAgaWdub3JlOiBudW1iZXI7XG4gIG9ic2VydmVyOiBMaXZlU2V0T2JzZXJ2ZXI8VD47XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMaXZlU2V0PFQ+IHtcbiAgX2luaXQ6IExpdmVTZXRJbml0PFQ+O1xuXG4gIF92YWx1ZXM6ID9TZXQ8VD4gPSBudWxsO1xuICBfbXV0YWJsZVZhbHVlczogYm9vbGVhbiA9IGZhbHNlOyAvLyBXaGV0aGVyIHdlIGNhbiBtdXRhdGUgdGhlIF92YWx1ZXMgU2V0LlxuXG4gIF9hY3RpdmU6ID97XG4gICAgY29udHJvbGxlcjogTGl2ZVNldENvbnRyb2xsZXI8VD47XG4gICAgbGlzdGVuSGFuZGxlcjogTGlzdGVuSGFuZGxlcjtcbiAgfSA9IG51bGw7XG4gIF9lbmRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBfZW5kZWRXaXRoRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgX2Vycm9yOiBhbnkgPSBudWxsO1xuICBfcXVldWVkQ2FsbDogYm9vbGVhbiA9IGZhbHNlO1xuICBfY2hhbmdlUXVldWU6IEFycmF5PExpdmVTZXRDaGFuZ2VSZWNvcmQ8VD4+ID0gW107XG4gIF9vYnNlcnZlcnM6IEFycmF5PExpdmVTZXRPYnNlcnZlclJlY29yZDxUPj4gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihpbml0OiBMaXZlU2V0SW5pdDxUPikge1xuICAgIHRoaXMuX2luaXQgPSBpbml0O1xuICB9XG5cbiAgc3RhdGljIGFjdGl2ZTxUPihpbml0aWFsVmFsdWVzOiA/U2V0PFQ+KToge2xpdmVTZXQ6IExpdmVTZXQ8VD4sIGNvbnRyb2xsZXI6IExpdmVTZXRDb250cm9sbGVyPFQ+fSB7XG4gICAgY29uc3Qgc2V0ID0gaW5pdGlhbFZhbHVlcyB8fCBuZXcgU2V0KCk7XG4gICAgbGV0IGNvbnRyb2xsZXI7XG4gICAgY29uc3QgbGl2ZVNldCA9IG5ldyBMaXZlU2V0KHtcbiAgICAgIHJlYWQ6ICgpID0+IHNldCxcbiAgICAgIGxpc3RlbjogKHNldFZhbHVlcywgX2NvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgc2V0VmFsdWVzKHNldCk7XG4gICAgICAgIGNvbnRyb2xsZXIgPSBfY29udHJvbGxlcjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBsaXZlU2V0LnN1YnNjcmliZSh7fSk7XG4gICAgcmV0dXJuIHtsaXZlU2V0LCBjb250cm9sbGVyOiAoY29udHJvbGxlcjogYW55KX07XG4gIH1cblxuICBzdGF0aWMgY29uc3RhbnQ8VD4odmFsdWVzOiBTZXQ8VD4pOiBMaXZlU2V0PFQ+IHtcbiAgICBtYWtlU2V0SW1tdXRhYmxlKHZhbHVlcyk7XG4gICAgY29uc3Qgc2hvdWxkTm90SGFwcGVuID0gKCkgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaG91bGQgbm90IGhhcHBlbicpO1xuICAgIH07XG4gICAgY29uc3QgbHMgPSBuZXcgTGl2ZVNldCh7XG4gICAgICByZWFkOiBzaG91bGROb3RIYXBwZW4sXG4gICAgICBsaXN0ZW46IHNob3VsZE5vdEhhcHBlblxuICAgIH0pO1xuICAgIGxzLl9lbmRlZCA9IHRydWU7XG4gICAgbHMuX3ZhbHVlcyA9IHZhbHVlcztcbiAgICBscy5fbXV0YWJsZVZhbHVlcyA9IGZhbHNlO1xuICAgIHJldHVybiBscztcbiAgfVxuXG4gIF9xdWV1ZUNoYW5nZShyZWNvcmQ6ID9MaXZlU2V0Q2hhbmdlUmVjb3JkPFQ+KSB7XG4gICAgaWYgKHJlY29yZCkge1xuICAgICAgdGhpcy5fY2hhbmdlUXVldWUucHVzaChyZWNvcmQpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX3F1ZXVlZENhbGwpIHtcbiAgICAgIHRoaXMuX3F1ZXVlZENhbGwgPSB0cnVlO1xuICAgICAgYXNhcCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX3F1ZXVlZENhbGwgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuX2NoYW5nZVF1ZXVlO1xuICAgICAgICB0aGlzLl9jaGFuZ2VRdWV1ZSA9IFtdO1xuICAgICAgICBsZXQgb2JzZXJ2ZXJzVG9DYWxsO1xuICAgICAgICBjb25zdCBlbmRlZCA9IHRoaXMuX2VuZGVkO1xuICAgICAgICBpZiAoZW5kZWQpIHtcbiAgICAgICAgICBvYnNlcnZlcnNUb0NhbGwgPSB0aGlzLl9vYnNlcnZlcnM7XG4gICAgICAgICAgdGhpcy5fb2JzZXJ2ZXJzID0gW107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2JzZXJ2ZXJzVG9DYWxsID0gdGhpcy5fb2JzZXJ2ZXJzLnNsaWNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgb2JzZXJ2ZXJzVG9DYWxsLmZvckVhY2gocmVjb3JkID0+IHtcbiAgICAgICAgICBjb25zdCB7b2JzZXJ2ZXIsIGlnbm9yZX0gPSByZWNvcmQ7XG4gICAgICAgICAgY29uc3Qgb2JzZXJ2ZXJOZXh0ID0gb2JzZXJ2ZXIubmV4dDtcbiAgICAgICAgICBpZiAob2JzZXJ2ZXJOZXh0KSB7XG4gICAgICAgICAgICBpZiAoaWdub3JlID09PSAwKSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyTmV4dC5jYWxsKG9ic2VydmVyLCBjaGFuZ2VzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlY29yZC5pZ25vcmUgPSAwO1xuICAgICAgICAgICAgICBjb25zdCBjaGFuZ2VzVG9EZWxpdmVyID0gY2hhbmdlcy5zbGljZShpZ25vcmUpO1xuICAgICAgICAgICAgICBpZiAoY2hhbmdlc1RvRGVsaXZlci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlck5leHQuY2FsbChvYnNlcnZlciwgY2hhbmdlc1RvRGVsaXZlcik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGVuZGVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZW5kZWRXaXRoRXJyb3IpIHtcbiAgICAgICAgICAgICAgaWYgKG9ic2VydmVyLmVycm9yKSBvYnNlcnZlci5lcnJvcih0aGlzLl9lcnJvcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAob2JzZXJ2ZXIuY29tcGxldGUpIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIF9kZWFjdGl2YXRlKCkge1xuICAgIGlmICghdGhpcy5fYWN0aXZlKSB0aHJvdyBuZXcgRXJyb3IoJ2FscmVhZHkgaW5hY3RpdmUnKTtcbiAgICBjb25zdCB7bGlzdGVuSGFuZGxlcn0gPSB0aGlzLl9hY3RpdmU7XG4gICAgdGhpcy5fYWN0aXZlID0gbnVsbDtcbiAgICBpZiAobGlzdGVuSGFuZGxlcikge1xuICAgICAgbGlzdGVuSGFuZGxlci51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHZhbHVlcygpOiBTZXQ8VD4ge1xuICAgIGlmICh0aGlzLl92YWx1ZXMpIHtcbiAgICAgIGlmICh0aGlzLl9hY3RpdmUpIHtcbiAgICAgICAgY29uc3Qge2xpc3RlbkhhbmRsZXJ9ID0gdGhpcy5fYWN0aXZlO1xuICAgICAgICBpZiAobGlzdGVuSGFuZGxlci5wdWxsQ2hhbmdlcykge1xuICAgICAgICAgIGxpc3RlbkhhbmRsZXIucHVsbENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX211dGFibGVWYWx1ZXMpIHtcbiAgICAgICAgdGhpcy5fbXV0YWJsZVZhbHVlcyA9IGZhbHNlO1xuICAgICAgICBtYWtlU2V0SW1tdXRhYmxlKHRoaXMuX3ZhbHVlcyk7XG4gICAgICB9XG4gICAgICAvKjo6IGlmICghdGhpcy5fdmFsdWVzKSB0aHJvdyBuZXcgRXJyb3IoKTsgKi9cbiAgICAgIHJldHVybiB0aGlzLl92YWx1ZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLl9hY3RpdmUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0cmllZCB0byBjYWxsIHZhbHVlcygpIG9uIGxpdmVzZXQgZHVyaW5nIHN1YnNjcmlwdGlvbiBiZWZvcmUgc2V0VmFsdWVzIHdhcyBjYWxsZWQnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHMgPSB0aGlzLl9pbml0LnJlYWQoKTtcbiAgICAgIG1ha2VTZXRJbW11dGFibGUocyk7XG4gICAgICByZXR1cm4gcztcbiAgICB9XG4gIH1cblxuICBpc0VuZGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9lbmRlZDtcbiAgfVxuXG4gIHN1YnNjcmliZShvYnNlcnZlck9yT25OZXh0OiBMaXZlU2V0T2JzZXJ2ZXI8VD4gfCAoY2hhbmdlczogQXJyYXk8TGl2ZVNldENoYW5nZVJlY29yZDxUPj4pID0+IHZvaWQsIG9uRXJyb3I6ID8oZXJyOiBhbnkpID0+IHZvaWQsIG9uQ29tcGxldGU6ID8oKSA9PiB2b2lkKTogTGl2ZVNldFN1YnNjcmlwdGlvbiB7XG4gICAgY29uc3QgbGl2ZVNldCA9IHRoaXM7XG5cbiAgICBsZXQgb2JzZXJ2ZXI7XG4gICAgaWYgKHR5cGVvZiBvYnNlcnZlck9yT25OZXh0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBvYnNlcnZlciA9IHtcbiAgICAgICAgbmV4dDogb2JzZXJ2ZXJPck9uTmV4dCxcbiAgICAgICAgZXJyb3I6IG9uRXJyb3IsXG4gICAgICAgIGNvbXBsZXRlOiBvbkNvbXBsZXRlXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBvYnNlcnZlciA9IG9ic2VydmVyT3JPbk5leHQ7XG4gICAgfVxuXG4gICAgKG9ic2VydmVyOiBMaXZlU2V0T2JzZXJ2ZXI8VD4pO1xuXG4gICAgaWYgKHRoaXMuX2VuZGVkKSB7XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB7XG4gICAgICAgIGNsb3NlZDogZmFsc2UsXG4gICAgICAgIHVuc3Vic2NyaWJlOiAoKSA9PiB7XG4gICAgICAgICAgc3Vic2NyaXB0aW9uLmNsb3NlZCA9IHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIHB1bGxDaGFuZ2VzOiAoKSA9PiB7fVxuICAgICAgfTtcbiAgICAgIGlmIChvYnNlcnZlci5zdGFydCkge1xuICAgICAgICBvYnNlcnZlci5zdGFydChzdWJzY3JpcHRpb24pO1xuICAgICAgfVxuICAgICAgaWYgKCFzdWJzY3JpcHRpb24uY2xvc2VkKSB7XG4gICAgICAgIGlmICh0aGlzLl9lbmRlZFdpdGhFcnJvcikge1xuICAgICAgICAgIGlmIChvYnNlcnZlci5lcnJvcikge1xuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IodGhpcy5fZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAob2JzZXJ2ZXIuY29tcGxldGUpIHtcbiAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzdWJzY3JpcHRpb24uY2xvc2VkID0gdHJ1ZTtcbiAgICAgIHJldHVybiBzdWJzY3JpcHRpb247XG4gICAgfVxuXG4gICAgY29uc3Qgb2JzZXJ2ZXJSZWNvcmQgPSB7b2JzZXJ2ZXIsIGlnbm9yZTogdGhpcy5fY2hhbmdlUXVldWUubGVuZ3RofTtcblxuICAgIGxldCBpc1N0YXJ0aW5nID0gdHJ1ZTtcbiAgICBsZXQgdW5zdWJzY3JpYmVkSW5TdGFydCA9IGZhbHNlO1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHtcbiAgICAgIC8qOjogY2xvc2VkOiBmYWxzZSYmYCAqLyBnZXQgY2xvc2VkKCkge1xuICAgICAgICByZXR1cm4gIWlzU3RhcnRpbmcgJiYgbGl2ZVNldC5fb2JzZXJ2ZXJzLmluZGV4T2Yob2JzZXJ2ZXJSZWNvcmQpIDwgMDtcbiAgICAgIH0vKjo6IGAgKi8sXG4gICAgICB1bnN1YnNjcmliZTogKCkgPT4ge1xuICAgICAgICBpZiAoaXNTdGFydGluZykge1xuICAgICAgICAgIHVuc3Vic2NyaWJlZEluU3RhcnQgPSB0cnVlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpeCA9IHRoaXMuX29ic2VydmVycy5pbmRleE9mKG9ic2VydmVyUmVjb3JkKTtcbiAgICAgICAgaWYgKGl4ID49IDApIHtcbiAgICAgICAgICB0aGlzLl9vYnNlcnZlcnMuc3BsaWNlKGl4LCAxKTtcbiAgICAgICAgICBpZiAoIXRoaXMuX2VuZGVkICYmIHRoaXMuX29ic2VydmVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlcyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9kZWFjdGl2YXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcHVsbENoYW5nZXM6ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZSAmJiB0aGlzLl9hY3RpdmUubGlzdGVuSGFuZGxlciAmJiB0aGlzLl9hY3RpdmUubGlzdGVuSGFuZGxlci5wdWxsQ2hhbmdlcykge1xuICAgICAgICAgIHRoaXMuX2FjdGl2ZS5saXN0ZW5IYW5kbGVyLnB1bGxDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hhbmdlUXVldWVMZW5ndGggPSB0aGlzLl9jaGFuZ2VRdWV1ZS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsTmV4dCA9IG9ic2VydmVyLm5leHQ7XG4gICAgICAgIGlmIChjaGFuZ2VRdWV1ZUxlbmd0aCAhPT0gMCAmJiBvcmlnaW5hbE5leHQpIHtcbiAgICAgICAgICBjb25zdCBjaGFuZ2VzVG9EZWxpdmVyID0gdGhpcy5fY2hhbmdlUXVldWUuc2xpY2Uob2JzZXJ2ZXJSZWNvcmQuaWdub3JlKTtcbiAgICAgICAgICBpZiAoY2hhbmdlc1RvRGVsaXZlci5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIG9ic2VydmVyUmVjb3JkLmlnbm9yZSA9IGNoYW5nZVF1ZXVlTGVuZ3RoO1xuICAgICAgICAgICAgb3JpZ2luYWxOZXh0LmNhbGwob2JzZXJ2ZXIsIGNoYW5nZXNUb0RlbGl2ZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoIXRoaXMuX2FjdGl2ZSkge1xuICAgICAgY29uc3QgY29udHJvbGxlcjogTGl2ZVNldENvbnRyb2xsZXI8VD4gPSB7XG4gICAgICAgIC8vIEZsb3cgZG9lc24ndCBzdXBwb3J0IGdldHRlcnMgYW5kIHNldHRlcnMgeWV0XG4gICAgICAgIC8qOjogY2xvc2VkOiBmYWxzZSYmYCAqLyBnZXQgY2xvc2VkKCkge1xuICAgICAgICAgIHJldHVybiAhbGl2ZVNldC5fYWN0aXZlIHx8IGxpdmVTZXQuX2FjdGl2ZS5jb250cm9sbGVyICE9PSB0aGlzO1xuICAgICAgICB9Lyo6OiBgICovLFxuICAgICAgICBhZGQ6IHZhbHVlID0+IHtcbiAgICAgICAgICBsZXQgdmFsdWVzID0gdGhpcy5fdmFsdWVzO1xuICAgICAgICAgIGlmICghdmFsdWVzKSB0aHJvdyBuZXcgRXJyb3IoJ3NldFZhbHVlIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBjb250cm9sbGVyIGlzIHVzZWQnKTtcbiAgICAgICAgICBpZiAoIXRoaXMuX2VuZGVkICYmICF2YWx1ZXMuaGFzKHZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9tdXRhYmxlVmFsdWVzKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3ZhbHVlcyA9IHZhbHVlcyA9IG5ldyBTZXQodmFsdWVzKTtcbiAgICAgICAgICAgICAgdGhpcy5fbXV0YWJsZVZhbHVlcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWx1ZXMuYWRkKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX3F1ZXVlQ2hhbmdlKHt0eXBlOiAnYWRkJywgdmFsdWV9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJlbW92ZTogdmFsdWUgPT4ge1xuICAgICAgICAgIGxldCB2YWx1ZXMgPSB0aGlzLl92YWx1ZXM7XG4gICAgICAgICAgaWYgKCF2YWx1ZXMpIHRocm93IG5ldyBFcnJvcignc2V0VmFsdWUgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGNvbnRyb2xsZXIgaXMgdXNlZCcpO1xuICAgICAgICAgIGlmICghdGhpcy5fZW5kZWQgJiYgdmFsdWVzLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fbXV0YWJsZVZhbHVlcykge1xuICAgICAgICAgICAgICB0aGlzLl92YWx1ZXMgPSB2YWx1ZXMgPSBuZXcgU2V0KHZhbHVlcyk7XG4gICAgICAgICAgICAgIHRoaXMuX211dGFibGVWYWx1ZXMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsdWVzLmRlbGV0ZSh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLl9xdWV1ZUNoYW5nZSh7dHlwZTogJ3JlbW92ZScsIHZhbHVlfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fZW5kZWQpIHJldHVybjtcbiAgICAgICAgICB0aGlzLl9lbmRlZCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fZW5kZWRXaXRoRXJyb3IgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuX2Vycm9yID0gZXJyO1xuICAgICAgICAgIHRoaXMuX3F1ZXVlQ2hhbmdlKCk7XG4gICAgICAgICAgdGhpcy5fZGVhY3RpdmF0ZSgpO1xuICAgICAgICB9LFxuICAgICAgICBlbmQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fZW5kZWQpIHJldHVybjtcbiAgICAgICAgICB0aGlzLl9lbmRlZCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fcXVldWVDaGFuZ2UoKTtcbiAgICAgICAgICB0aGlzLl9kZWFjdGl2YXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBhY3RpdmUgPSB0aGlzLl9hY3RpdmUgPSB7XG4gICAgICAgIGNvbnRyb2xsZXIsXG4gICAgICAgIGxpc3RlbkhhbmRsZXI6IHtcbiAgICAgICAgICB1bnN1YnNjcmliZTogKCkgPT4ge31cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHNldFZhbHVlc0Vycm9yID0gKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFZhbHVlcyBtdXN0IGJlIGNhbGxlZCBvbmNlIGR1cmluZyBsaXN0ZW4nKTtcbiAgICAgIH07XG4gICAgICBsZXQgc2V0VmFsdWVzID0gdmFsdWVzID0+IHtcbiAgICAgICAgc2V0VmFsdWVzID0gc2V0VmFsdWVzRXJyb3I7XG4gICAgICAgIG1ha2VTZXRJbW11dGFibGUodmFsdWVzKTtcbiAgICAgICAgdGhpcy5fdmFsdWVzID0gdmFsdWVzO1xuICAgICAgICB0aGlzLl9tdXRhYmxlVmFsdWVzID0gZmFsc2U7XG4gICAgICB9O1xuICAgICAgY29uc3QgbGlzdGVuSGFuZGxlck9yRnVuY3Rpb24gPSB0aGlzLl9pbml0Lmxpc3Rlbih2YWx1ZXMgPT4gc2V0VmFsdWVzKHZhbHVlcyksIGNvbnRyb2xsZXIpO1xuICAgICAgaWYgKCF0aGlzLl92YWx1ZXMpIHtcbiAgICAgICAgc2V0VmFsdWVzRXJyb3IoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgbGlzdGVuSGFuZGxlck9yRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgYWN0aXZlLmxpc3RlbkhhbmRsZXIgPSB7XG4gICAgICAgICAgdW5zdWJzY3JpYmU6IGxpc3RlbkhhbmRsZXJPckZ1bmN0aW9uXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKGxpc3RlbkhhbmRsZXJPckZ1bmN0aW9uICE9IG51bGwgJiYgdHlwZW9mIGxpc3RlbkhhbmRsZXJPckZ1bmN0aW9uLnVuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGFjdGl2ZS5saXN0ZW5IYW5kbGVyID0gbGlzdGVuSGFuZGxlck9yRnVuY3Rpb247XG4gICAgICB9IGVsc2UgaWYgKGxpc3RlbkhhbmRsZXJPckZ1bmN0aW9uICE9IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbGlzdGVuIG11c3QgcmV0dXJuIG9iamVjdCB3aXRoIHVuc3Vic2NyaWJlIG1ldGhvZCwgYSBmdW5jdGlvbiwgb3IgbnVsbCcpO1xuICAgICAgfVxuICAgICAgaWYgKGNvbnRyb2xsZXIuY2xvc2VkKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IGFjdGl2ZTtcbiAgICAgICAgdGhpcy5fZGVhY3RpdmF0ZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvYnNlcnZlci5zdGFydCkge1xuICAgICAgb2JzZXJ2ZXIuc3RhcnQoc3Vic2NyaXB0aW9uKTtcbiAgICB9XG4gICAgaXNTdGFydGluZyA9IGZhbHNlO1xuXG4gICAgb2JzZXJ2ZXJSZWNvcmQuaWdub3JlID0gdGhpcy5fY2hhbmdlUXVldWUubGVuZ3RoO1xuICAgIGlmICghdW5zdWJzY3JpYmVkSW5TdGFydCkge1xuICAgICAgdGhpcy5fb2JzZXJ2ZXJzLnB1c2gob2JzZXJ2ZXJSZWNvcmQpO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJzY3JpcHRpb247XG4gIH1cbn1cblxuLy8gQXNzaWduIGhlcmUgYmVjYXVzZSBGbG93IGRvZXNuJ3Qgc3VwcG9ydCBjb21wdXRlZCBwcm9wZXJ0eSBrZXlzIG9uIGNsYXNzZXM6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvMjI4NlxuKExpdmVTZXQ6YW55KS5wcm90b3R5cGVbJCRvYnNlcnZhYmxlXSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIG1ha2VTZXRJbW11dGFibGUoc2V0OiBTZXQ8YW55Pikge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIChzZXQ6YW55KS5hZGQgPSAoc2V0OmFueSkuZGVsZXRlID0gKHNldDphbnkpLmNsZWFyID0gcmVhZE9ubHk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVhZE9ubHkoKSB7XG4gIHRocm93IG5ldyBFcnJvcignRG8gbm90IG1vZGlmeSBTZXQgcGFzc2VkIHRvIG9yIGZyb20gTGl2ZVNldDogU2V0IGlzIHJlYWQtb25seSBpbiBkZXZlbG9wbWVudCcpO1xufVxuIl19

10

package.json
{
"name": "live-set",
"version": "0.3.11",
"version": "0.3.12",
"description": "Class representing a changing and transformable collection of items.",

@@ -21,5 +21,11 @@ "main": "index.js",

"license": "MIT",
"browserify": {
"transform": [
"envify"
]
},
"dependencies": {
"asap": "^2.0.5",
"babel-runtime": "^6.22.0",
"envify": "^4.0.0",
"symbol-observable": "^1.0.4",

@@ -39,3 +45,3 @@ "zen-observable": "^0.4.0"

"eslint-plugin-flowtype": "^2.30.0",
"flow-bin": "^0.39.0",
"flow-bin": "^0.40.0",
"flow-copy-source": "^1.1.0",

@@ -42,0 +48,0 @@ "jest": "^18.1.0",

@@ -6,2 +6,5 @@ # live-set

This class is basically a Set with a subscribe() method that calls your
callback after changes happen to the set of values.
This class represents a set of values which may change over time or have

@@ -253,26 +256,135 @@ transformations applied to it, resulting in a new LiveSet. After modifications

The constructor must be passed an object containing `read` and `listen`
functions.
The `read` function is called if the values() method is called on the LiveSet
instance while it is inactive but not yet ended. The `read` function is
expected to return a Set object containing the LiveSet's current values. If a
LiveSet is not intended to be read while inactive, then you should give a
function which throws an error.
The `listen` function is called whenever the LiveSet is activated. Activation
occurs whenever the LiveSet goes from zero to one subscribers. Activation may
happen multiple times for a LiveSet if it is unsubscribed from and resubscribed
to. The `listen` function is passed two parameters, `setValues` and
`controller`.
`setValues` is a function that must be called with the initial values as a Set
before the passed `listen` function ends and before any new subscriptions are
added to the LiveSet being activated.
`controller` is an object with three methods, `add(value)`, `remove(value)`,
`error(error: any)` and `end()`. These are to be used to modify the LiveSet's
values. Do not modify the Set originally passed to `setValues` to manipulate the
LiveSet. `end()` may be called to signify that the LiveSet will have no more
changes; the LiveSet will become frozen with its current values at that point.
References to subscribers will be released when a LiveSet is ended. The `error`
function ends the LiveSet and delivers an error value to any current
subscribers.
The `listen` function may return a function to call upon deactivation, or an
object with an `unsubscribe` method (to call upon deactivation) and optionally
a `pullChanges` method. The pullChanges method will be called to flush any
changes from the source when the `values()` method is called on the LiveSet, or
the `pullChanges` method is called on a LiveSetSubscription. If the `listen`
function subscribes to a LiveSet, then it may be useful to have the `listen`
function return the LiveSetSubscription, which has unsubscribe and pullChanges
methods.
#### LiveSet.constant
`LiveSet.constant<T>(values: Set<T>): LiveSet<T>`
This creates a LiveSet with a set of values that will never change. The LiveSet
will start in the ended state, and therefore will never deliver change
notifications or keep references to subscribers.
#### LiveSet.active
`LiveSet.active<T>(initialValues?: Set<T>): {liveSet: LiveSet<T>, controller: LiveSetController<T>}`
This is a convenience method to create a LiveSet that starts out in the
activated state and never exits the activated state. The new LiveSet and its
controller (the same type as passed to the `listen` callback passed to the
constructor) are returned.
Be warned that this function eschews the normal activation/deactivation
lifecycle of LiveSets. If the LiveSet requires some resource to be held open to
keep it populated, then you will not be able to auto-close the resource when
the LiveSet loses its subscribers. You will have to provide your own mechanism
to close the resource manually if necessary.
This function is inspired by the nonstandard "Promise.defer()" function that
some Promise libraries have implemented.
#### LiveSet::isEnded
`LiveSet<T>::isEnded(): boolean`
This returns whether the LiveSet is in the ended state. LiveSets in the ended
state will never have their values change, deliver any change notifications, or
keep references to their subscribers.
#### LiveSet::values
`LiveSet<T>::values(): Set<T>`
This returns a Set containing all of the LiveSet's current values at the time
of the method call. If the LiveSet is modified, then previously-returned Set
objects will not include the modifications. The Set object return by the
values() method must not be modified.
If the LiveSet is currently inactive, then this will trigger the `read`
function passed to the constructor to be called. If the LiveSet is currently
active, then this will trigger the `pullChanges` function returned by the
constructor's `listen` function if present.
#### LiveSet::subscribe
`LiveSet<T>::subscribe(observer): LiveSetSubscription`
This function is used to subscribe to change notifications from the LiveSet.
The observer parameter must either be an Observer object with optional `start`,
`next`, `error`, and `complete` functions, or a function which is treated as an
Observer object with that function as the `next` method. The subscribe method
returns a LiveSetSubscription object.
The `start` function is called when the subscription first starts, before the
subscribe call has returned, and it is passed a reference to the
LiveSetSubscription object which will be returned. During the `start` function,
the LiveSet being subscribed to is guaranteed to be active, so it's a good time
to read the current values of the LiveSet with the values() method.
The `next` function is called after any changes have been made to the LiveSet's
set of values. These changes notifications are delivered either asynchronously,
or whenever change notifications are flushed early due to a `LiveSet::values()`
or `LiveSetSubscription::pullChanges()` call.
The `error` function is called if the LiveSet is ended by a call to
`controller.error`, and it's passed the value passed to the `controller.error`
method.
The `complete` function is called if the LiveSet is ended by a call to
`controller.end`.
If either the `error` or `complete` function is called, then there will be no
more calls to any of the observer's functions after that.
This function is intended to be compatible with the Observable subscribe method
of the [Observable proposal](https://tc39.github.io/proposal-observable/).
#### LiveSetSubscription::closed
`LiveSetSubscription::closed: boolean`
This is true if the LiveSet has ended, or the subscription has been
unsubscribed from.
#### LiveSetSubscription::unsubscribe
`LiveSetSubscription::unsubscribe(): void`
This immediately unsubscribes the subscription. None of the observer functions
will be called after unsubscription.
#### LiveSetSubscription::pullChanges
`LiveSetSubscription::pullChanges(): void`
This will cause any queued change notifications to be immediately flushed to
this subscription's observer's `next` function. This will not affect other
subscriptions to the LiveSet.
### Transformations

@@ -288,20 +400,97 @@

This creates a LiveSet that contains only the values of the input `liveSet`
for which they given callback function returns a truthy value for.
#### live-set/map
`map<T,U>(liveSet: LiveSet<T>, cb: (value: T) => U): LiveSet<U>`
This creates a LiveSet that contains the result of `cb(value)` for each value
in the input `liveSet` instead of the original values. The callback will only
be called for the initial values and when values are added; the callback will
not be called when a value is removed.
The behavior is undefined if the callback returns the same value for distinct
input values present in the input `liveSet` at the same time.
#### live-set/transduce
`transduce(liveSet: LiveSet<any>, transducer: Function): LiveSet<any>`
This creates a new LiveSet based on a transformation implemented by the given
transducer function. It supports any transducers implementation that follows
[the transducer protocol](https://github.com/cognitect-labs/transducers-js#the-transducer-protocol),
for example
[jlongster/transducers.js](https://github.com/jlongster/transducers.js)
or
[cognitect-labs/transducers-js](https://github.com/cognitect-labs/transducers-js).
To learn more about transducers please visit those libraries' pages.
Transducers are recommended to be used to replace any sequence of multiple map
or filter function calls. The use of transducers removes the need for
intermediate LiveSets to be created.
Note that each input value from the `liveSet` passed to the transducer is
expected to immediately map to zero or more values. This mapping is remembered
so that if the input value is later removed from the input `liveSet`, then the
associated output values are all removed from the output LiveSet. This is fine
for any combination of common transducers such as `map(cb)`, `filter(cb)`, and
`take(n)`, but transducers which produce a many-to-one relationship between
values such as `partition(n)` will not function in a sensible manner.
The behavior is undefined if the transducer outputs equal values to be present
in the output LiveSet at the same time.
#### live-set/merge
`merge<T>(liveSets: Array<LiveSet<T>>): LiveSet<T>`
This function takes an array of LiveSets and returns a single LiveSet
containing all of their values.
The behavior is undefined if multiple input LiveSets contain the same value at
the same time.
#### live-set/flatMap
`flatMap<T,U>(liveSet: LiveSet<T>, cb: (value: T) => LiveSet<U>): LiveSet<U>`
This function calls the given callback function for each value in the input
`liveSet`, and merges the values of all returned LiveSets into one LiveSet.
When a new value is added to the input `liveSet`, then the callback will be
called a new LiveSet's values will be merged in. When a value is removed from
the input `liveSet`, then the values from the LiveSet created for that value
will be removed from the output LiveSet.
The behavior is undefined if any of the LiveSets returned by the callback
contain equal values at the same time.
#### live-set/mapWithRemoval
`mapWithRemoval<T,U>(input: LiveSet<T>, cb: (value: T, removal: Promise<void>) => U): LiveSet<U>`
This is similar to the live-set/map function, but the callback is also passed a
promise that will resolve when the value is removed from the input `liveSet`.
The LiveSet returned by this function may not have `values()` called on it
while it is inactive.
The behavior is undefined if the callback returns the same value for distinct
input values present in the input `liveSet` at the same time.
#### live-set/toValueObservable
`toValueObservable<T>(liveSet: LiveSet<T>): Observable<{value: T, removal: Promise<void>}>`
This will return an [Observable](https://tc39.github.io/proposal-observable/)
instance which upon subscription will emit a `{value, removal}` object for
every `value` currently in the input `liveSet` where `removal` is a Promise
which will resolve after the `value` is removed from the input `liveSet`.
## Bundling Note
To use this module in browsers, a CommonJS bundler such as Browserify or
Webpack should be used.
LiveSet's code adds additional checks in some places if `process.env.NODE_ENV`
is not set to "production". If you're using Browserify, then setting the
NODE_ENV environment variable to "production" is enough to disable these
checks. Webpack may require additional configuration.
The additional checks make sure that the Set passed to `setValues` and the Set
returned from the `values()` method are not modified.
## Types

@@ -308,0 +497,0 @@

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc