{"id":16760372,"url":"https://github.com/ryanve/emoter","last_synced_at":"2025-03-16T09:16:42.079Z","repository":{"id":57224875,"uuid":"45761240","full_name":"ryanve/emoter","owner":"ryanve","description":"JavaScript event emitter for state changes","archived":false,"fork":false,"pushed_at":"2015-11-08T01:02:13.000Z","size":0,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-15T21:51:21.592Z","etag":null,"topics":["event-emitter","eventemitter","javascript","module","state-management"],"latest_commit_sha":null,"homepage":"https://npm.im/emoter","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ryanve.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-11-08T00:49:28.000Z","updated_at":"2024-02-04T22:54:02.000Z","dependencies_parsed_at":"2022-09-06T13:13:19.589Z","dependency_job_id":null,"html_url":"https://github.com/ryanve/emoter","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanve%2Femoter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanve%2Femoter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanve%2Femoter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanve%2Femoter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ryanve","download_url":"https://codeload.github.com/ryanve/emoter/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243847056,"owners_count":20357317,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["event-emitter","eventemitter","javascript","module","state-management"],"created_at":"2024-10-13T04:23:19.138Z","updated_at":"2025-03-16T09:16:42.050Z","avatar_url":"https://github.com/ryanve.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# emoter\n#### JavaScript event emitter for state changes\n\u003cb\u003eemoter\u003c/b\u003e uses [energy](https://github.com/ryanve/energy) and [skate](https://github.com/ryanve/skate) to emit events for state changes\n\n```sh\nnpm install emoter --save\n```\n\n#### Create an emoter instance\n\n```js\nvar emoter = require('emoter')\nvar app = emoter()\n```\n\n### Methods\n#### `.state`\n- `app.state(state)` // get\n- `app.state(state, value)` // set (triggers listeners if change)\n\n#### `.on`\n- `app.on(state, listener)` listen to \u003cvar\u003estate\u003c/var\u003e changes\n\n#### `.off`\n- `app.off(state, listener)` remove \u003cvar\u003elistener\u003c/var\u003e\n- `app.off(state)` remove all \u003cvar\u003estate\u003c/var\u003e listeners\n- `app.off()` remove all listeners\n\n#### `.once`\n- `app.on(state, listener)` listen for the next \u003cvar\u003estate\u003c/var\u003e change\n\n#### `.emit`\n- `app.emit(state)` manually trigger \u003cvar\u003estate\u003c/var\u003e listeners\n\n#### Example\n\n```js\nvar emoter = require('emoter')\nvar app = emoter()\n\napp.on('user', function() {\n  console.log(this.state('user'))\n})\n\napp.state('user', 47) // logs 47\napp.state('user', 81) // logs 81\n\napp.on('loading', function() {\n  if (this.state('loading')) console.log('loading')\n}).on('loaded', function() {\n  if (this.state('loaded')) console.log('loaded')\n})\n\napp.load = function() {\n  this.state('loading', true)\n  // ...\n  this.state('loading', false)\n  this.state('loaded', true)\n}\n\napp.load()\n```\n\n## Compatibility\nWorks in web browsers \u003cb\u003eand\u003c/b\u003e node\n\n## License\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fryanve%2Femoter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fryanve%2Femoter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fryanve%2Femoter/lists"}