fastener
Version:
Functional Zipper for manipulating JSON
2 lines (1 loc) • 2.89 kB
JavaScript
!function(r,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("infestines")):"function"==typeof define&&define.amd?define(["exports","infestines"],n):n(r.F={},r.I)}(this,function(r,c){"use strict";function s(r){for(var n=null;r;)n=3===r.length?[n,r[1],r[2]]:[n,r[1]],r=r[0];return n}function a(r,n){for(;r;)n[r[2]]=r[1],r=r[0]}function v(r,n){for(;r;)n.push(r[1]),r=r[0]}function u(r){var n=r.left,e=r.focus,t=r.key,u=r.right,i=r.up;switch(typeof t){case"number":var o=[];return v(s(n),o),c.isDefined(e)&&o.push(e),v(u,o),c.assocPartialU("focus",o,i);case"string":var f={};return a(s(n),f),c.isDefined(e)&&(f[t]=e),a(u,f),c.assocPartialU("focus",f,i)}}function i(r,n){var e=n.focus;return c.isObject(e)&&c.isString(r)&&r in e?function(r,n,e){var t=null,u=null,i=void 0;for(var o in r)c.isDefined(i)?u=[u,r[o],o]:n===o?i=r[o]:t=[t,r[o],o];return f(t,i,n,s(u),e)}(e,r,c.dissocPartialU("focus",n)):c.isArray(e)&&c.isNumber(r)&&0<=r&&r<e.length?function(r,n,e){for(var t=null,u=null,i=0;i<n;++i)t=[t,r[i]];for(var o=r.length-1;n<o;--o)u=[u,r[o]];return f(t,r[n],n,u,e)}(e,r,c.dissocPartialU("focus",n)):void 0}function o(r,n,e,t){var u=r(t);return u?e(u):n}var f=function(r,n,e,t,u){return c.isDefined(u)?{left:r,focus:n,key:e,right:t,up:u}:{left:r,focus:n,key:e,right:t}},t=function(r){return r.focus},d=function(r){return r.key},e=function(r,n){return c.assocPartialU("focus",r,n)},n=c.curry(e),l=function(r,n){return e(r(t(n)),n)},y=c.curry(l),p=c.curry(i),h=c.curry(function(r,n){for(var e=0,t=r.length;n&&e<t;++e)n=i(r[e],n);return n}),g=function(e){return function(r){var n=r.focus;return c.isObject(n)?i(e?function(r){for(var n in r)return n}(n):function(r){var n=void 0;for(var e in r)n=e;return n}(n),r):c.isArray(n)?i(e?0:n.length-1,r):void 0}},k=g(!0),m=g(!1),b=function(r){var n=r.left,e=r.focus,t=r.key,u=r.right,i=r.up;return n?c.isNumber(t)?f(n[0],n[1],t-1,[u,e],i):f(n[0],n[1],n[2],[u,e,t],i):void 0},w=function(r){var n=r.left,e=r.focus,t=r.key,u=r.right,i=r.up;return u?c.isNumber(t)?f([n,e],u[1],t+1,u[0],i):f([n,e,t],u[1],u[2],u[0],i):void 0},P=c.curry(o),D=function(e,n,t){return o(e,t,function(r){return o(function(r,n){switch(e){case b:return w;case w:return b;case u:return p(d(n));default:return u}}(0,t),t,c.id,n(r))},t)},O=c.curry(D),U=function(r,n){return l(r,D(k,function n(e){return function(r){return D(w,n(e),U(e,r))}}(r),n))},j=c.curry(U);r.get=t,r.keyOf=d,r.set=n,r.modify=y,r.up=u,r.downTo=p,r.downPath=h,r.downHead=k,r.downLast=m,r.left=b,r.right=w,r.head=function(r){var n=u(r);return n&&k(n)},r.last=function(r){var n=u(r);return n&&m(n)},r.toZipper=function(r){return{focus:r}},r.fromZipper=function r(n){var e=u(n);return e?r(e):t(n)},r.queryMove=P,r.transformMove=O,r.everywhere=j,r.pathOf=function(r){for(var n=[];r&&c.isDefined(r.key);)n.push(r.key),r=r.up;return n.reverse()},Object.defineProperty(r,"__esModule",{value:!0})});