{"_id":"change-emitter","_rev":"411889","name":"change-emitter","description":"Listen for changes. Like an event emitter that only emits a single event type. Really tiny.","dist-tags":{"latest":"0.1.6"},"maintainers":[{"name":"acdlite","email":"npm@andrewclark.io"},{"name":"istarkov","email":"istarkov@gmail.com"}],"time":{"modified":"2021-08-04T05:11:15.000Z","created":"2016-05-15T03:39:25.903Z","0.1.6":"2017-04-17T19:19:47.273Z","0.1.5":"2017-04-17T18:46:41.069Z","0.1.4":"2017-04-17T18:44:00.439Z","0.1.3":"2017-02-28T19:45:48.121Z","0.1.2":"2016-05-15T03:41:00.707Z","0.1.1":"2016-05-15T03:39:25.903Z"},"users":{"cr8tiv":true},"author":{"name":"Andrew Clark","email":"acdlite@me.com"},"repository":{"type":"git","url":"git+https://github.com/acdlite/change-emitter.git"},"versions":{"0.1.6":{"name":"change-emitter","version":"0.1.6","description":"Listen for changes. Like an event emitter that only emits a single event type. Really tiny.","main":"lib/index.js","files":["lib"],"scripts":{"check":"eslint src","build":"babel src --out-dir lib","test":"ava","test:watch":"yarn run test -- --watch","prepublish":"yarn run check && yarn run test && yarn run build"},"repository":{"type":"git","url":"git+https://github.com/acdlite/change-emitter.git"},"keywords":["change","event","emitter"],"author":{"name":"Andrew Clark","email":"acdlite@me.com"},"license":"MIT","bugs":{"url":"https://github.com/acdlite/change-emitter/issues"},"homepage":"https://github.com/acdlite/change-emitter#readme","devDependencies":{"ava":"^0.14.0","babel-cli":"^6.8.0","babel-core":"^6.8.0","babel-preset-es2015":"^6.6.0","eslint":"^2.10.1","eslint-config-airbnb-base":"^3.0.1","eslint-plugin-import":"^1.8.0","sinon":"^1.17.4"},"ava":{"babel":"inherit","files":["**/*-test.js"],"source":["**/*.js"],"require":["babel-register"]},"gitHead":"8b6198fc863929441c1210e95350700641d571b4","_id":"change-emitter@0.1.6","_shasum":"e8b2fe3d7f1ab7d69a32199aff91ea6931409515","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"istarkov","email":"istarkov@gmail.com"},"dist":{"shasum":"e8b2fe3d7f1ab7d69a32199aff91ea6931409515","size":2651,"noattachment":false,"key":"/change-emitter/-/change-emitter-0.1.6.tgz","tarball":"http://registry.cnpm.dingdandao.com/change-emitter/download/change-emitter-0.1.6.tgz"},"maintainers":[{"name":"acdlite","email":"npm@andrewclark.io"},{"name":"istarkov","email":"istarkov@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/change-emitter-0.1.6.tgz_1492456785485_0.13078920054249465"},"directories":{},"publish_time":1492456787273,"_cnpm_publish_time":1492456787273,"_hasShrinkwrap":false},"0.1.5":{"name":"change-emitter","version":"0.1.5","description":"Listen for changes. Like an event emitter that only emits a single event type. Really tiny.","main":"lib/index.js","scripts":{"check":"eslint src","build":"babel src --out-dir lib","test":"ava","test:watch":"yarn run test -- --watch","prepublish":"yarn run check && yarn run test && yarn run build"},"repository":{"type":"git","url":"git+https://github.com/acdlite/change-emitter.git"},"keywords":["change","event","emitter"],"author":{"name":"Andrew Clark","email":"acdlite@me.com"},"license":"MIT","bugs":{"url":"https://github.com/acdlite/change-emitter/issues"},"homepage":"https://github.com/acdlite/change-emitter#readme","devDependencies":{"ava":"^0.14.0","babel-cli":"^6.8.0","babel-core":"^6.8.0","babel-preset-es2015":"^6.6.0","eslint":"^2.10.1","eslint-config-airbnb-base":"^3.0.1","eslint-plugin-import":"^1.8.0","sinon":"^1.17.4"},"ava":{"babel":"inherit","files":["**/*-test.js"],"source":["**/*.js"],"require":["babel-register"]},"gitHead":"062de98fec9f34155ce4b25f1036313860eab187","_id":"change-emitter@0.1.5","_shasum":"fa8f5aabf8d44eff78e76f9b692c5b154b5181a3","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"istarkov","email":"istarkov@gmail.com"},"dist":{"shasum":"fa8f5aabf8d44eff78e76f9b692c5b154b5181a3","size":65569,"noattachment":false,"key":"/change-emitter/-/change-emitter-0.1.5.tgz","tarball":"http://registry.cnpm.dingdandao.com/change-emitter/download/change-emitter-0.1.5.tgz"},"maintainers":[{"name":"acdlite","email":"npm@andrewclark.io"},{"name":"istarkov","email":"istarkov@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/change-emitter-0.1.5.tgz_1492454798850_0.35207757307216525"},"directories":{},"publish_time":1492454801069,"_cnpm_publish_time":1492454801069,"_hasShrinkwrap":false},"0.1.4":{"name":"change-emitter","version":"0.1.4","description":"Listen for changes. Like an event emitter that only emits a single event type. Really tiny.","main":"lib/index.js","scripts":{"check":"eslint src","build":"babel src --out-dir lib","test":"ava","test:watch":"yarn run test -- --watch","prepublish":"yarn run check && yarn run test && yarn run build"},"repository":{"type":"git","url":"git+https://github.com/acdlite/change-emitter.git"},"keywords":["change","event","emitter"],"author":{"name":"Andrew Clark","email":"acdlite@me.com"},"license":"MIT","bugs":{"url":"https://github.com/acdlite/change-emitter/issues"},"homepage":"https://github.com/acdlite/change-emitter#readme","devDependencies":{"ava":"^0.14.0","babel-cli":"^6.8.0","babel-core":"^6.8.0","babel-preset-es2015":"^6.6.0","eslint":"^2.10.1","eslint-config-airbnb-base":"^3.0.1","eslint-plugin-import":"^1.8.0","sinon":"^1.17.4"},"ava":{"babel":"inherit","files":["**/*-test.js"],"source":["**/*.js"],"require":["babel-register"]},"_id":"change-emitter@0.1.4","dist":{"shasum":"a6e674b11aa17487550c409dc8796fce32d4208a","size":1734,"noattachment":false,"key":"/change-emitter/-/change-emitter-0.1.4.tgz","tarball":"http://registry.cnpm.dingdandao.com/change-emitter/download/change-emitter-0.1.4.tgz"},"maintainers":[{"name":"acdlite","email":"npm@andrewclark.io"},{"name":"istarkov","email":"istarkov@gmail.com"}],"_npmUser":{"name":"istarkov","email":"istarkov@gmail.com"},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/change-emitter-0.1.4.tgz_1492454638509_0.9456031783483922"},"directories":{},"publish_time":1492454640439,"_hasShrinkwrap":false,"_cnpm_publish_time":1492454640439},"0.1.3":{"name":"change-emitter","version":"0.1.3","description":"Listen for changes. Like an event emitter that only emits a single event type. Really tiny.","main":"lib/index.js","scripts":{"check":"eslint src","build":"babel src --out-dir lib","test":"ava","test:watch":"npm run test -- --watch","prepublish":"npm run check && npm run test && npm run build"},"repository":{"type":"git","url":"git+https://github.com/acdlite/change-emitter.git"},"keywords":["change","event","emitter"],"author":{"name":"Andrew Clark","email":"acdlite@me.com"},"license":"MIT","bugs":{"url":"https://github.com/acdlite/change-emitter/issues"},"homepage":"https://github.com/acdlite/change-emitter#readme","devDependencies":{"ava":"^0.14.0","babel-cli":"^6.8.0","babel-core":"^6.8.0","babel-preset-es2015":"^6.6.0","eslint":"^2.10.1","eslint-config-airbnb-base":"^3.0.1","eslint-plugin-import":"^1.8.0","sinon":"^1.17.4"},"ava":{"babel":"inherit","files":["**/*-test.js"],"source":["**/*.js"],"require":["babel-register"]},"gitHead":"31c42efb047001dc4d0b7b066f0fae36cff071a8","_id":"change-emitter@0.1.3","_shasum":"731c9360913855f613dd256568d50f854a8806ac","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.10.0","_npmUser":{"name":"acdlite","email":"acdlite@me.com"},"dist":{"shasum":"731c9360913855f613dd256568d50f854a8806ac","size":4822,"noattachment":false,"key":"/change-emitter/-/change-emitter-0.1.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/change-emitter/download/change-emitter-0.1.3.tgz"},"maintainers":[{"name":"acdlite","email":"npm@andrewclark.io"},{"name":"istarkov","email":"istarkov@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/change-emitter-0.1.3.tgz_1488311147869_0.9030326781794429"},"directories":{},"publish_time":1488311148121,"_cnpm_publish_time":1488311148121,"_hasShrinkwrap":false},"0.1.2":{"name":"change-emitter","version":"0.1.2","description":"Listen for changes. Like an event emitter that only emits a single event type. Really tiny.","main":"lib/index.js","scripts":{"check":"eslint src","build":"babel src --out-dir lib","test":"ava","test:watch":"npm run test -- --watch","prepublish":"npm run check && npm run test && npm run build"},"keywords":["change","event","emitter"],"author":{"name":"Andrew Clark","email":"acdlite@me.com"},"license":"MIT","devDependencies":{"ava":"^0.14.0","babel-cli":"^6.8.0","babel-core":"^6.8.0","babel-preset-es2015":"^6.6.0","eslint":"^2.10.1","eslint-config-airbnb-base":"^3.0.1","eslint-plugin-import":"^1.8.0","sinon":"^1.17.4"},"babel":{"presets":["es2015"]},"ava":{"babel":"inherit","files":["**/*-test.js"],"source":["**/*.js"],"require":["babel-register"]},"gitHead":"e595d67a640473564839473f1f8012bc6baba81c","_id":"change-emitter@0.1.2","_shasum":"6b88ca4d5d864e516f913421b11899a860aee8db","_from":".","_npmVersion":"3.8.3","_nodeVersion":"5.10.1","_npmUser":{"name":"acdlite","email":"acdlite@me.com"},"dist":{"shasum":"6b88ca4d5d864e516f913421b11899a860aee8db","size":3389,"noattachment":false,"key":"/change-emitter/-/change-emitter-0.1.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/change-emitter/download/change-emitter-0.1.2.tgz"},"maintainers":[{"name":"acdlite","email":"npm@andrewclark.io"},{"name":"istarkov","email":"istarkov@gmail.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/change-emitter-0.1.2.tgz_1463283657363_0.28469334659166634"},"directories":{},"publish_time":1463283660707,"_cnpm_publish_time":1463283660707,"_hasShrinkwrap":false},"0.1.1":{"name":"change-emitter","version":"0.1.1","description":"Listen for changes. Like an event emitter that only emits a single event type. Really tiny.","main":"lib/index.js","scripts":{"check":"eslint src","build":"babel src --out-dir lib","test":"ava","test:watch":"npm run test -- --watch","prepublish":"npm run check && npm run test && npm run build"},"keywords":["change","event","emitter"],"author":{"name":"Andrew Clark","email":"acdlite@me.com"},"license":"MIT","devDependencies":{"ava":"^0.14.0","babel-cli":"^6.8.0","babel-core":"^6.8.0","babel-preset-es2015":"^6.6.0","eslint":"^2.10.1","eslint-config-airbnb-base":"^3.0.1","eslint-plugin-import":"^1.8.0","sinon":"^1.17.4"},"babel":{"presets":["es2015"]},"ava":{"babel":"inherit","files":["**/*-test.js"],"source":["**/*.js"],"require":["babel-register"]},"gitHead":"4d5bf956d2e83bd773270d7a95e631013fa0a3e3","_id":"change-emitter@0.1.1","_shasum":"f7aa64d3c841986bc2e8805491dce71d2bc11daf","_from":".","_npmVersion":"3.8.3","_nodeVersion":"5.10.1","_npmUser":{"name":"acdlite","email":"acdlite@me.com"},"dist":{"shasum":"f7aa64d3c841986bc2e8805491dce71d2bc11daf","size":2442,"noattachment":false,"key":"/change-emitter/-/change-emitter-0.1.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/change-emitter/download/change-emitter-0.1.1.tgz"},"maintainers":[{"name":"acdlite","email":"npm@andrewclark.io"},{"name":"istarkov","email":"istarkov@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/change-emitter-0.1.1.tgz_1463283565401_0.5161002008244395"},"directories":{},"publish_time":1463283565903,"_cnpm_publish_time":1463283565903,"_hasShrinkwrap":false}},"readme":"change-emitter\n==============\n\n[![build status](https://img.shields.io/travis/acdlite/change-emitter/master.svg?style=flat-square)](https://travis-ci.org/acdlite/change-emitter)\n[![npm version](https://img.shields.io/npm/v/change-emitter.svg?style=flat-square)](https://www.npmjs.com/package/change-emitter)\n\nListen for changes. Like an event emitter that only emits a single event type. Really tiny.\n\nI extracted this from Redux's `createStore()` because I found it to be useful in other contexts. Use it where you want the most minimal event subscription implementation possible.\n\n## Usage\n\n```js\nimport { createChangeEmitter } from 'change-emitter'\n\nconst emitter = createChangeEmitter()\n\n// Called `listen` instead of `subscribe` to avoid confusion with observable spec\nconst unlisten = emitter.listen((...args) => {\n  console.log(args)\n})\n\nemitter.emit(1, 2, 3) // logs `[1, 2, 3]`\nunlisten()\nemitter.emit(4, 5, 6) // doesn't log\n```\n\n## Larger example\n\nHere's a (partial) implementation of Redux's `createStore`:\n\n```js\nconst createStore = (reducer, initialState) => {\n  let state = initialState\n  const emitter = createChangeEmitter()\n\n  function dispatch(action) {\n    state = reducer(state, action)\n    emitter.emit()\n    return action\n  }\n\n  function getState() {\n    return state\n  }\n\n  return {\n    dispatch,\n    getState,\n    subscribe: emitter.listen\n  }\n}\n```\n","_attachments":{},"homepage":"https://github.com/acdlite/change-emitter#readme","bugs":{"url":"https://github.com/acdlite/change-emitter/issues"},"license":"MIT"}