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.1 to 3.9.2

.nyc_output/13648f030d9132bbfb5af86e3c3105db.json

7

CHANGELOG.md
# Changelog
## 3.9.2
Although never explicitly specified in documentation, many of the operations and
combinators were curried using Ramda's `curry`. Unfortunately Ramda's `curry`
is very slow. From this version forward partial lenses no longer supports the
special features of Ramda's `curry` like placeholders.
## 3.4.1

@@ -4,0 +11,0 @@

198

lib/partial.lenses.js

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

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
//

@@ -75,2 +73,34 @@

var curry2 = function curry2(fn) {
return function (a, b) {
switch (arguments.length) {
case 1:
return function (b) {
return fn(a, b);
};
default:
return fn(a, b);
}
};
};
var curry3 = function curry3(fn) {
return function (a, b, c) {
switch (arguments.length) {
case 1:
return curry2(function (b, c) {
return fn(a, b, c);
});
case 2:
return function (c) {
return fn(a, b, c);
};
default:
return fn(a, b, c);
}
};
};
//
var isArray = function isArray(x) {

@@ -86,5 +116,2 @@ return x && x.constructor === Array;

};
var unObject = function unObject(x) {
return isObject(x) ? x : undefined;
};

@@ -118,31 +145,22 @@ var mkArray = function mkArray(x) {

var empty = {};
var dropped = function dropped(xs) {
for (var _ in xs) {
return xs;
}return undefined;
};
var deleteKey = function deleteKey(k) {
var o = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
//
var r = void 0;
for (var p in o) {
if (p !== k) {
if (undefined === r) r = {};
r[p] = o[p];
}
}
return r;
};
var empty = {};
var setKey = function setKey(k, v) {
var o = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
if (k in o && R.equals(v, o[k])) return o;
var r = _defineProperty({}, k, v);
for (var p in o) {
if (p !== k) r[p] = o[p];
}return r;
var deleteKey = function deleteKey(k, o) {
var r = Object.assign({}, o);
delete r[k];
return dropped(r);
};
//
var dropped = function dropped(xs) {
return Object.keys(xs).length === 0 ? undefined : xs;
var setKey = function setKey(k, v, o) {
var r = Object.assign({}, o);
r[k] = v;
return r;
};

@@ -160,20 +178,10 @@

var filtered = toPartial(R.pipe(R.filter(function (x) {
return x !== undefined;
}), dropped));
var filtered = toPartial(function (xs) {
return dropped(xs.filter(function (x) {
return x !== undefined;
}));
});
//
var conserve = function conserve(c1, c0) {
return R.equals(c1, c0) ? c0 : c1;
};
var toConserve = function toConserve(f) {
return function (y, c0) {
return conserve(f(y, c0), c0);
};
};
//
var seemsLens = function seemsLens(x) {

@@ -203,7 +211,7 @@ return typeof x === "function" && x.length === 1;

var remove = exports.remove = R.curry(function (l, s) {
var remove = exports.remove = curry2(function (l, s) {
return setI(lift(l), undefined, s);
});
var removeAll = exports.removeAll = R.curry(function (lens, data) {
var removeAll = exports.removeAll = curry2(function (lens, data) {
warn("`removeAll` is deprecated and will be removed in next major version --- use a different approach.");

@@ -239,5 +247,2 @@ while (get(lens, data) !== undefined) {

};
var isoI = function isoI(to, from) {
return lensI(to, toConserve(from));
};
var collectI = function collectI(l, s) {

@@ -247,17 +252,17 @@ return l(Const)(Single)(s).value;

var lens = exports.lens = R.curry(lensI);
var modify = exports.modify = R.curry(function (l, x2x, s) {
return modifyI(lift(l), x2x, s);
var lens = exports.lens = curry2(lensI);
var modify = exports.modify = curry3(function (l, x2y, s) {
return modifyI(lift(l), x2y, s);
});
var set = exports.set = R.curry(function (l, x, s) {
var set = exports.set = curry3(function (l, x, s) {
return setI(lift(l), x, s);
});
var get = exports.get = R.curry(function (l, s) {
var get = exports.get = curry2(function (l, s) {
return getI(lift(l), s);
});
var collect = exports.collect = R.curry(function (l, s) {
var collect = exports.collect = curry2(function (l, s) {
return warn("`collect` is experimental and might be removed, renamed or changed semantically before next major release") || mkArray(filtered(collectI(lift(l), s)));
});
var chain = exports.chain = R.curry(function (x2yL, xL) {
var chain = exports.chain = curry2(function (x2yL, xL) {
return compose(xL, choose(function (xO) {

@@ -284,3 +289,3 @@ return xO === undefined ? nothing : x2yL(xO);

var orElse = exports.orElse = R.curry(function (d, l) {
var orElse = exports.orElse = curry2(function (d, l) {
return choose(function (x) {

@@ -310,7 +315,7 @@ return getI(lift(l), x) !== undefined ? l : d;

var normalizer = function normalizer(fn) {
return isoI(fn, fn);
return lensI(fn, fn);
};
var replace = exports.replace = R.curry(function (inn, out) {
return isoI(replacer(inn, out), replacer(out, inn));
var replace = exports.replace = curry2(function (inn, out) {
return lensI(replacer(inn, out), replacer(out, inn));
});

@@ -329,3 +334,3 @@

return x === undefined || x === null ? v : x;
}, conserve);
}, id);
};

@@ -344,8 +349,12 @@

var liftProp = function liftProp(k) {
return lensI(function (o) {
return unObject(o) && o[k];
}, function (v, oIn) {
var o = unObject(oIn);
return v === undefined ? deleteKey(k, o) : setKey(k, v, o);
});
return function (_c) {
return function (inner) {
return function (o) {
return inner(isObject(o) ? o[k] : undefined).map(function (v) {
var oOut = isObject(o) ? o : empty;
return v === undefined ? deleteKey(k, oOut) : setKey(k, v, oOut);
});
};
};
};
};

@@ -378,18 +387,23 @@

var liftIndex = function liftIndex(i) {
return lensI(function (xs) {
return unArray(xs) && xs[i];
}, function (x, xs) {
if (x === undefined) {
if (!isArray(xs)) return undefined;
if (i < xs.length) return dropped(xs.slice(0, i).concat(xs.slice(i + 1)));
return dropped(xs);
} else {
if (!isArray(xs)) return Array(i).concat([x]);
if (xs.length <= i) return xs.concat(Array(i - xs.length), [x]);
if (R.equals(x, xs[i])) return xs;
var ys = xs.slice(0);
ys[i] = x;
return ys;
}
});
return function (_c) {
return function (inner) {
return function (xs) {
return inner(isArray(xs) ? xs[i] : undefined).map(function (x) {
if (x === undefined) {
if (!isArray(xs)) return undefined;
if (xs.length <= i) return dropped(xs);
var ys = xs.slice(0);
ys.splice(i, 1);
return dropped(ys);
} else {
if (!isArray(xs)) return Array(i).concat([x]);
if (xs.length <= i) return xs.concat(Array(i - xs.length), [x]);
var _ys = xs.slice(0);
_ys[i] = x;
return _ys;
}
});
};
};
};
};

@@ -405,3 +419,5 @@

}, function (ys, xs) {
return conserve(dropped(R.concat(mkArray(ys), mkArray(xs).filter(R.complement(p)))), xs);
return dropped(mkArray(ys).concat(mkArray(xs).filter(function (x) {
return !p(x);
})));
});

@@ -420,6 +436,6 @@ };

}
}, toConserve(function (y, cIn) {
}, function (y, cIn) {
if (isObject(y)) {
var _ret = function () {
var c = unObject(cIn) || {};
var c = isObject(cIn) ? cIn : empty;
var z = void 0;

@@ -442,3 +458,3 @@ var set = function set(k, v) {

}
}));
});
};

@@ -468,3 +484,3 @@

var identity = exports.identity = lensI(id, conserve);
var identity = exports.identity = lensI(id, id);

@@ -529,3 +545,3 @@ var props = exports.props = function props() {

var fromArrayBy = exports.fromArrayBy = function fromArrayBy(id) {
return warn("`fromArrayBy` is experimental and might be removed, renamed or changed semantically before next major release") || isoI(function (xs) {
return warn("`fromArrayBy` is experimental and might be removed, renamed or changed semantically before next major release") || lensI(function (xs) {
if (isArray(xs)) {

@@ -540,3 +556,3 @@ var o = {};

}, function (o) {
return unObject(o) && R.values(o);
return isObject(o) ? R.values(o) : undefined;
});

@@ -546,2 +562,2 @@ };

exports.default = compose;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9wYXJ0aWFsLmxlbnNlcy5qcyJdLCJuYW1lcyI6WyJSIiwiSWRlbnRpdHkiLCJ2YWx1ZSIsIklkZW50IiwieCIsInByb3RvdHlwZSIsIm1hcCIsIngyeSIsIm9mIiwiYXAiLCJDb25zdGFudCIsIkNvbnN0IiwiU2luZ2xlIiwiY29uY2F0Iiwid2FybiIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsIndhcm5lZCIsIm1lc3NhZ2UiLCJjb25zb2xlIiwiaXNBcnJheSIsImNvbnN0cnVjdG9yIiwiQXJyYXkiLCJpc09iamVjdCIsIk9iamVjdCIsInVuQXJyYXkiLCJ1bmRlZmluZWQiLCJ1bk9iamVjdCIsIm1rQXJyYXkiLCJpZCIsInNuZCIsIl8iLCJjIiwiY2hlY2siLCJleHBlY3RlZCIsInByZWRpY2F0ZSIsIkVycm9yIiwiYXNzZXJ0IiwiZW1wdHkiLCJkZWxldGVLZXkiLCJrIiwibyIsInIiLCJwIiwic2V0S2V5IiwidiIsImVxdWFscyIsImRyb3BwZWQiLCJrZXlzIiwieHMiLCJsZW5ndGgiLCJ0b1BhcnRpYWwiLCJ0cmFuc2Zvcm0iLCJmaWx0ZXJlZCIsInBpcGUiLCJmaWx0ZXIiLCJjb25zZXJ2ZSIsImMxIiwiYzAiLCJ0b0NvbnNlcnZlIiwieSIsImYiLCJzZWVtc0xlbnMiLCJsaWZ0ZWQiLCJsaWZ0IiwiaXNQcm9wIiwibCIsImxpZnRQcm9wIiwiaXNJbmRleCIsImxpZnRJbmRleCIsImNvbXBvc2UiLCJscyIsImlkZW50aXR5IiwidG9DYXQiLCJyZW1vdmUiLCJjdXJyeSIsInMiLCJzZXRJIiwicmVtb3ZlQWxsIiwibGVucyIsImRhdGEiLCJnZXQiLCJnZXRJIiwibW9kaWZ5SSIsIngyeCIsImxlbnNJIiwiZ2V0dGVyIiwic2V0dGVyIiwiaW5uZXIiLCJ0YXJnZXQiLCJmb2N1cyIsImlzb0kiLCJ0byIsImZyb20iLCJjb2xsZWN0SSIsIm1vZGlmeSIsInNldCIsImNvbGxlY3QiLCJjaGFpbiIsIngyeUwiLCJ4TCIsImNob29zZSIsInhPIiwibm90aGluZyIsImp1c3QiLCJhbHdheXMiLCJvckVsc2UiLCJkIiwiY2hvaWNlIiwiaSIsImZpbmRJbmRleCIsInJlcGxhY2VyIiwiaW5uIiwib3V0Iiwibm9ybWFsaXplciIsImZuIiwicmVwbGFjZSIsImRlZmF1bHRzIiwicmVxdWlyZWQiLCJkZWZpbmUiLCJ2YWx1ZU9yIiwibm9ybWFsaXplIiwicHJvcCIsIm9JbiIsImZpbmQiLCJhcHBlbmQiLCJmaW5kV2l0aCIsImxscyIsIk51bWJlciIsImlzSW50ZWdlciIsImluZGV4Iiwic2xpY2UiLCJ5cyIsImNvbXBsZW1lbnQiLCJhdWdtZW50IiwieiIsInRlbXBsYXRlIiwiY0luIiwicGljayIsInByb3BzIiwia3MiLCJ6aXBPYmoiLCJzaG93IiwibGFiZWxzIiwibG9nIiwic2VxdWVuY2UiLCJ0cmF2ZXJzZSIsIm9wdGlvbmFsIiwiZnJvbVJhbWRhIiwiZmFudGFzeSIsInRvUmFtZGEiLCJmcm9tQXJyYXlCeSIsIm4iLCJ2YWx1ZXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQTs7SUFBWUEsQzs7Ozs7Ozs7QUFFWjs7QUFFQSxTQUFTQyxRQUFULENBQWtCQyxLQUFsQixFQUF5QjtBQUFDLE9BQUtBLEtBQUwsR0FBYUEsS0FBYjtBQUFtQjtBQUM3QyxJQUFNQyxRQUFRLFNBQVJBLEtBQVE7QUFBQSxTQUFLLElBQUlGLFFBQUosQ0FBYUcsQ0FBYixDQUFMO0FBQUEsQ0FBZDtBQUNBSCxTQUFTSSxTQUFULENBQW1CQyxHQUFuQixHQUF5QixVQUFVQyxHQUFWLEVBQWU7QUFBQyxTQUFPLElBQUlOLFFBQUosQ0FBYU0sSUFBSSxLQUFLTCxLQUFULENBQWIsQ0FBUDtBQUFxQyxDQUE5RTtBQUNBRCxTQUFTSSxTQUFULENBQW1CRyxFQUFuQixHQUF3QkwsS0FBeEI7QUFDQUYsU0FBU0ksU0FBVCxDQUFtQkksRUFBbkIsR0FBd0IsVUFBVUwsQ0FBVixFQUFhO0FBQUMsU0FBTyxJQUFJSCxRQUFKLENBQWEsS0FBS0MsS0FBTCxDQUFXRSxF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QUgsQ0FBVjtBQUNBcEUsVUFBRXRDLEVBQUUwQixFQUFGLENBQUYsSUFBVzFCLENBQVg7QUFDRDtBQUNELGFBQU9zQyxDQUFQO0FBQ0Q7QUFDRixHQVRELEVBVUE7QUFBQSxXQUFLZCxTQUFTYyxDQUFULEtBQWUxQyxFQUFFMEosTUFBRixDQUFTaEgsQ0FBVCxDQUFwQjtBQUFBLEdBVkEsQ0FGeUI7QUFBQSxDQUFwQjs7a0JBY1E2QixPIiwiZmlsZSI6InBhcnRpYWwubGVuc2VzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUiBmcm9tIFwicmFtZGFcIlxuXG4vL1xuXG5mdW5jdGlvbiBJZGVudGl0eSh2YWx1ZSkge3RoaXMudmFsdWUgPSB2YWx1ZX1cbmNvbnN0IElkZW50ID0geCA9PiBuZXcgSWRlbnRpdHkoeClcbklkZW50aXR5LnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoeDJ5KSB7cmV0dXJuIG5ldyBJZGVudGl0eSh4MnkodGhpcy52YWx1ZSkpfVxuSWRlbnRpdHkucHJvdG90eXBlLm9mID0gSWRlbnRcbklkZW50aXR5LnByb3RvdHlwZS5hcCA9IGZ1bmN0aW9uICh4KSB7cmV0dXJuIG5ldyBJZGVudGl0eSh0aGlzLnZhbHVlKHgudmFsdWUpKX1cblxuLy9cblxuZnVuY3Rpb24gQ29uc3RhbnQodmFsdWUpIHt0aGlzLnZhbHVlID0gdmFsdWV9XG5jb25zdCBDb25zdCA9IHggPT4gbmV3IENvbnN0YW50KHgpXG5jb25zdCBTaW5nbGUgPSB4ID0+IENvbnN0KFt4XSlcbkNvbnN0YW50LnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoKSB7cmV0dXJuIHRoaXN9XG5Db25zdGFudC5wcm90b3R5cGUub2YgPSBDb25zdFxuQ29uc3RhbnQucHJvdG90eXBlLmFwID0gZnVuY3Rpb24gKHgpIHtyZXR1cm4gbmV3IENvbnN0KFIuY29uY2F0KHRoaXMudmFsdWUsIHgudmFsdWUpKX1cblxuLy9cblxuY29uc3Qgd2FybiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/ICgpID0+IHt9IDogKCgpID0+IHtcbiAgY29uc3Qgd2FybmVkID0ge31cblxuICByZXR1cm4gbWVzc2FnZSA9PiB7XG4gICAgaWYgKCEobWVzc2FnZSBpbiB3YXJuZWQpKSB7XG4gICAgICB3YXJuZWRbbWVzc2FnZV0gPSBtZXNzYWdlXG4gICAgICBjb25zb2xlLndhcm4oXCJwYXJ0aWFsLmxlbnNlczpcIiwgbWVzc2FnZSlcbiAgICB9XG4gIH1cbn0pKClcblxuLy9cblxuY29uc3QgaXNBcnJheSAgPSB4ID0+IHggJiYgeC5jb25zdHJ1Y3RvciA9PT0gQXJyYXlcbmNvbnN0IGlzT2JqZWN0ID0geCA9PiB4ICYmIHguY29uc3RydWN0b3IgPT09IE9iamVjdFxuXG5jb25zdCB1bkFycmF5ICA9IHggPT4gIGlzQXJyYXkoeCkgPyB4IDogdW5kZWZpbmVkXG5jb25zdCB1bk9iamVjdCA9IHggPT4gaXNPYmplY3QoeCkgPyB4IDogdW5kZWZpbmVkXG5cbmNvbnN0IG1rQXJyYXkgPSB4ID0+IGlzQXJyYXkoeCkgPyB4IDogW11cblxuLy9cblxuY29uc3QgaWQgPSB4ID0+IHhcbmNvbnN0IHNuZCA9IChfLCBjKSA9PiBjXG5cbi8vXG5cbmNvbnN0IGNoZWNrID0gKGV4cGVjdGVkLCBwcmVkaWNhdGUpID0+IHggPT4ge1xuICBpZiAocHJlZGljYXRlKHgpKVxuICAgIHJldHVybiB4XG4gIGVsc2VcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7ZXhwZWN0ZWR9LCBidXQgZ290ICR7eH0uYClcbn1cblxuY29uc3QgYXNzZXJ0ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gKCkgPT4gaWQgOiBjaGVja1xuXG4vL1xuXG5jb25zdCBlbXB0eSA9IHt9XG5cbmNvbnN0IGRlbGV0ZUtleSA9IChrLCBvID0ge30pID0+IHtcbiAgbGV0IHJcbiAgZm9yIChjb25zdCBwIGluIG8pIHtcbiAgICBpZiAocCAhPT0gaykge1xuICAgICAgaWYgKHVuZGVmaW5lZCA9PT0gcilcbiAgICAgICAgciA9IHt9XG4gICAgICByW3BdID0gb1twXVxuICAgIH1cbiAgfVxuICByZXR1cm4gclxufVxuXG5jb25zdCBzZXRLZXkgPSAoaywgdiwgbyA9IHt9KSA9PiB7XG4gIGlmIChrIGluIG8gJiYgUi5lcXVhbHModiwgb1trXSkpXG4gICAgcmV0dXJuIG9cbiAgY29uc3QgciA9IHtba106IHZ9XG4gIGZvciAoY29uc3QgcCBpbiBvKVxuICAgIGlmIChwICE9PSBrKVxuICAgICAgcltwXSA9IG9bcF1cbiAgcmV0dXJuIHJcbn1cblxuLy9cblxuY29uc3QgZHJvcHBlZCA9IHhzID0+IE9iamVjdC5rZXlzKHhzKS5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiB4c1xuXG4vL1xuXG5jb25zdCB0b1BhcnRpYWwgPSB0cmFuc2Zvcm0gPT4geCA9PiB1bmRlZmluZWQgPT09IHggPyB4IDogdHJhbnNmb3JtKHgpXG5cbi8vXG5cbmNvbnN0IGZpbHRlcmVkID1cbiAgdG9QYXJ0aWFsKFIucGlwZShSLmZpbHRlcih4ID0+IHggIT09IHVuZGVmaW5lZCksIGRyb3BwZWQpKVxuXG4vL1xuXG5jb25zdCBjb25zZXJ2ZSA9IChjMSwgYzApID0+IFIuZXF1YWxzKGMxLCBjMCkgPyBjMCA6IGMxXG5cbmNvbnN0IHRvQ29uc2VydmUgPSBmID0+ICh5LCBjMCkgPT4gY29uc2VydmUoZih5LCBjMCksIGMwKVxuXG4vL1xuXG5jb25zdCBzZWVtc0xlbnMgPSB4ID0+IHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCIgJiYgeC5sZW5ndGggPT09IDFcblxuY29uc3QgbGlmdGVkID0gYXNzZXJ0KFwiYSBsZW5zXCIsIHNlZW1zTGVucylcblxuY29uc3QgbGlmdCA9IGwgPT4ge1xuICBpZiAoaXNQcm9wKGwpKSAgcmV0dXJuIGxpZnRQcm9wKGwpXG4gIGlmIChpc0luZGV4KGwpKSByZXR1cm4gbGlmdEluZGV4KGwpXG4gIHJldHVybiBsaWZ0ZWQobClcbn1cblxuZXhwb3J0IGNvbnN0IGNvbXBvc2UgPSAoLi4ubHMpID0+XG4gIGxzLmxlbmd0aCA9PT0gMCA/IGlkZW50aXR5IDpcbiAgbHMubGVuZ3RoID09PSAxID8gbHNbMF0gOlxuICAodG9DYXQgPT4gUi5jb21wb3NlKC4uLmxzLm1hcChsID0+IGxpZnQobCkodG9DYXQpKSkpXG5cbmV4cG9ydCBjb25zdCByZW1vdmUgPSBSLmN1cnJ5KChsLCBzKSA9PiBzZXRJKGxpZnQobCksIHVuZGVmaW5lZCwgcykpXG5cbmV4cG9ydCBjb25zdCByZW1vdmVBbGwgPSBSLmN1cnJ5KChsZW5zLCBkYXRhKSA9PiB7XG4gIHdhcm4oXCJgcmVtb3ZlQWxsYCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gbmV4dCBtYWpvciB2ZXJzaW9uIC0tLSB1c2UgYSBkaWZmZXJlbnQgYXBwcm9hY2guXCIpXG4gIHdoaWxlIChnZXQobGVucywgZGF0YSkgIT09IHVuZGVmaW5lZClcbiAgICBkYXRhID0gcmVtb3ZlKGxlbnMsIGRhdGEpXG4gIHJldHVybiBkYXRhXG59KVxuXG5jb25zdCBzZXRJID0gKGwsIHgsIHMpID0+IGwoSWRlbnQpKCgpID0+IElkZW50KHgpKShzKS52YWx1ZVxuY29uc3QgZ2V0SSA9IChsLCBzKSA9PiBsKENvbnN0KShDb25zdCkocykudmFsdWVcbmNvbnN0IG1vZGlmeUkgPSAobCwgeDJ4LCBzKSA9PiBsKElkZW50KSh5ID0+IElkZW50KHgyeCh5KSkpKHMpLnZhbHVlXG5jb25zdCBsZW5zSSA9IChnZXR0ZXIsIHNldHRlcikgPT4gX2NvbnN0cnVjdG9yID0+IGlubmVyID0+IHRhcmdldCA9PlxuICBpbm5lcihnZXR0ZXIodGFyZ2V0KSkubWFwKGZvY3VzID0+IHNldHRlcihmb2N1cywgdGFyZ2V0KSlcbmNvbnN0IGlzb0kgPSAodG8sIGZyb20pID0+IGxlbnNJKHRvLCB0b0NvbnNlcnZlKGZyb20pKVxuY29uc3QgY29sbGVjdEkgPSAobCwgcykgPT4gbChDb25zdCkoU2luZ2xlKShzKS52YWx1ZVxuXG5leHBvcnQgY29uc3QgbGVucyA9IFIuY3VycnkobGVuc0kpXG5leHBvcnQgY29uc3QgbW9kaWZ5ID0gUi5jdXJyeSgobCwgeDJ4LCBzKSA9PiBtb2RpZnlJKGxpZnQobCksIHgyeCwgcykpXG5leHBvcnQgY29uc3Qgc2V0ID0gUi5jdXJyeSgobCwgeCwgcykgPT4gc2V0SShsaWZ0KGwpLCB4LCBzKSlcbmV4cG9ydCBjb25zdCBnZXQgPSBSLmN1cnJ5KChsLCBzKSA9PiBnZXRJKGxpZnQobCksIHMpKVxuZXhwb3J0IGNvbnN0IGNvbGxlY3QgPSBSLmN1cnJ5KChsLCBzKSA9PlxuICB3YXJuKFwiYGNvbGxlY3RgIGlzIGV4cGVyaW1lbnRhbCBhbmQgbWlnaHQgYmUgcmVtb3ZlZCwgcmVuYW1lZCBvciBjaGFuZ2VkIHNlbWFudGljYWxseSBiZWZvcmUgbmV4dCBtYWpvciByZWxlYXNlXCIpIHx8XG4gIG1rQXJyYXkoZmlsdGVyZWQoY29sbGVjdEkobGlmdChsKSwgcykpKSlcblxuZXhwb3J0IGNvbnN0IGNoYWluID0gUi5jdXJyeSgoeDJ5TCwgeEwpID0+XG4gIGNvbXBvc2UoeEwsIGNob29zZSh4TyA9PiB4TyA9PT0gdW5kZWZpbmVkID8gbm90aGluZyA6IHgyeUwoeE8pKSkpXG5cbmV4cG9ydCBjb25zdCBqdXN0ID0geCA9PiBsZW5zSShSLmFsd2F5cyh4KSwgc25kKVxuXG5leHBvcnQgY29uc3QgY2hvb3NlID0geDJ5TCA9PiBjb25zdHJ1Y3RvciA9PiBpbm5lciA9PiB0YXJnZXQgPT5cbiAgbGlmdCh4MnlMKHRhcmdldCkpKGNvbnN0cnVjdG9yKShpbm5lcikodGFyZ2V0KVxuXG5leHBvcnQgY29uc3Qgbm90aGluZyA9IGxlbnNJKHNuZCwgc25kKVxuXG5leHBvcnQgY29uc3Qgb3JFbHNlID1cbiAgUi5jdXJyeSgoZCwgbCkgPT4gY2hvb3NlKHggPT4gZ2V0SShsaWZ0KGwpLCB4KSAhPT0gdW5kZWZpbmVkID8gbCA6IGQpKVxuXG5leHBvcnQgY29uc3QgY2hvaWNlID0gKC4uLmxzKSA9PiBjaG9vc2UoeCA9PiB7XG4gIGNvbnN0IGkgPSBscy5maW5kSW5kZXgobCA9PiBnZXRJKGxpZnQobCksIHgpICE9PSB1bmRlZmluZWQpXG4gIHJldHVybiAwIDw9IGkgPyBsc1tpXSA6IG5vdGhpbmdcbn0pXG5cbmNvbnN0IHJlcGxhY2VyID0gKGlubiwgb3V0KSA9PiB4ID0+IFIuZXF1YWxzKHgsIGlubikgPyBvdXQgOiB4XG5jb25zdCBub3JtYWxpemVyID0gZm4gPT4gaXNvSShmbiwgZm4pXG5cbmV4cG9ydCBjb25zdCByZXBsYWNlID0gUi5jdXJyeSgoaW5uLCBvdXQpID0+XG4gIGlzb0kocmVwbGFjZXIoaW5uLCBvdXQpLCByZXBsYWNlcihvdXQsIGlubikpKVxuXG5leHBvcnQgY29uc3QgZGVmYXVsdHMgPSByZXBsYWNlKHVuZGVmaW5lZClcbmV4cG9ydCBjb25zdCByZXF1aXJlZCA9IGlubiA9PiByZXBsYWNlKGlubiwgdW5kZWZpbmVkKVxuZXhwb3J0IGNvbnN0IGRlZmluZSA9IHYgPT4gbm9ybWFsaXplcihyZXBsYWNlcih1bmRlZmluZWQsIHYpKVxuXG5leHBvcnQgY29uc3QgdmFsdWVPciA9IHYgPT5cbiAgbGVuc0koeCA9PiB4ID09PSB1bmRlZmluZWQgfHwgeCA9PT0gbnVsbCA/IHYgOiB4LCBjb25zZXJ2ZSlcblxuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZSA9IHRyYW5zZm9ybSA9PiBub3JtYWxpemVyKHRvUGFydGlhbCh0cmFuc2Zvcm0pKVxuXG5jb25zdCBpc1Byb3AgPSB4ID0+IHR5cGVvZiB4ID09PSBcInN0cmluZ1wiXG5cbmV4cG9ydCBjb25zdCBwcm9wID0gYXNzZXJ0KFwiYSBzdHJpbmdcIiwgaXNQcm9wKVxuXG5jb25zdCBsaWZ0UHJvcCA9IGsgPT4gbGVuc0kobyA9PiB1bk9iamVjdChvKSAmJiBvW2tdLCAodiwgb0luKSA9PiB7XG4gIGNvbnN0IG8gPSB1bk9iamVjdChvSW4pXG4gIHJldHVybiB2ID09PSB1bmRlZmluZWQgPyBkZWxldGVLZXkoaywgbykgOiBzZXRLZXkoaywgdiwgbylcbn0pXG5cbmV4cG9ydCBjb25zdCBmaW5kID0gcHJlZGljYXRlID0+IGNob29zZSh4cyA9PiB7XG4gIGlmIChpc0FycmF5KHhzKSkge1xuICAgIGNvbnN0IGkgPSB4cy5maW5kSW5kZXgocHJlZGljYXRlKVxuICAgIHJldHVybiBpIDwgMCA/IGFwcGVuZCA6IGlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYXBwZW5kXG4gIH1cbn0pXG5cbmV4cG9ydCBjb25zdCBmaW5kV2l0aCA9ICguLi5scykgPT4ge1xuICBjb25zdCBsbHMgPSBsaWZ0KGNvbXBvc2UoLi4ubHMpKVxuICByZXR1cm4gY29tcG9zZShmaW5kKHggPT4gZ2V0SShsbHMsIHgpICE9PSB1bmRlZmluZWQpLCBsbHMpXG59XG5cbmNvbnN0IGlzSW5kZXggPSB4ID0+IE51bWJlci5pc0ludGVnZXIoeCkgJiYgMCA8PSB4XG5cbmV4cG9ydCBjb25zdCBpbmRleCA9IGFzc2VydChcImEgbm9uLW5lZ2F0aXZlIGludGVnZXJcIiwgaXNJbmRleClcblxuY29uc3QgbGlmdEluZGV4ID0gaSA9PiBsZW5zSSh4cyA9PiB1bkFycmF5KHhzKSAmJiB4c1tpXSwgKHgsIHhzKSA9PiB7XG4gIGlmICh4ID09PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoIWlzQXJyYXkoeHMpKVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGlmIChpIDwgeHMubGVuZ3RoKVxuICAgICAgcmV0dXJuIGRyb3BwZWQoeHMuc2xpY2UoMCwgaSkuY29uY2F0KHhzLnNsaWNlKGkrMSkpKVxuICAgIHJldHVybiBkcm9wcGVkKHhzKVxuICB9IGVsc2Uge1xuICAgIGlmICghaXNBcnJheSh4cykpXG4gICAgICByZXR1cm4gQXJyYXkoaSkuY29uY2F0KFt4XSlcbiAgICBpZiAoeHMubGVuZ3RoIDw9IGkpXG4gICAgICByZXR1cm4geHMuY29uY2F0KEFycmF5KGkgLSB4cy5sZW5ndGgpLCBbeF0pXG4gICAgaWYgKFIuZXF1YWxzKHgsIHhzW2ldKSlcbiAgICAgIHJldHVybiB4c1xuICAgIGNvbnN0IHlzID0geHMuc2xpY2UoMClcbiAgICB5c1tpXSA9IHhcbiAgICByZXR1cm4geXNcbiAgfVxufSlcblxuZXhwb3J0IGNvbnN0IGFwcGVuZCA9IGxlbnNJKHNuZCwgKHgsIHhzKSA9PlxuICB4ID09PSB1bmRlZmluZWQgPyB1bkFycmF5KHhzKSA6IGlzQXJyYXkoeHMpID8geHMuY29uY2F0KFt4XSkgOiBbeF0pXG5cbmV4cG9ydCBjb25zdCBmaWx0ZXIgPSBwID0+IGxlbnNJKHhzID0+IHVuQXJyYXkoeHMpICYmIHhzLmZpbHRlcihwKSwgKHlzLCB4cykgPT5cbiAgY29uc2VydmUoZHJvcHBlZChSLmNvbmNhdChta0FycmF5KHlzKSwgbWtBcnJheSh4cykuZmlsdGVyKFIuY29tcGxlbWVudChwKSkpKSwgeHMpKVxuXG5leHBvcnQgY29uc3QgYXVnbWVudCA9IHRlbXBsYXRlID0+IGxlbnNJKFxuICB4ID0+IHtcbiAgICBpZiAoaXNPYmplY3QoeCkpIHtcbiAgICAgIGNvbnN0IHogPSB7Li4ueH1cbiAgICAgIGZvciAoY29uc3QgayBpbiB0ZW1wbGF0ZSlcbiAgICAgICAgeltrXSA9IHRlbXBsYXRlW2tdKHopXG4gICAgICByZXR1cm4gelxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuICB9LFxuICB0b0NvbnNlcnZlKCh5LCBjSW4pID0+IHtcbiAgICBpZiAoaXNPYmplY3QoeSkpIHtcbiAgICAgIGNvbnN0IGMgPSB1bk9iamVjdChjSW4pIHx8IHt9XG4gICAgICBsZXQgelxuICAgICAgY29uc3Qgc2V0ID0gKGssIHYpID0+IHtcbiAgICAgICAgaWYgKHVuZGVmaW5lZCA9PT0geilcbiAgICAgICAgICB6ID0ge31cbiAgICAgICAgeltrXSA9IHZcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgayBpbiB5KSB7XG4gICAgICAgIGlmICghKGsgaW4gdGVtcGxhdGUpKVxuICAgICAgICAgIHNldChrLCB5W2tdKVxuICAgICAgICBlbHNlXG4gICAgICAgICAgaWYgKGsgaW4gYylcbiAgICAgICAgICAgIHNldChrLCBjW2tdKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHpcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cbiAgfSkpXG5cbmV4cG9ydCBjb25zdCBwaWNrID0gdGVtcGxhdGUgPT4gbGVuc0koXG4gIGMgPT4ge1xuICAgIGxldCByXG4gICAgZm9yIChjb25zdCBrIGluIHRlbXBsYXRlKSB7XG4gICAgICBjb25zdCB2ID0gZ2V0SShsaWZ0KHRlbXBsYXRlW2tdKSwgYylcbiAgICAgIGlmICh2ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHIgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICByID0ge31cbiAgICAgICAgcltrXSA9IHZcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJcbiAgfSxcbiAgKG8gPSBlbXB0eSwgY0luKSA9PiB7XG4gICAgbGV0IGMgPSBjSW5cbiAgICBmb3IgKGNvbnN0IGsgaW4gdGVtcGxhdGUpXG4gICAgICBjID0gc2V0SShsaWZ0KHRlbXBsYXRlW2tdKSwgb1trXSwgYylcbiAgICByZXR1cm4gY1xuICB9KVxuXG5leHBvcnQgY29uc3QgaWRlbnRpdHkgPSBsZW5zSShpZCwgY29uc2VydmUpXG5cbmV4cG9ydCBjb25zdCBwcm9wcyA9ICguLi5rcykgPT4gcGljayhSLnppcE9iaihrcywga3MpKVxuXG5jb25zdCBzaG93ID0gKC4uLmxhYmVscykgPT4geCA9PiBjb25zb2xlLmxvZyguLi5sYWJlbHMsIHgpIHx8IHhcblxuZXhwb3J0IGNvbnN0IGxvZyA9ICguLi5sYWJlbHMpID0+XG4gIGxlbnNJKHNob3coLi4ubGFiZWxzLCBcImdldFwiKSwgc2hvdyguLi5sYWJlbHMsIFwic2V0XCIpKVxuXG5leHBvcnQgY29uc3Qgc2VxdWVuY2UgPSBjb25zdHJ1Y3RvciA9PiBpbm5lciA9PiB0YXJnZXQgPT5cbiAgd2FybihcImBzZXF1ZW5jZWAgaXMgZXhwZXJpbWVudGFsIGFuZCBtaWdodCBiZSByZW1vdmVkLCByZW5hbWVkIG9yIGNoYW5nZWQgc2VtYW50aWNhbGx5IGJlZm9yZSBuZXh0IG1ham9yIHJlbGVhc2VcIikgfHxcbiAgUi50cmF2ZXJzZShjb25zdHJ1Y3RvciwgaW5uZXIsIG1rQXJyYXkodGFyZ2V0KSlcbiAgLm1hcChmaWx0ZXJlZClcblxuZXhwb3J0IGNvbnN0IG9wdGlvbmFsID1cbiAgY29tcG9zZShsZW5zSSh0b1BhcnRpYWwoeCA9PiBbeF0pLFxuICAgICAgICAgICAgICAgIHRvUGFydGlhbCgoW3hdKSA9PiB4KSksXG4gICAgICAgICAgc2VxdWVuY2UpXG5cbmV4cG9ydCBjb25zdCBmcm9tUmFtZGEgPSBsID0+IF9jb25zdHJ1Y3RvciA9PiBsXG5jb25zdCBmYW50YXN5ID0gKCkgPT4ge3Rocm93IG5ldyBFcnJvcihcIlNvcnJ5LCBgdG9SYW1kYWAgaXMgb25seSBmYW50YXN5IVwiKX1cbmV4cG9ydCBjb25zdCB0b1JhbWRhID0gbCA9PiBsaWZ0KGwpKGZhbnRhc3kpXG5cbmV4cG9ydCBjb25zdCBmcm9tQXJyYXlCeSA9IGlkID0+XG4gIHdhcm4oXCJgZnJvbUFycmF5QnlgIGlzIGV4cGVyaW1lbnRhbCBhbmQgbWlnaHQgYmUgcmVtb3ZlZCwgcmVuYW1lZCBvciBjaGFuZ2VkIHNlbWFudGljYWxseSBiZWZvcmUgbmV4dCBtYWpvciByZWxlYXNlXCIpIHx8XG4gIGlzb0koeHMgPT4ge1xuICAgIGlmIChpc0FycmF5KHhzKSkge1xuICAgICAgY29uc3QgbyA9IHt9XG4gICAgICBmb3IgKGxldCBpPTAsIG49eHMubGVuZ3RoOyBpPG47ICsraSkge1xuICAgICAgICBjb25zdCB4ID0geHNbaV1cbiAgICAgICAgb1t4W2lkXV0gPSB4XG4gICAgICB9XG4gICAgICByZXR1cm4gb1xuICAgIH1cbiAgfSxcbiAgbyA9PiB1bk9iamVjdChvKSAmJiBSLnZhbHVlcyhvKSlcblxuZXhwb3J0IGRlZmF1bHQgY29tcG9zZVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9wYXJ0aWFsLmxlbnNlcy5qcyJdLCJuYW1lcyI6WyJSIiwiSWRlbnRpdHkiLCJ2YWx1ZSIsIklkZW50IiwieCIsInByb3RvdHlwZSIsIm1hcCIsIngyeSIsIm9mIiwiYXAiLCJDb25zdGFudCIsIkNvbnN0IiwiU2luZ2xlIiwiY29uY2F0Iiwid2FybiIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsIndhcm5lZCIsIm1lc3NhZ2UiLCJjb25zb2xlIiwiY3VycnkyIiwiYSIsImIiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmbiIsImN1cnJ5MyIsImMiLCJpc0FycmF5IiwiY29uc3RydWN0b3IiLCJBcnJheSIsImlzT2JqZWN0IiwiT2JqZWN0IiwidW5BcnJheSIsInVuZGVmaW5lZCIsIm1rQXJyYXkiLCJpZCIsInNuZCIsIl8iLCJjaGVjayIsImV4cGVjdGVkIiwicHJlZGljYXRlIiwiRXJyb3IiLCJhc3NlcnQiLCJkcm9wcGVkIiwieHMiLCJlbXB0eSIsImRlbGV0ZUtleSIsImsiLCJvIiwiciIsImFzc2lnbiIsInNldEtleSIsInYiLCJ0b1BhcnRpYWwiLCJ0cmFuc2Zvcm0iLCJmaWx0ZXJlZCIsImZpbHRlciIsInNlZW1zTGVucyIsImxpZnRlZCIsImxpZnQiLCJpc1Byb3AiLCJsIiwibGlmdFByb3AiLCJpc0luZGV4IiwibGlmdEluZGV4IiwiY29tcG9zZSIsImxzIiwiaWRlbnRpdHkiLCJ0b0NhdCIsInJlbW92ZSIsInMiLCJzZXRJIiwicmVtb3ZlQWxsIiwibGVucyIsImRhdGEiLCJnZXQiLCJnZXRJIiwibW9kaWZ5SSIsIngyeCIsInkiLCJsZW5zSSIsImdldHRlciIsInNldHRlciIsImlubmVyIiwidGFyZ2V0IiwiZm9jdXMiLCJjb2xsZWN0SSIsIm1vZGlmeSIsInNldCIsImNvbGxlY3QiLCJjaGFpbiIsIngyeUwiLCJ4TCIsImNob29zZSIsInhPIiwibm90aGluZyIsImp1c3QiLCJhbHdheXMiLCJvckVsc2UiLCJkIiwiY2hvaWNlIiwiaSIsImZpbmRJbmRleCIsInJlcGxhY2VyIiwiaW5uIiwib3V0IiwiZXF1YWxzIiwibm9ybWFsaXplciIsInJlcGxhY2UiLCJkZWZhdWx0cyIsInJlcXVpcmVkIiwiZGVmaW5lIiwidmFsdWVPciIsIm5vcm1hbGl6ZSIsInByb3AiLCJvT3V0IiwiZmluZCIsImFwcGVuZCIsImZpbmRXaXRoIiwibGxzIiwiTnVtYmVyIiwiaXNJbnRlZ2VyIiwiaW5kZXgiLCJ5cyIsInNsaWNlIiwic3BsaWNlIiwicCIsImF1Z21lbnQiLCJ6IiwidGVtcGxhdGUiLCJjSW4iLCJwaWNrIiwicHJvcHMiLCJrcyIsInppcE9iaiIsInNob3ciLCJsYWJlbHMiLCJsb2ciLCJzZXF1ZW5jZSIsInRyYXZlcnNlIiwib3B0aW9uYWwiLCJmcm9tUmFtZGEiLCJmYW50YXN5IiwidG9SYW1kYSIsImZyb21BcnJheUJ5IiwibiIsInZhbHVlcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBOztJQUFZQSxDOzs7Ozs7QUFFWjs7QUFFQSxTQUFTQyxRQUFULENBQWtCQyxLQUFsQixFQUF5QjtBQUFDLE9BQUtBLEtBQUwsR0FBYUEsS0FBYjtBQUFtQjtBQUM3QyxJQUFNQyxRQUFRLFNBQVJBLEtBQVE7QUFBQSxTQUFLLElBQUlGLFFBQUosQ0FBYUcsQ0FBYixDQUFMO0FBQUEsQ0FBZDtBQUNBSCxTQUFTSSxTQUFULENBQW1CQyxHQUFuQixHQUF5QixVQUFVQyxHQUFWLEVBQWU7QUFBQyxTQUFPLElBQUlOLFFBQUosQ0FBYU0sSUFBSSxLQUFLTCxLQUFULENBQWIsQ0FBUDtBQUFxQyxDQUE5RTtBQUNBRCxTQUFTSSxTQUFULENBQW1CRyxFQUFuQixHQUF3QkwsS0FBeEI7QUFDQUYsU0FBU0ksU0FBVCxDQUFtQkksRUFBbkIsR0FBd0IsVUFBVUwsQ0FBVixFQUFhO0FBQUMsU0FBTyxJQUFJSCxRQUFKLENBQWEsS0FBS0MsS0FBTCxDQUFXRSxFQUFFRixLQUFiLENBQWIsQ0FBUDtBQUF5QyxDQUEvRTs7QUFFQTs7QUFFQSxTQUFT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IFwicmFtZGFcIlxuXG4vL1xuXG5mdW5jdGlvbiBJZGVudGl0eSh2YWx1ZSkge3RoaXMudmFsdWUgPSB2YWx1ZX1cbmNvbnN0IElkZW50ID0geCA9PiBuZXcgSWRlbnRpdHkoeClcbklkZW50aXR5LnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoeDJ5KSB7cmV0dXJuIG5ldyBJZGVudGl0eSh4MnkodGhpcy52YWx1ZSkpfVxuSWRlbnRpdHkucHJvdG90eXBlLm9mID0gSWRlbnRcbklkZW50aXR5LnByb3RvdHlwZS5hcCA9IGZ1bmN0aW9uICh4KSB7cmV0dXJuIG5ldyBJZGVudGl0eSh0aGlzLnZhbHVlKHgudmFsdWUpKX1cblxuLy9cblxuZnVuY3Rpb24gQ29uc3RhbnQodmFsdWUpIHt0aGlzLnZhbHVlID0gdmFsdWV9XG5jb25zdCBDb25zdCA9IHggPT4gbmV3IENvbnN0YW50KHgpXG5jb25zdCBTaW5nbGUgPSB4ID0+IENvbnN0KFt4XSlcbkNvbnN0YW50LnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoKSB7cmV0dXJuIHRoaXN9XG5Db25zdGFudC5wcm90b3R5cGUub2YgPSBDb25zdFxuQ29uc3RhbnQucHJvdG90eXBlLmFwID0gZnVuY3Rpb24gKHgpIHtyZXR1cm4gbmV3IENvbnN0KFIuY29uY2F0KHRoaXMudmFsdWUsIHgudmFsdWUpKX1cblxuLy9cblxuY29uc3Qgd2FybiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/ICgpID0+IHt9IDogKCgpID0+IHtcbiAgY29uc3Qgd2FybmVkID0ge31cblxuICByZXR1cm4gbWVzc2FnZSA9PiB7XG4gICAgaWYgKCEobWVzc2FnZSBpbiB3YXJuZWQpKSB7XG4gICAgICB3YXJuZWRbbWVzc2FnZV0gPSBtZXNzYWdlXG4gICAgICBjb25zb2xlLndhcm4oXCJwYXJ0aWFsLmxlbnNlczpcIiwgbWVzc2FnZSlcbiAgICB9XG4gIH1cbn0pKClcblxuLy9cblxuY29uc3QgY3VycnkyID0gZm4gPT4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAxOiAgcmV0dXJuIGIgPT4gZm4oYSwgYilcbiAgICBkZWZhdWx0OiByZXR1cm4gZm4oYSwgYilcbiAgfVxufVxuXG5jb25zdCBjdXJyeTMgPSBmbiA9PiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICBjYXNlIDE6ICByZXR1cm4gY3VycnkyKChiLCBjKSA9PiBmbihhLCBiLCBjKSlcbiAgICBjYXNlIDI6ICByZXR1cm4gYyA9PiBmbihhLCBiLCBjKVxuICAgIGRlZmF1bHQ6IHJldHVybiBmbihhLCBiLCBjKVxuICB9XG59XG5cbi8vXG5cbmNvbnN0IGlzQXJyYXkgID0geCA9PiB4ICYmIHguY29uc3RydWN0b3IgPT09IEFycmF5XG5jb25zdCBpc09iamVjdCA9IHggPT4geCAmJiB4LmNvbnN0cnVjdG9yID09PSBPYmplY3RcblxuY29uc3QgdW5BcnJheSAgPSB4ID0+ICBpc0FycmF5KHgpID8geCA6IHVuZGVmaW5lZFxuXG5jb25zdCBta0FycmF5ID0geCA9PiBpc0FycmF5KHgpID8geCA6IFtdXG5cbi8vXG5cbmNvbnN0IGlkID0geCA9PiB4XG5jb25zdCBzbmQgPSAoXywgYykgPT4gY1xuXG4vL1xuXG5jb25zdCBjaGVjayA9IChleHBlY3RlZCwgcHJlZGljYXRlKSA9PiB4ID0+IHtcbiAgaWYgKHByZWRpY2F0ZSh4KSlcbiAgICByZXR1cm4geFxuICBlbHNlXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke2V4cGVjdGVkfSwgYnV0IGdvdCAke3h9LmApXG59XG5cbmNvbnN0IGFzc2VydCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/ICgpID0+IGlkIDogY2hlY2tcblxuLy9cblxuY29uc3QgZHJvcHBlZCA9IHhzID0+IHtcbiAgZm9yIChjb25zdCBfIGluIHhzKVxuICAgIHJldHVybiB4c1xuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8vXG5cbmNvbnN0IGVtcHR5ID0ge31cblxuY29uc3QgZGVsZXRlS2V5ID0gKGssIG8pID0+IHtcbiAgY29uc3QgciA9IE9iamVjdC5hc3NpZ24oe30sIG8pXG4gIGRlbGV0ZSByW2tdXG4gIHJldHVybiBkcm9wcGVkKHIpXG59XG5cbmNvbnN0IHNldEtleSA9IChrLCB2LCBvKSA9PiB7XG4gIGNvbnN0IHIgPSBPYmplY3QuYXNzaWduKHt9LCBvKVxuICByW2tdID0gdlxuICByZXR1cm4gclxufVxuXG4vL1xuXG5jb25zdCB0b1BhcnRpYWwgPSB0cmFuc2Zvcm0gPT4geCA9PiB1bmRlZmluZWQgPT09IHggPyB4IDogdHJhbnNmb3JtKHgpXG5cbi8vXG5cbmNvbnN0IGZpbHRlcmVkID0gdG9QYXJ0aWFsKHhzID0+IGRyb3BwZWQoeHMuZmlsdGVyKHggPT4geCAhPT0gdW5kZWZpbmVkKSkpXG5cbi8vXG5cbmNvbnN0IHNlZW1zTGVucyA9IHggPT4gdHlwZW9mIHggPT09IFwiZnVuY3Rpb25cIiAmJiB4Lmxlbmd0aCA9PT0gMVxuXG5jb25zdCBsaWZ0ZWQgPSBhc3NlcnQoXCJhIGxlbnNcIiwgc2VlbXNMZW5zKVxuXG5jb25zdCBsaWZ0ID0gbCA9PiB7XG4gIGlmIChpc1Byb3AobCkpICByZXR1cm4gbGlmdFByb3AobClcbiAgaWYgKGlzSW5kZXgobCkpIHJldHVybiBsaWZ0SW5kZXgobClcbiAgcmV0dXJuIGxpZnRlZChsKVxufVxuXG5leHBvcnQgY29uc3QgY29tcG9zZSA9ICguLi5scykgPT5cbiAgbHMubGVuZ3RoID09PSAwID8gaWRlbnRpdHkgOlxuICBscy5sZW5ndGggPT09IDEgPyBsc1swXSA6XG4gICh0b0NhdCA9PiBSLmNvbXBvc2UoLi4ubHMubWFwKGwgPT4gbGlmdChsKSh0b0NhdCkpKSlcblxuZXhwb3J0IGNvbnN0IHJlbW92ZSA9IGN1cnJ5MigobCwgcykgPT4gc2V0SShsaWZ0KGwpLCB1bmRlZmluZWQsIHMpKVxuXG5leHBvcnQgY29uc3QgcmVtb3ZlQWxsID0gY3VycnkyKChsZW5zLCBkYXRhKSA9PiB7XG4gIHdhcm4oXCJgcmVtb3ZlQWxsYCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gbmV4dCBtYWpvciB2ZXJzaW9uIC0tLSB1c2UgYSBkaWZmZXJlbnQgYXBwcm9hY2guXCIpXG4gIHdoaWxlIChnZXQobGVucywgZGF0YSkgIT09IHVuZGVmaW5lZClcbiAgICBkYXRhID0gcmVtb3ZlKGxlbnMsIGRhdGEpXG4gIHJldHVybiBkYXRhXG59KVxuXG5jb25zdCBzZXRJID0gKGwsIHgsIHMpID0+IGwoSWRlbnQpKCgpID0+IElkZW50KHgpKShzKS52YWx1ZVxuY29uc3QgZ2V0SSA9IChsLCBzKSA9PiBsKENvbnN0KShDb25zdCkocykudmFsdWVcbmNvbnN0IG1vZGlmeUkgPSAobCwgeDJ4LCBzKSA9PiBsKElkZW50KSh5ID0+IElkZW50KHgyeCh5KSkpKHMpLnZhbHVlXG5jb25zdCBsZW5zSSA9IChnZXR0ZXIsIHNldHRlcikgPT4gX2NvbnN0cnVjdG9yID0+IGlubmVyID0+IHRhcmdldCA9PlxuICBpbm5lcihnZXR0ZXIodGFyZ2V0KSkubWFwKGZvY3VzID0+IHNldHRlcihmb2N1cywgdGFyZ2V0KSlcbmNvbnN0IGNvbGxlY3RJID0gKGwsIHMpID0+IGwoQ29uc3QpKFNpbmdsZSkocykudmFsdWVcblxuZXhwb3J0IGNvbnN0IGxlbnMgPSBjdXJyeTIobGVuc0kpXG5leHBvcnQgY29uc3QgbW9kaWZ5ID0gY3VycnkzKChsLCB4MnksIHMpID0+IG1vZGlmeUkobGlmdChsKSwgeDJ5LCBzKSlcbmV4cG9ydCBjb25zdCBzZXQgPSBjdXJyeTMoKGwsIHgsIHMpID0+IHNldEkobGlmdChsKSwgeCwgcykpXG5leHBvcnQgY29uc3QgZ2V0ID0gY3VycnkyKChsLCBzKSA9PiBnZXRJKGxpZnQobCksIHMpKVxuZXhwb3J0IGNvbnN0IGNvbGxlY3QgPSBjdXJyeTIoKGwsIHMpID0+XG4gIHdhcm4oXCJgY29sbGVjdGAgaXMgZXhwZXJpbWVudGFsIGFuZCBtaWdodCBiZSByZW1vdmVkLCByZW5hbWVkIG9yIGNoYW5nZWQgc2VtYW50aWNhbGx5IGJlZm9yZSBuZXh0IG1ham9yIHJlbGVhc2VcIikgfHxcbiAgbWtBcnJheShmaWx0ZXJlZChjb2xsZWN0SShsaWZ0KGwpLCBzKSkpKVxuXG5leHBvcnQgY29uc3QgY2hhaW4gPSBjdXJyeTIoKHgyeUwsIHhMKSA9PlxuICBjb21wb3NlKHhMLCBjaG9vc2UoeE8gPT4geE8gPT09IHVuZGVmaW5lZCA/IG5vdGhpbmcgOiB4MnlMKHhPKSkpKVxuXG5leHBvcnQgY29uc3QganVzdCA9IHggPT4gbGVuc0koUi5hbHdheXMoeCksIHNuZClcblxuZXhwb3J0IGNvbnN0IGNob29zZSA9IHgyeUwgPT4gY29uc3RydWN0b3IgPT4gaW5uZXIgPT4gdGFyZ2V0ID0+XG4gIGxpZnQoeDJ5TCh0YXJnZXQpKShjb25zdHJ1Y3RvcikoaW5uZXIpKHRhcmdldClcblxuZXhwb3J0IGNvbnN0IG5vdGhpbmcgPSBsZW5zSShzbmQsIHNuZClcblxuZXhwb3J0IGNvbnN0IG9yRWxzZSA9XG4gIGN1cnJ5MigoZCwgbCkgPT4gY2hvb3NlKHggPT4gZ2V0SShsaWZ0KGwpLCB4KSAhPT0gdW5kZWZpbmVkID8gbCA6IGQpKVxuXG5leHBvcnQgY29uc3QgY2hvaWNlID0gKC4uLmxzKSA9PiBjaG9vc2UoeCA9PiB7XG4gIGNvbnN0IGkgPSBscy5maW5kSW5kZXgobCA9PiBnZXRJKGxpZnQobCksIHgpICE9PSB1bmRlZmluZWQpXG4gIHJldHVybiAwIDw9IGkgPyBsc1tpXSA6IG5vdGhpbmdcbn0pXG5cbmNvbnN0IHJlcGxhY2VyID0gKGlubiwgb3V0KSA9PiB4ID0+IFIuZXF1YWxzKHgsIGlubikgPyBvdXQgOiB4XG5jb25zdCBub3JtYWxpemVyID0gZm4gPT4gbGVuc0koZm4sIGZuKVxuXG5leHBvcnQgY29uc3QgcmVwbGFjZSA9IGN1cnJ5MigoaW5uLCBvdXQpID0+XG4gIGxlbnNJKHJlcGxhY2VyKGlubiwgb3V0KSwgcmVwbGFjZXIob3V0LCBpbm4pKSlcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRzID0gcmVwbGFjZSh1bmRlZmluZWQpXG5leHBvcnQgY29uc3QgcmVxdWlyZWQgPSBpbm4gPT4gcmVwbGFjZShpbm4sIHVuZGVmaW5lZClcbmV4cG9ydCBjb25zdCBkZWZpbmUgPSB2ID0+IG5vcm1hbGl6ZXIocmVwbGFjZXIodW5kZWZpbmVkLCB2KSlcblxuZXhwb3J0IGNvbnN0IHZhbHVlT3IgPSB2ID0+XG4gIGxlbnNJKHggPT4geCA9PT0gdW5kZWZpbmVkIHx8IHggPT09IG51bGwgPyB2IDogeCwgaWQpXG5cbmV4cG9ydCBjb25zdCBub3JtYWxpemUgPSB0cmFuc2Zvcm0gPT4gbm9ybWFsaXplcih0b1BhcnRpYWwodHJhbnNmb3JtKSlcblxuY29uc3QgaXNQcm9wID0geCA9PiB0eXBlb2YgeCA9PT0gXCJzdHJpbmdcIlxuXG5leHBvcnQgY29uc3QgcHJvcCA9IGFzc2VydChcImEgc3RyaW5nXCIsIGlzUHJvcClcblxuY29uc3QgbGlmdFByb3AgPSBrID0+IF9jID0+IGlubmVyID0+IG8gPT4gaW5uZXIoaXNPYmplY3QobykgPyBvW2tdIDogdW5kZWZpbmVkKS5tYXAodiA9PiB7XG4gIGNvbnN0IG9PdXQgPSBpc09iamVjdChvKSA/IG8gOiBlbXB0eVxuICByZXR1cm4gdiA9PT0gdW5kZWZpbmVkID8gZGVsZXRlS2V5KGssIG9PdXQpIDogc2V0S2V5KGssIHYsIG9PdXQpXG59KVxuXG5leHBvcnQgY29uc3QgZmluZCA9IHByZWRpY2F0ZSA9PiBjaG9vc2UoeHMgPT4ge1xuICBpZiAoaXNBcnJheSh4cykpIHtcbiAgICBjb25zdCBpID0geHMuZmluZEluZGV4KHByZWRpY2F0ZSlcbiAgICByZXR1cm4gaSA8IDAgPyBhcHBlbmQgOiBpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGFwcGVuZFxuICB9XG59KVxuXG5leHBvcnQgY29uc3QgZmluZFdpdGggPSAoLi4ubHMpID0+IHtcbiAgY29uc3QgbGxzID0gbGlmdChjb21wb3NlKC4uLmxzKSlcbiAgcmV0dXJuIGNvbXBvc2UoZmluZCh4ID0+IGdldEkobGxzLCB4KSAhPT0gdW5kZWZpbmVkKSwgbGxzKVxufVxuXG5jb25zdCBpc0luZGV4ID0geCA9PiBOdW1iZXIuaXNJbnRlZ2VyKHgpICYmIDAgPD0geFxuXG5leHBvcnQgY29uc3QgaW5kZXggPSBhc3NlcnQoXCJhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyXCIsIGlzSW5kZXgpXG5cbmNvbnN0IGxpZnRJbmRleCA9IGkgPT4gX2MgPT4gaW5uZXIgPT4geHMgPT4gaW5uZXIoaXNBcnJheSh4cykgPyB4c1tpXSA6IHVuZGVmaW5lZCkubWFwKHggPT4ge1xuICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFpc0FycmF5KHhzKSlcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICBpZiAoeHMubGVuZ3RoIDw9IGkpXG4gICAgICByZXR1cm4gZHJvcHBlZCh4cylcbiAgICBjb25zdCB5cyA9IHhzLnNsaWNlKDApXG4gICAgeXMuc3BsaWNlKGksIDEpXG4gICAgcmV0dXJuIGRyb3BwZWQoeXMpXG4gIH0gZWxzZSB7XG4gICAgaWYgKCFpc0FycmF5KHhzKSlcbiAgICAgIHJldHVybiBBcnJheShpKS5jb25jYXQoW3hdKVxuICAgIGlmICh4cy5sZW5ndGggPD0gaSlcbiAgICAgIHJldHVybiB4cy5jb25jYXQoQXJyYXkoaSAtIHhzLmxlbmd0aCksIFt4XSlcbiAgICBjb25zdCB5cyA9IHhzLnNsaWNlKDApXG4gICAgeXNbaV0gPSB4XG4gICAgcmV0dXJuIHlzXG4gIH1cbn0pXG5cbmV4cG9ydCBjb25zdCBhcHBlbmQgPSBsZW5zSShzbmQsICh4LCB4cykgPT5cbiAgeCA9PT0gdW5kZWZpbmVkID8gdW5BcnJheSh4cykgOiBpc0FycmF5KHhzKSA/IHhzLmNvbmNhdChbeF0pIDogW3hdKVxuXG5leHBvcnQgY29uc3QgZmlsdGVyID0gcCA9PiBsZW5zSSh4cyA9PiB1bkFycmF5KHhzKSAmJiB4cy5maWx0ZXIocCksICh5cywgeHMpID0+XG4gIGRyb3BwZWQobWtBcnJheSh5cykuY29uY2F0KG1rQXJyYXkoeHMpLmZpbHRlcih4ID0+ICFwKHgpKSkpKVxuXG5leHBvcnQgY29uc3QgYXVnbWVudCA9IHRlbXBsYXRlID0+IGxlbnNJKFxuICB4ID0+IHtcbiAgICBpZiAoaXNPYmplY3QoeCkpIHtcbiAgICAgIGNvbnN0IHogPSB7Li4ueH1cbiAgICAgIGZvciAoY29uc3QgayBpbiB0ZW1wbGF0ZSlcbiAgICAgICAgeltrXSA9IHRlbXBsYXRlW2tdKHopXG4gICAgICByZXR1cm4gelxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuICB9LFxuICAoeSwgY0luKSA9PiB7XG4gICAgaWYgKGlzT2JqZWN0KHkpKSB7XG4gICAgICBjb25zdCBjID0gaXNPYmplY3QoY0luKSA/IGNJbiA6IGVtcHR5XG4gICAgICBsZXQgelxuICAgICAgY29uc3Qgc2V0ID0gKGssIHYpID0+IHtcbiAgICAgICAgaWYgKHVuZGVmaW5lZCA9PT0geilcbiAgICAgICAgICB6ID0ge31cbiAgICAgICAgeltrXSA9IHZcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgayBpbiB5KSB7XG4gICAgICAgIGlmICghKGsgaW4gdGVtcGxhdGUpKVxuICAgICAgICAgIHNldChrLCB5W2tdKVxuICAgICAgICBlbHNlXG4gICAgICAgICAgaWYgKGsgaW4gYylcbiAgICAgICAgICAgIHNldChrLCBjW2tdKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHpcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cbiAgfSlcblxuZXhwb3J0IGNvbnN0IHBpY2sgPSB0ZW1wbGF0ZSA9PiBsZW5zSShcbiAgYyA9PiB7XG4gICAgbGV0IHJcbiAgICBmb3IgKGNvbnN0IGsgaW4gdGVtcGxhdGUpIHtcbiAgICAgIGNvbnN0IHYgPSBnZXRJKGxpZnQodGVtcGxhdGVba10pLCBjKVxuICAgICAgaWYgKHYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAociA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgIHIgPSB7fVxuICAgICAgICByW2tdID0gdlxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gclxuICB9LFxuICAobyA9IGVtcHR5LCBjSW4pID0+IHtcbiAgICBsZXQgYyA9IGNJblxuICAgIGZvciAoY29uc3QgayBpbiB0ZW1wbGF0ZSlcbiAgICAgIGMgPSBzZXRJKGxpZnQodGVtcGxhdGVba10pLCBvW2tdLCBjKVxuICAgIHJldHVybiBjXG4gIH0pXG5cbmV4cG9ydCBjb25zdCBpZGVudGl0eSA9IGxlbnNJKGlkLCBpZClcblxuZXhwb3J0IGNvbnN0IHByb3BzID0gKC4uLmtzKSA9PiBwaWNrKFIuemlwT2JqKGtzLCBrcykpXG5cbmNvbnN0IHNob3cgPSAoLi4ubGFiZWxzKSA9PiB4ID0+IGNvbnNvbGUubG9nKC4uLmxhYmVscywgeCkgfHwgeFxuXG5leHBvcnQgY29uc3QgbG9nID0gKC4uLmxhYmVscykgPT5cbiAgbGVuc0koc2hvdyguLi5sYWJlbHMsIFwiZ2V0XCIpLCBzaG93KC4uLmxhYmVscywgXCJzZXRcIikpXG5cbmV4cG9ydCBjb25zdCBzZXF1ZW5jZSA9IGNvbnN0cnVjdG9yID0+IGlubmVyID0+IHRhcmdldCA9PlxuICB3YXJuKFwiYHNlcXVlbmNlYCBpcyBleHBlcmltZW50YWwgYW5kIG1pZ2h0IGJlIHJlbW92ZWQsIHJlbmFtZWQgb3IgY2hhbmdlZCBzZW1hbnRpY2FsbHkgYmVmb3JlIG5leHQgbWFqb3IgcmVsZWFzZVwiKSB8fFxuICBSLnRyYXZlcnNlKGNvbnN0cnVjdG9yLCBpbm5lciwgbWtBcnJheSh0YXJnZXQpKVxuICAubWFwKGZpbHRlcmVkKVxuXG5leHBvcnQgY29uc3Qgb3B0aW9uYWwgPVxuICBjb21wb3NlKGxlbnNJKHRvUGFydGlhbCh4ID0+IFt4XSksXG4gICAgICAgICAgICAgICAgdG9QYXJ0aWFsKChbeF0pID0+IHgpKSxcbiAgICAgICAgICBzZXF1ZW5jZSlcblxuZXhwb3J0IGNvbnN0IGZyb21SYW1kYSA9IGwgPT4gX2NvbnN0cnVjdG9yID0+IGxcbmNvbnN0IGZhbnRhc3kgPSAoKSA9PiB7dGhyb3cgbmV3IEVycm9yKFwiU29ycnksIGB0b1JhbWRhYCBpcyBvbmx5IGZhbnRhc3khXCIpfVxuZXhwb3J0IGNvbnN0IHRvUmFtZGEgPSBsID0+IGxpZnQobCkoZmFudGFzeSlcblxuZXhwb3J0IGNvbnN0IGZyb21BcnJheUJ5ID0gaWQgPT5cbiAgd2FybihcImBmcm9tQXJyYXlCeWAgaXMgZXhwZXJpbWVudGFsIGFuZCBtaWdodCBiZSByZW1vdmVkLCByZW5hbWVkIG9yIGNoYW5nZWQgc2VtYW50aWNhbGx5IGJlZm9yZSBuZXh0IG1ham9yIHJlbGVhc2VcIikgfHxcbiAgbGVuc0koeHMgPT4ge1xuICAgIGlmIChpc0FycmF5KHhzKSkge1xuICAgICAgY29uc3QgbyA9IHt9XG4gICAgICBmb3IgKGxldCBpPTAsIG49eHMubGVuZ3RoOyBpPG47ICsraSkge1xuICAgICAgICBjb25zdCB4ID0geHNbaV1cbiAgICAgICAgb1t4W2lkXV0gPSB4XG4gICAgICB9XG4gICAgICByZXR1cm4gb1xuICAgIH1cbiAgfSxcbiAgbyA9PiBpc09iamVjdChvKSA/IFIudmFsdWVzKG8pIDogdW5kZWZpbmVkKVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb3NlXG4iXX0=
{
"name": "partial.lenses",
"version": "3.9.1",
"version": "3.9.2",
"description": "Partial lenses",

@@ -37,2 +37,3 @@ "main": "lib/partial.lenses.js",

"babel-register": "^6.16.3",
"benchmark": "^2.1.1",
"eslint": "^3.8.1",

@@ -39,0 +40,0 @@ "mocha": "^3.1.2",

@@ -35,2 +35,19 @@ import * as R from "ramda"

const curry2 = fn => function (a, b) {
switch (arguments.length) {
case 1: return b => fn(a, b)
default: return fn(a, b)
}
}
const curry3 = fn => function (a, b, c) {
switch (arguments.length) {
case 1: return curry2((b, c) => fn(a, b, c))
case 2: return c => fn(a, b, c)
default: return fn(a, b, c)
}
}
//
const isArray = x => x && x.constructor === Array

@@ -40,3 +57,2 @@ const isObject = x => x && x.constructor === Object

const unArray = x => isArray(x) ? x : undefined
const unObject = x => isObject(x) ? x : undefined

@@ -63,23 +79,21 @@ const mkArray = x => isArray(x) ? x : []

const dropped = xs => {
for (const _ in xs)
return xs
return undefined
}
//
const empty = {}
const deleteKey = (k, o = {}) => {
let r
for (const p in o) {
if (p !== k) {
if (undefined === r)
r = {}
r[p] = o[p]
}
}
return r
const deleteKey = (k, o) => {
const r = Object.assign({}, o)
delete r[k]
return dropped(r)
}
const setKey = (k, v, o = {}) => {
if (k in o && R.equals(v, o[k]))
return o
const r = {[k]: v}
for (const p in o)
if (p !== k)
r[p] = o[p]
const setKey = (k, v, o) => {
const r = Object.assign({}, o)
r[k] = v
return r

@@ -90,6 +104,2 @@ }

const dropped = xs => Object.keys(xs).length === 0 ? undefined : xs
//
const toPartial = transform => x => undefined === x ? x : transform(x)

@@ -99,13 +109,6 @@

const filtered =
toPartial(R.pipe(R.filter(x => x !== undefined), dropped))
const filtered = toPartial(xs => dropped(xs.filter(x => x !== undefined)))
//
const conserve = (c1, c0) => R.equals(c1, c0) ? c0 : c1
const toConserve = f => (y, c0) => conserve(f(y, c0), c0)
//
const seemsLens = x => typeof x === "function" && x.length === 1

@@ -126,5 +129,5 @@

export const remove = R.curry((l, s) => setI(lift(l), undefined, s))
export const remove = curry2((l, s) => setI(lift(l), undefined, s))
export const removeAll = R.curry((lens, data) => {
export const removeAll = curry2((lens, data) => {
warn("`removeAll` is deprecated and will be removed in next major version --- use a different approach.")

@@ -141,14 +144,13 @@ while (get(lens, data) !== undefined)

inner(getter(target)).map(focus => setter(focus, target))
const isoI = (to, from) => lensI(to, toConserve(from))
const collectI = (l, s) => l(Const)(Single)(s).value
export const lens = R.curry(lensI)
export const modify = R.curry((l, x2x, s) => modifyI(lift(l), x2x, s))
export const set = R.curry((l, x, s) => setI(lift(l), x, s))
export const get = R.curry((l, s) => getI(lift(l), s))
export const collect = R.curry((l, s) =>
export const lens = curry2(lensI)
export const modify = curry3((l, x2y, s) => modifyI(lift(l), x2y, s))
export const set = curry3((l, x, s) => setI(lift(l), x, s))
export const get = curry2((l, s) => getI(lift(l), s))
export const collect = curry2((l, s) =>
warn("`collect` is experimental and might be removed, renamed or changed semantically before next major release") ||
mkArray(filtered(collectI(lift(l), s))))
export const chain = R.curry((x2yL, xL) =>
export const chain = curry2((x2yL, xL) =>
compose(xL, choose(xO => xO === undefined ? nothing : x2yL(xO))))

@@ -164,3 +166,3 @@

export const orElse =
R.curry((d, l) => choose(x => getI(lift(l), x) !== undefined ? l : d))
curry2((d, l) => choose(x => getI(lift(l), x) !== undefined ? l : d))

@@ -173,6 +175,6 @@ export const choice = (...ls) => choose(x => {

const replacer = (inn, out) => x => R.equals(x, inn) ? out : x
const normalizer = fn => isoI(fn, fn)
const normalizer = fn => lensI(fn, fn)
export const replace = R.curry((inn, out) =>
isoI(replacer(inn, out), replacer(out, inn)))
export const replace = curry2((inn, out) =>
lensI(replacer(inn, out), replacer(out, inn)))

@@ -184,3 +186,3 @@ export const defaults = replace(undefined)

export const valueOr = v =>
lensI(x => x === undefined || x === null ? v : x, conserve)
lensI(x => x === undefined || x === null ? v : x, id)

@@ -193,5 +195,5 @@ export const normalize = transform => normalizer(toPartial(transform))

const liftProp = k => lensI(o => unObject(o) && o[k], (v, oIn) => {
const o = unObject(oIn)
return v === undefined ? deleteKey(k, o) : setKey(k, v, o)
const liftProp = k => _c => inner => o => inner(isObject(o) ? o[k] : undefined).map(v => {
const oOut = isObject(o) ? o : empty
return v === undefined ? deleteKey(k, oOut) : setKey(k, v, oOut)
})

@@ -217,9 +219,11 @@

const liftIndex = i => lensI(xs => unArray(xs) && xs[i], (x, xs) => {
const liftIndex = i => _c => inner => xs => inner(isArray(xs) ? xs[i] : undefined).map(x => {
if (x === undefined) {
if (!isArray(xs))
return undefined
if (i < xs.length)
return dropped(xs.slice(0, i).concat(xs.slice(i+1)))
return dropped(xs)
if (xs.length <= i)
return dropped(xs)
const ys = xs.slice(0)
ys.splice(i, 1)
return dropped(ys)
} else {

@@ -230,4 +234,2 @@ if (!isArray(xs))

return xs.concat(Array(i - xs.length), [x])
if (R.equals(x, xs[i]))
return xs
const ys = xs.slice(0)

@@ -243,3 +245,3 @@ ys[i] = x

export const filter = p => lensI(xs => unArray(xs) && xs.filter(p), (ys, xs) =>
conserve(dropped(R.concat(mkArray(ys), mkArray(xs).filter(R.complement(p)))), xs))
dropped(mkArray(ys).concat(mkArray(xs).filter(x => !p(x)))))

@@ -257,5 +259,5 @@ export const augment = template => lensI(

},
toConserve((y, cIn) => {
(y, cIn) => {
if (isObject(y)) {
const c = unObject(cIn) || {}
const c = isObject(cIn) ? cIn : empty
let z

@@ -278,3 +280,3 @@ const set = (k, v) => {

}
}))
})

@@ -301,3 +303,3 @@ export const pick = template => lensI(

export const identity = lensI(id, conserve)
export const identity = lensI(id, id)

@@ -327,3 +329,3 @@ export const props = (...ks) => pick(R.zipObj(ks, ks))

warn("`fromArrayBy` is experimental and might be removed, renamed or changed semantically before next major release") ||
isoI(xs => {
lensI(xs => {
if (isArray(xs)) {

@@ -338,4 +340,4 @@ const o = {}

},
o => unObject(o) && R.values(o))
o => isObject(o) ? R.values(o) : undefined)
export default compose

@@ -86,5 +86,5 @@ import * as R from "ramda"

testEq('L.set(L.find(R.equals(2)), undefined, [,,2])', undefined)
testEq('L.set(L.find(R.equals(2)), undefined, [1, 2, 3])', [1, 3])
testEq('L.set(L.find(R.equals(2)), 4, [1, 2, 3])', [1, 4, 3])
testEq('L.set(L.find(R.equals(2)), 2, [1, 4, 3])', [1, 4, 3, 2])
testEq('L.set(L.find(R.equals(2)))(undefined, [1, 2, 3])', [1, 3])
testEq('L.set(L.find(R.equals(2)))(4)([1, 2, 3])', [1, 4, 3])
testEq('L.set(L.find(R.equals(2)), 2)([1, 4, 3])', [1, 4, 3, 2])
testEq('L.set(L.find(R.equals(2)), 2, undefined)', [2])

@@ -91,0 +91,0 @@ testEq('L.set(L.find(R.equals(2)), 2, [])', [2])

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