🚀 Big News: Socket Acquires Coana to Bring Reachability Analysis to Every Appsec Team.Learn more
Socket
Book a DemoInstallSign in
Socket

fastener

Package Overview
Dependencies
Maintainers
1
Versions
11
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

fastener - npm Package Compare versions

Comparing version

to
2.1.0

.nyc_output/486d61117c778e6b3b29950162fe1dba.json

32

lib/fastener.js

@@ -6,3 +6,3 @@ "use strict";

});
exports.everywhere = exports.transformMove = exports.queryMove = exports.toZipper = exports.right = exports.left = exports.downLast = exports.downHead = exports.downTo = exports.modify = exports.set = exports.keyOf = exports.get = undefined;
exports.everywhere = exports.transformMove = exports.queryMove = exports.toZipper = exports.right = exports.left = exports.downLast = exports.downHead = exports.downPath = exports.downTo = exports.modify = exports.set = exports.keyOf = exports.get = undefined;
exports.up = up;

@@ -12,2 +12,3 @@ exports.head = head;

exports.fromZipper = fromZipper;
exports.pathOf = pathOf;

@@ -104,3 +105,3 @@ var _infestines = require("infestines");

};
var set = exports.set = (0, _infestines.curry2)(setU);
var set = exports.set = (0, _infestines.curry)(setU);

@@ -110,3 +111,3 @@ var modifyU = function modifyU(f, z) {

};
var modify = exports.modify = (0, _infestines.curry2)(modifyU);
var modify = exports.modify = (0, _infestines.curry)(modifyU);

@@ -145,4 +146,10 @@ function up(_ref) {

}
var downTo = exports.downTo = (0, _infestines.curry)(downToU);
var downTo = exports.downTo = (0, _infestines.curry2)(downToU);
function downPathU(path, z) {
for (var i = 0, n = path.length; z && i < n; ++i) {
z = downToU(path[i], z);
}return z;
}
var downPath = exports.downPath = (0, _infestines.curry)(downPathU);

@@ -196,3 +203,3 @@ var downMost = function downMost(head) {

}
var queryMove = exports.queryMove = (0, _infestines.curry4)(queryMoveU);
var queryMove = exports.queryMove = (0, _infestines.curry)(queryMoveU);

@@ -217,3 +224,3 @@ function bwd(move, z) {

};
var transformMove = exports.transformMove = (0, _infestines.curry3)(transformMoveU);
var transformMove = exports.transformMove = (0, _infestines.curry)(transformMoveU);

@@ -228,3 +235,12 @@ var everywhereG = function everywhereG(f) {

};
var everywhere = exports.everywhere = (0, _infestines.curry2)(everywhereU);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9mYXN0ZW5lci5qcyJdLCJuYW1lcyI6WyJ1cCIsImhlYWQiLCJsYXN0IiwiZnJvbVppcHBlciIsImZpcnN0S2V5IiwibyIsImsiLCJsYXN0S2V5Iiwia2V5IiwiaXNTdHJpbmciLCJ4IiwiaXNOdW1iZXIiLCJyZXZlcnNlIiwiZnJvbSIsInRvIiwibGVuZ3RoIiwiemlwcGVyIiwibGVmdCIsImZvY3VzIiwicmlnaHQiLCJpbnRvT2JqZWN0IiwibGlzdCIsIm9iamVjdCIsImZyb21PYmplY3QiLCJpbnRvQXJyYXkiLCJhcnJheSIsInB1c2giLCJmcm9tQXJyYXkiLCJpIiwiZ2V0IiwieiIsImtleU9mIiwic2V0VSIsInNldCIsIm1vZGlmeVUiLCJmIiwibW9kaWZ5IiwiZG93blRvVSIsImRvd25UbyIsImRvd25Nb3N0IiwiZG93bkhlYWQiLCJkb3duTGFzdCIsInUiLCJ0b1ppcHBlciIsInF1ZXJ5TW92ZVUiLCJtb3ZlIiwiYiIsIm0iLCJxdWVyeU1vdmUiLCJid2QiLCJ0cmFuc2Zvcm1Nb3ZlVSIsInRyYW5zZm9ybU1vdmUiLCJldmVyeXdoZXJlRyIsImV2ZXJ5d2hlcmVVIiwiZXZlcnl3aGVyZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O1FBb0dnQkEsRSxHQUFBQSxFO1FBd0RBQyxJLEdBQUFBLEk7UUFDQUMsSSxHQUFBQSxJO1FBSUFDLFUsR0FBQUEsVTs7QUFqS2hCOztBQVlBOztBQUVBLFNBQVNDLFFBQVQsQ0FBa0JDLENBQWxCLEVBQXFCO0FBQ25CLE9BQUssSUFBTUMsQ0FBWCxJQUFnQkQsQ0FBaEI7QUFDRSxXQUFPQyxDQUFQO0FBREY7QUFFRDs7QUFFRCxTQUFTQyxPQUFULENBQWlCRixDQUFqQixFQUFvQjtBQUNsQixNQUFJRyxZQUFKO0FBQ0EsT0FBSyxJQUFNRixDQUFYLElBQWdCRCxDQUFoQjtBQUNFRyxVQUFNRixDQUFOO0FBREYsR0FFQSxPQUFPRSxHQUFQO0FBQ0Q7O0FBRUQsSUFBTUMsV0FBVyxTQUFYQSxRQUFXO0FBQUEsU0FB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QUFtQmYsQ0FBbkIsRUFBc0I7QUFDcEIsVUFBUWUsSUFBUjtBQUNFLFNBQUs1QixJQUFMO0FBQVcsYUFBT0UsS0FBUDtBQUNYLFNBQUtBLEtBQUw7QUFBWSxhQUFPRixJQUFQO0FBQ1osU0FBS2pCLEVBQUw7QUFBUyxhQUFPc0MsT0FBT1AsTUFBTUQsQ0FBTixDQUFQLENBQVA7QUFDVDtBQUFTLGFBQU85QixFQUFQO0FBSlg7QUFNRDs7QUFFRCxJQUFNa0QsaUJBQWlCLFNBQWpCQSxjQUFpQixDQUFDTCxJQUFELEVBQU9WLENBQVAsRUFBVUwsQ0FBVjtBQUFBLFNBQ3JCYyxXQUFXQyxJQUFYLEVBQWlCZixDQUFqQixFQUFvQjtBQUFBLFdBQUtjLFdBQVdLLElBQUlKLElBQUosRUFBVWYsQ0FBVixDQUFYLEVBQXlCQSxDQUF6QixrQkFBZ0NLLEVBQUV6QixDQUFGLENBQWhDLENBQUw7QUFBQSxHQUFwQixFQUFnRW9CLENBQWhFLENBRHFCO0FBQUEsQ0FBdkI7QUFFTyxJQUFNcUIsd0NBQWdCLHdCQUFPRCxjQUFQLENBQXRCOztBQUVQLElBQU1FLGNBQWMsU0FBZEEsV0FBYztBQUFBLFNBQUs7QUFBQSxXQUN2QkYsZUFBZS9CLEtBQWYsRUFBc0JpQyxZQUFZakIsQ0FBWixDQUF0QixFQUFzQ2tCLFlBQVlsQixDQUFaLEVBQWVMLENBQWYsQ0FBdEMsQ0FEdUI7QUFBQSxHQUFMO0FBQUEsQ0FBcEI7QUFFQSxJQUFNdUIsY0FBYyxTQUFkQSxXQUFjLENBQUNsQixDQUFELEVBQUlMLENBQUo7QUFBQSxTQUNsQkksUUFBUUMsQ0FBUixFQUFXZSxlQUFlVixRQUFmLEVBQXlCWSxZQUFZakIsQ0FBWixDQUF6QixFQUF5Q0wsQ0FBekMsQ0FBWCxDQURrQjtBQUFBLENBQXBCO0FBRU8sSUFBTXdCLGtDQUFhLHdCQUFPRCxXQUFQLENBQW5CIiwiZmlsZSI6ImZhc3RlbmVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYXNzb2NQYXJ0aWFsVSxcbiAgY3VycnkyLFxuICBjdXJyeTMsXG4gIGN1cnJ5NCxcbiAgZGlzc29jUGFydGlhbFUsXG4gIGlkLFxuICBpc0FycmF5LFxuICBpc0RlZmluZWQsXG4gIGlzT2JqZWN0XG59IGZyb20gXCJpbmZlc3RpbmVzXCJcblxuLy9cblxuZnVuY3Rpb24gZmlyc3RLZXkobykge1xuICBmb3IgKGNvbnN0IGsgaW4gbylcbiAgICByZXR1cm4ga1xufVxuXG5mdW5jdGlvbiBsYXN0S2V5KG8pIHtcbiAgbGV0IGtleVxuICBmb3IgKGNvbnN0IGsgaW4gbylcbiAgICBrZXkgPSBrXG4gIHJldHVybiBrZXlcbn1cblxuY29uc3QgaXNTdHJpbmcgPSB4ID0+IHR5cGVvZiB4ID09PSBcInN0cmluZ1wiXG5jb25zdCBpc051bWJlciA9IHggPT4gdHlwZW9mIHggPT09IFwibnVtYmVyXCJcblxuLy9cblxuZnVuY3Rpb24gcmV2ZXJzZShmcm9tKSB7XG4gIGxldCB0byA9IG51bGxcbiAgd2hpbGUgKGZyb20pIHtcbiAgICB0byA9IGZyb20ubGVuZ3RoID09PSAzID8gW3RvLCBmcm9tWzFdLCBmcm9tWzJdXSA6IFt0bywgZnJvbVsxXV1cbiAgICBmcm9tID0gZnJvbVswXVxuICB9XG4gIHJldHVybiB0b1xufVxuXG4vL1xuXG5jb25zdCB6aXBwZXIgPSAobGVmdCwgZm9jdXMsIGtleSwgcmlnaHQsIHVwKSA9PiBpc0RlZmluZWQodXApXG4gID8ge2xlZnQsIGZvY3VzLCBrZXksIHJpZ2h0LCB1cH1cbiAgOiB7bGVmdCwgZm9jdXMsIGtleSwgcmlnaHR9XG5cbi8vXG5cbmZ1bmN0aW9uIGludG9PYmplY3QobGlzdCwgb2JqZWN0KSB7XG4gIHdoaWxlIChsaXN0KSB7XG4gICAgb2JqZWN0W2xpc3RbMl1dID0gbGlzdFsxXVxuICAgIGxpc3QgPSBsaXN0WzBdXG4gIH1cbn1cblxuZnVuY3Rpb24gZnJvbU9iamVjdChvYmplY3QsIGtleSwgdXApIHtcbiAgbGV0IGxlZnQgPSBudWxsXG4gIGxldCByaWdodCA9IG51bGxcbiAgbGV0IGZvY3VzXG4gIGZvciAoY29uc3QgayBpbiBvYmplY3QpXG4gICAgaWYgKGlzRGVmaW5lZChmb2N1cykpXG4gICAgICByaWdodCA9IFtyaWdodCwgb2JqZWN0W2tdLCBrXVxuICAgIGVsc2VcbiAgICAgIGlmIChrZXkgPT09IGspXG4gICAgICAgIGZvY3VzID0gb2JqZWN0W2tdXG4gICAgICBlbHNlXG4gICAgICAgIGxlZnQgPSBbbGVmdCwgb2JqZWN0W2tdLCBrXVxuICByZXR1cm4gemlwcGVyKGxlZnQsIGZvY3VzLCBrZXksIHJldmVyc2UocmlnaHQpLCB1cClcbn1cblxuLy9cblxuZnVuY3Rpb24gaW50b0FycmF5KGxpc3QsIGFycmF5KSB7XG4gIHdoaWxlIChsaXN0KSB7XG4gICAgYXJyYXkucHVzaChsaXN0WzFdKVxuICAgIGxpc3QgPSBsaXN0WzBdXG4gIH1cbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5KGFycmF5LCBrZXksIHVwKSB7XG4gIGxldCBsZWZ0ID0gbnVsbFxuICBsZXQgcmlnaHQgPSBudWxsXG4gIGZvciAobGV0IGk9MDsgaTxrZXk7ICsraSlcbiAgICBsZWZ0ID0gW2xlZnQsIGFycmF5W2ldXVxuICBmb3IgKGxldCBpPWFycmF5Lmxlbmd0aC0xOyBrZXkgPCBpOyAtLWkpXG4gICAgcmlnaHQgPSBbcmlnaHQsIGFycmF5W2ldXVxuICByZXR1cm4gemlwcGVyKGxlZnQsIGFycmF5W2tleV0sIGtleSwgcmlnaHQsIHVwKVxufVxuXG4vL1xuXG5leHBvcnQgY29uc3QgZ2V0ID0geiA9PiB6LmZvY3VzXG5leHBvcnQgY29uc3Qga2V5T2YgPSB6ID0+IHoua2V5XG5cbmNvbnN0IHNldFUgPSAoZm9jdXMsIHopID0+IGFzc29jUGFydGlhbFUoXCJmb2N1c1wiLCBmb2N1cywgeilcbmV4cG9ydCBjb25zdCBzZXQgPSBjdXJyeTIoc2V0VSlcblxuY29uc3QgbW9kaWZ5VSA9IChmLCB6KSA9PiBzZXRVKGYoZ2V0KHopKSwgeilcbmV4cG9ydCBjb25zdCBtb2RpZnkgPSBjdXJyeTIobW9kaWZ5VSlcblxuZXhwb3J0IGZ1bmN0aW9uIHVwKHtsZWZ0LCBmb2N1cywga2V5LCByaWdodCwgdXB9KSB7XG4gIHN3aXRjaCAodHlwZW9mIGtleSkge1xuICAgIGNhc2UgXCJudW1iZXJcIjoge1xuICAgICAgY29uc3QgYXJyYXkgPSBbXVxuICAgICAgaW50b0FycmF5KHJldmVyc2UobGVmdCksIGFycmF5KVxuICAgICAgaWYgKGlzRGVmaW5lZChmb2N1cykpXG4gICAgICAgIGFycmF5LnB1c2goZm9jdXMpXG4gICAgICBpbnRvQXJyYXkocmlnaHQsIGFycmF5KVxuICAgICAgcmV0dXJuIGFzc29jUGFydGlhbFUoXCJmb2N1c1wiLCBhcnJheSwgdXApXG4gICAgfVxuICAgIGNhc2UgXCJzdHJpbmdcIjoge1xuICAgICAgY29uc3Qgb2JqZWN0ID0ge31cbiAgICAgIGludG9PYmplY3QocmV2ZXJzZShsZWZ0KSwgb2JqZWN0KVxuICAgICAgaWYgKGlzRGVmaW5lZChmb2N1cykpXG4gICAgICAgIG9iamVjdFtrZXldID0gZm9jdXNcbiAgICAgIGludG9PYmplY3QocmlnaHQsIG9iamVjdClcbiAgICAgIHJldHVybiBhc3NvY1BhcnRpYWxVKFwiZm9jdXNcIiwgb2JqZWN0LCB1cClcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZG93blRvVShrZXksIHopIHtcbiAgY29uc3QgZm9jdXMgPSB6LmZvY3VzXG4gIGlmIChpc09iamVjdChmb2N1cykgJiYgaXNTdHJpbmcoa2V5KSAmJiBrZXkgaW4gZm9jdXMpXG4gICAgcmV0dXJuIGZyb21PYmplY3QoZm9jdXMsIGtleSwgZGlzc29jUGFydGlhbFUoXCJmb2N1c1wiLCB6KSlcbiAgaWYgKGlzQXJyYXkoZm9jdXMpICYmIGlzTnVtYmVyKGtleSkgJiYgMCA8PSBrZXkgJiYga2V5IDwgZm9jdXMubGVuZ3RoKVxuICAgIHJldHVybiBmcm9tQXJyYXkoZm9jdXMsIGtleSwgZGlzc29jUGFydGlhbFUoXCJmb2N1c1wiLCB6KSlcbn1cblxuZXhwb3J0IGNvbnN0IGRvd25UbyA9IGN1cnJ5Mihkb3duVG9VKVxuXG5jb25zdCBkb3duTW9zdCA9IGhlYWQgPT4geiA9PiB7XG4gIGNvbnN0IGZvY3VzID0gei5mb2N1c1xuICBpZiAoaXNPYmplY3QoZm9jdXMpKVxuICAgIHJldHVybiBkb3duVG9VKGhlYWQgPyBmaXJzdEtleShmb2N1cykgOiBsYXN0S2V5KGZvY3VzKSwgeilcbiAgaWYgKGlzQXJyYXkoZm9jdXMpKVxuICAgIHJldHVybiBkb3duVG9VKGhlYWQgPyAwIDogZm9jdXMubGVuZ3RoLTEsIHopXG59XG5cbmV4cG9ydCBjb25zdCBkb3duSGVhZCA9IGRvd25Nb3N0KHRydWUpXG5leHBvcnQgY29uc3QgZG93bkxhc3QgPSBkb3duTW9zdChmYWxzZSlcblxuZXhwb3J0IGNvbnN0IGxlZnQgPSAoe2xlZnQsIGZvY3VzLCBrZXksIHJpZ2h0LCB1cH0pID0+XG4gIGxlZnRcbiAgPyBpc051bWJlcihrZXkpXG4gICAgPyB6aXBwZXIobGVmdFswXSwgbGVmdFsxXSwga2V5LTEsICAgW3JpZ2h0LCBmb2N1c10sIHVwKVxuICAgIDogemlwcGVyKGxlZnRbMF0sIGxlZnRbMV0sIGxlZnRbMl0sIFtyaWdodCwgZm9jdXMsIGtleV0sIHVwKVxuICA6IHZvaWQgMFxuXG5leHBvcnQgY29uc3QgcmlnaHQgPSAoe2xlZnQsIGZvY3VzLCBrZXksIHJpZ2h0LCB1cH0pID0+XG4gIHJpZ2h0XG4gID8gaXNOdW1iZXIoa2V5KVxuICAgID8gemlwcGVyKFtsZWZ0LCBmb2N1c10sICAgICAgcmlnaHRbMV0sIGtleSsxLCAgICByaWdodFswXSwgdXApXG4gICAgOiB6aXBwZXIoW2xlZnQsIGZvY3VzLCBrZXldLCByaWdodFsxXSwgcmlnaHRbMl0sIHJpZ2h0WzBdLCB1cClcbiAgOiB2b2lkIDBcblxuZXhwb3J0IGZ1bmN0aW9uIGhlYWQoeikge2NvbnN0IHUgPSB1cCh6KTsgcmV0dXJuIHUgJiYgZG93bkhlYWQodSl9XG5leHBvcnQgZnVuY3Rpb24gbGFzdCh6KSB7Y29uc3QgdSA9IHVwKHopOyByZXR1cm4gdSAmJiBkb3duTGFzdCh1KX1cblxuZXhwb3J0IGNvbnN0IHRvWmlwcGVyID0gZm9jdXMgPT4gKHtmb2N1c30pXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tWmlwcGVyKHopIHtjb25zdCB1PXVwKHopOyByZXR1cm4gdSA/IGZyb21aaXBwZXIodSkgOiBnZXQoeil9XG5cbmZ1bmN0aW9uIHF1ZXJ5TW92ZVUobW92ZSwgYiwgZiwgeikge2NvbnN0IG0gPSBtb3ZlKHopOyByZXR1cm4gbSA/IGYobSkgOiBifVxuZXhwb3J0IGNvbnN0IHF1ZXJ5TW92ZSA9IGN1cnJ5NChxdWVyeU1vdmVVKVxuXG5mdW5jdGlvbiBid2QobW92ZSwgeikge1xuICBzd2l0Y2ggKG1vdmUpIHtcbiAgICBjYXNlIGxlZnQ6IHJldHVybiByaWdodFxuICAgIGNhc2UgcmlnaHQ6IHJldHVybiBsZWZ0XG4gICAgY2FzZSB1cDogcmV0dXJuIGRvd25UbyhrZXlPZih6KSlcbiAgICBkZWZhdWx0OiByZXR1cm4gdXBcbiAgfVxufVxuXG5jb25zdCB0cmFuc2Zvcm1Nb3ZlVSA9IChtb3ZlLCBmLCB6KSA9PlxuICBxdWVyeU1vdmVVKG1vdmUsIHosIHggPT4gcXVlcnlNb3ZlVShid2QobW92ZSwgeiksIHosIGlkLCBmKHgpKSwgeilcbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1Nb3ZlID0gY3VycnkzKHRyYW5zZm9ybU1vdmVVKVxuXG5jb25zdCBldmVyeXdoZXJlRyA9IGYgPT4geiA9PlxuICB0cmFuc2Zvcm1Nb3ZlVShyaWdodCwgZXZlcnl3aGVyZUcoZiksIGV2ZXJ5d2hlcmVVKGYsIHopKVxuY29uc3QgZXZlcnl3aGVyZVUgPSAoZiwgeikgPT5cbiAgbW9kaWZ5VShmLCB0cmFuc2Zvcm1Nb3ZlVShkb3duSGVhZCwgZXZlcnl3aGVyZUcoZiksIHopKVxuZXhwb3J0IGNvbnN0IGV2ZXJ5d2hlcmUgPSBjdXJyeTIoZXZlcnl3aGVyZVUpXG4iXX0=
var everywhere = exports.everywhere = (0, _infestines.curry)(everywhereU);
function pathOf(z) {
var path = [];
while (z && (0, _infestines.isDefined)(z.key)) {
path.unshift(z.key);
z = z.up;
}
return path;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9mYXN0ZW5lci5qcyJdLCJuYW1lcyI6WyJ1cCIsImhlYWQiLCJsYXN0IiwiZnJvbVppcHBlciIsInBhdGhPZiIsImZpcnN0S2V5IiwibyIsImsiLCJsYXN0S2V5Iiwia2V5IiwiaXNTdHJpbmciLCJ4IiwiaXNOdW1iZXIiLCJyZXZlcnNlIiwiZnJvbSIsInRvIiwibGVuZ3RoIiwiemlwcGVyIiwibGVmdCIsImZvY3VzIiwicmlnaHQiLCJpbnRvT2JqZWN0IiwibGlzdCIsIm9iamVjdCIsImZyb21PYmplY3QiLCJpbnRvQXJyYXkiLCJhcnJheSIsInB1c2giLCJmcm9tQXJyYXkiLCJpIiwiZ2V0IiwieiIsImtleU9mIiwic2V0VSIsInNldCIsIm1vZGlmeVUiLCJmIiwibW9kaWZ5IiwiZG93blRvVSIsImRvd25UbyIsImRvd25QYXRoVSIsInBhdGgiLCJuIiwiZG93blBhdGgiLCJkb3duTW9zdCIsImRvd25IZWFkIiwiZG93bkxhc3QiLCJ1IiwidG9aaXBwZXIiLCJxdWVyeU1vdmVVIiwibW92ZSIsImIiLCJtIiwicXVlcnlNb3ZlIiwiYndkIiwidHJhbnNmb3JtTW92ZVUiLCJ0cmFuc2Zvcm1Nb3ZlIiwiZXZlcnl3aGVyZUciLCJldmVyeXdoZXJlVSIsImV2ZXJ5d2hlcmUiLCJ1bnNoaWZ0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7UUFrR2dCQSxFLEdBQUFBLEU7UUE4REFDLEksR0FBQUEsSTtRQUNBQyxJLEdBQUFBLEk7UUFJQUMsVSxHQUFBQSxVO1FBd0JBQyxNLEdBQUFBLE07O0FBN0xoQjs7QUFVQTs7QUFFQSxTQUFTQyxRQUFULENBQWtCQyxDQUFsQixFQUFxQjtBQUNuQixPQUFLLElBQU1DLENBQVgsSUFBZ0JELENBQWhCO0FBQ0UsV0FBT0MsQ0FBUDtBQURGO0FBRUQ7O0FBRUQsU0FBU0MsT0FBVCxDQUFpQkYsQ0FBakIsRUFBb0I7QUFDbEIsTUFBSUcsWUFBSjtBQUNBLE9BQUssSUFBTUYsQ0FBWCxJQUFnQkQsQ0FBaEI7QUFDRUcsVUFB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c0IsWUFBWXRCLENBQVosRUFBZUwsQ0FBZixDQUF0QyxDQUR1QjtBQUFBLEdBQUw7QUFBQSxDQUFwQjtBQUVBLElBQU0yQixjQUFjLFNBQWRBLFdBQWMsQ0FBQ3RCLENBQUQsRUFBSUwsQ0FBSjtBQUFBLFNBQ2xCSSxRQUFRQyxDQUFSLEVBQVdtQixlQUFlVixRQUFmLEVBQXlCWSxZQUFZckIsQ0FBWixDQUF6QixFQUF5Q0wsQ0FBekMsQ0FBWCxDQURrQjtBQUFBLENBQXBCO0FBRU8sSUFBTTRCLGtDQUFhLHVCQUFNRCxXQUFOLENBQW5COztBQUVBLFNBQVN0RCxNQUFULENBQWdCMkIsQ0FBaEIsRUFBbUI7QUFDeEIsTUFBTVUsT0FBTyxFQUFiO0FBQ0EsU0FBT1YsS0FBSywyQkFBVUEsRUFBRXRCLEdBQVosQ0FBWixFQUE4QjtBQUM1QmdDLFNBQUttQixPQUFMLENBQWE3QixFQUFFdEIsR0FBZjtBQUNBc0IsUUFBSUEsRUFBRS9CLEVBQU47QUFDRDtBQUNELFNBQU95QyxJQUFQO0FBQ0QiLCJmaWxlIjoiZmFzdGVuZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBhc3NvY1BhcnRpYWxVLFxuICBjdXJyeSxcbiAgZGlzc29jUGFydGlhbFUsXG4gIGlkLFxuICBpc0FycmF5LFxuICBpc0RlZmluZWQsXG4gIGlzT2JqZWN0XG59IGZyb20gXCJpbmZlc3RpbmVzXCJcblxuLy9cblxuZnVuY3Rpb24gZmlyc3RLZXkobykge1xuICBmb3IgKGNvbnN0IGsgaW4gbylcbiAgICByZXR1cm4ga1xufVxuXG5mdW5jdGlvbiBsYXN0S2V5KG8pIHtcbiAgbGV0IGtleVxuICBmb3IgKGNvbnN0IGsgaW4gbylcbiAgICBrZXkgPSBrXG4gIHJldHVybiBrZXlcbn1cblxuY29uc3QgaXNTdHJpbmcgPSB4ID0+IHR5cGVvZiB4ID09PSBcInN0cmluZ1wiXG5jb25zdCBpc051bWJlciA9IHggPT4gdHlwZW9mIHggPT09IFwibnVtYmVyXCJcblxuLy9cblxuZnVuY3Rpb24gcmV2ZXJzZShmcm9tKSB7XG4gIGxldCB0byA9IG51bGxcbiAgd2hpbGUgKGZyb20pIHtcbiAgICB0byA9IGZyb20ubGVuZ3RoID09PSAzID8gW3RvLCBmcm9tWzFdLCBmcm9tWzJdXSA6IFt0bywgZnJvbVsxXV1cbiAgICBmcm9tID0gZnJvbVswXVxuICB9XG4gIHJldHVybiB0b1xufVxuXG4vL1xuXG5jb25zdCB6aXBwZXIgPSAobGVmdCwgZm9jdXMsIGtleSwgcmlnaHQsIHVwKSA9PiBpc0RlZmluZWQodXApXG4gID8ge2xlZnQsIGZvY3VzLCBrZXksIHJpZ2h0LCB1cH1cbiAgOiB7bGVmdCwgZm9jdXMsIGtleSwgcmlnaHR9XG5cbi8vXG5cbmZ1bmN0aW9uIGludG9PYmplY3QobGlzdCwgb2JqZWN0KSB7XG4gIHdoaWxlIChsaXN0KSB7XG4gICAgb2JqZWN0W2xpc3RbMl1dID0gbGlzdFsxXVxuICAgIGxpc3QgPSBsaXN0WzBdXG4gIH1cbn1cblxuZnVuY3Rpb24gZnJvbU9iamVjdChvYmplY3QsIGtleSwgdXApIHtcbiAgbGV0IGxlZnQgPSBudWxsXG4gIGxldCByaWdodCA9IG51bGxcbiAgbGV0IGZvY3VzXG4gIGZvciAoY29uc3QgayBpbiBvYmplY3QpXG4gICAgaWYgKGlzRGVmaW5lZChmb2N1cykpXG4gICAgICByaWdodCA9IFtyaWdodCwgb2JqZWN0W2tdLCBrXVxuICAgIGVsc2VcbiAgICAgIGlmIChrZXkgPT09IGspXG4gICAgICAgIGZvY3VzID0gb2JqZWN0W2tdXG4gICAgICBlbHNlXG4gICAgICAgIGxlZnQgPSBbbGVmdCwgb2JqZWN0W2tdLCBrXVxuICByZXR1cm4gemlwcGVyKGxlZnQsIGZvY3VzLCBrZXksIHJldmVyc2UocmlnaHQpLCB1cClcbn1cblxuLy9cblxuZnVuY3Rpb24gaW50b0FycmF5KGxpc3QsIGFycmF5KSB7XG4gIHdoaWxlIChsaXN0KSB7XG4gICAgYXJyYXkucHVzaChsaXN0WzFdKVxuICAgIGxpc3QgPSBsaXN0WzBdXG4gIH1cbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5KGFycmF5LCBrZXksIHVwKSB7XG4gIGxldCBsZWZ0ID0gbnVsbFxuICBsZXQgcmlnaHQgPSBudWxsXG4gIGZvciAobGV0IGk9MDsgaTxrZXk7ICsraSlcbiAgICBsZWZ0ID0gW2xlZnQsIGFycmF5W2ldXVxuICBmb3IgKGxldCBpPWFycmF5Lmxlbmd0aC0xOyBrZXkgPCBpOyAtLWkpXG4gICAgcmlnaHQgPSBbcmlnaHQsIGFycmF5W2ldXVxuICByZXR1cm4gemlwcGVyKGxlZnQsIGFycmF5W2tleV0sIGtleSwgcmlnaHQsIHVwKVxufVxuXG4vL1xuXG5leHBvcnQgY29uc3QgZ2V0ID0geiA9PiB6LmZvY3VzXG5leHBvcnQgY29uc3Qga2V5T2YgPSB6ID0+IHoua2V5XG5cbmNvbnN0IHNldFUgPSAoZm9jdXMsIHopID0+IGFzc29jUGFydGlhbFUoXCJmb2N1c1wiLCBmb2N1cywgeilcbmV4cG9ydCBjb25zdCBzZXQgPSBjdXJyeShzZXRVKVxuXG5jb25zdCBtb2RpZnlVID0gKGYsIHopID0+IHNldFUoZihnZXQoeikpLCB6KVxuZXhwb3J0IGNvbnN0IG1vZGlmeSA9IGN1cnJ5KG1vZGlmeVUpXG5cbmV4cG9ydCBmdW5jdGlvbiB1cCh7bGVmdCwgZm9jdXMsIGtleSwgcmlnaHQsIHVwfSkge1xuICBzd2l0Y2ggKHR5cGVvZiBrZXkpIHtcbiAgICBjYXNlIFwibnVtYmVyXCI6IHtcbiAgICAgIGNvbnN0IGFycmF5ID0gW11cbiAgICAgIGludG9BcnJheShyZXZlcnNlKGxlZnQpLCBhcnJheSlcbiAgICAgIGlmIChpc0RlZmluZWQoZm9jdXMpKVxuICAgICAgICBhcnJheS5wdXNoKGZvY3VzKVxuICAgICAgaW50b0FycmF5KHJpZ2h0LCBhcnJheSlcbiAgICAgIHJldHVybiBhc3NvY1BhcnRpYWxVKFwiZm9jdXNcIiwgYXJyYXksIHVwKVxuICAgIH1cbiAgICBjYXNlIFwic3RyaW5nXCI6IHtcbiAgICAgIGNvbnN0IG9iamVjdCA9IHt9XG4gICAgICBpbnRvT2JqZWN0KHJldmVyc2UobGVmdCksIG9iamVjdClcbiAgICAgIGlmIChpc0RlZmluZWQoZm9jdXMpKVxuICAgICAgICBvYmplY3Rba2V5XSA9IGZvY3VzXG4gICAgICBpbnRvT2JqZWN0KHJpZ2h0LCBvYmplY3QpXG4gICAgICByZXR1cm4gYXNzb2NQYXJ0aWFsVShcImZvY3VzXCIsIG9iamVjdCwgdXApXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRvd25Ub1Uoa2V5LCB6KSB7XG4gIGNvbnN0IGZvY3VzID0gei5mb2N1c1xuICBpZiAoaXNPYmplY3QoZm9jdXMpICYmIGlzU3RyaW5nKGtleSkgJiYga2V5IGluIGZvY3VzKVxuICAgIHJldHVybiBmcm9tT2JqZWN0KGZvY3VzLCBrZXksIGRpc3NvY1BhcnRpYWxVKFwiZm9jdXNcIiwgeikpXG4gIGlmIChpc0FycmF5KGZvY3VzKSAmJiBpc051bWJlcihrZXkpICYmIDAgPD0ga2V5ICYmIGtleSA8IGZvY3VzLmxlbmd0aClcbiAgICByZXR1cm4gZnJvbUFycmF5KGZvY3VzLCBrZXksIGRpc3NvY1BhcnRpYWxVKFwiZm9jdXNcIiwgeikpXG59XG5leHBvcnQgY29uc3QgZG93blRvID0gY3VycnkoZG93blRvVSlcblxuZnVuY3Rpb24gZG93blBhdGhVKHBhdGgsIHopIHtcbiAgZm9yIChsZXQgaT0wLCBuPXBhdGgubGVuZ3RoOyB6ICYmIGk8bjsgKytpKVxuICAgIHogPSBkb3duVG9VKHBhdGhbaV0sIHopXG4gIHJldHVybiB6XG59XG5leHBvcnQgY29uc3QgZG93blBhdGggPSBjdXJyeShkb3duUGF0aFUpXG5cbmNvbnN0IGRvd25Nb3N0ID0gaGVhZCA9PiB6ID0+IHtcbiAgY29uc3QgZm9jdXMgPSB6LmZvY3VzXG4gIGlmIChpc09iamVjdChmb2N1cykpXG4gICAgcmV0dXJuIGRvd25Ub1UoaGVhZCA/IGZpcnN0S2V5KGZvY3VzKSA6IGxhc3RLZXkoZm9jdXMpLCB6KVxuICBpZiAoaXNBcnJheShmb2N1cykpXG4gICAgcmV0dXJuIGRvd25Ub1UoaGVhZCA/IDAgOiBmb2N1cy5sZW5ndGgtMSwgeilcbn1cblxuZXhwb3J0IGNvbnN0IGRvd25IZWFkID0gZG93bk1vc3QodHJ1ZSlcbmV4cG9ydCBjb25zdCBkb3duTGFzdCA9IGRvd25Nb3N0KGZhbHNlKVxuXG5leHBvcnQgY29uc3QgbGVmdCA9ICh7bGVmdCwgZm9jdXMsIGtleSwgcmlnaHQsIHVwfSkgPT5cbiAgbGVmdFxuICA/IGlzTnVtYmVyKGtleSlcbiAgICA/IHppcHBlcihsZWZ0WzBdLCBsZWZ0WzFdLCBrZXktMSwgICBbcmlnaHQsIGZvY3VzXSwgdXApXG4gICAgOiB6aXBwZXIobGVmdFswXSwgbGVmdFsxXSwgbGVmdFsyXSwgW3JpZ2h0LCBmb2N1cywga2V5XSwgdXApXG4gIDogdm9pZCAwXG5cbmV4cG9ydCBjb25zdCByaWdodCA9ICh7bGVmdCwgZm9jdXMsIGtleSwgcmlnaHQsIHVwfSkgPT5cbiAgcmlnaHRcbiAgPyBpc051bWJlcihrZXkpXG4gICAgPyB6aXBwZXIoW2xlZnQsIGZvY3VzXSwgICAgICByaWdodFsxXSwga2V5KzEsICAgIHJpZ2h0WzBdLCB1cClcbiAgICA6IHppcHBlcihbbGVmdCwgZm9jdXMsIGtleV0sIHJpZ2h0WzFdLCByaWdodFsyXSwgcmlnaHRbMF0sIHVwKVxuICA6IHZvaWQgMFxuXG5leHBvcnQgZnVuY3Rpb24gaGVhZCh6KSB7Y29uc3QgdSA9IHVwKHopOyByZXR1cm4gdSAmJiBkb3duSGVhZCh1KX1cbmV4cG9ydCBmdW5jdGlvbiBsYXN0KHopIHtjb25zdCB1ID0gdXAoeik7IHJldHVybiB1ICYmIGRvd25MYXN0KHUpfVxuXG5leHBvcnQgY29uc3QgdG9aaXBwZXIgPSBmb2N1cyA9PiAoe2ZvY3VzfSlcblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21aaXBwZXIoeikge2NvbnN0IHU9dXAoeik7IHJldHVybiB1ID8gZnJvbVppcHBlcih1KSA6IGdldCh6KX1cblxuZnVuY3Rpb24gcXVlcnlNb3ZlVShtb3ZlLCBiLCBmLCB6KSB7Y29uc3QgbSA9IG1vdmUoeik7IHJldHVybiBtID8gZihtKSA6IGJ9XG5leHBvcnQgY29uc3QgcXVlcnlNb3ZlID0gY3VycnkocXVlcnlNb3ZlVSlcblxuZnVuY3Rpb24gYndkKG1vdmUsIHopIHtcbiAgc3dpdGNoIChtb3ZlKSB7XG4gICAgY2FzZSBsZWZ0OiByZXR1cm4gcmlnaHRcbiAgICBjYXNlIHJpZ2h0OiByZXR1cm4gbGVmdFxuICAgIGNhc2UgdXA6IHJldHVybiBkb3duVG8oa2V5T2YoeikpXG4gICAgZGVmYXVsdDogcmV0dXJuIHVwXG4gIH1cbn1cblxuY29uc3QgdHJhbnNmb3JtTW92ZVUgPSAobW92ZSwgZiwgeikgPT5cbiAgcXVlcnlNb3ZlVShtb3ZlLCB6LCB4ID0+IHF1ZXJ5TW92ZVUoYndkKG1vdmUsIHopLCB6LCBpZCwgZih4KSksIHopXG5leHBvcnQgY29uc3QgdHJhbnNmb3JtTW92ZSA9IGN1cnJ5KHRyYW5zZm9ybU1vdmVVKVxuXG5jb25zdCBldmVyeXdoZXJlRyA9IGYgPT4geiA9PlxuICB0cmFuc2Zvcm1Nb3ZlVShyaWdodCwgZXZlcnl3aGVyZUcoZiksIGV2ZXJ5d2hlcmVVKGYsIHopKVxuY29uc3QgZXZlcnl3aGVyZVUgPSAoZiwgeikgPT5cbiAgbW9kaWZ5VShmLCB0cmFuc2Zvcm1Nb3ZlVShkb3duSGVhZCwgZXZlcnl3aGVyZUcoZiksIHopKVxuZXhwb3J0IGNvbnN0IGV2ZXJ5d2hlcmUgPSBjdXJyeShldmVyeXdoZXJlVSlcblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhPZih6KSB7XG4gIGNvbnN0IHBhdGggPSBbXVxuICB3aGlsZSAoeiAmJiBpc0RlZmluZWQoei5rZXkpKSB7XG4gICAgcGF0aC51bnNoaWZ0KHoua2V5KVxuICAgIHogPSB6LnVwXG4gIH1cbiAgcmV0dXJuIHBhdGhcbn1cbiJdfQ==
{
"name": "fastener",
"version": "2.0.0",
"version": "2.1.0",
"description": "Zipper for manipulating JSON",
"main": "lib/fastener.js",
"scripts": {
"bench": "NODE_ENV=production node bench/bench.js",
"dist": "babel src --source-maps inline --out-dir lib",
"bench": "NODE_ENV=production node --expose-gc bench/bench.js",
"dist": "npm run dist:bowerify & npm run dist:bowerify.min & npm run dist:commonjs & wait",
"dist:bowerify": " NODE_ENV=dev browserify src/fastener.js -t babelify --no-bundle-external -d -s F -g envify -o dist/fastener.js",
"dist:bowerify.min": "NODE_ENV=production browserify src/fastener.js -t babelify --no-bundle-external -s F -g envify -g uglifyify -o dist/fastener.min.js",
"dist:commonjs": "babel src --source-maps inline --out-dir lib",
"docs": "./scripts/generate-docs",

@@ -13,2 +16,3 @@ "docs-bundle": "NODE_ENV=dev browserify -r ./lib/fastener:fastener -r ramda -r infestines -r babel-polyfill -g envify -g uglifyify > docs/bundle.js",

"prepublish": "npm run lint && npm run test && npm run dist",
"report-coverage": "nyc report --reporter=lcov > coverage.lcov && codecov",
"test": "nyc mocha"

@@ -35,3 +39,3 @@ },

"dependencies": {
"infestines": "^0.2.0"
"infestines": "^0.3.2"
},

@@ -62,12 +66,15 @@ "devDependencies": {

"babel-register": "^6.18.0",
"benchmark": "^2.1.2",
"browserify": "^13.1.1",
"babelify": "^7.3.0",
"benchmark": "^2.1.3",
"browserify": "^13.3.0",
"codecov": "^1.0.1",
"envify": "^4.0.0",
"eslint": "^3.12.2",
"eslint": "^3.13.0",
"marked": "^0.3.6",
"mocha": "^3.2.0",
"nyc": "^10.0.0",
"ramda": "^0.22.1",
"ramda": "^0.23.0",
"sprintf-js": "^1.0.3",
"uglifyify": "^3.0.4"
}
}

@@ -9,3 +9,3 @@ [ [≡](#contents) | [Tutorial](#tutorial) | [Reference](#reference) | [Related Work](#related-work) | [GitHub](https://github.com/polytypic/fastener) | [Try Fastener!](https://polytypic.github.io/fastener/) ]

[![npm version](https://badge.fury.io/js/fastener.svg)](http://badge.fury.io/js/fastener) [![Build Status](https://travis-ci.org/polytypic/fastener.svg?branch=master)](https://travis-ci.org/polytypic/fastener) [![](https://david-dm.org/polytypic/fastener.svg)](https://david-dm.org/polytypic/fastener) [![](https://david-dm.org/polytypic/fastener/dev-status.svg)](https://david-dm.org/polytypic/fastener?type=dev)
[![npm version](https://badge.fury.io/js/fastener.svg)](http://badge.fury.io/js/fastener) [![Build Status](https://travis-ci.org/polytypic/fastener.svg?branch=master)](https://travis-ci.org/polytypic/fastener) [![Code Coverage](https://img.shields.io/codecov/c/github/polytypic/fastener/master.svg)](https://codecov.io/github/polytypic/fastener?branch=master) [![](https://david-dm.org/polytypic/fastener.svg)](https://david-dm.org/polytypic/fastener) [![](https://david-dm.org/polytypic/fastener/dev-status.svg)](https://david-dm.org/polytypic/fastener?type=dev)

@@ -17,25 +17,28 @@ ## Contents

* [Introduction and Elimination](#introduction-and-elimination)
* [`F.toZipper(json)`](#toZipper "toZipper :: JSON -> Zipper")
* [`F.fromZipper(zipper)`](#fromZipper "fromZipper :: Zipper -> JSON")
* [`F.toZipper(json)`](#F-toZipper "F.toZipper: JSON -> Zipper")
* [`F.fromZipper(zipper)`](#F-fromZipper "F.fromZipper: Zipper -> JSON")
* [Focus](#focus)
* [`F.get(zipper)`](#get "get :: Zipper -> JSON")
* [`F.modify(fn, zipper)`](#modify "modify :: (JSON -> JSON) -> Zipper -> Zipper")
* [`F.set(json, zipper)`](#set "set :: JSON -> Zipper -> Zipper")
* [`F.get(zipper)`](#F-get "F.get: Zipper -> JSON")
* [`F.modify(json => json, zipper)`](#F-modify "F.modify: (JSON -> JSON) -> Zipper -> Zipper")
* [`F.set(json, zipper)`](#F-set "F.set: JSON -> Zipper -> Zipper")
* [Movement](#movement)
* [Parent-Child movement](#parent-child-movement)
* [`F.downHead(zipper)`](#downHead "downHead :: Zipper -> Maybe Zipper")
* [`F.downLast(zipper)`](#downLast "downLast :: Zipper -> Maybe Zipper")
* [`F.downTo(key, zipper)`](#downTo "downTo :: (String|Number) -> Zipper -> Maybe Zipper")
* [`F.keyOf(zipper)`](#keyOf "keyOf :: Zipper -> Maybe (String|Number)")
* [`F.up(zipper)`](#up "up :: Zipper -> Maybe Zipper")
* [`F.downHead(zipper)`](#F-downHead "F.downHead: Zipper -> Maybe Zipper")
* [`F.downLast(zipper)`](#F-downLast "F.downLast: Zipper -> Maybe Zipper")
* [`F.downTo(key, zipper)`](#F-downTo "F.downTo: (String|Number) -> Zipper -> Maybe Zipper")
* [`F.keyOf(zipper)`](#F-keyOf "F.keyOf: Zipper -> Maybe (String|Number)")
* [`F.up(zipper)`](#F-up "F.up: Zipper -> Maybe Zipper")
* [Path movement](#path-movement)
* [`F.downPath([...keys], zipper)`](#F-downPath "F.downPath: [String|Number] -> Zipper -> Maybe Zipper")
* [`F.pathOf(zipper)`](#F-pathOf "F.pathOf: Zipper -> [String|Number]")
* [Sibling movement](#sibling-movement)
* [`F.head(zipper)`](#head "head :: Zipper -> Maybe Zipper")
* [`F.last(zipper)`](#last "last :: Zipper -> Maybe Zipper")
* [`F.left(zipper)`](#left "left :: Zipper -> Maybe Zipper")
* [`F.right(zipper)`](#right "right :: Zipper -> Maybe Zipper")
* [`F.head(zipper)`](#F-head "F.head: Zipper -> Maybe Zipper")
* [`F.last(zipper)`](#F-last "F.last: Zipper -> Maybe Zipper")
* [`F.left(zipper)`](#F-left "F.left: Zipper -> Maybe Zipper")
* [`F.right(zipper)`](#F-right "F.right: Zipper -> Maybe Zipper")
* [Queries](#queries)
* [`F.queryMove(move, default, fn, zipper)`](#queryMove "F.queryMove :: (Zipper -> Maybe Zipper) -> a -> (Zipper -> a) -> Zipper -> a")
* [`F.queryMove(zipper => maybeZipper, value, zipper => value, zipper)`](#F-queryMove "F.queryMove: (Zipper -> Maybe Zipper) -> a -> (Zipper -> a) -> Zipper -> a")
* [Transforms](#transforms)
* [`F.transformMove(move, fn, zipper)`](#transformMove "F.transformMove :: (downHead|downLast|downTo(key)|left|right|up) -> (Zipper -> Zipper) -> Zipper -> Zipper")
* [`F.everywhere(fn, zipper)`](#everywhere "F.everywhere :: (JSON -> JSON) -> Zipper -> Zipper")
* [`F.transformMove(move, zipper => zipper, zipper)`](#F-transformMove "F.transformMove: (F.downHead|F.downLast|F.downTo(key)|F.left|F.right|F.up) -> (Zipper -> Zipper) -> Zipper -> Zipper")
* [`F.everywhere(json => json, zipper)`](#F-everywhere "F.everywhere: (JSON -> JSON) -> Zipper -> Zipper")
* [Related Work](#related-work)

@@ -68,3 +71,3 @@

First we just create a zipper using [`F.toZipper`](#toZipper):
First we just create a zipper using [`F.toZipper`](#F-toZipper):

@@ -76,9 +79,10 @@ ```js

As can be seen, the zipper is just a simple JSON object and the `focus` is the
`data` object that we gave to [`F.toZipper`](#toZipper). However, you should
use the zipper combinators to operate on zippers rather than rely on their exact
format.
As can be seen, **_the zipper is just a simple JSON object_** and the `focus` is
the `data` object that we gave to [`F.toZipper`](#F-toZipper). As long the data
structure being manipulated is JSON, you can serialize and deserialize zippers
as JSON. However, it is recommended that you use the zipper combinators to
operate on zippers rather than rely on their exact format.
Let's then move into the `contents` property of the object using
[`F.downTo`](#downTo):
[`F.downTo`](#F-downTo):

@@ -97,3 +101,3 @@ ```js

As seen above, the `focus` now has the `contents` array. We can use
[`F.get`](#get) to extract the value under focus:
[`F.get`](#F-get) to extract the value under focus:

@@ -110,3 +114,3 @@

Then we move into the first element of `contents` using
[`F.downHead`](#downHead):
[`F.downHead`](#F-downHead):

@@ -142,3 +146,3 @@ ```js

And to the next property, `title`, using [`F.right`](#right):
And to the next property, `title`, using [`F.right`](#F-right):

@@ -162,3 +166,3 @@ ```js

Let's then use [`F.modify`](#modify) to modify the `title`:
Let's then use [`F.modify`](#F-modify) to modify the `title`:

@@ -183,3 +187,3 @@ ```js

When we now move outwards using [`F.up`](#up) we can see the changed title
When we now move outwards using [`F.up`](#F-up) we can see the changed title
become part of the data:

@@ -203,3 +207,3 @@

We can also just move back to the root and get the updated data structure using
[`F.fromZipper`](#fromZipper):
[`F.fromZipper`](#F-fromZipper):

@@ -232,3 +236,3 @@ ```js

Like all the basic zipper movement combinators, [`F.downTo`](#downTo) is a
Like all the basic zipper movement combinators, [`F.downTo`](#F-downTo) is a
*partial function* that returns `undefined` in case the index is out of bounds.

@@ -295,3 +299,3 @@ Let's define a simple function to compose partial functions:

#### <a name="toZipper"></a> [≡](#contents) [`F.toZipper(json)`](#toZipper "toZipper :: JSON -> Zipper")
#### <a name="F-toZipper"></a> [≡](#contents) [`F.toZipper(json)`](#F-toZipper "F.toZipper: JSON -> Zipper")

@@ -311,3 +315,3 @@ `F.toZipper(json)` creates a new zipper that is focused on the root of the given

#### <a name="fromZipper"></a> [≡](#contents) [`F.fromZipper(zipper)`](#fromZipper "fromZipper :: Zipper -> JSON")
#### <a name="F-fromZipper"></a> [≡](#contents) [`F.fromZipper(zipper)`](#F-fromZipper "F.fromZipper: Zipper -> JSON")

@@ -331,3 +335,3 @@ `F.fromZipper(zipper)` extracts the modified JSON object from the given zipper.

#### <a name="get"></a> [≡](#contents) [`F.get(zipper)`](#get "get :: Zipper -> JSON")
#### <a name="F-get"></a> [≡](#contents) [`F.get(zipper)`](#F-get "F.get: Zipper -> JSON")

@@ -349,3 +353,3 @@ `F.get(zipper)` returns the element that the zipper is focused on.

#### <a name="modify"></a> [≡](#contents) [`F.modify(fn, zipper)`](#modify "modify :: (JSON -> JSON) -> Zipper -> Zipper")
#### <a name="F-modify"></a> [≡](#contents) [`F.modify(json => json, zipper)`](#F-modify "F.modify: (JSON -> JSON) -> Zipper -> Zipper")

@@ -366,3 +370,3 @@ `F.modify(fn, zipper)` is equivalent to `F.set(fn(F.get(zipper)), zipper)` and

#### <a name="set"></a> [≡](#contents) [`F.set(json, zipper)`](#set "set :: JSON -> Zipper -> Zipper")
#### <a name="F-set"></a> [≡](#contents) [`F.set(json, zipper)`](#F-set "F.set: JSON -> Zipper -> Zipper")

@@ -392,3 +396,3 @@ `F.set(json, zipper)` replaces the element that the zipper is focused on with

##### <a name="downHead"></a> [≡](#contents) [`F.downHead(zipper)`](#downHead "downHead :: Zipper -> Maybe Zipper")
##### <a name="F-downHead"></a> [≡](#contents) [`F.downHead(zipper)`](#F-downHead "F.downHead: Zipper -> Maybe Zipper")

@@ -398,3 +402,3 @@ `F.downHead(zipper)` moves the focus to the leftmost element of the object or

##### <a name="downLast"></a> [≡](#contents) [`F.downLast(zipper)`](#downLast "downLast :: Zipper -> Maybe Zipper")
##### <a name="F-downLast"></a> [≡](#contents) [`F.downLast(zipper)`](#F-downLast "F.downLast: Zipper -> Maybe Zipper")

@@ -404,3 +408,3 @@ `F.downLast(zipper)` moves the focus to the rightmost element of the object or

##### <a name="downTo"></a> [≡](#contents) [`F.downTo(key, zipper)`](#downTo "downTo :: (String|Number) -> Zipper -> Maybe Zipper")
##### <a name="F-downTo"></a> [≡](#contents) [`F.downTo(key, zipper)`](#F-downTo "F.downTo: (String|Number) -> Zipper -> Maybe Zipper")

@@ -410,3 +414,3 @@ `F.downTo(key, zipper)` moves the focus to the specified object property or

##### <a name="keyOf"></a> [≡](#contents) [`F.keyOf(zipper)`](#keyOf "keyOf :: Zipper -> Maybe (String|Number)")
##### <a name="F-keyOf"></a> [≡](#contents) [`F.keyOf(zipper)`](#F-keyOf "F.keyOf: Zipper -> Maybe (String|Number)")

@@ -416,3 +420,3 @@ `F.keyOf(zipper)` returns the object property name or the array index that the

##### <a name="up"></a> [≡](#contents) [`F.up(zipper)`](#up "up :: Zipper -> Maybe Zipper")
##### <a name="F-up"></a> [≡](#contents) [`F.up(zipper)`](#F-up "F.up: Zipper -> Maybe Zipper")

@@ -422,2 +426,16 @@ `F.up(zipper)` moves the focus from an array element or object property to the

#### Path movement
Path movement is moving the focus along a path from a parent object or array to
a nested child element.
##### <a name="F-downPath"></a> [≡](#contents) [`F.downPath([...keys], zipper)`](#F-downPath "F.downPath: [String|Number] -> Zipper -> Maybe Zipper")
`F.downPath(path, zipper)` moves the focus along the specified path of keys.
##### <a name="F-pathOf"></a> [≡](#contents) [`F.pathOf(zipper)`](#F-pathOf "F.pathOf: Zipper -> [String|Number]")
`F.pathOf(zipper)` returns the path from the root to the current element focused
on by the zipper.
#### Sibling movement

@@ -427,15 +445,15 @@

##### <a name="head"></a> [≡](#contents) [`F.head(zipper)`](#head "head :: Zipper -> Maybe Zipper")
##### <a name="F-head"></a> [≡](#contents) [`F.head(zipper)`](#F-head "F.head: Zipper -> Maybe Zipper")
`F.head(zipper)` moves the focus to the leftmost sibling of the current focus.
##### <a name="last"></a> [≡](#contents) [`F.last(zipper)`](#last "last :: Zipper -> Maybe Zipper")
##### <a name="F-last"></a> [≡](#contents) [`F.last(zipper)`](#F-last "F.last: Zipper -> Maybe Zipper")
`F.last(zipper)` moves the focus to the rightmost sibling of the current focus.
##### <a name="left"></a> [≡](#contents) [`F.left(zipper)`](#left "left :: Zipper -> Maybe Zipper")
##### <a name="F-left"></a> [≡](#contents) [`F.left(zipper)`](#F-left "F.left: Zipper -> Maybe Zipper")
`F.left(zipper)` moves the focus to the element on the left of the current focus.
##### <a name="right"></a> [≡](#contents) [`F.right(zipper)`](#right "right :: Zipper -> Maybe Zipper")
##### <a name="F-right"></a> [≡](#contents) [`F.right(zipper)`](#F-right "F.right: Zipper -> Maybe Zipper")

@@ -446,3 +464,3 @@ `F.right(zipper)` moves the focus to the element on the right of the current focus.

#### <a name="queryMove"></a> [≡](#contents) [`F.queryMove(move, default, fn, zipper)`](#queryMove "F.queryMove :: (Zipper -> Maybe Zipper) -> a -> (Zipper -> a) -> Zipper -> a")
#### <a name="F-queryMove"></a> [≡](#contents) [`F.queryMove(zipper => maybeZipper, value, zipper => value, zipper)`](#F-queryMove "F.queryMove: (Zipper -> Maybe Zipper) -> a -> (Zipper -> a) -> Zipper -> a")

@@ -468,9 +486,14 @@ `F.queryMove(move, default, fn, zipper)` applies the given function `fn` to the

#### <a name="transformMove"></a> [≡](#contents) [`F.transformMove(move, fn, zipper)`](#transformMove "F.transformMove :: (downHead|downLast|downTo(key)|left|right|up) -> (Zipper -> Zipper) -> Zipper -> Zipper")
#### <a name="F-transformMove"></a> [≡](#contents) [`F.transformMove(move, zipper => zipper, zipper)`](#F-transformMove "F.transformMove: (F.downHead|F.downLast|F.downTo(key)|F.left|F.right|F.up) -> (Zipper -> Zipper) -> Zipper -> Zipper")
`F.transformMove(move, fn, zipper)` applies the given function to the zipper
focused on after the given movement. The function must the return a zipper
focused on the same element that it was given. Then the focus is moved back to
the element that the zipper was originally focused on. Nothing is done in case
of an illegal move.
focused on after the given movement. The movement `move` must be one
of
[`F.downHead`](#F-downHead),
[`F.downLast`](#F-downLast),
[`F.downTo(key)`](#F-downTo), [`F.left`](#F-left), [`F.right`](#F-right),
or [`F.up`](#F-up). The function `fn` must the return a zipper focused on the
same element that it was given. Then the focus is moved back to the element
that the zipper was originally focused on. Nothing is done in case of an
illegal move.

@@ -492,3 +515,3 @@ For example:

#### <a name="everywhere"></a> [≡](#contents) [`F.everywhere(fn, zipper)`](#everywhere "F.everywhere :: (JSON -> JSON) -> Zipper -> Zipper")
#### <a name="F-everywhere"></a> [≡](#contents) [`F.everywhere(json => json, zipper)`](#F-everywhere "F.everywhere: (JSON -> JSON) -> Zipper -> Zipper")

@@ -495,0 +518,0 @@ `F.everywhere(fn, zipper)` performs a transform of the focused element by

import {
assocPartialU,
curry2,
curry3,
curry4,
curry,
dissocPartialU,

@@ -96,6 +94,6 @@ id,

const setU = (focus, z) => assocPartialU("focus", focus, z)
export const set = curry2(setU)
export const set = curry(setU)
const modifyU = (f, z) => setU(f(get(z)), z)
export const modify = curry2(modifyU)
export const modify = curry(modifyU)

@@ -130,4 +128,10 @@ export function up({left, focus, key, right, up}) {

}
export const downTo = curry(downToU)
export const downTo = curry2(downToU)
function downPathU(path, z) {
for (let i=0, n=path.length; z && i<n; ++i)
z = downToU(path[i], z)
return z
}
export const downPath = curry(downPathU)

@@ -167,3 +171,3 @@ const downMost = head => z => {

function queryMoveU(move, b, f, z) {const m = move(z); return m ? f(m) : b}
export const queryMove = curry4(queryMoveU)
export const queryMove = curry(queryMoveU)

@@ -181,3 +185,3 @@ function bwd(move, z) {

queryMoveU(move, z, x => queryMoveU(bwd(move, z), z, id, f(x)), z)
export const transformMove = curry3(transformMoveU)
export const transformMove = curry(transformMoveU)

@@ -188,2 +192,11 @@ const everywhereG = f => z =>

modifyU(f, transformMoveU(downHead, everywhereG(f), z))
export const everywhere = curry2(everywhereU)
export const everywhere = curry(everywhereU)
export function pathOf(z) {
const path = []
while (z && isDefined(z.key)) {
path.unshift(z.key)
z = z.up
}
return path
}

Sorry, the diff of this file is not supported yet