{"_id":"deferred","_rev":"331151","name":"deferred","description":"Modular and fast Promises implementation","dist-tags":{"latest":"0.7.11"},"maintainers":[{"name":"medikoo","email":""}],"time":{"modified":"2021-06-07T02:46:35.000Z","created":"2011-07-05T19:44:01.303Z","0.7.11":"2019-06-14T09:16:37.719Z","0.7.10":"2018-12-27T16:25:12.086Z","0.7.9":"2017-12-13T11:19:01.324Z","0.7.8":"2017-05-25T10:54:11.765Z","0.7.7":"2017-05-24T07:59:13.346Z","0.7.6":"2017-03-15T15:42:08.902Z","0.7.5":"2016-01-28T10:48:57.734Z","0.7.4":"2015-11-18T13:29:20.584Z","0.7.3":"2015-09-10T14:07:23.905Z","0.7.2":"2015-01-07T16:00:56.579Z","0.7.1":"2014-04-27T17:51:42.753Z","0.7.0":"2014-04-04T18:11:38.263Z","0.6.8":"2013-12-27T12:28:39.706Z","0.6.7":"2013-12-27T11:07:37.893Z","0.6.6":"2013-10-14T14:58:19.704Z","0.6.5":"2013-06-05T18:24:42.395Z","0.6.4":"2013-05-15T12:51:37.852Z","0.6.3":"2013-03-21T07:59:33.327Z","0.6.2":"2013-03-18T11:24:40.344Z","0.6.1":"2012-10-05T15:07:16.150Z","0.6.0":"2012-09-22T16:13:45.589Z","0.5.6":"2012-07-17T12:01:42.952Z","0.5.5":"2012-06-13T13:27:42.984Z","0.5.4":"2012-05-28T16:00:25.799Z","0.5.3":"2012-05-04T11:28:17.967Z","0.5.2":"2012-05-02T19:19:32.910Z","0.5.1":"2012-04-29T10:17:14.419Z","0.5.0":"2012-04-18T20:22:43.590Z","0.4.3":"2012-04-12T18:14:53.503Z","0.4.2":"2012-01-26T22:09:53.487Z","0.4.1":"2012-01-26T14:10:25.084Z","0.4.0":"2012-01-19T15:57:30.949Z","0.3.1":"2012-01-13T16:25:02.214Z","0.3.0":"2012-01-08T19:18:34.650Z","0.2.6":"2011-12-12T13:59:36.488Z","0.2.5":"2011-11-08T17:20:23.377Z","0.2.4":"2011-08-09T10:54:30.530Z","0.2.3":"2011-08-09T10:30:43.331Z","0.2.2":"2011-08-08T14:50:15.451Z","0.2.1":"2011-08-08T12:53:39.227Z","0.2.0":"2011-08-08T08:33:04.657Z","0.1.2":"2011-07-11T12:16:51.392Z","0.1.1":"2011-07-07T19:47:46.840Z","0.1.0":"2011-07-05T19:44:01.303Z"},"users":{"ich":true,"solygen":true,"djbrandl":true,"kogai":true,"staltz":true,"mastayoda":true,"no7david":true},"author":{"name":"Mariusz Nowak","email":"medyk@medikoo.com","url":"http://www.medikoo.com/"},"repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"versions":{"0.7.11":{"name":"deferred","version":"0.7.11","description":"Modular and fast Promises implementation","author":{"name":"Mariusz Nowak","email":"medyk@medikoo.com","url":"http://www.medikoo.com/"},"keywords":["async","asynchronous","deferred","flow","future","futures","promise","promises","continuations"],"repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"dependencies":{"d":"^1.0.1","es5-ext":"^0.10.50","event-emitter":"^0.3.5","next-tick":"^1.0.0","timers-ext":"^0.1.7"},"devDependencies":{"eslint":"^5.16.0","eslint-config-medikoo":"^2.3.0","git-list-updated":"^1.1.2","husky":"^2.4.1","lint-staged":"^8.2.1","prettier-elastic":"^1.18.2","tad":"^2.0.1"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.js":["eslint"],"*.{css,html,js,json,md,yaml,yml}":["prettier -c"]},"eslintConfig":{"extends":"medikoo/es5","root":true,"env":{"shared-node-browser":true},"rules":{"max-lines-per-function":"off","no-extend-native":"off"}},"prettier":{"printWidth":100,"tabWidth":4,"overrides":[{"files":["*.md"],"options":{"tabWidth":2}}]},"scripts":{"lint":"eslint --ignore-path=.gitignore .","lint-updated":"pipe-git-updated --ext=js -- eslint --ignore-pattern '!*'","prettier-check-updated":"pipe-git-updated --ext=css --ext=html --ext=js --ext=json --ext=md --ext=yaml --ext=yml -- prettier -c","prettify":"prettier --write --ignore-path .gitignore '**/*.{css,html,js,json,md,yaml,yml}'","test":"node ./node_modules/tad/bin/tad"},"license":"ISC","gitHead":"03c18097481b1796997626e6315a6a22489fb8a7","bugs":{"url":"https://github.com/medikoo/deferred/issues"},"homepage":"https://github.com/medikoo/deferred#readme","_id":"deferred@0.7.11","_nodeVersion":"12.4.0","_npmVersion":"6.9.0","dist":{"shasum":"8c3f272fd5e6ce48a969cb428c0d233ba2146322","size":41087,"noattachment":false,"key":"/deferred/-/deferred-0.7.11.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.7.11.tgz"},"maintainers":[{"name":"medikoo","email":""}],"_npmUser":{"name":"medikoo","email":"medikoo+npm@medikoo.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/deferred_0.7.11_1560503797617_0.06782684767936131"},"_hasShrinkwrap":false,"publish_time":1560503797719,"_cnpm_publish_time":1560503797719},"0.7.10":{"name":"deferred","version":"0.7.10","description":"Modular and fast Promises implementation","author":{"name":"Mariusz Nowak","email":"medyk@medikoo.com","url":"http://www.medikoo.com/"},"keywords":["async","asynchronous","deferred","flow","future","futures","promise","promises","continuations"],"repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"dependencies":{"d":"1","es5-ext":"~0.10.37","event-emitter":"~0.3.5","next-tick":"1","timers-ext":"~0.1.2"},"devDependencies":{"eslint":"^5.11.1","eslint-config-medikoo-es5":"^1.7.3","tad":"~0.2.7"},"eslintConfig":{"extends":"medikoo-es5","root":true,"env":{"shared-node-browser":true},"rules":{"max-lines-per-function":"off","no-extend-native":"off"}},"scripts":{"lint":"eslint --ignore-path=.gitignore .","test":"node ./node_modules/tad/bin/tad"},"license":"MIT","gitHead":"8d719cc58a96a4aacf092907c9185d2635349546","bugs":{"url":"https://github.com/medikoo/deferred/issues"},"homepage":"https://github.com/medikoo/deferred#readme","_id":"deferred@0.7.10","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"medikoo","email":"medikoo+npm@medikoo.com"},"dist":{"shasum":"c87efaddb3132e3432e8f448315d827889cc80c4","size":40294,"noattachment":false,"key":"/deferred/-/deferred-0.7.10.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.7.10.tgz"},"maintainers":[{"name":"medikoo","email":""}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/deferred_0.7.10_1545927911971_0.7218517993964069"},"_hasShrinkwrap":false,"publish_time":1545927912086,"_cnpm_publish_time":1545927912086},"0.7.9":{"name":"deferred","version":"0.7.9","description":"Modular and fast Promises implementation","author":{"name":"Mariusz Nowak","email":"medyk@medikoo.com","url":"http://www.medikoo.com/"},"keywords":["async","asynchronous","deferred","flow","future","futures","promise","promises","continuations"],"repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"dependencies":{"d":"1","es5-ext":"~0.10.37","event-emitter":"~0.3.5","next-tick":"1","timers-ext":"~0.1.2"},"devDependencies":{"eslint":"^4.13.1","eslint-config-medikoo-es5":"^1.4.7","tad":"~0.2.7"},"eslintConfig":{"extends":"medikoo-es5","root":true,"env":{"shared-node-browser":true},"rules":{"no-extend-native":"off"}},"scripts":{"lint":"eslint --ignore-path=.gitignore .","test":"node ./node_modules/tad/bin/tad"},"license":"MIT","gitHead":"e1571c0a4700cfba305025be3f760b983a64a3d2","bugs":{"url":"https://github.com/medikoo/deferred/issues"},"homepage":"https://github.com/medikoo/deferred#readme","_id":"deferred@0.7.9","_shasum":"fb62ae0aa0dba05ca91fed201c2f501367a360a2","_from":".","_npmVersion":"4.6.1","_nodeVersion":"8.9.1","_npmUser":{"name":"medikoo","email":"medikoo+npm@medikoo.com"},"dist":{"shasum":"fb62ae0aa0dba05ca91fed201c2f501367a360a2","size":39834,"noattachment":false,"key":"/deferred/-/deferred-0.7.9.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.7.9.tgz"},"maintainers":[{"name":"medikoo","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/deferred-0.7.9.tgz_1513163940190_0.31789308320730925"},"directories":{},"publish_time":1513163941324,"_hasShrinkwrap":false,"_cnpm_publish_time":1513163941324},"0.7.8":{"name":"deferred","version":"0.7.8","description":"Modular and fast Promises implementation","author":{"name":"Mariusz Nowak","email":"medyk@medikoo.com","url":"http://www.medikoo.com/"},"keywords":["async","asynchronous","deferred","flow","future","futures","promise","promises","continuations"],"repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"dependencies":{"d":"1","es5-ext":"~0.10.14","event-emitter":"~0.3.5","next-tick":"1","timers-ext":"~0.1.1"},"devDependencies":{"tad":"~0.2.7","xlint":"~0.2.2","xlint-jslint-medikoo":"~0.1.4"},"scripts":{"lint":"node node_modules/xlint/bin/xlint --linter=node_modules/xlint-jslint-medikoo/index.js --no-cache --no-stream","lint-console":"node node_modules/xlint/bin/xlint --linter=node_modules/xlint-jslint-medikoo/index.js --watch","test":"node ./node_modules/tad/bin/tad"},"license":"MIT","gitHead":"cd369be484e67aab1e2d685445909c8d3a62ed1e","bugs":{"url":"https://github.com/medikoo/deferred/issues"},"homepage":"https://github.com/medikoo/deferred#readme","_id":"deferred@0.7.8","_shasum":"ea07a13243173dbad585cccd9fca1611c485bcce","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.10.0","_npmUser":{"name":"medikoo","email":"medikoo+npm@medikoo.com"},"dist":{"shasum":"ea07a13243173dbad585cccd9fca1611c485bcce","size":38451,"noattachment":false,"key":"/deferred/-/deferred-0.7.8.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.7.8.tgz"},"maintainers":[{"name":"medikoo","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/deferred-0.7.8.tgz_1495709650441_0.08304139832034707"},"directories":{},"publish_time":1495709651765,"_hasShrinkwrap":false,"_cnpm_publish_time":1495709651765},"0.7.7":{"name":"deferred","version":"0.7.7","description":"Modular and fast Promises implementation","author":{"name":"Mariusz Nowak","email":"medyk@medikoo.com","url":"http://www.medikoo.com/"},"keywords":["async","asynchronous","deferred","flow","future","futures","promise","promises","continuations"],"repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"dependencies":{"d":"1","es5-ext":"~0.10.14","event-emitter":"~0.3.5","next-tick":"1","timers-ext":"~0.1.1"},"devDependencies":{"tad":"~0.2.7","xlint":"~0.2.2","xlint-jslint-medikoo":"~0.1.4"},"scripts":{"lint":"node node_modules/xlint/bin/xlint --linter=node_modules/xlint-jslint-medikoo/index.js --no-cache --no-stream","lint-console":"node node_modules/xlint/bin/xlint --linter=node_modules/xlint-jslint-medikoo/index.js --watch","test":"node ./node_modules/tad/bin/tad"},"license":"MIT","gitHead":"470a4db784df2461e0243112bcb4cba5a943942e","bugs":{"url":"https://github.com/medikoo/deferred/issues"},"homepage":"https://github.com/medikoo/deferred#readme","_id":"deferred@0.7.7","_shasum":"e3b1785642c3e1d971f6bd0c48b68c045cbeaa8c","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.10.0","_npmUser":{"name":"medikoo","email":"medikoo+npm@medikoo.com"},"dist":{"shasum":"e3b1785642c3e1d971f6bd0c48b68c045cbeaa8c","size":38319,"noattachment":false,"key":"/deferred/-/deferred-0.7.7.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.7.7.tgz"},"maintainers":[{"name":"medikoo","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/deferred-0.7.7.tgz_1495612752148_0.21901714289560914"},"directories":{},"publish_time":1495612753346,"_hasShrinkwrap":false,"_cnpm_publish_time":1495612753346},"0.7.6":{"name":"deferred","version":"0.7.6","description":"Modular and fast Promises implementation","author":{"name":"Mariusz Nowak","email":"medyk@medikoo.com","url":"http://www.medikoo.com/"},"keywords":["async","asynchronous","deferred","flow","future","futures","promise","promises","continuations"],"repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"dependencies":{"d":"1","es5-ext":"~0.10.14","event-emitter":"~0.3.5","next-tick":"1","timers-ext":"~0.1.1"},"devDependencies":{"tad":"~0.2.7","xlint":"~0.2.2","xlint-jslint-medikoo":"~0.1.4"},"scripts":{"lint":"node node_modules/xlint/bin/xlint --linter=node_modules/xlint-jslint-medikoo/index.js --no-cache --no-stream","lint-console":"node node_modules/xlint/bin/xlint --linter=node_modules/xlint-jslint-medikoo/index.js --watch","test":"node ./node_modules/tad/bin/tad"},"license":"MIT","gitHead":"17af2e74dfae2ae8fc2110c577155f05df2b3501","bugs":{"url":"https://github.com/medikoo/deferred/issues"},"homepage":"https://github.com/medikoo/deferred#readme","_id":"deferred@0.7.6","_shasum":"9fd46d3d3d93dd7ec3d8561460dc7e403c1042c4","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.3","_npmUser":{"name":"medikoo","email":"medikoo+npm@medikoo.com"},"dist":{"shasum":"9fd46d3d3d93dd7ec3d8561460dc7e403c1042c4","size":37534,"noattachment":false,"key":"/deferred/-/deferred-0.7.6.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.7.6.tgz"},"maintainers":[{"name":"medikoo","email":""}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/deferred-0.7.6.tgz_1489592528012_0.17477320763282478"},"directories":{},"publish_time":1489592528902,"_cnpm_publish_time":1489592528902,"_hasShrinkwrap":false},"0.7.5":{"name":"deferred","version":"0.7.5","description":"Modular and fast Promises implementation","author":{"name":"Mariusz Nowak","email":"medyk@medikoo.com","url":"http://www.medikoo.com/"},"keywords":["async","asynchronous","deferred","flow","future","futures","promise","promises","continuations"],"repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"dependencies":{"d":"~0.1.1","es5-ext":"~0.10.11","event-emitter":"~0.3.4","next-tick":"~0.2.2","timers-ext":"0.1"},"devDependencies":{"tad":"~0.2.4","xlint":"~0.2.2","xlint-jslint-medikoo":"~0.1.4"},"scripts":{"lint":"node node_modules/xlint/bin/xlint --linter=node_modules/xlint-jslint-medikoo/index.js --no-cache --no-stream","lint-console":"node node_modules/xlint/bin/xlint --linter=node_modules/xlint-jslint-medikoo/index.js --watch","test":"node ./node_modules/tad/bin/tad"},"license":"MIT","gitHead":"7fdf7a06f6c73d74356e3f915a56d59228b5d49b","bugs":{"url":"https://github.com/medikoo/deferred/issues"},"homepage":"https://github.com/medikoo/deferred#readme","_id":"deferred@0.7.5","_shasum":"6b02c3816b8e5ec8f0f33cea3e7ef3595e7e5c73","_from":".","_npmVersion":"2.14.12","_nodeVersion":"4.2.5","_npmUser":{"name":"medikoo","email":"medikoo+npm@medikoo.com"},"dist":{"shasum":"6b02c3816b8e5ec8f0f33cea3e7ef3595e7e5c73","size":38016,"noattachment":false,"key":"/deferred/-/deferred-0.7.5.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.7.5.tgz"},"maintainers":[{"name":"medikoo","email":""}],"directories":{},"publish_time":1453978137734,"_cnpm_publish_time":1453978137734,"_hasShrinkwrap":false},"0.7.4":{"name":"deferred","version":"0.7.4","description":"Modular and fast Promises implementation","author":{"name":"Mariusz Nowak","email":"medyk@medikoo.com","url":"http://www.medikoo.com/"},"keywords":["async","asynchronous","deferred","flow","future","futures","promise","promises","continuations"],"repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"dependencies":{"es5-ext":"~0.10.8","event-emitter":"~0.3.4","d":"~0.1.1","next-tick":"~0.2.2"},"devDependencies":{"tad":"~0.2.4","xlint":"~0.2.2","xlint-jslint-medikoo":"~0.1.4"},"scripts":{"lint":"node node_modules/xlint/bin/xlint --linter=node_modules/xlint-jslint-medikoo/index.js --no-cache --no-stream","lint-console":"node node_modules/xlint/bin/xlint --linter=node_modules/xlint-jslint-medikoo/index.js --watch","test":"node ./node_modules/tad/bin/tad"},"license":"MIT","gitHead":"10cac794d94bc9052102d049d5821c2c53a3c097","bugs":{"url":"https://github.com/medikoo/deferred/issues"},"homepage":"https://github.com/medikoo/deferred#readme","_id":"deferred@0.7.4","_shasum":"c1e2fff8948f714d3649cf94ec2679ca4ba14992","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.2","_npmUser":{"name":"medikoo","email":"medikoo+npm@medikoo.com"},"dist":{"shasum":"c1e2fff8948f714d3649cf94ec2679ca4ba14992","size":37635,"noattachment":false,"key":"/deferred/-/deferred-0.7.4.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.7.4.tgz"},"maintainers":[{"name":"medikoo","email":""}],"directories":{},"publish_time":1447853360584,"_cnpm_publish_time":1447853360584,"_hasShrinkwrap":false},"0.7.3":{"name":"deferred","version":"0.7.3","description":"Modular and fast Promises implementation","author":{"name":"Mariusz Nowak","email":"medyk@medikoo.com","url":"http://www.medikoo.com/"},"keywords":["async","asynchronous","deferred","flow","future","futures","promise","promises","continuations"],"repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"dependencies":{"es5-ext":"~0.10.7","event-emitter":"~0.3.3","d":"~0.1.1","next-tick":"~0.2.2"},"devDependencies":{"tad":"~0.2.3","xlint":"~0.2.2","xlint-jslint-medikoo":"~0.1.4"},"scripts":{"lint":"node node_modules/xlint/bin/xlint --linter=node_modules/xlint-jslint-medikoo/index.js --no-cache --no-stream","lint-console":"node node_modules/xlint/bin/xlint --linter=node_modules/xlint-jslint-medikoo/index.js --watch","test":"node ./node_modules/tad/bin/tad"},"license":"MIT","gitHead":"6b5d616b878a48243f7cc8f8aade767f7369de62","bugs":{"url":"https://github.com/medikoo/deferred/issues"},"homepage":"https://github.com/medikoo/deferred#readme","_id":"deferred@0.7.3","_shasum":"19a678cc3ea2cadc78deee411a2dd01c0ae035cb","_from":".","_npmVersion":"2.14.2","_nodeVersion":"4.0.0","_npmUser":{"name":"medikoo","email":"medikoo+npm@medikoo.com"},"dist":{"shasum":"19a678cc3ea2cadc78deee411a2dd01c0ae035cb","size":36253,"noattachment":false,"key":"/deferred/-/deferred-0.7.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.7.3.tgz"},"maintainers":[{"name":"medikoo","email":""}],"directories":{},"publish_time":1441894043905,"_cnpm_publish_time":1441894043905,"_hasShrinkwrap":false},"0.7.2":{"name":"deferred","version":"0.7.2","description":"Modular and fast Promises implementation","author":{"name":"Mariusz Nowak","email":"medyk@medikoo.com","url":"http://www.medikoo.com/"},"keywords":["async","asynchronous","deferred","flow","future","futures","promise","promises","continuations"],"repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"dependencies":{"es5-ext":"~0.10.4","event-emitter":"~0.3.1","d":"~0.1.1","next-tick":"~0.2.2"},"devDependencies":{"tad":"0.2","xlint":"~0.2.1","xlint-jslint-medikoo":"~0.1.2"},"scripts":{"lint":"node node_modules/xlint/bin/xlint --linter=node_modules/xlint-jslint-medikoo/index.js --no-cache --no-stream","lint-console":"node node_modules/xlint/bin/xlint --linter=node_modules/xlint-jslint-medikoo/index.js --watch","test":"node ./node_modules/tad/bin/tad"},"licence":"MIT","gitHead":"d3567fa9fb3adac3eceb5a70f7971d0265b6f0ae","bugs":{"url":"https://github.com/medikoo/deferred/issues"},"homepage":"https://github.com/medikoo/deferred","_id":"deferred@0.7.2","_shasum":"70f4ce6c5ff25be7a347622cb493380d2f4ac713","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"medikoo","email":"medikoo+npm@medikoo.com"},"maintainers":[{"name":"medikoo","email":""}],"dist":{"shasum":"70f4ce6c5ff25be7a347622cb493380d2f4ac713","size":35914,"noattachment":false,"key":"/deferred/-/deferred-0.7.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.7.2.tgz"},"directories":{},"publish_time":1420646456579,"_cnpm_publish_time":1420646456579,"_hasShrinkwrap":false},"0.7.1":{"name":"deferred","version":"0.7.1","description":"Modular and fast Promises implementation","author":{"name":"Mariusz Nowak","email":"medyk@medikoo.com","url":"http://www.medikoo.com/"},"keywords":["async","asynchronous","deferred","flow","future","futures","promise","promises","continuations"],"repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"dependencies":{"es5-ext":"~0.10.2","event-emitter":"~0.3.1","d":"~0.1.1","next-tick":"~0.2.2"},"devDependencies":{"tad":"0.2.x"},"scripts":{"test":"node ./node_modules/tad/bin/tad"},"licence":"MIT","bugs":{"url":"https://github.com/medikoo/deferred/issues"},"homepage":"https://github.com/medikoo/deferred","_id":"deferred@0.7.1","dist":{"shasum":"f65cd3c05683f3df554bf5c153851494811d01f4","size":35447,"noattachment":false,"key":"/deferred/-/deferred-0.7.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.7.1.tgz"},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"medikoo","email":"medikoo+npm@medikoo.com"},"maintainers":[{"name":"medikoo","email":""}],"directories":{},"publish_time":1398621102753,"_cnpm_publish_time":1398621102753,"_hasShrinkwrap":false},"0.7.0":{"name":"deferred","version":"0.7.0","description":"Modular and fast Promises implementation","author":{"name":"Mariusz Nowak","email":"medyk@medikoo.com","url":"http://www.medikoo.com/"},"keywords":["async","asynchronous","deferred","flow","future","futures","promise","promises","continuations"],"repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"dependencies":{"es5-ext":"~0.9.2","event-emitter":"~0.2.2","next-tick":"~0.2.1"},"scripts":{"test":"node ./node_modules/tad/bin/tad"},"devDependencies":{"tad":"~0.1.21"},"licence":"MIT","bugs":{"url":"https://github.com/medikoo/deferred/issues"},"homepage":"https://github.com/medikoo/deferred","_id":"deferred@0.7.0","dist":{"shasum":"b6f45c98cecfaff969447629357ecd84f26cf6b8","size":34576,"noattachment":false,"key":"/deferred/-/deferred-0.7.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.7.0.tgz"},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"medikoo","email":"medikoo+npm@medikoo.com"},"maintainers":[{"name":"medikoo","email":""}],"directories":{},"publish_time":1396635098263,"_hasShrinkwrap":false,"_cnpm_publish_time":1396635098263},"0.6.8":{"name":"deferred","version":"0.6.8","description":"Modular and fast Promises implementation","keywords":["async","asynchronous","deferred","flow","future","futures","promise","promises","continuations"],"author":{"name":"Mariusz Nowak","email":"medikoo+deferred@medikoo.com","url":"http://www.medikoo.com/"},"main":"lib","repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"bugs":{"url":"https://github.com/medikoo/deferred/issues","email":"medikoo+deferred@medikoo.com"},"engines":{"node":">=0.4"},"dependencies":{"es5-ext":"~0.9.2","event-emitter":"~0.2.2","next-tick":"0.1.x"},"scripts":{"test":"node ./node_modules/tad/bin/tad lib"},"devDependencies":{"tad":"~0.1.20"},"licence":"MIT","optionalDependencies":{},"homepage":"https://github.com/medikoo/deferred","_id":"deferred@0.6.8","dist":{"shasum":"d34b03a62863184824c9aa3582b2d473cd8fe81a","size":33512,"noattachment":false,"key":"/deferred/-/deferred-0.6.8.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.6.8.tgz"},"_from":".","_npmVersion":"1.3.21","_npmUser":{"name":"medikoo","email":"medikoo+npm@medikoo.com"},"maintainers":[{"name":"medikoo","email":""}],"directories":{},"publish_time":1388147319706,"_hasShrinkwrap":false,"_cnpm_publish_time":1388147319706},"0.6.7":{"name":"deferred","version":"0.6.7","description":"Modular and fast Promises implementation","keywords":["async","asynchronous","deferred","flow","future","futures","promise","promises","continuations"],"author":{"name":"Mariusz Nowak","email":"medikoo+deferred@medikoo.com","url":"http://www.medikoo.com/"},"main":"lib","repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"bugs":{"url":"https://github.com/medikoo/deferred/issues","email":"medikoo+deferred@medikoo.com"},"engines":{"node":">=0.4"},"dependencies":{"es5-ext":"~0.9.2","event-emitter":"~0.2.2","next-tick":"0.1.x"},"scripts":{"test":"node ./node_modules/tad/bin/tad lib"},"devDependencies":{"tad":"~0.1.20"},"licence":"MIT","optionalDependencies":{},"homepage":"https://github.com/medikoo/deferred","_id":"deferred@0.6.7","dist":{"shasum":"83d88443b18d625e84029f7a178995ff712ea0e0","size":33193,"noattachment":false,"key":"/deferred/-/deferred-0.6.7.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.6.7.tgz"},"_from":".","_npmVersion":"1.3.21","_npmUser":{"name":"medikoo","email":"medikoo+npm@medikoo.com"},"maintainers":[{"name":"medikoo","email":""}],"directories":{},"publish_time":1388142457893,"_hasShrinkwrap":false,"_cnpm_publish_time":1388142457893},"0.6.6":{"name":"deferred","version":"0.6.6","description":"Modular and fast Promises implementation","keywords":["async","asynchronous","deferred","flow","future","futures","promise","promises","continuations"],"author":{"name":"Mariusz Nowak","email":"medikoo+deferred@medikoo.com","url":"http://www.medikoo.com/"},"main":"lib","repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"bugs":{"url":"https://github.com/medikoo/deferred/issues","email":"medikoo+deferred@medikoo.com"},"engines":{"node":">=0.4"},"dependencies":{"es5-ext":"~0.9.2","event-emitter":"~0.2.2","next-tick":"0.1.x"},"scripts":{"test":"node ./node_modules/tad/bin/tad lib"},"devDependencies":{"tad":"~0.1.19"},"licence":"MIT","optionalDependencies":{},"_id":"deferred@0.6.6","dist":{"shasum":"2200b9f4fec99ba3ff31ba638fd9e96168ffc017","size":32615,"noattachment":false,"key":"/deferred/-/deferred-0.6.6.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.6.6.tgz"},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"medikoo","email":"medikoo+npm@medikoo.com"},"maintainers":[{"name":"medikoo","email":""}],"directories":{},"publish_time":1381762699704,"_hasShrinkwrap":false,"_cnpm_publish_time":1381762699704},"0.6.5":{"name":"deferred","version":"0.6.5","description":"Modular and fast Promises implementation","keywords":["async","asynchronous","deferred","flow","future","futures","promise","promises","continuations"],"author":{"name":"Mariusz Nowak","email":"medikoo+deferred@medikoo.com","url":"http://www.medikoo.com/"},"main":"lib","repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"bugs":{"url":"https://github.com/medikoo/deferred/issues","email":"medikoo+deferred@medikoo.com"},"engines":{"node":">=0.4"},"dependencies":{"es5-ext":"~0.9.2","event-emitter":"~0.2.2","next-tick":"0.1.x"},"scripts":{"test":"node ./node_modules/tad/bin/tad lib"},"devDependencies":{"tad":"~0.1.16"},"licence":"MIT","optionalDependencies":{},"_id":"deferred@0.6.5","dist":{"shasum":"e7734af38cb4c7c8e30b48b3ab0cc14198476db8","size":30142,"noattachment":false,"key":"/deferred/-/deferred-0.6.5.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.6.5.tgz"},"_from":".","_npmVersion":"1.2.25","_npmUser":{"name":"medikoo","email":"medikoo+npm@medikoo.com"},"maintainers":[{"name":"medikoo","email":""}],"directories":{},"publish_time":1370456682395,"_hasShrinkwrap":false,"_cnpm_publish_time":1370456682395},"0.6.4":{"name":"deferred","version":"0.6.4","description":"Asynchronous control-flow with deferred and promises","keywords":["async","asynchronous","deferred","flow","future","futures","promise","promises","continuations"],"author":{"name":"Mariusz Nowak","email":"medikoo+deferred@medikoo.com","url":"http://www.medikoo.com/"},"main":"lib","repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"bugs":{"email":"medikoo+deferred@medikoo.com","url":"https://github.com/medikoo/deferred/issues"},"engines":{"node":">=0.4"},"dependencies":{"es5-ext":"~0.9.2","event-emitter":"~0.2.1","next-tick":"0.1.x"},"scripts":{"test":"node ./node_modules/tad/bin/tad lib"},"devDependencies":{"tad":"~0.1.15"},"licence":"MIT","optionalDependencies":{},"_id":"deferred@0.6.4","dist":{"shasum":"9cb4a8a1dd4807492f2500caf5e8ad405db5a066","size":29479,"noattachment":false,"key":"/deferred/-/deferred-0.6.4.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.6.4.tgz"},"_from":".","_npmVersion":"1.2.18","_npmUser":{"name":"medikoo","email":"medikoo+npm@medikoo.com"},"maintainers":[{"name":"medikoo","email":""}],"directories":{},"publish_time":1368622297852,"_hasShrinkwrap":false,"_cnpm_publish_time":1368622297852},"0.6.3":{"name":"deferred","version":"0.6.3","description":"Asynchronous control-flow with deferred and promises","keywords":["async","asynchronous","deferred","flow","future","futures","promise","promises","continuations"],"author":{"name":"Mariusz Nowak","email":"medikoo+deferred@medikoo.com","url":"http://www.medikoo.com/"},"main":"lib","repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"bugs":{"email":"medikoo+deferred@medikoo.com","url":"https://github.com/medikoo/deferred/issues"},"engines":{"node":">=0.4"},"dependencies":{"es5-ext":"~0.9.2","event-emitter":"~0.2.1","next-tick":"0.1.x"},"scripts":{"test":"node ./node_modules/tad/bin/tad lib"},"devDependencies":{"tad":"~0.1.15"},"licence":"MIT","optionalDependencies":{},"_id":"deferred@0.6.3","dist":{"shasum":"8af6dd51e1b8e3216b41021f2b5ba33a802abed8","size":29302,"noattachment":false,"key":"/deferred/-/deferred-0.6.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.6.3.tgz"},"_from":".","_npmVersion":"1.2.14","_npmUser":{"name":"medikoo","email":"medikoo+npm@medikoo.com"},"maintainers":[{"name":"medikoo","email":""}],"directories":{},"publish_time":1363852773327,"_hasShrinkwrap":false,"_cnpm_publish_time":1363852773327},"0.6.2":{"name":"deferred","version":"0.6.2","description":"Asynchronous control-flow with deferred and promises","keywords":["async","asynchronous","deferred","flow","future","futures","promise","promises","continuations"],"author":{"name":"Mariusz Nowak","email":"medikoo+deferred@medikoo.com","url":"http://www.medikoo.com/"},"main":"lib","repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"bugs":{"email":"medikoo+deferred@medikoo.com","url":"https://github.com/medikoo/deferred/issues"},"engines":{"node":">=0.4"},"dependencies":{"es5-ext":"~0.9.2","event-emitter":"~0.2.1","next-tick":"0.1.x"},"scripts":{"test":"node ./node_modules/tad/bin/tad lib"},"devDependencies":{"tad":"~0.1.15"},"licence":"MIT","optionalDependencies":{},"_id":"deferred@0.6.2","dist":{"shasum":"91310b75e23a8c0ab498b729c8bf57c587e54944","size":29026,"noattachment":false,"key":"/deferred/-/deferred-0.6.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.6.2.tgz"},"_from":".","_npmVersion":"1.2.14","_npmUser":{"name":"medikoo","email":"medikoo+npm@medikoo.com"},"maintainers":[{"name":"medikoo","email":""}],"directories":{},"publish_time":1363605880344,"_hasShrinkwrap":false,"_cnpm_publish_time":1363605880344},"0.6.1":{"name":"deferred","version":"0.6.1","description":"Asynchronous control-flow with deferred and promises","keywords":["async","asynchronous","deferred","flow","future","futures","promise","promises","continuations"],"author":{"name":"Mariusz Nowak","email":"medikoo+deferred@medikoo.com","url":"http://www.medikoo.com/"},"main":"lib","repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"bugs":{"email":"medikoo+deferred@medikoo.com","url":"https://github.com/medikoo/deferred/issues"},"engines":{"node":">=0.4"},"dependencies":{"es5-ext":"0.9.x","event-emitter":"0.2.x","next-tick":"0.1.x"},"scripts":{"test":"node ./node_modules/tad/bin/tad lib"},"devDependencies":{"tad":"0.1.x"},"licence":"MIT","optionalDependencies":{},"_id":"deferred@0.6.1","dist":{"shasum":"425fc9d724def8c6da662ef0ae7c0ca7fe768f0c","size":28823,"noattachment":false,"key":"/deferred/-/deferred-0.6.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.6.1.tgz"},"_npmVersion":"1.1.62","_npmUser":{"name":"medikoo","email":"medikoo+npm@medikoo.com"},"maintainers":[{"name":"medikoo","email":""}],"directories":{},"publish_time":1349449636150,"_hasShrinkwrap":false,"_cnpm_publish_time":1349449636150},"0.6.0":{"name":"deferred","version":"0.6.0","description":"Asynchronous control-flow with deferred and promises","keywords":["async","asynchronous","deferred","flow","future","futures","promise","promises","continuations"],"author":{"name":"Mariusz Nowak","email":"medikoo+deferred@medikoo.com","url":"http://www.medikoo.com/"},"main":"lib","repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"bugs":{"email":"medikoo+deferred@medikoo.com","url":"https://github.com/medikoo/deferred/issues"},"engines":{"node":">=0.4"},"dependencies":{"es5-ext":"0.9.x","event-emitter":"0.2.x","next-tick":"0.1.x"},"scripts":{"test":"node ./node_modules/tad/bin/tad lib"},"devDependencies":{"tad":"0.1.x"},"licence":"MIT","optionalDependencies":{},"_id":"deferred@0.6.0","dist":{"shasum":"0c84ff3b458e9cb68d9005497a1005e8e41d7627","size":28626,"noattachment":false,"key":"/deferred/-/deferred-0.6.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.6.0.tgz"},"_npmVersion":"1.1.61","_npmUser":{"name":"medikoo","email":"medikoo+npm@medikoo.com"},"maintainers":[{"name":"medikoo","email":""}],"directories":{},"publish_time":1348330425589,"_hasShrinkwrap":false,"_cnpm_publish_time":1348330425589},"0.5.6":{"name":"deferred","version":"0.5.6","description":"Asynchronous control-flow with deferred and promises","keywords":["async","asynchronous","deferred","flow","future","futures","promise","promises","continuations"],"author":{"name":"Mariusz Nowak","email":"medikoo+deferred@medikoo.com","url":"http://www.medikoo.com/"},"main":"lib","repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"bugs":{"email":"medikoo+deferred@medikoo.com","url":"https://github.com/medikoo/deferred/issues"},"engines":{"node":">=0.4"},"dependencies":{"es5-ext":"0.8.x"},"scripts":{"test":"node ./node_modules/tad/bin/tad lib"},"devDependencies":{"tad":"0.1.x"},"licence":"MIT","optionalDependencies":{},"_id":"deferred@0.5.6","dist":{"shasum":"493086f7238ef672cd2bc29a1dc40ee10ce41603","size":23838,"noattachment":false,"key":"/deferred/-/deferred-0.5.6.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.5.6.tgz"},"maintainers":[{"name":"medikoo","email":""}],"directories":{},"publish_time":1342526502952,"_hasShrinkwrap":false,"_cnpm_publish_time":1342526502952},"0.5.5":{"name":"deferred","version":"0.5.5","description":"Asynchronous control-flow with deferred and promises","keywords":["async","asynchronous","deferred","flow","future","futures","promise","promises","continuations"],"author":{"name":"Mariusz Nowak","email":"medikoo+deferred@medikoo.com","url":"http://www.medikoo.com/"},"main":"lib","repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"bugs":{"email":"medikoo+deferred@medikoo.com","url":"https://github.com/medikoo/deferred/issues"},"engines":{"node":">=0.4"},"dependencies":{"es5-ext":"0.8.x"},"scripts":{"test":"node ./node_modules/tad/bin/tad lib"},"devDependencies":{"tad":"0.1.x"},"licence":"MIT","optionalDependencies":{},"_npmUser":{"name":"medikoo","email":"medikoo+npm@medikoo.com"},"_id":"deferred@0.5.5","_engineSupported":true,"_npmVersion":"1.1.24","_nodeVersion":"v0.6.19","_defaultsLoaded":true,"dist":{"shasum":"edc8b30b040840acee3b1e2ab6a7b4e19aa72f8a","size":23862,"noattachment":false,"key":"/deferred/-/deferred-0.5.5.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.5.5.tgz"},"maintainers":[{"name":"medikoo","email":""}],"directories":{},"publish_time":1339594062984,"_hasShrinkwrap":false,"_cnpm_publish_time":1339594062984},"0.5.4":{"name":"deferred","version":"0.5.4","description":"Asynchronous control-flow with deferred and promises","keywords":["async","asynchronous","deferred","flow","future","futures","promise","promises","continuations"],"author":{"name":"Mariusz Nowak","email":"medikoo+deferred@medikoo.com","url":"http://www.medikoo.com/"},"main":"lib","repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"bugs":{"email":"medikoo+deferred@medikoo.com","url":"https://github.com/medikoo/deferred/issues"},"engines":{"node":">=0.4"},"dependencies":{"es5-ext":"0.8.x"},"scripts":{"test":"node ./node_modules/tad/bin/tad lib"},"devDependencies":{"tad":"0.1.x"},"licence":"MIT","optionalDependencies":{},"_npmUser":{"name":"medikoo","email":"medikoo+npm@medikoo.com"},"_id":"deferred@0.5.4","_engineSupported":true,"_npmVersion":"1.1.21","_nodeVersion":"v0.6.18","_defaultsLoaded":true,"dist":{"shasum":"0c13f85e7be72d05963b60ad4951e7faf1421676","size":22316,"noattachment":false,"key":"/deferred/-/deferred-0.5.4.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.5.4.tgz"},"maintainers":[{"name":"medikoo","email":""}],"directories":{},"publish_time":1338220825799,"_hasShrinkwrap":false,"_cnpm_publish_time":1338220825799},"0.5.3":{"name":"deferred","version":"0.5.3","description":"Asynchronous control-flow with deferred and promises","keywords":["async","asynchronous","deferred","flow","future","futures","promise","promises","continuations"],"author":{"name":"Mariusz Nowak","email":"medikoo+deferred@medikoo.com","url":"http://www.medikoo.com/"},"main":"lib","repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"bugs":{"email":"medikoo+deferred@medikoo.com","url":"https://github.com/medikoo/deferred/issues"},"engines":{"node":">=0.1.103"},"dependencies":{"es5-ext":"0.7.x"},"scripts":{"test":"node ./node_modules/tad/bin/tad lib","lint":"node ./node_modules/jslint/bin/jslint.js --color --git"},"devDependencies":{"tad":"0.1.x"},"licence":"MIT","optionalDependencies":{},"_npmUser":{"name":"medikoo","email":"medikoo+npm@medikoo.com"},"_id":"deferred@0.5.3","_engineSupported":true,"_npmVersion":"1.1.19","_nodeVersion":"v0.6.16","_defaultsLoaded":true,"dist":{"shasum":"929c55ad7c2dcf4ff9a9ce162ab9f7c86ae53ae4","size":20326,"noattachment":false,"key":"/deferred/-/deferred-0.5.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.5.3.tgz"},"maintainers":[{"name":"medikoo","email":""}],"directories":{},"publish_time":1336130897967,"_hasShrinkwrap":false,"_cnpm_publish_time":1336130897967},"0.5.2":{"name":"deferred","version":"0.5.2","description":"Asynchronous control-flow with deferred and promises","keywords":["async","asynchronous","deferred","flow","future","futures","promise","promises","continuations"],"author":{"name":"Mariusz Nowak","email":"medikoo+deferred@medikoo.com","url":"http://www.medikoo.com/"},"main":"lib","repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"bugs":{"email":"medikoo+deferred@medikoo.com","url":"https://github.com/medikoo/deferred/issues"},"engines":{"node":">=0.1.103"},"dependencies":{"es5-ext":"0.7.x"},"scripts":{"test":"node ./node_modules/tad/bin/tad lib","lint":"node ./node_modules/jslint/bin/jslint.js --color --git"},"devDependencies":{"tad":"0.1.x"},"licence":"MIT","optionalDependencies":{},"_npmUser":{"name":"medikoo","email":"medikoo+npm@medikoo.com"},"_id":"deferred@0.5.2","_engineSupported":true,"_npmVersion":"1.1.16","_nodeVersion":"v0.6.15","_defaultsLoaded":true,"dist":{"shasum":"42318b3ea0c56397c25e4f0a4768785b3ad636e9","size":20038,"noattachment":false,"key":"/deferred/-/deferred-0.5.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.5.2.tgz"},"maintainers":[{"name":"medikoo","email":""}],"directories":{},"publish_time":1335986372910,"_hasShrinkwrap":false,"_cnpm_publish_time":1335986372910},"0.5.1":{"name":"deferred","version":"0.5.1","description":"Asynchronous control-flow with deferred and promises","keywords":["async","asynchronous","deferred","flow","future","futures","promise","promises","continuations"],"author":{"name":"Mariusz Nowak","email":"medikoo+deferred@medikoo.com","url":"http://www.medikoo.com/"},"main":"lib","repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"bugs":{"email":"medikoo+deferred@medikoo.com","url":"https://github.com/medikoo/deferred/issues"},"engines":{"node":">=0.1.103"},"dependencies":{"es5-ext":"0.7.x"},"scripts":{"test":"node ./node_modules/tad/bin/tad lib","lint":"node ./node_modules/jslint/bin/jslint.js --color --git"},"devDependencies":{"tad":"0.1.x"},"licence":"MIT","optionalDependencies":{},"_npmUser":{"name":"medikoo","email":"medikoo+npm@medikoo.com"},"_id":"deferred@0.5.1","_engineSupported":true,"_npmVersion":"1.1.16","_nodeVersion":"v0.6.15","_defaultsLoaded":true,"dist":{"shasum":"457589032528d9113ffb5ae84b38377ad4bb86fd","size":19936,"noattachment":false,"key":"/deferred/-/deferred-0.5.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.5.1.tgz"},"maintainers":[{"name":"medikoo","email":""}],"directories":{},"publish_time":1335694634419,"_hasShrinkwrap":false,"_cnpm_publish_time":1335694634419},"0.5.0":{"name":"deferred","version":"0.5.0","description":"Asynchronous control-flow with deferred and promises","keywords":["async","asynchronous","deferred","flow","future","futures","promise","promises","continuations"],"author":{"name":"Mariusz Nowak","email":"medikoo+deferred@medikoo.com","url":"http://www.medikoo.com/"},"main":"lib","repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"bugs":{"email":"medikoo+deferred@medikoo.com","url":"https://github.com/medikoo/deferred/issues"},"engines":{"node":">=0.1.103"},"dependencies":{"es5-ext":"0.7.x"},"scripts":{"test":"node ./node_modules/tad/bin/tad lib","lint":"node ./node_modules/jslint/bin/jslint.js --color --git"},"devDependencies":{"tad":"0.1.x"},"licence":"MIT","optionalDependencies":{},"_npmUser":{"name":"medikoo","email":"medikoo+npm@medikoo.com"},"_id":"deferred@0.5.0","_engineSupported":true,"_npmVersion":"1.1.12","_nodeVersion":"v0.6.14","_defaultsLoaded":true,"dist":{"shasum":"936bddf9503c640302680655f392328af0fcdde2","size":20621,"noattachment":false,"key":"/deferred/-/deferred-0.5.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.5.0.tgz"},"maintainers":[{"name":"medikoo","email":""}],"directories":{},"publish_time":1334780563590,"_hasShrinkwrap":false,"_cnpm_publish_time":1334780563590},"0.4.3":{"name":"deferred","version":"0.4.3","description":"Asynchronous control-flow with deferred and promises","keywords":["deferred","promise","promises","async","asynchronous","future","futures","continuations","flow"],"author":{"name":"Mariusz Nowak","email":"medikoo+deferred@medikoo.com","url":"http://www.medikoo.com/"},"main":"lib","repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"bugs":{"email":"medikoo+deferred@medikoo.com","url":"https://github.com/medikoo/deferred/issues"},"engines":{"node":">=0.1.103"},"dependencies":{"es5-ext":"0.7.x"},"scripts":{"test":"node ./node_modules/tad/bin/tad lib","lint":"node ./node_modules/jslint/bin/jslint.js --color --git"},"devDependencies":{"tad":"0.1.x"},"licence":"MIT","_npmUser":{"name":"medikoo","email":"medikoo+npm@medikoo.com"},"_id":"deferred@0.4.3","optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.12","_nodeVersion":"v0.6.14","_defaultsLoaded":true,"dist":{"shasum":"11ccd4d68d1a05a236f33a1ce919af8b82c437b1","size":18594,"noattachment":false,"key":"/deferred/-/deferred-0.4.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.4.3.tgz"},"maintainers":[{"name":"medikoo","email":""}],"directories":{},"publish_time":1334254493503,"_hasShrinkwrap":false,"_cnpm_publish_time":1334254493503},"0.4.2":{"name":"deferred","version":"0.4.2","description":"Asynchronous control-flow with deferred and promises","keywords":["deferred","promise","promises","async","asynchronous","future","futures","continuations","flow"],"author":{"name":"Mariusz Nowak","email":"medikoo+deferred@medikoo.com","url":"http://www.medikoo.com/"},"main":"lib","repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"bugs":{"email":"medikoo+deferred@medikoo.com","url":"https://github.com/medikoo/deferred/issues"},"engines":{"node":">=0.1.103"},"dependencies":{"es5-ext":"0.7.x"},"scripts":{"test":"node ./node_modules/tad/bin/tad lib"},"devDependencies":{"tad":"0.1.x"},"licence":"MIT","_npmUser":{"name":"medikoo","email":"medikoo+npm@medikoo.com"},"_id":"deferred@0.4.2","optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.0-2","_nodeVersion":"v0.6.8","_defaultsLoaded":true,"dist":{"shasum":"27f697b1dde9b6c03e104b099bbc6921bae2769e","size":17448,"noattachment":false,"key":"/deferred/-/deferred-0.4.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.4.2.tgz"},"maintainers":[{"name":"medikoo","email":""}],"directories":{},"publish_time":1327615793487,"_hasShrinkwrap":false,"_cnpm_publish_time":1327615793487},"0.4.1":{"name":"deferred","version":"0.4.1","description":"Asynchronous control-flow with deferred and promises","keywords":["deferred","promise","promises","async","asynchronous","future","futures","continuations","flow"],"author":{"name":"Mariusz Nowak","email":"medikoo+deferred@medikoo.com","url":"http://www.medikoo.com/"},"main":"lib","repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"bugs":{"email":"medikoo+deferred@medikoo.com","url":"https://github.com/medikoo/deferred/issues"},"engines":{"node":">=0.1.103"},"dependencies":{"es5-ext":"0.7.x"},"scripts":{"test":"node ./node_modules/tad/bin/tad lib"},"devDependencies":{"tad":"0.1.x"},"licence":"MIT","_npmUser":{"name":"medikoo","email":"medikoo+npm@medikoo.com"},"_id":"deferred@0.4.1","_engineSupported":true,"_npmVersion":"1.1.0-beta-10","_nodeVersion":"v0.6.7","_defaultsLoaded":true,"dist":{"shasum":"b522a6d7090924f66a3e12965dd9b2033a1b7d9c","size":71710,"noattachment":false,"key":"/deferred/-/deferred-0.4.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.4.1.tgz"},"maintainers":[{"name":"medikoo","email":""}],"directories":{},"publish_time":1327587025084,"_hasShrinkwrap":false,"_cnpm_publish_time":1327587025084},"0.4.0":{"name":"deferred","version":"0.4.0","description":"Asynchronous control-flow with deferred and promises","keywords":["deferred","promise","promises","async","asynchronous","future","futures","continuations","flow"],"author":{"name":"Mariusz Nowak","email":"medikoo+deferred@medikoo.com","url":"http://www.medikoo.com/"},"main":"lib","repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"bugs":{"email":"medikoo+deferred@medikoo.com","url":"https://github.com/medikoo/deferred/issues"},"engines":{"node":">=0.1.103"},"dependencies":{"es5-ext":"0.7.x"},"scripts":{"test":"node ./node_modules/tad/bin/tad lib"},"devDependencies":{"tad":"0.1.x"},"licence":"MIT","_npmUser":{"name":"medikoo","email":"medikoo+npm@medikoo.com"},"_id":"deferred@0.4.0","_engineSupported":true,"_npmVersion":"1.1.0-beta-10","_nodeVersion":"v0.6.7","_defaultsLoaded":true,"dist":{"shasum":"1761f6bb14f8a094a9e3c97fd3c247f493a5e773","size":71458,"noattachment":false,"key":"/deferred/-/deferred-0.4.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.4.0.tgz"},"maintainers":[{"name":"medikoo","email":""}],"directories":{},"publish_time":1326988650949,"_hasShrinkwrap":false,"_cnpm_publish_time":1326988650949},"0.3.1":{"name":"deferred","version":"0.3.1","description":"Asynchronous control-flow with deferred and promises","keywords":["deferred","promise","promises","async","asynchronous","future","futures","continuations","flow"],"author":{"name":"Mariusz Nowak","email":"medikoo+deferred@medikoo.com","url":"http://www.medikoo.com/"},"main":"lib","repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"bugs":{"email":"medikoo+deferred@medikoo.com","url":"https://github.com/medikoo/deferred/issues"},"engines":{"node":">=0.1.103"},"dependencies":{"es5-ext":"0.7.x"},"scripts":{"test":"node ./node_modules/tad/bin/tad lib"},"devDependencies":{"tad":"0.1.x"},"licence":"MIT","_npmUser":{"name":"medikoo","email":"medikoo+npm@medikoo.com"},"_id":"deferred@0.3.1","_engineSupported":true,"_npmVersion":"1.1.0-beta-10","_nodeVersion":"v0.6.7","_defaultsLoaded":true,"dist":{"shasum":"77be81e200d2af10a099bd6c9ece8ee097f2975c","size":16868,"noattachment":false,"key":"/deferred/-/deferred-0.3.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.3.1.tgz"},"maintainers":[{"name":"medikoo","email":""}],"directories":{},"publish_time":1326471902214,"_hasShrinkwrap":false,"_cnpm_publish_time":1326471902214},"0.3.0":{"name":"deferred","version":"0.3.0","description":"Asynchronous control-flow with deferred and promises","keywords":["deferred","promise","promises","async","asynchronous","future","futures","continuations","flow"],"author":{"name":"Mariusz Nowak","email":"medikoo+deferred@medikoo.com","url":"http://www.medikoo.com/"},"main":"lib","repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"bugs":{"email":"medikoo+deferred@medikoo.com","url":"https://github.com/medikoo/deferred/issues"},"engines":{"node":">=0.1.103"},"dependencies":{"es5-ext":"0.7.x"},"scripts":{"test":"node ./node_modules/tad/bin/tad lib"},"devDependencies":{"tad":"0.1.x"},"licence":"MIT","_npmUser":{"name":"medikoo","email":"medikoo+npm@medikoo.com"},"_id":"deferred@0.3.0","_engineSupported":true,"_npmVersion":"1.1.0-beta-10","_nodeVersion":"v0.6.7","_defaultsLoaded":true,"dist":{"shasum":"08ce23d8a46a3b6abab862425647fb16e8f19013","size":16352,"noattachment":false,"key":"/deferred/-/deferred-0.3.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.3.0.tgz"},"maintainers":[{"name":"medikoo","email":""}],"directories":{},"publish_time":1326050314650,"_hasShrinkwrap":false,"_cnpm_publish_time":1326050314650},"0.2.6":{"name":"deferred","version":"0.2.6","description":"Asynchronous control-flow with deferred and promises","keywords":["deferred","promise","promises","async","asynchronous","future","futures","continuations","flow"],"author":{"name":"Mariusz Nowak","email":"medikoo+deferred@medikoo.com","url":"http://www.medikoo.com/"},"main":"lib/index","repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"bugs":{"email":"medikoo+deferred@medikoo.com","url":"https://github.com/medikoo/deferred/issues"},"engines":{"node":">=0.1.103"},"dependencies":{"es5-ext":"0.6.x","clock":"0.1.x"},"scripts":{"test":"./node_modules/tad/bin/tad lib"},"devDependencies":{"tad":"0.1.x"},"_npmUser":{"name":"medikoo","email":"medikoo+npm@medikoo.com"},"_id":"deferred@0.2.6","_engineSupported":true,"_npmVersion":"1.1.0-alpha-6","_nodeVersion":"v0.6.5","_defaultsLoaded":true,"dist":{"shasum":"e979ed5bce5ca804baef2b1fd8552d9292b1ded3","size":10608,"noattachment":false,"key":"/deferred/-/deferred-0.2.6.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.2.6.tgz"},"maintainers":[{"name":"medikoo","email":""}],"directories":{},"publish_time":1323698376488,"_hasShrinkwrap":false,"_cnpm_publish_time":1323698376488},"0.2.5":{"name":"deferred","version":"0.2.5","description":"Asynchronous control-flow with deferred and promises","keywords":["deferred","promise","promises","async","asynchronous","future","futures","continuations","flow"],"author":{"name":"Mariusz Nowak","email":"medikoo+deferred@medikoo.com","url":"http://www.medikoo.com/"},"main":"lib/index","repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"bugs":{"email":"medikoo+deferred@medikoo.com","url":"https://github.com/medikoo/deferred/issues"},"engines":{"node":">=0.1.103"},"dependencies":{"es5-ext":"0.6.x","clock":"0.1.x"},"scripts":{"test":"./node_modules/tad/bin/tad lib"},"devDependencies":{"tad":"0.1.x"},"_npmUser":{"name":"medikoo","email":"medikoo+npm@medikoo.com"},"_id":"deferred@0.2.5","_engineSupported":true,"_npmVersion":"1.0.104","_nodeVersion":"v0.5.7","_defaultsLoaded":true,"dist":{"shasum":"0b5dd26744acfa8d9721689b7ca98ab514d305d4","size":20480,"noattachment":false,"key":"/deferred/-/deferred-0.2.5.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.2.5.tgz"},"maintainers":[{"name":"medikoo","email":""}],"directories":{},"publish_time":1320772823377,"_hasShrinkwrap":false,"_cnpm_publish_time":1320772823377},"0.2.4":{"name":"deferred","version":"0.2.4","description":"Asynchronous control-flow with deferred and promises","keywords":["deferred","promise","promises","async","asynchronous","future","futures","continuations","flow"],"author":{"name":"Mariusz Nowak","email":"medikoo+deferred@medikoo.com","url":"http://www.medikoo.com/"},"main":"lib/index","repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"bugs":{"email":"medikoo+deferred@medikoo.com","url":"https://github.com/medikoo/deferred/issues"},"engines":{"node":">=0.1.103"},"dependencies":{"es5-ext":"0.6.x","clock":"0.1.x"},"scripts":{"test":"./node_modules/tad/bin/tad lib"},"devDependencies":{"tad":"0.1.x"},"_npmJsonOpts":{"file":"/Users/medikoo/.npm/deferred/0.2.4/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"deferred@0.2.4","_engineSupported":true,"_npmVersion":"1.0.23","_nodeVersion":"v0.5.4-pre","_defaultsLoaded":true,"dist":{"shasum":"baab2e468a8c63b078081ee372802f073e356849","size":10226,"noattachment":false,"key":"/deferred/-/deferred-0.2.4.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.2.4.tgz"},"maintainers":[{"name":"medikoo","email":""}],"directories":{},"publish_time":1312887270530,"_hasShrinkwrap":false,"_cnpm_publish_time":1312887270530},"0.2.3":{"name":"deferred","version":"0.2.3","description":"Asynchronous control-flow with deferred and promises","keywords":["deferred","promise","promises","async","asynchronous","future","futures","continuations","flow"],"author":{"name":"Mariusz Nowak","email":"medikoo+deferred@medikoo.com","url":"http://www.medikoo.com/"},"main":"lib/index","repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"bugs":{"email":"medikoo+deferred@medikoo.com","url":"https://github.com/medikoo/deferred/issues"},"engines":{"node":">=0.1.103"},"dependencies":{"es5-ext":"0.6.x","clock":"0.1.x"},"scripts":{"test":"./node_modules/tad/bin/tad lib"},"devDependencies":{"tad":"0.1.x"},"_npmJsonOpts":{"file":"/Users/medikoo/.npm/deferred/0.2.3/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"deferred@0.2.3","_engineSupported":true,"_npmVersion":"1.0.23","_nodeVersion":"v0.5.4-pre","_defaultsLoaded":true,"dist":{"shasum":"d428b98bcf774aae126125e3e40e342d73b51aec","size":10182,"noattachment":false,"key":"/deferred/-/deferred-0.2.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.2.3.tgz"},"maintainers":[{"name":"medikoo","email":""}],"directories":{},"publish_time":1312885843331,"_hasShrinkwrap":false,"_cnpm_publish_time":1312885843331},"0.2.2":{"name":"deferred","version":"0.2.2","description":"Asynchronous control-flow with deferred and promises","keywords":["deferred","promise","promises","async","asynchronous","future","futures","continuations","flow"],"author":{"name":"Mariusz Nowak","email":"medikoo+deferred@medikoo.com","url":"http://www.medikoo.com/"},"main":"lib/index","repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"bugs":{"email":"medikoo+deferred@medikoo.com","url":"https://github.com/medikoo/deferred/issues"},"engines":{"node":">=0.1.103"},"dependencies":{"es5-ext":"0.6.x","clock":"0.1.x"},"scripts":{"test":"./node_modules/tad/bin/tad lib"},"devDependencies":{"tad":"0.1.x"},"_npmJsonOpts":{"file":"/Users/medikoo/.npm/deferred/0.2.2/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"deferred@0.2.2","_engineSupported":true,"_npmVersion":"1.0.23","_nodeVersion":"v0.5.4-pre","_defaultsLoaded":true,"dist":{"shasum":"2142c400bdee36fbe908d53e3aca344b5d5077e5","size":9952,"noattachment":false,"key":"/deferred/-/deferred-0.2.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.2.2.tgz"},"maintainers":[{"name":"medikoo","email":""}],"directories":{},"publish_time":1312815015451,"_hasShrinkwrap":false,"_cnpm_publish_time":1312815015451},"0.2.1":{"name":"deferred","version":"0.2.1","description":"Asynchronous control-flow with deferred and promises","keywords":["deferred","promise","promises","async","asynchronous","future","futures","continuations","flow"],"author":{"name":"Mariusz Nowak","email":"medikoo+deferred@medikoo.com","url":"http://www.medikoo.com/"},"main":"lib/index","repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"bugs":{"email":"medikoo+deferred@medikoo.com","url":"https://github.com/medikoo/deferred/issues"},"engines":{"node":">=0.1.103"},"dependencies":{"es5-ext":"0.6.x","clock":"0.1.x"},"_npmJsonOpts":{"file":"/Users/medikoo/.npm/deferred/0.2.1/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"deferred@0.2.1","devDependencies":{},"_engineSupported":true,"_npmVersion":"1.0.23","_nodeVersion":"v0.5.4-pre","_defaultsLoaded":true,"dist":{"shasum":"41eded23f16e23e9e152326536cfd9e2d902e8f0","size":9852,"noattachment":false,"key":"/deferred/-/deferred-0.2.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.2.1.tgz"},"scripts":{},"maintainers":[{"name":"medikoo","email":""}],"directories":{},"publish_time":1312808019227,"_hasShrinkwrap":false,"_cnpm_publish_time":1312808019227},"0.2.0":{"name":"deferred","version":"0.2.0","description":"Asynchronous control-flow with deferred and promises","keywords":["deferred","promise","promises","async","asynchronous","future","futures","continuations","flow"],"author":{"name":"Mariusz Nowak","email":"medikoo+deferred@medikoo.com","url":"http://www.medikoo.com/"},"main":"lib/index","repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"bugs":{"email":"medikoo+deferred@medikoo.com","url":"https://github.com/medikoo/deferred/issues"},"engines":{"node":">=0.1.103"},"dependencies":{"es5-ext":"0.6.x"},"_npmJsonOpts":{"file":"/Users/medikoo/.npm/deferred/0.2.0/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"deferred@0.2.0","devDependencies":{},"_engineSupported":true,"_npmVersion":"1.0.23","_nodeVersion":"v0.5.4-pre","_defaultsLoaded":true,"dist":{"shasum":"3787b20795729135d19a6bc7d84b4c3bb0a7f09e","size":9747,"noattachment":false,"key":"/deferred/-/deferred-0.2.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.2.0.tgz"},"scripts":{},"maintainers":[{"name":"medikoo","email":""}],"directories":{},"publish_time":1312792384657,"_hasShrinkwrap":false,"_cnpm_publish_time":1312792384657},"0.1.2":{"name":"deferred","version":"0.1.2","description":"Asynchronous control-flow with deferred and promises","keywords":["deferred","promise","promises","async","asynchronous","future","futures","continuations","flow"],"author":{"name":"Mariusz Nowak","email":"medikoo+deferred@medikoo.com","url":"http://www.medikoo.com/"},"main":"lib/index","repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"bugs":{"email":"medikoo+deferred@medikoo.com","url":"https://github.com/medikoo/deferred/issues"},"dependencies":{"es5-ext":"0.5.x"},"_npmJsonOpts":{"file":"/Users/medikoo/.npm/deferred/0.1.2/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"deferred@0.1.2","devDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.15","_nodeVersion":"v0.5.1-pre","_defaultsLoaded":true,"dist":{"shasum":"4dd668bf1ff7727aaafffd3adfe3e7d920246967","size":12862,"noattachment":false,"key":"/deferred/-/deferred-0.1.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.1.2.tgz"},"scripts":{},"directories":{},"publish_time":1310386611392,"maintainers":[{"name":"medikoo","email":""}],"_hasShrinkwrap":false,"_cnpm_publish_time":1310386611392},"0.1.1":{"name":"deferred","version":"0.1.1","description":"Asynchronous control-flow with deferred and promises","keywords":["deferred","promise","promises","async","asynchronous","future","futures","continuations","flow"],"author":{"name":"Mariusz Nowak","email":"medikoo+deferred@medikoo.com","url":"http://www.medikoo.com/"},"main":"lib/index","repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"bugs":{"email":"medikoo+deferred@medikoo.com","url":"https://github.com/medikoo/deferred/issues"},"dependencies":{"es5-ext":"0.5.x"},"_npmJsonOpts":{"file":"/Users/medikoo/.npm/deferred/0.1.1/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"deferred@0.1.1","devDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.15","_nodeVersion":"v0.5.0-pre","_defaultsLoaded":true,"dist":{"shasum":"41445cb130a40ac4e4a366b27a5903bd124e65e0","size":8834,"noattachment":false,"key":"/deferred/-/deferred-0.1.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.1.1.tgz"},"scripts":{},"directories":{},"publish_time":1310068066840,"maintainers":[{"name":"medikoo","email":""}],"_hasShrinkwrap":false,"_cnpm_publish_time":1310068066840},"0.1.0":{"name":"deferred","version":"0.1.0","description":"Deferred/Promise concept in JavaScript","keywords":["deferred","promise","promises","async","asynchronous","future","futures","continuations"],"author":{"name":"Mariusz Nowak","email":"medikoo+deferred@medikoo.com","url":"http://www.medikoo.com/"},"main":"lib/index","repository":{"type":"git","url":"git://github.com/medikoo/deferred.git"},"bugs":{"email":"medikoo+deferred@medikoo.com","url":"https://github.com/medikoo/deferred/issues"},"dependencies":{"es5-ext":"0.4.x"},"_npmJsonOpts":{"file":"/Users/medikoo/.npm/deferred/0.1.0/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"deferred@0.1.0","devDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.15","_nodeVersion":"v0.5.0-pre","_defaultsLoaded":true,"dist":{"shasum":"61828f5081362dbda4136aeb896553272ec3f90c","size":4220,"noattachment":false,"key":"/deferred/-/deferred-0.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/deferred/download/deferred-0.1.0.tgz"},"scripts":{},"directories":{},"publish_time":1309895041303,"maintainers":[{"name":"medikoo","email":""}],"_hasShrinkwrap":false,"_cnpm_publish_time":1309895041303}},"readme":"[![Build status][semaphore-image]][semaphore-url]\n[![Windows status][appveyor-image]][appveyor-url]\n[![Transpilation status][transpilation-image]\n[![npm version][npm-image]][npm-url]\n\n# Deferred\n\n## Modular and fast Promises implementation for JavaScript\n\n_Implementation originally inspired by Kris Kowal's [Q](https://github.com/kriskowal/q)_\n\nDeferred is complete, [one of the fastest](#performance) and natural promise implementation in JavaScript, with Deferred you can write [clear maintainable code](#promises-approach) that takes maximum out of asynchronicity, in fact due to multi-dimensional nature of promises ([chaining](#chaining) and [nesting](#nesting)) you're forced to program declaratively.\n\nWith Deferred you also can: [Process collections](#processing-collections) of deferred calls. [Handle Node.js asynchronous functions](#working-with-asynchronous-functions). [Limit concurrency](#limiting-concurrency) of scheduled tasks. [Emit progress events](#progress-and-other-events) or [stream results partially](#streaming-data-partially) on the go.\n\nIn the end you may debug your flow by [tracking unresolved promises](#monitoring-unresolved-promises) or gathering [usage statistics](#usage-statistics).\n\n_For good insight into promise/deferred concept and in general asynchronous programming see also slides from meetjs summit presentation: [Asynchronous JavaScript](http://www.medikoo.com/asynchronous-javascript/)_\n\n**If you need help with deferred, please ask on dedicated mailing list: [deferred-js@googlegroups.com](https://groups.google.com/forum/#!forum/deferred-js)**\n\n### Comparision with callback style\n\nExample of JavaScript files concatenation:\n\n#### Plain Node.js, callbacks approach\n\n```javascript\nvar fs = require(\"fs\");\n\nvar readdir = fs.readdir;\nvar readFile = fs.readFile;\nvar writeFile = fs.writeFile;\n\n// Read all filenames in given path\nreaddir(__dirname, function (err, files) {\n  var result, waiting;\n  if (err) {\n    // if we're unable to get file listing throw error\n    throw err;\n  }\n\n  // Filter *.js files and generated lib.js\n  files = files.filter(function (file) { return file.slice(-3) === \".js\" && file !== \"lib.js\"; });\n\n  // Read content of each file\n  waiting = 0;\n  result = [];\n  files.forEach(function (file, index) {\n    ++waiting;\n    readFile(file, function (err, content) {\n      if (err) {\n        // We were not able to read file content, throw error\n        throw err;\n      }\n      result[index] = content;\n\n      if (!--waiting) {\n        // Got content of all files\n        // Concatenate into one string and write into lib.js\n        writeFile(__dirname + \"/lib.js\", result.join(\"\\n\"), function (err) {\n          if (err) {\n            // We cannot write lib.js file, throw error\n            throw err;\n          }\n        });\n      }\n    });\n  });\n});\n```\n\n#### Implementation with promises:\n\n```javascript\nvar promisify = require(\"deferred\").promisify;\nvar fs = require(\"fs\");\n\n// Convert node.js async functions, into ones that return a promise\nvar readdir = promisify(fs.readdir);\nvar readFile = promisify(fs.readFile, 1); // Restrict arity to 1 + callback\nvar writeFile = promisify(fs.writeFile);\n\nwriteFile(\n  __dirname + \"/lib.js\",\n  // Read all filenames in given path\n  readdir(__dirname)\n    // Filter *.js files and generated lib.js\n    .invoke(\"filter\", function (file) { return file.slice(-3) === \".js\" && file !== \"lib.js\"; })\n\n    // Read content of all files\n    .map(readFile)\n\n    // Concatenate files content into one string\n    .invoke(\"join\", \"\\n\")\n).done(); // If there was any error on the way throw it\n```\n\n### Examples\n\nSee [examples folder](examples) for a demonstration of promises usage in some other real world cases.\n\n### Installation\n\n#### NPM\n\nIn your project path:\n\n\\$ npm install deferred\n\n#### Browser\n\nBrowser bundle can be easily created with help of [modules-webmake](https://github.com/medikoo/modules-webmake). Assuming that you have latest [Node.js](http://nodejs.org/) and [Git](http://git-scm.com/) installed, following will work in command shell of any system (Linux/MacOS/Windows):\n\n```\n$ npm install -g webmake\n$ git clone git://github.com/medikoo/deferred.git\n$ cd deferred\n$ npm install\n$ cd ..\n$ webmake --name=deferred deferred/index.js deferred.js\n```\n\nLast command bundles deferred with all it's functionalities, but you may need just a subset, you can have that by addressing specific modules directly, e.g. with following you will build just core functionality with map extension:\n\n```\n$ webmake --name=deferred --include=deferred/ext/promise/map.js deferred/deferred.js deferred.js\n```\n\nIf you work with AMD modules, use _amd_ option, so generated bundle is one:\n\n```\n$ webmake --amd deferred/index.js deferred.js\n```\n\n_Mind that deferred relies on some ECMAScript5 features, so for older browsers you need to load as well [es5-shim](https://github.com/kriskowal/es5-shim)_\n\n### Deferred/Promise concept\n\n#### Deferred\n\nFor work that doesn't return immediately (asynchronous) you may create deferred object. Deferred holds both `resolve` and `promise` objects. Observers interested in value are attached to `promise` object, with `resolve` we resolve promise with an actual value. In common usage `promise` is returned to the world and `resolve` is kept internally\n\nLet's create `delay` function decorator:\n\n```javascript\nvar deferred = require('deferred');\n\nvar delay = function (fn, timeout) {\n  return function () {\n    var def = deferred(), self = this, args = arguments;\n\n    setTimeout(function () {\n      var value;\n      try {\n        value = fn.apply(self, args));\n      } catch (e) {\n        def.reject(e);\n        return;\n      }\n      def.resolve(value);\n    }, timeout);\n\n    return def.promise;\n  };\n};\n\nvar delayedAdd = delay(function (a, b) {\n  return a + b;\n}, 100);\n\nvar resultPromise = delayedAdd(2, 3);\n\nconsole.log(deferred.isPromise(resultPromise)); // true\n\nresultPromise(function (value) {\n  // Invoked after 100 milliseconds\n  console.log(value); // 5\n});\n```\n\n#### Promise\n\nPromise is an object that represents eventual value which may already be available or is expected to be available in a future. Promise may succeed (fulfillment) or fail (rejection). Promise can be resolved only once.\nIn `deferred` (and most of the other promise implementations) you may listen for the value by passing observers to `then` function:\n\n```javascript\npromise.then(onsuccess, onfail);\n```\n\nIn **deferred** promise is really a `then` function, so you may use promise _function_ directly:\n\n```javascript\npromise === promise.then; // true\npromise(onsuccess, onfail);\n```\n\n**If you want to keep clear visible distinction between promises and other object I encourage you to always use `promise.then` notation.**\n\nBoth callbacks `onsuccess` and `onfail` are optional. They will be called only once and only either `onsuccess` or `onfail` will be called.\n\n##### Chaining\n\nPromises by nature can be chained. `promise` function returns another promise which is resolved with a value returned by a callback function:\n\n```javascript\ndelayedAdd(2, 3)(function (result) { return result * result; })(function (result) {\n  console.log(result); // 25\n});\n```\n\nIt's not just functions that promise function can take, it can be other promises or any other JavaScript value (with exception of `null` or `undefined` which will be treated as no value). Going that way you may override result of a promise chain with specific value.\n\n##### Nesting\n\nPromises can be nested. If a promise resolves with another promise, it's not really resolved. It's resolved only when final promise is resolved with a real value:\n\n```javascript\nvar def = deferred();\ndef.resolve(delayedAdd(2, 3)); // Resolve promise with another promise\ndef.promise(function (result) {\n  console.log(result); // 5;\n});\n```\n\n##### Error handling\n\nErrors in promises are handled with separate control flow, that's one of the reasons why code written with promises is more readable and maintainable than when using callbacks approach.\n\nA promise resolved with an error (rejected), propagates its error to all promises that depend on this promise (e.g. promises initiated by adding observers).\nIf observer function crashes with error or returns error, its promise is rejected with the error.\n\nTo handle error, pass dedicated callback as second argument to promise function:\n\n```javascript\ndelayedAdd(2, 3)(function (result) { throw new Error(\"Error!\"); })(\n  function () {\n    // never called\n  },\n  function (e) {\n    // handle error;\n  }\n);\n```\n\n##### Ending chain\n\nTo expose the errors that are not handled, end promise chain with `.done()`, then error that broke the chain will be thrown:\n\n```javascript\ndelayedAdd(2, 3)(function (result) { throw new Error(\"Error!\"); })(function (result) {\n  // never executed\n}).done(); // throws error!\n```\n\n**It's important to end your promise chains with `done` otherwise eventual ignored errors will not be exposed**.\n\nSignature of `done` function is same as for `then` (or promise itself)\n\n`done` is aliased with `end` function, however `end` will be removed with introduction of v0.7 release.\n\n```javascript\npromise(function (value) {\n  // process\n}).done(\n  function (result) {\n    // process result\n  },\n  function (err) {\n    // handle error\n  }\n);\n```\n\nAnd as with `then` either callback can be provided. If callback for error was omitted, eventual error will be thrown.\n\n##### Creating resolved promises\n\nYou may create initially resolved promises.\n\n```javascript\nvar promise = deferred(1);\n\npromise(function (result) {\n  console.log(result); // 1;\n});\n```\n\n### Working with asynchronous functions\n\n#### promisify(fn[, length])\n\nThere is a known convention (coined by Node.js) for working with asynchronous calls. An asynchronous function receives a callback argument which handles both eventual error and expected value:\n\n```javascript\nvar fs = require(\"fs\");\n\nfs.readFile(__filename, \"utf-8\", function (err, content) {\n  if (err) {\n    // handle error;\n    return;\n  }\n  // process content\n});\n```\n\nIt's not convenient to work with both promises and callback style functions. When you decide to build your flow with promises **don't mix both concepts, just `promisify` asynchronous functions so they return promises instead**.\n\n```javascript\nvar deferred = require(\"deferred\")\n  , fs       = require(\"fs\")\n  , readFile = deferred.promisify(fs.readFile);\n\nreadFile(__filename, \"utf-8\")(\n  function (content) {\n    // process content\n  },\n  function (err) {\n    // handle error\n  }\n);\n```\n\n`promisify` accepts also second argument, through which we may specify length of arguments that function takes (not counting callback argument), it may be handy if there's a chance that unexpected arguments will be passed to function (e.g. Array's `forEach` or `map`)\n\n`promisify` also takes care of input arguments. **It makes sure that all arguments that are to be passed to asynchronous function are first resolved.**\n\n#### callAsync(fn, context, ...args)\n\nIf for some reason you need to turn asynchronous functions into ones that return promises, inline in algorithm, then `callAsync` is for you.\n\nStill mind that `promisify` is much better (cleaner) choice if it's possible to prepare reusable wrapper upfront.\n\n```javascript\nvar callAsync = require(\"deferred\").callAsync;\n\ncallAsync(someAsyncFn, context, arg1, arg2).done(function (result) {\n  // process result\n});\n```\n\n#### invokeAsync(obj, fnName | fn, ...args)\n\nIf you need to turn asynchronous methods to ones that return promises, and you prefer not to augment its class prototypes, `invokeAsync` addresses that use case.\n\n```javascript\nvar invokeAsync = require(\"deferred\").invokeAsync;\n\ninvokeAsync(db, \"find\", \"books\", { title: \"Some title\" }).done(function (book) {\n  // process result\n});\n```\n\n## Grouping promises\n\nWhen we're interested in results of more than one promise object we may group them into one promise with `deferred` function:\n\n```javascript\ndeferred(delayedAdd(2, 3), delayedAdd(3, 5), delayedAdd(1, 7))(function (result) {\n  console.log(result); // [5, 8, 8]\n});\n```\n\n### Processing collections\n\n#### Map\n\nIt's analogous to Array's map, with that difference that it returns promise (of an array) that would be resolved when promises for all items are resolved. Any error that would occur will reject the promise and resolve it with same error.\n\nIn following example we take content of each file found in an array:\n\n```javascript\nvar readFile = deferred.promisify(fs.readFile);\n\ndeferred.map(filenames, function (filename) { return readFile(filename, \"utf-8\"); })(function (\n  result\n) {\n  // result is an array of file's contents\n});\n```\n\n`map` is also available directly on a promise object, so we may invoke it directly on promise of a collection.\n\nLet's try again previous example but this time instead of relying on already existing filenames, we take list of files from current directory:\n\n```javascript\nvar readdir = deferred.promisify(fs.readdir);\nvar readFile = deferred.promisify(fs.readFile);\n\nreaddir(__dirname).map(function (filename) { return readFile(filename, \"utf-8\"); })(function (\n  result\n) {\n  // result is an array of file's contents\n});\n```\n\nThis function is available also as an extension on promise object.\n\n**See [limiting concurrency](#limiting-concurrency) section for info on how to limit maximum number of concurrent calls in `map`**\n\n#### Reduce\n\nIt's same as Array's reduce with that difference that it calls callback only after previous accumulated value is resolved, this way we may accumulate results of collection of promises or invoke some asynchronous tasks one after another.\n\n```javascript\ndeferred.reduce([delayedAdd(2, 3), delayedAdd(3, 5), delayedAdd(1, 7)], function (a, b) {\n  return delayedAdd(a, b);\n})(function (result) {\n  console.log(result); // 21\n});\n```\n\nThis function is available also as an extension on promise object.\n\n#### Some\n\nPromise aware Array's some. Process collection one after another and stop when first item matches your criteria\n\n```javascript\ndeferred.some([filename1, filename2, filename3], function (filename) {\n  return readFile(filename, \"utf8\", function (data) {\n    if (data.indexOf(\"needle\")) {\n      // Got it! Stop further processing\n      return true;\n    }\n  });\n});\n```\n\nThis function is available also as an extension on promise object.\n\n### Limiting concurrency\n\nThere are cases when we don't want to run too many tasks simultaneously. Like common case in Node.js when we don't want to open too many file descriptors.\n\nHandle that with `deferred.gate`, it wraps functions that return promises. It doesn't do anything to promise objects, it just limits creation of them by blocking calls to function it wraps.\n\n```javascript\nvar fn = deferred.gate(function async() {\n  var def = deferred();\n  // ..\n  return def.promise;\n}, 10);\n```\n\nIf there are already 10 concurrent tasks running `async` function invocation will be postponed into the queue and released when first of the running tasks will finish its job.\n\nAdditionally with third argument, we may limit number of postponed calls, so if there's more than _n_ of them rest is discarded. In below example, queue holds maximum 3 postponed calls, rest will be discarded.\n\n```javascript\nvar fn = deferred.gate(function async() { .. }, 10, 3);\n```\n\nIn following example we'll limit concurrent readFile calls when using deferred.map:\n\n```javascript\n// Open maximum 100 file descriptors at once\ndeferred.map(\n  filenames,\n  deferred.gate(function (filename) { return readFile(filename, \"utf-8\"); }, 100)\n)(function (result) {\n  // result is an array of file's contents\n});\n```\n\n### Progress and other events\n\n**Promise objects are also an event emitters**. Deferred implementation is backed by cross-environment [event-emitter solution](https://github.com/medikoo/event-emitter)\n\nSimple Ajax file uploader example:\n\n```javascript\nvar ajaxFileUploader = function (url, data) {\n  var def = deferred();\n  var xhr = new XMLHttpRequest();\n\n  xhr.open(\"POST\", url, true);\n  xhr.onload = def.resolve;\n  xhr.onerror = function () { def.resolve(new Error(\"Could not upload files\")); };\n  xhr.upload.onprogress = function (e) { def.promise.emit(\"progress\", e); };\n  xhr.send(data);\n  return def.promise;\n};\n\nvar upload = ajaxFileUploader(formData);\nupload.on(\"progress\", function () {\n  // process progress events\n});\nupload.done(function (e) {\n  // All files uploaded!\n});\n```\n\n#### Streaming data partially\n\nAnother use case would be to provide obtained data partially on the go (stream like).\nImagine recursive directory reader that scans whole file system and provides filenames as it approaches them:\n\n```javascript\nvar reader = readdirDeep(rootPath); // reader promise is returned\nreader.on(\"data\", function (someFilenames) {\n  // Called many times during scan with obtained names\n});\nreader.done(function (allFilenames) {\n  // File-system scan finished!\n});\n```\n\n### Promise extensions\n\nPromise objects are equipped with some useful extensions. All extension are optional but are loaded by default when `deferred` is loaded via `require('deferred')` import.\nWhen preparing client-side file (with help of e.g. [modules-webmake](https://github.com/medikoo/modules-webmake)) you are free to decide, which extensions you want to take (see source of `lib/index.js` on how to do that)\n\n#### aside\n\nThird brother of `then` and `done`. Has same signature but neither extends chain nor ends it, instead splits it by returning promise on which it was invoked. Useful when we want to return promise, but on a side (in parallel) do something else with obtained value:\n\n```javascript\nvar x = deferred({ foo: \"bar\" });\nvar promise = deferred({ foo: \"bar\" });\n\nvar y = promise.aside(function (value) {\n  console.log(value === x); // true\n});\nconsole.log(y === promise); // true\n```\n\n#### catch\n\nSame as `then` but accepts only `onFail` callback.\n\n```javascript\nvar def = deferred(), promise2;\n\npromise2 = def.promise.catch(function () { return \"Never mind\"; });\n\ndef.reject(new Error(\"Error\"));\n\npromise2.done(function (value) {\n  console.log(value); // Prints \"Never mind\"\n});\n```\n\n#### cb\n\nConvert back to callback style. Useful if you want to process regular callback at the end of promise chain. Simple use case would be regular asynchronous function built internally with promises. `cb` also makes sure that your callback is not called immediately but in next tick earliest.\n\nWith cb we may build hybrid functions that do both, handle asynchronous callback and return promise:\n\n```javascript\nvar asyncFunction = function (x, y, callback)  {\n  return someAsyncProcessingThatReturnsPromise(x, y).cb(callback);\n});\n```\n\n#### finally\n\nInvokes given callback when promise is either fulfilled or rejected\n\n```javascript\nvar prepare = function () { ... }\n  , cleanup = function () { ... }\n\nprepare();\npromise = asyncFn();\npromise.finally(cleanup);\n```\n\n#### get\n\nTo directly get to object property use `get`\n\n```javascript\nvar promise = deferred({ foo: \"bar\" });\n\npromise(function (obj) {\n  console.log(obj.foo); // 'bar';\n});\n\npromise.get(\"foo\")(function (value) {\n  console.log(value); // 'bar'\n});\n```\n\nYou can get to nested properties as well:\n\n```javascript\nvar promise = deferred({ foo: { bar: 317 });\n\npromise(function (obj) {\n  console.log(obj.foo.bar); // 317;\n})\n\npromise.get('foo', 'bar')(function (value) {\n  console.log(value); // 317\n});\n```\n\n#### invoke & invokeAsync\n\nSchedule function call on returned object\n\n```javascript\nvar promise = deferred({ foo: function (arg) { return arg * arg; } });\n\npromise.invoke(\"foo\", 3)(function (result) {\n  console.log(result); // 9\n});\n\n// For asynchronous functions use invokeAsync\nvar promise = deferred({\n  foo: function (arg, callback) {\n    setTimeout(function () { callback(null, arg * arg); }, 100);\n  }\n});\n\npromise.invokeAsync(\"foo\", 3)(function (result) {\n  console.log(result); // 9\n});\n```\n\n#### map\n\nSee [promise aware version of Array's map](#map).\n\n#### reduce\n\nSee [promise aware version of Array's reduce](#reduce)\n\n#### some\n\nSee [promise aware version of Array's some](#some)\n\n#### spread\n\nIf promise expected value is a list that you want to spread into function arguments then use `spread`\n\n```javascript\nvar promise = deferred([2, 3]);\n\npromise.spread(function (a, b) {\n  console.log(a + b); // 5\n});\n```\n\n#### timeout\n\nResolve with rejection (\"Operation timeout\" error with `DEFERRED_TIMEOUT` code), if given promise\nwon't settle with resolved value within given _timeout_\n\n```javascript\nvar deferred = new Deferred();\n\ndeferred.promise.timeout(30).done(function (value) {\n\tconsole.log(\"Never called\");\n}, function () {\n\tconsole.log(\"Rejected after 30 seconds\");\n});\n\ndeferred = new Deferred();\ndeferred.promise.timeout(30).done(function (value) {\n\tconsole.log(\"Resolved with\", value); // Resolved with true\n}, function () {}\n\tconsole.log(\"Never called\");\n});\nsetTimeout(function () {\n\tdeferred.resolve(true);\n}, 10);\n```\n\n### Debugging\n\n#### Monitoring unresolved promises\n\nIn properly constructed flow, there should be no promises that are never resolved.\nIf you want to be sure that it's not the case, or you suspect there are such issues, check whether deferred's monitor has something to say\n\n```javascript\ndeferred.monitor();\n```\n\nBy default monitor will log error for every promise that was not resolved in 5 seconds.\nYou can customize that timeout, and handle errors with your own listener:\n\n```javascript\ndeferred.monitor(10000, function (err) {\n  // Called for each promise not resolved in 10 seconds time\n});\n```\n\nThis extension affects performance and it's best not to use it in production environment\n\n#### Usage statistics\n\nBeing able to see how many promises were initialized (and where) in our flow can be helpful to track application issues, it's also good way to confirm that constructed flow works as intended.\n\n```javascript\ndeferred.profile(); // Start collecting statistics\n\n//...\n\nvar stats = deferred.profileEnd(); // End profiling\nconsole.log(stats.log); // See readable output\n```\n\nExample log output:\n\n```\n------------------------------------------------------------\nDeferred/Promise usage statistics:\n\n104540 Total promises initialized\n104540 Initialized as Unresolved\n     0 Initialized as Resolved\n\nUnresolved promises were initialized at:\n 22590 at Object.module.exports.factory (/Users/medikoo/Projects/_packages/next/lib/fs/_memoize-watcher.js:21:10)\n 11553 at Object.IsIgnored.init (/Users/medikoo/Projects/_packages/next/lib/fs/is-ignored.js:140:18)\n 11553 at module.exports.factory (/Users/medikoo/Projects/_packages/next/lib/fs/_memoize-watcher.js:21:10)\n  7854 at Object.Readdir.filterIgnored (/Users/medikoo/Projects/_packages/next/lib/fs/readdir.js:434:23)\n  4619 at Object.module.exports.factory (/Users/medikoo/Projects/_packages/next/lib/fs/_memoize-watcher.js:21:10)\n  3927 at Object.Readdir.filterByType (/Users/medikoo/Projects/_packages/next/lib/fs/readdir.js:222:15)\n  3927 at Object.Readdir.filterByType (/Users/medikoo/Projects/_packages/next/lib/fs/readdir.js:236:15)\n  3927 at Object.self (/Users/medikoo/Projects/_packages/next/lib/fs/readdir.js:164:12)\n  3927 at Object.Readdir.readdir (/Users/medikoo/Projects/_packages/next/lib/fs/readdir.js:540:9)\n  3927 at Object.self (/Users/medikoo/Projects/_packages/next/lib/fs/readdir.js:164:21)\n  3729 at directory (/Users/medikoo/Projects/_packages/next/lib/fs/_watch-alt.js:95:2)\n  2820 at Readdir.filterIgnored.promise.root (/Users/medikoo/Projects/_packages/next/lib/fs/readdir.js:517:9)\n  2163 at basic (/Users/medikoo/Projects/_packages/next/lib/fs/is-gitrepo-root.js:14:8)\n  2159 at buildMap (/Users/medikoo/Projects/_packages/next/lib/fs/is-ignored.js:117:22)\n  2159 at Object.FindRoot (/Users/medikoo/Projects/_packages/next/lib/fs/find-root.js:18:15)\n  1107 at Readdir.filterIgnored.promise.root (/Users/medikoo/Projects/_packages/next/lib/fs/readdir.js:527:11)\n   697 at Object.Map.addPaths (/Users/medikoo/Projects/_packages/next/lib/fs/_get-conf-file-map.js:107:19)\n   697 at readFile (/Users/medikoo/Projects/_packages/next/lib/fs/read-file.js:18:8)\n   697 at Object.readRulesWatch (/Users/medikoo/Projects/_packages/next/lib/fs/_get-conf-file-map.js:45:12)\n   247 at module.exports (/Users/medikoo/Projects/_packages/next/lib/fs/_watch.js:90:2)\n   247 at module.exports (/Users/medikoo/Projects/_packages/next/lib/fs/_watch.js:90:13)\n     1 at Object.Readdir.init (/Users/medikoo/Projects/_packa\n```\n\n**Using profiler significantly affects performance don't use it in production environment.**\n\n### Performance\n\nPromises just by being rich objects introduce overhead over regular callbacks. If we do a lot asynchronous operations that are fast, performance of promise implementation that we rely on becomes a significant factor.\n\n_benchmark_ folder contains two tests. Tests reflect real use case I had in which performance of promise implementation appeared to be crucial.\n\nBase of a test is [lstat](http://nodejs.org/api/all.html#all_fs_lstat_path_callback) (fastest asynchronous call in node.js API), It's called 10000 times in parallel and sequentially.\n\n_Note for benchmark purists: This test does real I/O, but there's no way to produce shim which will provide more reliable results (shim based on `setImmediate` adds more randomness to result than we got from calling real `lstat`)_\n\n_Example output taken under Node v0.10.20 on 2008 MBP._\n\n```\nPromise overhead (calling one after another) x10000:\n\n 1:   439ms  Base (plain Node.js lstat call)\n 2:   461ms  Kew: Dedicated wrapper\n 3:   609ms  Bluebird: Dedicated wrapper\n 4:   614ms  Bluebird: Promisify (generic wrapper)\n 5:   642ms  Deferred: Dedicated wrapper\n 6:   720ms  Deferred: Promisify (generic wrapper)\n 7:   792ms  When: Dedicated wrapper\n 8:  1068ms  Q: Dedicated wrapper\n 9:  1611ms  Q: nbind (generic wrapper)\n\nPromise overhead (concurrent calls) x10000:\n\n 1:   279ms  Base (plain Node.js lstat call)\n 2:   293ms  Bluebird: Promisify (generic wrapper)\n 3:   294ms  Bluebird: Dedicated wrapper\n 4:   329ms  Kew: Dedicated wrapper\n 5:   406ms  When: Dedicated wrapper\n 6:   430ms  Deferred: Dedicated wrapper\n 7:   598ms  Deferred: Promisify (generic wrapper)\n 8:   683ms  Deferred: Map + Promisify\n 9:  1610ms  Q: Dedicated wrapper\n10:  3645ms  Q: nbind (generic wrapper)\n```\n\n### Tests\n\n**Covered by over 300 unit tests**\n\n    $ npm test\n\n## Security contact information\n\nTo report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure.\n\n---\n\n<div align=\"center\">\n\t<b>\n\t\t<a href=\"https://tidelift.com/subscription/pkg/npm-deferred?utm_source=npm-deferred&utm_medium=referral&utm_campaign=readme\">Get professional support for d with a Tidelift subscription</a>\n\t</b>\n\t<br>\n\t<sub>\n\t\tTidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.\n\t</sub>\n</div>\n\n[semaphore-image]: https://semaphoreci.com/api/v1/medikoo-org/deferred/branches/master/badge.svg\n[semaphore-url]: https://semaphoreci.com/medikoo-org/deferred\n[appveyor-image]: https://img.shields.io/appveyor/ci/medikoo/deferred.svg\n[appveyor-url]: https://ci.appveyor.com/project/medikoo/deferred\n[codecov-image]: https://img.shields.io/codecov/c/github/medikoo/deferred.svg\n[codecov-url]: https://codecov.io/gh/medikoo/deferred\n[transpilation-image]: https://img.shields.io/badge/transpilation-free-brightgreen.svg\n[npm-image]: https://img.shields.io/npm/v/deferred.svg\n[npm-url]: https://www.npmjs.com/package/deferred\n","_attachments":{},"homepage":"https://github.com/medikoo/deferred#readme","bugs":{"url":"https://github.com/medikoo/deferred/issues"},"license":"ISC"}