{"_id":"holdup","_rev":"28-8092ee57b389ea5d954be0afd8ab467b","name":"holdup","description":"Wrangle CommonJS Promises.","dist-tags":{"latest":"0.6.0"},"versions":{"0.0.1":{"name":"holdup","version":"0.0.1","description":"Wrangle CommonJS Promises.","author":{"name":"Matt Baker","url":"twitter.com/reissbaker"},"license":"MIT","keywords":["promise","promises","flow control","flow-control","callbacks"],"repository":{"type":"git","url":"https://github.com/reissbaker/holdup.git"},"devDependencies":{"mocha":"1.6.0","coffee-script":"1.3.3","expect.js":"0.2.0","uglify-js":"2.2.5","promises-aplus-tests":"*"},"_id":"holdup@0.0.1","dist":{"shasum":"f28663c7ccedbd1a6dec4ac85595b83dd26c47b3","tarball":"https://registry.npmjs.org/holdup/-/holdup-0.0.1.tgz","integrity":"sha512-Zs5IHyLvcXirvY8Tyqecxjr6sedW4HpHAoY7VZUnmMOKizkELODw+XJ7HBEdstyuQetW5VcnilC87x9XpSZXVw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFf7N3joOjQ18b1D3ZTMig23/7dAaUKPuKOXy15fmayHAiEAxi3qFgQO/zjwILUcWDAx3oys40ZtrzGWJfUZHjfl/Rg="}]},"_npmVersion":"1.1.62","_npmUser":{"name":"reissbaker","email":"matthew.reiss.baker@gmail.com"},"maintainers":[{"name":"reissbaker","email":"matthew.reiss.baker@gmail.com"}],"directories":{}},"0.0.2":{"name":"holdup","version":"0.0.2","description":"Wrangle CommonJS Promises.","author":{"name":"Matt Baker","url":"twitter.com/reissbaker"},"license":"MIT","keywords":["promise","promises","flow control","flow-control","callbacks"],"repository":{"type":"git","url":"https://github.com/reissbaker/holdup.git"},"devDependencies":{"mocha":"1.9.0","coffee-script":"1.6.2","expect.js":"0.2.0","uglify-js":"2.2.5","promises-aplus-tests":"*"},"_id":"holdup@0.0.2","dist":{"shasum":"d9f04f025bcc4acd1a5685001d177966975d13fa","tarball":"https://registry.npmjs.org/holdup/-/holdup-0.0.2.tgz","integrity":"sha512-5tkrMbixDD2D5Bd7RiPCPG91+Y5icb65wWjuzW6FQYqvt/2Y/4zwLiiq/jQlmujRGNtAnsTCHAikJNQl8WE5iA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCwOD+gFHlzUBY0wH8/ZGS/ns2ut2cHMFSpCfWjgEHMSQIgFPPP1flFrUiSbqkwNGnAINFt8to4o/DXBw9X1+h3h5o="}]},"_from":".","_npmVersion":"1.2.17","_npmUser":{"name":"reissbaker","email":"matthew.reiss.baker@gmail.com"},"maintainers":[{"name":"reissbaker","email":"matthew.reiss.baker@gmail.com"}],"directories":{}},"0.0.3":{"name":"holdup","version":"0.0.3","description":"Wrangle CommonJS Promises.","author":{"name":"Matt Baker","url":"twitter.com/reissbaker"},"license":"MIT","keywords":["promise","promises","flow control","flow-control","callbacks"],"repository":{"type":"git","url":"https://github.com/reissbaker/holdup.git"},"devDependencies":{"mocha":"1.9.0","coffee-script":"1.6.2","expect.js":"0.2.0","uglify-js":"2.2.5","promises-aplus-tests":"*"},"_id":"holdup@0.0.3","dist":{"shasum":"db84d46f7eeb264361a4c01283e9d8e6b10943fa","tarball":"https://registry.npmjs.org/holdup/-/holdup-0.0.3.tgz","integrity":"sha512-a01UcBh2XwwS0YWAEiVJtsqeZBd5DBh6IbohYtRwp6XKYSmzvdT8hTsPcbVv2qY1FysUqcNuJqZpj9P+/h8qqg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDdEh3G+fdmmkni+x78mHGP1yCNuLE8Fg8IyOf3on6CAAIhAPg6oOOIW8WQyXL1Om14G1m1hcv//Yn5jKJC+DIeXpDj"}]},"_from":".","_npmVersion":"1.2.17","_npmUser":{"name":"reissbaker","email":"matthew.reiss.baker@gmail.com"},"maintainers":[{"name":"reissbaker","email":"matthew.reiss.baker@gmail.com"}],"directories":{}},"0.0.4":{"name":"holdup","version":"0.0.4","description":"Wrangle CommonJS Promises.","author":{"name":"Matt Baker","url":"twitter.com/reissbaker"},"license":"MIT","keywords":["promise","promises","flow control","flow-control","callbacks"],"repository":{"type":"git","url":"https://github.com/reissbaker/holdup.git"},"devDependencies":{"mocha":"1.9.0","coffee-script":"1.6.2","expect.js":"0.2.0","uglify-js":"2.2.5","promises-aplus-tests":"*"},"_id":"holdup@0.0.4","dist":{"shasum":"a7dfdecbc48c98e8da958b6f0aee3311c0c02ed4","tarball":"https://registry.npmjs.org/holdup/-/holdup-0.0.4.tgz","integrity":"sha512-VqWa0kjf0Ne+01KdeV6j3f/PYusiI73HHK07/IY5EY4H6S/u4otJ4XYyAcWjNF2bz5FKg0eSuf0URGdVEGNU4Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGA2oURc7mlhRgm8z8EGNMDz8cgk+ZFsbJrn5DMaFG91AiB+cnjw4jEAAuGKAAKBO+5cnETWUncZEa53Uc2l2vqnCQ=="}]},"_from":".","_npmVersion":"1.2.17","_npmUser":{"name":"reissbaker","email":"matthew.reiss.baker@gmail.com"},"maintainers":[{"name":"reissbaker","email":"matthew.reiss.baker@gmail.com"}],"directories":{}},"0.1.0":{"name":"holdup","version":"0.1.0","description":"Wrangle CommonJS Promises.","author":{"name":"Matt Baker","url":"twitter.com/reissbaker"},"license":"MIT","keywords":["promise","promises","flow control","flow-control","callbacks"],"repository":{"type":"git","url":"https://github.com/reissbaker/holdup.git"},"devDependencies":{"mocha":"1.12.0","coffee-script":"1.6.3","expect.js":"0.2.0","uglify-js":"2.3.6","promises-aplus-tests":"*"},"bugs":{"url":"https://github.com/reissbaker/holdup/issues"},"homepage":"https://github.com/reissbaker/holdup","_id":"holdup@0.1.0","dist":{"shasum":"8620d445e95b288a62db7368ab8f52344d9a7a6c","tarball":"https://registry.npmjs.org/holdup/-/holdup-0.1.0.tgz","integrity":"sha512-P5O/E5Px6MzISfH4xu80huIkrzITSdLyU1k1mX8sXgKEP5kqVSBSAjpH+bL7Luk2QptZyKQj+OIWYuINlwPk1w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDxADpx/JHlo/3j71G5sWK7VKtoswi+UMv2GlGLZnOTCwIgEcAjMpn7/+sRj0dZzJR2nMyIf0nFYQ7d5oDhw/+rGmc="}]},"_from":".","_npmVersion":"1.3.21","_npmUser":{"name":"reissbaker","email":"matthew.reiss.baker@gmail.com"},"maintainers":[{"name":"reissbaker","email":"matthew.reiss.baker@gmail.com"}],"directories":{}},"0.2.0":{"name":"holdup","version":"0.2.0","description":"Wrangle CommonJS Promises.","author":{"name":"Matt Baker","url":"twitter.com/reissbaker"},"license":"MIT","keywords":["promise","promises","flow control","flow-control","callbacks"],"repository":{"type":"git","url":"https://github.com/reissbaker/holdup.git"},"devDependencies":{"mocha":"1.12.0","coffee-script":"1.6.3","expect.js":"0.2.0","uglify-js":"2.3.6","promises-aplus-tests":"*"},"bugs":{"url":"https://github.com/reissbaker/holdup/issues"},"homepage":"https://github.com/reissbaker/holdup","_id":"holdup@0.2.0","dist":{"shasum":"bcca9d19e3a3f4e733ae748d811c7770e4847b8c","tarball":"https://registry.npmjs.org/holdup/-/holdup-0.2.0.tgz","integrity":"sha512-IsDmCbUIT4U86o36Rk90+XAVnokdtcciN1t6kT+paTyQCZzXRO6YHgZlmkTOccOAUxNIdaeYnVRCliA6oUuwaw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCXTMbGAF3v2THGsjzeEpM/LJrvIyS5AHlrVtMRyk0pNgIgLKfmZUFg+EzHMrNMpXxYi1/03qSJeRPFAHcRxEwZpAY="}]},"_from":".","_npmVersion":"1.3.21","_npmUser":{"name":"reissbaker","email":"matthew.reiss.baker@gmail.com"},"maintainers":[{"name":"reissbaker","email":"matthew.reiss.baker@gmail.com"}],"directories":{}},"0.3.0":{"name":"holdup","version":"0.3.0","description":"Wrangle CommonJS Promises.","author":{"name":"Matt Baker","url":"twitter.com/reissbaker"},"license":"MIT","keywords":["promise","promises","flow control","flow-control","callbacks"],"repository":{"type":"git","url":"https://github.com/reissbaker/holdup.git"},"devDependencies":{"mocha":"1.12.0","coffee-script":"1.6.3","expect.js":"0.2.0","uglify-js":"2.3.6","promises-aplus-tests":"*"},"bugs":{"url":"https://github.com/reissbaker/holdup/issues"},"homepage":"https://github.com/reissbaker/holdup","_id":"holdup@0.3.0","dist":{"shasum":"ce099358469e785aecff3fba55725b2d497bb60f","tarball":"https://registry.npmjs.org/holdup/-/holdup-0.3.0.tgz","integrity":"sha512-AzltRjAG+uvPzTdBia2kaRs5H6/dxuFHPKMospf6qi+puGk8FPtJRKj9bEAscgjBst3Za3IzlVlEDWhDN2pxgg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC3MOJx2EThncQfeEjV8kIZBGm47CBvNVA+lXV28DxilQIgHCAue8YsEMgwetNwZ8inlzY3tzMpyznLjHPDpBYafW0="}]},"_from":".","_npmVersion":"1.3.21","_npmUser":{"name":"reissbaker","email":"matthew.reiss.baker@gmail.com"},"maintainers":[{"name":"reissbaker","email":"matthew.reiss.baker@gmail.com"}],"directories":{}},"0.3.1":{"name":"holdup","version":"0.3.1","description":"Wrangle CommonJS Promises.","author":{"name":"Matt Baker","url":"twitter.com/reissbaker"},"license":"MIT","keywords":["promise","promises","flow control","flow-control","callbacks"],"repository":{"type":"git","url":"https://github.com/reissbaker/holdup.git"},"devDependencies":{"mocha":"1.12.0","coffee-script":"1.6.3","expect.js":"0.2.0","uglify-js":"2.3.6","promises-aplus-tests":"*"},"bugs":{"url":"https://github.com/reissbaker/holdup/issues"},"homepage":"https://github.com/reissbaker/holdup","_id":"holdup@0.3.1","dist":{"shasum":"38e0347a0c2a5d6a9e0ff74666767dc1b19e316a","tarball":"https://registry.npmjs.org/holdup/-/holdup-0.3.1.tgz","integrity":"sha512-LwHXzy/1rW2td+PTIJ1MkYNHZzwZbwStFi/5C16pmmfcnf79O7m9M1EKrO5Hwc2vaZdgKxxtZCLlv1LcpxxM6w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCBJ8Qk55T8sVAotzEbHTkt6c6L4dKfu3fkykQUjjkiVAIhALOPsh71WKpRUZQSA6IdSIx54dSBs5/tjAvdSmS6gEdn"}]},"_from":".","_npmVersion":"1.3.21","_npmUser":{"name":"reissbaker","email":"matthew.reiss.baker@gmail.com"},"maintainers":[{"name":"reissbaker","email":"matthew.reiss.baker@gmail.com"}],"directories":{}},"0.4.0":{"name":"holdup","version":"0.4.0","description":"Wrangle CommonJS Promises.","author":{"name":"Matt Baker","url":"twitter.com/reissbaker"},"license":"MIT","keywords":["promise","promises","flow control","flow-control","callbacks"],"repository":{"type":"git","url":"https://github.com/reissbaker/holdup.git"},"devDependencies":{"mocha":"1.12.0","coffee-script":"1.6.3","expect.js":"0.2.0","uglify-js":"2.3.6","promises-aplus-tests":"*"},"bugs":{"url":"https://github.com/reissbaker/holdup/issues"},"homepage":"https://github.com/reissbaker/holdup","_id":"holdup@0.4.0","dist":{"shasum":"d473ddb25fd0b91a1c70ce1f914a66e2c8bcfa50","tarball":"https://registry.npmjs.org/holdup/-/holdup-0.4.0.tgz","integrity":"sha512-EWmGjCK6A+j+pDGoOl7a86BWDaH8qxNpMGbSJNNlF5e0ZHyFQV6Q3+s4nN3Q320YgyMh1reLfhdec4Hlr3UP6g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFkBgauyKayApsMrsPJcZ26/YOpkX9X2t0KGF+W4QTuvAiEAt6FrsHLcayrogLod99Vcj0ii6fr2UVvpyJHHTaswOoQ="}]},"_from":".","_npmVersion":"1.3.21","_npmUser":{"name":"reissbaker","email":"matthew.reiss.baker@gmail.com"},"maintainers":[{"name":"reissbaker","email":"matthew.reiss.baker@gmail.com"}],"directories":{}},"0.5.0":{"name":"holdup","version":"0.5.0","description":"Wrangle CommonJS Promises.","author":{"name":"Matt Baker","url":"twitter.com/reissbaker"},"license":"MIT","keywords":["promise","promises","flow control","flow-control","callbacks"],"repository":{"type":"git","url":"https://github.com/reissbaker/holdup.git"},"devDependencies":{"mocha":"1.12.0","coffee-script":"1.6.3","expect.js":"0.2.0","uglify-js":"2.3.6","promises-aplus-tests":"*"},"bugs":{"url":"https://github.com/reissbaker/holdup/issues"},"homepage":"https://github.com/reissbaker/holdup","_id":"holdup@0.5.0","dist":{"shasum":"c138355e5ec32229a121f0f7791f897f90f69800","tarball":"https://registry.npmjs.org/holdup/-/holdup-0.5.0.tgz","integrity":"sha512-gl79Y3U72TYSAZz7hA0yOvI4arETiXx4pV1PZy+JGBCvfd4Zvz9/w1bSJx5P4UT6xJgsPZFP8N95X0zUdNWUMA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAtjGwyVxzYC9CmnkmzNubxg5A7dDalpaj1MRc5WGoWZAiEAgEb5lMiJu6/cwO9WucEYYRGuLBcIdEqLxeTpVqrXktk="}]},"_from":".","_npmVersion":"1.3.21","_npmUser":{"name":"reissbaker","email":"matthew.reiss.baker@gmail.com"},"maintainers":[{"name":"reissbaker","email":"matthew.reiss.baker@gmail.com"}],"directories":{}},"0.5.1":{"name":"holdup","version":"0.5.1","description":"Wrangle CommonJS Promises.","author":{"name":"Matt Baker","url":"twitter.com/reissbaker"},"license":"MIT","keywords":["promise","promises","flow control","flow-control","callbacks"],"repository":{"type":"git","url":"https://github.com/reissbaker/holdup.git"},"devDependencies":{"mocha":"1.12.0","coffee-script":"1.6.3","expect.js":"0.2.0","uglify-js":"2.3.6","promises-aplus-tests":"*"},"bugs":{"url":"https://github.com/reissbaker/holdup/issues"},"homepage":"https://github.com/reissbaker/holdup","_id":"holdup@0.5.1","dist":{"shasum":"ae5bf51fa0a2cde2978b736d01850d2a789aa53b","tarball":"https://registry.npmjs.org/holdup/-/holdup-0.5.1.tgz","integrity":"sha512-Vj+VnmP2X2sgrr/TR4JqesLr/zdS5Ve3oEGBPUyJ67JvX3QprOCaY8j6J58DEw4g2Cl54mKvrEO2rEIGIzsXNg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDpLwVFmVPLy0MCQgyrpGFxdlmeYLYnrvYvao58Myr/wAIhAPXMUQWN3A8/OQwDaKJNEVK+yCj7cEeAFFYHdAL1mSST"}]},"_from":".","_npmVersion":"1.3.21","_npmUser":{"name":"reissbaker","email":"matthew.reiss.baker@gmail.com"},"maintainers":[{"name":"reissbaker","email":"matthew.reiss.baker@gmail.com"}],"directories":{}},"0.5.2":{"name":"holdup","version":"0.5.2","description":"Wrangle CommonJS Promises.","author":{"name":"Matt Baker","url":"twitter.com/reissbaker"},"license":"MIT","keywords":["promise","promises","flow control","flow-control","callbacks"],"repository":{"type":"git","url":"https://github.com/reissbaker/holdup.git"},"devDependencies":{"mocha":"1.12.0","coffee-script":"1.6.3","expect.js":"0.2.0","uglify-js":"2.3.6","promises-aplus-tests":"*"},"bugs":{"url":"https://github.com/reissbaker/holdup/issues"},"homepage":"https://github.com/reissbaker/holdup","_id":"holdup@0.5.2","dist":{"shasum":"870a5c005d3e2c377885473d6b37dc9df8143276","tarball":"https://registry.npmjs.org/holdup/-/holdup-0.5.2.tgz","integrity":"sha512-5RkGPXXLHgo73pl31oQdBDEc4lCTNIXPUbF3FVj+mPaCHv2qFMeNu6Lr6pS/nJo93V5bJT5BxIz2dY36yryrnQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHCh0yAlueyNTLLXmbn2QzJ7w34mchmJnWJP56jDhPc2AiEA++EX1/A4Yu3f52NU9YW4K1VVkhBnozl6heqlInLDawY="}]},"_from":".","_npmVersion":"1.3.21","_npmUser":{"name":"reissbaker","email":"matthew.reiss.baker@gmail.com"},"maintainers":[{"name":"reissbaker","email":"matthew.reiss.baker@gmail.com"}],"directories":{}},"0.5.3":{"name":"holdup","version":"0.5.3","description":"Wrangle CommonJS Promises.","author":{"name":"Matt Baker","url":"twitter.com/reissbaker"},"license":"MIT","keywords":["promise","promises","flow control","flow-control","callbacks"],"repository":{"type":"git","url":"https://github.com/reissbaker/holdup.git"},"devDependencies":{"mocha":"1.12.0","coffee-script":"1.6.3","expect.js":"0.2.0","uglify-js":"2.3.6","promises-aplus-tests":"*"},"bugs":{"url":"https://github.com/reissbaker/holdup/issues"},"homepage":"https://github.com/reissbaker/holdup","_id":"holdup@0.5.3","dist":{"shasum":"88d3493daf4bd36c995a2e230624d0f6b3411d5f","tarball":"https://registry.npmjs.org/holdup/-/holdup-0.5.3.tgz","integrity":"sha512-VEZOBSkTSpKBO7denIH1WgeQCqGatLlkctOGMRlzgsXuZRsbymVn8X8wWM6+wqwjZFms8a4AqiV6u37RVkFIFg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFgFHdnGFg0l0j5Xz6iqrnvgYzzEbzXEjMih30DNWHphAiEAw3TcEDTt8Mo6vav9jYaN4RerJYOxja9noUWnY4S24TI="}]},"_from":".","_npmVersion":"1.3.21","_npmUser":{"name":"reissbaker","email":"matthew.reiss.baker@gmail.com"},"maintainers":[{"name":"reissbaker","email":"matthew.reiss.baker@gmail.com"}],"directories":{}},"0.5.4":{"name":"holdup","version":"0.5.4","description":"Wrangle CommonJS Promises.","author":{"name":"Matt Baker","url":"twitter.com/reissbaker"},"license":"MIT","keywords":["promise","promises","flow control","flow-control","callbacks"],"repository":{"type":"git","url":"https://github.com/reissbaker/holdup.git"},"devDependencies":{"browserify":"3.24.1","mocha":"1.12.0","coffee-script":"1.6.3","expect.js":"0.2.0","uglify-js":"2.3.6","promises-aplus-tests":"*"},"bugs":{"url":"https://github.com/reissbaker/holdup/issues"},"homepage":"https://github.com/reissbaker/holdup","_id":"holdup@0.5.4","dist":{"shasum":"925d08077d9162a3435fe58a077dd2fb123a5b3c","tarball":"https://registry.npmjs.org/holdup/-/holdup-0.5.4.tgz","integrity":"sha512-MmZDL3NxhBbStQdtLLghxMP1FyUZjPlZzLZWJuReMRaEpiADXOB1ODXSG67RObl2KqZTdDRMbYlgvC7Zxkyd7Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAQrUON/BVxDE9gXD2M5uha55O28GnFPoqfu1BmDyQaqAiAHvFbknM71edoOk4nXdP1OZo0UpmKVThIuOjG7cR8Z2Q=="}]},"_from":".","_npmVersion":"1.3.21","_npmUser":{"name":"reissbaker","email":"matthew.reiss.baker@gmail.com"},"maintainers":[{"name":"reissbaker","email":"matthew.reiss.baker@gmail.com"}]},"0.5.5":{"name":"holdup","version":"0.5.5","description":"Wrangle CommonJS Promises.","author":{"name":"Matt Baker","url":"twitter.com/reissbaker"},"license":"MIT","keywords":["promise","promises","flow control","flow-control","callbacks"],"repository":{"type":"git","url":"https://github.com/reissbaker/holdup.git"},"devDependencies":{"browserify":"3.24.1","mocha":"1.12.0","coffee-script":"1.6.3","expect.js":"0.2.0","uglify-js":"2.4.12","promises-aplus-tests":"*"},"bugs":{"url":"https://github.com/reissbaker/holdup/issues"},"homepage":"https://github.com/reissbaker/holdup","_id":"holdup@0.5.5","dist":{"shasum":"8dadd1620dc733adacdafb9d42563b7e0554adf8","tarball":"https://registry.npmjs.org/holdup/-/holdup-0.5.5.tgz","integrity":"sha512-CleIDlpD34O1hlA3OLHA3XbmlBHYOYnyHB6BNwTeIaNy2AVPRR4K5H8NGT2d1bOABRqng1r7HpoCgF41Y2GbGw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCcPbwZeBgU9sEVmw0gM6laFY0/S7RtvSO1gkX+uDjJBgIgUmJ/ciujUER1s02hfEqNrA55IIYhWBS+9XyKH5Iyu2k="}]},"_from":".","_npmVersion":"1.3.21","_npmUser":{"name":"reissbaker","email":"matthew.reiss.baker@gmail.com"},"maintainers":[{"name":"reissbaker","email":"matthew.reiss.baker@gmail.com"}]},"0.6.0":{"name":"holdup","version":"0.6.0","description":"Wrangle CommonJS Promises.","author":{"name":"Matt Baker","url":"twitter.com/reissbaker"},"license":"MIT","keywords":["promise","promises","flow control","flow-control","callbacks"],"repository":{"type":"git","url":"https://github.com/reissbaker/holdup.git"},"devDependencies":{"browserify":"3.30.2","mocha":"1.12.0","coffee-script":"1.6.3","expect.js":"0.2.0","uglify-js":"2.4.12","promises-aplus-tests":"*"},"bugs":{"url":"https://github.com/reissbaker/holdup/issues"},"homepage":"https://github.com/reissbaker/holdup","_id":"holdup@0.6.0","dist":{"shasum":"5109f9a4fe30c69ddf52f513b3cfd924b3891227","tarball":"https://registry.npmjs.org/holdup/-/holdup-0.6.0.tgz","integrity":"sha512-2XG/6uOofGw2YuIvvztqdfmMTwDCtn98ipyVSE0V4QR07gPJW4O28dymgcua3xTeqN0a8zPSOyiO1enB55jQtQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHcClkX6CJr0i1mkhbZZbTeCStfNG8pJtXRz/e9veT/3AiEAxE2qgZvUrwkrFfZRG2Z/L5v3eeZO3uodHhNRrJH2xmQ="}]},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"reissbaker","email":"matthew.reiss.baker@gmail.com"},"maintainers":[{"name":"reissbaker","email":"matthew.reiss.baker@gmail.com"}]}},"readme":"```\n /$$                 /$$       /$$\n| $$                | $$      | $$\n| $$$$$$$   /$$$$$$ | $$  /$$$$$$$ /$$   /$$  /$$$$$$\n| $$__  $$ /$$__  $$| $$ /$$__  $$| $$  | $$ /$$__  $$\n| $$  \\ $$| $$  \\ $$| $$| $$  | $$| $$  | $$| $$  \\ $$\n| $$  | $$| $$  | $$| $$| $$  | $$| $$  | $$| $$  | $$\n| $$  | $$|  $$$$$$/| $$|  $$$$$$$|  $$$$$$/| $$$$$$$/\n|__/  |__/ \\______/ |__/ \\_______/ \\______/ | $$____/\n                                            | $$\n                                            | $$\n                                            |__/\n```\n\n\n<a href=http://promises-aplus.github.com/promises-spec>\n  <img src=http://promises-aplus.github.com/promises-spec/assets/logo-small.png\n       align=right\n       alt='Promises/A+ logo'\n  />\n</a>\n\n\nHoldup is a small but full-featured flow-control library that makes working with\npromises or callbacks in Javascript easy. With Holdup you define the\ndependencies of your functions and it executes them for you with maximal\nconcurrency: you don't have to explicitly state whether they're parallel or\nserial, or what order each one should run in. It just works.\n\nHoldup runs in Node, Component-spec environments, and ordinary browsers; it has\nno dependencies and is extensively unit-tested. It works with any CommonJS\nPromises/A or Promises/A+ compliant promise implementation; it also provides\nits own Promises/A+ compliant promise implementation. It clocks in at a skinny\n3.7k minified and gzipped.\n\n\nExamples\n================================================================================\n\nHere's an example of how to define a task that depends on three other\nNode-style async functions:\n\n```javascript\nvar taskA = holdup.wrap(nodeFn);\nvar taskB = holdup.wrap(otherNodeFn);\nvar taskC = holdup.wrap(finalNodeFn, arg1, arg2);\n\nholdup.all(taskA, taskB, taskC).then(function() {\n  // do work\n}, function() {\n  // handle errors\n});\n```\n\nIn this case, `taskA`, `taskB`, and `taskC` will all immediately execute in\nparallel, and the work will wait until all three finish successfully. If any of\nthe dependencies fail, the error callback will be called. All of the tasks are\nthemselves just Promises/A+ compliant promises, so they can be used with any\nlibrary that works with Promises/A or Promises/A+.\n\nThat was a simple example, though: do some work in parallel, and when it\nfinishes do some other work. What if we have multiple dependencies on separate\nparallel workloads? Holdup handles that well too:\n\n```javascript\nvar taskA = holdup.wrap(fnA);\nvar taskB = holdup.wrap(fnB);\n\nvar taskC = holdup.all(taskA, taskB).then(function() {\n  return holdup.wrap(fnC);\n});\n\nvar taskD = holdup.all(taskA).then(function() { return holdup.wrap(fnD); });\n\nvar taskE = holdup.all(taskC, taskD).then(function() {\n  return holdup.wrap(fnE);\n});\n```\n\nIn the above, `taskE` depends both on `taskC` and `taskD`. `taskD` depends on\n`taskA`, as does `taskC` -- but `taskC` has an additional dependency on\n`taskB`. This might be a pain to hand-optimize with raw callbacks, but since\nyou just have to specify dependencies you can let Holdup take care of the work\nfor you.\n\nHoldup understands more than success, though. Sometimes, things break; it's\nstill important to handle those failures. It might also be important to take\ncertain actions if *enough* things break, or if specific combinations of things\nbreak. With Holdup, it's easy to define those relationships:\n\n```javascript\nvar taskA = holdup.wrap(fnA),\n    taskB = holdup.wrap(fnB),\n    taskC = holdup.wrap(fnC),\n    taskD = holdup.all(taskA, taskB),\n    taskE = holdup.none(taskC, taskD);\n\ntaskE.then(function() {\n  // only gets called when taskC and taskD both error out\n}, function() {\n  // gets called if either taskC or taskD pass, or if they both do\n});\n```\n\nSimilarly, Holdup has a `resolved` function that fulfills once everything has\nresolved -- even if everything resolved to an error state, or if some resolved\none way and others resolved another. It passes the fulfilled and rejected\npromises in separate arrays to the `then` callback, as so:\n\n```javascript\nvar taskA = holdup.wrap(fnA),\n    taskB = holdup.wrap(fnB),\n    taskC = holdup.wrap(fnC),\n    taskD = holdup.resolved(taskA, taskB, taskC);\n\ntaskD.then(function(fulfilled, rejected) {\n  // this is called once taskA, taskB, and taskC are no longer in pending\n  // states.\n  // fulfilled is an array of which tasks have fulfilled, and rejected is an\n  // array of which tasks have rejected.\n});\n```\n\nThe `all`, `none`, and `resolved` functions form the basis of Holdup's API, but\nthey're not the only ones available. Holdup provides a full-featured functional\nAPI for working with promises, wrapping Node-style functions, and easily making\nyour own promises. Keep reading for the full API documentation.\n\n\nAPI\n================================================================================\n\nPromise Methods\n--------------------------------------------------------------------------------\n\nPromises created by Holdup are Promises/A+ compliant and expose the following\nmethods:\n\n##### promise.then(onFulfilled, onRejected)\n\nGiven optional callbacks to be called on promise fulfillment or rejection,\nreturns a new promise that will adopt the state of the `onFulfilled` callback\nif `promise` fulfills, or will adopt the state of `promise` otherwise.\n\n\n##### promise.error(onRejected)\n\nAn alias for `promise.then(null, onRejected)`.\n\n\n##### promise.error(ErrorClass, onRejected)\n\nSimilar to a call to `promise.error(onRejected)`, except that `onRejected` will\nonly be called if the given rejection reason is an instance of `ErrorClass`.\n\n\n##### promise.thrown(onThrown)\n\n*:warning: Warning: `promise.thrown` is not interoperable with other\nPromises/A+ spec libraries; the Promises/A+ spec doesn't make it possible in a\ngeneral case to tell whether a promise has rejected due to a thrown error, or\nwhether it rejected for a different reason. If you need the functionality of\n`promise.thrown` — for example, if you're running in Node and follow the [Node\ncore team's recommendation to shutdown on thrown errors to avoid memory\nleaks][guide] — it's recommended that you not use Holdup in conjunction with\nother Promise libraries.*\n\n[guide]: http://nodejs.org/api/domain.html#domain_warning_don_t_ignore_errors\n\nSimilar to a call to `promise.then(null, onThrown)`, except that `onThrown`\nwill be called only if the promise rejects due to a thrown error.\n\n\n##### promise.thrown(ThrownClass, onThrown)\n\nSimilar to a call to `promise.thrown(onThrown)`, except that `onThrown` will be\ncalled only if the given rejection reason is an instance of `ThrownClass`.\n\n\n\nCreating Promises\n--------------------------------------------------------------------------------\n\n##### holdup.make(callback)\n\nGiven a callback of form `function(fulfill, reject) {}`, returns a promise that\nwill be fulfilled when the callback calls `fulfill` or rejected when the\npromise calls `reject`.\n\nThe returned promise will call its `then` callback with whatever is passed to\nthe `fulfill` callback, and will call its `then` errback with whatever is\npassed to the `reject` errback.\n\n\n##### holdup.fulfill(value)\n\nGiven a value, returns a promise that will fulfill to the value.\n\nEssentially a degenerate, but convenient form of `holdup.make` for creating\npromises that you know will fulfill to a specific value.\n\n\n##### holdup.fcall(fn)\n\nGiven a function that returns a value, returns a promise that will fulfill to\nthe result of the given function.\n\nEssentially a degenerate, but convenient form of `holdup.make` for creating\npromises that you know will fulfill to a specific value.\n\n\n##### holdup.reject(fn)\n\nGiven a reason, returns a promise that will reject with the reason.\n\nEssentially a degenerate but convenient form of `holdup.make` for creating\npromises that you know will reject to a specific value.\n\n\n##### holdup.ferr(fn)\n\nGiven a function that returns a value, returns a promise that will reject with\nthe result of the given function passed as the rejection reason.\n\nEssentially a degenerate but convenient form of `holdup.make` for creating\npromises that you know will reject to a specific value.\n\n\n\nManipulating Promises\n--------------------------------------------------------------------------------\n\n\n##### holdup.all\n\nTakes an arg list, array, array of arrays, arg lists of arrays... etc\ncontaining promises.\n\nReturns a promise that will be fulfilled if all the promises fulfill, and will\nreject as soon as any of the promises reject.\n\nIt will call its `then` callback with the array of all fulfilled values, in the\norder that their respective promises were passed in. It will call its `then`\nerrback with the first promise to reject.\n\n\n##### holdup.none\n\nTakes an arg list, array, array of arrays, arg list of arrays... etc containing\npromises.\n\nReturns a promise that will be fulfilled if all of the promises reject, and\nwill reject as soon as any of the promises fulfill.\n\nThe returned promise will call its `then` callback with the array of all\nrejected promises, in the order that they rejected. It will call its `then`\nerrback with the first promise to fulfill.\n\n\n##### holdup.settled\n\n*alias: `holdup.resolved`, `holdup.allSettled`*\n\nTakes an arg list, array, array of arrays, arg list of arrays... etc containing\npromises.\n\nReturns a promise that will be fulfilled once all of the given promises are no\nlonger in a pending state; i.e., once they've each been rejected or fulfilled.\nThe promises don't have to end in the same state: they only have to leave the\npending state. The returned promise will never reject.\n\nThe returned promise will call its `then` callback with an array of promise\nInspection instances, with each inspection in the order that its respective\npromise was passed in.\n\n\n##### holdup.firstValue\n\n*alias: `holdup.race`*\n\nTakes an arg list, array, array of arrays, arg list of arrays... etc containing\npromises.\n\nReturns a promise that will be fulfilled as soon as the first of the given\npromises fulfills, and will reject if none of the promises fulfill.\n\nThe returned promise will call its `then` callback with the first fulfilled\nvalue, and will call its `then` errback with the array of all rejected errors\nin the order that their respective promises were passed in.\n\n\n##### holdup.firstError\n\nTakes an arg list, array, array of arrays, arg list of arrays... etc containing\npromises.\n\nReturns a promise that will be fulfilled as soon as the first of the given\npromises rejects, and will reject if none of the promises reject.\n\nThe returned promise will call its `then` callback with the first rejection\nreason, and will call its `then` errback with the array of all fulfilled values\nin the order that their respective promises were passed in.\n\n\n##### holdup.lastValue\n\nTakes an arg list, array, array of arrays, arg list of arrays... etc containing\npromises.\n\nReturns a promise that will be fulfilled once all of the promises have left\ntheir pending state, and at least one has fulfilled. It will reject if all\ngiven promises reject.\n\nThe returned promise will call its `then` callback with the value of the last\nfulfilled promise, and will call its `then` errback with the array of all\nrejection reasons in the order that the respective promises were passed in.\n\n\n##### holdup.lastError\n\nTakes an arg list, array, array of arrays, arg list of arrays... etc\ncontaining promises.\n\nReturns a promise that will be fulfilled once all of the promises have\nleft their pending state, and at least one has rejected. It will reject\nif all given promises fulfill.\n\nThe returned promise will call its `then` callback with the rejection reason\nof the last rejected promise, and will call its `then` errback with the array\nof all fulfilled promise values in the order that their respective promises\nwere passed in.\n\n\n##### holdup.invert(promise)\n\nGiven a promise, returns a promise that will reject when the given promise\nfulfills and will fulfill when the given promise rejects.\n\nIf data is passed to the callback of the given promise, it will be passed as\nthe error to the returned promise's errback. If an error is passed to the\nerrback of the given promise, it will be passed as the data to the returned\npromises callback.\n\n\n\nWorking With Values\n--------------------------------------------------------------------------------\n\n##### holdup.spread\n\n*alias: `holdup.spreadValues`*\n\nGiven a promise and a callback, calls the callback by applying the fulfilled\nvalue of the promise to the callback.\n\nFor example:\n\n```javascript\nvar a = holdup.fulfill(10),\n    b = holdup.fulfill(11),\n    c = holdup.all(a, b);\n\nholdup.spread(c, function(aValue, bValue) {\n  // aValue is 10\n  // bValue is 11\n});\n```\n\n\n##### holdup.spreadErrors\n\nGiven a promise and a callback, calls the callback by applying the rejected\nerror of the promise to the callback.\n\nFor example:\n\n```javascript\nvar a = holdup.reject(['nope', 'definitely not']),\n\nholdup.spreadErrors(a, function(firstError, secondError) {\n  // firstError is 'nope'\n  // secondError is 'definitely not'\n});\n```\n\n\n\nTiming Functions\n--------------------------------------------------------------------------------\n\n##### holdup.wait(milliseconds)\n\nGiven a time in milliseconds, returns a promise that calls its `then` callback\nafter that amount of time. The returned promise will never call any errback\nfunctions given to it.\n\nThe returned promise will pass along the given timeout interval to the `then`\ncallback as its first parameter.\n\n\n##### holdup.delay(promise, milliseconds)\n\nGiven a promise and a time in milliseconds, returns a promise that fulfills\nwhen the given promise fulfills or rejects when the first one rejects, but\nwaits the given time before fulfilling or rejecting.\n\n\n##### holdup.timeout(promise, milliseconds)\n\nGiven a promise and a time in milliseconds, returns a promise that fulfills if\nthe given promise fulfills before the time is up and rejects otherwise.\n\n\n\nIntegrating With Node-style Callback APIs\n--------------------------------------------------------------------------------\n\n##### holdup.napply(scope, nodeFn, args)\n\nGiven a scope, a Node-style async function, and an array of arguments, returns\na promise that fulfills if the given function completes successfully and\nrejects if it doesn't.\n\nThe returned promise will call its `then` callback with anything passed as the\n`data` parameter to the async function (if anything is in fact passed), and\nwill call its `then` errback with anything passed as the `err` param to the\nasync function.\n\n\n##### holdup.nfapply(nodeFn, args)\n\nA convenient, scopeless version of `napply`, for times when it's acceptable\nthat the scope of `napply` be `null`.\n\n\n##### holdup.ncall(scope, nodeFn, args...)\n\n*alias: `holdup.wrapFor`*\n\nGiven a scope, a Node-style async function, and optional arguments, returns a\npromise that fulfills if the given function completes successfully and rejects\nif it doesn't.\n\nThe returned promise will call its `then` callback with anything passed as the\n`data` parameter to the async function (if anything is in fact passed), and\nwill call its `then` errback with anything passed as the `err` param to the\nasync function.\n\n\n##### holdup.nfcall\n\n*alias: `holdup.wrap`*\n\nA convenient, scopeless version of `ncall`, for times when it's acceptable that\nthe scope of `ncall` be `null`.\n\n\n##### holdup.npost(obj, methodName, args)\n\nGiven an object, a method name corresponding to a Node-style async function,\nand an array of arguments, returns a promise that fulfills if the given method\ncompletes successfully and rejects if it doesn't.\n\nThe returned promise will call its `then` callback with anything passed as the\n`data` parameter to the async function (if anything is in fact passed), and\nwill call its `then` errback with anything passed as the `err` param to the\nasync function.\n\n\n##### holdup.ninvoke(obj, methodName, args...)\n\n*alias: `holdup.send`*\n\nGiven an object, a method name corresponding to a Node-style async function,\nand an optional argument list of parameters, returns a promise that fulfills if\nthe given method completes successfully and rejects if it doesn't.\n\nThe returned promise will call its `then` callback with anything passed as the\n`data` parameter to the async function (if anything is in fact passed), and\nwill call its `then` errback with anything passed as the `err` param to the\nasync function.\n\n\n##### holdup.nbind(nodeFn, scope, args...)\n\nGiven a Node-style async function, a scope, and an optional argument list of\nparameters, returns a promise-returning function bound to the scope and the\ngiven parameters.\n\nThe returned promise will call its `then` callback with anything passed as the\n`data` parameter to the async function (if anything is in fact passed), and\nwill call its `then` errback with anything passed as the `err` param to the\nasync function.\n\nFor example:\n\n```javascript\nvar readProust = holdup.bind(fs.readFile, fs, 'proust.txt', 'utf-8');\nreadProust().then(function(text) {\n  // do things with text\n});\n```\n\n\n##### holdup.nfbind(nodeFn, args...)\n\n*alias: `holdup.denodeify`*\n\nA convenient, scopeless version of nbind, for times when it's acceptable that\nthe scope of `nbind` be `null`.\n\n\n##### holdup.nodeify(promise, callback)\n\nGiven a promise and a Node-style callback, calls the callback with the correct\n`data` and `err` arguments when the promise fulfills or rejects.  Useful for\ncreating dual promise/callback APIs, or for using promises internally but\nexposing only a callback API.\n\n\n\nHandling Uncaught Errors\n--------------------------------------------------------------------------------\n\nThe Promises/A+ spec dictates that errors should never \"leak\" synchronously out\nof a promise: if you reject or throw an error, you'll never know unless you've\nattached an error handler (with `.then`, or the Holdup-specific `.error` or\n`.thrown` methods).\n\nSince often you'll want to take some action if an error occurs and is never\ncaught (for example, report it to your error logger, or gracefully restart your\nserver), Holdup provides events that fire when uncaught errors occur.\n\n##### holdup.on('error', fn)\n\nCalls `fn` if an uncaught rejection or thrown error occurs.\n\n\n##### holdup.on('thrown', fn)\n\nCalls `fn` if an uncaught thrown error occurs. Note that \"catching\" the error\nby handling it with an `onRejected` callback isn't enough: to prevent this from\nfiring, you must use a `.thrown` callback. Like `.thrown` and other\nthrown-error-specific code in Holdup, this is not compatible with other promise\nlibraries.\n\n\n##### holdup.off(type, fn)\n\nRemoves the given callback from listening to the type (`'error'` or `'thrown'`)\nof event.\n\n\n##### holdup.once(type, fn)\n\nCalls `holdup.on(type, fn)`, and then after the callback fires calls\n`holdup.off(type, fn)`.\n\n\n\nLicense\n================================================================================\n\nCopyright 2013-2014 Matt Baker. Licensed under the MIT License: see LICENSE.txt\nfor details.\n","maintainers":[{"name":"reissbaker","email":"matthew.reiss.baker@gmail.com"}],"time":{"modified":"2022-06-18T21:05:11.225Z","created":"2013-04-10T10:48:09.572Z","0.0.1":"2013-04-10T10:48:11.242Z","0.0.2":"2013-04-11T18:52:07.483Z","0.0.3":"2013-04-11T22:08:20.335Z","0.0.4":"2013-04-12T01:50:11.914Z","0.1.0":"2014-01-09T08:08:32.590Z","0.2.0":"2014-01-12T00:45:25.773Z","0.3.0":"2014-01-12T02:42:09.371Z","0.3.1":"2014-01-12T02:43:25.899Z","0.4.0":"2014-01-14T10:14:39.622Z","0.5.0":"2014-01-20T03:19:20.008Z","0.5.1":"2014-01-20T03:37:21.954Z","0.5.2":"2014-01-20T09:00:38.627Z","0.5.3":"2014-01-26T06:49:02.476Z","0.5.4":"2014-01-26T07:19:13.556Z","0.5.5":"2014-02-11T09:52:05.559Z","0.6.0":"2014-03-23T22:28:17.005Z"},"author":{"name":"Matt Baker","url":"twitter.com/reissbaker"},"repository":{"type":"git","url":"https://github.com/reissbaker/holdup.git"},"readmeFilename":"README.md","homepage":"https://github.com/reissbaker/holdup","keywords":["promise","promises","flow control","flow-control","callbacks"],"bugs":{"url":"https://github.com/reissbaker/holdup/issues"},"license":"MIT"}