{"_id":"unchanged","_rev":"29-c67015422fc631e512afc34eebd60a0c","name":"unchanged","description":"A tiny, fast, unopinionated handler for updating JS objects and arrays immutably","dist-tags":{"latest":"2.2.1","next":"2.2.0-beta.0"},"versions":{"1.0.0":{"author":{"name":"tony_quetano@planttheidea.com"},"ava":{"babel":"inherit","failFast":true,"files":["test/*.js"],"require":["babel-register"],"source":["src/*.js"],"verbose":true},"browserslist":["defaults","Explorer >= 9","Safari >= 6","Opera >= 15","iOS >= 8","Android >= 4"],"bugs":{"url":"https://github.com/planttheidea/unchanged/issues"},"dependencies":{"pathington":"^1.1.4"},"description":"A tiny, fast, unopinionated immutable handler for updating JS objects and arrays","devDependencies":{"ava":"^0.24.0","babel-cli":"^6.26.0","babel-eslint":"^8.0.3","babel-loader":"^7.1.2","babel-preset-env":"^1.6.1","babel-preset-stage-2":"^6.24.1","babel-register":"^6.26.0","benchmark":"^2.1.4","cli-table":"^0.3.1","eslint":"^4.13.1","eslint-config-rapid7":"^2.11.1","eslint-friendly-formatter":"^3.0.0","eslint-loader":"^1.9.0","html-webpack-plugin":"^2.30.1","in-publish":"^2.0.0","lodash":"^4.17.4","nyc":"^11.4.1","optimize-js-plugin":"^0.0.4","performance-now":"^2.1.0","ramda":"^0.25.0","react":"^16.2.0","react-dom":"^16.2.0","sinon":"^4.1.3","webpack":"^3.10.0","webpack-dev-server":"^2.9.7"},"keywords":["immutable","functional"],"license":"MIT","homepage":"https://github.com/planttheidea/unchanged#readme","main":"lib/index.js","module":"es/index.js","name":"unchanged","repository":{"type":"git","url":"git+https://github.com/planttheidea/unchanged.git"},"scripts":{"benchmark":"npm run transpile:lib && NODE_ENV=production node ./benchmarks/index.js","build":"NODE_ENV=development webpack --progress --colors --config=webpack/webpack.config.js","build:minified":"NODE_ENV=production webpack --progress --colors --config=webpack/webpack.config.minified.js","clean":"npm run clean:lib && npm run clean:es && npm run clean:dist","clean:dist":"rimraf dist","clean:lib":"rimraf lib","clean:es":"rimraf es","dev":"NODE_ENV=development webpack-dev-server --colors --progress --config=webpack/webpack.config.dev.js","dist":"npm run clean:dist && npm run build && npm run build:minified","lint":"NODE_ENV=test eslint src","lint:fix":"NODE_ENV=test eslint src --fix","prepublish":"if in-publish; then npm run prepublish:compile; fi","prepublish:compile":"npm run lint && npm run test:coverage && npm run transpile:lib && npm run transpile:es && npm run dist","start":"npm run dev","test":"NODE_PATH=. NODE_ENV=production BABEL_ENV=test ava","test:coverage":"nyc npm test","test:watch":"npm test -- --watch","transpile:lib":"npm run clean:lib && BABEL_ENV=lib babel src --out-dir lib","transpile:es":"npm run clean:es && BABEL_ENV=es babel src --out-dir es"},"version":"1.0.0","gitHead":"7dba3dc7f7715f0d1c13a6b368ba70611b054c4a","_id":"unchanged@1.0.0","_npmVersion":"5.6.0","_nodeVersion":"9.3.0","_npmUser":{"name":"planttheidea","email":"tony.quetano@planttheidea.com"},"dist":{"integrity":"sha512-Zkma8U0JT/OOIlqx8UaKld4BsqbUp3T/SJC7GYxWgcxye/ss9P+8p1F522DWVmXjFt9EHPb/dCYJcoHNVSqWdw==","shasum":"2f1f50978ec0d300b606b8915325f686667fbf38","tarball":"https://registry.npmjs.org/unchanged/-/unchanged-1.0.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHQz0zrPVgwDRlSUslM/uSM36xhogYiJidvu5ck4WrLWAiBq5kgo01xU0t4HdeHehqx/YqmCE3e4dTvPWuV8ly8yiA=="}]},"maintainers":[{"name":"planttheidea","email":"tony.quetano@planttheidea.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/unchanged-1.0.0.tgz_1513866620159_0.43665555003099144"},"directories":{}},"1.0.1":{"author":{"name":"tony_quetano@planttheidea.com"},"ava":{"babel":"inherit","failFast":true,"files":["test/*.js"],"require":["babel-register"],"source":["src/*.js"],"verbose":true},"browserslist":["defaults","Explorer >= 9","Safari >= 6","Opera >= 15","iOS >= 8","Android >= 4"],"bugs":{"url":"https://github.com/planttheidea/unchanged/issues"},"dependencies":{"pathington":"^1.1.4"},"description":"A tiny, fast, unopinionated handler for updating JS objects and arrays immutably","devDependencies":{"ava":"^0.24.0","babel-cli":"^6.26.0","babel-eslint":"^8.0.3","babel-loader":"^7.1.2","babel-preset-env":"^1.6.1","babel-preset-stage-2":"^6.24.1","babel-register":"^6.26.0","benchmark":"^2.1.4","cli-table":"^0.3.1","eslint":"^4.13.1","eslint-config-rapid7":"^2.11.1","eslint-friendly-formatter":"^3.0.0","eslint-loader":"^1.9.0","html-webpack-plugin":"^2.30.1","in-publish":"^2.0.0","lodash":"^4.17.4","nyc":"^11.4.1","optimize-js-plugin":"^0.0.4","performance-now":"^2.1.0","ramda":"^0.25.0","react":"^16.2.0","react-dom":"^16.2.0","sinon":"^4.1.3","webpack":"^3.10.0","webpack-dev-server":"^2.9.7"},"keywords":["immutable","functional"],"license":"MIT","homepage":"https://github.com/planttheidea/unchanged#readme","main":"lib/index.js","module":"es/index.js","name":"unchanged","repository":{"type":"git","url":"git+https://github.com/planttheidea/unchanged.git"},"scripts":{"benchmark":"npm run transpile:lib && NODE_ENV=production node ./benchmarks/index.js","build":"NODE_ENV=development webpack --progress --colors --config=webpack/webpack.config.js","build:minified":"NODE_ENV=production webpack --progress --colors --config=webpack/webpack.config.minified.js","clean":"npm run clean:lib && npm run clean:es && npm run clean:dist","clean:dist":"rimraf dist","clean:lib":"rimraf lib","clean:es":"rimraf es","dev":"NODE_ENV=development webpack-dev-server --colors --progress --config=webpack/webpack.config.dev.js","dist":"npm run clean:dist && npm run build && npm run build:minified","lint":"NODE_ENV=test eslint src","lint:fix":"NODE_ENV=test eslint src --fix","prepublish":"if in-publish; then npm run prepublish:compile; fi","prepublish:compile":"npm run lint && npm run test:coverage && npm run transpile:lib && npm run transpile:es && npm run dist","start":"npm run dev","test":"NODE_PATH=. NODE_ENV=production BABEL_ENV=test ava","test:coverage":"nyc npm test","test:watch":"npm test -- --watch","transpile:lib":"npm run clean:lib && BABEL_ENV=lib babel src --out-dir lib","transpile:es":"npm run clean:es && BABEL_ENV=es babel src --out-dir es"},"version":"1.0.1","gitHead":"e61117d209fea9d0f44582d5a4fa61b106ab5ed8","_id":"unchanged@1.0.1","_npmVersion":"5.6.0","_nodeVersion":"9.3.0","_npmUser":{"name":"planttheidea","email":"tony.quetano@planttheidea.com"},"dist":{"integrity":"sha512-VtDeDFqu6kh3G8iQJ3EBOASLKZB2doGrEVNDH0xqIgIS/RD0UkoO/H2WVWucntJrs8xH4FiKl/2PhVBUsyRfGQ==","shasum":"940d81943967eb8a778e5682d8ef946d499da93b","tarball":"https://registry.npmjs.org/unchanged/-/unchanged-1.0.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHVvej31ZlcyT7QEGGTmZLej1wE/X5RQ1CZ9GMfsDWyeAiEAucLKag65e4yEV7Mjq8b/+phOj4goiQKC2EFGSU2OPn8="}]},"maintainers":[{"name":"planttheidea","email":"tony.quetano@planttheidea.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/unchanged-1.0.1.tgz_1513876403956_0.10191248496994376"},"directories":{}},"1.0.2":{"author":{"name":"tony_quetano@planttheidea.com"},"ava":{"babel":"inherit","failFast":true,"files":["test/*.js"],"require":["babel-register"],"source":["src/*.js"],"verbose":true},"browserslist":["defaults","Explorer >= 9","Safari >= 6","Opera >= 15","iOS >= 8","Android >= 4"],"bugs":{"url":"https://github.com/planttheidea/unchanged/issues"},"dependencies":{"pathington":"^1.1.4"},"description":"A tiny, fast, unopinionated handler for updating JS objects and arrays immutably","devDependencies":{"ava":"^0.24.0","babel-cli":"^6.26.0","babel-eslint":"^8.0.3","babel-loader":"^7.1.2","babel-preset-env":"^1.6.1","babel-preset-stage-2":"^6.24.1","babel-register":"^6.26.0","benchmark":"^2.1.4","cli-table":"^0.3.1","eslint":"^4.13.1","eslint-config-rapid7":"^2.11.1","eslint-friendly-formatter":"^3.0.0","eslint-loader":"^1.9.0","html-webpack-plugin":"^2.30.1","in-publish":"^2.0.0","lodash":"^4.17.4","nyc":"^11.4.1","optimize-js-plugin":"^0.0.4","performance-now":"^2.1.0","ramda":"^0.25.0","react":"^16.2.0","react-dom":"^16.2.0","sinon":"^4.1.3","webpack":"^3.10.0","webpack-dev-server":"^2.9.7"},"keywords":["immutable","functional"],"license":"MIT","homepage":"https://github.com/planttheidea/unchanged#readme","main":"lib/index.js","module":"es/index.js","name":"unchanged","repository":{"type":"git","url":"git+https://github.com/planttheidea/unchanged.git"},"scripts":{"benchmark":"npm run transpile:lib && NODE_ENV=production node ./benchmarks/index.js","build":"NODE_ENV=development webpack --progress --colors --config=webpack/webpack.config.js","build:minified":"NODE_ENV=production webpack --progress --colors --config=webpack/webpack.config.minified.js","clean":"npm run clean:lib && npm run clean:es && npm run clean:dist","clean:dist":"rimraf dist","clean:lib":"rimraf lib","clean:es":"rimraf es","dev":"NODE_ENV=development webpack-dev-server --colors --progress --config=webpack/webpack.config.dev.js","dist":"npm run clean:dist && npm run build && npm run build:minified","lint":"NODE_ENV=test eslint src","lint:fix":"NODE_ENV=test eslint src --fix","prepublish":"if in-publish; then npm run prepublish:compile; fi","prepublish:compile":"npm run lint && npm run test:coverage && npm run transpile:lib && npm run transpile:es && npm run dist","start":"npm run dev","test":"NODE_PATH=. NODE_ENV=production BABEL_ENV=test ava","test:coverage":"nyc npm test","test:watch":"npm test -- --watch","transpile:lib":"npm run clean:lib && BABEL_ENV=lib babel src --out-dir lib","transpile:es":"npm run clean:es && BABEL_ENV=es babel src --out-dir es"},"version":"1.0.2","gitHead":"26c9a7e8ceb19d48cc25850f909610c7f846ff23","_id":"unchanged@1.0.2","_npmVersion":"5.6.0","_nodeVersion":"9.3.0","_npmUser":{"name":"planttheidea","email":"tony.quetano@planttheidea.com"},"dist":{"integrity":"sha512-2Ejkrex5Y2qU4A1ngAsPy2OW4WFDvirDqpYWzFtmRXY++JN967GaHzNHSpjXYY/L6dY7QQ6mrV60cIWLjA7WfQ==","shasum":"50814ebed41844a74a14efee7970920f21adf052","tarball":"https://registry.npmjs.org/unchanged/-/unchanged-1.0.2.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBE4RqPHqS3ntxZClfzdSUxs8WTgBgkvHP2/HBIqRNbXAiBaYE/hfIsv5gDJ7utFleVUcNzE3VA+rkaxdaY8japnYg=="}]},"maintainers":[{"name":"planttheidea","email":"tony.quetano@planttheidea.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/unchanged-1.0.2.tgz_1513981598810_0.7717471995856613"},"directories":{}},"1.0.3":{"author":{"name":"tony_quetano@planttheidea.com"},"ava":{"babel":"inherit","failFast":true,"files":["test/*.js"],"require":["babel-register"],"source":["src/*.js"],"verbose":true},"browserslist":["defaults","Explorer >= 9","Safari >= 6","Opera >= 15","iOS >= 8","Android >= 4"],"bugs":{"url":"https://github.com/planttheidea/unchanged/issues"},"dependencies":{"pathington":"^1.1.4"},"description":"A tiny, fast, unopinionated handler for updating JS objects and arrays immutably","devDependencies":{"ava":"^0.24.0","babel-cli":"^6.26.0","babel-eslint":"^8.1.0","babel-loader":"^7.1.2","babel-preset-env":"^1.6.1","babel-preset-stage-2":"^6.24.1","babel-register":"^6.26.0","benchmark":"^2.1.4","cli-table":"^0.3.1","eslint":"^4.14.0","eslint-config-rapid7":"^2.11.1","eslint-friendly-formatter":"^3.0.0","eslint-loader":"^1.9.0","html-webpack-plugin":"^2.30.1","in-publish":"^2.0.0","lodash":"^4.17.4","nyc":"^11.4.1","optimize-js-plugin":"^0.0.4","performance-now":"^2.1.0","ramda":"^0.25.0","react":"^16.2.0","react-dom":"^16.2.0","sinon":"^4.1.3","webpack":"^3.10.0","webpack-dev-server":"^2.9.7"},"keywords":["immutable","functional"],"license":"MIT","homepage":"https://github.com/planttheidea/unchanged#readme","main":"lib/index.js","module":"es/index.js","name":"unchanged","repository":{"type":"git","url":"git+https://github.com/planttheidea/unchanged.git"},"scripts":{"benchmark":"npm run transpile:lib && NODE_ENV=production node ./benchmarks/index.js","build":"NODE_ENV=development webpack --progress --colors --config=webpack/webpack.config.js","build:minified":"NODE_ENV=production webpack --progress --colors --config=webpack/webpack.config.minified.js","clean":"npm run clean:lib && npm run clean:es && npm run clean:dist","clean:dist":"rimraf dist","clean:lib":"rimraf lib","clean:es":"rimraf es","dev":"NODE_ENV=development webpack-dev-server --colors --progress --config=webpack/webpack.config.dev.js","dist":"npm run clean:dist && npm run build && npm run build:minified","lint":"NODE_ENV=test eslint src","lint:fix":"NODE_ENV=test eslint src --fix","prepublish":"if in-publish; then npm run prepublish:compile; fi","prepublish:compile":"npm run lint && npm run test:coverage && npm run transpile:lib && npm run transpile:es && npm run dist","start":"npm run dev","test":"NODE_PATH=. NODE_ENV=production BABEL_ENV=test ava","test:coverage":"nyc npm test","test:watch":"npm test -- --watch","transpile:lib":"npm run clean:lib && BABEL_ENV=lib babel src --out-dir lib","transpile:es":"npm run clean:es && BABEL_ENV=es babel src --out-dir es"},"version":"1.0.3","gitHead":"220eb437e6511a693756a38ab316ab8fa0af1d52","_id":"unchanged@1.0.3","_npmVersion":"5.6.0","_nodeVersion":"9.3.0","_npmUser":{"name":"planttheidea","email":"tony.quetano@planttheidea.com"},"dist":{"integrity":"sha512-jPuPkHVN90+1BSb3e7lsTp3MTiHd/YNyefjzuFSCQ68CjOURE1fMezGaalihaFUDOErlsIkrgTOR/ImderaciA==","shasum":"5f2b3b132c3bd336d3cc6c72dbb0be31575a258c","tarball":"https://registry.npmjs.org/unchanged/-/unchanged-1.0.3.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHgIdYYpvZSgGrKdg1nfbrxtJK3B+W3fNLTI+aTZDnOoAiEA6YaTQvn2ehhC55SOvvKYFJ3QcbrB9GsUcl0lc4a9MQo="}]},"maintainers":[{"name":"planttheidea","email":"tony.quetano@planttheidea.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/unchanged-1.0.3.tgz_1514149443647_0.1539618365932256"},"directories":{}},"1.0.4":{"author":{"name":"tony_quetano@planttheidea.com"},"ava":{"babel":"inherit","failFast":true,"files":["test/*.js"],"require":["babel-register"],"source":["src/*.js"],"verbose":true},"browserslist":["defaults","Explorer >= 9","Safari >= 6","Opera >= 15","iOS >= 8","Android >= 4"],"bugs":{"url":"https://github.com/planttheidea/unchanged/issues"},"dependencies":{"pathington":"^1.1.4"},"description":"A tiny, fast, unopinionated handler for updating JS objects and arrays immutably","devDependencies":{"ava":"^0.24.0","babel-cli":"^6.26.0","babel-eslint":"^8.1.1","babel-loader":"^7.1.2","babel-preset-env":"^1.6.1","babel-preset-stage-2":"^6.24.1","babel-register":"^6.26.0","benchmark":"^2.1.4","cli-table":"^0.3.1","eslint":"^4.14.0","eslint-config-rapid7":"^2.11.1","eslint-friendly-formatter":"^3.0.0","eslint-loader":"^1.9.0","html-webpack-plugin":"^2.30.1","in-publish":"^2.0.0","lodash":"^4.17.4","nyc":"^11.4.1","optimize-js-plugin":"^0.0.4","performance-now":"^2.1.0","ramda":"^0.25.0","react":"^16.2.0","react-dom":"^16.2.0","sinon":"^4.1.3","webpack":"^3.10.0","webpack-dev-server":"^2.9.7"},"keywords":["immutable","functional"],"license":"MIT","homepage":"https://github.com/planttheidea/unchanged#readme","main":"lib/index.js","module":"es/index.js","name":"unchanged","repository":{"type":"git","url":"git+https://github.com/planttheidea/unchanged.git"},"scripts":{"benchmark":"npm run transpile:lib && NODE_ENV=production node ./benchmarks/index.js","build":"NODE_ENV=development webpack --progress --colors --config=webpack/webpack.config.js","build:minified":"NODE_ENV=production webpack --progress --colors --config=webpack/webpack.config.minified.js","clean":"npm run clean:lib && npm run clean:es && npm run clean:dist","clean:dist":"rimraf dist","clean:lib":"rimraf lib","clean:es":"rimraf es","dev":"NODE_ENV=development webpack-dev-server --colors --progress --config=webpack/webpack.config.dev.js","dist":"npm run clean:dist && npm run build && npm run build:minified","lint":"NODE_ENV=test eslint src","lint:fix":"NODE_ENV=test eslint src --fix","prepublish":"if in-publish; then npm run prepublish:compile; fi","prepublish:compile":"npm run lint && npm run test:coverage && npm run transpile:lib && npm run transpile:es && npm run dist","start":"npm run dev","test":"NODE_PATH=. NODE_ENV=production BABEL_ENV=test ava","test:coverage":"nyc npm test","test:watch":"npm test -- --watch","transpile:lib":"npm run clean:lib && BABEL_ENV=lib babel src --out-dir lib","transpile:es":"npm run clean:es && BABEL_ENV=es babel src --out-dir es"},"version":"1.0.4","gitHead":"f40db0605641e71463c7f058e75a884a4e3b159c","_id":"unchanged@1.0.4","_npmVersion":"5.6.0","_nodeVersion":"9.3.0","_npmUser":{"name":"planttheidea","email":"tony.quetano@planttheidea.com"},"dist":{"integrity":"sha512-fSuR4sTwuHEyFbacSZi54kwNm6ra2PRET6Zz5wO6KFtV/+kPLN87BoWWUkfUtA6RmV1VHWG2+SqbrTNNfZ3JNg==","shasum":"87516e8c67b0811c97e1761b583760dc04c4ecde","tarball":"https://registry.npmjs.org/unchanged/-/unchanged-1.0.4.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGFhvEoGRTAC0a8nBofrdTiRImD9pCqRXrbeViSrZ5DzAiEA00QH6jCQ0vSYemdDcTDcOZg2WLC00D3VzZpEQExvG+U="}]},"maintainers":[{"name":"planttheidea","email":"tony.quetano@planttheidea.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/unchanged-1.0.4.tgz_1514191740003_0.904412999516353"},"directories":{}},"1.0.5":{"author":{"name":"tony_quetano@planttheidea.com"},"ava":{"babel":"inherit","failFast":true,"files":["test/*.js"],"require":["babel-register"],"source":["src/*.js"],"verbose":true},"browserslist":["defaults","Explorer >= 9","Safari >= 6","Opera >= 15","iOS >= 8","Android >= 4"],"bugs":{"url":"https://github.com/planttheidea/unchanged/issues"},"dependencies":{"pathington":"^1.1.4"},"description":"A tiny, fast, unopinionated handler for updating JS objects and arrays immutably","devDependencies":{"ava":"^0.25.0","babel-cli":"^6.26.0","babel-eslint":"^8.2.1","babel-loader":"^7.1.2","babel-preset-env":"^1.6.1","babel-preset-stage-2":"^6.24.1","babel-register":"^6.26.0","benchmark":"^2.1.4","cli-table":"^0.3.1","eslint":"^4.16.0","eslint-config-rapid7":"^2.11.1","eslint-friendly-formatter":"^3.0.0","eslint-loader":"^1.9.0","html-webpack-plugin":"^2.30.1","in-publish":"^2.0.0","lodash":"^4.17.4","nyc":"^11.4.1","optimize-js-plugin":"^0.0.4","performance-now":"^2.1.0","ramda":"^0.25.0","react":"^16.2.0","react-dom":"^16.2.0","sinon":"^4.2.2","webpack":"^3.10.0","webpack-dev-server":"^2.11.1"},"keywords":["immutable","functional"],"license":"MIT","homepage":"https://github.com/planttheidea/unchanged#readme","main":"lib/index.js","module":"es/index.js","name":"unchanged","repository":{"type":"git","url":"git+https://github.com/planttheidea/unchanged.git"},"scripts":{"benchmark":"npm run transpile:lib && NODE_ENV=production node ./benchmarks/index.js","build":"NODE_ENV=development webpack --progress --colors --config=webpack/webpack.config.js","build:minified":"NODE_ENV=production webpack --progress --colors --config=webpack/webpack.config.minified.js","clean":"npm run clean:lib && npm run clean:es && npm run clean:dist","clean:dist":"rimraf dist","clean:lib":"rimraf lib","clean:es":"rimraf es","dev":"NODE_ENV=development webpack-dev-server --colors --progress --config=webpack/webpack.config.dev.js","dist":"npm run clean:dist && npm run build && npm run build:minified","lint":"NODE_ENV=test eslint src","lint:fix":"NODE_ENV=test eslint src --fix","prepublish":"if in-publish; then npm run prepublish:compile; fi","prepublish:compile":"npm run lint && npm run test:coverage && npm run transpile:lib && npm run transpile:es && npm run dist","start":"npm run dev","test":"NODE_PATH=. NODE_ENV=production BABEL_ENV=test ava","test:coverage":"nyc npm test","test:watch":"npm test -- --watch","transpile:lib":"npm run clean:lib && BABEL_ENV=lib babel src --out-dir lib","transpile:es":"npm run clean:es && BABEL_ENV=es babel src --out-dir es"},"version":"1.0.5","gitHead":"e34a418343998b8b36cd68016f68986c27bf4833","_id":"unchanged@1.0.5","_npmVersion":"5.6.0","_nodeVersion":"9.4.0","_npmUser":{"name":"planttheidea","email":"tony.quetano@planttheidea.com"},"dist":{"integrity":"sha512-JLLGmuH0aNR56f8UJS5dgjxaOT1t2GESW4S4v+aN7Za0sa5XBQeuK0xWCrKpLjuQzhUjdQ8o1T77L+JbNgcEdw==","shasum":"f28f654e7c9112a96be2003d21e6c0c8fd1ffdc6","tarball":"https://registry.npmjs.org/unchanged/-/unchanged-1.0.5.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDgpDp5TFWXmODz2MrTgWgJtADV3QtsIL/htiQc7Bh47AIgY89Mp8qyaZYp7T4Qhk8ebffnJLYZVHGVhVDekRtvxeA="}]},"maintainers":[{"name":"planttheidea","email":"tony.quetano@planttheidea.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/unchanged-1.0.5.tgz_1517568728392_0.9867330733686686"},"directories":{}},"1.0.6":{"author":{"name":"tony_quetano@planttheidea.com"},"ava":{"babel":"inherit","failFast":true,"files":["test/*.js"],"require":["babel-register"],"source":["src/*.js"],"verbose":true},"browserslist":["defaults","Explorer >= 9","Safari >= 6","Opera >= 15","iOS >= 8","Android >= 4"],"bugs":{"url":"https://github.com/planttheidea/unchanged/issues"},"dependencies":{"pathington":"^1.1.4"},"description":"A tiny, fast, unopinionated handler for updating JS objects and arrays immutably","devDependencies":{"ava":"^0.25.0","babel-cli":"^6.26.0","babel-eslint":"^8.2.1","babel-loader":"^7.1.2","babel-preset-env":"^1.6.1","babel-preset-stage-2":"^6.24.1","babel-register":"^6.26.0","benchmark":"^2.1.4","cli-table":"^0.3.1","eslint":"^4.17.0","eslint-config-rapid7":"^2.11.1","eslint-friendly-formatter":"^3.0.0","eslint-loader":"^1.9.0","html-webpack-plugin":"^2.30.1","in-publish":"^2.0.0","lodash":"^4.17.5","nyc":"^11.4.1","optimize-js-plugin":"^0.0.4","performance-now":"^2.1.0","ramda":"^0.25.0","react":"^16.2.0","react-dom":"^16.2.0","sinon":"^4.3.0","webpack":"^3.11.0","webpack-dev-server":"^2.11.1"},"keywords":["immutable","functional"],"license":"MIT","homepage":"https://github.com/planttheidea/unchanged#readme","main":"lib/index.js","module":"es/index.js","name":"unchanged","repository":{"type":"git","url":"git+https://github.com/planttheidea/unchanged.git"},"scripts":{"benchmark":"npm run transpile:lib && NODE_ENV=production node ./benchmarks/index.js","build":"NODE_ENV=development webpack --progress --colors --config=webpack/webpack.config.js","build:minified":"NODE_ENV=production webpack --progress --colors --config=webpack/webpack.config.minified.js","clean":"npm run clean:lib && npm run clean:es && npm run clean:dist","clean:dist":"rimraf dist","clean:lib":"rimraf lib","clean:es":"rimraf es","dev":"NODE_ENV=development webpack-dev-server --colors --progress --config=webpack/webpack.config.dev.js","dist":"npm run clean:dist && npm run build && npm run build:minified","lint":"NODE_ENV=test eslint src","lint:fix":"NODE_ENV=test eslint src --fix","prepublish":"if in-publish; then npm run prepublish:compile; fi","prepublish:compile":"npm run lint && npm run test:coverage && npm run transpile:lib && npm run transpile:es && npm run dist","start":"npm run dev","test":"NODE_PATH=. NODE_ENV=production BABEL_ENV=test ava","test:coverage":"nyc npm test","test:watch":"npm test -- --watch","transpile:lib":"npm run clean:lib && BABEL_ENV=lib babel src --out-dir lib","transpile:es":"npm run clean:es && BABEL_ENV=es babel src --out-dir es"},"version":"1.0.6","gitHead":"91fb5d72a6bf06a821688ec9a296ed9de4073373","_id":"unchanged@1.0.6","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"planttheidea","email":"tony.quetano@planttheidea.com"},"dist":{"integrity":"sha512-ck6kBIBlVzvWuMtFI7wyvoMBL3Y+MbA+U4Z+3oAxvKS/XoL69sD9Z+tsLib9i5ve0mZnuvEBIxTp5Zw3fbi8jQ==","shasum":"23f88006d5a06234173de5131aa9798dd3ae02f7","tarball":"https://registry.npmjs.org/unchanged/-/unchanged-1.0.6.tgz","fileCount":21,"unpackedSize":367712,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAZg9XX5s8LgajPr58hxXzkZv9hvS5Ty1zSsTO6h6O78AiA/Oz1tu4no5pwXb2+p7TBrXnPZRH8mOsTlZjSWO1KwDw=="}]},"maintainers":[{"name":"planttheidea","email":"tony.quetano@planttheidea.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/unchanged_1.0.6_1518354163055_0.22584708243010398"},"_hasShrinkwrap":false},"1.0.7":{"author":{"name":"tony_quetano@planttheidea.com"},"ava":{"babel":"inherit","failFast":true,"files":["test/*.js"],"require":["babel-register"],"source":["src/*.js"],"verbose":true},"browserslist":["defaults","Explorer >= 9","Safari >= 6","Opera >= 15","iOS >= 8","Android >= 4"],"bugs":{"url":"https://github.com/planttheidea/unchanged/issues"},"dependencies":{"pathington":"^1.1.4"},"description":"A tiny, fast, unopinionated handler for updating JS objects and arrays immutably","devDependencies":{"ava":"^0.25.0","babel-cli":"^6.26.0","babel-eslint":"^8.2.2","babel-loader":"^7.1.4","babel-preset-env":"^1.6.1","babel-preset-stage-2":"^6.24.1","babel-register":"^6.26.0","benchmark":"^2.1.4","cli-table":"^0.3.1","eslint":"^4.18.2","eslint-config-rapid7":"^2.11.1","eslint-friendly-formatter":"^3.0.0","eslint-loader":"^2.0.0","html-webpack-plugin":"^2.30.1","in-publish":"^2.0.0","lodash":"^4.17.5","nyc":"^11.4.1","optimize-js-plugin":"^0.0.4","performance-now":"^2.1.0","ramda":"^0.25.0","react":"^16.2.0","react-dom":"^16.2.0","sinon":"^4.4.2","webpack":"^3.11.0","webpack-dev-server":"^2.11.1"},"keywords":["immutable","functional"],"license":"MIT","homepage":"https://github.com/planttheidea/unchanged#readme","main":"lib/index.js","module":"es/index.js","name":"unchanged","repository":{"type":"git","url":"git+https://github.com/planttheidea/unchanged.git"},"scripts":{"benchmark":"npm run transpile:lib && NODE_ENV=production node ./benchmarks/index.js","build":"NODE_ENV=development webpack --progress --colors --config=webpack/webpack.config.js","build:minified":"NODE_ENV=production webpack --progress --colors --config=webpack/webpack.config.minified.js","clean":"npm run clean:lib && npm run clean:es && npm run clean:dist","clean:dist":"rimraf dist","clean:lib":"rimraf lib","clean:es":"rimraf es","dev":"NODE_ENV=development webpack-dev-server --colors --progress --config=webpack/webpack.config.dev.js","dist":"npm run clean:dist && npm run build && npm run build:minified","lint":"NODE_ENV=test eslint src","lint:fix":"NODE_ENV=test eslint src --fix","prepublish":"if in-publish; then npm run prepublish:compile; fi","prepublish:compile":"npm run lint && npm run test:coverage && npm run transpile:lib && npm run transpile:es && npm run dist","start":"npm run dev","test":"NODE_PATH=. NODE_ENV=production BABEL_ENV=test ava","test:coverage":"nyc npm test","test:watch":"npm test -- --watch","transpile:lib":"npm run clean:lib && BABEL_ENV=lib babel src --out-dir lib","transpile:es":"npm run clean:es && BABEL_ENV=es babel src --out-dir es"},"version":"1.0.7","gitHead":"3356233ad8b604d4c18c57fa09addac14b649bb8","_id":"unchanged@1.0.7","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"planttheidea","email":"tony.quetano@planttheidea.com"},"dist":{"integrity":"sha512-/Dm88iLAglgEp2SFc3ohezG5HRYVydSBZCUo45jeNoQd1Y4bTJ8xmZVkGX60qqaF07KIjYR06+0Dj41Im76oOg==","shasum":"1a407ae02dbb398885a7a9ae7e0ad772093703a4","tarball":"https://registry.npmjs.org/unchanged/-/unchanged-1.0.7.tgz","fileCount":21,"unpackedSize":368952,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCx2khLI8UWCBXB14eEr7U1GmHlxjjzuX+W7/xGs3pkWAIgb8X3/3n6TzG+JZQJ0nnUP5R18Im5At/UFFBdb6FRT4g="}]},"maintainers":[{"name":"planttheidea","email":"tony.quetano@planttheidea.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/unchanged_1.0.7_1520338453146_0.4551818425173595"},"_hasShrinkwrap":false},"1.1.0":{"author":{"name":"tony_quetano@planttheidea.com"},"ava":{"babel":"inherit","failFast":true,"files":["test/*.js"],"require":["babel-register"],"source":["src/*.js"],"verbose":true},"browserslist":["defaults","Explorer >= 9","Safari >= 6","Opera >= 15","iOS >= 8","Android >= 4"],"bugs":{"url":"https://github.com/planttheidea/unchanged/issues"},"dependencies":{"curriable":"^1.0.0","pathington":"^1.1.5"},"description":"A tiny, fast, unopinionated handler for updating JS objects and arrays immutably","devDependencies":{"ava":"^0.25.0","babel-cli":"^6.26.0","babel-eslint":"^8.2.2","babel-loader":"^7.1.4","babel-preset-env":"^1.6.1","babel-preset-stage-2":"^6.24.1","babel-register":"^6.26.0","benchmark":"^2.1.4","cli-table":"^0.3.1","eslint":"^4.19.0","eslint-config-rapid7":"^2.11.1","eslint-friendly-formatter":"^3.0.0","eslint-loader":"^2.0.0","html-webpack-plugin":"^3.0.6","in-publish":"^2.0.0","lodash":"^4.17.5","nyc":"^11.6.0","optimize-js-plugin":"^0.0.4","performance-now":"^2.1.0","ramda":"^0.25.0","react":"^16.2.0","react-dom":"^16.2.0","rollup":"^0.57.0","rollup-plugin-babel":"^3.0.3","rollup-plugin-node-resolve":"^3.2.0","rollup-plugin-uglify":"^3.0.0","sinon":"^4.4.6","webpack":"^4.1.1","webpack-cli":"^2.0.12","webpack-dev-server":"^3.1.1"},"keywords":["immutable","functional"],"license":"MIT","homepage":"https://github.com/planttheidea/unchanged#readme","main":"lib/index.js","module":"es/index.js","name":"unchanged","repository":{"type":"git","url":"git+https://github.com/planttheidea/unchanged.git"},"scripts":{"benchmark":"npm run transpile:lib && NODE_ENV=production node ./benchmarks/index.js","build":"NODE_ENV=production rollup -c","clean":"npm run clean:lib && npm run clean:es && npm run clean:dist","clean:dist":"rimraf dist","clean:lib":"rimraf lib","clean:es":"rimraf es","dev":"NODE_ENV=development webpack-dev-server --colors --progress --config=webpack/webpack.config.dev.js","dist":"npm run clean:dist && npm run build","lint":"NODE_ENV=test eslint src","lint:fix":"NODE_ENV=test eslint src --fix","prepublish":"if in-publish; then npm run prepublish:compile; fi","prepublish:compile":"npm run lint && npm run test:coverage && npm run transpile:lib && npm run transpile:es && npm run dist","start":"npm run dev","test":"NODE_PATH=. NODE_ENV=production BABEL_ENV=test ava","test:coverage":"nyc npm test","test:watch":"npm test -- --watch","transpile:lib":"npm run clean:lib && BABEL_ENV=lib babel src --out-dir lib","transpile:es":"npm run clean:es && BABEL_ENV=es babel src --out-dir es"},"version":"1.1.0","gitHead":"e9c66e9cd9eaa565e74089a231ff549f16991012","_id":"unchanged@1.1.0","_npmVersion":"5.7.1","_nodeVersion":"8.9.4","_npmUser":{"name":"planttheidea","email":"tony.quetano@planttheidea.com"},"dist":{"integrity":"sha512-OMvOhz0zIwp372Wa5bXmXLguxR9PIr0cLfAzuFkM+w3X+1fhorn/806/QjKOl/ECPOQgOP5Elh5Q+ywjWrSAcw==","shasum":"8922e7af92cb82e4f5f013cac68e4efdec63fc2e","tarball":"https://registry.npmjs.org/unchanged/-/unchanged-1.1.0.tgz","fileCount":19,"unpackedSize":117875,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIExF72X3WBA0xeKdBXlDyj8fgxo01PT8b/Jnv87mFkmZAiEAmfpKL5tc/Xre9nzZ4GPmwB06t+zlbXNv09C5hPq00RA="}]},"maintainers":[{"name":"planttheidea","email":"tony.quetano@planttheidea.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/unchanged_1.1.0_1521260149545_0.11666340271165065"},"_hasShrinkwrap":false},"1.2.0":{"author":{"name":"tony_quetano@planttheidea.com"},"ava":{"babel":"inherit","failFast":true,"files":["test/*.js"],"require":["babel-register"],"source":["src/*.js"],"verbose":true},"browserslist":["defaults","Explorer >= 9","Safari >= 6","Opera >= 15","iOS >= 8","Android >= 4"],"bugs":{"url":"https://github.com/planttheidea/unchanged/issues"},"dependencies":{"curriable":"^1.0.0","pathington":"^1.1.5"},"description":"A tiny, fast, unopinionated handler for updating JS objects and arrays immutably","devDependencies":{"ava":"^0.25.0","babel-cli":"^6.26.0","babel-eslint":"^8.2.2","babel-loader":"^7.1.4","babel-preset-env":"^1.6.1","babel-preset-stage-2":"^6.24.1","babel-register":"^6.26.0","benchmark":"^2.1.4","cli-table":"^0.3.1","eslint":"^4.19.0","eslint-config-rapid7":"^2.11.1","eslint-friendly-formatter":"^3.0.0","eslint-loader":"^2.0.0","html-webpack-plugin":"^3.0.7","in-publish":"^2.0.0","lodash":"^4.17.5","nyc":"^11.6.0","optimize-js-plugin":"^0.0.4","performance-now":"^2.1.0","ramda":"^0.25.0","react":"^16.2.0","react-dom":"^16.2.0","rollup":"^0.57.1","rollup-plugin-babel":"^3.0.3","rollup-plugin-node-resolve":"^3.3.0","rollup-plugin-uglify":"^3.0.0","sinon":"^4.4.6","webpack":"^4.1.1","webpack-cli":"^2.0.12","webpack-dev-server":"^3.1.1"},"keywords":["immutable","functional"],"license":"MIT","homepage":"https://github.com/planttheidea/unchanged#readme","main":"lib/index.js","module":"es/index.js","name":"unchanged","repository":{"type":"git","url":"git+https://github.com/planttheidea/unchanged.git"},"scripts":{"benchmark":"npm run transpile:lib && NODE_ENV=production node ./benchmarks/index.js","build":"NODE_ENV=production rollup -c","clean":"npm run clean:lib && npm run clean:es && npm run clean:dist","clean:dist":"rimraf dist","clean:lib":"rimraf lib","clean:es":"rimraf es","dev":"NODE_ENV=development webpack-dev-server --colors --progress --config=webpack/webpack.config.dev.js","dist":"npm run clean:dist && npm run build","lint":"NODE_ENV=test eslint src","lint:fix":"NODE_ENV=test eslint src --fix","prepublish":"if in-publish; then npm run prepublish:compile; fi","prepublish:compile":"npm run lint && npm run test:coverage && npm run transpile:lib && npm run transpile:es && npm run dist","start":"npm run dev","test":"NODE_PATH=. NODE_ENV=production BABEL_ENV=test ava","test:coverage":"nyc npm test","test:watch":"npm test -- --watch","transpile:lib":"npm run clean:lib && BABEL_ENV=lib babel src --out-dir lib","transpile:es":"npm run clean:es && BABEL_ENV=es babel src --out-dir es"},"version":"1.2.0","gitHead":"21f8529e417db49ec79db016aa6e90d305e17fbe","_id":"unchanged@1.2.0","_npmVersion":"5.7.1","_nodeVersion":"8.10.0","_npmUser":{"name":"planttheidea","email":"tony.quetano@planttheidea.com"},"dist":{"integrity":"sha512-PQFCd41Djr8ZZcPl5dTWJpL/A3x+dPJ9rb78HVRtJb2P3Xuj4XBNG1tWTTupVR3v9qN4cB0ZOpYSpqLKeCyWmA==","shasum":"cc76350e93d3f6d920de3da7bf4d3565fcb8de46","tarball":"https://registry.npmjs.org/unchanged/-/unchanged-1.2.0.tgz","fileCount":19,"unpackedSize":125925,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDhailAMlLF9h/bRD/6HpvsdERtGyHvLS7wCF13uZBnIQIhALtqs3a/uBIlaFl1PNXBm34NiHLoaVBuQRrUULTWydXk"}]},"maintainers":[{"name":"planttheidea","email":"tony.quetano@planttheidea.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/unchanged_1.2.0_1521506768222_0.20166816896517248"},"_hasShrinkwrap":false},"1.2.1":{"author":{"name":"tony_quetano@planttheidea.com"},"ava":{"babel":"inherit","failFast":true,"files":["test/*.js"],"require":["babel-register"],"source":["src/*.js"],"verbose":true},"browserslist":["defaults","Explorer >= 9","Safari >= 6","Opera >= 15","iOS >= 8","Android >= 4"],"bugs":{"url":"https://github.com/planttheidea/unchanged/issues"},"dependencies":{"curriable":"^1.0.0","pathington":"^1.1.5"},"description":"A tiny, fast, unopinionated handler for updating JS objects and arrays immutably","devDependencies":{"ava":"^0.25.0","babel-cli":"^6.26.0","babel-eslint":"^8.2.2","babel-loader":"^7.1.4","babel-preset-env":"^1.6.1","babel-preset-stage-2":"^6.24.1","babel-register":"^6.26.0","benchmark":"^2.1.4","cli-table":"^0.3.1","eslint":"^4.19.0","eslint-config-rapid7":"^2.11.1","eslint-friendly-formatter":"^3.0.0","eslint-loader":"^2.0.0","html-webpack-plugin":"^3.0.7","in-publish":"^2.0.0","lodash":"^4.17.5","nyc":"^11.6.0","optimize-js-plugin":"^0.0.4","performance-now":"^2.1.0","ramda":"^0.25.0","react":"^16.2.0","react-dom":"^16.2.0","rollup":"^0.57.1","rollup-plugin-babel":"^3.0.3","rollup-plugin-node-resolve":"^3.3.0","rollup-plugin-uglify":"^3.0.0","sinon":"^4.4.6","webpack":"^4.2.0","webpack-cli":"^2.0.12","webpack-dev-server":"^3.1.1"},"keywords":["immutable","functional"],"license":"MIT","homepage":"https://github.com/planttheidea/unchanged#readme","main":"lib/index.js","module":"es/index.js","name":"unchanged","repository":{"type":"git","url":"git+https://github.com/planttheidea/unchanged.git"},"scripts":{"benchmark":"npm run transpile:lib && NODE_ENV=production node ./benchmarks/index.js","build":"NODE_ENV=production rollup -c","clean":"npm run clean:lib && npm run clean:es && npm run clean:dist","clean:dist":"rimraf dist","clean:lib":"rimraf lib","clean:es":"rimraf es","dev":"NODE_ENV=development webpack-dev-server --colors --progress --config=webpack/webpack.config.dev.js","dist":"npm run clean:dist && npm run build","lint":"NODE_ENV=test eslint src","lint:fix":"NODE_ENV=test eslint src --fix","prepublish":"if in-publish; then npm run prepublish:compile; fi","prepublish:compile":"npm run lint && npm run test:coverage && npm run transpile:lib && npm run transpile:es && npm run dist","start":"npm run dev","test":"NODE_PATH=. NODE_ENV=production BABEL_ENV=test ava","test:coverage":"nyc npm test","test:watch":"npm test -- --watch","transpile:lib":"npm run clean:lib && BABEL_ENV=lib babel src --out-dir lib","transpile:es":"npm run clean:es && BABEL_ENV=es babel src --out-dir es"},"version":"1.2.1","gitHead":"169ff8bc0cbaef1f974690ded51c78f63b214c83","_id":"unchanged@1.2.1","_npmVersion":"5.7.1","_nodeVersion":"8.10.0","_npmUser":{"name":"planttheidea","email":"tony.quetano@planttheidea.com"},"dist":{"integrity":"sha512-aGjJc0EtUqcHnEhiOwmbToqdrpaVC8zCYSdANhHZQ4txlIjGunzO7aIJiqrBFNKlW5LOPNSEl4cFHNf0/XQdqQ==","shasum":"3ed3ab092ebd1009e3b6393f677d28d42facc39a","tarball":"https://registry.npmjs.org/unchanged/-/unchanged-1.2.1.tgz","fileCount":19,"unpackedSize":125084,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAW6wK6K7AemZYJfV6mL79VKXuUsOP07G5aEQXsVlv/vAiBw4IXd5XQgJ9UXRia/u/ty5omj4RdwFDofLWQKU8Aa+Q=="}]},"maintainers":[{"name":"planttheidea","email":"tony.quetano@planttheidea.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/unchanged_1.2.1_1521635322916_0.24593267627334492"},"_hasShrinkwrap":false},"1.3.0":{"author":{"name":"tony_quetano@planttheidea.com"},"ava":{"babel":"inherit","failFast":true,"files":["test/*.js"],"require":["babel-register"],"source":["src/*.js"],"verbose":true},"browserslist":["defaults","Explorer >= 9","Safari >= 6","Opera >= 15","iOS >= 8","Android >= 4"],"bugs":{"url":"https://github.com/planttheidea/unchanged/issues"},"dependencies":{"curriable":"^1.0.0","pathington":"^1.1.5"},"description":"A tiny, fast, unopinionated handler for updating JS objects and arrays immutably","devDependencies":{"ava":"^0.25.0","babel-cli":"^6.26.0","babel-eslint":"^8.2.3","babel-loader":"^7.1.4","babel-preset-env":"^1.7.0","babel-preset-stage-2":"^6.24.1","babel-register":"^6.26.0","benchmark":"^2.1.4","cli-table":"^0.3.1","eslint":"^4.19.1","eslint-config-rapid7":"^2.11.1","eslint-friendly-formatter":"^4.0.1","eslint-loader":"^2.0.0","html-webpack-plugin":"^3.2.0","in-publish":"^2.0.0","lodash":"^4.17.10","nyc":"^11.8.0","optimize-js-plugin":"^0.0.4","performance-now":"^2.1.0","ramda":"^0.25.0","react":"^16.4.0","react-dom":"^16.4.0","rollup":"^0.59.3","rollup-plugin-babel":"^3.0.4","rollup-plugin-node-resolve":"^3.3.0","rollup-plugin-uglify":"^4.0.0","sinon":"^5.0.10","webpack":"^4.9.1","webpack-cli":"^2.1.4","webpack-dev-server":"^3.1.4"},"keywords":["immutable","functional"],"license":"MIT","homepage":"https://github.com/planttheidea/unchanged#readme","main":"lib/index.js","module":"es/index.js","name":"unchanged","repository":{"type":"git","url":"git+https://github.com/planttheidea/unchanged.git"},"scripts":{"benchmark":"npm run transpile:lib && NODE_ENV=production node ./benchmarks/index.js","build":"NODE_ENV=production rollup -c","clean":"npm run clean:lib && npm run clean:es && npm run clean:dist","clean:dist":"rimraf dist","clean:lib":"rimraf lib","clean:es":"rimraf es","dev":"NODE_ENV=development webpack-dev-server --colors --progress --config=webpack/webpack.config.dev.js","dist":"npm run clean:dist && npm run build","lint":"NODE_ENV=test eslint src","lint:fix":"NODE_ENV=test eslint src --fix","prepublish":"if in-publish; then npm run prepublish:compile; fi","prepublish:compile":"npm run lint && npm run test:coverage && npm run transpile:lib && npm run transpile:es && npm run dist","start":"npm run dev","test":"NODE_PATH=. NODE_ENV=production BABEL_ENV=test ava","test:coverage":"nyc npm test","test:watch":"npm test -- --watch","transpile:lib":"npm run clean:lib && BABEL_ENV=lib babel src --out-dir lib","transpile:es":"npm run clean:es && BABEL_ENV=es babel src --out-dir es"},"version":"1.3.0","gitHead":"b234b0c56f057d134ca0cd1dc04fde1bc44e1b82","_id":"unchanged@1.3.0","_npmVersion":"6.0.1","_nodeVersion":"8.11.1","_npmUser":{"name":"planttheidea","email":"tony.quetano@planttheidea.com"},"dist":{"integrity":"sha512-Mjd+/yChC12btxIljPoYXJTzqhU6lfgmnVsHxlfJ7sUvlcEw0FyijGGwcvE4uYS8K+vnc8BptTJQMNjArItuuQ==","shasum":"62e6828a9634ac5cdc75eee39e93bf70ef3cc726","tarball":"https://registry.npmjs.org/unchanged/-/unchanged-1.3.0.tgz","fileCount":19,"unpackedSize":137029,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbCcwaCRA9TVsSAnZWagAAr4UP/0unYM6xG3SsJEJT/UFJ\nPXQzRDxMg6NbmQptOu9CsN2h0xf22fvGQf1gG7YIbx2yYVNgnmeRiYj6gzgn\n9O0wJv9i1b11egRsxicHg4tCBKRTik33TyI3LZAMB0yKar4xk09+5lDm5/9k\nik/pzzwYkSeQJaIO13B4COy8iONYg/TPe3k3fx5SVHFONlSM4MGj6yTmEtXM\nzoRj4U3Ki4f5cgvr0Bz9ty9+OlaIe8ODZSkAifENYnVvhiQYbR5yRxI/ZzdS\n3Ggm6FfybXZUEqRJHVV1FI6hsf+Cc/Sk3cfmzD5jQ2+b8oTnywrZ6yeDCScj\nHeLcb/U0Egy5jPidDIQZ+Kn23M+CMUTz6WkDuFWreoie9bD6HUKHDVaUZ+7Q\njBlYxhRHt19xOZBHJ6OshJ+pGo819jiaY4eRG7SgGp5bTJ+mQEwNCGEXKr1I\nTJGeEvtw76qjuaL/KBfuQadU9mW+azGhhLgpNKeD1V2KFf99jots3ygs9SLq\n8afH9PKlQLoiuNB+PI1hGV2IVDnyrZiRZTNBJFBwYXPjZ14ei8eg5TV2Nt1A\n4m/d2zEI27xNbEqLgdX9oJ1wYuhyMOU2E9Yi8n/xKKX+ALLuccJVfFEuwNlP\nAi8Nd7vUBiJ7mfBNobUmzP/qhjBxeHBJs934K2dC2C6Yp97TDTdLqgRB+huK\n01oL\r\n=TLWN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDBsAFwOsuiOxtKVGR6n9DHAAQxaPKFqKxXbunbQfkTIgIhAOcTQRc+rB7y6721woN4vFpJZk9GiOB28nrQrnI6YCGR"}]},"maintainers":[{"name":"planttheidea","email":"tony.quetano@planttheidea.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/unchanged_1.3.0_1527368729232_0.07119177225079154"},"_hasShrinkwrap":false},"1.3.1":{"author":{"name":"tony_quetano@planttheidea.com"},"ava":{"babel":"inherit","failFast":true,"files":["test/*.js"],"require":["babel-register"],"source":["src/*.js"],"verbose":true},"browserslist":["defaults","Explorer >= 9","Safari >= 6","Opera >= 15","iOS >= 8","Android >= 4"],"bugs":{"url":"https://github.com/planttheidea/unchanged/issues"},"dependencies":{"curriable":"^1.0.0","pathington":"^1.1.5"},"description":"A tiny, fast, unopinionated handler for updating JS objects and arrays immutably","devDependencies":{"ava":"^0.25.0","babel-cli":"^6.26.0","babel-eslint":"^8.2.3","babel-loader":"^7.1.4","babel-preset-env":"^1.7.0","babel-preset-stage-2":"^6.24.1","babel-register":"^6.26.0","benchmark":"^2.1.4","cli-table":"^0.3.1","eslint":"^4.19.1","eslint-config-rapid7":"^2.11.1","eslint-friendly-formatter":"^4.0.1","eslint-loader":"^2.0.0","html-webpack-plugin":"^3.2.0","in-publish":"^2.0.0","lodash":"^4.17.10","nyc":"^11.8.0","optimize-js-plugin":"^0.0.4","performance-now":"^2.1.0","ramda":"^0.25.0","react":"^16.4.0","react-dom":"^16.4.0","rollup":"^0.59.3","rollup-plugin-babel":"^3.0.4","rollup-plugin-node-resolve":"^3.3.0","rollup-plugin-uglify":"^4.0.0","sinon":"^5.0.10","webpack":"^4.9.1","webpack-cli":"^2.1.4","webpack-dev-server":"^3.1.4"},"keywords":["immutable","functional"],"license":"MIT","homepage":"https://github.com/planttheidea/unchanged#readme","main":"lib/index.js","module":"es/index.js","name":"unchanged","repository":{"type":"git","url":"git+https://github.com/planttheidea/unchanged.git"},"scripts":{"benchmark":"npm run transpile:lib && NODE_ENV=production node ./benchmarks/index.js","build":"NODE_ENV=production rollup -c","clean":"npm run clean:lib && npm run clean:es && npm run clean:dist","clean:dist":"rimraf dist","clean:lib":"rimraf lib","clean:es":"rimraf es","dev":"NODE_ENV=development webpack-dev-server --colors --progress --config=webpack/webpack.config.dev.js","dist":"npm run clean:dist && npm run build","lint":"NODE_ENV=test eslint src","lint:fix":"NODE_ENV=test eslint src --fix","prepublish":"if in-publish; then npm run prepublish:compile; fi","prepublish:compile":"npm run lint && npm run test:coverage && npm run transpile:lib && npm run transpile:es && npm run dist","start":"npm run dev","test":"NODE_PATH=. NODE_ENV=production BABEL_ENV=test ava","test:coverage":"nyc npm test","test:watch":"npm test -- --watch","transpile:lib":"npm run clean:lib && BABEL_ENV=lib babel src --out-dir lib","transpile:es":"npm run clean:es && BABEL_ENV=es babel src --out-dir es"},"version":"1.3.1","gitHead":"1c2ce75a9889f89c2965b1cbf5b34c1113adf621","_id":"unchanged@1.3.1","_npmVersion":"6.0.1","_nodeVersion":"8.11.1","_npmUser":{"name":"planttheidea","email":"tony.quetano@planttheidea.com"},"dist":{"integrity":"sha512-jcbO/raXIQ/mBatiYxQof6Ld57msQVA+MxiLq5jvv6Qhz5JZls04gF3PLQqhYcxGklbemj38PHAOgEyp2HIgyg==","shasum":"413b3774c3200f2a673e48e99b38a20af493ce42","tarball":"https://registry.npmjs.org/unchanged/-/unchanged-1.3.1.tgz","fileCount":12,"unpackedSize":113591,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbCcysCRA9TVsSAnZWagAAffMQAIb7H++SI1VVdSFxFSe6\nCpfYn0apnvbSr5DDvBt6hIdmj31Dk8v/vQ3QzNWhtTcoBi+0jx8/weHNmBrg\nQCOkbMnJa8BUpl3ao64atBTJ9WwJJFCmu2MuXY5Ht0bB+bPYnguyGkaqpJY9\nFSzoGWp6oLnB/6rMTqo9KgFGJppbJGmb/MA96traYnn8SrIqSNk0TTE3CyTr\nqvWSM1s8KVKDKrut4gjGZh85toqKxyQkdOkUdM8QkwSY163qik+cQkX02ZvE\nbB3ZYB1uEbLym2vpNTUSTctiaQRPrEplfS4SvZdHG97g3fPiDuuQJ6fOmwjp\nyiYnhtf/L1jGdCiTTpWtzA2nP/iGXrZb3Xbl0eQCHgv1jzbWDjzgVbZHDUM9\ncC8ywOQ0KUkUR+xMwTGWOzrxN3e4qpp3vbRyb71R4D0R542ejE/BJ2zFIOiw\nWz/9aqKapzahdtmWKh03WjqOa06bFDZe5wTzq9kdrF+vfazJP3fa54REOsH0\n7j0CcRlfIhupSvJ919yWXj4B7XGQ5XkfpY1dljNrZXK2KPJbwyQobUVJtavV\nLbGnPUoDcj7hgI+WSv0KFrwiVX9vWBNMNiKwkyIXHuyzZghMzjPLMbsey3Rk\nYXPL18IZide7s776FOgfDMeiVnngl7iA5wCJpwH12+qeoAUwq5HqU8zxfheW\nntnV\r\n=pYwd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD/Hr4MrYDAghX9k2WoNLnlnTVUK1+3XfZbGvRsHbspAQIhALjTxwW/7RIm6mNJaLBrNOJUEZDhwxvtpEXcZlcqUy54"}]},"maintainers":[{"name":"planttheidea","email":"tony.quetano@planttheidea.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/unchanged_1.3.1_1527368875762_0.40464512467340774"},"_hasShrinkwrap":false},"1.3.2":{"author":{"name":"tony_quetano@planttheidea.com"},"ava":{"babel":"inherit","failFast":true,"files":["test/*.js"],"require":["babel-register"],"source":["src/*.js"],"verbose":true},"browserslist":["defaults","Explorer >= 9","Safari >= 6","Opera >= 15","iOS >= 8","Android >= 4"],"bugs":{"url":"https://github.com/planttheidea/unchanged/issues"},"dependencies":{"curriable":"^1.0.0","pathington":"^1.1.5"},"description":"A tiny, fast, unopinionated handler for updating JS objects and arrays immutably","devDependencies":{"ava":"^0.25.0","babel-cli":"^6.26.0","babel-eslint":"^8.2.5","babel-loader":"^7.1.5","babel-preset-env":"^1.7.0","babel-preset-stage-2":"^6.24.1","babel-register":"^6.26.0","benchmark":"^2.1.4","cli-table":"^0.3.1","eslint":"^5.0.1","eslint-config-rapid7":"^3.0.3","eslint-friendly-formatter":"^4.0.1","eslint-loader":"^2.0.0","html-webpack-plugin":"^3.2.0","in-publish":"^2.0.0","lodash":"^4.17.10","nyc":"^12.0.2","optimize-js-plugin":"^0.0.4","performance-now":"^2.1.0","ramda":"^0.25.0","react":"^16.4.1","react-dom":"^16.4.1","rollup":"^0.62.0","rollup-plugin-babel":"^3.0.7","rollup-plugin-node-resolve":"^3.3.0","rollup-plugin-uglify":"^4.0.0","sinon":"^6.1.3","webpack":"^4.15.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"keywords":["immutable","functional"],"license":"MIT","homepage":"https://github.com/planttheidea/unchanged#readme","main":"lib/index.js","module":"es/index.js","name":"unchanged","repository":{"type":"git","url":"git+https://github.com/planttheidea/unchanged.git"},"scripts":{"benchmark":"npm run transpile:lib && NODE_ENV=production node ./benchmarks/index.js","build":"NODE_ENV=production rollup -c","clean":"npm run clean:lib && npm run clean:es && npm run clean:dist","clean:dist":"rimraf dist","clean:lib":"rimraf lib","clean:es":"rimraf es","dev":"NODE_ENV=development webpack-dev-server --colors --progress --config=webpack/webpack.config.dev.js","dist":"npm run clean:dist && npm run build","lint":"NODE_ENV=test eslint src","lint:fix":"NODE_ENV=test eslint src --fix","prepublish":"if in-publish; then npm run prepublish:compile; fi","prepublish:compile":"npm run lint && npm run test:coverage && npm run transpile:lib && npm run transpile:es && npm run dist","start":"npm run dev","test":"NODE_PATH=. NODE_ENV=production BABEL_ENV=test ava","test:coverage":"nyc npm test","test:watch":"npm test -- --watch","transpile:lib":"npm run clean:lib && BABEL_ENV=lib babel src --out-dir lib","transpile:es":"npm run clean:es && BABEL_ENV=es babel src --out-dir es"},"version":"1.3.2","gitHead":"56a2645d6a861266fdd7751073c60270e7aabd21","_id":"unchanged@1.3.2","_npmVersion":"6.1.0","_nodeVersion":"8.11.3","_npmUser":{"name":"planttheidea","email":"tony.quetano@planttheidea.com"},"dist":{"integrity":"sha512-JLHiUtDfxlPVZ3eHWLulEW3MS01UCdd4T38TzjW6rFYi3V55NWRrut5e2wYDG2Xph+SLc58p4rK/OAewOq9S8w==","shasum":"52b5463fb10dc97695aea95a2c40cd8bbff9c99d","tarball":"https://registry.npmjs.org/unchanged/-/unchanged-1.3.2.tgz","fileCount":12,"unpackedSize":114656,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbQK8iCRA9TVsSAnZWagAAnpUP/AlGFtXDAoEBLJr9ZC8R\noDKbS5e3sY/6nTybWMWZ8aC9B2AY1fcRKr8WBqPQAKplnZuCdijxOgTQaS7P\nOK58sl5xqTMcZb3oRnSFUpqumtQRzFQXjsbN5NoR9HOGnBLpWChTIW5t164U\nNWJhl5m2vnLvQg2DltYhvVONgx+VYUPFU3rBDMtSdkUxahbRraYqn4CHbRGU\nns3G50F5LiPLcd7Qph5R2q2mqkx+k0x6UJmiWAshLXbbpXw1AfjWtMz6+qLn\n+tYQIVUZbWAAL2P9FY5M9M+B2kTvnjXRCeTdX1QbbOfOxfpoaSHWgpjSzTtV\ndqjwYPXu7OyyTIg9a6QC974Fabrxv8eFsctEXAhaCF09Y1Hve3+QI1FusqjY\n5D6EOdTgQWcH8I9pN1AgzXiD4zFeKVXifP9QKjYWxnb4N/uKDQ7Xj3EZ/BN1\nenvavG25JsymAgcITWNbvaRMB6pFO1/VID5LeG5aOeyiWA+Zm0CGT5XtTxXw\n06d1aht+ywvPheyuHnnFo8I++VaXtR9MTJtgVRkWPh6xgPE96OlXjUCeqqSe\n9xvbQO+w0nmdV2iwUoud1UvEPPRUa0rtbUr3CxgIpfXoFQhzgzd/V9Wf/6ZI\nOCYEyR1UaOUm/x1aiM1+xwP9FzKaogbb8mk8LbCJk1sKyNcLNhRrCM3Rj0nz\n98g8\r\n=AGT1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCaJFFwiWGvsJRGPKf/DmnBFqkbl9PvK2jg8nwVDQ3zDgIgXUdo8q/8zLw+Icae4+x7NKY2boLNI/pyG1tYbboWBec="}]},"maintainers":[{"name":"planttheidea","email":"tony.quetano@planttheidea.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/unchanged_1.3.2_1530965794853_0.4961875361404082"},"_hasShrinkwrap":false},"1.3.3":{"author":{"name":"tony_quetano@planttheidea.com"},"ava":{"babel":"inherit","failFast":true,"files":["test/*.js"],"require":["babel-register"],"source":["src/*.js"],"verbose":true},"browserslist":["defaults","Explorer >= 9","Safari >= 6","Opera >= 15","iOS >= 8","Android >= 4"],"bugs":{"url":"https://github.com/planttheidea/unchanged/issues"},"dependencies":{"curriable":"^1.0.0","pathington":"^1.1.5"},"description":"A tiny, fast, unopinionated handler for updating JS objects and arrays immutably","devDependencies":{"ava":"^0.25.0","babel-cli":"^6.26.0","babel-eslint":"^8.2.5","babel-loader":"^7.1.5","babel-preset-env":"^1.7.0","babel-preset-stage-2":"^6.24.1","babel-register":"^6.26.0","benchmark":"^2.1.4","cli-table":"^0.3.1","eslint":"^5.0.1","eslint-config-rapid7":"^3.0.3","eslint-friendly-formatter":"^4.0.1","eslint-loader":"^2.0.0","html-webpack-plugin":"^3.2.0","in-publish":"^2.0.0","lodash":"^4.17.10","nyc":"^12.0.2","optimize-js-plugin":"^0.0.4","performance-now":"^2.1.0","ramda":"^0.25.0","react":"^16.4.1","react-dom":"^16.4.1","rollup":"^0.62.0","rollup-plugin-babel":"^3.0.7","rollup-plugin-node-resolve":"^3.3.0","rollup-plugin-uglify":"^4.0.0","sinon":"^6.1.3","webpack":"^4.15.1","webpack-cli":"^3.0.8","webpack-dev-server":"^3.1.4"},"keywords":["immutable","functional"],"license":"MIT","homepage":"https://github.com/planttheidea/unchanged#readme","main":"lib/index.js","module":"es/index.js","name":"unchanged","repository":{"type":"git","url":"git+https://github.com/planttheidea/unchanged.git"},"scripts":{"benchmark":"npm run transpile:lib && NODE_ENV=production node ./benchmarks/index.js","build":"NODE_ENV=production rollup -c","clean":"npm run clean:lib && npm run clean:es && npm run clean:dist","clean:dist":"rimraf dist","clean:lib":"rimraf lib","clean:es":"rimraf es","dev":"NODE_ENV=development webpack-dev-server --colors --progress --config=webpack/webpack.config.dev.js","dist":"npm run clean:dist && npm run build","lint":"NODE_ENV=test eslint src","lint:fix":"NODE_ENV=test eslint src --fix","prepublish":"if in-publish; then npm run prepublish:compile; fi","prepublish:compile":"npm run lint && npm run test:coverage && npm run transpile:lib && npm run transpile:es && npm run dist","start":"npm run dev","test":"NODE_PATH=. NODE_ENV=production BABEL_ENV=test ava","test:coverage":"nyc npm test","test:watch":"npm test -- --watch","transpile:lib":"npm run clean:lib && BABEL_ENV=lib babel src --out-dir lib","transpile:es":"npm run clean:es && BABEL_ENV=es babel src --out-dir es"},"version":"1.3.3","gitHead":"cbf09c5d453ad2fe044e27158bfd978022f9dfce","_id":"unchanged@1.3.3","_npmVersion":"5.6.0","_nodeVersion":"8.11.3","_npmUser":{"name":"planttheidea","email":"tony.quetano@planttheidea.com"},"dist":{"integrity":"sha512-87/t20WbDnSL+CRACWggCYB2h2PPCxRHrbMRfbshshVemfKUVfCkcg5WXka7nOXKCpUTDSlFQXZ8/VIGDxPYBA==","shasum":"d535c58b2e5fbaf872fa0446f1f3b0ebe7d8ce88","tarball":"https://registry.npmjs.org/unchanged/-/unchanged-1.3.3.tgz","fileCount":12,"unpackedSize":121657,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbUZtpCRA9TVsSAnZWagAA+hgP/iQCmfn/AhN6cMkU63Rq\nKnyGoUCjFMxsqTsm797mF6P7qbGg9M8AINBTWioHzaNkWZZOv2P5ilKaiK9S\nBZbg+0lpt/AXYCRC9bHy273Vk4A67qpsLAlPSf8s49Bq3y+6YGxj1XqKzYJ+\nkHaz7yUJ2HmJZLJ8OWdv+4qeQjdjSFRvgah57A9HduIRmfiPccG8D1EqtZAW\n76xci6r3LJgBX+I1uERm+zk5Z/r9kb0opIlHA3RkgLRO3jHcbyj5la8EEjzw\nJzIoQH+aWJh+088ppWPAK138qhcRbhSkFLxGoWK9DqyrNtClS3XbQxn+xgRA\nxQ2O8vrzBxxBeCjwOeHW0ebsbvwHxNF1rjM5GGKCiAn0jXIzqIaNquyE7pLD\n8LUo/ca9ceWLXMBuE5GHlKZkKzpqjmgGh4GC2MYulToB0xM5/AvvsTMmEfTy\nmje0rs5U2rfJYiTBclQmL92it/AvmvejJVftwGVz1uVTBx0XnVvLt8nwX3Jd\nQwmE92UY44kKPSouG2brl2NqXNM22+WVly99SyMgaUXNE5+YDm5/5rYBKZtJ\nMqHbeeRJ2N6ryX8s2ANtgrWmtCVqgHf02R0mXNETlwz4rmhvjjEXw7x0SJ5c\nYGxVVcWmg5CAXbnv5nS76aiQt+8NL2ocfKnGhDt6XlcuqkJ2NLoK62UIC97u\na7a+\r\n=WDdX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEKMyBjMJfaCEox5DnQxJroZFYrTEIFQkbq8hsA4QTUEAiBJcG8UDfmSoihiwZUTg5pWPkscpjaryF1CVzE8dlPBuA=="}]},"maintainers":[{"name":"planttheidea","email":"tony.quetano@planttheidea.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/unchanged_1.3.3_1532074857359_0.04087283933116326"},"_hasShrinkwrap":false},"1.4.0":{"author":{"name":"tony_quetano@planttheidea.com"},"ava":{"babel":"inherit","failFast":true,"files":["test/*.js"],"require":["babel-register"],"source":["src/*.js"],"verbose":true},"browserslist":["defaults","Explorer >= 9","Safari >= 6","Opera >= 15","iOS >= 8","Android >= 4"],"bugs":{"url":"https://github.com/planttheidea/unchanged/issues"},"dependencies":{"curriable":"^1.0.0","pathington":"^1.1.5"},"description":"A tiny, fast, unopinionated handler for updating JS objects and arrays immutably","devDependencies":{"ava":"^0.25.0","babel-cli":"^6.26.0","babel-eslint":"^8.2.6","babel-loader":"^7.1.5","babel-preset-env":"^1.7.0","babel-preset-stage-2":"^6.24.1","babel-register":"^6.26.0","benchmark":"^2.1.4","cli-table":"^0.3.1","eslint":"^5.4.0","eslint-config-rapid7":"^3.0.4","eslint-friendly-formatter":"^4.0.1","eslint-loader":"^2.1.0","html-webpack-plugin":"^3.2.0","in-publish":"^2.0.0","lodash":"^4.17.10","nyc":"^12.0.2","optimize-js-plugin":"^0.0.4","performance-now":"^2.1.0","ramda":"^0.25.0","react":"^16.4.1","react-dom":"^16.4.2","rollup":"^0.64.1","rollup-plugin-babel":"^3.0.7","rollup-plugin-node-resolve":"^3.3.0","rollup-plugin-uglify":"^4.0.0","sinon":"^6.1.5","webpack":"^4.16.5","webpack-cli":"^3.1.0","webpack-dev-server":"^3.1.5"},"keywords":["immutable","functional"],"license":"MIT","homepage":"https://github.com/planttheidea/unchanged#readme","main":"lib/index.js","module":"es/index.js","name":"unchanged","repository":{"type":"git","url":"git+https://github.com/planttheidea/unchanged.git"},"scripts":{"benchmark":"npm run transpile:lib && NODE_ENV=production node ./benchmarks/index.js","build":"NODE_ENV=production rollup -c","clean":"npm run clean:lib && npm run clean:es && npm run clean:dist","clean:dist":"rimraf dist","clean:lib":"rimraf lib","clean:es":"rimraf es","dev":"NODE_ENV=development webpack-dev-server --colors --progress --config=webpack/webpack.config.dev.js","dist":"npm run clean:dist && npm run build","lint":"NODE_ENV=test eslint src","lint:fix":"NODE_ENV=test eslint src --fix","prepublish":"if in-publish; then npm run prepublish:compile; fi","prepublish:compile":"npm run lint && npm run test:coverage && npm run transpile:lib && npm run transpile:es && npm run dist","start":"npm run dev","test":"NODE_PATH=. NODE_ENV=production BABEL_ENV=test ava","test:coverage":"nyc npm test","test:watch":"npm test -- --watch","transpile:lib":"npm run clean:lib && BABEL_ENV=lib babel src --out-dir lib","transpile:es":"npm run clean:es && BABEL_ENV=es babel src --out-dir es"},"version":"1.4.0","gitHead":"b8fd501fcf402fba4d02b9226192d06c142de1b7","_id":"unchanged@1.4.0","_npmVersion":"6.3.0","_nodeVersion":"8.11.3","_npmUser":{"name":"planttheidea","email":"tony.quetano@planttheidea.com"},"dist":{"integrity":"sha512-DCa0xAH2pIrGYifJlwm2m43z5vg1GyPMqocqEe/IYRsPAi2ZpURnUke4mNyu6501LEwsvV6N8wx0wTdw3LKJLw==","shasum":"000f5f82f1c0d97f1aeda1fa64cea2edfe8e7b09","tarball":"https://registry.npmjs.org/unchanged/-/unchanged-1.4.0.tgz","fileCount":11,"unpackedSize":126908,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbeCKGCRA9TVsSAnZWagAAkDEP/jrzEli69YaOpviSlzPJ\nLCatfmYyifYv26oCPQw1XgSfqcYZLWkrPUkOOzC2bJIntTdXoDaRTQ25/VTi\nKq7PVkqA07S0CQLawjfTTuzWZe7KK/xO8g/x4TjkBv0Rw+4OvkztEOvIhNj3\nMBQ/AFQwX54BfBpmc1uDiZtEsmYS1mxd+DfCrbeplAC0CG1VaF5EvyoBP56s\nOWIdzhzVMPqRAZgavxaasXsgFA7BND+OCJ0KjK0vXGux4yZak0zqDlzQfi6W\nzd0K59puew37sFegFo+JJ53dF0JOLUrYATrk01vR+aSAozTRaHlRf6FKgjOP\nbnMtinAVQpaqVNDSMyt/DoMSxGjE45gOG0B/PNmrd5RpCxyN8DKL2jgzL0YK\nGY4agdSeCOv3jC67IcUDP5Fd8EV0murxS4AHZCk7QEfOsGIkWAqaVCRRTWBm\nxW5vKzeAsEoTUDqwSEkHuoPepRfjCkxrRBhiXSKnVuWzw6wKIFf57R1hc6fx\nalORdc8JEfqrE5kTHdAYl6hlSKOH9152TRcJ+j/UOFF9SuVCZxyln7MYdCsV\nqfgzFikDy60uvFfkcqTnMZflMTm5FXD20sNYK/Wkvt3nBin261EOm4/zunVb\nT2q5hrplWj4GJBTZt7sJeC5ljYInF6rpjLh8dTlTE4XFciV1bWXVnf6zaRuR\nDbX2\r\n=GS46\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICaO6kL5eUQwwJvU19tnlc1N4MOS/n2b5YM2uaWVZZ0iAiEA2/YG5ZTYlmkGQ64ooCiOIV/Axp7jKe+1o+5IFYxW1tg="}]},"maintainers":[{"name":"planttheidea","email":"tony.quetano@planttheidea.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/unchanged_1.4.0_1534599813495_0.07895019802722048"},"_hasShrinkwrap":false},"1.4.1":{"author":{"name":"tony_quetano@planttheidea.com"},"ava":{"failFast":true,"files":["test/*.js"],"require":["@babel/register"],"sources":["src/*.js"],"verbose":true},"browserslist":["defaults","Explorer >= 9","Safari >= 6","Opera >= 15","iOS >= 8","Android >= 4"],"bugs":{"url":"https://github.com/planttheidea/unchanged/issues"},"dependencies":{"curriable":"^1.0.0","pathington":"^1.1.5"},"description":"A tiny, fast, unopinionated handler for updating JS objects and arrays immutably","devDependencies":{"@babel/cli":"^7.0.0","@babel/core":"^7.0.0","@babel/preset-env":"^7.0.0","@babel/register":"^7.0.0","ava":"^1.0.0-beta.8","babel-eslint":"^9.0.0","babel-loader":"^8.0.0","benchmark":"^2.1.4","cli-table":"^0.3.1","eslint":"^5.4.0","eslint-config-rapid7":"^3.0.4","eslint-friendly-formatter":"^4.0.1","eslint-loader":"^2.1.0","html-webpack-plugin":"^3.2.0","in-publish":"^2.0.0","lodash":"^4.17.10","nyc":"^13.0.1","optimize-js-plugin":"^0.0.4","performance-now":"^2.1.0","ramda":"^0.25.0","react":"^16.4.1","react-dom":"^16.4.2","rollup":"^0.66.0","rollup-plugin-babel":"^4.0.1","rollup-plugin-node-resolve":"^3.3.0","rollup-plugin-uglify":"^6.0.0","sinon":"^6.1.5","webpack":"^4.16.5","webpack-cli":"^3.1.0","webpack-dev-server":"^3.1.5"},"keywords":["immutable","functional"],"license":"MIT","homepage":"https://github.com/planttheidea/unchanged#readme","main":"lib/index.js","module":"es/index.js","name":"unchanged","repository":{"type":"git","url":"git+https://github.com/planttheidea/unchanged.git"},"scripts":{"benchmark":"npm run transpile:lib && NODE_ENV=production node ./benchmarks/index.js","build":"NODE_ENV=production rollup -c","clean":"npm run clean:lib && npm run clean:es && npm run clean:dist","clean:dist":"rimraf dist","clean:lib":"rimraf lib","clean:es":"rimraf es","dev":"NODE_ENV=development webpack-dev-server --colors --progress --config=webpack/webpack.config.dev.js","dist":"npm run clean:dist && npm run build","lint":"NODE_ENV=test eslint src","lint:fix":"NODE_ENV=test eslint src --fix","prepublish":"if in-publish; then npm run prepublish:compile; fi","prepublish:compile":"npm run lint && npm run test:coverage && npm run transpile:lib && npm run transpile:es && npm run dist","start":"npm run dev","test":"NODE_PATH=. NODE_ENV=production BABEL_ENV=test ava","test:coverage":"nyc npm test","test:watch":"npm test -- --watch","transpile:lib":"npm run clean:lib && BABEL_ENV=lib babel src --out-dir lib","transpile:es":"npm run clean:es && BABEL_ENV=es babel src --out-dir es"},"version":"1.4.1","gitHead":"76e642c8dcd13b2ac1979e0a96fe61434daa7eee","_id":"unchanged@1.4.1","_npmVersion":"6.4.1","_nodeVersion":"8.11.4","_npmUser":{"name":"planttheidea","email":"tony.quetano@planttheidea.com"},"dist":{"integrity":"sha512-4GE9FgVVSjcrZVLRR/VqK6V3S2JWKNTUMkCE7+ylbi3nNAfsN3F0SiBBsc5m6G3UZUaEyZ1TPDXGJ+xK7k1GQQ==","shasum":"7aeabf31bec78fb7f7375bc2c3793350c19a79f1","tarball":"https://registry.npmjs.org/unchanged/-/unchanged-1.4.1.tgz","fileCount":11,"unpackedSize":128484,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJboalNCRA9TVsSAnZWagAAbR4QAJ3zmOTZcpZZEG5VPTbP\nT7E3lpdxOnNG8056rn4UDytQ8Mh68kYHLLLbL0RkfagghhM3hazwtJGvldoo\nPiDLV9s7bd9tsSGTRsmV8ZWSlAzsujuBnOWZMUzY56xhljDFbzlNCtIfxq83\nJ79R6ZAakO8poM4zAAXAtNgwJAauv5zprhu+F3dbWYGH3Fp5lYfkNSDnt4Du\nEVKlOfuyJqeNQs9wMcmoa36R2Y1fFXAXGZCZkRgIAhbdq7371EVbtigiqjPM\nUgTLQwxLDq8aY/8NJbK0abT1zYz8bRUBBWHv/hRORKx1L8mlWO9+nrR1B/mK\n9Bnp41Ys5B27sRbQhcXlilr5O/bz/t1g2yniM7hU6fHFc4wt5FEA//2z4Fdm\nqHUSv3c7HtFCJmoqoV2+4bsMB5L1iuHw2XJChPaGwJuRBBZ7eJ8107nW2a9u\nWuMHEQiTroAZYeLF2c6sGd2gERLhwBS3k9+QJ96NquVXscOirrvNKTqbsPTi\nHfGn5vT8ZXYPdQdjrF/rMdZOsB4sUlD07nw+0afVM1h+rMEXAf05pSp8JEo5\nsoy4bvRjqcyZQeWgfCnn2kLtKRoFptsw1ILuZNh3AiTSRk0Egsb582UlvGwy\nKCiDBx4EQQRW5VTpIp1Blrugqlua6kL7y4unhL0NKzRQ09VbU66otpL2+D5f\n03Qd\r\n=OO5N\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCJshODtiSvoSstLSnPeHByToP5ACTCY7ct9Gzl7oDJKgIhAJTgFHmSkhNBLHxuwm5SXeOtUJ9BTxXqD/TDA0COYGyi"}]},"maintainers":[{"name":"planttheidea","email":"tony.quetano@planttheidea.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/unchanged_1.4.1_1537321292768_0.041201041247659775"},"_hasShrinkwrap":false},"1.4.2":{"author":{"name":"tony_quetano@planttheidea.com"},"ava":{"failFast":true,"files":["test/*.js"],"require":["@babel/register"],"sources":["src/*.js"],"verbose":true},"browserslist":["defaults","Explorer >= 9","Safari >= 6","Opera >= 15","iOS >= 8","Android >= 4"],"bugs":{"url":"https://github.com/planttheidea/unchanged/issues"},"dependencies":{"curriable":"^1.0.0","pathington":"^1.1.5"},"description":"A tiny, fast, unopinionated handler for updating JS objects and arrays immutably","devDependencies":{"@babel/cli":"^7.0.0","@babel/core":"^7.0.0","@babel/preset-env":"^7.0.0","@babel/register":"^7.0.0","ava":"^1.0.0-beta.8","babel-eslint":"^9.0.0","babel-loader":"^8.0.0","benchmark":"^2.1.4","cli-table":"^0.3.1","eslint":"^5.4.0","eslint-config-rapid7":"^3.0.4","eslint-friendly-formatter":"^4.0.1","eslint-loader":"^2.1.0","html-webpack-plugin":"^3.2.0","in-publish":"^2.0.0","lodash":"^4.17.10","nyc":"^13.0.1","optimize-js-plugin":"^0.0.4","performance-now":"^2.1.0","ramda":"^0.25.0","react":"^16.4.1","react-dom":"^16.4.2","rollup":"^0.66.0","rollup-plugin-babel":"^4.0.1","rollup-plugin-node-resolve":"^3.3.0","rollup-plugin-uglify":"^6.0.0","sinon":"^6.1.5","webpack":"^4.16.5","webpack-cli":"^3.1.0","webpack-dev-server":"^3.1.5"},"keywords":["immutable","functional"],"license":"MIT","homepage":"https://github.com/planttheidea/unchanged#readme","main":"lib/index.js","module":"es/index.js","name":"unchanged","repository":{"type":"git","url":"git+https://github.com/planttheidea/unchanged.git"},"scripts":{"benchmark":"npm run transpile:lib && NODE_ENV=production node ./benchmarks/index.js","build":"NODE_ENV=production rollup -c","clean":"npm run clean:lib && npm run clean:es && npm run clean:dist","clean:dist":"rimraf dist","clean:lib":"rimraf lib","clean:es":"rimraf es","dev":"NODE_ENV=development webpack-dev-server --colors --progress --config=webpack/webpack.config.dev.js","dist":"npm run clean:dist && npm run build","lint":"NODE_ENV=test eslint src","lint:fix":"NODE_ENV=test eslint src --fix","prepublish":"if in-publish; then npm run prepublish:compile; fi","prepublish:compile":"npm run lint && npm run test:coverage && npm run transpile:lib && npm run transpile:es && npm run dist","start":"npm run dev","test":"NODE_PATH=. NODE_ENV=production BABEL_ENV=test ava","test:coverage":"nyc npm test","test:watch":"npm test -- --watch","transpile:lib":"npm run clean:lib && BABEL_ENV=lib babel src --out-dir lib","transpile:es":"npm run clean:es && BABEL_ENV=es babel src --out-dir es"},"sideEffects":false,"version":"1.4.2","gitHead":"fa198136630648efe38ef3b7ee9d0d766e4448a0","_id":"unchanged@1.4.2","_npmVersion":"6.4.1","_nodeVersion":"8.11.4","_npmUser":{"name":"planttheidea","email":"tony.quetano@planttheidea.com"},"dist":{"integrity":"sha512-jww4OIXmrJPW/TJalW9R3lsSCmThnABd269RgL4e5JGtXGBUP3UVOgo6IKeB1BU5vWDcBV1adFPMGkBCRuMJTw==","shasum":"a8df9ac9fa36b6f8144eece15af36ecc867b37b6","tarball":"https://registry.npmjs.org/unchanged/-/unchanged-1.4.2.tgz","fileCount":11,"unpackedSize":128583,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJboawiCRA9TVsSAnZWagAAPf0P/1gDgCJOJ+sc9vBJn1YX\nI5rpmVPzGP7BCpGhbDcmL+GowWUXQI43+rqAes9CgTj8isGpG01Qfu+pd3rf\nDwEowsQiK2xZQoX4ZpVBmnA6ZQW1CR6HqKY2teuji8phLjEQyK342CkWj1Cv\nPvBBqPvJxeRDCdFMeaY27+diWPUr8zK2T8hLvNkVd3RC9Rq/ieleXa27owPu\nFcqsoeSZ8J23uJx3OgarGIXuJmhjXYvS0IWYLB2H7rsbOiAZ10hvBaNsM9+e\nXb2IPCkJAEs9Jy9Ld6FjRGJubsAPIWVFVqPnXETQWYsCv9dxFP3jUKWz+58w\n5NFqBWRwwCZdX2elXL/xWAXqaqWCX7+8kZhqBAY40o+mPs6ZHWSwqqJuYkUF\nIeO4926r/dFprx0I02sU55unzfrTV4xP6PEhII2WFvGfgP1D0bjMa/wWqae2\n0w35s75nzBOMngIgnTS3prbf4SvK8ZpuF+xDiAEoRE7NunQBpbxSMpv4wcvt\nykaxNZtcZws3bfK5+WvYgLqsygHqRsLUU2EkBWUzbJC05+j35R9stQkotZxP\n6IvWAUKbD2bIckfBAmIJ/Nx1MGa4hLPWd1N9aOs3Kvp5hrMeLFzuf9JHVl6y\nWrovNKia3rL99QQDehrJXIX324GbUAfDI6xDx9ObNfAiLmFAec6v/dTNoTJ5\n4C1M\r\n=TmOl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCjiWzuQlHyEDlQYnxjmHaFYNmE0VQnCyf6iaMG8txoXgIhAPEd6IzDnXPMdAUDsMI98JCVfPNsm1dB7FBUhseg5o3c"}]},"maintainers":[{"name":"planttheidea","email":"tony.quetano@planttheidea.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/unchanged_1.4.2_1537322018000_0.11942448908801429"},"_hasShrinkwrap":false},"1.5.0":{"author":{"name":"tony_quetano@planttheidea.com"},"ava":{"failFast":true,"files":["test/*.js"],"require":["@babel/register"],"sources":["src/*.js"],"verbose":true},"browserslist":["defaults","Explorer >= 9","Safari >= 6","Opera >= 15","iOS >= 8","Android >= 4"],"bugs":{"url":"https://github.com/planttheidea/unchanged/issues"},"dependencies":{"curriable":"^1.0.0","pathington":"^1.1.5"},"description":"A tiny, fast, unopinionated handler for updating JS objects and arrays immutably","devDependencies":{"@babel/cli":"^7.0.0","@babel/core":"^7.0.0","@babel/preset-env":"^7.0.0","@babel/register":"^7.0.0","ava":"^1.0.0-beta.8","babel-eslint":"^9.0.0","babel-loader":"^8.0.0","benchmark":"^2.1.4","cli-table":"^0.3.1","eslint":"^5.4.0","eslint-config-rapid7":"^3.0.4","eslint-friendly-formatter":"^4.0.1","eslint-loader":"^2.1.1","html-webpack-plugin":"^3.2.0","in-publish":"^2.0.0","lodash":"^4.17.10","nyc":"^13.0.1","optimize-js-plugin":"^0.0.4","performance-now":"^2.1.0","ramda":"^0.25.0","react":"^16.4.1","react-dom":"^16.4.2","rollup":"^0.66.1","rollup-plugin-babel":"^4.0.1","rollup-plugin-node-resolve":"^3.3.0","rollup-plugin-uglify":"^6.0.0","sinon":"^6.1.5","webpack":"^4.16.5","webpack-cli":"^3.1.0","webpack-dev-server":"^3.1.5"},"keywords":["immutable","functional"],"license":"MIT","homepage":"https://github.com/planttheidea/unchanged#readme","main":"lib/index.js","module":"es/index.js","name":"unchanged","repository":{"type":"git","url":"git+https://github.com/planttheidea/unchanged.git"},"scripts":{"benchmark":"npm run transpile:lib && NODE_ENV=production node ./benchmarks/index.js","build":"NODE_ENV=production rollup -c","clean":"npm run clean:lib && npm run clean:es && npm run clean:dist","clean:dist":"rimraf dist","clean:lib":"rimraf lib","clean:es":"rimraf es","dev":"NODE_ENV=development webpack-dev-server --colors --progress --config=webpack/webpack.config.dev.js","dist":"npm run clean:dist && npm run build","lint":"NODE_ENV=test eslint src","lint:fix":"NODE_ENV=test eslint src --fix","prepublish":"if in-publish; then npm run prepublish:compile; fi","prepublish:compile":"npm run lint && npm run test:coverage && npm run transpile:lib && npm run transpile:es && npm run dist","start":"npm run dev","test":"NODE_PATH=. NODE_ENV=production BABEL_ENV=test ava","test:coverage":"nyc npm test","test:watch":"npm test -- --watch","transpile:lib":"npm run clean:lib && BABEL_ENV=lib babel src --out-dir lib","transpile:es":"npm run clean:es && BABEL_ENV=es babel src --out-dir es"},"sideEffects":false,"version":"1.5.0","gitHead":"bdd8fdbb17a66a6884202e1811a79d4a1c64fc7e","_id":"unchanged@1.5.0","_npmVersion":"6.4.1","_nodeVersion":"8.11.4","_npmUser":{"name":"planttheidea","email":"tony.quetano@planttheidea.com"},"dist":{"integrity":"sha512-poOMpbXhxB55Wn3G3kLoPYwefNT1vTXtu3hD4QgZmZlH3Ior3JYAMXTiWZCN5IRzlDCo9hCNOzROLqB1N4MnRg==","shasum":"e78475eb4050c5e13f12646104294ed523107e26","tarball":"https://registry.npmjs.org/unchanged/-/unchanged-1.5.0.tgz","fileCount":11,"unpackedSize":134395,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbozyeCRA9TVsSAnZWagAAZP4P/0dBv+sZCLPp1HVczNhF\nPlI114tMdsUCVIGUY+bNLWJV9dn/IL4f5957U1KlR9DH/PqFgJSvLqZGwKpk\nxPNjz47pjdBCX2Eo8GcS3hZA05gpQSqlRX6CohO0qL5FwZslyBEakA3+6eS1\nCCM8SPrGBq6j8brmT6SViAixBapbz/UQgZXclXqD928s1v9ie2xy/NxRepYE\nuxyIBBsOleTybZLFQJoyhXRfgg1m6D4H158/wNfc046k8xZOueVBnVeKlInO\npA6dEUolqTkJBF3BJwke8L3apVZ0jzGyk5JAc81ijuWC1Kbjc/tmxf0FveOL\n19o4jvmqxMAyhCxQZ99pyg3MHzptoZ4or4Mnd3u8OFzJdEDxQ0HhvadLE8Rd\nkD/Gyk16W5WZPcX8cBLAY6SqsXr4yqLui3n8rji3U8ONUmixUuEtPInEfKvb\n9y8fMniUl9gcIW4waNlbW3e56Xcv0GpJwkevfZpMAad4Vajso74lCawn+mkz\nhJVNxdyQT2HqzpDixqQD/qTBqTrQFmM+LCli+n9GSFJ9ktYciXDwuZXikgMT\noJsRJRLNvillOzuOf1ZoWIaTr0AmPIYCI4TZHl03EbKeWWFOKIXHgkVAYxss\ndVtU0yOWmOURejz72PhWPcEZSLxrDlR995Nif9pDPz6O1euXx9mvpJNZxfbH\nA0OF\r\n=MrUi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDguhXpuS7QPjTddmtxbUp+iurbxiEb+6IBe1t1p4vrPwIgRDGAcjffQQHAqrrIWq7HqzMJ2qsC5cIkS19bLc2s5b8="}]},"maintainers":[{"name":"planttheidea","email":"tony.quetano@planttheidea.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/unchanged_1.5.0_1537424541885_0.43206199314681637"},"_hasShrinkwrap":false},"1.5.1":{"author":{"name":"tony_quetano@planttheidea.com"},"ava":{"failFast":true,"files":["test/*.js"],"require":["@babel/register"],"sources":["src/*.js"],"verbose":true},"browserslist":["defaults","Explorer >= 9","Safari >= 6","Opera >= 15","iOS >= 8","Android >= 4"],"bugs":{"url":"https://github.com/planttheidea/unchanged/issues"},"dependencies":{"curriable":"^1.0.0","pathington":"^1.1.5"},"description":"A tiny, fast, unopinionated handler for updating JS objects and arrays immutably","devDependencies":{"@babel/cli":"^7.0.0","@babel/core":"^7.0.0","@babel/preset-env":"^7.0.0","@babel/register":"^7.0.0","ava":"^1.0.0-beta.8","babel-eslint":"^9.0.0","babel-loader":"^8.0.0","benchmark":"^2.1.4","cli-table":"^0.3.1","eslint":"^5.4.0","eslint-config-rapid7":"^3.0.4","eslint-friendly-formatter":"^4.0.1","eslint-loader":"^2.1.1","html-webpack-plugin":"^3.2.0","in-publish":"^2.0.0","lodash":"^4.17.10","nyc":"^13.0.1","optimize-js-plugin":"^0.0.4","performance-now":"^2.1.0","ramda":"^0.25.0","react":"^16.4.1","react-dom":"^16.4.2","rollup":"^0.66.1","rollup-plugin-babel":"^4.0.1","rollup-plugin-node-resolve":"^3.3.0","rollup-plugin-uglify":"^6.0.0","sinon":"^6.1.5","webpack":"^4.16.5","webpack-cli":"^3.1.0","webpack-dev-server":"^3.1.5"},"keywords":["immutable","functional"],"license":"MIT","homepage":"https://github.com/planttheidea/unchanged#readme","main":"lib/index.js","module":"es/index.js","name":"unchanged","repository":{"type":"git","url":"git+https://github.com/planttheidea/unchanged.git"},"scripts":{"benchmark":"npm run transpile:lib && NODE_ENV=production node ./benchmarks/index.js","build":"NODE_ENV=production rollup -c","clean":"npm run clean:lib && npm run clean:es && npm run clean:dist","clean:dist":"rimraf dist","clean:lib":"rimraf lib","clean:es":"rimraf es","dev":"NODE_ENV=development webpack-dev-server --colors --progress --config=webpack/webpack.config.dev.js","dist":"npm run clean:dist && npm run build","lint":"NODE_ENV=test eslint src","lint:fix":"NODE_ENV=test eslint src --fix","prepublish":"if in-publish; then npm run prepublish:compile; fi","prepublish:compile":"npm run lint && npm run test:coverage && npm run transpile:lib && npm run transpile:es && npm run dist","start":"npm run dev","test":"NODE_PATH=. NODE_ENV=production BABEL_ENV=test ava","test:coverage":"nyc npm test","test:watch":"npm test -- --watch","transpile:lib":"npm run clean:lib && BABEL_ENV=lib babel src --out-dir lib","transpile:es":"npm run clean:es && BABEL_ENV=es babel src --out-dir es"},"sideEffects":false,"version":"1.5.1","gitHead":"2eede48cad6a7e69962255a09d8841344f83647f","_id":"unchanged@1.5.1","_npmVersion":"6.5.0","_nodeVersion":"10.14.1","_npmUser":{"name":"planttheidea","email":"tony.quetano@planttheidea.com"},"dist":{"integrity":"sha512-g29L5ihEJr8+TOrJn7vKd25U6uBC/aciLyLnWTqd/BqKXdiLR2HLMrJgvWy9S9ebDsWAjgsHOzNHPSRm1ZBfLw==","shasum":"2b88b3b6a211004d122287d8c1026ee0589d3619","tarball":"https://registry.npmjs.org/unchanged/-/unchanged-1.5.1.tgz","fileCount":11,"unpackedSize":140526,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcJmN8CRA9TVsSAnZWagAAxdMP/RYjT5mVih9LZCah/q1P\n4AS6BtXh5aOss9eJesmqCLJ1q1Eb39UmfC1BCPoxZXjIs/mCSS7KuFoF+vQD\n1eY861skwNPT814mkjSz51q4VZPVTwg/zEohb9fvMkBaOnbkdSomPS5EYGKR\nf/sEmC/MvZqUa5zc4dZM60SfTcOgkk9FgNZbWWmXnrjTlVeclnjZaquUu6Ef\nuCskWIllNVj651nwU9ghVzlk9R6rjK2W7GQb9AlbfCBzL+0Qng7VfINC/HVZ\n7eVbjExdfvlXNnksOp5SHCHNprBBiYs/02RkAV3jhaHawl0XtFmrGllLqw/9\nuIHqXE7Wh8eO2DYv6ZxDBFCHKW1LhVeA8c40gP3k6NrrVKU5OTRiiB/KYs8i\nGT+/QNY07uT+yycVah+IWutSxt7e+UCQRQKPCGdyKktGBMkGOzf28N0YGzxb\nx2+76WmpYQHdRjIxU2buvpPVrQKmW+zQb7fHuFyuMV6Ppj/rFv2YybrXQHQo\nMqatFdSlGXYCVU5HHiOiVIERbGpIxezpUnxpVf9Tjb8NyPdGe7xBpJrGmO/f\nFtIXaRozPbSoDgbwfsRIIYLO+14N9BU0VVS7cuhiAwS3QuWrlD2LUjX94lL/\nXzAEkhDU2UANRpwQuMroIYMsSpJOqdvxmqimNaaH15e7/y/kSBeFIYwJWvV5\n5Qc0\r\n=fwxj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAuHO+3s3k0Dtet/kqtrSDxAV2D1p0KtvUVnThuZxD7DAiEAlPqh9lhMKrfkEDiCb1hxu4cGuf2JLiCv+/UZb102sgE="}]},"maintainers":[{"name":"planttheidea","email":"tony.quetano@planttheidea.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/unchanged_1.5.1_1546019707533_0.7667393260728987"},"_hasShrinkwrap":false},"1.5.2":{"author":{"name":"tony_quetano@planttheidea.com"},"ava":{"failFast":true,"files":["test/*.js"],"require":["@babel/register"],"sources":["src/*.js"],"verbose":true},"browserslist":["defaults","Explorer >= 9","Safari >= 6","Opera >= 15","iOS >= 8","Android >= 4"],"bugs":{"url":"https://github.com/planttheidea/unchanged/issues"},"dependencies":{"curriable":"^1.0.0","pathington":"^1.1.5"},"description":"A tiny, fast, unopinionated handler for updating JS objects and arrays immutably","devDependencies":{"@babel/cli":"^7.0.0","@babel/core":"^7.0.0","@babel/preset-env":"^7.0.0","@babel/register":"^7.0.0","ava":"^1.0.0-beta.8","babel-eslint":"^9.0.0","babel-loader":"^8.0.0","benchmark":"^2.1.4","cli-table":"^0.3.1","eslint":"^5.4.0","eslint-config-rapid7":"^3.0.4","eslint-friendly-formatter":"^4.0.1","eslint-loader":"^2.1.1","html-webpack-plugin":"^3.2.0","in-publish":"^2.0.0","lodash":"^4.17.10","nyc":"^13.0.1","optimize-js-plugin":"^0.0.4","performance-now":"^2.1.0","ramda":"^0.25.0","react":"^16.4.1","react-dom":"^16.4.2","rollup":"^0.66.1","rollup-plugin-babel":"^4.0.1","rollup-plugin-node-resolve":"^3.3.0","rollup-plugin-uglify":"^6.0.0","sinon":"^6.1.5","webpack":"^4.16.5","webpack-cli":"^3.1.0","webpack-dev-server":"^3.1.5"},"keywords":["immutable","functional"],"license":"MIT","homepage":"https://github.com/planttheidea/unchanged#readme","main":"lib/index.js","module":"es/index.js","name":"unchanged","repository":{"type":"git","url":"git+https://github.com/planttheidea/unchanged.git"},"scripts":{"benchmark":"npm run transpile:lib && NODE_ENV=production node ./benchmarks/index.js","build":"NODE_ENV=production rollup -c","clean":"npm run clean:lib && npm run clean:es && npm run clean:dist","clean:dist":"rimraf dist","clean:lib":"rimraf lib","clean:es":"rimraf es","dev":"NODE_ENV=development webpack-dev-server --colors --progress --config=webpack/webpack.config.dev.js","dist":"npm run clean:dist && npm run build","lint":"NODE_ENV=test eslint src","lint:fix":"NODE_ENV=test eslint src --fix","prepublish":"if in-publish; then npm run prepublish:compile; fi","prepublish:compile":"npm run lint && npm run test:coverage && npm run transpile:lib && npm run transpile:es && npm run dist","start":"npm run dev","test":"NODE_PATH=. NODE_ENV=production BABEL_ENV=test ava","test:coverage":"nyc npm test","test:watch":"npm test -- --watch","transpile:lib":"npm run clean:lib && BABEL_ENV=lib babel src --out-dir lib","transpile:es":"npm run clean:es && BABEL_ENV=es babel src --out-dir es"},"sideEffects":false,"version":"1.5.2","gitHead":"916e856130778201c0c3151a1e63c822f645411b","_id":"unchanged@1.5.2","_npmVersion":"6.5.0","_nodeVersion":"10.14.1","_npmUser":{"name":"planttheidea","email":"tony.quetano@planttheidea.com"},"dist":{"integrity":"sha512-b63sGPL2dm/CYRVwu2V+BR9IS7J7vjoDhfWVk1y2jNB+6xxnG2znPvNEov79vjMoIW/gkR3eYrz3a3tIM48NnQ==","shasum":"5328ae9cebe2644b8115734a96169d5d9c711d62","tarball":"https://registry.npmjs.org/unchanged/-/unchanged-1.5.2.tgz","fileCount":11,"unpackedSize":121796,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcJoClCRA9TVsSAnZWagAAC6cP/2MvUQ6GzkmLMaTO+6s5\nZiGmG+X+BtmTqESQ2JEdts2r3YDx/LOEEFtbYL4lXzZoiy74v7N3tyFE8gw+\n+V5T5S9b+o3x/1KAgdyKcOIATYO8eXNoJbPJurUVpid69ZSeMN2MzTarjjNt\nqzC0rtjh1lqqcBMOwNMPhBA77w7MKez9ckMmJsjBaQH0EulF7lNmY4/sfT3N\nZ01rxiwc+h1G5B5T3qKFc9eCFWBS4ZwNsXMt1uIsISs1CCX4pGeMFDR/PIDy\nwbk/WI2VWDZOTdWzhU88VsoNwg1Psi5lnauxDoDCY7hE9t3DV7mQCR1rhSHJ\nHW6uA9Bp2X73BJfRnUarjpp/c5YZERpO15MqDrIkjs+eTUX5NJAPxTk461s0\nPPLxRqemP7NBLMBwNLMigp6HVlecP9LiZ4wOyG7urOxje8XSd9lVBGyHUnq5\nRnbFqAFkApirmY1XbRP/e9dl2YPDIDE+iifFyABr/nZdtKiB7m2/3HIP00++\ncv7ucjG3IlLKfYARTMMDhC2fF3Hgpl9mvk0KbqQysR9QBHBw1bnhS/g7ThJn\noSwotqME04ZpoV2QrKSon5JVADx/y1IalFV9Tc30aJ7W3dlGh2IcDYi9RsVx\nAGArzahQmMrHnjmeMwbdNHrfdtmYNF2wtC6skRDsg2Jf+JJPVrXzIo8L6mUF\nkhgC\r\n=QaB4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC7h1TxVFxDy4/R8TcMEvPgnDa9abYkVvEpivcmaYrAtAiEA8/Ikqf48S4E+wRQFQV3Y1QpCDdoWmjAuWJYsk3TEp6w="}]},"maintainers":[{"name":"planttheidea","email":"tony.quetano@planttheidea.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/unchanged_1.5.2_1546027172516_0.32924747472232885"},"_hasShrinkwrap":false},"2.0.0":{"author":{"name":"tony_quetano@planttheidea.com"},"browser":"dist/unchanged.js","browserslist":["defaults","Explorer >= 9","Safari >= 6","Opera >= 15","iOS >= 8","Android >= 4"],"bugs":{"url":"https://github.com/planttheidea/unchanged/issues"},"dependencies":{"curriable":"^1.2.4","pathington":"^1.1.5"},"description":"A tiny, fast, unopinionated handler for updating JS objects and arrays immutably","devDependencies":{"@types/jest":"^23.3.12","@types/node":"^10.12.18","@types/ramda":"^0.25.45","@types/react":"^16.7.18","benchmark":"^2.1.4","cli-table":"^0.3.1","eslint":"^5.12.0","html-webpack-plugin":"^3.2.0","in-publish":"^2.0.0","jest":"^23.6.0","lodash":"^4.17.10","nyc":"^13.0.1","ramda":"^0.26.1","react":"^16.7.0","react-dom":"^16.4.2","rollup":"^1.0.2","rollup-plugin-babel-minify":"^6.2.0","rollup-plugin-node-resolve":"^4.0.0","rollup-plugin-typescript2":"^0.18.1","ts-jest":"^23.10.4","ts-loader":"^5.3.3","tslint":"^5.11.0","tslint-config-airbnb":"^5.11.0","tslint-loader":"^3.5.4","typescript":"^3.1.3","webpack":"^4.16.5","webpack-cli":"^3.2.0","webpack-dev-server":"^3.1.5"},"keywords":["immutable","functional"],"license":"MIT","homepage":"https://github.com/planttheidea/unchanged#readme","main":"dist/unchanged.cjs.js","module":"dist/unchanged.esm.js","name":"unchanged","repository":{"type":"git","url":"git+https://github.com/planttheidea/unchanged.git"},"scripts":{"benchmark":"npm run dist && NODE_ENV=production node ./benchmarks/index.js","build":"NODE_ENV=production rollup -c","clean":"rimraf dist","dev":"NODE_ENV=development webpack-dev-server --colors --progress --config=webpack/webpack.config.js","dist":"npm run clean && npm run build","lint":"NODE_ENV=test tslint 'src/*.ts'","lint:fix":"npm run lint -- --fix","prepublish":"if in-publish; then npm run prepublish:compile; fi","prepublish:compile":"npm run lint && npm run test:coverage && npm run dist","start":"npm run dev","test":"NODE_PATH=. jest","test:coverage":"npm run test -- --coverage","test:watch":"npm run test -- --watch"},"sideEffects":false,"types":"dist/index.d.ts","version":"2.0.0","gitHead":"91db36f75a97419ee08602b24ba0102c680eb691","_id":"unchanged@2.0.0","_npmVersion":"6.5.0","_nodeVersion":"10.15.0","_npmUser":{"name":"planttheidea","email":"tony.quetano@planttheidea.com"},"dist":{"integrity":"sha512-3QzO44/BUS6wTmF8qhYk5Lj79zH+NIXkufhtBvXSSJ5nY1ERxAQnA8GSg6T6SX/WoFFSCX6cVfYpkhudOTTDuQ==","shasum":"22202bc04a0378c47f5f2acedd85ebdc42a34c0e","tarball":"https://registry.npmjs.org/unchanged/-/unchanged-2.0.0.tgz","fileCount":14,"unpackedSize":298909,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcM2S3CRA9TVsSAnZWagAAuMYP/0VDidl5B8EWMLpJ9nYR\nkwAnywaiyFFJgRLbJYZMInxPD8WghGpEjNjbi7GFSC8vUMKv9QIQLC3IW2n5\nvuGcdiA2TXhnembXcgsdc1qv+JUFcn7DR8+4i8LvUTpHqG0R/rScle+Q4GlO\nczm/IsDraz1ltcQ/j9M/CMSuwnuXnemh9GtHyqnuEmaNswaV5M/Ym+jFJ49K\nh6R6mkcE+HNSOXe0/87G9erK0tsAeqN9v310oYGd6shgKPYDrfODSZ2/T2se\nFiTW/DkX4wG6l8xtTy8vmD00G2u8ahjxYqqfCbZGbH+QcL5JkZv2Y9ph+aCc\nX9bzFxr1V4uZO4a4ZRNaNEd53hw2gZ6qO9SQg/Fgap/4nw7cU/K60YS0Onzo\nC2GrZ3YtRmVO2VcxQE9ojvxvNefqNAkaUk20+gog0lIXHjkjt/cofYeWStm4\niWZhsLdgxfqk2Ao9fBEfbBrDa5W2Ms3f0qW4WBbfPXKiGjTy7tFFkOwcNzG/\nxE6qYY2oPCdrMdRsv3w8fYYNSboM+H6YilOR1bsMsu+oog+MPq9uBw8xASUU\nTS13plXF5TqH1T6acQazzaaVGFui8p/+5syZ5+OUzgw9AIcZhNpbt+sb2eZZ\nw3vcl2PnBEfgz8KE84ouLHViu61UkGTRWkYGgmWHoKEDrmEktRFHMXb69UVe\nIvQx\r\n=zrLr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE1dwTrsdAxnsOoKXTVN5y0uADStO2iJn+UtpVyNmDxMAiEArM1Li/UkicQLBdgO7ET30IbFXDHiSmNGbLx+YBVKZeA="}]},"maintainers":[{"name":"planttheidea","email":"tony.quetano@planttheidea.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/unchanged_2.0.0_1546871990460_0.7819617114903308"},"_hasShrinkwrap":false},"2.0.1":{"author":{"name":"tony_quetano@planttheidea.com"},"browser":"dist/unchanged.js","browserslist":["defaults","Explorer >= 9","Safari >= 6","Opera >= 15","iOS >= 8","Android >= 4"],"bugs":{"url":"https://github.com/planttheidea/unchanged/issues"},"dependencies":{"curriable":"^1.2.4","pathington":"^1.1.5"},"description":"A tiny, fast, unopinionated handler for updating JS objects and arrays immutably","devDependencies":{"@types/jest":"^23.3.12","@types/node":"^10.12.18","@types/ramda":"^0.25.45","@types/react":"^16.7.18","benchmark":"^2.1.4","cli-table":"^0.3.1","eslint":"^5.12.0","html-webpack-plugin":"^3.2.0","in-publish":"^2.0.0","jest":"^23.6.0","lodash":"^4.17.10","nyc":"^13.0.1","ramda":"^0.26.1","react":"^16.7.0","react-dom":"^16.4.2","rollup":"^1.1.0","rollup-plugin-node-resolve":"^4.0.0","rollup-plugin-terser":"^4.0.2","rollup-plugin-typescript2":"^0.18.1","ts-jest":"^23.10.4","ts-loader":"^5.3.3","tslint":"^5.11.0","tslint-config-airbnb":"^5.11.0","tslint-loader":"^3.5.4","typescript":"^3.1.3","webpack":"^4.16.5","webpack-cli":"^3.2.0","webpack-dev-server":"^3.1.5"},"keywords":["immutable","functional"],"license":"MIT","homepage":"https://github.com/planttheidea/unchanged#readme","main":"dist/unchanged.cjs.js","module":"dist/unchanged.esm.js","name":"unchanged","repository":{"type":"git","url":"git+https://github.com/planttheidea/unchanged.git"},"scripts":{"benchmark":"npm run dist && NODE_ENV=production node ./benchmarks/index.js","build":"NODE_ENV=production rollup -c","clean":"rimraf dist","dev":"NODE_ENV=development webpack-dev-server --colors --progress --config=webpack/webpack.config.js","dist":"npm run clean && npm run build","lint":"NODE_ENV=test tslint 'src/*.ts'","lint:fix":"npm run lint -- --fix","prepublish":"if in-publish; then npm run prepublish:compile; fi","prepublish:compile":"npm run lint && npm run test:coverage && npm run dist","start":"npm run dev","test":"NODE_PATH=. jest","test:coverage":"npm run test -- --coverage","test:watch":"npm run test -- --watch"},"sideEffects":false,"types":"dist/index.d.ts","version":"2.0.1","gitHead":"248a509b22463f92db7fc73e3300ba340130987b","_id":"unchanged@2.0.1","_npmVersion":"6.5.0","_nodeVersion":"10.15.0","_npmUser":{"name":"planttheidea","email":"tony.quetano@planttheidea.com"},"dist":{"integrity":"sha512-g/rlZ2/DNhGgTcqeU6Tg417gp4Omd2cZgiJt/UF3SsQ4nn5CUSq1qrm/nb4JZVLAwfeP13zPOMHvmh4jrIe0Eg==","shasum":"f51373efdfbc5f0fbe1d69a8aa2870482e2baf13","tarball":"https://registry.npmjs.org/unchanged/-/unchanged-2.0.1.tgz","fileCount":12,"unpackedSize":246923,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcNyhLCRA9TVsSAnZWagAACmUP/1P9k7VUUtf6mGAuPYQF\nkGwSetxLTZiobbbRMM4tQJhBBInmzt/zlH6lwSqjIp5jSXH7Gu+JylSm2ID6\nfCa4f4xCOxOYbo7VWyvYsXK3Irwu+gXrGjvWksvs8xJlptyjGQGHgHGFN87t\nl4h+SiCBbaP5xrwuW/AsyQx9uZqpwEKSFnlx8fIrrpKLiFydtOBqOCf9tV+1\nWc3SBsZzRZ5aNYOP6vwrauNsGg562Vl+7kixgHKpFbHDxR+mm1/Fot/ziCQc\nkSNT1pAn3h6EvbNBARqKSkbIrlUmFlJ1QHQY6dotOAaf0pH/J0JSx2vP3Gne\nMmVO8MTW8uEWTh65x6yUXMgLeAoQ3NjTvM6t1TReRzYWT7vhHJA4BSq4BLg5\nQdV+dy7pAUZXk26qGJWlsmsfBcBaTqXpHP5P65pJ3N7r4auHQp+/A5+kYB6i\n9ck7ShrvW20fKj743aAXoSkMs/hFjoHEKw9nvWjd2z76s9PZxzmlMC2IqeIt\nYzQLF5sP8nIlw7t4QpEJkHDN/N0apZuzzKPf5t6qn5ZyQs0md56TyseeFN8X\ni0pcy/MypQbFgmxgoqxQsKg6mNVH8dguAOOUA/gxrqozI3bUHBNIhgAdcMbL\neOv2zutTFhXf3xl1qVfhBhjtk01NRjpMPejomYARtBPsYsuqmbo6l6/b+TFL\ndBYr\r\n=OGya\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDqlZDSt/mxvuEBP3gBpueKajEtfVWLEl7WwxGrEbpkAAiEAwG5Pm61ZNbFkE2eL1ec2vVVlJtuWh/qIIurkhyavCaU="}]},"maintainers":[{"name":"planttheidea","email":"tony.quetano@planttheidea.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/unchanged_2.0.1_1547118666883_0.38097313590786164"},"_hasShrinkwrap":false},"2.1.0":{"author":{"name":"tony_quetano@planttheidea.com"},"browser":"dist/unchanged.js","browserslist":["defaults","Explorer >= 9","Safari >= 6","Opera >= 15","iOS >= 8","Android >= 4"],"bugs":{"url":"https://github.com/planttheidea/unchanged/issues"},"dependencies":{"curriable":"^1.2.4","pathington":"^1.1.5"},"description":"A tiny, fast, unopinionated handler for updating JS objects and arrays immutably","devDependencies":{"@types/jest":"^23.3.12","@types/node":"^10.12.18","@types/ramda":"^0.25.45","@types/react":"^16.7.18","benchmark":"^2.1.4","cli-table":"^0.3.1","eslint":"^5.12.0","html-webpack-plugin":"^3.2.0","in-publish":"^2.0.0","jest":"^23.6.0","lodash":"^4.17.10","nyc":"^13.0.1","ramda":"^0.26.1","react":"^16.7.0","react-dom":"^16.4.2","rollup":"^1.1.0","rollup-plugin-node-resolve":"^4.0.0","rollup-plugin-terser":"^4.0.2","rollup-plugin-typescript2":"^0.18.1","ts-jest":"^23.10.4","ts-loader":"^5.3.3","tslint":"^5.11.0","tslint-config-airbnb":"^5.11.0","tslint-loader":"^3.5.4","typescript":"^3.1.3","webpack":"^4.16.5","webpack-cli":"^3.2.0","webpack-dev-server":"^3.1.5"},"keywords":["immutable","functional"],"license":"MIT","homepage":"https://github.com/planttheidea/unchanged#readme","main":"dist/unchanged.cjs.js","module":"dist/unchanged.esm.js","name":"unchanged","repository":{"type":"git","url":"git+https://github.com/planttheidea/unchanged.git"},"scripts":{"benchmark":"npm run dist && NODE_ENV=production node ./benchmarks/index.js","build":"NODE_ENV=production rollup -c","clean":"rimraf dist","dev":"NODE_ENV=development webpack-dev-server --colors --progress --config=webpack/webpack.config.js","dist":"npm run clean && npm run build","lint":"NODE_ENV=test tslint 'src/*.ts'","lint:fix":"npm run lint -- --fix","prepublish":"if in-publish; then npm run prepublish:compile; fi","prepublish:compile":"npm run lint && npm run test:coverage && npm run dist","start":"npm run dev","test":"NODE_PATH=. jest","test:coverage":"npm run test -- --coverage","test:watch":"npm run test -- --watch"},"sideEffects":false,"types":"dist/index.d.ts","version":"2.1.0","gitHead":"79e237af772d860941a2b4c28c8b10cbf8679433","_id":"unchanged@2.1.0","_npmVersion":"6.5.0","_nodeVersion":"10.15.0","_npmUser":{"name":"planttheidea","email":"tony.quetano@planttheidea.com"},"dist":{"integrity":"sha512-CYVU0Mz35N821Pjxf+iG6JMPx/Yb6wStUq8uuhR52/+AU3vMiueOTrJ6u1vBKYSke7a75FAi2/jCdQkXcHaNGQ==","shasum":"16308dde5bec15925032d91651f5c3843b957de6","tarball":"https://registry.npmjs.org/unchanged/-/unchanged-2.1.0.tgz","fileCount":12,"unpackedSize":254647,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcRPQpCRA9TVsSAnZWagAAbqUP/Rxh4dUNm6eatcgaG6Fz\nC+FjNsN708BzzLRfB5e6LMFkPhl3XuZg4+JHjGUp0AmpWA+M0DDiqdLGnBhb\niAw5yfw2ICK/pBKKncODjEyOMOBNSutgoaEqKvW+mpUNQ/F++3qsJ17Al5ZJ\nTgKNGjdykgKjkH5Pgr2oryT6VmXfT7kGhmSQee2NGz0x4kRvPwU2uW4dxMm7\nMq4LAw2l2S+MpmKaJbpvixBZSeQ5G/2KRsG3a2gbUAnAGzjU2W1y2SmhMRaf\nT15P40Nkm95N3C8PblQsa63oDvJfK7l7FiXcC8sZRi+FL/uqty3bvdq4azvH\nOaurthIdYPp+Db/58YuSQnYlG5lBl83Q3EsfCgiFNd/Ttu5A8hoXHjiRQCh4\neeaETUoF2nd8jzS7uwPOQMy8ThnXEhnwOOTO+v7ozSVTJJ7AK4w2O0pAiEmz\naD5MZPRY1UECxjAOIOAmNiKe8v3mV3hhW3CaEy+r8JbokdcZky5e3DLPZALJ\ntg5jF7kWYIxNa6/gKk8prJ6N4p6YDK2FvNLm3AYSwPGCYlUj0tfsJ77NfjX1\ng/2w8Z0wd8Xaa8txZXEWOjRSBSxV3veNs3pnNBKeTarR/ZExIZ87+Xlwg/b3\nSo2vm9MB8J0eMuvKmBXsB5XDX9AX0EfdTHQCoIJDjuAitOJe4RQeKBvANPhv\noNVp\r\n=OkL+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICqRS7HaclROhV+c97M0C8n+6Xru754nO2UW/OyJYeNWAiEAghJIad1y0iX0IHfNb/3SSpWpxaPchrnyOu9ai5TT6v4="}]},"maintainers":[{"name":"planttheidea","email":"tony.quetano@planttheidea.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/unchanged_2.1.0_1548022824973_0.7950446769206914"},"_hasShrinkwrap":false},"2.2.0-beta.0":{"author":{"name":"tony_quetano@planttheidea.com"},"browser":"dist/unchanged.js","browserslist":["defaults","Explorer >= 9","Safari >= 6","Opera >= 15","iOS >= 8","Android >= 4"],"bugs":{"url":"https://github.com/planttheidea/unchanged/issues"},"dependencies":{"curriable":"^1.3.0","pathington":"^1.1.7"},"description":"A tiny, fast, unopinionated handler for updating JS objects and arrays immutably","devDependencies":{"@types/jest":"^24.0.15","@types/node":"^12.6.1","@types/ramda":"^0.26.15","@types/react":"^16.8.23","benchmark":"^2.1.4","cli-table":"^0.3.1","eslint":"^6.0.1","html-webpack-plugin":"^3.2.0","jest":"^24.8.0","lodash":"^4.17.10","nyc":"^14.1.1","ramda":"^0.26.1","react":"^16.8.6","react-dom":"^16.8.6","rollup":"^1.16.6","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.1","rollup-plugin-typescript2":"^0.21.2","ts-jest":"^24.0.2","ts-loader":"^6.0.4","tslint":"^5.18.0","tslint-config-airbnb":"^5.11.0","tslint-loader":"^3.5.4","typescript":"^3.5.3","webpack":"^4.35.3","webpack-cli":"^3.3.5","webpack-dev-server":"^3.7.2"},"keywords":["immutable","functional"],"license":"MIT","homepage":"https://github.com/planttheidea/unchanged#readme","main":"dist/unchanged.cjs.js","module":"dist/unchanged.esm.js","name":"unchanged","repository":{"type":"git","url":"git+https://github.com/planttheidea/unchanged.git"},"scripts":{"benchmark":"npm run dist && NODE_ENV=production node ./benchmarks/index.js","build":"NODE_ENV=production rollup -c","clean":"rimraf dist","dev":"NODE_ENV=development webpack-dev-server --colors --progress --config=webpack/webpack.config.js","dist":"npm run clean && npm run build","lint":"NODE_ENV=test tslint 'src/*.ts'","lint:fix":"npm run lint -- --fix","prepublishOnly":"npm run lint && npm run typecheck && npm run test:coverage && npm run dist","release":"release-it","release:beta":"release-it --config=.release-it.beta.json","start":"npm run dev","test":"NODE_PATH=. jest","test:coverage":"npm run test -- --coverage","test:watch":"npm run test -- --watch","typecheck":"tsc --noEmit"},"sideEffects":false,"types":"dist/index.d.ts","version":"2.2.0-beta.0","gitHead":"98fb3fa72ec930c50a6100e152d2f4974d444456","readme":"# unchanged\n\nA tiny (~2.1kB minified+gzipped), [fast](https://github.com/planttheidea/unchanged/blob/master/benchmark_results.csv), unopinionated handler for updating JS objects and arrays immutably.\n\nSupports nested key paths via path arrays or [dotty syntax](https://github.com/planttheidea/pathington), and all methods are curriable (with placeholder support) for composability. Can be a drop-in replacement for the `lodash/fp` methods `get`, `set`, `merge`, and `omit` with a 90% smaller footprint.\n\n## Table of contents\n\n- [unchanged](#unchanged)\n  - [Table of contents](#Table-of-contents)\n  - [Usage](#Usage)\n  - [Types](#Types)\n  - [Standard methods](#Standard-methods)\n    - [get](#get)\n    - [getOr](#getOr)\n    - [set](#set)\n    - [remove](#remove)\n    - [has](#has)\n    - [is](#is)\n    - [not](#not)\n    - [add](#add)\n    - [merge](#merge)\n    - [assign](#assign)\n    - [call](#call)\n  - [Transform methods](#Transform-methods)\n    - [getWith](#getWith)\n    - [getWithOr](#getWithOr)\n    - [setWith](#setWith)\n    - [removeWith](#removeWith)\n    - [hasWith](#hasWith)\n    - [isWith](#isWith)\n    - [notWith](#notWith)\n    - [addWith](#addWith)\n    - [mergeWith](#mergeWith)\n    - [assignWith](#assignWith)\n    - [callWith](#callWith)\n  - [Additional objects](#Additional-objects)\n    - [\\_\\_](#)\n  - [Differences from other libraries](#Differences-from-other-libraries)\n    - [lodash](#lodash)\n    - [ramda](#ramda)\n    - [Other immutability libraries](#Other-immutability-libraries)\n  - [Browser support](#Browser-support)\n  - [Development](#Development)\n\n## Usage\n\n```typescript\nimport {\n  __,\n  add,\n  addWith,\n  assign,\n  assignWith,\n  call,\n  callWith,\n  get,\n  getWith,\n  getOr,\n  getWithOr,\n  has,\n  hasWith,\n  is,\n  isWith,\n  merge,\n  mergeWith,\n  remove,\n  removeWith,\n  set,\n  setWith\n} from \"unchanged\";\n\nconst object: unchanged.Unchangeable = {\n  foo: \"foo\",\n  bar: [\n    {\n      baz: \"quz\"\n    }\n  ]\n};\n\n// handle standard properties\nconst foo = get(\"foo\", object);\n\n// or nested properties\nconst baz = set(\"bar[0].baz\", \"not quz\", object);\n\n// all methods are curriable\nconst removeBaz = remove(\"bar[0].baz\");\nconst sansBaz = removeBaz(object);\n```\n\n**NOTE**: There is no `default` export, so if you want to import all methods to a single namespace you should use the `import *` syntax:\n\n```typescript\nimport * as uc from \"unchanged\";\n```\n\n## Types\n\nThis library is both written in, and provided with, types by TypeScript. The internal types used for specific parameters are scoped to the `unchanged` namespace.\n\n```typescript\n// the path used to compute nested locations\ntype Path = (number | string)[] | number | string;\n// the callback used in transform methods\ntype WithHandler = (value: any, ...extraParams: any[]) => any;\n// the generic object that is computed upon, either an array or object\ninterface Unchangeable {\n  [key: string]: any;\n  [index: number]: any;\n}\n```\n\nNotice in the `Unchangeable` interface, there is no reference to symbols. That is because to date, TypeScript does not support Symbols as an index type. If you need to use symbols as object keys, the best workaround I've found is to typecast when it complains:\n\n```typescript\nconst symbolKey = (Symbol(\"key\") as unknown) as string;\n\nconst object: { [symbolKey]: string } = {\n  [symbolKey]: \"bar\"\n};\n```\n\nIf there is a better alternative for having dynamic Symbol indices, let me know! Happy to accept any PRs from those more experienced in TypeScript than myself.\n\n## Standard methods\n\n### get\n\n```typescript\nfunction get(path: unchanged.Path, object: unchanged.Unchangeable): any;\n```\n\nGet the value at the `path` requested on the `object` passed.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  foo: [\n    {\n      bar: \"baz\"\n    }\n  ]\n};\n\nconsole.log(get(\"foo[0].bar\", object)); // baz\nconsole.log(get([\"foo\", 0, \"bar\"], object)); // baz\n```\n\n### getOr\n\n```typescript\nfunction getOr(\n  fallbackValue: any,\n  path: unchanged.Path,\n  object: unchanged.Unchangeable\n): any;\n```\n\nGet the value at the `path` requested on the `object` passed, with a fallback value if that path does not exist.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  foo: [\n    {\n      bar: \"baz\"\n    }\n  ]\n};\n\nconsole.log(getOr(\"blah\", \"foo[0].bar\", object)); // baz\nconsole.log(getOr(\"blah\", [\"foo\", 0, \"bar\"], object)); // baz\nconsole.log(getOr(\"blah\", \"foo[0].nonexistent\", object)); // blah\n```\n\n### set\n\n```typescript\nfunction set(\n  path: unchanged.Path,\n  value: any,\n  object: unchanged.Unchangeable\n): unchanged.Unchangeable;\n```\n\nReturns a new object based on the `object` passed, with the `value` assigned to the final key on the `path` specified.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  foo: [\n    {\n      bar: \"baz\"\n    }\n  ]\n};\n\nconsole.log(set(\"foo[0].bar\", \"quz\", object)); // {foo: [{bar: 'quz'}]}\nconsole.log(set([\"foo\", 0, \"bar\"], \"quz\", object)); // {foo: [{bar: 'quz'}]}\n```\n\n### remove\n\n```typescript\nfunction remove(\n  path: unchanged.Path,\n  object: unchanged.Unchangeable\n): unchanged.Unchangeable;\n```\n\nReturns a new object based on the `object` passed, with the final key on the `path` removed if it exists.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  foo: [\n    {\n      bar: \"baz\"\n    }\n  ]\n};\n\nconsole.log(remove(\"foo[0].bar\", object)); // {foo: [{}]}\nconsole.log(remove([\"foo\", 0, \"bar\"], object)); // {foo: [{}]}\n```\n\n### has\n\n```typescript\nfunction has(path: unchanged.Path, object: unchanged.Unchangeable): boolean;\n```\n\nReturns `true` if the object has the path provided, `false` otherwise.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  foo: [\n    {\n      bar: \"baz\"\n    }\n  ]\n};\n\nconsole.log(has(\"foo[0].bar\", object)); // true\nconsole.log(has([\"foo\", 0, \"bar\"], object)); // true\nconsole.log(has(\"bar\", object)); // false\n```\n\n### is\n\n```typescript\nfunction is(\n  path: unchanged.Path,\n  value: any,\n  object: unchanged.Unchangeable\n): boolean;\n```\n\nReturns `true` if the value at the `path` in `object` is equal to `value` based on [SameValueZero](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#Same-value-zero_equality) equality, `false` otherwise.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  foo: [\n    {\n      bar: \"baz\"\n    }\n  ]\n};\n\nconsole.log(is(\"foo[0].bar\", \"baz\", object)); // true\nconsole.log(is([\"foo\", 0, \"bar\"], \"baz\", object)); // true\nconsole.log(is(\"foo[0].bar\", \"quz\", object)); // false\n```\n\n### not\n\n```typescript\nfunction not(\n  path: unchanged.Path,\n  value: any,\n  object: unchanged.Unchangeable\n): boolean;\n```\n\nReturns `false` if the value at the `path` in `object` is equal to `value` based on [SameValueZero](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#Same-value-zero_equality) equality, `true` otherwise.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  foo: [\n    {\n      bar: \"baz\"\n    }\n  ]\n};\n\nconsole.log(not(\"foo[0].bar\", \"baz\", object)); // false\nconsole.log(not([\"foo\", 0, \"bar\"], \"baz\", object)); // false\nconsole.log(not(\"foo[0].bar\", \"quz\", object)); // true\n```\n\n### add\n\n```typescript\nfunction add(\n  path: unchanged.Path,\n  value: any,\n  object: unchanged.Unchangeable\n): unchanged.Unchangeable;\n```\n\nReturns a new object based on the `object` passed, with the `value` added at the `path` specified. This can have different behavior depending on whether the item is an object or an array; objects will simply add / set the key provided, whereas arrays will add a new value to the end.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  foo: [\n    {\n      bar: 'baz'\n    }\n  ]\n};\n\n// object\nconsole.log(add('foo', 'added value' object)); // {foo: [{bar: 'baz'}, 'added value']}\nconsole.log(add(['foo'], 'added value', object)); // {foo: [{bar: 'baz'}, 'added value']}\n\n// array\nconsole.log(add('foo[0].quz', 'added value' object)); // {foo: [{bar: 'baz', quz: 'added value'}]}\nconsole.log(add(['foo', 0, 'quz'], 'added value', object)); // {foo: [{bar: 'baz', quz: 'added value'}]}\n```\n\nNotice that the `Object` usage is idential to the `set` method, where a key needs to be specified for assignment. In the case of an `Array`, however, the value is pushed to the array at that key.\n\n**NOTE**: If you want to add an item to a top-level array, pass `null` as the key:\n\n```typescript\nconst object = [\"foo\"];\n\nconsole.log(add(null, \"bar\", object)); // ['foo', 'bar']\n```\n\n### merge\n\n```typescript\nfunction merge(\n  path: unchanged.Path,\n  value: unchanged.Unchangeable,\n  object: unchanged.Unchangeable\n): unchanged.Unchangeable;\n```\n\nReturns a new object that is a deep merge of `value` into `object` at the `path` specified. If you want to perform a shallow merge, see [`assign`](#assign).\n\n```typescript\nconst object1: unchanged.Unchangeable = {\n  foo: \"bar\",\n  baz: {\n    one: \"value1\",\n    deeply: {\n      nested: \"value\",\n      untouched: true\n    },\n    two: \"value2\"\n  }\n};\nconst object2: unchanged.Unchangeable = {\n  one: \"new value\",\n  deeply: {\n    nested: \"other value\"\n  },\n  three: \"value3\"\n};\n\nconsole.log(merge(\"baz\", object2, object1));\n/*\n{\n  foo: 'bar',\n  baz: {\n    one: 'new value',\n    deeply: {\n      nested: 'other value',\n      untouched: true,\n    },\n    two: 'value2',\n    three: 'value3\n  }\n}\n```\n\n**NOTE**: If you want to `merge` the entirety of both objects, pass `null` as the key:\n\n```typescript\nconsole.log(merge(null, object2, object1));\n/*\n{\n  foo: \"bar\",\n  baz: {\n    one: \"value1\",\n    deeply: {\n      nested: \"value\",\n      untouched: true\n    },\n    two: \"value2\"\n  },\n  one: \"new value\",\n  deeply: {\n    nested: \"other value\"\n  },\n  three: \"value3\"\n}\n*/\n```\n\n### assign\n\n```typescript\nfunction assign(\n  path: unchanged.Path,\n  value: unchanged.Unchangeable,\n  object: unchanged.Unchangeable\n): unchanged.Unchangeable;\n```\n\nReturns a new object that is a shallow merge of `value` into `object` at the `path` specified. If you want to perform a deep merge, see [`merge`](#merge).\n\n```typescript\nconst object1: unchanged.Unchangeable = {\n  foo: \"bar\",\n  baz: {\n    one: \"value1\",\n    deeply: {\n      nested: \"value\",\n      untouched: true\n    },\n    two: \"value2\"\n  }\n};\nconst object2: unchanged.Unchangeable = {\n  one: \"new value\",\n  deeply: {\n    nested: \"other value\"\n  },\n  three: \"value3\"\n};\n\nconsole.log(assign(\"baz\", object2, object1));\n/*\n{\n  foo: 'bar',\n  baz: {\n    one: 'new value',\n    deeply: {\n      nested: 'other value',\n    },\n    two: 'value2',\n    three: 'value3\n  }\n}\n```\n\n**NOTE**: If you want to `assign` the entirety of both objects, pass `null` as the key:\n\n```typescript\nconsole.log(assign(null, object2, object1));\n/*\n{\n  foo: \"bar\",\n  baz: {\n    one: \"value1\",\n    deeply: {\n      nested: \"value\",\n      untouched: true\n    },\n    two: \"value2\"\n  },\n  one: \"new value\",\n  deeply: {\n    nested: \"other value\"\n  },\n  three: \"value3\"\n}\n*/\n```\n\n### call\n\n```typescript\nfunction call(\n  path: unchanged.Path,\n  parameters: any[],\n  object: unchanged.Unchangeable,\n  context?: any = object\n): any;\n```\n\nCall the method at the `path` requested on the `object` passed, and return what it's call returns.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  foo: [\n    {\n      bar(a, b) {\n        return a + b;\n      }\n    }\n  ]\n};\n\nconsole.log(call(\"foo[0].bar\", [1, 2], object)); // 3\nconsole.log(call([\"foo\", 0, \"bar\"], [1, 2], object)); // 3\n```\n\nYou can also provide an optional fourth parameter of `context`, which will be the `this` value in the method call. This will default to the `object` itself.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  calculate: true,\n  foo: [\n    {\n      bar(a, b) {\n        return this.calculate ? a + b : 0;\n      }\n    }\n  ]\n};\n\nconsole.log(call(\"foo[0].bar\", [1, 2], object)); // 3\nconsole.log(call(\"foo[0].bar\", [1, 2], object, {})); // 0\n```\n\n**NOTE**: Because `context` is optional, it cannot be independently curried; you must apply it in the call when the `object` is passed.\n\n## Transform methods\n\nEach standard method has it's own related `With` method, which accepts a callback `fn` as the first curried parameter. In most cases this callback serves as a transformer for the value retrieved, set, merged, etc.; the exception is `removeWith`, where the callback serves as a validator as to whether to remove or not.\n\nThe signature of all callbacks is the `withHandler` specified in [`Types`](#types). Because `extraParams` are optional parameters, they cannot be independently curried; you must apply them in the call when the `object` is passed.\n\n### getWith\n\n```typescript\nfunction getWith(\n  fn: unchanged.withHandler,\n  path: unchanged.Path,\n  object: unchanged.Unchangeable,\n  ...extraParams?: any[]\n): any;\n```\n\nGet the return value of `fn` based on the value at the `path` requested on the `object` passed. `fn` is called with the current value at the `path` as the first parameter, and any additional parameters passed as `extraParams` following that.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  foo: [\n    {\n      bar: \"baz\"\n    }\n  ]\n};\nconst fn: unchanged.withHandler = (value: any, nullValue: any): any =>\n  currentValue === nullValue ? null : currentValue;\n\nconsole.log(getWith(fn, \"foo[0].bar\", object)); // 'baz'\nconsole.log(getWith(fn, \"foo[0].bar\", object, \"baz\")); // null\nconsole.log(getWith(fn, [\"foo\", 0, \"bar\"], object)); // 'baz'\nconsole.log(getWith(fn, [\"foo\", 0, \"bar\"], object, \"baz\")); // null\n```\n\n### getWithOr\n\n```typescript\nfunction getWithOr(\n  fn: unchanged.withHandler,\n  fallbackValue: any,\n  path: unchanged.Path,\n  object: unchanged.Unchangeable,\n  ...extraParams?: any[]\n): any;\n```\n\nGet the return value of `fn` based on the value at the `path` requested on the `object` passed, falling back to `fallbackValue` when no match is found at `path`. When a match is found, `fn` is called with the current value at the `path` as the first parameter, and any additional parameters passed as `extraParams` following that.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  foo: [\n    {\n      bar: \"baz\"\n    }\n  ]\n};\nconst fn: unchanged.withHandler = (value: any, nullValue: any): any =>\n  currentValue === nullValue ? null : currentValue;\n\nconsole.log(getWithOr(fn, \"quz\", \"foo[0].bar\", object)); // 'baz'\nconsole.log(getWithOr(fn, \"quz\", \"foo[0].bar\", object, \"baz\")); // null\nconsole.log(getWithOr(fn, \"quz\", \"foo[0].notFound\", object, \"baz\")); // 'quz'\nconsole.log(getWithOr(fn, \"quz\", [\"foo\", 0, \"bar\"], object)); // 'baz'\nconsole.log(getWithOr(fn, \"quz\", [\"foo\", 0, \"bar\"], object, \"baz\")); // null\nconsole.log(getWithOr(fn, \"quz\", [\"foo\", 0, \"notFound\"], object, \"baz\")); // 'quz'\n```\n\n### setWith\n\n```typescript\nfunction setWith(\n  fn: unchanged.withHandler,\n  path: unchanged.Path,\n  object: unchanged.Unchangeable,\n  ...extraParams?: any[]\n): unchanged.Unchangeable;\n```\n\nReturns a new object based on the `object` passed, with the return value of `fn` assigned to the final key on the `path` specified. `fn` is called with the current value at the `path` as the first parameter, and any additional parameters passed as `extraParams` following that.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  foo: [\n    {\n      bar: \"baz\"\n    }\n  ]\n};\nconst fn: unchanged.withHandler = (value: any, preventUpdate: boolean): any =>\n  preventUpdate ? currentValue : \"quz\";\n\nconsole.log(setWith(fn, \"foo[0].bar\", object)); // {foo: [{bar: 'quz'}]}\nconsole.log(setWith(fn, \"foo[0].bar\", object, true)); // {foo: [{bar: 'baz'}]}\nconsole.log(setWith(fn, [\"foo\", 0, \"bar\"], object)); // {foo: [{bar: 'quz'}]}\nconsole.log(setWith(fn, [\"foo\", 0, \"bar\"], object, true)); // {foo: [{bar: 'baz'}]}\n```\n\n### removeWith\n\n```typescript\nfunction removeWith(\n  fn: unchanged.withHandler,\n  path: unchanged.Path,\n  object: unchanged.Unchangeable,\n  ...extraParams?: any[]\n): unchanged.Unchangeable;\n```\n\nReturns a new object based on the `object` passed, with the final key on the `path` removed if it exists and the return from `fn` is truthy.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  foo: [\n    {\n      bar: \"baz\"\n    }\n  ]\n};\nconst fn: unchanged.withHandler = (\n  value: any,\n  shouldNotRemove: boolean\n): boolean => !shouldNotRemove && value === \"baz\";\n\nconsole.log(removeWith(fn, \"foo[0].bar\", object)); // {foo: [{}]}\nconsole.log(removeWith(fn, \"foo[0].bar\", object, true)); // {foo: [{bar: 'baz'}]}\nconsole.log(removeWith([fn, \"foo\", 0, \"bar\"], object)); // {foo: [{}]}\nconsole.log(removeWith([fn, \"foo\", 0, \"bar\"], object, true)); // {foo: [{bar: 'baz'}]}\n```\n\n### hasWith\n\n```typescript\nfunction hasWith(\n  fn: unchanged.withHandler,\n  path: unchanged.Path,\n  object: unchanged.Unchangeable,\n  ...extraParams?: any[]\n): boolean;\n```\n\nReturns `true` if the return value of `fn` based on the value returned from `path` in the `object` returns truthy, `false` otherwise.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  foo: [\n    {\n      bar: \"baz\"\n    }\n  ]\n};\nconst fn: unchanged.withHandler = (\n  value: any,\n  shouldBeNull: boolean\n): boolean => (shouldBeNull ? value === null : value === \"baz\");\n\nconsole.log(hasWith(fn, \"foo[0].bar\", object)); // true\nconsole.log(hasWith(fn, \"foo[0].bar\", object, true)); // false\nconsole.log(hasWith(fn, [\"foo\", 0, \"bar\"], object)); // true\nconsole.log(hasWith(fn, [\"foo\", 0, \"bar\"], object, true)); // false\nconsole.log(hasWith(fn, \"bar\", object)); // false\n```\n\n### isWith\n\n```typescript\nfunction isWith(\n  fn: unchanged.withHandler,\n  path: unchanged.Path,\n  object: unchanged.Unchangeable\n): boolean;\n```\n\nReturns `true` if the return value of `fn` based on the value returned from `path` in the `object` is equal to `value` based on [SameValueZero](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#Same-value-zero_equality) equality, `false` otherwise.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  foo: [\n    {\n      bar: \"baz\",\n      quz: \"not baz\"\n    }\n  ]\n};\nconst fn: unchanged.withHandler = (value: any): number =>\n  value && value.length === 3;\n\nconsole.log(isWith(fn, \"foo[0].bar\", object)); // true\nconsole.log(isWith(fn, [\"foo\", 0, \"bar\"], object)); // true\nconsole.log(isWith(fn, \"foo[0].quz\", object)); // false\n```\n\n### notWith\n\n```typescript\nfunction notWith(\n  fn: unchanged.withHandler,\n  path: unchanged.Path,\n  object: unchanged.Unchangeable\n): boolean;\n```\n\nReturns `false` if the return value of `fn` based on the value returned from `path` in the `object` is equal to `value` based on [SameValueZero](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#Same-value-zero_equality) equality, `true` otherwise.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  foo: [\n    {\n      bar: \"baz\",\n      quz: \"not baz\"\n    }\n  ]\n};\nconst fn: unchanged.withHandler = (value: any): number =>\n  value && value.length === 3;\n\nconsole.log(notWith(fn, \"foo[0].bar\", object)); // false\nconsole.log(notWith(fn, [\"foo\", 0, \"bar\"], object)); // false\nconsole.log(notWith(fn, \"foo[0].quz\", object)); // true\n```\n\n### addWith\n\n```typescript\nfunction addWith(\n  fn: unchanged.withHandler,\n  path: unchanged.Path,\n  object: unchanged.Unchangeable\n): unchanged.Unchangeable;\n```\n\nReturns a new object based on the `object` passed, with the return value of `fn` added at the `path` specified. This can have different behavior depending on whether the item is an object or an array; objects will simply add / set the key provided, whereas arrays will add a new value to the end.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  foo: [\n    {\n      bar: \"baz\"\n    }\n  ]\n};\nconst fn: unchanged.withHandler = (value: any) =>\n  value\n    ? value\n        .split(\"\")\n        .reverse()\n        .join(\"\")\n    : \"new value\";\n\n// object\nconsole.log(addWith(fn, \"foo\", object)); // {foo: [{bar: 'baz'}, 'new value']}\nconsole.log(addWith(fn, [\"foo\"], object)); // {foo: [{bar: 'baz'}, 'new value']}\n\n// array\nconsole.log(addWith(fn, \"foo[0].bar\", object)); // {foo: [{bar: 'zab'}]}\nconsole.log(addWith(fn, [\"foo\", 0, \"bar\"], object)); // {foo: [{bar: 'zab''}]}\n```\n\n### mergeWith\n\n```typescript\nfunction mergeWith(\n  fn: unchanged.withHandler,\n  path: unchanged.Path,\n  object: unchanged.Unchangeable\n): unchanged.Unchangeable;\n```\n\nReturns a new object that is a deep merge of the return value of `fn` into `object` at the `path` specified if a valid mergeable object, else returns the original object. If you want to perform a shallow merge, see [`assignWith`](#assignwith).\n\n```typescript\nconst object1: unchanged.Unchangeable = {\n  foo: \"bar\",\n  baz: {\n    one: \"value1\",\n    deeply: {\n      nested: \"value\",\n      untouched: true\n    },\n    two: \"value2\"\n  }\n};\nconst object2: unchanged.Unchangeable = {\n  one: \"new value\",\n  deeply: {\n    nested: \"other value\"\n  },\n  three: \"value3\"\n};\nconst fn: unchanged.withHandler = (value: any) =>\n  value && value.one === \"value1\" ? object2 : null;\n\nconsole.log(mergeWith(fn, \"baz\", object1));\n/*\n{\n  foo: 'bar',\n  baz: {\n    one: 'new value',\n    deeply: {\n      nested: 'other value',\n      untouched: true,\n    },\n    two: 'value2',\n    three: 'value3\n  }\n}\n*/\nconsole.log(mergeWith(fn, \"baz.deeply\", object1));\n/*\n// untouched object1\n{\n  foo: \"bar\",\n  baz: {\n    one: \"value1\",\n    deeply: {\n      nested: 'value',\n      untouched: true,\n    },\n    two: \"value2\"\n  }\n}\n*/\n```\n\n**NOTE**: If you want to `merge` the entirety of both objects, pass `null` as the key:\n\n```typescript\nconsole.log(mergeWith(fn, null, object1));\n/*\n{\n  foo: \"bar\",\n  baz: {\n    one: \"value1\",\n    deeply: {\n      nested: \"value\",\n      untouched: true\n    },\n    two: \"value2\"\n  },\n  one: \"new value\",\n  deeply: {\n    nested: \"other value\"\n  },\n  three: \"value3\"\n}\n*/\n```\n\n### assignWith\n\n```typescript\nfunction assignWith(\n  fn: unchanged.withHandler,\n  path: unchanged.Path,\n  object: unchanged.Unchangeable\n): unchanged.Unchangeable;\n```\n\nReturns a new object that is a shallow merge of the return value of `fn` into `object` at the `path` specified if a valid mergeable object, else returns the original object. If you want to perform a deep merge, see [`mergeWith`](#mergeWith).\n\n```typescript\nconst object1: unchanged.Unchangeable = {\n  foo: \"bar\",\n  baz: {\n    one: \"value1\",\n    deeply: {\n      nested: \"value\",\n      untouched: true\n    },\n    two: \"value2\"\n  }\n};\nconst object2: unchanged.Unchangeable = {\n  one: \"new value\",\n  deeply: {\n    nested: \"other value\"\n  },\n  three: \"value3\"\n};\nconst fn: unchanged.withHandler = (value: any) =>\n  value && value.one === \"value1\" ? object2 : null;\n\nconsole.log(assignWith(fn, \"baz\", object1));\n/*\n{\n  foo: 'bar',\n  baz: {\n    one: 'new value',\n    deeply: {\n      nested: 'other value',\n    },\n    two: 'value2',\n    three: 'value3\n  }\n}\n*/\nconsole.log(assignWith(fn, \"baz.deeply\", object1));\n/*\n// untouched object1\n{\n  foo: \"bar\",\n  baz: {\n    one: \"value1\",\n    deeply: {\n      nested: 'value',\n      untouched: true,\n    },\n    two: \"value2\"\n  }\n}\n*/\n```\n\n### callWith\n\n```typescript\nfunction callWith(\n  path: unchanged.Path,\n  parameters: any[],\n  object: unchanged.Unchangeable,\n  context?: any = object\n): any;\n```\n\nCall the method returned from `fn` based on the `path` specified on the `object`, and if a function return what it's call returns.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  foo: [\n    {\n      bar(a, b) {\n        return a + b;\n      }\n    }\n  ]\n};\nconst fn: unchanged.withHandler = (value: any): any =>\n  typeof value === fn\n    ? fn\n    : () =>\n        console.error(\"Error: Requested call of a method that does not exist.\");\n\nconsole.log(callWith(fn, \"foo[0].bar\", [1, 2], object)); // 3\nconsole.log(callWith(fn, [\"foo\", 0, \"bar\"], [1, 2], object)); // 3\ncallWith(fn, \"foo[1].nope\", object); // Error: Requested call of a method that does not exist.\n```\n\nYou can also provide an optional fourth parameter of `context`, which will be the `this` value in the method call. This will default to the `object` itself.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  calculate: true,\n  foo: [\n    {\n      bar(a, b) {\n        return this.calculate ? a + b : 0;\n      }\n    }\n  ]\n};\nconst fn: unchanged.withHandler = (value: any): any =>\n  typeof value === fn\n    ? fn\n    : () =>\n        console.error(\"Error: Requested call of a method that does not exist.\");\n\nconsole.log(callWith(fn, \"foo[0].bar\", [1, 2], object)); // 3\nconsole.log(callWith(fn, \"foo[0].bar\", [1, 2], object, {})); // 0\n```\n\n**NOTE**: Because `context` is optional, it cannot be independently curried; you must apply it in the call when the `object` is passed.\n\n## Additional objects\n\n### \\_\\_\n\nA placeholder value used to identify \"gaps\" in a curried function, allowing for earlier application of arguments later in the argument order.\n\n```typescript\nimport {__, set} from 'unchanged';\n\nconst thing = {\n  foo: 'foo';\n};\n\nconst setFoo = set('foo', __, thing);\n\nsetFooOnThing('bar');\n```\n\n## Differences from other libraries\n\n### lodash\n\n[`lodash/fp`](https://lodash.com/) (the functional programming implementation of `lodash`) is identical in implementation to `unchanged`'s methods, just with a _10.5x_ larger footprint. These methods should map directly:\n\n- _lodash/fp_ => _unchanged_\n- `curry.placeholder` => `__`\n- `get` => `get`\n- `getOr` => `getOr`\n- `merge` => `merge`\n- `omit` => `remove`\n- `set` => `set`\n\n### ramda\n\n[`ramda`](http://ramdajs.com/) is similar in its implementation, however the first big difference is that dot-bracket syntax is not supported by `ramda`, only path arrays. The related methods are:\n\n- _ramda_ => _unchanged_\n- `__` => `__`\n- `path` => `get`\n- `pathOr` => `getOr`\n- `merge` => `merge`\n- `omit` => `remove`\n- `assocPath` => `set`\n\nAnother difference is that the `ramda` methods that clone (`assocPath`, for example) only work with objects; arrays are implicitly converted into objects, which can make updating collections challenging.\n\nThe last main difference is the way that objects are copied, example:\n\n```typescript\nfunction Foo(value) {\n  this.value = value;\n}\n\nFoo.prototype.getValue = function() {\n  return this.value;\n};\n\nconst foo = new Foo(\"foo\");\n\n// in ramda, both own properties and prototypical methods are copied to the new object as own properties\nconst ramdaResult = assoc(\"bar\", \"baz\", foo);\n\nconsole.log(ramdaResult); // {value: 'foo', bar: 'baz', getValue: function getValue() { return this.value; }}\nconsole.log(ramdaResult instanceof Foo); // false\n\n// in unchanged, the prototype of the original object is maintained, and only own properties are copied as own properties\nconst unchangedResult = set(\"bar\", \"baz\", foo);\n\nconsole.log(unchangedResult); // {value: 'foo', bar: 'baz'}\nconsole.log(unchangedResult instanceof Foo); // true\n```\n\nThis can make `ramda` more performant in certain scenarios, but at the cost of having potentially unexpected behavior.\n\n### Other immutability libraries\n\nThis includes popular solutions like [Immutable.js](https://facebook.github.io/immutable-js/), [seamless-immutable](https://github.com/rtfeldman/seamless-immutable), [mori](http://swannodette.github.io/mori/), etc. These solutions all work well, but with one caveat: _you need to buy completely into their system_. Each of these libraries redefines how the objects are stored internally, and require that you learn a new, highly specific API to use these custom objects. `unchanged` is unopinionated, accepting standard JS objects and returning standard JS objects, no transformation or learning curve required.\n\n## Browser support\n\n- Chrome (all versions)\n- Firefox (all versions)\n- Edge (all versions)\n- Opera 15+\n- IE 9+\n- Safari 6+\n- iOS 8+\n- Android 4+\n\n## Development\n\nStandard stuff, clone the repo and `npm install` dependencies. The npm scripts available:\n\n- `benchmark` => run benchmark suite comparing top-level and deeply-nested `get` and `set` operations with `lodash` and `ramda`\n- `build` => run `rollup` to build `dist` files for CommonJS, ESM, and UMD consumers\n- `clean` => run `rimraf` on the `dist` folder\n- `dev` => run webpack dev server to run example app / playground\n- `dist` => runs `clean` and `build`\n- `lint` => run ESLint against all files in the `src` folder\n- `lint:fix` => run `lint` with autofixing applied\n- `prepublish` => runs `prepublish:compile` when publishing\n- `prepublish:compile` => run `lint`, `test:coverage`, `dist`\n- `test` => run AVA test functions with `NODE_ENV=test`\n- `test:coverage` => run `test` but with `nyc` for coverage checker\n- `test:watch` => run `test`, but with persistent watcher\n","readmeFilename":"README.md","_id":"unchanged@2.2.0-beta.0","_nodeVersion":"10.16.0","_npmVersion":"6.9.2","dist":{"integrity":"sha512-YVM6/nV4rzo7UGwretW1BM0MtIQdsnLGTUzZ8Fs9BtgkGUJ6qg0JM4WTygfECwLWlffaPWzq0kMuFfovuztBpg==","shasum":"5987403f318b6ebc65293ee181a92e85a984d43b","tarball":"https://registry.npmjs.org/unchanged/-/unchanged-2.2.0-beta.0.tgz","fileCount":14,"unpackedSize":257250,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJJ+wCRA9TVsSAnZWagAAuJgP/1lux7hnOdL0N2tvanI8\nlGEuwObb5zDR+3PNyjBAWRBXuWgrN/nImuIwNZEzI+1NaOFI8w3sJgvRJsVG\nJOoR1+EQ7Ki2zuTwR6X/vvkKazoAFA3iSg3x2arY1nNxuL9rN9Nzl01nuFkP\nK3tfr9bfn65KWDaHK7QWvCEo/J/vQOdeELEZu8FGd4IVQ5apM62T/EhgVCGu\nYOjud6mEXOpknXzzWSn0R8C1QVo75ENdJ8ujjZVA6g7LIaalpbUg+YJbPJTl\nh8/vGZwWIjbLzGSX4D+eBDR8rqua0PxD4keSSTtxn+OlQtdYr87dWXsJJ5C6\ndJT7qWaGrVrMlQgmPxWrL77fN/lRV5pBuY9CUgriM55ollsTwmAwj/Kn7cTo\nBkx/+9FQMFXQZhLR+zHViSB11ObYwXA5DLhu1fwyeUo1EWzZiYEw9GXygOIa\nB9HADdVwzgASpbI499LMKXCvUgenwieoZzmlV0aoiBF7KS5rJJvQrQuAaUgC\n3PpLCAqKEX0d0R2OfNjNKjov/Ck09muF9i7lgmIk4xFtkP4je8JhMlf42Yw5\nEC5stpcV1iVAy7r9Cv+CST6c4H92BcFcujFotkxRj+DQAkgxZubr/65KScFx\nXkURz2/K9sUAztSSn+8enfZkjmeFwmbLKYoI2AzXICnkF+Ey1VQombCluvXH\nGtZQ\r\n=Og4F\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDAFKfY3maqbg5XCOVHgPs4prgQ3+gjeOpjL7ShtOkXhAIgKhLnz/DVkiOcEFFhfVgka7IRL2vvEiwRo3stDWl/w/Y="}]},"maintainers":[{"name":"planttheidea","email":"tony.quetano@planttheidea.com"}],"_npmUser":{"name":"planttheidea","email":"tony.quetano@planttheidea.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/unchanged_2.2.0-beta.0_1562681263187_0.4108146986469001"},"_hasShrinkwrap":false},"2.2.0":{"author":{"name":"tony_quetano@planttheidea.com"},"browser":"dist/unchanged.js","browserslist":["defaults","Explorer >= 9","Safari >= 6","Opera >= 15","iOS >= 8","Android >= 4"],"bugs":{"url":"https://github.com/planttheidea/unchanged/issues"},"dependencies":{"curriable":"^1.3.0","pathington":"^1.1.7"},"description":"A tiny, fast, unopinionated handler for updating JS objects and arrays immutably","devDependencies":{"@types/jest":"^24.0.15","@types/node":"^12.6.1","@types/ramda":"^0.26.15","@types/react":"^16.8.23","benchmark":"^2.1.4","cli-table":"^0.3.1","eslint":"^6.0.1","html-webpack-plugin":"^3.2.0","jest":"^24.8.0","lodash":"^4.17.10","nyc":"^14.1.1","ramda":"^0.26.1","react":"^16.8.6","react-dom":"^16.8.6","rollup":"^1.16.6","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.1","rollup-plugin-typescript2":"^0.21.2","ts-jest":"^24.0.2","ts-loader":"^6.0.4","tslint":"^5.18.0","tslint-config-airbnb":"^5.11.0","tslint-loader":"^3.5.4","typescript":"^3.5.3","webpack":"^4.35.3","webpack-cli":"^3.3.5","webpack-dev-server":"^3.7.2"},"keywords":["immutable","functional"],"license":"MIT","homepage":"https://github.com/planttheidea/unchanged#readme","main":"dist/unchanged.cjs.js","module":"dist/unchanged.esm.js","name":"unchanged","repository":{"type":"git","url":"git+https://github.com/planttheidea/unchanged.git"},"scripts":{"benchmark":"npm run dist && NODE_ENV=production node ./benchmarks/index.js","build":"NODE_ENV=production rollup -c","clean":"rimraf dist","dev":"NODE_ENV=development webpack-dev-server --colors --progress --config=webpack/webpack.config.js","dist":"npm run clean && npm run build","lint":"NODE_ENV=test tslint 'src/*.ts'","lint:fix":"npm run lint -- --fix","prepublishOnly":"npm run lint && npm run typecheck && npm run test:coverage && npm run dist","release":"release-it","release:beta":"release-it --config=.release-it.beta.json","start":"npm run dev","test":"NODE_PATH=. jest","test:coverage":"npm run test -- --coverage","test:watch":"npm run test -- --watch","typecheck":"tsc --noEmit"},"sideEffects":false,"types":"dist/index.d.ts","version":"2.2.0","gitHead":"58c86f77bcedaf08dcc969cf9381f32b8894b9d5","_id":"unchanged@2.2.0","_nodeVersion":"10.16.0","_npmVersion":"6.9.2","dist":{"integrity":"sha512-L+MJNfyvFZkjw9WYRbmZBnYncBoASRNxE9eCm5SZWc2whdw19tPVigjJXNwu+/O+nCwp1kYYT8LX+jNuJakF9w==","shasum":"5e84623678e48c0052a613473d7468561b7fad66","tarball":"https://registry.npmjs.org/unchanged/-/unchanged-2.2.0.tgz","fileCount":14,"unpackedSize":257243,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJKDiCRA9TVsSAnZWagAAShAP/2GQRJsH/EAjkWvvGe1+\nuBtm07Uqdrde6kfBrKkAAAmQeRVOufmyZ7Zq4e4mak4aI72P79/fjmAoX3Rc\nz8V3P1R4WShJIJ9s+blglR/O8JIcFpJBXqsiMwwm5pVgldG4TZLC51SCYpcl\nuHwHowaMxaZ9gh3q9YmPExA33PiDjapsRVryhRSVpJ6DUCyXIL/+fpU+13Bg\nOYW4Mju3FnOmxXRFMFwK6GYvJ+zlzzSeXohSP+F9zSYg5J0blA6ChRgB3A2Y\n3T1hEbisG//hQybZOy9hPx6B86jmzv04FsJ3T5g7Nby6HYE7e+eeJ7EytJuE\nqMifUgr+zdPPBfYaJcsvZZxwVxkO4qyFx4N/xd8450vEChpEhAKvH4dy7o8A\nKrjDZYTdGlKaHSmBi0IOjZ3ntf4/KjQgTuw3DPNTAV19kW1iIW+cVkTis++1\n2GIOmN/vwLZS1JRW4jES3SWURyKE6z4X93ktGSTZNvgQWGFayQwmKWuAJp8F\nYcdGMtZqh5Dtqee0hm2YCbRdW53Ks2YfYJugPLQ+A1jSMPyE0UQdWFMhgzK1\nGXFkqRFDfEZYaUAfX49EfOsKt74TLf/iGYDWqwRwrjbxMIuCAPne7eZNGKV0\nreh8n0IC+J1b1fXB1VD8A8s2Re+MTHDCDdXj6pB/RQFJX7F9kLL3kET+UGGI\nXy5g\r\n=4te2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCTbKNd+TG54eWc8D8mHWalJYE4g5B9j+5l4+CKhbCPGAIhAKtIybReASXdIrpeIfujJrBQ20EarpU5ZoXEqXbBkU18"}]},"maintainers":[{"name":"planttheidea","email":"tony.quetano@planttheidea.com"}],"_npmUser":{"name":"planttheidea","email":"tony.quetano@planttheidea.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/unchanged_2.2.0_1562681569148_0.738171116351148"},"_hasShrinkwrap":false},"2.2.1":{"author":{"name":"tony_quetano@planttheidea.com"},"browser":"dist/unchanged.js","browserslist":["defaults","Explorer >= 9","Safari >= 6","Opera >= 15","iOS >= 8","Android >= 4"],"bugs":{"url":"https://github.com/planttheidea/unchanged/issues"},"dependencies":{"curriable":"^1.3.0","pathington":"^1.1.7"},"description":"A tiny, fast, unopinionated handler for updating JS objects and arrays immutably","devDependencies":{"@types/jest":"^24.0.20","@types/node":"^12.11.7","@types/ramda":"^0.26.33","@types/react":"^16.9.11","benchmark":"^2.1.4","cli-table":"^0.3.1","eslint":"^6.6.0","html-webpack-plugin":"^3.2.0","jest":"^24.9.0","lodash":"^4.17.10","nyc":"^14.1.1","ramda":"^0.26.1","react":"^16.11.0","react-dom":"^16.11.0","rollup":"^1.25.2","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.2","rollup-plugin-typescript2":"^0.24.3","ts-jest":"^24.1.0","ts-loader":"^6.2.1","tslint":"^5.20.0","tslint-config-airbnb":"^5.11.2","tslint-loader":"^3.5.4","typescript":"^3.6.4","webpack":"^4.41.2","webpack-cli":"^3.3.9","webpack-dev-server":"^3.9.0"},"keywords":["immutable","functional"],"license":"MIT","homepage":"https://github.com/planttheidea/unchanged#readme","main":"dist/unchanged.cjs.js","module":"dist/unchanged.esm.js","name":"unchanged","repository":{"type":"git","url":"git+https://github.com/planttheidea/unchanged.git"},"scripts":{"benchmark":"npm run dist && NODE_ENV=production node ./benchmarks/index.js","build":"NODE_ENV=production rollup -c","clean":"rimraf dist","dev":"NODE_ENV=development webpack-dev-server --colors --progress --config=webpack/webpack.config.js","dist":"npm run clean && npm run build","lint":"NODE_ENV=test tslint 'src/*.ts'","lint:fix":"npm run lint -- --fix","prepublishOnly":"npm run lint && npm run typecheck && npm run test:coverage && npm run dist","release":"release-it","release:beta":"release-it --config=.release-it.beta.json","start":"npm run dev","test":"NODE_PATH=. jest","test:coverage":"npm run test -- --coverage","test:watch":"npm run test -- --watch","typecheck":"tsc --noEmit"},"sideEffects":false,"types":"dist/index.d.ts","version":"2.2.1","gitHead":"244c6d5dedeb641d98349f175ade8b3e5de174b6","_id":"unchanged@2.2.1","_nodeVersion":"10.16.3","_npmVersion":"6.12.0","dist":{"integrity":"sha512-pMlMNfqtfjOVpDAKVBH+LjnhnTwWYUrJq9fU3nGRYrw6JnprJEH1/cehJikRTf+o6dmkpX5XRRspb5mUAhxeZQ==","shasum":"426f8b3c3b98a95a4acc801b0ba67babaabe1bec","tarball":"https://registry.npmjs.org/unchanged/-/unchanged-2.2.1.tgz","fileCount":14,"unpackedSize":294355,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdtC4xCRA9TVsSAnZWagAAnncQAKNtLB3EJMfz8YPVr4Pr\nd3Ev6kz4RnKWSR14N1dtLvAB4TEqbj0dkSoJVbf1Bajhja3KmWoluUGuhDwD\naNPsjQqQWVMmZf8Ro11dpRLh+ewQoRa6TXfFxYq7F1Af1HiwPIiKEd0mKDHR\niStLXZHbMFw4sIV8QkzX6NaLuZnGyEwgbAdITKxiLKPsZJ9ShXxdja50sCnU\ncn4+gvZJbxkodMjAHKowayk40d98vqddBIQeUseXRHxVpu6owsoCCgnY1dJ5\nUqMSsohIcHjwE36V8YEv0CQfUbuoA5ATo1iBrCld4JnDweMiZaYma++5vy3A\nLsNQuj1cS97I3QENP5ufYkFViIv9ucLJZxP3kpPjuDSbPtEPaXt7nL0njVWJ\n0+Hr2xZ4WfhZFrK8NosmGFvkVASa+7GN+rSMAdQxochOVGJxhCIb8/TyU9Gm\ndBHynDtjlDI6DTLALka/GCiNK/UANsVTAlZjS80mZC+R639qqOkhDFENWWxv\n+SQdum5MdaP8MPGo34pamGxzTzUz9ThQ6FKoteqQZZI915wlEkuo/LFHD9ea\n2iA8bQtTfn3MYWI74fA54EzjxKSLIl6rXyy5TOHZYu9eq97k6Z60kePlK59D\n+iuBO75eDYoewEPpJ3Zhss/FqFs054aRST1D9XxEkZ+s0aiKHPtmGVFdqd6e\nL4Eg\r\n=tS3t\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB3bfG+vTmTAdn2WTmrbGQOPapMR6qS/V2ACVXh58DaYAiBfA0+kyt0PpBlFF01o5GGyjw/nJuMunK0/eA/BMDEwqA=="}]},"maintainers":[{"name":"planttheidea","email":"tony.quetano@planttheidea.com"}],"_npmUser":{"name":"planttheidea","email":"tony.quetano@planttheidea.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/unchanged_2.2.1_1572089392562_0.1809223953110597"},"_hasShrinkwrap":false}},"readme":"# unchanged\n\nA tiny (~2.1kB minified+gzipped), [fast](https://github.com/planttheidea/unchanged/blob/master/benchmark_results.csv), unopinionated handler for updating JS objects and arrays immutably.\n\nSupports nested key paths via path arrays or [dotty syntax](https://github.com/planttheidea/pathington), and all methods are curriable (with placeholder support) for composability. Can be a drop-in replacement for the `lodash/fp` methods `get`, `set`, `merge`, and `omit` with a 90% smaller footprint.\n\n## Table of contents\n\n- [unchanged](#unchanged)\n  - [Table of contents](#Table-of-contents)\n  - [Usage](#Usage)\n  - [Types](#Types)\n  - [Standard methods](#Standard-methods)\n    - [get](#get)\n    - [getOr](#getOr)\n    - [set](#set)\n    - [remove](#remove)\n    - [has](#has)\n    - [is](#is)\n    - [not](#not)\n    - [add](#add)\n    - [merge](#merge)\n    - [assign](#assign)\n    - [call](#call)\n  - [Transform methods](#Transform-methods)\n    - [getWith](#getWith)\n    - [getWithOr](#getWithOr)\n    - [setWith](#setWith)\n    - [removeWith](#removeWith)\n    - [hasWith](#hasWith)\n    - [isWith](#isWith)\n    - [notWith](#notWith)\n    - [addWith](#addWith)\n    - [mergeWith](#mergeWith)\n    - [assignWith](#assignWith)\n    - [callWith](#callWith)\n  - [Additional objects](#Additional-objects)\n    - [\\_\\_](#)\n  - [Differences from other libraries](#Differences-from-other-libraries)\n    - [lodash](#lodash)\n    - [ramda](#ramda)\n    - [Other immutability libraries](#Other-immutability-libraries)\n  - [Browser support](#Browser-support)\n  - [Development](#Development)\n\n## Usage\n\n```typescript\nimport {\n  __,\n  add,\n  addWith,\n  assign,\n  assignWith,\n  call,\n  callWith,\n  get,\n  getWith,\n  getOr,\n  getWithOr,\n  has,\n  hasWith,\n  is,\n  isWith,\n  merge,\n  mergeWith,\n  remove,\n  removeWith,\n  set,\n  setWith\n} from \"unchanged\";\n\nconst object: unchanged.Unchangeable = {\n  foo: \"foo\",\n  bar: [\n    {\n      baz: \"quz\"\n    }\n  ]\n};\n\n// handle standard properties\nconst foo = get(\"foo\", object);\n\n// or nested properties\nconst baz = set(\"bar[0].baz\", \"not quz\", object);\n\n// all methods are curriable\nconst removeBaz = remove(\"bar[0].baz\");\nconst sansBaz = removeBaz(object);\n```\n\n**NOTE**: There is no `default` export, so if you want to import all methods to a single namespace you should use the `import *` syntax:\n\n```typescript\nimport * as uc from \"unchanged\";\n```\n\n## Types\n\nThis library is both written in, and provided with, types by TypeScript. The internal types used for specific parameters are scoped to the `unchanged` namespace.\n\n```typescript\n// the path used to compute nested locations\ntype Path = (number | string)[] | number | string;\n// the callback used in transform methods\ntype WithHandler = (value: any, ...extraParams: any[]) => any;\n// the generic object that is computed upon, either an array or object\ninterface Unchangeable {\n  [key: string]: any;\n  [index: number]: any;\n}\n```\n\nNotice in the `Unchangeable` interface, there is no reference to symbols. That is because to date, TypeScript does not support Symbols as an index type. If you need to use symbols as object keys, the best workaround I've found is to typecast when it complains:\n\n```typescript\nconst symbolKey = (Symbol(\"key\") as unknown) as string;\n\nconst object: { [symbolKey]: string } = {\n  [symbolKey]: \"bar\"\n};\n```\n\nIf there is a better alternative for having dynamic Symbol indices, let me know! Happy to accept any PRs from those more experienced in TypeScript than myself.\n\n## Standard methods\n\n### get\n\n```typescript\nfunction get(path: unchanged.Path, object: unchanged.Unchangeable): any;\n```\n\nGet the value at the `path` requested on the `object` passed.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  foo: [\n    {\n      bar: \"baz\"\n    }\n  ]\n};\n\nconsole.log(get(\"foo[0].bar\", object)); // baz\nconsole.log(get([\"foo\", 0, \"bar\"], object)); // baz\n```\n\n### getOr\n\n```typescript\nfunction getOr(\n  fallbackValue: any,\n  path: unchanged.Path,\n  object: unchanged.Unchangeable\n): any;\n```\n\nGet the value at the `path` requested on the `object` passed, with a fallback value if that path does not exist.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  foo: [\n    {\n      bar: \"baz\"\n    }\n  ]\n};\n\nconsole.log(getOr(\"blah\", \"foo[0].bar\", object)); // baz\nconsole.log(getOr(\"blah\", [\"foo\", 0, \"bar\"], object)); // baz\nconsole.log(getOr(\"blah\", \"foo[0].nonexistent\", object)); // blah\n```\n\n### set\n\n```typescript\nfunction set(\n  path: unchanged.Path,\n  value: any,\n  object: unchanged.Unchangeable\n): unchanged.Unchangeable;\n```\n\nReturns a new object based on the `object` passed, with the `value` assigned to the final key on the `path` specified.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  foo: [\n    {\n      bar: \"baz\"\n    }\n  ]\n};\n\nconsole.log(set(\"foo[0].bar\", \"quz\", object)); // {foo: [{bar: 'quz'}]}\nconsole.log(set([\"foo\", 0, \"bar\"], \"quz\", object)); // {foo: [{bar: 'quz'}]}\n```\n\n### remove\n\n```typescript\nfunction remove(\n  path: unchanged.Path,\n  object: unchanged.Unchangeable\n): unchanged.Unchangeable;\n```\n\nReturns a new object based on the `object` passed, with the final key on the `path` removed if it exists.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  foo: [\n    {\n      bar: \"baz\"\n    }\n  ]\n};\n\nconsole.log(remove(\"foo[0].bar\", object)); // {foo: [{}]}\nconsole.log(remove([\"foo\", 0, \"bar\"], object)); // {foo: [{}]}\n```\n\n### has\n\n```typescript\nfunction has(path: unchanged.Path, object: unchanged.Unchangeable): boolean;\n```\n\nReturns `true` if the object has the path provided, `false` otherwise.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  foo: [\n    {\n      bar: \"baz\"\n    }\n  ]\n};\n\nconsole.log(has(\"foo[0].bar\", object)); // true\nconsole.log(has([\"foo\", 0, \"bar\"], object)); // true\nconsole.log(has(\"bar\", object)); // false\n```\n\n### is\n\n```typescript\nfunction is(\n  path: unchanged.Path,\n  value: any,\n  object: unchanged.Unchangeable\n): boolean;\n```\n\nReturns `true` if the value at the `path` in `object` is equal to `value` based on [SameValueZero](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#Same-value-zero_equality) equality, `false` otherwise.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  foo: [\n    {\n      bar: \"baz\"\n    }\n  ]\n};\n\nconsole.log(is(\"foo[0].bar\", \"baz\", object)); // true\nconsole.log(is([\"foo\", 0, \"bar\"], \"baz\", object)); // true\nconsole.log(is(\"foo[0].bar\", \"quz\", object)); // false\n```\n\n### not\n\n```typescript\nfunction not(\n  path: unchanged.Path,\n  value: any,\n  object: unchanged.Unchangeable\n): boolean;\n```\n\nReturns `false` if the value at the `path` in `object` is equal to `value` based on [SameValueZero](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#Same-value-zero_equality) equality, `true` otherwise.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  foo: [\n    {\n      bar: \"baz\"\n    }\n  ]\n};\n\nconsole.log(not(\"foo[0].bar\", \"baz\", object)); // false\nconsole.log(not([\"foo\", 0, \"bar\"], \"baz\", object)); // false\nconsole.log(not(\"foo[0].bar\", \"quz\", object)); // true\n```\n\n### add\n\n```typescript\nfunction add(\n  path: unchanged.Path,\n  value: any,\n  object: unchanged.Unchangeable\n): unchanged.Unchangeable;\n```\n\nReturns a new object based on the `object` passed, with the `value` added at the `path` specified. This can have different behavior depending on whether the item is an object or an array; objects will simply add / set the key provided, whereas arrays will add a new value to the end.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  foo: [\n    {\n      bar: 'baz'\n    }\n  ]\n};\n\n// object\nconsole.log(add('foo', 'added value' object)); // {foo: [{bar: 'baz'}, 'added value']}\nconsole.log(add(['foo'], 'added value', object)); // {foo: [{bar: 'baz'}, 'added value']}\n\n// array\nconsole.log(add('foo[0].quz', 'added value' object)); // {foo: [{bar: 'baz', quz: 'added value'}]}\nconsole.log(add(['foo', 0, 'quz'], 'added value', object)); // {foo: [{bar: 'baz', quz: 'added value'}]}\n```\n\nNotice that the `Object` usage is idential to the `set` method, where a key needs to be specified for assignment. In the case of an `Array`, however, the value is pushed to the array at that key.\n\n**NOTE**: If you want to add an item to a top-level array, pass `null` as the key:\n\n```typescript\nconst object = [\"foo\"];\n\nconsole.log(add(null, \"bar\", object)); // ['foo', 'bar']\n```\n\n### merge\n\n```typescript\nfunction merge(\n  path: unchanged.Path,\n  value: unchanged.Unchangeable,\n  object: unchanged.Unchangeable\n): unchanged.Unchangeable;\n```\n\nReturns a new object that is a deep merge of `value` into `object` at the `path` specified. If you want to perform a shallow merge, see [`assign`](#assign).\n\n```typescript\nconst object1: unchanged.Unchangeable = {\n  foo: \"bar\",\n  baz: {\n    one: \"value1\",\n    deeply: {\n      nested: \"value\",\n      untouched: true\n    },\n    two: \"value2\"\n  }\n};\nconst object2: unchanged.Unchangeable = {\n  one: \"new value\",\n  deeply: {\n    nested: \"other value\"\n  },\n  three: \"value3\"\n};\n\nconsole.log(merge(\"baz\", object2, object1));\n/*\n{\n  foo: 'bar',\n  baz: {\n    one: 'new value',\n    deeply: {\n      nested: 'other value',\n      untouched: true,\n    },\n    two: 'value2',\n    three: 'value3\n  }\n}\n```\n\n**NOTE**: If you want to `merge` the entirety of both objects, pass `null` as the key:\n\n```typescript\nconsole.log(merge(null, object2, object1));\n/*\n{\n  foo: \"bar\",\n  baz: {\n    one: \"value1\",\n    deeply: {\n      nested: \"value\",\n      untouched: true\n    },\n    two: \"value2\"\n  },\n  one: \"new value\",\n  deeply: {\n    nested: \"other value\"\n  },\n  three: \"value3\"\n}\n*/\n```\n\n### assign\n\n```typescript\nfunction assign(\n  path: unchanged.Path,\n  value: unchanged.Unchangeable,\n  object: unchanged.Unchangeable\n): unchanged.Unchangeable;\n```\n\nReturns a new object that is a shallow merge of `value` into `object` at the `path` specified. If you want to perform a deep merge, see [`merge`](#merge).\n\n```typescript\nconst object1: unchanged.Unchangeable = {\n  foo: \"bar\",\n  baz: {\n    one: \"value1\",\n    deeply: {\n      nested: \"value\",\n      untouched: true\n    },\n    two: \"value2\"\n  }\n};\nconst object2: unchanged.Unchangeable = {\n  one: \"new value\",\n  deeply: {\n    nested: \"other value\"\n  },\n  three: \"value3\"\n};\n\nconsole.log(assign(\"baz\", object2, object1));\n/*\n{\n  foo: 'bar',\n  baz: {\n    one: 'new value',\n    deeply: {\n      nested: 'other value',\n    },\n    two: 'value2',\n    three: 'value3\n  }\n}\n```\n\n**NOTE**: If you want to `assign` the entirety of both objects, pass `null` as the key:\n\n```typescript\nconsole.log(assign(null, object2, object1));\n/*\n{\n  foo: \"bar\",\n  baz: {\n    one: \"value1\",\n    deeply: {\n      nested: \"value\",\n      untouched: true\n    },\n    two: \"value2\"\n  },\n  one: \"new value\",\n  deeply: {\n    nested: \"other value\"\n  },\n  three: \"value3\"\n}\n*/\n```\n\n### call\n\n```typescript\nfunction call(\n  path: unchanged.Path,\n  parameters: any[],\n  object: unchanged.Unchangeable,\n  context?: any = object\n): any;\n```\n\nCall the method at the `path` requested on the `object` passed, and return what it's call returns.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  foo: [\n    {\n      bar(a, b) {\n        return a + b;\n      }\n    }\n  ]\n};\n\nconsole.log(call(\"foo[0].bar\", [1, 2], object)); // 3\nconsole.log(call([\"foo\", 0, \"bar\"], [1, 2], object)); // 3\n```\n\nYou can also provide an optional fourth parameter of `context`, which will be the `this` value in the method call. This will default to the `object` itself.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  calculate: true,\n  foo: [\n    {\n      bar(a, b) {\n        return this.calculate ? a + b : 0;\n      }\n    }\n  ]\n};\n\nconsole.log(call(\"foo[0].bar\", [1, 2], object)); // 3\nconsole.log(call(\"foo[0].bar\", [1, 2], object, {})); // 0\n```\n\n**NOTE**: Because `context` is optional, it cannot be independently curried; you must apply it in the call when the `object` is passed.\n\n## Transform methods\n\nEach standard method has it's own related `With` method, which accepts a callback `fn` as the first curried parameter. In most cases this callback serves as a transformer for the value retrieved, set, merged, etc.; the exception is `removeWith`, where the callback serves as a validator as to whether to remove or not.\n\nThe signature of all callbacks is the `withHandler` specified in [`Types`](#types). Because `extraParams` are optional parameters, they cannot be independently curried; you must apply them in the call when the `object` is passed.\n\n### getWith\n\n```typescript\nfunction getWith(\n  fn: unchanged.withHandler,\n  path: unchanged.Path,\n  object: unchanged.Unchangeable,\n  ...extraParams?: any[]\n): any;\n```\n\nGet the return value of `fn` based on the value at the `path` requested on the `object` passed. `fn` is called with the current value at the `path` as the first parameter, and any additional parameters passed as `extraParams` following that.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  foo: [\n    {\n      bar: \"baz\"\n    }\n  ]\n};\nconst fn: unchanged.withHandler = (value: any, nullValue: any): any =>\n  currentValue === nullValue ? null : currentValue;\n\nconsole.log(getWith(fn, \"foo[0].bar\", object)); // 'baz'\nconsole.log(getWith(fn, \"foo[0].bar\", object, \"baz\")); // null\nconsole.log(getWith(fn, [\"foo\", 0, \"bar\"], object)); // 'baz'\nconsole.log(getWith(fn, [\"foo\", 0, \"bar\"], object, \"baz\")); // null\n```\n\n### getWithOr\n\n```typescript\nfunction getWithOr(\n  fn: unchanged.withHandler,\n  fallbackValue: any,\n  path: unchanged.Path,\n  object: unchanged.Unchangeable,\n  ...extraParams?: any[]\n): any;\n```\n\nGet the return value of `fn` based on the value at the `path` requested on the `object` passed, falling back to `fallbackValue` when no match is found at `path`. When a match is found, `fn` is called with the current value at the `path` as the first parameter, and any additional parameters passed as `extraParams` following that.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  foo: [\n    {\n      bar: \"baz\"\n    }\n  ]\n};\nconst fn: unchanged.withHandler = (value: any, nullValue: any): any =>\n  currentValue === nullValue ? null : currentValue;\n\nconsole.log(getWithOr(fn, \"quz\", \"foo[0].bar\", object)); // 'baz'\nconsole.log(getWithOr(fn, \"quz\", \"foo[0].bar\", object, \"baz\")); // null\nconsole.log(getWithOr(fn, \"quz\", \"foo[0].notFound\", object, \"baz\")); // 'quz'\nconsole.log(getWithOr(fn, \"quz\", [\"foo\", 0, \"bar\"], object)); // 'baz'\nconsole.log(getWithOr(fn, \"quz\", [\"foo\", 0, \"bar\"], object, \"baz\")); // null\nconsole.log(getWithOr(fn, \"quz\", [\"foo\", 0, \"notFound\"], object, \"baz\")); // 'quz'\n```\n\n### setWith\n\n```typescript\nfunction setWith(\n  fn: unchanged.withHandler,\n  path: unchanged.Path,\n  object: unchanged.Unchangeable,\n  ...extraParams?: any[]\n): unchanged.Unchangeable;\n```\n\nReturns a new object based on the `object` passed, with the return value of `fn` assigned to the final key on the `path` specified. `fn` is called with the current value at the `path` as the first parameter, and any additional parameters passed as `extraParams` following that.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  foo: [\n    {\n      bar: \"baz\"\n    }\n  ]\n};\nconst fn: unchanged.withHandler = (value: any, preventUpdate: boolean): any =>\n  preventUpdate ? currentValue : \"quz\";\n\nconsole.log(setWith(fn, \"foo[0].bar\", object)); // {foo: [{bar: 'quz'}]}\nconsole.log(setWith(fn, \"foo[0].bar\", object, true)); // {foo: [{bar: 'baz'}]}\nconsole.log(setWith(fn, [\"foo\", 0, \"bar\"], object)); // {foo: [{bar: 'quz'}]}\nconsole.log(setWith(fn, [\"foo\", 0, \"bar\"], object, true)); // {foo: [{bar: 'baz'}]}\n```\n\n### removeWith\n\n```typescript\nfunction removeWith(\n  fn: unchanged.withHandler,\n  path: unchanged.Path,\n  object: unchanged.Unchangeable,\n  ...extraParams?: any[]\n): unchanged.Unchangeable;\n```\n\nReturns a new object based on the `object` passed, with the final key on the `path` removed if it exists and the return from `fn` is truthy.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  foo: [\n    {\n      bar: \"baz\"\n    }\n  ]\n};\nconst fn: unchanged.withHandler = (\n  value: any,\n  shouldNotRemove: boolean\n): boolean => !shouldNotRemove && value === \"baz\";\n\nconsole.log(removeWith(fn, \"foo[0].bar\", object)); // {foo: [{}]}\nconsole.log(removeWith(fn, \"foo[0].bar\", object, true)); // {foo: [{bar: 'baz'}]}\nconsole.log(removeWith([fn, \"foo\", 0, \"bar\"], object)); // {foo: [{}]}\nconsole.log(removeWith([fn, \"foo\", 0, \"bar\"], object, true)); // {foo: [{bar: 'baz'}]}\n```\n\n### hasWith\n\n```typescript\nfunction hasWith(\n  fn: unchanged.withHandler,\n  path: unchanged.Path,\n  object: unchanged.Unchangeable,\n  ...extraParams?: any[]\n): boolean;\n```\n\nReturns `true` if the return value of `fn` based on the value returned from `path` in the `object` returns truthy, `false` otherwise.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  foo: [\n    {\n      bar: \"baz\"\n    }\n  ]\n};\nconst fn: unchanged.withHandler = (\n  value: any,\n  shouldBeNull: boolean\n): boolean => (shouldBeNull ? value === null : value === \"baz\");\n\nconsole.log(hasWith(fn, \"foo[0].bar\", object)); // true\nconsole.log(hasWith(fn, \"foo[0].bar\", object, true)); // false\nconsole.log(hasWith(fn, [\"foo\", 0, \"bar\"], object)); // true\nconsole.log(hasWith(fn, [\"foo\", 0, \"bar\"], object, true)); // false\nconsole.log(hasWith(fn, \"bar\", object)); // false\n```\n\n### isWith\n\n```typescript\nfunction isWith(\n  fn: unchanged.withHandler,\n  path: unchanged.Path,\n  object: unchanged.Unchangeable\n): boolean;\n```\n\nReturns `true` if the return value of `fn` based on the value returned from `path` in the `object` is equal to `value` based on [SameValueZero](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#Same-value-zero_equality) equality, `false` otherwise.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  foo: [\n    {\n      bar: \"baz\",\n      quz: \"not baz\"\n    }\n  ]\n};\nconst fn: unchanged.withHandler = (value: any): number =>\n  value && value.length === 3;\n\nconsole.log(isWith(fn, \"foo[0].bar\", object)); // true\nconsole.log(isWith(fn, [\"foo\", 0, \"bar\"], object)); // true\nconsole.log(isWith(fn, \"foo[0].quz\", object)); // false\n```\n\n### notWith\n\n```typescript\nfunction notWith(\n  fn: unchanged.withHandler,\n  path: unchanged.Path,\n  object: unchanged.Unchangeable\n): boolean;\n```\n\nReturns `false` if the return value of `fn` based on the value returned from `path` in the `object` is equal to `value` based on [SameValueZero](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#Same-value-zero_equality) equality, `true` otherwise.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  foo: [\n    {\n      bar: \"baz\",\n      quz: \"not baz\"\n    }\n  ]\n};\nconst fn: unchanged.withHandler = (value: any): number =>\n  value && value.length === 3;\n\nconsole.log(notWith(fn, \"foo[0].bar\", object)); // false\nconsole.log(notWith(fn, [\"foo\", 0, \"bar\"], object)); // false\nconsole.log(notWith(fn, \"foo[0].quz\", object)); // true\n```\n\n### addWith\n\n```typescript\nfunction addWith(\n  fn: unchanged.withHandler,\n  path: unchanged.Path,\n  object: unchanged.Unchangeable\n): unchanged.Unchangeable;\n```\n\nReturns a new object based on the `object` passed, with the return value of `fn` added at the `path` specified. This can have different behavior depending on whether the item is an object or an array; objects will simply add / set the key provided, whereas arrays will add a new value to the end.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  foo: [\n    {\n      bar: \"baz\"\n    }\n  ]\n};\nconst fn: unchanged.withHandler = (value: any) =>\n  value\n    ? value\n        .split(\"\")\n        .reverse()\n        .join(\"\")\n    : \"new value\";\n\n// object\nconsole.log(addWith(fn, \"foo\", object)); // {foo: [{bar: 'baz'}, 'new value']}\nconsole.log(addWith(fn, [\"foo\"], object)); // {foo: [{bar: 'baz'}, 'new value']}\n\n// array\nconsole.log(addWith(fn, \"foo[0].bar\", object)); // {foo: [{bar: 'zab'}]}\nconsole.log(addWith(fn, [\"foo\", 0, \"bar\"], object)); // {foo: [{bar: 'zab''}]}\n```\n\n### mergeWith\n\n```typescript\nfunction mergeWith(\n  fn: unchanged.withHandler,\n  path: unchanged.Path,\n  object: unchanged.Unchangeable\n): unchanged.Unchangeable;\n```\n\nReturns a new object that is a deep merge of the return value of `fn` into `object` at the `path` specified if a valid mergeable object, else returns the original object. If you want to perform a shallow merge, see [`assignWith`](#assignwith).\n\n```typescript\nconst object1: unchanged.Unchangeable = {\n  foo: \"bar\",\n  baz: {\n    one: \"value1\",\n    deeply: {\n      nested: \"value\",\n      untouched: true\n    },\n    two: \"value2\"\n  }\n};\nconst object2: unchanged.Unchangeable = {\n  one: \"new value\",\n  deeply: {\n    nested: \"other value\"\n  },\n  three: \"value3\"\n};\nconst fn: unchanged.withHandler = (value: any) =>\n  value && value.one === \"value1\" ? object2 : null;\n\nconsole.log(mergeWith(fn, \"baz\", object1));\n/*\n{\n  foo: 'bar',\n  baz: {\n    one: 'new value',\n    deeply: {\n      nested: 'other value',\n      untouched: true,\n    },\n    two: 'value2',\n    three: 'value3\n  }\n}\n*/\nconsole.log(mergeWith(fn, \"baz.deeply\", object1));\n/*\n// untouched object1\n{\n  foo: \"bar\",\n  baz: {\n    one: \"value1\",\n    deeply: {\n      nested: 'value',\n      untouched: true,\n    },\n    two: \"value2\"\n  }\n}\n*/\n```\n\n**NOTE**: If you want to `merge` the entirety of both objects, pass `null` as the key:\n\n```typescript\nconsole.log(mergeWith(fn, null, object1));\n/*\n{\n  foo: \"bar\",\n  baz: {\n    one: \"value1\",\n    deeply: {\n      nested: \"value\",\n      untouched: true\n    },\n    two: \"value2\"\n  },\n  one: \"new value\",\n  deeply: {\n    nested: \"other value\"\n  },\n  three: \"value3\"\n}\n*/\n```\n\n### assignWith\n\n```typescript\nfunction assignWith(\n  fn: unchanged.withHandler,\n  path: unchanged.Path,\n  object: unchanged.Unchangeable\n): unchanged.Unchangeable;\n```\n\nReturns a new object that is a shallow merge of the return value of `fn` into `object` at the `path` specified if a valid mergeable object, else returns the original object. If you want to perform a deep merge, see [`mergeWith`](#mergeWith).\n\n```typescript\nconst object1: unchanged.Unchangeable = {\n  foo: \"bar\",\n  baz: {\n    one: \"value1\",\n    deeply: {\n      nested: \"value\",\n      untouched: true\n    },\n    two: \"value2\"\n  }\n};\nconst object2: unchanged.Unchangeable = {\n  one: \"new value\",\n  deeply: {\n    nested: \"other value\"\n  },\n  three: \"value3\"\n};\nconst fn: unchanged.withHandler = (value: any) =>\n  value && value.one === \"value1\" ? object2 : null;\n\nconsole.log(assignWith(fn, \"baz\", object1));\n/*\n{\n  foo: 'bar',\n  baz: {\n    one: 'new value',\n    deeply: {\n      nested: 'other value',\n    },\n    two: 'value2',\n    three: 'value3\n  }\n}\n*/\nconsole.log(assignWith(fn, \"baz.deeply\", object1));\n/*\n// untouched object1\n{\n  foo: \"bar\",\n  baz: {\n    one: \"value1\",\n    deeply: {\n      nested: 'value',\n      untouched: true,\n    },\n    two: \"value2\"\n  }\n}\n*/\n```\n\n### callWith\n\n```typescript\nfunction callWith(\n  path: unchanged.Path,\n  parameters: any[],\n  object: unchanged.Unchangeable,\n  context?: any = object\n): any;\n```\n\nCall the method returned from `fn` based on the `path` specified on the `object`, and if a function return what it's call returns.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  foo: [\n    {\n      bar(a, b) {\n        return a + b;\n      }\n    }\n  ]\n};\nconst fn: unchanged.withHandler = (value: any): any =>\n  typeof value === fn\n    ? fn\n    : () =>\n        console.error(\"Error: Requested call of a method that does not exist.\");\n\nconsole.log(callWith(fn, \"foo[0].bar\", [1, 2], object)); // 3\nconsole.log(callWith(fn, [\"foo\", 0, \"bar\"], [1, 2], object)); // 3\ncallWith(fn, \"foo[1].nope\", object); // Error: Requested call of a method that does not exist.\n```\n\nYou can also provide an optional fourth parameter of `context`, which will be the `this` value in the method call. This will default to the `object` itself.\n\n```typescript\nconst object: unchanged.Unchangeable = {\n  calculate: true,\n  foo: [\n    {\n      bar(a, b) {\n        return this.calculate ? a + b : 0;\n      }\n    }\n  ]\n};\nconst fn: unchanged.withHandler = (value: any): any =>\n  typeof value === fn\n    ? fn\n    : () =>\n        console.error(\"Error: Requested call of a method that does not exist.\");\n\nconsole.log(callWith(fn, \"foo[0].bar\", [1, 2], object)); // 3\nconsole.log(callWith(fn, \"foo[0].bar\", [1, 2], object, {})); // 0\n```\n\n**NOTE**: Because `context` is optional, it cannot be independently curried; you must apply it in the call when the `object` is passed.\n\n## Additional objects\n\n### \\_\\_\n\nA placeholder value used to identify \"gaps\" in a curried function, allowing for earlier application of arguments later in the argument order.\n\n```typescript\nimport {__, set} from 'unchanged';\n\nconst thing = {\n  foo: 'foo';\n};\n\nconst setFoo = set('foo', __, thing);\n\nsetFooOnThing('bar');\n```\n\n## Differences from other libraries\n\n### lodash\n\n[`lodash/fp`](https://lodash.com/) (the functional programming implementation of `lodash`) is identical in implementation to `unchanged`'s methods, just with a _10.5x_ larger footprint. These methods should map directly:\n\n- _lodash/fp_ => _unchanged_\n- `curry.placeholder` => `__`\n- `get` => `get`\n- `getOr` => `getOr`\n- `merge` => `merge`\n- `omit` => `remove`\n- `set` => `set`\n\n### ramda\n\n[`ramda`](http://ramdajs.com/) is similar in its implementation, however the first big difference is that dot-bracket syntax is not supported by `ramda`, only path arrays. The related methods are:\n\n- _ramda_ => _unchanged_\n- `__` => `__`\n- `path` => `get`\n- `pathOr` => `getOr`\n- `merge` => `merge`\n- `omit` => `remove`\n- `assocPath` => `set`\n\nAnother difference is that the `ramda` methods that clone (`assocPath`, for example) only work with objects; arrays are implicitly converted into objects, which can make updating collections challenging.\n\nThe last main difference is the way that objects are copied, example:\n\n```typescript\nfunction Foo(value) {\n  this.value = value;\n}\n\nFoo.prototype.getValue = function() {\n  return this.value;\n};\n\nconst foo = new Foo(\"foo\");\n\n// in ramda, both own properties and prototypical methods are copied to the new object as own properties\nconst ramdaResult = assoc(\"bar\", \"baz\", foo);\n\nconsole.log(ramdaResult); // {value: 'foo', bar: 'baz', getValue: function getValue() { return this.value; }}\nconsole.log(ramdaResult instanceof Foo); // false\n\n// in unchanged, the prototype of the original object is maintained, and only own properties are copied as own properties\nconst unchangedResult = set(\"bar\", \"baz\", foo);\n\nconsole.log(unchangedResult); // {value: 'foo', bar: 'baz'}\nconsole.log(unchangedResult instanceof Foo); // true\n```\n\nThis can make `ramda` more performant in certain scenarios, but at the cost of having potentially unexpected behavior.\n\n### Other immutability libraries\n\nThis includes popular solutions like [Immutable.js](https://facebook.github.io/immutable-js/), [seamless-immutable](https://github.com/rtfeldman/seamless-immutable), [mori](http://swannodette.github.io/mori/), etc. These solutions all work well, but with one caveat: _you need to buy completely into their system_. Each of these libraries redefines how the objects are stored internally, and require that you learn a new, highly specific API to use these custom objects. `unchanged` is unopinionated, accepting standard JS objects and returning standard JS objects, no transformation or learning curve required.\n\n## Browser support\n\n- Chrome (all versions)\n- Firefox (all versions)\n- Edge (all versions)\n- Opera 15+\n- IE 9+\n- Safari 6+\n- iOS 8+\n- Android 4+\n\n## Development\n\nStandard stuff, clone the repo and `npm install` dependencies. The npm scripts available:\n\n- `benchmark` => run benchmark suite comparing top-level and deeply-nested `get` and `set` operations with `lodash` and `ramda`\n- `build` => run `rollup` to build `dist` files for CommonJS, ESM, and UMD consumers\n- `clean` => run `rimraf` on the `dist` folder\n- `dev` => run webpack dev server to run example app / playground\n- `dist` => runs `clean` and `build`\n- `lint` => run ESLint against all files in the `src` folder\n- `lint:fix` => run `lint` with autofixing applied\n- `prepublish` => runs `prepublish:compile` when publishing\n- `prepublish:compile` => run `lint`, `test:coverage`, `dist`\n- `test` => run AVA test functions with `NODE_ENV=test`\n- `test:coverage` => run `test` but with `nyc` for coverage checker\n- `test:watch` => run `test`, but with persistent watcher\n","maintainers":[{"name":"planttheidea","email":"tony.quetano@planttheidea.com"}],"time":{"modified":"2022-05-22T17:47:50.946Z","created":"2017-12-21T14:30:21.689Z","1.0.0":"2017-12-21T14:30:21.689Z","1.0.1":"2017-12-21T17:13:25.349Z","1.0.2":"2017-12-22T22:26:40.041Z","1.0.3":"2017-12-24T21:04:04.933Z","1.0.4":"2017-12-25T08:49:01.290Z","1.0.5":"2018-02-02T10:52:09.777Z","1.0.6":"2018-02-11T13:02:44.058Z","1.0.7":"2018-03-06T12:14:13.197Z","1.1.0":"2018-03-17T04:15:49.614Z","1.2.0":"2018-03-20T00:46:08.396Z","1.2.1":"2018-03-21T12:28:42.973Z","1.3.0":"2018-05-26T21:05:29.317Z","1.3.1":"2018-05-26T21:07:56.361Z","1.3.2":"2018-07-07T12:16:34.957Z","1.3.3":"2018-07-20T08:20:57.409Z","1.4.0":"2018-08-18T13:43:33.642Z","1.4.1":"2018-09-19T01:41:32.973Z","1.4.2":"2018-09-19T01:53:38.173Z","1.5.0":"2018-09-20T06:22:22.021Z","1.5.1":"2018-12-28T17:55:07.669Z","1.5.2":"2018-12-28T19:59:32.624Z","2.0.0":"2019-01-07T14:39:50.596Z","2.0.1":"2019-01-10T11:11:07.041Z","2.1.0":"2019-01-20T22:20:25.155Z","2.2.0-beta.0":"2019-07-09T14:07:43.479Z","2.2.0":"2019-07-09T14:12:49.307Z","2.2.1":"2019-10-26T11:29:52.720Z"},"homepage":"https://github.com/planttheidea/unchanged#readme","keywords":["immutable","functional"],"repository":{"type":"git","url":"git+https://github.com/planttheidea/unchanged.git"},"author":{"name":"tony_quetano@planttheidea.com"},"bugs":{"url":"https://github.com/planttheidea/unchanged/issues"},"license":"MIT","readmeFilename":"README.md","users":{"shanewholloway":true}}