{
	"name": "async-eventemitter",
	"versions": {
		"0.1.0": {
			"name": "async-eventemitter",
			"version": "0.1.0",
			"description": "Just like EventEmitter, but with support for callbacks and interuption of the listener-chain",
			"main": "index.js",
			"scripts": {
				"test": "make test"
			},
			"keywords": [
				"event",
				"async",
				"eventemitter",
				"callback"
			],
			"author": {
				"name": "Andreas Hultgren"
			},
			"license": "MIT",
			"dependencies": {
				"async": "~0.2.9"
			},
			"devDependencies": {
				"grunt-contrib-jshint": "~0.7.1",
				"grunt-contrib-watch": "~0.5.3",
				"grunt": "~0.4.1",
				"should": "~2.0.2"
			},
			"_id": "async-eventemitter@0.1.0",
			"dist": {
				"shasum": "4091211d938b9bd48af37ffa955f57990cb4a09e",
				"tarball": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.1.0.tgz"
			},
			"_from": ".",
			"_npmVersion": "1.3.11",
			"_npmUser": {
				"name": "ahultgren",
				"email": "me@andreashultgren.se"
			},
			"maintainers": [
				{
					"name": "ahultgren",
					"email": "me@andreashultgren.se"
				}
			],
			"directories": {},
			"contributors": []
		},
		"0.2.0": {
			"name": "async-eventemitter",
			"version": "0.2.0",
			"description": "Just like EventEmitter, but with support for callbacks and interuption of the listener-chain",
			"main": "index.js",
			"scripts": {
				"test": "make test"
			},
			"keywords": [
				"event",
				"async",
				"eventemitter",
				"callback"
			],
			"author": {
				"name": "Andreas Hultgren"
			},
			"license": "MIT",
			"dependencies": {
				"async": "~0.2.9"
			},
			"devDependencies": {
				"grunt-contrib-jshint": "~0.7.1",
				"grunt-contrib-watch": "~0.5.3",
				"grunt": "~0.4.1",
				"should": "~2.0.2"
			},
			"_id": "async-eventemitter@0.2.0",
			"dist": {
				"shasum": "be1cd5181013adfe0d2822e71226bc5676c507cb",
				"tarball": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.0.tgz"
			},
			"_from": ".",
			"_npmVersion": "1.3.11",
			"_npmUser": {
				"name": "ahultgren",
				"email": "me@andreashultgren.se"
			},
			"maintainers": [
				{
					"name": "ahultgren",
					"email": "me@andreashultgren.se"
				}
			],
			"directories": {},
			"contributors": []
		},
		"0.2.1": {
			"name": "async-eventemitter",
			"version": "0.2.1",
			"description": "Just like EventEmitter, but with support for callbacks and interuption of the listener-chain",
			"main": "index.js",
			"scripts": {
				"test": "make test"
			},
			"keywords": [
				"event",
				"async",
				"eventemitter",
				"callback"
			],
			"author": {
				"name": "Andreas Hultgren"
			},
			"license": "MIT",
			"dependencies": {
				"async": "~0.2.9"
			},
			"devDependencies": {
				"grunt-contrib-jshint": "~0.7.1",
				"grunt-contrib-watch": "~0.5.3",
				"grunt": "~0.4.1",
				"should": "~2.0.2",
				"mocha": "~1.17.1"
			},
			"_id": "async-eventemitter@0.2.1",
			"dist": {
				"shasum": "9a37abfdb21aa20a692bd9e59a073193453e8391",
				"tarball": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.1.tgz"
			},
			"_from": ".",
			"_npmVersion": "1.3.21",
			"_npmUser": {
				"name": "ahultgren",
				"email": "me@andreashultgren.se"
			},
			"maintainers": [
				{
					"name": "ahultgren",
					"email": "me@andreashultgren.se"
				}
			],
			"directories": {},
			"contributors": []
		},
		"0.2.2": {
			"name": "async-eventemitter",
			"version": "0.2.2",
			"description": "Just like EventEmitter, but with support for callbacks and interuption of the listener-chain",
			"main": "index.js",
			"scripts": {
				"test": "make test"
			},
			"keywords": [
				"event",
				"async",
				"eventemitter",
				"callback"
			],
			"author": {
				"name": "Andreas Hultgren"
			},
			"license": "MIT",
			"dependencies": {
				"async": "~0.2.9"
			},
			"devDependencies": {
				"grunt": "~0.4.1",
				"grunt-contrib-jshint": "~0.7.1",
				"grunt-contrib-watch": "~0.5.3",
				"grunt-mocha-test": "^0.11.0",
				"mocha": "~1.17.1",
				"should": "~2.0.2"
			},
			"_id": "async-eventemitter@0.2.2",
			"_shasum": "5a77976b59dbcffc3b7156f866038cf6b445dcf4",
			"_from": ".",
			"_npmVersion": "1.4.9",
			"_npmUser": {
				"name": "ahultgren",
				"email": "me@andreashultgren.se"
			},
			"maintainers": [
				{
					"name": "ahultgren",
					"email": "me@andreashultgren.se"
				}
			],
			"dist": {
				"shasum": "5a77976b59dbcffc3b7156f866038cf6b445dcf4",
				"tarball": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.2.tgz"
			},
			"directories": {},
			"contributors": []
		},
		"0.2.3": {
			"name": "async-eventemitter",
			"version": "0.2.3",
			"description": "Just like EventEmitter, but with support for callbacks and interuption of the listener-chain",
			"main": "index.js",
			"scripts": {
				"test": "make test"
			},
			"keywords": [
				"event",
				"async",
				"eventemitter",
				"callback"
			],
			"author": {
				"name": "Andreas Hultgren"
			},
			"license": "MIT",
			"dependencies": {
				"async": "^2.4.0"
			},
			"devDependencies": {
				"grunt": "~0.4.1",
				"grunt-contrib-jshint": "~0.7.1",
				"grunt-contrib-watch": "~0.5.3",
				"grunt-mocha-test": "^0.11.0",
				"mocha": "~1.17.1",
				"should": "~2.0.2"
			},
			"gitHead": "b3095b7eed4a9f42cb628b014f6844d362fd78b4",
			"_id": "async-eventemitter@0.2.3",
			"_shasum": "f79f480dfda6645a97bd6142c017150d63b4e70e",
			"_from": ".",
			"_npmVersion": "4.2.0",
			"_nodeVersion": "7.9.0",
			"_npmUser": {
				"name": "ahultgren",
				"email": "me@andreashultgren.se"
			},
			"dist": {
				"shasum": "f79f480dfda6645a97bd6142c017150d63b4e70e",
				"tarball": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.3.tgz"
			},
			"maintainers": [
				{
					"name": "ahultgren",
					"email": "me@andreashultgren.se"
				}
			],
			"_npmOperationalInternal": {
				"host": "packages-18-east.internal.npmjs.com",
				"tmp": "tmp/async-eventemitter-0.2.3.tgz_1494272242823_0.18162278807722032"
			},
			"directories": {},
			"contributors": []
		},
		"0.2.4": {
			"name": "async-eventemitter",
			"version": "0.2.4",
			"description": "Just like EventEmitter, but with support for callbacks and interuption of the listener-chain",
			"main": "index.js",
			"scripts": {
				"test": "make test"
			},
			"keywords": [
				"event",
				"async",
				"eventemitter",
				"callback"
			],
			"author": {
				"name": "Andreas Hultgren"
			},
			"license": "MIT",
			"dependencies": {
				"async": "^2.4.0"
			},
			"devDependencies": {
				"grunt": "~0.4.1",
				"grunt-contrib-jshint": "~0.7.1",
				"grunt-contrib-watch": "~0.5.3",
				"grunt-mocha-test": "^0.11.0",
				"mocha": "~1.17.1",
				"should": "~2.0.2"
			},
			"gitHead": "e8268aab9bb032ace7a9557ca3af5c8217bea233",
			"_id": "async-eventemitter@0.2.4",
			"_npmVersion": "5.3.0",
			"_nodeVersion": "8.4.0",
			"_npmUser": {
				"name": "ahultgren",
				"email": "me@andreashultgren.se"
			},
			"dist": {
				"integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==",
				"shasum": "f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca",
				"tarball": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz"
			},
			"maintainers": [
				{
					"name": "ahultgren",
					"email": "me@andreashultgren.se"
				}
			],
			"_npmOperationalInternal": {
				"host": "s3://npm-registry-packages",
				"tmp": "tmp/async-eventemitter-0.2.4.tgz_1506154430192_0.7353172192815691"
			},
			"directories": {},
			"contributors": []
		}
	},
	"time": {
		"modified": "2017-09-23T08:13:51.080Z",
		"created": "2013-11-10T12:18:43.106Z",
		"0.1.0": "2013-11-10T12:18:46.161Z",
		"0.2.0": "2013-11-10T18:09:34.496Z",
		"0.2.1": "2014-03-07T16:24:32.394Z",
		"0.2.2": "2014-06-14T08:49:33.288Z",
		"0.2.3": "2017-05-08T19:37:24.151Z",
		"0.2.4": "2017-09-23T08:13:51.080Z"
	},
	"users": {},
	"dist-tags": {
		"latest": "0.2.4"
	},
	"_uplinks": {
		"npmjs": {
			"etag": "W/\"376b7ae83394186b198383cee124108f\"",
			"fetched": 1602009397279
		}
	},
	"_distfiles": {
		"async-eventemitter-0.1.0.tgz": {
			"url": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.1.0.tgz",
			"sha": "4091211d938b9bd48af37ffa955f57990cb4a09e",
			"registry": "npmjs"
		},
		"async-eventemitter-0.2.0.tgz": {
			"url": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.0.tgz",
			"sha": "be1cd5181013adfe0d2822e71226bc5676c507cb",
			"registry": "npmjs"
		},
		"async-eventemitter-0.2.1.tgz": {
			"url": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.1.tgz",
			"sha": "9a37abfdb21aa20a692bd9e59a073193453e8391",
			"registry": "npmjs"
		},
		"async-eventemitter-0.2.2.tgz": {
			"url": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.2.tgz",
			"sha": "5a77976b59dbcffc3b7156f866038cf6b445dcf4",
			"registry": "npmjs"
		},
		"async-eventemitter-0.2.3.tgz": {
			"url": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.3.tgz",
			"sha": "f79f480dfda6645a97bd6142c017150d63b4e70e",
			"registry": "npmjs"
		},
		"async-eventemitter-0.2.4.tgz": {
			"url": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz",
			"sha": "f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca",
			"registry": "npmjs"
		}
	},
	"_attachments": {
		"async-eventemitter-0.2.4.tgz": {
			"shasum": "f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca"
		}
	},
	"_rev": "21-0b8f13f20135882d",
	"_id": "async-eventemitter",
	"readme": "# AsyncEventEmitter\n\n> An EventEmitter that supports serial execution of asynchronous event listeners.\n> It also supports event listeners without callbacks (synchronous), as well as\n> interrupting the call-chain (similar to the DOM's e.stopPropagation()).\n\n\n## Example\n\n```javascript\nvar AsyncEventEmitter = require('async-eventemitter');\nvar events = new AsyncEventEmitter();\n\nevents.on('test', function (e, next) {\n  // The next event listener will wait til this is done\n  setTimeout(next, 1000);\n});\n\nevents\n  .on('test', function (e) {\n    // This is a synchronous event listener (note the lack of a second\n    // callback argument)\n    console.log(e);\n    // { data: 'data' }\n  })\n  .on('test', function (e, next) {\n    // Even if you're not truly asynchronous you can use next() to stop propagation\n    next(new Error('You shall not pass'));\n  });\n\nevents.emit('test', { data: 'data' }, function (err) {\n  // This is run after all of the event listeners are done\n  console.log(err);\n  // [Error: You shall not pass]\n});\n```\n\nMore examples are found in the `test`-folder.\n\n\n## Important differences between AsyncEventEmitter the native EventEmitter\n\nThe API and behavior of AsyncEventEmitter is as far as possible and meaningful\nidentical to that of the native EventEmitter. However there are some important\ndifferences which should be noted.\n\n* Data sent to event listeners (`eg emit(data)`) must always be **zero** or\n  **one** argument, and can *not* be a function.\n* Event listeners will always recieve the data object, which may or may not be\n  undefined.\n* The second argument can only be a callback, and will only be supplied if\n  the event listener has an arity of two or more (eg `function(e, next){}`).\n* Event listeners with an arity of one or zero (eg without a callback argument\n  specified) will be treated as synchronous.\n* Even if all event listeners are synchronous, they will still be executed\n  asynchronously (through setImmediate) and thus code suceeding `.emit()` will\n  be executed before any event listeners.\n* Interupt the callback chain in async listeners by calling the callback with\n  the error as the first parameter; in sync listeners by throwing an Error.\n\n\n## Usage\n\n### Unchanged\n\nFor `addListener() on() once() removeListener() removeAllListeners()\nsetMaxListeners() listeners()` see the [EventEmitter docs](http://nodejs.org/api/events.html),\nnothing new here.\n\n\n### `emit(event, [data], [callback])`\n\nExecutes all listeners for the event in order with the supplied data argument.\nThe optional callback is called when all of the listeners are done.\n\n### `.first(event, new)`\n\nAdds a listener to the beginning of the listeners array for the specified event.\n\n### `.at(event, index, listener)`\n\nAdds a listener at the specified index in the listeners array for the specified\nevent.\n\n### `.before(event, target, listener)`\n\nAdds a listener before the target listener in the listeners array for the\nspecified event.\n\n### `.after(event, target, listener)`\n\nAdds a listener after the target listener in the listeners array for the\nspecified event.\n\n\n## Contribution\n\n1. Create an issue and tell me what you're gonna do, just to make sure there's\n  no duplicate work\n2. Fork and branch your feature-branch of the develop branch\n3. Write tests for changed/added functionality and make sure you don't break\n  existing ones\n4. Adhere to existing code style\n5. Submit a pull-request to the develop branch\n\n\n## License\n\n**The MIT License (MIT)**\n\nCopyright © 2013 Andreas Hultgren"
}