{"_id":"reactor","_rev":"151-19c46de3816893cab6f3476eab0f91ff","name":"reactor","description":"A work queue that pivots events to error-first callbacks.","dist-tags":{"latest":"13.0.4","canary":"17.0.0-alpha.23"},"versions":{"0.0.1":{"name":"reactor","description":"A framework for serving JSON.","version":"0.0.1","author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"main":"./lib/relatable.js","url":"http://bigeasy.github.com/relatable","keywords":["json","http","https","middleware"],"devDependencies":{"coffee-script":">=1.3.0","streamline":">=0.3.0","proof":">=0.0.1"},"scripts":{"test":"(proof run t/*/*.t | tee .proof.out | proof progress) || (proof errors < .proof.out)"},"_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"_id":"reactor@0.0.1","dependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.1.18","_nodeVersion":"v0.6.15","_defaultsLoaded":true,"dist":{"shasum":"d1a69f1de87dd4ceb590e1949743ae00a8ff0835","tarball":"https://registry.npmjs.org/reactor/-/reactor-0.0.1.tgz","integrity":"sha512-wuGcYp+hA+13Y2OmJwD4PYRlD4EFcEci/ETGVlPQVklZmoJt4eMOYM7iz8Z0ealUWCyxmcVm127+vkW2mO/hOQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFq9GMwZQ/HviBF5NNBixROwneTo9SAeUqgSM6tO7dl2AiAjoW9GyNZyVMsibdGae1g53jpCKOWu61r2tWKoU1waOw=="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{}},"0.0.2":{"name":"reactor","description":"Zero dependency routing for the browser and Node.js.","author":{"name":"Alan Gutierrez"},"version":"0.0.2","keywords":["router","html5","middleware","async","asynchronous"],"licenses":[{"type":"MIT","url":"http://github.com/bigeasy/reactor/raw/master/LICENSE"}],"repository":{"type":"git","url":"http://github.com/bigeasy/reactor.git"},"scripts":{"test":"proof platform win32 && proof t/*/*.t || t/test"},"devDependencies":{"proof":"0.0.15","uglify-js":"~1.3"},"dependencies":{},"_id":"reactor@0.0.2","dist":{"shasum":"edf7e2363b072da2180d6a24b4cdc5bea20d0566","tarball":"https://registry.npmjs.org/reactor/-/reactor-0.0.2.tgz","integrity":"sha512-UulqYto4NinWaRSFmKCba4uUPz3+JUe4R1JOippL9BPkTIs1XknP2+dxLPurHzg6zZa1fTYyk9nByDglCKGeHw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGmkcc4A+DNf2MrYqXcOxpB3JKdkrMWVvNc038QxTkwQAiEA5RhMOdQUvotMYhCgT5BWUv1u9+lvxAzr7Qpe4u1pS88="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{}},"0.0.3":{"name":"reactor","description":"Zero dependency routing for the browser and Node.js.","author":{"name":"Alan Gutierrez"},"version":"0.0.3","keywords":["router","html5","middleware","async","asynchronous"],"homepage":"https://github.com/bigeasy/reactor","licenses":[{"type":"MIT","url":"http://github.com/bigeasy/reactor/raw/master/LICENSE"}],"repository":{"type":"git","url":"http://github.com/bigeasy/reactor.git"},"scripts":{"test":"proof platform win32 && proof t/*/*.t || t/test"},"devDependencies":{"proof":"0.0.15","uglify-js":"~1.3"},"dependencies":{},"_id":"reactor@0.0.3","dist":{"shasum":"c57db31e753a17a2da274b3c33419f047482f9fd","tarball":"https://registry.npmjs.org/reactor/-/reactor-0.0.3.tgz","integrity":"sha512-aZRUotbY8dyn5Ycosh2iDrADG7h3AAy6aDW/+O6VZtvqEdaazwG3VaPJTzVAkTq8bg4fyzMH0xWyJ5MvWbaBmA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCfTyWhI3Gd/CstGwEsARCC3vAOACXEkp9OWqm8LSBSIAIhAIEiq2fDKjSFF6Drhl7dhhLWO20GdT19eau391JZ8CA5"}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{}},"0.0.4":{"name":"reactor","description":"Zero dependency routing for the browser and Node.js.","author":{"name":"Alan Gutierrez"},"version":"0.0.4","keywords":["router","html5","middleware","async","asynchronous"],"homepage":"https://github.com/bigeasy/reactor","licenses":[{"type":"MIT","url":"http://github.com/bigeasy/reactor/raw/master/LICENSE"}],"repository":{"type":"git","url":"http://github.com/bigeasy/reactor.git"},"scripts":{"test":"proof platform win32 && proof t/*/*.t.js || t/test"},"devDependencies":{"proof":"0.0.15","uglify-js":"~1.3"},"dependencies":{},"_id":"reactor@0.0.4","dist":{"shasum":"b390b23a5266fe2b04cb84267fce9669ea63de7c","tarball":"https://registry.npmjs.org/reactor/-/reactor-0.0.4.tgz","integrity":"sha512-aJw8Kck+Wy3vMzgW2DpMbuvR6hfpHuXVCsHST/gB/NqvIbOmHPAK6js9yzc8d43kz3byqH6a5yWxIRjXdkE1zw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD+uAF6EuPDhihR4njkI/nO53EXSEkwl26/VjuccMfjfwIgA8UuadMtXwMBlDMJ/dZ9INMa5SwLehVYrqTmr5+M9Oo="}]},"_npmVersion":"1.1.65","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{}},"0.0.5":{"name":"reactor","description":"Zero dependency routing for the browser and Node.js.","author":{"name":"Alan Gutierrez"},"version":"0.0.5","keywords":["router","html5","middleware","async","asynchronous"],"homepage":"https://github.com/bigeasy/reactor","licenses":[{"type":"MIT","url":"http://github.com/bigeasy/reactor/raw/master/LICENSE"}],"repository":{"type":"git","url":"http://github.com/bigeasy/reactor.git"},"scripts":{"test":"proof platform win32 && proof test t/*/*.t.js || t/test"},"devDependencies":{"proof":"0.0.27","uglify-js":"~1.3"},"dependencies":{},"_id":"reactor@0.0.5","dist":{"shasum":"1e954840abbc4dd34ab605a8bb352c1e3e8e856e","tarball":"https://registry.npmjs.org/reactor/-/reactor-0.0.5.tgz","integrity":"sha512-hI3DBL7yvDodNPD6H7n9o8Tc8zUqBdR4v1Ud/sP5VES6DaLXqHiHebMXtHPNZtdF2HEmrl0Q5HxMdWZx28rA1A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCO7a3aFx1VUYdnaB5Yxejta1BXX+uAXMECKOqp1XlRXAIgI5QESzTyEgCSKIjp/g/czWL0LpMmfdnvft90rVfe8Oo="}]},"_npmVersion":"1.2.0","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{}},"0.0.6":{"name":"reactor","description":"Minimalist routing engine for use in browser and on server.","author":{"name":"Alan Gutierrez"},"version":"0.0.6","keywords":["router","html5","middleware","async","asynchronous"],"homepage":"https://github.com/bigeasy/reactor","licenses":[{"type":"MIT","url":"http://github.com/bigeasy/reactor/raw/master/LICENSE"}],"repository":{"type":"git","url":"http://github.com/bigeasy/reactor.git"},"scripts":{"test":"proof platform win32 && proof test t/*/*.t.js || t/test"},"devDependencies":{"proof":"0.0.32","uglify-js":"~1.3"},"dependencies":{},"bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"_id":"reactor@0.0.6","dist":{"shasum":"44c38aacf92dc1602eb6434d6ca14766fc6e6d6e","tarball":"https://registry.npmjs.org/reactor/-/reactor-0.0.6.tgz","integrity":"sha512-+c6R0t0AtNrXeRWJsyRfoV/Kj2W7RsMwKmB0PLAO6pdkLjvRvGhSbnHwelrphuhPJ4XLrujgz7PiCSEyLcSk/A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH6aWi5mU2XtqTtwjU7mUU3O+K+PAlGibBLwVFR4Wv6hAiB8p4IDPspufp0ybF8Z78eAth2M6NkyTA4im73ZLgZ0Nw=="}]},"_from":".","_npmVersion":"1.2.30","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{}},"0.0.7":{"name":"reactor","description":"Minimalist routing engine for use in browser and on server.","author":{"name":"Alan Gutierrez"},"version":"0.0.7","keywords":["router","html5","middleware","async","asynchronous"],"homepage":"https://github.com/bigeasy/reactor","licenses":[{"type":"MIT","url":"http://github.com/bigeasy/reactor/raw/master/LICENSE"}],"repository":{"type":"git","url":"http://github.com/bigeasy/reactor.git"},"scripts":{"test":"proof platform win32 && proof test t/*/*.t.js || t/test"},"devDependencies":{"proof":"0.0.32","uglify-js":"~1.3"},"dependencies":{},"bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"_id":"reactor@0.0.7","dist":{"shasum":"cfacfd896bf31be9c056c51d106770e378393f54","tarball":"https://registry.npmjs.org/reactor/-/reactor-0.0.7.tgz","integrity":"sha512-EG2jykYY/Min20jYPFu2o3CgBdSxHiqHcepqDklrmVJCl1ox5c37dKi8SmhXyiVyGh5yaQI/LrPVE7Ln3KLgmA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCL8LRm3JNX/fbRJCobB27dnp20ioYlGtj7/u+eRbeLiwIgaLH5OOrDabJpbO2GzsgQILzII8dS8b6sfq2PVWDoi9o="}]},"_from":".","_npmVersion":"1.2.30","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{}},"0.0.9":{"name":"reactor","description":"A work queue that pivots events to error-first callbacks.","author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"version":"0.0.9","homepage":"http://bigeasy.github.com/reactor","keywords":["queue","asynchronous","graph","make","rake","javascript"],"license":"MIT","main":"reactor","dependencies":{"abend":"0.0.2","operation":"0.0.2","turnstile":"0.0.17"},"devDependencies":{"cadence":"0.4.1","proof":"0.0.56"},"repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"scripts":{"test":"proof platform win32 && proof test */*/*.t.js || t/test"},"gitHead":"560a5923a0ff4f404206f2072c9e947851949102","_id":"reactor@0.0.9","_shasum":"91c17cecabfce19fda5601428c611d027fcdab46","_from":".","_npmVersion":"2.11.3","_nodeVersion":"0.12.7","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"91c17cecabfce19fda5601428c611d027fcdab46","tarball":"https://registry.npmjs.org/reactor/-/reactor-0.0.9.tgz","integrity":"sha512-59+nt/y4+lFXLOoidX7AxM/s2m6EmeNyaCDIPUiTCHD5mM5SP1dYlOhx5eF/d8cflx1t8HhOvJpQ8l4zDDQDww==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDjD4bW6zesEnMBTJZn7W8U1SzFkWKX5IIT62405ImfUwIhAKT7FVFgcz9mBWPmj+eW80/rNrQ1gib1UgXE7Fv1VSaO"}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{}},"0.0.10":{"name":"reactor","description":"A work queue that pivots events to error-first callbacks.","author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"version":"0.0.10","homepage":"http://bigeasy.github.com/reactor","keywords":["queue","asynchronous","graph","make","rake","javascript"],"license":"MIT","main":"reactor","dependencies":{"abend":"0.0.2","operation":"0.0.2","turnstile":"0.0.19"},"devDependencies":{"cadence":"0.4.1","proof":"0.0.56"},"repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"scripts":{"test":"proof platform win32 && proof test */*/*.t.js || t/test"},"gitHead":"913ed939fb25bb538111f753e466eb7ecd276d5e","_id":"reactor@0.0.10","_shasum":"4cf09f1f00e9c90090ea8a7e663d4dfce6de2e57","_from":".","_npmVersion":"3.3.12","_nodeVersion":"5.1.0","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"4cf09f1f00e9c90090ea8a7e663d4dfce6de2e57","tarball":"https://registry.npmjs.org/reactor/-/reactor-0.0.10.tgz","integrity":"sha512-GabRE4Y6leXy6K8FoOb489Ovk6PvYKmE22uIZfP8impBACmWWYXE/IT7yx2Av8Oh5DvpvhSoup17p9EbU3d+aA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCGgaXT5o6tRyYy8+t3DlQT1ivqGAYi2AxG1ndfbE0K7gIgDWMc5tZQ0VZVu6WOd+4Tl0Y/rSRcp/J2TUvaayOJ++g="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{}},"0.0.11":{"name":"reactor","description":"A work queue that pivots events to error-first callbacks.","author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"version":"0.0.11","homepage":"http://bigeasy.github.com/reactor","keywords":["queue","asynchronous","graph","make","rake","javascript"],"license":"MIT","main":"reactor","dependencies":{"abend":"0.0.3","operation":"0.0.4","turnstile":"0.0.20"},"devDependencies":{"cadence":"0.4.3","proof":"0.0.57"},"repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"scripts":{"test":"proof platform win32 && proof test */*/*.t.js || t/test"},"gitHead":"37424cf9a84a3f175b90b444f7d3d56ce6ba471b","_id":"reactor@0.0.11","_shasum":"35314b5209a868495982cb288ba9a29572ae6959","_from":".","_npmVersion":"2.14.9","_nodeVersion":"0.12.9","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"35314b5209a868495982cb288ba9a29572ae6959","tarball":"https://registry.npmjs.org/reactor/-/reactor-0.0.11.tgz","integrity":"sha512-5Hol0ZaMkxkc9xDjXMg1RXtwdixktZ+NbsQAyOd74DXFLaghq/iru17T/tBXztp2nu+4fyseCPjhcvT8O7FjjQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCE6ZlH6dc+V+LnO3LwblET9Tx/hk8HGM/agA/qHKSAqAIhAKAeQgngrX4wFFc33GU1nX4PhVnRl7bKbnUclZdtp9Dm"}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{}},"0.0.12":{"name":"reactor","description":"A work queue that pivots events to error-first callbacks.","author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"version":"0.0.12","homepage":"http://bigeasy.github.com/reactor","keywords":["queue","asynchronous","graph","make","rake","javascript"],"license":"MIT","main":"reactor","dependencies":{"abend":"0.0.3","operation":"0.0.4","turnstile":"0.0.21"},"devDependencies":{"cadence":"0.4.3","proof":"0.0.57"},"repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"scripts":{"test":"proof platform win32 && proof test */*/*.t.js || t/test"},"gitHead":"5fe7c71542f537b3b7f79c4cf43cac363edc2bf8","_id":"reactor@0.0.12","_shasum":"28f894dc7a2cc28503de0f269c05eaecec507869","_from":".","_npmVersion":"2.14.9","_nodeVersion":"0.12.9","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"28f894dc7a2cc28503de0f269c05eaecec507869","tarball":"https://registry.npmjs.org/reactor/-/reactor-0.0.12.tgz","integrity":"sha512-MBxfsrK//cupqify042HDD8GEOlW+SZQCWPcw//Sxcu4STeQBGz2fvm59bxGzfoU4VXZY1n4Ykkk/mt2Js726Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEpbSqLUc3IqwUMNJfmOfuhejc6ATOS3/8ue7Zovw6MSAiB7qzxOY2FQcazorLmVi+2qWMkx+MRInRosne/3YMvLdg=="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{}},"0.0.13":{"name":"reactor","description":"A work queue that pivots events to error-first callbacks.","author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"version":"0.0.13","homepage":"http://bigeasy.github.com/reactor","keywords":["queue","asynchronous","graph","make","rake","javascript"],"license":"MIT","main":"reactor","dependencies":{"abend":"0.0.3","operation":"0.0.4","turnstile":"0.0.22"},"devDependencies":{"cadence":"0.4.3","proof":"0.0.57"},"repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"scripts":{"test":"proof platform win32 && proof test */*/*.t.js || t/test"},"gitHead":"5f30547c7bd48b60034b0f0940069bdb6b068995","_id":"reactor@0.0.13","_shasum":"ba9bf005d638b021f1fb8fa7eef0507595811393","_from":".","_npmVersion":"2.14.9","_nodeVersion":"0.12.9","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"ba9bf005d638b021f1fb8fa7eef0507595811393","tarball":"https://registry.npmjs.org/reactor/-/reactor-0.0.13.tgz","integrity":"sha512-kxBXJ3SWqWUFlHXDnM6iHl65fdUcLrfKZUUGBC2VMMqE4nkYAaxahybIP3c9hGnnSrCewnV2MhiNPh/N5Y248w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEP9N8NT80NeYDbY91JYaX5dUlcAYBqE9EOal+DYWoISAiB5xdCJB30ACwEYqSWIemFdyekDOjFIPpsbSyhPBd58QA=="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{}},"0.0.14":{"name":"reactor","description":"A work queue that pivots events to error-first callbacks.","author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"version":"0.0.14","homepage":"http://bigeasy.github.com/reactor","keywords":["queue","asynchronous","graph","make","rake","javascript"],"license":"MIT","main":"reactor","dependencies":{"abend":"0.0.3","operation":"0.0.4","turnstile":"0.0.22"},"devDependencies":{"cadence":"0.4.3","proof":"0.0.57"},"repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"scripts":{"test":"proof platform win32 && proof test */*/*.t.js || t/test"},"gitHead":"b00ba148c5a68d1428a3022fbc5a4ac9eef1a621","_id":"reactor@0.0.14","_shasum":"1e418dd86983c7cdc2e960db2624a438a26b2dd7","_from":".","_npmVersion":"2.14.9","_nodeVersion":"0.12.9","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"1e418dd86983c7cdc2e960db2624a438a26b2dd7","tarball":"https://registry.npmjs.org/reactor/-/reactor-0.0.14.tgz","integrity":"sha512-I8Vm3j6wR5QHloUrA3YkkY14ysCOk/PASo+SJoM+MXVrvC4YOkrm9IK3hpkJzVGzpi49xtPh7y6lc0QSca79Tg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIETk9VirOQvESrcuaZ+BalZbMuvAXg1CNNPNcAe8TNNjAiEA0urIQCKUbcg7iehm1ZqaH8MdiLTCZEV+SYGCxfzgHdg="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{}},"1.0.0":{"name":"reactor","description":"A work queue that pivots events to error-first callbacks.","author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"version":"1.0.0","homepage":"http://bigeasy.github.com/reactor","keywords":["queue","asynchronous","graph","make","rake","javascript"],"license":"MIT","main":"reactor","dependencies":{"abend":"1.0.x","operation":"1.0.x","turnstile":"1.0.x"},"devDependencies":{"cadence":"1.0.x","proof":"1.0.x"},"repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"scripts":{"test":"proof platform win32 && proof test */*/*.t.js || t/test"},"gitHead":"caab1c3bede14a293b7c0d09df5f407c69a1ef01","_id":"reactor@1.0.0","_shasum":"e224e1707d59d9f224305ec64d0605601649497e","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.3","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"e224e1707d59d9f224305ec64d0605601649497e","tarball":"https://registry.npmjs.org/reactor/-/reactor-1.0.0.tgz","integrity":"sha512-OA5cCg6ea5+l/ySLWHwGhDZIJtTdDk66JCBZNeMFTusdzcN4+KA6TANXOpB3B+la9f2oyUiRTHPa3gn3SuQJ7A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDhW/BK6rQU7/rUVejqtJuuoHweKTacpxtiKpYaTobiHAIgSswPwg3qHXOrUKU8e3Vs7qwxxdx0biFeU1AUYUxGXYM="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{}},"1.0.1":{"name":"reactor","description":"A work queue that pivots events to error-first callbacks.","author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"version":"1.0.1","homepage":"http://bigeasy.github.com/reactor","keywords":["queue","asynchronous","graph","make","rake","javascript"],"license":"MIT","main":"reactor","dependencies":{"abend":"1.x","operation":"1.x","turnstile":"1.x"},"devDependencies":{"cadence":"1.x","proof":"1.x"},"repository":{"type":"git","url":"http://github.com/bigeasy/reactor.git"},"bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"scripts":{"test":"proof platform win32 && proof test */*/*.t.js || t/test"},"gitHead":"21a7d3752e74e9eb07f08d5bc5297b2f5b2318f3","_id":"reactor@1.0.1","_shasum":"53e81f15ca45f35d636aec1fc7a23e4b141a1b1f","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"dist":{"shasum":"53e81f15ca45f35d636aec1fc7a23e4b141a1b1f","tarball":"https://registry.npmjs.org/reactor/-/reactor-1.0.1.tgz","integrity":"sha512-8vA2vJ/Yqu8tA7/96a2Cs4Kf4EMmVx/DLjtSINGodBUtJUBlZxeNWTt+fduK6li+I4HefQGyCwLy5jPjJoLkmw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHJIhPdn/nxA4p3l+GyGWTAYZOTn42m27+z7/VdTVox7AiEA4iTe85nSV9d5v638vf19n2+PGM/hp2ojUbFCAYuisRM="}]},"_npmOperationalInternal":{"host":"packages-9-west.internal.npmjs.com","tmp":"tmp/reactor-1.0.1.tgz_1454490876761_0.6280695875175297"},"directories":{}},"2.0.0":{"name":"reactor","description":"A work queue that pivots events to error-first callbacks.","author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"version":"2.0.0","homepage":"http://bigeasy.github.com/reactor","keywords":["queue","asynchronous","graph","make","rake","javascript"],"license":"MIT","main":"reactor","dependencies":{"abend":"1.x","operation":"1.x","turnstile":"2.x"},"devDependencies":{"cadence":"1.x","proof":"1.x"},"repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"scripts":{"test":"proof platform win32 && proof test */*/*.t.js || t/test"},"gitHead":"5a899b77cffa902217a6709abbd898c677382a2d","_id":"reactor@2.0.0","_shasum":"197aae372cc31026ac2946fb72e7219b0ac178c0","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.3","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"197aae372cc31026ac2946fb72e7219b0ac178c0","tarball":"https://registry.npmjs.org/reactor/-/reactor-2.0.0.tgz","integrity":"sha512-hq00uhvCKtxv0waYqqVX2VhIDZ0ea9345DK5r16KANL7/e3//GUojyfSRII1tCSDvMCiKm0HgEw9PnTySsT2vg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDY1XxfOWv00+WDgmwz6hNAhp5/27PDImY9eCbKGwvTwAIgMVr0VP9h4/BvT5liRSitdaZ/Tg043bx/HQzgMOhDLjI="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"packages-13-west.internal.npmjs.com","tmp":"tmp/reactor-2.0.0.tgz_1457222970525_0.11659950506873429"},"directories":{}},"2.1.0":{"name":"reactor","description":"A work queue that pivots events to error-first callbacks.","author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"version":"2.1.0","homepage":"http://bigeasy.github.com/reactor","keywords":["queue","asynchronous","graph","make","rake","javascript"],"license":"MIT","main":"reactor","dependencies":{"abend":"1.x","operation":"1.x","turnstile":"2.x"},"devDependencies":{"cadence":"1.x","proof":"1.x"},"repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"scripts":{"test":"proof platform win32 && proof test */*/*.t.js || t/test"},"gitHead":"f12a29a4c0982d99ece7a97404b99eb0cb4f27ef","_id":"reactor@2.1.0","_shasum":"d3fd09d62726288ccdeec443d98dfcf8f13f9da6","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.3","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"d3fd09d62726288ccdeec443d98dfcf8f13f9da6","tarball":"https://registry.npmjs.org/reactor/-/reactor-2.1.0.tgz","integrity":"sha512-1SQ400k61cn8sxs5s+qKzkhwv7zJ0Ngj0AXkhGauqxhZ/qDWKursWedE+ClIFNmP95E909/QGFUm9H+O0RKRwg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHZj9MoTGFlWPZjLEKSvPRCR+f8KwI4iQoW17XIY7zGDAiEA5rja+/iz4MI4576lkrvu1ioqIW2FatmzsSWuFuz9gXQ="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/reactor-2.1.0.tgz_1457279441142_0.7822947495151311"},"directories":{}},"2.2.0":{"name":"reactor","description":"A work queue that pivots events to error-first callbacks.","author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"version":"2.2.0","homepage":"http://bigeasy.github.com/reactor","keywords":["queue","asynchronous","graph","make","rake","javascript"],"license":"MIT","main":"reactor","dependencies":{"abend":"1.x","operation":"1.x","turnstile":"2.x"},"devDependencies":{"cadence":"1.x","proof":"1.x"},"repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"scripts":{"test":"proof platform win32 && proof test */*/*.t.js || t/test"},"gitHead":"ad3a84b8ed5e51e2606be32f70f56bf573fdd500","_id":"reactor@2.2.0","_shasum":"6ffa22ce066d5f12a5eeacb6e70427818489ea78","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.3","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"6ffa22ce066d5f12a5eeacb6e70427818489ea78","tarball":"https://registry.npmjs.org/reactor/-/reactor-2.2.0.tgz","integrity":"sha512-UJIbBh2X6qJtJquyA6q7/AzmchpUSNUrPyD/JSKYj/fFOgMhY8WPHDwPpfsElctoQznLiYVTeeE9FIEj/YC5VA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFLPZAoVXU+TOI72Pd9gv2O+Q7P6ePLs96DYssg4P9VYAiEAyhVC3BZbRhmpdSHGBSfOOZMa6t2B13aD2rFm4yJvQec="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/reactor-2.2.0.tgz_1457282230501_0.06282074539922178"},"directories":{}},"2.2.1":{"name":"reactor","description":"A work queue that pivots events to error-first callbacks.","author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"version":"2.2.1","homepage":"http://bigeasy.github.com/reactor","keywords":["queue","asynchronous","graph","make","rake","javascript"],"license":"MIT","main":"reactor","dependencies":{"abend":"1.x","operation":"1.x","turnstile":"2.x"},"devDependencies":{"cadence":"1.x","proof":"1.x"},"repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"scripts":{"test":"proof platform win32 && proof test */*/*.t.js || t/test"},"gitHead":"f1dc3a43620b083351a566bc656244631d0152a0","_id":"reactor@2.2.1","_shasum":"18d09a19a9b1ccb0a8cfc502035b23827c51b5ed","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.3","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"18d09a19a9b1ccb0a8cfc502035b23827c51b5ed","tarball":"https://registry.npmjs.org/reactor/-/reactor-2.2.1.tgz","integrity":"sha512-4N5cMX/WgNjecdRnYf3ouWu6fXd9Z3Rqh25yzmS35Rkhs915Lvrz8WiIpN6I2RPu6T4oAsFTtmMJnUaL0itcog==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBOTDec3QmQXA0ahA7MSleiTWV7BwjmuxSMOGwdAUYzVAiEA+PJbzdzpZV1RSRkCJAn8G78RG3WH6kdOtOhHaBrlqX4="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/reactor-2.2.1.tgz_1458198314747_0.7646987601183355"},"directories":{}},"2.2.2":{"name":"reactor","version":"2.2.2","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"abend":"1.0.x","operation":"1.2.x","turnstile":"2.0.x"},"devDependencies":{"cadence":"1.0.x","proof":"1.1.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"e690752c62ce34b96a59837fd122ef7bcdfd966e","_id":"reactor@2.2.2","_shasum":"c538fbdf0b3101c9cd9ba891746e7b3f6bf62b95","_from":".","_npmVersion":"2.15.9","_nodeVersion":"4.5.0","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"c538fbdf0b3101c9cd9ba891746e7b3f6bf62b95","tarball":"https://registry.npmjs.org/reactor/-/reactor-2.2.2.tgz","integrity":"sha512-jOYfJT/yyMKdgO7k6CFHcFUvTDGj0oYmpeBp/PIkNFmLjuNLuH7Hm3Boz0j489cJW/kiXbFWCHSuoOT1ocTijQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCTNyWV4xEQGipssHF1Sa90lhSY6qScfSpdubDaIVikBgIhAOzWwM/7ML7/JgpCy7xnY63eYMQVLv6x+UKF9atRnbEz"}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/reactor-2.2.2.tgz_1471929683125_0.09830055199563503"},"directories":{}},"2.3.0":{"name":"reactor","version":"2.3.0","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"abend":"1.0.x","operation":"1.2.x","turnstile":"2.1.x"},"devDependencies":{"cadence":"1.0.x","proof":"1.2.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"41c1764887783eb52cecff75c67f21e16f473c77","_id":"reactor@2.3.0","_shasum":"862964b66fae1cdb9a918eb867222150afd47586","_from":".","_npmVersion":"3.10.7","_nodeVersion":"4.5.0","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"862964b66fae1cdb9a918eb867222150afd47586","tarball":"https://registry.npmjs.org/reactor/-/reactor-2.3.0.tgz","integrity":"sha512-3PWBuTBTZA1CC04uCWMmrYevSVOYaJ1O+EcrvIzX6eI/AeDjI3isz+c72opSXiAEzWg+dt4xYUQjtc4XedSxag==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH9zCkrROWgGAgh6IsD5LCHEYx7gwFUVbokvjsCM8qcVAiEAkkrBQuZJAOnn/mKwh7Bf6MlS0M3eJbTOzWMrU++3Lbs="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/reactor-2.3.0.tgz_1477508286937_0.6580651951953769"},"directories":{}},"2.4.0":{"name":"reactor","version":"2.4.0","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"abend":"1.0.x","operation":"1.2.x","turnstile":"2.2.x"},"devDependencies":{"cadence":"1.0.x","proof":"1.2.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"a97b50f7a2d1a5b007e9b2fe5a3a933f7c4b84f0","_id":"reactor@2.4.0","_shasum":"70699b40f81ac4d25a905664422f7e9f044a9434","_from":".","_npmVersion":"3.10.9","_nodeVersion":"4.6.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"70699b40f81ac4d25a905664422f7e9f044a9434","tarball":"https://registry.npmjs.org/reactor/-/reactor-2.4.0.tgz","integrity":"sha512-8Js1Mub9k+7U33yOeSzcLlTX9yRpmXntcKnocVkLrg5UZcuyK5lEfGZI83l9NHahvuVMPPeIAy/DGe6VoqMBPA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDJwM0JO/Px8ecF+WaUuo9GEs65XfCZiggeN8mUACGvaAIgZ/B7R9GWlRoNmrndeJgkWaAQz2OCnShld9yyZWcWhWE="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/reactor-2.4.0.tgz_1478104244475_0.5116562149487436"},"directories":{}},"4.0.0":{"name":"reactor","version":"4.0.0","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"abend":"1.0.x","operation":"1.2.x","turnstile":"2.2.x"},"devDependencies":{"cadence":"1.0.x","proof":"1.2.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"a669bfc6e486034303948bd3f148a5127f52a7b5","_id":"reactor@4.0.0","_shasum":"7b0d0b9ce2bb3b9214c47f3cf8fbdcddb2cf173e","_from":".","_npmVersion":"2.15.11","_nodeVersion":"4.7.3","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"7b0d0b9ce2bb3b9214c47f3cf8fbdcddb2cf173e","tarball":"https://registry.npmjs.org/reactor/-/reactor-4.0.0.tgz","integrity":"sha512-cl5v8NbCmcuEhpw/3Zh1HGZSi1gikYMijQR8AS2PnTalwdB13RAyiriRhceGfnIgKLxtng6fDZ+kgy2+9LZLSw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDFusSnBZAis2Qq+33MCW7dlsj3vp4Rm8g3ERSeVxIEUQIhAOfdKVqzL9POea4PvyJ2zNFKAK+4yJdGi79m6FMc9LMb"}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/reactor-4.0.0.tgz_1489982620992_0.7111850983928889"},"directories":{}},"4.0.1":{"name":"reactor","version":"4.0.1","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.17.1","cadence":"1.0.x","connect":"3.6.0","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"0.0.1","interrupt":"5.0.x","magazine":"3.0.x","nop":"1.0.x","operation":"1.2.x","rescue":"3.0.x","turnstile":"2.2.6"},"devDependencies":{"proof":"1.2.x","vizsla":"2.0.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"2ed42393ece582723dff07dce9a2615f5b1cb9ec","_id":"reactor@4.0.1","_shasum":"f932b23c312bccee99135f2ee7246f750618d24a","_from":".","_npmVersion":"4.0.5","_nodeVersion":"4.7.2","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"f932b23c312bccee99135f2ee7246f750618d24a","tarball":"https://registry.npmjs.org/reactor/-/reactor-4.0.1.tgz","integrity":"sha512-NVE6agVJmg0r8S9Z8Rtl4mBQQnaZ46oFV4gL4I110vGeLjtPSDLmqwuJXi5zAM/21PH93PsIKvAjmTqGTQyFtQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICj8YQGMY5O3oxdROi42GqZAkU/JMbb+1fD5s2iUTFVbAiBqP2ackCEC+y5Inu1+jkqUrhtBab5Ba2G0kOK/OBtLUA=="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/reactor-4.0.1.tgz_1490801402258_0.9921067983377725"},"directories":{}},"4.1.0":{"name":"reactor","version":"4.1.0","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.17.1","cadence":"1.0.x","connect":"3.6.0","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"0.0.1","interrupt":"5.0.x","magazine":"3.0.x","nop":"1.0.x","operation":"1.2.x","rescue":"3.0.x","turnstile":"2.2.6"},"devDependencies":{"proof":"1.2.x","vizsla":"2.0.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"58e73e176f7a7b0b913ff83aec63b26173f519d0","_id":"reactor@4.1.0","_shasum":"185465fe382724ca978b21d37a1e20a0fed74f93","_from":".","_npmVersion":"4.4.4","_nodeVersion":"4.7.3","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"185465fe382724ca978b21d37a1e20a0fed74f93","tarball":"https://registry.npmjs.org/reactor/-/reactor-4.1.0.tgz","integrity":"sha512-XH9VvlcxB0ZSTPokUOH1snxFzjgm+pESTD3C9O2DFOgv8Q1DGFLjpUgp6ADir8YD7ByBpJIHTFD8pXTmzpUgpA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC4SJ5SGnl7QyzX58TDGTe6ngbK93eVZNzvPX/BAOgaOQIgMptJWL+H7D+i/Qi79+VCO00WvshV9Mm3Nwrjv/Djs1w="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/reactor-4.1.0.tgz_1491199649571_0.18833682779222727"},"directories":{}},"4.2.0":{"name":"reactor","version":"4.2.0","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.17.1","cadence":"1.0.x","connect":"3.6.0","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.0","interrupt":"5.0.x","magazine":"3.0.x","nop":"1.0.x","operation":"1.2.x","rescue":"3.0.x","turnstile":"2.5.x"},"devDependencies":{"proof":"3.0.x","vizsla":"3.2.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"48356f401bd06f1dbd714d74728ae2624fce5511","_id":"reactor@4.2.0","_shasum":"224c83b4bf11f2f4119100a532466340f72bcbb3","_from":".","_npmVersion":"4.4.4","_nodeVersion":"4.8.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"224c83b4bf11f2f4119100a532466340f72bcbb3","tarball":"https://registry.npmjs.org/reactor/-/reactor-4.2.0.tgz","integrity":"sha512-yAuimghySaqG+XlFANRZeak5Dsl5LjwjYy6/fZvt+im0CWHoBsaWM9efbOQIG2G45+IUEc6d4yastn/cTud7zw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBzYz/5PVf9XM5vsQ/fbspRfqQlmiXpn3ancxmxTMB3GAiBzn43XXjlZdt94Ea5QRUuJF9WPpdBSQE9xDzw/caosqQ=="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/reactor-4.2.0.tgz_1491410344594_0.7961899838410318"},"directories":{}},"4.3.0":{"name":"reactor","version":"4.3.0","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.17.1","cadence":"1.0.x","connect":"3.6.0","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.0","interrupt":"5.0.x","magazine":"3.0.x","nop":"1.0.x","operation":"1.2.x","rescue":"3.0.x","turnstile":"2.5.x"},"devDependencies":{"proof":"3.0.x","vizsla":"3.2.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"6d956514af438960804b84fbb53711d36ab0958b","_id":"reactor@4.3.0","_shasum":"2e18474001803fb700b1cd8219a04d715c1e00b2","_from":".","_npmVersion":"4.4.4","_nodeVersion":"4.8.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"2e18474001803fb700b1cd8219a04d715c1e00b2","tarball":"https://registry.npmjs.org/reactor/-/reactor-4.3.0.tgz","integrity":"sha512-t8RAgjZRqgZdfNAdq9anyzwEu90XpUiFWvAzH7Qu1oOxsy2Ezy/7pBqjqc2LscJAdXaKGu4f87NNH0Tw/IDybQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGn4ki6aHiqXZxi/n+ycfh3+QSvrqNPAxX5BoJhbLUTsAiA9bGCC2eFEsklmKEPwobFQFhOM+smTat95wfnVto1M6A=="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/reactor-4.3.0.tgz_1491471916420_0.6983282249420881"},"directories":{}},"4.4.0":{"name":"reactor","version":"4.4.0","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.17.1","cadence":"1.0.x","connect":"3.6.0","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.0","interrupt":"5.0.x","magazine":"3.0.x","nop":"1.0.x","operation":"1.2.x","rescue":"3.0.x","turnstile":"2.5.x"},"devDependencies":{"proof":"3.0.x","vizsla":"3.6.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"4557dfe94cac17d3cfbfd0cea462b76e7875a0e9","_id":"reactor@4.4.0","_shasum":"b0796916993e1961a1274d4a8a511ff570ea4adc","_from":".","_npmVersion":"4.4.4","_nodeVersion":"4.8.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"b0796916993e1961a1274d4a8a511ff570ea4adc","tarball":"https://registry.npmjs.org/reactor/-/reactor-4.4.0.tgz","integrity":"sha512-6sUY+68+YzYEogqDV2esOyFTi3MYiw92n5YPV3FNUkZhplcIK8IgkV8T8Vwg4iVo8zDxJMWMKNHlClxsUBgCZg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDrFj1lcxUz2eTyAz73fPkkQWytlESmJpxNMM/JBW9oKAiAoyhDAW4oxg64fBE0SKLFKh6rL1XNeECqCh0PXjL/ZlA=="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/reactor-4.4.0.tgz_1491543891245_0.08909822115674615"},"directories":{}},"4.4.1":{"name":"reactor","version":"4.4.1","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.17.1","cadence":"1.0.x","connect":"3.6.0","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.0.x","nop":"1.0.x","operation":"1.4.x","rescue":"3.0.x","turnstile":"2.5.x"},"devDependencies":{"proof":"3.0.x","vizsla":"3.6.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"70ecefed8bd29b1eadea76876ee326f90725bfd3","_id":"reactor@4.4.1","_shasum":"622913908608b41c868815b3c8058a6206165b90","_from":".","_npmVersion":"4.5.0","_nodeVersion":"4.8.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"622913908608b41c868815b3c8058a6206165b90","tarball":"https://registry.npmjs.org/reactor/-/reactor-4.4.1.tgz","integrity":"sha512-VESxQz2HDXnB82ZIWfIH1cuL7hqn5J04riuBqMkcSEFSjNwed4H+Jc+4GmGbZoBTn5fSa09NYPC5tup/RBwZ6A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA/fCE67gvyCpdxG6r9Bo8HmuCJBFdGXs8ny12a0aMM5AiEA1FvgO3yc3XQ0cHNn2inMoWvk81wlEaCb4MbXW5J2MBQ="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/reactor-4.4.1.tgz_1492190139414_0.941399444360286"},"directories":{}},"4.5.0":{"name":"reactor","version":"4.5.0","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.17.1","cadence":"1.0.x","connect":"3.6.0","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.0.x","nop":"1.0.x","operation":"1.4.x","rescue":"3.0.x","turnstile":"2.5.x"},"devDependencies":{"proof":"3.0.x","vizsla":"3.6.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"587163269f96004d34b761a182ab297155175c41","_id":"reactor@4.5.0","_shasum":"ff28c113bcee72ca1bc128b33e1e2fe9d432afe4","_from":".","_npmVersion":"4.5.0","_nodeVersion":"4.8.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"ff28c113bcee72ca1bc128b33e1e2fe9d432afe4","tarball":"https://registry.npmjs.org/reactor/-/reactor-4.5.0.tgz","integrity":"sha512-HRZUz2/N7ZcVOvdnvsUefqmNLBq4eQgNnAoTKZY9Y8T/tjLt7Kc+eooD2QM5yB81nsaAYtNEIqT90af9O10nbQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD4Wqn4PULU+ZAkub498Bq7VZo7z2Xk8NEj11Cmxo+acwIgdKEafg8C49eLOKh9x+lC6mq4C3IvKMkQqoXB+J/NBF4="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/reactor-4.5.0.tgz_1493015771907_0.05033103562891483"},"directories":{}},"4.6.0":{"name":"reactor","version":"4.6.0","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.17.1","cadence":"1.0.x","connect":"3.6.0","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.0.x","nop":"1.0.x","operation":"1.4.x","rescue":"3.0.x","turnstile":"2.5.x"},"devDependencies":{"proof":"3.0.x","vizsla":"3.6.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"d28591308dc8726ddc65cc4f73c92495af3b31a1","_id":"reactor@4.6.0","_shasum":"5ce0565dc64bd1d0c8c64ab4321a5dfd5e6820ba","_from":".","_npmVersion":"4.5.0","_nodeVersion":"4.8.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"5ce0565dc64bd1d0c8c64ab4321a5dfd5e6820ba","tarball":"https://registry.npmjs.org/reactor/-/reactor-4.6.0.tgz","integrity":"sha512-wibgTcMDnn48aPFqE8r7Kwloigkew5vX+lp2xTXPoGCSo4uxYaWHAOzZ86QmJSzCrQ+3e5oDpLW0TOpCqihYMw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHcs5hrPxOkLNV7hSF5xcrTqm1gmI/PfZiv8mZEmK55KAiA7E2/zn7yMVf4PSj43+Mf9xe0QWN+ofNBtCGEZNrw8xQ=="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/reactor-4.6.0.tgz_1493015782571_0.7028526635840535"},"directories":{}},"4.7.0":{"name":"reactor","version":"4.7.0","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.17.1","cadence":"1.0.x","connect":"3.6.0","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.0.x","nop":"1.0.x","operation":"1.4.x","rescue":"3.0.x","turnstile":"2.5.x"},"devDependencies":{"proof":"3.0.x","vizsla":"3.6.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"0b7ef0eea17dc8089fb86867d242830b29a291c0","_id":"reactor@4.7.0","_shasum":"b6ac3c01c973e40689c73666208f3173df4fe41c","_from":".","_npmVersion":"4.5.0","_nodeVersion":"4.8.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"b6ac3c01c973e40689c73666208f3173df4fe41c","tarball":"https://registry.npmjs.org/reactor/-/reactor-4.7.0.tgz","integrity":"sha512-FC7i5GfVu7iQTjzwNBv2uMs3KoAzKUU1xnevccqDcZdrWwhwkEfGRK5s6u5QN/WYRDtGrZunxe+kygMJ54iPjA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEwb4UcHGhcZlcCc72L3pKtcF/U0+vyB7BWw+q79joQ3AiA+KQpWYKbdXGNNcr0r/RhHTpW8k4gO7RWYpgEgxpYqYA=="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/reactor-4.7.0.tgz_1493953112016_0.38870416348800063"},"directories":{}},"4.8.0":{"name":"reactor","version":"4.8.0","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.17.1","cadence":"1.0.x","connect":"3.6.0","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.0.x","nop":"1.0.x","operation":"1.4.x","rescue":"3.0.x","turnstile":"2.5.x"},"devDependencies":{"proof":"3.0.x","vizsla":"3.6.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"7754a1d32fd60855d7114f07822d30044caad110","_id":"reactor@4.8.0","_shasum":"22e33dacee2fd4ef0178ba7ca82ab74c6645e696","_from":".","_npmVersion":"4.5.0","_nodeVersion":"4.8.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"22e33dacee2fd4ef0178ba7ca82ab74c6645e696","tarball":"https://registry.npmjs.org/reactor/-/reactor-4.8.0.tgz","integrity":"sha512-1LGLyeWcniAJR9NY80aNYHJPGYVBK5LkVmeE5vK1N8JpRnqZxkZviJShqoXZGH0Fyo39DbvgAZneREAoKFQK6g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCXp02EWvlj3t7Q/B7dTiH9iNv+U60LGp8hUZDhoNfDmgIgGsxJL8djMdNBEHq5RY4J18rAyMhhO092qHhemc6w0H8="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/reactor-4.8.0.tgz_1493953122420_0.4736555165145546"},"directories":{}},"4.8.1":{"name":"reactor","version":"4.8.1","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.17.1","cadence":"1.0.x","connect":"3.6.0","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.0.x","nop":"1.0.x","operation":"1.4.x","rescue":"3.0.x","turnstile":"2.5.x"},"devDependencies":{"proof":"3.0.x","vizsla":"3.6.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"5a4a693064fa73e4920e51309cf25cb1ebc01e03","_id":"reactor@4.8.1","_shasum":"f67193a2ae87d53368da5e150a41da48b0306575","_from":".","_npmVersion":"4.5.0","_nodeVersion":"4.8.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"f67193a2ae87d53368da5e150a41da48b0306575","tarball":"https://registry.npmjs.org/reactor/-/reactor-4.8.1.tgz","integrity":"sha512-1KoXXyXWB0zvB1ZP9yKCMeSMWQhNpIjTLgT7QjolKYI8usrqHuNAiddtnEZzjg+KlqIb45ScnOAb5IccNacJ6A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDKKo8R981ZKVJ2hdyPCXkIFa/qeSUtT/sc2JWRq4GOuAiEA7/vdB9J4wzMpxIzPduf0CSLe5SxUwI36Vm1lcjrrAlQ="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/reactor-4.8.1.tgz_1493954420403_0.8983590132556856"},"directories":{}},"4.8.2":{"name":"reactor","version":"4.8.2","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.17.1","cadence":"1.0.x","connect":"3.6.0","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.0.x","nop":"1.0.x","operation":"1.4.x","rescue":"3.0.x","turnstile":"2.5.x"},"devDependencies":{"proof":"3.0.x","vizsla":"3.6.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"ba053a262d6878408a251466581bb45defc1cc47","_id":"reactor@4.8.2","_shasum":"0f92b91e181388292976ee394ac79a1c2263e98f","_from":".","_npmVersion":"4.5.0","_nodeVersion":"4.8.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"0f92b91e181388292976ee394ac79a1c2263e98f","tarball":"https://registry.npmjs.org/reactor/-/reactor-4.8.2.tgz","integrity":"sha512-X7FO10jjnGzPypQy63DuYKtq7AAMqPInKkCqIaE01PyRjoNsxzEgdFK3UU6BhJw3r1Qk0aG8vP2sX83R2xu+bg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID+TjR9yEU2B3QjUmD2bHQk3oGT/JU/DCjOIzYm7kB4EAiAOC8Os8zhVWjUdKt9banmTIP+bfaAQ5HRWiCSRV+0Itw=="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/reactor-4.8.2.tgz_1493954506308_0.4289486953057349"},"directories":{}},"4.8.3":{"name":"reactor","version":"4.8.3","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.17.1","cadence":"1.0.x","connect":"3.6.0","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.0.x","nop":"1.0.x","operation":"1.4.x","rescue":"3.0.x","turnstile":"2.5.x"},"devDependencies":{"proof":"3.0.x","vizsla":"3.6.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"8736ef8afbfc6a2a3821e570668d62ac355329a9","_id":"reactor@4.8.3","_shasum":"94571785060a175448e630eec84986c43cbbcaca","_from":".","_npmVersion":"4.5.0","_nodeVersion":"4.8.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"94571785060a175448e630eec84986c43cbbcaca","tarball":"https://registry.npmjs.org/reactor/-/reactor-4.8.3.tgz","integrity":"sha512-1mIR7RQBczIyXbkpvunbnnBe91zDDxi9zUrCaApoSSnVhFabtSuar2pAqftWE+Z1XOgFcgorTPv6FrRBZYWjUw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID52uNPhFpIzXOY8D3Tjyb/AAMwHaDQAz3TXINSZUjeeAiAGzVB80D8PkCZP+cMZAi7MPrQFwiw4C9deC/BiJ9J+nw=="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/reactor-4.8.3.tgz_1493959389649_0.13848175550810993"},"directories":{}},"4.8.4":{"name":"reactor","version":"4.8.4","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.17.1","cadence":"1.0.x","connect":"3.6.0","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.0.x","nop":"1.0.x","operation":"1.4.x","rescue":"3.0.x","turnstile":"2.5.x"},"devDependencies":{"proof":"3.0.x","vizsla":"3.6.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"609ba1eb9a1a325bfc49e944e6fe46e6f7502eaa","_id":"reactor@4.8.4","_shasum":"5a535daa41950ad73d38fcf0333f8d575103b8da","_from":".","_npmVersion":"4.5.0","_nodeVersion":"4.8.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"5a535daa41950ad73d38fcf0333f8d575103b8da","tarball":"https://registry.npmjs.org/reactor/-/reactor-4.8.4.tgz","integrity":"sha512-euAd7aspGBx/Qf7v8FLxJA/ftfGzH3egjD+Xf2PZOC7M9TQG+CzLHw6l7KfMMimqh+F6oEBTAtjLi9ukpTkoXQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDseBGahxWHuW+gXybZbfEENKU766vqKsqNy7ymbMMXrQIgWnnoggnarhDcmORpwwHn0brypYTpDjd7QGzoXsfi8wo="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/reactor-4.8.4.tgz_1493963347841_0.8266170711722225"},"directories":{}},"4.9.0":{"name":"reactor","version":"4.9.0","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.17.1","cadence":"1.0.x","connect":"3.6.0","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.0.x","nop":"1.0.x","operation":"1.4.x","rescue":"3.0.x","turnstile":"2.5.x"},"devDependencies":{"proof":"3.0.x","vizsla":"3.6.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"a7df0bc86f76de9f7c2eed85227e6fd9dac14c40","_id":"reactor@4.9.0","_shasum":"b10ecebc36225bf4e8fc7181180a0a2c968ec2be","_from":".","_npmVersion":"4.5.0","_nodeVersion":"4.7.3","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"b10ecebc36225bf4e8fc7181180a0a2c968ec2be","tarball":"https://registry.npmjs.org/reactor/-/reactor-4.9.0.tgz","integrity":"sha512-b7P300j9NxLLSePGpb6TUiPwUsvNzXBQvcs+lFPu7vl8RNhDAkBopnTfNLXVm+FhJJS1cMwg0QHSkSRDoS03Uw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCBl/fjbTmfkqUkQjW5/r9gdpintSJH3/oVnm7EZTw5swIgYl8ET9ZhuJVrXy7pPd26pxS5farDvO9VBoDUGwU71gw="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor-4.9.0.tgz_1495215410369_0.796676496276632"},"directories":{}},"4.9.1":{"name":"reactor","version":"4.9.1","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.17.1","cadence":"1.0.x","connect":"3.6.0","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.0.x","nop":"1.0.x","operation":"1.4.x","rescue":"3.0.x","turnstile":"2.5.x"},"devDependencies":{"proof":"3.0.x","vizsla":"3.6.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"bae5d573cf897597d6db308ed2160977f4f9e234","_id":"reactor@4.9.1","_shasum":"eff781e783993dfcc8952bfc0d3416d98fa3938a","_from":".","_npmVersion":"4.5.0","_nodeVersion":"4.7.3","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"eff781e783993dfcc8952bfc0d3416d98fa3938a","tarball":"https://registry.npmjs.org/reactor/-/reactor-4.9.1.tgz","integrity":"sha512-WKWOYrjur2O8tkgCNmbXOLETbANbG/Qytr6mMX/fh4n75eG8MsggqEPg3chh3RquerlkEFjuYMltAfTdX0pT7g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCZG4qPchnwolMK1BveX7sldZq08AsYHqppkAJuqKTEJwIhAJ9iMbegBjlthMM9JYa+vM+n7Eez6LUbKfPJ0ld0wP0b"}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor-4.9.1.tgz_1495221841024_0.11978149460628629"},"directories":{}},"4.9.2":{"name":"reactor","version":"4.9.2","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.17.1","cadence":"1.0.x","connect":"3.6.0","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.0.x","nop":"1.0.x","operation":"1.4.x","rescue":"3.0.x","turnstile":"2.5.x"},"devDependencies":{"proof":"3.0.x","vizsla":"3.6.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"a6dbfcf7c9ed92194a0e8545fae55ac3cc4d17f4","_id":"reactor@4.9.2","_shasum":"7a4ff85029c09f8818a899c82a30815c8dfbcae2","_from":".","_npmVersion":"4.5.0","_nodeVersion":"4.8.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"7a4ff85029c09f8818a899c82a30815c8dfbcae2","tarball":"https://registry.npmjs.org/reactor/-/reactor-4.9.2.tgz","integrity":"sha512-g5ZuEp52je/FY+MndHS1IsKtwBr73WS0uFOYfixw5fpz+0uBuIAv0+vxb//7kS4Ur/ZX8Ci16J11BZ6p/a9Kbg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDZX6jk+HjdcHRp4sa5i+6FDsaOE/kw5KSst1zwshxOnAiEAp2d3M1vWIGMkFaeM1vtBiHPK4YqcH7KKy0Uq6Tdb1BQ="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor-4.9.2.tgz_1495497124688_0.00666607660241425"},"directories":{}},"4.9.3":{"name":"reactor","version":"4.9.3","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.17.2","cadence":"1.0.x","connect":"3.6.2","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.0.x","nop":"1.0.x","operation":"1.4.x","rescue":"3.0.x","turnstile":"2.5.x"},"devDependencies":{"proof":"3.0.x","vizsla":"3.6.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"74fe76343865ff2557f2d33cb46cf188e7d1cbfa","_id":"reactor@4.9.3","_shasum":"cac6f33691e6d98d397645b41836d8e26352d498","_from":".","_npmVersion":"2.15.11","_nodeVersion":"4.8.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"cac6f33691e6d98d397645b41836d8e26352d498","tarball":"https://registry.npmjs.org/reactor/-/reactor-4.9.3.tgz","integrity":"sha512-EZ/zy9Jr/WC1xylTuaT5vRgt6yeYZEVZB0+8NVyJ4GJJNCaBQ4VT8bQp9WNsa9CaHpaL4UlnTxCbCDtCoKew5w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBzbE0NK2JnfMAiGSFUnOJDq+8VemIH7xqnTLFPVX07XAiEA383rhtJCAx43i161ZXxTqbnS3rUHfNz3/Ao4jNykq0A="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor-4.9.3.tgz_1496704232912_0.5501167553011328"},"directories":{}},"5.0.0":{"name":"reactor","version":"5.0.0","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.17.2","cadence":"1.0.x","connect":"3.6.2","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.0.x","nop":"1.0.x","operation":"1.4.x","rescue":"3.0.x","turnstile":"2.5.x"},"devDependencies":{"proof":"3.0.x","vizsla":"3.6.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"26559d7d0e0286a1bab5fcd40c773831b7dcde1a","_id":"reactor@5.0.0","_shasum":"00a8d53331fbf5cc6dca7c28e5f702808a3b02b5","_from":".","_npmVersion":"2.15.11","_nodeVersion":"4.8.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"00a8d53331fbf5cc6dca7c28e5f702808a3b02b5","tarball":"https://registry.npmjs.org/reactor/-/reactor-5.0.0.tgz","integrity":"sha512-orJLrWpxk0NomgYDOAFrwzsOvxj/RgoKlJqec9bKkRVYVzVTX5JD1fJcUc62BNbVyiBP2Syn1+nP+wEXnBdP6w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDqTEydXVg7uTInFPG1LeMQKX8oQ79aPCVY0xKbjsu8ygIhAObEjZ9LU8uZBAJVluTLZtlLSMCfJKrItKQSXvkmKqKX"}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor-5.0.0.tgz_1497581592282_0.1582794387359172"},"directories":{}},"5.0.2":{"name":"reactor","version":"5.0.2","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.17.2","cadence":"1.0.x","connect":"3.6.2","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.0.x","nop":"1.0.x","operation":"1.4.x","rescue":"3.0.x","turnstile":"2.5.x"},"devDependencies":{"proof":"3.0.x","vizsla":"3.6.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"eab358ac2ffb3965c1ed4c4fdf1152149be5fba7","_id":"reactor@5.0.2","_shasum":"8dec94081dbdcab0a832531ffef0860523b4d3ff","_from":".","_npmVersion":"2.15.1","_nodeVersion":"0.10.48","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"8dec94081dbdcab0a832531ffef0860523b4d3ff","tarball":"https://registry.npmjs.org/reactor/-/reactor-5.0.2.tgz","integrity":"sha512-wBItDUhkV72XOZhbSOHzyfzdPYMuZSHxjxQglvzGECnxSqlDeIhfksCOt7n3YPmq1i6K04eSXEQq1Y4LD3YAEQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH/DEIqBU7bmJAqveDpwrEaA57Ece8YKP1JApxXSazFvAiBNNs0GrzC8LFjo+m2NjBFeAn3rFzlZ6gT06SIz5S5qnQ=="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor-5.0.2.tgz_1497582063417_0.5322539978660643"},"directories":{}},"5.0.3":{"name":"reactor","version":"5.0.3","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.17.2","cadence":"1.0.x","connect":"3.6.2","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.0.x","nop":"1.0.x","operation":"1.4.x","rescue":"3.0.x","turnstile":"3.2.x"},"devDependencies":{"proof":"3.0.x","vizsla":"5.0.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"95a3749614390262112a7eb88324468a5453287a","_id":"reactor@5.0.3","_shasum":"cdaceaeaf7b0b93f7d30ea55393778f35a41aff0","_from":".","_npmVersion":"2.15.11","_nodeVersion":"4.8.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"cdaceaeaf7b0b93f7d30ea55393778f35a41aff0","tarball":"https://registry.npmjs.org/reactor/-/reactor-5.0.3.tgz","integrity":"sha512-EGyfR2b1aIeD6AkUczfLwIluw46eVC86F7PmS8AZObDqmjT4Gb4znalbeDrLJB3invSR2UP5ZrbNlmlkZ00Gpw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD7FGR5n1O7lY/wnnBigmRP86NJJtfQ0NYF+8Q7y3R/OgIhANYz1MN8IcSWosvNIJRQOa3rV6p5KvKk3K6jeUI8alBx"}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor-5.0.3.tgz_1498414658812_0.7938286405988038"},"directories":{}},"5.0.4":{"name":"reactor","version":"5.0.4","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.17.2","cadence":"1.0.x","connect":"3.6.2","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.0.x","nop":"1.0.x","operation":"1.6.x","rescue":"3.0.x","turnstile":"3.2.x"},"devDependencies":{"proof":"3.0.x","vizsla":"5.2.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"799f4f4c4034b4eec0335450eb6b69bccbdaaac8","_id":"reactor@5.0.4","_shasum":"570bf43aee4a9c2ed1743989a231587f204470af","_from":".","_npmVersion":"2.15.11","_nodeVersion":"4.7.3","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"570bf43aee4a9c2ed1743989a231587f204470af","tarball":"https://registry.npmjs.org/reactor/-/reactor-5.0.4.tgz","integrity":"sha512-CrQaS/dtAchCuevWYuBvzOmtxnTwT5B3N3LX11+GFrWbz5TlTrrq292oUIj/Um9I+8rHNxBKQMn9VzgYFDmdyg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJIjPggVs6O0K8wGCPVE9qPFL792ejhjhBBVLz/fB38wIgO5HOHwQO5IOv1rGHTbCzq9o1iPdL0HgnLs6KymtICig="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor-5.0.4.tgz_1500055283699_0.24748023296706378"},"directories":{}},"5.0.5":{"name":"reactor","version":"5.0.5","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.17.2","cadence":"1.0.x","connect":"3.6.2","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.0.x","nop":"1.0.x","operation":"1.6.x","rescue":"3.0.x","turnstile":"3.2.x"},"devDependencies":{"proof":"3.0.x","vizsla":"5.2.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"9e0c0a61ced96615b616f32111a8bbe5654dbccd","_id":"reactor@5.0.5","_shasum":"2e1593f91b6582d781c018b3bb044c57462b17d5","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.11.0","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"2e1593f91b6582d781c018b3bb044c57462b17d5","tarball":"https://registry.npmjs.org/reactor/-/reactor-5.0.5.tgz","integrity":"sha512-w4xE1u/VuVWTtyVfw+oXHZFwyvNFlPmi2LnZC+VcIkA4rKTj9GIGUGZ7vBXuvc6rmqab+oGdH/xGUPnG+ej2zQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCbh95t+xDM6EsEvo/ZoNExDJxa0dBrzbQ19RYLwLKZnwIgOCV20NweHooyVQc+62YDcI+SftibT4s9rurqGyjczwI="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor-5.0.5.tgz_1503068822124_0.9978978240396827"},"directories":{}},"5.0.6":{"name":"reactor","version":"5.0.6","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.17.2","cadence":"1.0.x","connect":"3.6.2","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.0.x","nop":"1.0.x","operation":"1.6.x","rescue":"3.0.x","turnstile":"3.2.x"},"devDependencies":{"proof":"3.0.x","vizsla":"5.2.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"3a3b11ad38ab8f68f485be6963a3231c7455de6f","_id":"reactor@5.0.6","_shasum":"92e154cca59173b6aa541a750af2c4b34ec6d7be","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.11.0","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"92e154cca59173b6aa541a750af2c4b34ec6d7be","tarball":"https://registry.npmjs.org/reactor/-/reactor-5.0.6.tgz","integrity":"sha512-bJ941bTUmMP5F5weYXXjW5t8jq2xv12CagTBTmlCm/qHhoayYzFaFTFfnsRnRPkqkkzwpcwsF1e+cOa1rZ6qlg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDno+I9jz9NWvyyjj0exRiLCj4y0LSgTWOLWHj4gFmH1wIgP2ykCPakfpuGYNQzdXOlAPSGu4ms6jzqgmCVOeX8ydI="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor-5.0.6.tgz_1503068887258_0.8856059862300754"},"directories":{}},"8.0.0":{"name":"reactor","version":"8.0.0","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.17.2","cadence":"1.0.x","connect":"3.6.2","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.0.x","nop":"1.0.x","operation":"1.6.x","rescue":"3.0.x","turnstile":"3.2.x"},"devDependencies":{"proof":"3.0.x","vizsla":"5.2.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"d76c9876d1e4fa112fa5728bd1c87dcfdce9a26b","_id":"reactor@8.0.0","_shasum":"03232f2a9b60dce246affec3c1b870ff77a80a50","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.11.0","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"03232f2a9b60dce246affec3c1b870ff77a80a50","tarball":"https://registry.npmjs.org/reactor/-/reactor-8.0.0.tgz","integrity":"sha512-VIvYlwVj1oyic7/DTs9dCuQUKz6t9eQ23LZQSnSYsilYfXdsVipKcm/0juEqY9JfAehuoDz4QHzF77JMC/Pa1Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIENtO8U8CekzSye7UxsLKPOGIsH5vx3uBKrsAzOWSIL1AiAfxfHKIG5cqNl23wcXWwnMzGLSfHS2b95C5Llq7QG1qQ=="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor-8.0.0.tgz_1503683605842_0.6666678539477289"},"directories":{}},"8.0.1":{"name":"reactor","version":"8.0.1","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.17.2","cadence":"1.0.x","connect":"3.6.2","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.0.x","nop":"1.0.x","operation":"1.6.x","rescue":"3.0.x","turnstile":"3.2.x"},"devDependencies":{"proof":"3.0.x","vizsla":"5.2.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"c08412d130475cc590febad31fed7abbe266fa45","_id":"reactor@8.0.1","_shasum":"7051729e4dcca5aa4b21830a64195ad2d6f4dcb9","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.11.0","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"7051729e4dcca5aa4b21830a64195ad2d6f4dcb9","tarball":"https://registry.npmjs.org/reactor/-/reactor-8.0.1.tgz","integrity":"sha512-1o8hCiZsI4FFtcZB8TdQJfmcVjROU+88pPCixWYR2rHAwN8QOn6M3M4q4B4O5GEiY2M1Uvt6XXPvwiRnMbWLng==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGbTkHwhoXBOqScKUQET3hZEkfeb0/KF49MxmgaoISJuAiAvT/k02EHK69rRultPoGJZTe3rIUyqMZzS55UiwhfN5w=="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor-8.0.1.tgz_1503688098359_0.4182361320126802"},"directories":{}},"8.0.2":{"name":"reactor","version":"8.0.2","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.17.2","cadence":"1.0.x","connect":"3.6.2","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.0.x","nop":"1.0.x","operation":"1.6.x","rescue":"3.0.x","turnstile":"3.2.x"},"devDependencies":{"proof":"3.0.x","vizsla":"5.2.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"192323262d624d0f698bef4f842739d763fbbe9d","_id":"reactor@8.0.2","_shasum":"a9aaba60d833d14679aef90561c897002fc16b8c","_from":".","_npmVersion":"2.15.11","_nodeVersion":"4.8.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"a9aaba60d833d14679aef90561c897002fc16b8c","tarball":"https://registry.npmjs.org/reactor/-/reactor-8.0.2.tgz","integrity":"sha512-6ITo/VyeBBNpX8TBwRsIl+/8Trlm9MSHjXi8An752cZj5uZ2F7ck0O+W5B8l6zd4o/L5UztdUkLOn6FNwDOD6Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAWacXNYjPXAB3QRRRPhzISfs4FUOUM25+rbt4mkQVj5AiAs7D9N4bES1Oxfxne4hWkd3vrvx0RCiGe7U8dRdc5BxQ=="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor-8.0.2.tgz_1505892275469_0.5936837159097195"},"directories":{}},"8.0.3":{"name":"reactor","version":"8.0.3","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.17.2","cadence":"1.0.x","connect":"3.6.2","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.0.x","nop":"1.0.x","operation":"1.6.x","rescue":"3.0.x","turnstile":"3.2.x"},"devDependencies":{"proof":"3.0.x","vizsla":"5.2.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"19e54ce569293007be2419ba46c00461c316b11a","_id":"reactor@8.0.3","_shasum":"8921041b58146f101200359ebdbeca0eb9a25ae2","_from":".","_npmVersion":"2.15.11","_nodeVersion":"4.8.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"8921041b58146f101200359ebdbeca0eb9a25ae2","tarball":"https://registry.npmjs.org/reactor/-/reactor-8.0.3.tgz","integrity":"sha512-v0FVhIEYYkwF2t7WaLCINw5XGVhFRposvMiMv8I15hDQO2wucbnFz2cw7rNKcuiHGYoRkocthsb77rEqB3Bw3w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCh3fxKQ6ZRUcMzSvtYi22lOGE/abKx7LeWGdC1dWfaKAIhANf/1gCTKJz4Lxqz7BvOaL0j81PyRSggRjzEZraAFg0a"}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor-8.0.3.tgz_1506710855268_0.4708828255534172"},"directories":{}},"8.0.4":{"name":"reactor","version":"8.0.4","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.17.2","cadence":"1.0.x","connect":"3.6.2","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.0.x","nop":"1.0.x","operation":"1.6.x","rescue":"3.0.x","turnstile":"3.2.x"},"devDependencies":{"proof":"3.0.x","vizsla":"5.2.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"97e6386c7a3d25c4cece2a73b359a2076b4e73be","_id":"reactor@8.0.4","_shasum":"7684532b5ff601a90dbb216f494189de197589e0","_from":".","_npmVersion":"2.15.11","_nodeVersion":"4.8.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"7684532b5ff601a90dbb216f494189de197589e0","tarball":"https://registry.npmjs.org/reactor/-/reactor-8.0.4.tgz","integrity":"sha512-Sm2U21etkwAxYVWZKYDKBxS6KbN5kln1lQpyWMApzHroxtHJG7K1mKOof6Hum0ycqYYmxPCINF4NEP71wiCtGg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD+fQ0Vi0Ex0H/2wUY4NdBBrYnaTZaAZc5Q3hF7V0LpXwIgKBavOiVSlDy/N//tc0DbRld15DCulcsIUv0nYpLIq2M="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor-8.0.4.tgz_1507282466693_0.5019292382057756"},"directories":{}},"9.0.0":{"name":"reactor","version":"9.0.0","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.17.2","cadence":"1.0.x","connect":"3.6.2","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.0.x","nop":"1.0.x","operation":"1.6.x","rescue":"3.0.x","turnstile":"3.2.x"},"devDependencies":{"proof":"3.0.x","vizsla":"5.2.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"321ad8093116d56c95d98adc00e426d8c4f6cac2","_id":"reactor@9.0.0","_shasum":"5000f5f108a893149deeae27975cb3a1dcc093b8","_from":".","_npmVersion":"2.15.11","_nodeVersion":"4.8.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"5000f5f108a893149deeae27975cb3a1dcc093b8","tarball":"https://registry.npmjs.org/reactor/-/reactor-9.0.0.tgz","integrity":"sha512-glPPyZPNgWMnFNoC0vVlxr5LJpF1/BilVWT4LySFn4CbMSPB+xo/1CDOo4jR42jzgnQOu/K6PTqLxHJNgJhrXA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDSMmGFmCCmgndemtbw/K28zJ3ny68JNc3vV5WmItkISgIgDXlNVV5hv7EXYPiWKIDioLCrEA9WTJ6jg1E812MItsk="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor-9.0.0.tgz_1508552072793_0.43980839964933693"},"directories":{}},"10.0.0":{"name":"reactor","version":"10.0.0","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.2","cadence":"1.0.x","connect":"3.6.2","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.0.x","nop":"1.0.x","operation":"1.6.x","rescue":"3.0.x","turnstile":"3.2.x"},"devDependencies":{"proof":"3.0.x","vizsla":"5.2.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"cd284455f53d9917bf7c402d1168f44ae29da212","_id":"reactor@10.0.0","_shasum":"02a326214dcec0ee8d22ac2ef47c5c729dfa5372","_from":".","_npmVersion":"2.15.11","_nodeVersion":"4.7.3","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"02a326214dcec0ee8d22ac2ef47c5c729dfa5372","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.0.0.tgz","integrity":"sha512-s6AtWybIR8eHNW4bzC2A7uhEDIxh2BD21jP8aYsHITNJ2ZUmEWOCID857vQx0oAih5YA8RRt+KktR4D+KjU9fQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICHF1ZBZNpmPHNw4TQg7eeySwTypUCREj4/1wv10NQB7AiEAqJYdtSePaxsmvLITSFGbbEChgIwkguVUh9zyjZOXoFs="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor-10.0.0.tgz_1509393089676_0.3434593111742288"},"directories":{}},"10.0.1":{"name":"reactor","version":"10.0.1","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.2","cadence":"1.0.x","connect":"3.6.5","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.0.x","nop":"1.0.x","operation":"1.6.x","rescue":"3.2.x","turnstile":"3.2.x"},"devDependencies":{"proof":"3.0.x","vizsla":"9.0.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"a0feac657ef3de204d04d651149e9bb35902cd02","_id":"reactor@10.0.1","_shasum":"9dbbee3d78cb2f60f8309e6a23070bea51dbdafd","_from":".","_npmVersion":"2.15.11","_nodeVersion":"4.7.3","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"9dbbee3d78cb2f60f8309e6a23070bea51dbdafd","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.0.1.tgz","integrity":"sha512-J5HOM4cmxjJLmB9z6k4m4IBI6rW2sDx4kNkjwMgKUyc2Lf+9vCHpqrG8f8pjohBnCOZzgykJ8ErhxxrL3cEo4g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCdDgzss6Z3dBazV8vUchmq46xlzQCOJwxSIybw/ux1aAIgSCEMRKCkOl+MIvyqicLHffeJfAEwXbeVbaJ+0dJWd3I="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor-10.0.1.tgz_1509909571267_0.7596636055968702"},"directories":{}},"10.0.2":{"name":"reactor","version":"10.0.2","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.2","cadence":"1.0.x","connect":"3.6.5","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.2.x","nop":"1.0.x","operation":"1.6.x","rescue":"3.2.x","turnstile":"3.2.x"},"devDependencies":{"proof":"3.0.x","vizsla":"9.0.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"e472a93ac6469b8a52f6ef039fd78b06c7d3d6f9","_id":"reactor@10.0.2","_shasum":"d5b53a1ade25461093beea76708e55f4a98f6c29","_from":".","_npmVersion":"2.15.11","_nodeVersion":"4.7.3","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"d5b53a1ade25461093beea76708e55f4a98f6c29","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.0.2.tgz","integrity":"sha512-JU5+j4WWubpJCi8VZQSZMkrRhRcXg26NPlRrVrweLbDDotksVuwKbGEocAZf3oS9ttycbggRtefVbghJ8yAKsw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGBY4gIBL2G8C4qdPr1OxLSOMmKI2ozU94A7SvZlxD/NAiEAtLxtTxOlYgW5GX7uuKdlkm8BOOpzPZQDLy/wPC1XOuo="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor-10.0.2.tgz_1511326863967_0.7893085402902216"},"directories":{}},"10.1.0":{"name":"reactor","version":"10.1.0","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.2","cadence":"1.0.x","connect":"3.6.5","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.2.x","nop":"1.0.x","operation":"1.6.x","rescue":"3.2.x","turnstile":"3.2.x"},"devDependencies":{"proof":"3.0.x","vizsla":"10.2.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"c0f872b5dcbffbfe38197152b548b035d45a3431","_id":"reactor@10.1.0","_shasum":"18339a7175e57361b03748cfcf5a9ae8ee06ed1b","_from":".","_npmVersion":"2.15.11","_nodeVersion":"4.8.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"18339a7175e57361b03748cfcf5a9ae8ee06ed1b","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.1.0.tgz","integrity":"sha512-8sNDJSh10jSllCXC/60WfejsL5tlYzN0iBNgg+SDIVvy7rP9GALhON9eFpGS1Cg3YEvFZSffFGb5ycWidbUE6g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGOrqPhPUJZ3mqY2ObwMiVEtDAUfNcCa81rCCA4FmCySAiBea3ynqlo9tu6UCLPInINlvRbXljoXlUPpIIaLRsZ9Jw=="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor-10.1.0.tgz_1511751829201_0.179922292008996"},"directories":{}},"10.1.1":{"name":"reactor","version":"10.1.1","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.2","cadence":"1.0.x","connect":"3.6.5","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.2.x","nop":"1.0.x","operation":"1.6.x","rescue":"3.2.x","turnstile":"3.2.x"},"devDependencies":{"proof":"3.0.x","vizsla":"10.3.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"6b56ae41df68a871a65d837757d19019707a41f1","_id":"reactor@10.1.1","_shasum":"8556d771ff717493128c66ae93611ea2f2f040d7","_from":".","_npmVersion":"2.15.11","_nodeVersion":"4.8.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"8556d771ff717493128c66ae93611ea2f2f040d7","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.1.1.tgz","integrity":"sha512-y4ll0qLSIjmggZLXMRk//DHepJzhULURQRy4R6tHp3LkouHigE88oJW8JmKqJdqt5plJ9hD5fLGL6JdsNz3grA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCDr9WrOUh4xmFrqSkpCRhCSoK0ymrJ1tQKDqK4kP6NLgIhAPKdJpRu7X7jXYKsjSP+MeXYZsmVDh4lqmpjlKsh/9P/"}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor-10.1.1.tgz_1511755588826_0.440521095180884"},"directories":{}},"10.1.2":{"name":"reactor","version":"10.1.2","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.2","cadence":"1.0.x","connect":"3.6.5","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.2.x","nop":"1.0.x","operation":"1.6.x","rescue":"3.2.x","turnstile":"3.2.x"},"devDependencies":{"proof":"3.0.x","vizsla":"10.4.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"12dbd4b040589153d11cb1b3b3c5d3449d9b21ba","_id":"reactor@10.1.2","_shasum":"b33f611acd7ea5c7c42020eaa568147139ed078d","_from":".","_npmVersion":"2.15.11","_nodeVersion":"4.8.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"b33f611acd7ea5c7c42020eaa568147139ed078d","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.1.2.tgz","integrity":"sha512-4xFjia8JLkEg0Zj89yYK0r7cFobAJNethGGBHUQwYIepbpb7uTS4n/CE6DvUqPgjNpymmRemkTtqiXOQssN4dg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCn37HUp6XH4V6Cj2HfF1NC8gxxQCezux8PAjg8mm61twIhAM03NULOrvHDwr9H5JvH2EniJY0z7G8boj0wKMFbGgeT"}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor-10.1.2.tgz_1511763491931_0.4189777870196849"},"directories":{}},"10.1.3":{"name":"reactor","version":"10.1.3","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.2","cadence":"1.0.x","connect":"3.6.5","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.2.x","nop":"1.0.x","operation":"1.6.x","rescue":"3.2.x","turnstile":"3.2.x"},"devDependencies":{"proof":"3.0.x","vizsla":"10.6.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"5518cf749b27cfeec5e2827f24931d086b5799ee","_id":"reactor@10.1.3","_shasum":"456c0d1e899e9ba16f9e7b8777f73d947051dee9","_from":".","_npmVersion":"2.15.11","_nodeVersion":"4.8.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"456c0d1e899e9ba16f9e7b8777f73d947051dee9","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.1.3.tgz","integrity":"sha512-zz3oRN8k1WS5w6bw+MG4lUBJc3fo1S/3g4WT684GXdfHkdfkUjdSIHEy/AmthzwkI4Gus+Nna6JnRXf9jZm+XQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCx8TaRLQH1WExHiEI2ncPxL1cyCkm9zqa8ZZojf35KOQIgHk50Vn4JDoXjgSnmGTvvMSqgMPUTp8QXWhtVH63kn/0="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor-10.1.3.tgz_1511773937782_0.4493626388721168"},"directories":{}},"10.1.4":{"name":"reactor","version":"10.1.4","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.2","cadence":"1.0.x","connect":"3.6.5","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.2.x","nop":"1.0.x","operation":"1.6.x","rescue":"3.2.x","turnstile":"3.2.x"},"devDependencies":{"proof":"3.0.x","vizsla":"10.6.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"c5d2a4971b732f2f267be7269936896ea32ed98b","_id":"reactor@10.1.4","_shasum":"1c47781d409ee65b2d0946456880365bedad945c","_from":".","_npmVersion":"2.15.11","_nodeVersion":"4.8.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"1c47781d409ee65b2d0946456880365bedad945c","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.1.4.tgz","integrity":"sha512-xmp3wRwMUgopXxvI763M4GCLy4WbvlxiF29prlP4LFMNsQ1itdTmtLN0/KYkkAINDmgaevVF5i90IPdW8+kvaw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBHStTn5t/kThCueG1t5Ie7xLNLPfiwFWZDsmXE6+6KZAiASfb1cGFMOBm988NfYUIqN7Bz4ffGCAQ5eQae8fVUsvg=="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor-10.1.4.tgz_1511958198630_0.8345119182486087"},"directories":{}},"10.1.5":{"name":"reactor","version":"10.1.5","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.2","cadence":"1.0.x","connect":"3.6.5","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.2.x","media-typer":"0.3.x","nop":"1.0.x","operation":"1.6.x","rescue":"3.2.x","turnstile":"3.2.x"},"devDependencies":{"proof":"3.0.x","vizsla":"10.6.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"2de5e1c6cd0d673d8a6e34fa96e2ff984bb69d45","_id":"reactor@10.1.5","_shasum":"9b16732a85a666fa3711cd18e8e3938659c70e8a","_from":".","_npmVersion":"2.15.11","_nodeVersion":"4.8.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"9b16732a85a666fa3711cd18e8e3938659c70e8a","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.1.5.tgz","integrity":"sha512-bOFIvG34FlpHK6HpW8JCkg/+QECeIKuaPSn1iNDhxN514rct2XLWkrOQah0TkogyzrpQzXJkJy3ihkoVgNcIfg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH1dW+jHpXhZaPgohkqdHHkgruxfyy1fXSTrW//bkS4ZAiBE0KTFXNWIbbwaFGXSXcHuC+tBPkPUsjgBFjnTHxLBQQ=="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor-10.1.5.tgz_1512032742223_0.9704265878535807"},"directories":{}},"10.1.6":{"name":"reactor","version":"10.1.6","description":"A work queue that pivots events to error-first callbacks.","keywords":["queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.2","cadence":"1.0.x","connect":"3.6.5","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.2.x","media-typer":"0.3.x","nop":"1.0.x","operation":"1.6.x","rescue":"3.2.x","turnstile":"3.2.x"},"devDependencies":{"proof":"3.0.x","vizsla":"10.7.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"a870874c4c15d289c460abbad5c7231d4a6ea8b9","_id":"reactor@10.1.6","_shasum":"b8e9a66b790c929461e143b4e5bdf461beb5fee5","_from":".","_npmVersion":"2.15.11","_nodeVersion":"4.8.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"b8e9a66b790c929461e143b4e5bdf461beb5fee5","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.1.6.tgz","integrity":"sha512-V/0VYokoPKvK19icQ1bGdQUa+SwxViVYfF6tezsgEyAI737eNY4QzC1AP3YPzwUvDgc++flQ5pIpWOqHNqG66A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFdSLaqwU0gZIWqIt2tprJE1cw/np6d241TkYW9IYAkvAiEA+Kd68cNQsiQ+PimNFtA1Y1oz6bGP0b6wJ8aREktPHXU="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor-10.1.6.tgz_1512544639614_0.6311475872062147"},"directories":{}},"10.1.7":{"name":"reactor","version":"10.1.7","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+ssh://git@github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.2","cadence":"1.0.x","connect":"3.6.5","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.2.x","media-typer":"0.3.x","nop":"1.0.x","operation":"1.6.x","rescue":"3.2.x","turnstile":"3.2.x"},"devDependencies":{"proof":"3.0.x","vizsla":"10.7.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"b8d07be7d5989a4d509c47b722dad4d21fadc117","_id":"reactor@10.1.7","_shasum":"771e6f7b10a658283517c27cf5b65c83bfd8c72e","_from":".","_npmVersion":"2.15.11","_nodeVersion":"4.7.3","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"shasum":"771e6f7b10a658283517c27cf5b65c83bfd8c72e","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.1.7.tgz","integrity":"sha512-lpyu8sW06cfOyKz12aY9TYudr5Uw38X7hlE9SQ78fHbIeCdqpU3YtjPo10Vbb41vwkgVPF+C7+U/xTAL5+/TIg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHQY8+HLCqxtxNn/npCea3qEkpDWUXjobE7TDnZZcPSiAiEAn2zYeeuuCh7ayBHj/jI+M6vWsIN9f4wzZz0Pwrkgodk="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor-10.1.7.tgz_1513334968386_0.10672957357019186"},"directories":{}},"10.1.8":{"name":"reactor","version":"10.1.8","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.2","cadence":"1.0.x","connect":"3.6.5","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.2.x","media-typer":"0.3.x","nop":"1.0.x","operation":"1.6.x","rescue":"3.2.x","turnstile":"3.2.x"},"devDependencies":{"proof":"3.0.x","vizsla":"10.7.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"478e2e3af0acb2fcc62e530e6d06670483588e88","_id":"reactor@10.1.8","_npmVersion":"5.6.0","_nodeVersion":"4.8.7","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-jrCT5cLj77rN4FFz7hqQbMNFFMAnUemxSPeAJjdU6HU5e5a+6Igh9KFfu1l+sZ1z2xA/0Or5ZktboowADNftpw==","shasum":"8221a3082757f88722aeace3a43efdf671cd669f","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.1.8.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDnDXuUMxUqDTAJjCYt7AKRQss2yPEMxxOcKRUqU2D99AiEA88AHWVoSYg9auXjG9INj8h/qSWazDhdPkIx6Z5BydLA="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor-10.1.8.tgz_1516267434259_0.11999806249514222"},"directories":{}},"10.1.9":{"name":"reactor","version":"10.1.9","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.2","cadence":"1.0.x","connect":"3.6.6","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"5.0.x","magazine":"3.2.x","media-typer":"0.3.x","nop":"1.0.x","operation":"1.6.x","rescue":"3.2.x","turnstile":"3.2.x"},"devDependencies":{"proof":"3.0.x","vizsla":"10.7.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"readme":"[![Build Status](https://travis-ci.org/bigeasy/reactor.svg?branch=master)](https://travis-ci.org/bigeasy/reactor) [![Coverage Status](https://coveralls.io/repos/bigeasy/reactor/badge.svg?branch=master&service=github)](https://coveralls.io/github/bigeasy/reactor?branch=master)\n\nAn asynchronous work queue. Reactor takes work and feeds it to an asynchronous\nfunction that accepts an error-first callback.\n\nReactor is part of the [Cadence](https://github.com/bigeasy/cadence) Universe.\nIt is designed with Cadence in mind, but you can use it with your own eror-first\ncallbacks, just follow the rules.\n\nReactor is based on [Turnstile](https://github.com/bigeasy/turnstile) so it can\nperform parallel operations in an orderly fashion;\n\n * with a runtime adjustable limit on the number of concurrent operations,\n * with a fifo queue that can be measured and monitored instead of using the\n event loop as an implicit queue,\n * with a mechanism to actively time out messages in the queue that have grown\n stale.\n\nWithout a queue, parallelism is unmanagable.\n\nHere's an example of how to use Reactor to process a queue managed by Reactor.\n\n```javascript\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, value, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        this._processor.process(values, callback)\n    }\n}\n```\n\nThe first argument to your callback function is going to be a status object.\nThe most interesting property of that object is going to the `timedout`\nproperty, which will be `true` if the time since the work was sitting in the\nqueue for too long. If your work has timed out, return as soon as possible.\nOtherwise, do your work.\n\nNow you can create a Reactor and push work into your Reactor.\n\n```javascript\nvar service = new Service(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\nreactor.push({ item: 1 }, function () {\n    console.log('item consumed')\n})\nreactor.push({ item: 2 })\n```\n\nYou can either push and wait, or else you can push and forget. To push and wait,\nprovide a callback. It will be called when the work has been consumed. To push\nand forget, just submit your work and move on.\n\nThere are some times when you want to keep a queue outside of the Reactor,\neither you have some special grouping or gathering you want to perform, of else\nyou want to check an external source for work. In this case you would use\nReactor as a set of items to check.\n\nLet's create a service that pulls work from a database.\n\n```javascript\nvar database = require('database')\n\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, key, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        database.get(key, function (error, value) {\n            if (error) conosle.log(error.stack)\n            else if (value == null) callback()\n            else this._processor.process(value, callback)\n        })\n    }\n}\n```\n\nIn the above we use a key to pull a value from the database. If the value does\nnot exists in the database, then return immediately, but if it does we call the\nprocessor with the work.\n\nLet's put work in the database and flag\n\n```javascript\nvar database = require('database')\nvar service = new Serivce(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\n\ndatabase.add('a', { item: 1 }, function (error) {\n    if (error) throw error\n    reactor.set('a')\n})\n```\n\nNo matter how man times you call check with the value 'a', you will only be\nadding one work entry into the queue for the value 'a'. The `check` method will\nnot add another entry into the work queue for the value 'a' until the current\nentry is consumed by the work method.\n\nReactors create a separate asynchronous stack in which to do your work. Within\nthat stack, you're supposed to handle any errors. There is no way for any\nasynchronous error or thrown exception to propagate out to the method that\ncalled `push` or `check`. If an asynchronous error is returned to the callback,\nReactor will raise an uncatchable exception guaranteed to unwind your program.\n\nThe guarantee is a Good Thing. It means that you won't swallow errors, you won't\nhave exceptions caught by overly clever error handlers and fed to some event\nhandler you know nothing about.\n\nIf you are using an intelligent error-first control library like Cadence (or\nStreamline.js), then it is easy to wrap your work in an asynchronous try/catch\nblock and recover if if you can, or log and continue.\n\n*TK: Cadence receipes; try/catch, parallel waits.*\n\n#### `new Reactor(operation, [turnstile])`\n\nCreate a new Reactor with an `operation` which is either an asynchronous\nfunction or an object with an `object` and `method` property.\n\n#### `reactor.push(work, [callback])`\n\nPush work into the queue. If given a `callback`, the callback will be called\nwhen the work is consumed. The `callback` will never return value because errors\ndo not propagate up and out of the work queue.\n\nDo not mix with `set` and `check`.\n\n#### `reactor.set(key, [callback])`\n\nAdd a single item of work the work queue that will call the worker with optional\nkey. If given a `callback`, the callback will be called when the work is\nconsumed. The `callback` will never return value because errors do not propagate\nup and out of the work queue.\n\nDo not mix with `push` and `check`.\n\n#### `reactor.check([callback])`\n\nAdds a single, undistinguished work entry into the work queue if no such entry\nalready exists. If given a `callback`, the callback will be called when the work\nis consumed. The `callback` will never return value because errors do not\npropagate up and out of the work queue.\n\n\nDo not mix with `push` and `set`.\n","readmeFilename":"README.md","gitHead":"30a4af2c85c84b55694d21dabd9fee214a31b49c","_id":"reactor@10.1.9","_npmVersion":"5.5.1","_nodeVersion":"8.9.3","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-ZCuSWRChpfbybZby0kuZ/Kbf3Z0Hm2NPN7qBKzcbgpRoNcdTrhGdPcHqR/G0rUP2KaSS5PEirYWNaLDcdxiX/Q==","shasum":"62996f680cff5c27470fd579338252a516819aa1","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.1.9.tgz","fileCount":14,"unpackedSize":34260,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCWal+Kol5U233gfh4B4rAI5tYFrENNDVBD28X2lwfwxgIgETHbXlvP1vGCRAZuRd+GqaePs0kQP6gt4hPF5EJ9oEY="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_10.1.9_1519744510084_0.11242485309401284"},"_hasShrinkwrap":false},"10.1.10":{"name":"reactor","version":"10.1.10","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.2","cadence":"1.0.x","connect":"3.6.6","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"6.1.x","magazine":"3.2.x","media-typer":"0.3.x","nop":"1.0.x","operation":"1.6.x","rescue":"3.2.x","turnstile":"4.0.x"},"devDependencies":{"proof":"3.0.x","vizsla":"11.0.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"readme":"[![Build Status](https://travis-ci.org/bigeasy/reactor.svg?branch=master)](https://travis-ci.org/bigeasy/reactor) [![Coverage Status](https://coveralls.io/repos/bigeasy/reactor/badge.svg?branch=master&service=github)](https://coveralls.io/github/bigeasy/reactor?branch=master)\n\nAn asynchronous work queue. Reactor takes work and feeds it to an asynchronous\nfunction that accepts an error-first callback.\n\nReactor is part of the [Cadence](https://github.com/bigeasy/cadence) Universe.\nIt is designed with Cadence in mind, but you can use it with your own eror-first\ncallbacks, just follow the rules.\n\nReactor is based on [Turnstile](https://github.com/bigeasy/turnstile) so it can\nperform parallel operations in an orderly fashion;\n\n * with a runtime adjustable limit on the number of concurrent operations,\n * with a fifo queue that can be measured and monitored instead of using the\n event loop as an implicit queue,\n * with a mechanism to actively time out messages in the queue that have grown\n stale.\n\nWithout a queue, parallelism is unmanagable.\n\nHere's an example of how to use Reactor to process a queue managed by Reactor.\n\n```javascript\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, value, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        this._processor.process(values, callback)\n    }\n}\n```\n\nThe first argument to your callback function is going to be a status object.\nThe most interesting property of that object is going to the `timedout`\nproperty, which will be `true` if the time since the work was sitting in the\nqueue for too long. If your work has timed out, return as soon as possible.\nOtherwise, do your work.\n\nNow you can create a Reactor and push work into your Reactor.\n\n```javascript\nvar service = new Service(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\nreactor.push({ item: 1 }, function () {\n    console.log('item consumed')\n})\nreactor.push({ item: 2 })\n```\n\nYou can either push and wait, or else you can push and forget. To push and wait,\nprovide a callback. It will be called when the work has been consumed. To push\nand forget, just submit your work and move on.\n\nThere are some times when you want to keep a queue outside of the Reactor,\neither you have some special grouping or gathering you want to perform, of else\nyou want to check an external source for work. In this case you would use\nReactor as a set of items to check.\n\nLet's create a service that pulls work from a database.\n\n```javascript\nvar database = require('database')\n\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, key, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        database.get(key, function (error, value) {\n            if (error) conosle.log(error.stack)\n            else if (value == null) callback()\n            else this._processor.process(value, callback)\n        })\n    }\n}\n```\n\nIn the above we use a key to pull a value from the database. If the value does\nnot exists in the database, then return immediately, but if it does we call the\nprocessor with the work.\n\nLet's put work in the database and flag\n\n```javascript\nvar database = require('database')\nvar service = new Serivce(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\n\ndatabase.add('a', { item: 1 }, function (error) {\n    if (error) throw error\n    reactor.set('a')\n})\n```\n\nNo matter how man times you call check with the value 'a', you will only be\nadding one work entry into the queue for the value 'a'. The `check` method will\nnot add another entry into the work queue for the value 'a' until the current\nentry is consumed by the work method.\n\nReactors create a separate asynchronous stack in which to do your work. Within\nthat stack, you're supposed to handle any errors. There is no way for any\nasynchronous error or thrown exception to propagate out to the method that\ncalled `push` or `check`. If an asynchronous error is returned to the callback,\nReactor will raise an uncatchable exception guaranteed to unwind your program.\n\nThe guarantee is a Good Thing. It means that you won't swallow errors, you won't\nhave exceptions caught by overly clever error handlers and fed to some event\nhandler you know nothing about.\n\nIf you are using an intelligent error-first control library like Cadence (or\nStreamline.js), then it is easy to wrap your work in an asynchronous try/catch\nblock and recover if if you can, or log and continue.\n\n*TK: Cadence receipes; try/catch, parallel waits.*\n\n#### `new Reactor(operation, [turnstile])`\n\nCreate a new Reactor with an `operation` which is either an asynchronous\nfunction or an object with an `object` and `method` property.\n\n#### `reactor.push(work, [callback])`\n\nPush work into the queue. If given a `callback`, the callback will be called\nwhen the work is consumed. The `callback` will never return value because errors\ndo not propagate up and out of the work queue.\n\nDo not mix with `set` and `check`.\n\n#### `reactor.set(key, [callback])`\n\nAdd a single item of work the work queue that will call the worker with optional\nkey. If given a `callback`, the callback will be called when the work is\nconsumed. The `callback` will never return value because errors do not propagate\nup and out of the work queue.\n\nDo not mix with `push` and `check`.\n\n#### `reactor.check([callback])`\n\nAdds a single, undistinguished work entry into the work queue if no such entry\nalready exists. If given a `callback`, the callback will be called when the work\nis consumed. The `callback` will never return value because errors do not\npropagate up and out of the work queue.\n\n\nDo not mix with `push` and `set`.\n","readmeFilename":"README.md","gitHead":"9cde7e46589d245e2b92e8459f583fad8dbb2d56","_id":"reactor@10.1.10","_npmVersion":"5.5.1","_nodeVersion":"8.9.3","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-rdRg/yd6MEo0I5+foBzfWJEDJh5nkDJ8TYHOnj7SmSBTv+KyKTGpi7Qodz+e2QcPVwRkLpiLnwj3TBTkheg6Zw==","shasum":"5551932b95b24d10b9c60f46c04bdbcbc17274e4","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.1.10.tgz","fileCount":15,"unpackedSize":36290,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAjro6n7UGhD1BZfoh2h9xLierHRhPUWjyvVgItw6vpcAiAfQNA0COwkNiAUnmFPK/pqSgnbB5U44aGEVPdUM+3ITg=="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_10.1.10_1521584148355_0.5300226560526176"},"_hasShrinkwrap":false},"10.2.0":{"name":"reactor","version":"10.2.0","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.2","cadence":"1.0.x","connect":"3.6.6","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"6.2.x","magazine":"3.2.x","media-typer":"0.3.x","nop":"1.0.x","operation":"1.6.x","rescue":"3.2.x","turnstile":"4.1.x"},"devDependencies":{"proof":"3.0.x","vizsla":"12.2.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"readme":"[![Build Status](https://travis-ci.org/bigeasy/reactor.svg?branch=master)](https://travis-ci.org/bigeasy/reactor) [![Coverage Status](https://coveralls.io/repos/bigeasy/reactor/badge.svg?branch=master&service=github)](https://coveralls.io/github/bigeasy/reactor?branch=master)\n\nAn asynchronous work queue. Reactor takes work and feeds it to an asynchronous\nfunction that accepts an error-first callback.\n\nReactor is part of the [Cadence](https://github.com/bigeasy/cadence) Universe.\nIt is designed with Cadence in mind, but you can use it with your own eror-first\ncallbacks, just follow the rules.\n\nReactor is based on [Turnstile](https://github.com/bigeasy/turnstile) so it can\nperform parallel operations in an orderly fashion;\n\n * with a runtime adjustable limit on the number of concurrent operations,\n * with a fifo queue that can be measured and monitored instead of using the\n event loop as an implicit queue,\n * with a mechanism to actively time out messages in the queue that have grown\n stale.\n\nWithout a queue, parallelism is unmanagable.\n\nHere's an example of how to use Reactor to process a queue managed by Reactor.\n\n```javascript\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, value, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        this._processor.process(values, callback)\n    }\n}\n```\n\nThe first argument to your callback function is going to be a status object.\nThe most interesting property of that object is going to the `timedout`\nproperty, which will be `true` if the time since the work was sitting in the\nqueue for too long. If your work has timed out, return as soon as possible.\nOtherwise, do your work.\n\nNow you can create a Reactor and push work into your Reactor.\n\n```javascript\nvar service = new Service(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\nreactor.push({ item: 1 }, function () {\n    console.log('item consumed')\n})\nreactor.push({ item: 2 })\n```\n\nYou can either push and wait, or else you can push and forget. To push and wait,\nprovide a callback. It will be called when the work has been consumed. To push\nand forget, just submit your work and move on.\n\nThere are some times when you want to keep a queue outside of the Reactor,\neither you have some special grouping or gathering you want to perform, of else\nyou want to check an external source for work. In this case you would use\nReactor as a set of items to check.\n\nLet's create a service that pulls work from a database.\n\n```javascript\nvar database = require('database')\n\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, key, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        database.get(key, function (error, value) {\n            if (error) conosle.log(error.stack)\n            else if (value == null) callback()\n            else this._processor.process(value, callback)\n        })\n    }\n}\n```\n\nIn the above we use a key to pull a value from the database. If the value does\nnot exists in the database, then return immediately, but if it does we call the\nprocessor with the work.\n\nLet's put work in the database and flag\n\n```javascript\nvar database = require('database')\nvar service = new Serivce(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\n\ndatabase.add('a', { item: 1 }, function (error) {\n    if (error) throw error\n    reactor.set('a')\n})\n```\n\nNo matter how man times you call check with the value 'a', you will only be\nadding one work entry into the queue for the value 'a'. The `check` method will\nnot add another entry into the work queue for the value 'a' until the current\nentry is consumed by the work method.\n\nReactors create a separate asynchronous stack in which to do your work. Within\nthat stack, you're supposed to handle any errors. There is no way for any\nasynchronous error or thrown exception to propagate out to the method that\ncalled `push` or `check`. If an asynchronous error is returned to the callback,\nReactor will raise an uncatchable exception guaranteed to unwind your program.\n\nThe guarantee is a Good Thing. It means that you won't swallow errors, you won't\nhave exceptions caught by overly clever error handlers and fed to some event\nhandler you know nothing about.\n\nIf you are using an intelligent error-first control library like Cadence (or\nStreamline.js), then it is easy to wrap your work in an asynchronous try/catch\nblock and recover if if you can, or log and continue.\n\n*TK: Cadence receipes; try/catch, parallel waits.*\n\n#### `new Reactor(operation, [turnstile])`\n\nCreate a new Reactor with an `operation` which is either an asynchronous\nfunction or an object with an `object` and `method` property.\n\n#### `reactor.push(work, [callback])`\n\nPush work into the queue. If given a `callback`, the callback will be called\nwhen the work is consumed. The `callback` will never return value because errors\ndo not propagate up and out of the work queue.\n\nDo not mix with `set` and `check`.\n\n#### `reactor.set(key, [callback])`\n\nAdd a single item of work the work queue that will call the worker with optional\nkey. If given a `callback`, the callback will be called when the work is\nconsumed. The `callback` will never return value because errors do not propagate\nup and out of the work queue.\n\nDo not mix with `push` and `check`.\n\n#### `reactor.check([callback])`\n\nAdds a single, undistinguished work entry into the work queue if no such entry\nalready exists. If given a `callback`, the callback will be called when the work\nis consumed. The `callback` will never return value because errors do not\npropagate up and out of the work queue.\n\n\nDo not mix with `push` and `set`.\n","readmeFilename":"README.md","gitHead":"7b42d74e32a585f6caacbdd665eb902eef170dfa","_id":"reactor@10.2.0","_npmVersion":"5.6.0","_nodeVersion":"8.11.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-UyZcZnKBRB6Wv2JMKIFFFglpA02M0376gNY6FwfqnGxW8Nierspj/XJZZd6gbJjpLFWmg9+GolOYEVD1MOi+fA==","shasum":"1bac7a395a9fd8b0c3b090fd6d9cbce41d2cfd2d","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.2.0.tgz","fileCount":14,"unpackedSize":34260,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa3KO6CRA9TVsSAnZWagAAUsAP/RORkLqLxav89c+febax\nA/+2xNDzAdBnXzTaT4cGh9kYsO2qF6kVlRlHZnhUzAo+XnG8SsEBvBHbAV5n\nnS6+XG/8CTo9OveI91KGDYLoHY0SoumhYjJJe1A+iXNwJxu+IlYt7hqcwFS2\n5qSsxSYjob5sYd7fCyBJuawxNdS6zA0QIZBB5PLN5D+vOJ47ED7Oy+UVqQS9\nHweY8OltHz9SgdvQKWwyjEC0KsC+tFqsQvTCH0D33Q+ylHrsTAgC74/L8T+/\nf2rZf5CI1QKWHmPnejRIDnFjHpcI3W8srKfPledwOGCu/4m8gGui5Y3sakD9\n0dbkYTqFB5OfJdKv0uapeP86rbFXhQRBDe24V4uLZQgNANBDT6nNTtSlm+SA\nzXi0fzJZyGSY9KmSnl9ePysc5V0LwCUUwByA+AGh4xwzwTtPE8YOAksJDe4G\n1xF40rLPtht7ZY5K19Fpos6Aguxny8EZbn9Cf9dJeUQrTovbCZynlRqgsIA8\nJ0X8ACDH5uJnsHZeEIMfGUxcezM+pn11GH26E3Rvv2iJbwbb3hqoo8j9rHkC\n8SHNLlwrud7dbc6qDXAqsIGqk4UCe+zpIMrIzV9hV/hTqVv0Gdbz+II1hY6Y\nLl/QI9RaDRDLgfPOppE9Darn4P8RpdNPna1VFFeeoWAfsHrhzma9CudJFzCb\nIjZO\r\n=t2+s\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCDJ4MVrTuhEPYXOSOmw+EnPWd6InLritq7BJAsUwPVtQIhALKA5gRD9cggHNcsXCkBPl6Zz6haCXamzaH6vjP9htg+"}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_10.2.0_1524409274111_0.5056626082387363"},"_hasShrinkwrap":false},"10.2.1":{"name":"reactor","version":"10.2.1","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.3","cadence":"1.0.x","connect":"3.6.6","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"6.2.x","magazine":"3.2.x","media-typer":"0.3.x","nop":"1.0.x","operation":"1.6.x","rescue":"3.2.x","turnstile":"4.1.x"},"devDependencies":{"proof":"3.0.x","vizsla":"12.8.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"readme":"[![Build Status](https://travis-ci.org/bigeasy/reactor.svg?branch=master)](https://travis-ci.org/bigeasy/reactor) [![Coverage Status](https://coveralls.io/repos/bigeasy/reactor/badge.svg?branch=master&service=github)](https://coveralls.io/github/bigeasy/reactor?branch=master)\n\nAn asynchronous work queue. Reactor takes work and feeds it to an asynchronous\nfunction that accepts an error-first callback.\n\nReactor is part of the [Cadence](https://github.com/bigeasy/cadence) Universe.\nIt is designed with Cadence in mind, but you can use it with your own eror-first\ncallbacks, just follow the rules.\n\nReactor is based on [Turnstile](https://github.com/bigeasy/turnstile) so it can\nperform parallel operations in an orderly fashion;\n\n * with a runtime adjustable limit on the number of concurrent operations,\n * with a fifo queue that can be measured and monitored instead of using the\n event loop as an implicit queue,\n * with a mechanism to actively time out messages in the queue that have grown\n stale.\n\nWithout a queue, parallelism is unmanagable.\n\nHere's an example of how to use Reactor to process a queue managed by Reactor.\n\n```javascript\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, value, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        this._processor.process(values, callback)\n    }\n}\n```\n\nThe first argument to your callback function is going to be a status object.\nThe most interesting property of that object is going to the `timedout`\nproperty, which will be `true` if the time since the work was sitting in the\nqueue for too long. If your work has timed out, return as soon as possible.\nOtherwise, do your work.\n\nNow you can create a Reactor and push work into your Reactor.\n\n```javascript\nvar service = new Service(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\nreactor.push({ item: 1 }, function () {\n    console.log('item consumed')\n})\nreactor.push({ item: 2 })\n```\n\nYou can either push and wait, or else you can push and forget. To push and wait,\nprovide a callback. It will be called when the work has been consumed. To push\nand forget, just submit your work and move on.\n\nThere are some times when you want to keep a queue outside of the Reactor,\neither you have some special grouping or gathering you want to perform, of else\nyou want to check an external source for work. In this case you would use\nReactor as a set of items to check.\n\nLet's create a service that pulls work from a database.\n\n```javascript\nvar database = require('database')\n\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, key, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        database.get(key, function (error, value) {\n            if (error) conosle.log(error.stack)\n            else if (value == null) callback()\n            else this._processor.process(value, callback)\n        })\n    }\n}\n```\n\nIn the above we use a key to pull a value from the database. If the value does\nnot exists in the database, then return immediately, but if it does we call the\nprocessor with the work.\n\nLet's put work in the database and flag\n\n```javascript\nvar database = require('database')\nvar service = new Serivce(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\n\ndatabase.add('a', { item: 1 }, function (error) {\n    if (error) throw error\n    reactor.set('a')\n})\n```\n\nNo matter how man times you call check with the value 'a', you will only be\nadding one work entry into the queue for the value 'a'. The `check` method will\nnot add another entry into the work queue for the value 'a' until the current\nentry is consumed by the work method.\n\nReactors create a separate asynchronous stack in which to do your work. Within\nthat stack, you're supposed to handle any errors. There is no way for any\nasynchronous error or thrown exception to propagate out to the method that\ncalled `push` or `check`. If an asynchronous error is returned to the callback,\nReactor will raise an uncatchable exception guaranteed to unwind your program.\n\nThe guarantee is a Good Thing. It means that you won't swallow errors, you won't\nhave exceptions caught by overly clever error handlers and fed to some event\nhandler you know nothing about.\n\nIf you are using an intelligent error-first control library like Cadence (or\nStreamline.js), then it is easy to wrap your work in an asynchronous try/catch\nblock and recover if if you can, or log and continue.\n\n*TK: Cadence receipes; try/catch, parallel waits.*\n\n#### `new Reactor(operation, [turnstile])`\n\nCreate a new Reactor with an `operation` which is either an asynchronous\nfunction or an object with an `object` and `method` property.\n\n#### `reactor.push(work, [callback])`\n\nPush work into the queue. If given a `callback`, the callback will be called\nwhen the work is consumed. The `callback` will never return value because errors\ndo not propagate up and out of the work queue.\n\nDo not mix with `set` and `check`.\n\n#### `reactor.set(key, [callback])`\n\nAdd a single item of work the work queue that will call the worker with optional\nkey. If given a `callback`, the callback will be called when the work is\nconsumed. The `callback` will never return value because errors do not propagate\nup and out of the work queue.\n\nDo not mix with `push` and `check`.\n\n#### `reactor.check([callback])`\n\nAdds a single, undistinguished work entry into the work queue if no such entry\nalready exists. If given a `callback`, the callback will be called when the work\nis consumed. The `callback` will never return value because errors do not\npropagate up and out of the work queue.\n\n\nDo not mix with `push` and `set`.\n","readmeFilename":"README.md","gitHead":"7b0dbdf6358927ca0dc39a204184d5df0341e362","_id":"reactor@10.2.1","_npmVersion":"5.6.0","_nodeVersion":"8.11.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-mnscawzZAZfHRRamzjT9TmYwKAL1cn+wGKIGSjyz8xkHo+i2UQ3i7kIZzTkDMndjf1QlssY33GYDUFIyBTcSFw==","shasum":"3da431640ca4c7b6eb242f2f16a1ea186507efa9","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.2.1.tgz","fileCount":14,"unpackedSize":34680,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa/cG0CRA9TVsSAnZWagAAsbkP/2SS91kl8be/1LDBkHdz\nmY4olR95gVbXKAiLYpGXDSdlfSWz0IetLJTyMGjse3u1czxLMAQDg1Sb2tfl\n7oiPWQbxLtN/gWkbdpo6ma5lbzh360I0a3LuyDiaGKS1Xx17HedYMC1N0Bke\nUBm+R52m1qEMgNJlMnQKYlBMfiD+ZDVtcoVC5jTEAPTEK5lJtAcPFm+O68vu\nBa/THhpjP3KwZ2jtDPCfyQIStRjxfN5mmDN767pyMIJlwMKMZtU/WGQ6izSQ\ng24HQxOKdZCgOQjxWaFw2YB5g0p+xTkCMa9YCCnBQfd0vQaDMIzLBztYjc4L\nzfGEwVnZDMOX0qodZ8r/mwZ/0VSpaYsxoFaLe4hE1g9HsmxYYviTgNWzQr97\nxYm2DCzjVu4RvaD5XjiZhKE+ws4nw6QX+0J3GPkJ2TuVd7VDGIsa+r1gyAzJ\nEjoCcy9mnbBqhqc/JXBFNbcxPdrJlNtGM6mb8OzxIUlUp4fBaJXApufJCpDy\nZYaLAFbxcSmb0j7jh4e5VOC3KUSoy9hxu6o4hRV6M6yCMK2oYHSH2X9UVCJO\nEun1uS7eznpwssqpHdLFll1LYLt6OTX5gGY38stIzpMjo77b7wrWklkonemU\nrGiwdgQilplHd+f0wEojOLwMeHzLIpH8Bn4kxGfxoSyD1e3QlSiuz9udmgJB\ncces\r\n=IQoU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCSXszzJo9W2xnoI1/1tMW3N8YXGrpyFNBcsGO7hQGHDAIgaISkxZvJpLv9qwxvCpLzwegHgpyAPgmgJJTKdZYepqY="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_10.2.1_1526579635343_0.35299252730575126"},"_hasShrinkwrap":false},"10.3.0":{"name":"reactor","version":"10.3.0","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.3","cadence":"1.0.x","connect":"3.6.6","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"6.2.x","magazine":"3.2.x","media-typer":"0.3.x","nop":"1.0.x","operation":"1.6.x","rescue":"3.2.x","turnstile":"4.2.x"},"devDependencies":{"proof":"3.0.x","vizsla":"12.9.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"readme":"[![Build Status](https://travis-ci.org/bigeasy/reactor.svg?branch=master)](https://travis-ci.org/bigeasy/reactor) [![Coverage Status](https://coveralls.io/repos/bigeasy/reactor/badge.svg?branch=master&service=github)](https://coveralls.io/github/bigeasy/reactor?branch=master)\n\nAn asynchronous work queue. Reactor takes work and feeds it to an asynchronous\nfunction that accepts an error-first callback.\n\nReactor is part of the [Cadence](https://github.com/bigeasy/cadence) Universe.\nIt is designed with Cadence in mind, but you can use it with your own eror-first\ncallbacks, just follow the rules.\n\nReactor is based on [Turnstile](https://github.com/bigeasy/turnstile) so it can\nperform parallel operations in an orderly fashion;\n\n * with a runtime adjustable limit on the number of concurrent operations,\n * with a fifo queue that can be measured and monitored instead of using the\n event loop as an implicit queue,\n * with a mechanism to actively time out messages in the queue that have grown\n stale.\n\nWithout a queue, parallelism is unmanagable.\n\nHere's an example of how to use Reactor to process a queue managed by Reactor.\n\n```javascript\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, value, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        this._processor.process(values, callback)\n    }\n}\n```\n\nThe first argument to your callback function is going to be a status object.\nThe most interesting property of that object is going to the `timedout`\nproperty, which will be `true` if the time since the work was sitting in the\nqueue for too long. If your work has timed out, return as soon as possible.\nOtherwise, do your work.\n\nNow you can create a Reactor and push work into your Reactor.\n\n```javascript\nvar service = new Service(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\nreactor.push({ item: 1 }, function () {\n    console.log('item consumed')\n})\nreactor.push({ item: 2 })\n```\n\nYou can either push and wait, or else you can push and forget. To push and wait,\nprovide a callback. It will be called when the work has been consumed. To push\nand forget, just submit your work and move on.\n\nThere are some times when you want to keep a queue outside of the Reactor,\neither you have some special grouping or gathering you want to perform, of else\nyou want to check an external source for work. In this case you would use\nReactor as a set of items to check.\n\nLet's create a service that pulls work from a database.\n\n```javascript\nvar database = require('database')\n\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, key, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        database.get(key, function (error, value) {\n            if (error) conosle.log(error.stack)\n            else if (value == null) callback()\n            else this._processor.process(value, callback)\n        })\n    }\n}\n```\n\nIn the above we use a key to pull a value from the database. If the value does\nnot exists in the database, then return immediately, but if it does we call the\nprocessor with the work.\n\nLet's put work in the database and flag\n\n```javascript\nvar database = require('database')\nvar service = new Serivce(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\n\ndatabase.add('a', { item: 1 }, function (error) {\n    if (error) throw error\n    reactor.set('a')\n})\n```\n\nNo matter how man times you call check with the value 'a', you will only be\nadding one work entry into the queue for the value 'a'. The `check` method will\nnot add another entry into the work queue for the value 'a' until the current\nentry is consumed by the work method.\n\nReactors create a separate asynchronous stack in which to do your work. Within\nthat stack, you're supposed to handle any errors. There is no way for any\nasynchronous error or thrown exception to propagate out to the method that\ncalled `push` or `check`. If an asynchronous error is returned to the callback,\nReactor will raise an uncatchable exception guaranteed to unwind your program.\n\nThe guarantee is a Good Thing. It means that you won't swallow errors, you won't\nhave exceptions caught by overly clever error handlers and fed to some event\nhandler you know nothing about.\n\nIf you are using an intelligent error-first control library like Cadence (or\nStreamline.js), then it is easy to wrap your work in an asynchronous try/catch\nblock and recover if if you can, or log and continue.\n\n*TK: Cadence receipes; try/catch, parallel waits.*\n\n#### `new Reactor(operation, [turnstile])`\n\nCreate a new Reactor with an `operation` which is either an asynchronous\nfunction or an object with an `object` and `method` property.\n\n#### `reactor.push(work, [callback])`\n\nPush work into the queue. If given a `callback`, the callback will be called\nwhen the work is consumed. The `callback` will never return value because errors\ndo not propagate up and out of the work queue.\n\nDo not mix with `set` and `check`.\n\n#### `reactor.set(key, [callback])`\n\nAdd a single item of work the work queue that will call the worker with optional\nkey. If given a `callback`, the callback will be called when the work is\nconsumed. The `callback` will never return value because errors do not propagate\nup and out of the work queue.\n\nDo not mix with `push` and `check`.\n\n#### `reactor.check([callback])`\n\nAdds a single, undistinguished work entry into the work queue if no such entry\nalready exists. If given a `callback`, the callback will be called when the work\nis consumed. The `callback` will never return value because errors do not\npropagate up and out of the work queue.\n\n\nDo not mix with `push` and `set`.\n","readmeFilename":"README.md","gitHead":"36878bb49ebb683308ffe007982c14691a318777","_id":"reactor@10.3.0","_npmVersion":"5.6.0","_nodeVersion":"10.2.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-cN8njTnVyd+H67YxzlH8UburWhe766wwN0+GrKApKpeikANPQFqERVoaqaJ5mqDgBl9/uiPyxIQ+kQaczQZ+wQ==","shasum":"eb94ff7e88375eea7bddaf25ee5185036aa0f803","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.3.0.tgz","fileCount":14,"unpackedSize":34686,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbDNm6CRA9TVsSAnZWagAAjgEP/26EacdgudTFl94gSHih\njh0YX1+gvRCULnJnwuB2ZdnCGeoqrpSIPT9eIZybO3UbP7778XfUCm7ik1Hp\nerIsZlyFFzFQVuG2251ggIFloxXm/QPN28ffw0+Di9aOCeFemwlUadB8dcHF\ndhYu9JC7+bdwYhFGDpH9TrESsi6miBpDuMxeDTrK5e0+f17Ap/RH7rszVLi+\npUk/vJHwn/0CS5qZww7BMXxCSfnwP1jtuNctOqj6gWmbP2Q31q51zVUSgEoW\n4gTKdXcHfec1vqdLXDNvKND0xSFSdHDPLD2Zj8bzmrcnTVPuPWz6CNZ9BMee\nLkgFebDDTWICjTSWrzwF5CrBNbyPj/Bn4iKuyRVeJKMzktzGZYvbxjhczgO+\nAW2viwat2LHdU3bbLflPWldHarxhFlvJww8FSZsQbJRPoMBD1xJhJ/rHqHO3\nTeYqI8tzBokFrMpZ5ov1MYXCSKwX1X1KMp9WRFkSP6u6xbEfvr3FJSWF9NUh\nHZTsmsV9O2azFMqzDqtGuEyuGVcmnMwqsX7FRdzyAD5s+7BqtCQmZxo8W5v8\nzQzLGwD3f42i6Q9cRa2BT0O+Hoe2ggSKo7FmRVeKziLqNrve1ImrXtVmUOni\nvb8Ls4jGzTsTAjoSpsViGFDj3dYdwIOizC79Su6QkR05fc/e4Yr6uGmGDlAD\nYycR\r\n=Y0Zl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFJESBzXg/1TUb9Ze4K4G0gsVaU6E7BevZtlRph8u6AcAiBmIu4rMm/2h9N+PYtopKDYHTWbZtoRKkc1dsWiE64yKg=="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_10.3.0_1527568826413_0.4380890281066656"},"_hasShrinkwrap":false},"10.3.1":{"name":"reactor","version":"10.3.1","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.3","cadence":"1.0.x","connect":"3.6.6","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"6.2.x","magazine":"3.2.x","media-typer":"0.3.x","nop":"1.0.x","operation":"1.6.x","rescue":"3.2.x","turnstile":"4.3.x"},"devDependencies":{"proof":"3.0.x","vizsla":"12.9.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"readme":"[![Build Status](https://travis-ci.org/bigeasy/reactor.svg?branch=master)](https://travis-ci.org/bigeasy/reactor) [![Coverage Status](https://coveralls.io/repos/bigeasy/reactor/badge.svg?branch=master&service=github)](https://coveralls.io/github/bigeasy/reactor?branch=master)\n\nAn asynchronous work queue. Reactor takes work and feeds it to an asynchronous\nfunction that accepts an error-first callback.\n\nReactor is part of the [Cadence](https://github.com/bigeasy/cadence) Universe.\nIt is designed with Cadence in mind, but you can use it with your own eror-first\ncallbacks, just follow the rules.\n\nReactor is based on [Turnstile](https://github.com/bigeasy/turnstile) so it can\nperform parallel operations in an orderly fashion;\n\n * with a runtime adjustable limit on the number of concurrent operations,\n * with a fifo queue that can be measured and monitored instead of using the\n event loop as an implicit queue,\n * with a mechanism to actively time out messages in the queue that have grown\n stale.\n\nWithout a queue, parallelism is unmanagable.\n\nHere's an example of how to use Reactor to process a queue managed by Reactor.\n\n```javascript\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, value, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        this._processor.process(values, callback)\n    }\n}\n```\n\nThe first argument to your callback function is going to be a status object.\nThe most interesting property of that object is going to the `timedout`\nproperty, which will be `true` if the time since the work was sitting in the\nqueue for too long. If your work has timed out, return as soon as possible.\nOtherwise, do your work.\n\nNow you can create a Reactor and push work into your Reactor.\n\n```javascript\nvar service = new Service(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\nreactor.push({ item: 1 }, function () {\n    console.log('item consumed')\n})\nreactor.push({ item: 2 })\n```\n\nYou can either push and wait, or else you can push and forget. To push and wait,\nprovide a callback. It will be called when the work has been consumed. To push\nand forget, just submit your work and move on.\n\nThere are some times when you want to keep a queue outside of the Reactor,\neither you have some special grouping or gathering you want to perform, of else\nyou want to check an external source for work. In this case you would use\nReactor as a set of items to check.\n\nLet's create a service that pulls work from a database.\n\n```javascript\nvar database = require('database')\n\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, key, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        database.get(key, function (error, value) {\n            if (error) conosle.log(error.stack)\n            else if (value == null) callback()\n            else this._processor.process(value, callback)\n        })\n    }\n}\n```\n\nIn the above we use a key to pull a value from the database. If the value does\nnot exists in the database, then return immediately, but if it does we call the\nprocessor with the work.\n\nLet's put work in the database and flag\n\n```javascript\nvar database = require('database')\nvar service = new Serivce(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\n\ndatabase.add('a', { item: 1 }, function (error) {\n    if (error) throw error\n    reactor.set('a')\n})\n```\n\nNo matter how man times you call check with the value 'a', you will only be\nadding one work entry into the queue for the value 'a'. The `check` method will\nnot add another entry into the work queue for the value 'a' until the current\nentry is consumed by the work method.\n\nReactors create a separate asynchronous stack in which to do your work. Within\nthat stack, you're supposed to handle any errors. There is no way for any\nasynchronous error or thrown exception to propagate out to the method that\ncalled `push` or `check`. If an asynchronous error is returned to the callback,\nReactor will raise an uncatchable exception guaranteed to unwind your program.\n\nThe guarantee is a Good Thing. It means that you won't swallow errors, you won't\nhave exceptions caught by overly clever error handlers and fed to some event\nhandler you know nothing about.\n\nIf you are using an intelligent error-first control library like Cadence (or\nStreamline.js), then it is easy to wrap your work in an asynchronous try/catch\nblock and recover if if you can, or log and continue.\n\n*TK: Cadence receipes; try/catch, parallel waits.*\n\n#### `new Reactor(operation, [turnstile])`\n\nCreate a new Reactor with an `operation` which is either an asynchronous\nfunction or an object with an `object` and `method` property.\n\n#### `reactor.push(work, [callback])`\n\nPush work into the queue. If given a `callback`, the callback will be called\nwhen the work is consumed. The `callback` will never return value because errors\ndo not propagate up and out of the work queue.\n\nDo not mix with `set` and `check`.\n\n#### `reactor.set(key, [callback])`\n\nAdd a single item of work the work queue that will call the worker with optional\nkey. If given a `callback`, the callback will be called when the work is\nconsumed. The `callback` will never return value because errors do not propagate\nup and out of the work queue.\n\nDo not mix with `push` and `check`.\n\n#### `reactor.check([callback])`\n\nAdds a single, undistinguished work entry into the work queue if no such entry\nalready exists. If given a `callback`, the callback will be called when the work\nis consumed. The `callback` will never return value because errors do not\npropagate up and out of the work queue.\n\n\nDo not mix with `push` and `set`.\n","readmeFilename":"README.md","gitHead":"0e36cea0ee331277b4b89acdac153938060e4873","_id":"reactor@10.3.1","_npmVersion":"5.6.0","_nodeVersion":"10.2.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-ooVNM2MHw8G+v1Yw7gNiq6/y0kiKcbkQYbtKVnjk/QTOfUsfsddlbJANK5TzJk1cAmj7+F1xHxlqmmvDhZTtnA==","shasum":"0bf310dc3518fd39f9d710c12b40b6cac587d8a9","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.3.1.tgz","fileCount":14,"unpackedSize":34680,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbDbgBCRA9TVsSAnZWagAAKpUQAIYYAomVwMRbXizv0y8x\nyAqr+uPgNSJU2T0jYqJDCDhFbo1Ul57ArYNyixReBqG+OSIuakAY5/8PI4q1\nK1hXLDHZE9N0ubtTfc+Li16WvskpewE7kw9JzCtcU8t1pS4JCx9V0+6ptmRe\n6fZsALJ1MG8D4ZpRVRi74QXovegz+iorHR1X0iHTb1Rn+ypL3RfNrqORSErv\nJNlVe1L35bg+WV27NWzhBAGMvjNVaplKmAUZcnEg5zeaOtPIdODh05AFaueS\nbOTaECgZDZc/rYsi1OzYo3cTAaU/poC4naWzh6t2g6mBLVRzERQM+u2VnuS2\nuryrCOSE64AvwWiscylftSTTEmMS4Qc8fbbb/HJhBhXY6bkRnkLLyLDZJ4Ge\nRmVec2ufq4ax/36RwsxBOF1r/PGN2Yjm3J9f7nv/x8yJqMYe5NUJoTVGSbPB\nVYFehN5SqroS4GIbWEiynVMJAVEGV/0jrgCeyh5OhwX1zVp9eqWYnJDSCs5n\nG/OVEqdDHinrM7reCG8vBdfmL/qF4gSp7qJZQ6ETvg2qr0/08J5kvXb3UOBZ\nw5SwRdyikgvX7NAtuQguN43CXiJ41tx7WUnwTU4Yb/7ojHRa9ICAPX5UJ3Sm\nYz/j78/oPBvo85qibmvsD8wgMBPOVpqMzfyAWWm+dmhSCF/g39q8zab7JB43\nD+tH\r\n=upYd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF4olCKQcHcgaOrICzq3NaWherkNRugIRgpOa488rGbsAiBWn5aKej1b/ZEU/0hftcfwALEt9bJrEAUoDKJpK5j+9g=="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_10.3.1_1527625729219_0.6757781000415206"},"_hasShrinkwrap":false},"10.3.2":{"name":"reactor","version":"10.3.2","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.3","cadence":"1.0.x","connect":"3.6.6","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"6.2.x","magazine":"3.2.x","media-typer":"0.3.x","nop":"1.0.x","operation":"1.6.x","rescue":"3.2.x","turnstile":"4.5.x"},"devDependencies":{"proof":"3.0.x","vizsla":"12.9.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"readme":"[![Build Status](https://travis-ci.org/bigeasy/reactor.svg?branch=master)](https://travis-ci.org/bigeasy/reactor) [![Coverage Status](https://coveralls.io/repos/bigeasy/reactor/badge.svg?branch=master&service=github)](https://coveralls.io/github/bigeasy/reactor?branch=master)\n\nAn asynchronous work queue. Reactor takes work and feeds it to an asynchronous\nfunction that accepts an error-first callback.\n\nReactor is part of the [Cadence](https://github.com/bigeasy/cadence) Universe.\nIt is designed with Cadence in mind, but you can use it with your own eror-first\ncallbacks, just follow the rules.\n\nReactor is based on [Turnstile](https://github.com/bigeasy/turnstile) so it can\nperform parallel operations in an orderly fashion;\n\n * with a runtime adjustable limit on the number of concurrent operations,\n * with a fifo queue that can be measured and monitored instead of using the\n event loop as an implicit queue,\n * with a mechanism to actively time out messages in the queue that have grown\n stale.\n\nWithout a queue, parallelism is unmanagable.\n\nHere's an example of how to use Reactor to process a queue managed by Reactor.\n\n```javascript\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, value, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        this._processor.process(values, callback)\n    }\n}\n```\n\nThe first argument to your callback function is going to be a status object.\nThe most interesting property of that object is going to the `timedout`\nproperty, which will be `true` if the time since the work was sitting in the\nqueue for too long. If your work has timed out, return as soon as possible.\nOtherwise, do your work.\n\nNow you can create a Reactor and push work into your Reactor.\n\n```javascript\nvar service = new Service(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\nreactor.push({ item: 1 }, function () {\n    console.log('item consumed')\n})\nreactor.push({ item: 2 })\n```\n\nYou can either push and wait, or else you can push and forget. To push and wait,\nprovide a callback. It will be called when the work has been consumed. To push\nand forget, just submit your work and move on.\n\nThere are some times when you want to keep a queue outside of the Reactor,\neither you have some special grouping or gathering you want to perform, of else\nyou want to check an external source for work. In this case you would use\nReactor as a set of items to check.\n\nLet's create a service that pulls work from a database.\n\n```javascript\nvar database = require('database')\n\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, key, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        database.get(key, function (error, value) {\n            if (error) conosle.log(error.stack)\n            else if (value == null) callback()\n            else this._processor.process(value, callback)\n        })\n    }\n}\n```\n\nIn the above we use a key to pull a value from the database. If the value does\nnot exists in the database, then return immediately, but if it does we call the\nprocessor with the work.\n\nLet's put work in the database and flag\n\n```javascript\nvar database = require('database')\nvar service = new Serivce(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\n\ndatabase.add('a', { item: 1 }, function (error) {\n    if (error) throw error\n    reactor.set('a')\n})\n```\n\nNo matter how man times you call check with the value 'a', you will only be\nadding one work entry into the queue for the value 'a'. The `check` method will\nnot add another entry into the work queue for the value 'a' until the current\nentry is consumed by the work method.\n\nReactors create a separate asynchronous stack in which to do your work. Within\nthat stack, you're supposed to handle any errors. There is no way for any\nasynchronous error or thrown exception to propagate out to the method that\ncalled `push` or `check`. If an asynchronous error is returned to the callback,\nReactor will raise an uncatchable exception guaranteed to unwind your program.\n\nThe guarantee is a Good Thing. It means that you won't swallow errors, you won't\nhave exceptions caught by overly clever error handlers and fed to some event\nhandler you know nothing about.\n\nIf you are using an intelligent error-first control library like Cadence (or\nStreamline.js), then it is easy to wrap your work in an asynchronous try/catch\nblock and recover if if you can, or log and continue.\n\n*TK: Cadence receipes; try/catch, parallel waits.*\n\n#### `new Reactor(operation, [turnstile])`\n\nCreate a new Reactor with an `operation` which is either an asynchronous\nfunction or an object with an `object` and `method` property.\n\n#### `reactor.push(work, [callback])`\n\nPush work into the queue. If given a `callback`, the callback will be called\nwhen the work is consumed. The `callback` will never return value because errors\ndo not propagate up and out of the work queue.\n\nDo not mix with `set` and `check`.\n\n#### `reactor.set(key, [callback])`\n\nAdd a single item of work the work queue that will call the worker with optional\nkey. If given a `callback`, the callback will be called when the work is\nconsumed. The `callback` will never return value because errors do not propagate\nup and out of the work queue.\n\nDo not mix with `push` and `check`.\n\n#### `reactor.check([callback])`\n\nAdds a single, undistinguished work entry into the work queue if no such entry\nalready exists. If given a `callback`, the callback will be called when the work\nis consumed. The `callback` will never return value because errors do not\npropagate up and out of the work queue.\n\n\nDo not mix with `push` and `set`.\n","readmeFilename":"README.md","gitHead":"0fa97636c38e9bf1f5617ab6b37b482bb894a0dd","_id":"reactor@10.3.2","_npmVersion":"5.6.0","_nodeVersion":"10.2.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-yNIJJvvS15WOYZcs7kDD8juhYCNHq62Ge0k3LWqjT/V0HgvdnfgLcGyPFWLzDQ2fPacrWfO00HWyzxrY3bjOdg==","shasum":"f6fda77d1cdd468f315526312366803df6a0c6fe","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.3.2.tgz","fileCount":14,"unpackedSize":34680,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbEhxbCRA9TVsSAnZWagAAqwAP/A7cmIZ/GPVQaaUE1gHj\nz/Ujm9KFsNd9OV02p6w8G73fAVR49TckNaNiMWj83GygCcpPAk2xd1CRAYkZ\nGHZr3EFWF/CgeEmCkVNrZ4wg2Sc6BHuLsnX+1FAg1qxDlwjso4wIsURKOk3w\nL7DhXvwPJHCP6p84hOPMUjXEhJmo48dgG3HxwchoeX7Lw6BemLk6Igbk4lac\nWuMeWA1Zua2/Go7U+TBk8lwrMkSu6Nvm/I7Y9a2b+CnvHtTFhE2HAwpXLLd/\n8x68YNkR45ejkMUJ0EWPomqKJF+wiC91ngEHa++SoCgrsXHHhNWkG8r3fe4K\ngVa/2BufTHLuC9zfRugnP9D15W04LPPvzA2QnEJRH/IRD3witwjypIhQxwKz\nCPg69BuLrI+dfIE9NY4YhCBJfEas6ctnwtT8CYoJ+13XCo+g6vc3wCRAgrUf\niiGHQKXysHlYjSlUx3Ckwb//PCXvZR9Fgj4leLd8pR8gft8yEklrmq58ASFd\nN9r5bsdnyhH52IaffaxUEMyyIEdzg2ZG4FlGu+sCyp9lA2XvmO9JyHM8y2tw\nNJV4kDs9KxvZjPsxOj/Vpuk01kgA6gVZFTvjQ4uTECPxWDE3Evt1pgixFxEh\n4R9HTsVfVSQZPKwfTqxAOS794Qswof6D3yi/fKosUzptjWvUWeIra5Yj/n4+\nACsi\r\n=9+4I\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBwt+8WRDfDMNC5gluRTRN1bKHh09AdlvF1PDgG9raVgAiAVv4aSoK2je5XCyuvFJHNeXcymEIuHQP83EhjcFer30A=="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_10.3.2_1527913562782_0.5660544967566814"},"_hasShrinkwrap":false},"10.4.0":{"name":"reactor","version":"10.4.0","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.3","cadence":"1.0.x","connect":"3.6.6","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"6.2.x","magazine":"3.2.x","media-typer":"0.3.x","nop":"1.0.x","operation":"1.6.x","rescue":"3.2.x","turnstile":"4.5.x"},"devDependencies":{"proof":"3.0.x","vizsla":"12.9.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"readme":"[![Build Status](https://travis-ci.org/bigeasy/reactor.svg?branch=master)](https://travis-ci.org/bigeasy/reactor) [![Coverage Status](https://coveralls.io/repos/bigeasy/reactor/badge.svg?branch=master&service=github)](https://coveralls.io/github/bigeasy/reactor?branch=master)\n\nAn asynchronous work queue. Reactor takes work and feeds it to an asynchronous\nfunction that accepts an error-first callback.\n\nReactor is part of the [Cadence](https://github.com/bigeasy/cadence) Universe.\nIt is designed with Cadence in mind, but you can use it with your own eror-first\ncallbacks, just follow the rules.\n\nReactor is based on [Turnstile](https://github.com/bigeasy/turnstile) so it can\nperform parallel operations in an orderly fashion;\n\n * with a runtime adjustable limit on the number of concurrent operations,\n * with a fifo queue that can be measured and monitored instead of using the\n event loop as an implicit queue,\n * with a mechanism to actively time out messages in the queue that have grown\n stale.\n\nWithout a queue, parallelism is unmanagable.\n\nHere's an example of how to use Reactor to process a queue managed by Reactor.\n\n```javascript\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, value, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        this._processor.process(values, callback)\n    }\n}\n```\n\nThe first argument to your callback function is going to be a status object.\nThe most interesting property of that object is going to the `timedout`\nproperty, which will be `true` if the time since the work was sitting in the\nqueue for too long. If your work has timed out, return as soon as possible.\nOtherwise, do your work.\n\nNow you can create a Reactor and push work into your Reactor.\n\n```javascript\nvar service = new Service(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\nreactor.push({ item: 1 }, function () {\n    console.log('item consumed')\n})\nreactor.push({ item: 2 })\n```\n\nYou can either push and wait, or else you can push and forget. To push and wait,\nprovide a callback. It will be called when the work has been consumed. To push\nand forget, just submit your work and move on.\n\nThere are some times when you want to keep a queue outside of the Reactor,\neither you have some special grouping or gathering you want to perform, of else\nyou want to check an external source for work. In this case you would use\nReactor as a set of items to check.\n\nLet's create a service that pulls work from a database.\n\n```javascript\nvar database = require('database')\n\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, key, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        database.get(key, function (error, value) {\n            if (error) conosle.log(error.stack)\n            else if (value == null) callback()\n            else this._processor.process(value, callback)\n        })\n    }\n}\n```\n\nIn the above we use a key to pull a value from the database. If the value does\nnot exists in the database, then return immediately, but if it does we call the\nprocessor with the work.\n\nLet's put work in the database and flag\n\n```javascript\nvar database = require('database')\nvar service = new Serivce(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\n\ndatabase.add('a', { item: 1 }, function (error) {\n    if (error) throw error\n    reactor.set('a')\n})\n```\n\nNo matter how man times you call check with the value 'a', you will only be\nadding one work entry into the queue for the value 'a'. The `check` method will\nnot add another entry into the work queue for the value 'a' until the current\nentry is consumed by the work method.\n\nReactors create a separate asynchronous stack in which to do your work. Within\nthat stack, you're supposed to handle any errors. There is no way for any\nasynchronous error or thrown exception to propagate out to the method that\ncalled `push` or `check`. If an asynchronous error is returned to the callback,\nReactor will raise an uncatchable exception guaranteed to unwind your program.\n\nThe guarantee is a Good Thing. It means that you won't swallow errors, you won't\nhave exceptions caught by overly clever error handlers and fed to some event\nhandler you know nothing about.\n\nIf you are using an intelligent error-first control library like Cadence (or\nStreamline.js), then it is easy to wrap your work in an asynchronous try/catch\nblock and recover if if you can, or log and continue.\n\n*TK: Cadence receipes; try/catch, parallel waits.*\n\n#### `new Reactor(operation, [turnstile])`\n\nCreate a new Reactor with an `operation` which is either an asynchronous\nfunction or an object with an `object` and `method` property.\n\n#### `reactor.push(work, [callback])`\n\nPush work into the queue. If given a `callback`, the callback will be called\nwhen the work is consumed. The `callback` will never return value because errors\ndo not propagate up and out of the work queue.\n\nDo not mix with `set` and `check`.\n\n#### `reactor.set(key, [callback])`\n\nAdd a single item of work the work queue that will call the worker with optional\nkey. If given a `callback`, the callback will be called when the work is\nconsumed. The `callback` will never return value because errors do not propagate\nup and out of the work queue.\n\nDo not mix with `push` and `check`.\n\n#### `reactor.check([callback])`\n\nAdds a single, undistinguished work entry into the work queue if no such entry\nalready exists. If given a `callback`, the callback will be called when the work\nis consumed. The `callback` will never return value because errors do not\npropagate up and out of the work queue.\n\n\nDo not mix with `push` and `set`.\n","readmeFilename":"README.md","gitHead":"4da7142206e6fef59c44ba5327f37cda63d59ef4","_id":"reactor@10.4.0","_npmVersion":"5.6.0","_nodeVersion":"10.2.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-1HuTMhRwGgLw7YbK8Z3vwwAto/PaQe2nkoc8CKc1SV1eEZwwDFnJA/0SR2QK+9q5db57qcoqdEAN2UnOgaf+2A==","shasum":"793aa1ab7f44ff87e52a428cb95636e0a09c6038","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.4.0.tgz","fileCount":14,"unpackedSize":34680,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbEilICRA9TVsSAnZWagAAOvsP/imRWBaRZrWeeZbS4y7/\nONOR+Ej0tsU7/eTW66SnJur0eFUxmwB30G9+lH5M1TDexaveSzLVBIs5xDKh\nH4LofuYTrFmQqZXRWvOrq2GwBVFmkITOi1MEltlvSxRINh6O3V1J4n+5pgIu\njMhtOB1/1dPMX+JeODwFxLxf6zQgCgktCnsIuwH3IGzPZVubOv0Yp+zfubmJ\nOMgWHUJNPmcFXr/gVye9Sxc1NjXupBOia3LpCxm/MklF5V0LRmesS5lapbWG\nFAkF4LG+wpJ8k9vi9rOYw6nat0JUkROa2nrPnSRDxlVI/vw3Hiu3lKPRVtem\nwKXSFnrVGWGIqyWMazg9cFm8+x6eDmALEcL2xP6T5b7m8Miwip5Fhkrt/YcJ\n8oi6T9Djc1Mj4zpC1GzTH8j1hzGczULuWUoBU2+l7VC/5+zobjmRJrp+zLLB\n9XSvZ8mG8LINOb7TsTwFz+sr6Gnx2i/npZ0Eb2ll50W+6SPPwwiuLBc0d0P/\nm3xt6AJPTnNfia2CqMFilpbRymLM2TWVfFKZ26JHT4H6QqemFzSQICxyOHa7\nZzv+mQ3Zu75chCDo88Bb+Foa9sVx/BG/7/wXyE0WVDGcuy4HaP4bYFVfQ9+9\nJH/GKp7J/S2cfHBk6hScGr9unM2eI9SlpaZqnzIKVFGkm8m7pGnF1Q406T4X\nmMGt\r\n=Y4jE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGKiA6vepQS3oLgztMyIzumjt+PBpxomqiasDYmc8g2FAiEAoNka5ZjSPdgP0oOsDyB4sYRcTWHcu8ElpprvXPaJ/dU="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_10.4.0_1527916871930_0.6289492106484296"},"_hasShrinkwrap":false},"10.4.1":{"name":"reactor","version":"10.4.1","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.3","cadence":"1.0.x","connect":"3.6.6","delta":"1.2.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"6.2.x","magazine":"3.2.x","media-typer":"0.3.x","nop":"1.0.x","operation":"1.6.x","rescue":"3.2.x","turnstile":"4.5.x"},"devDependencies":{"proof":"3.0.x","vizsla":"12.9.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"readme":"[![Build Status](https://travis-ci.org/bigeasy/reactor.svg?branch=master)](https://travis-ci.org/bigeasy/reactor) [![Coverage Status](https://coveralls.io/repos/bigeasy/reactor/badge.svg?branch=master&service=github)](https://coveralls.io/github/bigeasy/reactor?branch=master)\n\nAn asynchronous work queue. Reactor takes work and feeds it to an asynchronous\nfunction that accepts an error-first callback.\n\nReactor is part of the [Cadence](https://github.com/bigeasy/cadence) Universe.\nIt is designed with Cadence in mind, but you can use it with your own eror-first\ncallbacks, just follow the rules.\n\nReactor is based on [Turnstile](https://github.com/bigeasy/turnstile) so it can\nperform parallel operations in an orderly fashion;\n\n * with a runtime adjustable limit on the number of concurrent operations,\n * with a fifo queue that can be measured and monitored instead of using the\n event loop as an implicit queue,\n * with a mechanism to actively time out messages in the queue that have grown\n stale.\n\nWithout a queue, parallelism is unmanagable.\n\nHere's an example of how to use Reactor to process a queue managed by Reactor.\n\n```javascript\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, value, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        this._processor.process(values, callback)\n    }\n}\n```\n\nThe first argument to your callback function is going to be a status object.\nThe most interesting property of that object is going to the `timedout`\nproperty, which will be `true` if the time since the work was sitting in the\nqueue for too long. If your work has timed out, return as soon as possible.\nOtherwise, do your work.\n\nNow you can create a Reactor and push work into your Reactor.\n\n```javascript\nvar service = new Service(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\nreactor.push({ item: 1 }, function () {\n    console.log('item consumed')\n})\nreactor.push({ item: 2 })\n```\n\nYou can either push and wait, or else you can push and forget. To push and wait,\nprovide a callback. It will be called when the work has been consumed. To push\nand forget, just submit your work and move on.\n\nThere are some times when you want to keep a queue outside of the Reactor,\neither you have some special grouping or gathering you want to perform, of else\nyou want to check an external source for work. In this case you would use\nReactor as a set of items to check.\n\nLet's create a service that pulls work from a database.\n\n```javascript\nvar database = require('database')\n\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, key, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        database.get(key, function (error, value) {\n            if (error) conosle.log(error.stack)\n            else if (value == null) callback()\n            else this._processor.process(value, callback)\n        })\n    }\n}\n```\n\nIn the above we use a key to pull a value from the database. If the value does\nnot exists in the database, then return immediately, but if it does we call the\nprocessor with the work.\n\nLet's put work in the database and flag\n\n```javascript\nvar database = require('database')\nvar service = new Serivce(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\n\ndatabase.add('a', { item: 1 }, function (error) {\n    if (error) throw error\n    reactor.set('a')\n})\n```\n\nNo matter how man times you call check with the value 'a', you will only be\nadding one work entry into the queue for the value 'a'. The `check` method will\nnot add another entry into the work queue for the value 'a' until the current\nentry is consumed by the work method.\n\nReactors create a separate asynchronous stack in which to do your work. Within\nthat stack, you're supposed to handle any errors. There is no way for any\nasynchronous error or thrown exception to propagate out to the method that\ncalled `push` or `check`. If an asynchronous error is returned to the callback,\nReactor will raise an uncatchable exception guaranteed to unwind your program.\n\nThe guarantee is a Good Thing. It means that you won't swallow errors, you won't\nhave exceptions caught by overly clever error handlers and fed to some event\nhandler you know nothing about.\n\nIf you are using an intelligent error-first control library like Cadence (or\nStreamline.js), then it is easy to wrap your work in an asynchronous try/catch\nblock and recover if if you can, or log and continue.\n\n*TK: Cadence receipes; try/catch, parallel waits.*\n\n#### `new Reactor(operation, [turnstile])`\n\nCreate a new Reactor with an `operation` which is either an asynchronous\nfunction or an object with an `object` and `method` property.\n\n#### `reactor.push(work, [callback])`\n\nPush work into the queue. If given a `callback`, the callback will be called\nwhen the work is consumed. The `callback` will never return value because errors\ndo not propagate up and out of the work queue.\n\nDo not mix with `set` and `check`.\n\n#### `reactor.set(key, [callback])`\n\nAdd a single item of work the work queue that will call the worker with optional\nkey. If given a `callback`, the callback will be called when the work is\nconsumed. The `callback` will never return value because errors do not propagate\nup and out of the work queue.\n\nDo not mix with `push` and `check`.\n\n#### `reactor.check([callback])`\n\nAdds a single, undistinguished work entry into the work queue if no such entry\nalready exists. If given a `callback`, the callback will be called when the work\nis consumed. The `callback` will never return value because errors do not\npropagate up and out of the work queue.\n\n\nDo not mix with `push` and `set`.\n","readmeFilename":"README.md","gitHead":"58a552bd55faa9ddb3aee63c02c106c2f0685a0f","_id":"reactor@10.4.1","_npmVersion":"5.6.0","_nodeVersion":"10.1.0","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-7/RsQhkP4Yi13HPxdZYPhGJa70gnyOwVflPaKKw/0/CwteDlzazxFMUomAHDhvGDsj30LyzUcBQxWWIUr4/Qdg==","shasum":"170362d63df48dd554fce1f66fa341b3ea95bdd6","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.4.1.tgz","fileCount":14,"unpackedSize":34672,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbFvqmCRA9TVsSAnZWagAAEfUQAJINORSzpPdfRCKWBXnv\nwB1V/mCCgOctFFC8bbY4kWzW5qFapPm16o0vI5Dks68HGoYX/+p+AOSoO8Dv\nKdvN/kRJEVMnec0CZu0r893hVU0ct905kvsLaiSWHVq7VBJZyI/AtnR63wLw\ncAhxxaoSBiBj3CPFO6G8N8Eo7XLYpMXSpwaGXdPUq3zCWn9Unx+6ZCYmS76T\nCJNPcEvHajfKWLl7UQLoQUhRQ8C4hZ3uDtOWEKfURnbdicidhTF+9mnL0jnJ\n0Q5Qe0zrim+Yuko+6OmAi2UACg/Fz0hBNHubhmEAB3hH3du7/ojl4NqB5edA\nmBG86WKIbvr/7izTtrsUtL7UIiZX0XhvQahn6ACPLe2fnHAsIlG97CcHwb2C\n1ATKK8RbJXo5jZE9hi+oUHK5wewEkgMPMejoHr1nWIQcJX/+EqAMDJt0gkSq\nG8jSwKLkMc1dfGNviXFJ2oEPd9bSByTsLgJoEvVD4h/xdZMeKLbrj16eMoef\n1uxx9Z8BZXavegzxvCWT6rqctqqutrwPvCnDEHz/4k2svbipNthw1JDZ8u8Y\nFPkNRjBfuJx5tfLVbY1UTdfkg+Wg+cpOJBMGymy23SAjQut46dQ3bHMVRatR\nmpke3rdHEEsGDpiENJg8pfQrJcih8tD8xNxDNR34S74oQP2SY7IhovPSa9sM\nw8gM\r\n=HpT2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCfoSGjQlUVXEz8i7uncHP8YaOKbFZF99DLp/Pykxt1tAIhAIuZdXZ6Y1bvOpWR4WC/rSMCJy4I7rELGP1BjZiUgKHB"}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_10.4.1_1528232614547_0.820529230869782"},"_hasShrinkwrap":false},"10.4.2":{"name":"reactor","version":"10.4.2","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.3","cadence":"1.0.x","connect":"3.6.6","delta":"1.4.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"6.2.x","magazine":"3.2.x","media-typer":"0.3.x","nop":"1.0.x","operation":"1.6.x","rescue":"3.2.x","turnstile":"4.5.x"},"devDependencies":{"proof":"3.0.x","vizsla":"12.9.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"readme":"[![Build Status](https://travis-ci.org/bigeasy/reactor.svg?branch=master)](https://travis-ci.org/bigeasy/reactor) [![Coverage Status](https://coveralls.io/repos/bigeasy/reactor/badge.svg?branch=master&service=github)](https://coveralls.io/github/bigeasy/reactor?branch=master)\n\nAn asynchronous work queue. Reactor takes work and feeds it to an asynchronous\nfunction that accepts an error-first callback.\n\nReactor is part of the [Cadence](https://github.com/bigeasy/cadence) Universe.\nIt is designed with Cadence in mind, but you can use it with your own eror-first\ncallbacks, just follow the rules.\n\nReactor is based on [Turnstile](https://github.com/bigeasy/turnstile) so it can\nperform parallel operations in an orderly fashion;\n\n * with a runtime adjustable limit on the number of concurrent operations,\n * with a fifo queue that can be measured and monitored instead of using the\n event loop as an implicit queue,\n * with a mechanism to actively time out messages in the queue that have grown\n stale.\n\nWithout a queue, parallelism is unmanagable.\n\nHere's an example of how to use Reactor to process a queue managed by Reactor.\n\n```javascript\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, value, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        this._processor.process(values, callback)\n    }\n}\n```\n\nThe first argument to your callback function is going to be a status object.\nThe most interesting property of that object is going to the `timedout`\nproperty, which will be `true` if the time since the work was sitting in the\nqueue for too long. If your work has timed out, return as soon as possible.\nOtherwise, do your work.\n\nNow you can create a Reactor and push work into your Reactor.\n\n```javascript\nvar service = new Service(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\nreactor.push({ item: 1 }, function () {\n    console.log('item consumed')\n})\nreactor.push({ item: 2 })\n```\n\nYou can either push and wait, or else you can push and forget. To push and wait,\nprovide a callback. It will be called when the work has been consumed. To push\nand forget, just submit your work and move on.\n\nThere are some times when you want to keep a queue outside of the Reactor,\neither you have some special grouping or gathering you want to perform, of else\nyou want to check an external source for work. In this case you would use\nReactor as a set of items to check.\n\nLet's create a service that pulls work from a database.\n\n```javascript\nvar database = require('database')\n\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, key, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        database.get(key, function (error, value) {\n            if (error) conosle.log(error.stack)\n            else if (value == null) callback()\n            else this._processor.process(value, callback)\n        })\n    }\n}\n```\n\nIn the above we use a key to pull a value from the database. If the value does\nnot exists in the database, then return immediately, but if it does we call the\nprocessor with the work.\n\nLet's put work in the database and flag\n\n```javascript\nvar database = require('database')\nvar service = new Serivce(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\n\ndatabase.add('a', { item: 1 }, function (error) {\n    if (error) throw error\n    reactor.set('a')\n})\n```\n\nNo matter how man times you call check with the value 'a', you will only be\nadding one work entry into the queue for the value 'a'. The `check` method will\nnot add another entry into the work queue for the value 'a' until the current\nentry is consumed by the work method.\n\nReactors create a separate asynchronous stack in which to do your work. Within\nthat stack, you're supposed to handle any errors. There is no way for any\nasynchronous error or thrown exception to propagate out to the method that\ncalled `push` or `check`. If an asynchronous error is returned to the callback,\nReactor will raise an uncatchable exception guaranteed to unwind your program.\n\nThe guarantee is a Good Thing. It means that you won't swallow errors, you won't\nhave exceptions caught by overly clever error handlers and fed to some event\nhandler you know nothing about.\n\nIf you are using an intelligent error-first control library like Cadence (or\nStreamline.js), then it is easy to wrap your work in an asynchronous try/catch\nblock and recover if if you can, or log and continue.\n\n*TK: Cadence receipes; try/catch, parallel waits.*\n\n#### `new Reactor(operation, [turnstile])`\n\nCreate a new Reactor with an `operation` which is either an asynchronous\nfunction or an object with an `object` and `method` property.\n\n#### `reactor.push(work, [callback])`\n\nPush work into the queue. If given a `callback`, the callback will be called\nwhen the work is consumed. The `callback` will never return value because errors\ndo not propagate up and out of the work queue.\n\nDo not mix with `set` and `check`.\n\n#### `reactor.set(key, [callback])`\n\nAdd a single item of work the work queue that will call the worker with optional\nkey. If given a `callback`, the callback will be called when the work is\nconsumed. The `callback` will never return value because errors do not propagate\nup and out of the work queue.\n\nDo not mix with `push` and `check`.\n\n#### `reactor.check([callback])`\n\nAdds a single, undistinguished work entry into the work queue if no such entry\nalready exists. If given a `callback`, the callback will be called when the work\nis consumed. The `callback` will never return value because errors do not\npropagate up and out of the work queue.\n\n\nDo not mix with `push` and `set`.\n","readmeFilename":"README.md","gitHead":"f9d33074eeff835d521c75120f0ed324e9816317","_id":"reactor@10.4.2","_npmVersion":"6.1.0","_nodeVersion":"10.4.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-vDJRRC+amII92q2oAbiTKzjWz/lK+NhCl4LT1ua64PILlrOwy443UVE1Opyvh4tnCMPfvS057APOOYBk0ZPVVQ==","shasum":"95869e522885d7134884ab8a0b60831ad8d1c76b","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.4.2.tgz","fileCount":14,"unpackedSize":34672,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbKKPvCRA9TVsSAnZWagAA15QP/10xdsXCZDqRN3jNxM/y\nWKUfxGctODxSgAtC0qvSbCtiU40NsnTEyUF7HYYODhvuNJnQJK+PVQR78WkC\nrYtgp71hfmY7M10kHwkFtzcNXvuEV6jSzlc6injnZsiGEeA3b0ePgTizPXsa\njIkRZTRZkvqSRx87IKFFMw2ZvKVES1d76I+oPcL9JylDbOM6B9iXJI6tCE6K\ne3sdhoH88jJDocm/Ea/1OGmw/U3Wrxi2AIEawOLMybH+O7RW3/oAE5Gfspl7\nFpblDXt89899y/miad7K5CIh+2Jqsr0jzdR87UsN1oWo+GwgVR71YSAikcwY\nQOrPZturYpA1wfk8tMSpdTPMfYfu2Xc+72efTmaqniM4stLpg/ayc+tF9Blx\n/tJexTtNTi8jQR5GjMnHViybZz1d3sjKeqRNcHvxnyHoSuc6EX+sZbn6ayLe\nZ/8NPfrgrVXamZCeT78uZF1tcG9ndFwmz93IclL3hG38x9P3zITfyK6wl5iv\nmCO4WvDtsE15UaolS3HRmFHajt04uk9tpeD9A90fFh0csRm2Tp6f6zb3B9EY\nd0Ma3CkwIs78lCa7O/Onvnlu3Hj9lMBzOtfMmObULl/pPJxaBIZXYeWruj9b\n0+fwtnTVEsz/j2Q/kEblbIp91yNyVK5P05if2tmr39ecO/a5GAzzxYZiWi7I\nK3s/\r\n=BPg9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCTz/vQW6yIA/4H08tZQKgrKuJ20ZvEjFRPJdkeisU+UAIgaENdhMFuoo8ZNsaisCWUjaz+mlLhMLqc4A/s940c050="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_10.4.2_1529390063342_0.2466036296956764"},"_hasShrinkwrap":false},"10.4.3":{"name":"reactor","version":"10.4.3","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.3","cadence":"1.0.x","connect":"3.6.6","delta":"1.4.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"6.2.x","magazine":"3.2.x","media-typer":"0.3.x","nop":"1.0.x","operation":"2.0.x","rescue":"3.2.x","turnstile":"4.5.x"},"devDependencies":{"proof":"3.0.x","vizsla":"12.9.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"readme":"[![Build Status](https://travis-ci.org/bigeasy/reactor.svg?branch=master)](https://travis-ci.org/bigeasy/reactor) [![Coverage Status](https://coveralls.io/repos/bigeasy/reactor/badge.svg?branch=master&service=github)](https://coveralls.io/github/bigeasy/reactor?branch=master)\n\nAn asynchronous work queue. Reactor takes work and feeds it to an asynchronous\nfunction that accepts an error-first callback.\n\nReactor is part of the [Cadence](https://github.com/bigeasy/cadence) Universe.\nIt is designed with Cadence in mind, but you can use it with your own eror-first\ncallbacks, just follow the rules.\n\nReactor is based on [Turnstile](https://github.com/bigeasy/turnstile) so it can\nperform parallel operations in an orderly fashion;\n\n * with a runtime adjustable limit on the number of concurrent operations,\n * with a fifo queue that can be measured and monitored instead of using the\n event loop as an implicit queue,\n * with a mechanism to actively time out messages in the queue that have grown\n stale.\n\nWithout a queue, parallelism is unmanagable.\n\nHere's an example of how to use Reactor to process a queue managed by Reactor.\n\n```javascript\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, value, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        this._processor.process(values, callback)\n    }\n}\n```\n\nThe first argument to your callback function is going to be a status object.\nThe most interesting property of that object is going to the `timedout`\nproperty, which will be `true` if the time since the work was sitting in the\nqueue for too long. If your work has timed out, return as soon as possible.\nOtherwise, do your work.\n\nNow you can create a Reactor and push work into your Reactor.\n\n```javascript\nvar service = new Service(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\nreactor.push({ item: 1 }, function () {\n    console.log('item consumed')\n})\nreactor.push({ item: 2 })\n```\n\nYou can either push and wait, or else you can push and forget. To push and wait,\nprovide a callback. It will be called when the work has been consumed. To push\nand forget, just submit your work and move on.\n\nThere are some times when you want to keep a queue outside of the Reactor,\neither you have some special grouping or gathering you want to perform, of else\nyou want to check an external source for work. In this case you would use\nReactor as a set of items to check.\n\nLet's create a service that pulls work from a database.\n\n```javascript\nvar database = require('database')\n\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, key, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        database.get(key, function (error, value) {\n            if (error) conosle.log(error.stack)\n            else if (value == null) callback()\n            else this._processor.process(value, callback)\n        })\n    }\n}\n```\n\nIn the above we use a key to pull a value from the database. If the value does\nnot exists in the database, then return immediately, but if it does we call the\nprocessor with the work.\n\nLet's put work in the database and flag\n\n```javascript\nvar database = require('database')\nvar service = new Serivce(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\n\ndatabase.add('a', { item: 1 }, function (error) {\n    if (error) throw error\n    reactor.set('a')\n})\n```\n\nNo matter how man times you call check with the value 'a', you will only be\nadding one work entry into the queue for the value 'a'. The `check` method will\nnot add another entry into the work queue for the value 'a' until the current\nentry is consumed by the work method.\n\nReactors create a separate asynchronous stack in which to do your work. Within\nthat stack, you're supposed to handle any errors. There is no way for any\nasynchronous error or thrown exception to propagate out to the method that\ncalled `push` or `check`. If an asynchronous error is returned to the callback,\nReactor will raise an uncatchable exception guaranteed to unwind your program.\n\nThe guarantee is a Good Thing. It means that you won't swallow errors, you won't\nhave exceptions caught by overly clever error handlers and fed to some event\nhandler you know nothing about.\n\nIf you are using an intelligent error-first control library like Cadence (or\nStreamline.js), then it is easy to wrap your work in an asynchronous try/catch\nblock and recover if if you can, or log and continue.\n\n*TK: Cadence receipes; try/catch, parallel waits.*\n\n#### `new Reactor(operation, [turnstile])`\n\nCreate a new Reactor with an `operation` which is either an asynchronous\nfunction or an object with an `object` and `method` property.\n\n#### `reactor.push(work, [callback])`\n\nPush work into the queue. If given a `callback`, the callback will be called\nwhen the work is consumed. The `callback` will never return value because errors\ndo not propagate up and out of the work queue.\n\nDo not mix with `set` and `check`.\n\n#### `reactor.set(key, [callback])`\n\nAdd a single item of work the work queue that will call the worker with optional\nkey. If given a `callback`, the callback will be called when the work is\nconsumed. The `callback` will never return value because errors do not propagate\nup and out of the work queue.\n\nDo not mix with `push` and `check`.\n\n#### `reactor.check([callback])`\n\nAdds a single, undistinguished work entry into the work queue if no such entry\nalready exists. If given a `callback`, the callback will be called when the work\nis consumed. The `callback` will never return value because errors do not\npropagate up and out of the work queue.\n\n\nDo not mix with `push` and `set`.\n","readmeFilename":"README.md","gitHead":"bc4f25b19bde8f0306063007e9522c1cfd774c27","_id":"reactor@10.4.3","_npmVersion":"6.1.0","_nodeVersion":"10.4.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-L+aVTkF1DC4MyM1jY47y7KKAjAb4+XUPfTy5NpAZKzLZTtSG/Hshq5KFI4L+wHJZJJM2Gr4KurN2fG3jynndjg==","shasum":"abc0197ef5860443e511c632b8d2afe7a7da87b7","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.4.3.tgz","fileCount":14,"unpackedSize":34663,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbKeB/CRA9TVsSAnZWagAA+8oQAIcdQ8Bf32YKQpSZiHEW\nQIrK/v88M4U7DhlDKG04dixBn8bho2bwI/S8ZeFlXTpByJ6gmdr4k696tQUw\nTnRxEeortB+Dw9Ca0uECWYYgeq0UUL8tcybnZEY96YRxXR+GCjJ1wFOcKIAe\nHTtWmcW2SRz2gutHnZqDqlLv7XwKxQ1HRPigSwe8IUhZ9YN9gPUETwRiv+e/\nOYGSoO636tTK5uTb/elIfaeoOt32rASkRyuGHb8qncuevoIjdASo103ltOJo\n+Fc5clqsGjYKqH/WH0IlMXIKdlPyCn6riFunWqux4heocuRZG7XP2ABmjgP4\nNNJBA00zB+NrfStmNeeViIZPse4RkaPqkIGjiWYBn+1v7tU67IL874/WthVw\nTpLnwZ9dXwwSRRbxqwzf5B8VXltBsZozOHqOq0E6WN6VGTHSPy3ZThu1QNfB\nbJ/1ZFE2sZHz6TwO0hmIKaMkmyfeGKiJGe7/83Wr4tOw6GCvZrVVbYjY5Tj3\nGof0CQem68pOoAmNX5W2Ir3+VhbiB0ObvZSyz2pm2O/+CecMVzwDJf1B3Un6\n762DvS/m/MVGQJwPqoFridE5XZ2GO7rGNnzZiy2GWtvOgJY/W4LttZ/8WhTF\naJDunmMwzf9tpK9mzfBBJ0Wro+jemhLrWfjmEUCzSmHlkECXDPFOqjVqXbm0\n6zHW\r\n=+GXS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCJvseD+nAEK9jtdi/fAZvrI9Dr+5ji/s1Eypca8zBpYAIhAJTgDQxtFxtCtnl44Tgv3ZORiTF5lLbn39UlSoZNQfCi"}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_10.4.3_1529471103004_0.9181780762344869"},"_hasShrinkwrap":false},"10.4.4":{"name":"reactor","version":"10.4.4","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.3","cadence":"1.0.x","connect":"3.6.6","delta":"1.4.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"6.2.x","magazine":"3.2.x","media-typer":"0.3.x","nop":"1.0.x","operation":"2.0.x","rescue":"3.2.x","turnstile":"4.5.x"},"devDependencies":{"proof":"3.0.x","vizsla":"12.9.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"readme":"[![Build Status](https://travis-ci.org/bigeasy/reactor.svg?branch=master)](https://travis-ci.org/bigeasy/reactor) [![Coverage Status](https://coveralls.io/repos/bigeasy/reactor/badge.svg?branch=master&service=github)](https://coveralls.io/github/bigeasy/reactor?branch=master)\n\nAn asynchronous work queue. Reactor takes work and feeds it to an asynchronous\nfunction that accepts an error-first callback.\n\nReactor is part of the [Cadence](https://github.com/bigeasy/cadence) Universe.\nIt is designed with Cadence in mind, but you can use it with your own eror-first\ncallbacks, just follow the rules.\n\nReactor is based on [Turnstile](https://github.com/bigeasy/turnstile) so it can\nperform parallel operations in an orderly fashion;\n\n * with a runtime adjustable limit on the number of concurrent operations,\n * with a fifo queue that can be measured and monitored instead of using the\n event loop as an implicit queue,\n * with a mechanism to actively time out messages in the queue that have grown\n stale.\n\nWithout a queue, parallelism is unmanagable.\n\nHere's an example of how to use Reactor to process a queue managed by Reactor.\n\n```javascript\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, value, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        this._processor.process(values, callback)\n    }\n}\n```\n\nThe first argument to your callback function is going to be a status object.\nThe most interesting property of that object is going to the `timedout`\nproperty, which will be `true` if the time since the work was sitting in the\nqueue for too long. If your work has timed out, return as soon as possible.\nOtherwise, do your work.\n\nNow you can create a Reactor and push work into your Reactor.\n\n```javascript\nvar service = new Service(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\nreactor.push({ item: 1 }, function () {\n    console.log('item consumed')\n})\nreactor.push({ item: 2 })\n```\n\nYou can either push and wait, or else you can push and forget. To push and wait,\nprovide a callback. It will be called when the work has been consumed. To push\nand forget, just submit your work and move on.\n\nThere are some times when you want to keep a queue outside of the Reactor,\neither you have some special grouping or gathering you want to perform, of else\nyou want to check an external source for work. In this case you would use\nReactor as a set of items to check.\n\nLet's create a service that pulls work from a database.\n\n```javascript\nvar database = require('database')\n\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, key, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        database.get(key, function (error, value) {\n            if (error) conosle.log(error.stack)\n            else if (value == null) callback()\n            else this._processor.process(value, callback)\n        })\n    }\n}\n```\n\nIn the above we use a key to pull a value from the database. If the value does\nnot exists in the database, then return immediately, but if it does we call the\nprocessor with the work.\n\nLet's put work in the database and flag\n\n```javascript\nvar database = require('database')\nvar service = new Serivce(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\n\ndatabase.add('a', { item: 1 }, function (error) {\n    if (error) throw error\n    reactor.set('a')\n})\n```\n\nNo matter how man times you call check with the value 'a', you will only be\nadding one work entry into the queue for the value 'a'. The `check` method will\nnot add another entry into the work queue for the value 'a' until the current\nentry is consumed by the work method.\n\nReactors create a separate asynchronous stack in which to do your work. Within\nthat stack, you're supposed to handle any errors. There is no way for any\nasynchronous error or thrown exception to propagate out to the method that\ncalled `push` or `check`. If an asynchronous error is returned to the callback,\nReactor will raise an uncatchable exception guaranteed to unwind your program.\n\nThe guarantee is a Good Thing. It means that you won't swallow errors, you won't\nhave exceptions caught by overly clever error handlers and fed to some event\nhandler you know nothing about.\n\nIf you are using an intelligent error-first control library like Cadence (or\nStreamline.js), then it is easy to wrap your work in an asynchronous try/catch\nblock and recover if if you can, or log and continue.\n\n*TK: Cadence receipes; try/catch, parallel waits.*\n\n#### `new Reactor(operation, [turnstile])`\n\nCreate a new Reactor with an `operation` which is either an asynchronous\nfunction or an object with an `object` and `method` property.\n\n#### `reactor.push(work, [callback])`\n\nPush work into the queue. If given a `callback`, the callback will be called\nwhen the work is consumed. The `callback` will never return value because errors\ndo not propagate up and out of the work queue.\n\nDo not mix with `set` and `check`.\n\n#### `reactor.set(key, [callback])`\n\nAdd a single item of work the work queue that will call the worker with optional\nkey. If given a `callback`, the callback will be called when the work is\nconsumed. The `callback` will never return value because errors do not propagate\nup and out of the work queue.\n\nDo not mix with `push` and `check`.\n\n#### `reactor.check([callback])`\n\nAdds a single, undistinguished work entry into the work queue if no such entry\nalready exists. If given a `callback`, the callback will be called when the work\nis consumed. The `callback` will never return value because errors do not\npropagate up and out of the work queue.\n\n\nDo not mix with `push` and `set`.\n","readmeFilename":"README.md","gitHead":"9a18598d276fc6268ca3aeeb4adef24df2972f27","_id":"reactor@10.4.4","_npmVersion":"6.1.0","_nodeVersion":"10.4.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-A3gFngG6mZlmcegO7dqaB1AWksPMn6Oe9qxwg6gdg7CzRcOQmoMcyr+K6XIuPYssC3yi6VTI8Jo4lhR60UMXSw==","shasum":"a5f2896434ba865edfc9f3ffacf7221950cdc091","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.4.4.tgz","fileCount":6,"unpackedSize":22187,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbWYyKCRA9TVsSAnZWagAAbh8QAIDMPM8LOtqBrUEL2xW3\nsGK7SMcPd6ChXEv8Bx+Mcf7ar0L8+08VdAe7CkcMBFsNRMP7HWl/umCTOpcB\nK62LRrL4gxAkVnVgseQmYLluhXw/bN5a3hycM2NckHI+HdlY6M0uMY3PAECs\nwCvOWWg1sw9bs9pFANznJAF3euEsxvLNE1ZGuX21GK6hQGp05KFUUq8+KiCq\nP5D8z2lhMTP8OrZgBxQnFJ3sPbMSJQUAb20/J1J4HoADCKVSmr8NeySzf/gv\nttlaJYUjcxKlmR8c3PC0BBT4al1TKEM4WjkE93PQT2dCoYCRbLw4GmwGKoeS\nWpPiCtKyHxPKmbNFbGT+uQioJLnx9hrGUCf2tJNoQnTl+QwgFBZr7qZvBE9y\n0sTtV1rT8Pze/UXp1+vT7cCjUKqYRkTCxQFMVaWH6SvqBhN5uJzQ8uAk2J6K\nvE0u/1L4lpqNSgZeS9OuVKkoqm3KmfbNwvjgEBI28SkGd3y/xAWgfeMh+YP+\nR4A4eQ7BJmWe8nCWAO6rtKd7fTAUBThZb3yA464y5uHcGPlujoYrI4WNBL+d\ngCoGBZy8FEKw1KJZ0UjpCRiqI+b5JF+ZGwvtPdgJxDzk3rbfdE19KnmU0FSC\nnnmSdnJtTZCbWdp5BxWiCz7yypX3CR1Lu6vP9RBFPp445hX+0uPZTgZ/LsPM\nhy5q\r\n=Y0vf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCsgLg/FIiza6QrF7NzgeGCG5wjU/IrkGxhubihx9NgWAIhAISSIyFlSjuKECChwXuD0anMWUdaLZoj5f37DPBPx/xF"}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_10.4.4_1532595338407_0.17617968451661925"},"_hasShrinkwrap":false},"10.4.5":{"name":"reactor","version":"10.4.5","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.3","cadence":"1.0.x","connect":"3.6.6","delta":"1.4.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"6.2.x","magazine":"3.2.x","media-typer":"0.3.x","nop":"1.0.x","operation":"2.0.x","rescue":"3.2.x","turnstile":"4.5.x"},"devDependencies":{"proof":"3.0.x","vizsla":"12.10.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"readme":"[![Build Status](https://travis-ci.org/bigeasy/reactor.svg?branch=master)](https://travis-ci.org/bigeasy/reactor) [![Coverage Status](https://coveralls.io/repos/bigeasy/reactor/badge.svg?branch=master&service=github)](https://coveralls.io/github/bigeasy/reactor?branch=master)\n\nAn asynchronous work queue. Reactor takes work and feeds it to an asynchronous\nfunction that accepts an error-first callback.\n\nReactor is part of the [Cadence](https://github.com/bigeasy/cadence) Universe.\nIt is designed with Cadence in mind, but you can use it with your own eror-first\ncallbacks, just follow the rules.\n\nReactor is based on [Turnstile](https://github.com/bigeasy/turnstile) so it can\nperform parallel operations in an orderly fashion;\n\n * with a runtime adjustable limit on the number of concurrent operations,\n * with a fifo queue that can be measured and monitored instead of using the\n event loop as an implicit queue,\n * with a mechanism to actively time out messages in the queue that have grown\n stale.\n\nWithout a queue, parallelism is unmanagable.\n\nHere's an example of how to use Reactor to process a queue managed by Reactor.\n\n```javascript\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, value, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        this._processor.process(values, callback)\n    }\n}\n```\n\nThe first argument to your callback function is going to be a status object.\nThe most interesting property of that object is going to the `timedout`\nproperty, which will be `true` if the time since the work was sitting in the\nqueue for too long. If your work has timed out, return as soon as possible.\nOtherwise, do your work.\n\nNow you can create a Reactor and push work into your Reactor.\n\n```javascript\nvar service = new Service(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\nreactor.push({ item: 1 }, function () {\n    console.log('item consumed')\n})\nreactor.push({ item: 2 })\n```\n\nYou can either push and wait, or else you can push and forget. To push and wait,\nprovide a callback. It will be called when the work has been consumed. To push\nand forget, just submit your work and move on.\n\nThere are some times when you want to keep a queue outside of the Reactor,\neither you have some special grouping or gathering you want to perform, of else\nyou want to check an external source for work. In this case you would use\nReactor as a set of items to check.\n\nLet's create a service that pulls work from a database.\n\n```javascript\nvar database = require('database')\n\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, key, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        database.get(key, function (error, value) {\n            if (error) conosle.log(error.stack)\n            else if (value == null) callback()\n            else this._processor.process(value, callback)\n        })\n    }\n}\n```\n\nIn the above we use a key to pull a value from the database. If the value does\nnot exists in the database, then return immediately, but if it does we call the\nprocessor with the work.\n\nLet's put work in the database and flag\n\n```javascript\nvar database = require('database')\nvar service = new Serivce(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\n\ndatabase.add('a', { item: 1 }, function (error) {\n    if (error) throw error\n    reactor.set('a')\n})\n```\n\nNo matter how man times you call check with the value 'a', you will only be\nadding one work entry into the queue for the value 'a'. The `check` method will\nnot add another entry into the work queue for the value 'a' until the current\nentry is consumed by the work method.\n\nReactors create a separate asynchronous stack in which to do your work. Within\nthat stack, you're supposed to handle any errors. There is no way for any\nasynchronous error or thrown exception to propagate out to the method that\ncalled `push` or `check`. If an asynchronous error is returned to the callback,\nReactor will raise an uncatchable exception guaranteed to unwind your program.\n\nThe guarantee is a Good Thing. It means that you won't swallow errors, you won't\nhave exceptions caught by overly clever error handlers and fed to some event\nhandler you know nothing about.\n\nIf you are using an intelligent error-first control library like Cadence (or\nStreamline.js), then it is easy to wrap your work in an asynchronous try/catch\nblock and recover if if you can, or log and continue.\n\n*TK: Cadence receipes; try/catch, parallel waits.*\n\n#### `new Reactor(operation, [turnstile])`\n\nCreate a new Reactor with an `operation` which is either an asynchronous\nfunction or an object with an `object` and `method` property.\n\n#### `reactor.push(work, [callback])`\n\nPush work into the queue. If given a `callback`, the callback will be called\nwhen the work is consumed. The `callback` will never return value because errors\ndo not propagate up and out of the work queue.\n\nDo not mix with `set` and `check`.\n\n#### `reactor.set(key, [callback])`\n\nAdd a single item of work the work queue that will call the worker with optional\nkey. If given a `callback`, the callback will be called when the work is\nconsumed. The `callback` will never return value because errors do not propagate\nup and out of the work queue.\n\nDo not mix with `push` and `check`.\n\n#### `reactor.check([callback])`\n\nAdds a single, undistinguished work entry into the work queue if no such entry\nalready exists. If given a `callback`, the callback will be called when the work\nis consumed. The `callback` will never return value because errors do not\npropagate up and out of the work queue.\n\n\nDo not mix with `push` and `set`.\n","readmeFilename":"README.md","gitHead":"543eaf466c17db4b30a3b51297e6778aa8ca536e","_id":"reactor@10.4.5","_npmVersion":"6.1.0","_nodeVersion":"10.4.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-RwBSRjgId8FRYDKLFIl40/Beyqi1mpRQ2z7ssLadpqqZM63zPxqgeBkQmatTOULGPTWymHbEcNgy8I0S0XPGmg==","shasum":"f23818495fa35d88a1cffab67f1ca75067653133","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.4.5.tgz","fileCount":6,"unpackedSize":22188,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbWe87CRA9TVsSAnZWagAAzkgP/A69xb59Wwe9PHlwXCZt\nU/6jjYUdVpRp4lpPEwDZYH24bQJy6ZHv5qrcvNAViROBr/AwVBVucsr0qsws\nmjKxXwg6IqxGf+HwSALYRF6pg+elyr+SRlI667Eu3Ym+gaNL8LlseLadXVr7\nL4wUtDU9NfZwHSb+DVdpSll6Q/wE4clWCetsnhgMgD7o7Q85UwdAMWI/iO5+\nrNPaV1hDPUiJlgOeXDyaRb0k1CIXKprMnwz5W04SHwwnE6yk4TgUaWKQ1spY\nviaDT4xx0hEMivjKmPLVUB8P/6pl59tiMhr8kzS1eW0QPNpGuw0Wj1AclspP\nOyEtrBUlel/aNOsbqDoBlA3wKbLmgKJUlTqoDhNpFZKXIB8JcnBX0wZLSy+q\n2ApK3nM3Yam96LPbT5gxHWxzYpQulpsGU9hV5sqkpCkmx/pyH56RX+EMsm9n\nkAhbYJaU0Gcha7B8aRKxTKX7g9Z4sSL4OI4+zGyvDRjAr1olnn/r5ZHvnH8i\nwyTeAN2V1IJMvpANyiw3nf41CTEIEx/2eUOpB84l2yUBARU4uKqMR/RZx0Cw\ntDN1JQsyFXwLY9WehZUGSgQ+VSOb6jmothEfUvDtb8F+mFE6RfBF6RT2mZwY\nS/wRkI/0En19EuhpnXPRh9Iu8d8gqKTWYAtAL7UKmCpxyjk2eQngvmjTltHO\nI/ao\r\n=5YWI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAXYskGlhdOB3+x+5Vzhbc8QnfR5l55IbcYSt+hnS9cTAiA9jmh2UwIw6807yas3HjzeCys0PPF0QDWgwwVzNFW84A=="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_10.4.5_1532620603079_0.2380368119864431"},"_hasShrinkwrap":false},"10.5.0":{"name":"reactor","version":"10.5.0","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.3","cadence":"1.0.x","connect":"3.6.6","delta":"1.4.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"6.3.x","magazine":"3.2.x","media-typer":"0.3.x","nop":"1.0.x","operation":"2.0.x","rescue":"4.0.x","turnstile":"4.6.x"},"devDependencies":{"proof":"3.0.x","vizsla":"12.11.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"readme":"[![Build Status](https://travis-ci.org/bigeasy/reactor.svg?branch=master)](https://travis-ci.org/bigeasy/reactor) [![Coverage Status](https://coveralls.io/repos/bigeasy/reactor/badge.svg?branch=master&service=github)](https://coveralls.io/github/bigeasy/reactor?branch=master)\n\nAn asynchronous work queue. Reactor takes work and feeds it to an asynchronous\nfunction that accepts an error-first callback.\n\nReactor is part of the [Cadence](https://github.com/bigeasy/cadence) Universe.\nIt is designed with Cadence in mind, but you can use it with your own eror-first\ncallbacks, just follow the rules.\n\nReactor is based on [Turnstile](https://github.com/bigeasy/turnstile) so it can\nperform parallel operations in an orderly fashion;\n\n * with a runtime adjustable limit on the number of concurrent operations,\n * with a fifo queue that can be measured and monitored instead of using the\n event loop as an implicit queue,\n * with a mechanism to actively time out messages in the queue that have grown\n stale.\n\nWithout a queue, parallelism is unmanagable.\n\nHere's an example of how to use Reactor to process a queue managed by Reactor.\n\n```javascript\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, value, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        this._processor.process(values, callback)\n    }\n}\n```\n\nThe first argument to your callback function is going to be a status object.\nThe most interesting property of that object is going to the `timedout`\nproperty, which will be `true` if the time since the work was sitting in the\nqueue for too long. If your work has timed out, return as soon as possible.\nOtherwise, do your work.\n\nNow you can create a Reactor and push work into your Reactor.\n\n```javascript\nvar service = new Service(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\nreactor.push({ item: 1 }, function () {\n    console.log('item consumed')\n})\nreactor.push({ item: 2 })\n```\n\nYou can either push and wait, or else you can push and forget. To push and wait,\nprovide a callback. It will be called when the work has been consumed. To push\nand forget, just submit your work and move on.\n\nThere are some times when you want to keep a queue outside of the Reactor,\neither you have some special grouping or gathering you want to perform, of else\nyou want to check an external source for work. In this case you would use\nReactor as a set of items to check.\n\nLet's create a service that pulls work from a database.\n\n```javascript\nvar database = require('database')\n\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, key, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        database.get(key, function (error, value) {\n            if (error) conosle.log(error.stack)\n            else if (value == null) callback()\n            else this._processor.process(value, callback)\n        })\n    }\n}\n```\n\nIn the above we use a key to pull a value from the database. If the value does\nnot exists in the database, then return immediately, but if it does we call the\nprocessor with the work.\n\nLet's put work in the database and flag\n\n```javascript\nvar database = require('database')\nvar service = new Serivce(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\n\ndatabase.add('a', { item: 1 }, function (error) {\n    if (error) throw error\n    reactor.set('a')\n})\n```\n\nNo matter how man times you call check with the value 'a', you will only be\nadding one work entry into the queue for the value 'a'. The `check` method will\nnot add another entry into the work queue for the value 'a' until the current\nentry is consumed by the work method.\n\nReactors create a separate asynchronous stack in which to do your work. Within\nthat stack, you're supposed to handle any errors. There is no way for any\nasynchronous error or thrown exception to propagate out to the method that\ncalled `push` or `check`. If an asynchronous error is returned to the callback,\nReactor will raise an uncatchable exception guaranteed to unwind your program.\n\nThe guarantee is a Good Thing. It means that you won't swallow errors, you won't\nhave exceptions caught by overly clever error handlers and fed to some event\nhandler you know nothing about.\n\nIf you are using an intelligent error-first control library like Cadence (or\nStreamline.js), then it is easy to wrap your work in an asynchronous try/catch\nblock and recover if if you can, or log and continue.\n\n*TK: Cadence receipes; try/catch, parallel waits.*\n\n#### `new Reactor(operation, [turnstile])`\n\nCreate a new Reactor with an `operation` which is either an asynchronous\nfunction or an object with an `object` and `method` property.\n\n#### `reactor.push(work, [callback])`\n\nPush work into the queue. If given a `callback`, the callback will be called\nwhen the work is consumed. The `callback` will never return value because errors\ndo not propagate up and out of the work queue.\n\nDo not mix with `set` and `check`.\n\n#### `reactor.set(key, [callback])`\n\nAdd a single item of work the work queue that will call the worker with optional\nkey. If given a `callback`, the callback will be called when the work is\nconsumed. The `callback` will never return value because errors do not propagate\nup and out of the work queue.\n\nDo not mix with `push` and `check`.\n\n#### `reactor.check([callback])`\n\nAdds a single, undistinguished work entry into the work queue if no such entry\nalready exists. If given a `callback`, the callback will be called when the work\nis consumed. The `callback` will never return value because errors do not\npropagate up and out of the work queue.\n\n\nDo not mix with `push` and `set`.\n","readmeFilename":"README.md","gitHead":"25c982236682ddbd592eb6c8fcc5694c36d7b80b","_id":"reactor@10.5.0","_npmVersion":"6.1.0","_nodeVersion":"10.4.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-OjifpBKpCpW6Dsg+s/SOKlC6Z8Kl9jd0MBaILffQ+eTi+mg8lK6IaMXFd7s2btco/2BZmnGeFdXXO6SQiZyGsA==","shasum":"28f57ef41c60bf142e13d744aca8765eb3122aaa","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.5.0.tgz","fileCount":6,"unpackedSize":22302,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbcIvdCRA9TVsSAnZWagAADJEP/0Wa7esY6Z5r1Fr0OMai\npcy8JpcgdGjLOI1ZqY3sDvlYH4MrKYiVI4ceXAlSvWOfizaJIPz3VhtbUG4/\n9R0KgYO8UH9F+x8HZhfvpkvsWPLUQJvl58y8i2w+L2P4giMXVd36ZcH6kXIe\nURLAPdV3UEMO/rYF/jGZ41pdYpJL/oz57jW8g3GnqsW7eTTQLP5uEuDD2USC\n3SJnGGeeaDK1y9LISij1liMR5UqyU0RVycY1s4RvMnQPyxbWX8m0I9jgDn5x\npgZofRwMuS8g86y7qmE2XqCx6FbZkQTTWOGZhsNLrpKLhsi9/Ye+OdDvn+Xs\nmHUNT09ytvdisYaprMEX6OGqEo0kAZ8l4v7dVxqvO7tDVtmk8ICcsnXYjyCA\n30Rc4rOHCJdpOBIwG9Ed81PwFS5od8DVCuQF8rJ85N6/NHsrkx8y56YWbjbo\n2vI/qso8HBXAN4ARsTZZ+1p/ZU+FlbeDESbcc+Kbjka/cKf567LHgmFVNnk9\nbd/lAL16OCPRl5xB6zArpnsNeojFB9INOp7qYxuWMhY3oLG7mJ0BNt1toTZ0\nV3Oi9Fko9grWwcXvoO3bS9cUk8e46G+xFbcfXbWBVzAPHX3njiByxedwfRGV\nEBUxA7hLvYolRozaQjecbUzQQFhCWY7CswrksT2BPqo3ju4Q4Jd6nzyrmzuv\n9sDs\r\n=JpWY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD+aikJjJKy3aDoktA0yEXvitgj+9SCxWbaKovmCM5B4wIgeqGoGeNNdxeyGnOf1cYF/6uwHf1hECHjreB6eVC8cvw="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_10.5.0_1534102493482_0.3066964179897931"},"_hasShrinkwrap":false},"10.5.1":{"name":"reactor","version":"10.5.1","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.3","cadence":"1.0.x","connect":"3.6.6","delta":"1.4.x","dispatch":"1.0.1","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"6.3.x","magazine":"3.2.x","media-typer":"0.3.x","nop":"1.0.x","operation":"2.0.x","rescue":"4.0.x","turnstile":"4.6.x"},"devDependencies":{"proof":"3.0.x","vizsla":"12.12.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"readme":"[![Build Status](https://travis-ci.org/bigeasy/reactor.svg?branch=master)](https://travis-ci.org/bigeasy/reactor) [![Coverage Status](https://coveralls.io/repos/bigeasy/reactor/badge.svg?branch=master&service=github)](https://coveralls.io/github/bigeasy/reactor?branch=master)\n\nAn asynchronous work queue. Reactor takes work and feeds it to an asynchronous\nfunction that accepts an error-first callback.\n\nReactor is part of the [Cadence](https://github.com/bigeasy/cadence) Universe.\nIt is designed with Cadence in mind, but you can use it with your own eror-first\ncallbacks, just follow the rules.\n\nReactor is based on [Turnstile](https://github.com/bigeasy/turnstile) so it can\nperform parallel operations in an orderly fashion;\n\n * with a runtime adjustable limit on the number of concurrent operations,\n * with a fifo queue that can be measured and monitored instead of using the\n event loop as an implicit queue,\n * with a mechanism to actively time out messages in the queue that have grown\n stale.\n\nWithout a queue, parallelism is unmanagable.\n\nHere's an example of how to use Reactor to process a queue managed by Reactor.\n\n```javascript\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, value, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        this._processor.process(values, callback)\n    }\n}\n```\n\nThe first argument to your callback function is going to be a status object.\nThe most interesting property of that object is going to the `timedout`\nproperty, which will be `true` if the time since the work was sitting in the\nqueue for too long. If your work has timed out, return as soon as possible.\nOtherwise, do your work.\n\nNow you can create a Reactor and push work into your Reactor.\n\n```javascript\nvar service = new Service(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\nreactor.push({ item: 1 }, function () {\n    console.log('item consumed')\n})\nreactor.push({ item: 2 })\n```\n\nYou can either push and wait, or else you can push and forget. To push and wait,\nprovide a callback. It will be called when the work has been consumed. To push\nand forget, just submit your work and move on.\n\nThere are some times when you want to keep a queue outside of the Reactor,\neither you have some special grouping or gathering you want to perform, of else\nyou want to check an external source for work. In this case you would use\nReactor as a set of items to check.\n\nLet's create a service that pulls work from a database.\n\n```javascript\nvar database = require('database')\n\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, key, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        database.get(key, function (error, value) {\n            if (error) conosle.log(error.stack)\n            else if (value == null) callback()\n            else this._processor.process(value, callback)\n        })\n    }\n}\n```\n\nIn the above we use a key to pull a value from the database. If the value does\nnot exists in the database, then return immediately, but if it does we call the\nprocessor with the work.\n\nLet's put work in the database and flag\n\n```javascript\nvar database = require('database')\nvar service = new Serivce(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\n\ndatabase.add('a', { item: 1 }, function (error) {\n    if (error) throw error\n    reactor.set('a')\n})\n```\n\nNo matter how man times you call check with the value 'a', you will only be\nadding one work entry into the queue for the value 'a'. The `check` method will\nnot add another entry into the work queue for the value 'a' until the current\nentry is consumed by the work method.\n\nReactors create a separate asynchronous stack in which to do your work. Within\nthat stack, you're supposed to handle any errors. There is no way for any\nasynchronous error or thrown exception to propagate out to the method that\ncalled `push` or `check`. If an asynchronous error is returned to the callback,\nReactor will raise an uncatchable exception guaranteed to unwind your program.\n\nThe guarantee is a Good Thing. It means that you won't swallow errors, you won't\nhave exceptions caught by overly clever error handlers and fed to some event\nhandler you know nothing about.\n\nIf you are using an intelligent error-first control library like Cadence (or\nStreamline.js), then it is easy to wrap your work in an asynchronous try/catch\nblock and recover if if you can, or log and continue.\n\n*TK: Cadence receipes; try/catch, parallel waits.*\n\n#### `new Reactor(operation, [turnstile])`\n\nCreate a new Reactor with an `operation` which is either an asynchronous\nfunction or an object with an `object` and `method` property.\n\n#### `reactor.push(work, [callback])`\n\nPush work into the queue. If given a `callback`, the callback will be called\nwhen the work is consumed. The `callback` will never return value because errors\ndo not propagate up and out of the work queue.\n\nDo not mix with `set` and `check`.\n\n#### `reactor.set(key, [callback])`\n\nAdd a single item of work the work queue that will call the worker with optional\nkey. If given a `callback`, the callback will be called when the work is\nconsumed. The `callback` will never return value because errors do not propagate\nup and out of the work queue.\n\nDo not mix with `push` and `check`.\n\n#### `reactor.check([callback])`\n\nAdds a single, undistinguished work entry into the work queue if no such entry\nalready exists. If given a `callback`, the callback will be called when the work\nis consumed. The `callback` will never return value because errors do not\npropagate up and out of the work queue.\n\n\nDo not mix with `push` and `set`.\n","readmeFilename":"README.md","gitHead":"422ddb0747b92228650a25edbb90bbd430ee8268","_id":"reactor@10.5.1","_npmVersion":"6.1.0","_nodeVersion":"10.4.0","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-e8EMRm1rPsXOwT+tkvCFpDR0XiOkL9mlapQ37G3MIpiS2ib37mSlXvsLYrzhhiTk9bptYyy0C7cIgmN5zXlKpg==","shasum":"25020370187ae4d7889026900efcc18fe1e6ae41","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.5.1.tgz","fileCount":6,"unpackedSize":22302,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbjcstCRA9TVsSAnZWagAArbYP/1T864OperI53a55Kq6U\nS82VocGXHXu07eDQmOrAKC7PdZ4i3ZQ2COMSVFQng8Z0AU80hk2tOcy1+xUY\nxrTQfIgnVdZNoNHbem/vET1kRusLFBNCibumx/TlnHFFN6OiyPhuwIbAxSGP\nE3Z3LU7u4m0EhShAmBSrZNhLbg1BMY3dv56nRgVlsLl/OGMs5cRKLllkKC94\nOsxHXeou8NEN0P5ijfFqChUCi/+vDGgz7fQRQWTAgx1dSKzX4TLtz0yKSqg/\nEEXj0N2JdCxkFlbfF06KX9pPB3BEgYOQOpTAft9/w8bE5SGQAUvlb+LtE5iO\nHaVXm+kV5XjhslS71s8PFo3l+2vmVcGhWWQJtU2J28BF+UQjM+EOGkscHO6d\ndXx10SbgdEFkl/VUWJ+9jQcs81o++bbT1Uj9jn+DktTzjTh1Xvrmhdsm9Njv\nyon/0a1SXnmvy19buFR+0fogMVukQ7iauNECYCB4iCKnJYj/NfucsJNFgAHu\nfn4wvY3bbXR1V75dYjTjcsgRnASEmRIjF4vrSvjNTzkancijahY//XQE7Esn\nYp4Z13tU4M+ksb/i9vnZHuuR3Ph9rGK73agp3QZDBJKaOMPcHMTDPpAL8SUs\n8YuTpQd+qZp/jpluTbyKAoFoDfVjl76n9vWKFijGX0w9JC2l4uNZ1OfMGqKN\nox71\r\n=fKpJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCISgu0//bmBU8EHaFyi4lvp7jp3M4DiUyAvehqmDvGSAIgTDmuFN3Gv8LoM8NQXGqCTGR1Beot3YtuHE0AtgqJrWI="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_10.5.1_1536019244780_0.17888600789947962"},"_hasShrinkwrap":false},"10.5.2":{"name":"reactor","version":"10.5.2","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.3","cadence":"1.0.x","connect":"3.6.6","delta":"1.4.x","dispatch":"1.0.2","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"6.3.x","magazine":"3.2.x","media-typer":"0.3.x","nop":"1.0.x","operation":"2.0.x","rescue":"4.0.x","turnstile":"4.6.x"},"devDependencies":{"proof":"3.0.x","vizsla":"12.12.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"readme":"[![Build Status](https://travis-ci.org/bigeasy/reactor.svg?branch=master)](https://travis-ci.org/bigeasy/reactor) [![Coverage Status](https://coveralls.io/repos/bigeasy/reactor/badge.svg?branch=master&service=github)](https://coveralls.io/github/bigeasy/reactor?branch=master)\n\nAn asynchronous work queue. Reactor takes work and feeds it to an asynchronous\nfunction that accepts an error-first callback.\n\nReactor is part of the [Cadence](https://github.com/bigeasy/cadence) Universe.\nIt is designed with Cadence in mind, but you can use it with your own eror-first\ncallbacks, just follow the rules.\n\nReactor is based on [Turnstile](https://github.com/bigeasy/turnstile) so it can\nperform parallel operations in an orderly fashion;\n\n * with a runtime adjustable limit on the number of concurrent operations,\n * with a fifo queue that can be measured and monitored instead of using the\n event loop as an implicit queue,\n * with a mechanism to actively time out messages in the queue that have grown\n stale.\n\nWithout a queue, parallelism is unmanagable.\n\nHere's an example of how to use Reactor to process a queue managed by Reactor.\n\n```javascript\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, value, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        this._processor.process(values, callback)\n    }\n}\n```\n\nThe first argument to your callback function is going to be a status object.\nThe most interesting property of that object is going to the `timedout`\nproperty, which will be `true` if the time since the work was sitting in the\nqueue for too long. If your work has timed out, return as soon as possible.\nOtherwise, do your work.\n\nNow you can create a Reactor and push work into your Reactor.\n\n```javascript\nvar service = new Service(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\nreactor.push({ item: 1 }, function () {\n    console.log('item consumed')\n})\nreactor.push({ item: 2 })\n```\n\nYou can either push and wait, or else you can push and forget. To push and wait,\nprovide a callback. It will be called when the work has been consumed. To push\nand forget, just submit your work and move on.\n\nThere are some times when you want to keep a queue outside of the Reactor,\neither you have some special grouping or gathering you want to perform, of else\nyou want to check an external source for work. In this case you would use\nReactor as a set of items to check.\n\nLet's create a service that pulls work from a database.\n\n```javascript\nvar database = require('database')\n\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, key, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        database.get(key, function (error, value) {\n            if (error) conosle.log(error.stack)\n            else if (value == null) callback()\n            else this._processor.process(value, callback)\n        })\n    }\n}\n```\n\nIn the above we use a key to pull a value from the database. If the value does\nnot exists in the database, then return immediately, but if it does we call the\nprocessor with the work.\n\nLet's put work in the database and flag\n\n```javascript\nvar database = require('database')\nvar service = new Serivce(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\n\ndatabase.add('a', { item: 1 }, function (error) {\n    if (error) throw error\n    reactor.set('a')\n})\n```\n\nNo matter how man times you call check with the value 'a', you will only be\nadding one work entry into the queue for the value 'a'. The `check` method will\nnot add another entry into the work queue for the value 'a' until the current\nentry is consumed by the work method.\n\nReactors create a separate asynchronous stack in which to do your work. Within\nthat stack, you're supposed to handle any errors. There is no way for any\nasynchronous error or thrown exception to propagate out to the method that\ncalled `push` or `check`. If an asynchronous error is returned to the callback,\nReactor will raise an uncatchable exception guaranteed to unwind your program.\n\nThe guarantee is a Good Thing. It means that you won't swallow errors, you won't\nhave exceptions caught by overly clever error handlers and fed to some event\nhandler you know nothing about.\n\nIf you are using an intelligent error-first control library like Cadence (or\nStreamline.js), then it is easy to wrap your work in an asynchronous try/catch\nblock and recover if if you can, or log and continue.\n\n*TK: Cadence receipes; try/catch, parallel waits.*\n\n#### `new Reactor(operation, [turnstile])`\n\nCreate a new Reactor with an `operation` which is either an asynchronous\nfunction or an object with an `object` and `method` property.\n\n#### `reactor.push(work, [callback])`\n\nPush work into the queue. If given a `callback`, the callback will be called\nwhen the work is consumed. The `callback` will never return value because errors\ndo not propagate up and out of the work queue.\n\nDo not mix with `set` and `check`.\n\n#### `reactor.set(key, [callback])`\n\nAdd a single item of work the work queue that will call the worker with optional\nkey. If given a `callback`, the callback will be called when the work is\nconsumed. The `callback` will never return value because errors do not propagate\nup and out of the work queue.\n\nDo not mix with `push` and `check`.\n\n#### `reactor.check([callback])`\n\nAdds a single, undistinguished work entry into the work queue if no such entry\nalready exists. If given a `callback`, the callback will be called when the work\nis consumed. The `callback` will never return value because errors do not\npropagate up and out of the work queue.\n\n\nDo not mix with `push` and `set`.\n","readmeFilename":"README.md","gitHead":"95037194eebba43cacb5c353d614ea838dfef854","_id":"reactor@10.5.2","_npmVersion":"6.1.0","_nodeVersion":"10.4.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-SdIirbrEhU+hy+d5ENlZw38+sYdL+OGvrsRN4LWMnscUJ/ivvBmUbqlou2SHN5psMs4C2+RsY+GJMn97edaiRg==","shasum":"181201f5a6bfa9b2ad05c95375a11ffa276a289b","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.5.2.tgz","fileCount":6,"unpackedSize":22302,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbmJEtCRA9TVsSAnZWagAAqRYP/jhQLb/4C/kNjzVIQMTl\n9jKYuTgruTt97QrBukdsYfIrwEtuJd/Igj2sJhrrn+UaPliheWONihLjdWUm\nZb0m1M/g1ojUp9q1R+RM/MZqZ2JGr3Pam18rbRKQgViwNpMQRAase0vH2IyX\nvi3hRi2Q4rn2WI4sXdNDlqNZf/ItQmlQr38ZxrbtexF7R4grO+CUviIjAZNa\nBxPkyH9mtpJzzGUBFa2Zdfcca29P2ctNFB/50tcRP7VLwpJYK3fncRQxi40U\nmNKm5tt/wp1AkBvgoCk9Z8dtwvNH/LYCSiHlKpr6u8eFkZ0jYy68/87fjYCv\nqP/n4jI7q3+1ehLGn8JdPvsAi/kkLF1IyYLzM37joy+0X1U6sermEFutqWTn\nPkxO9W8v4y2dNVNa4/DWffBgU6jOQpDLdv5KE92vFq3THq7EkXEcPApKEJew\ni36sUYm4Y8UqMQjnTerry44b6xb0JT4rOBg2OxhXGSl/77drZO4BiJp2uvSn\n8uvm/mdSvLKmq/fwxNTfLKJZ46tbfoLGZ477Ee1y7AoAwNpdp4Gs5kWboyQd\nsWA5S4GMeoYu2yFZ4GwOzLr6DIUgOrRF6VORhzp0WT0BBTHNNIMwdB76k1wf\n2fUfmuIypgx31H1p2gUlZbTOCV3URLrlBSbOrnUixtsxnKV8T1iXGcpMUoay\nGbMT\r\n=c+A0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE3o9zwDST+XOknZ9CFJ7cg13xhbDE4BG0gZgs8Mj3JrAiAtYqHk/l6DDt9gdSoxz6+UnSHEUzanQxKmQxGsqQddvQ=="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_10.5.2_1536725292931_0.4021668978571771"},"_hasShrinkwrap":false},"10.5.3":{"name":"reactor","version":"10.5.3","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.3","cadence":"1.0.x","connect":"3.6.6","delta":"1.4.x","dispatch":"1.0.2","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"6.3.x","magazine":"3.2.x","media-typer":"0.3.x","nop":"1.0.x","operation":"2.0.x","rescue":"4.1.x","turnstile":"4.6.x"},"devDependencies":{"proof":"3.0.x","vizsla":"12.12.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"readme":"[![Build Status](https://travis-ci.org/bigeasy/reactor.svg?branch=master)](https://travis-ci.org/bigeasy/reactor) [![Coverage Status](https://coveralls.io/repos/bigeasy/reactor/badge.svg?branch=master&service=github)](https://coveralls.io/github/bigeasy/reactor?branch=master)\n\nAn asynchronous work queue. Reactor takes work and feeds it to an asynchronous\nfunction that accepts an error-first callback.\n\nReactor is part of the [Cadence](https://github.com/bigeasy/cadence) Universe.\nIt is designed with Cadence in mind, but you can use it with your own eror-first\ncallbacks, just follow the rules.\n\nReactor is based on [Turnstile](https://github.com/bigeasy/turnstile) so it can\nperform parallel operations in an orderly fashion;\n\n * with a runtime adjustable limit on the number of concurrent operations,\n * with a fifo queue that can be measured and monitored instead of using the\n event loop as an implicit queue,\n * with a mechanism to actively time out messages in the queue that have grown\n stale.\n\nWithout a queue, parallelism is unmanagable.\n\nHere's an example of how to use Reactor to process a queue managed by Reactor.\n\n```javascript\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, value, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        this._processor.process(values, callback)\n    }\n}\n```\n\nThe first argument to your callback function is going to be a status object.\nThe most interesting property of that object is going to the `timedout`\nproperty, which will be `true` if the time since the work was sitting in the\nqueue for too long. If your work has timed out, return as soon as possible.\nOtherwise, do your work.\n\nNow you can create a Reactor and push work into your Reactor.\n\n```javascript\nvar service = new Service(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\nreactor.push({ item: 1 }, function () {\n    console.log('item consumed')\n})\nreactor.push({ item: 2 })\n```\n\nYou can either push and wait, or else you can push and forget. To push and wait,\nprovide a callback. It will be called when the work has been consumed. To push\nand forget, just submit your work and move on.\n\nThere are some times when you want to keep a queue outside of the Reactor,\neither you have some special grouping or gathering you want to perform, of else\nyou want to check an external source for work. In this case you would use\nReactor as a set of items to check.\n\nLet's create a service that pulls work from a database.\n\n```javascript\nvar database = require('database')\n\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, key, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        database.get(key, function (error, value) {\n            if (error) conosle.log(error.stack)\n            else if (value == null) callback()\n            else this._processor.process(value, callback)\n        })\n    }\n}\n```\n\nIn the above we use a key to pull a value from the database. If the value does\nnot exists in the database, then return immediately, but if it does we call the\nprocessor with the work.\n\nLet's put work in the database and flag\n\n```javascript\nvar database = require('database')\nvar service = new Serivce(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\n\ndatabase.add('a', { item: 1 }, function (error) {\n    if (error) throw error\n    reactor.set('a')\n})\n```\n\nNo matter how man times you call check with the value 'a', you will only be\nadding one work entry into the queue for the value 'a'. The `check` method will\nnot add another entry into the work queue for the value 'a' until the current\nentry is consumed by the work method.\n\nReactors create a separate asynchronous stack in which to do your work. Within\nthat stack, you're supposed to handle any errors. There is no way for any\nasynchronous error or thrown exception to propagate out to the method that\ncalled `push` or `check`. If an asynchronous error is returned to the callback,\nReactor will raise an uncatchable exception guaranteed to unwind your program.\n\nThe guarantee is a Good Thing. It means that you won't swallow errors, you won't\nhave exceptions caught by overly clever error handlers and fed to some event\nhandler you know nothing about.\n\nIf you are using an intelligent error-first control library like Cadence (or\nStreamline.js), then it is easy to wrap your work in an asynchronous try/catch\nblock and recover if if you can, or log and continue.\n\n*TK: Cadence receipes; try/catch, parallel waits.*\n\n#### `new Reactor(operation, [turnstile])`\n\nCreate a new Reactor with an `operation` which is either an asynchronous\nfunction or an object with an `object` and `method` property.\n\n#### `reactor.push(work, [callback])`\n\nPush work into the queue. If given a `callback`, the callback will be called\nwhen the work is consumed. The `callback` will never return value because errors\ndo not propagate up and out of the work queue.\n\nDo not mix with `set` and `check`.\n\n#### `reactor.set(key, [callback])`\n\nAdd a single item of work the work queue that will call the worker with optional\nkey. If given a `callback`, the callback will be called when the work is\nconsumed. The `callback` will never return value because errors do not propagate\nup and out of the work queue.\n\nDo not mix with `push` and `check`.\n\n#### `reactor.check([callback])`\n\nAdds a single, undistinguished work entry into the work queue if no such entry\nalready exists. If given a `callback`, the callback will be called when the work\nis consumed. The `callback` will never return value because errors do not\npropagate up and out of the work queue.\n\n\nDo not mix with `push` and `set`.\n","readmeFilename":"README.md","gitHead":"4166c5c65143e953eef7812e839d44bd2fa5e3d1","_id":"reactor@10.5.3","_npmVersion":"6.1.0","_nodeVersion":"10.4.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-kKLqokLsyLKbai99j4KuKtIzbqyZGzrEdQtrqScx5lnMMZi0LF92Oyn7tl9w3frbPd/kQE3gozrIdo12LI8MGQ==","shasum":"74765406ef3c74445808205fcea3fb3461d9aef3","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.5.3.tgz","fileCount":6,"unpackedSize":22302,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbnp0ACRA9TVsSAnZWagAA2VEP/26WpmPiKHYFQX4R5mkE\nSIBTTZpiQu+IrVWfRAxedXLlp4V0MFSIgO/DFL8wcViPfC8O6i95KrLGin/u\ncKJpv+DS/nnqzl/IbhAn/MhK46iSfM3dXJZ0UeKej/dTTt9TfnscjKGTiGJc\nMZ5uD02oUYA828DegP87bCKpevqhu4fWZMop/Ud3t/1yllD2eOiqmaMs35hO\nxzxCuTyGgJZxsC6+cvIC4h472CPmgM9RKu0g8Phe3EAf7d1CA8KFIvEpD7Cf\n1RjpsaquvvRXOop8T4++o0XUfqCREoAH9G3RPqHNJWzl4mF6RQT7E7GNeMsP\nc724z0to02I04l3ir3PBIeThoNgKbTijy2AwZ7oKOvMK9vXsmugOQARx6IDc\nF12rV7VHzTZTrybJ6FHFcJ5SNLBdtNnIlVhHD+WQmcS8Zjm7A7c6KGKf+OPm\n8cgBSnfol21JafQifZxNxPio/Pu3AEZNsw7aHf9IufCUAtOeYo5TCFeBDpRl\n14VD//qgku/bHCCRjL8FI0V56z2WgAcDmGy8ANpYSQ9nyJubQkaagOGOPV8X\no1Su/C9EmHEm+hbfURWjyuRzwDmUQlaWy3P2OJERcdzdRfRICoixyuftA0yP\nhd6uws7+J2XCtvWLKoziN0efpuTApC8yYJEsegvCBmQ/5sEcT82+bCXq52CN\nZ6dD\r\n=I9vC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCMKcP1pgPRyYz6tv+0TUwffLJng3tQyLQvyODO5aza4gIhAK1ijBJ3ktV8b0zLY08+tpY59ZEeP6P0mW/TIKqTs5D0"}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_10.5.3_1537121535810_0.321084300876727"},"_hasShrinkwrap":false},"10.6.0":{"name":"reactor","version":"10.6.0","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.3","cadence":"1.0.x","connect":"3.6.6","delta":"1.4.x","dispatch":"1.0.2","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"6.3.x","magazine":"3.2.x","media-typer":"0.3.x","nop":"1.0.x","operation":"2.0.x","rescue":"4.1.x","turnstile":"4.6.x"},"devDependencies":{"proof":"3.0.x","vizsla":"12.12.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"readme":"[![Build Status](https://travis-ci.org/bigeasy/reactor.svg?branch=master)](https://travis-ci.org/bigeasy/reactor) [![Coverage Status](https://coveralls.io/repos/bigeasy/reactor/badge.svg?branch=master&service=github)](https://coveralls.io/github/bigeasy/reactor?branch=master)\n\nAn asynchronous work queue. Reactor takes work and feeds it to an asynchronous\nfunction that accepts an error-first callback.\n\nReactor is part of the [Cadence](https://github.com/bigeasy/cadence) Universe.\nIt is designed with Cadence in mind, but you can use it with your own eror-first\ncallbacks, just follow the rules.\n\nReactor is based on [Turnstile](https://github.com/bigeasy/turnstile) so it can\nperform parallel operations in an orderly fashion;\n\n * with a runtime adjustable limit on the number of concurrent operations,\n * with a fifo queue that can be measured and monitored instead of using the\n event loop as an implicit queue,\n * with a mechanism to actively time out messages in the queue that have grown\n stale.\n\nWithout a queue, parallelism is unmanagable.\n\nHere's an example of how to use Reactor to process a queue managed by Reactor.\n\n```javascript\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, value, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        this._processor.process(values, callback)\n    }\n}\n```\n\nThe first argument to your callback function is going to be a status object.\nThe most interesting property of that object is going to the `timedout`\nproperty, which will be `true` if the time since the work was sitting in the\nqueue for too long. If your work has timed out, return as soon as possible.\nOtherwise, do your work.\n\nNow you can create a Reactor and push work into your Reactor.\n\n```javascript\nvar service = new Service(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\nreactor.push({ item: 1 }, function () {\n    console.log('item consumed')\n})\nreactor.push({ item: 2 })\n```\n\nYou can either push and wait, or else you can push and forget. To push and wait,\nprovide a callback. It will be called when the work has been consumed. To push\nand forget, just submit your work and move on.\n\nThere are some times when you want to keep a queue outside of the Reactor,\neither you have some special grouping or gathering you want to perform, of else\nyou want to check an external source for work. In this case you would use\nReactor as a set of items to check.\n\nLet's create a service that pulls work from a database.\n\n```javascript\nvar database = require('database')\n\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, key, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        database.get(key, function (error, value) {\n            if (error) conosle.log(error.stack)\n            else if (value == null) callback()\n            else this._processor.process(value, callback)\n        })\n    }\n}\n```\n\nIn the above we use a key to pull a value from the database. If the value does\nnot exists in the database, then return immediately, but if it does we call the\nprocessor with the work.\n\nLet's put work in the database and flag\n\n```javascript\nvar database = require('database')\nvar service = new Serivce(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\n\ndatabase.add('a', { item: 1 }, function (error) {\n    if (error) throw error\n    reactor.set('a')\n})\n```\n\nNo matter how man times you call check with the value 'a', you will only be\nadding one work entry into the queue for the value 'a'. The `check` method will\nnot add another entry into the work queue for the value 'a' until the current\nentry is consumed by the work method.\n\nReactors create a separate asynchronous stack in which to do your work. Within\nthat stack, you're supposed to handle any errors. There is no way for any\nasynchronous error or thrown exception to propagate out to the method that\ncalled `push` or `check`. If an asynchronous error is returned to the callback,\nReactor will raise an uncatchable exception guaranteed to unwind your program.\n\nThe guarantee is a Good Thing. It means that you won't swallow errors, you won't\nhave exceptions caught by overly clever error handlers and fed to some event\nhandler you know nothing about.\n\nIf you are using an intelligent error-first control library like Cadence (or\nStreamline.js), then it is easy to wrap your work in an asynchronous try/catch\nblock and recover if if you can, or log and continue.\n\n*TK: Cadence receipes; try/catch, parallel waits.*\n\n#### `new Reactor(operation, [turnstile])`\n\nCreate a new Reactor with an `operation` which is either an asynchronous\nfunction or an object with an `object` and `method` property.\n\n#### `reactor.push(work, [callback])`\n\nPush work into the queue. If given a `callback`, the callback will be called\nwhen the work is consumed. The `callback` will never return value because errors\ndo not propagate up and out of the work queue.\n\nDo not mix with `set` and `check`.\n\n#### `reactor.set(key, [callback])`\n\nAdd a single item of work the work queue that will call the worker with optional\nkey. If given a `callback`, the callback will be called when the work is\nconsumed. The `callback` will never return value because errors do not propagate\nup and out of the work queue.\n\nDo not mix with `push` and `check`.\n\n#### `reactor.check([callback])`\n\nAdds a single, undistinguished work entry into the work queue if no such entry\nalready exists. If given a `callback`, the callback will be called when the work\nis consumed. The `callback` will never return value because errors do not\npropagate up and out of the work queue.\n\n\nDo not mix with `push` and `set`.\n","readmeFilename":"README.md","gitHead":"5c1e8c05a8d669088f22bfaf25f8d7a359cb7072","_id":"reactor@10.6.0","_npmVersion":"6.1.0","_nodeVersion":"10.4.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-OXIVvczSognW201lylO8cOAb8MxM4UlzwII5LrxE7QqK1wvFk57pE74VTvSZvO43II9G6H0TKd0yAgAczAyFEQ==","shasum":"a9db39b4455dbc53fa35637cea4e6b861580d141","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.6.0.tgz","fileCount":7,"unpackedSize":22684,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbzDZoCRA9TVsSAnZWagAAXxYQAIEAhGoUWsu/rm4FTBO4\nrTz6+t7MOoZn0FTBMjMnY3brBtiVxV55CY40ZOLq4W8HjVnVL5J7Z1nYgmjd\nxagoXVSQv2LPKm6xSV4qRknpGJldPNf+r6kd8q8KCkQBBSRG2aCn7zlMyp/5\ngOhhrMo6vhcsTizUmlvgxFGjfhTT0d9fNQC6BiJwQZw1vJU0v6FGMNFUYKUW\nY7q33qrOFnkGUs1qJ8awXs5R+gfoPVp0PTRW9jLihtZoJp1/+WTfFMFd6Q7T\n4WKencNQbhphKG5OwfezGcB0k0BTt1VAaiCCPrJIFWjn5zfUbHXTwxUz7gui\n9wZcbyJcn5bpT4tucSag/5kk8XB3jm5HdCRSlBxtOn629UZ779N+dXAGI2So\ngh+Vv5XsTbS+IJeN49Xgckbi9mtonAiSN9OlVVz4xq5bTqeIow7uwaKYzqW+\nW1Js/7J7ciaAUqrf+rF+su49gb8DaZkHmdM3/c8yPw+nWeDI4xKcPbKkCBCy\nBn1qv5/GuVc/RBIp7Hu6hZolHY5yBmG9WBgDVr+o5+3tjfNQNLBFVkdN8RO9\nWYb0XOYrusOE/ux9/AcSypPrxYwCHobIaBUuDmpsHY/RmPlDdqwK5xGAhCqx\njbWq9l3jNyr+kYxkJfSeVokgtMJy5eJ7EbLK/BE+al4807OZcAlIZxh6Urml\naa9q\r\n=DPI+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCH3QHHjKQrBtqP2HjCupZ6CeTZM5pKO5YMmAkGZ0zWIAIgSGdoZqIAOKjT5vJ+suwyuZmCmTu8UO8X7XnFWdtUoXg="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_10.6.0_1540109927720_0.18430633733464763"},"_hasShrinkwrap":false},"10.6.1":{"name":"reactor","version":"10.6.1","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.3","cadence":"1.0.x","connect":"3.6.6","delta":"1.4.x","dispatch":"1.0.2","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"6.3.x","magazine":"3.2.x","media-typer":"0.3.x","nop":"1.0.x","operation":"2.0.x","rescue":"4.1.x","turnstile":"4.6.x"},"devDependencies":{"proof":"3.0.x","vizsla":"12.12.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"readme":"[![Build Status](https://travis-ci.org/bigeasy/reactor.svg?branch=master)](https://travis-ci.org/bigeasy/reactor) [![Coverage Status](https://coveralls.io/repos/bigeasy/reactor/badge.svg?branch=master&service=github)](https://coveralls.io/github/bigeasy/reactor?branch=master)\n\nAn asynchronous work queue. Reactor takes work and feeds it to an asynchronous\nfunction that accepts an error-first callback.\n\nReactor is part of the [Cadence](https://github.com/bigeasy/cadence) Universe.\nIt is designed with Cadence in mind, but you can use it with your own eror-first\ncallbacks, just follow the rules.\n\nReactor is based on [Turnstile](https://github.com/bigeasy/turnstile) so it can\nperform parallel operations in an orderly fashion;\n\n * with a runtime adjustable limit on the number of concurrent operations,\n * with a fifo queue that can be measured and monitored instead of using the\n event loop as an implicit queue,\n * with a mechanism to actively time out messages in the queue that have grown\n stale.\n\nWithout a queue, parallelism is unmanagable.\n\nHere's an example of how to use Reactor to process a queue managed by Reactor.\n\n```javascript\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, value, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        this._processor.process(values, callback)\n    }\n}\n```\n\nThe first argument to your callback function is going to be a status object.\nThe most interesting property of that object is going to the `timedout`\nproperty, which will be `true` if the time since the work was sitting in the\nqueue for too long. If your work has timed out, return as soon as possible.\nOtherwise, do your work.\n\nNow you can create a Reactor and push work into your Reactor.\n\n```javascript\nvar service = new Service(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\nreactor.push({ item: 1 }, function () {\n    console.log('item consumed')\n})\nreactor.push({ item: 2 })\n```\n\nYou can either push and wait, or else you can push and forget. To push and wait,\nprovide a callback. It will be called when the work has been consumed. To push\nand forget, just submit your work and move on.\n\nThere are some times when you want to keep a queue outside of the Reactor,\neither you have some special grouping or gathering you want to perform, of else\nyou want to check an external source for work. In this case you would use\nReactor as a set of items to check.\n\nLet's create a service that pulls work from a database.\n\n```javascript\nvar database = require('database')\n\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, key, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        database.get(key, function (error, value) {\n            if (error) conosle.log(error.stack)\n            else if (value == null) callback()\n            else this._processor.process(value, callback)\n        })\n    }\n}\n```\n\nIn the above we use a key to pull a value from the database. If the value does\nnot exists in the database, then return immediately, but if it does we call the\nprocessor with the work.\n\nLet's put work in the database and flag\n\n```javascript\nvar database = require('database')\nvar service = new Serivce(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\n\ndatabase.add('a', { item: 1 }, function (error) {\n    if (error) throw error\n    reactor.set('a')\n})\n```\n\nNo matter how man times you call check with the value 'a', you will only be\nadding one work entry into the queue for the value 'a'. The `check` method will\nnot add another entry into the work queue for the value 'a' until the current\nentry is consumed by the work method.\n\nReactors create a separate asynchronous stack in which to do your work. Within\nthat stack, you're supposed to handle any errors. There is no way for any\nasynchronous error or thrown exception to propagate out to the method that\ncalled `push` or `check`. If an asynchronous error is returned to the callback,\nReactor will raise an uncatchable exception guaranteed to unwind your program.\n\nThe guarantee is a Good Thing. It means that you won't swallow errors, you won't\nhave exceptions caught by overly clever error handlers and fed to some event\nhandler you know nothing about.\n\nIf you are using an intelligent error-first control library like Cadence (or\nStreamline.js), then it is easy to wrap your work in an asynchronous try/catch\nblock and recover if if you can, or log and continue.\n\n*TK: Cadence receipes; try/catch, parallel waits.*\n\n#### `new Reactor(operation, [turnstile])`\n\nCreate a new Reactor with an `operation` which is either an asynchronous\nfunction or an object with an `object` and `method` property.\n\n#### `reactor.push(work, [callback])`\n\nPush work into the queue. If given a `callback`, the callback will be called\nwhen the work is consumed. The `callback` will never return value because errors\ndo not propagate up and out of the work queue.\n\nDo not mix with `set` and `check`.\n\n#### `reactor.set(key, [callback])`\n\nAdd a single item of work the work queue that will call the worker with optional\nkey. If given a `callback`, the callback will be called when the work is\nconsumed. The `callback` will never return value because errors do not propagate\nup and out of the work queue.\n\nDo not mix with `push` and `check`.\n\n#### `reactor.check([callback])`\n\nAdds a single, undistinguished work entry into the work queue if no such entry\nalready exists. If given a `callback`, the callback will be called when the work\nis consumed. The `callback` will never return value because errors do not\npropagate up and out of the work queue.\n\n\nDo not mix with `push` and `set`.\n","readmeFilename":"README.md","gitHead":"f571ade732ae25f5e2de9e78fa5b0598ccc5ceef","_id":"reactor@10.6.1","_npmVersion":"6.1.0","_nodeVersion":"10.4.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-q7xqVs5qJGjuK9yt9VPm08IhnSrxFgQsEAlq9JK8SOQm7qjshc3mek9qdhNSLtFxZxtoiI7tW6EIgBHqgjPV0A==","shasum":"5a97d2b1cda0209409676681429458f447678478","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.6.1.tgz","fileCount":7,"unpackedSize":22716,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbzEKyCRA9TVsSAnZWagAAV0UP/3MkAjni9UvR9MjUlpvT\nkSVpRR82m+IByUFjIUQBR9Q8rCmfAtqUmfnTtq4/jC/Sr8T6KvW//hQJg0xI\nRhOuYf3QHS1H77ivyPiOwT307WyVS1ppbb41z9WypT35jMxnmDI0SsfaVR5L\nNRG40lcP0npsfwnsJ2eehsLR42CdMfVFjyE9VzCb8W+VPWggnXxlh7rfez6q\nm5NzPSe/aA6Xz4zESWta7MBXyJN6FtMFzZZ5Q5UwzBBh58UzSZgJw7YBpTg2\nl6zshOyOYR4VvSbKriOj6xxukQJ8sAqBahDdsFij3y8p8sTiuDu7LnZ3Ti/I\nQYnNdHlj5OHfjdFKR7U1MQ/8LbkVWZtlHnJrkV+ee1ldahxWO/b/tlGnzmJe\ndIjxO7OM80dLc7axs3K8gM/45JrCLlDVxBo60C2Ec2WtKdaRL8J7H6yEyhvP\n6WG0jKYhTFPqJWAHTa11Nf8AkojOuBZB0snJFg5abbaI2rAHkHEtFjI/xJif\nfWIHTxEvx0aIIO0nHg5V57Agt0XMeAMf9CwVC3LYNeJQl4RKG9QmS9VhFx8R\ndUUs6w3M1lAOpRF8CES7hUXLp5T77pn1zy9mYj4WZMzdQmayK2gXdCxC7KhX\nNLjqUmglbEL3/WH9hrRWbKLxcbb0Jwx0V0PT8jkvY7HRNQ5pZqYDZR50tKjY\nfwM2\r\n=h5gi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFR2jNYyr1Ii1DixFPtUQyUDKy7uigex8cPI7N1pnRPoAiBs9nr6TIdNEQEZXB2EHZHdqgY2S1keZSwZEMxRqWNHgA=="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_10.6.1_1540113074119_0.020562528112364475"},"_hasShrinkwrap":false},"10.6.2":{"name":"reactor","version":"10.6.2","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.3","cadence":"1.0.x","connect":"3.6.6","delta":"1.4.x","dispatch":"1.0.2","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"6.3.x","magazine":"3.2.x","media-typer":"1.0.x","nop":"1.0.x","operation":"2.0.x","rescue":"4.1.x","turnstile":"4.6.x"},"devDependencies":{"proof":"3.0.x","vizsla":"12.13.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"readme":"[![Build Status](https://travis-ci.org/bigeasy/reactor.svg?branch=master)](https://travis-ci.org/bigeasy/reactor) [![Coverage Status](https://coveralls.io/repos/bigeasy/reactor/badge.svg?branch=master&service=github)](https://coveralls.io/github/bigeasy/reactor?branch=master)\n\nAn asynchronous work queue. Reactor takes work and feeds it to an asynchronous\nfunction that accepts an error-first callback.\n\nReactor is part of the [Cadence](https://github.com/bigeasy/cadence) Universe.\nIt is designed with Cadence in mind, but you can use it with your own eror-first\ncallbacks, just follow the rules.\n\nReactor is based on [Turnstile](https://github.com/bigeasy/turnstile) so it can\nperform parallel operations in an orderly fashion;\n\n * with a runtime adjustable limit on the number of concurrent operations,\n * with a fifo queue that can be measured and monitored instead of using the\n event loop as an implicit queue,\n * with a mechanism to actively time out messages in the queue that have grown\n stale.\n\nWithout a queue, parallelism is unmanagable.\n\nHere's an example of how to use Reactor to process a queue managed by Reactor.\n\n```javascript\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, value, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        this._processor.process(values, callback)\n    }\n}\n```\n\nThe first argument to your callback function is going to be a status object.\nThe most interesting property of that object is going to the `timedout`\nproperty, which will be `true` if the time since the work was sitting in the\nqueue for too long. If your work has timed out, return as soon as possible.\nOtherwise, do your work.\n\nNow you can create a Reactor and push work into your Reactor.\n\n```javascript\nvar service = new Service(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\nreactor.push({ item: 1 }, function () {\n    console.log('item consumed')\n})\nreactor.push({ item: 2 })\n```\n\nYou can either push and wait, or else you can push and forget. To push and wait,\nprovide a callback. It will be called when the work has been consumed. To push\nand forget, just submit your work and move on.\n\nThere are some times when you want to keep a queue outside of the Reactor,\neither you have some special grouping or gathering you want to perform, of else\nyou want to check an external source for work. In this case you would use\nReactor as a set of items to check.\n\nLet's create a service that pulls work from a database.\n\n```javascript\nvar database = require('database')\n\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, key, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        database.get(key, function (error, value) {\n            if (error) conosle.log(error.stack)\n            else if (value == null) callback()\n            else this._processor.process(value, callback)\n        })\n    }\n}\n```\n\nIn the above we use a key to pull a value from the database. If the value does\nnot exists in the database, then return immediately, but if it does we call the\nprocessor with the work.\n\nLet's put work in the database and flag\n\n```javascript\nvar database = require('database')\nvar service = new Serivce(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\n\ndatabase.add('a', { item: 1 }, function (error) {\n    if (error) throw error\n    reactor.set('a')\n})\n```\n\nNo matter how man times you call check with the value 'a', you will only be\nadding one work entry into the queue for the value 'a'. The `check` method will\nnot add another entry into the work queue for the value 'a' until the current\nentry is consumed by the work method.\n\nReactors create a separate asynchronous stack in which to do your work. Within\nthat stack, you're supposed to handle any errors. There is no way for any\nasynchronous error or thrown exception to propagate out to the method that\ncalled `push` or `check`. If an asynchronous error is returned to the callback,\nReactor will raise an uncatchable exception guaranteed to unwind your program.\n\nThe guarantee is a Good Thing. It means that you won't swallow errors, you won't\nhave exceptions caught by overly clever error handlers and fed to some event\nhandler you know nothing about.\n\nIf you are using an intelligent error-first control library like Cadence (or\nStreamline.js), then it is easy to wrap your work in an asynchronous try/catch\nblock and recover if if you can, or log and continue.\n\n*TK: Cadence receipes; try/catch, parallel waits.*\n\n#### `new Reactor(operation, [turnstile])`\n\nCreate a new Reactor with an `operation` which is either an asynchronous\nfunction or an object with an `object` and `method` property.\n\n#### `reactor.push(work, [callback])`\n\nPush work into the queue. If given a `callback`, the callback will be called\nwhen the work is consumed. The `callback` will never return value because errors\ndo not propagate up and out of the work queue.\n\nDo not mix with `set` and `check`.\n\n#### `reactor.set(key, [callback])`\n\nAdd a single item of work the work queue that will call the worker with optional\nkey. If given a `callback`, the callback will be called when the work is\nconsumed. The `callback` will never return value because errors do not propagate\nup and out of the work queue.\n\nDo not mix with `push` and `check`.\n\n#### `reactor.check([callback])`\n\nAdds a single, undistinguished work entry into the work queue if no such entry\nalready exists. If given a `callback`, the callback will be called when the work\nis consumed. The `callback` will never return value because errors do not\npropagate up and out of the work queue.\n\n\nDo not mix with `push` and `set`.\n","readmeFilename":"README.md","gitHead":"acb87a45d16b9a26af64448f1549aca7e7b58e3f","_id":"reactor@10.6.2","_npmVersion":"6.1.0","_nodeVersion":"10.4.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-6Hr2GaxXahKmYI0fULLuq1xDYz5N0mWkj/dZsbQzkawzrk+pKIzs6LmnESfY+5+wCVnBXzPq96nd54n4UmclHA==","shasum":"35a281da33d529f7bd6e642d9a75635aa3c76278","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.6.2.tgz","fileCount":7,"unpackedSize":22716,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb00B/CRA9TVsSAnZWagAAN30P/0MPs1KHGce4YIl72hyS\n8zyg/K4V6bB8TsDSo1hynHuXOYCqNZSCa320KbLi/kboO7N3xZOUt5MTM3Lo\nHgV2aqCrnRoHba85udQE0IazzbfJvgNirp4Zi+W0T+c050MV3rjOpFXi/fpW\nmfuSPoSfzHLI1hKpdbt2slQsMOKaKGDfNOSTeGR5MnPk/rZZkZazsviTV5OZ\nyC0e2E+rk+iu0EmMb4OfojRqm8cTwGBTiuiucRSjweL8UmlHuRb+3mfug9zy\n+mY1V8lmIV7eUwlOSA62O/Vz+cNhtyW2TULWrJZOs2D0dzHFF8mLqavTxyev\nX55bjSe8VFVq1q16p1NrWTGqojlgk04hDtExwZ1BRvtbxDcItBcoxlTb0phc\nPCd/h1Fx7+2g2VlNtjS3Tv0NVRO22Laug1Hl6N6fTG7FFl+jXdrN+9jcwe5M\nkGA9KNQUuNFf3r6eeeBgdCwcuGvpZNrAebsDvtZKZY0gWu3XXS9ABpNATj4c\n6f+YNy3fZm+/ZjD3/tVUKtL+VmTIweA1sr5c8MOgPcJ5pghelfhlVhnc+ZPQ\nfubmpQtK+Qs0Sfq5ClRbKwYGO0tvaW+91WSkb0LaWcMlvhdaeIs+VsRCdaz5\nIiJzrP1xxZlxsbDlWTpLlS0T7Oh+CJ2vsykjbpPKE5Azqt5Q1GPs9Db5ZH26\nHEpu\r\n=ZNK6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCkaUq3BaOUwR31FZx3/As37AKkZmv8yGpkB8Xawhr+vAIhANL8hOQ2773gkdL4LruCV9op/Ujl90HuwqWUdWqnw/tF"}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_10.6.2_1540571262342_0.1271609401863758"},"_hasShrinkwrap":false},"10.6.3":{"name":"reactor","version":"10.6.3","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.3","cadence":"1.0.x","connect":"3.6.6","delta":"1.4.x","dispatch":"1.0.2","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"6.3.x","magazine":"3.2.x","content-type":"1.0.4","nop":"1.0.x","operation":"2.0.x","rescue":"4.1.x","turnstile":"4.6.x"},"devDependencies":{"proof":"3.0.x","vizsla":"12.13.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"readme":"[![Build Status](https://travis-ci.org/bigeasy/reactor.svg?branch=master)](https://travis-ci.org/bigeasy/reactor) [![Coverage Status](https://coveralls.io/repos/bigeasy/reactor/badge.svg?branch=master&service=github)](https://coveralls.io/github/bigeasy/reactor?branch=master)\n\nAn asynchronous work queue. Reactor takes work and feeds it to an asynchronous\nfunction that accepts an error-first callback.\n\nReactor is part of the [Cadence](https://github.com/bigeasy/cadence) Universe.\nIt is designed with Cadence in mind, but you can use it with your own eror-first\ncallbacks, just follow the rules.\n\nReactor is based on [Turnstile](https://github.com/bigeasy/turnstile) so it can\nperform parallel operations in an orderly fashion;\n\n * with a runtime adjustable limit on the number of concurrent operations,\n * with a fifo queue that can be measured and monitored instead of using the\n event loop as an implicit queue,\n * with a mechanism to actively time out messages in the queue that have grown\n stale.\n\nWithout a queue, parallelism is unmanagable.\n\nHere's an example of how to use Reactor to process a queue managed by Reactor.\n\n```javascript\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, value, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        this._processor.process(values, callback)\n    }\n}\n```\n\nThe first argument to your callback function is going to be a status object.\nThe most interesting property of that object is going to the `timedout`\nproperty, which will be `true` if the time since the work was sitting in the\nqueue for too long. If your work has timed out, return as soon as possible.\nOtherwise, do your work.\n\nNow you can create a Reactor and push work into your Reactor.\n\n```javascript\nvar service = new Service(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\nreactor.push({ item: 1 }, function () {\n    console.log('item consumed')\n})\nreactor.push({ item: 2 })\n```\n\nYou can either push and wait, or else you can push and forget. To push and wait,\nprovide a callback. It will be called when the work has been consumed. To push\nand forget, just submit your work and move on.\n\nThere are some times when you want to keep a queue outside of the Reactor,\neither you have some special grouping or gathering you want to perform, of else\nyou want to check an external source for work. In this case you would use\nReactor as a set of items to check.\n\nLet's create a service that pulls work from a database.\n\n```javascript\nvar database = require('database')\n\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, key, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        database.get(key, function (error, value) {\n            if (error) conosle.log(error.stack)\n            else if (value == null) callback()\n            else this._processor.process(value, callback)\n        })\n    }\n}\n```\n\nIn the above we use a key to pull a value from the database. If the value does\nnot exists in the database, then return immediately, but if it does we call the\nprocessor with the work.\n\nLet's put work in the database and flag\n\n```javascript\nvar database = require('database')\nvar service = new Serivce(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\n\ndatabase.add('a', { item: 1 }, function (error) {\n    if (error) throw error\n    reactor.set('a')\n})\n```\n\nNo matter how man times you call check with the value 'a', you will only be\nadding one work entry into the queue for the value 'a'. The `check` method will\nnot add another entry into the work queue for the value 'a' until the current\nentry is consumed by the work method.\n\nReactors create a separate asynchronous stack in which to do your work. Within\nthat stack, you're supposed to handle any errors. There is no way for any\nasynchronous error or thrown exception to propagate out to the method that\ncalled `push` or `check`. If an asynchronous error is returned to the callback,\nReactor will raise an uncatchable exception guaranteed to unwind your program.\n\nThe guarantee is a Good Thing. It means that you won't swallow errors, you won't\nhave exceptions caught by overly clever error handlers and fed to some event\nhandler you know nothing about.\n\nIf you are using an intelligent error-first control library like Cadence (or\nStreamline.js), then it is easy to wrap your work in an asynchronous try/catch\nblock and recover if if you can, or log and continue.\n\n*TK: Cadence receipes; try/catch, parallel waits.*\n\n#### `new Reactor(operation, [turnstile])`\n\nCreate a new Reactor with an `operation` which is either an asynchronous\nfunction or an object with an `object` and `method` property.\n\n#### `reactor.push(work, [callback])`\n\nPush work into the queue. If given a `callback`, the callback will be called\nwhen the work is consumed. The `callback` will never return value because errors\ndo not propagate up and out of the work queue.\n\nDo not mix with `set` and `check`.\n\n#### `reactor.set(key, [callback])`\n\nAdd a single item of work the work queue that will call the worker with optional\nkey. If given a `callback`, the callback will be called when the work is\nconsumed. The `callback` will never return value because errors do not propagate\nup and out of the work queue.\n\nDo not mix with `push` and `check`.\n\n#### `reactor.check([callback])`\n\nAdds a single, undistinguished work entry into the work queue if no such entry\nalready exists. If given a `callback`, the callback will be called when the work\nis consumed. The `callback` will never return value because errors do not\npropagate up and out of the work queue.\n\n\nDo not mix with `push` and `set`.\n","readmeFilename":"README.md","gitHead":"5f62ecdcc5eea14f7532320a205a49e73931c6a0","_id":"reactor@10.6.3","_npmVersion":"6.1.0","_nodeVersion":"10.4.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-T9iA88y19l9cp1+YY7m29S4T70Hy6INcQKH4VR0ELvSUtOHD+QiNV0BG29tG7XM+nO2CgctPJZo3EAhG9zuOFg==","shasum":"fe8348c401ef4d566251f7352854207b2665b79d","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.6.3.tgz","fileCount":7,"unpackedSize":22696,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb1DwPCRA9TVsSAnZWagAAFDcQAJggGXD9YyjVA8OHgU9f\n/EoeOIXVPcafR9UonV23ANhRHpYuKvWrJrsXnLl8L+j5zw3XMTLI1wP9daBT\ngKcp9Pe8pBbGmYUhlvAK9Ijd5o7mx6ft6PFm9EH6kFNAQ9lahZtd+u19pzbP\nvuJFOHgrh4WKHBgqXPy4lSlsPfSeWmhRL76Q0VzkB8MFGrNzHZsFRYwFLkTW\nU368CKcLMrf3JxBVy65eIVHToChoolJFNfBIbiALav6lBkdS/NMo/X4fs8lC\ntxwSU0tL/TUAk4a3Tnwjhf0jtIequSdwAByQVnd0UgDU5Pi8RhDrgZvhab3k\nPapsh94RGSlyv4D2Km0qIbLxxdfEgAYyvQ/KlT34mx7DnxxzKw1vPhSSXUaD\nRQM6THR91s6mUTr7b8nxnCuty+GDlarBFkGcNiuCb6evNuV5MQb7KHDKFAj8\nEh3vo57ZdqJc1Vm8KlY+kbtoB0t026381JdZI+sd4ViNgdSrZOyR0oKL1+pG\nbMPGun7CSuJiwmKYE8Y6ieQFg9+FTh89X71Y5P5GPgfTKWyfA6/N4+POyHIA\nl30B4eS1y/riVVMBUu55LroAAiJut97VPpQe26YwmP2EZvqzoUmZQEhPxdrr\nvkzRU2txjLXgj6BNvifzzXxlOAP7XAFeJ5b0f0NJ4OfqJ2RshtFojjJFAooa\nLbTG\r\n=iJ1+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCgBZJNn0p5HXlZqicgzazMVrbgXgup0Ni3tCXkRJmAWwIgHlc+CY4YeB8fsv7KvrxooMhd20WLM7obLNiqsOadYow="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_10.6.3_1540635663181_0.2022613403385205"},"_hasShrinkwrap":false},"10.7.0":{"name":"reactor","version":"10.7.0","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.3","cadence":"1.0.x","connect":"3.6.6","delta":"1.4.x","dispatch":"1.0.2","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"6.3.x","magazine":"3.2.x","content-type":"1.0.4","nop":"1.0.x","operation":"2.0.x","rescue":"4.1.x","turnstile":"4.6.x"},"devDependencies":{"proof":"3.0.x","vizsla":"12.14.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"readme":"[![Build Status](https://travis-ci.org/bigeasy/reactor.svg?branch=master)](https://travis-ci.org/bigeasy/reactor) [![Coverage Status](https://coveralls.io/repos/bigeasy/reactor/badge.svg?branch=master&service=github)](https://coveralls.io/github/bigeasy/reactor?branch=master)\n\nAn asynchronous work queue. Reactor takes work and feeds it to an asynchronous\nfunction that accepts an error-first callback.\n\nReactor is part of the [Cadence](https://github.com/bigeasy/cadence) Universe.\nIt is designed with Cadence in mind, but you can use it with your own eror-first\ncallbacks, just follow the rules.\n\nReactor is based on [Turnstile](https://github.com/bigeasy/turnstile) so it can\nperform parallel operations in an orderly fashion;\n\n * with a runtime adjustable limit on the number of concurrent operations,\n * with a fifo queue that can be measured and monitored instead of using the\n event loop as an implicit queue,\n * with a mechanism to actively time out messages in the queue that have grown\n stale.\n\nWithout a queue, parallelism is unmanagable.\n\nHere's an example of how to use Reactor to process a queue managed by Reactor.\n\n```javascript\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, value, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        this._processor.process(values, callback)\n    }\n}\n```\n\nThe first argument to your callback function is going to be a status object.\nThe most interesting property of that object is going to the `timedout`\nproperty, which will be `true` if the time since the work was sitting in the\nqueue for too long. If your work has timed out, return as soon as possible.\nOtherwise, do your work.\n\nNow you can create a Reactor and push work into your Reactor.\n\n```javascript\nvar service = new Service(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\nreactor.push({ item: 1 }, function () {\n    console.log('item consumed')\n})\nreactor.push({ item: 2 })\n```\n\nYou can either push and wait, or else you can push and forget. To push and wait,\nprovide a callback. It will be called when the work has been consumed. To push\nand forget, just submit your work and move on.\n\nThere are some times when you want to keep a queue outside of the Reactor,\neither you have some special grouping or gathering you want to perform, of else\nyou want to check an external source for work. In this case you would use\nReactor as a set of items to check.\n\nLet's create a service that pulls work from a database.\n\n```javascript\nvar database = require('database')\n\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, key, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        database.get(key, function (error, value) {\n            if (error) conosle.log(error.stack)\n            else if (value == null) callback()\n            else this._processor.process(value, callback)\n        })\n    }\n}\n```\n\nIn the above we use a key to pull a value from the database. If the value does\nnot exists in the database, then return immediately, but if it does we call the\nprocessor with the work.\n\nLet's put work in the database and flag\n\n```javascript\nvar database = require('database')\nvar service = new Serivce(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\n\ndatabase.add('a', { item: 1 }, function (error) {\n    if (error) throw error\n    reactor.set('a')\n})\n```\n\nNo matter how man times you call check with the value 'a', you will only be\nadding one work entry into the queue for the value 'a'. The `check` method will\nnot add another entry into the work queue for the value 'a' until the current\nentry is consumed by the work method.\n\nReactors create a separate asynchronous stack in which to do your work. Within\nthat stack, you're supposed to handle any errors. There is no way for any\nasynchronous error or thrown exception to propagate out to the method that\ncalled `push` or `check`. If an asynchronous error is returned to the callback,\nReactor will raise an uncatchable exception guaranteed to unwind your program.\n\nThe guarantee is a Good Thing. It means that you won't swallow errors, you won't\nhave exceptions caught by overly clever error handlers and fed to some event\nhandler you know nothing about.\n\nIf you are using an intelligent error-first control library like Cadence (or\nStreamline.js), then it is easy to wrap your work in an asynchronous try/catch\nblock and recover if if you can, or log and continue.\n\n*TK: Cadence receipes; try/catch, parallel waits.*\n\n#### `new Reactor(operation, [turnstile])`\n\nCreate a new Reactor with an `operation` which is either an asynchronous\nfunction or an object with an `object` and `method` property.\n\n#### `reactor.push(work, [callback])`\n\nPush work into the queue. If given a `callback`, the callback will be called\nwhen the work is consumed. The `callback` will never return value because errors\ndo not propagate up and out of the work queue.\n\nDo not mix with `set` and `check`.\n\n#### `reactor.set(key, [callback])`\n\nAdd a single item of work the work queue that will call the worker with optional\nkey. If given a `callback`, the callback will be called when the work is\nconsumed. The `callback` will never return value because errors do not propagate\nup and out of the work queue.\n\nDo not mix with `push` and `check`.\n\n#### `reactor.check([callback])`\n\nAdds a single, undistinguished work entry into the work queue if no such entry\nalready exists. If given a `callback`, the callback will be called when the work\nis consumed. The `callback` will never return value because errors do not\npropagate up and out of the work queue.\n\n\nDo not mix with `push` and `set`.\n","readmeFilename":"README.md","gitHead":"0b7aa221aa3fcceafa1622b4481a2ca1e6d61c17","_id":"reactor@10.7.0","_npmVersion":"6.1.0","_nodeVersion":"10.4.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-0j5ZMYfV89Xe1kftu+WSOOMYfMJvOu6AXvEzb22ebXgSmYcZcHe1hrykFcpQjh5JcA5RKfzobn0bSMIaQ53CYQ==","shasum":"073e0c8a10fc67a71db79840a44f5265a0c3a4cb","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.7.0.tgz","fileCount":7,"unpackedSize":22696,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb2x0dCRA9TVsSAnZWagAAm0MP/1DddIW461MDL7Ku+RX4\n63p4DPhjVNapjw0InzxlnaVQd/gC7TjgYSg9vJ8k+xByLED5kRt9+z0XUkPe\n6NVbJHy+AO4Pu+ij8lAs+wE55lgU8vZYtQsrN3mZojzJ0a8bdUxRaLhfUUT9\nXnMhrNrXIg7CF0rV/xPp0XYkk35TP3gCT/AoUIAVOEmE9CKuQm5ge2yklrFX\nIaES6hgpMNRXlJfaXR1d0kJTec5Uob9UCeEARuntBhrfCoE3yQ2xr/rqyQ/5\nQDPPUJ/MxsCMSCIAPQkyHkRws0RAeT7fYmV0efJq3WjfxJwJs2rdXbCf9OGp\nzdLqYFEkJmaYtXKFDk0WLTSQ58rpjeVH4zlFlTtjNgKzc/yHj8UsED1jJd0u\n38jxdn5SazgM80qCkFuP1RVxiiBbFHyHWWzKqw/4o17qdrLa0ftDyLdf9wk8\ns6B75LUiks0UnUCFqB6Un+NZuw7Xm46OAaA7wlDOXvR4OOTqTUYhsNfH5qnU\nWorx4VNPEmT90rywb5utPgGwi650R8S/OK5zjE+GJ5gwPS8DgKQ2LtLees88\nLSkrjUPa1JWvOuGmza4vBycGbAGIXXshmi2j/gmtXYx7FFQfK8rIJnyUC44K\nYDI0g1Hmvy4YSIqQd5en4B2AJ8my7/248V48boPPI05ueqxq2R9yGWOspIvD\n8J2G\r\n=8BqX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGp4EDVluQweW8zfO9Rix0QcpinGflOiGEB+pmxPmAMLAiBdmwS04jqjhLIH2X0Vc0tFjcPD1gw4DyOStydQ3D/w2g=="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_10.7.0_1541086492417_0.30615712119392313"},"_hasShrinkwrap":false},"10.8.0":{"name":"reactor","version":"10.8.0","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.3","cadence":"1.0.x","connect":"3.6.6","delta":"1.4.x","dispatch":"1.0.2","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"6.3.x","magazine":"3.2.x","content-type":"1.0.4","nop":"1.0.x","operation":"2.0.x","rescue":"4.1.x","turnstile":"4.6.x"},"devDependencies":{"proof":"3.0.x","vizsla":"12.14.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"readme":"[![Build Status](https://travis-ci.org/bigeasy/reactor.svg?branch=master)](https://travis-ci.org/bigeasy/reactor) [![Coverage Status](https://coveralls.io/repos/bigeasy/reactor/badge.svg?branch=master&service=github)](https://coveralls.io/github/bigeasy/reactor?branch=master)\n\nAn asynchronous work queue. Reactor takes work and feeds it to an asynchronous\nfunction that accepts an error-first callback.\n\nReactor is part of the [Cadence](https://github.com/bigeasy/cadence) Universe.\nIt is designed with Cadence in mind, but you can use it with your own eror-first\ncallbacks, just follow the rules.\n\nReactor is based on [Turnstile](https://github.com/bigeasy/turnstile) so it can\nperform parallel operations in an orderly fashion;\n\n * with a runtime adjustable limit on the number of concurrent operations,\n * with a fifo queue that can be measured and monitored instead of using the\n event loop as an implicit queue,\n * with a mechanism to actively time out messages in the queue that have grown\n stale.\n\nWithout a queue, parallelism is unmanagable.\n\nHere's an example of how to use Reactor to process a queue managed by Reactor.\n\n```javascript\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, value, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        this._processor.process(values, callback)\n    }\n}\n```\n\nThe first argument to your callback function is going to be a status object.\nThe most interesting property of that object is going to the `timedout`\nproperty, which will be `true` if the time since the work was sitting in the\nqueue for too long. If your work has timed out, return as soon as possible.\nOtherwise, do your work.\n\nNow you can create a Reactor and push work into your Reactor.\n\n```javascript\nvar service = new Service(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\nreactor.push({ item: 1 }, function () {\n    console.log('item consumed')\n})\nreactor.push({ item: 2 })\n```\n\nYou can either push and wait, or else you can push and forget. To push and wait,\nprovide a callback. It will be called when the work has been consumed. To push\nand forget, just submit your work and move on.\n\nThere are some times when you want to keep a queue outside of the Reactor,\neither you have some special grouping or gathering you want to perform, of else\nyou want to check an external source for work. In this case you would use\nReactor as a set of items to check.\n\nLet's create a service that pulls work from a database.\n\n```javascript\nvar database = require('database')\n\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, key, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        database.get(key, function (error, value) {\n            if (error) conosle.log(error.stack)\n            else if (value == null) callback()\n            else this._processor.process(value, callback)\n        })\n    }\n}\n```\n\nIn the above we use a key to pull a value from the database. If the value does\nnot exists in the database, then return immediately, but if it does we call the\nprocessor with the work.\n\nLet's put work in the database and flag\n\n```javascript\nvar database = require('database')\nvar service = new Serivce(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\n\ndatabase.add('a', { item: 1 }, function (error) {\n    if (error) throw error\n    reactor.set('a')\n})\n```\n\nNo matter how man times you call check with the value 'a', you will only be\nadding one work entry into the queue for the value 'a'. The `check` method will\nnot add another entry into the work queue for the value 'a' until the current\nentry is consumed by the work method.\n\nReactors create a separate asynchronous stack in which to do your work. Within\nthat stack, you're supposed to handle any errors. There is no way for any\nasynchronous error or thrown exception to propagate out to the method that\ncalled `push` or `check`. If an asynchronous error is returned to the callback,\nReactor will raise an uncatchable exception guaranteed to unwind your program.\n\nThe guarantee is a Good Thing. It means that you won't swallow errors, you won't\nhave exceptions caught by overly clever error handlers and fed to some event\nhandler you know nothing about.\n\nIf you are using an intelligent error-first control library like Cadence (or\nStreamline.js), then it is easy to wrap your work in an asynchronous try/catch\nblock and recover if if you can, or log and continue.\n\n*TK: Cadence receipes; try/catch, parallel waits.*\n\n#### `new Reactor(operation, [turnstile])`\n\nCreate a new Reactor with an `operation` which is either an asynchronous\nfunction or an object with an `object` and `method` property.\n\n#### `reactor.push(work, [callback])`\n\nPush work into the queue. If given a `callback`, the callback will be called\nwhen the work is consumed. The `callback` will never return value because errors\ndo not propagate up and out of the work queue.\n\nDo not mix with `set` and `check`.\n\n#### `reactor.set(key, [callback])`\n\nAdd a single item of work the work queue that will call the worker with optional\nkey. If given a `callback`, the callback will be called when the work is\nconsumed. The `callback` will never return value because errors do not propagate\nup and out of the work queue.\n\nDo not mix with `push` and `check`.\n\n#### `reactor.check([callback])`\n\nAdds a single, undistinguished work entry into the work queue if no such entry\nalready exists. If given a `callback`, the callback will be called when the work\nis consumed. The `callback` will never return value because errors do not\npropagate up and out of the work queue.\n\n\nDo not mix with `push` and `set`.\n","readmeFilename":"README.md","gitHead":"ef0d295d3087a3e4786ac72b17d45c0f344eb866","_id":"reactor@10.8.0","_npmVersion":"6.1.0","_nodeVersion":"10.4.0","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-iqh/nLdGVA7syy8C+peUBITc8FajEEUrvlF+2FVEErlAsNFS45MlnanPKtqLZr4cSOxQBwT+ftbMMkhXCc674g==","shasum":"ac614f24f229fd1de7daa5e5903d782ae20a0703","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.8.0.tgz","fileCount":6,"unpackedSize":22525,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb3xiLCRA9TVsSAnZWagAA/gsP/0Ax7am6ZceGCK0LqezO\ngKEMfwrvNqKzTO4oiGgv/Vjxzv87YbAp1wu4LXDVL7O9T7HhWXhAVk4ivYtp\nngXDUgpGyPp7U6IBAPCq2VEWtgyGkKVoz02O8ksHtC6RpeWXLbOHA39V2ao4\nQCt8qPkbhx1rFqs516NHiZv7yDQqNUM+kakmREVecouMW8LKGoPX9YnXpN0F\nADzsCyGso4qbJLX6DkRz67DcIKN5KmeFKaCP5cIM7vckCrkfQDRTvnQoKgnc\nicFfxTy6EN6lyQ0SAwa4HFDCGaimlv34mxX3JTV5n7EG10+EVx/LXjD1tvU3\nQl0LT+Wpwk5PwjYXs/wuVTFD8zXdLvHbryuxhogtlEjie3vt20mULDuj+ZqF\nRwukiYcsX+VwA5qTQuvjVglNVSVZxrwZgDYsFfUsXQI3iWX3k7RzNzF2Y9c0\n4EjPGJ9DtxCRMT0T5yoxg/3wDQr33t826yOTRw1W68UwxU7S9AO6gntasQAK\ntJBOtfYLydVo3jG9JYjhLswOCl62h8xoYnaJ+56bpzEC2Fap/uXLY5dYh5SD\nEo2UwA7ajFH/tdkVJ48yDsrrIB+sFhXYD379cNT5tgw6+F9PXfYGQ5QHjnHi\nFfl2UmJQzV997Rab9vMki44D9S3yuaDcMAx2yK10Ix1eu8tD1LFhHASv4bcq\nIV4u\r\n=oosM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIARf5g2VBEzSZjs0h8nLk726h/lKegVziEWJR9XMsYjnAiBeyEQMjn6e5oy3x715ksoNyc29MvZVayzNmGLWzuhRjQ=="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_10.8.0_1541347466167_0.3775404925489896"},"_hasShrinkwrap":false},"10.9.0":{"name":"reactor","version":"10.9.0","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.3","cadence":"1.0.x","connect":"3.6.6","delta":"1.4.x","dispatch":"1.0.2","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"6.4.x","magazine":"3.2.x","content-type":"1.0.4","nop":"1.0.x","operation":"2.0.x","rescue":"4.1.x","turnstile":"4.8.x"},"devDependencies":{"proof":"3.0.x","vizsla":"12.15.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"readme":"[![Build Status](https://travis-ci.org/bigeasy/reactor.svg?branch=master)](https://travis-ci.org/bigeasy/reactor) [![Coverage Status](https://coveralls.io/repos/bigeasy/reactor/badge.svg?branch=master&service=github)](https://coveralls.io/github/bigeasy/reactor?branch=master)\n\nAn asynchronous work queue. Reactor takes work and feeds it to an asynchronous\nfunction that accepts an error-first callback.\n\nReactor is part of the [Cadence](https://github.com/bigeasy/cadence) Universe.\nIt is designed with Cadence in mind, but you can use it with your own eror-first\ncallbacks, just follow the rules.\n\nReactor is based on [Turnstile](https://github.com/bigeasy/turnstile) so it can\nperform parallel operations in an orderly fashion;\n\n * with a runtime adjustable limit on the number of concurrent operations,\n * with a fifo queue that can be measured and monitored instead of using the\n event loop as an implicit queue,\n * with a mechanism to actively time out messages in the queue that have grown\n stale.\n\nWithout a queue, parallelism is unmanagable.\n\nHere's an example of how to use Reactor to process a queue managed by Reactor.\n\n```javascript\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, value, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        this._processor.process(values, callback)\n    }\n}\n```\n\nThe first argument to your callback function is going to be a status object.\nThe most interesting property of that object is going to the `timedout`\nproperty, which will be `true` if the time since the work was sitting in the\nqueue for too long. If your work has timed out, return as soon as possible.\nOtherwise, do your work.\n\nNow you can create a Reactor and push work into your Reactor.\n\n```javascript\nvar service = new Service(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\nreactor.push({ item: 1 }, function () {\n    console.log('item consumed')\n})\nreactor.push({ item: 2 })\n```\n\nYou can either push and wait, or else you can push and forget. To push and wait,\nprovide a callback. It will be called when the work has been consumed. To push\nand forget, just submit your work and move on.\n\nThere are some times when you want to keep a queue outside of the Reactor,\neither you have some special grouping or gathering you want to perform, of else\nyou want to check an external source for work. In this case you would use\nReactor as a set of items to check.\n\nLet's create a service that pulls work from a database.\n\n```javascript\nvar database = require('database')\n\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, key, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        database.get(key, function (error, value) {\n            if (error) conosle.log(error.stack)\n            else if (value == null) callback()\n            else this._processor.process(value, callback)\n        })\n    }\n}\n```\n\nIn the above we use a key to pull a value from the database. If the value does\nnot exists in the database, then return immediately, but if it does we call the\nprocessor with the work.\n\nLet's put work in the database and flag\n\n```javascript\nvar database = require('database')\nvar service = new Serivce(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\n\ndatabase.add('a', { item: 1 }, function (error) {\n    if (error) throw error\n    reactor.set('a')\n})\n```\n\nNo matter how man times you call check with the value 'a', you will only be\nadding one work entry into the queue for the value 'a'. The `check` method will\nnot add another entry into the work queue for the value 'a' until the current\nentry is consumed by the work method.\n\nReactors create a separate asynchronous stack in which to do your work. Within\nthat stack, you're supposed to handle any errors. There is no way for any\nasynchronous error or thrown exception to propagate out to the method that\ncalled `push` or `check`. If an asynchronous error is returned to the callback,\nReactor will raise an uncatchable exception guaranteed to unwind your program.\n\nThe guarantee is a Good Thing. It means that you won't swallow errors, you won't\nhave exceptions caught by overly clever error handlers and fed to some event\nhandler you know nothing about.\n\nIf you are using an intelligent error-first control library like Cadence (or\nStreamline.js), then it is easy to wrap your work in an asynchronous try/catch\nblock and recover if if you can, or log and continue.\n\n*TK: Cadence receipes; try/catch, parallel waits.*\n\n#### `new Reactor(operation, [turnstile])`\n\nCreate a new Reactor with an `operation` which is either an asynchronous\nfunction or an object with an `object` and `method` property.\n\n#### `reactor.push(work, [callback])`\n\nPush work into the queue. If given a `callback`, the callback will be called\nwhen the work is consumed. The `callback` will never return value because errors\ndo not propagate up and out of the work queue.\n\nDo not mix with `set` and `check`.\n\n#### `reactor.set(key, [callback])`\n\nAdd a single item of work the work queue that will call the worker with optional\nkey. If given a `callback`, the callback will be called when the work is\nconsumed. The `callback` will never return value because errors do not propagate\nup and out of the work queue.\n\nDo not mix with `push` and `check`.\n\n#### `reactor.check([callback])`\n\nAdds a single, undistinguished work entry into the work queue if no such entry\nalready exists. If given a `callback`, the callback will be called when the work\nis consumed. The `callback` will never return value because errors do not\npropagate up and out of the work queue.\n\n\nDo not mix with `push` and `set`.\n","readmeFilename":"README.md","gitHead":"9df77c1bec8bb8577579002168bb750837fb4a45","_id":"reactor@10.9.0","_npmVersion":"6.1.0","_nodeVersion":"10.4.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-yLmgO6+xFEQiH3D2Pi771oV6EUJNIeRDafdAeUZT1ZQS8GCiCDZ/RTTNCO9sLvDDXUdpzt2vtaVAGvxhsFVaKA==","shasum":"79336e4d9a1d5898db9a6a35a42fd0d2536fdc8c","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.9.0.tgz","fileCount":6,"unpackedSize":22533,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb8pOoCRA9TVsSAnZWagAAqBIQAIv5ED2r7Z2kPfBT/dUW\nOIX+Acy+E45ewi8SrgYMI8spvGoWqzQYuG6SfwqR9/2+dKV3AGRSFIt+bYE0\n/mq1/MDxyW2qAuqQfpWgyJgSNIWN4SHUOM+TgEq4Dvh5j4K2xSQnA7FPP9UL\n33od2roCgReGXB2N4mu8wUsgQ1ASrxurKQ5LiheAY0066lh6jevQnQ6HDg15\nhsck/xTdKgB5F3EHDJrfvHL3uoINwV0cPG74RcYKtg+waw92zP7rf0oyIx76\nH+GWbeScHsDq79rogQWNMuWIJiqtfBMzwDsH1NRnAr19xa1RtBXCmvdxgwHJ\nHEoo0T+YNAyggZyGU2ojndLIwgPp3Vpfu+SMRD48gxiFUO0L3f2yRUwnSB30\nfp1VvFVSgDpFJaEgOPnvlD1KloWQ2khqz6oRb+VUmIuIx1yFmFJv2wggjidH\naTdB4OgF7uvggw9YkD1C8MAYnprfK9racyAOlS7avd7UV+/s15H2gC5c1cGl\nKMHNMr71BqOMZe0nVg5u2wZtIu2xX9bQpT0VudpH9tWInmm14swgirP5Ha/9\nNT3ZCjW2ne8tKLh8pcIyJmZM/auHplg17Gqt5TELql7RxzioNylArAARLcKO\nz8q9iTaAWgAIEwQ/CtuvMa63/jpVmrXuMjienuV4rjJGKpZi+WP1l8SPwXP8\n47DF\r\n=iud3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCiGV7FQE1s0w6Mrv3zBhhELqhYYHhGAqoiyawERFHxaQIhALS3s9WaepjRXSYwmMeyaYyw2Ft3obq7sIwQie1jDq6V"}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_10.9.0_1542624167953_0.9643043563765372"},"_hasShrinkwrap":false},"10.10.0":{"name":"reactor","version":"10.10.0","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.3","cadence":"2.0.x","connect":"3.6.6","delta":"3.0.x","dispatch":"1.0.2","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"6.4.x","magazine":"4.0.x","content-type":"1.0.4","nop":"1.0.x","operation":"4.0.x","rescue":"4.2.x","turnstile":"4.9.x"},"devDependencies":{"proof":"5.0.x","vizsla":"12.16.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"readme":"[![Build Status](https://travis-ci.org/bigeasy/reactor.svg?branch=master)](https://travis-ci.org/bigeasy/reactor) [![Coverage Status](https://coveralls.io/repos/bigeasy/reactor/badge.svg?branch=master&service=github)](https://coveralls.io/github/bigeasy/reactor?branch=master)\n\nAn asynchronous work queue. Reactor takes work and feeds it to an asynchronous\nfunction that accepts an error-first callback.\n\nReactor is part of the [Cadence](https://github.com/bigeasy/cadence) Universe.\nIt is designed with Cadence in mind, but you can use it with your own eror-first\ncallbacks, just follow the rules.\n\nReactor is based on [Turnstile](https://github.com/bigeasy/turnstile) so it can\nperform parallel operations in an orderly fashion;\n\n * with a runtime adjustable limit on the number of concurrent operations,\n * with a fifo queue that can be measured and monitored instead of using the\n event loop as an implicit queue,\n * with a mechanism to actively time out messages in the queue that have grown\n stale.\n\nWithout a queue, parallelism is unmanagable.\n\nHere's an example of how to use Reactor to process a queue managed by Reactor.\n\n```javascript\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, value, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        this._processor.process(values, callback)\n    }\n}\n```\n\nThe first argument to your callback function is going to be a status object.\nThe most interesting property of that object is going to the `timedout`\nproperty, which will be `true` if the time since the work was sitting in the\nqueue for too long. If your work has timed out, return as soon as possible.\nOtherwise, do your work.\n\nNow you can create a Reactor and push work into your Reactor.\n\n```javascript\nvar service = new Service(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\nreactor.push({ item: 1 }, function () {\n    console.log('item consumed')\n})\nreactor.push({ item: 2 })\n```\n\nYou can either push and wait, or else you can push and forget. To push and wait,\nprovide a callback. It will be called when the work has been consumed. To push\nand forget, just submit your work and move on.\n\nThere are some times when you want to keep a queue outside of the Reactor,\neither you have some special grouping or gathering you want to perform, of else\nyou want to check an external source for work. In this case you would use\nReactor as a set of items to check.\n\nLet's create a service that pulls work from a database.\n\n```javascript\nvar database = require('database')\n\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, key, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        database.get(key, function (error, value) {\n            if (error) conosle.log(error.stack)\n            else if (value == null) callback()\n            else this._processor.process(value, callback)\n        })\n    }\n}\n```\n\nIn the above we use a key to pull a value from the database. If the value does\nnot exists in the database, then return immediately, but if it does we call the\nprocessor with the work.\n\nLet's put work in the database and flag\n\n```javascript\nvar database = require('database')\nvar service = new Serivce(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\n\ndatabase.add('a', { item: 1 }, function (error) {\n    if (error) throw error\n    reactor.set('a')\n})\n```\n\nNo matter how man times you call check with the value 'a', you will only be\nadding one work entry into the queue for the value 'a'. The `check` method will\nnot add another entry into the work queue for the value 'a' until the current\nentry is consumed by the work method.\n\nReactors create a separate asynchronous stack in which to do your work. Within\nthat stack, you're supposed to handle any errors. There is no way for any\nasynchronous error or thrown exception to propagate out to the method that\ncalled `push` or `check`. If an asynchronous error is returned to the callback,\nReactor will raise an uncatchable exception guaranteed to unwind your program.\n\nThe guarantee is a Good Thing. It means that you won't swallow errors, you won't\nhave exceptions caught by overly clever error handlers and fed to some event\nhandler you know nothing about.\n\nIf you are using an intelligent error-first control library like Cadence (or\nStreamline.js), then it is easy to wrap your work in an asynchronous try/catch\nblock and recover if if you can, or log and continue.\n\n*TK: Cadence receipes; try/catch, parallel waits.*\n\n#### `new Reactor(operation, [turnstile])`\n\nCreate a new Reactor with an `operation` which is either an asynchronous\nfunction or an object with an `object` and `method` property.\n\n#### `reactor.push(work, [callback])`\n\nPush work into the queue. If given a `callback`, the callback will be called\nwhen the work is consumed. The `callback` will never return value because errors\ndo not propagate up and out of the work queue.\n\nDo not mix with `set` and `check`.\n\n#### `reactor.set(key, [callback])`\n\nAdd a single item of work the work queue that will call the worker with optional\nkey. If given a `callback`, the callback will be called when the work is\nconsumed. The `callback` will never return value because errors do not propagate\nup and out of the work queue.\n\nDo not mix with `push` and `check`.\n\n#### `reactor.check([callback])`\n\nAdds a single, undistinguished work entry into the work queue if no such entry\nalready exists. If given a `callback`, the callback will be called when the work\nis consumed. The `callback` will never return value because errors do not\npropagate up and out of the work queue.\n\n\nDo not mix with `push` and `set`.\n","readmeFilename":"README.md","gitHead":"8ea103781936df1ece4ed4a0c4e818de829fd004","_id":"reactor@10.10.0","_npmVersion":"6.1.0","_nodeVersion":"10.4.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-X+FwSL5zSpV5LvOkSmojj59V736ufTcltTAjO+uVz51ARd75THHlHbsvvv2zO9I88BkqtQS9o/2MCsyS+fBr0g==","shasum":"9591fa59768b4a3c738240ac1837a1675b2d7b9e","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.10.0.tgz","fileCount":6,"unpackedSize":22531,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb+5LOCRA9TVsSAnZWagAANEQP/i0lZp3rWsVnXcXDY9Lw\nJWSVdr/pUvWsXiO6dvnVzkswBwguKVxL7GK8ALRG/huwfNBbv+fATJ4O3pec\n9dl26komRXr93m+tZyT+jTEyEVS372KSCVDLxhMjCc0u1dup2TnfDcH0KXOW\nYfsjwx+8nlvdKSLr3gvW7OKnP4sDgC8M1o0ydUaf4768efIWkqOGSHR1NdAJ\nK8ZJ5T6iAfCtPHlnmYKE4DsB+TG6BGsiEH9UykknArNYvqDp772ww7AC1IOu\nIUlqcB2fFqhQ0wXc4Q9Raw3N7jo1qeA9qxXDB85qDUn+vNLZT/akmhXce1pf\nsKGW0PVpvckwffoEAyRcbbJLpfeKxbWd50J97k/CXSd2UQCRdi63MqnwyBuX\ndS23WQTsICcReXm6nRXu3Okp2CuDKbComJIm25R0nJwguClmctmtmB2gsuyH\nggUnCgFyaVmZmscOJk22hs3Coy+Uocj5yB3iyyi5DVY62btGNQ/NctvIby7X\nywMUMzpzXys+vCJ+UQ8xTZR6vZx3bzKeJM4wlL2e3NUehSe73e+QJGXnlqjH\nm89PpaOWTKFlR1cuSIqChx2/f77s06E4FyMNfFZVPscKpS6pUF7hM4MWb3Yq\nmVRbE6STZnNDX44uNu72wOVPwXnQJ1pR2TUhURgJ+qNGRFwh/AU1JDsKkatL\nNcO3\r\n=cz63\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGvhcV9dAfbl2puhQCykdHUv85aCIs7+BsNGsw5zFdfoAiEA/cAbi3vGIr/OpxJ/F+vFonqWAiB8MOulapNF+2fl9eE="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_10.10.0_1543213773279_0.5121398343419814"},"_hasShrinkwrap":false},"10.12.0":{"name":"reactor","version":"10.12.0","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.3","cadence":"2.0.x","connect":"3.6.6","delta":"3.0.x","dispatch":"1.0.2","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"6.4.x","magazine":"4.0.x","content-type":"1.0.4","nop":"1.0.x","operation":"4.0.x","rescue":"4.2.x","turnstile":"4.9.x"},"devDependencies":{"destructible":"0.41.x","proof":"5.0.x","vizsla":"12.17.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"readme":"[![Build Status](https://travis-ci.org/bigeasy/reactor.svg?branch=master)](https://travis-ci.org/bigeasy/reactor) [![Coverage Status](https://coveralls.io/repos/bigeasy/reactor/badge.svg?branch=master&service=github)](https://coveralls.io/github/bigeasy/reactor?branch=master)\n\nAn asynchronous work queue. Reactor takes work and feeds it to an asynchronous\nfunction that accepts an error-first callback.\n\nReactor is part of the [Cadence](https://github.com/bigeasy/cadence) Universe.\nIt is designed with Cadence in mind, but you can use it with your own eror-first\ncallbacks, just follow the rules.\n\nReactor is based on [Turnstile](https://github.com/bigeasy/turnstile) so it can\nperform parallel operations in an orderly fashion;\n\n * with a runtime adjustable limit on the number of concurrent operations,\n * with a fifo queue that can be measured and monitored instead of using the\n event loop as an implicit queue,\n * with a mechanism to actively time out messages in the queue that have grown\n stale.\n\nWithout a queue, parallelism is unmanagable.\n\nHere's an example of how to use Reactor to process a queue managed by Reactor.\n\n```javascript\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, value, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        this._processor.process(values, callback)\n    }\n}\n```\n\nThe first argument to your callback function is going to be a status object.\nThe most interesting property of that object is going to the `timedout`\nproperty, which will be `true` if the time since the work was sitting in the\nqueue for too long. If your work has timed out, return as soon as possible.\nOtherwise, do your work.\n\nNow you can create a Reactor and push work into your Reactor.\n\n```javascript\nvar service = new Service(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\nreactor.push({ item: 1 }, function () {\n    console.log('item consumed')\n})\nreactor.push({ item: 2 })\n```\n\nYou can either push and wait, or else you can push and forget. To push and wait,\nprovide a callback. It will be called when the work has been consumed. To push\nand forget, just submit your work and move on.\n\nThere are some times when you want to keep a queue outside of the Reactor,\neither you have some special grouping or gathering you want to perform, of else\nyou want to check an external source for work. In this case you would use\nReactor as a set of items to check.\n\nLet's create a service that pulls work from a database.\n\n```javascript\nvar database = require('database')\n\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, key, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        database.get(key, function (error, value) {\n            if (error) conosle.log(error.stack)\n            else if (value == null) callback()\n            else this._processor.process(value, callback)\n        })\n    }\n}\n```\n\nIn the above we use a key to pull a value from the database. If the value does\nnot exists in the database, then return immediately, but if it does we call the\nprocessor with the work.\n\nLet's put work in the database and flag\n\n```javascript\nvar database = require('database')\nvar service = new Serivce(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\n\ndatabase.add('a', { item: 1 }, function (error) {\n    if (error) throw error\n    reactor.set('a')\n})\n```\n\nNo matter how man times you call check with the value 'a', you will only be\nadding one work entry into the queue for the value 'a'. The `check` method will\nnot add another entry into the work queue for the value 'a' until the current\nentry is consumed by the work method.\n\nReactors create a separate asynchronous stack in which to do your work. Within\nthat stack, you're supposed to handle any errors. There is no way for any\nasynchronous error or thrown exception to propagate out to the method that\ncalled `push` or `check`. If an asynchronous error is returned to the callback,\nReactor will raise an uncatchable exception guaranteed to unwind your program.\n\nThe guarantee is a Good Thing. It means that you won't swallow errors, you won't\nhave exceptions caught by overly clever error handlers and fed to some event\nhandler you know nothing about.\n\nIf you are using an intelligent error-first control library like Cadence (or\nStreamline.js), then it is easy to wrap your work in an asynchronous try/catch\nblock and recover if if you can, or log and continue.\n\n*TK: Cadence receipes; try/catch, parallel waits.*\n\n#### `new Reactor(operation, [turnstile])`\n\nCreate a new Reactor with an `operation` which is either an asynchronous\nfunction or an object with an `object` and `method` property.\n\n#### `reactor.push(work, [callback])`\n\nPush work into the queue. If given a `callback`, the callback will be called\nwhen the work is consumed. The `callback` will never return value because errors\ndo not propagate up and out of the work queue.\n\nDo not mix with `set` and `check`.\n\n#### `reactor.set(key, [callback])`\n\nAdd a single item of work the work queue that will call the worker with optional\nkey. If given a `callback`, the callback will be called when the work is\nconsumed. The `callback` will never return value because errors do not propagate\nup and out of the work queue.\n\nDo not mix with `push` and `check`.\n\n#### `reactor.check([callback])`\n\nAdds a single, undistinguished work entry into the work queue if no such entry\nalready exists. If given a `callback`, the callback will be called when the work\nis consumed. The `callback` will never return value because errors do not\npropagate up and out of the work queue.\n\n\nDo not mix with `push` and `set`.\n","readmeFilename":"README.md","gitHead":"be47ecc8e3145a6035b794461b87cd714a49e842","_id":"reactor@10.12.0","_npmVersion":"6.1.0","_nodeVersion":"10.4.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-VGiAaX/JiFehBNAKPfdQMjjdNhDJ9A1u2hHbtBSReUpAfv7s/amLHG5pTfJLiKmdbcLs5OVre2HkAcRaqVs5tg==","shasum":"4b196856e9c5c58298ef30cd5eb2ff97e302ef4c","tarball":"https://registry.npmjs.org/reactor/-/reactor-10.12.0.tgz","fileCount":6,"unpackedSize":22601,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcDL6xCRA9TVsSAnZWagAAoKUQAJOBcQR6HmQu2yD+JNzO\nKyhBhAYRyedt+b8DdBmj/1h2poK6N3WSnDSbzKD9/SoVJFWG9/YEt+J21qn5\n7qQWmAzWhvWa9DKWZzvoJncgIzHfyeC2T4cAy41pyl1lAvHv+5KFA2F/C7Su\nFrFmROGfFu7WDPOdwHzJxDEDxfDzArhgnK7zPeXE26CZNViN0md+3AbjDJJ0\nnKSFn1W72QkBSp6yTpmekiel+FODNI2NE4hh1WvvdMeT+/wnzAjViAQJ9I8X\nHKndIN2+5C1pazhuk0WO8jDWUjHojYv3Jq6gBn5DqQmNgSaOk92iaUxVs+6R\nUrEOdotZWjB8gX44eTIMieWv9n34Djv7skf6gJY/RW3vNFixYEcEVN2gLJUx\nsux+SMRCF5AaZ/m572baFOeZ5RmQZdWVe9pZ+Jze2z6UZlKm1AzFW6vsSiqs\nCuulfPahOnn4/Gp37nhsDF7eexS8qr2HhWc2rWP15O8hVTywl/Usj4OcHJJV\n4fFDxbRsz5xyTbMfbm0VFPomKFFgRWAe22r68CxAEni5UiXIt/zYjGVJDYFm\nknGjKqem+ZS5CFIX4+Dzr8M3/waPHpUfhwvwy6yPWqbiMOpqsz7iT+nwMQ+3\nyURWBrPW4NNRIhgGCIjr9b5LrhJ9DSL5UAYt2YzrxvSlbMCUsX+H8ltecyCN\nfpWn\r\n=+bfX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCxAXgMF64Znbjg/c5cwsbGbF8JQaEiHv6NsIwx1QllOQIgDmusyaki1dqJFu+o/nZPEU40lpJh09fpX25Ly9LxKNE="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_10.12.0_1544339120687_0.16618531919107893"},"_hasShrinkwrap":false},"11.0.0":{"name":"reactor","version":"11.0.0","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.3","cadence":"3.0.x","connect":"3.6.6","delta":"3.0.x","dispatch":"1.0.2","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"7.0.x","magazine":"5.0.x","content-type":"1.0.4","nop":"1.0.x","operation":"5.0.x","rescue":"5.0.x","turnstile":"5.0.x"},"devDependencies":{"destructible":"0.43.x","proof":"5.0.x","vizsla":"13.0.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"3c6f82c0284833cb09b9b759fd2b0a984e21eec4","_id":"reactor@11.0.0","_npmVersion":"6.1.0","_nodeVersion":"10.4.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-FPiicKI27ttook4hN741iDQGNSIJC5+cIkcMFPa0lLUw/j8QYK6jTXxeCyv2fNftWC5VpVTDSceV7rKi34zNSA==","shasum":"72039a224b4238f97c5286338af7196ea481d01f","tarball":"https://registry.npmjs.org/reactor/-/reactor-11.0.0.tgz","fileCount":6,"unpackedSize":23061,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcMUrzCRA9TVsSAnZWagAA2xcP/1dq8L1FECIw8V1iQ5f0\nLNLHhfFCuzyrS1gj7Vw2QGkCO0vJugkngYwNtUPVDEXB4rjucLUFHM/xNr5e\nHG+VudiNCMu1g8dhJ3LY0H6UGqITDTt+4trWbeSFrWl/aN9SSCKleXdbUlGH\n9yUPa3Fuc6rCPJ9CX83w+mIGbZJOo5uVzKrnnsT6oJMmYqqjFg34DSxolNLG\nZFgZ0ULqqLrb4FYR+QPhCUlIsmNqDosazxhwi1+s4dCklOBelsZbklCmFog5\njCSUwmwDbDfxDjwCZk9EZ5Q9X7FIntrHQxFbCpkD/04hpV+RNrPs5g8ditss\nPD52uxXzhm1/db9WdKEirSdKg1Hn08db1Pvap+CBsEu//CaEJZtA3DUyc/vv\ns+6bkF8u4Y1Gk8Xu+RSheuiLPDieHmVhT2h1AFY67Mn6K0KAdg6bemnvEouA\n1voSVKJHtMhUtu2k+1x/p8Fyd6q79k0sIOTdABC2BjMT9EFFgFCYSE0TAoUr\nfkLilY6goJ6Gll+hjShyPaiHeTKRFUnjuVSPVPkA/FHMg2S+ZkbRvK/62HiS\ncF8RePFivc5YY5Ojgu37l7oAIl8RGoBMPcdrl2GNfPMV1wNvreBp+sGjFX/L\nRj6LmMrR8f72M8BW8zH13txetgdbUpsBcUqcdvgu9Db5GpmFYirJSrIfchY5\nIiRX\r\n=ymuX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDQJvMwDcQcgJWVIspgfRkuvJJygovvmk7Hy7a3PkIYIwIhANq51SwYssPdKK3dGQ+R49DJVP9fvXPAGJlU4sB/O8ig"}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_11.0.0_1546734322528_0.12998060534795752"},"_hasShrinkwrap":false},"11.0.1":{"name":"reactor","version":"11.0.1","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.3","cadence":"3.0.x","connect":"3.6.6","delta":"3.0.x","dispatch":"1.0.2","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"7.0.x","magazine":"5.0.x","content-type":"1.0.4","nop":"1.0.x","operation":"5.0.x","rescue":"5.0.x","turnstile":"5.0.x"},"devDependencies":{"destructible":"0.43.x","proof":"5.0.x","vizsla":"13.0.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"a437d2768467a11e1e901083d367431edc5d8f6c","_id":"reactor@11.0.1","_npmVersion":"6.1.0","_nodeVersion":"10.4.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-Yc7vPEDern6AD3fmNYKqbq1P77Bdfp96zpbHxFrdyMMD6Hua/OuKK3kDr0DuSZBUbXsObJMPNqW6OLRuL3pnfw==","shasum":"3ba988fb0c0cba529849965a0b6d6e8a21984d79","tarball":"https://registry.npmjs.org/reactor/-/reactor-11.0.1.tgz","fileCount":6,"unpackedSize":23081,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcM43yCRA9TVsSAnZWagAA6o8P/3rFKtvq0zAFoVe1ALnV\nmFKLM29mbD3G0LkUoaRTcBFUDgVCFAsu8+wwha90/DoVm4XzgyeKvzfyEIiJ\nIzrh1eShwwFHXvJ9gkjjSNS9bupiUPeWIgqD24VOpDCm1qGKSOfyTHGUQQEd\nqXiuLN3El6iW/HHcuK6KLeE/Mg0hJLAteKKGSBG2nJY9FyZTxb9GXyzu8+qC\n3gZLNiKf9zWv/bxSL7BUTfdIRDkL4Og4aZM53MBrwuQwThLCHzSs5ceZxRRX\n4yXncAEZ6vXmZWbOT+v0D+7XBzh5VIH9o7pleJYyjyR5+ig7IjE3V6NNDo+j\nhNLMhzONfDMhX1q72Y85tZrTuYvLEw6zvnLJksxWkoDhhJCVL7S9k5sBUsT4\nXOMGhDqtfTeWEfZqAeiOGgPdZBey1A1QiU3y6WvFMCLfHqPZIBow4rrxKjuA\nrAByoHVBeRYvTAxxXeejXOrWvNsgejKlo5FX3P6hgmxElWsM3JDmx1zvmKuK\nDmLVc8f5z3q4VVdmJaj8cLI7G1Z1gG45+fSJfVXIq7fVE7V3AKWUuG9DXdub\nFhYJsGRv8xkaWZLQMhJqGTGXA9F/CDpeGKy9gYnF6CVSZpV3414+/ZIp7kEO\nHrjburewp2XFsvoPid+ljagiTHVKts7+bq+mgIVIQi3pMcU7SYWXTuXaeItn\nsItt\r\n=H/mw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCEO7cayIvKjkV1igm70RPPjxp6UNGMbIygvnjjhXg9bgIgZPb7C3sAWwaAAh1QjjKAVZDH4WJlg58vQlUY0ZA+Io8="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_11.0.1_1546882545661_0.9539464370068211"},"_hasShrinkwrap":false},"11.0.2":{"name":"reactor","version":"11.0.2","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.3","cadence":"3.0.x","connect":"3.6.6","delta":"3.0.x","dispatch":"1.0.2","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"7.0.x","magazine":"5.0.x","content-type":"1.0.4","nop":"1.0.x","operation":"5.0.x","rescue":"5.0.x","turnstile":"5.0.x"},"devDependencies":{"destructible":"0.43.x","proof":"5.0.x","vizsla":"13.0.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"4fad31965127236ff5ea2cede46f645ab5a8c901","_id":"reactor@11.0.2","_npmVersion":"6.1.0","_nodeVersion":"10.4.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-/VVQ7QOC3fCtqtLOjXUoNOsND1j2XYROAESqcEupaXgPRHMHITpxYoGclx2ZGeDqpm2QbDvXBOqH7sMhmxydrg==","shasum":"770005781716501938b8aa82281233b85c68341b","tarball":"https://registry.npmjs.org/reactor/-/reactor-11.0.2.tgz","fileCount":6,"unpackedSize":23083,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcUxQNCRA9TVsSAnZWagAA5s8P/2Q7va+0aVd0L07Ltafp\neH2XSM0ypWi2mhOmVCxjx16dDDiwMVOX0prflTf0FaiNkN9qp4izNfE7U1Ic\n0sXSctTt1oYvj9ArQ6ayFOtXZWI7n4K2vwqR69L1djlWTfngkw9uxWH+GOhO\n9z9U6hOgBUyGXemUGOF1M9ZS5mALMPNoz8sQG9OmeGcvO+Kfrqh8aGAyUXmU\nDbq7/I7Gg5+d687pcWRnzAVxH104DxgcbI5ecmR0weG2IZYTi9MD7TmkS+zm\npxaDguDAKO//UAR+2HrSUpHBK39uMgv8cZTl+a/aoQyef2fwUaqTOFRnLiDD\nwU47ATmQp3iYXMZDWTcP9EB6/31mEB+5duAQvz0VlBYq1ddmTrgr2le7/2n8\n+Lbd0fVZq7F2uI+NPXYttJBrt3s7khoxDcdUayMHT0qiJdL2Li/dl6Qvd6Or\nWVpSBaooLRYpIEnjJCxZ77f/X+0RIkF0H0bj8sFW14x9DCOHK+Gy1J88LB/Y\nfd3cjKO5wVpQfw2/TzgVULNbvFkpFtPCMXf105JEe665uFb+RdkEHgnZNhM3\nsNv/jEHzv5Ke6odfY61qVHkidU4+QJG3QD7LSxxeqb/EkDoJQ2fHmiXLgg1W\nDWGAnDHZnwoBQGAOOkf3LY4H99RJcBN0HRKx0YYc6qaYcrpRVQ6AB5iIIira\n/0ly\r\n=BWvO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEOgovilfNXdAEiVAyX9XxZ+KQ+UDazXAcdBF7NtxO1jAiAnbS4sNET12G6ECmHKA38ZttiQ/xTaZnIxiV0tKCQVbw=="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_11.0.2_1548948492541_0.827781790467399"},"_hasShrinkwrap":false},"13.0.0":{"name":"reactor","version":"13.0.0","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.3","cadence":"3.0.x","connect":"3.6.6","delta":"3.0.x","dispatch":"1.0.2","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"7.0.x","magazine":"5.0.x","content-type":"1.0.4","nop":"1.0.x","operation":"5.0.x","rescue":"5.0.x","turnstile":"5.0.x"},"devDependencies":{"destructible":"0.43.x","proof":"5.0.x","vizsla":"13.0.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"ad3bb9d4e3aa2ae4fa5ba2732696605843b1bfa7","_id":"reactor@13.0.0","_npmVersion":"6.1.0","_nodeVersion":"10.4.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-JLoMIE8QeosMhqnIcwPXKL+wDyru6GmYaTyOdDJO/EmalFXU51rAqjUuR6boxTYkgY9xiqe1ESuC+l0mssDYWQ==","shasum":"170cd8f9567b4eadbcc3cbfad13d6afa25ed6a1d","tarball":"https://registry.npmjs.org/reactor/-/reactor-13.0.0.tgz","fileCount":7,"unpackedSize":24589,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcWgoKCRA9TVsSAnZWagAAvCoP/1MXYHKXdYkP+NnHW/Sa\nvlDHj9S/EQDkgEfjtwbHWp2ojmQYIX+Uh9uMTpj78CUEBJEVbTaEkQNkUkSO\nQpnH8ZCyD6UokWdcrxoUlLwNrPgIPSxUMuJ5CUeF+9e4OjbXV9vK08TnE5tW\nCjyRFw5GcORBbjKvDX3FEWjv4nRS13ymngxOFS1NR5IGd0XpOfo0X1vYeNlm\nfmPiUanAngWg17ZtnsNxUwgYb/yhugsY+lBRWdhtf25txNQPEAdi9uuxTWSn\njOfBwCGNgoVhrsqlxqyU4pxjm/ZjAJc9PkJ5X4h97JY4Cuo7bPcAPxjzHKIc\nTZ0wTFOLsKZWkfeET+izgVm1psp7WiC1X5q+WQ6ca8wSJH0yzZO0lH3fPRrz\nYzhxhW1bYnH46emTANsNc2IcY7TcSNoJdv06WlYhC4BQC7cEMvJs5Y1L6K5E\nVgsztObwowSgy1/cMSBEM1luWr4KFic/WFDU59VbIi0iOUJlChPCrhRBesWe\nSRfCR/N+2k/lqjUy8I3vnQnYloc/PHUnXMavx8H4ni5QKq96V3VyItaWI4ym\n6kvgI1uXrqes0K+HVdO6paxJR1loDYZROK90MlJb6SIXkvNLu0pawJgRu8kK\nr9sVJlbhSsB9dYNnAWMIXujXZbQLQ+RaCi+aypND350y8unHVrmFvd93arLw\nORoZ\r\n=ROhy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDkOrtmSxFHE/7Gopm0BwhJxc69gZqYVnswQ6qgfLm4PQIgLF+OTBHa2tRtvZwQSpoqUusTbnRp+PxeWGtNO9U2Loc="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_13.0.0_1549404682111_0.9963198815714256"},"_hasShrinkwrap":false},"13.0.1":{"name":"reactor","version":"13.0.1","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.3","cadence":"3.0.x","connect":"3.6.6","delta":"3.0.x","dispatch":"1.0.2","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"7.0.x","magazine":"5.0.x","content-type":"1.0.4","nop":"1.0.x","operation":"5.0.x","rescue":"5.0.x","turnstile":"5.0.x"},"devDependencies":{"destructible":"0.43.x","proof":"5.0.x","vizsla":"13.0.x"},"main":"reactor","scripts":{"test":"proof platform win32 && proof test */*.t.js || t/test"},"gitHead":"98250ccee71bf5c539e27c611906d7d076367208","_id":"reactor@13.0.1","_npmVersion":"6.1.0","_nodeVersion":"10.4.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-6i27bqqDJiy5nr7vmay95cBH1+jrXmhzTqR1hY9fmQ1/WqXHVT+5tuXsnIEMXDSxRvnoCzSmyGxz4O3lAvowoA==","shasum":"64bd1e607b1db250ca0b92bc2bb8f20bb75ebc8a","tarball":"https://registry.npmjs.org/reactor/-/reactor-13.0.1.tgz","fileCount":7,"unpackedSize":24546,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcXPWuCRA9TVsSAnZWagAAodQP/04hsJz/TR1077HHyzZP\ng4e71jRs1t4NEWZOXR4i0/e5AUN0DfZuXLHc+YaNoCohCMgkkL39sGeItOEk\nbpJgTTET5Ekcaw+A2UwLk7iO9oI5TvFlxGXtYFZFkfVr7UBAABpd3wqA5fth\nRHlH/cxPyx07AG1XI+ZrchX7H/hZzwM5Z37S8JsHumB1Ib9ODKVqmoxXbB9C\nO5AwHS4/C9+AAKcbR4gm/cmm5NsWuqHTEztfWc3dczWBNwvc2xi4b8OQBRXH\nkGg/XfUIXrPO1BnmyZoZT12TGm19PxFmpa+FegyHWm2tFWxnIkDVtk5EFnSx\nkJs67OMVqs/puYeb7b8kiSeDj2iZyKwElns87hRHXv6MRvAezUbM4tycF8T3\nIvcZtladhvA0xQg52NZLtfiFMcZigdWBfUbuwo19ZL2dQshIG26+BsH6orIX\nf88O257Djn71QWQiAP0wdTP3oGQLqNMF0as10sKjFn/LKEtfVsIXBvA08JWq\nEm35vLhxJLly0k/nBBGVKcv19dpD6JMFDKwDGalbYed6px49VTy9HOv4mjPx\nJJ02GMj67rTXc0OIkwe+iwDBq+vWO8iyuWVfpcyCH+43fBP+3KKpxPr+aQCg\nkX8DCFiBqkfDgkVbI97fT7S3Gr10G1HkVRy58b7RKUDKlqLtQXqs5dqrmsbk\noAJ3\r\n=4fE8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCoQQ642aDAhCeXgAJSVKUFj4vw2MXxxrKV89REPe2TsgIhAJE17n0OJ93iKt7wvuCSMYR1EY0Jev5mG7dijjw1y4Hf"}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_13.0.1_1549596077442_0.044748188984279125"},"_hasShrinkwrap":false},"13.0.2":{"name":"reactor","version":"13.0.2","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.3","cadence":"3.0.x","connect":"3.6.6","delta":"3.0.x","dispatch":"1.0.2","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"7.0.x","magazine":"5.0.x","content-type":"1.0.4","nop":"1.0.x","operation":"5.0.x","rescue":"5.0.x","turnstile":"5.0.x"},"devDependencies":{"destructible":"1.0.x","proof":"7.0.x","vizsla":"13.0.x"},"main":"reactor","scripts":{"test":"proof test test/*.t.js"},"gitHead":"8c7598d3986a1b869f6427d820c8d1489772a423","_id":"reactor@13.0.2","_npmVersion":"6.4.1","_nodeVersion":"10.15.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-4HMbYG4Ua9JY31LMCfPdT/x6sNOFzc8P8LirsF+v/YhMfqldkz5NRpadFHBXRBg5xYCoffhrNRKDSMaKkCAuvQ==","shasum":"b3b9829000627a5737636d1ba4e82507a035abc2","tarball":"https://registry.npmjs.org/reactor/-/reactor-13.0.2.tgz","fileCount":7,"unpackedSize":24236,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcelU5CRA9TVsSAnZWagAAVMUP/0fKYred8VaLPQaGCMPq\nKcqtpUjAQXKNbIqTOst2Je1Qw3hPrnBsMtR8ZBzDYaLZvkRoyMWbVDClfpXw\nyU128DeuGguGh4BdDTl44pA3Jg2GzIGGKVqFwbN8ze+vhdaFixWM+QIJfkAG\nGlaMRtRU3Vvd32x/Lb8rcernfA0WLqW5e9aI8TknNRHoCy/ZTinbqzE0ycrr\ndLJcY+0oxiEaOW5B2MzSao7WMLvmTcTw01mTHhvpfFOnWxaBGsrisEy/ZFQc\nx5AyF8y7mlFRDGa93OseFIDnTeJ604QFsXtkoUvGPOj2dQZmbTDJJOXM1jrT\naMD/iKQ9kk/qbbZ8S4S3ZLVb9NVWqiDr7IYpS0ABFpzigze1WYqxUAlKQIq9\nK+PkxCz0wkx4tl+xXNCbRjqQZHoZabk3YXBnpQvz0UtuejnA6njKtr5ieY2q\nFQNh8GjZnrFGbCTgxBGcWhtTymWfIA4xWpCvb+fUo2JDT7A2coeFOv1qp7YO\n23083qyknlCZ0dWXrp1BGnFTdAHgOlOUiVYh1cTIy6g/HMzyGv/5yiEeYAxj\nnvxzFY6g8uD4DkNsysf2Ma+Pbz6UZOoV3nJZLGYMmUvJpD57G/n9xQ6MscZS\nBvmxiLkk2oVo10NSahdyRrDgTRnqQhahIZ8yQw8PUdPosr3WDAXTfOnfTTrq\nDgw0\r\n=SE0c\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHUhFiLQ2ZN1nXpO4mp7yzYSTepjUplGuM++04oF680BAiBPmGseL8reLr8+//kg7QdYYT9+8ZobYFXnK/SMcR2kNA=="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_13.0.2_1551521080653_0.8470537540761083"},"_hasShrinkwrap":false},"13.0.3":{"name":"reactor","version":"13.0.3","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.3","cadence":"3.0.x","connect":"3.6.6","delta":"3.0.x","dispatch":"1.0.2","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"7.0.x","magazine":"5.0.x","content-type":"1.0.4","nop":"1.0.x","operation":"5.0.x","rescue":"5.0.x","turnstile":"5.0.x"},"devDependencies":{"destructible":"1.0.x","proof":"7.0.x","vizsla":"13.0.x"},"main":"reactor","scripts":{"test":"proof test test/*.t.js"},"gitHead":"e5f13f38cdaf8c67c6ef5056782354babe5f3e9d","_id":"reactor@13.0.3","_npmVersion":"6.4.1","_nodeVersion":"10.15.2","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-FBrMoxN77y80cnCl068yVEU1LssKmmjK8DfOeQ8WaFc/ndC1F7ZOsUwCyPvDatYOnbKQ718SolPhjF1G/0YhLg==","shasum":"087fd9a911d0c15160d570d2f2411e5b2eb6b3db","tarball":"https://registry.npmjs.org/reactor/-/reactor-13.0.3.tgz","fileCount":7,"unpackedSize":24278,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcohqBCRA9TVsSAnZWagAAKCoQAI8UGYrLtfnbSP6oV2r0\ni9QK7yncFI8iVN3fbcCmY9WwVqL/AyG6OJ0ze2FHWAKi3k6EQzll++MYLF3p\nLbLCl7NvUHTEOIU4aeeWXRZ4dulrGzxE6DtMCurYJctrhllW6+zZdTU4VuQa\njDo2y2WzfifUTFeurDCjThR+1/VE+m3YirUr1DRaRyCKhi/yxQRiQtYx9lod\ncKLXVp41OcCFGDF3lPUEK5MpAmso2hqviNLUReI4sJcD2yhKvqXQLKZM4Mei\n1J9Ep+u+rB5OwPq1b1FRE2+bXTCZuTNjkBlDfenwg624tzXA/k0OvoCd2Lyd\nA9MaZlFp0tmG1pChjK0Thq9frihrMaUvnPSV2rHtb5sYNnRaksKz+xFvmuVC\n8ZLiqlQF5NsMB9GctCgS1Otr6NjBf7gk7NApyIyZI3RHXGGPMw82gvQ8+4au\n3LfavQPV4WVGIcjqRSYKCJJs3cxqwSnHtdu0roUI4IhAfYyLdxIXqiYLtAoU\nCJOcWuchou9PTqT4o6JPN0PWNgf4JKYS5QXvWz+MxuJGpd+WtR4idImhiG8E\nlAROVzYTxhV+SzpVEp400anMwfX/x3gVFp5t75V7CGLhcrrrDLPYjEXom6XA\nFtdimN8wpbtMltv1O/LcpNSuyBRTosMiGIi02Av0kAeroihlS3m+QQxHLwuo\ni9lZ\r\n=2SFR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDKiE5MGT3nlYqwQHQimp4iU8XqMmfYQADsJb5iesLX1AIgd4PFF4TTwvFw3j9Ie2iBCzJu6Mjd0Uirzs0jKzG64I8="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_13.0.3_1554127488447_0.955435776797541"},"_hasShrinkwrap":false},"13.0.4":{"name":"reactor","version":"13.0.4","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.3","cadence":"3.0.x","connect":"3.6.6","delta":"3.0.x","dispatch":"1.0.2","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"7.0.x","magazine":"5.0.x","content-type":"1.0.4","nop":"1.0.x","operation":"5.0.x","rescue":"5.0.x","turnstile":"5.0.x"},"devDependencies":{"destructible":"2.0.x","proof":"7.0.x","vizsla":"13.0.x"},"main":"reactor","scripts":{"test":"proof test test/*.t.js"},"gitHead":"15aeb349f0b8c4a44c00d6c8dfcc6d412fc7fbe1","_id":"reactor@13.0.4","_npmVersion":"6.4.1","_nodeVersion":"10.15.2","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-l+tCRn7rD359J7r9HkIDfVmwOcROzo+XFig7oNf6ZQrpEUSNJ72BL9QAJuiEPcuB1d7MuwVHC/Onl05mVmyvyA==","shasum":"994f4b28ad2715ccb20b0bc93b724f65467e320d","tarball":"https://registry.npmjs.org/reactor/-/reactor-13.0.4.tgz","fileCount":7,"unpackedSize":24278,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcowD7CRA9TVsSAnZWagAAXiEP/0kxTWeKY8wcAxBAEXCW\nK6ibps8fp3V65lodsch8yK6iZ3H+17f699Y9nQgYrYFyNL2AGOwVSL+IK37c\nYpXKh4EFaCu1zk8ermMkmJjYX1CaZAEEutLitWsWks9DMl/CNxO7okx239Nn\nLHF54N4hF9+aPcg/wTkm8LRcWGQzu0CK9Tk7O5zWlnUnVoQClSzTlRG+8zp1\nhmWvv3way068x1f2+dOjgR61/H5GSTY+OCJ1COg+OnevpfQcaiMOftVCGaS1\nZmsqtCvA8byhqcFcmlpEeE93ECUgu+PPJ1zFkM7YZeZvBYQK305+EOowzXlZ\nCivdO0tvGWs4cDxuQGqFYeUnQk2Y2mCr3D8y1z22o6TbrK6LLJWg9WiNpeWc\nNBa1ff/vfVdl3VxIEBGfdznDsv1adLG2FGp5AKxi+YE24aw2KTEoFXAPB9KS\nKex+IUms6grs8YjUyU+zrZJ23njALVD2JVNvcquNngLCLxYcV0Asxoq9zqmk\nlIeOkD2xEbxlzDoajziVpLjdf5fAuaVG+qEICBaBrtqlCSX/TdpOsXfjcZ0F\nyxFyTnrqWmWEe92ipKIAf5A1Jl1VZvMH4dfHizxR5ENPwDOerwRiW2gumIGf\nXI5bKHIgCCQn37N9RACxAitbFvBsti+8uBSprVry3kotCnV4MV6fSqMxy1IS\nCe5H\r\n=gQk6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCkhxZG4GqCTiF6cQTndt4uZNfiv0MdVCVxZ9t4rG3StgIhAKTb6hma2pq/HyWqCuc8IxYLKSgWSSOBB4AqVJkQ34lE"}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_13.0.4_1554186490951_0.4461968240132723"},"_hasShrinkwrap":false},"14.0.0":{"name":"reactor","version":"14.0.0","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.3","cadence":"3.0.x","connect":"3.6.6","delta":"3.0.x","dispatch":"1.0.2","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"7.0.x","magazine":"5.0.x","content-type":"1.0.4","nop":"1.0.x","operation":"5.0.x","rescue":"5.0.x","turnstile":"5.0.x"},"devDependencies":{"destructible":"2.0.x","proof":"7.0.x","vizsla":"13.0.x"},"main":"reactor","scripts":{"test":"proof test test/*.t.js"},"readme":"An asynchronous work queue. Reactor takes work and feeds it to an asynchronous\nfunction that accepts an error-first callback.\n\nReactor is part of the [Cadence](https://github.com/bigeasy/cadence) Universe.\nIt is designed with Cadence in mind, but you can use it with your own eror-first\ncallbacks, just follow the rules.\n\nReactor is based on [Turnstile](https://github.com/bigeasy/turnstile) so it can\nperform parallel operations in an orderly fashion;\n\n * with a runtime adjustable limit on the number of concurrent operations,\n * with a fifo queue that can be measured and monitored instead of using the\n event loop as an implicit queue,\n * with a mechanism to actively time out messages in the queue that have grown\n stale.\n\nWithout a queue, parallelism is unmanagable.\n\nHere's an example of how to use Reactor to process a queue managed by Reactor.\n\n```javascript\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, value, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        this._processor.process(values, callback)\n    }\n}\n```\n\nThe first argument to your callback function is going to be a status object.\nThe most interesting property of that object is going to the `timedout`\nproperty, which will be `true` if the time since the work was sitting in the\nqueue for too long. If your work has timed out, return as soon as possible.\nOtherwise, do your work.\n\nNow you can create a Reactor and push work into your Reactor.\n\n```javascript\nvar service = new Service(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\nreactor.push({ item: 1 }, function () {\n    console.log('item consumed')\n})\nreactor.push({ item: 2 })\n```\n\nYou can either push and wait, or else you can push and forget. To push and wait,\nprovide a callback. It will be called when the work has been consumed. To push\nand forget, just submit your work and move on.\n\nThere are some times when you want to keep a queue outside of the Reactor,\neither you have some special grouping or gathering you want to perform, of else\nyou want to check an external source for work. In this case you would use\nReactor as a set of items to check.\n\nLet's create a service that pulls work from a database.\n\n```javascript\nvar database = require('database')\n\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, key, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        database.get(key, function (error, value) {\n            if (error) conosle.log(error.stack)\n            else if (value == null) callback()\n            else this._processor.process(value, callback)\n        })\n    }\n}\n```\n\nIn the above we use a key to pull a value from the database. If the value does\nnot exists in the database, then return immediately, but if it does we call the\nprocessor with the work.\n\nLet's put work in the database and flag\n\n```javascript\nvar database = require('database')\nvar service = new Serivce(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\n\ndatabase.add('a', { item: 1 }, function (error) {\n    if (error) throw error\n    reactor.set('a')\n})\n```\n\nNo matter how man times you call check with the value 'a', you will only be\nadding one work entry into the queue for the value 'a'. The `check` method will\nnot add another entry into the work queue for the value 'a' until the current\nentry is consumed by the work method.\n\nReactors create a separate asynchronous stack in which to do your work. Within\nthat stack, you're supposed to handle any errors. There is no way for any\nasynchronous error or thrown exception to propagate out to the method that\ncalled `push` or `check`. If an asynchronous error is returned to the callback,\nReactor will raise an uncatchable exception guaranteed to unwind your program.\n\nThe guarantee is a Good Thing. It means that you won't swallow errors, you won't\nhave exceptions caught by overly clever error handlers and fed to some event\nhandler you know nothing about.\n\nIf you are using an intelligent error-first control library like Cadence (or\nStreamline.js), then it is easy to wrap your work in an asynchronous try/catch\nblock and recover if if you can, or log and continue.\n\n*TK: Cadence receipes; try/catch, parallel waits.*\n\n#### `new Reactor(operation, [turnstile])`\n\nCreate a new Reactor with an `operation` which is either an asynchronous\nfunction or an object with an `object` and `method` property.\n\n#### `reactor.push(work, [callback])`\n\nPush work into the queue. If given a `callback`, the callback will be called\nwhen the work is consumed. The `callback` will never return value because errors\ndo not propagate up and out of the work queue.\n\nDo not mix with `set` and `check`.\n\n#### `reactor.set(key, [callback])`\n\nAdd a single item of work the work queue that will call the worker with optional\nkey. If given a `callback`, the callback will be called when the work is\nconsumed. The `callback` will never return value because errors do not propagate\nup and out of the work queue.\n\nDo not mix with `push` and `check`.\n\n#### `reactor.check([callback])`\n\nAdds a single, undistinguished work entry into the work queue if no such entry\nalready exists. If given a `callback`, the callback will be called when the work\nis consumed. The `callback` will never return value because errors do not\npropagate up and out of the work queue.\n\n\nDo not mix with `push` and `set`.\n","readmeFilename":"README.md","gitHead":"3a0936d9de2c7437d364f25b46cf4812d6ad1ac8","_id":"reactor@14.0.0","_npmVersion":"6.4.1","_nodeVersion":"8.15.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-DPkBZg4SZEWe+SdfCA0nrrpWJs80tUF5Z+Z+xKKeoK6nbOIv3c+ORv/NA9Ji+VXsK5m3uZXDJNIkKiu8tGSJ0g==","shasum":"2cda4134e7964ea36d6a58f98611472134cea2a9","tarball":"https://registry.npmjs.org/reactor/-/reactor-14.0.0.tgz","fileCount":7,"unpackedSize":24278,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctJtuCRA9TVsSAnZWagAAN2gQAJTEQaqNHi6yYcTUaZeh\nL72sCPYHbOe4nhCYKlwmsbLDbi1qqwEAMaK12zxdI5VUYdfuf7ylQ9WdFWK+\nRXtCN+HFVpJ/fCWektvSfgx7T/xRKCY7gEhV2ZJmFm5rDdBYRQsA2WleMUFV\nKwAZwOa5ApxxLkkjnpsUtAdUWJM+Jd+fk9HFFxQbc6CjS1CDXmF+aJvzHIVK\n2kYe2GkvXkFLxHJSJbfnAbd8zZxNg36U4mS2vd4syIF4gEwP2GA2a9CiZsAU\nfKnWrwVhVCwNPwveJKh74aFOr+KP8WBk8cFmmdxLKNrH5gdjE5cygVNC1r2i\nb1u8MGrn669tA44i1cnKKWR+KqhMW4AoEemk6bNGEHfezEaA+owmGz+23IKR\n8LUJ1fEdiqGsm/5/XAU+99FfI8KpsS/lNs5Aj4WhfwiUniwBHqnS/iUWUK3I\nSaHzQ9r1T7Q7yQ1WQIgkBhtde7jzWh8YVamC2nujUhKSONnPj1SiC3nzv6re\n+thpwgwJXeab44yh+FCcCxea3YTRNLFo23sBK3MQ89vVUY7Rf7ykEmohsj+F\nY7F0SNc7+b53Fr5HJ+5p/GPqh/V+xVh9YOPa++xk1rxpMhz+suVvUt6whoT5\nRQuUEe2O6n/0MWteNJOKmp8TyEGFLaqQtrMCRU7jyiffyyIxUE69+7rlGfV5\ntTGW\r\n=+nE3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCjf9U5QdLejBzpAJbNplFEcXZJZL6htKRJkYQrJxWhCAIgPZF3rbgS/bAP6A6B6vBOX0W1xnuW5CGfte+0lh2kw2g="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_14.0.0_1555340141616_0.9900629984432712"},"_hasShrinkwrap":false},"14.0.1":{"name":"reactor","version":"14.0.1","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.3","cadence":"3.0.x","connect":"3.6.6","delta":"3.0.x","dispatch":"1.0.2","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"7.0.x","magazine":"5.0.x","content-type":"1.0.4","nop":"1.0.x","operation":"5.0.x","rescue":"5.0.x","turnstile":"5.0.x"},"devDependencies":{"destructible":"2.0.x","proof":"7.0.x","vizsla":"14.0.x"},"main":"reactor","scripts":{"test":"proof test test/*.t.js"},"readme":"An asynchronous work queue. Reactor takes work and feeds it to an asynchronous\nfunction that accepts an error-first callback.\n\nReactor is part of the [Cadence](https://github.com/bigeasy/cadence) Universe.\nIt is designed with Cadence in mind, but you can use it with your own eror-first\ncallbacks, just follow the rules.\n\nReactor is based on [Turnstile](https://github.com/bigeasy/turnstile) so it can\nperform parallel operations in an orderly fashion;\n\n * with a runtime adjustable limit on the number of concurrent operations,\n * with a fifo queue that can be measured and monitored instead of using the\n event loop as an implicit queue,\n * with a mechanism to actively time out messages in the queue that have grown\n stale.\n\nWithout a queue, parallelism is unmanagable.\n\nHere's an example of how to use Reactor to process a queue managed by Reactor.\n\n```javascript\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, value, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        this._processor.process(values, callback)\n    }\n}\n```\n\nThe first argument to your callback function is going to be a status object.\nThe most interesting property of that object is going to the `timedout`\nproperty, which will be `true` if the time since the work was sitting in the\nqueue for too long. If your work has timed out, return as soon as possible.\nOtherwise, do your work.\n\nNow you can create a Reactor and push work into your Reactor.\n\n```javascript\nvar service = new Service(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\nreactor.push({ item: 1 }, function () {\n    console.log('item consumed')\n})\nreactor.push({ item: 2 })\n```\n\nYou can either push and wait, or else you can push and forget. To push and wait,\nprovide a callback. It will be called when the work has been consumed. To push\nand forget, just submit your work and move on.\n\nThere are some times when you want to keep a queue outside of the Reactor,\neither you have some special grouping or gathering you want to perform, of else\nyou want to check an external source for work. In this case you would use\nReactor as a set of items to check.\n\nLet's create a service that pulls work from a database.\n\n```javascript\nvar database = require('database')\n\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, key, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        database.get(key, function (error, value) {\n            if (error) conosle.log(error.stack)\n            else if (value == null) callback()\n            else this._processor.process(value, callback)\n        })\n    }\n}\n```\n\nIn the above we use a key to pull a value from the database. If the value does\nnot exists in the database, then return immediately, but if it does we call the\nprocessor with the work.\n\nLet's put work in the database and flag\n\n```javascript\nvar database = require('database')\nvar service = new Serivce(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\n\ndatabase.add('a', { item: 1 }, function (error) {\n    if (error) throw error\n    reactor.set('a')\n})\n```\n\nNo matter how man times you call check with the value 'a', you will only be\nadding one work entry into the queue for the value 'a'. The `check` method will\nnot add another entry into the work queue for the value 'a' until the current\nentry is consumed by the work method.\n\nReactors create a separate asynchronous stack in which to do your work. Within\nthat stack, you're supposed to handle any errors. There is no way for any\nasynchronous error or thrown exception to propagate out to the method that\ncalled `push` or `check`. If an asynchronous error is returned to the callback,\nReactor will raise an uncatchable exception guaranteed to unwind your program.\n\nThe guarantee is a Good Thing. It means that you won't swallow errors, you won't\nhave exceptions caught by overly clever error handlers and fed to some event\nhandler you know nothing about.\n\nIf you are using an intelligent error-first control library like Cadence (or\nStreamline.js), then it is easy to wrap your work in an asynchronous try/catch\nblock and recover if if you can, or log and continue.\n\n*TK: Cadence receipes; try/catch, parallel waits.*\n\n#### `new Reactor(operation, [turnstile])`\n\nCreate a new Reactor with an `operation` which is either an asynchronous\nfunction or an object with an `object` and `method` property.\n\n#### `reactor.push(work, [callback])`\n\nPush work into the queue. If given a `callback`, the callback will be called\nwhen the work is consumed. The `callback` will never return value because errors\ndo not propagate up and out of the work queue.\n\nDo not mix with `set` and `check`.\n\n#### `reactor.set(key, [callback])`\n\nAdd a single item of work the work queue that will call the worker with optional\nkey. If given a `callback`, the callback will be called when the work is\nconsumed. The `callback` will never return value because errors do not propagate\nup and out of the work queue.\n\nDo not mix with `push` and `check`.\n\n#### `reactor.check([callback])`\n\nAdds a single, undistinguished work entry into the work queue if no such entry\nalready exists. If given a `callback`, the callback will be called when the work\nis consumed. The `callback` will never return value because errors do not\npropagate up and out of the work queue.\n\n\nDo not mix with `push` and `set`.\n","readmeFilename":"README.md","gitHead":"6dbbb03c847e8d4377f4d0c9ce07362994067c04","_id":"reactor@14.0.1","_npmVersion":"6.4.1","_nodeVersion":"8.15.1","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-4Tp6XpMYZV5rpyuPkqlh1oYWU7OJydG7xdN9M2X54I2NApuPIj37aymehVeIlpb7Ke+MumXH4Rd42HcZNJeQOw==","shasum":"149bc6cb3df0bb051da1265e6ad3ac6156e1062b","tarball":"https://registry.npmjs.org/reactor/-/reactor-14.0.1.tgz","fileCount":7,"unpackedSize":24317,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctOCACRA9TVsSAnZWagAAm+0P/jzIXcKoRBQMudoNbt93\nzq2Ar+T6xwVxSOcuSZ2iymEpZMhZ39jzBhrvjA7XCk9+P0ScoCvFG/sIurFY\nY/yWDagk5+wwRyIMbwg5ewsuQziTqmv0h9+z2f5vUiaB0ut7feEq/HmxKcGx\nAxtiC08Sp7AYkG+kwteWep9XrWIfWBQqvhl2kQ+3j1MgPjGSwUv+QhUG1BtZ\nZaZpstHTaF5Xh6HIhYnFTe5mxVRCQF9yAvCBZcSccBw80slEeJKzKwwOUh/U\nLHQtbFoyAMK87ieLUTk3lxFVokodbemvjnrs6Sn43wO3JWG8ymOFyz6vdUHy\npGVlcMyEZXSpj/UnacQ4Qlv7AaDnD5pw/jTE2nt+J00pdSRu8w1JHmnXRhxp\ncq3DuFThvOJ18LMMD9CltUo/KxT7EmkjMTJDP2ljiwcNDdNc+MIgSiVqz3GK\nxvg1HLXmHq2Mnu/O9b6ClGZmcu5utyqqoY5B7nWCD+TpdjYqKLO++mjGHPX3\nWodZR1pX6EU9McsfjgpIz1qbyPtdZXkoG8iSXjuvyGxIbTJsnqCivALROcWU\nHblCrR8zBDecEYRhKV8Bj2YJO2HYPp0SrzXaUX0NH57ZOzS+rQD/yJeENWbi\nDyWRh//NK4hGLxXus7rUirjDdWyNWg4CnNjvyApA1MUhuVqUe9Sa4xcGTkrX\nhofy\r\n=SHmZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDfX/TJEkLhWV7RYV2OnIURe2DgluHJND1TQZBRNOzcZAIgQlLtMlqcfr+ADMiWKqaEwppRzfXs11p47q1f/MH9uI0="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_14.0.1_1555357823513_0.7698831743811934"},"_hasShrinkwrap":false},"14.0.2":{"name":"reactor","version":"14.0.2","description":"A work queue that pivots events to error-first callbacks.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"body-parser":"1.18.3","cadence":"3.0.x","connect":"3.6.6","delta":"3.0.x","dispatch":"1.0.2","express-auth-parser":"0.1.2","extant":"1.0.x","interrupt":"7.0.x","magazine":"5.0.x","content-type":"1.0.4","nop":"1.0.x","operation":"5.0.x","rescue":"5.0.x","turnstile":"5.0.x"},"devDependencies":{"destructible":"2.0.x","proof":"7.0.x","vizsla":"14.0.x"},"main":"reactor","scripts":{"test":"proof test test/*.t.js"},"readme":"An asynchronous work queue. Reactor takes work and feeds it to an asynchronous\nfunction that accepts an error-first callback.\n\nReactor is part of the [Cadence](https://github.com/bigeasy/cadence) Universe.\nIt is designed with Cadence in mind, but you can use it with your own eror-first\ncallbacks, just follow the rules.\n\nReactor is based on [Turnstile](https://github.com/bigeasy/turnstile) so it can\nperform parallel operations in an orderly fashion;\n\n * with a runtime adjustable limit on the number of concurrent operations,\n * with a fifo queue that can be measured and monitored instead of using the\n event loop as an implicit queue,\n * with a mechanism to actively time out messages in the queue that have grown\n stale.\n\nWithout a queue, parallelism is unmanagable.\n\nHere's an example of how to use Reactor to process a queue managed by Reactor.\n\n```javascript\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, value, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        this._processor.process(values, callback)\n    }\n}\n```\n\nThe first argument to your callback function is going to be a status object.\nThe most interesting property of that object is going to the `timedout`\nproperty, which will be `true` if the time since the work was sitting in the\nqueue for too long. If your work has timed out, return as soon as possible.\nOtherwise, do your work.\n\nNow you can create a Reactor and push work into your Reactor.\n\n```javascript\nvar service = new Service(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\nreactor.push({ item: 1 }, function () {\n    console.log('item consumed')\n})\nreactor.push({ item: 2 })\n```\n\nYou can either push and wait, or else you can push and forget. To push and wait,\nprovide a callback. It will be called when the work has been consumed. To push\nand forget, just submit your work and move on.\n\nThere are some times when you want to keep a queue outside of the Reactor,\neither you have some special grouping or gathering you want to perform, of else\nyou want to check an external source for work. In this case you would use\nReactor as a set of items to check.\n\nLet's create a service that pulls work from a database.\n\n```javascript\nvar database = require('database')\n\nfunction Service (processor) {\n    this._processor = processor\n}\n\nSerivce.prototype.serve = function (status, key, callback) {\n    if (status.timedout) {\n        console.log('timed out: ' + value)\n        callback()\n    }  else {\n        database.get(key, function (error, value) {\n            if (error) conosle.log(error.stack)\n            else if (value == null) callback()\n            else this._processor.process(value, callback)\n        })\n    }\n}\n```\n\nIn the above we use a key to pull a value from the database. If the value does\nnot exists in the database, then return immediately, but if it does we call the\nprocessor with the work.\n\nLet's put work in the database and flag\n\n```javascript\nvar database = require('database')\nvar service = new Serivce(processor)\nvar reactor = new Reactor({ object: service, method: 'serve' })\n\ndatabase.add('a', { item: 1 }, function (error) {\n    if (error) throw error\n    reactor.set('a')\n})\n```\n\nNo matter how man times you call check with the value 'a', you will only be\nadding one work entry into the queue for the value 'a'. The `check` method will\nnot add another entry into the work queue for the value 'a' until the current\nentry is consumed by the work method.\n\nReactors create a separate asynchronous stack in which to do your work. Within\nthat stack, you're supposed to handle any errors. There is no way for any\nasynchronous error or thrown exception to propagate out to the method that\ncalled `push` or `check`. If an asynchronous error is returned to the callback,\nReactor will raise an uncatchable exception guaranteed to unwind your program.\n\nThe guarantee is a Good Thing. It means that you won't swallow errors, you won't\nhave exceptions caught by overly clever error handlers and fed to some event\nhandler you know nothing about.\n\nIf you are using an intelligent error-first control library like Cadence (or\nStreamline.js), then it is easy to wrap your work in an asynchronous try/catch\nblock and recover if if you can, or log and continue.\n\n*TK: Cadence receipes; try/catch, parallel waits.*\n\n#### `new Reactor(operation, [turnstile])`\n\nCreate a new Reactor with an `operation` which is either an asynchronous\nfunction or an object with an `object` and `method` property.\n\n#### `reactor.push(work, [callback])`\n\nPush work into the queue. If given a `callback`, the callback will be called\nwhen the work is consumed. The `callback` will never return value because errors\ndo not propagate up and out of the work queue.\n\nDo not mix with `set` and `check`.\n\n#### `reactor.set(key, [callback])`\n\nAdd a single item of work the work queue that will call the worker with optional\nkey. If given a `callback`, the callback will be called when the work is\nconsumed. The `callback` will never return value because errors do not propagate\nup and out of the work queue.\n\nDo not mix with `push` and `check`.\n\n#### `reactor.check([callback])`\n\nAdds a single, undistinguished work entry into the work queue if no such entry\nalready exists. If given a `callback`, the callback will be called when the work\nis consumed. The `callback` will never return value because errors do not\npropagate up and out of the work queue.\n\n\nDo not mix with `push` and `set`.\n","readmeFilename":"README.md","gitHead":"315d7f1cf6548747677280770d4983618cd9e9af","_id":"reactor@14.0.2","_npmVersion":"6.4.1","_nodeVersion":"10.15.2","_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"dist":{"integrity":"sha512-fRQr8wND+3mj0j+ySGVHeoqBa96wm7aN96ACCVTFXqbGtFn77aSw/fLw2NH8ccvukzGhKR1rCJJG5IwfccNPPA==","shasum":"328e397521c8808b4b6590bb42b7ffba2929a086","tarball":"https://registry.npmjs.org/reactor/-/reactor-14.0.2.tgz","fileCount":7,"unpackedSize":24317,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctnmECRA9TVsSAnZWagAAp2wP/joTsNyHg8036cylXbDr\nZKZszUnl18nWmhqpSalTgZ79+jqGkE0rNpmHAQ94BTuAJjh5ijnJ8+qIDEBu\nKdzaq+PQCXzhNmhVN4FTLwo7eUs1djezHK8LYg/i3r3OhJh8XApSk2Zoq91A\nLz9UpNFrZqU4LpPnRQl+M/EWvB5Te5ttS3dh1GxMRwfOVNFzhMMh8ZMshhA6\ns8YIB1WLzMKjXMggTTPQ8dpouGYrOirrWVR26aephEeF875yhkyqVy6m83pX\nmdwQLCsfNxtirGcCs6uYZArnLLUdHzQnDpUaejU4Axt01/VroVzBu5EmW/ZQ\nS5ffjqFHZCeiq8Rf+kmdDcUEeb8efpTPd3fQOzpKbCtIr7j0LjivPkSkKLMr\niYGHbqibghMFjTuluz1Qznu9Vp7OAMXkQwagcwT1ra39t+wPO360z7bCoYIB\nx1xBpkgTqZ1wqMRN+k09yTt4MX46LthzdhiWz97HGREOzxoGqrrFYq4sGAxX\ng/MGta3+V/tY26W/X6VgdZ52ql/ni/AwqQ6vtq23OVwWD+6FTVkD230JYb79\nNeuR/rjQygTMzKabxKMCSGpmzo5yyWEgjOhGCDAnYOIo/E8LnuSlzcDcBvxU\n+EuyVPm9RLIBTu9qdGb8QfhhPle0uZKu9AlGQO1wLACEfq+kIfigrJMH8pYZ\nqT6u\r\n=G3un\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEsEf96SI1bO7j3QExNo1lUVISK6bzyjJ/HEwjdZU6BSAiBU/2UIuPLT87iZJmKlUM9bAtqu5kHO4H03Lg7K7EY5Fg=="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_14.0.2_1555462531893_0.5474091184798231"},"_hasShrinkwrap":false},"16.0.0":{"name":"reactor","version":"16.0.0","description":"A fastify server builder.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"fastify":"2.7.x"},"devDependencies":{"axios":"0.19.x"},"main":"reactor","scripts":{"test":"mocha test/*.test.js"},"readme":"A fastify middleware builder.\n","readmeFilename":"README","gitHead":"1793d5582bbb20aade88843102a8fcbd75d6478d","_id":"reactor@16.0.0","_nodeVersion":"12.7.0","_npmVersion":"6.10.0","dist":{"integrity":"sha512-xFpf/Z86fDEjSsH9NWcu/o+PqDqEFHHFXHUZ/oAVHOw6xhGibhk1hAQDhoH51Pw9jHk5O6pB3c0FOECxcPzTqA==","shasum":"c0a338e44971ab0db573f2b72e0d18774b2b30f7","tarball":"https://registry.npmjs.org/reactor/-/reactor-16.0.0.tgz","fileCount":4,"unpackedSize":3548,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdWjaYCRA9TVsSAnZWagAAZkQP/0/8JOF1AaH/3c+onwjE\nunldq+cQbXjGf79XzhuguEpn4ftKsRqF5ioVLqf2vKPVUMoW1ceDAj0ZMj8O\nPI9vPkLuqDBP1Mij7ndeSewrz6AwKOj1pcIkVviABwVb3mjQS80myEwtXrRz\n0KruiHPfUrR6s3PPAOAK2Fc5gvAjHwGmdqlqS/UhIGIlDV17Llzt7f2OpjNO\njaWetM3q2A8WKez5qIJgYTVNm6tPUX4LwBiDi6/LPT8uaMDCHec2fWsId9E+\ntG8zaPK4OyUevqqXqGnnT3RXWdCEzgz0Blm0tPaIh6L5Vu+fbUF+HFxCPriL\n2mtKC+8vvIUYGF2mI+rLr+SPXayQx7v+Y1T76RNIAGOL5f+foJKSJtAZXhc2\ntD3+1q+L8vgb0M5L/I0hA0hgvWXgw0MDJ2+BODAJQGmFm8m3vPrZBREbNnOv\nE2qOY5iDI5gyFeKR9MVhnoZ8idBFs0DQH+hZRiOcH334A+IrKJp5NEiYoszl\nEo1Q8eJaPesT8x3S6jQ4nPBDuLV7Kypr1wxqpowkipxOL/R+t8srBiIojb6W\nDEUKesn/OrCobieKOJ3oSQiOFc8nyKH5DfGjlwTBZ5oTc/xOzgGCEiBtrerU\n0xHR9C6JqMLSJMXqck1fvvsvHtcyZwn4CPNlYAPTJHhsEjY7dG78pX4/xGrW\nNlTB\r\n=OIPm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD74FmnfwPa4lpnXrBkrBu+PBdktTpnE/iIF83KP2JP+AIhANwLsjxL1oHa6ZBt1YDjCKYG9CkwvWdM9kk/vDZmnZH0"}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_16.0.0_1566193303703_0.0886157566479373"},"_hasShrinkwrap":false},"16.0.1":{"name":"reactor","version":"16.0.1","description":"A fastify server builder.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"fastify":"2.7.x"},"devDependencies":{"axios":"0.19.x"},"main":"reactor","scripts":{"test":"mocha test/*.test.js"},"readme":"A fastify middleware builder.\n","readmeFilename":"README","gitHead":"e07b793c6ca3f36aae0237568996fe5df9b72f02","_id":"reactor@16.0.1","_nodeVersion":"12.7.0","_npmVersion":"6.10.0","dist":{"integrity":"sha512-SI3PP1QB0tqOaCV2GtCxINRu4nB74Hh4Oj7PcISXz8Z5thpfk604zWjpdg03uj5Sz6rLIjPOkkMu51ASpV6fcQ==","shasum":"d0cb548b7fdffccc85a4c03e3593a2bbece7344a","tarball":"https://registry.npmjs.org/reactor/-/reactor-16.0.1.tgz","fileCount":4,"unpackedSize":3799,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdWlJvCRA9TVsSAnZWagAAmnsP+gLy6zbLoS9nSpdi/B05\niMTT14MkJqeW96czPTmCT6D4Xxa67hd2D+FVyDtmMnS+MzbENw4iSoyXbT72\n1KskdOKiqPnk2LCd15VmEVgWX3oZxGgK1yEpWPK6bMO8R/zR07O27W3pfuP4\nYQ5qwD8H1OQSJq61FsLhRyAoBwSzCtdCifc8rEhpc41J5c7XjLSYC1LXLbBh\nPJHSbadzB/tW/CBK23LIII4MhlL5cZvAx/x5X6hGSrcgrj27f5gTj9PuuLjv\ne72ZrqmHq2nRwMgkFklaHK1AM92Sx4zn9chV0kyI1Z2YDYvrNIyAVTHhSyk6\npMe8bJqt5PlQF5rzf0UYiTiwdjyXQr8KxW6LfOh0X2fpfSkhgonTLgu43qVf\ncirusaEoiB+lxFRc1dIuazcJlyZ3LqEf+De9dxMH2RBkLTdD9S09ipRizqEJ\nOWpghJ36UU2DENNXB7aydo9/rX1A3RgfV3QeHtO64XfydL9fDejqRlQY8JHw\nANeqkR461IEWaNpl5boZ6y9rr0G1+njVibql2dF1V4DepapjohERHJvfZLRm\nz+mViPXzYWh02098R/+2yyTp/Lq3Cy9ucwhAzhmaH9IGU36GBgeWurB7T0gZ\nmPiyu+FWOXZi8pJ/9oLjC3cC0QBTI8WAwPRxLWTBELdwA+IAL1xiUu0ltltI\nt94p\r\n=HfQY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEpeN992lSh77qHqixnFgL/21MGOnPFqZe3bW6DOoDxRAiEA1O5lpiC+c0o5+ykXQkWxjbDp9KjQJt8iJ3IIMHNqjj8="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_16.0.1_1566200430960_0.6049329500624607"},"_hasShrinkwrap":false},"17.0.0-alpha.0":{"name":"reactor","version":"17.0.0-alpha.0","description":"A fastify server builder.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"fastify":"2.8.0"},"devDependencies":{"axios":"0.19.x"},"main":"reactor","scripts":{"test":"mocha test/*.test.js"},"readme":"A fastify middleware builder.\n","readmeFilename":"README","gitHead":"b58515c08a18cebb8f3c45319ef47c47aff1aae9","_id":"reactor@17.0.0-alpha.0","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Lpi0NU4vAIvIsxGOifOc8y8Vqeog3/zmqVRKA5pjjR6A68CGwJArmxc3ewDCjLsEF73iAUrMZdBQXt0y3MUBIg==","shasum":"696bbc1fb333775c52dbadec05d8e55fec329104","tarball":"https://registry.npmjs.org/reactor/-/reactor-17.0.0-alpha.0.tgz","fileCount":4,"unpackedSize":3807,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdby3UCRA9TVsSAnZWagAAWwcQAIH0sKLi2ozvggy2zZhq\necuH3n0y0tdkhw/O4Y+a+g0o1OelaYp9ZNGHeR0lddPc9FCtkuIX0BBesVYh\nYaQWaKlmwt6Hz26zI2DMFnJar3+Shr5IyJIOSHUXUiRlFnjKwhyabkhQ/mBg\na6XzX5t+L1XMqIwDhnwdfKjEAuIxNrLkprb0G25P4piSRG7/4doqfIyv47TS\nn/rG65youQUxebDXR5ql7QlGbK/9n/zofpnXszvh2SnlGxy5RWTdYqFXmn8v\n8dhHMogKkZzCpn2X8kJxMFytoLrRshFFP5xmJ8zOxQFYJWxjEQpSzpoM3xyN\n2H/d+B07W4WO1VlbTh5RoFWmBE50Ot/0tMDecQPYxMNGk3iLmxqkjxZgXkov\nvhT8mkJFsf7AmDXqGNIycwd7b1xcnmTbCLigKZlXV8srJLUG+4jAw10MAF9F\nDVhV7J2D9NJBCU1VTatntVI8kfVNw2nNeNifgN+m3WsucE9B519v6Kj4KQn0\nXT2Ml61Rw5huCSMjB4+PYKOD7KV3mK254ffD0BC7RQbqqdL3geSwlxQ0ymGH\nhELBgXQnPB8QSaA4WQT0L3ZzEkaivy+20qXzrxybe30ZCbqBkEp87FDd+2NI\nEahSzNlQF1x7QFuiAt+aomJe5Wwk7GbU3J+JIM/XVO3OrN8JX4W7BaUTHkEf\nZuvu\r\n=dnwx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGV9Pq/VduGsF547gTFVcp0H2QcyrUdD5slyXtSxT7sAAiEAiAOKVJw02qfd2vN5E9cZohYiXmkhYkxa9weMyJP/zmQ="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_17.0.0-alpha.0_1567567316341_0.06831444247610441"},"_hasShrinkwrap":false},"17.0.0-alpha.1":{"name":"reactor","version":"17.0.0-alpha.1","description":"A fastify server builder.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"fastify":"2.9.0"},"devDependencies":{"axios":"0.19.x","destructible":"^5.2.0-alpha.1","proof":"^8.0.0-alpha.7"},"main":"reactor","scripts":{"test":"proof test/*.t.js"},"readme":"A fastify middleware builder.\n","readmeFilename":"README","gitHead":"27d71d05d83fbe51e8de09eadb28e0c3ca159718","_id":"reactor@17.0.0-alpha.1","_nodeVersion":"12.11.1","_npmVersion":"6.11.3","dist":{"integrity":"sha512-sN808Y1rQWlQ/BKJuy9nl4tamM7wccgCM+s/ONkPxYPfTajPRT2Cp6k4QbTngggNOp3tBjAoe5W4byVu/oUuzQ==","shasum":"99757933e94f97b49fe7e5935797d12f64eada24","tarball":"https://registry.npmjs.org/reactor/-/reactor-17.0.0-alpha.1.tgz","fileCount":4,"unpackedSize":3960,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdnwQeCRA9TVsSAnZWagAAuJkP/RSdhoboktCLgCCw1a7C\nk9gPHuficWEUE95WAur5WzTb0S/j7D7wyEuo6tVpFzYqlR4FRj0MreggSNhV\ncf0J5m+Ow2mjzdGL7gaT8Epa7J0WlB+1Qed7BQtUUKTsO7szle/DAiEtDRBE\nGRnN5rJQ4hss8T8nRqAz7cBBvN/6TjZrmqBraxByfnLS6MlvQAfJzzUWavgT\nYvBydM32iEkOVtoyOkBGsXJBhm4/JzTMPaPOsISL1aSkGafcEUvy3+DWcVqE\nMEbtjFD5epfHKIwZdrClqmECICYHVH/UJ6U7w9N21zLkxiQRnhXc9gQhRZZu\nMKAwqrsdYZ9nlpGGRYpsyGhMN8ZvccY/wG1n5hnUjlEZQAKmia1L02WshsAG\nibvdW+rSCDsf1hG3fngUBFcgmU/+fxbUPQsepwU4dAHO/6CIKP+Bp8Jh7DUC\nraIVS0O5orrdZonWBHQaakG415wwZjr3+IiYzdNyqWqICQndGN3buRtxrKQK\n6wwl6dy+1cLuWJeh4R2wbL9vtWFQr/1PjXetGmaQepGh3b5dh7q8N4SpDK3z\nQcTTD4gCySnms1tOtb89gf11Mq+gkvLxZYRnlyENVZ+p1Z2zGweVrHIJJZrF\nR18kp2VHFozBEtyLwYmQIM2IJX0IUa56URi3gHrncXvihS+2k90XjOZM6tPE\njloS\r\n=u7an\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCCHUz7vu7JTnCZlENpr0DsjmTuP1EDYRBmSPbTMGh6BwIgTxInT/LqIofriph9PNVAl4UMcDUK+QNd7UweXcBCXyo="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_17.0.0-alpha.1_1570702365365_0.5696665539683026"},"_hasShrinkwrap":false},"17.0.0-alpha.2":{"name":"reactor","version":"17.0.0-alpha.2","description":"A fastify server builder.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"fastify":"2.10.0"},"devDependencies":{"axios":"0.19.0","destructible":"^5.2.0-alpha.1","proof":"^8.0.0-alpha.7"},"main":"reactor","scripts":{"test":"proof test/*.t.js"},"readme":"[![Actions Status](https://github.com/bigeasy/reactor/workflows/Node%20CI/badge.svg)](https://github.com/bigeasy/reactor/actions)\n[![codecov](https://codecov.io/gh/bigeasy/reactor/branch/master/graph/badge.svg)](https://codecov.io/gh/bigeasy/reactor)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA fastify middleware builder.\n\n| What          | Where                                         |\n| --- | --- |\n| Discussion    | https://github.com/bigeasy/reactor/issues/1   |\n| Documentation | https://bigeasy.github.io/reactor             |\n| Source        | https://github.com/bigeasy/reactor            |\n| Issues        | https://github.com/bigeasy/reactor/issues     |\n| CI            | https://travis-ci.org/bigeasy/reactor         |\n| Coverage:     | https://codecov.io/gh/bigeasy/reactor         |\n| License:      | MIT                                           |\n\n\n```\nnpm install ascension\n```\n","readmeFilename":"README.md","gitHead":"274bafe8763bb9f1ee75f9f421742f3e6244d48e","_id":"reactor@17.0.0-alpha.2","_nodeVersion":"12.11.1","_npmVersion":"6.11.3","dist":{"integrity":"sha512-sF4gkAdYiciQrcjLNyEgA3cTGagk9fKaW+pfnijiSvN2bXMeTXBs/tyQMz88oEwmfJthis3DT2hCED1xY4wTxQ==","shasum":"87cf70702b52130fb5aff105963ddeb17cbac17f","tarball":"https://registry.npmjs.org/reactor/-/reactor-17.0.0-alpha.2.tgz","fileCount":4,"unpackedSize":4896,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdoyYTCRA9TVsSAnZWagAAqPcP/R/UPm8HT0l/k/actATo\nZlWDezh8qymbQdALGzppB0QISJJL8/4f6iLWapgHwb202oREwyrOM+M5VJcq\n+79I2bUk8XcInxeImknw6SORhO/UWmyeiMSGzTmPxzgjycWw1Tc7WFwNIrD8\n2GXdv2SXrSkN13UMx7RqZfoarvCLIIQdyIi1w8H23qLR+yPHMOTveps0Y/Iq\nRQp3n19dgj+oO1HYmWsfMH11ibC0AeGOIA0rJiFToZKeQdl5wseb5hlb5Jxy\nM4FzYoGODp2bt93VmriW8GRbh5E/l4D42iHcz32o9KlM8p6MJZBeZdMpRVB8\n9sFDgEXFbDZKes23RSOs3Y+kk+NbCzwUqd0rQwLDsoKEypa45z5b37ztQqMD\n5plT7wcOPv6Ij6/Ow0u+8toAgxS0RF8yO9SCPfEKteY/DJaTnqYFo2L4dIBR\n/TkGri/B/UbZcviBzDobivPs4tc8D3MB2IIyUpBQ8hx3M99czvzo0CP91B3J\nVnuvVCdPpceotyy4pEE6m3Nf1oCr2scQfhykxI5gshJL5Ma9LNfYmKT12hxC\nRgk9hR43vxNCnNIW5XKZhoXrBcDK8MIH1Ikv3BkeKmLq+SfbyRRSgKzUhg++\nRCEYTJ4PMfBJCnb+uh7eZBM2wd3tCX4lgENciRCiGvCJy2qaRAP9uNYQ0Rhz\napZC\r\n=aIIp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCExmSOKkkvU0tmyREc7RkCos/im3VNc5JgAb5eUH0ysAIgPXL0og3RGx+vvhyXpGlWt32aFUBnemlNQ1Pz2nQ5ww0="}]},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_17.0.0-alpha.2_1570973202483_0.9478530531622156"},"_hasShrinkwrap":false},"17.0.0-alpha.3":{"name":"reactor","version":"17.0.0-alpha.3","description":"A fastify server builder.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"fastify":"3.11.0"},"devDependencies":{"axios":"0.21.1","destructible":"^7.0.0-alpha.48","proof":"^9.0.3"},"main":"reactor","scripts":{"test":"proof test/*.t.js"},"readme":"[![Actions Status](https://github.com/bigeasy/reactor/workflows/Node%20CI/badge.svg)](https://github.com/bigeasy/reactor/actions)\n[![codecov](https://codecov.io/gh/bigeasy/reactor/branch/master/graph/badge.svg)](https://codecov.io/gh/bigeasy/reactor)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA fastify middleware builder.\n\n| What          | Where                                         |\n| --- | --- |\n| Discussion    | https://github.com/bigeasy/reactor/issues/1   |\n| Documentation | https://bigeasy.github.io/reactor             |\n| Source        | https://github.com/bigeasy/reactor            |\n| Issues        | https://github.com/bigeasy/reactor/issues     |\n| CI            | https://travis-ci.org/bigeasy/reactor         |\n| Coverage:     | https://codecov.io/gh/bigeasy/reactor         |\n| License:      | MIT                                           |\n\n\n```\nnpm install ascension\n```\n","readmeFilename":"README.md","gitHead":"fb4af9b44b6d02bbfc142f0c5ceec19a86bcb911","_id":"reactor@17.0.0-alpha.3","_nodeVersion":"15.3.0","_npmVersion":"7.0.14","dist":{"integrity":"sha512-4lFH+JAoho6V9owFznEIdxZNxDxXFp1TuDftw8OJWN4E5e/nGqY2brJYyOJ3n1ViBfMzg/LhwDN1AuCu7Tadwg==","shasum":"a8d37aa67478c29b64bc3f13c510dc05748c8c83","tarball":"https://registry.npmjs.org/reactor/-/reactor-17.0.0-alpha.3.tgz","fileCount":4,"unpackedSize":4889,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgHG86CRA9TVsSAnZWagAAaJEP/ApOwhYJw7IgAQFBLCP1\nrODQ6zJBr6Sm99VM53X/2f77e16UHUKx6nVnJWlSLCpmI9eygUNPN4CdOguI\nWkyH/OkE4akRtols/WgqMaa5h4jlI5aWRA/XjMXX+5ZNKwbz5B0FJ4IawBj0\n3dUbBT0GeZJAyjb40AL5Ehf9oQ/IRijfp/7Dtztx4mwCKqEd3bvoRwAyyHUj\nuanrDBWk2KipgXTdGTKThjWTL1lB2fynXEj4WXNBqpV3mJdB3PkTQmsvrvuz\n4SkRYADtC5hir3518csH6DvougPH9wMHjrEfsmi6LVbyAHUHijcNUd1R5Uoz\nHE+4ZhLieI324nGpyTW3f/eiUilfWZsMu2rYZVBeOZ/ysMdAnM2W6KLQJJeD\nvyExYTsiA/wDxN5P9LoBDBWjWX9sTZjjtfrmQWN4auxIwMmZ4HmTnP/WYQeV\ntLlshh2zdl1Cf2Uzv1GzEzf0rS/geWrUBv8C2LPoHOItogeP4tB7CccAP+4M\nDw3SWYPZfs4LN7tjs7iB4tFXKCq+mrZALzyRBT0LNE89/rgBrnZsCGkubFws\nzDGaMEK8KVsI6uUGBmiHQ+PR/njgoG1Y2kOhiwDjVdnoD7MYzRvtlk20y8ii\nyfBHTfT7vN5B0ByU2HBS7JoEd1HYkzE4hK1KbWAOxf3h1SbvO3rWbvlO9usG\nF2/I\r\n=VK/S\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCFgrJC3vrvExyZResEudwItObNJ3uNrX+xXyC9aXAFpgIgUV6n/osCP3ORH3Geq2ScToGKvaFBPcsIsZ8ej1/W9ZI="}]},"_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"directories":{},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_17.0.0-alpha.3_1612476217828_0.7394372147914323"},"_hasShrinkwrap":false},"17.0.0-alpha.4":{"name":"reactor","version":"17.0.0-alpha.4","description":"A fastify server builder.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"fastify":"3.12.0"},"devDependencies":{"axios":"0.21.1","destructible":"^7.0.0-alpha.48","proof":"^9.0.3"},"main":"reactor","scripts":{"test":"proof test/*.t.js"},"readme":"[![Actions Status](https://github.com/bigeasy/reactor/workflows/Node%20CI/badge.svg)](https://github.com/bigeasy/reactor/actions)\n[![codecov](https://codecov.io/gh/bigeasy/reactor/branch/master/graph/badge.svg)](https://codecov.io/gh/bigeasy/reactor)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA fastify middleware builder.\n\n| What          | Where                                         |\n| --- | --- |\n| Discussion    | https://github.com/bigeasy/reactor/issues/1   |\n| Documentation | https://bigeasy.github.io/reactor             |\n| Source        | https://github.com/bigeasy/reactor            |\n| Issues        | https://github.com/bigeasy/reactor/issues     |\n| CI            | https://travis-ci.org/bigeasy/reactor         |\n| Coverage:     | https://codecov.io/gh/bigeasy/reactor         |\n| License:      | MIT                                           |\n\n\n```\nnpm install ascension\n```\n","readmeFilename":"README.md","gitHead":"4bb2c8a2c9b06ef0c1b984cf8ff08f8caf6ac5a9","_id":"reactor@17.0.0-alpha.4","_nodeVersion":"15.3.0","_npmVersion":"7.0.14","dist":{"integrity":"sha512-Vg6l9neiteI2cq/1hb+4Wsh27cVVpiHtAnE5XhkdzqvuW4X5p/64K2p9Jx+Ut919Nv52yys7FES34JLP2MEepA==","shasum":"c7eeb9cbd8c6ce8666f741a9e4f6c38811586170","tarball":"https://registry.npmjs.org/reactor/-/reactor-17.0.0-alpha.4.tgz","fileCount":4,"unpackedSize":4889,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNIdqCRA9TVsSAnZWagAAuCQP/RcUCfCa1SA/9Sf5R+uK\n2mLHtooLytXjhh3owH6HbOxpuyzm2MyMfS6KdcEjKu+2szEFw4djG1rBZLz7\nx3PtJRuWtByEts9zjuKMZSpjupsoOcYc+z4QPgAHHbRdILE0aU6jAH9Mtgnm\nqQvpl5jsGOaEuJ7hFA9FGKysNR/UAWfSwmXHm1EsxIvbTOlyL/Yv5kCLxlG+\nV8Pg4gEgFCpuoZkr9ZvkcQ5yLdg23TJMbFA2q4dxEQKrx8MRuK2dSRIcvD0v\n3bSwKgppUAkMmjVVjc94esVJDnJe7s2Y03SZUKvWeO0gSiBu/3W2AGiLuU6H\niYFPgWKDYwY4SGM1dWHyR0xbL/KL+DLC6OUOJGJ1P4GQFvFWCWHH58LrW8x2\nTzsvF/bMkxvnjPoI/7Tbdlg06KNjHf+g+T8YBJVvSXSO9lChQoMgAOQahXRk\n08wRpjixPRri/euKSD0kfAUkPmh+XhqtdQcHizMGAfM4cT+W5xLhwhU8Eteo\n9uvSHyYEHmdfn58JKNGLhu8SJ8owMO/QfTS1c05Zvnkbl9YeCktcN8wkOkju\nGGS6Brj2rHqxv7sD+Rf6Ta9KHxCk3YgKcwUn7XCL1UstbcjlcAD28c83iTHM\nVPdqNu8Nsc/ADXCjTZ4CHb4a7xw42K8DRBE86mQJt2VBbaYHtd2GKDzbw01S\n1GkA\r\n=y9D2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEdcxjnpKJw1Qxo/TKFx24S+8mLShx0UQSgAA0dudK9DAiEAnFI9Gq5fHF1Ri2hpNriL9Nfuw6uEno3mwbXz4fdT+M0="}]},"_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"directories":{},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_17.0.0-alpha.4_1614055274163_0.9590689686292675"},"_hasShrinkwrap":false},"17.0.0-alpha.5":{"name":"reactor","version":"17.0.0-alpha.5","description":"A fastify server builder.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"fastify":"3.13.0"},"devDependencies":{"axios":"0.21.1","destructible":"^7.0.0-alpha.48","proof":"^9.0.3"},"main":"reactor","scripts":{"test":"proof test/*.t.js"},"readme":"[![Actions Status](https://github.com/bigeasy/reactor/workflows/Node%20CI/badge.svg)](https://github.com/bigeasy/reactor/actions)\n[![codecov](https://codecov.io/gh/bigeasy/reactor/branch/master/graph/badge.svg)](https://codecov.io/gh/bigeasy/reactor)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA fastify middleware builder.\n\n| What          | Where                                         |\n| --- | --- |\n| Discussion    | https://github.com/bigeasy/reactor/issues/1   |\n| Documentation | https://bigeasy.github.io/reactor             |\n| Source        | https://github.com/bigeasy/reactor            |\n| Issues        | https://github.com/bigeasy/reactor/issues     |\n| CI            | https://travis-ci.org/bigeasy/reactor         |\n| Coverage:     | https://codecov.io/gh/bigeasy/reactor         |\n| License:      | MIT                                           |\n\n\n```\nnpm install ascension\n```\n","readmeFilename":"README.md","gitHead":"72f27ffbeb758016e4023274669c2f49a942c51d","_id":"reactor@17.0.0-alpha.5","_nodeVersion":"15.3.0","_npmVersion":"7.0.14","dist":{"integrity":"sha512-erDh8eoDA0hVcGCk72JrQPqOZ2krKl3z1k4LV44pdlT1PRHSy+vgcThR1p3dNo/y1a4zv6dHweAWJfRbAd9wyg==","shasum":"84de02b652a32d5363073906c7f7dd89aa715d9c","tarball":"https://registry.npmjs.org/reactor/-/reactor-17.0.0-alpha.5.tgz","fileCount":4,"unpackedSize":4889,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPnvHCRA9TVsSAnZWagAAJeQP/3S2CpTMxvaxwI6fvhx7\nh/1+7tpJBEyZmwPACRXWaFReBntei3Qsc8N0bWwjzG+dMfdjSbsfBExjKoZS\nwdqU1LHYyl4Tu9dp/Jt9a/WC26VvcINEtdqS529rSay/rTQIpjgtvsPsL+x3\nMXDc28rzT3uC/ag0XEzmlT2Ujm+QeT3UyK2esZnd3lvzq/9l9w7fh6YOA0Dr\n5ZEvfWiAgKSIZQVRpN6VIsFyWhJQirmRtZKplBp3CyWYhD/sVdiCv05KRpg8\nLm/AIiKRgaoSh7z1jBzFME4HFiuLoAmBGSL7FO6AVT2ppfnXJ2lEb1JCA8TT\nrTJcMTwRMwfAQzBK5j6isOFePh/8t78Z2TYm6Vc2lrahjuRtN1vnpTrahTzo\nereh4whmQEnDRWWf8+/bMZbP7X5wkJ7yfXc/yipAdeFtRrEahKQjkybFi2ns\nfgYFQPy0jZL0fM3KJ1NDQc94A+HUsnRgmToMBk4TrTpfcX8oK4Eb1RdLKSJx\nUh9NvK9vMyNzYRIsyZREAXt/SLxE9JO9OkqP2KW8W89CpnzRpJnz9lYz4i59\njU8VLEQiR1N58faV3jFW2m7hkBcg/u+upYtf44H5hfyZ7nc3EZB946xkMV0/\nL3iuQ68iaoadD7D2XsTeiXca0YY21uzR1FXIh775CW/TQ+5Xz/58tHO1gvqp\nzDNo\r\n=G9Sp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA9hotm1sImh1V4zY6X9OhxAt6IizQxMIVektuk9GC5FAiEAuWOvms9+PNqAebjPmB9/ye4/E566qH7kuxHVY1Qs064="}]},"_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"directories":{},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_17.0.0-alpha.5_1614707654703_0.4244748321117431"},"_hasShrinkwrap":false},"17.0.0-alpha.6":{"name":"reactor","version":"17.0.0-alpha.6","description":"A fastify server builder.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"fastify":"3.13.0"},"devDependencies":{"axios":"0.21.1","destructible":"^7.0.0-alpha.50","proof":"^9.0.3"},"main":"reactor","scripts":{"test":"proof test/*.t.js"},"readme":"[![Actions Status](https://github.com/bigeasy/reactor/workflows/Node%20CI/badge.svg)](https://github.com/bigeasy/reactor/actions)\n[![codecov](https://codecov.io/gh/bigeasy/reactor/branch/master/graph/badge.svg)](https://codecov.io/gh/bigeasy/reactor)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA fastify middleware builder.\n\n| What          | Where                                         |\n| --- | --- |\n| Discussion    | https://github.com/bigeasy/reactor/issues/1   |\n| Documentation | https://bigeasy.github.io/reactor             |\n| Source        | https://github.com/bigeasy/reactor            |\n| Issues        | https://github.com/bigeasy/reactor/issues     |\n| CI            | https://travis-ci.org/bigeasy/reactor         |\n| Coverage:     | https://codecov.io/gh/bigeasy/reactor         |\n| License:      | MIT                                           |\n\n\n```\nnpm install ascension\n```\n","readmeFilename":"README.md","gitHead":"966958f7fc347b37653248d8c288050cb7d36637","_id":"reactor@17.0.0-alpha.6","_nodeVersion":"15.3.0","_npmVersion":"7.0.14","dist":{"integrity":"sha512-LWRcvE8lsJJ+JFsJCbAg0u8I532KRxpztudB+lDo6Gp7z1pMvRLox4TzG0ns7u+QQvTgumbeOLKTOjCWvEeN3g==","shasum":"bb03ed53f4a222a1dbdec62d65ba4512c491572f","tarball":"https://registry.npmjs.org/reactor/-/reactor-17.0.0-alpha.6.tgz","fileCount":4,"unpackedSize":4889,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgSaR+CRA9TVsSAnZWagAAFvsP/2hOXgOSCR+x0tNKzYzo\nrC0OxLHAs6MSj9tv9aBnakxb3EjL+qYAjRDB3ClFQlWYyVUct/eNBIYJ1/no\nME+vqw43gFsqyDt/T0EEbDbWncezghkTlqlz5E8Rsh81a4+MTRd5VvlumMKd\nyp5p6C+OpTuNuOKNBwVgMCCc+QF3tvXJNyIQjjVB9+1zAD1so5QEdxzTB7lk\n0J7WSdMl/0KzQrBLh01CHeR7dn11hidRIsPmbuO69MeSASjDBB4kyuRsVrt6\nQuNfJorepVuGSpwnwgqCzXDmlXN2NEwmEVisrCYucU6R+kTcDbxtnjptfrPS\nZ9FG2wNPhCHb1wmvG2hXU9P33PkvNHKrEpKfVwh4E/LyXitv4Tn+XWymKmC8\nCt0S6yzl/s1fO+vBAQyGEIH6sSTXu1LfF+R7h7Sse6KETdNjdcc45qnf7Ymm\nbhZdtwquiQTHLkZZ7u9fBzQhfszsMRJuDjmWqsoDGZuS/gL5ttNVDLRVCp/L\nQeXy1LuihiM6zShGsKgWE3ZlRt6PKKzFb2M062+ZpY+EK+R/BzGQ7OBpK9eo\nfHmiNDOTVRp/+9JBCwp+ZRTHh1WfGyHINkAFafT4MbIRW9i/XoPo42f7i1p7\nCUcke5gGysQkoeHL/1Zv33negMBwoKwdWJ5mdk6LWh2jWui7qMSr35BHd8j+\n7Dug\r\n=mlem\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCz+YlWz0A2z8888sYLxSJpELosf0I+0ll+cCb5DvdzvwIhAP+xgVTS0sPVedR74miQojBtBEvNsspcmL7P9WHEnxh8"}]},"_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"directories":{},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_17.0.0-alpha.6_1615438974254_0.7260124306361118"},"_hasShrinkwrap":false},"17.0.0-alpha.7":{"name":"reactor","version":"17.0.0-alpha.7","description":"A fastify server builder.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"fastify":"3.14.0"},"devDependencies":{"axios":"0.21.1","destructible":"^7.0.0-alpha.57","proof":"^9.0.3"},"main":"reactor","scripts":{"test":"proof test/*.t.js"},"readme":"[![Actions Status](https://github.com/bigeasy/reactor/workflows/Node%20CI/badge.svg)](https://github.com/bigeasy/reactor/actions)\n[![codecov](https://codecov.io/gh/bigeasy/reactor/branch/master/graph/badge.svg)](https://codecov.io/gh/bigeasy/reactor)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA fastify middleware builder.\n\n| What          | Where                                         |\n| --- | --- |\n| Discussion    | https://github.com/bigeasy/reactor/issues/1   |\n| Documentation | https://bigeasy.github.io/reactor             |\n| Source        | https://github.com/bigeasy/reactor            |\n| Issues        | https://github.com/bigeasy/reactor/issues     |\n| CI            | https://travis-ci.org/bigeasy/reactor         |\n| Coverage:     | https://codecov.io/gh/bigeasy/reactor         |\n| License:      | MIT                                           |\n\n\n```\nnpm install ascension\n```\n","readmeFilename":"README.md","gitHead":"36a0c96e4b940d84a67e63da2337f8c95f1a0cef","_id":"reactor@17.0.0-alpha.7","_nodeVersion":"15.3.0","_npmVersion":"7.0.14","dist":{"integrity":"sha512-/T2LpLWKLcykb/sp9wTRpg74a9CH+jX/ApIZTSUfGVBkP+rsKrlEB+p9RQyItY/7+MMAG/0/99fRrX8fKy05sQ==","shasum":"0152fa7f1e42e20c0a21980f0ad4fc2fdb119cfc","tarball":"https://registry.npmjs.org/reactor/-/reactor-17.0.0-alpha.7.tgz","fileCount":4,"unpackedSize":4889,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgTbysCRA9TVsSAnZWagAAr0kP/RY4dTrOZxNC9wd2q60l\nwQN23jZzDgfLWllOFPu/1Go7Z0JhIWX+SuTf7OF43M5/N5vSk1havNozAmcn\nBJSPI0R9YR4hGk3UTDSABmbsTcw0bHCImhmlqUX/i54VCV7yriJMIaSYHqVR\n7NuNoXL5Dfn1dMc5+LSTItiIhGITXvo6J2rucIo+cG8GQZhe40JlUnBBMTnk\nI4BvAtqoAcrSNTVRUSMx3+rdTnxdqfIcOiCxFcOgzyCSSRz7x/FuDmqXtw3C\n3wK+iY2i9y/AiOVxblsuWKQF0yKU51vb5BZCHaL95s9R89rGeVF5AtU7rKJy\nEJQP4LToaLAViRjrEKeU8uEIJX3zFTqUEUO7tj5wVVlFs/VFtaiO54UwYI+E\nCobBdiq9zhMZ3sBOVXcGyK+diNTonJMgm2yEQwbdwJ/UedLj2A4r3zeqkg5e\n3i2vXVXL3JuIAm7Tpuv13TP3NyrvRlP9GnJnoKFBt7xmHYM4UIpe85JPSmwk\nW7VGejD6ElL0gob+4w/UyvgAnjCdetwQ6MculzsHPIJF3F6Iu1o7qvGraEuW\nZXDtiwPcOdWyB0m4lbp0DEJmBGJ78Uur6Jm8GsaY8+bzd7mePY3LnjSJWFV8\n6E5lKU6vAd963hyvQM/A4EQL6qvdyuF8w9kGRBZZhtLnB9WarkJi3JM44DpR\nE6tZ\r\n=hvkH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDteQkX750Q5QPPz0LDCAbvQVINU8cnw8g3Tu5m0wsy8QIhALw32fwGYEDmQqVf+ewM+TWon57Xhd6e4Ct8/1Ob9Cwg"}]},"_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"directories":{},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_17.0.0-alpha.7_1615707307713_0.449602039767405"},"_hasShrinkwrap":false},"17.0.0-alpha.8":{"name":"reactor","version":"17.0.0-alpha.8","description":"A fastify server builder.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"fastify":"3.14.0"},"devDependencies":{"axios":"0.21.1","destructible":"^7.0.0-alpha.63","proof":"^9.0.3"},"main":"reactor","scripts":{"test":"proof test/*.t.js"},"readme":"[![Actions Status](https://github.com/bigeasy/reactor/workflows/Node%20CI/badge.svg)](https://github.com/bigeasy/reactor/actions)\n[![codecov](https://codecov.io/gh/bigeasy/reactor/branch/master/graph/badge.svg)](https://codecov.io/gh/bigeasy/reactor)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA fastify middleware builder.\n\n| What          | Where                                         |\n| --- | --- |\n| Discussion    | https://github.com/bigeasy/reactor/issues/1   |\n| Documentation | https://bigeasy.github.io/reactor             |\n| Source        | https://github.com/bigeasy/reactor            |\n| Issues        | https://github.com/bigeasy/reactor/issues     |\n| CI            | https://travis-ci.org/bigeasy/reactor         |\n| Coverage:     | https://codecov.io/gh/bigeasy/reactor         |\n| License:      | MIT                                           |\n\n\n```\nnpm install ascension\n```\n","readmeFilename":"README.md","gitHead":"a80c06008b3829a71c59927aac569170f4d08eed","_id":"reactor@17.0.0-alpha.8","_nodeVersion":"15.3.0","_npmVersion":"7.0.14","dist":{"integrity":"sha512-dNcMh9tgrqfW2uy8fBoWXAdwjxeiZtR8FI2al4EcON97sHg3ptr+D667nfIMZ115QlphXLCjT2NIzIcDQh8jZg==","shasum":"f2c661893b90b997014b9c44c50d55e26d43f629","tarball":"https://registry.npmjs.org/reactor/-/reactor-17.0.0-alpha.8.tgz","fileCount":4,"unpackedSize":4889,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWX4tCRA9TVsSAnZWagAAqFAQAKJHDT3AoynwbYNN3SNu\ns0yuYqJ3OlmK5RNs3XQapOP+WqNnekNB7uJ+yID+siMTyvuq/NYGzU2Zx5iZ\n2svslu0pI8VYVuT5pyNtMf+LM6EvvZNXjGTaw8gP7A2j3GqaHywyQiRAwVo1\nr/CZmX06DEjYZqYsi0MulEicveaHbckqp/8KLJi9PZS/IEon84+IcHe6CwMJ\nlyx0L8eV6lzXVjcjbLWZl4rksxLc5qe7QAklwoKcOgQQA5oFjleFuXGdfEZc\n7TDkDOvx/QLrovmlbhF4LBXFknrZyoi8o35+eZDUZOeG+sq1gaAmRwusgGV6\numfeNXbnVIsyNyDRGh+nAFuP76LFwunCp4zPsjA3nY79Gp8G4aFqK7Bg7lSo\ngTYEiv++JDJPX+UkSAOohuk8LtbUPDZmBpWMQnHdEO3QlJLltpBP4XJuuj4m\nlW7+BnoO9ybCfOBdhZb1Nq9JbXT1kffJmTkZ1WjCL1KMkBXjMAGtusMh3t+s\nxtF1kgaG6kZlWBPJLAn4v1Ixch/CqpqWjMqtGUNY7022GEMz5DGVULQnp2GB\n+SJ1oOC7Y3TiNV7YU+/9mW1JeKBnfjnVxOUJh8BVpYBTKzxzDfrDzw99iyPy\n0sWp/WYerppRrUm692dCcO/nmbMkY24lr22yugVT9cNyjmu0GSSflNTOtpvt\nA6SF\r\n=hnBD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC7JHhB6XmCm1RWBxVDCxS1N7H1DN+imCUh0J2av1ASQwIgdDnKHNkctCjVSP7u9zDIMfMmejt4p7Iu9F3WJMYz+IY="}]},"_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"directories":{},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_17.0.0-alpha.8_1616477740990_0.4072698564684205"},"_hasShrinkwrap":false},"17.0.0-alpha.9":{"name":"reactor","version":"17.0.0-alpha.9","description":"A fastify server builder.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"fastify":"3.14.1"},"devDependencies":{"axios":"0.21.1","destructible":"^7.0.0-alpha.64","proof":"^9.0.3"},"main":"reactor","scripts":{"test":"proof test/*.t.js"},"readme":"[![Actions Status](https://github.com/bigeasy/reactor/workflows/Node%20CI/badge.svg)](https://github.com/bigeasy/reactor/actions)\n[![codecov](https://codecov.io/gh/bigeasy/reactor/branch/master/graph/badge.svg)](https://codecov.io/gh/bigeasy/reactor)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA fastify middleware builder.\n\n| What          | Where                                         |\n| --- | --- |\n| Discussion    | https://github.com/bigeasy/reactor/issues/1   |\n| Documentation | https://bigeasy.github.io/reactor             |\n| Source        | https://github.com/bigeasy/reactor            |\n| Issues        | https://github.com/bigeasy/reactor/issues     |\n| CI            | https://travis-ci.org/bigeasy/reactor         |\n| Coverage:     | https://codecov.io/gh/bigeasy/reactor         |\n| License:      | MIT                                           |\n\n\n```\nnpm install ascension\n```\n","readmeFilename":"README.md","gitHead":"ef76019af9b8886b8e18bb7a47e74470bb9fedcb","_id":"reactor@17.0.0-alpha.9","_nodeVersion":"15.3.0","_npmVersion":"7.0.14","dist":{"integrity":"sha512-PFNOlMLICwDdTcv4J7CyiGJyjZg1urbwBX8qBbm+HFkC6g05VNZFaBY0BlczoqwLVlg7tcyZVepAGKOT/Au6aw==","shasum":"25a99e38524affb310170fce6cf6d9fe59550925","tarball":"https://registry.npmjs.org/reactor/-/reactor-17.0.0-alpha.9.tgz","fileCount":4,"unpackedSize":4889,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZ/gbCRA9TVsSAnZWagAA6fgP/ipaRIOnW3l/Zim3+g41\ndFlEjY55scS86kVl/ghl3eQCNc7Gm7ay5xWK/RN+CDLfL7s0qWUbXdmJ7l3v\ngLwgOoXq9PjMZPmNr+LwBrIPuGk3HLIVEKkSAUxpQ9AVbo2jqZ13HkTFa53n\nNDf52Bon2iuLK7lX8BlLq2jBkHVb1BbL19EAbwrWtCj8A+Vt8Omf0IeahAga\npupI5mF5xr7K8Or+cl7F7icNQU/8kuLGUXS6+qv3tur3b+JvcoTPhSfg7aGR\nuD/OE2nu5dIiP/Ya2fV0xlqRgRt6sUFgLuZP8GMS1w0jIBQZ+ChL5gYfrYsP\nTJPb67Wd/VO4degedTbNMEP2mLYX8KyGzT1o2OK7woNOARwC0Y52mX6UfGh3\nRjVobvj/W+aq8dGCNWKGP88vL16JgaQoE7Zv7KdKofvX4e+AeVvdYy4zuid2\ndaTv77M+LprfuX83qHDqXYCSOKhwNW4XYGe5qoQd+40uM7IMDSpeDH8bq7/X\n17Qcuh4whegbQ66RCxHBB/UFE7847OoFpxaD9mLvHHH12i6/8AiqoPOI9clH\nKM0q1Anyj+Ro9qZnBDkcQvO34nHD67wh6f1DeJ1/rJwhAkMsTgQVb3fIV2Ry\ng9mgZr/KoSzoM7FDt+Omj5TxJPsc4OLnQXxmb1OwEdbtVH5scywqUk69w7Zh\n5BuF\r\n=0ppY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCpc6LEOpdjsPxlArQLuLAHm1T3u5Xlorn+Q7zExuEAiQIgXJOpQWu6P8820IWka1KOE7womDl2z3BikTqvjJOu8/k="}]},"_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"directories":{},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_17.0.0-alpha.9_1617426458922_0.7053798367568143"},"_hasShrinkwrap":false},"17.0.0-alpha.10":{"name":"reactor","version":"17.0.0-alpha.10","description":"A fastify server builder.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"fastify":"3.14.2"},"devDependencies":{"axios":"0.21.1","destructible":"^7.0.0-alpha.64","proof":"^9.0.3"},"main":"reactor","scripts":{"test":"proof test/*.t.js"},"readme":"[![Actions Status](https://github.com/bigeasy/reactor/workflows/Node%20CI/badge.svg)](https://github.com/bigeasy/reactor/actions)\n[![codecov](https://codecov.io/gh/bigeasy/reactor/branch/master/graph/badge.svg)](https://codecov.io/gh/bigeasy/reactor)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA fastify middleware builder.\n\n| What          | Where                                         |\n| --- | --- |\n| Discussion    | https://github.com/bigeasy/reactor/issues/1   |\n| Documentation | https://bigeasy.github.io/reactor             |\n| Source        | https://github.com/bigeasy/reactor            |\n| Issues        | https://github.com/bigeasy/reactor/issues     |\n| CI            | https://travis-ci.org/bigeasy/reactor         |\n| Coverage:     | https://codecov.io/gh/bigeasy/reactor         |\n| License:      | MIT                                           |\n\n\n```\nnpm install ascension\n```\n","readmeFilename":"README.md","gitHead":"863cae209220a0e13c787831410c6caef501afe0","_id":"reactor@17.0.0-alpha.10","_nodeVersion":"15.3.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-v58oOBU83QqI7nIxOas8TleqM3tx5ZyuUMsuGenQxs1121BlTR2iq8ysMRZrHE0SKBud/k1QaSXAve4uXfkHvw==","shasum":"816be670f2f5aed8d0d1cd95ddd40867b2fb56f2","tarball":"https://registry.npmjs.org/reactor/-/reactor-17.0.0-alpha.10.tgz","fileCount":4,"unpackedSize":4890,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcTvoCRA9TVsSAnZWagAA54UQAIdKwTUj80CFuKmK26+u\n6hugXizhPEY9gOWdd4HHYvOY46EktsDbOFw+wVobQMsHCnVrcomkCjgFweZu\nxpTFyfOaG5KnU4e7k3Y1smX5mNZnkAfaYQByw9uAq+Lu/Y6kDK9XYFNJepPZ\nrANHXMlWH71br8deUFllvDh8dHUzy0TNJYbLNvrmqmfdGY3wyGZXqW7Pi0VS\nKnmgDPwDgTVqXCpr5pXR73hbd+fep+EA4noj+0ACOjMmFHbDJion+s2jXMiu\nlmKPKcIqVGldMHTR+jKyWnFq90VVAkw/iZoCLIEiZyyaEWE2s1+aHWiC5y1Z\nmJgpmoPFXX1GdRFZS+QwJRCyIguMRyMNV0V3IDj4A/eT1PYTaXGhbvg3ilqq\nu/8LHZYbB5wTFE/HGYwu+/gsaIYSPmEMJGh3ztz//natq8BX/aesYIXUCRax\ny+qC47WPlYkTlXlNPtuBnid2yV9uGSf6F/HquWqefQ84vOhIOIm38gllHQwl\naO1oXwfafRA2bRDSegOHdyL5qx0c9SL7K3Uz5hgSdulgtzGhu7aiKzed/oTq\nv4G+M1RhfM3Z+a3dfvyioDDtduH3BaOGPeEEmcoOlpQQvsV2x3VZ44aYo4Vz\nvjyxMb2HUQhHGnVS4vszFlZbfZAAajkqKnfonVorhsgG+JfpRWb4rNf6UCcl\n9ijU\r\n=H7l6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD3+j0Rol+2F8ABuqECiFXBwa5htTAutNjnwKTKLvqYOgIgfDqhGiCnBMIl7G70o5iRZb+lNFh1yXzg+phiDX+rexw="}]},"_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"directories":{},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_17.0.0-alpha.10_1618033639712_0.67975999768297"},"_hasShrinkwrap":false},"17.0.0-alpha.11":{"name":"reactor","version":"17.0.0-alpha.11","description":"A fastify server builder.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"fastify":"3.19.2"},"devDependencies":{"axios":"0.21.1","destructible":"^7.0.0-alpha.67","proof":"^9.0.3"},"main":"reactor","scripts":{"test":"proof test/*.t.js"},"readme":"[![Actions Status](https://github.com/bigeasy/reactor/workflows/Node%20CI/badge.svg)](https://github.com/bigeasy/reactor/actions)\n[![codecov](https://codecov.io/gh/bigeasy/reactor/branch/master/graph/badge.svg)](https://codecov.io/gh/bigeasy/reactor)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA fastify middleware builder.\n\n| What          | Where                                         |\n| --- | --- |\n| Discussion    | https://github.com/bigeasy/reactor/issues/1   |\n| Documentation | https://bigeasy.github.io/reactor             |\n| Source        | https://github.com/bigeasy/reactor            |\n| Issues        | https://github.com/bigeasy/reactor/issues     |\n| CI            | https://travis-ci.org/bigeasy/reactor         |\n| Coverage:     | https://codecov.io/gh/bigeasy/reactor         |\n| License:      | MIT                                           |\n\n\n```\nnpm install ascension\n```\n","readmeFilename":"README.md","gitHead":"f96715022bf28404f93e1d5a9e35973fb3eb0ba1","_id":"reactor@17.0.0-alpha.11","_nodeVersion":"16.5.0","_npmVersion":"7.19.1","dist":{"integrity":"sha512-U620+tLJCqadBHBHz/KJtEV3nnZgWO3qUEb7bZdhe2t+OJC2PVOGq1+utBeL9E/8As9MghfLg4WnsNR9BmfSfQ==","shasum":"df764225897a427905fafdfe5e1a06128fa440ca","tarball":"https://registry.npmjs.org/reactor/-/reactor-17.0.0-alpha.11.tgz","fileCount":4,"unpackedSize":4890,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg+mMtCRA9TVsSAnZWagAAXzIP/1Wkree31Bzi17Yg/pUg\nuBGxvA32t6tqMr5C/luIIi6Gpoow3oIh5VYtbKAxOq2gpngkDmqmB3JNkahi\nLfB/rHmWfuwXZW1+iKI2wT2BSj/AaclNXDJK7bjdxACxFu8apDmIGINuHOGv\nZjwhNp7rdDr+vRVJhKLhBz29fK9Ewan+qE0fxKri+qvFVfOtHN+sIl0arvCs\n7CXy30a3vOz3WdJxLxtN00+7fZTx4xEAabjqmM3CG266ednd+fyfHCrq1PjJ\nWcbCtWeRJ1r5gyWXXc4d4+iVGH6c4ZJJ/3dHLUWvQKVMNaccm1zlaLzucjNZ\nq6/0a6y+gfe1W3KdxWoTveYNA9ZSV74vB4vwKBVYaZUvP+1VxnegcGEwzoU+\nmxeYx5BSOKWGsUARDg3ZjdcL43QpLBe0aBOXFUuRYV43fSuBco6GtjOcmYAk\nizGLKA5j56gLg0+NTMlUKLMgLTi17DmzhSaGJJKAZ4uzASOPkr84e63wSxfC\nQ6wMQ6z1E39A8yQ/ghM0pW6DY1HQAAv9fYcv6dfHYc3wjtuSU2TiM1gnS7G/\n+Ale7joCosnkTouupOkYCBQ9mebsl+2dteo+BNYCRlWQck66z3IY8KAZ72yN\nXQsx/n43SGiJVnvUCkgtXHyFQn7i/tI7HzO6PLKF9qKU1iSlhWi3NTwaxeZj\n5wK5\r\n=fSVl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBp5ua09PsnDY24QdftA5NaVTK9g2OhP37bRNfOrbi2yAiEA6kB3IyrXEzuIYGz1oYjs1FIBbuM/jABTpSshJuTLTI4="}]},"_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"directories":{},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_17.0.0-alpha.11_1627022125532_0.21868459271250096"},"_hasShrinkwrap":false},"17.0.0-alpha.12":{"name":"reactor","version":"17.0.0-alpha.12","description":"A fastify server builder.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"fastify":"3.20.2"},"devDependencies":{"axios":"0.21.1","destructible":"^7.0.0-alpha.67","proof":"^9.0.3"},"main":"reactor","scripts":{"test":"proof test/*.t.js"},"readme":"[![Actions Status](https://github.com/bigeasy/reactor/workflows/Node%20CI/badge.svg)](https://github.com/bigeasy/reactor/actions)\n[![codecov](https://codecov.io/gh/bigeasy/reactor/branch/master/graph/badge.svg)](https://codecov.io/gh/bigeasy/reactor)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA fastify middleware builder.\n\n| What          | Where                                         |\n| --- | --- |\n| Discussion    | https://github.com/bigeasy/reactor/issues/1   |\n| Documentation | https://bigeasy.github.io/reactor             |\n| Source        | https://github.com/bigeasy/reactor            |\n| Issues        | https://github.com/bigeasy/reactor/issues     |\n| CI            | https://travis-ci.org/bigeasy/reactor         |\n| Coverage:     | https://codecov.io/gh/bigeasy/reactor         |\n| License:      | MIT                                           |\n\n\n```\nnpm install ascension\n```\n","readmeFilename":"README.md","gitHead":"7041fe4d47f0c80abdb4fb90157f56b2bdf4cbd2","_id":"reactor@17.0.0-alpha.12","_nodeVersion":"16.4.2","_npmVersion":"7.18.1","dist":{"integrity":"sha512-1r3mDWWFq/2wDCyTpeE+NXpiKG8AVdVB9usEup8NARKHrjGkfdDU7ECsOpPG9GmgKMxzAzbc8HbBHMv4bn69Pw==","shasum":"66bf6568a61f66af97bb3169b2a1781a2aa521d7","tarball":"https://registry.npmjs.org/reactor/-/reactor-17.0.0-alpha.12.tgz","fileCount":4,"unpackedSize":4890,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhHabtCRA9TVsSAnZWagAAt2oP/3Qs9AezcStAz8J8OBX5\nEO6qveOUQm0uI0cB5f4Epbe4rUeNeS9ZDAKqDhDwAa8OstFqn4tpqy6nJhEm\nVMgU4FtKPaAOMGsxQt6c+PJ7bOeSy+Zki/8yNQzgeLe6bpnsR2BhEmqVJTkJ\nGQ4+4ayY+q4dmTwJoIi7FYYnBIF4TyflwVMXM0YljhaPdRO7kHJC+f+RBdoM\nRoKxTOUdUhzAQnqS1GS3yLKOy6zALouh2cG+TK4KZ7W20PvcHxKHmbjXg26Y\neneMwOWUZWKlK1v7TJ721rl3gk2mhfG3SHIe3ED6e4sRA8fzX5KswEcAwSyp\n5BoY8XS82R8DnNCFcY3jaq6IY+JqknODY5xQG4YaAqHLltWYwfY6Vgtd0h5h\nkPf4hwpPC923qgp0k8HWPxSNMoDQrhYow8C9kdrMveesQ6+uSzb/xNdCg/9j\nPfiyQR0eKLZFwIKcNFRPBuIW3cMtGCesl9Ml2xu9qklEapjJLhtgUYRM/MsC\n3gpTaXsHPGMZ/3HsGRMskYtollSpo2zDLNWxz+E2fKQ51zkFcFisc8P9zzci\nSFnS+38FsCGMumR+p6+ziE9kLfkzshEAjg4/yOKd+l15omgl31Ml4k28xOYN\nv2pXejYuTUxnFSOtppe1mEBXM1mLV8BnyIqOIIsqPauIp3Hem6jdwd2j8kEw\nYnUE\r\n=kNFr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDEBb+ep8bN27RMN8KjzKHll6/8+zwjcB/NSY6CkiPFRQIgPPrLHVe3gdPfdl/IvN9jJL2AjkRWGbusgAKyJNsgzho="}]},"_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"directories":{},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_17.0.0-alpha.12_1629333229542_0.17896857405275335"},"_hasShrinkwrap":false},"17.0.0-alpha.13":{"name":"reactor","version":"17.0.0-alpha.13","description":"A fastify server builder.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"fastify":"3.21.3"},"devDependencies":{"axios":"0.21.4","destructible":"^7.0.0-alpha.70","proof":"^9.0.3"},"main":"reactor","scripts":{"test":"proof test/*.t.js"},"readme":"[![Actions Status](https://github.com/bigeasy/reactor/workflows/Node%20CI/badge.svg)](https://github.com/bigeasy/reactor/actions)\n[![codecov](https://codecov.io/gh/bigeasy/reactor/branch/master/graph/badge.svg)](https://codecov.io/gh/bigeasy/reactor)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA fastify middleware builder.\n\n| What          | Where                                         |\n| --- | --- |\n| Discussion    | https://github.com/bigeasy/reactor/issues/1   |\n| Documentation | https://bigeasy.github.io/reactor             |\n| Source        | https://github.com/bigeasy/reactor            |\n| Issues        | https://github.com/bigeasy/reactor/issues     |\n| CI            | https://travis-ci.org/bigeasy/reactor         |\n| Coverage:     | https://codecov.io/gh/bigeasy/reactor         |\n| License:      | MIT                                           |\n\n\n```\nnpm install ascension\n```\n","readmeFilename":"README.md","gitHead":"ab6fb9ea0b41fe81f302e878edcbb10f3511e86f","_id":"reactor@17.0.0-alpha.13","_nodeVersion":"16.4.2","_npmVersion":"7.18.1","dist":{"integrity":"sha512-sC4cLTZMYm3lGsZ5qRBaXWE9QMlSIlXC99RD2lDRn5/ip8ICX7XNZsrfG4mMH92OgtTU5HCy+Rlg7ou7Kpvx4w==","shasum":"0327bf972580b15c2ced77e738042adc665d8b47","tarball":"https://registry.npmjs.org/reactor/-/reactor-17.0.0-alpha.13.tgz","fileCount":4,"unpackedSize":4890,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGVVydCOIlthaRDlxV9i42I8kFYC1uR6jDJVqmy0kPikAiAW1Io/uzb0vsAW9FJYNiviMAOWrKNJ3wcFQSVOxjdfsg=="}]},"_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"directories":{},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_17.0.0-alpha.13_1632165280376_0.36972111188026613"},"_hasShrinkwrap":false},"17.0.0-alpha.14":{"name":"reactor","version":"17.0.0-alpha.14","description":"A fastify server builder.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"fastify":"3.22.0"},"devDependencies":{"axios":"0.22.0","destructible":"^7.0.0-alpha.70","proof":"^9.0.3"},"main":"reactor","scripts":{"test":"proof test/*.t.js"},"readme":"[![Actions Status](https://github.com/bigeasy/reactor/workflows/Node%20CI/badge.svg)](https://github.com/bigeasy/reactor/actions)\n[![codecov](https://codecov.io/gh/bigeasy/reactor/branch/master/graph/badge.svg)](https://codecov.io/gh/bigeasy/reactor)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA fastify middleware builder.\n\n| What          | Where                                         |\n| --- | --- |\n| Discussion    | https://github.com/bigeasy/reactor/issues/1   |\n| Documentation | https://bigeasy.github.io/reactor             |\n| Source        | https://github.com/bigeasy/reactor            |\n| Issues        | https://github.com/bigeasy/reactor/issues     |\n| CI            | https://travis-ci.org/bigeasy/reactor         |\n| Coverage:     | https://codecov.io/gh/bigeasy/reactor         |\n| License:      | MIT                                           |\n\n\n```\nnpm install ascension\n```\n","readmeFilename":"README.md","gitHead":"1f923b4bf2083e723c211cf8ce2d07010ebecfef","_id":"reactor@17.0.0-alpha.14","_nodeVersion":"16.4.2","_npmVersion":"7.18.1","dist":{"integrity":"sha512-o4pwNgIX97rlwfhGWjeUCy9BTH4YbTNMN22SBSRZpwGhMC5vyIctsi0jroYpqMrKHR9Mmw/eDy1C039678r7Hg==","shasum":"82c0ae23568eaec08cf2140f60d41676024c3ffb","tarball":"https://registry.npmjs.org/reactor/-/reactor-17.0.0-alpha.14.tgz","fileCount":4,"unpackedSize":4890,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBu2KhbIKhRNP/txKxl/u4ao2/gSPTQQhIedOGuDqLWuAiAbMeRq2jsKgTvncF8vM8FB9C0Wp/9f/Wi8txt/CbxaFg=="}]},"_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"directories":{},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_17.0.0-alpha.14_1633694673573_0.7757706911315538"},"_hasShrinkwrap":false},"17.0.0-alpha.15":{"name":"reactor","version":"17.0.0-alpha.15","description":"A fastify server builder.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"extant":"2.0.0-alpha.4","fastify":"3.22.0"},"devDependencies":{"axios":"0.22.0","destructible":"^7.0.0-alpha.70","proof":"^9.0.3"},"main":"reactor","scripts":{"test":"proof test/*.t.js"},"readme":"[![Actions Status](https://github.com/bigeasy/reactor/workflows/Node%20CI/badge.svg)](https://github.com/bigeasy/reactor/actions)\n[![codecov](https://codecov.io/gh/bigeasy/reactor/branch/master/graph/badge.svg)](https://codecov.io/gh/bigeasy/reactor)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA fastify middleware builder.\n\n| What          | Where                                         |\n| --- | --- |\n| Discussion    | https://github.com/bigeasy/reactor/issues/1   |\n| Documentation | https://bigeasy.github.io/reactor             |\n| Source        | https://github.com/bigeasy/reactor            |\n| Issues        | https://github.com/bigeasy/reactor/issues     |\n| CI            | https://travis-ci.org/bigeasy/reactor         |\n| Coverage:     | https://codecov.io/gh/bigeasy/reactor         |\n| License:      | MIT                                           |\n\n\n```\nnpm install ascension\n```\n","readmeFilename":"README.md","gitHead":"97ce2eec42a61f497fec61d10e76cbc29819dac9","_id":"reactor@17.0.0-alpha.15","_nodeVersion":"16.4.2","_npmVersion":"7.18.1","dist":{"integrity":"sha512-zyM7eqIOMrDoB4ZNhRpkJkAXczcKaU6OVMwWClAR2Dy20PnjWUq2H+Ey6JQYvRmimH5KG2eH0XillAfYDED1iQ==","shasum":"f4af1c9fecec70bacb7d08e5be879e8938d09c1c","tarball":"https://registry.npmjs.org/reactor/-/reactor-17.0.0-alpha.15.tgz","fileCount":4,"unpackedSize":5625,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDU5N3WLt7aGlPriUACMX0ZMTpoX4PjDAagCiHaaE7HcwIhAK3GANksEutsDcyA1ixc07LXp2qa4eTV6IteJeU3yONS"}]},"_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"directories":{},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_17.0.0-alpha.15_1634865276135_0.6792281739556603"},"_hasShrinkwrap":false},"17.0.0-alpha.16":{"name":"reactor","version":"17.0.0-alpha.16","description":"A fastify server builder.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"extant":"2.0.0-alpha.4","fastify":"3.23.0"},"devDependencies":{"axios":"0.24.0","destructible":"^7.0.0-alpha.70","proof":"^9.0.3"},"main":"reactor","scripts":{"test":"proof test/*.t.js"},"readme":"[![Actions Status](https://github.com/bigeasy/reactor/workflows/Node%20CI/badge.svg)](https://github.com/bigeasy/reactor/actions)\n[![codecov](https://codecov.io/gh/bigeasy/reactor/branch/master/graph/badge.svg)](https://codecov.io/gh/bigeasy/reactor)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA fastify middleware builder.\n\n| What          | Where                                         |\n| --- | --- |\n| Discussion    | https://github.com/bigeasy/reactor/issues/1   |\n| Documentation | https://bigeasy.github.io/reactor             |\n| Source        | https://github.com/bigeasy/reactor            |\n| Issues        | https://github.com/bigeasy/reactor/issues     |\n| CI            | https://travis-ci.org/bigeasy/reactor         |\n| Coverage:     | https://codecov.io/gh/bigeasy/reactor         |\n| License:      | MIT                                           |\n\n\n```\nnpm install ascension\n```\n","readmeFilename":"README.md","gitHead":"d63a9b26ef5b8c82b667471528dd9245cbba599e","_id":"reactor@17.0.0-alpha.16","_nodeVersion":"16.4.2","_npmVersion":"7.18.1","dist":{"integrity":"sha512-Wf56Y1awDIamyFkruwjCnX9wRnBGZvLnEMBNOJgo44LCHQQxHxxrfx4cYLd+p+OAw3LDMvZjoizGu11eYVeYGw==","shasum":"a28cf92093a0235860a457733a0c06db460c21cd","tarball":"https://registry.npmjs.org/reactor/-/reactor-17.0.0-alpha.16.tgz","fileCount":4,"unpackedSize":5625,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFkDg4NlQY9yT6ycqvpmAKGco6ollb/htr/4RPwmSUkJAiEAuQshsrvj/AgBvOzibzeTSxIOm/A4t7FWzVTaxAPt8oo="}]},"_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"directories":{},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_17.0.0-alpha.16_1636078918507_0.887148865569642"},"_hasShrinkwrap":false},"17.0.0-alpha.17":{"name":"reactor","version":"17.0.0-alpha.17","description":"A fastify server builder.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"extant":"2.0.0-alpha.4","fastify":"3.23.0"},"devDependencies":{"axios":"0.24.0","destructible":"^7.0.0-alpha.70","proof":"^9.0.3"},"main":"reactor","scripts":{"test":"proof test/*.t.js"},"readme":"[![Actions Status](https://github.com/bigeasy/reactor/workflows/Node%20CI/badge.svg)](https://github.com/bigeasy/reactor/actions)\n[![codecov](https://codecov.io/gh/bigeasy/reactor/branch/master/graph/badge.svg)](https://codecov.io/gh/bigeasy/reactor)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA fastify middleware builder.\n\n| What          | Where                                         |\n| --- | --- |\n| Discussion    | https://github.com/bigeasy/reactor/issues/1   |\n| Documentation | https://bigeasy.github.io/reactor             |\n| Source        | https://github.com/bigeasy/reactor            |\n| Issues        | https://github.com/bigeasy/reactor/issues     |\n| CI            | https://travis-ci.org/bigeasy/reactor         |\n| Coverage:     | https://codecov.io/gh/bigeasy/reactor         |\n| License:      | MIT                                           |\n\n\n```\nnpm install ascension\n```\n","readmeFilename":"README.md","gitHead":"4a7c29f48cc6736cabc51e84c8787ccd808da9fd","_id":"reactor@17.0.0-alpha.17","_nodeVersion":"16.4.2","_npmVersion":"7.18.1","dist":{"integrity":"sha512-WgVa/huNjkCddbYzHqD3eYF/Qlpha1evQN20vEpzj98WxvRQULYWeJFuszeyhOLoNet4JiCAblPerDjZBHb6bw==","shasum":"05afad725820abb7a098537d0ea31d4b1efa46ce","tarball":"https://registry.npmjs.org/reactor/-/reactor-17.0.0-alpha.17.tgz","fileCount":4,"unpackedSize":5660,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCZ/UOJWqGdtwK85PCQUf/V/DtRkpQ7d44LCLVm/DxYagIhAJEOpSgGDRcSqGhT0KMN0ca4HcH9csdapiolANDuTodg"}]},"_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"directories":{},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_17.0.0-alpha.17_1636087503139_0.6485783655895667"},"_hasShrinkwrap":false},"17.0.0-alpha.18":{"name":"reactor","version":"17.0.0-alpha.18","description":"A fastify server builder.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"extant":"2.0.0-alpha.4","fastify":"3.23.1"},"devDependencies":{"axios":"0.24.0","destructible":"^7.0.0-alpha.70","proof":"^9.0.3"},"main":"reactor","scripts":{"test":"proof test/*.t.js"},"readme":"[![Actions Status](https://github.com/bigeasy/reactor/workflows/Node%20CI/badge.svg)](https://github.com/bigeasy/reactor/actions)\n[![codecov](https://codecov.io/gh/bigeasy/reactor/branch/master/graph/badge.svg)](https://codecov.io/gh/bigeasy/reactor)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA fastify middleware builder.\n\n| What          | Where                                         |\n| --- | --- |\n| Discussion    | https://github.com/bigeasy/reactor/issues/1   |\n| Documentation | https://bigeasy.github.io/reactor             |\n| Source        | https://github.com/bigeasy/reactor            |\n| Issues        | https://github.com/bigeasy/reactor/issues     |\n| CI            | https://travis-ci.org/bigeasy/reactor         |\n| Coverage:     | https://codecov.io/gh/bigeasy/reactor         |\n| License:      | MIT                                           |\n\n\n```\nnpm install ascension\n```\n","readmeFilename":"README.md","gitHead":"337b18e313a24d1800fbe5b4846aa60751b8a10e","_id":"reactor@17.0.0-alpha.18","_nodeVersion":"16.5.0","_npmVersion":"7.19.1","dist":{"integrity":"sha512-sxAbYpaCQ99+Atm34UmI8+q61Q9Ly+u+oeAm9PanEY80IBn89OmSHplb5hon5+GRlL4Vmag28JveWivpenpTAA==","shasum":"cca3cf9d994be369830dc0c7281fb8e1bca80ed2","tarball":"https://registry.npmjs.org/reactor/-/reactor-17.0.0-alpha.18.tgz","fileCount":4,"unpackedSize":5660,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEzFNOb1RYxXkoBMA6OZExJx2BnKscjHyxjj8LMgWu8ZAiEAudVOYSSFS1taRJIGA/fipOce6+MkfP4S6RWjBzM6Pto="}]},"_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"directories":{},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_17.0.0-alpha.18_1636443534335_0.9568773787420317"},"_hasShrinkwrap":false},"17.0.0-alpha.19":{"name":"reactor","version":"17.0.0-alpha.19","description":"A fastify server builder.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"extant":"2.0.0-alpha.4","fastify":"3.24.1"},"devDependencies":{"axios":"0.24.0","destructible":"^7.0.0-alpha.70","proof":"^9.0.3"},"main":"reactor","scripts":{"test":"proof test/*.t.js"},"readme":"[![Actions Status](https://github.com/bigeasy/reactor/workflows/Node%20CI/badge.svg)](https://github.com/bigeasy/reactor/actions)\n[![codecov](https://codecov.io/gh/bigeasy/reactor/branch/master/graph/badge.svg)](https://codecov.io/gh/bigeasy/reactor)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA fastify middleware builder.\n\n| What          | Where                                         |\n| --- | --- |\n| Discussion    | https://github.com/bigeasy/reactor/issues/1   |\n| Documentation | https://bigeasy.github.io/reactor             |\n| Source        | https://github.com/bigeasy/reactor            |\n| Issues        | https://github.com/bigeasy/reactor/issues     |\n| CI            | https://travis-ci.org/bigeasy/reactor         |\n| Coverage:     | https://codecov.io/gh/bigeasy/reactor         |\n| License:      | MIT                                           |\n\n\n```\nnpm install ascension\n```\n","readmeFilename":"README.md","gitHead":"66afe290e9aba9042d2cbb44e7e26bf629975a80","_id":"reactor@17.0.0-alpha.19","_nodeVersion":"16.4.2","_npmVersion":"7.18.1","dist":{"integrity":"sha512-Y1djLwtyejRrG7c7LBeF0/EDSn/wg9eauERcwpaLpjOhs0BYB7spjwl9NuKmXFLyHSCCtyQOWy/I8ddhTqoe/w==","shasum":"05e2854704fd91cc98c2c04a4952452fbc93633c","tarball":"https://registry.npmjs.org/reactor/-/reactor-17.0.0-alpha.19.tgz","fileCount":4,"unpackedSize":5660,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhsBMmCRA9TVsSAnZWagAARQQQAKR5lqGD8jheCAB/Y88m\n09KEaWbhtL3sqYq6TlVrQkKhQE5oxGOBExvDzmmQHM2+FXVTqS5h479tKYnp\nEOloGHdYt3XIxa5ena9llNSmOBpP8/pw8YAlx+Gu1tABebFsAIwRHb1rDTIA\nOOi8KgfqRNYgUlVXthbzbzPXSp9BRbECva3mZ8Lvq0ruqougfQXKrCTHE9IM\nQE6amSMJBNssUMZZGMguWtmU2bmoUHheNkk44N2wbWBi5I2+ZGks4M/3NMcZ\nxvkPIt0KVt9WRGn/wrT7xyxqwVJlrdAI0iMfehcKRQDQfI2wn+ow8eUlfQko\nbzSn5HGwYkJgeGeg1vzK9XZ2oTOhGKZg65V2BtOh4sJ4xjKpUGCDfP+ShvxT\nh7L/1+3Qc8XH7NVFbXVXGFQ6WI2rXpn0+pXew/uWg8Ttot7MlBY/P5DsIIT1\nL4dAJSbAPO/VsG7tpIN78rIl2YYDw86YKfDPeBcFvmBH4S1qlxVSvT/3PTbz\n3AcLxWiRS3lEzj2s/3Gnxb6eL7EY33tusvErtJ7mwPxxovO73U3LEYIOGRQ1\nR4pJvacRW5S6HPJafzJFo1PUZQR25wuC+ClQwC6IwoRAw/tgeROj9tB82pOZ\n7Dwz6EOp2BGKt32ZOpl36pC+uj0Qi8cHQvmw95BXeHJaLVROPcDK5Okn0/ZR\nbeJ6\r\n=SNLx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF2qh7p7LXFHQTwEqIYTN9fTmX6i5BK5/3Cf2nCYG31pAiEAsl+ny72vd3NGe+q2gvbd/uEX93MyBaSqQOdoThMefHw="}]},"_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"directories":{},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_17.0.0-alpha.19_1638929190422_0.8816278811651552"},"_hasShrinkwrap":false},"17.0.0-alpha.20":{"name":"reactor","version":"17.0.0-alpha.20","description":"A fastify server builder.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"extant":"2.0.0-alpha.4","fastify":"3.25.0"},"devDependencies":{"axios":"0.24.0","destructible":"^7.0.0-alpha.70","proof":"^9.0.3"},"main":"reactor","scripts":{"test":"proof test/*.t.js"},"readme":"[![Actions Status](https://github.com/bigeasy/reactor/workflows/Node%20CI/badge.svg)](https://github.com/bigeasy/reactor/actions)\n[![codecov](https://codecov.io/gh/bigeasy/reactor/branch/master/graph/badge.svg)](https://codecov.io/gh/bigeasy/reactor)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA fastify middleware builder.\n\n| What          | Where                                         |\n| --- | --- |\n| Discussion    | https://github.com/bigeasy/reactor/issues/1   |\n| Documentation | https://bigeasy.github.io/reactor             |\n| Source        | https://github.com/bigeasy/reactor            |\n| Issues        | https://github.com/bigeasy/reactor/issues     |\n| CI            | https://travis-ci.org/bigeasy/reactor         |\n| Coverage:     | https://codecov.io/gh/bigeasy/reactor         |\n| License:      | MIT                                           |\n\n\n```\nnpm install ascension\n```\n","readmeFilename":"README.md","gitHead":"a565cbb04d6e95e48a56d1534ec384e9b831c0c4","_id":"reactor@17.0.0-alpha.20","_nodeVersion":"16.4.2","_npmVersion":"7.18.1","dist":{"integrity":"sha512-p6Hde2O2azxH869ZdQguYzdtwmkxUHEuGaftR8Dznru9NJNxJ0O/UnPXUeH2+ns5YHdVozoz5qTcM6ktRZ6cIA==","shasum":"ea701c2ae802ffa4e2fb94a535138fb3df0d6669","tarball":"https://registry.npmjs.org/reactor/-/reactor-17.0.0-alpha.20.tgz","fileCount":4,"unpackedSize":5660,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhusKdCRA9TVsSAnZWagAAX8IP/ioVDVqnX0oQ04uZy/hb\nntGUfSmMW2YbTMZ23YR+diNdHHuYapLfUg8EzEbxTmEOOJpql0bNKUIayihN\nsFwslLESyEn3RY4uWeuKj750Oe6tA5HexjKSKgj4W3Bxvsv5M/NAYZQoW7+e\nYiLwCot8Gv1VGk7pPSwvLGoSRaZoVWXgxiZR/LiHPdAgGYktyG7rYYS+BEZV\npl+7aMctaWhcImTZT/vOjP1hikNxOVlN2Y21LGhRw/vYxKlMUbt7s41NVlEt\nFaBbsh+e/M0Iv7lEVHFDt6AWY03L2XPoAxFzucjnVTf6noIwAfSDsSNzrIHB\nN6bhj1D8r7P+9zRwNbAIpJewbVnsqVWsulDO21iC46GXBQaDjp/keM0oNMeZ\nAF5VrZSW4K3xtiyhH2HTQZko/7VsFPEZLQJwEwVCA3X5IafYUR3Q/flk1xDW\n+lIWs5vZx31nAIGLGgq4CIFOY0rrdokSYPdqL/jUxT6bvM3UtsAJXBBsXyCi\nB3TFyFa4UCK/UmNqvd57Qx0MjHVJggRzy+rXoJkT2OI5xsQRTJ9CeSCfJPhI\nPUilZHtwGbGpWPQeTZw4w7m4084UKFC7XsoCCQdJWlJA5tb4GhxsTxD367Dt\nvv+smwGTJttlorum1tfCplS40l/TnPtn0gPP5YofLGNWNTER3RXRbsbZbID4\n8mcR\r\n=Izx5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC4Ot1874IPWGm6DSMtgRITG1uxEmrV2C9lHsNVD55YugIganVBnZXzPpfpYPlLZNOoyru5HvrGRYe89oThCJ0+5C4="}]},"_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"directories":{},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_17.0.0-alpha.20_1639629468990_0.8928650536552352"},"_hasShrinkwrap":false},"17.0.0-alpha.21":{"name":"reactor","version":"17.0.0-alpha.21","description":"A fastify server builder.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"extant":"2.0.0-alpha.5","fastify":"3.27.1"},"devDependencies":{"axios":"0.25.0","destructible":"^7.0.0-alpha.70","proof":"^9.0.3"},"main":"reactor","scripts":{"test":"proof test/*.t.js"},"readme":"[![Actions Status](https://github.com/bigeasy/reactor/workflows/Node%20CI/badge.svg)](https://github.com/bigeasy/reactor/actions)\n[![codecov](https://codecov.io/gh/bigeasy/reactor/branch/master/graph/badge.svg)](https://codecov.io/gh/bigeasy/reactor)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA fastify middleware builder.\n\n| What          | Where                                         |\n| --- | --- |\n| Discussion    | https://github.com/bigeasy/reactor/issues/1   |\n| Documentation | https://bigeasy.github.io/reactor             |\n| Source        | https://github.com/bigeasy/reactor            |\n| Issues        | https://github.com/bigeasy/reactor/issues     |\n| CI            | https://travis-ci.org/bigeasy/reactor         |\n| Coverage:     | https://codecov.io/gh/bigeasy/reactor         |\n| License:      | MIT                                           |\n\n\n```\nnpm install ascension\n```\n","readmeFilename":"README.md","gitHead":"1d38ad33eb7dbc0e23c029cfde953d6462efd4f4","_id":"reactor@17.0.0-alpha.21","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"integrity":"sha512-TPp/xVoNe9PSkRWn3VDz615sq6KjONvUYOliu2dkmcCXcnY5bnbx3S0fcNOCxwA9SkowgipP7GW0yM0+Igkb5g==","shasum":"6bdc0931a6740d7efda6934b9cbd4ea8febece3e","tarball":"https://registry.npmjs.org/reactor/-/reactor-17.0.0-alpha.21.tgz","fileCount":4,"unpackedSize":5660,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiAMTjCRA9TVsSAnZWagAAsskP/jtGn61cTRSfVraK2uDZ\nkWx4pLv3Qhx54Huhh5W9OA5qmeF/hwFNVYfPk7txxkZFI+2q2sLWLJKSCfC0\nMKIemjEOQmdZ3RFpYZVeYJ1gzCwQzAIP8kaoQrReqsYJrJbQ97KCTO5j1bmV\nvcw2vccdU1y9K3RQG2cY7ylWOL3SyTf3rfGqKC3M8El1EkY9wcVqyHFBQvyj\n80kA1XKs627kclHa49oMeS5g1Lg8BDn4UsvqzBOrfz4/8wKjjEGfSaqhXPuL\nZeecYkqe0LRSlvtt+qNuUN2FGAsjfNAxWdsmBVE4v7iEKaAaFOIdoxXCzeLg\naapOKLJBJ88S/iUsPS6i215IFgawn41DQrToFw6ACykC68Il1fam/ZaOyTox\nA7E2rQG5MeTh41ABddh7wPkk8yV1vAlnW3uW7VC47w1of6E6yzLGxNoe7S+8\nMCONn65OPFMtrJSgXdKOxMjf+OYZrhM+wsn5WKXDSWTAX9nCFQkQmh7HHPnK\neJThpaSqAyXkTNkZn1GN50j6ui/pzBikn6h1J9tN50MohCikf33mGrg5jfGV\nbI8B3UzayKTo6XLYuSOQOpeFSldyteOBi6MKkyzIKFtWfHZT8VUsSTSgoKMZ\nUlFrjdzVyW8Cb8VSmPj41Wio703L5ReYfh5CwZh7WyHwzeMbtJLTaJ8q7iYo\n67c0\r\n=gggv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBaWFHN4CagCH3ghhdXG475rJiX+KvUSwTCby6aYv94zAiEAsHkj+TwZ6id8kgIvd3mvwxl5Ga6IXpLq6Ev27YM8/AQ="}]},"_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"directories":{},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_17.0.0-alpha.21_1644217570981_0.9826108843216796"},"_hasShrinkwrap":false},"17.0.0-alpha.22":{"name":"reactor","version":"17.0.0-alpha.22","description":"A fastify server builder.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"extant":"2.0.0-alpha.5","fastify":"3.27.2"},"devDependencies":{"axios":"0.26.0","destructible":"^7.0.0-alpha.70","proof":"^9.0.3"},"main":"reactor","scripts":{"test":"proof test/*.t.js"},"readme":"[![Actions Status](https://github.com/bigeasy/reactor/workflows/Node%20CI/badge.svg)](https://github.com/bigeasy/reactor/actions)\n[![codecov](https://codecov.io/gh/bigeasy/reactor/branch/master/graph/badge.svg)](https://codecov.io/gh/bigeasy/reactor)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA fastify middleware builder.\n\n| What          | Where                                         |\n| --- | --- |\n| Discussion    | https://github.com/bigeasy/reactor/issues/1   |\n| Documentation | https://bigeasy.github.io/reactor             |\n| Source        | https://github.com/bigeasy/reactor            |\n| Issues        | https://github.com/bigeasy/reactor/issues     |\n| CI            | https://travis-ci.org/bigeasy/reactor         |\n| Coverage:     | https://codecov.io/gh/bigeasy/reactor         |\n| License:      | MIT                                           |\n\n\n```\nnpm install ascension\n```\n","readmeFilename":"README.md","gitHead":"98421e2226ac8b596c9c0a573b804c498ae170b6","_id":"reactor@17.0.0-alpha.22","_nodeVersion":"16.13.2","_npmVersion":"8.1.2","dist":{"integrity":"sha512-np1SZJaD3Gdbe6jAebpOH/cHrx5+yO8/MzoPHISikTXmA2sewgb39nR10Tyiy8ZQLfAaKPqPeEk1h9xFhp0+LA==","shasum":"63763b67a677f04985a5b0e6bb851fb7ece3c33c","tarball":"https://registry.npmjs.org/reactor/-/reactor-17.0.0-alpha.22.tgz","fileCount":4,"unpackedSize":5660,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiGcfdACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmonjA/+PnqvAzNaiVvwMq5KWO9XnBHz+gYaTePJNWjPY+8JD06jAeNO\r\niscphN7YUNjYrm39LS142GGzMDTZ0OBA8ebNF0aCivHqse+Km7iopoa58+4R\r\nfS740gZPeaUhksDNMNP+qMxxfFZx6UXlr5pegt7jPFn0BrfE9+1hNv1e/Ez5\r\nxJNVed+Z8eftYT+CFzI6HXDoweB7ggzMh6S352i6AV8VKa91dBYDrcmZHsR9\r\n5k0dhv75mHkwpZvSrAv/z6Xp8vm1PNRXwDgQJQpLNnwaZ9SORIQ2L9dEfXeX\r\nhdOtXSXcFex9DTr43mhJJxGuFLtMO40E+E4hUUFF4y/4bH9VSwrIwVOYMIkm\r\namfrfZuoe3EvxRfqKCSDi6tCe8fF1E++4knbkewGhTliv1bbSF4pLxtDFHJ5\r\nFMrlwUmPstWOHHAg5wt5oyqRN1mTxWqRKhbNXjcbaKTxqWegJbFctUhvWwXg\r\nLlG4uh+EbfrcrvqUkJ6/NcXjtIMe4KaIeTtrcFXeDU78ouBD0OvLpyCD57My\r\nE5bMzEThn04r6EnyjHnl51a+vpf/dDxYgldJp8gkGxiGRb+MrJlP6A9gNzA0\r\n2K8WimCBYjZTfeUA9gb1K1p/vtWLUtAlCRaqWU6qT5m2PyaQl+HQ76NBnYBc\r\n1jNLb3HEnZhVMpy5PVH8snCysCsy8qpRWE4=\r\n=Rbze\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICSTSO1eYElhVKyyxaC4483IN80QCo54rx6t6VopgV7aAiEAtpwjXK8CLMx+QNAjZcjbhvk5QMFeSgv01UpcIw4USIg="}]},"_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"directories":{},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_17.0.0-alpha.22_1645856733592_0.12038222398031428"},"_hasShrinkwrap":false},"17.0.0-alpha.23":{"name":"reactor","version":"17.0.0-alpha.23","description":"A fastify server builder.","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"homepage":"http://bigeasy.github.com/reactor","bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"dependencies":{"extant":"2.0.0-alpha.5","fastify":"3.27.3"},"devDependencies":{"axios":"0.26.0","destructible":"^7.0.0-alpha.70","proof":"^9.0.3"},"main":"reactor","scripts":{"test":"proof test/*.t.js"},"readme":"[![Actions Status](https://github.com/bigeasy/reactor/workflows/Node%20CI/badge.svg)](https://github.com/bigeasy/reactor/actions)\n[![codecov](https://codecov.io/gh/bigeasy/reactor/branch/master/graph/badge.svg)](https://codecov.io/gh/bigeasy/reactor)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA fastify middleware builder.\n\n| What          | Where                                         |\n| --- | --- |\n| Discussion    | https://github.com/bigeasy/reactor/issues/1   |\n| Documentation | https://bigeasy.github.io/reactor             |\n| Source        | https://github.com/bigeasy/reactor            |\n| Issues        | https://github.com/bigeasy/reactor/issues     |\n| CI            | https://travis-ci.org/bigeasy/reactor         |\n| Coverage:     | https://codecov.io/gh/bigeasy/reactor         |\n| License:      | MIT                                           |\n\n\n```\nnpm install ascension\n```\n","readmeFilename":"README.md","gitHead":"c1b21c0b5966ab66098f843a97530031807f7cc9","_id":"reactor@17.0.0-alpha.23","_nodeVersion":"16.13.2","_npmVersion":"8.1.2","dist":{"integrity":"sha512-9TehSnewwWYdYlm507aKdetTyqUUAd99KGzN4ErKr0Osmk1xmn2Tx/Vp+mnhlMYO1/Jakewo7a9HFoQiZqswtg==","shasum":"b06d717f7d6623ed817155429c2e4f7b645890af","tarball":"https://registry.npmjs.org/reactor/-/reactor-17.0.0-alpha.23.tgz","fileCount":4,"unpackedSize":5660,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiJw1FACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoM9Q/9H0MIZu7TC5e2WIwaGSk3tpdPocq9OSHZ/OYJ7/1aS9lqAdNv\r\nlv1ohd1FiL9gJs/nRk+yWSOQzeGoAqDeXwIfQMEkPHDrOyE+uXp7f524z7Sl\r\nCXF6Hf3Vz2Gwf4NTY7eoOeJRuMXRWYhi+BaAmzBEpiwyxkaXFOFoqqz26Ytm\r\nr14d7P9ZEBB6uZghhshn/bHf4Kl6vjEUgNMRgD15U2+XYl9ROhiBvpOPn7Hy\r\nMHsZMLGG6uM06GiWjjAs9m48GAFF5Rwag0Oeo/SbH8LpKaiZdbYu86Ryt3cc\r\nmM2Q90og3/rGTIls2k4s3If+kPyBgHdHaP3TnVkZm3SfpsjrtV270zJqyolI\r\nlQqG49NoUY39Coe4Rfy+Kfu6eDwTW+bic2DM6F45iemBWJ3UMb+MoWam1A1Z\r\njLY1HRvrr7oVwi977s8qBbEjhhIhQyCrQaY3jIBSpyQaUU/cA8lWbUg200tM\r\nmWiO3G+UoXATmnk38Ry7EQ4n0/vLUj7Y2V925oNOjYXqUl5eJ+5zTZ6ctzGL\r\nwfk1dsrnYPoRgFO5gRzNG6GwKQof1vacwW4UB27fM9UyLefKd2Y6PPrFe11j\r\nye7A4ghE3e6n7ndVujWJA9FLHY1dvCxfkGYjrexcQO953Y2fRiJei8Q+7S9z\r\nQSQUlV+z90NgLKbOZRZ8OnICVI65un5xYoc=\r\n=ffvd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAVJA9e14ZCvg9yfwUJbIoSbsPwa5PqBQEmdgVP8XJB0AiEA3bYVzH0Vb+U4IuZienJsqVTuN3fUd4sA2r0+qwAJXDs="}]},"_npmUser":{"name":"bigeasy","email":"alan@prettyrobots.com"},"directories":{},"maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reactor_17.0.0-alpha.23_1646726469366_0.8785409609274026"},"_hasShrinkwrap":false}},"readme":"","maintainers":[{"name":"bigeasy","email":"alan@prettyrobots.com"}],"time":{"modified":"2022-06-26T09:10:10.255Z","created":"2012-05-24T08:39:51.773Z","0.0.1":"2012-05-24T08:39:54.353Z","0.0.2":"2012-07-19T08:16:52.464Z","0.0.3":"2012-08-14T01:56:16.609Z","0.0.4":"2012-12-10T00:26:55.196Z","0.0.5":"2013-03-21T23:42:06.186Z","0.0.6":"2013-07-20T01:47:20.756Z","0.0.7":"2013-07-22T04:19:38.940Z","0.0.9":"2015-11-05T02:55:02.305Z","0.0.10":"2015-11-29T23:38:11.182Z","0.0.11":"2015-12-18T05:36:06.230Z","0.0.12":"2015-12-24T03:19:14.483Z","0.0.13":"2015-12-24T05:48:15.068Z","0.0.14":"2015-12-24T07:22:33.993Z","1.0.0":"2016-01-21T07:01:03.040Z","1.0.1":"2016-02-03T09:14:39.546Z","2.0.0":"2016-03-06T00:09:33.847Z","2.1.0":"2016-03-06T15:50:44.470Z","2.2.0":"2016-03-06T16:37:13.662Z","2.2.1":"2016-03-17T07:05:17.156Z","2.2.2":"2016-08-23T05:21:25.177Z","2.3.0":"2016-10-26T18:58:09.457Z","2.4.0":"2016-11-02T16:30:45.072Z","4.0.0":"2017-03-20T04:03:41.621Z","4.0.1":"2017-03-29T15:30:04.148Z","4.1.0":"2017-04-03T06:07:31.596Z","4.2.0":"2017-04-05T16:39:05.463Z","4.3.0":"2017-04-06T09:45:16.994Z","4.4.0":"2017-04-07T05:44:52.036Z","4.4.1":"2017-04-14T17:15:40.209Z","4.5.0":"2017-04-24T06:36:12.547Z","4.6.0":"2017-04-24T06:36:24.549Z","4.7.0":"2017-05-05T02:58:33.886Z","4.8.0":"2017-05-05T02:58:44.513Z","4.8.1":"2017-05-05T03:20:22.344Z","4.8.2":"2017-05-05T03:21:48.204Z","4.8.3":"2017-05-05T04:43:11.848Z","4.8.4":"2017-05-05T05:49:10.015Z","4.9.0":"2017-05-19T17:36:51.368Z","4.9.1":"2017-05-19T19:24:02.026Z","4.9.2":"2017-05-22T23:52:05.685Z","4.9.3":"2017-06-05T23:10:33.957Z","5.0.0":"2017-06-16T02:53:14.518Z","5.0.2":"2017-06-16T03:01:04.434Z","5.0.3":"2017-06-25T18:17:39.775Z","5.0.4":"2017-07-14T18:01:24.757Z","6.0.0":"2017-08-18T05:25:21.377Z","7.0.0":"2017-08-18T05:25:32.354Z","5.0.5":"2017-08-18T15:07:03.051Z","5.0.6":"2017-08-18T15:08:08.306Z","8.0.0":"2017-08-25T17:53:26.801Z","8.0.1":"2017-08-25T19:08:19.569Z","8.0.2":"2017-09-20T07:24:36.515Z","8.0.3":"2017-09-29T18:47:36.246Z","8.0.4":"2017-10-06T09:34:27.596Z","9.0.0":"2017-10-21T02:14:33.743Z","10.0.0":"2017-10-30T19:51:30.647Z","10.0.1":"2017-11-05T19:19:32.273Z","10.0.2":"2017-11-22T05:01:04.885Z","10.1.0":"2017-11-27T03:03:49.299Z","10.1.1":"2017-11-27T04:06:29.751Z","10.1.2":"2017-11-27T06:18:12.037Z","10.1.3":"2017-11-27T09:12:17.923Z","10.1.4":"2017-11-29T12:23:19.552Z","10.1.5":"2017-11-30T09:05:43.295Z","10.1.6":"2017-12-06T07:17:20.546Z","10.1.7":"2017-12-15T10:49:29.319Z","10.1.8":"2018-01-18T09:23:55.236Z","10.1.9":"2018-02-27T15:15:10.173Z","10.1.10":"2018-03-20T22:15:48.459Z","10.2.0":"2018-04-22T15:01:14.259Z","10.2.1":"2018-05-17T17:53:55.403Z","10.3.0":"2018-05-29T04:40:26.532Z","10.3.1":"2018-05-29T20:28:49.296Z","10.3.2":"2018-06-02T04:26:02.892Z","10.4.0":"2018-06-02T05:21:12.010Z","10.4.1":"2018-06-05T21:03:34.601Z","10.4.2":"2018-06-19T06:34:23.435Z","10.4.3":"2018-06-20T05:05:03.136Z","10.4.4":"2018-07-26T08:55:38.477Z","10.4.5":"2018-07-26T15:56:43.123Z","10.5.0":"2018-08-12T19:34:53.541Z","10.5.1":"2018-09-04T00:00:44.917Z","10.5.2":"2018-09-12T04:08:13.139Z","10.5.3":"2018-09-16T18:12:15.939Z","10.6.0":"2018-10-21T08:18:47.841Z","10.6.1":"2018-10-21T09:11:14.264Z","10.6.2":"2018-10-26T16:27:42.445Z","10.6.3":"2018-10-27T10:21:03.370Z","10.7.0":"2018-11-01T15:34:52.601Z","10.8.0":"2018-11-04T16:04:26.295Z","10.9.0":"2018-11-19T10:42:48.096Z","10.10.0":"2018-11-26T06:29:33.375Z","10.12.0":"2018-12-09T07:05:20.855Z","11.0.0":"2019-01-06T00:25:22.620Z","11.0.1":"2019-01-07T17:35:45.800Z","11.0.2":"2019-01-31T15:28:12.644Z","13.0.0":"2019-02-05T22:11:22.293Z","13.0.1":"2019-02-08T03:21:17.520Z","13.0.2":"2019-03-02T10:04:41.243Z","13.0.3":"2019-04-01T14:04:48.643Z","13.0.4":"2019-04-02T06:28:11.048Z","14.0.0":"2019-04-15T14:55:41.736Z","14.0.1":"2019-04-15T19:50:23.666Z","14.0.2":"2019-04-17T00:55:32.054Z","16.0.0":"2019-08-19T05:41:43.915Z","16.0.1":"2019-08-19T07:40:31.096Z","17.0.0-alpha.0":"2019-09-04T03:21:56.444Z","17.0.0-alpha.1":"2019-10-10T10:12:45.502Z","17.0.0-alpha.2":"2019-10-13T13:26:42.642Z","17.0.0-alpha.3":"2021-02-04T22:03:37.963Z","17.0.0-alpha.4":"2021-02-23T04:41:14.426Z","17.0.0-alpha.5":"2021-03-02T17:54:14.833Z","17.0.0-alpha.6":"2021-03-11T05:02:54.432Z","17.0.0-alpha.7":"2021-03-14T07:35:07.888Z","17.0.0-alpha.8":"2021-03-23T05:35:41.286Z","17.0.0-alpha.9":"2021-04-03T05:07:39.065Z","17.0.0-alpha.10":"2021-04-10T05:47:19.853Z","17.0.0-alpha.11":"2021-07-23T06:35:25.649Z","17.0.0-alpha.12":"2021-08-19T00:33:49.662Z","17.0.0-alpha.13":"2021-09-20T19:14:40.499Z","17.0.0-alpha.14":"2021-10-08T12:04:33.683Z","17.0.0-alpha.15":"2021-10-22T01:14:36.298Z","17.0.0-alpha.16":"2021-11-05T02:21:58.702Z","17.0.0-alpha.17":"2021-11-05T04:45:03.281Z","17.0.0-alpha.18":"2021-11-09T07:38:54.492Z","17.0.0-alpha.19":"2021-12-08T02:06:30.546Z","17.0.0-alpha.20":"2021-12-16T04:37:49.129Z","17.0.0-alpha.21":"2022-02-07T07:06:11.129Z","17.0.0-alpha.22":"2022-02-26T06:25:33.757Z","17.0.0-alpha.23":"2022-03-08T08:01:09.505Z"},"author":{"name":"Alan Gutierrez","email":"alan@prettyrobots.com"},"repository":{"type":"git","url":"git+https://github.com/bigeasy/reactor.git"},"homepage":"http://bigeasy.github.com/reactor","keywords":["cadence","queue","asynchronous","graph","make","rake","javascript"],"bugs":{"url":"https://github.com/bigeasy/reactor/issues"},"license":"MIT","readmeFilename":""}