{"_id":"manage-side-effects","_rev":"2-46bd51a9117f52923d4a99bd46e25c69","name":"manage-side-effects","dist-tags":{"latest":"1.1.0"},"versions":{"1.0.0":{"name":"manage-side-effects","version":"1.0.0","description":"Manage side effects in your application.","main":"index.cjs.js","module":"index.esm.js","author":{"name":"Ivan Nikolić","email":"niksy5@gmail.com","url":"http://ivannikolic.com"},"license":"MIT","sideEffects":false,"directories":{"test":"test"},"scripts":{"build":"rollup --config rollup.config.js","lint":"eslint '{index,lib/**/*,test/**/*}.js'","postpublish":"GITHUB_TOKEN=$GITHUB_RELEASE_TOKEN github-release-from-changelog","prepublishOnly":"npm run build","release":"np","test":"npm run lint && npm run test:automated","test:automated":"BABEL_ENV=test karma start","test:automated:watch":"npm run test:automated -- --auto-watch --no-single-run","version":"version-changelog CHANGELOG.md && changelog-verify CHANGELOG.md && git add CHANGELOG.md"},"devDependencies":{"@babel/cli":"^7.2.3","@babel/core":"^7.2.2","@babel/plugin-transform-object-assign":"^7.2.0","@babel/plugin-transform-runtime":"^7.2.0","@babel/runtime":"^7.2.0","babel-preset-niksy":"^4.1.0","changelog-verify":"^1.1.2","core-js":"^2.6.5","dom4":"^2.1.4","eslint":"^5.16.0","eslint-config-niksy":"^7.0.0","eslint-config-prettier":"^4.1.0","eslint-plugin-extend":"^0.1.1","eslint-plugin-import":"^2.17.1","eslint-plugin-jsdoc":"^4.8.3","eslint-plugin-mocha":"^5.3.0","eslint-plugin-node":"^8.0.1","eslint-plugin-prettier":"^3.0.1","eslint-plugin-promise":"^4.1.1","eslint-plugin-unicorn":"^8.0.2","esm":"^3.0.51","github-release-from-changelog":"^1.3.2","karma":"^4.0.1","karma-browserstack-launcher":"^1.0.0","karma-chrome-launcher":"^2.2.0","karma-coverage-istanbul-reporter":"^2.0.1","karma-fixture":"^0.2.6","karma-html2js-preprocessor":"^1.0.0","karma-mocha":"^1.3.0","karma-mocha-reporter":"^2.2.5","karma-rollup-preprocessor":"^7.0.0","karma-sourcemap-loader":"^0.3.7","mocha":"^4.1.0","np":"^3.0.4","prettier":"^1.17.0","rollup":"^1.0.0","rollup-plugin-babel":"^4.2.0","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-istanbul":"^2.0.1","rollup-plugin-node-builtins":"^2.1.2","rollup-plugin-node-globals":"^1.4.0","rollup-plugin-node-resolve":"^4.0.0","rollup-plugin-polyfill":"^2.0.1","sinon":"^2.4.1","version-changelog":"^3.1.1"},"engines":{"node":">=8"},"keywords":["effects","listener","manager","side"],"repository":{"type":"git","url":"git+https://github.com/niksy/manage-side-effects.git"},"bugs":{"url":"https://github.com/niksy/manage-side-effects/issues"},"homepage":"https://github.com/niksy/manage-side-effects#readme","gitHead":"666bd103874e12149b8034dad43a45ae248cef3c","_id":"manage-side-effects@1.0.0","_nodeVersion":"8.11.2","_npmVersion":"6.9.0","dist":{"integrity":"sha512-MWOk/Tyqh2MrUdhjmj8XvRGCC6dZduTwKzoCrze/Vv3G+NYDlNQnhK19rxs3yiJCqs4mOHiKHKuzjhJTn7CPQA==","shasum":"c4f1f1b48ba1ca1a45ed8c854a7f142b6b826033","tarball":"https://registry.npmjs.org/manage-side-effects/-/manage-side-effects-1.0.0.tgz","fileCount":8,"unpackedSize":17525,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcx/XCCRA9TVsSAnZWagAA9sAP/0fPiNua6JrZTLLeEABu\np++ds/ia+rkh8uOJ9PkH5Y2sTfDyh9eU0GjnNzFsh/bqU7luA0RH1RXeowDw\no6ELsLhgFSa5+gzU1SEKCVrJgnNDMV73jGQ/SiSWBnXVGboCE542ysTGP/Hu\n1KC1tiOT+9MjbwAdvpcqnn37kq0nU9BbwJfkOTm2KZMJSQmERYhh0VnCShW1\ndEyf1GIMBji+hVqJ40zul7IPm9WKwaHhxifiWt/fKs+WUG1vIlhVj9VXzgfq\n7pnO60uIv9WOj6bP8oroCrXoWO788x0kS5IKrLqbU01SmR9hMAnODgAdKhMu\nhXIYZmBlUz/qI0IcdSJ0YOMIwkjgUYx74jZex3quPckOZ//Wvda25e8njuVY\nkUv+DN8zBCxuq0Qnd3+/HgRo5wHyYXYTDerre9heWQo7tSNHotqAvPJ9+AOn\nCLuRL3xZnG8Cs8lcTPr5xJDKmcc8p/trC4YaTYvNDJkN3uMHN3UvJYLE3Swc\nzVKFNsWDxzD9qB3phgKdaucdemq9Zt1QTeQ871BVJvFCWSuj1b7T1XbJn2oU\n1EKVwMuPonHNYjDX072xk4dXEsU+tZiKLesmMNZFUBx1Y0QykNkBrTaJ3YW9\n1u0w1eDOcwixf1IZTmwtdaASab271sCtx2JE20Fpz9b58XxH84OxnxjBk5im\nJ7Sn\r\n=wHOb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDJ0/RdwyKMzYSy1EKmhTnfIrHzEnU3+kYZOeViqAkEDAIhAOZOQ/oXTohPot5gi9DmdRrz47UaNVImsf93nNBtZqjy"}]},"maintainers":[{"name":"niksy","email":"niksy5@gmail.com"}],"_npmUser":{"name":"niksy","email":"niksy5@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/manage-side-effects_1.0.0_1556608450278_0.5048589763839162"},"_hasShrinkwrap":false},"1.1.0":{"name":"manage-side-effects","version":"1.1.0","description":"Manage side effects in your application.","main":"index.cjs.js","module":"index.esm.js","author":{"name":"Ivan Nikolić","email":"niksy5@gmail.com","url":"http://ivannikolic.com"},"license":"MIT","sideEffects":false,"directories":{"test":"test"},"scripts":{"build":"rollup --config rollup.config.js","lint":"eslint '{index,lib/**/*,test/**/*}.js'","postpublish":"GITHUB_TOKEN=$GITHUB_RELEASE_TOKEN github-release-from-changelog","prepublishOnly":"npm run build","release":"np","test":"npm run lint && npm run test:automated","test:automated":"BABEL_ENV=test karma start","test:automated:watch":"npm run test:automated -- --auto-watch --no-single-run","version":"version-changelog CHANGELOG.md && changelog-verify CHANGELOG.md && git add CHANGELOG.md"},"devDependencies":{"@babel/cli":"^7.2.3","@babel/core":"^7.2.2","@babel/plugin-transform-object-assign":"^7.2.0","@babel/plugin-transform-runtime":"^7.2.0","@babel/runtime":"^7.2.0","babel-preset-niksy":"^4.1.0","changelog-verify":"^1.1.2","core-js":"^2.6.5","dom4":"^2.1.4","eslint":"^5.16.0","eslint-config-niksy":"^7.0.0","eslint-config-prettier":"^4.1.0","eslint-plugin-extend":"^0.1.1","eslint-plugin-import":"^2.17.1","eslint-plugin-jsdoc":"^4.8.3","eslint-plugin-mocha":"^5.3.0","eslint-plugin-node":"^8.0.1","eslint-plugin-prettier":"^3.0.1","eslint-plugin-promise":"^4.1.1","eslint-plugin-unicorn":"^8.0.2","esm":"^3.0.51","github-release-from-changelog":"^1.3.2","karma":"^4.0.1","karma-browserstack-launcher":"^1.0.0","karma-chrome-launcher":"^2.2.0","karma-coverage-istanbul-reporter":"^2.0.1","karma-fixture":"^0.2.6","karma-html2js-preprocessor":"^1.0.0","karma-mocha":"^1.3.0","karma-mocha-reporter":"^2.2.5","karma-rollup-preprocessor":"^7.0.0","karma-sourcemap-loader":"^0.3.7","mocha":"^4.1.0","np":"^3.0.4","prettier":"^1.17.0","rollup":"^1.0.0","rollup-plugin-babel":"^4.2.0","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-istanbul":"^2.0.1","rollup-plugin-node-builtins":"^2.1.2","rollup-plugin-node-globals":"^1.4.0","rollup-plugin-node-resolve":"^4.0.0","rollup-plugin-polyfill":"^2.0.1","sinon":"^2.4.1","version-changelog":"^3.1.1"},"engines":{"node":">=8"},"keywords":["effects","listener","manager","side"],"repository":{"type":"git","url":"git+https://github.com/niksy/manage-side-effects.git"},"bugs":{"url":"https://github.com/niksy/manage-side-effects/issues"},"homepage":"https://github.com/niksy/manage-side-effects#readme","gitHead":"8701fba4a7b234d25da8a3a8233c24caf4280368","_id":"manage-side-effects@1.1.0","_nodeVersion":"8.11.2","_npmVersion":"6.9.0","dist":{"integrity":"sha512-+H501yrmCfsgSTa6BytbH1Y93KxuH6i2WtZyXtr034VbO65NzUG1EMgnXAAKRMDWocASY88GXRnvPi1ZRPgcuQ==","shasum":"17dc59ba949637a76eb22cea1e59be25e598a296","tarball":"https://registry.npmjs.org/manage-side-effects/-/manage-side-effects-1.1.0.tgz","fileCount":8,"unpackedSize":16664,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc0pA8CRA9TVsSAnZWagAAsOQP/1NrVyM5+buh6xGDRHLa\nSq/5owRVBRAfBktT9le1ibuoGfnmL7qjzuwHctUnpgMhhYkpN6mIBWsw/Lhr\n1sBjqMnEh0wcK3bGIcnzMncQKNGDqufNwL5UsatnJUPSVs970ygt6yG1BahK\nlp9Ct7zw5ViwqiTtTVdyn5+zos7P2oGHr+i4WFB4rRQ6Nl76u2swCBGrx2WQ\nZjB/yXRByL6GlZMRTxQjFVkHF9wuQVEVfrrToKyuGZdrisIJIXH3EFkvUyD2\nxhS2kxQ97Rcj2EpOGnec+/H/E8RSQJtOZpDtreI0s6xKS5NtJNklaSv/6FWn\nz1tQPcJkdg9/mM5kJZSz8A8MV90KeXr5lryHUPFhtX9GZoo/xeXQoaF1G4Xb\nNLh8t7HJcFFofvI5gOqyq3fGfaIBpoKihvO7s5FJBQIxoPiQHQggr6+VUUJl\nbaLSCkieKto3CX0NHc7rLidAeQ1NPP08kbMDubxE2E1gVTr8367+OzpIqohp\nfNkwYSOnJMOOJaXGTXMsnMEzteOjdqnW6XjjPx+Im9ikRaWsjCnXBMTv4+XG\nX9dIKT6zKA6nn1Zbf9i+/A3VKO2UlvqXfb6iHA/aIjHgMQ0YddxXfPsFmEiD\ndQmsbDXLBciUaYKSSBCXk19P6MiSyXLiExDSTyBagztPH3x/jZEIQH/b2rav\n2F1/\r\n=Sh2o\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD0IHJlpuhkuMFx3yOhIWT5gRJQD32o6L2EsiBu4FmrswIhAKBVdFduEjB7SuIGbfRnyeAIOFLD2h7G8unAkz12fb3p"}]},"maintainers":[{"name":"niksy","email":"niksy5@gmail.com"}],"_npmUser":{"name":"niksy","email":"niksy5@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/manage-side-effects_1.1.0_1557303356093_0.3107378669288863"},"_hasShrinkwrap":false}},"time":{"created":"2019-04-30T07:14:10.276Z","1.0.0":"2019-04-30T07:14:10.518Z","modified":"2022-05-08T18:28:03.298Z","1.1.0":"2019-05-08T08:15:56.197Z"},"maintainers":[{"name":"niksy","email":"niksy5@gmail.com"}],"description":"Manage side effects in your application.","homepage":"https://github.com/niksy/manage-side-effects#readme","keywords":["effects","listener","manager","side"],"repository":{"type":"git","url":"git+https://github.com/niksy/manage-side-effects.git"},"author":{"name":"Ivan Nikolić","email":"niksy5@gmail.com","url":"http://ivannikolic.com"},"bugs":{"url":"https://github.com/niksy/manage-side-effects/issues"},"license":"MIT","readme":"# manage-side-effects\n\n[![Build Status][ci-img]][ci]\n[![BrowserStack Status][browserstack-img]][browserstack]\n\nManage side effects in your application.\n\nGreat for keeping event listeners and 3rd party plugin instances with their\ncleanup methods in one place.\n\nConcept is similar to\n[`useEffect` hook in React](https://reactjs.org/docs/hooks-effect.html).\n\n## Install\n\n```sh\nnpm install manage-side-effects --save\n```\n\n## Usage\n\n```js\nimport manageSideEffects from 'manage-side-effects';\n\nconst sideEffects = manageSideEffects();\n\n// Register side effect\nsideEffects.add(() => {\n\tconst handler = (event) => {\n\t\t// Handle document click event\n\t};\n\tdocument.addEventListener('click', handler);\n\treturn () => {\n\t\tdocument.removeEventListener('click', handler);\n\t};\n});\n\n// Register named side effect\nsideEffects.add(() => {\n\tconst handler = (event) => {\n\t\t// Handle document keydown event\n\t};\n\tdocument.addEventListener('keydown', handler);\n\treturn () => {\n\t\tdocument.removeEventListener('keydown', handler);\n\t};\n}, 'documentKeydownHandler');\n\n// Remove named registered side effect\nsideEffects.remove('documentKeydownHandler');\n\n// Remove all registered side effects\nsideEffects.removeAll();\n```\n\n## API\n\n### manageSideEffects()\n\nReturns: `Object`\n\nCreates side effects manager instance.\n\n### instance.add(sideEffect[, id])\n\nRegister side effect, providing optional ID for that side effect.\n\n#### sideEffect\n\nType: `Function`  \nReturns: `Function`\n\nSide effect to register.\n\nReturn value should be function which contains cleanup code (e.g. event listener\nremoving). If return value is not a function, a noop function will be used as\nreturn value.\n\n#### id\n\nType: `string`\n\nSide effect ID. Useful when you want to give side effect name so you can easily\nremove it with [`remove`](#remove) method.\n\n### instance.remove(id)<a name=\"remove\"></a>\n\nRemove side effect with provided ID.\n\n#### id\n\nType: `string`\n\nSide effect ID.\n\n### instance.removeAll()\n\nRemove all side effects.\n\n## Browser support\n\nTested in IE9+ and all modern browsers.\n\n## Test\n\nFor automated tests, run `npm run test:automated` (append `:watch` for watcher\nsupport).\n\n## License\n\nMIT © [Ivan Nikolić](http://ivannikolic.com)\n\n<!-- prettier-ignore-start -->\n\n[ci]: https://travis-ci.com/niksy/manage-side-effects\n[ci-img]: https://travis-ci.com/niksy/manage-side-effects.svg?branch=master\n[browserstack]: https://www.browserstack.com/\n[browserstack-img]: https://www.browserstack.com/automate/badge.svg?badge_key=dXhKMzErNzFUUVBoODRDbE44KzBKZHlZTWp6Z1MweUxENWlhZDZzTkdvYz0tLXM1c1dhS0IwSUFvM25RZnRpMm9lbFE9PQ==--17a00c20a8c92ddd72ede14849cd244077502d12\n\n<!-- prettier-ignore-end -->\n","readmeFilename":"README.md"}