Comparing version 0.2.2 to 0.3.0
@@ -1,1 +0,1 @@ | ||
module.exports=function(e){var r={};function o(t){if(r[t])return r[t].exports;var n=r[t]={i:t,l:!1,exports:{}};return e[t].call(n.exports,n,n.exports,o),n.l=!0,n.exports}return o.m=e,o.c=r,o.d=function(e,r,t){o.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(e,r){if(1&r&&(e=o(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(o.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)o.d(t,n,function(r){return e[r]}.bind(null,n));return t},o.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(r,"a",r),r},o.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},o.p="",o(o.s=0)}([function(e,r){e.exports=function(e={},{setPrototype:r=!1,invokeConstructors:o=!0,copyNonEnumerables:t=!1,copySymbols:n=!1,copyGettersSetters:s=!1,allowCircularReferences:i=!1}={}){if(!e||"object"!=typeof e)throw new TypeError("TypeError: invalid 'obj' argument's type");if(e instanceof Number||e instanceof String||e instanceof Boolean)throw new TypeError("TypeError: wrapper objects are not allowed as source");if(e instanceof Promise)throw new TypeError("TypeError: Promises are not allowed as source");if(e instanceof Error)throw new TypeError("TypeError: cannot copy Error objects");if(e instanceof RegExp){const{source:r,flags:o,lastIndex:t}=e,n=new RegExp(r,o);return n.lastIndex=t,n}if(e instanceof Date)return new Date(e.getTime());const a={setPrototype:r,invokeConstructors:o,copyNonEnumerables:t,copySymbols:n,copyGettersSetters:s,allowCircularReferences:i};if("boolean"!=typeof r)throw new TypeError("TypeError: invalid 'setPrototype' flag's type");if("boolean"!=typeof o)throw new TypeError("TypeError: invalid 'invokeConstructors' flag's type");if("boolean"!=typeof t)throw new TypeError("TypeError: invalid 'copyNonEnumerables' flag's type");if("boolean"!=typeof n)throw new TypeError("TypeError: invalid 'copySymbols' flag's type");if("boolean"!=typeof s)throw new TypeError("TypeError: invalid 'copyGettersSetters' flag's type");if("boolean"!=typeof i)throw new TypeError("TypeError: invalid 'allowCircularReferences' flag's type");return function e(r,{setPrototype:o,invokeConstructors:t,copyNonEnumerables:n,copySymbols:s,copyGettersSetters:i,allowCircularReferences:a},c,f){c.set(r,r);let l=null;const p=Object.getOwnPropertyDescriptors(r);l=t?new r.constructor:o?Object.create(Object.getPrototypeOf(r)):{};const u=new WeakMap;if(Object.entries(p).forEach(([r,p])=>{const{value:y,enumerable:b}=p;if((n||b)&&(s||"symbol"!=typeof y)&&(i||!p.get&&!p.set))if(y&&"object"==typeof y){if(u.has(y))return void(l[r]=u.get(y));if(c.has(y)){if(a)return void(l[r]=c.get(y));throw new TypeError("TypeError: circular reference found")}if(y instanceof Error)throw new TypeError("TypeError: cannot copy Error objects");if(y instanceof Number||y instanceof Boolean){const e=p.value.valueOf();return void Object.defineProperty(l,r,{...p,...{value:e}})}if(y instanceof String){const e=p.value.toString();return void Object.defineProperty(l,r,{...p,...{value:e}})}if(y instanceof Date){const e=new Date(p.value.getTime());return void Object.defineProperty(l,r,{...p,...{value:e}})}if(y instanceof RegExp){const{value:{lastIndex:e}}=p,o=new RegExp(p.value.source,p.value.flags);return Object.defineProperty(l,r,{...p,...{value:o}}),void(l[r].lastIndex=e)}if(y instanceof Promise)return void Object.defineProperty(l,r,p);l[r]=e(y,{setPrototype:o,invokeConstructors:t,copyNonEnumerables:n,copySymbols:s,copyGettersSetters:i,allowCircularReferences:a},c,f),u.set(y,l[r])}else{const e=Object.getOwnPropertyDescriptor(l,r);e&&!e.configurable||Object.defineProperty(l,r,p)}}),a&&(c.set(r,l),f===r)){const e=new WeakMap;e.set(l),function r(o,t){Object.entries(o).forEach(([n,s])=>{if(s&&"object"==typeof s)if(t.has(s))o[n]=t.get(s);else{if(e.has(s))return;e.set(s),r(s,t)}})}(l,c)}return l}(e,a,new WeakMap,e)}}]); | ||
module.exports=function(e){var r={};function t(o){if(r[o])return r[o].exports;var n=r[o]={i:o,l:!1,exports:{}};return e[o].call(n.exports,n,n.exports,t),n.l=!0,n.exports}return t.m=e,t.c=r,t.d=function(e,r,o){t.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:o})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,r){if(1&r&&(e=t(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(t.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)t.d(o,n,function(r){return e[r]}.bind(null,n));return o},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},t.p="",t(t.s=0)}([function(e,r){e.exports=function(e={},{setPrototype:r=!1,invokeConstructors:t=!0,copyNonEnumerables:o=!1,copySymbols:n=!1,copyGettersSetters:i=!1,allowCircularReferences:s=!1,discardErrorObjects:c=!0}={}){if(!e||"object"!=typeof e)throw new TypeError("TypeError: invalid 'obj' argument's type");if(e instanceof Number||e instanceof String||e instanceof Boolean)return null;if(e instanceof Promise)return e;if(e instanceof Error){if(c)return null;throw new TypeError("TypeError: cannot copy Error objects")}if(e instanceof RegExp){const{source:r,flags:t,lastIndex:o}=e,n=new RegExp(r,t);return n.lastIndex=o,n}if(e instanceof Date)return new Date(e.getTime());const a={setPrototype:r,invokeConstructors:t,copyNonEnumerables:o,copySymbols:n,copyGettersSetters:i,allowCircularReferences:s,discardErrorObjects:c};if("boolean"!=typeof r)throw new TypeError("TypeError: invalid 'setPrototype' flag's type");if("boolean"!=typeof t)throw new TypeError("TypeError: invalid 'invokeConstructors' flag's type");if("boolean"!=typeof o)throw new TypeError("TypeError: invalid 'copyNonEnumerables' flag's type");if("boolean"!=typeof n)throw new TypeError("TypeError: invalid 'copySymbols' flag's type");if("boolean"!=typeof i)throw new TypeError("TypeError: invalid 'copyGettersSetters' flag's type");if("boolean"!=typeof s)throw new TypeError("TypeError: invalid 'allowCircularReferences' flag's type");if("boolean"!=typeof c)throw new TypeError("TypeError: invalid 'discardErrorObjects' flag's type");return function e(r,{setPrototype:t,invokeConstructors:o,copyNonEnumerables:n,copySymbols:i,copyGettersSetters:s,allowCircularReferences:c,discardErrorObjects:a},f,l){f.set(r,r);let p=null;const u=Object.getOwnPropertyDescriptors(r);p=o?new r.constructor:t?Object.create(Object.getPrototypeOf(r)):{};const y=new WeakMap;if(Object.entries(u).forEach(([r,u])=>{const{value:b,enumerable:d}=u;if((n||d)&&(i||"symbol"!=typeof b)&&(s||!u.get&&!u.set))if(b&&"object"==typeof b){if(y.has(b))return void(p[r]=y.get(b));if(f.has(b)){if(c)return void(p[r]=f.get(b));throw new TypeError("TypeError: circular reference found")}if(b instanceof Error){if(a)return;throw new TypeError("TypeError: cannot copy Error objects")}if(b instanceof Number||b instanceof Boolean){const e=u.value.valueOf();return void Object.defineProperty(p,r,{...u,...{value:e}})}if(b instanceof String){const e=u.value.toString();return void Object.defineProperty(p,r,{...u,...{value:e}})}if(b instanceof Date){const e=new Date(u.value.getTime());return void Object.defineProperty(p,r,{...u,...{value:e}})}if(b instanceof RegExp){const{value:{lastIndex:e}}=u,t=new RegExp(u.value.source,u.value.flags);return Object.defineProperty(p,r,{...u,...{value:t}}),void(p[r].lastIndex=e)}if(b instanceof Promise)return void Object.defineProperty(p,r,u);p[r]=e(b,{setPrototype:t,invokeConstructors:o,copyNonEnumerables:n,copySymbols:i,copyGettersSetters:s,allowCircularReferences:c,discardErrorObjects:a},f,l),y.set(b,p[r])}else{const e=Object.getOwnPropertyDescriptor(p,r);e&&!e.configurable||Object.defineProperty(p,r,u)}}),c&&(f.set(r,p),l===r)){const e=new WeakMap;e.set(p),function r(t,o){Object.entries(t).forEach(([n,i])=>{if(i&&"object"==typeof i)if(o.has(i))t[n]=o.get(i);else{if(e.has(i))return;e.set(i),r(i,o)}})}(p,f)}return p}(e,a,new WeakMap,e)}}]); |
{ | ||
"name": "omniclone", | ||
"version": "0.2.2", | ||
"version": "0.3.0", | ||
"description": "deep cloning function for js objects", | ||
@@ -5,0 +5,0 @@ "main": "dist/main.js", |
# omniclone | ||
A customizable and fool proof javascript function for object deep cloning | ||
An isomorphic, customizable and fool proof javascript function for object deep cloning | ||
```js | ||
@@ -30,7 +30,7 @@ omniclone(source, config); | ||
3. let you to clone objects with circular references (customizable behavior) | ||
4. handle String, Boolean, Number and Date objects in the right way: String, Boolean, and Number objects are unwrapped - Date objects are exactly copied | ||
5. let you to copy getters and setters, non enumerables properties and also symbols (customizable behavior) | ||
4. let you to copy getters and setters, non enumerables properties and also symbols (customizable behavior) | ||
5. correct handling of String, Boolean, Number, Error and Promise objects | ||
6. safe similar sibilings references are not duplicated | ||
7. correct cloning of Array objects (if the `invokeConstructors` flagis setted) | ||
8. correct cloning of RegExp objects | ||
7. correct cloning of Array objects (if the `invokeConstructors` flag is setted) | ||
8. correct cloning of RegExp and Date objects | ||
@@ -147,2 +147,12 @@ ## config | ||
### discardErrorObjects (default true) | ||
Enable it to discard Error objects props.\ | ||
Know that `omnicopy` will return `null` if one is passed as source.\ | ||
Disable it to throw an error if one is met. | ||
```js | ||
const res = omniclone(source, { | ||
discardErrorObjects: true | ||
}); | ||
``` | ||
## default config | ||
@@ -158,6 +168,19 @@ The default config is the following: | ||
allowCircularReferences: false, | ||
discardErrorObjects: true, | ||
}); | ||
``` | ||
## what about String, Boolean, Number, Error and Promise objects? | ||
String, Boolean and Number objects passed to `omniclone` as sources will produce `null`.\ | ||
Error objects passed to `omniclone` as sources will produce `null` if the `discardErrorObjects` is set to `true` (as default).\ | ||
Error objects passed to `omniclone` as sources will produce a `TypeError` if the `discardErrorObjects` is set to `false` (not the predefined behaviour). | ||
String, Boolean and Number objects props will be unwrapped.\ | ||
Error objects props will be discarded if the `discardErrorObjects` is set to `true` (as default).\ | ||
Error objects props will produce a `TypeError` if the `discardErrorObjects` is set to `false` (not the predefined behaviour). | ||
Promise objects will be returned if passed to `omniclone` as sources.\ | ||
Promise objects props will be shallow copied. | ||
## what about the 6th strength? | ||
@@ -164,0 +187,0 @@ |
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
13835
202