New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

partial.lenses

Package Overview
Dependencies
Maintainers
1
Versions
180
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

partial.lenses - npm Package Compare versions

Comparing version 3.9.3 to 3.9.4

.nyc_output/50b260d54f129fff2fa331bf54c45e62.json

7

bench/bench.js

@@ -6,7 +6,8 @@ const L = require("../lib/partial.lenses")

const xs = [1,2,3]
const nested = [{x: 1}]
const nested = [{x: [{y: 1}]}]
const bs = [
'L.get(L.compose(0, "x"), nested)',
'L.set(L.compose(0, "x"), 2, nested)',
'L.get([0, "x", 0, "y"], nested)',
'L.get([0, "x"], nested)',
'L.set([0, "x"], 2, nested)',
'L.get(L.defaults(1), undefined)',

@@ -13,0 +14,0 @@ 'L.get(L.defaults(1), 2)',

@@ -188,2 +188,22 @@ "use strict";

var composed = function composed(lenses) {
switch (lenses.length) {
case 0:
return identity;
case 1:
return lift(lenses[0]);
default:
return function (constructor) {
return function (x) {
var i = lenses.length;
var r = lift(lenses[--i])(constructor)(x);
do {
r = lift(lenses[--i])(constructor)(r);
} while (0 < i);
return r;
};
};
}
};
var lift = function lift(l) {

@@ -195,4 +215,6 @@ switch (typeof l === "undefined" ? "undefined" : _typeof(l)) {

return liftIndex(l);
case "function":
return lifted(l);
default:
return lifted(l);
return composed(l);
}

@@ -202,20 +224,13 @@ };

function compose() {
var _arguments = arguments;
for (var _len = arguments.length, lenses = Array(_len), _key = 0; _key < _len; _key++) {
lenses[_key] = arguments[_key];
}
switch (arguments.length) {
switch (lenses.length) {
case 0:
return identity;
case 1:
return arguments[0];
return lenses[0];
default:
return function (toCat) {
return function (x) {
var i = _arguments.length;
var r = lift(_arguments[--i])(toCat)(x);
do {
r = lift(_arguments[--i])(toCat)(r);
} while (0 < i);
return r;
};
};
return lenses;
}

@@ -237,8 +252,13 @@ }

return setIndex(l, x, s);
default:
case "function":
return lifted(l)(Ident)(function () {
return Ident(x);
})(s).value;
default:
return composed(l)(Ident)(function () {
return Ident(x);
})(s).value;
}
};
var getI = function getI(l, s) {

@@ -250,6 +270,14 @@ switch (typeof l === "undefined" ? "undefined" : _typeof(l)) {

return getIndex(l, s);
case "function":
return lifted(l)(Const)(Const)(s).value;
default:
return lifted(l)(Const)(Const)(s).value;
{
var r = s;
for (var i = 0, n = l.length; i < n; ++i) {
r = getI(l[i], r);
}return r;
}
}
};
var modifyI = function modifyI(l, x2x, s) {

@@ -261,8 +289,13 @@ switch (typeof l === "undefined" ? "undefined" : _typeof(l)) {

return setIndex(l, x2x(getIndex(l, s)), s);
default:
case "function":
return lifted(l)(Ident)(function (y) {
return Ident(x2x(y));
})(s).value;
default:
return composed(l)(Ident)(function (y) {
return Ident(x2x(y));
})(s).value;
}
};
var lensI = function lensI(getter, setter) {

@@ -323,4 +356,4 @@ return function (_c) {

var choice = exports.choice = function choice() {
for (var _len = arguments.length, ls = Array(_len), _key = 0; _key < _len; _key++) {
ls[_key] = arguments[_key];
for (var _len2 = arguments.length, ls = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
ls[_key2] = arguments[_key2];
}

@@ -549,4 +582,4 @@

var props = exports.props = function props() {
for (var _len2 = arguments.length, ks = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
ks[_key2] = arguments[_key2];
for (var _len3 = arguments.length, ks = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
ks[_key3] = arguments[_key3];
}

@@ -558,4 +591,4 @@

var show = function show() {
for (var _len3 = arguments.length, labels = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
labels[_key3] = arguments[_key3];
for (var _len4 = arguments.length, labels = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
labels[_key4] = arguments[_key4];
}

@@ -571,4 +604,4 @@

var log = exports.log = function log() {
for (var _len4 = arguments.length, labels = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
labels[_key4] = arguments[_key4];
for (var _len5 = arguments.length, labels = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
labels[_key5] = arguments[_key5];
}

@@ -624,2 +657,2 @@

exports.default = compose;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9wYXJ0aWFsLmxlbnNlcy5qcyJdLCJuYW1lcyI6WyJjb21wb3NlIiwiUiIsIklkZW50aXR5IiwidmFsdWUiLCJJZGVudCIsIngiLCJwcm90b3R5cGUiLCJtYXAiLCJ4MnkiLCJvZiIsImFwIiwiQ29uc3RhbnQiLCJDb25zdCIsIlNpbmdsZSIsImNvbmNhdCIsIndhcm4iLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJ3YXJuZWQiLCJtZXNzYWdlIiwiY29uc29sZSIsImN1cnJ5MiIsImEiLCJiIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm4iLCJjdXJyeTMiLCJjIiwiaXNBcnJheSIsImNvbnN0cnVjdG9yIiwiQXJyYXkiLCJpc09iamVjdCIsIk9iamVjdCIsInVuQXJyYXkiLCJ1bmRlZmluZWQiLCJta0FycmF5IiwiaWQiLCJzbmQiLCJfIiwiY2hlY2siLCJleHBlY3RlZCIsInByZWRpY2F0ZSIsIkVycm9yIiwiYXNzZXJ0IiwiZHJvcHBlZCIsInhzIiwiZW1wdHkiLCJkZWxldGVLZXkiLCJrIiwibyIsInIiLCJhc3NpZ24iLCJzZXRLZXkiLCJ2IiwidG9QYXJ0aWFsIiwidHJhbnNmb3JtIiwiZmlsdGVyZWQiLCJmaWx0ZXIiLCJzZWVtc0xlbnMiLCJsaWZ0ZWQiLCJsaWZ0IiwibCIsImxpZnRQcm9wIiwibGlmdEluZGV4IiwiaWRlbnRpdHkiLCJpIiwidG9DYXQiLCJyZW1vdmVBbGwiLCJsZW5zIiwiZGF0YSIsImdldCIsInJlbW92ZSIsInNldEkiLCJzIiwic2V0UHJvcCIsInNldEluZGV4IiwiZ2V0SSIsImdldFByb3AiLCJnZXRJbmRleCIsIm1vZGlmeUkiLCJ4MngiLCJ5IiwibGVuc0kiLCJnZXR0ZXIiLCJzZXR0ZXIiLCJpbm5lciIsInRhcmdldCIsImZvY3VzIiwiY29sbGVjdEkiLCJtb2RpZnkiLCJzZXQiLCJjb2xsZWN0IiwiY2hhaW4iLCJ4MnlMIiwieEwiLCJjaG9vc2UiLCJ4TyIsIm5vdGhpbmciLCJqdXN0IiwiYWx3YXlzIiwib3JFbHNlIiwiZCIsImNob2ljZSIsImxzIiwiZmluZEluZGV4IiwicmVwbGFjZXIiLCJpbm4iLCJvdXQiLCJlcXVhbHMiLCJub3JtYWxpemVyIiwicmVwbGFjZSIsImRlZmF1bHRzIiwicmVxdWlyZWQiLCJkZWZpbmUiLCJ2YWx1ZU9yIiwibm9ybWFsaXplIiwiaXNQcm9wIiwicHJvcCIsIm9PdXQiLCJmaW5kIiwiYXBwZW5kIiwiZmluZFdpdGgiLCJsbHMiLCJpc0luZGV4IiwiTnVtYmVyIiwiaXNJbnRlZ2VyIiwiaW5kZXgiLCJ5cyIsInNsaWNlIiwic3BsaWNlIiwicCIsImF1Z21lbnQiLCJ6IiwidGVtcGxhdGUiLCJjSW4iLCJwaWNrIiwicHJvcHMiLCJrcyIsInppcE9iaiIsInNob3ciLCJsYWJlbHMiLCJsb2ciLCJzZXF1ZW5jZSIsInRyYXZlcnNlIiwib3B0aW9uYWwiLCJmcm9tUmFtZGEiLCJmYW50YXN5IiwidG9SYW1kYSIsImZyb21BcnJheUJ5IiwibiIsInZhbHVlcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztRQXdIZ0JBLE8sR0FBQUEsTzs7QUF4SGhCOztJQUFZQyxDOzs7O0FBRVo7O0FBRUEsU0FBU0MsUUFBVCxDQUFrQkMsS0FBbEIsRUFBeUI7QUFBQyxPQUFLQSxLQUFMLEdBQWFBLEtBQWI7QUFBbUI7QUFDN0MsSUFBTUMsUUFBUSxTQUFSQSxLQUFRO0FBQUEsU0FBSyxJQUFJRixRQUFKLENBQWFHLENBQWIsQ0FBTDtBQUFBLENBQWQ7QUFDQUgsU0FBU0ksU0FBVCxDQUFtQkMsR0FBbkIsR0FBeUIsVUFBVUMsR0FBVixFQUFlO0FBQUMsU0FBTyxJQUFJTixRQUFKLENBQWFNLElBQUksS0FBS0wsS0FBVCxDQUFiLENBQVA7QUFBcUMsQ0FBOUU7QUFDQUQsU0FBU0ksU0FBVCxDQUFtQkcsRUFBbkIsR0FBd0JMLEtBQXhCO0FBQ0FGLFNBQVNJLFNBQVQsQ0FBbUJJLEVBQW5CLEdBQXdCLFVBQVVMLENBQVYsRUFBYTtBQUFDLFNBQU8sSUFBSUgsUUFBSixDQUFhLEtBQUtD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QUNWLFFBQUl0RCxRQUFRaUIsRUFBUixDQUFKLEVBQWlCO0FBQ2YsVUFBTUksSUFBSSxFQUFWO0FBQ0EsV0FBSyxJQUFJZ0IsSUFBRSxDQUFOLEVBQVNvRixJQUFFeEcsR0FBR3JCLE1BQW5CLEVBQTJCeUMsSUFBRW9GLENBQTdCLEVBQWdDLEVBQUVwRixDQUFsQyxFQUFxQztBQUNuQyxZQUFNOUQsSUFBSTBDLEdBQUdvQixDQUFILENBQVY7QUFDQWhCLFVBQUU5QyxFQUFFaUMsRUFBRixDQUFGLElBQVdqQyxDQUFYO0FBQ0Q7QUFDRCxhQUFPOEMsQ0FBUDtBQUNEO0FBQ0YsR0FURCxFQVVBO0FBQUEsV0FBS2xCLFNBQVNrQixDQUFULElBQWNsRCxFQUFFdUosTUFBRixDQUFTckcsQ0FBVCxDQUFkLEdBQTRCZixTQUFqQztBQUFBLEdBVkEsQ0FGeUI7QUFBQSxDQUFwQjs7a0JBY1FwQyxPIiwiZmlsZSI6InBhcnRpYWwubGVuc2VzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUiBmcm9tIFwicmFtZGFcIlxuXG4vL1xuXG5mdW5jdGlvbiBJZGVudGl0eSh2YWx1ZSkge3RoaXMudmFsdWUgPSB2YWx1ZX1cbmNvbnN0IElkZW50ID0geCA9PiBuZXcgSWRlbnRpdHkoeClcbklkZW50aXR5LnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoeDJ5KSB7cmV0dXJuIG5ldyBJZGVudGl0eSh4MnkodGhpcy52YWx1ZSkpfVxuSWRlbnRpdHkucHJvdG90eXBlLm9mID0gSWRlbnRcbklkZW50aXR5LnByb3RvdHlwZS5hcCA9IGZ1bmN0aW9uICh4KSB7cmV0dXJuIG5ldyBJZGVudGl0eSh0aGlzLnZhbHVlKHgudmFsdWUpKX1cblxuLy9cblxuZnVuY3Rpb24gQ29uc3RhbnQodmFsdWUpIHt0aGlzLnZhbHVlID0gdmFsdWV9XG5jb25zdCBDb25zdCA9IHggPT4gbmV3IENvbnN0YW50KHgpXG5jb25zdCBTaW5nbGUgPSB4ID0+IENvbnN0KFt4XSlcbkNvbnN0YW50LnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoKSB7cmV0dXJuIHRoaXN9XG5Db25zdGFudC5wcm90b3R5cGUub2YgPSBDb25zdFxuQ29uc3RhbnQucHJvdG90eXBlLmFwID0gZnVuY3Rpb24gKHgpIHtyZXR1cm4gbmV3IENvbnN0KFIuY29uY2F0KHRoaXMudmFsdWUsIHgudmFsdWUpKX1cblxuLy9cblxuY29uc3Qgd2FybiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/ICgpID0+IHt9IDogKCgpID0+IHtcbiAgY29uc3Qgd2FybmVkID0ge31cblxuICByZXR1cm4gbWVzc2FnZSA9PiB7XG4gICAgaWYgKCEobWVzc2FnZSBpbiB3YXJuZWQpKSB7XG4gICAgICB3YXJuZWRbbWVzc2FnZV0gPSBtZXNzYWdlXG4gICAgICBjb25zb2xlLndhcm4oXCJwYXJ0aWFsLmxlbnNlczpcIiwgbWVzc2FnZSlcbiAgICB9XG4gIH1cbn0pKClcblxuLy9cblxuY29uc3QgY3VycnkyID0gZm4gPT4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAxOiAgcmV0dXJuIGIgPT4gZm4oYSwgYilcbiAgICBkZWZhdWx0OiByZXR1cm4gZm4oYSwgYilcbiAgfVxufVxuXG5jb25zdCBjdXJyeTMgPSBmbiA9PiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICBjYXNlIDE6ICByZXR1cm4gY3VycnkyKChiLCBjKSA9PiBmbihhLCBiLCBjKSlcbiAgICBjYXNlIDI6ICByZXR1cm4gYyA9PiBmbihhLCBiLCBjKVxuICAgIGRlZmF1bHQ6IHJldHVybiBmbihhLCBiLCBjKVxuICB9XG59XG5cbi8vXG5cbmNvbnN0IGlzQXJyYXkgID0geCA9PiB4ICYmIHguY29uc3RydWN0b3IgPT09IEFycmF5XG5jb25zdCBpc09iamVjdCA9IHggPT4geCAmJiB4LmNvbnN0cnVjdG9yID09PSBPYmplY3RcblxuY29uc3QgdW5BcnJheSAgPSB4ID0+ICBpc0FycmF5KHgpID8geCA6IHVuZGVmaW5lZFxuXG5jb25zdCBta0FycmF5ID0geCA9PiBpc0FycmF5KHgpID8geCA6IFtdXG5cbi8vXG5cbmNvbnN0IGlkID0geCA9PiB4XG5jb25zdCBzbmQgPSAoXywgYykgPT4gY1xuXG4vL1xuXG5jb25zdCBjaGVjayA9IChleHBlY3RlZCwgcHJlZGljYXRlKSA9PiB4ID0+IHtcbiAgaWYgKHByZWRpY2F0ZSh4KSlcbiAgICByZXR1cm4geFxuICBlbHNlXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke2V4cGVjdGVkfSwgYnV0IGdvdCAke3h9LmApXG59XG5cbmNvbnN0IGFzc2VydCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/ICgpID0+IGlkIDogY2hlY2tcblxuLy9cblxuY29uc3QgZHJvcHBlZCA9IHhzID0+IHtcbiAgZm9yIChjb25zdCBfIGluIHhzKVxuICAgIHJldHVybiB4c1xuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8vXG5cbmNvbnN0IGVtcHR5ID0ge31cblxuY29uc3QgZGVsZXRlS2V5ID0gKGssIG8pID0+IHtcbiAgY29uc3QgciA9IE9iamVjdC5hc3NpZ24oe30sIG8pXG4gIGRlbGV0ZSByW2tdXG4gIHJldHVybiBkcm9wcGVkKHIpXG59XG5cbmNvbnN0IHNldEtleSA9IChrLCB2LCBvKSA9PiB7XG4gIGNvbnN0IHIgPSBPYmplY3QuYXNzaWduKHt9LCBvKVxuICByW2tdID0gdlxuICByZXR1cm4gclxufVxuXG4vL1xuXG5jb25zdCB0b1BhcnRpYWwgPSB0cmFuc2Zvcm0gPT4geCA9PiB1bmRlZmluZWQgPT09IHggPyB4IDogdHJhbnNmb3JtKHgpXG5cbi8vXG5cbmNvbnN0IGZpbHRlcmVkID0gdG9QYXJ0aWFsKHhzID0+IGRyb3BwZWQoeHMuZmlsdGVyKHggPT4geCAhPT0gdW5kZWZpbmVkKSkpXG5cbi8vXG5cbmNvbnN0IHNlZW1zTGVucyA9IHggPT4gdHlwZW9mIHggPT09IFwiZnVuY3Rpb25cIiAmJiB4Lmxlbmd0aCA9PT0gMVxuXG5jb25zdCBsaWZ0ZWQgPSBhc3NlcnQoXCJhIGxlbnNcIiwgc2VlbXNMZW5zKVxuXG5jb25zdCBsaWZ0ID0gbCA9PiB7XG4gIHN3aXRjaCAodHlwZW9mIGwpIHtcbiAgICBjYXNlIFwic3RyaW5nXCI6IHJldHVybiBsaWZ0UHJvcChsKVxuICAgIGNhc2UgXCJudW1iZXJcIjogcmV0dXJuIGxpZnRJbmRleChsKVxuICAgIGRlZmF1bHQ6ICAgICAgIHJldHVybiBsaWZ0ZWQobClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcG9zZSgpIHtcbiAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiAgcmV0dXJuIGlkZW50aXR5XG4gICAgY2FzZSAxOiAgcmV0dXJuIGFyZ3VtZW50c1swXVxuICAgIGRlZmF1bHQ6IHJldHVybiB0b0NhdCA9PiB4ID0+IHtcbiAgICAgIGxldCBpID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgbGV0IHIgPSBsaWZ0KGFyZ3VtZW50c1stLWldKSh0b0NhdCkoeClcbiAgICAgIGRvIHtcbiAgICAgICAgciA9IGxpZnQoYXJndW1lbnRzWy0taV0pKHRvQ2F0KShyKVxuICAgICAgfSB3aGlsZSAoMCA8IGkpXG4gICAgICByZXR1cm4gclxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgcmVtb3ZlQWxsID0gY3VycnkyKChsZW5zLCBkYXRhKSA9PiB7XG4gIHdhcm4oXCJgcmVtb3ZlQWxsYCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gbmV4dCBtYWpvciB2ZXJzaW9uIC0tLSB1c2UgYSBkaWZmZXJlbnQgYXBwcm9hY2guXCIpXG4gIHdoaWxlIChnZXQobGVucywgZGF0YSkgIT09IHVuZGVmaW5lZClcbiAgICBkYXRhID0gcmVtb3ZlKGxlbnMsIGRhdGEpXG4gIHJldHVybiBkYXRhXG59KVxuXG5jb25zdCBzZXRJID0gKGwsIHgsIHMpID0+IHtcbiAgc3dpdGNoICh0eXBlb2YgbCkge1xuICAgIGNhc2UgXCJzdHJpbmdcIjogcmV0dXJuIHNldFByb3AobCwgeCwgcylcbiAgICBjYXNlIFwibnVtYmVyXCI6IHJldHVybiBzZXRJbmRleChsLCB4LCBzKVxuICAgIGRlZmF1bHQ6ICAgICAgIHJldHVybiBsaWZ0ZWQobCkoSWRlbnQpKCgpID0+IElkZW50KHgpKShzKS52YWx1ZVxuICB9XG59XG5jb25zdCBnZXRJID0gKGwsIHMpID0+IHtcbiAgc3dpdGNoICh0eXBlb2YgbCkge1xuICAgIGNhc2UgXCJzdHJpbmdcIjogcmV0dXJuIGdldFByb3AobCwgcylcbiAgICBjYXNlIFwibnVtYmVyXCI6IHJldHVybiBnZXRJbmRleChsLCBzKVxuICAgIGRlZmF1bHQ6ICAgICAgIHJldHVybiBsaWZ0ZWQobCkoQ29uc3QpKENvbnN0KShzKS52YWx1ZVxuICB9XG59XG5jb25zdCBtb2RpZnlJID0gKGwsIHgyeCwgcykgPT4ge1xuICBzd2l0Y2ggKHR5cGVvZiBsKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOiByZXR1cm4gc2V0UHJvcChsLCB4MngoZ2V0UHJvcChsLCBzKSksIHMpXG4gICAgY2FzZSBcIm51bWJlclwiOiByZXR1cm4gc2V0SW5kZXgobCwgeDJ4KGdldEluZGV4KGwsIHMpKSwgcylcbiAgICBkZWZhdWx0OiAgICAgICByZXR1cm4gbGlmdGVkKGwpKElkZW50KSh5ID0+IElkZW50KHgyeCh5KSkpKHMpLnZhbHVlXG4gIH1cbn1cbmNvbnN0IGxlbnNJID0gKGdldHRlciwgc2V0dGVyKSA9PiBfYyA9PiBpbm5lciA9PiB0YXJnZXQgPT5cbiAgaW5uZXIoZ2V0dGVyKHRhcmdldCkpLm1hcChmb2N1cyA9PiBzZXR0ZXIoZm9jdXMsIHRhcmdldCkpXG5jb25zdCBjb2xsZWN0SSA9IChsLCBzKSA9PiBsKENvbnN0KShTaW5nbGUpKHMpLnZhbHVlXG5cbmV4cG9ydCBjb25zdCByZW1vdmUgPSBjdXJyeTIoKGwsIHMpID0+IHNldEkobCwgdW5kZWZpbmVkLCBzKSlcbmV4cG9ydCBjb25zdCBsZW5zID0gY3VycnkyKGxlbnNJKVxuZXhwb3J0IGNvbnN0IG1vZGlmeSA9IGN1cnJ5Myhtb2RpZnlJKVxuZXhwb3J0IGNvbnN0IHNldCA9IGN1cnJ5MyhzZXRJKVxuZXhwb3J0IGNvbnN0IGdldCA9IGN1cnJ5MihnZXRJKVxuZXhwb3J0IGNvbnN0IGNvbGxlY3QgPSBjdXJyeTIoKGwsIHMpID0+XG4gIHdhcm4oXCJgY29sbGVjdGAgaXMgZXhwZXJpbWVudGFsIGFuZCBtaWdodCBiZSByZW1vdmVkLCByZW5hbWVkIG9yIGNoYW5nZWQgc2VtYW50aWNhbGx5IGJlZm9yZSBuZXh0IG1ham9yIHJlbGVhc2VcIikgfHxcbiAgbWtBcnJheShmaWx0ZXJlZChjb2xsZWN0SShsaWZ0KGwpLCBzKSkpKVxuXG5leHBvcnQgY29uc3QgY2hhaW4gPSBjdXJyeTIoKHgyeUwsIHhMKSA9PlxuICBjb21wb3NlKHhMLCBjaG9vc2UoeE8gPT4geE8gPT09IHVuZGVmaW5lZCA/IG5vdGhpbmcgOiB4MnlMKHhPKSkpKVxuXG5leHBvcnQgY29uc3QganVzdCA9IHggPT4gbGVuc0koUi5hbHdheXMoeCksIHNuZClcblxuZXhwb3J0IGNvbnN0IGNob29zZSA9IHgyeUwgPT4gY29uc3RydWN0b3IgPT4gaW5uZXIgPT4gdGFyZ2V0ID0+XG4gIGxpZnQoeDJ5TCh0YXJnZXQpKShjb25zdHJ1Y3RvcikoaW5uZXIpKHRhcmdldClcblxuZXhwb3J0IGNvbnN0IG5vdGhpbmcgPSBsZW5zSShzbmQsIHNuZClcblxuZXhwb3J0IGNvbnN0IG9yRWxzZSA9XG4gIGN1cnJ5MigoZCwgbCkgPT4gY2hvb3NlKHggPT4gZ2V0SShsLCB4KSAhPT0gdW5kZWZpbmVkID8gbCA6IGQpKVxuXG5leHBvcnQgY29uc3QgY2hvaWNlID0gKC4uLmxzKSA9PiBjaG9vc2UoeCA9PiB7XG4gIGNvbnN0IGkgPSBscy5maW5kSW5kZXgobCA9PiBnZXRJKGwsIHgpICE9PSB1bmRlZmluZWQpXG4gIHJldHVybiAwIDw9IGkgPyBsc1tpXSA6IG5vdGhpbmdcbn0pXG5cbmNvbnN0IHJlcGxhY2VyID0gKGlubiwgb3V0KSA9PiB4ID0+IFIuZXF1YWxzKHgsIGlubikgPyBvdXQgOiB4XG5jb25zdCBub3JtYWxpemVyID0gZm4gPT4gX2MgPT4gaW5uZXIgPT4geCA9PiBpbm5lcihmbih4KSkubWFwKGZuKVxuXG5leHBvcnQgY29uc3QgcmVwbGFjZSA9IGN1cnJ5MigoaW5uLCBvdXQpID0+IF9jID0+IGlubmVyID0+IHggPT5cbiAgaW5uZXIocmVwbGFjZXIoaW5uLCBvdXQpKHgpKS5tYXAocmVwbGFjZXIob3V0LCBpbm4pKSlcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRzID0gb3V0ID0+IF9jID0+IGlubmVyID0+IHggPT5cbiAgaW5uZXIoeCA9PT0gdW5kZWZpbmVkID8gb3V0IDogeCkubWFwKHJlcGxhY2VyKG91dCwgdW5kZWZpbmVkKSlcbmV4cG9ydCBjb25zdCByZXF1aXJlZCA9IGlubiA9PiByZXBsYWNlKGlubiwgdW5kZWZpbmVkKVxuZXhwb3J0IGNvbnN0IGRlZmluZSA9IHYgPT4gbm9ybWFsaXplcih4ID0+IHggPT09IHVuZGVmaW5lZCA/IHYgOiB4KVxuXG5leHBvcnQgY29uc3QgdmFsdWVPciA9IHYgPT4gX2MgPT4gaW5uZXIgPT4geCA9PlxuICBpbm5lcih4ID09PSB1bmRlZmluZWQgfHwgeCA9PT0gbnVsbCA/IHYgOiB4KVxuXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplID0gdHJhbnNmb3JtID0+IG5vcm1hbGl6ZXIodG9QYXJ0aWFsKHRyYW5zZm9ybSkpXG5cbmNvbnN0IGlzUHJvcCA9IHggPT4gdHlwZW9mIHggPT09IFwic3RyaW5nXCJcblxuZXhwb3J0IGNvbnN0IHByb3AgPSBhc3NlcnQoXCJhIHN0cmluZ1wiLCBpc1Byb3ApXG5cbmNvbnN0IGdldFByb3AgPSAoaywgbykgPT4gaXNPYmplY3QobykgPyBvW2tdIDogdW5kZWZpbmVkXG5jb25zdCBzZXRQcm9wID0gKGssIHYsIG8pID0+IHtcbiAgY29uc3Qgb091dCA9IGlzT2JqZWN0KG8pID8gbyA6IGVtcHR5XG4gIHJldHVybiB2ID09PSB1bmRlZmluZWQgPyBkZWxldGVLZXkoaywgb091dCkgOiBzZXRLZXkoaywgdiwgb091dClcbn1cbmNvbnN0IGxpZnRQcm9wID0gayA9PiBfYyA9PiBpbm5lciA9PiBvID0+XG4gIGlubmVyKGdldFByb3AoaywgbykpLm1hcCh2ID0+IHNldFByb3AoaywgdiwgbykpXG5cbmV4cG9ydCBjb25zdCBmaW5kID0gcHJlZGljYXRlID0+IGNob29zZSh4cyA9PiB7XG4gIGlmIChpc0FycmF5KHhzKSkge1xuICAgIGNvbnN0IGkgPSB4cy5maW5kSW5kZXgocHJlZGljYXRlKVxuICAgIHJldHVybiBpIDwgMCA/IGFwcGVuZCA6IGlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYXBwZW5kXG4gIH1cbn0pXG5cbmV4cG9ydCBjb25zdCBmaW5kV2l0aCA9ICguLi5scykgPT4ge1xuICBjb25zdCBsbHMgPSBsaWZ0KGNvbXBvc2UoLi4ubHMpKVxuICByZXR1cm4gY29tcG9zZShmaW5kKHggPT4gZ2V0SShsbHMsIHgpICE9PSB1bmRlZmluZWQpLCBsbHMpXG59XG5cbmNvbnN0IGlzSW5kZXggPSB4ID0+IE51bWJlci5pc0ludGVnZXIoeCkgJiYgMCA8PSB4XG5cbmV4cG9ydCBjb25zdCBpbmRleCA9IGFzc2VydChcImEgbm9uLW5lZ2F0aXZlIGludGVnZXJcIiwgaXNJbmRleClcblxuY29uc3QgZ2V0SW5kZXggPSAoaSwgeHMpID0+IGlzQXJyYXkoeHMpID8geHNbaV0gOiB1bmRlZmluZWRcbmNvbnN0IHNldEluZGV4ID0gKGksIHgsIHhzKSA9PiB7XG4gIGlmICh4ID09PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoIWlzQXJyYXkoeHMpKVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGlmICh4cy5sZW5ndGggPD0gaSlcbiAgICAgIHJldHVybiBkcm9wcGVkKHhzKVxuICAgIGNvbnN0IHlzID0geHMuc2xpY2UoMClcbiAgICB5cy5zcGxpY2UoaSwgMSlcbiAgICByZXR1cm4gZHJvcHBlZCh5cylcbiAgfSBlbHNlIHtcbiAgICBpZiAoIWlzQXJyYXkoeHMpKVxuICAgICAgcmV0dXJuIEFycmF5KGkpLmNvbmNhdChbeF0pXG4gICAgaWYgKHhzLmxlbmd0aCA8PSBpKVxuICAgICAgcmV0dXJuIHhzLmNvbmNhdChBcnJheShpIC0geHMubGVuZ3RoKSwgW3hdKVxuICAgIGNvbnN0IHlzID0geHMuc2xpY2UoMClcbiAgICB5c1tpXSA9IHhcbiAgICByZXR1cm4geXNcbiAgfVxufVxuY29uc3QgbGlmdEluZGV4ID0gaSA9PiBfYyA9PiBpbm5lciA9PiB4cyA9PlxuICBpbm5lcihnZXRJbmRleChpLCB4cykpLm1hcCh4ID0+IHNldEluZGV4KGksIHgsIHhzKSlcblxuZXhwb3J0IGNvbnN0IGFwcGVuZCA9IGxlbnNJKHNuZCwgKHgsIHhzKSA9PlxuICB4ID09PSB1bmRlZmluZWQgPyB1bkFycmF5KHhzKSA6IGlzQXJyYXkoeHMpID8geHMuY29uY2F0KFt4XSkgOiBbeF0pXG5cbmV4cG9ydCBjb25zdCBmaWx0ZXIgPSBwID0+IGxlbnNJKHhzID0+IHVuQXJyYXkoeHMpICYmIHhzLmZpbHRlcihwKSwgKHlzLCB4cykgPT5cbiAgZHJvcHBlZChta0FycmF5KHlzKS5jb25jYXQobWtBcnJheSh4cykuZmlsdGVyKHggPT4gIXAoeCkpKSkpXG5cbmV4cG9ydCBjb25zdCBhdWdtZW50ID0gdGVtcGxhdGUgPT4gbGVuc0koXG4gIHggPT4ge1xuICAgIGlmIChpc09iamVjdCh4KSkge1xuICAgICAgY29uc3QgeiA9IHsuLi54fVxuICAgICAgZm9yIChjb25zdCBrIGluIHRlbXBsYXRlKVxuICAgICAgICB6W2tdID0gdGVtcGxhdGVba10oeilcbiAgICAgIHJldHVybiB6XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG4gIH0sXG4gICh5LCBjSW4pID0+IHtcbiAgICBpZiAoaXNPYmplY3QoeSkpIHtcbiAgICAgIGNvbnN0IGMgPSBpc09iamVjdChjSW4pID8gY0luIDogZW1wdHlcbiAgICAgIGxldCB6XG4gICAgICBjb25zdCBzZXQgPSAoaywgdikgPT4ge1xuICAgICAgICBpZiAodW5kZWZpbmVkID09PSB6KVxuICAgICAgICAgIHogPSB7fVxuICAgICAgICB6W2tdID0gdlxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBrIGluIHkpIHtcbiAgICAgICAgaWYgKCEoayBpbiB0ZW1wbGF0ZSkpXG4gICAgICAgICAgc2V0KGssIHlba10pXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBpZiAoayBpbiBjKVxuICAgICAgICAgICAgc2V0KGssIGNba10pXG4gICAgICB9XG4gICAgICByZXR1cm4gelxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuICB9KVxuXG5leHBvcnQgY29uc3QgcGljayA9IHRlbXBsYXRlID0+IGxlbnNJKFxuICBjID0+IHtcbiAgICBsZXQgclxuICAgIGZvciAoY29uc3QgayBpbiB0ZW1wbGF0ZSkge1xuICAgICAgY29uc3QgdiA9IGdldEkodGVtcGxhdGVba10sIGMpXG4gICAgICBpZiAodiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChyID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgciA9IHt9XG4gICAgICAgIHJba10gPSB2XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByXG4gIH0sXG4gIChvID0gZW1wdHksIGNJbikgPT4ge1xuICAgIGxldCBjID0gY0luXG4gICAgZm9yIChjb25zdCBrIGluIHRlbXBsYXRlKVxuICAgICAgYyA9IHNldEkodGVtcGxhdGVba10sIG9ba10sIGMpXG4gICAgcmV0dXJuIGNcbiAgfSlcblxuZXhwb3J0IGNvbnN0IGlkZW50aXR5ID0gX2MgPT4gaW5uZXIgPT4gaW5uZXJcblxuZXhwb3J0IGNvbnN0IHByb3BzID0gKC4uLmtzKSA9PiBwaWNrKFIuemlwT2JqKGtzLCBrcykpXG5cbmNvbnN0IHNob3cgPSAoLi4ubGFiZWxzKSA9PiB4ID0+IGNvbnNvbGUubG9nKC4uLmxhYmVscywgeCkgfHwgeFxuXG5leHBvcnQgY29uc3QgbG9nID0gKC4uLmxhYmVscykgPT5cbiAgbGVuc0koc2hvdyguLi5sYWJlbHMsIFwiZ2V0XCIpLCBzaG93KC4uLmxhYmVscywgXCJzZXRcIikpXG5cbmV4cG9ydCBjb25zdCBzZXF1ZW5jZSA9IGNvbnN0cnVjdG9yID0+IGlubmVyID0+IHRhcmdldCA9PlxuICB3YXJuKFwiYHNlcXVlbmNlYCBpcyBleHBlcmltZW50YWwgYW5kIG1pZ2h0IGJlIHJlbW92ZWQsIHJlbmFtZWQgb3IgY2hhbmdlZCBzZW1hbnRpY2FsbHkgYmVmb3JlIG5leHQgbWFqb3IgcmVsZWFzZVwiKSB8fFxuICBSLnRyYXZlcnNlKGNvbnN0cnVjdG9yLCBpbm5lciwgbWtBcnJheSh0YXJnZXQpKVxuICAubWFwKGZpbHRlcmVkKVxuXG5leHBvcnQgY29uc3Qgb3B0aW9uYWwgPVxuICBjb21wb3NlKGxlbnNJKHRvUGFydGlhbCh4ID0+IFt4XSksXG4gICAgICAgICAgICAgICAgdG9QYXJ0aWFsKChbeF0pID0+IHgpKSxcbiAgICAgICAgICBzZXF1ZW5jZSlcblxuZXhwb3J0IGNvbnN0IGZyb21SYW1kYSA9IGwgPT4gX2MgPT4gbFxuY29uc3QgZmFudGFzeSA9ICgpID0+IHt0aHJvdyBuZXcgRXJyb3IoXCJTb3JyeSwgYHRvUmFtZGFgIGlzIG9ubHkgZmFudGFzeSFcIil9XG5leHBvcnQgY29uc3QgdG9SYW1kYSA9IGwgPT4gbGlmdChsKShmYW50YXN5KVxuXG5leHBvcnQgY29uc3QgZnJvbUFycmF5QnkgPSBpZCA9PlxuICB3YXJuKFwiYGZyb21BcnJheUJ5YCBpcyBleHBlcmltZW50YWwgYW5kIG1pZ2h0IGJlIHJlbW92ZWQsIHJlbmFtZWQgb3IgY2hhbmdlZCBzZW1hbnRpY2FsbHkgYmVmb3JlIG5leHQgbWFqb3IgcmVsZWFzZVwiKSB8fFxuICBsZW5zSSh4cyA9PiB7XG4gICAgaWYgKGlzQXJyYXkoeHMpKSB7XG4gICAgICBjb25zdCBvID0ge31cbiAgICAgIGZvciAobGV0IGk9MCwgbj14cy5sZW5ndGg7IGk8bjsgKytpKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXVxuICAgICAgICBvW3hbaWRdXSA9IHhcbiAgICAgIH1cbiAgICAgIHJldHVybiBvXG4gICAgfVxuICB9LFxuICBvID0+IGlzT2JqZWN0KG8pID8gUi52YWx1ZXMobykgOiB1bmRlZmluZWQpXG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2VcbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9wYXJ0aWFsLmxlbnNlcy5qcyJdLCJuYW1lcyI6WyJjb21wb3NlIiwiUiIsIklkZW50aXR5IiwidmFsdWUiLCJJZGVudCIsIngiLCJwcm90b3R5cGUiLCJtYXAiLCJ4MnkiLCJvZiIsImFwIiwiQ29uc3RhbnQiLCJDb25zdCIsIlNpbmdsZSIsImNvbmNhdCIsIndhcm4iLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJ3YXJuZWQiLCJtZXNzYWdlIiwiY29uc29sZSIsImN1cnJ5MiIsImEiLCJiIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm4iLCJjdXJyeTMiLCJjIiwiaXNBcnJheSIsImNvbnN0cnVjdG9yIiwiQXJyYXkiLCJpc09iamVjdCIsIk9iamVjdCIsInVuQXJyYXkiLCJ1bmRlZmluZWQiLCJta0FycmF5IiwiaWQiLCJzbmQiLCJfIiwiY2hlY2siLCJleHBlY3RlZCIsInByZWRpY2F0ZSIsIkVycm9yIiwiYXNzZXJ0IiwiZHJvcHBlZCIsInhzIiwiZW1wdHkiLCJkZWxldGVLZXkiLCJrIiwibyIsInIiLCJhc3NpZ24iLCJzZXRLZXkiLCJ2IiwidG9QYXJ0aWFsIiwidHJhbnNmb3JtIiwiZmlsdGVyZWQiLCJmaWx0ZXIiLCJzZWVtc0xlbnMiLCJsaWZ0ZWQiLCJjb21wb3NlZCIsImxlbnNlcyIsImlkZW50aXR5IiwibGlmdCIsImkiLCJsIiwibGlmdFByb3AiLCJsaWZ0SW5kZXgiLCJyZW1vdmVBbGwiLCJsZW5zIiwiZGF0YSIsImdldCIsInJlbW92ZSIsInNldEkiLCJzIiwic2V0UHJvcCIsInNldEluZGV4IiwiZ2V0SSIsImdldFByb3AiLCJnZXRJbmRleCIsIm4iLCJtb2RpZnlJIiwieDJ4IiwieSIsImxlbnNJIiwiZ2V0dGVyIiwic2V0dGVyIiwiaW5uZXIiLCJ0YXJnZXQiLCJmb2N1cyIsImNvbGxlY3RJIiwibW9kaWZ5Iiwic2V0IiwiY29sbGVjdCIsImNoYWluIiwieDJ5TCIsInhMIiwiY2hvb3NlIiwieE8iLCJub3RoaW5nIiwianVzdCIsImFsd2F5cyIsIm9yRWxzZSIsImQiLCJjaG9pY2UiLCJscyIsImZpbmRJbmRleCIsInJlcGxhY2VyIiwiaW5uIiwib3V0IiwiZXF1YWxzIiwibm9ybWFsaXplciIsInJlcGxhY2UiLCJkZWZhdWx0cyIsInJlcXVpcmVkIiwiZGVmaW5lIiwidmFsdWVPciIsIm5vcm1hbGl6ZSIsImlzUHJvcCIsInByb3AiLCJvT3V0IiwiZmluZCIsImFwcGVuZCIsImZpbmRXaXRoIiwibGxzIiwiaXNJbmRleCIsIk51bWJlciIsImlzSW50ZWdlciIsImluZGV4IiwieXMiLCJzbGljZSIsInNwbGljZSIsInAiLCJhdWdtZW50IiwieiIsInRlbXBsYXRlIiwiY0luIiwicGljayIsInByb3BzIiwia3MiLCJ6aXBPYmoiLCJzaG93IiwibGFiZWxzIiwibG9nIiwic2VxdWVuY2UiLCJ0cmF2ZXJzZSIsIm9wdGlvbmFsIiwiZnJvbVJhbWRhIiwiZmFudGFzeSIsInRvUmFtZGEiLCJmcm9tQXJyYXlCeSIsInZhbHVlcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztRQXdJZ0JBLE8sR0FBQUEsTzs7QUF4SWhCOztJQUFZQyxDOzs7O0FBRVo7O0FBRUEsU0FBU0MsUUFBVCxDQUFrQkMsS0FBbEIsRUFBeUI7QUFBQyxPQUFLQSxLQUFMLEdBQWFBLEtBQWI7QUFBbUI7QUFDN0MsSUFBTUMsUUFBUSxTQUFSQSxLQUFRO0FBQUEsU0FBSyxJQUFJRixRQUFKLENBQWFHLENBQWIsQ0FBTDtBQUFBLENBQWQ7QUFDQUgsU0FBU0ksU0FBVCxDQUFtQkMsR0FBbkIsR0FBeUIsVUFBVUMsR0FBVixFQUFlO0FBQUMsU0FBTyxJQUFJTixRQUFKLENBQWFNLElBQUksS0FBS0wsS0FBVCxDQUFiLENBQVA7QUFBcUMsQ0FBOUU7QUFDQUQsU0FBU0ksU0FBVCxDQUFtQkcsRUFBbkIsR0FBd0JMLEtBQXhCO0FBQ0FGLFNBQVNJLFNBQVQsQ0FBbUJJLEVBQW5CLEdBQXdCLFVBQVVMLENBQVYsRUFBYTtBQUFDLFNBQU8sSUFBSUgsUUFB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LEVBQXFDO0FBQ25DLFlBQU03RCxJQUFJMEMsR0FBR21CLENBQUgsQ0FBVjtBQUNBZixVQUFFOUMsRUFBRWlDLEVBQUYsQ0FBRixJQUFXakMsQ0FBWDtBQUNEO0FBQ0QsYUFBTzhDLENBQVA7QUFDRDtBQUNGLEdBVEQsRUFVQTtBQUFBLFdBQUtsQixTQUFTa0IsQ0FBVCxJQUFjbEQsRUFBRXdKLE1BQUYsQ0FBU3RHLENBQVQsQ0FBZCxHQUE0QmYsU0FBakM7QUFBQSxHQVZBLENBRnlCO0FBQUEsQ0FBcEI7O2tCQWNRcEMsTyIsImZpbGUiOiJwYXJ0aWFsLmxlbnNlcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFIgZnJvbSBcInJhbWRhXCJcblxuLy9cblxuZnVuY3Rpb24gSWRlbnRpdHkodmFsdWUpIHt0aGlzLnZhbHVlID0gdmFsdWV9XG5jb25zdCBJZGVudCA9IHggPT4gbmV3IElkZW50aXR5KHgpXG5JZGVudGl0eS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKHgyeSkge3JldHVybiBuZXcgSWRlbnRpdHkoeDJ5KHRoaXMudmFsdWUpKX1cbklkZW50aXR5LnByb3RvdHlwZS5vZiA9IElkZW50XG5JZGVudGl0eS5wcm90b3R5cGUuYXAgPSBmdW5jdGlvbiAoeCkge3JldHVybiBuZXcgSWRlbnRpdHkodGhpcy52YWx1ZSh4LnZhbHVlKSl9XG5cbi8vXG5cbmZ1bmN0aW9uIENvbnN0YW50KHZhbHVlKSB7dGhpcy52YWx1ZSA9IHZhbHVlfVxuY29uc3QgQ29uc3QgPSB4ID0+IG5ldyBDb25zdGFudCh4KVxuY29uc3QgU2luZ2xlID0geCA9PiBDb25zdChbeF0pXG5Db25zdGFudC5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKCkge3JldHVybiB0aGlzfVxuQ29uc3RhbnQucHJvdG90eXBlLm9mID0gQ29uc3RcbkNvbnN0YW50LnByb3RvdHlwZS5hcCA9IGZ1bmN0aW9uICh4KSB7cmV0dXJuIG5ldyBDb25zdChSLmNvbmNhdCh0aGlzLnZhbHVlLCB4LnZhbHVlKSl9XG5cbi8vXG5cbmNvbnN0IHdhcm4gPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyAoKSA9PiB7fSA6ICgoKSA9PiB7XG4gIGNvbnN0IHdhcm5lZCA9IHt9XG5cbiAgcmV0dXJuIG1lc3NhZ2UgPT4ge1xuICAgIGlmICghKG1lc3NhZ2UgaW4gd2FybmVkKSkge1xuICAgICAgd2FybmVkW21lc3NhZ2VdID0gbWVzc2FnZVxuICAgICAgY29uc29sZS53YXJuKFwicGFydGlhbC5sZW5zZXM6XCIsIG1lc3NhZ2UpXG4gICAgfVxuICB9XG59KSgpXG5cbi8vXG5cbmNvbnN0IGN1cnJ5MiA9IGZuID0+IGZ1bmN0aW9uIChhLCBiKSB7XG4gIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgIGNhc2UgMTogIHJldHVybiBiID0+IGZuKGEsIGIpXG4gICAgZGVmYXVsdDogcmV0dXJuIGZuKGEsIGIpXG4gIH1cbn1cblxuY29uc3QgY3VycnkzID0gZm4gPT4gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAxOiAgcmV0dXJuIGN1cnJ5MigoYiwgYykgPT4gZm4oYSwgYiwgYykpXG4gICAgY2FzZSAyOiAgcmV0dXJuIGMgPT4gZm4oYSwgYiwgYylcbiAgICBkZWZhdWx0OiByZXR1cm4gZm4oYSwgYiwgYylcbiAgfVxufVxuXG4vL1xuXG5jb25zdCBpc0FycmF5ICA9IHggPT4geCAmJiB4LmNvbnN0cnVjdG9yID09PSBBcnJheVxuY29uc3QgaXNPYmplY3QgPSB4ID0+IHggJiYgeC5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0XG5cbmNvbnN0IHVuQXJyYXkgID0geCA9PiAgaXNBcnJheSh4KSA/IHggOiB1bmRlZmluZWRcblxuY29uc3QgbWtBcnJheSA9IHggPT4gaXNBcnJheSh4KSA/IHggOiBbXVxuXG4vL1xuXG5jb25zdCBpZCA9IHggPT4geFxuY29uc3Qgc25kID0gKF8sIGMpID0+IGNcblxuLy9cblxuY29uc3QgY2hlY2sgPSAoZXhwZWN0ZWQsIHByZWRpY2F0ZSkgPT4geCA9PiB7XG4gIGlmIChwcmVkaWNhdGUoeCkpXG4gICAgcmV0dXJuIHhcbiAgZWxzZVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtleHBlY3RlZH0sIGJ1dCBnb3QgJHt4fS5gKVxufVxuXG5jb25zdCBhc3NlcnQgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyAoKSA9PiBpZCA6IGNoZWNrXG5cbi8vXG5cbmNvbnN0IGRyb3BwZWQgPSB4cyA9PiB7XG4gIGZvciAoY29uc3QgXyBpbiB4cylcbiAgICByZXR1cm4geHNcbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG4vL1xuXG5jb25zdCBlbXB0eSA9IHt9XG5cbmNvbnN0IGRlbGV0ZUtleSA9IChrLCBvKSA9PiB7XG4gIGNvbnN0IHIgPSBPYmplY3QuYXNzaWduKHt9LCBvKVxuICBkZWxldGUgcltrXVxuICByZXR1cm4gZHJvcHBlZChyKVxufVxuXG5jb25zdCBzZXRLZXkgPSAoaywgdiwgbykgPT4ge1xuICBjb25zdCByID0gT2JqZWN0LmFzc2lnbih7fSwgbylcbiAgcltrXSA9IHZcbiAgcmV0dXJuIHJcbn1cblxuLy9cblxuY29uc3QgdG9QYXJ0aWFsID0gdHJhbnNmb3JtID0+IHggPT4gdW5kZWZpbmVkID09PSB4ID8geCA6IHRyYW5zZm9ybSh4KVxuXG4vL1xuXG5jb25zdCBmaWx0ZXJlZCA9IHRvUGFydGlhbCh4cyA9PiBkcm9wcGVkKHhzLmZpbHRlcih4ID0+IHggIT09IHVuZGVmaW5lZCkpKVxuXG4vL1xuXG5jb25zdCBzZWVtc0xlbnMgPSB4ID0+IHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCIgJiYgeC5sZW5ndGggPT09IDFcblxuY29uc3QgbGlmdGVkID0gYXNzZXJ0KFwiYSBsZW5zXCIsIHNlZW1zTGVucylcblxuY29uc3QgY29tcG9zZWQgPSBsZW5zZXMgPT4ge1xuICBzd2l0Y2ggKGxlbnNlcy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6ICByZXR1cm4gaWRlbnRpdHlcbiAgICBjYXNlIDE6ICByZXR1cm4gbGlmdChsZW5zZXNbMF0pXG4gICAgZGVmYXVsdDogcmV0dXJuIGNvbnN0cnVjdG9yID0+IHggPT4ge1xuICAgICAgbGV0IGkgPSBsZW5zZXMubGVuZ3RoXG4gICAgICBsZXQgciA9IGxpZnQobGVuc2VzWy0taV0pKGNvbnN0cnVjdG9yKSh4KVxuICAgICAgZG8ge1xuICAgICAgICByID0gbGlmdChsZW5zZXNbLS1pXSkoY29uc3RydWN0b3IpKHIpXG4gICAgICB9IHdoaWxlICgwIDwgaSlcbiAgICAgIHJldHVybiByXG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGxpZnQgPSBsID0+IHtcbiAgc3dpdGNoICh0eXBlb2YgbCkge1xuICAgIGNhc2UgXCJzdHJpbmdcIjogICByZXR1cm4gbGlmdFByb3AobClcbiAgICBjYXNlIFwibnVtYmVyXCI6ICAgcmV0dXJuIGxpZnRJbmRleChsKVxuICAgIGNhc2UgXCJmdW5jdGlvblwiOiByZXR1cm4gbGlmdGVkKGwpXG4gICAgZGVmYXVsdDogICAgICAgICByZXR1cm4gY29tcG9zZWQobClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcG9zZSguLi5sZW5zZXMpIHtcbiAgc3dpdGNoIChsZW5zZXMubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiAgcmV0dXJuIGlkZW50aXR5XG4gICAgY2FzZSAxOiAgcmV0dXJuIGxlbnNlc1swXVxuICAgIGRlZmF1bHQ6IHJldHVybiBsZW5zZXNcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgcmVtb3ZlQWxsID0gY3VycnkyKChsZW5zLCBkYXRhKSA9PiB7XG4gIHdhcm4oXCJgcmVtb3ZlQWxsYCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gbmV4dCBtYWpvciB2ZXJzaW9uIC0tLSB1c2UgYSBkaWZmZXJlbnQgYXBwcm9hY2guXCIpXG4gIHdoaWxlIChnZXQobGVucywgZGF0YSkgIT09IHVuZGVmaW5lZClcbiAgICBkYXRhID0gcmVtb3ZlKGxlbnMsIGRhdGEpXG4gIHJldHVybiBkYXRhXG59KVxuXG5jb25zdCBzZXRJID0gKGwsIHgsIHMpID0+IHtcbiAgc3dpdGNoICh0eXBlb2YgbCkge1xuICAgIGNhc2UgXCJzdHJpbmdcIjogICByZXR1cm4gc2V0UHJvcChsLCB4LCBzKVxuICAgIGNhc2UgXCJudW1iZXJcIjogICByZXR1cm4gc2V0SW5kZXgobCwgeCwgcylcbiAgICBjYXNlIFwiZnVuY3Rpb25cIjogcmV0dXJuIGxpZnRlZChsKShJZGVudCkoKCkgPT4gSWRlbnQoeCkpKHMpLnZhbHVlXG4gICAgZGVmYXVsdDogICAgICAgICByZXR1cm4gY29tcG9zZWQobCkoSWRlbnQpKCgpID0+IElkZW50KHgpKShzKS52YWx1ZVxuICB9XG59XG5cbmNvbnN0IGdldEkgPSAobCwgcykgPT4ge1xuICBzd2l0Y2ggKHR5cGVvZiBsKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOiAgIHJldHVybiBnZXRQcm9wKGwsIHMpXG4gICAgY2FzZSBcIm51bWJlclwiOiAgIHJldHVybiBnZXRJbmRleChsLCBzKVxuICAgIGNhc2UgXCJmdW5jdGlvblwiOiByZXR1cm4gbGlmdGVkKGwpKENvbnN0KShDb25zdCkocykudmFsdWVcbiAgICBkZWZhdWx0OiB7XG4gICAgICBsZXQgciA9IHNcbiAgICAgIGZvciAobGV0IGk9MCwgbj1sLmxlbmd0aDsgaTxuOyArK2kpXG4gICAgICAgIHIgPSBnZXRJKGxbaV0sIHIpXG4gICAgICByZXR1cm4gclxuICAgIH1cbiAgfVxufVxuXG5jb25zdCBtb2RpZnlJID0gKGwsIHgyeCwgcykgPT4ge1xuICBzd2l0Y2ggKHR5cGVvZiBsKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOiAgIHJldHVybiBzZXRQcm9wKGwsIHgyeChnZXRQcm9wKGwsIHMpKSwgcylcbiAgICBjYXNlIFwibnVtYmVyXCI6ICAgcmV0dXJuIHNldEluZGV4KGwsIHgyeChnZXRJbmRleChsLCBzKSksIHMpXG4gICAgY2FzZSBcImZ1bmN0aW9uXCI6IHJldHVybiBsaWZ0ZWQobCkoSWRlbnQpKHkgPT4gSWRlbnQoeDJ4KHkpKSkocykudmFsdWVcbiAgICBkZWZhdWx0OiAgICAgICAgIHJldHVybiBjb21wb3NlZChsKShJZGVudCkoeSA9PiBJZGVudCh4MngoeSkpKShzKS52YWx1ZVxuICB9XG59XG5cbmNvbnN0IGxlbnNJID0gKGdldHRlciwgc2V0dGVyKSA9PiBfYyA9PiBpbm5lciA9PiB0YXJnZXQgPT5cbiAgaW5uZXIoZ2V0dGVyKHRhcmdldCkpLm1hcChmb2N1cyA9PiBzZXR0ZXIoZm9jdXMsIHRhcmdldCkpXG5jb25zdCBjb2xsZWN0SSA9IChsLCBzKSA9PiBsKENvbnN0KShTaW5nbGUpKHMpLnZhbHVlXG5cbmV4cG9ydCBjb25zdCByZW1vdmUgPSBjdXJyeTIoKGwsIHMpID0+IHNldEkobCwgdW5kZWZpbmVkLCBzKSlcbmV4cG9ydCBjb25zdCBsZW5zID0gY3VycnkyKGxlbnNJKVxuZXhwb3J0IGNvbnN0IG1vZGlmeSA9IGN1cnJ5Myhtb2RpZnlJKVxuZXhwb3J0IGNvbnN0IHNldCA9IGN1cnJ5MyhzZXRJKVxuZXhwb3J0IGNvbnN0IGdldCA9IGN1cnJ5MihnZXRJKVxuZXhwb3J0IGNvbnN0IGNvbGxlY3QgPSBjdXJyeTIoKGwsIHMpID0+XG4gIHdhcm4oXCJgY29sbGVjdGAgaXMgZXhwZXJpbWVudGFsIGFuZCBtaWdodCBiZSByZW1vdmVkLCByZW5hbWVkIG9yIGNoYW5nZWQgc2VtYW50aWNhbGx5IGJlZm9yZSBuZXh0IG1ham9yIHJlbGVhc2VcIikgfHxcbiAgbWtBcnJheShmaWx0ZXJlZChjb2xsZWN0SShsaWZ0KGwpLCBzKSkpKVxuXG5leHBvcnQgY29uc3QgY2hhaW4gPSBjdXJyeTIoKHgyeUwsIHhMKSA9PlxuICBjb21wb3NlKHhMLCBjaG9vc2UoeE8gPT4geE8gPT09IHVuZGVmaW5lZCA/IG5vdGhpbmcgOiB4MnlMKHhPKSkpKVxuXG5leHBvcnQgY29uc3QganVzdCA9IHggPT4gbGVuc0koUi5hbHdheXMoeCksIHNuZClcblxuZXhwb3J0IGNvbnN0IGNob29zZSA9IHgyeUwgPT4gY29uc3RydWN0b3IgPT4gaW5uZXIgPT4gdGFyZ2V0ID0+XG4gIGxpZnQoeDJ5TCh0YXJnZXQpKShjb25zdHJ1Y3RvcikoaW5uZXIpKHRhcmdldClcblxuZXhwb3J0IGNvbnN0IG5vdGhpbmcgPSBsZW5zSShzbmQsIHNuZClcblxuZXhwb3J0IGNvbnN0IG9yRWxzZSA9XG4gIGN1cnJ5MigoZCwgbCkgPT4gY2hvb3NlKHggPT4gZ2V0SShsLCB4KSAhPT0gdW5kZWZpbmVkID8gbCA6IGQpKVxuXG5leHBvcnQgY29uc3QgY2hvaWNlID0gKC4uLmxzKSA9PiBjaG9vc2UoeCA9PiB7XG4gIGNvbnN0IGkgPSBscy5maW5kSW5kZXgobCA9PiBnZXRJKGwsIHgpICE9PSB1bmRlZmluZWQpXG4gIHJldHVybiAwIDw9IGkgPyBsc1tpXSA6IG5vdGhpbmdcbn0pXG5cbmNvbnN0IHJlcGxhY2VyID0gKGlubiwgb3V0KSA9PiB4ID0+IFIuZXF1YWxzKHgsIGlubikgPyBvdXQgOiB4XG5jb25zdCBub3JtYWxpemVyID0gZm4gPT4gX2MgPT4gaW5uZXIgPT4geCA9PiBpbm5lcihmbih4KSkubWFwKGZuKVxuXG5leHBvcnQgY29uc3QgcmVwbGFjZSA9IGN1cnJ5MigoaW5uLCBvdXQpID0+IF9jID0+IGlubmVyID0+IHggPT5cbiAgaW5uZXIocmVwbGFjZXIoaW5uLCBvdXQpKHgpKS5tYXAocmVwbGFjZXIob3V0LCBpbm4pKSlcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRzID0gb3V0ID0+IF9jID0+IGlubmVyID0+IHggPT5cbiAgaW5uZXIoeCA9PT0gdW5kZWZpbmVkID8gb3V0IDogeCkubWFwKHJlcGxhY2VyKG91dCwgdW5kZWZpbmVkKSlcbmV4cG9ydCBjb25zdCByZXF1aXJlZCA9IGlubiA9PiByZXBsYWNlKGlubiwgdW5kZWZpbmVkKVxuZXhwb3J0IGNvbnN0IGRlZmluZSA9IHYgPT4gbm9ybWFsaXplcih4ID0+IHggPT09IHVuZGVmaW5lZCA/IHYgOiB4KVxuXG5leHBvcnQgY29uc3QgdmFsdWVPciA9IHYgPT4gX2MgPT4gaW5uZXIgPT4geCA9PlxuICBpbm5lcih4ID09PSB1bmRlZmluZWQgfHwgeCA9PT0gbnVsbCA/IHYgOiB4KVxuXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplID0gdHJhbnNmb3JtID0+IG5vcm1hbGl6ZXIodG9QYXJ0aWFsKHRyYW5zZm9ybSkpXG5cbmNvbnN0IGlzUHJvcCA9IHggPT4gdHlwZW9mIHggPT09IFwic3RyaW5nXCJcblxuZXhwb3J0IGNvbnN0IHByb3AgPSBhc3NlcnQoXCJhIHN0cmluZ1wiLCBpc1Byb3ApXG5cbmNvbnN0IGdldFByb3AgPSAoaywgbykgPT4gaXNPYmplY3QobykgPyBvW2tdIDogdW5kZWZpbmVkXG5jb25zdCBzZXRQcm9wID0gKGssIHYsIG8pID0+IHtcbiAgY29uc3Qgb091dCA9IGlzT2JqZWN0KG8pID8gbyA6IGVtcHR5XG4gIHJldHVybiB2ID09PSB1bmRlZmluZWQgPyBkZWxldGVLZXkoaywgb091dCkgOiBzZXRLZXkoaywgdiwgb091dClcbn1cbmNvbnN0IGxpZnRQcm9wID0gayA9PiBfYyA9PiBpbm5lciA9PiBvID0+XG4gIGlubmVyKGdldFByb3AoaywgbykpLm1hcCh2ID0+IHNldFByb3AoaywgdiwgbykpXG5cbmV4cG9ydCBjb25zdCBmaW5kID0gcHJlZGljYXRlID0+IGNob29zZSh4cyA9PiB7XG4gIGlmIChpc0FycmF5KHhzKSkge1xuICAgIGNvbnN0IGkgPSB4cy5maW5kSW5kZXgocHJlZGljYXRlKVxuICAgIHJldHVybiBpIDwgMCA/IGFwcGVuZCA6IGlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYXBwZW5kXG4gIH1cbn0pXG5cbmV4cG9ydCBjb25zdCBmaW5kV2l0aCA9ICguLi5scykgPT4ge1xuICBjb25zdCBsbHMgPSBsaWZ0KGNvbXBvc2UoLi4ubHMpKVxuICByZXR1cm4gY29tcG9zZShmaW5kKHggPT4gZ2V0SShsbHMsIHgpICE9PSB1bmRlZmluZWQpLCBsbHMpXG59XG5cbmNvbnN0IGlzSW5kZXggPSB4ID0+IE51bWJlci5pc0ludGVnZXIoeCkgJiYgMCA8PSB4XG5cbmV4cG9ydCBjb25zdCBpbmRleCA9IGFzc2VydChcImEgbm9uLW5lZ2F0aXZlIGludGVnZXJcIiwgaXNJbmRleClcblxuY29uc3QgZ2V0SW5kZXggPSAoaSwgeHMpID0+IGlzQXJyYXkoeHMpID8geHNbaV0gOiB1bmRlZmluZWRcbmNvbnN0IHNldEluZGV4ID0gKGksIHgsIHhzKSA9PiB7XG4gIGlmICh4ID09PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoIWlzQXJyYXkoeHMpKVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGlmICh4cy5sZW5ndGggPD0gaSlcbiAgICAgIHJldHVybiBkcm9wcGVkKHhzKVxuICAgIGNvbnN0IHlzID0geHMuc2xpY2UoMClcbiAgICB5cy5zcGxpY2UoaSwgMSlcbiAgICByZXR1cm4gZHJvcHBlZCh5cylcbiAgfSBlbHNlIHtcbiAgICBpZiAoIWlzQXJyYXkoeHMpKVxuICAgICAgcmV0dXJuIEFycmF5KGkpLmNvbmNhdChbeF0pXG4gICAgaWYgKHhzLmxlbmd0aCA8PSBpKVxuICAgICAgcmV0dXJuIHhzLmNvbmNhdChBcnJheShpIC0geHMubGVuZ3RoKSwgW3hdKVxuICAgIGNvbnN0IHlzID0geHMuc2xpY2UoMClcbiAgICB5c1tpXSA9IHhcbiAgICByZXR1cm4geXNcbiAgfVxufVxuY29uc3QgbGlmdEluZGV4ID0gaSA9PiBfYyA9PiBpbm5lciA9PiB4cyA9PlxuICBpbm5lcihnZXRJbmRleChpLCB4cykpLm1hcCh4ID0+IHNldEluZGV4KGksIHgsIHhzKSlcblxuZXhwb3J0IGNvbnN0IGFwcGVuZCA9IGxlbnNJKHNuZCwgKHgsIHhzKSA9PlxuICB4ID09PSB1bmRlZmluZWQgPyB1bkFycmF5KHhzKSA6IGlzQXJyYXkoeHMpID8geHMuY29uY2F0KFt4XSkgOiBbeF0pXG5cbmV4cG9ydCBjb25zdCBmaWx0ZXIgPSBwID0+IGxlbnNJKHhzID0+IHVuQXJyYXkoeHMpICYmIHhzLmZpbHRlcihwKSwgKHlzLCB4cykgPT5cbiAgZHJvcHBlZChta0FycmF5KHlzKS5jb25jYXQobWtBcnJheSh4cykuZmlsdGVyKHggPT4gIXAoeCkpKSkpXG5cbmV4cG9ydCBjb25zdCBhdWdtZW50ID0gdGVtcGxhdGUgPT4gbGVuc0koXG4gIHggPT4ge1xuICAgIGlmIChpc09iamVjdCh4KSkge1xuICAgICAgY29uc3QgeiA9IHsuLi54fVxuICAgICAgZm9yIChjb25zdCBrIGluIHRlbXBsYXRlKVxuICAgICAgICB6W2tdID0gdGVtcGxhdGVba10oeilcbiAgICAgIHJldHVybiB6XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG4gIH0sXG4gICh5LCBjSW4pID0+IHtcbiAgICBpZiAoaXNPYmplY3QoeSkpIHtcbiAgICAgIGNvbnN0IGMgPSBpc09iamVjdChjSW4pID8gY0luIDogZW1wdHlcbiAgICAgIGxldCB6XG4gICAgICBjb25zdCBzZXQgPSAoaywgdikgPT4ge1xuICAgICAgICBpZiAodW5kZWZpbmVkID09PSB6KVxuICAgICAgICAgIHogPSB7fVxuICAgICAgICB6W2tdID0gdlxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBrIGluIHkpIHtcbiAgICAgICAgaWYgKCEoayBpbiB0ZW1wbGF0ZSkpXG4gICAgICAgICAgc2V0KGssIHlba10pXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBpZiAoayBpbiBjKVxuICAgICAgICAgICAgc2V0KGssIGNba10pXG4gICAgICB9XG4gICAgICByZXR1cm4gelxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuICB9KVxuXG5leHBvcnQgY29uc3QgcGljayA9IHRlbXBsYXRlID0+IGxlbnNJKFxuICBjID0+IHtcbiAgICBsZXQgclxuICAgIGZvciAoY29uc3QgayBpbiB0ZW1wbGF0ZSkge1xuICAgICAgY29uc3QgdiA9IGdldEkodGVtcGxhdGVba10sIGMpXG4gICAgICBpZiAodiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChyID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgciA9IHt9XG4gICAgICAgIHJba10gPSB2XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByXG4gIH0sXG4gIChvID0gZW1wdHksIGNJbikgPT4ge1xuICAgIGxldCBjID0gY0luXG4gICAgZm9yIChjb25zdCBrIGluIHRlbXBsYXRlKVxuICAgICAgYyA9IHNldEkodGVtcGxhdGVba10sIG9ba10sIGMpXG4gICAgcmV0dXJuIGNcbiAgfSlcblxuZXhwb3J0IGNvbnN0IGlkZW50aXR5ID0gX2MgPT4gaW5uZXIgPT4gaW5uZXJcblxuZXhwb3J0IGNvbnN0IHByb3BzID0gKC4uLmtzKSA9PiBwaWNrKFIuemlwT2JqKGtzLCBrcykpXG5cbmNvbnN0IHNob3cgPSAoLi4ubGFiZWxzKSA9PiB4ID0+IGNvbnNvbGUubG9nKC4uLmxhYmVscywgeCkgfHwgeFxuXG5leHBvcnQgY29uc3QgbG9nID0gKC4uLmxhYmVscykgPT5cbiAgbGVuc0koc2hvdyguLi5sYWJlbHMsIFwiZ2V0XCIpLCBzaG93KC4uLmxhYmVscywgXCJzZXRcIikpXG5cbmV4cG9ydCBjb25zdCBzZXF1ZW5jZSA9IGNvbnN0cnVjdG9yID0+IGlubmVyID0+IHRhcmdldCA9PlxuICB3YXJuKFwiYHNlcXVlbmNlYCBpcyBleHBlcmltZW50YWwgYW5kIG1pZ2h0IGJlIHJlbW92ZWQsIHJlbmFtZWQgb3IgY2hhbmdlZCBzZW1hbnRpY2FsbHkgYmVmb3JlIG5leHQgbWFqb3IgcmVsZWFzZVwiKSB8fFxuICBSLnRyYXZlcnNlKGNvbnN0cnVjdG9yLCBpbm5lciwgbWtBcnJheSh0YXJnZXQpKVxuICAubWFwKGZpbHRlcmVkKVxuXG5leHBvcnQgY29uc3Qgb3B0aW9uYWwgPVxuICBjb21wb3NlKGxlbnNJKHRvUGFydGlhbCh4ID0+IFt4XSksXG4gICAgICAgICAgICAgICAgdG9QYXJ0aWFsKChbeF0pID0+IHgpKSxcbiAgICAgICAgICBzZXF1ZW5jZSlcblxuZXhwb3J0IGNvbnN0IGZyb21SYW1kYSA9IGwgPT4gX2MgPT4gbFxuY29uc3QgZmFudGFzeSA9ICgpID0+IHt0aHJvdyBuZXcgRXJyb3IoXCJTb3JyeSwgYHRvUmFtZGFgIGlzIG9ubHkgZmFudGFzeSFcIil9XG5leHBvcnQgY29uc3QgdG9SYW1kYSA9IGwgPT4gbGlmdChsKShmYW50YXN5KVxuXG5leHBvcnQgY29uc3QgZnJvbUFycmF5QnkgPSBpZCA9PlxuICB3YXJuKFwiYGZyb21BcnJheUJ5YCBpcyBleHBlcmltZW50YWwgYW5kIG1pZ2h0IGJlIHJlbW92ZWQsIHJlbmFtZWQgb3IgY2hhbmdlZCBzZW1hbnRpY2FsbHkgYmVmb3JlIG5leHQgbWFqb3IgcmVsZWFzZVwiKSB8fFxuICBsZW5zSSh4cyA9PiB7XG4gICAgaWYgKGlzQXJyYXkoeHMpKSB7XG4gICAgICBjb25zdCBvID0ge31cbiAgICAgIGZvciAobGV0IGk9MCwgbj14cy5sZW5ndGg7IGk8bjsgKytpKSB7XG4gICAgICAgIGNvbnN0IHggPSB4c1tpXVxuICAgICAgICBvW3hbaWRdXSA9IHhcbiAgICAgIH1cbiAgICAgIHJldHVybiBvXG4gICAgfVxuICB9LFxuICBvID0+IGlzT2JqZWN0KG8pID8gUi52YWx1ZXMobykgOiB1bmRlZmluZWQpXG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2VcbiJdfQ==
{
"name": "partial.lenses",
"version": "3.9.3",
"version": "3.9.4",
"description": "Partial lenses",

@@ -5,0 +5,0 @@ "main": "lib/partial.lenses.js",

@@ -159,4 +159,4 @@ [ [Tutorial](#tutorial) | [Reference](#reference) | [Background](#background) ]

library supports. In particular,
* [`L.compose(...)`](#compose) can be abbreviated to use the default import,
e.g. [`P(...)`](#compose),
* [`L.compose(...)`](#compose) can be abbreviated as an array
[`[...]`](#compose),
* [`L.prop(string)`](#prop) can be abbreviated as [`string`](#prop), and

@@ -195,12 +195,12 @@ * [`L.set(l, undefined, s)`](#set) can be abbreviated as

data: {
contents: P("contents",
L.required([]),
L.normalize(R.sortBy(R.prop("language"))))
contents: ["contents",
L.required([]),
L.normalize(R.sortBy(R.prop("language")))]
},
contents: {
contentIn: language => P(L.find(R.whereEq({language})),
L.defaults({language}))
contentIn: language => [L.find(R.whereEq({language})),
L.defaults({language})]
},
content: {
text: P("text", L.valueOr(""))
text: ["text", L.valueOr("")]
}

@@ -213,5 +213,5 @@ }

```js
const textIn = language => P(M.data.contents,
M.contents.contentIn(language),
M.content.text)
const textIn = language => [M.data.contents,
M.contents.contentIn(language),
M.content.text]
```

@@ -239,6 +239,6 @@

const flag = id =>
P(L.normalize(R.sortBy(R.identity)),
L.find(R.equals(id)),
L.replace(undefined, false),
L.replace(id, true))
[L.normalize(R.sortBy(R.identity)),
L.find(R.equals(id)),
L.replace(undefined, false),
L.replace(id, true)]
```

@@ -280,8 +280,8 @@

const search = key =>
P(L.defaults({key}),
L.choose(n => key < n.key ? P("smaller", search(key)) :
n.key < key ? P("greater", search(key)) :
L.identity))
[L.defaults({key}),
L.choose(n => key < n.key ? ["smaller", search(key)] :
n.key < key ? ["greater", search(key)] :
L.identity)]
const valueOf = key => P(search(key), "value")
const valueOf = key => [search(key), "value"]
```

@@ -322,11 +322,11 @@

const search = key =>
P(L.normalize(n =>
undefined !== n.value ? n :
n.smaller && !n.greater ? n.smaller :
!n.smaller && n.greater ? n.greater :
L.set(search(n.smaller.key), n.smaller, n.greater)),
L.defaults({key}),
L.choose(n => key < n.key ? P("smaller", search(key)) :
n.key < key ? P("greater", search(key)) :
L.identity))
[L.normalize(n =>
undefined !== n.value ? n :
n.smaller && !n.greater ? n.smaller :
!n.smaller && n.greater ? n.greater :
L.set(search(n.smaller.key), n.smaller, n.greater)),
L.defaults({key}),
L.choose(n => key < n.key ? ["smaller", search(key)] :
n.key < key ? ["greater", search(key)] :
L.identity)]
```

@@ -359,8 +359,14 @@

```js
import P, * as L from "partial.lenses"
import * as L from "partial.lenses"
```
Use of the default import, [`P`](#compose), is optional and is an alias for
[`L.compose`](#compose).
The default import
``` js
import P from "partial.lenses"
```
is an alias for [`L.compose`](#compose). Typical one just uses the shorthand
array notation [`[...]`](#compose) to denote composition.
### Operations on lenses

@@ -403,3 +409,3 @@

```js
L.remove(P("a", "b"), {a: {b: 1}, x: {y: 2}})
L.remove(["a", "b"], {a: {b: 1}, x: {y: 2}})
// {x: {y: 2}}

@@ -430,3 +436,3 @@ ```

```js
L.remove(P(L.sequence, "a"), [{x: 1}, {a: 2}, {a: 3, y: 4}, {z: 5}])
L.remove([L.sequence, "a"], [{x: 1}, {a: 2}, {a: 3, y: 4}, {z: 5}])
// [ { x: 1 }, { y: 4 }, { z: 5 } ]

@@ -442,3 +448,3 @@ ```

```js
L.set(P("a", 0, "x"), 11, {id: "z"})
L.set(["a", 0, "x"], 11, {id: "z"})
// {a: [{x: 11}], id: "z"}

@@ -542,6 +548,17 @@ ```

Furthermore, an array of lenses `[...lenses]` is treated as a composition of
lenses `L.compose(...lenses)`. Using the array notation, the above equations
can be written as:
```js
[] = L.identity
[l] = l
L.get([l, ...ls]) = R.pipe(L.get(l), ...ls.map(L.get))
L.modify([l, ...ls]) = R.pipe(L.modify(l), ...ls.map(L.modify))
```
For example:
```js
L.get(P("a", 1), {a: ["b", "c"]})
L.get(["a", 1], {a: ["b", "c"]})
// "c"

@@ -569,7 +586,7 @@ ```

```js
L.get(P("items", L.defaults([])), {})
L.get(["items", L.defaults([])], {})
// []
L.get(P("items", L.defaults([])), {items: [1, 2, 3]})
L.get(["items", L.defaults([])], {items: [1, 2, 3]})
// [ 1, 2, 3 ]
L.set(P("items", L.defaults([])), [], {items: [1, 2, 3]})
L.set(["items", L.defaults([])], [], {items: [1, 2, 3]})
// undefined

@@ -580,3 +597,3 @@ ```

`L.define(value)` is the same as `P(L.required(value), L.defaults(value))`.
`L.define(value)` is the same as `[L.required(value), L.defaults(value)]`.
`L.define` is used to specify a value to act as both the default value and the

@@ -622,3 +639,3 @@ required value for an element.

`L.findWith(...ls)` chooses an index from an array through which the given lens,
[`P(...ls)`](#compose), focuses on a defined item and then returns a lens that
[`[...ls]`](#compose), focuses on a defined item and then returns a lens that
focuses on that item.

@@ -649,3 +666,3 @@

// { '1': { id: 1, value: 2 }, '3': { id: 3, value: 4 } }
L.set(P(L.fromArrayBy("id"), "3", "value"), 5, [{id: 1, value: 2}, {id: 3, value: 4}])
L.set([L.fromArrayBy("id"), "3", "value"], 5, [{id: 1, value: 2}, {id: 3, value: 4}])
// [ { id: 1, value: 2 }, { value: 5, id: 3 } ]

@@ -687,3 +704,3 @@ ```

// undefined
L.remove(P("elems", 0), {elems: ["b"], some: "thing"})
L.remove(["elems", 0], {elems: ["b"], some: "thing"})
// { some: 'thing' }

@@ -695,7 +712,7 @@ ```

```js
L.remove(P(L.required([]), 0), ["a", "b"])
L.remove([L.required([]), 0], ["a", "b"])
// [ 'b' ]
L.remove(P(L.required([]), 0), ["b"])
L.remove([L.required([]), 0], ["b"])
// []
L.remove(P("elems", L.required([]), 0), {elems: ["b"], some: "thing"})
L.remove(["elems", L.required([]), 0], {elems: ["b"], some: "thing"})
// { elems: [], some: 'thing' }

@@ -835,3 +852,3 @@ ```

```js
L.modify(P(sanitize, "pos", "x"), R.add(5), data)
L.modify([sanitize, "pos", "x"], R.add(5), data)
// { px: 6, py: 2, vx: 1, vy: 0 }

@@ -903,7 +920,7 @@ ```

```js
L.remove(P("items", 0), {items: [1]})
L.remove(["items", 0], {items: [1]})
// undefined
L.remove(P(L.required({}), "items", 0), {items: [1]})
L.remove([L.required({}), "items", 0], {items: [1]})
// {}
L.remove(P("items", L.required([]), 0), {items: [1]})
L.remove(["items", L.required([]), 0], {items: [1]})
// { items: [] }

@@ -965,3 +982,3 @@ ```

```js
L.collect(P("xs", L.sequence, "x"), {xs: [{x: 1}, {x: 2}]})
L.collect(["xs", L.sequence, "x"], {xs: [{x: 1}, {x: 2}]})
// [ 1, 2 ]

@@ -982,3 +999,3 @@ ```

```js
L.set(P(L.sequence, "x"), 3, [{x: 1}, {y: 2}])
L.set([L.sequence, "x"], 3, [{x: 1}, {y: 2}])
// [ { x: 3 }, { x: 3, y: 2 } ]

@@ -990,3 +1007,3 @@ ```

```js
L.set(P(L.sequence, "x", L.optional), 3, [{x: 1}, {y: 2}])
L.set([L.sequence, "x", L.optional], 3, [{x: 1}, {y: 2}])
// [ { x: 3 }, { y: 2 } ]

@@ -1005,3 +1022,3 @@ ```

```js
L.modify(P("xs", L.sequence, "x"), R.add(1), {xs: [{x: 1}, {x: 2}]})
L.modify(["xs", L.sequence, "x"], R.add(1), {xs: [{x: 1}, {x: 2}]})
// { xs: [ { x: 2 }, { x: 3 } ] }

@@ -1023,10 +1040,10 @@ ```

```js
L.get(P("x", L.log()), {x: 10})
L.get(["x", L.log()], {x: 10})
// get 10
// 10
L.set(P("x", L.log("x")), "11", {x: 10})
L.set(["x", L.log("x")], "11", {x: 10})
// x get 10
// x set 11
// { x: '11' }
L.set(P("x", L.log("%s x: %j")), "11", {x: 10})
L.set(["x", L.log("%s x: %j")], "11", {x: 10})
// get x: 10

@@ -1133,3 +1150,3 @@ // set x: "11"

`L.compose(L.prop(p0), ...ps.map(L.prop))` or just use the shorthand notation
`P(p0, ...ps)`.
`[p0, ...ps]`.

@@ -1136,0 +1153,0 @@ ### Types

@@ -113,22 +113,31 @@ import * as R from "ramda"

const composed = lenses => {
switch (lenses.length) {
case 0: return identity
case 1: return lift(lenses[0])
default: return constructor => x => {
let i = lenses.length
let r = lift(lenses[--i])(constructor)(x)
do {
r = lift(lenses[--i])(constructor)(r)
} while (0 < i)
return r
}
}
}
const lift = l => {
switch (typeof l) {
case "string": return liftProp(l)
case "number": return liftIndex(l)
default: return lifted(l)
case "string": return liftProp(l)
case "number": return liftIndex(l)
case "function": return lifted(l)
default: return composed(l)
}
}
export function compose() {
switch (arguments.length) {
export function compose(...lenses) {
switch (lenses.length) {
case 0: return identity
case 1: return arguments[0]
default: return toCat => x => {
let i = arguments.length
let r = lift(arguments[--i])(toCat)(x)
do {
r = lift(arguments[--i])(toCat)(r)
} while (0 < i)
return r
}
case 1: return lenses[0]
default: return lenses
}

@@ -146,21 +155,32 @@ }

switch (typeof l) {
case "string": return setProp(l, x, s)
case "number": return setIndex(l, x, s)
default: return lifted(l)(Ident)(() => Ident(x))(s).value
case "string": return setProp(l, x, s)
case "number": return setIndex(l, x, s)
case "function": return lifted(l)(Ident)(() => Ident(x))(s).value
default: return composed(l)(Ident)(() => Ident(x))(s).value
}
}
const getI = (l, s) => {
switch (typeof l) {
case "string": return getProp(l, s)
case "number": return getIndex(l, s)
default: return lifted(l)(Const)(Const)(s).value
case "string": return getProp(l, s)
case "number": return getIndex(l, s)
case "function": return lifted(l)(Const)(Const)(s).value
default: {
let r = s
for (let i=0, n=l.length; i<n; ++i)
r = getI(l[i], r)
return r
}
}
}
const modifyI = (l, x2x, s) => {
switch (typeof l) {
case "string": return setProp(l, x2x(getProp(l, s)), s)
case "number": return setIndex(l, x2x(getIndex(l, s)), s)
default: return lifted(l)(Ident)(y => Ident(x2x(y)))(s).value
case "string": return setProp(l, x2x(getProp(l, s)), s)
case "number": return setIndex(l, x2x(getIndex(l, s)), s)
case "function": return lifted(l)(Ident)(y => Ident(x2x(y)))(s).value
default: return composed(l)(Ident)(y => Ident(x2x(y)))(s).value
}
}
const lensI = (getter, setter) => _c => inner => target =>

@@ -167,0 +187,0 @@ inner(getter(target)).map(focus => setter(focus, target))

@@ -44,2 +44,3 @@ import * as R from "ramda"

testEq('P(101)', 101)
testEq('P(101, "x")', [101, "x"])
})

@@ -50,3 +51,4 @@

testEq('L.modify(L.identity, R.add(1), 2)', 3)
testEq('L.remove(P("x", L.identity), {x: 1, y: 2})', {y: 2})
testEq('L.modify([], R.add(1), 2)', 3)
testEq('L.remove(["x", L.identity], {x: 1, y: 2})', {y: 2})
})

@@ -97,2 +99,9 @@

describe('L.get', () => {
testEq('L.get([], [[{x: {y: 101}}]])', [[{x: {y: 101}}]])
testEq('L.get([0, L.findWith("x"), L.identity, "y", []], [[{x: {y: 101}}]])', 101)
testEq('L.get([0, L.findWith("x"), [L.identity, "y"]], [[{x: {y: 101}}]])', 101)
testEq('L.get([[0, L.findWith("x")], [[L.identity], "y"]], [[{x: {y: 101}}]])', 101)
})
describe('L.index', () => {

@@ -104,13 +113,14 @@ if (process.env.NODE_ENV !== "production") {

}
testEq('L.set(P(1), undefined, [,,])', undefined)
testEq('L.set(P(L.required([]), 1), undefined, [,,])', [])
testEq('L.set(P(1), 4, [1, 2, 3])', [1, 4, 3])
testEq('L.modify(1, x => x + 1, [1, 2])', [1, 3])
testEq('L.set([1], undefined, [,,])', undefined)
testEq('L.set([L.required([]), 1], undefined, [,,])', [])
testEq('L.set([1], 4, [1, 2, 3])', [1, 4, 3])
testEq('L.set(2, 4, undefined)', [,, 4])
testEq('L.set(P(2), 4, [1])', [1,, 4])
testEq('L.remove(P(0), [1, 2, 3])', [2, 3])
testEq('L.set(P(1), undefined, [1, 2, 3])', [1, 3])
testEq('L.set([2], 4, [1])', [1,, 4])
testEq('L.remove([0], [1, 2, 3])', [2, 3])
testEq('L.set([1], undefined, [1, 2, 3])', [1, 3])
testEq('L.set(2, undefined, [1, 2, 3])', [1, 2])
testEq('L.set(P(5), undefined, [1, 2, 3])', [1, 2, 3])
testEq('L.set([5], undefined, [1, 2, 3])', [1, 2, 3])
testEq('L.get(5, undefined)', undefined)
testEq('L.get(P(5), [1, 2, 3])', undefined)
testEq('L.get([5], [1, 2, 3])', undefined)
testEq('L.set(1, "2", ["1", "2", "3"])', ["1", "2", "3"])

@@ -130,11 +140,12 @@ empties.forEach(invalid => testEq(`L.get(0, ${show(invalid)})`, undefined))

}
testEq('L.set(P("x"), undefined, {x: 1})', undefined)
testEq('L.set(P("x", L.required(null)), undefined, {x: 1})', {x: null})
testEq('L.set(P("x", L.required(null)), 2, {x: 1})', {x: 2})
testEq('L.modify("x", x => x + 1, {x: 1})', {x: 2})
testEq('L.set(["x"], undefined, {x: 1})', undefined)
testEq('L.set(["x", L.required(null)], undefined, {x: 1})', {x: null})
testEq('L.set(["x", L.required(null)], 2, {x: 1})', {x: 2})
testEq('L.remove("y", {x: 1, y: 2})', {x: 1})
testEq('L.set(P("y"), 3, {x: 1, y: 2})', {x: 1, y: 3})
testEq('L.set(["y"], 3, {x: 1, y: 2})', {x: 1, y: 3})
testEq('L.set("z", 3, {x: 1, y: 2})', {x: 1, y: 2, z: 3})
testEq('L.set(P("z"), 3, undefined)', {z: 3})
testEq('L.set(["z"], 3, undefined)', {z: 3})
testEq('L.get("z", undefined)', undefined)
testEq('L.get(P("z"), {x: 1})', undefined)
testEq('L.get(["z"], {x: 1})', undefined)
empties.forEach(invalid => testEq(`L.get("x", ${show(invalid)})`, undefined))

@@ -160,3 +171,3 @@ empties.forEach(invalid => testEq(`L.set("ex", true, ${show(invalid)})`, {ex: true}))

describe("L.define", () => {
testEq('L.get(P("related", L.define([])), {})', [])
testEq('L.get(["related", L.define([])], {})', [])
testEq('L.set(L.define([]), undefined, undefined)', [])

@@ -178,9 +189,9 @@ })

testEq('L.get(L.normalize(R.sortBy(R.identity)), [1,3,2,5])', [1,2,3,5])
testEq('L.set(P(L.normalize(R.sortBy(R.identity)), L.find(R.equals(2))), 4, [1,3,2,5])',
testEq('L.set([L.normalize(R.sortBy(R.identity)), L.find(R.equals(2))], 4, [1,3,2,5])',
[1,3,4,5])
testEq('L.set(P(L.normalize(R.sortBy(R.identity)), L.find(R.equals(2))), 4, undefined)',
testEq('L.set([L.normalize(R.sortBy(R.identity)), L.find(R.equals(2))], 4, undefined)',
[4])
testEq('L.remove(P(L.normalize(R.sortBy(R.identity)), L.find(R.equals(2))), [2])',
testEq('L.remove([L.normalize(R.sortBy(R.identity)), L.find(R.equals(2))], [2])',
undefined)
testEq('L.set(P(L.normalize(R.sortBy(R.identity)), L.find(R.equals(2))), undefined, [1,3,2,5])',
testEq('L.set([L.normalize(R.sortBy(R.identity)), L.find(R.equals(2))], undefined, [1,3,2,5])',
[1,3,5])

@@ -232,3 +243,3 @@ })

testEq('L.get(L.filter(R.lt(2)), [3,1,4,1,5,9,2])', [3,4,5,9])
testEq('L.remove(P(L.filter(R.lt(2)), 1), [3,1,4,1,5,9,2])', [3,5,9,1,1,2])
testEq('L.remove([L.filter(R.lt(2)), 1], [3,1,4,1,5,9,2])', [3,5,9,1,1,2])
testEq('L.set(L.filter(R.lt(0)), [], [3,1,4,1,5,9,2])', undefined)

@@ -256,3 +267,3 @@ testEq('L.remove(L.filter(R.lt(0)), [3,1,4,1,5,9,2])', undefined)

testEq('L.get(L.augment({y: c => c.x+1, z: c => c.y+1}), {x: 1})', {x: 1, y: 2, z: 3})
testEq('L.remove(P(L.augment({y: () => 1}), "x"), {x:0})', undefined)
testEq('L.remove([L.augment({y: () => 1}), "x"], {x:0})', undefined)
testEq('L.remove(L.augment({z: c => c.x + c.y}), {x: 1, y: 2})', undefined)

@@ -264,8 +275,8 @@ empties.filter(x => !R.equals(x, {})).forEach(invalid => testEq(`L.get(L.augment({x: () => 1}), ${show(invalid)})`, undefined))

describe("L.sequence", () => {
testEq('L.modify(P("xs", L.sequence, "x", L.sequence), R.add(1), {xs: [{x: [1]}, {x: [2,3,4]}]})', {xs: [{x: [2]}, {x: [3,4,5]}]})
testEq('L.set(P("xs", L.sequence, "x", L.sequence), 101, {xs: [{x: [1]}, {x: [2,3,4]}]})', {xs: [{x: [101]}, {x: [101,101,101]}]})
testEq('L.remove(P("xs", L.sequence, "x", L.sequence), {ys: "hip", xs: [{x: [1]}, {x: [2,3,4]}]})', {ys: "hip"})
testEq('L.modify(P("xs", L.sequence, "x"), x => x < 2 ? undefined : x, {xs: [{x:3},{x:1},{x:4},{x:1,y:0},{x:5},{x:9},{x:2}]})', {xs:[{x:3},{x:4},{y:0},{x:5},{x:9},{x:2}]})
testEq('L.modify(P(L.sequence, "x", L.sequence), R.add(1), [{x: [1]}, {}, {x: []}, {x: [2, 3]}])', [{x: [2]}, {x: [3, 4]}])
testEq('L.modify(P(L.sequence, "x", L.sequence), R.add(1), [{x: [1]}, {y: "keep"}, {x: [], z: "these"}, {x: [2, 3]}])', [{x: [2]}, {y: "keep"}, {z: "these"}, {x: [3, 4]}])
testEq('L.modify(["xs", L.sequence, "x", L.sequence], R.add(1), {xs: [{x: [1]}, {x: [2,3,4]}]})', {xs: [{x: [2]}, {x: [3,4,5]}]})
testEq('L.set(["xs", L.sequence, "x", L.sequence], 101, {xs: [{x: [1]}, {x: [2,3,4]}]})', {xs: [{x: [101]}, {x: [101,101,101]}]})
testEq('L.remove(["xs", L.sequence, "x", L.sequence], {ys: "hip", xs: [{x: [1]}, {x: [2,3,4]}]})', {ys: "hip"})
testEq('L.modify(["xs", L.sequence, "x"], x => x < 2 ? undefined : x, {xs: [{x:3},{x:1},{x:4},{x:1,y:0},{x:5},{x:9},{x:2}]})', {xs:[{x:3},{x:4},{y:0},{x:5},{x:9},{x:2}]})
testEq('L.modify([L.sequence, ["x", L.sequence]], R.add(1), [{x: [1]}, {}, {x: []}, {x: [2, 3]}])', [{x: [2]}, {x: [3, 4]}])
testEq('L.modify([[L.sequence, "x"], L.sequence], R.add(1), [{x: [1]}, {y: "keep"}, {x: [], z: "these"}, {x: [2, 3]}])', [{x: [2]}, {y: "keep"}, {z: "these"}, {x: [3, 4]}])
})

@@ -276,15 +287,15 @@

testEq('L.collect(L.optional, 0)', [ 0 ])
testEq('L.collect(P(L.sequence, "x", L.optional), [{x: 1}, {y: 2}, {x: 3, z: 1}])', [1, 3])
testEq('L.modify(P(L.sequence, "x", L.optional), R.add(1), [{x: 1}, {y: 2}, {x: 3, z: 1}])', [{x: 2}, {y: 2}, {x: 4, z: 1}])
testEq('L.collect(P(L.sequence, "x", L.optional, L.sequence), [{x: [1, 2]}, {y: 2}, {x: [3], z: 1}])', [1, 2, 3])
testEq('L.modify(P(L.sequence, "x", L.optional, L.sequence), x => x < 2 ? undefined : x-1, [{x: [1, 2]}, {y: 2}, {x: [3], z: 1}])', [{x: [1]}, {y: 2}, {x: [2], z: 1}])
testEq('L.collect([L.sequence, "x", L.optional], [{x: 1}, {y: 2}, {x: 3, z: 1}])', [1, 3])
testEq('L.modify([L.sequence, "x", L.optional], R.add(1), [{x: 1}, {y: 2}, {x: 3, z: 1}])', [{x: 2}, {y: 2}, {x: 4, z: 1}])
testEq('L.collect([L.sequence, "x", L.optional, L.sequence], [{x: [1, 2]}, {y: 2}, {x: [3], z: 1}])', [1, 2, 3])
testEq('L.modify([L.sequence, "x", L.optional, L.sequence], x => x < 2 ? undefined : x-1, [{x: [1, 2]}, {y: 2}, {x: [3], z: 1}])', [{x: [1]}, {y: 2}, {x: [2], z: 1}])
})
describe("L.collect", () => {
testEq('L.collect(P("xs", L.sequence, "x", L.sequence), {xs: [{x:[3,1]},{x:[4,1]},{x:[5,9,2]}]})', [3,1,4,1,5,9,2])
testEq('L.collect(P(L.sequence, "x", L.sequence), [{x: [1]}, {}, {x: []}, {x: [2, 3]}])', [1, 2, 3])
testEq('L.collect(["xs", L.sequence, "x", L.sequence], {xs: [{x:[3,1]},{x:[4,1]},{x:[5,9,2]}]})', [3,1,4,1,5,9,2])
testEq('L.collect([L.sequence, "x", L.sequence], [{x: [1]}, {}, {x: []}, {x: [2, 3]}])', [1, 2, 3])
testEq('L.collect(L.sequence, [])', [])
testEq('L.collect("x", {x: 101})', [101])
testEq('L.collect("y", {x: 101})', [])
testEq('L.collect(P("a",L.sequence,"b",L.sequence,"c",L.sequence), {a:[{b:[]},{b:[{c:[1]}]},{b:[]},{b:[{c:[2]}]}]})', [1,2])
testEq('L.collect(["a",L.sequence,"b",L.sequence,"c",L.sequence], {a:[{b:[]},{b:[{c:[1]}]},{b:[]},{b:[{c:[2]}]}]})', [1,2])
})

@@ -294,8 +305,8 @@

testEq('L.get(L.pick({x: "c"}), {a: [2], b: 1})', undefined)
testEq('L.set(P(L.pick({x: "c"}), "x"), 4, {a: [2], b: 1})', {a: [2], b: 1, c: 4})
testEq('L.set([L.pick({x: "c"}), "x"], 4, {a: [2], b: 1})', {a: [2], b: 1, c: 4})
testEq('L.get(L.pick({x: "b", y: "a"}), {a: [2], b: 1})', {x: 1, y: [2]})
testEq('L.set(P(L.pick({x: "b", y: "a"}), "x"), 3, {a: [2], b: 1})', {a: [2], b: 3})
testEq('L.remove(P(L.pick({x: "b", y: "a"}), "y"), {a: [2], b: 1})', {b: 1})
testEq('L.remove(P(L.pick({x: "b"}), "x"), {a: [2], b: 1})', {a: [2]})
testEq('L.removeAll(P(L.pick({x: "b", y: "a"}), L.choice("y", "x")), {a: [2], b: 1})', undefined)
testEq('L.set([L.pick({x: "b", y: "a"}), "x"], 3, {a: [2], b: 1})', {a: [2], b: 3})
testEq('L.remove([L.pick({x: "b", y: "a"}), "y"], {a: [2], b: 1})', {b: 1})
testEq('L.remove([L.pick({x: "b"}), "x"], {a: [2], b: 1})', {a: [2]})
testEq('L.removeAll([L.pick({x: "b", y: "a"}), L.choice("y", "x")], {a: [2], b: 1})', undefined)
testEq('L.get(L.pick({x: 0, y: 1}), ["a", "b"])', {x: "a", y: "b"})

@@ -318,6 +329,6 @@ })

testEq('L.get(L.fromArrayBy("id"), [{id: 1}, {id: 2}, {id: 3}])', {"1":{"id":1},"2":{"id":2},"3":{"id":3}})
testEq('L.set(P(L.fromArrayBy("id"), "2", "x"), 1, [{id: 1}, {id: 2}, {id: 3}])', [{id: 1}, {id: 2, x: 1}, {id: 3}])
testEq('L.remove(P(L.fromArrayBy("id"), "1"), [{id: 1}, {id: 2}, {id: 3}])', [{id: 2}, {id: 3}])
testEq('L.remove(P(L.fromArrayBy("id"), "3"), [{id: 1}, {id: 2}, {id: 3}])', [{id: 1}, {id: 2}])
testEq('L.remove(P(L.fromArrayBy("id"), "3"), [{id: 3}])', undefined)
testEq('L.set([L.fromArrayBy("id"), "2", "x"], 1, [{id: 1}, {id: 2}, {id: 3}])', [{id: 1}, {id: 2, x: 1}, {id: 3}])
testEq('L.remove([L.fromArrayBy("id"), "1"], [{id: 1}, {id: 2}, {id: 3}])', [{id: 2}, {id: 3}])
testEq('L.remove([L.fromArrayBy("id"), "3"], [{id: 1}, {id: 2}, {id: 3}])', [{id: 1}, {id: 2}])
testEq('L.remove([L.fromArrayBy("id"), "3"], [{id: 3}])', undefined)
})

@@ -328,15 +339,15 @@

const rec =
P(L.normalize(n =>
undefined !== n.value ? n :
n.smaller && !n.greater ? n.smaller :
!n.smaller && n.greater ? n.greater :
L.set(BST.search(n.smaller.key), n.smaller, n.greater)),
L.defaults({key}),
L.choose(n => key < n.key ? P("smaller", rec) :
n.key < key ? P("greater", rec) :
L.identity))
[L.normalize(n =>
undefined !== n.value ? n :
n.smaller && !n.greater ? n.smaller :
!n.smaller && n.greater ? n.greater :
L.set(BST.search(n.smaller.key), n.smaller, n.greater)),
L.defaults({key}),
L.choose(n => key < n.key ? ["smaller", rec] :
n.key < key ? ["greater", rec] :
L.identity)]
return rec
},
valueOf: key => P(BST.search(key), "value"),
valueOf: key => [BST.search(key), "value"],

@@ -343,0 +354,0 @@ isValid: (n, keyPred = () => true) =>

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