{"_id":"watt","_rev":"28-fb693c33361b9057f932bc735a292926","name":"watt","description":"Powerful generator control flow","dist-tags":{"latest":"3.3.0"},"versions":{"0.0.0":{"name":"watt","version":"0.0.0","description":"Powerful generator control flow","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"Matt Bell","email":"mappum@gmail.com"},"license":"MIT","_id":"watt@0.0.0","_shasum":"a902b47ede00a12e76b76eea9e31503836ce8dbd","_from":".","_npmVersion":"2.14.2","_nodeVersion":"4.0.0","_npmUser":{"name":"mappum","email":"mappum@gmail.com"},"dist":{"shasum":"a902b47ede00a12e76b76eea9e31503836ce8dbd","tarball":"https://registry.npmjs.org/watt/-/watt-0.0.0.tgz","integrity":"sha512-Qgzectwv9KenEskrItXXwpd+FJgb2xy3GFTUJrXCKMQFFC4BdFEOiSlJ0zVsmqF9O/8nUnf6lBYXKBBTeyR49Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEASMsJdYKHiyOX8sN9K8Jl85+2oVOXcWoguBJIzYGBzAiA2u5x01UgBx9CcbEFYyL77NzKBPkxi8GMN526ggArBvg=="}]},"maintainers":[{"name":"mappum","email":"mappum@gmail.com"}]},"1.0.0":{"name":"watt","version":"1.0.0","description":"Powerful generator control flow","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"Matt Bell","email":"mappum@gmail.com"},"license":"MIT","_id":"watt@1.0.0","_shasum":"270dce93b120ecdfe0c490e56175ac06c40cea1b","_from":".","_npmVersion":"2.14.2","_nodeVersion":"4.0.0","_npmUser":{"name":"mappum","email":"mappum@gmail.com"},"dist":{"shasum":"270dce93b120ecdfe0c490e56175ac06c40cea1b","tarball":"https://registry.npmjs.org/watt/-/watt-1.0.0.tgz","integrity":"sha512-f6Zitj4avSZ75dxarclZ+0CfMS81TMrM4inPI5SsFyGJOVbSb+yYxRbeGA3YxJo+Oee4AEjiB42As/yeylighg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDrqojcWStWazqj74SYxVCRBl46jTvammm5TTCzBIgOCAIgV5hjbl3R1LkUz+fRKg95df6Y+sdANKweN2noAieKTRs="}]},"maintainers":[{"name":"mappum","email":"mappum@gmail.com"}]},"2.0.0":{"name":"watt","version":"2.0.0","description":"Powerful generator control flow","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"Matt Bell","email":"mappum@gmail.com"},"license":"MIT","gitHead":"302b5f09f0e61ae7c48f7fa22a14b1dd9cd5409d","_id":"watt@2.0.0","_shasum":"20c68fb85765f0a5a8965437e91644a87efec568","_from":".","_npmVersion":"2.14.4","_nodeVersion":"4.1.1","_npmUser":{"name":"mappum","email":"mappum@gmail.com"},"dist":{"shasum":"20c68fb85765f0a5a8965437e91644a87efec568","tarball":"https://registry.npmjs.org/watt/-/watt-2.0.0.tgz","integrity":"sha512-c9jEfr9Rfur7qVVME7lfHER0Qk/RJ0BNurBlSJsh9tmbKjNOgx+TDUJlZomSpLFpVwWgwJU0MPuS//yCa5HXEA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEu605Y73ed9EcxRomJ4Z1Ugflachwatzkz2RhdXnMZxAiBQ+IH0DN4Zn2K+O36uL88+o5jzqdIBjgF895L+adaC8Q=="}]},"maintainers":[{"name":"mappum","email":"mappum@gmail.com"}]},"2.1.0":{"name":"watt","version":"2.1.0","description":"Powerful generator control flow","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"Matt Bell","email":"mappum@gmail.com"},"license":"MIT","gitHead":"c7b9c088170df60e78ec626434e527ff9f277a0c","_id":"watt@2.1.0","_shasum":"0fca2d6fe8d9f9b3746bbc84ba4800a97524c1b2","_from":".","_npmVersion":"3.3.4","_nodeVersion":"4.1.1","_npmUser":{"name":"mappum","email":"mappum@gmail.com"},"dist":{"shasum":"0fca2d6fe8d9f9b3746bbc84ba4800a97524c1b2","tarball":"https://registry.npmjs.org/watt/-/watt-2.1.0.tgz","integrity":"sha512-kwNsFf0UYwa48U8qJC9qefkDv41vR3ozTTRX1UrByXnQvYmlQWs6PoK+1hYRE+XaJNwy6uQbBwiR6//a+qK5eg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC/iQg912fmTrzxXRNR3gSxMW67v/hOjm61nutXpzinuAiEA9ZpHdqFDCXom0A6rXiM1oJhzjaknkHSFB8OrAXn2ueo="}]},"maintainers":[{"name":"mappum","email":"mappum@gmail.com"}]},"2.1.1":{"name":"watt","version":"2.1.1","description":"Powerful generator control flow","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"Matt Bell","email":"mappum@gmail.com"},"license":"MIT","gitHead":"5a4faf5dcc772b5880dd6aa39074af89687b8a9e","_id":"watt@2.1.1","_shasum":"8a2385c19dfb85dca075df902c052a175ed77e42","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.1","_npmUser":{"name":"mappum","email":"mappum@gmail.com"},"dist":{"shasum":"8a2385c19dfb85dca075df902c052a175ed77e42","tarball":"https://registry.npmjs.org/watt/-/watt-2.1.1.tgz","integrity":"sha512-b4gndD0Cx03Q2R47OPn1nmtQPfOatJovNT38IOzadHZcnx00Bb/zYFt1xIokL12D+ayTabmtBY1d6tBIYgVhbQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDITnE2Gn9ofdVncgDZ1BgP7/eqRFqV2AM9RIpTXp2NJAIhAJ1fS2tDOWrRbjADSZ7JoIXI1UbPV+EHgpQ73z5oIPM9"}]},"maintainers":[{"name":"mappum","email":"mappum@gmail.com"}]},"2.2.0":{"name":"watt","version":"2.2.0","description":"Powerful generator control flow","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"Matt Bell","email":"mappum@gmail.com"},"license":"MIT","gitHead":"a69ad0e4aa559e2993cc15c94cddcd2d2b70dd4f","_id":"watt@2.2.0","_shasum":"bec7a48540d6be33b4277bbcda0a750fe4388075","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.1","_npmUser":{"name":"mappum","email":"mappum@gmail.com"},"dist":{"shasum":"bec7a48540d6be33b4277bbcda0a750fe4388075","tarball":"https://registry.npmjs.org/watt/-/watt-2.2.0.tgz","integrity":"sha512-f47C2Ai3tvv1NqQQ7ejqcHCr1PYjjHvNMS8ThCNhcy6vamuXisMM3MTbdUfH4JymVm3bTuftCB2oAS5Uqu64fA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCzR2vcZxtbTtLOBSxvSMcMHkAOzpEZWvbDLeMSzjnkTwIgNqbMUj362cRuRY7yEIiuUMbgBJPjLmr5mo+uldn6Zj4="}]},"maintainers":[{"name":"mappum","email":"mappum@gmail.com"}]},"2.2.1":{"name":"watt","version":"2.2.1","description":"Powerful generator control flow","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"Matt Bell","email":"mappum@gmail.com"},"license":"MIT","gitHead":"646fcfbaacf3f94a14def3082c660b4392e7f635","_id":"watt@2.2.1","_shasum":"97760db5a27ab10522f142cbc5301e6758bfbd64","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.1","_npmUser":{"name":"mappum","email":"mappum@gmail.com"},"dist":{"shasum":"97760db5a27ab10522f142cbc5301e6758bfbd64","tarball":"https://registry.npmjs.org/watt/-/watt-2.2.1.tgz","integrity":"sha512-XzFd/vCg4dh0mlMVWcQ51DpeJFlq2T9lfKDCPgGInfRSk1ipBqrXZbcx/dpqrPKZkuDHtn7TiHw8JM2/m3SE6w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD2igNLv5KH/6+K8Wu5gTlU3Qy96PT2IN1ySku7UjbBsgIgLljvmY4glqhAwf78LWGv51/OdETJAXOjChIRm2nF9j8="}]},"maintainers":[{"name":"mappum","email":"mappum@gmail.com"}]},"2.2.2":{"name":"watt","version":"2.2.2","description":"Powerful generator control flow","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"Matt Bell","email":"mappum@gmail.com"},"license":"MIT","gitHead":"479a5113f95d3e2bbc7298875443c1dc63363df0","_id":"watt@2.2.2","_shasum":"e24e7dfdc276e85fdfb87e6d06dc478ff2c4313b","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.1","_npmUser":{"name":"mappum","email":"mappum@gmail.com"},"dist":{"shasum":"e24e7dfdc276e85fdfb87e6d06dc478ff2c4313b","tarball":"https://registry.npmjs.org/watt/-/watt-2.2.2.tgz","integrity":"sha512-hgiq2rjAiLvIkyV6rnXIK/w+A5HeI7vwZAerKkB3AJf3NPfL8z7spjZ+fLjI9JVnlNQ2irMqFNcfi2E2klBAHA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDdExSNTyguXvKDZ+7sH6dWP0UzmHIKTe4vA5g5s86hcAiEAmZLZXKuMFVeyYliS3PtyoSD+Wyt26CzuCmZhCjZQNjU="}]},"maintainers":[{"name":"mappum","email":"mappum@gmail.com"}]},"2.3.0":{"name":"watt","version":"2.3.0","description":"Powerful generator control flow","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"Matt Bell","email":"mappum@gmail.com"},"license":"MIT","gitHead":"82c6f43a6895ac42edef868a520753c22bfcc19a","_id":"watt@2.3.0","_shasum":"a51e190491fdb7baa81a67b91a8fedf26d44f51e","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.1","_npmUser":{"name":"mappum","email":"mappum@gmail.com"},"dist":{"shasum":"a51e190491fdb7baa81a67b91a8fedf26d44f51e","tarball":"https://registry.npmjs.org/watt/-/watt-2.3.0.tgz","integrity":"sha512-VLdHM3jK/QSmrFYrPx+v/1xGnAD6gsvgXgMipSLSwLt/RtLGzWx+ZCnyJdXri64qC4u0HGlvUl4IQxVwEKR45g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF2vFdQVcZL3qVQH3mjHS7Z4aDwdAqatRXLdiGo7VKC9AiEA1mrSrCWoce33PF1olBytgWshn19Ecwu9ME062LTFrnw="}]},"maintainers":[{"name":"mappum","email":"mappum@gmail.com"}]},"2.3.1":{"name":"watt","version":"2.3.1","description":"Powerful generator control flow","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"Matt Bell","email":"mappum@gmail.com"},"license":"MIT","gitHead":"1507f2006f174c5704f1e123ca77a232f2a90e2c","_id":"watt@2.3.1","_shasum":"df4422d62bc957a7e0d239024a33d77ae1b6c96e","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.1","_npmUser":{"name":"mappum","email":"mappum@gmail.com"},"dist":{"shasum":"df4422d62bc957a7e0d239024a33d77ae1b6c96e","tarball":"https://registry.npmjs.org/watt/-/watt-2.3.1.tgz","integrity":"sha512-YmQzFj4BAW2Jhz8gq83RFjQzqoBZdQDq5HdM0JOBZxpvQQDM3luD9ShaNoWOdgUWLB8cKlG1f3pM5RrifjRJ/w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFT8N07u4Nj4R9wlApM1JWAERUfbLPdxoGfiua5ABEkyAiEAsgWLVH36L7uxjFEv30puCpX2d+80uN9LbCac0DhT1a0="}]},"maintainers":[{"name":"mappum","email":"mappum@gmail.com"}]},"2.3.2":{"name":"watt","version":"2.3.2","description":"Powerful generator control flow","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"Matt Bell","email":"mappum@gmail.com"},"license":"MIT","dependencies":{"setimmediate":"^1.0.4"},"gitHead":"8593949c67dd31f0152405f57c2e7e1ae29d22ab","_id":"watt@2.3.2","_shasum":"dd577038992de75a7d49452053e504fd3f7b839a","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.1","_npmUser":{"name":"mappum","email":"mappum@gmail.com"},"dist":{"shasum":"dd577038992de75a7d49452053e504fd3f7b839a","tarball":"https://registry.npmjs.org/watt/-/watt-2.3.2.tgz","integrity":"sha512-Axx16RVwvJfZvxeb4SppqLP0nxPM5wqfJ3tsQCKOFqJ/oiscP4znBfxfWPOI9XxfBMMkQf6zOSZogeLRiYypOQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEonzW/Ps0LaXGCShqw3gY7B2NXqvDh2oJBgmaXY0SVeAiATrMbB9vykoNfPZQ4WRCKWZLpAdJTEUt4aj3L2LS5qsg=="}]},"maintainers":[{"name":"mappum","email":"mappum@gmail.com"}]},"2.4.0":{"name":"watt","version":"2.4.0","description":"Powerful generator control flow","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"Matt Bell","email":"mappum@gmail.com"},"license":"MIT","dependencies":{"setimmediate":"^1.0.4"},"gitHead":"7241de2a1443ce883357dcd762ca3dc9ef726360","_id":"watt@2.4.0","_shasum":"b88a19fb3cc591f88499be8f26a82bdd015ca5a3","_from":".","_npmVersion":"3.3.9","_nodeVersion":"4.2.1","_npmUser":{"name":"mappum","email":"mappum@gmail.com"},"dist":{"shasum":"b88a19fb3cc591f88499be8f26a82bdd015ca5a3","tarball":"https://registry.npmjs.org/watt/-/watt-2.4.0.tgz","integrity":"sha512-WbBKq/aj30kmvoJtMJBgmyQ8hhqoQTNppIdWDWsFBM912lswRNYcrQZe+VKRQVeRP7fAtFQE2vfVdJxp0/URIQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCJKn4sbRAa1QVf0gan2Gmp8RzZwV/y31ulrgK/ojcGUAIhALMp0JBcaJSyDfAZQ5JcIhtKc8eFgMk1r2gkP4DA9r+U"}]},"maintainers":[{"name":"mappum","email":"mappum@gmail.com"}]},"3.0.0":{"name":"watt","version":"3.0.0","description":"Powerful generator control flow","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"Matt Bell","email":"mappum@gmail.com"},"license":"MIT","dependencies":{"setimmediate":"^1.0.4"},"gitHead":"205b67ff11b8589ae6e28c0222f22e54af4eca78","_id":"watt@3.0.0","_shasum":"9bd64bfce8b9f951cdd9e5e75c9fcd9d2520500e","_from":".","_npmVersion":"3.3.12","_nodeVersion":"5.3.0","_npmUser":{"name":"mappum","email":"mappum@gmail.com"},"dist":{"shasum":"9bd64bfce8b9f951cdd9e5e75c9fcd9d2520500e","tarball":"https://registry.npmjs.org/watt/-/watt-3.0.0.tgz","integrity":"sha512-R7d6xTmLbpC+2U5krIQuv9m5QCB3JXsWsbgPW/VtT8jELySpa54/cUWGYR4BpMI/BY7SszMZeU45zGrsMSmDHQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH7CY2m4xSLs9JeB6su/Mr+T7+kQ/Ant21FZ5CLNNN6zAiEAgmB3m8ieDm9qjCvK1f/9QJ8ZxBtPFAhXaGibRRZ0ViI="}]},"maintainers":[{"name":"mappum","email":"mappum@gmail.com"}]},"3.0.1":{"name":"watt","version":"3.0.1","description":"Powerful generator control flow","main":"index.js","scripts":{"test":"standard && tap test.js"},"author":{"name":"Matt Bell","email":"mappum@gmail.com"},"license":"MIT","dependencies":{"setimmediate":"^1.0.4"},"devDependencies":{"standard":"^5.4.1","tap":"^5.1.1"},"gitHead":"dda74e42353e8536d9c65e1b0f4c8febf7a97696","_id":"watt@3.0.1","_shasum":"60e19f0991ecd25a1c6e17888d5730270334545e","_from":".","_npmVersion":"3.3.12","_nodeVersion":"5.3.0","_npmUser":{"name":"mappum","email":"mappum@gmail.com"},"dist":{"shasum":"60e19f0991ecd25a1c6e17888d5730270334545e","tarball":"https://registry.npmjs.org/watt/-/watt-3.0.1.tgz","integrity":"sha512-wdr9ngv2RZVLPlVZvbTqisYOOWELp16Y5edciZTY07OKCUyEZRjp7diMVrwEtk9VAcNEsigdfsafpI99Of0RrQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC0DEj2hwLx2DaWfn8yIecM9ndY2GygOV8PUj6F9QrQGAIgFiMyY3ZCOBM5IFKJyE+RVKS4+VcyozHrlyMrmFkw4cA="}]},"maintainers":[{"name":"mappum","email":"mappum@gmail.com"}]},"3.1.0":{"name":"watt","version":"3.1.0","description":"Powerful generator control flow","main":"index.js","scripts":{"test":"standard && tap test.js --cov","test-tap":"tap test/*.js -Rtap","test-lcov":"mkdir -p coverage && tap test/*.js -Rsilent --coverage-report=text-lcov > coverage/lcov.info"},"author":{"name":"Matt Bell","email":"mappum@gmail.com"},"license":"MIT","dependencies":{"setimmediate":"^1.0.4"},"devDependencies":{"standard":"^5.4.1","tap":"^5.1.1"},"gitHead":"4ee7770bd80a991c94f13287796347470d10cf9a","_id":"watt@3.1.0","_shasum":"b9107d27810d12bf23a3c0735311c24023abec87","_from":".","_npmVersion":"3.3.12","_nodeVersion":"5.5.0","_npmUser":{"name":"mappum","email":"mappum@gmail.com"},"dist":{"shasum":"b9107d27810d12bf23a3c0735311c24023abec87","tarball":"https://registry.npmjs.org/watt/-/watt-3.1.0.tgz","integrity":"sha512-5XQCA8LQ4efYemHzO7FE8FKZ0bk/8O8bdCxvxuSNp4RawrMfV2ebZaZIvXCO0KsY97u177oIbdy8R/OVHPzqZA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBQpibWEhMqGQw8LDiCDCLQb9xoZeScEq7QykTF0lN/CAiBWnSuE5XQWkvMGcMC8qMfehePvVLLb1Xhsp4SDuWl8pQ=="}]},"maintainers":[{"name":"mappum","email":"mappum@gmail.com"}]},"3.2.0":{"name":"watt","version":"3.2.0","description":"Powerful generator control flow","main":"index.js","scripts":{"test":"standard && tap test.js --cov","test-tap":"tap test/*.js -Rtap","test-lcov":"mkdir -p coverage && tap test/*.js -Rsilent --coverage-report=text-lcov > coverage/lcov.info"},"author":{"name":"Matt Bell","email":"mappum@gmail.com"},"license":"MIT","dependencies":{"setimmediate":"^1.0.4"},"devDependencies":{"standard":"^5.4.1","tap":"^5.1.1"},"gitHead":"68d3d261f980bc2f5ad5dd9f241efb04e7d01cfd","_id":"watt@3.2.0","_shasum":"fac6064ca7dc7e568d85207d03cbafb9890166fc","_from":".","_npmVersion":"3.3.12","_nodeVersion":"5.5.0","_npmUser":{"name":"mappum","email":"mappum@gmail.com"},"dist":{"shasum":"fac6064ca7dc7e568d85207d03cbafb9890166fc","tarball":"https://registry.npmjs.org/watt/-/watt-3.2.0.tgz","integrity":"sha512-kIE2Hcvz2RYef6/QOWHfrCcVYgFloBK+V5t4u5MTtwJIlY9tBtcDnfEIr9lJyIwgzDsh8Vsc6SnKNFx+EIm5oA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFSRLnlq6qhVf6hch9iqVr/15e2zPn6hdHmx6e1wDqIkAiEA8r6FomjUiDtr0VZvTvYZ6V2yzQYZ2D/3zHYFsed9phU="}]},"maintainers":[{"name":"mappum","email":"mappum@gmail.com"}]},"3.2.1":{"name":"watt","version":"3.2.1","description":"Powerful generator control flow","main":"index.js","scripts":{"test":"standard && tap test.js --cov","test-tap":"tap test/*.js -Rtap","test-lcov":"mkdir -p coverage && tap test/*.js -Rsilent --coverage-report=text-lcov > coverage/lcov.info"},"author":{"name":"Matt Bell","email":"mappum@gmail.com"},"license":"MIT","dependencies":{"setimmediate":"^1.0.4"},"devDependencies":{"standard":"^5.4.1","tap":"^5.1.1"},"gitHead":"5ad20defb94a62d1bd6c749801d6bc2b9c9a58a7","_id":"watt@3.2.1","_shasum":"1432475a19347ceca794005187fc74d8f2b13e7e","_from":".","_npmVersion":"3.3.12","_nodeVersion":"5.5.0","_npmUser":{"name":"mappum","email":"mappum@gmail.com"},"dist":{"shasum":"1432475a19347ceca794005187fc74d8f2b13e7e","tarball":"https://registry.npmjs.org/watt/-/watt-3.2.1.tgz","integrity":"sha512-zRwAXEW4ZfcIvnTiB6LpotoDPHCRD8LgEnxDZZl+0yv5JA+/e781kqfG30c9qOyRHVqZPRBxb4ZcIhMOlD8nEQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDnEKpjd9s6XWWneNNXaVt1VlnGF5xNhIsdBZqX+RaUzAIgQN5Oh2Mr0EgKf5rj12FA3pcnjZFeRx7w7MT68JKCvVY="}]},"maintainers":[{"name":"mappum","email":"mappum@gmail.com"}]},"3.2.2":{"name":"watt","version":"3.2.2","description":"Powerful generator control flow","main":"index.js","scripts":{"test":"standard && tap test.js --cov","test-tap":"tap test/*.js -Rtap","test-lcov":"mkdir -p coverage && tap test/*.js -Rsilent --coverage-report=text-lcov > coverage/lcov.info"},"author":{"name":"Matt Bell","email":"mappum@gmail.com"},"license":"MIT","dependencies":{"setimmediate":"^1.0.4"},"devDependencies":{"standard":"^6.0.4","tap":"^5.1.1"},"gitHead":"49c9b2fea6c0d7db9ff4f055f4c5c5069715bb9f","_id":"watt@3.2.2","_shasum":"2f3cbf08c3440434c1fd0d3c107ef2b1049ace54","_from":".","_npmVersion":"3.8.5","_nodeVersion":"5.9.0","_npmUser":{"name":"mappum","email":"mappum@gmail.com"},"dist":{"shasum":"2f3cbf08c3440434c1fd0d3c107ef2b1049ace54","tarball":"https://registry.npmjs.org/watt/-/watt-3.2.2.tgz","integrity":"sha512-W/G5am0VD0QzzIcC43EMKy1QiDAotIfa6oJ8e+WHrDpdOZS6mpD1Q8pauJraGPGD+RcjO4odMuzqnxK3bgqugQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAS15+Kg+YiHJOiRZXNf5DMgdKCFzvambpOcFhUTjDVJAiEA198jgqG8/BtwVZ6B+1VJfAAxcGjxVaecpHJ5R3SXZIE="}]},"maintainers":[{"name":"mappum","email":"mappum@gmail.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/watt-3.2.2.tgz_1460232857859_0.032088133972138166"}},"3.2.3":{"name":"watt","version":"3.2.3","description":"Powerful generator control flow","main":"index.js","scripts":{"test":"standard && tap test.js --cov","test-tap":"tap test/*.js -Rtap","test-lcov":"mkdir -p coverage && tap test/*.js -Rsilent --coverage-report=text-lcov > coverage/lcov.info"},"author":{"name":"Matt Bell","email":"mappum@gmail.com"},"license":"MIT","dependencies":{"setimmediate":"^1.0.4"},"devDependencies":{"standard":"^7.0.0","tap":"^5.1.1"},"gitHead":"d74623b15c476e6b7c4c9a6d81c326ef21a6b9ae","_id":"watt@3.2.3","_shasum":"1c5a3ff4b3dc1f31cd9cd1905ae28aac6d330c00","_from":".","_npmVersion":"3.8.3","_nodeVersion":"5.10.1","_npmUser":{"name":"mappum","email":"mappum@gmail.com"},"dist":{"shasum":"1c5a3ff4b3dc1f31cd9cd1905ae28aac6d330c00","tarball":"https://registry.npmjs.org/watt/-/watt-3.2.3.tgz","integrity":"sha512-zXGqhfTi6pBixNHbv9/GUf/7Shb5XTtSwuQY2rlN8Zg95mVLJCB+PHGhAPuf87LKcjS1oAtdaGZpWMKf7ttOOQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEluJJQVypLw5zDjeJJfLk5tHSYkTlEzSh91C4VbwHqWAiEAtQJ4eKrj9l0SnOp2b7COQYPeNOnPquRWQzh2wo2N11E="}]},"maintainers":[{"name":"mappum","email":"mappum@gmail.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/watt-3.2.3.tgz_1462230866630_0.7930041265208274"}},"3.3.0":{"name":"watt","version":"3.3.0","description":"Powerful generator control flow","main":"index.js","scripts":{"test":"standard && tap test.js --cov","test-tap":"tap test/*.js -Rtap","test-lcov":"mkdir -p coverage && tap test/*.js -Rsilent --coverage-report=text-lcov > coverage/lcov.info"},"author":{"name":"Matt Bell","email":"mappum@gmail.com"},"license":"MIT","dependencies":{"setimmediate":"^1.0.4"},"devDependencies":{"standard":"^7.0.0","tap":"^5.1.1"},"gitHead":"5b783130b9e5d41b41713b3357ecc6f582f3ed0a","_id":"watt@3.3.0","_shasum":"c8463c408d1b4878702a53d21b84676aaa6c0136","_from":".","_npmVersion":"3.9.5","_nodeVersion":"6.2.2","_npmUser":{"name":"mappum","email":"mappum@gmail.com"},"dist":{"shasum":"c8463c408d1b4878702a53d21b84676aaa6c0136","tarball":"https://registry.npmjs.org/watt/-/watt-3.3.0.tgz","integrity":"sha512-KUoiy2EvLPGH1Yq9huLYW0hLM+4zvBxp3difm+KJP906Ph2iH7XzlhSeCbu68zqjKUp/STY34g+xYwN2m0/hkA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAUd5Z+JMR8aTbOd68Yem2hGoc+eAlPWnXDzGs9SzxVZAiBRtijnwJRyEnn1eLRLTA6Dmt5GWzORuwABnAYH8qXVPQ=="}]},"maintainers":[{"name":"mappum","email":"mappum@gmail.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/watt-3.3.0.tgz_1468003107958_0.7532685091719031"}}},"readme":"# watt\n\n[![npm version](https://img.shields.io/npm/v/watt.svg)](https://www.npmjs.com/package/watt)\n[![Build Status](https://travis-ci.org/mappum/watt.svg?branch=master)](https://travis-ci.org/mappum/watt)\n[![Dependency Status](https://david-dm.org/mappum/watt.svg)](https://david-dm.org/mappum/watt)\n\n**Powerful control flow using generators**\n\n`watt` lets you write your async Javascript as if it were synchronous, which results in much simpler, more readable code.\n\nES6 introduced generators, which are functions that can be paused and resumed using the `yield` keyword. This lets us do some cool things, for instance letting a library handle control flow.\n\n**Features:**\n- Eliminates \"callback hell\"\n- Use `for`/`while` loops and `if` statements, rather than needing the [`async`](https://github.com/caolan/async) package\n- Return result to callback using `return`\n- Use `try`/`catch` to handle async errors\n- Pass sync/async errors to the callback automatically (reducing boilerplate), or with `throw`\n- Compatible with the Node callback convention, as well as Promises\n- `watt` functions can be called with callbacks, you don't have to change your API\n\n**Before `watt`:**\n\n```js\nfunction copyFile (source, dest, callback) {\n  fs.exists(source, function (exists) {\n    if (!exists) return callback('Source does not exist')\n    fs.exists(dest, function (exists) {\n      if (exists) return callback('Dest already exists')\n      fs.readFile(source, function (err, data) {\n        if (err) return callback(err)\n        fs.writeFile(dest, data, function (err) {\n          return callback(err)\n        })\n      })\n    })\n  })\n}\n```\n\n**After `watt`:**\n```js\nvar copyFile = watt(function * (source, dest, next) {\n  if (!(yield fs.exists(source, next.arg(0)))) throw 'Source does not exist'\n  if (yield fs.exists(dest, next.arg(0))) throw 'Dest already exists'\n  var data = yield fs.readFile(source, next)\n  yield fs.writeFile(dest, data, next)\n})\n```\n\n**Both of these can be called with:**\n```js\ncopyFile('a', 'b', function (err) {\n  if (err) return console.error(err)\n  console.log('copied file')\n})\n```\n\n## Usage\n\n`npm install watt`\n\n### `watt( generatorFn([args...],next), [opts] )`\n\nWraps a generator function and returns a callable function. The returned function can be called with `fn([args...], [callback])`, and `([args...], next)` will be passed to `generatorFn`.\n\nThe user-supplied `callback` is removed from `args` and will not be passed to the generator. `callback` will be automatically called with `callback(error, returned)` after the generator returns or throws an error. If no callback is supplied (the last argument is not a function), a Promise will be returned instead. Note: if you don't want the last argument to be treated as a callback even if it is a function, you may set the `noCallback` option (see below).\n\nIn the generator, `yield` should be called to wait for an async thing to happen, and `next` should be called to resume the generator. Alternatively, if a Promise is passed to `yield`, the generator will automatically resume once the Promise resolves (or will throw an error if it rejects).\n\n`opts` may be an object with the following properties:\n```js\n{\n  noCallback: Boolean, // default: false\n  // if true, the user-supplied `callback` will not be removed from the arguments,\n  // and will not be called after the generator returns or throws an errors\n\n  prepend: Boolean, // default: false\n  // if true, the generator is called with `generator(next, args...)`\n  // instead of `generator(args..., next)`. This can be useful for functions\n  // that accept varying numbers of arguments\n\n  context: Object, // default: caller scope\n  // sets the scope for the generator to run in. Similar to binding a function\n  // with fn.bind(context)\n}\n```\n\n----\n### `next(error, result)`\n\nThe `next` function is passed to `watt` generators, and is used to unpause the generator after it has `yield`ed. `next` should be passed to async functions to \"return\" their results to the generator and resume execution.\n\nIf `error` is truthy, the generator will throw an error. Otherwise, `result` will be passed to the most recent `yield` expression.\n\n----\n### `next.error(error)`\n\nIf `error` is truthy, the generator will throw an error. This is useful when you want your generator to throw an error after an `error` event. For example:\n```js\nvar stream = fs.createReadStream('file.txt')\nstream.on('error', next.error)\nstream.pipe(someWritableStream)\nyield someWritableStream.on('end', next)\n```\nIn this example, if `stream` encounters an error while we are waiting for it to pipe to `someWritableStream`, we will abort waiting for the piping to finish and will throw the error.\n\n----\n### `next.arg(n, [ignoreError])`\n\nA function that returns a callback which can be supplied to async functions to get the `n`th argument. Used as an alternative to `next`, which defaults to the 1st argument (the 0th argument is the error).\n\nIf `ignoreError` is truthy, the 0th argument won't be thrown as an error. If `n` is 0, `ignoreError` is implied to be `true`.\n\nFor example if we want to call `request(url, cb)` which calls `cb` with `cb(err, res, body)`, and we want the body, we can do:\n```js\nvar body = yield request(url, next.arg(2))\n```\n\n----\n### `next.args()`\n\nA callback which can be supplied to async functions to get all of the arguments passed to it. This function does not do any automatic error handling, since the error will be included in the arguments returned. The result returned is the function's `arguments` object.\n\nExample:\n```js\nvar args = yield fs.readFile('file.txt', next.args)\nvar error = args[0]\nvar data = args[1]\n```\n\n----\n### `next.parallel()`, `next.sync()`\n\nCall `next.parallel()` to execute async calls in parallel, then call `yield next.sync()` to wait for these tasks to finish. The result of `next.sync()` will be an array of the result values of tasks, in the order they were spawned. `next.sync()` will unyield as soon as a task gives an error, or when all the tasks have finished.\n\n`next.parallel()` returns a callback similar to `next`, which treats the first value as an error and the second as the return value. Like `next`, this callback also has the `arg` and `args` properties.\n\nNote that you should not `yield` before a parallel call since we don't want the generator to block until the call to `sync`.\n\nExample:\n```js\nfor (var i = 0; i < 5; i++) {\n  // waits a random amount of time, then returns i\n  setTimeout(next.parallel().arg(0), Math.random() * 1000, i)\n}\n// wait until all timeouts have finished\nvar res = yield next.sync()\n// res is: [ 0, 1, 2, 3, 4 ]\n```\n\n----\n### `watt.wrapAll(object, [opts], [names...])`\n\nWraps generator function properties of `object`. Each wrapped generator function gets bound to the context of `object`. If no values are specified for `names`, all generator function properties are wrapped. If one or more strings are specified for `names`, only the properties with those keys will be wrapped.\n\n`opts` can be an options object that will be passed to [`watt()`](#watt-generatorargsnext-opts-).\n\nThis can be useful for wrapping generator methods of a class (call `watt.wrapAll(this)` in the constructor).\n\n```js\nvar watt = require('watt')\n\nclass MyClass {\n  constructor () {\n    this.a = 5\n\n    // do this to wrap both 'foo' and 'bar'\n    watt.wrapAll(this)\n\n    // do this to wrap only 'foo'\n    watt.wrapAll(this, 'foo')\n  }\n\n  // remember to prefix with * to make a generator\n  * foo (next) {\n    yield doAsyncThing(this.a, next)\n    return yield doAnotherAsyncThing(next)\n  }\n\n  * bar (next) {\n    yield foo()\n    return yield doAnotherAsyncThing(next)\n  }\n\n  var mc = new MyClass()\n  mc.foo((err, res) => { ... })\n}\n```\n\n## Examples\n\n### Iterating through an array\nIterate through an array of file paths until we find one that exists.\n\n**Before `watt`:**\n\nWithout `watt`, we need to use the `async` module.\n```js\nvar async = require('async')\n\nfunction firstExisting (paths, cb) {\n  async.eachSeries(paths, function (path, next) {\n    fs.exists(path, function (err, exists) {\n      if (err) return cb(err)\n      if (exists) return cb(path)\n      next()\n    })\n  })\n}\n```\n\n**After `watt`:**\n\nWith `watt`, we can use a standard Javascript `for` loop.\n```js\nvar async = require('watt')\n\nvar firstExisting = async(function * (paths, next) {\n  for (var path of paths) {\n    if (yield fs.exists(path, next)) return path\n  }\n})\n```\n----\n### Iterating through a range\nPrint numbers from 0 to n, one per second.\n\n**Before `watt`:**\n\nWithout `watt`, we need to use recursion. This isn't too complex, however it is slightly less readable than it would be if it were synchronous.\n```js\nvar async = require('async')\n\nfunction countUp (n, cb) {\n  function next (i) {\n    setTimeout(function () {\n      console.log(i)\n      if (i < n) next(i + 1)\n    }, 1000)\n  }\n  next(0)\n}\n```\n\n**After `watt`:**\n\nWith `watt`, we can use a standard Javascript `for` loop.\n```js\nvar async = require('watt')\n\nvar countUp = async(function * (n, next) {\n  for (var i = 0; i <= n; i++) {\n    yield setTimeout(next, 1000)\n    console.log(i)\n  }\n})\n```\n----\n### `if` statements\nAn ugly part of using async callbacks is that the syntax gets ugly when branching. Consider a function that calls an async function `foo`, then depending on the result maybe calls `bar`, then finally calls `baz`:\n\n**Before `watt`:**\n```js\nfunction myAsyncFunc (cb) {\n  foo(function (err, res) {\n    if (err) return cb(err)\n    if (res) {\n      bar(function (err) {\n        if (err) return cb(err)\n        baz(cb)\n      })\n      return\n    }\n    baz(cb)\n  })\n}\n```\n\n**After `watt`:**\n```js\nvar myAsyncFunc = async(function * (next) {\n  var res = yield foo(next)\n  if (res) yield bar(next)\n  return yield baz(next)\n}\n```\n\n----\n### Promises\n`watt` works well with Promises. If you `yield` a promise, its result will be returned if is resolves, or its error will be thrown if it is rejected.\n\nAdditionally, `watt` functions return Promises if a callback is not provided, so you can call them from another `watt` generator without providing the `next` argument.\n\n```js\nvar foo = async(function * (next) {\n  setTimeout(next, 1000)\n  return 'aslfdkj'\n}\n\nvar bar = async(function * (next) {\n  return yield foo() // 'next' not necessary\n})\n\n// callers can use the Promise API instead of a callback if they want\nbar().then(res => console.log(res))\n```\n\n## Alternatives\n\n### - [`co`](https://github.com/tj/co)\n\n`co` is similar to `watt`, but the main difference is that it only works with Promises. It requires that you convert callback functions to return Promises before you can call them, and it does not let you wrap generators with a callback API.\n","maintainers":[{"name":"mappum","email":"mappum@gmail.com"}],"time":{"modified":"2022-06-28T22:10:31.490Z","created":"2015-09-18T23:38:05.125Z","0.0.0":"2015-09-18T23:38:05.125Z","1.0.0":"2015-09-19T01:25:53.432Z","2.0.0":"2015-09-24T03:31:46.580Z","2.0.1":"2015-09-30T19:45:15.841Z","2.1.0":"2015-10-03T03:32:10.053Z","2.1.1":"2015-10-17T00:59:51.165Z","2.2.0":"2015-10-17T01:27:55.248Z","2.2.1":"2015-10-17T19:00:52.264Z","2.2.2":"2015-10-19T23:06:30.544Z","2.3.0":"2015-10-20T00:30:34.356Z","2.3.1":"2015-10-21T02:33:03.521Z","2.3.2":"2015-10-23T20:26:19.022Z","2.4.0":"2015-10-25T21:53:41.977Z","3.0.0":"2016-01-19T22:35:06.894Z","3.0.1":"2016-01-20T03:30:15.429Z","3.1.0":"2016-01-28T22:38:28.137Z","3.2.0":"2016-01-31T01:08:18.915Z","3.2.1":"2016-01-31T02:11:23.247Z","3.2.2":"2016-04-09T20:14:20.012Z","3.2.3":"2016-05-02T23:14:27.712Z","3.3.0":"2016-07-08T18:38:30.598Z"},"author":{"name":"Matt Bell","email":"mappum@gmail.com"},"license":"MIT","readmeFilename":"README.md","users":{"schroeterm":true,"wmhilton":true,"redcube":true,"alanshaw":true}}