{"_id":"shortbus","_rev":"27-f3e6facf72ed5240b7fbddf98342a781","name":"shortbus","description":"Shortbus is a lightweight data processing/ETL module designed to run asynchronous processes in a seemingly synchronous way. The module acts as a mini service bus. The approach helps developers produce more readable data flow code. Code is cleaner, more st","dist-tags":{"latest":"1.2.8"},"versions":{"1.0.0":{"name":"shortbus","version":"1.0.0","description":"Shortbus is a lightweight data processing/ETL module designed to run asynchronous processes in a seemingly synchronous way. The module acts as a mini service bus. The approach helps developers produce more readable data flow code. Code is cleaner, more st","main":"index.js","directories":{"test":"test"},"scripts":{"test":"mocha test"},"repository":{"type":"git","url":"https://github.com/coreybutler/shortbus.git"},"keywords":["data","flow","etl","async","sync","bus"],"author":{"name":"Corey Butler","email":"corey@coreybutler.com"},"license":"MIT","bugs":{"url":"https://github.com/coreybutler/shortbus/issues"},"homepage":"https://github.com/coreybutler/shortbus","gitHead":"0d473411e65b01f6f3d404e88d8ddf98e0861838","_id":"shortbus@1.0.0","_shasum":"f4b636de4368d2cfe56094d22d76c86802a5a6a5","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"cbutler","email":"corey@coreybutler.com"},"maintainers":[{"name":"cbutler","email":"corey@coreybutler.com"}],"dist":{"shasum":"f4b636de4368d2cfe56094d22d76c86802a5a6a5","tarball":"https://registry.npmjs.org/shortbus/-/shortbus-1.0.0.tgz","integrity":"sha512-W4K8vTJnX+ssXpiMduE8QRH8ox/pHKdjq2E7OQjdXAJsQGJnTAp9c+JxGQNdzNq7h7GtheevFQaZYSRFwu9EIA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQRCfXgnE/LZ40LzDXskgxC2EG2qHZd9qqRdanzTBQGwIhAOS/c3co3UNR8VjcUX6WUujcR+RVNkKJFcMgix6ZM2cn"}]}},"1.0.1":{"name":"shortbus","version":"1.0.1","description":"Shortbus is a lightweight data processing/ETL module designed to run asynchronous processes in a seemingly synchronous way. The module acts as a mini service bus. The approach helps developers produce more readable data flow code. Code is cleaner, more st","main":"index.js","directories":{"test":"test"},"scripts":{"test":"mocha test"},"repository":{"type":"git","url":"https://github.com/coreybutler/shortbus.git"},"keywords":["data","flow","etl","async","sync","bus"],"author":{"name":"Corey Butler","email":"corey@coreybutler.com"},"license":"MIT","bugs":{"url":"https://github.com/coreybutler/shortbus/issues"},"homepage":"https://github.com/coreybutler/shortbus","gitHead":"2096495f020853f2d8fbd50aeaea4c9bc4f37510","_id":"shortbus@1.0.1","_shasum":"b302824c68860cf624f886d688de9c1eb1c43782","_from":".","_npmVersion":"2.1.18","_nodeVersion":"0.10.33","_npmUser":{"name":"cbutler","email":"corey@coreybutler.com"},"maintainers":[{"name":"cbutler","email":"corey@coreybutler.com"}],"dist":{"shasum":"b302824c68860cf624f886d688de9c1eb1c43782","tarball":"https://registry.npmjs.org/shortbus/-/shortbus-1.0.1.tgz","integrity":"sha512-sUPEE4mA4PaI3wVcB3KzxCtXAxFJv1bSlRM89RFRtnG02QtaaFMddrwzIgy/3fib2SHqTOsfEqVs0upN4Vb/PA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD15d+V5INmh8Y/gBUmqCq3NF2pu8O38dxVQQ+oi35QNgIhAKNRhC9JvxUBGK1/0ZAsD4pEblA1tYtjAbeyKYRFnnHa"}]}},"1.0.3":{"name":"shortbus","version":"1.0.3","description":"Shortbus is a lightweight data processing/ETL module designed to run asynchronous processes in a seemingly synchronous way. The module acts as a mini service bus. The approach helps developers produce more readable data flow code. Code is cleaner, more st","main":"index.js","directories":{"test":"test"},"scripts":{"test":"mocha test"},"repository":{"type":"git","url":"git+https://github.com/coreybutler/shortbus.git"},"keywords":["data","flow","etl","async","sync","bus"],"author":{"name":"Corey Butler","email":"corey@coreybutler.com"},"license":"MIT","bugs":{"url":"https://github.com/coreybutler/shortbus/issues"},"homepage":"https://github.com/coreybutler/shortbus","devDependencies":{"mocha":"^2.1.0"},"gitHead":"53ba05476782c5decb362489cd6dee9014db7d5b","_id":"shortbus@1.0.3","_shasum":"bc15d365368e238c8d533ca475a21531ee203a0e","_from":".","_npmVersion":"2.14.12","_nodeVersion":"4.2.6","_npmUser":{"name":"cbutler","email":"corey@coreybutler.com"},"dist":{"shasum":"bc15d365368e238c8d533ca475a21531ee203a0e","tarball":"https://registry.npmjs.org/shortbus/-/shortbus-1.0.3.tgz","integrity":"sha512-fmqV10cJnfIkwQMuxb25d9edLEFONcQwWlTnUmp1Iw04lZL52/fApmfLCe6COFRceGCEvPHURC6tXyw4HooWNw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCzJiEciynbuHeOzv7zl3MSnaNjvK65gFZN1ul1w+vcVQIgGA7kXFxWEIXAUR85UL9NjFXloKnM6uBOBwAbhKN43Xg="}]},"maintainers":[{"name":"cbutler","email":"corey@coreybutler.com"}],"_npmOperationalInternal":{"host":"packages-6-west.internal.npmjs.com","tmp":"tmp/shortbus-1.0.3.tgz_1454389382886_0.6868932442739606"}},"1.0.4":{"name":"shortbus","version":"1.0.4","description":"Shortbus is a lightweight data processing/ETL module designed to run asynchronous processes in a seemingly synchronous way. The module acts as a mini service bus. The approach helps developers produce more readable data flow code. Code is cleaner, more st","main":"index.js","directories":{"test":"test"},"scripts":{"test":"mocha test"},"repository":{"type":"git","url":"git+https://github.com/coreybutler/shortbus.git"},"keywords":["data","flow","etl","async","sync","bus"],"author":{"name":"Corey Butler","email":"corey@coreybutler.com"},"license":"MIT","bugs":{"url":"https://github.com/coreybutler/shortbus/issues"},"engines":{"node":">=6.0.0"},"homepage":"https://github.com/coreybutler/shortbus","devDependencies":{"mocha":"^2.1.0"},"gitHead":"b12bb26e5669c2c735ff21e80f84c4f619e45c10","_id":"shortbus@1.0.4","_shasum":"dffecb10de2b16550e38b72dbffac6ee6b934749","_from":".","_npmVersion":"2.14.12","_nodeVersion":"4.2.6","_npmUser":{"name":"cbutler","email":"corey@coreybutler.com"},"dist":{"shasum":"dffecb10de2b16550e38b72dbffac6ee6b934749","tarball":"https://registry.npmjs.org/shortbus/-/shortbus-1.0.4.tgz","integrity":"sha512-/DQxZ2OVfEmgim1QUDZZEQ3Wam6D7vWdC23AohHikAwSNHVkC0VsQJZ3r9fe4qZ+LoqISdif3hJ5f3VJ8FcBhA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICAXJteqGFq0d2MoPkbLgYx0BKw/7OUW5hW9GiGRnjQqAiEA/NJfUGqkb4VFh44rdAoxb+IziFZNPzxJJ5vaQXZ8w5Y="}]},"maintainers":[{"name":"cbutler","email":"corey@coreybutler.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/shortbus-1.0.4.tgz_1467143714326_0.9064830760471523"}},"1.0.5":{"name":"shortbus","version":"1.0.5","description":"Shortbus is a lightweight data processing/ETL module designed to run asynchronous processes in a seemingly synchronous way. The module acts as a mini service bus. The approach helps developers produce more readable data flow code. Code is cleaner, more st","main":"index.js","directories":{"test":"test"},"scripts":{"test":"mocha test"},"repository":{"type":"git","url":"git+https://github.com/coreybutler/shortbus.git"},"keywords":["data","flow","etl","async","sync","bus"],"author":{"name":"Corey Butler","email":"corey@coreybutler.com"},"license":"MIT","bugs":{"url":"https://github.com/coreybutler/shortbus/issues"},"engines":{"node":">=6.0.0"},"homepage":"https://github.com/coreybutler/shortbus","devDependencies":{"mocha":"^2.1.0"},"gitHead":"9b7f14c63229fdb265f35825b75a654d76019ffd","_id":"shortbus@1.0.5","_shasum":"a683ebb35458420206e90a7c1004720ac3764341","_from":".","_npmVersion":"3.3.12","_nodeVersion":"5.1.1","_npmUser":{"name":"cbutler","email":"corey@coreybutler.com"},"dist":{"shasum":"a683ebb35458420206e90a7c1004720ac3764341","tarball":"https://registry.npmjs.org/shortbus/-/shortbus-1.0.5.tgz","integrity":"sha512-+8+JFqsp1vC36zsCAcSdWqBanXrwkd7t0/7Z26kXwAne2oH7w2qmIr+GYGqu7P1rk/QVyGzBM/J+DZuRuTWOlQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDSJAWI/kB8b+XF3aRWKAYc/gQF5oEEigz9R0vqs1rWqAIgaveKdIPhBdwyWf4Y9bLkqmzxSgVbYmgEHgSgsDkOn8E="}]},"maintainers":[{"name":"cbutler","email":"corey@coreybutler.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/shortbus-1.0.5.tgz_1467298073527_0.439308941597119"}},"1.0.6":{"name":"shortbus","version":"1.0.6","description":"Shortbus is a lightweight data processing/ETL module designed to run asynchronous processes in a seemingly synchronous way. The module acts as a mini service bus. The approach helps developers produce more readable data flow code. Code is cleaner, more st","main":"index.js","directories":{"test":"test"},"scripts":{"test":"mocha test"},"repository":{"type":"git","url":"git+https://github.com/coreybutler/shortbus.git"},"keywords":["data","flow","etl","async","sync","bus"],"author":{"name":"Corey Butler","email":"corey@coreybutler.com"},"license":"MIT","bugs":{"url":"https://github.com/coreybutler/shortbus/issues"},"engines":{"node":">=6.0.0"},"homepage":"https://github.com/coreybutler/shortbus","devDependencies":{"mocha":"^2.1.0"},"gitHead":"bf355867cfb97c2c366a4101866499cd03b49994","_id":"shortbus@1.0.6","_shasum":"ff6b838a68b622ccb296a0c2f5ee45340d44c55e","_from":".","_npmVersion":"3.3.12","_nodeVersion":"5.1.1","_npmUser":{"name":"cbutler","email":"corey@coreybutler.com"},"dist":{"shasum":"ff6b838a68b622ccb296a0c2f5ee45340d44c55e","tarball":"https://registry.npmjs.org/shortbus/-/shortbus-1.0.6.tgz","integrity":"sha512-owgzu8AMFOsYup1ZSUoa8rD/DTjmwE6GbeADmID9t1wGhYYchzfkVOwim12FDW1JsCIgsI4Pi6cdzWlmi6it3A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB+WA74aZmktShPzqLpvnBg1Nfxlv051avDVE4uHv8ojAiB1apQlIRYkxKmE43gIO1S36qx9O0mzZO7R9I2eHjr3Uw=="}]},"maintainers":[{"name":"cbutler","email":"corey@coreybutler.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/shortbus-1.0.6.tgz_1467304658689_0.5502213845029473"}},"1.0.7":{"name":"shortbus","version":"1.0.7","description":"Shortbus is a lightweight data processing/ETL module designed to run asynchronous processes in a seemingly synchronous way. The module acts as a mini service bus. The approach helps developers produce more readable data flow code. Code is cleaner, more st","main":"index.js","directories":{"test":"test"},"scripts":{"test":"mocha test"},"repository":{"type":"git","url":"git+https://github.com/coreybutler/shortbus.git"},"keywords":["data","flow","etl","async","sync","bus"],"author":{"name":"Corey Butler","email":"corey@coreybutler.com"},"license":"MIT","bugs":{"url":"https://github.com/coreybutler/shortbus/issues"},"engines":{"node":">=6.0.0"},"homepage":"https://github.com/coreybutler/shortbus","devDependencies":{"mocha":"^2.1.0"},"gitHead":"d22280c3522b38af81206f81f7678ab247924cfc","_id":"shortbus@1.0.7","_shasum":"d26874aa3111849eee24a57e8cff9a7e6853df02","_from":".","_npmVersion":"3.3.12","_nodeVersion":"5.1.1","_npmUser":{"name":"cbutler","email":"corey@coreybutler.com"},"dist":{"shasum":"d26874aa3111849eee24a57e8cff9a7e6853df02","tarball":"https://registry.npmjs.org/shortbus/-/shortbus-1.0.7.tgz","integrity":"sha512-aw5uXfH5mH7ES6N3q+ge83LD2JxXNl+cqxOxv9OteyCqA7Q0BtOtScIqKp6K8TJfLk+Hi56NIC1rwf2K4jN//w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD70cZapMhPJFe/xnspFhhMGJjFmLN1+9uD6wFeV8QeWwIhAKANcZ4xCPeFUfrDgShgKEEUHq9GKvCZOB4oSlnoj7TQ"}]},"maintainers":[{"name":"cbutler","email":"corey@coreybutler.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/shortbus-1.0.7.tgz_1472167494405_0.11039163661189377"}},"1.0.8":{"name":"shortbus","version":"1.0.8","description":"Shortbus is a lightweight data processing/ETL module designed to run asynchronous processes in a seemingly synchronous way. The module acts as a mini service bus. The approach helps developers produce more readable data flow code. Code is cleaner, more st","main":"index.js","directories":{"test":"test"},"scripts":{"test":"mocha test"},"repository":{"type":"git","url":"git+https://github.com/coreybutler/shortbus.git"},"keywords":["data","flow","etl","async","sync","bus"],"author":{"name":"Corey Butler","email":"corey@coreybutler.com"},"license":"MIT","bugs":{"url":"https://github.com/coreybutler/shortbus/issues"},"engines":{"node":">=6.0.0"},"homepage":"https://github.com/coreybutler/shortbus","devDependencies":{"mocha":"^2.1.0"},"gitHead":"fdcefa3c2ea5cfc9b4ef85fa5b8eabb2b3b34752","_id":"shortbus@1.0.8","_shasum":"ce80cf148b9f687c30bc73630e6653be5c1021d6","_from":".","_npmVersion":"3.3.12","_nodeVersion":"5.1.1","_npmUser":{"name":"cbutler","email":"corey@coreybutler.com"},"dist":{"shasum":"ce80cf148b9f687c30bc73630e6653be5c1021d6","tarball":"https://registry.npmjs.org/shortbus/-/shortbus-1.0.8.tgz","integrity":"sha512-VeRvwmwhQ4/lAUlzygeSA2ASwfH6ZuHs+dvlXMaRMoztDGoYz9rGpjNvC8WVcyd7YUNIEAcKs085MBJJT7cdZw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEMCH1IEf4sIJ2Aw6mZJ+erpWpxoVE/9OLA6EqpW2QH1p1QCIE/w0AbYWjhz3vX5BYUqx39joY9iFEf67O5fm9f29xlR"}]},"maintainers":[{"name":"cbutler","email":"corey@coreybutler.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/shortbus-1.0.8.tgz_1472168123611_0.312358635943383"}},"1.0.9":{"name":"shortbus","version":"1.0.9","description":"Shortbus is a lightweight data processing/ETL module designed to run asynchronous processes in a seemingly synchronous way. The module acts as a mini service bus. The approach helps developers produce more readable data flow code. Code is cleaner, more st","main":"index.js","directories":{"test":"test"},"scripts":{"test":"mocha test"},"repository":{"type":"git","url":"git+https://github.com/coreybutler/shortbus.git"},"keywords":["data","flow","etl","async","sync","bus"],"author":{"name":"Corey Butler","email":"corey@coreybutler.com"},"license":"MIT","bugs":{"url":"https://github.com/coreybutler/shortbus/issues"},"engines":{"node":">=6.0.0"},"homepage":"https://github.com/coreybutler/shortbus","devDependencies":{"mocha":"^2.1.0"},"gitHead":"00f204d6b1f045b501c702494ef337857949c845","_id":"shortbus@1.0.9","_shasum":"b964371f890d90518da7950ed07d946a573304de","_from":".","_npmVersion":"3.3.12","_nodeVersion":"5.1.1","_npmUser":{"name":"cbutler","email":"corey@coreybutler.com"},"dist":{"shasum":"b964371f890d90518da7950ed07d946a573304de","tarball":"https://registry.npmjs.org/shortbus/-/shortbus-1.0.9.tgz","integrity":"sha512-YNpLiw/+FsmH9XOLKi2fbnXe6C1PfOdHfv0iOwjLBSsHrsf5RDqb7i3/Ef2umpGiLD1GoqF3NHSEwUe/vnn0mA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCzyVjv0NXb73u97YSfkkm2AHcfGgQvRuofBtMELfqBxgIgbCUUsH3C2YqjTeicQ3bA7oGd59g3JGSd6ZISnwIWOoQ="}]},"maintainers":[{"name":"cbutler","email":"corey@coreybutler.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/shortbus-1.0.9.tgz_1472168258194_0.6725038208533078"}},"1.1.0":{"name":"shortbus","version":"1.1.0","description":"Shortbus is a lightweight data processing/ETL module designed to run asynchronous processes in a seemingly synchronous way. The module acts as a mini service bus. The approach helps developers produce more readable data flow code. Code is cleaner, more st","main":"index.js","directories":{"test":"test"},"scripts":{"test":"mocha test"},"repository":{"type":"git","url":"git+https://github.com/coreybutler/shortbus.git"},"keywords":["data","flow","etl","async","sync","bus"],"author":{"name":"Corey Butler","email":"corey@coreybutler.com"},"license":"MIT","bugs":{"url":"https://github.com/coreybutler/shortbus/issues"},"engines":{"node":">=6.0.0"},"homepage":"https://github.com/coreybutler/shortbus","devDependencies":{"mocha":"^2.1.0"},"gitHead":"12363612573aca4bb1c2dff0ac9973f81002fb11","_id":"shortbus@1.1.0","_shasum":"19b449f772fff809373dd62a22ee17409d528c70","_from":".","_npmVersion":"3.3.12","_nodeVersion":"5.1.1","_npmUser":{"name":"cbutler","email":"corey@coreybutler.com"},"dist":{"shasum":"19b449f772fff809373dd62a22ee17409d528c70","tarball":"https://registry.npmjs.org/shortbus/-/shortbus-1.1.0.tgz","integrity":"sha512-Q/LGC7bQ5Yje9z00eNDY3trCGbQQ1C22nVaYucM55VsrVdzyqPxVvoyrW5H2gvn5ZKvTmWw048l8rpR75L1e9Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEC+0Ejzm+C/bB8s9Ine8Q5wKTwlCfPvs+3rvvqMCPdZAiEArFwS8t+Nrfw06q7JnW7TK7a9GEoGwJ2mxmC43Nb9vqA="}]},"maintainers":[{"name":"cbutler","email":"corey@coreybutler.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/shortbus-1.1.0.tgz_1472168515274_0.8141545711550862"}},"1.1.1":{"name":"shortbus","version":"1.1.1","description":"Shortbus is a lightweight data processing/ETL module designed to run asynchronous processes in a seemingly synchronous way. The module acts as a mini service bus. The approach helps developers produce more readable data flow code. Code is cleaner, more st","main":"index.js","directories":{"test":"test"},"scripts":{"test":"mocha test"},"repository":{"type":"git","url":"git+https://github.com/coreybutler/shortbus.git"},"keywords":["data","flow","etl","async","sync","bus"],"author":{"name":"Corey Butler","email":"corey@coreybutler.com"},"license":"MIT","bugs":{"url":"https://github.com/coreybutler/shortbus/issues"},"engines":{"node":">=6.0.0"},"homepage":"https://github.com/coreybutler/shortbus","devDependencies":{"mocha":"^2.1.0"},"gitHead":"08ca94be7d91da900ea284ac4e35c02a4a19ddcd","_id":"shortbus@1.1.1","_shasum":"2bfb040d6167751ab013e867752151731788eaba","_from":".","_npmVersion":"3.9.5","_nodeVersion":"6.2.2","_npmUser":{"name":"cbutler","email":"corey@coreybutler.com"},"dist":{"shasum":"2bfb040d6167751ab013e867752151731788eaba","tarball":"https://registry.npmjs.org/shortbus/-/shortbus-1.1.1.tgz","integrity":"sha512-En5aODQo6SGMiHnXFJHEvRcXQA6c2KGk8Fg2XW6vZHpou+Cuv2Qef/yE+CpvKbm7XmWKArYtq0RnMg67hGZRww==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQClilVFkTgJOY9/zN+RbzrQXbLgjyDRLYhrn9SZnNX2+QIhAMTsAe2dPGNvIoAMjpudfyptBkXMwXUOw2qBgiQb7a1h"}]},"maintainers":[{"name":"cbutler","email":"corey@coreybutler.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/shortbus-1.1.1.tgz_1475698240531_0.31578123522922397"}},"1.1.2":{"name":"shortbus","version":"1.1.2","description":"Shortbus is a lightweight data processing/ETL module designed to run asynchronous processes in a seemingly synchronous way. The module acts as a mini service bus. The approach helps developers produce more readable data flow code. Code is cleaner, more st","main":"index.js","directories":{"test":"test"},"scripts":{"test":"mocha test"},"repository":{"type":"git","url":"git+https://github.com/coreybutler/shortbus.git"},"keywords":["data","flow","etl","async","sync","bus"],"author":{"name":"Corey Butler","email":"corey@coreybutler.com"},"license":"MIT","bugs":{"url":"https://github.com/coreybutler/shortbus/issues"},"engines":{"node":">=6.0.0"},"homepage":"https://github.com/coreybutler/shortbus","devDependencies":{"mocha":"^2.1.0"},"gitHead":"a4d9d6b8c72f54d7f28efe69420ffb38b4d4c958","_id":"shortbus@1.1.2","_shasum":"66aaee0a464b681daa93f23b82c77cf07ba6256b","_from":".","_npmVersion":"3.9.5","_nodeVersion":"6.2.2","_npmUser":{"name":"cbutler","email":"corey@coreybutler.com"},"dist":{"shasum":"66aaee0a464b681daa93f23b82c77cf07ba6256b","tarball":"https://registry.npmjs.org/shortbus/-/shortbus-1.1.2.tgz","integrity":"sha512-ECXqhr6u3sEHPmOMLhq5rRY981kgdgEAF1P7QiFSMFMwVOPlzytdlG2iQreJz4VZNHHmna7THZxxNCnPzXXVxQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDDe0ltC1waHLGAGI3s4Yrd1a9GWMVYWIg5vNnJZ2r3VwIhAJT50lCLeZdpvcF8veZpY4IfYpW4R1BBF1dt2YyXnHhA"}]},"maintainers":[{"name":"cbutler","email":"corey@coreybutler.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/shortbus-1.1.2.tgz_1476303277805_0.020806168671697378"}},"1.2.0":{"name":"shortbus","version":"1.2.0","description":"Shortbus is a lightweight data processing/ETL module designed to run asynchronous processes in a seemingly synchronous way. The module acts as a mini service bus. The approach helps developers produce more readable data flow code. Code is cleaner, more st","main":"index.js","directories":{"test":"test"},"scripts":{"test":"mocha test"},"repository":{"type":"git","url":"git+https://github.com/coreybutler/shortbus.git"},"keywords":["data","flow","etl","async","sync","bus"],"author":{"name":"Corey Butler","email":"corey@coreybutler.com"},"license":"MIT","bugs":{"url":"https://github.com/coreybutler/shortbus/issues"},"engines":{"node":">=6.0.0"},"homepage":"https://github.com/coreybutler/shortbus","devDependencies":{"mocha":"^2.1.0"},"gitHead":"eaa32a841842a06e46c4d81737f8a3ed2f62bcf1","_id":"shortbus@1.2.0","_shasum":"429c19f1a9cc1761e9813a09dcc103c7bb7fcc77","_from":".","_npmVersion":"3.9.5","_nodeVersion":"6.2.2","_npmUser":{"name":"cbutler","email":"corey@coreybutler.com"},"dist":{"shasum":"429c19f1a9cc1761e9813a09dcc103c7bb7fcc77","tarball":"https://registry.npmjs.org/shortbus/-/shortbus-1.2.0.tgz","integrity":"sha512-QIztb16cO4pOGdRx4z78LTbW/0vRKe7KgP1zZ8StqSecRU6fNw8SDNOnDtPGF6tQzDf4dU0BL+e6+Uk/tAWbOQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDaeWdeGpDB46pI7DjTdfIZHvg6LyCaWCu4PmK9Dck/ugIgRLma62aqezwZWKvYffFaL96n/zo5DDHl5fcuiTjBt6A="}]},"maintainers":[{"name":"cbutler","email":"corey@coreybutler.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/shortbus-1.2.0.tgz_1482037991065_0.10127270198427141"}},"1.2.1":{"name":"shortbus","version":"1.2.1","description":"Shortbus is a lightweight data processing/ETL module designed to run asynchronous processes in a seemingly synchronous way. The module acts as a mini service bus. The approach helps developers produce more readable data flow code. Code is cleaner, more st","main":"index.js","directories":{"test":"test"},"scripts":{"test":"mocha test"},"repository":{"type":"git","url":"git+https://github.com/coreybutler/shortbus.git"},"keywords":["data","flow","etl","async","sync","bus"],"author":{"name":"Corey Butler","email":"corey@coreybutler.com"},"license":"MIT","bugs":{"url":"https://github.com/coreybutler/shortbus/issues"},"engines":{"node":">=6.0.0"},"homepage":"https://github.com/coreybutler/shortbus","devDependencies":{"mocha":"^2.1.0"},"gitHead":"1cf2f54e6935d945d7d382f56a41791fbc1a2a5c","_id":"shortbus@1.2.1","_shasum":"eb431b03ba2d2277d241b23a1f48e7b426d11ccf","_from":".","_npmVersion":"2.14.12","_nodeVersion":"4.2.6","_npmUser":{"name":"cbutler","email":"corey@coreybutler.com"},"dist":{"shasum":"eb431b03ba2d2277d241b23a1f48e7b426d11ccf","tarball":"https://registry.npmjs.org/shortbus/-/shortbus-1.2.1.tgz","integrity":"sha512-k4E/kHBpKVhoTu762JowNqOOoCfPkQrNe9SaDL7v/DhgXwQaVAvnDWNwI5mRy0UWPpBZ6By0OKth90w2AWQtRA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHDqPzp/pfISo1Zt0CIdT+QsfSkKsc2MTysafBeh54ecAiBTSqOtJtonFHsm4O7JLJvvdo3DZtjaYFUrwcgvIZuBhA=="}]},"maintainers":[{"name":"cbutler","email":"corey@coreybutler.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/shortbus-1.2.1.tgz_1482288130486_0.7298293593339622"}},"1.2.2":{"name":"shortbus","version":"1.2.2","description":"Shortbus is a lightweight data processing/ETL module designed to run asynchronous processes in a seemingly synchronous way. The module acts as a mini service bus. The approach helps developers produce more readable data flow code. Code is cleaner, more st","main":"index.js","directories":{"test":"test"},"scripts":{"test":"mocha test"},"repository":{"type":"git","url":"git+https://github.com/coreybutler/shortbus.git"},"keywords":["data","flow","etl","async","sync","bus"],"author":{"name":"Corey Butler","email":"corey@coreybutler.com"},"license":"MIT","bugs":{"url":"https://github.com/coreybutler/shortbus/issues"},"engines":{"node":">=6.0.0"},"homepage":"https://github.com/coreybutler/shortbus","devDependencies":{"mocha":"^2.1.0"},"gitHead":"ae6f7aa389e39163875d96cfccc9ab9562aae804","_id":"shortbus@1.2.2","_shasum":"ae325b687ffa2ac0c626c7f15699370199cf4e25","_from":".","_npmVersion":"3.9.5","_nodeVersion":"6.2.2","_npmUser":{"name":"cbutler","email":"corey@coreybutler.com"},"dist":{"shasum":"ae325b687ffa2ac0c626c7f15699370199cf4e25","tarball":"https://registry.npmjs.org/shortbus/-/shortbus-1.2.2.tgz","integrity":"sha512-UBQwQqPxpfIYJ0etCwR8N7KjKTUaUT91zZjs4ncoGAYKzxdcRvloVUsxUVf6kGagoetIkAfx0x2u+Ieq83iCGA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC9gFnH/vHfYACWSqSP/IVeeHVnJLVv3059lJOQb8bLggIgGatOTHHxMFx6BbU/587UhIURpJTIRzM0p5xTqOMKOAc="}]},"maintainers":[{"name":"cbutler","email":"corey@coreybutler.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/shortbus-1.2.2.tgz_1482288196792_0.48298184387385845"}},"1.2.3":{"name":"shortbus","version":"1.2.3","description":"Shortbus is a lightweight data processing/ETL module designed to run asynchronous processes in a seemingly synchronous way. The module acts as a mini service bus. The approach helps developers produce more readable data flow code. Code is cleaner, more st","main":"index.js","directories":{"test":"test"},"scripts":{"test":"mocha test"},"repository":{"type":"git","url":"git+https://github.com/coreybutler/shortbus.git"},"keywords":["data","flow","etl","async","sync","bus"],"author":{"name":"Corey Butler","email":"corey@coreybutler.com"},"license":"MIT","bugs":{"url":"https://github.com/coreybutler/shortbus/issues"},"engines":{"node":">=6.0.0"},"homepage":"https://github.com/coreybutler/shortbus","devDependencies":{"mocha":"^2.1.0"},"gitHead":"58eab358639220bf014ee6ce431614f742312a07","_id":"shortbus@1.2.3","_shasum":"6ce4290fa9459ee43480e3c6b6e7e55f26d151e8","_from":".","_npmVersion":"3.9.5","_nodeVersion":"6.2.2","_npmUser":{"name":"cbutler","email":"corey@coreybutler.com"},"dist":{"shasum":"6ce4290fa9459ee43480e3c6b6e7e55f26d151e8","tarball":"https://registry.npmjs.org/shortbus/-/shortbus-1.2.3.tgz","integrity":"sha512-hDLS+K4n4bcZuh5Rj8UhYslHlevYUA5HfvfUnszj2Y4oNWMz2A9D0krC4Tn576jzgxFrWrzlURGn2lpxVmZIIA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHvpmfc/p5vKW05lOwmtX+atTbz3iiGwgsoysl3Zy1UYAiEAr+OEA8E0XMiOeJJmVTLwnGVGveu0zl1VN1bjurs3unk="}]},"maintainers":[{"name":"cbutler","email":"corey@coreybutler.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/shortbus-1.2.3.tgz_1482292433756_0.8249368423130363"}},"1.2.4":{"name":"shortbus","version":"1.2.4","description":"Shortbus is a lightweight data processing/ETL module designed to run asynchronous processes in a seemingly synchronous way. The module acts as a mini service bus. The approach helps developers produce more readable data flow code. Code is cleaner, more st","main":"index.js","directories":{"test":"test"},"scripts":{"test":"mocha test"},"repository":{"type":"git","url":"git+https://github.com/coreybutler/shortbus.git"},"keywords":["data","flow","etl","async","sync","bus"],"author":{"name":"Corey Butler","email":"corey@coreybutler.com"},"license":"MIT","bugs":{"url":"https://github.com/coreybutler/shortbus/issues"},"engines":{"node":">=6.0.0"},"homepage":"https://github.com/coreybutler/shortbus","devDependencies":{"mocha":"^2.1.0"},"gitHead":"bfe1acec6f6eb448c19716e5286580440f4c94e3","_id":"shortbus@1.2.4","_shasum":"47351670ed04dd0fb2b81053ae4e11a0086949e5","_from":".","_npmVersion":"3.9.5","_nodeVersion":"6.2.2","_npmUser":{"name":"cbutler","email":"corey@coreybutler.com"},"dist":{"shasum":"47351670ed04dd0fb2b81053ae4e11a0086949e5","tarball":"https://registry.npmjs.org/shortbus/-/shortbus-1.2.4.tgz","integrity":"sha512-kF2ue5YV26OtuU52mSyktpPmQjTAhCc3Nhj5an7HIgfkYoAq+zZNv7izPRI5h6HI3GX/VKe7X/g78WtV3+XApg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHlE4SZdsh8xXI4Kb2907AQKzebxqC2+71T4CiTuMPVqAiEAiFcalc9o72uTGA5dZ4LIrWVrJS17PtqhTcEiQNjpnSM="}]},"maintainers":[{"name":"cbutler","email":"corey@coreybutler.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/shortbus-1.2.4.tgz_1482293010403_0.9364093905314803"}},"1.2.5":{"name":"shortbus","version":"1.2.5","description":"Shortbus is a lightweight data processing/ETL module designed to run asynchronous processes in a seemingly synchronous way. The module acts as a mini service bus. The approach helps developers produce more readable data flow code. Code is cleaner, more st","main":"index.js","directories":{"test":"test"},"scripts":{"test":"mocha test"},"repository":{"type":"git","url":"git+https://github.com/coreybutler/shortbus.git"},"keywords":["data","flow","etl","async","sync","bus"],"author":{"name":"Corey Butler","email":"corey@coreybutler.com"},"license":"MIT","bugs":{"url":"https://github.com/coreybutler/shortbus/issues"},"engines":{"node":">=6.0.0"},"homepage":"https://github.com/coreybutler/shortbus","devDependencies":{"mocha":"^2.1.0"},"gitHead":"bfe1acec6f6eb448c19716e5286580440f4c94e3","_id":"shortbus@1.2.5","_shasum":"632f6bc99dcbcb8bb63231d19bf495d66e45bbe3","_from":".","_npmVersion":"3.9.5","_nodeVersion":"6.2.2","_npmUser":{"name":"cbutler","email":"corey@coreybutler.com"},"dist":{"shasum":"632f6bc99dcbcb8bb63231d19bf495d66e45bbe3","tarball":"https://registry.npmjs.org/shortbus/-/shortbus-1.2.5.tgz","integrity":"sha512-To60lcbv7WrvpZf54vPOtzQN3Yu/hpn5NRdaigPRJGA8oEMLCLDepFTzXZmbJuktotk6eKRlrLlHQyp24BTsAQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCzRl3c+hwVGb0GdjQHsX+WZ58y9mdwbE4iMzoyNLPCjgIgFUqkL+8+F2Mec7Ot2DKeNKNX54Wn42+sv67qn9hOA/k="}]},"maintainers":[{"name":"cbutler","email":"corey@coreybutler.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/shortbus-1.2.5.tgz_1482293555914_0.7626119295600802"}},"1.2.6":{"name":"shortbus","version":"1.2.6","description":"Shortbus is a lightweight data processing/ETL module designed to run asynchronous processes in a seemingly synchronous way. The module acts as a mini service bus. The approach helps developers produce more readable data flow code. Code is cleaner, more st","main":"index.js","directories":{"test":"test"},"scripts":{"test":"mocha test"},"repository":{"type":"git","url":"git+https://github.com/coreybutler/shortbus.git"},"keywords":["data","flow","etl","async","sync","bus"],"author":{"name":"Corey Butler","email":"corey@coreybutler.com"},"license":"MIT","bugs":{"url":"https://github.com/coreybutler/shortbus/issues"},"engines":{"node":">=6.0.0"},"homepage":"https://github.com/coreybutler/shortbus","devDependencies":{"mocha":"^2.1.0"},"gitHead":"2b9d31443ffa17b115be1a22d8099a6a8381238e","_id":"shortbus@1.2.6","_shasum":"cfec30729a8d671b57454428054a16ec5420a820","_from":".","_npmVersion":"3.9.5","_nodeVersion":"6.2.2","_npmUser":{"name":"cbutler","email":"corey@coreybutler.com"},"dist":{"shasum":"cfec30729a8d671b57454428054a16ec5420a820","tarball":"https://registry.npmjs.org/shortbus/-/shortbus-1.2.6.tgz","integrity":"sha512-oXEgQnhwCBEVmNfRKTMvW7MC93x2BocdD+U/BeIS76G/SpE93jFHn2B/j9N9py1Qy+6SnAu0W0H7/zBTcuRsAQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD8sqMakFtkN2pq4wFzl3rYPX1JVcpE7/0VcpXhMWN1VwIhAKq+ZQPiEMFxMQLj6m+aKRA9Pk5bwW75jxhPPQFa75cG"}]},"maintainers":[{"name":"cbutler","email":"corey@coreybutler.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/shortbus-1.2.6.tgz_1482296111188_0.5147535165306181"}},"1.2.7":{"name":"shortbus","version":"1.2.7","description":"Shortbus is a lightweight data processing/ETL module designed to run asynchronous processes in a seemingly synchronous way. The module acts as a mini service bus. The approach helps developers produce more readable data flow code. Code is cleaner, more st","main":"index.js","directories":{"test":"test"},"scripts":{"test":"mocha test"},"repository":{"type":"git","url":"git+https://github.com/coreybutler/shortbus.git"},"keywords":["data","flow","etl","async","sync","bus","event"],"author":{"name":"Corey Butler","email":"corey@coreybutler.com"},"license":"MIT","bugs":{"url":"https://github.com/coreybutler/shortbus/issues"},"engines":{"node":">=6.0.0"},"homepage":"https://github.com/coreybutler/shortbus","devDependencies":{"mocha":"^2.1.0"},"gitHead":"6d62b1ec28830ad1217ab783dac93856f2fa6210","_id":"shortbus@1.2.7","_shasum":"7362f1acf27190e36f8f8437471561ef4fd03673","_from":".","_npmVersion":"3.9.5","_nodeVersion":"6.2.2","_npmUser":{"name":"cbutler","email":"corey@coreybutler.com"},"dist":{"shasum":"7362f1acf27190e36f8f8437471561ef4fd03673","tarball":"https://registry.npmjs.org/shortbus/-/shortbus-1.2.7.tgz","integrity":"sha512-BXSF+8sC5txMDwdG1tZTPOF/oWzQ0PLALXzUrmeAAaqRabZq66XRS3bdUn+mrwGokItPCpHnUVUy8egiV41bvA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCAvsQxYxPGAvE+M/C5+ygtkLbKxq7QKOVLz23xLWLQywIhAOrKY8bXj/oBRkKqUvsJBaqMhPvfjH57nYC1jALRpZZp"}]},"maintainers":[{"name":"cbutler","email":"corey@coreybutler.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/shortbus-1.2.7.tgz_1482297887420_0.6360265607945621"}},"1.2.8":{"name":"shortbus","version":"1.2.8","description":"Shortbus is a lightweight data processing/ETL module designed to run asynchronous processes in a seemingly synchronous way. The module acts as a mini service bus. The approach helps developers produce more readable data flow code. Code is cleaner, more st","main":"index.js","directories":{"test":"test"},"scripts":{"test":"mocha test"},"repository":{"type":"git","url":"git+https://github.com/coreybutler/shortbus.git"},"keywords":["data","flow","etl","async","sync","bus","event"],"author":{"name":"Corey Butler","email":"corey@coreybutler.com"},"license":"MIT","bugs":{"url":"https://github.com/coreybutler/shortbus/issues"},"engines":{"node":">=6.0.0"},"homepage":"https://github.com/coreybutler/shortbus","devDependencies":{"mocha":"^2.1.0"},"gitHead":"344279aa42ecaa2ca7baad96413200924a15d09f","_id":"shortbus@1.2.8","_npmVersion":"5.5.1","_nodeVersion":"9.3.0","_npmUser":{"name":"cbutler","email":"corey@coreybutler.com"},"dist":{"integrity":"sha512-nYERnpF59Xx2Szu0I9ff/lfseTc26u8AyJxN1yHu8Z1djciNerMH/u4Nikx4k7jJEHhmQjuHWYjboAk+RcNLxQ==","shasum":"69ab5a344c8f13a92a72533bd794e62e83fd177f","tarball":"https://registry.npmjs.org/shortbus/-/shortbus-1.2.8.tgz","fileCount":4,"unpackedSize":26460,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDPbn1NoDYImooTLiwHlqx2RUTi8dpn14SKIji9PB5NGAIhAL2D367dYShbkhc5OL3PeVU5WveThudC3KsUP1yydSyK"}]},"maintainers":[{"name":"cbutler","email":"corey@coreybutler.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/shortbus_1.2.8_1519262020544_0.6055218833996994"},"_hasShrinkwrap":false}},"readme":"[![Build Status](https://travis-ci.org/coreybutler/shortbus.svg)](https://travis-ci.org/coreybutler/shortbus)\n\n# Shortbus\n\nShortbus is a lightweight flow control module that works like a mini event bus + serial/parallel processor. It makes for a great task runner.\n\nInstall via `npm install shortbus`.\n\nThis module contains minimal dependencies and [helps keep npm fit](https://medium.com/@goldglovecb/npm-needs-a-personal-trainer-537e0f8859c6).\n\n_Use Case:_\n\n> My process should download 3 files, combine them, and save the results to disk.\n\nDownloading is an asynchronous process, but merging and saving to disk is not. The process must wait for all of the files to download before it can concatenate them into a single resulting file.\n\nShortbus was designed to support this type of use case in a human readable way. Behind the scenes, Shortbus queues tasks and event listeners, and triggers events as each step is completed. \n\n_Why?_\n\nThis approach produces more readable, cleaner, and well structured flow code. It provides an approach to avoid overly complicated callback structures. It also allows for dynamic sequencing (add/remove tasks, aborting, timeouts), which are commonly more difficult to accomplish using callbacks or promises.\n\n### Example Please?\n\n```js\nvar Shortbus = require('shortbus')\nvar tasks = new Shortbus()\nvar downloads = ['file1.json','file2.json','file3.json']\n\ndownloads.forEach(function (file) {\n  tasks.add('Download '+file, function (next) {\n    // ... download the file...\n    next()\n  })\n})\n\ntasks.on('stepcomplete', function (step) {\n  console.log('Just completed', step)\n})\n\ntasks.on('complete', function () {\n  // ... concatenate the files & save to disk...\n})\n\ntasks.process() // Begin execution\n```\n\nEach task is executed in parallel, but the files won't be combined until every file is downloaded.\n\n## Writing Shortbus Code\n\nSyntatically, a Shortbus script is written as a series of event handlers. Code looks a little like a mini-event bus with a series of event handlers. Functionally, Shortbus queues tasks, executes them all at the same time, and fires the `complete` event after all registered tasks have completed.\n\n### API\n\nThe Shortbus \"class\" has a few options.\n\n#### Logging:\n\nIt supports \"development\" and \"production\" modes. The difference between these is logging. In development mode, Each task will write it's status to the console (begin/end). In testing, this was commonly used for troubleshooting asynchronous method activity.\n\nBy default, Shortbus runs in \"production\" mode, i.e. it will not write to `stdout`. Setting \"development\" mode can be accomplished in two ways. If the `NODE_ENV` environment variable is present, it's value will be used. Alternatively the mode can be explicitly set when creating the Shortbus instance:\n\n```js\nvar Shortbus = require('shortbus')\nvar tasks = new Shortbus('development')\n\n...\n```\n\n#### Tasks\n\nShortbus tasks represent a single task that is performed in parallel to other tasks. All tasks begin execution at the same time, but they may not complete at the same time. Shortbus automatically keeps track of task completion, and triggers the `complete` event once all tasks are done.\n\n**Adding** a task is straightforward:\n\n```js\nvar Shortbus = require('shortbus')\nvar tasks = new Shortbus('development')\n\n// Task with a custom name\ntasks.add('First Task', function () {\n  ... process something ...\n})\n\n// Auto-named task\ntasks.add(function () {\n  ... process something else ...\n})\n\n// Use an aysnchronous task (auto-named)\ntasks.add(function (next) {\n  setTimeout(function () {\n    ... process something else ...\n    next()\n  }, 2000)\n})\n\ntasks.on('complete', function () {\n  console.log('All done!')\n})\n\ntasks.process()\n```\n\nThis example illustrates the three primary syntaxes for adding a task. The first `task.add()` in the example accepts an optional descriptive task name and the required function as arguments of the `add([name], function)` method. The function is assumed to be synchronous.\n\nThe second `task.add()` only supplies the required function. The function is assumed to be synchronous.\n\nThe final `task.add()` only supplied the required function. However, it also uses the `next` argument. The `setTimeout` function is a contrived example of an async function that may take some more time to execute. By\nusing the `next` argument, the method will not be considered \"finished\" until `next()` is called.\n\n**Displaying tasks:**\n\nShortbus maintains a queue of tasks and their status. This is accessible in the `list` attribute:\n\n```js\nvar Shortbus = require('shortbus')\nvar tasks = new Shortbus('development')\n\ntasks.timeout = 60*1000 // This will timeout after 1 minute.\n\ntasks.add(...)\ntasks.add(...)\ntasks.add(...)\n\nconsole.log(tasks.list)\n```\n\n**Removing a task** is also a straightforward process. Keep in mind that a tasks can only be removed before the `tasks.process()` method begins processing, or after they complete. You cannot add or remove tasks during processing.\n\nThere are two ways to remove a task. A task can be removed directly from the task `list` (an array) by index, using the `removeAt()` method:\n\n```js\nvar Shortbus = require('shortbus')\nvar tasks = new Shortbus('development')\n\ntasks.timeout = 60*1000 // This will timeout after 1 minute.\n\ntasks.add(...)\ntasks.add(...)\ntasks.add(...)\n\ntasks.removeAt(0)\n\nconsole.log(tasks.list)\n```\n\nThe code above would create 3 tasks, then remove the first one.\n\nTasks can also be removed by their descriptive name or task ID using the `remove()` method. The task ID can be found in the `list`. It is an auto-incrementing number guaranteed to be unique.\n\n```js\nvar Shortbus = require('shortbus')\nvar tasks = new Shortbus('development')\n\ntasks.timeout = 60*1000 // This will timeout after 1 minute.\n\ntasks.add('My First Task', function () {...}) // ID: 1\ntasks.add(...) // ID: 2\ntasks.add(...) // ID: 3\n\ntasks.remove('My First Task') // Remove by name\ntasks.remove(3) // Remove by ID\n\nconsole.log(tasks.list)\n```\n\nIn the example above, the first and last tasks would be removed, leaving only the second one for processing.\n\n**Hacking a Task:**\n\nTasks are just an object held in an array. An example might look like:\n\n```js\n{\n  id: 1, // Auto-generated ID.\n  name: 'Title', // Descriptive title\n  method: function () {...}, // The JS function to run\n  status: null // Can be null, running, or complete\n}\n```\n\nThe `id` and `status` are read-only. The name and method can both be modified. To change a task's function after it has already been created, use the `get` method to retrieve this object:\n\n```js\nvar task = tasks.get('My Task') // get(name or ID)\ntask.name = 'New Name'\n\n// OR\n\nvar task = tasks.getAt(0) // Get by list index (this example is requesting the first item)\ntask.name = 'New Name'\n\n```\n\n**Sequential Processing**\n\nAs of v1.0.4, it is possible to process tasks sequentially in a \"one\nafter the other\" fashion. Sequential processing will process a task\nand wait for it to completely finish before starting the next task.\n\n```js\nvar Shortbus = require('shortbus')\nvar tasks = new Shortbus('development')\nvar myArray = []\n\n// Task with a custom name\ntasks.add('First Task', function () {\n  myArray.push(1)\n})\n\n// Use an aysnchronous task (auto-named)\ntasks.add(function (next) {\n  setTimeout(function () {\n    myArray.push(2)\n    next()\n  }, 2000)\n})\n\n// Auto-named task\ntasks.add(function () {\n  myArray.push(3)\n})\n\ntasks.on('complete', function () {\n  console.log(myArray.join(', '))\n})\n\ntasks.process(true) // <-- Setting `true` makes this sequential.\n```\n\nAfter approximately 2 seconds, the code above writes the following to the console:\n\n```sh\n1, 2, 3\n```\n\nSince tasks are executed sequentially, the second task (asynchronous)\nwaits 2 seconds before adding `2` to `myArray`. If sequential processing _was NOT used_, the output would have been `1, 3, 2`.\n\n#### Timeouts\n\nShortbus has a process timeout feature that is _disabled_ by default. This feature will monitor the _entire_ process and fire a `timeout` event if the timeout maximum duration is exceeded. To enable this feature, set the timeout attribute before processing tasks. For example:\n\n```js\nvar Shortbus = require('shortbus')\nvar tasks = new Shortbus('development')\n\ntasks.timeout = 60*1000 // This will timeout after 1 minute.\n\ntasks.add(...)\ntasks.add(...)\ntasks.add(...)\n\ntasks.on('timeout', function (progress) {\n  console.log('Progress at the point of timeout:', log)\n  process.exit(1)\n})\n\ntasks.process()\n```\n\n**Individual Steps:**\n\nShortbus tasks also have a timeout feature that is _disabled_ by default. This feature will monitor a _single step_ and fire a `steptimeout` event. To use step-specific timeouts, use the built-in timeout feature:\n\n```js\nvar Shortbus = require('shortbus')\nvar tasks = new Shortbus('development')\n\ntasks.add(function () {\n  this.timeout(5*1000) // Timeout after 5 seconds\n  ...\n})\ntasks.add(...)\ntasks.add(...)\n\ntasks.on('steptimeout', function (step) {\n  console.log('Timeout: ', step)\n  process.exit(1)\n})\n\ntasks.process()\n```\n\n**Aborting**\n\nAn entire series can be aborted during mid-process by calling the\n`abort()` method. It's important to understand that any complete or\ncurrently running steps will not be affected. Think of aborting\na series of tasks/steps as a way to short circuit the series of events,\nsimilar to how pulling a domino out will stop them from _continuing_\nto fall over.\n\nAborting an entire series of steps/tasks is simple:\n\n```js\ntasks.on('aborting', function () {\n  // Triggered when the abort process starts.\n})\n\ntasks.on('aborted', function () {\n  // Triggered when all tasks are flushed and the abort is complete.\n})\n\ntasks.abort()\n```\n\nSkipping an individual step is achieved by executing the `skip()`\nmethod.\n\nFor example:\n\n```js\ntasks.on('stepskipped', function (step) {\n  //...\n})\n\ntasks.getAt(2).skip() // Indicates the 3rd step should be skipped.\n```\n\nBy default, _a step cannot be skipped once it has started executing_.\n\nThis triggers both 'stepskipped' AND 'stepcomplete' events for a task/step.\n\n### Events\n\nShortBus fires several events that can be used for debugging, logging, or displaying legible progress of a process.\n\nEvents are handled by adding a listener:\n\n```js\nvar Shortbus = require('shortbus')\nvar tasks = new Shortbus()\n\ntasks.add(...)\ntasks.add(...)\n\ntasks.on('steptimeout', function (step) {\n  ...\n})\n```\n\nEach task event receives the queue item (step/task) object as a callback argument. The step object looks like:\n\n```js\n{\n  name: '{String} name of action',\n  step: '{Number} step number', // useful for seeing the order in which something is triggered\n  status: '{String|Null} May be \"running\", \"complete\", or \"null\" (not run yet)'\n}\n```\n\n#### Event Names\n\n- `stepadded`: Fired when a new step is added to the queue.\n- `stepremoved`: Fired when a step is removed from the queue.\n- `stepstarted`: Fired when a step begins processing.\n- `stepcomplete`: Fired when a step is done.\n- `steptimeout`: Fired when a step takes too long.\n- `stepskipped`: Fired when a step is skipped.\n- `complete`: Fired when **all** steps are done.\n- `timeout`: Fired when the entire series of events takes too long.\n- `aborting`: Fired when the an abort is initiated.\n- `aborted`: Fired when the series of events is aborted/cancelled.\n\n**NOTICE** `complete`, `timeout`, `aborting`, and `aborted` are not \"step\" events and return no arguments in the callback.\n","maintainers":[{"name":"cbutler","email":"corey@coreybutler.com"}],"time":{"modified":"2022-06-26T19:03:35.032Z","created":"2015-01-09T18:33:23.171Z","1.0.0":"2015-01-09T18:33:23.171Z","1.0.1":"2015-03-02T21:37:29.693Z","1.0.3":"2016-02-02T05:03:05.589Z","1.0.4":"2016-06-28T19:55:15.416Z","1.0.5":"2016-06-30T14:47:55.257Z","1.0.6":"2016-06-30T16:37:41.158Z","1.0.7":"2016-08-25T23:24:55.165Z","1.0.8":"2016-08-25T23:35:25.520Z","1.0.9":"2016-08-25T23:37:38.934Z","1.1.0":"2016-08-25T23:41:57.302Z","1.1.1":"2016-10-05T20:10:42.746Z","1.1.2":"2016-10-12T20:14:39.574Z","1.2.0":"2016-12-18T05:13:11.827Z","1.2.1":"2016-12-21T02:42:11.393Z","1.2.2":"2016-12-21T02:43:18.896Z","1.2.3":"2016-12-21T03:53:54.513Z","1.2.4":"2016-12-21T04:03:31.199Z","1.2.5":"2016-12-21T04:12:37.859Z","1.2.6":"2016-12-21T04:55:13.183Z","1.2.7":"2016-12-21T05:24:48.122Z","1.2.8":"2018-02-22T01:13:40.613Z"},"homepage":"https://github.com/coreybutler/shortbus","keywords":["data","flow","etl","async","sync","bus","event"],"repository":{"type":"git","url":"git+https://github.com/coreybutler/shortbus.git"},"author":{"name":"Corey Butler","email":"corey@coreybutler.com"},"bugs":{"url":"https://github.com/coreybutler/shortbus/issues"},"license":"MIT","readmeFilename":"README.md","users":{"adammc":true}}