{"_id":"mobx-collection-watch","_rev":"42-940d74deff21d221b647efd79fabab1e","name":"mobx-collection-watch","dist-tags":{"latest":"4.0.0"},"versions":{"1.0.0":{"name":"mobx-collection-watch","version":"1.0.0","private":false,"description":"## Install","main":"dist/cjs/index.js","module":"dist/unpkg/mylib.esm.js","unpkg":"dist/unpkg/mylib.js","jsdelivr":"dist/unpkg/mylib.js","sideEffects":false,"types":"dist/types/","directories":{"test":"tests"},"scripts":{"prepublishOnly":"npm run build","semantic-release":"semantic-release","cz":"git-cz","fix:src":"eslint --fix \"./src/**/*.{js,jsx,ts,tsx}\"","fix:tests":"eslint --fix \"./tests/**/*.{js,jsx,ts,tsx}\"","fix":"npm-run-all -p fix:*","docs":"del docs/api && typedoc --theme markdown --readme none --excludePrivate --excludeNotExported --out docs/api ./src","test":"cross-env  BABEL_ENV=test jest --verbose --coverage --no-cache","test:watch":"cross-env BABEL_ENV=test jest --watch","test:ci":"npm run type-check && jest --runInBand --ci --reporters=default --reporters=jest-junit --coverage --coverageDirectory=coverage","type-check":"tsc -p tsconfig.check-types.json","type-check:watch":"npm run type-check -- --watch","build:types":"del dist/types && tsc -p tsconfig.build-types.json","build:browser":"del dist/unpkg && rollup -c","build:cjs":"del dist/cjs && cross-env BABEL_ENV=cjs babel src --out-dir dist/cjs --extensions \".ts,.tsx,js,jsx\" --source-maps --verbose","build:esm":"del dist/esm && cross-env BABEL_ENV=esm babel src --out-dir dist/esm --extensions \".ts,.tsx,js,jsx\" --source-maps","build":"npm run build:types && npm run build:cjs && npm run build:esm && npm run build:browser","build:watch":"npm run build:cjs -- --watch"},"jest-junit":{"outputDirectory":"./reports/junit","outputName":"test-results.xml"},"config":{"commitizen":{"path":"cz-conventional-changelog"}},"repository":{"type":"git","url":"git+https://github.com/ivandotv/mobx-collection-watch.git"},"bugs":{"url":"https://github.com/ivandotv/mobx-collection-watch"},"homepage":"https://github.com/ivandotv/mobx-collection-watch","keywords":["mobx","array","watch"],"author":{"name":"Ivan Vlatkovic"},"dependencies":{},"devDependencies":{"@babel/cli":"^7.8.4","@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-typescript":"^7.8.3","@babel/types":"^7.8.7","@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@size-limit/preset-small-lib":"^4.2.1","@types/jest":"^25.1.4","@types/lodash-es":"^4.17.3","@types/lodash.filter":"^4.6.6","@types/lodash.orderby":"^4.6.6","@types/lodash.shuffle":"^4.2.6","@types/node":"^13.9.0","@typescript-eslint/eslint-plugin":"^2.22.0","@typescript-eslint/parser":"^2.22.0","babel-plugin-dev-expression":"^0.2.2","babel-plugin-transform-define":"^2.0.0","babel-preset-minify":"^0.5.1","commitizen":"^4.0.3","core-js":"^3.6.4","cross-env":"^7.0.2","cz-conventional-changelog":"^3.1.0","del-cli":"^3.0.0","eslint-config-prettier":"^6.10.0","eslint-plugin-prettier":"^3.1.2","husky":"^4.2.3","jest":"^25.1.0","jest-junit":"^10.0.0","jest-watch-typeahead":"^0.4.2","lint-staged":"^10.0.8","mobx":"^5.15.4","nodemon":"^2.0.2","npm-run-all":"^4.1.5","prettier":"^1.19.1","prettier-standard":"^16.2.1","rollup":"^2.0.2","rollup-plugin-babel":"^4.4.0","rollup-plugin-filesize":"^6.2.1","rollup-plugin-peer-deps-external":"^2.2.2","rollup-plugin-terser":"^5.2.0","standardx":"^5.0.0","typedoc":"^0.17.0","typedoc-plugin-markdown":"^2.2.17","typescript":"^3.8.3","semantic-release":"^17.0.4"},"peerDependencies":{"mobx":"^5.15.4"},"gitHead":"13d22f274ed64428585251769d5f4b6c10dd6091","_id":"mobx-collection-watch@1.0.0","_nodeVersion":"12.16.1","_npmVersion":"6.14.2","dist":{"integrity":"sha512-npbhqk62A8usBWkETgDQ2yRxIHzw+oBz642TGLHmsUR7IYrBI2tWTgXwr2bFEb51UHVphmN+TtKboxoRQnBuFQ==","shasum":"7bf8c2e55386501f1a6bbe862d23e7e4a43eb2e7","tarball":"https://registry.npmjs.org/mobx-collection-watch/-/mobx-collection-watch-1.0.0.tgz","fileCount":101,"unpackedSize":668165,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJec7o3CRA9TVsSAnZWagAAwQUQAJX1+jOWNjILSBIOPXso\nFZ6obMniketPWcZF8SRkog1Dpi9QfemSL+8L1aHJTIofymntcih85IXMOPEO\nd59Dzs0qh3Os/RbHiL5zNyCdxms+m5sAiD3nhMU5OIvvjlf+Sf29Srl9fYl9\nCIYJhXlloYWSVX56ZYEuUYMBR8SsC4YnrxoNickmo1pXLy5D3k6q4KQytKz9\nuLEwpWTYgutpqyG+vAKEqCbn7K756y5mJv0d6qkNZQdvbZqIZH2/WHH9CGJf\nqeywBqZ83THiq74vJi6HW45m2Q4G9wLyFYhyC45JW+6NpDyMYRHNe4qdl/OI\nuhCjqB7ikuirlGLocTqv9wJHb1fOTnOvdyExkTymfaRFl7+mZE3WrT7/Cc8h\n09S98aMJS8CreAPVdNvhq0FqRzLcJBSiou702ycoedkv+EB9BII22dkV2Ayb\nY2lV5e1GEMmyLjbO5dKIR4LF0EFPsOrh0pAZ3nNMGtG36/11B7zimcbHQVTu\nW1LRt9+MxDkwQV2O/twVx9IOqeFEdNmmpP1uB+apf83RsXKqRlpW2zStXkj2\nwvqSzNOk+wBZOi2ie8GeO8YM4CZGvRC3xUPQXpwm721etpiIerGuELvx4dqD\n37h/BeJgN/HrNghljMCtyxD41lfGHyzOfeeISbCKwXPBx/08gPav+y2F1gTd\nUwG/\r\n=Q2Az\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDrCAkS2H40qgOy8135wKZ7F5d0f3oGoYjnMwblzASNrAIgLR2Hv3ziaYtsAw/2ldwre3yC5TFeaSGGFfroRc51p+8="}]},"maintainers":[{"name":"ivandotv","email":"ivan.vlatkovic@gmail.com"}],"_npmUser":{"name":"ivandotv","email":"ivan.vlatkovic@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/mobx-collection-watch_1.0.0_1584642615417_0.25533599836173626"},"_hasShrinkwrap":false},"2.0.0":{"name":"mobx-collection-watch","version":"2.0.0","private":false,"description":"![Codecov](https://img.shields.io/codecov/c/github/ivandotv/mobx-collection-watch) ![CI](https://github.com/ivandotv/mobx-collection-watch/workflows/CI/badge.svg)","main":"dist/cjs/index.js","module":"dist/unpkg/mylib.esm.js","unpkg":"dist/unpkg/mylib.js","jsdelivr":"dist/unpkg/mylib.js","sideEffects":false,"types":"dist/types/","directories":{"test":"tests"},"scripts":{"prepublishOnly":"npm run build","semantic-release":"semantic-release","cz":"git-cz","fix:src":"eslint --fix \"./src/**/*.{js,jsx,ts,tsx}\"","fix:tests":"eslint --fix \"./tests/**/*.{js,jsx,ts,tsx}\"","fix":"npm-run-all -p fix:*","docs":"del docs/api && typedoc --theme markdown --readme none --excludePrivate --excludeNotExported --out docs/api ./src","test":"cross-env  BABEL_ENV=test jest --verbose --coverage --no-cache","test:watch":"cross-env BABEL_ENV=test jest --watch","test:ci":"npm run type-check && jest --runInBand --ci --reporters=default --reporters=jest-junit --coverage --coverageDirectory=coverage","type-check":"tsc -p tsconfig.check-types.json","type-check:watch":"npm run type-check -- --watch","build:types":"del dist/types && tsc -p tsconfig.build-types.json","build:browser":"del dist/unpkg && rollup -c","build:cjs":"del dist/cjs && cross-env BABEL_ENV=cjs babel src --out-dir dist/cjs --extensions \".ts,.tsx,js,jsx\" --source-maps --verbose","build:esm":"del dist/esm && cross-env BABEL_ENV=esm babel src --out-dir dist/esm --extensions \".ts,.tsx,js,jsx\" --source-maps","build":"npm run build:types && npm run build:cjs && npm run build:esm && npm run build:browser","build:watch":"npm run build:cjs -- --watch"},"jest-junit":{"outputDirectory":"./reports/junit","outputName":"test-results.xml"},"config":{"commitizen":{"path":"cz-conventional-changelog"}},"repository":{"type":"git","url":"git+https://github.com/ivandotv/mobx-collection-watch.git"},"bugs":{"url":"https://github.com/ivandotv/mobx-collection-watch"},"homepage":"https://github.com/ivandotv/mobx-collection-watch","keywords":["mobx","array","watch"],"author":{"name":"Ivan Vlatkovic"},"dependencies":{},"devDependencies":{"@babel/cli":"^7.8.4","@babel/core":"^7.8.7","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/preset-env":"^7.8.7","@babel/preset-typescript":"^7.8.3","@babel/types":"^7.8.7","@rollup/plugin-commonjs":"^11.0.2","@rollup/plugin-node-resolve":"^7.1.1","@size-limit/preset-small-lib":"^4.2.1","@types/jest":"^25.1.4","@types/lodash-es":"^4.17.3","@types/lodash.filter":"^4.6.6","@types/lodash.orderby":"^4.6.6","@types/lodash.shuffle":"^4.2.6","@types/node":"^13.9.0","@typescript-eslint/eslint-plugin":"^2.22.0","@typescript-eslint/parser":"^2.22.0","babel-plugin-dev-expression":"^0.2.2","babel-plugin-transform-define":"^2.0.0","babel-preset-minify":"^0.5.1","commitizen":"^4.0.3","core-js":"^3.6.4","cross-env":"^7.0.2","cz-conventional-changelog":"^3.1.0","del-cli":"^3.0.0","eslint-config-prettier":"^6.10.0","eslint-plugin-prettier":"^3.1.2","husky":"^4.2.3","jest":"^25.1.0","jest-junit":"^10.0.0","jest-watch-typeahead":"^0.4.2","lint-staged":"^10.0.8","mobx":"^5.15.4","nodemon":"^2.0.2","npm-run-all":"^4.1.5","prettier":"^1.19.1","prettier-standard":"^16.2.1","rollup":"^2.0.2","rollup-plugin-babel":"^4.4.0","rollup-plugin-filesize":"^6.2.1","rollup-plugin-peer-deps-external":"^2.2.2","rollup-plugin-terser":"^5.2.0","standardx":"^5.0.0","typedoc":"^0.17.0","typedoc-plugin-markdown":"^2.2.17","typescript":"^3.8.3","semantic-release":"^17.0.4"},"peerDependencies":{"mobx":"^5.15.4"},"gitHead":"b3bf76ea848c851fe34ec16433add54bf03ff56b","_id":"mobx-collection-watch@2.0.0","_nodeVersion":"12.13.0","_npmVersion":"6.14.2","dist":{"integrity":"sha512-AIDS3WnxZz4soIXe1V5Nn8W4ZohLh743saGUfQXinXQqi5FDAOOvfUipvxwFVhDcTLUyTqSTSid7uuuVxW1EAw==","shasum":"551c380a3465cf9dafb7c9dfe8f0cb2fc2c8ff27","tarball":"https://registry.npmjs.org/mobx-collection-watch/-/mobx-collection-watch-2.0.0.tgz","fileCount":101,"unpackedSize":668436,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJec87iCRA9TVsSAnZWagAABmUP/R2SrteTQ0X2390vb0p6\np2HemX4o+H/6gXiYh6ttjTbZ3gniNvdLcCQ+gtj6JgbMYlg/ZeIO88a89qUl\nTkp4lHWcGowMthjNS1Q70nbKkn/CDdQdnIv+ZbWMvjCww3/nYVXrh4g1IKSt\nhV3chXchuTFAcAJ7AuMwLgyMEtl2V+943CiHszxDlSB6IDE+BlqgrbVfecis\nd6Wegj5TPzmVEv6wX/tWX770fUisab95jBrO0q2Zd6zdHfIxTL499W1lAWpw\nhXcD8rHVIcoT838kRQ4y9pKZwsOcknAPyV8oPtSTabI/eCwM5g/WzUazTwB7\nagpkVkhpdr7wtMjJTiG4BUrEy10xj2ZNAGggkkpnwV2WYJEJ/VzxC4uhaz2w\nTrFH3Ivv20CJHpDvrZIX+YlOh4cAy9EFshYhI1PtzEKKoZkecL39ynD1b08Q\nI4gnilq8P5W+snfBNF1wyFk5qqFjuUDvCBqI11CO6LmS8pwW9uH1vEZA+5tA\ni/hOq4FZIorBkjE+6yMrHC7DNPxRMXlOZ0rFwk4IFZ+s1zv5DCyBzpHQsF30\nZUEtR+tIuBZt4qz6SikqceQ4XvZhVKWaIvHi++afcK8w9VxR0mHLu3HUOsF8\nMt6VBgmAgO7wZT4R7BFrvVhPvdC1vKKDtSYg68VbaxgezrzvRXbyhz9p/y1Q\nWRju\r\n=L8XW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDACBzEuC3kEOvK5S5ZNJ3xNhe3nQKtrVG8mx0GHoaxQAiEA20Js5prQbWReB6AHwQaDtxJbH7AePIvWwAQ8sq04H4I="}]},"maintainers":[{"name":"ivandotv","email":"ivan.vlatkovic@gmail.com"}],"_npmUser":{"name":"ivandotv","email":"ivan.vlatkovic@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/mobx-collection-watch_2.0.0_1584647906094_0.4826994695154818"},"_hasShrinkwrap":false},"2.0.1":{"name":"mobx-collection-watch","version":"2.0.1","private":false,"description":"Monitor mobx arrays and maps for changes.","main":"dist/cjs/index.js","module":"dist/unpkg/mylib.esm.js","unpkg":"dist/unpkg/mylib.js","jsdelivr":"dist/unpkg/mylib.js","sideEffects":false,"types":"dist/types/","directories":{"test":"tests"},"scripts":{"prepublishOnly":"npm run build","semantic-release":"semantic-release","cz":"git-cz","fix:src":"eslint --fix \"./src/**/*.{js,jsx,ts,tsx}\"","fix:tests":"eslint --fix \"./tests/**/*.{js,jsx,ts,tsx}\"","fix":"npm-run-all -p fix:*","docs":"del docs/api && typedoc --theme markdown --readme none --excludePrivate --excludeNotExported --out docs/api ./src","test":"cross-env  BABEL_ENV=test jest --verbose --coverage --no-cache","test:watch":"cross-env BABEL_ENV=test jest --watch","test:ci":"npm run type-check && jest --runInBand --ci --reporters=default --reporters=jest-junit --coverage --coverageDirectory=coverage","type-check":"tsc -p tsconfig.check-types.json","type-check:watch":"npm run type-check -- --watch","build:types":"del dist/types && tsc -p tsconfig.build-types.json","build:browser":"del dist/unpkg && rollup -c","build:cjs":"del dist/cjs && cross-env BABEL_ENV=cjs babel src --out-dir dist/cjs --extensions \".ts,.tsx,js,jsx\" --source-maps --verbose","build:esm":"del dist/esm && cross-env BABEL_ENV=esm babel src --out-dir dist/esm --extensions \".ts,.tsx,js,jsx\" --source-maps","build":"npm run build:types && npm run build:cjs && npm run build:esm && npm run build:browser","build:watch":"npm run build:cjs -- --watch"},"jest-junit":{"outputDirectory":"./reports/junit","outputName":"test-results.xml"},"config":{"commitizen":{"path":"cz-conventional-changelog"}},"repository":{"type":"git","url":"git+https://github.com/ivandotv/mobx-collection-watch.git"},"bugs":{"url":"https://github.com/ivandotv/mobx-collection-watch"},"homepage":"https://github.com/ivandotv/mobx-collection-watch","keywords":["mobx","array","watch"],"license":"MIT","author":{"name":"Ivan Vlatkovic"},"dependencies":{},"devDependencies":{"@babel/cli":"^7.8.4","@babel/core":"^7.9.6","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.6","@babel/preset-env":"^7.9.6","@babel/preset-typescript":"^7.9.0","@babel/types":"^7.9.6","@rollup/plugin-commonjs":"^13.0.0","@rollup/plugin-node-resolve":"^8.0.0","@semantic-release/release-notes-generator":"^9.0.1","@size-limit/preset-small-lib":"^4.5.0","@types/jest":"^25.2.3","@types/lodash-es":"^4.17.3","@types/lodash.filter":"^4.6.6","@types/lodash.orderby":"^4.6.6","@types/lodash.shuffle":"^4.2.6","@types/node":"^14.0.4","@typescript-eslint/eslint-plugin":"^3.0.0","@typescript-eslint/parser":"^3.0.0","babel-plugin-dev-expression":"^0.2.2","babel-plugin-transform-define":"^2.0.0","babel-preset-minify":"^0.5.1","commitizen":"^4.1.2","core-js":"^3.6.5","cross-env":"^7.0.2","cz-conventional-changelog":"^3.2.0","del-cli":"^3.0.1","eslint-config-prettier":"^6.11.0","eslint-plugin-prettier":"^3.1.3","husky":"^4.2.5","jest":"^26.0.1","jest-junit":"^10.0.0","jest-watch-typeahead":"^0.6.0","lint-staged":"^10.2.4","mobx":"^5.15.4","nodemon":"^2.0.4","npm-run-all":"^4.1.5","prettier":"^2.0.5","prettier-standard":"^16.3.0","rollup":"^2.10.5","rollup-plugin-babel":"^4.4.0","rollup-plugin-filesize":"^9.0.0","rollup-plugin-peer-deps-external":"^2.2.2","rollup-plugin-terser":"^6.0.0","semantic-release":"^17.0.7","standardx":"^5.0.0","typedoc":"^0.17.7","typedoc-plugin-markdown":"^2.2.17","typescript":"^3.9.3"},"peerDependencies":{"mobx":"^5.15.4"},"gitHead":"9131164734e34aff1058ef2120f7bee660b32f2a","_id":"mobx-collection-watch@2.0.1","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-dOCUUhqUetoG2Plj5FcuQ2Qqt8WcExoaycP8wDuWke4t4Y7K4J74ZKJ4pagG1Es6IXHh6OrDVSuZ5610hxLh7w==","shasum":"193d25435ecf4f908b0fc3d7edd14cab00601b60","tarball":"https://registry.npmjs.org/mobx-collection-watch/-/mobx-collection-watch-2.0.1.tgz","fileCount":101,"unpackedSize":642839,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe5OeyCRA9TVsSAnZWagAAf3QP/1BC4feTRs8yPu/fY+sK\nV18hjh8Pn837M5iXRCZUd+bBwovjbNfj1hkyohaFF2y1rCrrDtkEN6u09yOz\nIS5juWsBiuqNiumEu615HRGMdE4eIqxBSzAYZZJ4Imxh8FPh8W38+K9tggem\nlGTWqTm7XGmlrQnyFOQZ7VBNZtSekqy2ryuklfktC9vV9VcTrGxL8cg2Em05\nIRmvlYtkBdizttIP+LeC9JEvUEpHEOu9dJJ0g1cHVarMfYOyDHEqAsHRyAe4\n5O/6/POSyHkabOttG7jIkKK1+J/eHbqaxeHEVfC+o1Qd6fqdFdNONsezxvhQ\na5dsEKZ37MPh9tQ2LDZOnFdPOzTOSLgLAzOeL4oMkqZsP7/mX82/8gr7oa0y\nCS+z295s0H0sIBc/EsTBn3V12GzGhXqXb7XiXwAWACdZJ6wItUtNHQwTj8GZ\n98hMc5OOi5HsNaLqA/QSu2kN/JuVbZcP2Cv3JLvpH2TetC9q8trHwuJBbov6\nEEd8fLGVn6KJluo/7haEncY+jsdb7R7NqCiEvS/YX7QKWXRV+DEEX9vb7Zgw\nPBoSmWPxcHGyS86hYduwMCdqKI4BWzAbil3htrlT8qtuhm3RF5uuYzw1m4Go\nK9ftjRUVGHSSLV8+/qoSVWw4zzHNmZ2u8rE8iKjinGAJeKs7b8TWrsod5Jzd\n3ynd\r\n=Xw+K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIERA3C3y73MhrLfPicPRy3T8Hn6YwBT6EPF5ocY37jxMAiAxFzc+hnTotSwP76LMi/CF1b4ihEBu5OR7ii+6X3jUrg=="}]},"maintainers":[{"name":"ivandotv","email":"ivan.vlatkovic@gmail.com"}],"_npmUser":{"name":"ivandotv","email":"ivan.vlatkovic@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/mobx-collection-watch_2.0.1_1592059825947_0.6471229150562341"},"_hasShrinkwrap":false},"2.4.0":{"name":"mobx-collection-watch","version":"2.4.0","private":false,"description":"Monitor mobx arrays and maps for changes.","main":"dist/cjs/index.js","module":"dist/unpkg/mylib.esm.js","unpkg":"dist/unpkg/mylib.js","jsdelivr":"dist/unpkg/mylib.js","sideEffects":false,"types":"dist/types/","directories":{"test":"tests"},"scripts":{"prepublishOnly":"npm run build","semantic-release":"semantic-release","cz":"git-cz","fix:src":"eslint --fix \"./src/**/*.{js,jsx,ts,tsx}\"","fix:tests":"eslint --fix \"./tests/**/*.{js,jsx,ts,tsx}\"","fix":"npm-run-all -p fix:*","docs":"del docs/api && typedoc --theme markdown --readme none --excludePrivate --excludeNotExported --out docs/api ./src","test":"cross-env  BABEL_ENV=test jest --verbose --coverage --no-cache","test:watch":"cross-env BABEL_ENV=test jest --watch","test:ci":"npm run type-check && jest --runInBand --ci --reporters=default --reporters=jest-junit --coverage --coverageDirectory=coverage","type-check":"tsc -p tsconfig.check-types.json","type-check:watch":"npm run type-check -- --watch","build:types":"del dist/types && tsc -p tsconfig.build-types.json","build:browser":"del dist/unpkg && rollup -c","build:cjs":"del dist/cjs && cross-env BABEL_ENV=cjs babel src --out-dir dist/cjs --extensions \".ts,.tsx,js,jsx\" --source-maps --verbose","build:esm":"del dist/esm && cross-env BABEL_ENV=esm babel src --out-dir dist/esm --extensions \".ts,.tsx,js,jsx\" --source-maps","build":"npm run build:types && npm run build:cjs && npm run build:esm && npm run build:browser","build:watch":"npm run build:cjs -- --watch"},"jest-junit":{"outputDirectory":"./reports/junit","outputName":"test-results.xml"},"config":{"commitizen":{"path":"cz-conventional-changelog"}},"repository":{"type":"git","url":"git+https://github.com/ivandotv/mobx-collection-watch.git"},"bugs":{"url":"https://github.com/ivandotv/mobx-collection-watch"},"homepage":"https://github.com/ivandotv/mobx-collection-watch","keywords":["mobx","array","watch"],"license":"MIT","author":{"name":"Ivan Vlatkovic"},"dependencies":{},"devDependencies":{"@babel/cli":"^7.8.4","@babel/core":"^7.9.6","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.6","@babel/preset-env":"^7.9.6","@babel/preset-typescript":"^7.9.0","@babel/types":"^7.9.6","@rollup/plugin-commonjs":"^13.0.0","@rollup/plugin-node-resolve":"^8.0.0","@semantic-release/changelog":"^5.0.1","@semantic-release/git":"^9.0.0","@semantic-release/release-notes-generator":"^9.0.1","@size-limit/preset-small-lib":"^4.5.0","@types/jest":"^26.0.0","@types/lodash-es":"^4.17.3","@types/lodash.filter":"^4.6.6","@types/lodash.orderby":"^4.6.6","@types/lodash.shuffle":"^4.2.6","@types/node":"^14.0.4","@typescript-eslint/eslint-plugin":"^3.0.0","@typescript-eslint/parser":"^3.0.0","babel-plugin-dev-expression":"^0.2.2","babel-plugin-transform-define":"^2.0.0","babel-preset-minify":"^0.5.1","commitizen":"^4.1.2","conventional-changelog-conventionalcommits":"^4.3.0","core-js":"^3.6.5","cross-env":"^7.0.2","cz-conventional-changelog":"^3.2.0","del-cli":"^3.0.1","eslint-config-prettier":"^6.11.0","eslint-plugin-prettier":"^3.1.3","husky":"^4.2.5","jest":"^26.0.1","jest-junit":"^10.0.0","jest-watch-typeahead":"^0.6.0","lint-staged":"^10.2.4","mobx":"^5.15.4","nodemon":"^2.0.4","npm-run-all":"^4.1.5","prettier":"^2.0.5","prettier-standard":"^16.3.0","rollup":"^2.10.5","rollup-plugin-babel":"^4.4.0","rollup-plugin-filesize":"^9.0.0","rollup-plugin-peer-deps-external":"^2.2.2","rollup-plugin-terser":"^6.0.0","semantic-release":"^17.0.8","standardx":"^5.0.0","typedoc":"^0.17.7","typedoc-plugin-markdown":"^2.2.17","typescript":"^3.9.3"},"peerDependencies":{"mobx":"^5.15.4"},"gitHead":"71b7f81a1af9790994c491a81577ca5d95824f5e","_id":"mobx-collection-watch@2.4.0","_nodeVersion":"14.3.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-JyINce1y3v89JODtaXtPxx0TkwPpFZ9JW2khWDb9lSvDbUveH3R0cSOcJ46eFEPtMcQY/8nMdMo+LXJW8i6L1Q==","shasum":"8ece5f2f4e6efa01ce63e424cf3077bec0ee71a7","tarball":"https://registry.npmjs.org/mobx-collection-watch/-/mobx-collection-watch-2.4.0.tgz","fileCount":101,"unpackedSize":643178,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe7RMuCRA9TVsSAnZWagAAbF4P/im3vDk07IrqENPwmXcd\nyd22ScgQiQv9c2f2JG/IiR5UN8/xHogKpGBfvOItTE02dABTEnUWsdmuAbeJ\nht6qxnkRDEAVUr+ARE9uV4NX/icXEwBx7yzGzpEV37hF05usXxfnv99msZMp\nbTW4UFg2Og2xOmizu82GY8oA/dYwc9sr9fsZHqRXHk6x+W+ZffIoXLbMObbH\nvMoXE09tterMYl+GmejjSpofz76Zm1/WRmJDaH1t2fsOgKynM7bU3VLfybaO\naBQs2eR/5w1EgmRo7j5kRlI8zHVniM49TPIE0+OZl+5CPvuNn6ND5pTAxQxb\nDR8ucXA0VhwPh+x39WgbTnsJ57lh1b2tdvJQApaKHqBk8lAkvyE1/DB/fy9C\nVLtWJce9rsR0Vn1oqtfGyNwny9H0F7+HNF8KsYb3W+wgXTh8xHNu2qLUGJ8v\nxjlc5V2pFYV8pEeeFcqT2Nq+B+76Eso0bd31O9ulQxl2sztY/KGPGJewawIr\nzZua9NL9bCTWUeZxunCCTXR0t/KV6o+3FSs5NY1x9qA5JWYVQ/Zf8+chmxWf\n/4Te5y5rjgRBz1UFWC2u6SFrXq0RL5rKVRPTLa0ZGX2dr0j7Hmpizz1kr3GJ\nui3t7OLImOAgc3XqdfFvY5qqG2sNCxxUTUk7OjbDkwtIjcV7F51fpb1qamxa\n72gY\r\n=Mf+o\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGxBsT8t2Oflwg6CitUlFMgSx511zTJ1N18T21KbLF7IAiEA34uRU5tBC+b9N3d8rcT/85Qxlaaqb1CtLN6I8yUublQ="}]},"maintainers":[{"name":"ivandotv","email":"ivan.vlatkovic@gmail.com"}],"_npmUser":{"name":"ivandotv","email":"ivan.vlatkovic@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/mobx-collection-watch_2.4.0_1592595245857_0.7007808330888241"},"_hasShrinkwrap":false},"3.0.0":{"name":"mobx-collection-watch","version":"3.0.0","private":false,"description":"Monitor mobx arrays and maps for changes.","main":"dist/cjs/index.js","module":"dist/unpkg/mylib.esm.js","unpkg":"dist/unpkg/mylib.js","jsdelivr":"dist/unpkg/mylib.js","sideEffects":false,"types":"dist/types/","directories":{"test":"tests"},"scripts":{"prepublishOnly":"npm run build","semantic-release":"semantic-release","cz":"git-cz","fix:src":"eslint --fix \"./src/**/*.{js,jsx,ts,tsx}\"","fix:tests":"eslint --fix \"./tests/**/*.{js,jsx,ts,tsx}\"","fix":"npm-run-all -p fix:*","docs":"del docs/api && typedoc --theme markdown --readme none --excludePrivate --excludeNotExported --out docs/api ./src","test":"cross-env  BABEL_ENV=test jest --verbose --coverage --no-cache","test:watch":"cross-env BABEL_ENV=test jest --watch","test:ci":"npm run type-check && jest --runInBand --ci --reporters=default --reporters=jest-junit --coverage --coverageDirectory=coverage","type-check":"tsc -p tsconfig.check-types.json","type-check:watch":"npm run type-check -- --watch","build:types":"del dist/types && tsc -p tsconfig.build-types.json","build:browser":"del dist/unpkg && rollup -c","build:cjs":"del dist/cjs && cross-env BABEL_ENV=cjs babel src --out-dir dist/cjs --extensions \".ts,.tsx,js,jsx\" --source-maps --verbose","build:esm":"del dist/esm && cross-env BABEL_ENV=esm babel src --out-dir dist/esm --extensions \".ts,.tsx,js,jsx\" --source-maps","build":"npm run build:types && npm run build:cjs && npm run build:esm && npm run build:browser","build:watch":"npm run build:cjs -- --watch"},"jest-junit":{"outputDirectory":"./reports/junit","outputName":"test-results.xml"},"config":{"commitizen":{"path":"cz-conventional-changelog"}},"repository":{"type":"git","url":"git+https://github.com/ivandotv/mobx-collection-watch.git"},"bugs":{"url":"https://github.com/ivandotv/mobx-collection-watch"},"homepage":"https://github.com/ivandotv/mobx-collection-watch","keywords":["mobx","array","watch"],"license":"MIT","author":{"name":"Ivan Vlatkovic"},"dependencies":{},"devDependencies":{"@babel/cli":"^7.8.4","@babel/core":"^7.9.6","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.6","@babel/preset-env":"^7.9.6","@babel/preset-typescript":"^7.9.0","@babel/types":"^7.9.6","@rollup/plugin-commonjs":"^15.0.0","@rollup/plugin-node-resolve":"^9.0.0","@semantic-release/changelog":"^5.0.1","@semantic-release/git":"^9.0.0","@semantic-release/release-notes-generator":"^9.0.1","@size-limit/preset-small-lib":"^4.5.0","@types/jest":"^26.0.0","@types/lodash-es":"^4.17.3","@types/lodash.filter":"^4.6.6","@types/lodash.orderby":"^4.6.6","@types/lodash.shuffle":"^4.2.6","@types/node":"^14.0.4","@typescript-eslint/eslint-plugin":"^3.0.0","@typescript-eslint/parser":"^3.0.0","babel-plugin-dev-expression":"^0.2.2","babel-plugin-transform-define":"^2.0.0","babel-preset-minify":"^0.5.1","commitizen":"^4.1.2","conventional-changelog-conventionalcommits":"^4.3.0","core-js":"^3.6.5","cross-env":"^7.0.2","cz-conventional-changelog":"^3.2.0","del-cli":"^3.0.1","eslint-config-prettier":"^6.11.0","eslint-plugin-prettier":"^3.1.3","husky":"^4.2.5","jest":"^26.0.1","jest-junit":"^11.0.0","jest-watch-typeahead":"^0.6.0","lint-staged":"^10.2.4","mobx":"^5.15.4","nodemon":"^2.0.4","npm-run-all":"^4.1.5","prettier":"^2.0.5","prettier-standard":"^16.3.0","rollup":"^2.10.5","rollup-plugin-babel":"^4.4.0","rollup-plugin-filesize":"^9.0.0","rollup-plugin-peer-deps-external":"^2.2.2","rollup-plugin-terser":"^7.0.0","semantic-release":"^17.0.8","standardx":"^5.0.0","typedoc":"^0.19.0","typedoc-plugin-markdown":"^2.2.17","typescript":"^4.0.0"},"peerDependencies":{"mobx":"^5.15.4"},"gitHead":"de2a6fd8c2f72f17d2d5bc930b2342acbbb16de4","_id":"mobx-collection-watch@3.0.0","_nodeVersion":"14.15.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-IGiC1tWc0VoUGCq8iRz5zshs4DqLsPWrZQQPG1f54j3eU/2jfDm/OCm0rdLscgnRdyGCT0VTEukzVfXQmUosNg==","shasum":"443f0449dc81e52c0e49b38826eb08c31acee82d","tarball":"https://registry.npmjs.org/mobx-collection-watch/-/mobx-collection-watch-3.0.0.tgz","fileCount":97,"unpackedSize":247431,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfwRV7CRA9TVsSAnZWagAAxXkQAIUTDZEhPvZDY4mgAecN\nvSZAcewfvSuAGAR/51RjFGiMipW3JxvmPDM7WHeW17yGtEjovt5eAlpuRA83\nlPq/LmBcmyD+LB9fV0mSvBQM7XSfEel3V6522bG29HFgmHIaakWeNkutNvns\n5OSfIxfyPZ6Hebk3A1lyG55FyA/v5V5C9TXBOfJucQ/npvAnsZ3VwLly0GMr\nYiZ6nfa4gHQ4RaqrXl5jsCSDw0eHpQ6E/VYPrfPL98uCkdLYfR7a0cVtqjck\nvt9brmhvULzUtW6lKX1Q1uJywzra+sP7kzYqKvEyUsyBt28eIW9zl3b81RiN\njN9JIC/OZP6/3f4nZO6tuVmIcVffT4njoFR2TZ/Si1j/Sa+7yqiWKT0iNsN9\nni4adzYc3L8dwaqI09KgZvxsVi0RkkcA99d1PR+ErELEVHSts1Gzh2oC6+Qj\naVeI3G9kzQIZA+yx6B//0ozm3JYrhJRO1/SGiurNceYuHgZyR1JahJdiww8o\nbzyaLavZ8Sov9Q5phTzIwdf7ivLMTP+mugtLSa4AF4/r1ZPaYwW/yGcMUjoc\nTKKrFctaLWgAjDhPwqxcXB25QBLFg8Oq+nHx83RQSApaypI/rJMpTtrbz01j\nilHuhKlvTfZBPMlpoRHKuElEhgzIOCzQ+oMtc4qZ7ltuvD/bjYsup0A2np/f\nHArR\r\n=xxT3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCGBEFhQ/gIVGnPm8CqMdr+caUgMi9gphoie1BNdlxzWAIgOGSYipb5UfZTv6YxFRIh3rp806q6og1jp8bsDoBZovA="}]},"_npmUser":{"name":"ivandotv","email":"ivan.vlatkovic@gmail.com"},"maintainers":[{"name":"ivandotv","email":"ivan.vlatkovic@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/mobx-collection-watch_3.0.0_1606489466704_0.501807652075491"},"_hasShrinkwrap":false},"4.0.0":{"name":"mobx-collection-watch","version":"4.0.0","private":false,"description":"Monitor mobx arrays and maps for changes.","main":"dist/cjs/index.js","module":"dist/unpkg/mylib.esm.js","unpkg":"dist/unpkg/mylib.js","jsdelivr":"dist/unpkg/mylib.js","sideEffects":false,"types":"dist/types/","directories":{"test":"tests"},"scripts":{"prepublishOnly":"npm run build","semantic-release":"semantic-release","cz":"git-cz","fix:src":"eslint --fix \"./src/**/*.{js,jsx,ts,tsx}\"","fix:tests":"eslint --fix \"./tests/**/*.{js,jsx,ts,tsx}\"","fix":"npm-run-all -p fix:*","docs":"del docs/api && typedoc --theme markdown --readme none --excludePrivate --excludeNotExported --out docs/api ./src","test":"cross-env  BABEL_ENV=test jest --verbose --coverage --no-cache","test:watch":"cross-env BABEL_ENV=test jest --watch","test:ci":"npm run type-check && jest --runInBand --ci --reporters=default --reporters=jest-junit --coverage --coverageDirectory=coverage","type-check":"tsc -p tsconfig.check-types.json","type-check:watch":"npm run type-check -- --watch","build:types":"del dist/types && tsc -p tsconfig.build-types.json","build:browser":"del dist/unpkg && rollup -c","build:cjs":"del dist/cjs && cross-env BABEL_ENV=cjs babel src --out-dir dist/cjs --extensions \".ts,.tsx,js,jsx\" --source-maps --verbose","build:esm":"del dist/esm && cross-env BABEL_ENV=esm babel src --out-dir dist/esm --extensions \".ts,.tsx,js,jsx\" --source-maps","build":"npm run build:types && npm run build:cjs && npm run build:esm && npm run build:browser","build:watch":"npm run build:cjs -- --watch"},"jest-junit":{"outputDirectory":"./reports/junit","outputName":"test-results.xml"},"config":{"commitizen":{"path":"cz-conventional-changelog"}},"repository":{"type":"git","url":"git+https://github.com/ivandotv/mobx-collection-watch.git"},"bugs":{"url":"https://github.com/ivandotv/mobx-collection-watch"},"homepage":"https://github.com/ivandotv/mobx-collection-watch","keywords":["mobx","array","watch"],"license":"MIT","author":{"name":"Ivan Vlatkovic"},"dependencies":{},"devDependencies":{"@babel/cli":"^7.8.4","@babel/core":"^7.9.6","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.9.6","@babel/preset-env":"^7.9.6","@babel/preset-typescript":"^7.9.0","@babel/types":"^7.9.6","@rollup/plugin-commonjs":"^15.0.0","@rollup/plugin-node-resolve":"^9.0.0","@semantic-release/changelog":"^5.0.1","@semantic-release/git":"^9.0.0","@semantic-release/release-notes-generator":"^9.0.1","@size-limit/preset-small-lib":"^4.5.0","@types/jest":"^26.0.0","@types/lodash-es":"^4.17.3","@types/lodash.filter":"^4.6.6","@types/lodash.orderby":"^4.6.6","@types/lodash.shuffle":"^4.2.6","@types/node":"^14.0.4","@typescript-eslint/eslint-plugin":"^3.0.0","@typescript-eslint/parser":"^3.0.0","babel-plugin-dev-expression":"^0.2.2","babel-plugin-transform-define":"^2.0.0","babel-preset-minify":"^0.5.1","commitizen":"^4.1.2","conventional-changelog-conventionalcommits":"^4.3.0","core-js":"^3.6.5","cross-env":"^7.0.2","cz-conventional-changelog":"^3.2.0","del-cli":"^3.0.1","eslint-config-prettier":"^6.11.0","eslint-plugin-prettier":"^3.1.3","husky":"^4.2.5","jest":"^26.0.1","jest-junit":"^11.0.0","jest-watch-typeahead":"^0.6.0","lint-staged":"^10.2.4","mobx":"^6.0.4","nodemon":"^2.0.4","npm-run-all":"^4.1.5","prettier":"^2.0.5","prettier-standard":"^16.3.0","rollup":"^2.10.5","rollup-plugin-babel":"^4.4.0","rollup-plugin-filesize":"^9.0.0","rollup-plugin-peer-deps-external":"^2.2.2","rollup-plugin-terser":"^7.0.0","semantic-release":"^17.0.8","standardx":"^7.0.0","typedoc":"^0.19.0","typedoc-plugin-markdown":"^2.2.17","typescript":"^4.0.0"},"peerDependencies":{"mobx":">4"},"gitHead":"933071f06565ec962b170dbb1148d344930ce4b5","_id":"mobx-collection-watch@4.0.0","_nodeVersion":"14.15.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-ZXR84Hxi6OCWNcv174BUEaxNm3B19npidVUGinvZZptZl3yWhSARkGYlIlACU646+29Bwij7yQ5Ccq3WmvA2AA==","shasum":"5192fc8ba0a3bde05ff8e3fd017a7201089815ad","tarball":"https://registry.npmjs.org/mobx-collection-watch/-/mobx-collection-watch-4.0.0.tgz","fileCount":97,"unpackedSize":247359,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfy7MnCRA9TVsSAnZWagAA98IQAIf1hGBgaQoTUkSa+de7\nBeiUnyDBA0UhizYtc7f6ZOTs/hedVsyfwJPyqQ7Oxmy/Q+hpaJ+qRP4eIDT6\nmsUaQMJ6ZHbgv+kjeUfPsavXNjxJHpo7NJhDaMahXnpZygEYMSfVDG/gAOjX\nN8x6gCKPFnw/M7cLlJFcyD9pYtIdnkXzwd2ycDHvX1KZZ04vEDsxHIAIwE8R\nxrmMdIlfkM9XYEjBI6TdCR9W/g98sws+55RamFh83kpPDCy0DuaF2GijjKdO\nQ/CcP+9/4J3bEogJFuJZR56xAsP0glmaTazfU1Ji6yfKv06idXhMgdQE9+2P\nRSTXTYZlOvTxIHz5IA7gNUOTZNgKZ5weLaT1+aCIEmvhgVuuFMW9M2paNdGq\nwyf2VjsMlIYUKKqgZxVRHPXpKRSaL5cCNlluXdVT2nvFK6Uoph/I1mLu81Xr\neGBCkWXro7pFr8QMHAPQB+eM8pI9HjGTJdGXFw+joWfesfOC+6t3lxxm2Q6K\nDVcUAfibmDmdMYW1iB7Fp407JrsGNfbS5zYyP4hkblMvKlQc0AjfK6HnXm1+\nSy9U4GXtx2RphaIS/k+V5ZbdvlPFVKe39aVwPyx7UZvKV0DkK1PSUbcdvR3m\ni04GyA+CW9NfGko4hkERlpGfQxXl1xydWhWGDKBtfPAIAdcXotd6gYhZZ+U5\nA59e\r\n=Fn8o\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHstNbOdktZzcYUDKZ+S1XGikbAaCsSd2mSOE8fAIMb1AiEA7npn5IRtEjyO/2MitUMOqxgja28QnfSwNHtYElz9fmw="}]},"_npmUser":{"name":"ivandotv","email":"ivan.vlatkovic@gmail.com"},"maintainers":[{"name":"ivandotv","email":"ivan.vlatkovic@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/mobx-collection-watch_4.0.0_1607185190622_0.49923464941565476"},"_hasShrinkwrap":false}},"time":{"created":"2020-03-19T18:30:15.417Z","1.0.0":"2020-03-19T18:30:15.616Z","modified":"2022-05-09T13:58:40.947Z","2.0.0":"2020-03-19T19:58:26.281Z","2.0.1":"2020-06-13T14:50:26.134Z","2.0.2":"2020-06-13T16:45:52.344Z","2.0.3":"2020-06-13T16:55:58.599Z","2.0.4":"2020-06-13T17:01:16.591Z","2.0.5":"2020-06-13T17:06:01.688Z","2.0.6":"2020-06-13T17:19:09.726Z","2.0.7":"2020-06-13T17:30:30.762Z","2.0.8":"2020-06-13T17:38:57.745Z","2.0.9":"2020-06-13T17:44:23.640Z","2.0.10":"2020-06-13T17:50:12.260Z","2.0.11":"2020-06-13T17:56:35.218Z","2.0.12":"2020-06-13T18:07:03.648Z","2.0.13":"2020-06-13T18:12:05.824Z","2.0.14":"2020-06-13T18:16:51.012Z","2.1.0":"2020-06-13T18:22:02.912Z","2.2.0":"2020-06-13T18:26:45.142Z","2.3.0":"2020-06-13T18:36:50.433Z","2.3.1":"2020-06-13T20:03:26.092Z","2.3.2":"2020-06-13T20:39:57.890Z","2.4.0":"2020-06-19T19:34:06.037Z","3.0.0":"2020-11-27T15:04:26.893Z","4.0.0":"2020-12-05T16:19:50.775Z"},"maintainers":[{"name":"ivandotv","email":"ivan.vlatkovic@gmail.com"}],"description":"Monitor mobx arrays and maps for changes.","homepage":"https://github.com/ivandotv/mobx-collection-watch","keywords":["mobx","array","watch"],"repository":{"type":"git","url":"git+https://github.com/ivandotv/mobx-collection-watch.git"},"author":{"name":"Ivan Vlatkovic"},"bugs":{"url":"https://github.com/ivandotv/mobx-collection-watch"},"readme":"# Mobx Collection Watch\n\n![Codecov](https://img.shields.io/codecov/c/github/ivandotv/mobx-collection-watch)\n![CI](https://github.com/ivandotv/mobx-collection-watch/workflows/CI/badge.svg)\n[![semantic release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n\n## Install\n\n```js\nnpm install mobx-collection-watch\n```\n\n## Table of Contents\n\n- [How it works](#how-it-works)\n- [Adding items](#adding-items)\n- [Removing items](#removing-items)\n- [Replacing items](#replacing-items)\n- [Tracking changes to the items](#tracking-changes-to-the-items-in-the-collection)\n- [Working with mobx actions](#working-with-mobx-actions)\n- [Delayed callbacks](#delayed-callbacks)\n\n## How it works\n\nMonitor mobx arrays and maps for changes.\nWorks with [mobx enforceActions](https://mobx.js.org/refguide/api.html#enforceactions) mode.\n\nThis package is using [mobx observe](https://mobx.js.org/refguide/observe.html) to listen to changes on arrays and maps.\n\n## Adding items\n\nMonitor collection for new items. Every time something is added to the collection a callback will run with the new value that has been added. Replacing items at a particular array index also works.\n\n**array**:\n\n```ts\nimport { observable } from 'mobx'\nimport { arrayAdded } from 'mobx-collection-watch'\n\nconst collection = observable([])\n\nconst dispose = arrayAdded(collection, (items, disposer) => {\n  // items is array of newl\n  items.forEach((item) => {\n    console.log(`added ${item}`) // 1,2,3\n  })\n\n  // stop responding to new items from inside the callback\n  disposer()\n})\n\ncollection.push(1, 2, 3)\n\n// this will also work\ncollection[3] = 4\n\n//stop responding for new items\ndispose()\n```\n\n**map**:\n\n```js\nimport { observable } from 'mobx'\nimport { mapAdded } from 'mobx-collection-watch'\n\nconst collection = observable(new Map())\n\n//callback\nconst cb = function (items, dispose) {\n  items.forEach((item) => {\n    console.log(item) // {key:'a',value:'one'} , {key:'b',value:'two'}\n  })\n\n  //run dispose if you want to stop tracking\n  dispose()\n}\n\nconst dispose = mapAdded(collection, cb)\n\ncollection.set('a', 'one')\ncollection.set('b', 'two')\n```\n\n## Removing items\n\nEvery time something is removed from the collection a callback will run with the value that has been removed.\n\n**array**:\nReplacing items at a particular array index **will not trigger the callback**.\n\n```ts\nimport { observable } from 'mobx'\nimport { arrayRemoved } from 'mobx-collection-watch'\n\nconst collection = observable([1, 2, 3, 4])\n\nconst dispose = arrayRemoved(collection, (items, disposer) => {\n  // items is array of newl\n  items.forEach((item) => {\n    console.log(`removed ${item}`)\n  })\n\n  // stop responding to removed items from inside the callback\n  disposer()\n})\n\ncollection.pop() // trigger callback with [4]\ncollection.splice(0, 2) //trigger callback with [1,2]\n\n// NOTE: this will not work!\ncollection[0] = 5\n//stop responding for new items\ndispose()\n```\n\n**map**:\nMaps interface works nearly the same as the array interface. The only difference is that when there is a change\nthe payload will be the map **key** and the **value** as opposed to only the **value** in case of arrays.\n\n```js\nimport { observable } from 'mobx'\nimport { mapRemoved } from 'mobx-collection-watch'\n\nconst collection = observable(\n  new Map([\n    ['a', 'one'],\n    ['b', 'two']\n  ])\n)\n\n//callback\nconst cb = function (items, dispose) {\n  items.forEach((item) => {\n    console.log(item) // {key:'a',value:'one'} , {key:'b',value:'two'}\n  })\n\n  //run dispose if you want to stop tracking\n  dispose()\n}\n\nconst dispose = mapRemoved(collection, cb)\n\ncollection.clear()\n```\n\n## Replacing items\n\nYou can track which items in the collection have been replaced.\n\n**array**:\nPlease note that this is one to one tracking of new and replaced items, so it only works when items in the array are replaced directly by index `collection[0]=newItem`\n\nThis **will not trigger the callback**: `collection.splice(0,1,newItem)`\nThe callback will receive an array with objects that represent the data for every replaced element:\n\n```js\n// index at 0 which holds the value 1 was replaced with the value 3\n;[\n  {\n    index: 0,\n    oldValue: 1,\n    newValue: 3\n  }\n]\n```\n\n```js\nimport { observable } from 'mobx'\nimport { arrayReplaced } from 'mobx-collection-watch'\n\nconst collection = observable([1, 2, 3, 4])\nconst cb = function () {}\n\nconst dispose = arrayReplaced(collection, (replacedData, disposer) => {\n  replacedData.forEach((data) => {\n    console.log(data) // e.g. {index:0, oldValue:1,newValue:3}\n  })\n})\n\ncollection[0] = 3 // {index:0, oldValue:1,newValue:3}\ncollection[1] = 4 // {index:1 oldValue:2,newValue:4}\n\n//stop responding to new replacements\ndispose()\n```\n\n**map**:\nMap replacement payload callback data:\n\n```js\n// map key 'foo' which holds the value 1 is replaced with value 2\n;[\n  {\n    key: 'foo,\n    oldValue: 1,\n    newValue: 2\n  }\n]\n```\n\n```js\nimport { observable, runInAction } from 'mobx'\nimport { mapReplaced } from 'mobx-collection-watch'\n\nconst collection = observable(\n  new Map([\n    ['a', 'one'],\n    ['b', 'two']\n  ])\n)\n\n//callback\nconst cb = function (items, dispose) {\n  items.forEach((item) => {\n    console.log(item) // {key:'a',oldValue:'one',newValue:'foo'} , {key:'b',oldValue:'two',newValue:'bar'}\n  })\n\n  //run dispose if you want to stop tracking\n  dispose()\n}\n\nconst dispose = mapUpdated(collection, cb)\n\nrunInAction(() => {\n  collection.set('a', 'foo')\n  collection.set('b', 'bar')\n})\n```\n\n## Tracking changes to the items in the collection\n\nThis functionality enables you to track changes to the items in the collection **not the collection itself**.\nEvery time the item is added to the collection you can start tracking changes to that item. So you are not tracking what get's added or removed from the collection, rather you are tracking individual item changes that are in the collection. And when the item is removed from the collection, tracking for that item will stop. Under the hood it uses [mobx reaction()](https://mobx.js.org/refguide/reaction.html)\n\n**array**:\n\n```js\nimport { observable, toJS } from 'mobx'\nimport { arrayItemChanged } from 'mobx-collection-watch'\n\nconst item1 = { id: 1, name: 'Ann' }\nconst item2 = { id: 2, name: 'Jenna' }\n\nconst collection = observable([item1, item2])\n\n//function that determines what properties are tracked.\n//everything accessed inside the function will be tracked.\nconst selectorFn = (item) => {\n  return toJS(item) // monitor all properties\n  //or\n  // monitor only the name\n  return items.name // this will be the \"data\" prop in cb()\n}\n\n// callback will be triggered when any properties accessed inside the selectorFn function change\nconst cb = (data, item, reaction) => {\n  // data is what is returned from the selectorFn\n  console.log(`data ${data}`) // item.name\n  console.log(`item changed ${item}`) // item that has changed\n  //if you want to stop the reaction for that particular item\n  reaction.dispose()\n}\n\nconst options = {} // options is directly passed to the mobx reaction() options\n\nconst dispose = arrayItemChanged(collection, selectorFn, cb, options)\n\n// stop tracking all items.\ndispose()\n```\n\n**map**:\n\n```js\nimport { observable, runInAction } from 'mobx'\nimport { mapItemChanged } from 'mobx-collection-watch'\n\n// add observable items\nconst item1 = observable({\n  value: {\n    id: 1,\n    name: 'one'\n  }\n})\n\n//callback\nconst cb = function (data, item, reaction) {\n  console.log(data) //5\n  console.log(item) // item2\n\n  //run dispose if you want to stop tracking\n  reaction.dispose()\n}\n\nconst collection = observable(new Map())\ncollection.set('a', item1)\n\n//change item1\nitem1.value.id = 5\n```\n\n## Working with mobx actions\n\nWhen working with mobx actions, using for example [runInAction](https://mobx.js.org/best/actions.html#the-runinaction-utility).\nAll modifications to the collection are batched. In the next example, _callback_ function will be triggered only once.\n\n```ts\n// ...code\n\nrunInAction(() => {\n  collection.push(1)\n  collection.push(2)\n  collection.push(3, 4)\n})\n\n//callback will be triggered once with [1,2,3,4]\n```\n\n## Delayed callbacks\n\nThe callback can be called with a `delay`, when that happens all changes to the collection are batched (similar to how `runInAction` works).\nDelay is supported by all collection functions.\n\nThe next example is tracking additions to the array with a delay of `100ms`, and it will be triggered only once.\nNotice that we are not running inside `mobx actions`\n\n```ts\nimport { observable } from 'mobx'\nimport { arrayAdded } from 'mobx-collection-watch'\n\nconst collection = observable([])\nconst cb = (items, disposer) => {\n  items.forEach((item) => {\n    console.log(`added ${item}`)\n  })\n}\n\n//callback will be triggered only once with [1,2,3,4,5]\nconst dispose = arrayAdded(collection, cb, 100)\n\ncollection.push(1)\ncollection.push(2)\ncollection.push(3, 4, 5)\n```\n","readmeFilename":"README.md","license":"MIT"}