partial.lenses
Advanced tools
Comparing version 0.6.0 to 0.7.0
@@ -94,2 +94,7 @@ "use strict"; | ||
}); | ||
L.deleteAll = _ramda2.default.curry(function (lens, data) { | ||
while (L.view(lens, data) !== undefined) { | ||
data = L.delete(lens, data); | ||
}return data; | ||
}); | ||
L.lens = _ramda2.default.lens; | ||
@@ -162,7 +167,17 @@ L.over = _ramda2.default.curry(function (l, x2x, s) { | ||
var i = xs.findIndex(predicate); | ||
if (i < 0) return L.append; | ||
return L.index(i); | ||
return i < 0 ? L.append : i; | ||
}); | ||
}; | ||
L.findWith = function (l) { | ||
for (var _len3 = arguments.length, ls = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) { | ||
ls[_key3 - 1] = arguments[_key3]; | ||
} | ||
var lls = L.apply(undefined, [l].concat(ls)); | ||
return L(L.find(function (x) { | ||
return L.view(lls, x) !== undefined; | ||
}), lls); | ||
}; | ||
L.index = function (i) { | ||
@@ -186,7 +201,3 @@ return _ramda2.default.lens(function (xs) { | ||
L.append = _ramda2.default.lens(function () {}, function (x, xs) { | ||
if (x === undefined) { | ||
return xs; | ||
} else { | ||
if (xs === undefined) return [x];else return xs.concat([x]); | ||
} | ||
return x === undefined ? xs : xs === undefined ? [x] : xs.concat([x]); | ||
}); | ||
@@ -203,2 +214,2 @@ | ||
exports.default = L; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9wYXJ0aWFsLmxlbnNlcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFJQSxJQUFNLFlBQVksU0FBWixTQUFZLENBQUMsQ0FBRCxFQUFJLENBQUosRUFBVTtBQUMxQixNQUFJLE1BQU0sU0FBTixJQUFtQixFQUFFLEtBQUssQ0FBTCxDQUFGLEVBQ3JCLE9BQU8sQ0FBUCxDQURGO0FBRUEsTUFBSSxhQUFKLENBSDBCO0FBSTFCLE9BQUssSUFBTSxDQUFOLElBQVcsQ0FBaEIsRUFBbUI7QUFDakIsUUFBSSxNQUFNLENBQU4sRUFBUztBQUNYLFVBQUksY0FBYyxDQUFkLEVBQ0YsSUFBSSxFQUFKLENBREY7QUFFQSxRQUFFLENBQUYsSUFBTyxFQUFFLENBQUYsQ0FBUCxDQUhXO0tBQWI7R0FERjtBQU9BLFNBQU8sQ0FBUCxDQVgwQjtDQUFWOztBQWNsQixJQUFNLFNBQVMsU0FBVCxNQUFTLENBQUMsQ0FBRCxFQUFJLENBQUosRUFBTyxDQUFQLEVBQWE7QUFDMUIsTUFBSSxNQUFNLFNBQU4sRUFDRiwyQkFBUyxHQUFJLEVBQWIsQ0FERjtBQUVBLE1BQUksS0FBSyxDQUFMLElBQVUsZ0JBQUUsTUFBRixDQUFTLENBQVQsRUFBWSxFQUFFLENBQUYsQ0FBWixDQUFWLEVBQ0YsT0FBTyxDQUFQLENBREY7QUFFQSxNQUFNLHdCQUFNLEdBQUksRUFBVixDQUxvQjtBQU0xQixPQUFLLElBQU0sQ0FBTixJQUFXLENBQWhCO0FBQ0UsUUFBSSxNQUFNLENBQU4sRUFDRixFQUFFLENBQUYsSUFBTyxFQUFFLENBQUYsQ0FBUCxDQURGO0dBREYsT0FHTyxDQUFQLENBVDBCO0NBQWI7Ozs7QUFjZixJQUFNLFVBQVUsU0FBVixPQUFVO1NBQU0sT0FBTyxJQUFQLENBQVksRUFBWixFQUFnQixNQUFoQixLQUEyQixDQUEzQixHQUErQixTQUEvQixHQUEyQyxFQUEzQztDQUFOOzs7O0FBSWhCLElBQU0sWUFBWSxTQUFaLFNBQVk7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QUFQLENBREYsS0FHRSxPQUFPLEdBQUcsTUFBSCxDQUFVLENBQUMsQ0FBRCxDQUFWLENBQVAsQ0FIRjtHQUhGO0NBRDBCLENBQTVCOztBQVdBLEVBQUUsTUFBRixHQUFXO1NBQUssZ0JBQUUsSUFBRixDQUFPO1dBQU0sTUFBTSxHQUFHLE1BQUgsQ0FBVSxDQUFWLENBQU47R0FBTixFQUEwQixVQUFDLEVBQUQsRUFBSyxFQUFMO1dBQy9DLFNBQVMsRUFBVCxFQUFhLFFBQVEsZ0JBQUUsTUFBRixDQUFTLE1BQU0sRUFBTixFQUFVLENBQUMsTUFBTSxFQUFOLENBQUQsQ0FBVyxNQUFYLENBQWtCLGdCQUFFLFVBQUYsQ0FBYSxDQUFiLENBQWxCLENBQW5CLENBQVIsQ0FBYjtHQUQrQztDQUF0Qzs7a0JBR0kiLCJmaWxlIjoicGFydGlhbC5sZW5zZXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUiBmcm9tIFwicmFtZGFcIlxuXG4vL1xuXG5jb25zdCBkZWxldGVLZXkgPSAoaywgbykgPT4ge1xuICBpZiAobyA9PT0gdW5kZWZpbmVkIHx8ICEoayBpbiBvKSlcbiAgICByZXR1cm4gb1xuICBsZXQgclxuICBmb3IgKGNvbnN0IHAgaW4gbykge1xuICAgIGlmIChwICE9PSBrKSB7XG4gICAgICBpZiAodW5kZWZpbmVkID09PSByKVxuICAgICAgICByID0ge31cbiAgICAgIHJbcF0gPSBvW3BdXG4gICAgfVxuICB9XG4gIHJldHVybiByXG59XG5cbmNvbnN0IHNldEtleSA9IChrLCB2LCBvKSA9PiB7XG4gIGlmIChvID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIHtba106IHZ9XG4gIGlmIChrIGluIG8gJiYgUi5lcXVhbHModiwgb1trXSkpXG4gICAgcmV0dXJuIG9cbiAgY29uc3QgciA9IHtba106IHZ9XG4gIGZvciAoY29uc3QgcCBpbiBvKVxuICAgIGlmIChwICE9PSBrKVxuICAgICAgcltwXSA9IG9bcF1cbiAgcmV0dXJuIHJcbn1cblxuLy9cblxuY29uc3QgZHJvcHBlZCA9IHhzID0+IE9iamVjdC5rZXlzKHhzKS5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiB4c1xuXG4vL1xuXG5jb25zdCB0b1BhcnRpYWwgPSB0cmFuc2Zvcm0gPT4geCA9PiB1bmRlZmluZWQgPT09IHggPyB4IDogdHJhbnNmb3JtKHgpXG5cbi8vXG5cbmNvbnN0IGNvbnNlcnZlID0gKGMwLCBjMSkgPT4gUi5lcXVhbHMoYzAsIGMxKSA/IGMwIDogYzFcblxuY29uc3QgdG9Db25zZXJ2ZSA9IGYgPT4gKHksIGMwKSA9PiAgY29uc2VydmUoYzAsIGYoeSwgYzApKVxuXG4vL1xuXG5leHBvcnQgY29uc3QgbGlmdCA9IGwgPT4ge1xuICBzd2l0Y2ggKHR5cGVvZiBsKSB7XG4gIGNhc2UgXCJzdHJpbmdcIjogcmV0dXJuIEwucHJvcChsKVxuICBjYXNlIFwibnVtYmVyXCI6IHJldHVybiBMLmluZGV4KGwpXG4gIGRlZmF1bHQ6ICAgICAgIHJldHVybiBsXG4gIH1cbn1cblxuY29uc3QgTCA9IChsLCAuLi5scykgPT5cbiAgbHMubGVuZ3RoID09PSAwID8gbGlmdChsKSA6IFIuY29tcG9zZShsaWZ0KGwpLCAuLi5scy5tYXAobGlmdCkpXG5cbkwuY29tcG9zZSA9IExcbkwuZGVsZXRlID0gUi5jdXJyeSgobCwgcykgPT4gUi5zZXQobGlmdChsKSwgdW5kZWZpbmVkLCBzKSlcbkwubGVucyA9IFIubGVuc1xuTC5vdmVyID0gUi5jdXJyeSgobCwgeDJ4LCBzKSA9PiBSLm92ZXIobGlmdChsKSwgeDJ4LCBzKSlcbkwuc2V0ID0gUi5jdXJyeSgobCwgeCwgcykgPT4gUi5zZXQobGlmdChsKSwgeCwgcykpXG5MLnZpZXcgPSBSLmN1cnJ5KChsLCBzKSA9PiBSLnZpZXcobGlmdChsKSwgcykpXG5cbkwuY2hvb3NlID0geDJ5TCA9PiB0b0Z1bmN0b3IgPT4gdGFyZ2V0ID0+IHtcbiAgY29uc3QgbCA9IGxpZnQoeDJ5TCh0YXJnZXQpKVxuICByZXR1cm4gUi5tYXAoZm9jdXMgPT4gUi5zZXQobCwgZm9jdXMsIHRhcmdldCksIHRvRnVuY3RvcihSLnZpZXcobCwgdGFyZ2V0KSkpXG59XG5cbkwuZmlyc3RPZiA9IChsLCAuLi5scykgPT4gTC5jaG9vc2UoeCA9PiB7XG4gIGNvbnN0IGxscyA9IFtsLCAuLi5sc11cbiAgcmV0dXJuIGxsc1tNYXRoLm1heCgwLCBsbHMuZmluZEluZGV4KGwgPT4gTC52aWV3KGwsIHgpICE9PSB1bmRlZmluZWQpKV1cbn0pXG5cbkwucmVwbGFjZSA9IFIuY3VycnkoKGlubiwgb3V0KSA9PlxuICBSLmxlbnMoeCA9PiBSLmVxdWFscyh4LCBpbm4pID8gb3V0IDogeCxcbiAgICAgICAgIHRvQ29uc2VydmUoeSA9PiBSLmVxdWFscyh5LCBvdXQpID8gaW5uIDogeSkpKVxuXG5MLmRlZmF1bHQgPSBMLnJlcGxhY2UodW5kZWZpbmVkKVxuTC5yZXF1aXJlZCA9IGlubiA9PiBMLnJlcGxhY2UoaW5uLCB1bmRlZmluZWQpXG5MLmRlZmluZSA9IHYgPT4gUi5jb21wb3NlKEwucmVxdWlyZWQodiksIEwuZGVmYXVsdCh2KSlcblxuTC5ub3JtYWxpemUgPSB0cmFuc2Zvcm0gPT5cbiAgUi5sZW5zKHRvUGFydGlhbCh0cmFuc2Zvcm0pLCB0b0NvbnNlcnZlKHRvUGFydGlhbCh0cmFuc2Zvcm0pKSlcblxuTC5wcm9wID0gayA9PlxuICBSLmxlbnMobyA9PiBvICYmIG9ba10sXG4gICAgICAgICAodiwgbykgPT4gdiA9PT0gdW5kZWZpbmVkID8gZGVsZXRlS2V5KGssIG8pIDogc2V0S2V5KGssIHYsIG8pKVxuXG5MLmZpbmQgPSBwcmVkaWNhdGUgPT4gTC5jaG9vc2UoeHMgPT4ge1xuICBpZiAoeHMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gTC5hcHBlbmRcbiAgY29uc3QgaSA9IHhzLmZpbmRJbmRleChwcmVkaWNhdGUpXG4gIGlmIChpIDwgMClcbiAgICByZXR1cm4gTC5hcHBlbmRcbiAgcmV0dXJuIEwuaW5kZXgoaSlcbn0pXG5cbkwuaW5kZXggPSBpID0+IFIubGVucyh4cyA9PiB4cyAmJiB4c1tpXSwgKHgsIHhzKSA9PiB7XG4gIGlmICh4ID09PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoeHMgPT09IHVuZGVmaW5lZClcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICBpZiAoaSA8IHhzLmxlbmd0aClcbiAgICAgIHJldHVybiBkcm9wcGVkKHhzLnNsaWNlKDAsIGkpLmNvbmNhdCh4cy5zbGljZShpKzEpKSlcbiAgICByZXR1cm4geHNcbiAgfSBlbHNlIHtcbiAgICBpZiAoeHMgPT09IHVuZGVmaW5lZClcbiAgICAgIHJldHVybiBBcnJheShpKS5jb25jYXQoW3hdKVxuICAgIGlmICh4cy5sZW5ndGggPD0gaSlcbiAgICAgIHJldHVybiB4cy5jb25jYXQoQXJyYXkoaSAtIHhzLmxlbmd0aCksIFt4XSlcbiAgICBpZiAoUi5lcXVhbHMoeCwgeHNbaV0pKVxuICAgICAgcmV0dXJuIHhzXG4gICAgcmV0dXJuIHhzLnNsaWNlKDAsIGkpLmNvbmNhdChbeF0sIHhzLnNsaWNlKGkrMSkpXG4gIH1cbn0pXG5cbkwuYXBwZW5kID0gUi5sZW5zKCgpID0+IHt9LCAoeCwgeHMpID0+IHtcbiAgaWYgKHggPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB4c1xuICB9IGVsc2Uge1xuICAgIGlmICh4cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuIFt4XVxuICAgIGVsc2VcbiAgICAgIHJldHVybiB4cy5jb25jYXQoW3hdKVxuICB9XG59KVxuXG5MLmZpbHRlciA9IHAgPT4gUi5sZW5zKHhzID0+IHhzICYmIHhzLmZpbHRlcihwKSwgKHlzLCB4cykgPT5cbiAgY29uc2VydmUoeHMsIGRyb3BwZWQoUi5jb25jYXQoeXMgfHwgW10sICh4cyB8fCBbXSkuZmlsdGVyKFIuY29tcGxlbWVudChwKSkpKSkpXG5cbmV4cG9ydCBkZWZhdWx0IExcbiJdfQ== | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9wYXJ0aWFsLmxlbnNlcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFJQSxJQUFNLFlBQVksU0FBWixTQUFZLENBQUMsQ0FBRCxFQUFJLENBQUosRUFBVTtBQUMxQixNQUFJLE1BQU0sU0FBTixJQUFtQixFQUFFLEtBQUssQ0FBTCxDQUFGLEVBQ3JCLE9BQU8sQ0FBUCxDQURGO0FBRUEsTUFBSSxhQUFKLENBSDBCO0FBSTFCLE9BQUssSUFBTSxDQUFOLElBQVcsQ0FBaEIsRUFBbUI7QUFDakIsUUFBSSxNQUFNLENBQU4sRUFBUztBQUNYLFVBQUksY0FBYyxDQUFkLEVBQ0YsSUFBSSxFQUFKLENBREY7QUFFQSxRQUFFLENBQUYsSUFBTyxFQUFFLENBQUYsQ0FBUCxDQUhXO0tBQWI7R0FERjtBQU9BLFNBQU8sQ0FBUCxDQVgwQjtDQUFWOztBQWNsQixJQUFNLFNBQVMsU0FBVCxNQUFTLENBQUMsQ0FBRCxFQUFJLENBQUosRUFBTyxDQUFQLEVBQWE7QUFDMUIsTUFBSSxNQUFNLFNBQU4sRUFDRiwyQkFBUyxHQUFJLEVBQWIsQ0FERjtBQUVBLE1BQUksS0FBSyxDQUFMLElBQVUsZ0JBQUUsTUFBRixDQUFTLENBQVQsRUFBWSxFQUFFLENBQUYsQ0FBWixDQUFWLEVBQ0YsT0FBTyxDQUFQLENBREY7QUFFQSxNQUFNLHdCQUFNLEdBQUksRUFBVixDQUxvQjtBQU0xQixPQUFLLElBQU0sQ0FBTixJQUFXLENBQWhCO0FBQ0UsUUFBSSxNQUFNLENBQU4sRUFDRixFQUFFLENBQUYsSUFBTyxFQUFFLENBQUYsQ0FBUCxDQURGO0dBREYsT0FHTyxDQUFQLENBVDBCO0NBQWI7Ozs7QUFjZixJQUFNLFVBQVUsU0FBVixPQUFVO1NBQU0sT0FBTyxJQUFQLENBQVksRUFBWixFQUFnQixNQUFoQixLQUEyQixDQUEzQixHQUErQixTQUEvQixHQUEyQyxFQUEzQztDQUFOOzs7O0FBSWhCLElBQU0sWUFBWSxTQUFaLFNBQVk7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UyxDQUFULEVBQVksR0FBRyxDQUFILENBQVosQ0FBSixFQUNFLE9BQU8sRUFBUCxDQURGO0FBRUEsYUFBTyxHQUFHLEtBQUgsQ0FBUyxDQUFULEVBQVksQ0FBWixFQUFlLE1BQWYsQ0FBc0IsQ0FBQyxDQUFELENBQXRCLEVBQTJCLEdBQUcsS0FBSCxDQUFTLElBQUUsQ0FBRixDQUFwQyxDQUFQLENBUEs7S0FOUDtHQUR1QztDQUEvQjs7QUFrQlYsRUFBRSxNQUFGLEdBQVcsZ0JBQUUsSUFBRixDQUFPLFlBQU0sRUFBTixFQUFVLFVBQUMsQ0FBRCxFQUFJLEVBQUo7U0FDMUIsTUFBTSxTQUFOLEdBQWtCLEVBQWxCLEdBQXVCLE9BQU8sU0FBUCxHQUFtQixDQUFDLENBQUQsQ0FBbkIsR0FBeUIsR0FBRyxNQUFILENBQVUsQ0FBQyxDQUFELENBQVYsQ0FBekI7Q0FERyxDQUE1Qjs7QUFHQSxFQUFFLE1BQUYsR0FBVztTQUFLLGdCQUFFLElBQUYsQ0FBTztXQUFNLE1BQU0sR0FBRyxNQUFILENBQVUsQ0FBVixDQUFOO0dBQU4sRUFBMEIsVUFBQyxFQUFELEVBQUssRUFBTDtXQUMvQyxTQUFTLEVBQVQsRUFBYSxRQUFRLGdCQUFFLE1BQUYsQ0FBUyxNQUFNLEVBQU4sRUFBVSxDQUFDLE1BQU0sRUFBTixDQUFELENBQVcsTUFBWCxDQUFrQixnQkFBRSxVQUFGLENBQWEsQ0FBYixDQUFsQixDQUFuQixDQUFSLENBQWI7R0FEK0M7Q0FBdEM7O2tCQUdJIiwiZmlsZSI6InBhcnRpYWwubGVuc2VzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFIgZnJvbSBcInJhbWRhXCJcblxuLy9cblxuY29uc3QgZGVsZXRlS2V5ID0gKGssIG8pID0+IHtcbiAgaWYgKG8gPT09IHVuZGVmaW5lZCB8fCAhKGsgaW4gbykpXG4gICAgcmV0dXJuIG9cbiAgbGV0IHJcbiAgZm9yIChjb25zdCBwIGluIG8pIHtcbiAgICBpZiAocCAhPT0gaykge1xuICAgICAgaWYgKHVuZGVmaW5lZCA9PT0gcilcbiAgICAgICAgciA9IHt9XG4gICAgICByW3BdID0gb1twXVxuICAgIH1cbiAgfVxuICByZXR1cm4gclxufVxuXG5jb25zdCBzZXRLZXkgPSAoaywgdiwgbykgPT4ge1xuICBpZiAobyA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiB7W2tdOiB2fVxuICBpZiAoayBpbiBvICYmIFIuZXF1YWxzKHYsIG9ba10pKVxuICAgIHJldHVybiBvXG4gIGNvbnN0IHIgPSB7W2tdOiB2fVxuICBmb3IgKGNvbnN0IHAgaW4gbylcbiAgICBpZiAocCAhPT0gaylcbiAgICAgIHJbcF0gPSBvW3BdXG4gIHJldHVybiByXG59XG5cbi8vXG5cbmNvbnN0IGRyb3BwZWQgPSB4cyA9PiBPYmplY3Qua2V5cyh4cykubGVuZ3RoID09PSAwID8gdW5kZWZpbmVkIDogeHNcblxuLy9cblxuY29uc3QgdG9QYXJ0aWFsID0gdHJhbnNmb3JtID0+IHggPT4gdW5kZWZpbmVkID09PSB4ID8geCA6IHRyYW5zZm9ybSh4KVxuXG4vL1xuXG5jb25zdCBjb25zZXJ2ZSA9IChjMCwgYzEpID0+IFIuZXF1YWxzKGMwLCBjMSkgPyBjMCA6IGMxXG5cbmNvbnN0IHRvQ29uc2VydmUgPSBmID0+ICh5LCBjMCkgPT4gIGNvbnNlcnZlKGMwLCBmKHksIGMwKSlcblxuLy9cblxuZXhwb3J0IGNvbnN0IGxpZnQgPSBsID0+IHtcbiAgc3dpdGNoICh0eXBlb2YgbCkge1xuICBjYXNlIFwic3RyaW5nXCI6IHJldHVybiBMLnByb3AobClcbiAgY2FzZSBcIm51bWJlclwiOiByZXR1cm4gTC5pbmRleChsKVxuICBkZWZhdWx0OiAgICAgICByZXR1cm4gbFxuICB9XG59XG5cbmNvbnN0IEwgPSAobCwgLi4ubHMpID0+XG4gIGxzLmxlbmd0aCA9PT0gMCA/IGxpZnQobCkgOiBSLmNvbXBvc2UobGlmdChsKSwgLi4ubHMubWFwKGxpZnQpKVxuXG5MLmNvbXBvc2UgPSBMXG5MLmRlbGV0ZSA9IFIuY3VycnkoKGwsIHMpID0+IFIuc2V0KGxpZnQobCksIHVuZGVmaW5lZCwgcykpXG5MLmRlbGV0ZUFsbCA9IFIuY3VycnkoKGxlbnMsIGRhdGEpID0+IHtcbiAgd2hpbGUgKEwudmlldyhsZW5zLCBkYXRhKSAhPT0gdW5kZWZpbmVkKVxuICAgIGRhdGEgPSBMLmRlbGV0ZShsZW5zLCBkYXRhKVxuICByZXR1cm4gZGF0YVxufSlcbkwubGVucyA9IFIubGVuc1xuTC5vdmVyID0gUi5jdXJyeSgobCwgeDJ4LCBzKSA9PiBSLm92ZXIobGlmdChsKSwgeDJ4LCBzKSlcbkwuc2V0ID0gUi5jdXJyeSgobCwgeCwgcykgPT4gUi5zZXQobGlmdChsKSwgeCwgcykpXG5MLnZpZXcgPSBSLmN1cnJ5KChsLCBzKSA9PiBSLnZpZXcobGlmdChsKSwgcykpXG5cbkwuY2hvb3NlID0geDJ5TCA9PiB0b0Z1bmN0b3IgPT4gdGFyZ2V0ID0+IHtcbiAgY29uc3QgbCA9IGxpZnQoeDJ5TCh0YXJnZXQpKVxuICByZXR1cm4gUi5tYXAoZm9jdXMgPT4gUi5zZXQobCwgZm9jdXMsIHRhcmdldCksIHRvRnVuY3RvcihSLnZpZXcobCwgdGFyZ2V0KSkpXG59XG5cbkwuZmlyc3RPZiA9IChsLCAuLi5scykgPT4gTC5jaG9vc2UoeCA9PiB7XG4gIGNvbnN0IGxscyA9IFtsLCAuLi5sc11cbiAgcmV0dXJuIGxsc1tNYXRoLm1heCgwLCBsbHMuZmluZEluZGV4KGwgPT4gTC52aWV3KGwsIHgpICE9PSB1bmRlZmluZWQpKV1cbn0pXG5cbkwucmVwbGFjZSA9IFIuY3VycnkoKGlubiwgb3V0KSA9PlxuICBSLmxlbnMoeCA9PiBSLmVxdWFscyh4LCBpbm4pID8gb3V0IDogeCxcbiAgICAgICAgIHRvQ29uc2VydmUoeSA9PiBSLmVxdWFscyh5LCBvdXQpID8gaW5uIDogeSkpKVxuXG5MLmRlZmF1bHQgPSBMLnJlcGxhY2UodW5kZWZpbmVkKVxuTC5yZXF1aXJlZCA9IGlubiA9PiBMLnJlcGxhY2UoaW5uLCB1bmRlZmluZWQpXG5MLmRlZmluZSA9IHYgPT4gUi5jb21wb3NlKEwucmVxdWlyZWQodiksIEwuZGVmYXVsdCh2KSlcblxuTC5ub3JtYWxpemUgPSB0cmFuc2Zvcm0gPT5cbiAgUi5sZW5zKHRvUGFydGlhbCh0cmFuc2Zvcm0pLCB0b0NvbnNlcnZlKHRvUGFydGlhbCh0cmFuc2Zvcm0pKSlcblxuTC5wcm9wID0gayA9PlxuICBSLmxlbnMobyA9PiBvICYmIG9ba10sXG4gICAgICAgICAodiwgbykgPT4gdiA9PT0gdW5kZWZpbmVkID8gZGVsZXRlS2V5KGssIG8pIDogc2V0S2V5KGssIHYsIG8pKVxuXG5MLmZpbmQgPSBwcmVkaWNhdGUgPT4gTC5jaG9vc2UoeHMgPT4ge1xuICBpZiAoeHMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gTC5hcHBlbmRcbiAgY29uc3QgaSA9IHhzLmZpbmRJbmRleChwcmVkaWNhdGUpXG4gIHJldHVybiBpIDwgMCA/IEwuYXBwZW5kIDogaVxufSlcblxuTC5maW5kV2l0aCA9IChsLCAuLi5scykgPT4ge1xuICBjb25zdCBsbHMgPSBMKGwsIC4uLmxzKVxuICByZXR1cm4gTChMLmZpbmQoeCA9PiBMLnZpZXcobGxzLCB4KSAhPT0gdW5kZWZpbmVkKSwgbGxzKVxufVxuXG5MLmluZGV4ID0gaSA9PiBSLmxlbnMoeHMgPT4geHMgJiYgeHNbaV0sICh4LCB4cykgPT4ge1xuICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHhzID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgaWYgKGkgPCB4cy5sZW5ndGgpXG4gICAgICByZXR1cm4gZHJvcHBlZCh4cy5zbGljZSgwLCBpKS5jb25jYXQoeHMuc2xpY2UoaSsxKSkpXG4gICAgcmV0dXJuIHhzXG4gIH0gZWxzZSB7XG4gICAgaWYgKHhzID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gQXJyYXkoaSkuY29uY2F0KFt4XSlcbiAgICBpZiAoeHMubGVuZ3RoIDw9IGkpXG4gICAgICByZXR1cm4geHMuY29uY2F0KEFycmF5KGkgLSB4cy5sZW5ndGgpLCBbeF0pXG4gICAgaWYgKFIuZXF1YWxzKHgsIHhzW2ldKSlcbiAgICAgIHJldHVybiB4c1xuICAgIHJldHVybiB4cy5zbGljZSgwLCBpKS5jb25jYXQoW3hdLCB4cy5zbGljZShpKzEpKVxuICB9XG59KVxuXG5MLmFwcGVuZCA9IFIubGVucygoKSA9PiB7fSwgKHgsIHhzKSA9PlxuICB4ID09PSB1bmRlZmluZWQgPyB4cyA6IHhzID09PSB1bmRlZmluZWQgPyBbeF0gOiB4cy5jb25jYXQoW3hdKSlcblxuTC5maWx0ZXIgPSBwID0+IFIubGVucyh4cyA9PiB4cyAmJiB4cy5maWx0ZXIocCksICh5cywgeHMpID0+XG4gIGNvbnNlcnZlKHhzLCBkcm9wcGVkKFIuY29uY2F0KHlzIHx8IFtdLCAoeHMgfHwgW10pLmZpbHRlcihSLmNvbXBsZW1lbnQocCkpKSkpKVxuXG5leHBvcnQgZGVmYXVsdCBMXG4iXX0= |
{ | ||
"name": "partial.lenses", | ||
"version": "0.6.0", | ||
"version": "0.7.0", | ||
"description": "Ramda compatible lenses", | ||
@@ -33,9 +33,9 @@ "main": "lib/partial.lenses.js", | ||
"babel-cli": "^6.5.1", | ||
"babel-eslint": "^4.1.8", | ||
"babel-eslint": "^5.0.0", | ||
"babel-plugin-transform-es2015-modules-commonjs": "^6.5.2", | ||
"babel-preset-es2015": "^6.5.0", | ||
"babel-preset-stage-2": "^6.5.0", | ||
"eslint": "^2.0.0", | ||
"eslint": "^2.2.0", | ||
"mocha": "^2.4.5" | ||
} | ||
} |
157
README.md
@@ -1,2 +0,2 @@ | ||
[ [Examples](#examples) | [Reference](#reference) | [Background](#background) ] | ||
[ [Tutorial](#tutorial) | [Reference](#reference) | [Background](#background) ] | ||
@@ -16,5 +16,5 @@ This library provides a collection of [Ramda](http://ramdajs.com/) compatible | ||
[![npm version](https://badge.fury.io/js/partial.lenses.svg)](http://badge.fury.io/js/partial.lenses) | ||
[![npm version](https://badge.fury.io/js/partial.lenses.svg)](http://badge.fury.io/js/partial.lenses) [![](https://david-dm.org/dirty-js/partial.lenses.svg)](https://david-dm.org/dirty-js/partial.lenses) | ||
## Examples | ||
## Tutorial | ||
@@ -28,5 +28,12 @@ Let's work with the following sample JSON object: | ||
First we define a parameterized lens for accessing texts: | ||
First we import libraries | ||
```js | ||
import L from "partial.lenses" | ||
import R from "ramda" | ||
``` | ||
and compose a parameterized lens for accessing texts: | ||
```js | ||
const textIn = language => | ||
@@ -42,5 +49,11 @@ L.compose(L.prop("contents"), | ||
Like with ordinary lenses, we can now use the partial lens to view or query | ||
texts: | ||
Take a moment to read through the above definition line by line. Each line has | ||
a specific purpose. The purpose of the `L.prop(...)` lines is probably obvious. | ||
The other lines we will mention below. | ||
### Querying data | ||
Thanks to the parameterized search part, `L.find(R.whereEq({language}))`, of the | ||
lens composition, we can use it to query texts: | ||
```js | ||
@@ -53,3 +66,4 @@ > L.view(textIn("sv"), data) | ||
If we query a text that does not exist, we get the default: | ||
Partial lenses can deal with missing data. If we use the partial lens to query | ||
a text that does not exist, we get the default: | ||
@@ -61,4 +75,5 @@ ```js | ||
With the partial lens we defined, we get the default even if we query from | ||
`undefined`: | ||
We get this default, rather than undefined, thanks to the last part, | ||
`L.default("")`, of our lens composition. We get the default even if we query | ||
from `undefined`: | ||
@@ -72,2 +87,4 @@ ```js | ||
### Updating data | ||
As with ordinary lenses, we can use the same lens to update texts: | ||
@@ -81,2 +98,4 @@ | ||
### Inserting data | ||
The same partial lens also allows us to insert new texts: | ||
@@ -91,4 +110,8 @@ | ||
Note the position into which the new text was inserted. | ||
Note the position into which the new text was inserted. The array of texts is | ||
kept sorted thanks to the `L.normalize(R.sortBy(R.prop("language")))` part of | ||
our lens. | ||
### Deleting data | ||
Finally, we can use the same partial lens to delete texts: | ||
@@ -101,2 +124,8 @@ | ||
Note that a single text is actually a part of an object. The key to having the | ||
whole object vanish, rather than just the `text` property, is the | ||
`L.default({language})` part of our lens composition. A `L.default(value)` lens | ||
works *symmetrically*. When set with `value`, the result is `undefined`, which | ||
means that the focus of the lens is to be deleted. | ||
If we delete all of the texts, we get the required value: | ||
@@ -110,7 +139,21 @@ | ||
The `contents` property is not removed thanks to the `L.required([])` part of | ||
our lens composition. `L.required` is the dual of `L.default`. `L.default` | ||
replaces undefined values when viewed and `L.required` replaces undefined values | ||
when set. | ||
Note that unless required and default values are explicitly specified as part of | ||
the lens, they will both be undefined. | ||
For clarity, the code snippets in this section avoided some of the shorthands | ||
that this library supports. In particular, | ||
### Exercise | ||
Take out one (or more) `L.required(...)`, `L.normalize(...)` or `L.default(...)` | ||
part(s) from the lens composition and try to predict what happens when you rerun | ||
the examples with the modified lens composition. Verify your reasoning by | ||
actually rerunning the examples. | ||
### Shorthands | ||
For clarity, the previous code snippets avoided some of the shorthands that this | ||
library supports. In particular, | ||
* `L.compose(...)` can be abbreviated as `L(...)`, | ||
@@ -120,2 +163,59 @@ * `L.prop(string)` can be abbreviated as `string`, and | ||
### Systematic decomposition | ||
It is also typical to compose lenses out of short paths following the schema of | ||
the JSON data being manipulated. Reconsider the lens from the start of the | ||
example: | ||
```js | ||
const textIn = language => | ||
L.compose(L.prop("contents"), | ||
L.required([]), | ||
L.normalize(R.sortBy(R.prop("language"))), | ||
L.find(R.whereEq({language})), | ||
L.default({language}), | ||
L.prop("text"), | ||
L.default("")) | ||
``` | ||
Following the structure or schema of the JSON, we could break this into three | ||
separate lenses: | ||
* a lens for accessing the contents of a data object, | ||
* a parameterized lens for querying a content object from contents, and | ||
* a lens for accessing the text of a content object. | ||
Furthermore, we could organize the lenses into an object following the structure | ||
of the JSON: | ||
```js | ||
const M = { | ||
data: { | ||
contents: L("contents", | ||
L.required([]), | ||
L.normalize(R.sortBy(R.prop("language")))) | ||
}, | ||
contents: { | ||
contentIn: language => L(L.find(R.whereEq({language})), | ||
L.default({language})) | ||
}, | ||
content: { | ||
text: L("text", L.default("")) | ||
} | ||
} | ||
``` | ||
Using the above object, we could rewrite the parameterized `textIn` lens as: | ||
```js | ||
const textIn = language => L(M.data.contents, | ||
M.contents.contentIn(language), | ||
M.content.text) | ||
``` | ||
This style of organizing lenses is overkill for our toy example. In a more | ||
realistic case the `data` object would contain many more properties. Also, | ||
rather than composing a lens, like `textIn` above, to access a leaf property | ||
from the root of our object, we might actually compose lenses incrementally as | ||
we inspect the model structure. | ||
## Reference | ||
@@ -170,2 +270,9 @@ | ||
#### L.deleteAll(l, s) | ||
`L.deleteAll(l, s)` deletes all the non `undefined` items targeted by the lens | ||
`l` from `s`. This only makes sense for a lens that | ||
* can potentially focus on more than one item and | ||
* will focus on `undefined` when it doesn't find an item to focus on. | ||
### Lenses | ||
@@ -186,4 +293,12 @@ | ||
determined by the given function that maps the underlying view, which can be | ||
undefined, to a lens. | ||
undefined, to a lens. The lens returned by the given function will be lifted. | ||
Note that the type of `L.choose` is | ||
```haskell | ||
choose :: (Maybe a -> PartialLens b s) -> PartialLens a s -> PartialLens b s | ||
``` | ||
which is very similar to the type of the monadic bind operation. | ||
#### L.filter(predicate) | ||
@@ -211,2 +326,17 @@ | ||
#### L.findWith(l, ...ls) | ||
`L.findWith(l, ...ls)` is defined as | ||
```js | ||
L.findWith = (l, ...ls) => { | ||
const lls = L(l, ...ls) | ||
return L(L.find(x => L.view(lls, x) !== undefined), lls) | ||
} | ||
``` | ||
and basically chooses an index from an array through which the given lens, `L(l, | ||
...ls)`, focuses on a defined item and then returns a lens that focuses on that | ||
item. | ||
#### L.firstOf(l, ...ls) | ||
@@ -222,2 +352,3 @@ | ||
#### L.index(integer) | ||
@@ -224,0 +355,0 @@ |
@@ -60,2 +60,7 @@ import R from "ramda" | ||
L.delete = R.curry((l, s) => R.set(lift(l), undefined, s)) | ||
L.deleteAll = R.curry((lens, data) => { | ||
while (L.view(lens, data) !== undefined) | ||
data = L.delete(lens, data) | ||
return data | ||
}) | ||
L.lens = R.lens | ||
@@ -95,7 +100,10 @@ L.over = R.curry((l, x2x, s) => R.over(lift(l), x2x, s)) | ||
const i = xs.findIndex(predicate) | ||
if (i < 0) | ||
return L.append | ||
return L.index(i) | ||
return i < 0 ? L.append : i | ||
}) | ||
L.findWith = (l, ...ls) => { | ||
const lls = L(l, ...ls) | ||
return L(L.find(x => L.view(lls, x) !== undefined), lls) | ||
} | ||
L.index = i => R.lens(xs => xs && xs[i], (x, xs) => { | ||
@@ -119,12 +127,4 @@ if (x === undefined) { | ||
L.append = R.lens(() => {}, (x, xs) => { | ||
if (x === undefined) { | ||
return xs | ||
} else { | ||
if (xs === undefined) | ||
return [x] | ||
else | ||
return xs.concat([x]) | ||
} | ||
}) | ||
L.append = R.lens(() => {}, (x, xs) => | ||
x === undefined ? xs : xs === undefined ? [x] : xs.concat([x])) | ||
@@ -131,0 +131,0 @@ L.filter = p => R.lens(xs => xs && xs.filter(p), (ys, xs) => |
@@ -115,2 +115,8 @@ import R from "ramda" | ||
describe("L.findWith", () => { | ||
testEq('L.view(L.findWith("x", 1), [{x: ["a"]},{x: ["b","c"]}])', "c") | ||
testEq('L.set(L.findWith("x", 1), "d", [{x: ["a"]},{x: ["b","c"]}])', [{x: ["a"]},{x: ["b","d"]}]) | ||
testEq('L.delete(L.findWith("x", 1), [{x: ["a"]},{x: ["b","c"]}])', [{x: ["a"]},{x: ["b"]}]) | ||
}) | ||
describe("L.filter", () => { | ||
@@ -125,1 +131,5 @@ testEq('L.view(L.filter(R.lt(9)), [3,1,4,1,5,9,2])', []) | ||
}) | ||
describe("L.deleteAll", () => { | ||
testEq('L.deleteAll(L.find(x => x < 2), [3,1,4,1,5,9,2])', [3,4,5,9,2]) | ||
}) |
Sorry, the diff of this file is not supported yet
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
55953
398
452
1