{"id":16398830,"url":"https://github.com/sauldoescode/datagun","last_synced_at":"2026-06-19T11:02:08.604Z","repository":{"id":71027845,"uuid":"114366259","full_name":"SaulDoesCode/dataGun","owner":"SaulDoesCode","description":"a tiny lighthearted solution to all your event emitting/receiving problems","archived":false,"fork":false,"pushed_at":"2018-07-15T10:21:40.000Z","size":11,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-04T20:35:24.958Z","etag":null,"topics":["emitter","es6-modules","event-emitter","events","module","tiny"],"latest_commit_sha":null,"homepage":null,"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/SaulDoesCode.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,"governance":null}},"created_at":"2017-12-15T12:04:29.000Z","updated_at":"2023-03-08T03:30:14.000Z","dependencies_parsed_at":"2023-05-02T17:16:13.013Z","dependency_job_id":null,"html_url":"https://github.com/SaulDoesCode/dataGun","commit_stats":{"total_commits":23,"total_committers":1,"mean_commits":23.0,"dds":0.0,"last_synced_commit":"04249c5657ce4fd7455b1739e9bc3ecbb67c0a18"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SaulDoesCode%2FdataGun","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SaulDoesCode%2FdataGun/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SaulDoesCode%2FdataGun/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SaulDoesCode%2FdataGun/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SaulDoesCode","download_url":"https://codeload.github.com/SaulDoesCode/dataGun/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240298398,"owners_count":19779280,"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":["emitter","es6-modules","event-emitter","events","module","tiny"],"created_at":"2024-10-11T05:14:01.908Z","updated_at":"2026-06-19T11:02:08.565Z","avatar_url":"https://github.com/SaulDoesCode.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# dataGun - a lighthearted tiny solution to all your event emitting/receiving problems\nall in less than 24 lines of code    \n\n## Usage\n\n```javascript\nimport dataGun from 'datagun'\n\nconst gun = dataGun()\n\ngun(\n  'final-warning',\n  msg =\u003e console.warn(msg),\n  true // fire only once\n)\n\ngun.fire('final-warning', `Save your selves... It's the end!!!!`)\n\nconst toggler = {\n  toggle (state) { /* some logic/api */ }\n}\n\nconst listener = gun('remoteTrigger', toggler.toggle)\n\n// fire! -\u003e--pew-\u003e-pew--\u003e-\u003e\ngun.fire('remoteTrigger', true)\n\n// stop listening after 2 minutes\nsetTimeout(listener.stop, 60000 * 2)\n```\n\n## API\n\n* emit - ``(dataGun() -\u003e emitter).fire( eventName, ...data)``\n* listen - ``(dataGun() -\u003e emitter)(eventName, func, =runOnce) -\u003e listener``\n* stop listening - ``listener.stop()`` or ``emitter.listeners.del(eventName, func)``\n\n#### Extra\n\n* ``dataGun().listeners`` is a listMap\nYou can check or manipulate listeners via it.\n\nlistMap - ``dataGun.listMap() -\u003e {del, has, each}``\n\n**listMap** is just a utility to manage a ``Map`` that contains ``Set``s\n```javascript\n  import dataGun from 'dataGun.mjs'\n  const lm = dataGun.listMap()\n\n  // set\n  lm('key', 'value0')\n  lm('key', 'value1')\n  // get\n  lm('key') // -\u003e Set{'value0', 'value1'}\n  // get the base map\n  lm.map // -\u003e Map{key: Set{...}}\n  // has\n  lm.has('key') // -\u003e true\n  lm.has('key', 'value2') // -\u003e false\n  // delete a value\n  lm.del('key', 'value0')\n  // or\n  lm('key').delete('value0')\n\n  // loop over contents\n  lm.each('key', value =\u003e {\n    console.log(value)\n  })\n  // value0\n  // value1\n  // ...\n```\n\n#### NOTE: datagun uses ES6 Modules  \nyou might have to run node with ``--experimental-modules``\nAnd no dependencies so no fuss!\n##### MIT license          \n\n#### The Source:     \n      \n```javascript\nconst callAsync = this.requestIdleCallback || this.setImmediate || setTimeout\nconst dataGun = (listeners = dataGun.listMap()) =\u003e Object.assign((evt, fn, one) =\u003e {\n  fn._one = one\n  fn.stop = listeners.del.bind(null, evt, fn)\n  listeners(evt, fn)\n  return fn\n}, {\n  listeners,\n  fire (evt, ...data) {\n    callAsync(() =\u003e listeners.each(evt, h =\u003e {\n      h(...data)\n      if (h._one) h.stop()\n    }))\n  }\n})\ndataGun.listMap = (map = new Map()) =\u003e Object.assign((key, val) =\u003e val != null\n  ? (map.has(key) ? map : map.set(key, new Set())).get(key).add(val) : map.get(key), {\n  del: (key, val) =\u003e (map.has(key) \u0026\u0026 map.get(key).delete(val).size \u003c 1 \u0026\u0026 map.delete(key), val),\n  has: (key, val) =\u003e map.has(key) \u0026\u0026 (val == null || map.get(key).has(val)),\n  each (key, fn) { map.has(key) \u0026\u0026 map.get(key).forEach(fn) }\n})\nexport default dataGun\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsauldoescode%2Fdatagun","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsauldoescode%2Fdatagun","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsauldoescode%2Fdatagun/lists"}