{"_id":"@ardentia/deep-copy","_rev":"4-992154b43398fe85ca654e1a7cd44345","name":"@ardentia/deep-copy","dist-tags":{"latest":"1.0.3"},"versions":{"1.0.0":{"name":"@ardentia/deep-copy","version":"1.0.0","description":"A package that returns a deep copy of a given object or array","main":"index.js","private":false,"scripts":{"build":"rimraf dist && tsc && copyfiles package.json dist","test":"ts-node --project=tsconfig.spec.json node_modules/jasmine/bin/jasmine --config=jasmine.json"},"repository":{"type":"git","url":"git+https://github.com/ardentia/deep-copy.git"},"keywords":["deep copy","copy","js","copy","object","array"],"author":{"name":"Plamena Radneva","email":"rhythmxholic@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/ardentia/deep-copy/issues"},"homepage":"https://github.com/ardentia/deep-copy#readme","devDependencies":{"@types/jasmine":"^3.3.16","copyfiles":"^2.1.1","jasmine":"^3.4.0","rimraf":"^2.6.3","ts-node":"^8.3.0","typescript":"^3.5.3"},"_id":"@ardentia/deep-copy@1.0.0","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-OyJFaX2rkrLpNwAvDEBdl4H4fbUszjIXjuSm++mn3TP3hCdqXjUm8BIIjfC/ydMse0GuNCJADXhJNZGCbLUjZg==","shasum":"e9efab67a3882bbeb6f4fde7052be2b51e157f99","tarball":"https://registry.npmjs.org/@ardentia/deep-copy/-/deep-copy-1.0.0.tgz","fileCount":5,"unpackedSize":2376,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdRdTUCRA9TVsSAnZWagAAu5oP/0VcgzaVJjjeyJkawN5E\n57Swmt5XmwSloGOiRiVnoujr1EaurHPzdOW6Hc3jUirWQCQod44FcEvdT3lS\ncAoQWJI0ztpHm5zRnxMl6hhF/rlpqDtZYkD2Bpjoy3BnxitcXNUWsVTK3tV5\nodALT9OtyXwRyQ2s55GaDWHsea4IabpLc2/AqvjbGRcObT4Bcv+V6qnPEm+P\nFb1wpw9k25QbPjKz014L6uPl/ge+Dpau1HFz//VB+9O6gdco+gMkDU1vyc48\nOxlhC9xPmw0IDpMP1UpwPbLjE37jeUXG7kQRG12JzOg/7HjiW8HJl4bg5MPh\nOB3WVJ7RXPY3Ufrmnb+R0sbsZZFr/VntMS5jh9YCeAzVKxo5WfX7vI2RZ4T3\nD7B5TMZ++660yPRL48JRFRVQIH+/y2+uGw6qa4J3wQryr/zNuOU5cXFeKNwf\nKg77wXgaLk5zzxRMjZzh7TbzwdCqWhc2Jf/aLsLEvZ9jQObJSf1ZljRLAygD\nhXpufr5tJo+6LCIo3Ar95yk+0cE6qMgoNaSq/fTjsW9oZPToDeEaM3mvrbuv\nL5n3xhiI91oI3QIRr/QkQTZm2pJquh4v7IQVhjKI7KQRL4xk1bhB0rk6IgE7\nKB6bEibFNDpCr6qxAtpfwBVy1F3LJh/Wueh0lzSiZwVFsZZj5lMsDKmU4DMj\n1cWl\r\n=wmfA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC7VclQpXeEqz4058UPGg43xjc9lQpBuOkgAee3MzBQJQIgPTdp7ZZ0/RUq8A9jKgxD3TO4mPw22JMlvH3I27Ugf58="}]},"maintainers":[{"name":"ardentia","email":"rhythmxholic@gmail.com"}],"_npmUser":{"name":"ardentia","email":"rhythmxholic@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/deep-copy_1.0.0_1564857555878_0.5496089247646114"},"_hasShrinkwrap":false},"1.0.1":{"name":"@ardentia/deep-copy","version":"1.0.1","description":"A package that returns a deep copy of a given object or array","main":"index.js","private":false,"scripts":{"build":"rimraf dist && tsc && copyfiles package.json dist && copyfiles README.md dist","test":"ts-node --project=tsconfig.spec.json node_modules/jasmine/bin/jasmine --config=jasmine.json"},"repository":{"type":"git","url":"git+https://github.com/ardentia/deep-copy.git"},"keywords":["deep copy","copy","js","copy","object","array"],"author":{"name":"Plamena Radneva","email":"rhythmxholic@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/ardentia/deep-copy/issues"},"homepage":"https://github.com/ardentia/deep-copy#readme","devDependencies":{"@types/jasmine":"^3.3.16","copyfiles":"^2.1.1","jasmine":"^3.4.0","rimraf":"^2.6.3","ts-node":"^8.3.0","typescript":"^3.5.3"},"_id":"@ardentia/deep-copy@1.0.1","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-hQMqC0gTC5MxhFM4G3voMWEaUtzuOWiVwPCe7Uh2g0t9i3AYAETqg55PWT3oVKKD4GK7MuZvpmRAtrtPLAgiEQ==","shasum":"f408b1d3a437c0b84c1906f1a212efba3a2acdc3","tarball":"https://registry.npmjs.org/@ardentia/deep-copy/-/deep-copy-1.0.1.tgz","fileCount":6,"unpackedSize":5196,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdRdWmCRA9TVsSAnZWagAAmqIP/1AtJidpMLeUcmRSWWkg\nbz2mvK38Aora3HtjDiuxx2VIy9zeOZwSlbMRYGeVG/dhKgDwrz4O1sMbz0MK\nsdbAkqx+1hv9bSFgLbJDTszPZYSbdY+ahxM74bxt4N4PIhDnlSFQatQ3upBT\nW1wqTejYuwOqqGLLdfUo6h7H8IfUSyJbyd86jmJUoGTEUEy4nvItLTOpdFDp\n6h8p0l/Mw479D/JcX/To+MA7cEaoKcKoYuGVabXu0yTZWpfW5AW+XXR5zUz8\np9VxUkCPryDtwXgxMHAGTE2FF17C2hj7npLET3IW8FTA3bHmYA7dV8k0kiS1\nHKcuWWl7Dp3vb2lPZ55/pE1VDqxyvHmUMiRrhfJjNKd21orQyMe+i4u5tyMW\nSSDwkVv4Sqs5zX3r7wZf321kORN/SaGD4m1tqAYEWOtW+LWUsXPA7wGYIuX1\njcz57Jry3JFFECxaNOsY6v+Ja07wTMWfy8S5u5Ys9k7Dvek5Ts75ocR+MKs/\n74YUKtTT9IfLSu6rvlf9lchSKWw7WRyA/XePLR9pRFEgyYnnja3PgukkqsCt\noSBraWUZGKhJcd6fAuekcUaGt/dV8MJJ8OV17k9DVznWpnN3DxSX/MRLwG+r\n8WFGblmg8YXuYZDy7Lwvt9kvoDDDxCGAcQmtj8ibNeKI3JqvWwKOjUNyLc5v\n1dZy\r\n=7New\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC+28EmEuKawUiePe4HvtgbS0D4msFMHPyhk0TnuH8eiAIhAOwqiaBAnCwE9t2CPmh9MKMPqp+HEbRpzAprw4tad7dO"}]},"maintainers":[{"name":"ardentia","email":"rhythmxholic@gmail.com"}],"_npmUser":{"name":"ardentia","email":"rhythmxholic@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/deep-copy_1.0.1_1564857765886_0.7157526382289594"},"_hasShrinkwrap":false},"1.0.2":{"name":"@ardentia/deep-copy","version":"1.0.2","description":"A package that returns a deep copy of a given object or array","main":"index.js","module":"./es6/index.js","private":false,"typings":"index.d.ts","repository":{"type":"git","url":"git+https://github.com/ardentia/deep-copy.git"},"keywords":["deep copy","copy","js","copy","object","array"],"author":{"name":"Plamena Radneva","email":"rhythmxholic@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/ardentia/deep-copy/issues"},"homepage":"https://github.com/ardentia/deep-copy#readme","devDependencies":{"@types/jasmine":"^3.3.16","copyfiles":"^2.1.1","jasmine":"^3.4.0","rimraf":"^2.6.3","ts-node":"^8.3.0","typescript":"^3.5.3"},"_id":"@ardentia/deep-copy@1.0.2","_nodeVersion":"10.16.0","_npmVersion":"6.10.3","dist":{"integrity":"sha512-AaHnR5k1b80wdXmuDOSqwv8V/AtWJU3ff5Pqgcf/yfXzYN1IUB5hMLy4sTVKOugFvI8R4XUcsNk6mA3jvEA6bA==","shasum":"ad1a7782cb4245a9adc2433813969fc36757c577","tarball":"https://registry.npmjs.org/@ardentia/deep-copy/-/deep-copy-1.0.2.tgz","fileCount":8,"unpackedSize":6441,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdUEXXCRA9TVsSAnZWagAAwmYP/iwzV8VX/9DaREEStv08\ntZOMRuujEWy7Jd2xZrUZq14WV2g3uXuzNJwI4oxg1lywpEYy7BvGCkGXZ1ZD\n6rVULKw/Gq/D32rn0pN1jAMksx5Y8YH+lgEZug6yGNXYmMl1K6fwBuK7oWJY\nm9fnasEazYB5afwtzb3oozKgZX7ss2Oe3D57l3F+5ibxV9mOZF+wbKg8eXst\nswhGPny8e815FkF2mBlgauSy7XKthoEth685rHxvzHs4OpPCcstCE8K3eu9D\noKAXWWOPKITI5TfgD5gwP1jEVr3tYGT3VJkQhdJU7FPe+yAUOy9+oEQld3pi\nwk3MiORKyRAu2bRZQaXqPC9cUZFqsMI3YEGqagPH/p8W9rqBb9LYqgGSatFD\nk8MvM0z9giFVfiaHgBCLUSsyzZcXrjBWAn0wbb5H32BBZDz3PIARgXdKshiL\nfdIsX38dn7P18qXTKYeO2vcH4yQ+SsZz+33uJAN7oUgFRkFgi3gTTMU9JYp4\na/1iOFZcFcOo6eHcC0SO4AytdqDGAyZm2wIwKAuyqIH4S1sZ1rTMZGehHhSo\nUFivISOLwbZ4ZVcCOlnnrT+A/xNYpqvsgFCOmQ5h7WBU0P78EdMOaOzvxRcD\nijeXjSxF0Cvm6S64LrMTke2Q9vOaf2/D05oSQ9GHeIJU7ynPWBSZmwwxRG2A\nZljy\r\n=Ae3z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICs4T1pH8M+0FX6BGk8wWCljXP6G32w0N81eHIn2EcH8AiEAjmu8t1hu7rSdNwIAXU4T4xP/lEn7uxEAlC8Itr4TUs0="}]},"maintainers":[{"name":"ardentia","email":"rhythmxholic@gmail.com"}],"_npmUser":{"name":"ardentia","email":"rhythmxholic@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/deep-copy_1.0.2_1565541847246_0.3127178781542965"},"_hasShrinkwrap":false},"1.0.3":{"name":"@ardentia/deep-copy","version":"1.0.3","description":"A package that returns a deep copy of a given object or array","main":"index.js","module":"./es6/index.js","private":false,"typings":"index.d.ts","scripts":{"build:declarations":"tsc --declaration true --emitDeclarationOnly --outdir dist","build:module:es6":"tsc --module es6 --outdir dist/es6","build:module:node":"tsc --module commonjs --outdir dist/node","build:module:all":"npm run build:declarations && npm run build:module:es6 && npm run build:module:node","build":"rimraf dist && npm run build:module:all && copyfiles package.json dist && copyfiles README.md dist","test":"ts-node --project=tsconfig.spec.json node_modules/jasmine/bin/jasmine --config=jasmine.json"},"repository":{"type":"git","url":"git+https://github.com/ardentia/deep-copy.git"},"keywords":["deep","copy","js","object","array","typescript","es6","library","microlibrary","tool","esnext","javascript","deep copy","ts"],"author":{"name":"Plamena Radneva","email":"rhythmxholic@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/ardentia/deep-copy/issues"},"homepage":"https://github.com/ardentia/deep-copy#readme","devDependencies":{"@types/jasmine":"^3.3.16","copyfiles":"^2.1.1","jasmine":"^3.4.0","rimraf":"^2.6.3","ts-node":"^8.3.0","typescript":"^3.5.3"},"_id":"@ardentia/deep-copy@1.0.3","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-skRnGIfg3itdi81UtQdXDTyM6UeH6oiXgOSMULJPzYmgDyOVixSfMzr6E5LOU8Xn5jagdsCjY6LZWGhfuTp+6g==","shasum":"0f06ff070ece38ef3ec6f860290c7a32da5823b7","tarball":"https://registry.npmjs.org/@ardentia/deep-copy/-/deep-copy-1.0.3.tgz","fileCount":8,"unpackedSize":7943,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQQnWCRA9TVsSAnZWagAApVwP/ip1PlE44I2Ab/tl5Vvz\nHvQlrcZf/4xQcSH1jEG8XsBWJlbwVawq9bg2TUYjVpDDFm118UuIhIApDQDw\nGT2VOJHr0m7NW6AbY5odhEZgT8pTdeUe+NXANc8+gQw0jQz1KvU80JgE3HWs\n8XyfNsSb6xIq7VC8TqIYKXX1LaSnKm8/d5NzSKi77QBBQZiSrSpvWP+xqdCb\nmxoItf4oQehf/lOFEYsAnUMLgOkRLZOP9aMTmx9yxgrji0eLgbnU1acbMZaF\niHK9gp8ee6yGPJiRxAIJez5tVYurCqLLjTC9ytCQaQ8AWBsB8MG8t/XJfHEn\nqHxdY41K3JD7VComDOKGymLBAq3mYqLxVcDZKGrxCrOslK8TAn8/hB1sXaqR\nFP6h60+bjT/N6dGyEdLtf07RAMxML5IkF3yY4HkLn6yMPwnRCrH62bRcOGfM\n6Zao0w864bSojjmFLV+0ptgKALiN7mvvpAWYVldd4QT2zD8VI4+P3tgUk80Q\neuwHNseA7RmM+2mDDYsulaS7rO6qpELaRZ2Bihs/xwBpkgjhSm0gQ5p7Znn4\nIsv4bb0tP54Bn8GlF/4zm27u9sfKdrp7eW1YdUzWxNDELK5nEz2tiMY39HOj\nHuE/dJVEuVzZw56ZdU+Ty16RqSt8GMe70jGMFC2N6WOS8UUEOGrqBbJWo7rr\nlC1k\r\n=lTcg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBF4wxAHdysiKXaMdGr/Q2JpjScSdOkxUAqQIlWrCEd6AiA7gRDXKIi7JD+Y6gHS3kD0CXFOK7N5CJLqmvBzASXARA=="}]},"_npmUser":{"name":"ardentia","email":"rhythmxholic@gmail.com"},"directories":{},"maintainers":[{"name":"ardentia","email":"rhythmxholic@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/deep-copy_1.0.3_1614875094600_0.12562807743471183"},"_hasShrinkwrap":false}},"time":{"created":"2019-08-03T18:39:15.670Z","1.0.0":"2019-08-03T18:39:15.973Z","modified":"2022-04-04T15:22:33.090Z","1.0.1":"2019-08-03T18:42:46.042Z","1.0.2":"2019-08-11T16:44:07.396Z","1.0.3":"2021-03-04T16:24:54.723Z"},"maintainers":[{"name":"ardentia","email":"rhythmxholic@gmail.com"}],"description":"A package that returns a deep copy of a given object or array","homepage":"https://github.com/ardentia/deep-copy#readme","keywords":["deep","copy","js","object","array","typescript","es6","library","microlibrary","tool","esnext","javascript","deep copy","ts"],"repository":{"type":"git","url":"git+https://github.com/ardentia/deep-copy.git"},"author":{"name":"Plamena Radneva","email":"rhythmxholic@gmail.com"},"bugs":{"url":"https://github.com/ardentia/deep-copy/issues"},"license":"MIT","readme":"# deep-copy\r\nThis microlibrary provides a deep copy of a given object or array.\r\n\r\n## Usage\r\nInstall the library:\r\n```bash\r\nnpm install @ardentia/deep-copy\r\n```\r\n\r\nThen, in the file where you want to use it:\r\n```typescript\r\n//ES6 / TypeScript\r\n\r\nimport getItemCopy from '@ardentia/deep-copy';\r\n\r\n//...\r\nconst copy = getItemCopy(<value>);\r\n```\r\n\r\n```javascript\r\n//node.js\r\n\r\nconst getItemCopy = require('@ardentia/deep-copy/node').default;\r\n\r\n//...\r\nconst copy = getItemCopy(<value>);\r\n```\r\n\r\nThe library is built to be ES6-, TypeScript and node.js-compatible.\r\n\r\n### Examples:\r\n\r\nThe values of the given object are recursively traversed and are also deep copied in case they are not primitive types. If the value is a primitive type, a copy by value is returned.\r\n\r\n```javascript\r\n//...\r\nconst myCustomObject = { \r\n  numberVal: 1,\r\n  stringVal: 'string',\r\n  arrayVal: [{ foo: 'bar' }, 1, 2, 3],\r\n  objectVal: { foo: 'bar', innerArray: [1, 2, 3] }\r\n};\r\n\r\nconst objectCopy = getItemCopy(myCustomObject);\r\n\r\nconsole.log(Object.is(objectCopy, myCustomObject)); \r\n//false -> deep copy of object\r\n\r\nconsole.log(Object.is(objectCopy.numberVal, myCustomObject.numberVal)); \r\n//true -> primitive type copied by value\r\n\r\nconsole.log(Object.is(objectCopy.stringVal, myCustomObject.stringVal)); \r\n//true -> primitive type copied by value\r\n\r\nconsole.log(Object.is(objectCopy.arrayVal, myCustomObject.arrayVal)); \r\n//false -> deep copy of array\r\n\r\nconsole.log(Object.is(objectCopy.arrayVal[0], myCustomObject.arrayVal[0])); \r\n//false -> deep copy of object\r\n\r\nconsole.log(Object.is(objectCopy.objectVal, myCustomObject.objectVal)); \r\n//false -> deep copy of object\r\n\r\nconsole.log(Object.is(objectCopy.objectVal.innerArray, myCustomObject.objectVal.innerArray)); \r\n//false -> deep copy of array\r\n```\r\n\r\nSame deep copy logic applies to array members:\r\n```javascript\r\n//...\r\nconst myCustomArray = [\r\n  1,\r\n  'string',\r\n  { foo: 'bar', innerArray: [1, 2, 3] },\r\n  [{ foo: 'bar'}, 1, 2, 3]\r\n];\r\n\r\nconst arrayCopy = getItemCopy(myCustomArray);\r\n\r\nconsole.log(Object.is(arrayCopy, myCustomArray)); \r\n//false -> deep copy of array\r\n\r\nconsole.log(Object.is(arrayCopy[0], myCustomArray[0]));\r\n//true -> primitive type copied by value\r\n\r\nconsole.log(Object.is(arrayCopy[1], myCustomArray[1]));\r\n//true -> primitive type copied by value\r\n\r\nconsole.log(Object.is(arrayCopy[2], myCustomArray[2]));\r\n//false -> deep copy of object\r\n\r\nconsole.log(Object.is(arrayCopy[2].innerArray, myCustomArray[2].innerArray));\r\n//false -> deep copy of array\r\n\r\nconsole.log(Object.is(arrayCopy[3], myCustomArray[3])); \r\n//false -> deep copy of array\r\n\r\nconsole.log(Object.is(arrayCopy[3][0], myCustomArray[3][0])); \r\n//false -> deep copy of object\r\n```\r\n\r\n**Note:** If the object you are attempting to copy contains children that recursively reference their parent object, the call to `getItemCopy(...)` will cause a range error exception: `Range Error: Maximum call stack size exceeded`. If such an object structure is possible in your case, you need to place the call to `getItemCopy(...)` in a try-catch construction:\r\n\r\n```typescript\r\nimport getItemCopy from '@ardentia/deep-copy';\r\n\r\nconst rootObj = {\r\n  childA: null,\r\n  childB: null\r\n};\r\n\r\nconst childA = {\r\n  a1: 'a1',\r\n  a2: 'a2',\r\n  root: rootObj\r\n};\r\n\r\nrootObj.childA = childA;\r\n\r\nconst childB = {\r\n  b1: 'b1',\r\n  b2: 'b2',\r\n  root: rootObj\r\n};\r\n\r\ntry {\r\n  const result = getItemCopy(rootObj);\r\n} catch(ex) {\r\n  // handle the range error exception\r\n}\r\n```\r\n## Local Development\r\n1. Fork the project and clone it locally\r\n2. `npm install` to install the library dependencies\r\n3. `npm install -g typescript` to install TypeScript globally\r\n4. `npm test` to run tests\r\n5. `npm run build` to build for production\r\n","readmeFilename":"README.md"}