-
Notifications
You must be signed in to change notification settings - Fork 47
/
Copy pathdot-object.min.js
1 lines (1 loc) · 4.95 KB
/
dot-object.min.js
1
!function(t){"use strict";function s(t,r){var e,i;if("function"==typeof r)void 0!==(i=r(t))&&(t=i);else if(Array.isArray(r))for(e=0;e<r.length;e++)void 0!==(i=r[e](t))&&(t=i);return t}function p(t){return"[object Object]"===Object.prototype.toString.call(t)}function a(t){return Object(t)===t}function c(t){return 0===Object.keys(t).length}function e(t){return-1===r.indexOf(t)}var r=["__proto__","prototype","constructor"];function f(t,r){r=(t=0<=t.indexOf("[")?t.replace(/\[/g,r).replace(/]/g,""):t).split(r);if(r.filter(e).length!==r.length)throw Error("Refusing to update blacklisted property "+t);return r}var u=Object.prototype.hasOwnProperty;function n(t,r,e,i){if(!(this instanceof n))return new n(t,r,e,i);void 0===r&&(r=!1),void 0===e&&(e=!0),void 0===i&&(i=!0),this.separator=t||".",this.override=r,this.useArray=e,this.useBrackets=i,this.keepArray=!1,this.cleanup=[]}var i=new n(".",!1,!0,!0);function o(t){return function(){return i[t].apply(i,arguments)}}n.prototype._fill=function(t,r,e,i){var n=t.shift();if(0<t.length){if(r[n]=r[n]||(this.useArray&&/^\d+$/.test(t[0])?[]:{}),!a(r[n])){if(!this.override){if(a(e)&&c(e))return;throw new Error("Trying to redefine `"+n+"` which is a "+typeof r[n])}r[n]={}}this._fill(t,r[n],e,i)}else{if(!this.override&&a(r[n])&&!c(r[n])){if(a(e)&&c(e))return;throw new Error("Trying to redefine non-empty obj['"+n+"']")}r[n]=s(e,i)}},n.prototype.object=function(i,n){var o=this;return Object.keys(i).forEach(function(t){var r=void 0===n?null:n[t],e=f(t,o.separator).join(o.separator);-1!==e.indexOf(o.separator)?(o._fill(e.split(o.separator),i,i[t],r),delete i[t]):i[t]=s(i[t],r)}),i},n.prototype.str=function(t,r,e,i){var n=f(t,this.separator).join(this.separator);return-1!==t.indexOf(this.separator)?this._fill(n.split(this.separator),e,r,i):e[t]=s(r,i),e},n.prototype.pick=function(t,r,e,i){for(var n,o,s,a=f(t,this.separator),c=0;c<a.length;c++){if(o=a[c],s=r,s="-"===o[0]&&Array.isArray(s)&&/^-\d+$/.test(o)?s.length+parseInt(o,10):o,!(r&&"object"==typeof r&&s in r))return;if(c===a.length-1)return e?(o=r[s],i&&Array.isArray(r)?r.splice(s,1):delete r[s],Array.isArray(r)&&(n=a.slice(0,-1).join("."),-1===this.cleanup.indexOf(n))&&this.cleanup.push(n),o):r[s];r=r[s]}return r=e&&Array.isArray(r)?r.filter(function(t){return void 0!==t}):r},n.prototype.delete=function(t,r){return this.remove(t,r,!0)},n.prototype.remove=function(t,r,e){var i;if(this.cleanup=[],Array.isArray(t)){for(i=0;i<t.length;i++)this.pick(t[i],r,!0,e);return e||this._cleanup(r),r}return this.pick(t,r,!0,e)},n.prototype._cleanup=function(t){var r,e,i;if(this.cleanup.length){for(r=0;r<this.cleanup.length;r++)i=(i=(i=(e=this.cleanup[r].split(".")).splice(0,-1).join("."))?this.pick(i,t):t)[e[0]].filter(function(t){return void 0!==t}),this.set(this.cleanup[r],i,t);this.cleanup=[]}},n.prototype.del=n.prototype.remove,n.prototype.move=function(t,r,e,i,n){return"function"==typeof i||Array.isArray(i)?this.set(r,s(this.pick(t,e,!0),i),e,n):(n=i,this.set(r,this.pick(t,e,!0),e,n)),e},n.prototype.transfer=function(t,r,e,i,n,o){return"function"==typeof n||Array.isArray(n)?this.set(r,s(this.pick(t,e,!0),n),i,o):(o=n,this.set(r,this.pick(t,e,!0),i,o)),i},n.prototype.copy=function(t,r,e,i,n,o){return"function"==typeof n||Array.isArray(n)?this.set(r,s(JSON.parse(JSON.stringify(this.pick(t,e,!1))),n),i,o):(o=n,this.set(r,this.pick(t,e,!1),i,o)),i},n.prototype.set=function(t,r,e,i){var n,o,s,a;if(void 0!==r)for(s=f(t,this.separator),n=0;n<s.length;n++){if(a=s[n],n===s.length-1)if(i&&p(r)&&p(e[a]))for(o in r)u.call(r,o)&&(e[a][o]=r[o]);else if(i&&Array.isArray(e[a])&&Array.isArray(r))for(var c=0;c<r.length;c++)e[s[n]].push(r[c]);else e[a]=r;else u.call(e,a)&&(p(e[a])||Array.isArray(e[a]))||(/^\d+$/.test(s[n+1])?e[a]=[]:e[a]={});e=e[a]}return e},n.prototype.transform=function(r,e,i){return e=e||{},i=i||{},Object.keys(r).forEach(function(t){this.set(r[t],this.pick(t,e),i)}.bind(this)),i},n.prototype.dot=function(i,n,o){n=n||{},o=o||[];var s=Array.isArray(i);return Object.keys(i).forEach(function(t){var r,e=s&&this.useBrackets?"["+t+"]":t;if(a(i[t])&&(p(i[t])&&!c(i[t])||Array.isArray(i[t])&&!this.keepArray&&0!==i[t].length))return s&&this.useBrackets?(r=o[o.length-1]||"",this.dot(i[t],n,o.slice(0,-1).concat(r+e))):this.dot(i[t],n,o.concat(e));s&&this.useBrackets?n[o.join(this.separator).concat("["+t+"]")]=i[t]:n[o.concat(e).join(this.separator)]=i[t]}.bind(this)),n},n.pick=o("pick"),n.move=o("move"),n.transfer=o("transfer"),n.transform=o("transform"),n.copy=o("copy"),n.object=o("object"),n.str=o("str"),n.set=o("set"),n.delete=o("delete"),n.del=n.remove=o("remove"),n.dot=o("dot"),["override","overwrite"].forEach(function(t){Object.defineProperty(n,t,{get:function(){return i.override},set:function(t){i.override=!!t}})}),["useArray","keepArray","useBrackets"].forEach(function(r){Object.defineProperty(n,r,{get:function(){return i[r]},set:function(t){i[r]=t}})}),n._process=s,"function"==typeof define&&define.amd?define(function(){return n}):"undefined"!=typeof module&&module.exports?module.exports=n:t.DotObject=n}(this);