partial.lenses
Advanced tools
Comparing version 0.4.0 to 0.5.0
@@ -8,2 +8,3 @@ "use strict"; | ||
}); | ||
exports.lift = undefined; | ||
@@ -68,3 +69,3 @@ var _ramda = require("ramda"); | ||
var lift = function lift(l) { | ||
var lift = exports.lift = function lift(l) { | ||
switch (typeof l === "undefined" ? "undefined" : _typeof(l)) { | ||
@@ -88,11 +89,47 @@ case "string": | ||
L.compose = _ramda2.default.compose; | ||
L.compose = L; | ||
L.delete = _ramda2.default.curry(function (l, s) { | ||
return _ramda2.default.set(l, undefined, s); | ||
return _ramda2.default.set(lift(l), undefined, s); | ||
}); | ||
L.lens = _ramda2.default.lens; | ||
L.over = _ramda2.default.over; | ||
L.set = _ramda2.default.set; | ||
L.view = _ramda2.default.view; | ||
L.over = _ramda2.default.curry(function (l, x2x, s) { | ||
return _ramda2.default.over(lift(l), x2x, s); | ||
}); | ||
L.set = _ramda2.default.curry(function (l, x, s) { | ||
return _ramda2.default.set(lift(l), x, s); | ||
}); | ||
L.view = _ramda2.default.curry(function (l, s) { | ||
return _ramda2.default.view(lift(l), s); | ||
}); | ||
L.firstOf = function () { | ||
for (var _len2 = arguments.length, ls = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { | ||
ls[_key2] = arguments[_key2]; | ||
} | ||
switch (ls.length) { | ||
case 0: | ||
throw new Error("firstOf called without arguments"); | ||
case 1: | ||
return lift(ls[0]); | ||
default: | ||
var choose = function choose(target, otherwise) { | ||
for (var i = 0, n = ls.length; i < n; ++i) { | ||
var l = ls[i]; | ||
var r = _ramda2.default.view(lift(l), target); | ||
if (undefined !== r) return otherwise ? l : r; | ||
} | ||
return otherwise; | ||
}; | ||
return function (toFunctor) { | ||
return function (target) { | ||
return _ramda2.default.map(function (focus) { | ||
return _ramda2.default.set(lift(choose(target, ls[0])), focus, target); | ||
}, toFunctor(choose(target))); | ||
}; | ||
}; | ||
} | ||
}; | ||
L.replace = _ramda2.default.curry(function (inn, out) { | ||
@@ -110,2 +147,5 @@ return _ramda2.default.lens(function (x) { | ||
}; | ||
L.define = function (v) { | ||
return _ramda2.default.compose(L.required(v), L.default(v)); | ||
}; | ||
@@ -161,2 +201,2 @@ L.normalize = function (transform) { | ||
exports.default = L; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9wYXJ0aWFsLmxlbnNlcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUlBLElBQU0sWUFBWSxTQUFaLFNBQVksQ0FBQyxDQUFELEVBQUksQ0FBSixFQUFVO0FBQzFCLE1BQUksTUFBTSxTQUFOLElBQW1CLEVBQUUsS0FBSyxDQUFMLENBQUYsRUFDckIsT0FBTyxDQUFQLENBREY7QUFFQSxNQUFJLGFBQUosQ0FIMEI7QUFJMUIsT0FBSyxJQUFNLENBQU4sSUFBVyxDQUFoQixFQUFtQjtBQUNqQixRQUFJLE1BQU0sQ0FBTixFQUFTO0FBQ1gsVUFBSSxjQUFjLENBQWQsRUFDRixJQUFJLEVBQUosQ0FERjtBQUVBLFFBQUUsQ0FBRixJQUFPLEVBQUUsQ0FBRixDQUFQLENBSFc7S0FBYjtHQURGO0FBT0EsU0FBTyxDQUFQLENBWDBCO0NBQVY7O0FBY2xCLElBQU0sU0FBUyxTQUFULE1BQVMsQ0FBQyxDQUFELEVBQUksQ0FBSixFQUFPLENBQVAsRUFBYTtBQUMxQixNQUFJLE1BQU0sU0FBTixFQUNGLDJCQUFTLEdBQUksRUFBYixDQURGO0FBRUEsTUFBSSxLQUFLLENBQUwsSUFBVSxnQkFBRSxNQUFGLENBQVMsQ0FBVCxFQUFZLEVBQUUsQ0FBRixDQUFaLENBQVYsRUFDRixPQUFPLENBQVAsQ0FERjtBQUVBLE1BQU0sd0JBQU0sR0FBSSxFQUFWLENBTG9CO0FBTTFCLE9BQUssSUFBTSxDQUFOLElBQVcsQ0FBaEI7QUFDRSxRQUFJLE1BQU0sQ0FBTixFQUNGLEVBQUUsQ0FBRixJQUFPLEVBQUUsQ0FBRixDQUFQLENBREY7R0FERixPQUdPLENBQVAsQ0FUMEI7Q0FBYjs7OztBQWNmLElBQU0sVUFBVSxTQUFWLE9BQVU7U0FBTSxPQUFPLElBQVAsQ0FBWSxFQUFaLEVBQWdCLE1BQWhCLEtBQTJCLENBQTNCLEdBQStCLFNBQS9CLEdBQTJDLEVBQTNDO0NBQU47Ozs7QUFJaEIsSUFBTSxZQUFZLFNBQVosU0FBWTtTQUFhO1dBQUssY0FBYyxDQUFkLEdBQWtCLENBQWxCLEdBQXNCLFVBQVUsQ0FBVixDQUF0QjtHQUFMO0NBQWI7Ozs7QUFJbEIsSUFBTSxXQUFXLFNBQVgsUUFBVztTQUFLLFVBQUMsRUFBRCxFQUFLLENBQUwsRUFBVztBQUMvQixRQUFNLElBQUksRUFBRSxFQUFGLEVBQU0sQ0FBTixDQUFKLENBRHlCO0FBRS9CLFdBQU8sZ0JBQUUsTUFBRixDQUFTLENBQVQsRUFBWSxDQUFaLElBQWlCLENBQWpCLEdBQXFCLENBQXJCLENBRndCO0dBQVg7Q0FBTDs7OztBQU9qQixJQUFNLE9BQU8sU0FBUCxJQUFPLElBQUs7QUFDaEIsaUJBQWUsNENBQWY7QUFDQSxTQUFLLFFBQUw7QUFBZSxhQUFPLEVBQUUsSUFBRixDQUFPLENBQVAsQ0FBUCxDQUFmO0FBREEsU0FFSyxRQUFMO0FBQWUsYUFBTyxFQUFFLEtBQUYsQ0FBUSxDQUFSLENBQVAsQ0FBZjtBQUZBO0FBR2UsYUFBTyxDQUFQLENBQWY7QUFIQSxHQURnQjtDQUFMOztBQVFiLElBQU0sSUFBSSxTQUFKLENBQUk7b0NBQUk7Ozs7U0FBTyxHQUFHLE1BQUgsS0FBYyxDQUFkLEdBQWtCLEtBQUssR0FBRyxDQUFILENBQUwsQ0FBbEIsR0FBZ0MsZ0JBQUUsT0FBRiwyQ0FBYSxHQUFHLEdBQUgsQ0FBTyxJQUFQLEVBQWIsQ0FBaEM7Q0FBWDs7QUFFVixFQUFFLE9BQUYsR0FBWSxnQkFBRSxPQUFGO0FBQ1osRUFBRSxNQUFGLEdBQVcsZ0JBQUUsS0FBRixDQUFRLFVBQUMsQ0FBRCxFQUFJLENBQUo7U0FBVSxnQkFBRSxHQUFGLENBQU0sQ0FBTixFQUFTLFNBQVQsRUFBb0IsQ0FBcEI7Q0FBVixDQUFuQjtBQUNBLEVBQUUsSUFBRixHQUFTLGdCQUFFLElBQUY7QUFDVCxFQUFFLElBQUYsR0FBUyxnQkFBRSxJQUFGO0FBQ1QsRUFBRSxHQUFGLEdBQVEsZ0JBQUUsR0FBRjtBQUNSLEVBQUUsSUFBRixHQUFTLGdCQUFFLElBQUY7O0FBRVQsRUFBRSxPQUFGLEdBQVksZ0JBQUUsS0FBRixDQUFRLFVBQUMsR0FBRCxFQUFNLEdBQU47U0FDbEIsZ0JBQUUsSUFBRixDQUFPO1dBQUssZ0JBQUUsTUFBRixDQUFTLENBQVQsRUFBWSxHQUFaLElBQW1CLEdBQW5CLEdBQXlCLENBQXpCO0dBQUwsRUFDQSxTQUFTO1dBQUssZ0JBQUUsTUFBRixDQUFTLENBQVQsRUFBWSxHQUFaLElBQW1CLEdBQW5CLEdBQXlCLENBQXpCO0dBQUwsQ0FEaEI7Q0FEa0IsQ0FBcEI7O0FBSUEsRUFBRSxPQUFGLEdBQVksRUFBRSxPQUFGLENBQVUsU0FBVixDQUFaO0FBQ0EsRUFBRSxRQUFGLEdBQWE7U0FBTyxFQUFFLE9BQUYsQ0FBVSxHQUFWLEVBQWUsU0FBZjtDQUFQOztBQUViLEVBQUUsU0FBRixHQUFjO1NBQ1osZ0JBQUUsSUFBRixDQUFPLFVBQVUsU0FBVixDQUFQLEVBQTZCLFNBQVMsVUFBVSxTQUFWLENBQVQsQ0FBN0I7Q0FEWTs7QUFHZCxFQUFFLElBQUYsR0FBUztTQUNQLGdCQUFFLElBQUYsQ0FBTztXQUFLLEtBQUssRUFBRSxDQUFGLENBQUw7R0FBTCxFQUNBLFVBQUMsQ0FBRCxFQUFJLENBQUo7V0FBVSxNQUFNLFNBQU4sR0FBa0IsVUFBVSxDQUFWLEVBQWEsQ0FBYixDQUFsQixHQUFvQyxPQUFPLENBQVAsRUFBVSxDQUFWLEVBQWEsQ0FBYixDQUFwQztHQUFWO0NBRkE7O0FBSVQsRUFBRSxJQUFGLEdBQVM7U0FBYSxnQkFBRSxJQUFGLENBQU87V0FBTSxNQUFNLEdBQUcsSUFBSCxDQUFRLFNBQVIsQ0FBTjtHQUFOLEVBQWdDLFVBQUMsQ0FBRCxFQUFJLEVBQUosRUFBVztBQUN0RSxRQUFJLE1BQU0sU0FBTixFQUFpQjtBQUNuQixVQUFJLE9BQU8sU0FBUCxFQUNGLE9BQU8sU0FBUCxDQURGO0FBRUEsVUFBTSxJQUFJLEdBQUcsU0FBSCxDQUFhLFNBQWIsQ0FBSixDQUhhO0FBSW5CLFVBQUksSUFBSSxDQUFKLEVBQ0YsT0FBTyxFQUFQLENBREY7QUFFQSxhQUFPLFFBQVEsR0FBRyxLQUFILENBQVMsQ0FBVCxFQUFZLENBQVosRUFBZSxNQUFmLENBQXNCLEdBQUcsS0FBSCxDQUFTLElBQUUsQ0FBRixDQUEvQixDQUFSLENBQVAsQ0FObUI7S0FBckIsTUFPTztBQUNMLFVBQUksT0FBTyxTQUFQLEVBQ0YsT0FBTyxDQUFDLENBQUQsQ0FBUCxDQURGO0FBRUEsVUFBTSxJQUFJLEdBQUcsU0FBSCxDQUFhLFNBQWIsQ0FBSixDQUhEO0FBSUwsVUFBSSxJQUFJLENBQUosRUFDRixPQUFPLEdBQUcsTUFBSCxDQUFVLENBQUMsQ0FBRCxDQUFWLENBQVAsQ0FERjtBQUVBLFVBQUksZ0JBQUUsTUFBRixDQUFTLENBQVQsRUFBWSxHQUFHLENBQUgsQ0FBWixDQUFKLEVBQ0UsT0FBTyxFQUFQLENBREY7QUFFQSxhQUFPLEdBQUcsS0FBSCxDQUFTLENBQVQsRUFBWSxDQUFaLEVBQWUsTUFBZixDQUFzQixDQUFDLENBQUQsQ0FBdEIsRUFBMkIsR0FBRyxLQUFILENBQVMsSUFBRSxDQUFGLENBQXBDLENBQVAsQ0FSSztLQVBQO0dBRDJEO0NBQXBEOztBQW9CVCxFQUFFLEtBQUYsR0FBVTtTQUFLLGdCQUFFLElBQUYsQ0FBTztXQUFNLE1BQU0sR0FBRyxDQUFILENBQU47R0FBTixFQUFtQixVQUFDLENBQUQsRUFBSSxFQUFKLEVBQVc7QUFDbEQsUUFBSSxNQUFNLFNBQU4sRUFBaUI7QUFDbkIsVUFBSSxPQUFPLFNBQVAsRUFDRixPQUFPLFNBQVAsQ0FERjtBQUVBLFVBQUksSUFBSSxHQUFHLE1BQUgsRUFDTixPQUFPLFFBQVEsR0FBRyxLQUFILENBQVMsQ0FBVCxFQUFZLENBQVosRUFBZSxNQUFmLENBQXNCLEdBQUcsS0FBSCxDQUFTLElBQUUsQ0FBRixDQUEvQixDQUFSLENBQVAsQ0FERjtBQUVBLGFBQU8sRUFBUCxDQUxtQjtLQUFyQixNQU1PO0FBQ0wsVUFBSSxPQUFPLFNBQVAsRUFDRixPQUFPLE1BQU0sQ0FBTixFQUFTLE1BQVQsQ0FBZ0IsQ0FBQyxDQUFELENBQWhCLENBQVAsQ0FERjtBQUVBLFVBQUksR0FBRyxNQUFILElBQWEsQ0FBYixFQUNGLE9BQU8sR0FBRyxNQUFILENBQVUsTUFBTSxJQUFJLEdBQUcsTUFBSCxDQUFwQixFQUFnQyxDQUFDLENBQUQsQ0FBaEMsQ0FBUCxDQURGO0FBRUEsVUFBSSxnQkFBRSxNQUFGLENBQVMsQ0FBVCxFQUFZLEdBQUcsQ0FBSCxDQUFaLENBQUosRUFDRSxPQUFPLEVBQVAsQ0FERjtBQUVBLGFBQU8sR0FBRyxLQUFILENBQVMsQ0FBVCxFQUFZLENBQVosRUFBZSxNQUFmLENBQXNCLENBQUMsQ0FBRCxDQUF0QixFQUEyQixHQUFHLEtBQUgsQ0FBUyxJQUFFLENBQUYsQ0FBcEMsQ0FBUCxDQVBLO0tBTlA7R0FEdUM7Q0FBL0I7O2tCQWtCSyIsImZpbGUiOiJwYXJ0aWFsLmxlbnNlcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSIGZyb20gXCJyYW1kYVwiXG5cbi8vXG5cbmNvbnN0IGRlbGV0ZUtleSA9IChrLCBvKSA9PiB7XG4gIGlmIChvID09PSB1bmRlZmluZWQgfHwgIShrIGluIG8pKVxuICAgIHJldHVybiBvXG4gIGxldCByXG4gIGZvciAoY29uc3QgcCBpbiBvKSB7XG4gICAgaWYgKHAgIT09IGspIHtcbiAgICAgIGlmICh1bmRlZmluZWQgPT09IHIpXG4gICAgICAgIHIgPSB7fVxuICAgICAgcltwXSA9IG9bcF1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJcbn1cblxuY29uc3Qgc2V0S2V5ID0gKGssIHYsIG8pID0+IHtcbiAgaWYgKG8gPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4ge1trXTogdn1cbiAgaWYgKGsgaW4gbyAmJiBSLmVxdWFscyh2LCBvW2tdKSlcbiAgICByZXR1cm4gb1xuICBjb25zdCByID0ge1trXTogdn1cbiAgZm9yIChjb25zdCBwIGluIG8pXG4gICAgaWYgKHAgIT09IGspXG4gICAgICByW3BdID0gb1twXVxuICByZXR1cm4gclxufVxuXG4vL1xuXG5jb25zdCBkcm9wcGVkID0geHMgPT4gT2JqZWN0LmtleXMoeHMpLmxlbmd0aCA9PT0gMCA/IHVuZGVmaW5lZCA6IHhzXG5cbi8vXG5cbmNvbnN0IHRvUGFydGlhbCA9IHRyYW5zZm9ybSA9PiB4ID0+IHVuZGVmaW5lZCA9PT0geCA/IHggOiB0cmFuc2Zvcm0oeClcblxuLy9cblxuY29uc3QgY29uc2VydmUgPSBmID0+IChuMCwgbykgPT4ge1xuICBjb25zdCBuID0gZihuMCwgbylcbiAgcmV0dXJuIFIuZXF1YWxzKG4sIG8pID8gbyA6IG5cbn1cblxuLy9cblxuY29uc3QgbGlmdCA9IGwgPT4ge1xuICBzd2l0Y2ggKHR5cGVvZiBsKSB7XG4gIGNhc2UgXCJzdHJpbmdcIjogcmV0dXJuIEwucHJvcChsKVxuICBjYXNlIFwibnVtYmVyXCI6IHJldHVybiBMLmluZGV4KGwpXG4gIGRlZmF1bHQ6ICAgICAgIHJldHVybiBsXG4gIH1cbn1cblxuY29uc3QgTCA9ICguLi5scykgPT4gbHMubGVuZ3RoID09PSAxID8gbGlmdChsc1swXSkgOiBSLmNvbXBvc2UoLi4ubHMubWFwKGxpZnQpKVxuXG5MLmNvbXBvc2UgPSBSLmNvbXBvc2VcbkwuZGVsZXRlID0gUi5jdXJyeSgobCwgcykgPT4gUi5zZXQobCwgdW5kZWZpbmVkLCBzKSlcbkwubGVucyA9IFIubGVuc1xuTC5vdmVyID0gUi5vdmVyXG5MLnNldCA9IFIuc2V0XG5MLnZpZXcgPSBSLnZpZXdcblxuTC5yZXBsYWNlID0gUi5jdXJyeSgoaW5uLCBvdXQpID0+XG4gIFIubGVucyh4ID0+IFIuZXF1YWxzKHgsIGlubikgPyBvdXQgOiB4LFxuICAgICAgICAgY29uc2VydmUoeSA9PiBSLmVxdWFscyh5LCBvdXQpID8gaW5uIDogeSkpKVxuXG5MLmRlZmF1bHQgPSBMLnJlcGxhY2UodW5kZWZpbmVkKVxuTC5yZXF1aXJlZCA9IGlubiA9PiBMLnJlcGxhY2UoaW5uLCB1bmRlZmluZWQpXG5cbkwubm9ybWFsaXplID0gdHJhbnNmb3JtID0+XG4gIFIubGVucyh0b1BhcnRpYWwodHJhbnNmb3JtKSwgY29uc2VydmUodG9QYXJ0aWFsKHRyYW5zZm9ybSkpKVxuXG5MLnByb3AgPSBrID0+XG4gIFIubGVucyhvID0+IG8gJiYgb1trXSxcbiAgICAgICAgICh2LCBvKSA9PiB2ID09PSB1bmRlZmluZWQgPyBkZWxldGVLZXkoaywgbykgOiBzZXRLZXkoaywgdiwgbykpXG5cbkwuZmluZCA9IHByZWRpY2F0ZSA9PiBSLmxlbnMoeHMgPT4geHMgJiYgeHMuZmluZChwcmVkaWNhdGUpLCAoeCwgeHMpID0+IHtcbiAgaWYgKHggPT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh4cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGNvbnN0IGkgPSB4cy5maW5kSW5kZXgocHJlZGljYXRlKVxuICAgIGlmIChpIDwgMClcbiAgICAgIHJldHVybiB4c1xuICAgIHJldHVybiBkcm9wcGVkKHhzLnNsaWNlKDAsIGkpLmNvbmNhdCh4cy5zbGljZShpKzEpKSlcbiAgfSBlbHNlIHtcbiAgICBpZiAoeHMgPT09IHVuZGVmaW5lZClcbiAgICAgIHJldHVybiBbeF1cbiAgICBjb25zdCBpID0geHMuZmluZEluZGV4KHByZWRpY2F0ZSlcbiAgICBpZiAoaSA8IDApXG4gICAgICByZXR1cm4geHMuY29uY2F0KFt4XSlcbiAgICBpZiAoUi5lcXVhbHMoeCwgeHNbaV0pKVxuICAgICAgcmV0dXJuIHhzXG4gICAgcmV0dXJuIHhzLnNsaWNlKDAsIGkpLmNvbmNhdChbeF0sIHhzLnNsaWNlKGkrMSkpXG4gIH1cbn0pXG5cbkwuaW5kZXggPSBpID0+IFIubGVucyh4cyA9PiB4cyAmJiB4c1tpXSwgKHgsIHhzKSA9PiB7XG4gIGlmICh4ID09PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoeHMgPT09IHVuZGVmaW5lZClcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICBpZiAoaSA8IHhzLmxlbmd0aClcbiAgICAgIHJldHVybiBkcm9wcGVkKHhzLnNsaWNlKDAsIGkpLmNvbmNhdCh4cy5zbGljZShpKzEpKSlcbiAgICByZXR1cm4geHNcbiAgfSBlbHNlIHtcbiAgICBpZiAoeHMgPT09IHVuZGVmaW5lZClcbiAgICAgIHJldHVybiBBcnJheShpKS5jb25jYXQoW3hdKVxuICAgIGlmICh4cy5sZW5ndGggPD0gaSlcbiAgICAgIHJldHVybiB4cy5jb25jYXQoQXJyYXkoaSAtIHhzLmxlbmd0aCksIFt4XSlcbiAgICBpZiAoUi5lcXVhbHMoeCwgeHNbaV0pKVxuICAgICAgcmV0dXJuIHhzXG4gICAgcmV0dXJuIHhzLnNsaWNlKDAsIGkpLmNvbmNhdChbeF0sIHhzLnNsaWNlKGkrMSkpXG4gIH1cbn0pXG5cbmV4cG9ydCBkZWZhdWx0IExcbiJdfQ== | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9wYXJ0aWFsLmxlbnNlcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFJQSxJQUFNLFlBQVksU0FBWixTQUFZLENBQUMsQ0FBRCxFQUFJLENBQUosRUFBVTtBQUMxQixNQUFJLE1BQU0sU0FBTixJQUFtQixFQUFFLEtBQUssQ0FBTCxDQUFGLEVBQ3JCLE9BQU8sQ0FBUCxDQURGO0FBRUEsTUFBSSxhQUFKLENBSDBCO0FBSTFCLE9BQUssSUFBTSxDQUFOLElBQVcsQ0FBaEIsRUFBbUI7QUFDakIsUUFBSSxNQUFNLENBQU4sRUFBUztBQUNYLFVBQUksY0FBYyxDQUFkLEVBQ0YsSUFBSSxFQUFKLENBREY7QUFFQSxRQUFFLENBQUYsSUFBTyxFQUFFLENBQUYsQ0FBUCxDQUhXO0tBQWI7R0FERjtBQU9BLFNBQU8sQ0FBUCxDQVgwQjtDQUFWOztBQWNsQixJQUFNLFNBQVMsU0FBVCxNQUFTLENBQUMsQ0FBRCxFQUFJLENBQUosRUFBTyxDQUFQLEVBQWE7QUFDMUIsTUFBSSxNQUFNLFNBQU4sRUFDRiwyQkFBUyxHQUFJLEVBQWIsQ0FERjtBQUVBLE1BQUksS0FBSyxDQUFMLElBQVUsZ0JBQUUsTUFBRixDQUFTLENBQVQsRUFBWSxFQUFFLENBQUYsQ0FBWixDQUFWLEVBQ0YsT0FBTyxDQUFQLENBREY7QUFFQSxNQUFNLHdCQUFNLEdBQUksRUFBVixDQUxvQjtBQU0xQixPQUFLLElBQU0sQ0FBTixJQUFXLENBQWhCO0FBQ0UsUUFBSSxNQUFNLENBQU4sRUFDRixFQUFFLENBQUYsSUFBTyxFQUFFLENBQUYsQ0FBUCxDQURGO0dBREYsT0FHTyxDQUFQLENBVDBCO0NBQWI7Ozs7QUFjZixJQUFNLFVBQVUsU0FBVixPQUFVO1NBQU0sT0FBTyxJQUFQLENBQVksRUFBWixFQUFnQixNQUFoQixLQUEyQixDQUEzQixHQUErQixTQUEvQixHQUEyQyxFQUEzQztDQUFOOzs7O0FBSWhCLElBQU0sWUFBWSxTQUFaLFNBQVk7U0FBYTtXQUFLLGNBQWMsQ0FBZCxHQUFrQixDQUFsQixHQUFzQixVQUFVLENBQVYsQ0FBdEI7R0FBTDtDQUFiOzs7O0FBSWxCLElBQU0sV0FBVyxTQUFYLFFBQVc7U0FBSyxVQUFDLEVBQUQsRUFBSyxDQUFMLEVBQVc7QUFDL0IsUUFBTSxJQUFJLEVBQUUsRUFBRixFQUFNLENBQU4sQ0FBSixDQUR5QjtBQUUvQixXQUFPLGdCQUFFLE1BQUYsQ0FBUyxDQUFULEVBQVksQ0FBWixJQUFpQixDQUFqQixHQUFxQixDQUFyQixDQUZ3QjtHQUFYO0NBQUw7Ozs7QUFPVixJQUFNLHNCQUFPLFNBQVAsSUFBTyxJQUFLO0FBQ3ZCLGlCQUFlLDRDQUFmO0FBQ0EsU0FBSyxRQUFMO0FBQWUsYUFBTyxFQUFFLElBQUYsQ0FBTyxDQUFQLENBQVAsQ0FBZjtBQURBLFNBRUssUUFBTDtBQUFlLGFBQU8sRUFBRSxLQUFGLENBQVEsQ0FBUixDQUFQLENBQWY7QUFGQTtBQUdlLGFBQU8sQ0FBUCxDQUFmO0FBSEEsR0FEdUI7Q0FBTDs7QUFRcEIsSUFBTSxJQUFJLFNBQUosQ0FBSTtvQ0FBSTs7OztTQUFPLEdBQUcsTUFBSCxLQUFjLENBQWQsR0FBa0IsS0FBSyxHQUFHLENBQUgsQ0FBTCxDQUFsQixHQUFnQyxnQkFBRSxPQUFGLDJDQUFhLEdBQUcsR0FBSCxDQUFPLElBQVAsRUFBYixDQUFoQztDQUFYOztBQUVWLEVBQUUsT0FBRixHQUFZLENBQVo7QUFDQSxFQUFFLE1BQUYsR0FBVyxnQkFBRSxLQUFGLENBQVEsVUFBQyxDQUFELEVBQUksQ0FBSjtTQUFVLGdCQUFFLEdBQUYsQ0FBTSxLQUFLLENBQUwsQ0FBTixFQUFlLFNBQWYsRUFBMEIsQ0FBMUI7Q0FBVixDQUFuQjtBQUNBLEVBQUUsSUFBRixHQUFTLGdCQUFFLElBQUY7QUFDVCxFQUFFLElBQUYsR0FBUyxnQkFBRSxLQUFGLENBQVEsVUFBQyxDQUFELEVBQUksR0FBSixFQUFTLENBQVQ7U0FBZSxnQkFBRSxJQUFGLENBQU8sS0FBSyxDQUFMLENBQVAsRUFBZ0IsR0FBaEIsRUFBcUIsQ0FBckI7Q0FBZixDQUFqQjtBQUNBLEVBQUUsR0FBRixHQUFRLGdCQUFFLEtBQUYsQ0FBUSxVQUFDLENBQUQsRUFBSSxDQUFKLEVBQU8sQ0FBUDtTQUFhLGdCQUFFLEdBQUYsQ0FBTSxLQUFLLENBQUwsQ0FBTixFQUFlLENBQWYsRUFBa0IsQ0FBbEI7Q0FBYixDQUFoQjtBQUNBLEVBQUUsSUFBRixHQUFTLGdCQUFFLEtBQUYsQ0FBUSxVQUFDLENBQUQsRUFBSSxDQUFKO1NBQVUsZ0JBQUUsSUFBRixDQUFPLEtBQUssQ0FBTCxDQUFQLEVBQWdCLENBQWhCO0NBQVYsQ0FBakI7O0FBRUEsRUFBRSxPQUFGLEdBQVksWUFBVztxQ0FBUDs7R0FBTzs7QUFDckIsVUFBUSxHQUFHLE1BQUg7QUFDUixTQUFLLENBQUw7QUFDRSxZQUFNLElBQUksS0FBSixDQUFVLGtDQUFWLENBQU4sQ0FERjtBQURBLFNBR0ssQ0FBTDtBQUNFLGFBQU8sS0FBSyxHQUFHLENBQUgsQ0FBTCxDQUFQLENBREY7QUFIQTtBQU1FLFVBQU0sU0FBUyxTQUFULE1BQVMsQ0FBQyxNQUFELEVBQVMsU0FBVCxFQUF1QjtBQUNwQyxhQUFLLElBQUksSUFBRSxDQUFGLEVBQUssSUFBRSxHQUFHLE1BQUgsRUFBVyxJQUFFLENBQUYsRUFBSyxFQUFFLENBQUYsRUFBSztBQUNuQyxjQUFNLElBQUksR0FBRyxDQUFILENBQUosQ0FENkI7QUFFbkMsY0FBTSxJQUFJLGdCQUFFLElBQUYsQ0FBTyxLQUFLLENBQUwsQ0FBUCxFQUFnQixNQUFoQixDQUFKLENBRjZCO0FBR25DLGNBQUksY0FBYyxDQUFkLEVBQ0YsT0FBTyxZQUFZLENBQVosR0FBZ0IsQ0FBaEIsQ0FEVDtTQUhGO0FBTUEsZUFBTyxTQUFQLENBUG9DO09BQXZCLENBRGpCOztBQVdFLGFBQU87ZUFBYTtpQkFDbEIsZ0JBQUUsR0FBRixDQUFNO21CQUFTLGdCQUFFLEdBQUYsQ0FBTSxLQUFLLE9BQU8sTUFBUCxFQUFlLEdBQUcsQ0FBSCxDQUFmLENBQUwsQ0FBTixFQUFtQyxLQUFuQyxFQUEwQyxNQUExQztXQUFULEVBQ0EsVUFBVSxPQUFPLE1BQVAsQ0FBVixDQUROO1NBRGtCO09BQWIsQ0FYVDtBQUxBLEdBRHFCO0NBQVg7O0FBdUJaLEVBQUUsT0FBRixHQUFZLGdCQUFFLEtBQUYsQ0FBUSxVQUFDLEdBQUQsRUFBTSxHQUFOO1NBQ2xCLGdCQUFFLElBQUYsQ0FBTztXQUFLLGdCQUFFLE1BQUYsQ0FBUyxDQUFULEVBQVksR0FBWixJQUFtQixHQUFuQixHQUF5QixDQUF6QjtHQUFMLEVBQ0EsU0FBUztXQUFLLGdCQUFFLE1BQUYsQ0FBUyxDQUFULEVBQVksR0FBWixJQUFtQixHQUFuQixHQUF5QixDQUF6QjtHQUFMLENBRGhCO0NBRGtCLENBQXBCOztBQUlBLEVBQUUsT0FBRixHQUFZLEVBQUUsT0FBRixDQUFVLFNBQVYsQ0FBWjtBQUNBLEVBQUUsUUFBRixHQUFhO1NBQU8sRUFBRSxPQUFGLENBQVUsR0FBVixFQUFlLFNBQWY7Q0FBUDtBQUNiLEVBQUUsTUFBRixHQUFXO1NBQUssZ0JBQUUsT0FBRixDQUFVLEVBQUUsUUFBRixDQUFXLENBQVgsQ0FBVixFQUF5QixFQUFFLE9BQUYsQ0FBVSxDQUFWLENBQXpCO0NBQUw7O0FBRVgsRUFBRSxTQUFGLEdBQWM7U0FDWixnQkFBRSxJQUFGLENBQU8sVUFBVSxTQUFWLENBQVAsRUFBNkIsU0FBUyxVQUFVLFNBQVYsQ0FBVCxDQUE3QjtDQURZOztBQUdkLEVBQUUsSUFBRixHQUFTO1NBQ1AsZ0JBQUUsSUFBRixDQUFPO1dBQUssS0FBSyxFQUFFLENBQUYsQ0FBTDtHQUFMLEVBQ0EsVUFBQyxDQUFELEVBQUksQ0FBSjtXQUFVLE1BQU0sU0FBTixHQUFrQixVQUFVLENBQVYsRUFBYSxDQUFiLENBQWxCLEdBQW9DLE9BQU8sQ0FBUCxFQUFVLENBQVYsRUFBYSxDQUFiLENBQXBDO0dBQVY7Q0FGQTs7QUFJVCxFQUFFLElBQUYsR0FBUztTQUFhLGdCQUFFLElBQUYsQ0FBTztXQUFNLE1BQU0sR0FBRyxJQUFILENBQVEsU0FBUixDQUFOO0dBQU4sRUFBZ0MsVUFBQyxDQUFELEVBQUksRUFBSixFQUFXO0FBQ3RFLFFBQUksTUFBTSxTQUFOLEVBQWlCO0FBQ25CLFVBQUksT0FBTyxTQUFQLEVBQ0YsT0FBTyxTQUFQLENBREY7QUFFQSxVQUFNLElBQUksR0FBRyxTQUFILENBQWEsU0FBYixDQUFKLENBSGE7QUFJbkIsVUFBSSxJQUFJLENBQUosRUFDRixPQUFPLEVBQVAsQ0FERjtBQUVBLGFBQU8sUUFBUSxHQUFHLEtBQUgsQ0FBUyxDQUFULEVBQVksQ0FBWixFQUFlLE1BQWYsQ0FBc0IsR0FBRyxLQUFILENBQVMsSUFBRSxDQUFGLENBQS9CLENBQVIsQ0FBUCxDQU5tQjtLQUFyQixNQU9PO0FBQ0wsVUFBSSxPQUFPLFNBQVAsRUFDRixPQUFPLENBQUMsQ0FBRCxDQUFQLENBREY7QUFFQSxVQUFNLElBQUksR0FBRyxTQUFILENBQWEsU0FBYixDQUFKLENBSEQ7QUFJTCxVQUFJLElBQUksQ0FBSixFQUNGLE9BQU8sR0FBRyxNQUFILENBQVUsQ0FBQyxDQUFELENBQVYsQ0FBUCxDQURGO0FBRUEsVUFBSSxnQkFBRSxNQUFGLENBQVMsQ0FBVCxFQUFZLEdBQUcsQ0FBSCxDQUFaLENBQUosRUFDRSxPQUFPLEVBQVAsQ0FERjtBQUVBLGFBQU8sR0FBRyxLQUFILENBQVMsQ0FBVCxFQUFZLENBQVosRUFBZSxNQUFmLENBQXNCLENBQUMsQ0FBRCxDQUF0QixFQUEyQixHQUFHLEtBQUgsQ0FBUyxJQUFFLENBQUYsQ0FBcEMsQ0FBUCxDQVJLO0tBUFA7R0FEMkQ7Q0FBcEQ7O0FBb0JULEVBQUUsS0FBRixHQUFVO1NBQUssZ0JBQUUsSUFBRixDQUFPO1dBQU0sTUFBTSxHQUFHLENBQUgsQ0FBTjtHQUFOLEVBQW1CLFVBQUMsQ0FBRCxFQUFJLEVBQUosRUFBVztBQUNsRCxRQUFJLE1BQU0sU0FBTixFQUFpQjtBQUNuQixVQUFJLE9BQU8sU0FBUCxFQUNGLE9BQU8sU0FBUCxDQURGO0FBRUEsVUFBSSxJQUFJLEdBQUcsTUFBSCxFQUNOLE9BQU8sUUFBUSxHQUFHLEtBQUgsQ0FBUyxDQUFULEVBQVksQ0FBWixFQUFlLE1BQWYsQ0FBc0IsR0FBRyxLQUFILENBQVMsSUFBRSxDQUFGLENBQS9CLENBQVIsQ0FBUCxDQURGO0FBRUEsYUFBTyxFQUFQLENBTG1CO0tBQXJCLE1BTU87QUFDTCxVQUFJLE9BQU8sU0FBUCxFQUNGLE9BQU8sTUFBTSxDQUFOLEVBQVMsTUFBVCxDQUFnQixDQUFDLENBQUQsQ0FBaEIsQ0FBUCxDQURGO0FBRUEsVUFBSSxHQUFHLE1BQUgsSUFBYSxDQUFiLEVBQ0YsT0FBTyxHQUFHLE1BQUgsQ0FBVSxNQUFNLElBQUksR0FBRyxNQUFILENBQXBCLEVBQWdDLENBQUMsQ0FBRCxDQUFoQyxDQUFQLENBREY7QUFFQSxVQUFJLGdCQUFFLE1BQUYsQ0FBUyxDQUFULEVBQVksR0FBRyxDQUFILENBQVosQ0FBSixFQUNFLE9BQU8sRUFBUCxDQURGO0FBRUEsYUFBTyxHQUFHLEtBQUgsQ0FBUyxDQUFULEVBQVksQ0FBWixFQUFlLE1BQWYsQ0FBc0IsQ0FBQyxDQUFELENBQXRCLEVBQTJCLEdBQUcsS0FBSCxDQUFTLElBQUUsQ0FBRixDQUFwQyxDQUFQLENBUEs7S0FOUDtHQUR1QztDQUEvQjs7a0JBa0JLIiwiZmlsZSI6InBhcnRpYWwubGVuc2VzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFIgZnJvbSBcInJhbWRhXCJcblxuLy9cblxuY29uc3QgZGVsZXRlS2V5ID0gKGssIG8pID0+IHtcbiAgaWYgKG8gPT09IHVuZGVmaW5lZCB8fCAhKGsgaW4gbykpXG4gICAgcmV0dXJuIG9cbiAgbGV0IHJcbiAgZm9yIChjb25zdCBwIGluIG8pIHtcbiAgICBpZiAocCAhPT0gaykge1xuICAgICAgaWYgKHVuZGVmaW5lZCA9PT0gcilcbiAgICAgICAgciA9IHt9XG4gICAgICByW3BdID0gb1twXVxuICAgIH1cbiAgfVxuICByZXR1cm4gclxufVxuXG5jb25zdCBzZXRLZXkgPSAoaywgdiwgbykgPT4ge1xuICBpZiAobyA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiB7W2tdOiB2fVxuICBpZiAoayBpbiBvICYmIFIuZXF1YWxzKHYsIG9ba10pKVxuICAgIHJldHVybiBvXG4gIGNvbnN0IHIgPSB7W2tdOiB2fVxuICBmb3IgKGNvbnN0IHAgaW4gbylcbiAgICBpZiAocCAhPT0gaylcbiAgICAgIHJbcF0gPSBvW3BdXG4gIHJldHVybiByXG59XG5cbi8vXG5cbmNvbnN0IGRyb3BwZWQgPSB4cyA9PiBPYmplY3Qua2V5cyh4cykubGVuZ3RoID09PSAwID8gdW5kZWZpbmVkIDogeHNcblxuLy9cblxuY29uc3QgdG9QYXJ0aWFsID0gdHJhbnNmb3JtID0+IHggPT4gdW5kZWZpbmVkID09PSB4ID8geCA6IHRyYW5zZm9ybSh4KVxuXG4vL1xuXG5jb25zdCBjb25zZXJ2ZSA9IGYgPT4gKG4wLCBvKSA9PiB7XG4gIGNvbnN0IG4gPSBmKG4wLCBvKVxuICByZXR1cm4gUi5lcXVhbHMobiwgbykgPyBvIDogblxufVxuXG4vL1xuXG5leHBvcnQgY29uc3QgbGlmdCA9IGwgPT4ge1xuICBzd2l0Y2ggKHR5cGVvZiBsKSB7XG4gIGNhc2UgXCJzdHJpbmdcIjogcmV0dXJuIEwucHJvcChsKVxuICBjYXNlIFwibnVtYmVyXCI6IHJldHVybiBMLmluZGV4KGwpXG4gIGRlZmF1bHQ6ICAgICAgIHJldHVybiBsXG4gIH1cbn1cblxuY29uc3QgTCA9ICguLi5scykgPT4gbHMubGVuZ3RoID09PSAxID8gbGlmdChsc1swXSkgOiBSLmNvbXBvc2UoLi4ubHMubWFwKGxpZnQpKVxuXG5MLmNvbXBvc2UgPSBMXG5MLmRlbGV0ZSA9IFIuY3VycnkoKGwsIHMpID0+IFIuc2V0KGxpZnQobCksIHVuZGVmaW5lZCwgcykpXG5MLmxlbnMgPSBSLmxlbnNcbkwub3ZlciA9IFIuY3VycnkoKGwsIHgyeCwgcykgPT4gUi5vdmVyKGxpZnQobCksIHgyeCwgcykpXG5MLnNldCA9IFIuY3VycnkoKGwsIHgsIHMpID0+IFIuc2V0KGxpZnQobCksIHgsIHMpKVxuTC52aWV3ID0gUi5jdXJyeSgobCwgcykgPT4gUi52aWV3KGxpZnQobCksIHMpKVxuXG5MLmZpcnN0T2YgPSAoLi4ubHMpID0+IHtcbiAgc3dpdGNoIChscy5sZW5ndGgpIHtcbiAgY2FzZSAwOlxuICAgIHRocm93IG5ldyBFcnJvcihcImZpcnN0T2YgY2FsbGVkIHdpdGhvdXQgYXJndW1lbnRzXCIpXG4gIGNhc2UgMTpcbiAgICByZXR1cm4gbGlmdChsc1swXSlcbiAgZGVmYXVsdDpcbiAgICBjb25zdCBjaG9vc2UgPSAodGFyZ2V0LCBvdGhlcndpc2UpID0+IHtcbiAgICAgIGZvciAobGV0IGk9MCwgbj1scy5sZW5ndGg7IGk8bjsgKytpKSB7XG4gICAgICAgIGNvbnN0IGwgPSBsc1tpXVxuICAgICAgICBjb25zdCByID0gUi52aWV3KGxpZnQobCksIHRhcmdldClcbiAgICAgICAgaWYgKHVuZGVmaW5lZCAhPT0gcilcbiAgICAgICAgICByZXR1cm4gb3RoZXJ3aXNlID8gbCA6IHJcbiAgICAgIH1cbiAgICAgIHJldHVybiBvdGhlcndpc2VcbiAgICB9XG5cbiAgICByZXR1cm4gdG9GdW5jdG9yID0+IHRhcmdldCA9PlxuICAgICAgUi5tYXAoZm9jdXMgPT4gUi5zZXQobGlmdChjaG9vc2UodGFyZ2V0LCBsc1swXSkpLCBmb2N1cywgdGFyZ2V0KSxcbiAgICAgICAgICAgIHRvRnVuY3RvcihjaG9vc2UodGFyZ2V0KSkpXG4gIH1cbn1cblxuTC5yZXBsYWNlID0gUi5jdXJyeSgoaW5uLCBvdXQpID0+XG4gIFIubGVucyh4ID0+IFIuZXF1YWxzKHgsIGlubikgPyBvdXQgOiB4LFxuICAgICAgICAgY29uc2VydmUoeSA9PiBSLmVxdWFscyh5LCBvdXQpID8gaW5uIDogeSkpKVxuXG5MLmRlZmF1bHQgPSBMLnJlcGxhY2UodW5kZWZpbmVkKVxuTC5yZXF1aXJlZCA9IGlubiA9PiBMLnJlcGxhY2UoaW5uLCB1bmRlZmluZWQpXG5MLmRlZmluZSA9IHYgPT4gUi5jb21wb3NlKEwucmVxdWlyZWQodiksIEwuZGVmYXVsdCh2KSlcblxuTC5ub3JtYWxpemUgPSB0cmFuc2Zvcm0gPT5cbiAgUi5sZW5zKHRvUGFydGlhbCh0cmFuc2Zvcm0pLCBjb25zZXJ2ZSh0b1BhcnRpYWwodHJhbnNmb3JtKSkpXG5cbkwucHJvcCA9IGsgPT5cbiAgUi5sZW5zKG8gPT4gbyAmJiBvW2tdLFxuICAgICAgICAgKHYsIG8pID0+IHYgPT09IHVuZGVmaW5lZCA/IGRlbGV0ZUtleShrLCBvKSA6IHNldEtleShrLCB2LCBvKSlcblxuTC5maW5kID0gcHJlZGljYXRlID0+IFIubGVucyh4cyA9PiB4cyAmJiB4cy5maW5kKHByZWRpY2F0ZSksICh4LCB4cykgPT4ge1xuICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHhzID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgY29uc3QgaSA9IHhzLmZpbmRJbmRleChwcmVkaWNhdGUpXG4gICAgaWYgKGkgPCAwKVxuICAgICAgcmV0dXJuIHhzXG4gICAgcmV0dXJuIGRyb3BwZWQoeHMuc2xpY2UoMCwgaSkuY29uY2F0KHhzLnNsaWNlKGkrMSkpKVxuICB9IGVsc2Uge1xuICAgIGlmICh4cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuIFt4XVxuICAgIGNvbnN0IGkgPSB4cy5maW5kSW5kZXgocHJlZGljYXRlKVxuICAgIGlmIChpIDwgMClcbiAgICAgIHJldHVybiB4cy5jb25jYXQoW3hdKVxuICAgIGlmIChSLmVxdWFscyh4LCB4c1tpXSkpXG4gICAgICByZXR1cm4geHNcbiAgICByZXR1cm4geHMuc2xpY2UoMCwgaSkuY29uY2F0KFt4XSwgeHMuc2xpY2UoaSsxKSlcbiAgfVxufSlcblxuTC5pbmRleCA9IGkgPT4gUi5sZW5zKHhzID0+IHhzICYmIHhzW2ldLCAoeCwgeHMpID0+IHtcbiAgaWYgKHggPT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh4cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGlmIChpIDwgeHMubGVuZ3RoKVxuICAgICAgcmV0dXJuIGRyb3BwZWQoeHMuc2xpY2UoMCwgaSkuY29uY2F0KHhzLnNsaWNlKGkrMSkpKVxuICAgIHJldHVybiB4c1xuICB9IGVsc2Uge1xuICAgIGlmICh4cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuIEFycmF5KGkpLmNvbmNhdChbeF0pXG4gICAgaWYgKHhzLmxlbmd0aCA8PSBpKVxuICAgICAgcmV0dXJuIHhzLmNvbmNhdChBcnJheShpIC0geHMubGVuZ3RoKSwgW3hdKVxuICAgIGlmIChSLmVxdWFscyh4LCB4c1tpXSkpXG4gICAgICByZXR1cm4geHNcbiAgICByZXR1cm4geHMuc2xpY2UoMCwgaSkuY29uY2F0KFt4XSwgeHMuc2xpY2UoaSsxKSlcbiAgfVxufSlcblxuZXhwb3J0IGRlZmF1bHQgTFxuIl19 |
{ | ||
"name": "partial.lenses", | ||
"version": "0.4.0", | ||
"version": "0.5.0", | ||
"description": "Ramda compatible lenses", | ||
@@ -5,0 +5,0 @@ "main": "lib/partial.lenses.js", |
126
README.md
@@ -1,2 +0,2 @@ | ||
[![npm version](https://badge.fury.io/js/partial.lenses.svg)](http://badge.fury.io/js/partial.lenses) | ||
[ [Examples](#examples) | [Reference](#reference) | [Background](#background) ] | ||
@@ -8,7 +8,10 @@ This library provides a collection of [Ramda](http://ramdajs.com/) compatible | ||
Index: | ||
* [Examples](#examples) | ||
* [Reference](#reference) | ||
* [Background](#background) | ||
In Javascript, optional data can be mapped to `undefined`, which is what partial | ||
lenses also do. When the viewed part of a data structure is missing, the result | ||
is `undefined`. When a part of a data structure is set to `undefined`, the part | ||
is deleted. Partial lenses are defined in such a way that operations compose | ||
and one can conveniently and robustly operate on deeply nested data structures. | ||
[![npm version](https://badge.fury.io/js/partial.lenses.svg)](http://badge.fury.io/js/partial.lenses) | ||
## Examples | ||
@@ -75,3 +78,3 @@ | ||
> L.set(textIn("fi"), "Otsikko", data) | ||
{ contents: [ { language: "en", text: "The title" }, | ||
{ contents: [ { language: "en", text: "Title" }, | ||
{ language: "fi", text: "Otsikko" }, | ||
@@ -87,3 +90,3 @@ { language: "sv", text: "Rubrik" } ] } | ||
> L.set(textIn("sv"), undefined, data) | ||
{ contents: [ { language: "en", text: "The title" } ] } | ||
{ contents: [ { language: "en", text: "Title" } ] } | ||
``` | ||
@@ -99,2 +102,5 @@ | ||
Note that unless required and default values are explicitly specified as part of | ||
the lens, they will both be undefined. | ||
## Reference | ||
@@ -112,27 +118,18 @@ | ||
For convenience, you can access basic operations on lenses via the default | ||
import `L`: | ||
You can access basic operations on lenses via the default import `L`: | ||
* `L.compose(l1, ..., ln)` is the same as `R.compose(l1, ..., lN)` (see [compose](http://ramdajs.com/0.19.0/docs/#compose)). | ||
* `L.lens(get, set)` is the same as `R.lens(get, set)` (see [lens](http://ramdajs.com/0.19.0/docs/#lens)). | ||
* `L.over(l, x2x, s)` is the same as `R.over(l, x2x, s)` (see [over](http://ramdajs.com/0.19.0/docs/#over)). | ||
* `L.set(l, x, s)` is the same as `R.set(l, x, s)` (see [set](http://ramdajs.com/0.19.0/docs/#set)). | ||
* `L.view(l, s)` is the same as `R.view(l, s)` (see [view](http://ramdajs.com/0.19.0/docs/#view)). | ||
* `L(l1, ..., ln)` and `L.compose(l1, ..., ln)` both are the same as | ||
`R.compose(lift(l1), ..., lift(lN))` (see | ||
[compose](http://ramdajs.com/0.19.0/docs/#compose)). | ||
* `L.lens(get, set)` is the same as `R.lens(get, set)` (see | ||
[lens](http://ramdajs.com/0.19.0/docs/#lens)). | ||
* `L.over(l, x2x, s)` is the same as `R.over(lift(l), x2x, s)` (see | ||
[over](http://ramdajs.com/0.19.0/docs/#over)). | ||
* `L.set(l, x, s)` is the same as `R.set(lift(l), x, s)` (see | ||
[set](http://ramdajs.com/0.19.0/docs/#set)). | ||
* `L.view(l, s)` is the same as `R.view(lift(l), s)` (see | ||
[view](http://ramdajs.com/0.19.0/docs/#view)). | ||
For convenience, there is also a shorthand for delete: | ||
The `lift` operation is defined as | ||
* `L.delete(l, s)` is the same as `R.set(l, undefined, s)`. | ||
### Shorthand composition and lifting | ||
The default import, `L`, is also a shorthand function for lens composition (see | ||
[compose](http://ramdajs.com/0.19.0/docs/#compose)) and lifting. The semantics | ||
can be described as | ||
``` | ||
L(l1, ..., lN) === R.compose(lift(l1), ..., lift(lN)) | ||
``` | ||
where | ||
```js | ||
@@ -148,4 +145,20 @@ const lift = l => { | ||
Note that `L.compose` does not perform lifting. | ||
and is available as a non-default export. | ||
#### L.delete(l, s) | ||
For convenience, there is also a shorthand for delete: | ||
* `L.delete(l, s)` is the same as `R.set(lift(l), undefined, s)`. | ||
#### L.firstOf(l1, ..., lN) | ||
`L.firstOf(l1, ..., lN)` returns a partial lens that acts like the first of the | ||
given lenses whose view is not undefined on the given target. When the views of | ||
all of the given lenses are undefined, the returned lens acts like the first of | ||
the given lenses. | ||
Note that `L.firstOf` is an associative operation, but there is no identity | ||
element. | ||
### Lenses | ||
@@ -155,4 +168,4 @@ | ||
`L.prop(string)` is much like `R.lensProp(string)` (see | ||
[lensProp](http://ramdajs.com/0.19.0/docs/#lensProp)), but composes as a partial | ||
`L.prop(string)` or `L(string)` is similar to `R.lensProp(string)` (see | ||
[lensProp](http://ramdajs.com/0.19.0/docs/#lensProp)), but acts as a partial | ||
lens: | ||
@@ -164,22 +177,7 @@ * When viewing an undefined property or an undefined object, the result is | ||
Examples: | ||
```js | ||
> L.set(L("x", "y"), undefined, {x: {y: 1}}) | ||
undefined | ||
> L.set(L("x", "y"), 2, {x: {y: 1}}) | ||
{ x: { y: 2 } } | ||
> L.set(L("x", "y"), undefined, {x: {y: 1}, z: 3}) | ||
{ z: 3 } | ||
> L.set(L("x", "y"), 2, {x: {y: 1}, z: 3}) | ||
{ x: { y: 2 }, z: 3 } | ||
> L.view(L("x", "y"), undefined) | ||
undefined | ||
``` | ||
#### L.index(integer) | ||
`L.index(integer)` is like `R.lensIndex(integer)` (see | ||
[lensIndex](http://ramdajs.com/0.19.0/docs/#lensIndex)), but composes as a | ||
partial lens: | ||
`L.index(integer)` or `L(integer)` is similar to `R.lensIndex(integer)` (see | ||
[lensIndex](http://ramdajs.com/0.19.0/docs/#lensIndex)), but acts as a partial | ||
lens: | ||
* When viewing an undefined array index or an undefined array, the result is | ||
@@ -220,19 +218,5 @@ undefined. | ||
Examples: | ||
```js | ||
> L.view(L(L.replace(undefined, {type: "title", text: ""}), | ||
"text"), | ||
undefined) | ||
"" | ||
> L.set(L(L.replace(undefined, {type: "title", text: ""}), | ||
"text"), | ||
"", | ||
{type: "title", text: "not empty"}) | ||
undefined | ||
``` | ||
The use case for `replace` is to handle optional and required properties and | ||
elements. In most cases, rather than using `replace`, you will use a | ||
combination of `required` and `default`: | ||
elements. In most cases, rather than using `replace`, you will make selective | ||
use of `required` and `default`: | ||
@@ -247,2 +231,6 @@ ##### L.default(out) | ||
##### L.define(value) | ||
`L.define(value)` is the same as `L(L.required(value), L.default(value))`. | ||
## Background | ||
@@ -302,7 +290,1 @@ | ||
[lensProp](http://ramdajs.com/0.19.0/docs/#lensProp)). | ||
In Javascript, optional data can be mapped to `undefined`, which is what partial | ||
lenses also do. When the viewed part of a data structure is missing, the result | ||
is `undefined`. When a part of a data structure is set to `undefined`, the part | ||
is deleted. Partial lenses are defined in such a way that operations compose | ||
and one can conveniently and robustly operate on deeply nested data structures. |
@@ -48,3 +48,3 @@ import R from "ramda" | ||
const lift = l => { | ||
export const lift = l => { | ||
switch (typeof l) { | ||
@@ -59,9 +59,32 @@ case "string": return L.prop(l) | ||
L.compose = R.compose | ||
L.delete = R.curry((l, s) => R.set(l, undefined, s)) | ||
L.compose = L | ||
L.delete = R.curry((l, s) => R.set(lift(l), undefined, s)) | ||
L.lens = R.lens | ||
L.over = R.over | ||
L.set = R.set | ||
L.view = R.view | ||
L.over = R.curry((l, x2x, s) => R.over(lift(l), x2x, s)) | ||
L.set = R.curry((l, x, s) => R.set(lift(l), x, s)) | ||
L.view = R.curry((l, s) => R.view(lift(l), s)) | ||
L.firstOf = (...ls) => { | ||
switch (ls.length) { | ||
case 0: | ||
throw new Error("firstOf called without arguments") | ||
case 1: | ||
return lift(ls[0]) | ||
default: | ||
const choose = (target, otherwise) => { | ||
for (let i=0, n=ls.length; i<n; ++i) { | ||
const l = ls[i] | ||
const r = R.view(lift(l), target) | ||
if (undefined !== r) | ||
return otherwise ? l : r | ||
} | ||
return otherwise | ||
} | ||
return toFunctor => target => | ||
R.map(focus => R.set(lift(choose(target, ls[0])), focus, target), | ||
toFunctor(choose(target))) | ||
} | ||
} | ||
L.replace = R.curry((inn, out) => | ||
@@ -73,2 +96,3 @@ R.lens(x => R.equals(x, inn) ? out : x, | ||
L.required = inn => L.replace(inn, undefined) | ||
L.define = v => R.compose(L.required(v), L.default(v)) | ||
@@ -75,0 +99,0 @@ L.normalize = transform => |
@@ -43,8 +43,8 @@ import R from "ramda" | ||
L.set(L(1), undefined, [,,]), undefined) | ||
testEq('L.set(L(L.required([]), 1), undefined, [,,])', () => | ||
L.set(L(L.required([]), 1), undefined, [,,]), []) | ||
testEq('L.set(L.compose(L.required([]), 1), undefined, [,,])', () => | ||
L.set(L.compose(L.required([]), 1), undefined, [,,]), []) | ||
testEq('L.set(L(1), 4, [1, 2, 3])', () => | ||
L.set(L(1), 4, [1, 2, 3]), [1, 4, 3]) | ||
testEq('L.set(L(2), 4, undefined)', () => | ||
L.set(L(2), 4, undefined), [,, 4]) | ||
testEq('L.set(2, 4, undefined)', () => | ||
L.set(2, 4, undefined), [,, 4]) | ||
testEq('L.set(L(2), 4, [1])', () => | ||
@@ -56,8 +56,8 @@ L.set(L(2), 4, [1]), [1,, 4]) | ||
L.set(L(1), undefined, [1, 2, 3]), [1, 3]) | ||
testEq('L.set(L(2), undefined, [1, 2, 3])', () => | ||
L.set(L(2), undefined, [1, 2, 3]), [1, 2]) | ||
testEq('L.set(2, undefined, [1, 2, 3])', () => | ||
L.set(2, undefined, [1, 2, 3]), [1, 2]) | ||
testEq('L.set(L(5), undefined, [1, 2, 3])', () => | ||
L.set(L(5), undefined, [1, 2, 3]), [1, 2, 3]) | ||
testEq('L.view(L(5), undefined)', () => | ||
L.view(L(5), undefined), undefined) | ||
testEq('L.view(5, undefined)', () => | ||
L.view(5, undefined), undefined) | ||
testEq('L.view(L(5), [1, 2, 3])', () => | ||
@@ -72,14 +72,14 @@ L.view(L(5), [1, 2, 3]), undefined) | ||
L.set(L("x", L.required(null)), undefined, {x: 1}), {x: null}) | ||
testEq('L.set(L("x", L.required(null)), 2, {x: 1})', () => | ||
L.set(L("x", L.required(null)), 2, {x: 1}), {x: 2}) | ||
testEq('L.delete(L("y"), {x: 1, y: 2})', () => | ||
L.delete(L("y"), {x: 1, y: 2}), {x: 1}) | ||
testEq('L.set(L.compose("x", L.required(null)), 2, {x: 1})', () => | ||
L.set(L.compose("x", L.required(null)), 2, {x: 1}), {x: 2}) | ||
testEq('L.delete("y", {x: 1, y: 2})', () => | ||
L.delete("y", {x: 1, y: 2}), {x: 1}) | ||
testEq('L.set(L("y"), 3, {x: 1, y: 2})', () => | ||
L.set(L("y"), 3, {x: 1, y: 2}), {x: 1, y: 3}) | ||
testEq('L.set(L("z"), 3, {x: 1, y: 2})', () => | ||
L.set(L("z"), 3, {x: 1, y: 2}), {x: 1, y: 2, z: 3}) | ||
testEq('L.set("z", 3, {x: 1, y: 2})', () => | ||
L.set("z", 3, {x: 1, y: 2}), {x: 1, y: 2, z: 3}) | ||
testEq('L.set(L("z"), 3, undefined)', () => | ||
L.set(L("z"), 3, undefined), {z: 3}) | ||
testEq('L.view(L("z"), undefined)', () => | ||
L.view(L("z"), undefined), undefined) | ||
testEq('L.view("z", undefined)', () => | ||
L.view("z", undefined), undefined) | ||
testEq('L.view(L("z"), {x: 1})', () => | ||
@@ -114,15 +114,11 @@ L.view(L("z"), {x: 1}), undefined) | ||
L.view(L.normalize(R.sortBy(R.identity)), [1,3,2,5]), [1,2,3,5]) | ||
testEq('L.set(L(L.normalize(R.sortBy(R.identity)), L.find(R.equals(2))), 4, [1,3,2,5])', () => | ||
L.set(L(L.normalize(R.sortBy(R.identity)), L.find(R.equals(2))), 4, [1,3,2,5]), | ||
[1,3,4,5]) | ||
testEq('L.set(L(L.normalize(R.sortBy(R.identity)), L.find(R.equals(2))), 4, undefined)', () => | ||
L.set(L(L.normalize(R.sortBy(R.identity)), L.find(R.equals(2))), 4, undefined), | ||
[4]) | ||
testEq('L.delete(L(L.normalize(R.sortBy(R.identity)), L.find(R.equals(2))), [2])', () => | ||
L.delete(L(L.normalize(R.sortBy(R.identity)), L.find(R.equals(2))), [2]), | ||
undefined) | ||
testEq('L.set(L(L.normalize(R.sortBy(R.identity)), L.find(R.equals(2))), undefined, [1,3,2,5])', () => | ||
@@ -132,1 +128,24 @@ L.set(L(L.normalize(R.sortBy(R.identity)), L.find(R.equals(2))), undefined, [1,3,2,5]), | ||
}) | ||
describe("L.firstOf", () => { | ||
testEq('L.view(L.firstOf("x", "y"), {x: 11, y: 12})', () => | ||
L.view(L.firstOf("x", "y"), {x: 11, y: 12}), 11) | ||
testEq('L.view(L.firstOf("y", "x"), {x: 11, y: 12})', () => | ||
L.view(L.firstOf("y", "x"), {x: 11, y: 12}), 12) | ||
testEq('L.view(L.firstOf("x", "y"), {z: 13})', () => | ||
L.view(L.firstOf("x", "y"), {z: 13}), undefined) | ||
testEq('L.over(L.firstOf("x", "y"), x => x-2, {x: 11, y: 12})', () => | ||
L.over(L.firstOf("x", "y"), x => x-2, {x: 11, y: 12}), {x: 9, y: 12}) | ||
testEq('L.over(L.firstOf("y", "x"), x => x-2, {x: 11, y: 12})', () => | ||
L.over(L.firstOf("y", "x"), x => x-2, {x: 11, y: 12}), {x: 11, y: 10}) | ||
testEq('L.set(L.firstOf("x", "y"), 12, {z: 13})', () => | ||
L.set(L.firstOf("x", "y"), 12, {z: 13}), {x: 12, z: 13}) | ||
testEq('L.set(L.firstOf("y", "x"), 12, {z: 13})', () => | ||
L.set(L.firstOf("y", "x"), 12, {z: 13}), {y: 12, z: 13}) | ||
testEq('L.delete(L.firstOf("x", "y"), {z: 13})', () => | ||
L.delete(L.firstOf("x", "y"), {z: 13}), {z: 13}) | ||
testEq('L.delete(L.firstOf("x", "y"), {x: 11, y: 12})', () => | ||
L.delete(L.firstOf("x", "y"), {x: 11, y: 12}), {y: 12}) | ||
testEq('L.delete(L.firstOf("y", "x"), {x: 11, y: 12})', () => | ||
L.delete(L.firstOf("y", "x"), {x: 11, y: 12}), {x: 11}) | ||
}) |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
45766
420
280