{"_id":"async-lock","_rev":"3793306","name":"async-lock","description":"Lock on asynchronous code","dist-tags":{"latest":"1.4.1"},"maintainers":[{"name":"rogierschouten","email":""}],"time":{"modified":"2025-06-05T10:25:40.000Z","created":"2015-01-13T10:24:34.925Z","1.4.1":"2023-12-22T19:44:34.520Z","1.4.0":"2022-10-29T10:22:06.394Z","1.3.2":"2022-06-25T09:49:03.650Z","1.3.1":"2022-02-04T20:44:32.577Z","1.3.0":"2021-04-27T21:57:24.069Z","1.2.8":"2021-01-04T17:57:13.689Z","1.2.7":"2021-01-04T17:54:23.909Z","1.2.6":"2020-12-06T20:49:08.056Z","1.2.5":"2020-12-06T14:47:49.130Z","1.2.4":"2020-05-12T17:35:44.395Z","1.2.3":"2020-05-11T18:33:13.919Z","1.2.2":"2019-07-15T20:16:34.877Z","1.2.1":"2019-07-13T12:02:53.714Z","1.2.0":"2019-03-13T13:11:10.182Z","1.1.4":"2019-02-02T11:00:31.792Z","1.1.3":"2018-06-08T06:19:45.790Z","1.1.2":"2018-02-26T19:21:10.636Z","1.1.1":"2018-02-13T23:33:26.576Z","1.1.0":"2017-10-17T06:32:32.144Z","1.0.0":"2017-06-29T21:34:37.906Z","0.3.10":"2017-06-27T18:39:47.974Z","0.3.9":"2016-11-30T20:36:35.579Z","0.3.8":"2015-09-25T19:27:19.169Z","0.3.7":"2015-09-25T15:13:14.214Z","0.3.6":"2015-09-07T06:39:22.470Z","0.3.5":"2015-06-15T09:52:01.825Z","0.3.4":"2015-06-09T08:58:49.408Z","0.3.3":"2015-05-19T07:47:23.501Z","0.3.2":"2015-05-08T03:51:50.246Z","0.3.1":"2015-04-15T06:41:05.705Z","0.3.0":"2015-03-06T16:03:34.352Z","0.2.1":"2015-02-21T09:36:44.013Z","0.2.0":"2015-02-21T09:24:40.181Z","0.1.2":"2015-01-13T10:43:42.796Z","0.1.1":"2015-01-13T10:36:31.707Z","0.1.0":"2015-01-13T10:24:34.925Z"},"users":{},"author":{"name":"Rogier Schouten","email":"github@workingcode.ninja","url":"https://github.com/rogierschouten/"},"repository":{"type":"git","url":"git+https://github.com/rogierschouten/async-lock.git"},"versions":{"1.4.1":{"name":"async-lock","description":"Lock on asynchronous code","version":"1.4.1","author":{"name":"Rogier Schouten","email":"github@workingcode.ninja","url":"https://github.com/rogierschouten/"},"private":false,"homepage":"https://github.com/rogierschouten/async-lock","repository":{"type":"git","url":"git+https://github.com/rogierschouten/async-lock.git"},"bugs":{"url":"https://github.com/rogierschouten/async-lock/issues"},"license":"MIT","keywords":["lock","async","concurrency","critical","section","mutex"],"engines":{},"scripts":{"start":"grunt","test":"grunt test"},"devDependencies":{"bluebird":"^3.5.1","grunt":"^1.0.4","grunt-cli":"^1.2.0","grunt-contrib-clean":"^1.1.0","grunt-contrib-jshint":"^3.2.0","grunt-contrib-watch":"^1.1.0","grunt-env":"^1.0.1","grunt-mocha-test":"^0.13.3","load-grunt-tasks":"^4.0.0","lodash":"^4.17.20","mocha":"^10.2.0","q":"^1.5.1","should":"^13.2.1"},"_id":"async-lock@1.4.1","contributors":[{"name":"rain1017","url":"https://github.com/rain1017"},{"name":"JonathanPicques","url":"https://github.com/JonathanPicques"},{"name":"Rogier Schouten","url":"https://github.com/rogierschouten"},{"name":"erikvold","url":"https://github.com/erikvold"},{"name":"Christian Passet","url":"https://github.com/thePunIssuer"},{"name":"Tanguy Krotoff","url":"https://github.com/tkrotoff"},{"name":"jtyers","url":"https://github.com/jtyers"},{"name":"Paul Roub","url":"https://github.com/paulroub"},{"name":"Geoff Whatley","url":"https://github.com/meatwallace"},{"name":"Patryk L.","url":"https://github.com/LosTigeros"},{"name":"Julian Saunderson","url":"https://github.com/bitrivers"},{"name":"Philipp Keck","url":"https://github.com/Philipp91"},{"name":"abozaralizadeh","url":"https://github.com/abozaralizadeh"},{"name":"ThePiz","url":"https://github.com/ThePiz"},{"name":"Luke Stead","url":"https://github.com/luke-stead-sonocent"},{"name":"Simeon Borko","url":"https://github.com/simeonborko"},{"name":"Tim Schmidt","url":"https://github.com/taschmidt"},{"name":"Motty Milshtein","url":"https://github.com/mottymilshtein"}],"gitHead":"e4152de0efc66179b3675e177bc738beaecf6b38","_nodeVersion":"20.8.0","_npmVersion":"10.2.0","dist":{"shasum":"56b8718915a9b68b10fce2f2a9a3dddf765ef53f","size":6362,"noattachment":false,"key":"/async-lock/-/async-lock-1.4.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-lock/download/async-lock-1.4.1.tgz"},"_npmUser":{"name":"rogierschouten","email":"rogier.schouten@gmail.com"},"directories":{},"maintainers":[{"name":"rogierschouten","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-lock_1.4.1_1703274274377_0.9043478411585963"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-12-22T19:44:34.520Z","publish_time":1703274274520,"_source_registry_name":"default","_cnpm_publish_time":1703274274520},"1.4.0":{"name":"async-lock","description":"Lock on asynchronous code","version":"1.4.0","author":{"name":"Rogier Schouten","email":"github@workingcode.ninja","url":"https://github.com/rogierschouten/"},"private":false,"homepage":"https://github.com/rogierschouten/async-lock","repository":{"type":"git","url":"git+https://github.com/rogierschouten/async-lock.git"},"bugs":{"url":"https://github.com/rogierschouten/async-lock/issues"},"license":"MIT","keywords":["lock","async","concurrency","critical","section","mutex"],"engines":{},"scripts":{"start":"grunt","test":"grunt test"},"devDependencies":{"bluebird":"^3.5.1","grunt":"^1.0.4","grunt-cli":"^1.2.0","grunt-contrib-clean":"^1.1.0","grunt-contrib-jshint":"^1.1.0","grunt-contrib-watch":"^1.1.0","grunt-env":"^1.0.1","grunt-mocha-test":"^0.13.3","load-grunt-tasks":"^4.0.0","lodash":"^4.17.20","mocha":"^7.1.2","q":"^1.5.1","should":"^13.2.1"},"contributors":[{"name":"rain1017","url":"https://github.com/rain1017"},{"name":"JonathanPicques","url":"https://github.com/JonathanPicques"},{"name":"Rogier Schouten","url":"https://github.com/rogierschouten"},{"name":"erikvold","url":"https://github.com/erikvold"},{"name":"Christian Passet","url":"https://github.com/thePunIssuer"},{"name":"Tanguy Krotoff","url":"https://github.com/tkrotoff"},{"name":"jtyers","url":"https://github.com/jtyers"},{"name":"Paul Roub","url":"https://github.com/paulroub"},{"name":"Geoff Whatley","url":"https://github.com/meatwallace"},{"name":"Patryk L.","url":"https://github.com/LosTigeros"},{"name":"Julian Saunderson","url":"https://github.com/bitrivers"},{"name":"Philipp Keck","url":"https://github.com/Philipp91"},{"name":"abozaralizadeh","url":"https://github.com/abozaralizadeh"},{"name":"ThePiz","url":"https://github.com/ThePiz"},{"name":"Luke Stead","url":"https://github.com/luke-stead-sonocent"},{"name":"Simeon Borko","url":"https://github.com/simeonborko"},{"name":"Tim Schmidt","url":"https://github.com/taschmidt"},{"name":"Motty Milshtein","url":"https://github.com/mottymilshtein"}],"gitHead":"cf98f506f916106d037875b156b3232c0815a261","_id":"async-lock@1.4.0","_nodeVersion":"10.19.0","_npmVersion":"6.14.4","dist":{"shasum":"c8b6630eff68fbbdd8a5b6eb763dac3bfbb8bf02","size":6379,"noattachment":false,"key":"/async-lock/-/async-lock-1.4.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-lock/download/async-lock-1.4.0.tgz"},"_npmUser":{"name":"rogierschouten","email":"rogier.schouten@gmail.com"},"directories":{},"maintainers":[{"name":"rogierschouten","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-lock_1.4.0_1667038926223_0.6719234690687608"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-10-29T10:22:11.214Z","publish_time":1667038926394,"_cnpm_publish_time":1667038926394},"1.3.2":{"name":"async-lock","description":"Lock on asynchronous code","version":"1.3.2","author":{"name":"Rogier Schouten","email":"github@workingcode.ninja","url":"https://github.com/rogierschouten/"},"private":false,"homepage":"https://github.com/rogierschouten/async-lock","repository":{"type":"git","url":"git+https://github.com/rogierschouten/async-lock.git"},"bugs":{"url":"https://github.com/rogierschouten/async-lock/issues"},"license":"MIT","keywords":["lock","async","concurrency","critical","section","mutex"],"engines":{},"scripts":{"start":"grunt","test":"grunt test"},"devDependencies":{"bluebird":"^3.5.1","grunt":"^1.0.4","grunt-cli":"^1.2.0","grunt-contrib-clean":"^1.1.0","grunt-contrib-jshint":"^1.1.0","grunt-contrib-watch":"^1.1.0","grunt-env":"^1.0.1","grunt-mocha-test":"^0.13.3","load-grunt-tasks":"^4.0.0","lodash":"^4.17.20","mocha":"^7.1.2","q":"^1.5.1","should":"^13.2.1"},"contributors":[{"name":"rain1017","url":"https://github.com/rain1017"},{"name":"JonathanPicques","url":"https://github.com/JonathanPicques"},{"name":"Rogier Schouten","url":"https://github.com/rogierschouten"},{"name":"erikvold","url":"https://github.com/erikvold"},{"name":"Christian Passet","url":"https://github.com/thePunIssuer"},{"name":"Tanguy Krotoff","url":"https://github.com/tkrotoff"},{"name":"jtyers","url":"https://github.com/jtyers"},{"name":"Paul Roub","url":"https://github.com/paulroub"},{"name":"Geoff Whatley","url":"https://github.com/meatwallace"},{"name":"Patryk L.","url":"https://github.com/LosTigeros"},{"name":"Julian Saunderson","url":"https://github.com/bitrivers"},{"name":"Philipp Keck","url":"https://github.com/Philipp91"},{"name":"abozaralizadeh","url":"https://github.com/abozaralizadeh"},{"name":"ThePiz","url":"https://github.com/ThePiz"},{"name":"Luke Stead","url":"https://github.com/luke-stead-sonocent"},{"name":"Simeon Borko","url":"https://github.com/simeonborko"},{"name":"Tim Schmidt","url":"https://github.com/taschmidt"}],"gitHead":"9df298380146901029d2a744aeacf684496c98a1","_id":"async-lock@1.3.2","_nodeVersion":"18.3.0","_npmVersion":"8.5.5","dist":{"shasum":"56668613f91c1c55432b4db73e65c9ced664e789","size":6202,"noattachment":false,"key":"/async-lock/-/async-lock-1.3.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-lock/download/async-lock-1.3.2.tgz"},"_npmUser":{"name":"rogierschouten","email":"rogier.schouten@gmail.com"},"directories":{},"maintainers":[{"name":"rogierschouten","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-lock_1.3.2_1656150543495_0.3415165176879371"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-06-25T09:49:10.854Z","publish_time":1656150543650,"_cnpm_publish_time":1656150543650},"1.3.1":{"name":"async-lock","description":"Lock on asynchronous code","version":"1.3.1","author":{"name":"Rogier Schouten","email":"github@workingcode.ninja","url":"https://github.com/rogierschouten/"},"private":false,"homepage":"https://github.com/rogierschouten/async-lock","repository":{"type":"git","url":"git+https://github.com/rogierschouten/async-lock.git"},"bugs":{"url":"https://github.com/rogierschouten/async-lock/issues"},"license":"MIT","keywords":["lock","async","concurrency","critical","section","mutex"],"engines":{},"scripts":{"start":"grunt","test":"grunt test"},"devDependencies":{"bluebird":"^3.5.1","grunt":"^1.0.4","grunt-cli":"^1.2.0","grunt-contrib-clean":"^1.1.0","grunt-contrib-jshint":"^1.1.0","grunt-contrib-watch":"^1.1.0","grunt-env":"^1.0.1","grunt-mocha-test":"^0.13.3","load-grunt-tasks":"^4.0.0","lodash":"^4.17.20","mocha":"^7.1.2","q":"^1.5.1","should":"^13.2.1"},"contributors":[{"name":"rain1017","url":"https://github.com/rain1017"},{"name":"JonathanPicques","url":"https://github.com/JonathanPicques"},{"name":"Rogier Schouten","url":"https://github.com/rogierschouten"},{"name":"erikvold","url":"https://github.com/erikvold"},{"name":"Christian Passet","url":"https://github.com/thePunIssuer"},{"name":"Tanguy Krotoff","url":"https://github.com/tkrotoff"},{"name":"jtyers","url":"https://github.com/jtyers"},{"name":"Paul Roub","url":"https://github.com/paulroub"},{"name":"Geoff Whatley","url":"https://github.com/meatwallace"},{"name":"Patryk L.","url":"https://github.com/LosTigeros"},{"name":"Julian Saunderson","url":"https://github.com/bitrivers"},{"name":"Philipp Keck","url":"https://github.com/Philipp91"},{"name":"abozaralizadeh","url":"https://github.com/abozaralizadeh"},{"name":"ThePiz","url":"https://github.com/ThePiz"},{"name":"Luke Stead","url":"https://github.com/luke-stead-sonocent"}],"gitHead":"b6f470b87f29f265f974ffcfc5589417141d80bd","_id":"async-lock@1.3.1","_nodeVersion":"17.3.0","_npmVersion":"8.4.1","dist":{"shasum":"f2301c200600cde97acc386453b7126fa8aced3c","size":5966,"noattachment":false,"key":"/async-lock/-/async-lock-1.3.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-lock/download/async-lock-1.3.1.tgz"},"_npmUser":{"name":"rogierschouten","email":"rogier.schouten@gmail.com"},"directories":{},"maintainers":[{"name":"rogierschouten","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-lock_1.3.1_1644007472409_0.7414385244281088"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-02-04T20:44:38.704Z","publish_time":1644007472577,"_cnpm_publish_time":1644007472577},"1.3.0":{"name":"async-lock","description":"Lock on asynchronous code","version":"1.3.0","author":{"name":"Rogier Schouten","email":"github@workingcode.ninja","url":"https://github.com/rogierschouten/"},"private":false,"homepage":"https://github.com/rogierschouten/async-lock","repository":{"type":"git","url":"git+https://github.com/rogierschouten/async-lock.git"},"bugs":{"url":"https://github.com/rogierschouten/async-lock/issues"},"license":"MIT","keywords":["lock","async","concurrency","critical","section","mutex"],"engines":{},"scripts":{"start":"grunt","test":"grunt test"},"devDependencies":{"bluebird":"^3.5.1","grunt":"^1.0.4","grunt-cli":"^1.2.0","grunt-contrib-clean":"^1.1.0","grunt-contrib-jshint":"^1.1.0","grunt-contrib-watch":"^1.1.0","grunt-env":"^1.0.1","grunt-mocha-test":"^0.13.3","load-grunt-tasks":"^4.0.0","lodash":"^4.17.20","mocha":"^7.1.2","q":"^1.5.1","should":"^13.2.1"},"contributors":[{"name":"rain1017","url":"https://github.com/rain1017"},{"name":"JonathanPicques","url":"https://github.com/JonathanPicques"},{"name":"Rogier Schouten","url":"https://github.com/rogierschouten"},{"name":"erikvold","url":"https://github.com/erikvold"},{"name":"Christian Passet","url":"https://github.com/thePunIssuer"},{"name":"Tanguy Krotoff","url":"https://github.com/tkrotoff"},{"name":"jtyers","url":"https://github.com/jtyers"},{"name":"Paul Roub","url":"https://github.com/paulroub"},{"name":"Geoff Whatley","url":"https://github.com/meatwallace"},{"name":"Patryk L.","url":"https://github.com/LosTigeros"},{"name":"Julian Saunderson","url":"https://github.com/bitrivers"},{"name":"Philipp Keck","url":"https://github.com/Philipp91"}],"gitHead":"a726dc1014991ab3b6804e46b8eaaf0862d714b0","_id":"async-lock@1.3.0","_nodeVersion":"15.14.0","_npmVersion":"7.8.0","dist":{"shasum":"0fba111bea8b9693020857eba4f9adca173df3e5","size":5909,"noattachment":false,"key":"/async-lock/-/async-lock-1.3.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-lock/download/async-lock-1.3.0.tgz"},"_npmUser":{"name":"rogierschouten","email":"rogier.schouten@gmail.com"},"directories":{},"maintainers":[{"name":"rogierschouten","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-lock_1.3.0_1619560643624_0.9021000741085963"},"_hasShrinkwrap":false,"publish_time":1619560644069,"_cnpm_publish_time":1619560644069,"_cnpmcore_publish_time":"2021-12-16T15:36:36.772Z"},"1.2.8":{"name":"async-lock","description":"Lock on asynchronous code","version":"1.2.8","author":{"name":"Rogier Schouten","email":"github@workingcode.ninja","url":"https://github.com/rogierschouten/"},"private":false,"homepage":"https://github.com/rogierschouten/async-lock","repository":{"type":"git","url":"git+https://github.com/rogierschouten/async-lock.git"},"bugs":{"url":"https://github.com/rogierschouten/async-lock/issues"},"license":"MIT","keywords":["lock","async","concurrency","critical","section","mutex"],"engines":{},"scripts":{"start":"grunt","test":"grunt test"},"devDependencies":{"bluebird":"^3.5.1","grunt":"^1.0.4","grunt-cli":"^1.2.0","grunt-contrib-clean":"^1.1.0","grunt-contrib-jshint":"^1.1.0","grunt-contrib-watch":"^1.1.0","grunt-env":"^1.0.1","grunt-mocha-test":"^0.13.3","load-grunt-tasks":"^4.0.0","lodash":"^4.17.20","mocha":"^7.1.2","q":"^1.5.1","should":"^13.2.1"},"contributors":[{"name":"rain1017","url":"https://github.com/rain1017"},{"name":"JonathanPicques","url":"https://github.com/JonathanPicques"},{"name":"Rogier Schouten","url":"https://github.com/rogierschouten"},{"name":"erikvold","url":"https://github.com/erikvold"},{"name":"Christian Passet","url":"https://github.com/thePunIssuer"},{"name":"Tanguy Krotoff","url":"https://github.com/tkrotoff"},{"name":"jtyers","url":"https://github.com/jtyers"},{"name":"Paul Roub","url":"https://github.com/paulroub"},{"name":"Geoff Whatley","url":"https://github.com/meatwallace"},{"name":"Patryk L.","url":"https://github.com/LosTigeros"},{"name":"Julian Saunderson","url":"https://github.com/bitrivers"},{"name":"Philipp Keck","url":"https://github.com/Philipp91"}],"gitHead":"47ca94291cfb2afb3ee90d7d075cabdc8c8b1264","_id":"async-lock@1.2.8","_nodeVersion":"15.5.0","_npmVersion":"6.14.10","_npmUser":{"name":"rogierschouten","email":"rogier.schouten@gmail.com"},"maintainers":[{"name":"rogierschouten","email":""}],"dist":{"shasum":"7b02bdfa2de603c0713acecd11184cf97bbc7c4c","size":5758,"noattachment":false,"key":"/async-lock/-/async-lock-1.2.8.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-lock/download/async-lock-1.2.8.tgz"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-lock_1.2.8_1609783033567_0.37688870942736874"},"_hasShrinkwrap":false,"publish_time":1609783033689,"_cnpm_publish_time":1609783033689,"_cnpmcore_publish_time":"2021-12-16T15:36:37.011Z"},"1.2.7":{"name":"async-lock","description":"Lock on asynchronous code","version":"1.2.7","author":{"name":"Rogier Schouten","email":"github@workingcode.ninja","url":"https://github.com/rogierschouten/"},"private":false,"homepage":"https://github.com/rogierschouten/async-lock","repository":{"type":"git","url":"git+https://github.com/rogierschouten/async-lock.git"},"bugs":{"url":"https://github.com/rogierschouten/async-lock/issues"},"license":"MIT","keywords":["lock","async","concurrency","critical","section","mutex"],"engines":{},"scripts":{"start":"grunt","test":"grunt test"},"devDependencies":{"bluebird":"^3.5.1","grunt":"^1.0.4","grunt-cli":"^1.2.0","grunt-contrib-clean":"^1.1.0","grunt-contrib-jshint":"^1.1.0","grunt-contrib-watch":"^1.1.0","grunt-env":"^1.0.1","grunt-mocha-test":"^0.13.3","load-grunt-tasks":"^4.0.0","lodash":"^4.17.20","mocha":"^7.1.2","q":"^1.5.1","should":"^13.2.1"},"contributors":[{"name":"rain1017","url":"https://github.com/rain1017"},{"name":"JonathanPicques","url":"https://github.com/JonathanPicques"},{"name":"Rogier Schouten","url":"https://github.com/rogierschouten"},{"name":"erikvold","url":"https://github.com/erikvold"},{"name":"Christian Passet","url":"https://github.com/thePunIssuer"},{"name":"Tanguy Krotoff","url":"https://github.com/tkrotoff"},{"name":"jtyers","url":"https://github.com/jtyers"},{"name":"Paul Roub","url":"https://github.com/paulroub"},{"name":"Geoff Whatley","url":"https://github.com/meatwallace"},{"name":"Patryk L.","url":"https://github.com/LosTigeros"},{"name":"Julian Saunderson","url":"https://github.com/bitrivers"},{"name":"Philipp Keck","url":"https://github.com/Philipp91"}],"gitHead":"89fa310cdc95773cb241a19cb8c354afc467af57","_id":"async-lock@1.2.7","_nodeVersion":"15.5.0","_npmVersion":"6.14.10","_npmUser":{"name":"rogierschouten","email":"rogier.schouten@gmail.com"},"maintainers":[{"name":"rogierschouten","email":""}],"dist":{"shasum":"70db1aaaf1bd37d40aebc3be90f82be37e7df07a","size":5609,"noattachment":false,"key":"/async-lock/-/async-lock-1.2.7.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-lock/download/async-lock-1.2.7.tgz"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-lock_1.2.7_1609782863772_0.01547742401614638"},"_hasShrinkwrap":false,"publish_time":1609782863909,"_cnpm_publish_time":1609782863909,"_cnpmcore_publish_time":"2021-12-16T15:36:37.221Z"},"1.2.6":{"name":"async-lock","description":"Lock on asynchronous code","version":"1.2.6","author":{"name":"Rogier Schouten","email":"github@workingcode.ninja","url":"https://github.com/rogierschouten/"},"private":false,"homepage":"https://github.com/rogierschouten/async-lock","repository":{"type":"git","url":"git+https://github.com/rogierschouten/async-lock.git"},"bugs":{"url":"https://github.com/rogierschouten/async-lock/issues"},"license":"MIT","keywords":["lock","async","concurrency","critical","section","mutex"],"engines":{},"scripts":{"start":"grunt","test":"grunt test"},"devDependencies":{"bluebird":"^3.5.1","grunt":"^1.0.4","grunt-cli":"^1.2.0","grunt-contrib-clean":"^1.1.0","grunt-contrib-jshint":"^1.1.0","grunt-contrib-watch":"^1.1.0","grunt-env":"^1.0.1","grunt-mocha-test":"^0.13.3","load-grunt-tasks":"^4.0.0","lodash":"^4.17.20","mocha":"^7.1.2","q":"^1.5.1","should":"^13.2.1"},"contributors":[{"name":"rain1017","url":"https://github.com/rain1017"},{"name":"JonathanPicques","url":"https://github.com/JonathanPicques"},{"name":"Rogier Schouten","url":"https://github.com/rogierschouten"},{"name":"erikvold","url":"https://github.com/erikvold"},{"name":"Christian Passet","url":"https://github.com/thePunIssuer"},{"name":"Tanguy Krotoff","url":"https://github.com/tkrotoff"},{"name":"jtyers","url":"https://github.com/jtyers"},{"name":"Paul Roub","url":"https://github.com/paulroub"},{"name":"Geoff Whatley","url":"https://github.com/meatwallace"},{"name":"Patryk L.","url":"https://github.com/LosTigeros"},{"name":"Julian Saunderson","url":"https://github.com/bitrivers"}],"gitHead":"cf8e80b436c1a476ad60f3781cc0f147457da03c","_id":"async-lock@1.2.6","_nodeVersion":"15.3.0","_npmVersion":"6.14.8","_npmUser":{"name":"rogierschouten","email":"rogier.schouten@gmail.com"},"maintainers":[{"name":"rogierschouten","email":""}],"dist":{"shasum":"c83c7a2569d1745306f4a5ae03680310e5f65e67","size":5572,"noattachment":false,"key":"/async-lock/-/async-lock-1.2.6.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-lock/download/async-lock-1.2.6.tgz"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-lock_1.2.6_1607287747860_0.5500221515143233"},"_hasShrinkwrap":false,"publish_time":1607287748056,"_cnpm_publish_time":1607287748056,"_cnpmcore_publish_time":"2021-12-16T15:36:37.486Z"},"1.2.5":{"name":"async-lock","description":"Lock on asynchronous code","version":"1.2.5","author":{"name":"Rogier Schouten","email":"github@workingcode.ninja","url":"https://github.com/rogierschouten/"},"private":false,"homepage":"https://github.com/rogierschouten/async-lock","repository":{"type":"git","url":"git+https://github.com/rogierschouten/async-lock.git"},"bugs":{"url":"https://github.com/rogierschouten/async-lock/issues"},"license":"MIT","keywords":["lock","async","concurrency","critical","section","mutex"],"engines":{},"scripts":{"start":"grunt","test":"grunt test"},"devDependencies":{"bluebird":"^3.5.1","grunt":"^1.0.4","grunt-cli":"^1.2.0","grunt-contrib-clean":"^1.1.0","grunt-contrib-jshint":"^1.1.0","grunt-contrib-watch":"^1.1.0","grunt-env":"^1.0.1","grunt-mocha-test":"^0.13.3","load-grunt-tasks":"^4.0.0","lodash":"^4.17.20","mocha":"^7.1.2","q":"^1.5.1","should":"^13.2.1"},"contributors":[{"name":"rain1017","url":"https://github.com/rain1017"},{"name":"JonathanPicques","url":"https://github.com/JonathanPicques"},{"name":"Rogier Schouten","url":"https://github.com/rogierschouten"},{"name":"erikvold","url":"https://github.com/erikvold"},{"name":"Christian Passet","url":"https://github.com/thePunIssuer"},{"name":"Tanguy Krotoff","url":"https://github.com/tkrotoff"},{"name":"jtyers","url":"https://github.com/jtyers"},{"name":"Paul Roub","url":"https://github.com/paulroub"},{"name":"Geoff Whatley","url":"https://github.com/meatwallace"},{"name":"Patryk L.","url":"https://github.com/LosTigeros"},{"name":"Julian Saunderson","url":"https://github.com/bitrivers"}],"gitHead":"ff0609440a0b4a70b2af8cf514364f00ddcbd451","_id":"async-lock@1.2.5","_nodeVersion":"15.3.0","_npmVersion":"6.14.8","_npmUser":{"name":"rogierschouten","email":"rogier.schouten@gmail.com"},"maintainers":[{"name":"rogierschouten","email":""}],"dist":{"shasum":"15ee353175116ea1e0214f4771b31f2edaee0692","size":5528,"noattachment":false,"key":"/async-lock/-/async-lock-1.2.5.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-lock/download/async-lock-1.2.5.tgz"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-lock_1.2.5_1607266068980_0.3146842749583312"},"_hasShrinkwrap":false,"publish_time":1607266069130,"_cnpm_publish_time":1607266069130,"_cnpmcore_publish_time":"2021-12-16T15:36:37.700Z"},"1.2.4":{"name":"async-lock","description":"Lock on asynchronous code","version":"1.2.4","author":{"name":"Rogier Schouten","email":"github@workingcode.ninja","url":"https://github.com/rogierschouten/"},"private":false,"homepage":"https://github.com/rogierschouten/async-lock","repository":{"type":"git","url":"git+https://github.com/rogierschouten/async-lock.git"},"bugs":{"url":"https://github.com/rogierschouten/async-lock/issues"},"license":"MIT","keywords":["lock","async","concurrency","critical","section","mutex"],"engines":{},"scripts":{"start":"grunt","test":"grunt test"},"devDependencies":{"bluebird":"^3.5.1","grunt":"^1.0.4","grunt-cli":"^1.2.0","grunt-contrib-clean":"^1.1.0","grunt-contrib-jshint":"^1.1.0","grunt-contrib-watch":"^1.1.0","grunt-env":"^1.0.1","grunt-mocha-test":"^0.13.3","load-grunt-tasks":"^4.0.0","lodash":"^4.17.15","mocha":"^7.1.2","q":"^1.5.1","should":"^13.2.1"},"contributors":[{"name":"rain1017","url":"https://github.com/rain1017"},{"name":"JonathanPicques","url":"https://github.com/JonathanPicques"},{"name":"Rogier Schouten","url":"https://github.com/rogierschouten"},{"name":"erikvold","url":"https://github.com/erikvold"},{"name":"Christian Passet","url":"https://github.com/thePunIssuer"},{"name":"Tanguy Krotoff","url":"https://github.com/tkrotoff"},{"name":"jtyers","url":"https://github.com/jtyers"},{"name":"Paul Roub","url":"https://github.com/paulroub"},{"name":"Geoff Whatley","url":"https://github.com/meatwallace"},{"name":"Patryk L.","url":"https://github.com/LosTigeros"},{"name":"Julian Saunderson","url":"https://github.com/bitrivers"}],"gitHead":"78cb0c2441650d7bdc148548f99542ccc9c93fd7","_id":"async-lock@1.2.4","_nodeVersion":"14.2.0","_npmVersion":"6.14.4","_npmUser":{"name":"rogierschouten","email":"rogier.schouten@gmail.com"},"maintainers":[{"name":"rogierschouten","email":""}],"dist":{"shasum":"80d0d612383045dd0c30eb5aad08510c1397cb91","size":5470,"noattachment":false,"key":"/async-lock/-/async-lock-1.2.4.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-lock/download/async-lock-1.2.4.tgz"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-lock_1.2.4_1589304944289_0.21466036912934783"},"_hasShrinkwrap":false,"publish_time":1589304944395,"_cnpm_publish_time":1589304944395,"_cnpmcore_publish_time":"2021-12-16T15:36:37.874Z"},"1.2.3":{"name":"async-lock","description":"Lock on asynchronous code","version":"1.2.3","author":{"name":"Rogier Schouten","email":"github@workingcode.ninja","url":"https://github.com/rogierschouten/"},"private":false,"homepage":"https://github.com/rogierschouten/async-lock","repository":{"type":"git","url":"git+https://github.com/rogierschouten/async-lock.git"},"bugs":{"url":"https://github.com/rogierschouten/async-lock/issues"},"license":"MIT","keywords":["lock","async","concurrency","critical","section","mutex"],"engines":{},"scripts":{"start":"grunt","test":"grunt test"},"devDependencies":{"bluebird":"^3.5.1","grunt":"^1.0.4","grunt-cli":"^1.2.0","grunt-contrib-clean":"^1.1.0","grunt-contrib-jshint":"^1.1.0","grunt-contrib-watch":"^1.1.0","grunt-env":"^1.0.1","grunt-mocha-test":"^0.13.3","load-grunt-tasks":"^4.0.0","lodash":"^4.17.15","mocha":"^7.1.2","q":"^1.5.1","should":"^13.2.1"},"contributors":[{"name":"rain1017","url":"https://github.com/rain1017"},{"name":"JonathanPicques","url":"https://github.com/JonathanPicques"},{"name":"Rogier Schouten","url":"https://github.com/rogierschouten"},{"name":"erikvold","url":"https://github.com/erikvold"},{"name":"Christian Passet","url":"https://github.com/thePunIssuer"},{"name":"Tanguy Krotoff","url":"https://github.com/tkrotoff"},{"name":"jtyers","url":"https://github.com/jtyers"},{"name":"Paul Roub","url":"https://github.com/paulroub"},{"name":"Geoff Whatley","url":"https://github.com/meatwallace"},{"name":"Patryk L.","url":"https://github.com/LosTigeros"},{"name":"Julian Saunderson","url":"https://github.com/bitrivers"}],"gitHead":"8b84925050b32dad3037f1fc34137b04451c0089","_id":"async-lock@1.2.3","_nodeVersion":"14.2.0","_npmVersion":"6.14.4","_npmUser":{"name":"rogierschouten","email":"rogier.schouten@gmail.com"},"maintainers":[{"name":"rogierschouten","email":""}],"dist":{"shasum":"0d0852d48c150d1be252faf9ca82057333272332","size":5661,"noattachment":false,"key":"/async-lock/-/async-lock-1.2.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-lock/download/async-lock-1.2.3.tgz"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-lock_1.2.3_1589221993725_0.907401774358884"},"_hasShrinkwrap":false,"publish_time":1589221993919,"_cnpm_publish_time":1589221993919,"_cnpmcore_publish_time":"2021-12-16T15:36:38.084Z"},"1.2.2":{"name":"async-lock","description":"Lock on asynchronous code","version":"1.2.2","author":{"name":"Rogier Schouten","email":"github@workingcode.ninja","url":"https://github.com/rogierschouten/"},"private":false,"homepage":"https://github.com/rogierschouten/async-lock","repository":{"type":"git","url":"git+https://github.com/rogierschouten/async-lock.git"},"bugs":{"url":"https://github.com/rogierschouten/async-lock/issues"},"license":"MIT","keywords":["lock","async","concurrency","critical","section","mutex"],"engines":{},"scripts":{"start":"grunt","test":"grunt test"},"devDependencies":{"bluebird":"^3.5.1","grunt":"^1.0.4","grunt-cli":"^1.2.0","grunt-contrib-clean":"^1.1.0","grunt-contrib-jshint":"^1.1.0","grunt-contrib-watch":"^1.1.0","grunt-env":"^0.4.4","grunt-mocha-test":"^0.13.3","load-grunt-tasks":"^4.0.0","lodash":"^4.17.11","mocha":"^5.2.0","q":"^1.5.1","should":"^13.2.1"},"contributors":[{"name":"rain1017","url":"https://github.com/rain1017"},{"name":"JonathanPicques","url":"https://github.com/JonathanPicques"},{"name":"Rogier Schouten","url":"https://github.com/rogierschouten"},{"name":"erikvold","url":"https://github.com/erikvold"},{"name":"Christian Passet","url":"https://github.com/thePunIssuer"},{"name":"Tanguy Krotoff","url":"https://github.com/tkrotoff"},{"name":"jtyers","url":"https://github.com/jtyers"},{"name":"Paul Roub","url":"https://github.com/paulroub"},{"name":"Geoff Whatley","url":"https://github.com/meatwallace"},{"name":"Patryk L.","url":"https://github.com/LosTigeros"}],"gitHead":"e1619df208e01062976e243edf1db89ddb9e2e2c","_id":"async-lock@1.2.2","_nodeVersion":"11.15.0","_npmVersion":"6.10.1","_npmUser":{"name":"rogierschouten","email":"rogier.schouten@gmail.com"},"maintainers":[{"name":"rogierschouten","email":""}],"dist":{"shasum":"480bd51e4b7ffd4debbd4973763718ec9acb9a9e","size":5370,"noattachment":false,"key":"/async-lock/-/async-lock-1.2.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-lock/download/async-lock-1.2.2.tgz"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-lock_1.2.2_1563221794720_0.5902613887248829"},"_hasShrinkwrap":false,"publish_time":1563221794877,"_cnpm_publish_time":1563221794877,"_cnpmcore_publish_time":"2021-12-16T15:36:38.304Z"},"1.2.1":{"name":"async-lock","description":"Lock on asynchronous code","version":"1.2.1","author":{"name":"Rogier Schouten","email":"github@workingcode.ninja","url":"https://github.com/rogierschouten/"},"private":false,"homepage":"https://github.com/rogierschouten/async-lock","repository":{"type":"git","url":"git+https://github.com/rogierschouten/async-lock.git"},"bugs":{"url":"https://github.com/rogierschouten/async-lock/issues"},"license":"MIT","keywords":["lock","async","concurrency","critical","section","mutex"],"engines":{},"scripts":{"start":"grunt","test":"grunt test"},"devDependencies":{"bluebird":"^3.5.1","grunt":"^1.0.4","grunt-cli":"^1.2.0","grunt-contrib-clean":"^1.1.0","grunt-contrib-jshint":"^1.1.0","grunt-contrib-watch":"^1.1.0","grunt-mocha-test":"^0.13.3","load-grunt-tasks":"^4.0.0","lodash":"^4.17.11","mocha":"^5.2.0","q":"^1.5.1","should":"^13.2.1"},"dependencies":{"grunt-env":"^0.4.4"},"contributors":[{"name":"rain1017","url":"https://github.com/rain1017"},{"name":"JonathanPicques","url":"https://github.com/JonathanPicques"},{"name":"Rogier Schouten","url":"https://github.com/rogierschouten"},{"name":"erikvold","url":"https://github.com/erikvold"},{"name":"Christian Passet","url":"https://github.com/thePunIssuer"},{"name":"Tanguy Krotoff","url":"https://github.com/tkrotoff"},{"name":"jtyers","url":"https://github.com/jtyers"},{"name":"Paul Roub","url":"https://github.com/paulroub"},{"name":"Geoff Whatley","url":"https://github.com/meatwallace"}],"gitHead":"9d9d5457e2f01b1a531827cb0579d5b01906c115","_id":"async-lock@1.2.1","_nodeVersion":"11.15.0","_npmVersion":"6.10.1","_npmUser":{"name":"rogierschouten","email":"rogier.schouten@gmail.com"},"maintainers":[{"name":"rogierschouten","email":""}],"dist":{"shasum":"1bdfbb2f538aede775188877abd76919d7054bd6","size":5335,"noattachment":false,"key":"/async-lock/-/async-lock-1.2.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-lock/download/async-lock-1.2.1.tgz"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-lock_1.2.1_1563019373603_0.5391389007382441"},"_hasShrinkwrap":false,"publish_time":1563019373714,"_cnpm_publish_time":1563019373714,"_cnpmcore_publish_time":"2021-12-16T15:36:38.520Z"},"1.2.0":{"name":"async-lock","description":"Lock on asynchronous code","version":"1.2.0","author":{"name":"Rogier Schouten","email":"github@workingcode.ninja","url":"https://github.com/rogierschouten/"},"private":false,"homepage":"https://github.com/rogierschouten/async-lock","repository":{"type":"git","url":"git+https://github.com/rogierschouten/async-lock.git"},"bugs":{"url":"https://github.com/rogierschouten/async-lock/issues"},"license":"MIT","keywords":["lock","async","concurrency","critical","section","mutex"],"engines":{},"scripts":{"start":"grunt","test":"grunt test","postinstall":""},"devDependencies":{"bluebird":"^3.5.1","grunt":"^1.0.3","grunt-cli":"^1.2.0","grunt-contrib-clean":"^1.1.0","grunt-contrib-jshint":"^1.1.0","grunt-contrib-watch":"^1.1.0","grunt-env":"^0.4.4","grunt-mocha-test":"^0.13.3","load-grunt-tasks":"^4.0.0","lodash":"^4.17.10","mocha":"^5.2.0","q":"^1.5.1","should":"^13.2.1"},"contributors":[{"name":"rain1017","url":"https://github.com/rain1017"},{"name":"JonathanPicques","url":"https://github.com/JonathanPicques"},{"name":"Rogier Schouten","url":"https://github.com/rogierschouten"},{"name":"erikvold","url":"https://github.com/erikvold"},{"name":"Christian Passet","url":"https://github.com/thePunIssuer"},{"name":"Tanguy Krotoff","url":"https://github.com/tkrotoff"},{"name":"jtyers","url":"https://github.com/jtyers"},{"name":"Paul Roub","url":"https://github.com/paulroub"}],"gitHead":"6fb63444b25c42c5455de96118ae03885a8f237b","_id":"async-lock@1.2.0","_npmVersion":"6.1.0","_nodeVersion":"10.5.0","_npmUser":{"name":"rogierschouten","email":"rogier.schouten@gmail.com"},"dist":{"shasum":"cd6a53cb1ec3f86af25eafdeb6bc7c6e317258b8","size":5248,"noattachment":false,"key":"/async-lock/-/async-lock-1.2.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-lock/download/async-lock-1.2.0.tgz"},"maintainers":[{"name":"rogierschouten","email":""}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-lock_1.2.0_1552482670025_0.7689899800135369"},"_hasShrinkwrap":false,"publish_time":1552482670182,"_cnpm_publish_time":1552482670182,"_cnpmcore_publish_time":"2021-12-16T15:36:38.752Z"},"1.1.4":{"name":"async-lock","description":"Lock on asynchronous code","version":"1.1.4","author":{"name":"Rogier Schouten","email":"github@workingcode.ninja","url":"https://github.com/rogierschouten/"},"private":false,"homepage":"https://github.com/rogierschouten/async-lock","repository":{"type":"git","url":"git+https://github.com/rogierschouten/async-lock.git"},"bugs":{"url":"https://github.com/rogierschouten/async-lock/issues"},"license":"MIT","keywords":["lock","async","concurrency","critical","section","mutex"],"engines":{},"scripts":{"start":"grunt","test":"grunt test","postinstall":""},"devDependencies":{"bluebird":"^3.5.1","grunt":"^1.0.3","grunt-cli":"^1.2.0","grunt-contrib-clean":"^1.1.0","grunt-contrib-jshint":"^1.1.0","grunt-contrib-watch":"^1.1.0","grunt-env":"^0.4.4","grunt-mocha-test":"^0.13.3","load-grunt-tasks":"^4.0.0","lodash":"^4.17.10","mocha":"^5.2.0","q":"^1.5.1","should":"^13.2.1"},"contributors":[{"name":"rain1017","url":"https://github.com/rain1017"},{"name":"JonathanPicques","url":"https://github.com/JonathanPicques"},{"name":"Rogier Schouten","url":"https://github.com/rogierschouten"},{"name":"erikvold","url":"https://github.com/erikvold"},{"name":"Christian Passet","url":"https://github.com/thePunIssuer"},{"name":"Tanguy Krotoff","url":"https://github.com/tkrotoff"},{"name":"jtyers","url":"https://github.com/jtyers"}],"gitHead":"d2be1295c1162c88c9bd84a826c8624cac61ee37","_id":"async-lock@1.1.4","_nodeVersion":"11.9.0","_npmVersion":"6.7.0","_npmUser":{"name":"rogierschouten","email":"rogier.schouten@gmail.com"},"maintainers":[{"name":"rogierschouten","email":""}],"dist":{"shasum":"863aff9d5c243f75034349be7df9c3ceb7a54254","size":5313,"noattachment":false,"key":"/async-lock/-/async-lock-1.1.4.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-lock/download/async-lock-1.1.4.tgz"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-lock_1.1.4_1549105231238_0.3745199396350072"},"_hasShrinkwrap":false,"publish_time":1549105231792,"_cnpm_publish_time":1549105231792,"_cnpmcore_publish_time":"2021-12-16T15:36:38.989Z"},"1.1.3":{"name":"async-lock","description":"Lock on asynchronous code","version":"1.1.3","author":{"name":"Rogier Schouten","email":"github@workingcode.ninja","url":"https://github.com/rogierschouten/"},"private":false,"homepage":"https://github.com/rogierschouten/async-lock","repository":{"type":"git","url":"git+https://github.com/rogierschouten/async-lock.git"},"bugs":{"url":"https://github.com/rogierschouten/async-lock/issues"},"license":"MIT","keywords":["lock","async","concurrency","critical","section","mutex"],"engines":{},"scripts":{"start":"grunt","test":"grunt test","postinstall":""},"devDependencies":{"bluebird":"^3.5.1","grunt":"^1.0.3","grunt-cli":"^1.2.0","grunt-contrib-clean":"^1.1.0","grunt-contrib-jshint":"^1.1.0","grunt-contrib-watch":"^1.1.0","grunt-env":"^0.4.4","grunt-mocha-test":"^0.13.3","load-grunt-tasks":"^4.0.0","lodash":"^4.17.10","mocha":"^5.2.0","q":"^1.5.1","should":"^13.2.1"},"contributors":[{"name":"rain1017","url":"https://github.com/rain1017"},{"name":"JonathanPicques","url":"https://github.com/JonathanPicques"},{"name":"Rogier Schouten","url":"https://github.com/rogierschouten"},{"name":"erikvold","url":"https://github.com/erikvold"},{"name":"Christian Passet","url":"https://github.com/thePunIssuer"},{"name":"Tanguy Krotoff","url":"https://github.com/tkrotoff"}],"gitHead":"a29850da12e3202c28f8d7b6df0d69cdcbd9f642","_id":"async-lock@1.1.3","_npmVersion":"6.1.0","_nodeVersion":"10.3.0","_npmUser":{"name":"rogierschouten","email":"rogier.schouten@gmail.com"},"maintainers":[{"name":"rogierschouten","email":""}],"dist":{"shasum":"e47f1cbb6bec765b73e27ed8961d58006457ec08","size":5426,"noattachment":false,"key":"/async-lock/-/async-lock-1.1.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-lock/download/async-lock-1.1.3.tgz"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-lock_1.1.3_1528438785661_0.07077446373494523"},"_hasShrinkwrap":false,"publish_time":1528438785790,"_cnpm_publish_time":1528438785790,"_cnpmcore_publish_time":"2021-12-16T15:36:39.211Z"},"1.1.2":{"name":"async-lock","description":"Lock on asynchronous code","version":"1.1.2","author":{"name":"Rogier Schouten","email":"github@workingcode.ninja","url":"https://github.com/rogierschouten/"},"private":false,"homepage":"https://github.com/rogierschouten/async-lock","repository":{"type":"git","url":"git+https://github.com/rogierschouten/async-lock.git"},"bugs":{"url":"https://github.com/rogierschouten/async-lock/issues"},"license":"MIT","keywords":["lock","async","concurrency","critical","section","mutex"],"engines":{},"scripts":{"start":"grunt","test":"grunt test","postinstall":""},"devDependencies":{"bluebird":"~3.5.0","grunt":"^1.0.1","grunt-cli":"~1.2.0","grunt-contrib-clean":"~1.1.0","grunt-contrib-jshint":"~1.1.0","grunt-contrib-watch":"~1.0.0","grunt-env":"~0.4.4","grunt-mocha-test":"~0.13.2","load-grunt-tasks":"~3.5.2","lodash":"~4.17.2","mocha":"^3.2.0","q":"~1.5.0","should":"~11.2.1"},"contributors":[{"name":"rain1017","url":"https://github.com/rain1017"},{"name":"JonathanPicques","url":"https://github.com/JonathanPicques"},{"name":"Rogier Schouten","url":"https://github.com/rogierschouten"},{"name":"erikvold","url":"https://github.com/erikvold"},{"name":"Christian Passet","url":"https://github.com/thePunIssuer"},{"name":"Tanguy Krotoff","url":"https://github.com/tkrotoff"}],"gitHead":"e67f0a94c3688296ad871d3e6750c360a3a74126","_id":"async-lock@1.1.2","_npmVersion":"5.6.0","_nodeVersion":"9.6.1","_npmUser":{"name":"rogierschouten","email":"rogier.schouten@gmail.com"},"maintainers":[{"name":"rogierschouten","email":""}],"dist":{"shasum":"d552b3f8fe93018bf917efcf66d3154b9035282a","size":5405,"noattachment":false,"key":"/async-lock/-/async-lock-1.1.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-lock/download/async-lock-1.1.2.tgz"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-lock_1.1.2_1519672870538_0.8228437249335285"},"_hasShrinkwrap":false,"publish_time":1519672870636,"_cnpm_publish_time":1519672870636,"_cnpmcore_publish_time":"2021-12-16T15:36:39.430Z"},"1.1.1":{"name":"async-lock","description":"Lock on asynchronous code","version":"1.1.1","author":{"name":"Rogier Schouten","email":"github@workingcode.ninja","url":"https://github.com/rogierschouten/"},"private":false,"homepage":"https://github.com/rogierschouten/async-lock","repository":{"type":"git","url":"git+https://github.com/rogierschouten/async-lock.git"},"bugs":{"url":"https://github.com/rogierschouten/async-lock/issues"},"license":"MIT","keywords":["lock","async","concurrency","critical","section","mutex"],"engines":{},"scripts":{"start":"grunt","test":"grunt test","postinstall":""},"devDependencies":{"bluebird":"~3.5.0","grunt":"^1.0.1","grunt-cli":"~1.2.0","grunt-contrib-clean":"~1.1.0","grunt-contrib-jshint":"~1.1.0","grunt-contrib-watch":"~1.0.0","grunt-env":"~0.4.4","grunt-mocha-test":"~0.13.2","load-grunt-tasks":"~3.5.2","lodash":"~4.17.2","mocha":"^3.2.0","q":"~1.5.0","should":"~11.2.1"},"contributors":[{"name":"rain1017","url":"https://github.com/rain1017"},{"name":"JonathanPicques","url":"https://github.com/JonathanPicques"},{"name":"Rogier Schouten","url":"https://github.com/rogierschouten"},{"name":"erikvold","url":"https://github.com/erikvold"},{"name":"Christian Passet","url":"https://github.com/thePunIssuer"}],"gitHead":"957689ff1e46dc2748e6032d5a09bdc086348a45","_id":"async-lock@1.1.1","_npmVersion":"5.6.0","_nodeVersion":"9.5.0","_npmUser":{"name":"rogierschouten","email":"rogier.schouten@gmail.com"},"maintainers":[{"name":"rogierschouten","email":""}],"dist":{"shasum":"38c0f1be5755ec43ac83edaf14138ff9b6ea42ef","size":5453,"noattachment":false,"key":"/async-lock/-/async-lock-1.1.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-lock/download/async-lock-1.1.1.tgz"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-lock_1.1.1_1518564805887_0.29626256492573644"},"_hasShrinkwrap":false,"publish_time":1518564806576,"_cnpm_publish_time":1518564806576,"_cnpmcore_publish_time":"2021-12-16T15:36:39.617Z"},"1.1.0":{"name":"async-lock","description":"Lock on asynchronous code","version":"1.1.0","author":{"name":"Rogier Schouten","email":"github@workingcode.ninja","url":"https://github.com/rogierschouten/"},"private":false,"homepage":"https://github.com/rogierschouten/async-lock","repository":{"type":"git","url":"git+https://github.com/rogierschouten/async-lock.git"},"bugs":{"url":"https://github.com/rogierschouten/async-lock/issues"},"license":"MIT","keywords":["lock","async","concurrency","critical","section","mutex"],"engines":{},"scripts":{"start":"grunt","test":"grunt test","postinstall":""},"devDependencies":{"bluebird":"~3.5.0","grunt":"^1.0.1","grunt-cli":"~1.2.0","grunt-contrib-clean":"~1.1.0","grunt-contrib-jshint":"~1.1.0","grunt-contrib-watch":"~1.0.0","grunt-env":"~0.4.4","grunt-mocha-test":"~0.13.2","load-grunt-tasks":"~3.5.2","lodash":"~4.17.2","mocha":"^3.2.0","q":"~1.5.0","should":"~11.2.1"},"contributors":[{"name":"rain1017","url":"https://github.com/rain1017"},{"name":"JonathanPicques","url":"https://github.com/JonathanPicques"},{"name":"Rogier Schouten","url":"https://github.com/rogierschouten"},{"name":"erikvold","url":"https://github.com/erikvold"}],"gitHead":"89f500efa8924eb3b084038b39fe720e4663cdbe","_id":"async-lock@1.1.0","_npmVersion":"5.3.0","_nodeVersion":"8.5.0","_npmUser":{"name":"rogierschouten","email":"rogier.schouten@gmail.com"},"dist":{"shasum":"48177561d47f81b286309598e908a825bb02082a","size":5230,"noattachment":false,"key":"/async-lock/-/async-lock-1.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-lock/download/async-lock-1.1.0.tgz"},"maintainers":[{"name":"rogierschouten","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-lock-1.1.0.tgz_1508221951292_0.5971742367837578"},"directories":{},"publish_time":1508221952144,"_hasShrinkwrap":false,"_cnpm_publish_time":1508221952144,"_cnpmcore_publish_time":"2021-12-16T15:36:39.806Z"},"1.0.0":{"name":"async-lock","description":"Lock on asynchronous code","version":"1.0.0","author":{"name":"Rogier Schouten","email":"github@workingcode.ninja","url":"https://github.com/rogierschouten/"},"private":false,"homepage":"https://github.com/rogierschouten/async-lock","repository":{"type":"git","url":"git+https://github.com/rogierschouten/async-lock.git"},"bugs":{"url":"https://github.com/rogierschouten/async-lock/issues"},"license":"MIT","keywords":["lock","async","concurrency","critical","section","mutex"],"engines":{},"scripts":{"start":"grunt","test":"grunt test","postinstall":""},"devDependencies":{"bluebird":"~3.5.0","grunt":"^1.0.1","grunt-cli":"~1.2.0","grunt-contrib-clean":"~1.1.0","grunt-contrib-jshint":"~1.1.0","grunt-contrib-watch":"~1.0.0","grunt-env":"~0.4.4","grunt-mocha-test":"~0.13.2","load-grunt-tasks":"~3.5.2","lodash":"~4.17.2","mocha":"^3.2.0","q":"~1.5.0","should":"~11.2.1"},"contributors":[{"name":"rain1017","url":"https://github.com/rain1017"},{"name":"JonathanPicques","url":"https://github.com/JonathanPicques"},{"name":"Rogier Schouten","url":"https://github.com/rogierschouten"},{"name":"erikvold","url":"https://github.com/erikvold"}],"gitHead":"2f5860d29121ae5cb6b87bc9a6d68ae3a102b1f4","_id":"async-lock@1.0.0","_shasum":"b81abbdbd2a6e516773a044b7e6917ae2001f370","_from":".","_npmVersion":"4.6.1","_nodeVersion":"8.1.2","_npmUser":{"name":"rogierschouten","email":"rogier.schouten@gmail.com"},"maintainers":[{"name":"rogierschouten","email":""}],"dist":{"shasum":"b81abbdbd2a6e516773a044b7e6917ae2001f370","size":5159,"noattachment":false,"key":"/async-lock/-/async-lock-1.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-lock/download/async-lock-1.0.0.tgz"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-lock-1.0.0.tgz_1498772076937_0.4932195539586246"},"directories":{},"publish_time":1498772077906,"_hasShrinkwrap":false,"_cnpm_publish_time":1498772077906,"_cnpmcore_publish_time":"2021-12-16T15:36:40.007Z"},"0.3.10":{"name":"async-lock","description":"Lock on asynchronous code","version":"0.3.10","author":{"name":"Rogier Schouten","email":"github@workingcode.ninja","url":"https://github.com/rogierschouten/"},"private":false,"homepage":"https://github.com/rogierschouten/async-lock","repository":{"type":"git","url":"git+https://github.com/rogierschouten/async-lock.git"},"bugs":{"url":"https://github.com/rogierschouten/async-lock/issues"},"license":"MIT","keywords":["lock","async","concurrency","critical","section","mutex"],"engines":{},"scripts":{"start":"grunt","test":"grunt test","postinstall":""},"dependencies":{"q":"~1.5.0"},"devDependencies":{"bluebird":"~3.5.0","grunt":"^1.0.1","grunt-cli":"~1.2.0","grunt-contrib-clean":"~1.1.0","grunt-contrib-jshint":"~1.1.0","grunt-contrib-watch":"~1.0.0","grunt-env":"~0.4.4","grunt-mocha-test":"~0.13.2","load-grunt-tasks":"~3.5.2","lodash":"~4.17.2","mocha":"^3.2.0","should":"~11.2.1"},"contributors":[{"name":"rain1017","email":"rain1017@gmail.com"},{"name":"JonathanPicques","url":"https://github.com/JonathanPicques"},{"name":"Rogier Schouten","email":"github@workingcode.ninja"}],"gitHead":"85f4c9f1d2e07da48af3d5fb546931fa897569f5","_id":"async-lock@0.3.10","_shasum":"5c2c79f040cb03fd3443e1588d31217afa0a85cc","_from":".","_npmVersion":"4.6.1","_nodeVersion":"8.1.2","_npmUser":{"name":"rogierschouten","email":"rogier.schouten@gmail.com"},"maintainers":[{"name":"rogierschouten","email":""}],"dist":{"shasum":"5c2c79f040cb03fd3443e1588d31217afa0a85cc","size":5112,"noattachment":false,"key":"/async-lock/-/async-lock-0.3.10.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-lock/download/async-lock-0.3.10.tgz"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-lock-0.3.10.tgz_1498588786938_0.8889568343292922"},"directories":{},"publish_time":1498588787974,"_hasShrinkwrap":false,"_cnpm_publish_time":1498588787974,"_cnpmcore_publish_time":"2021-12-16T15:36:40.257Z"},"0.3.9":{"name":"async-lock","description":"Lock on asynchronous code","version":"0.3.9","author":{"name":"Rogier Schouten","email":"github@workingcode.ninja","url":"https://github.com/rogierschouten/"},"private":false,"homepage":"https://github.com/rogierschouten/async-lock","repository":{"type":"git","url":"git+https://github.com/rogierschouten/async-lock.git"},"bugs":{"url":"https://github.com/rogierschouten/async-lock/issues"},"license":"MIT","keywords":["lock","async","concurrency","critical","section","mutex"],"engines":{},"scripts":{"start":"grunt","test":"grunt test","postinstall":""},"dependencies":{"q":"~1.4.1"},"devDependencies":{"bluebird":"~3.4.6","grunt":"^1.0.1","grunt-cli":"~1.2.0","grunt-contrib-clean":"~1.0.0","grunt-contrib-jshint":"~1.1.0","grunt-contrib-watch":"~1.0.0","grunt-env":"~0.4.4","grunt-mocha-test":"~0.13.2","load-grunt-tasks":"~3.5.2","lodash":"~4.17.2","mocha":"^3.2.0","should":"~11.1.1"},"contributors":[{"name":"rain1017","email":"rain1017@gmail.com"},{"name":"JonathanPicques","url":"https://github.com/JonathanPicques"},{"name":"Rogier Schouten","email":"github@workingcode.ninja"}],"gitHead":"0f37ef81dc181a129fd95cec57b570a7396f3af4","_id":"async-lock@0.3.9","_shasum":"fc699cbb057a87e47fc00840e5e5421ab30be7b0","_from":".","_npmVersion":"3.10.9","_nodeVersion":"7.2.0","_npmUser":{"name":"rogierschouten","email":"rogier.schouten@gmail.com"},"maintainers":[{"name":"rogierschouten","email":""}],"dist":{"shasum":"fc699cbb057a87e47fc00840e5e5421ab30be7b0","size":7532,"noattachment":false,"key":"/async-lock/-/async-lock-0.3.9.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-lock/download/async-lock-0.3.9.tgz"},"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/async-lock-0.3.9.tgz_1480538194892_0.10103566152974963"},"directories":{},"publish_time":1480538195579,"_hasShrinkwrap":false,"_cnpm_publish_time":1480538195579,"_cnpmcore_publish_time":"2021-12-16T15:36:40.676Z"},"0.3.8":{"name":"async-lock","description":"Lock on asynchronous code","version":"0.3.8","author":{"name":"rain1017"},"private":false,"homepage":"https://github.com/rain1017/async-lock","repository":{"type":"git","url":"git+https://github.com/rain1017/async-lock.git"},"bugs":{"url":"https://github.com/rain1017/async-lock/issues"},"keywords":["lock","async","concurrency","critical","section","mutex"],"engines":{},"scripts":{"start":"grunt","test":"grunt test","postinstall":""},"dependencies":{"q":"~1.4.1"},"devDependencies":{"bluebird":"~2.9.34","lodash":"~3.10.1","should":"~5.1.0","grunt-cli":"~0.1.13","grunt-env":"~0.4.2","grunt-contrib-watch":"~0.6.1","grunt-contrib-jshint":"~0.11.0","grunt-contrib-clean":"~0.6.0","grunt-mocha-test":"~0.12.6","load-grunt-tasks":"~3.1.0","blanket":"~1.1.6"},"contributors":[{"name":"rain1017","email":"rain1017@gmail.com"}],"gitHead":"fbb15be0162f200d73cef4a2201f50c1391490f7","_id":"async-lock@0.3.8","_shasum":"b3623293475f31e752dec6944f4dd3350dbd34e5","_from":".","_npmVersion":"2.14.2","_nodeVersion":"4.0.0","_npmUser":{"name":"rain1017","email":"rain1017@gmail.com"},"dist":{"shasum":"b3623293475f31e752dec6944f4dd3350dbd34e5","size":7382,"noattachment":false,"key":"/async-lock/-/async-lock-0.3.8.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-lock/download/async-lock-0.3.8.tgz"},"maintainers":[{"name":"rogierschouten","email":""}],"directories":{},"publish_time":1443209239169,"_hasShrinkwrap":false,"_cnpm_publish_time":1443209239169,"_cnpmcore_publish_time":"2021-12-16T15:36:40.912Z"},"0.3.7":{"name":"async-lock","description":"Lock on asynchronous code","version":"0.3.7","author":{"name":"rain1017"},"private":false,"homepage":"https://github.com/rain1017/async-mutex","repository":{"type":"git","url":"git+https://github.com/rain1017/async-mutex.git"},"bugs":{"url":"https://github.com/rain1017/async-mutex/issues"},"keywords":["lock","async","concurrency","critical","section","mutex"],"engines":{},"scripts":{"start":"grunt","test":"grunt test","postinstall":""},"dependencies":{"q":"~1.4.1"},"devDependencies":{"bluebird":"~2.9.34","lodash":"~3.10.1","should":"~5.1.0","grunt-cli":"~0.1.13","grunt-env":"~0.4.2","grunt-contrib-watch":"~0.6.1","grunt-contrib-jshint":"~0.11.0","grunt-contrib-clean":"~0.6.0","grunt-mocha-test":"~0.12.6","load-grunt-tasks":"~3.1.0","blanket":"~1.1.6"},"contributors":[{"name":"rain1017","email":"rain1017@gmail.com"}],"gitHead":"fbb15be0162f200d73cef4a2201f50c1391490f7","_id":"async-lock@0.3.7","_shasum":"498cdeb5eafcef73e2e5b7788a748bf82ae1a1c8","_from":".","_npmVersion":"2.14.2","_nodeVersion":"4.0.0","_npmUser":{"name":"rain1017","email":"rain1017@gmail.com"},"dist":{"shasum":"498cdeb5eafcef73e2e5b7788a748bf82ae1a1c8","size":7390,"noattachment":false,"key":"/async-lock/-/async-lock-0.3.7.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-lock/download/async-lock-0.3.7.tgz"},"maintainers":[{"name":"rogierschouten","email":""}],"directories":{},"publish_time":1443193994214,"_hasShrinkwrap":false,"_cnpm_publish_time":1443193994214,"_cnpmcore_publish_time":"2021-12-16T15:36:41.116Z"},"0.3.6":{"name":"async-lock","description":"Lock on asynchronous code","version":"0.3.6","author":{"name":"rain1017"},"private":false,"homepage":"https://github.com/rain1017/async-lock","repository":{"type":"git","url":"git+https://github.com/rain1017/async-lock.git"},"bugs":{"url":"https://github.com/rain1017/async-lock/issues"},"keywords":["lock","async","concurrency","critical","section","mutex"],"engines":{},"scripts":{"start":"grunt","test":"grunt test","postinstall":""},"dependencies":{"q":"~1.4.1"},"devDependencies":{"bluebird":"~2.9.34","lodash":"~3.10.1","should":"~5.1.0","grunt-cli":"~0.1.13","grunt-env":"~0.4.2","grunt-contrib-watch":"~0.6.1","grunt-contrib-jshint":"~0.11.0","grunt-contrib-clean":"~0.6.0","grunt-mocha-test":"~0.12.6","load-grunt-tasks":"~3.1.0","blanket":"~1.1.6"},"contributors":[{"name":"rain1017","email":"rain1017@gmail.com"}],"gitHead":"d68ffa0acbf63288f86105b38aed61d7670090c0","_id":"async-lock@0.3.6","_shasum":"3374586c1bf1400339c113662af1a2de1a1c7012","_from":".","_npmVersion":"2.13.3","_nodeVersion":"3.2.0","_npmUser":{"name":"rain1017","email":"rain1017@gmail.com"},"dist":{"shasum":"3374586c1bf1400339c113662af1a2de1a1c7012","size":7382,"noattachment":false,"key":"/async-lock/-/async-lock-0.3.6.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-lock/download/async-lock-0.3.6.tgz"},"maintainers":[{"name":"rogierschouten","email":""}],"directories":{},"publish_time":1441607962470,"_hasShrinkwrap":false,"_cnpm_publish_time":1441607962470,"_cnpmcore_publish_time":"2021-12-16T15:36:41.340Z"},"0.3.5":{"name":"async-lock","description":"Lock on asynchronous code","version":"0.3.5","author":{"name":"rain1017"},"private":false,"homepage":"https://github.com/rain1017/async-lock","repository":{"type":"git","url":"https://github.com/rain1017/async-lock.git"},"bugs":{"url":"https://github.com/rain1017/async-lock/issues"},"keywords":["async","lock","mutex"],"engines":{},"scripts":{"start":"grunt","test":"grunt test","postinstall":""},"dependencies":{"q":"~1.2.0"},"devDependencies":{"bluebird":"~2.9.24","lodash":"~3.3.0","should":"~5.1.0","grunt-cli":"~0.1.13","grunt-env":"~0.4.2","grunt-contrib-watch":"~0.6.1","grunt-contrib-jshint":"~0.11.0","grunt-contrib-clean":"~0.6.0","grunt-mocha-test":"~0.12.6","load-grunt-tasks":"~3.1.0","blanket":"~1.1.6"},"contributors":[{"name":"rain1017","email":"rain1017@gmail.com"}],"gitHead":"d0aec4e15fdbcb7d182ccf895fbf0c50246d7122","_id":"async-lock@0.3.5","_shasum":"3fe42a86d1d9c639719109e263b5e36bdf0e7d76","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"rain1017","email":"rain1017@gmail.com"},"maintainers":[{"name":"rogierschouten","email":""}],"dist":{"shasum":"3fe42a86d1d9c639719109e263b5e36bdf0e7d76","size":6964,"noattachment":false,"key":"/async-lock/-/async-lock-0.3.5.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-lock/download/async-lock-0.3.5.tgz"},"directories":{},"publish_time":1434361921825,"_hasShrinkwrap":false,"_cnpm_publish_time":1434361921825,"_cnpmcore_publish_time":"2021-12-16T15:36:41.526Z"},"0.3.4":{"name":"async-lock","description":"Lock on asynchronous code","version":"0.3.4","author":{"name":"rain1017"},"private":false,"homepage":"https://github.com/rain1017/async-lock","repository":{"type":"git","url":"https://github.com/rain1017/async-lock.git"},"bugs":{"url":"https://github.com/rain1017/async-lock/issues"},"keywords":["async","lock","mutex"],"engines":{},"scripts":{"start":"grunt","test":"grunt test","postinstall":""},"dependencies":{"q":"~1.2.0"},"devDependencies":{"bluebird":"~2.9.24","lodash":"~3.3.0","should":"~5.1.0","grunt-cli":"~0.1.13","grunt-env":"~0.4.2","grunt-contrib-watch":"~0.6.1","grunt-contrib-jshint":"~0.11.0","grunt-contrib-clean":"~0.6.0","grunt-mocha-test":"~0.12.6","load-grunt-tasks":"~3.1.0","blanket":"~1.1.6"},"contributors":[{"name":"rain1017","email":"rain1017@gmail.com"}],"gitHead":"39aab6060767dbfaf1ddb3d2bf8d982fb66e709f","_id":"async-lock@0.3.4","_shasum":"b043903032399e60d65589f320c8d0cab7850252","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"rain1017","email":"rain1017@gmail.com"},"maintainers":[{"name":"rogierschouten","email":""}],"dist":{"shasum":"b043903032399e60d65589f320c8d0cab7850252","size":6958,"noattachment":false,"key":"/async-lock/-/async-lock-0.3.4.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-lock/download/async-lock-0.3.4.tgz"},"directories":{},"publish_time":1433840329408,"_hasShrinkwrap":false,"_cnpm_publish_time":1433840329408,"_cnpmcore_publish_time":"2021-12-16T15:36:41.748Z"},"0.3.3":{"name":"async-lock","description":"Lock on asynchronous code","version":"0.3.3","author":{"name":"rain1017"},"private":false,"homepage":"https://github.com/rain1017/async-lock","repository":{"type":"git","url":"https://github.com/rain1017/async-lock.git"},"bugs":{"url":"https://github.com/rain1017/async-lock/issues"},"keywords":["async","lock","mutex"],"engines":{"node":"0.10.x"},"scripts":{"start":"grunt","test":"grunt test","postinstall":""},"dependencies":{"q":"~1.2.0"},"devDependencies":{"bluebird":"~2.9.24","lodash":"~3.3.0","should":"~5.1.0","grunt-cli":"~0.1.13","grunt-env":"~0.4.2","grunt-contrib-watch":"~0.6.1","grunt-contrib-jshint":"~0.11.0","grunt-contrib-clean":"~0.6.0","grunt-mocha-test":"~0.12.6","load-grunt-tasks":"~3.1.0","blanket":"~1.1.6"},"contributors":[{"name":"rain1017","email":"rain1017@gmail.com"}],"gitHead":"093f908438576ba0878bde70ca5ff45368a66683","_id":"async-lock@0.3.3","_shasum":"e4ac0022346de4db1bac803c65c61cd8bae2dcdb","_from":".","_npmVersion":"2.7.4","_nodeVersion":"0.12.2","_npmUser":{"name":"rain1017","email":"rain1017@gmail.com"},"maintainers":[{"name":"rogierschouten","email":""}],"dist":{"shasum":"e4ac0022346de4db1bac803c65c61cd8bae2dcdb","size":6888,"noattachment":false,"key":"/async-lock/-/async-lock-0.3.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-lock/download/async-lock-0.3.3.tgz"},"directories":{},"publish_time":1432021643501,"_hasShrinkwrap":false,"_cnpm_publish_time":1432021643501,"_cnpmcore_publish_time":"2021-12-16T15:36:41.944Z"},"0.3.2":{"name":"async-lock","description":"Lock on asynchronous code","version":"0.3.2","author":{"name":"rain1017"},"private":false,"homepage":"https://github.com/rain1017/async-lock","repository":{"type":"git","url":"https://github.com/rain1017/async-lock.git"},"bugs":{"url":"https://github.com/rain1017/async-lock/issues"},"keywords":["async","lock","mutex"],"engines":{"node":"0.10.x"},"scripts":{"start":"grunt","test":"grunt test","postinstall":""},"dependencies":{"q":"~1.2.0"},"devDependencies":{"bluebird":"~2.9.24","lodash":"~3.3.0","should":"~5.1.0","grunt-cli":"~0.1.13","grunt-env":"~0.4.2","grunt-contrib-watch":"~0.6.1","grunt-contrib-jshint":"~0.11.0","grunt-contrib-clean":"~0.6.0","grunt-mocha-test":"~0.12.6","load-grunt-tasks":"~3.1.0","blanket":"~1.1.6"},"contributors":[{"name":"rain1017","email":"rain1017@gmail.com"}],"gitHead":"774ae3bb942c0b0d9853ea8029b9211cf0fb0142","_id":"async-lock@0.3.2","_shasum":"963e61de3369548128d654728318bc602b3c72f5","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"rain1017","email":"rain1017@gmail.com"},"maintainers":[{"name":"rogierschouten","email":""}],"dist":{"shasum":"963e61de3369548128d654728318bc602b3c72f5","size":6735,"noattachment":false,"key":"/async-lock/-/async-lock-0.3.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-lock/download/async-lock-0.3.2.tgz"},"directories":{},"publish_time":1431057110246,"_hasShrinkwrap":false,"_cnpm_publish_time":1431057110246,"_cnpmcore_publish_time":"2021-12-16T15:36:42.170Z"},"0.3.1":{"name":"async-lock","description":"Lock on asynchronous code","version":"0.3.1","author":{"name":"rain1017"},"private":false,"homepage":"https://github.com/rain1017/async-lock","repository":{"type":"git","url":"https://github.com/rain1017/async-lock.git"},"bugs":{"url":"https://github.com/rain1017/async-lock/issues"},"keywords":["async","lock","mutex"],"engines":{"node":"0.10.x"},"scripts":{"start":"grunt","test":"grunt test","postinstall":""},"dependencies":{"q":"~1.2.0"},"devDependencies":{"bluebird":"~2.9.24","lodash":"~3.3.0","should":"~5.1.0","grunt-cli":"~0.1.13","grunt-env":"~0.4.2","grunt-contrib-watch":"~0.6.1","grunt-contrib-jshint":"~0.11.0","grunt-contrib-clean":"~0.6.0","grunt-mocha-test":"~0.12.6","load-grunt-tasks":"~3.1.0","blanket":"~1.1.6"},"contributors":[{"name":"rain1017","email":"rain1017@gmail.com"}],"gitHead":"3c13a07c6336ad83eb1fe8907ed582b55199ff00","_id":"async-lock@0.3.1","_shasum":"1a09a91f1968740401f0dc99159ec9bb7273e29a","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"rain1017","email":"rain1017@gmail.com"},"maintainers":[{"name":"rogierschouten","email":""}],"dist":{"shasum":"1a09a91f1968740401f0dc99159ec9bb7273e29a","size":6699,"noattachment":false,"key":"/async-lock/-/async-lock-0.3.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-lock/download/async-lock-0.3.1.tgz"},"directories":{},"publish_time":1429080065705,"_hasShrinkwrap":false,"_cnpm_publish_time":1429080065705,"_cnpmcore_publish_time":"2021-12-16T15:36:42.403Z"},"0.3.0":{"name":"async-lock","description":"Lock on asynchronous code","version":"0.3.0","author":{"name":"rain1017"},"private":false,"homepage":"https://github.com/rain1017/async-lock","repository":{"type":"git","url":"https://github.com/rain1017/async-lock.git"},"bugs":{"url":"https://github.com/rain1017/async-lock/issues"},"keywords":["async","lock","mutex"],"engines":{"node":"0.10.x"},"scripts":{"start":"grunt","test":"grunt test","postinstall":""},"dependencies":{"q":"~1.2.0"},"devDependencies":{"lodash":"~3.3.0","should":"~5.1.0","grunt-cli":"~0.1.13","grunt-env":"~0.4.2","grunt-contrib-watch":"~0.6.1","grunt-contrib-jshint":"~0.11.0","grunt-contrib-clean":"~0.6.0","grunt-mocha-test":"~0.12.6","load-grunt-tasks":"~3.1.0","blanket":"~1.1.6"},"contributors":[{"name":"rain1017","email":"rain1017@gmail.com"}],"gitHead":"c803414d19855ff7866b00da41febdc96e8a9379","_id":"async-lock@0.3.0","_shasum":"0478f5ef1338f811bf2b31b7413182ad040b0fe3","_from":".","_npmVersion":"2.1.18","_nodeVersion":"0.10.24","_npmUser":{"name":"rain1017","email":"rain1017@gmail.com"},"maintainers":[{"name":"rogierschouten","email":""}],"dist":{"shasum":"0478f5ef1338f811bf2b31b7413182ad040b0fe3","size":6617,"noattachment":false,"key":"/async-lock/-/async-lock-0.3.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-lock/download/async-lock-0.3.0.tgz"},"directories":{},"publish_time":1425657814352,"_hasShrinkwrap":false,"_cnpm_publish_time":1425657814352,"_cnpmcore_publish_time":"2021-12-16T15:36:42.621Z"},"0.2.1":{"name":"async-lock","description":"Mutex on asynchronous code","version":"0.2.1","author":{"name":"rain1017"},"private":false,"homepage":"https://github.com/rain1017/async-lock","repository":{"type":"git","url":"https://github.com/rain1017/async-lock.git"},"bugs":{"url":"https://github.com/rain1017/async-lock/issues"},"keywords":["async","lock","mutex"],"engines":{"node":"0.10.x"},"scripts":{"start":"grunt","test":"grunt test","postinstall":""},"dependencies":{"q":"~1.1.2"},"devDependencies":{"lodash":"~3.3.0","should":"~4.5.0","grunt-cli":"~0.1.13","grunt-env":"~0.4.2","grunt-contrib-watch":"~0.6.1","grunt-contrib-jshint":"~0.10.0","grunt-contrib-clean":"~0.6.0","grunt-mocha-test":"~0.12.6","load-grunt-tasks":"~2.0.0","blanket":"~1.1.6"},"contributors":[{"name":"rain1017","email":"rain1017@gmail.com"}],"gitHead":"ffcc3633fe8eb5d668a987b2547b8ed22b303310","_id":"async-lock@0.2.1","_shasum":"f5f5deac4b2ee7f861388dbc63630a2b179c7247","_from":".","_npmVersion":"2.1.18","_nodeVersion":"0.10.24","_npmUser":{"name":"rain1017","email":"rain1017@gmail.com"},"maintainers":[{"name":"rogierschouten","email":""}],"dist":{"shasum":"f5f5deac4b2ee7f861388dbc63630a2b179c7247","size":6154,"noattachment":false,"key":"/async-lock/-/async-lock-0.2.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-lock/download/async-lock-0.2.1.tgz"},"directories":{},"publish_time":1424511404013,"_hasShrinkwrap":false,"_cnpm_publish_time":1424511404013,"_cnpmcore_publish_time":"2021-12-16T15:36:42.849Z"},"0.2.0":{"name":"async-lock","description":"Mutex on asynchronous code","version":"0.2.0","author":{"name":"rain1017"},"private":false,"homepage":"https://github.com/rain1017/async-lock","repository":{"type":"git","url":"https://github.com/rain1017/async-lock.git"},"bugs":{"url":"https://github.com/rain1017/async-lock/issues"},"keywords":["async","lock","mutex"],"engines":{"node":"0.10.x"},"scripts":{"start":"grunt","test":"grunt test","postinstall":""},"dependencies":{"q":"~1.1.2","lodash":"~3.2.0"},"devDependencies":{"should":"~4.5.0","grunt-cli":"~0.1.13","grunt-env":"~0.4.2","grunt-contrib-watch":"~0.6.1","grunt-contrib-jshint":"~0.10.0","grunt-contrib-clean":"~0.6.0","grunt-mocha-test":"~0.12.6","load-grunt-tasks":"~2.0.0","blanket":"~1.1.6"},"contributors":[{"name":"rain1017","email":"rain1017@gmail.com"}],"gitHead":"c123e0f6a255403b25a1d10cf7b5cd8070c477fd","_id":"async-lock@0.2.0","_shasum":"2c3e84456aec1c006b8bc049e0f75c53d38edad4","_from":".","_npmVersion":"2.1.18","_nodeVersion":"0.10.24","_npmUser":{"name":"rain1017","email":"rain1017@gmail.com"},"maintainers":[{"name":"rogierschouten","email":""}],"dist":{"shasum":"2c3e84456aec1c006b8bc049e0f75c53d38edad4","size":6106,"noattachment":false,"key":"/async-lock/-/async-lock-0.2.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-lock/download/async-lock-0.2.0.tgz"},"directories":{},"publish_time":1424510680181,"_hasShrinkwrap":false,"_cnpm_publish_time":1424510680181,"_cnpmcore_publish_time":"2021-12-16T15:36:43.068Z"},"0.1.2":{"name":"async-lock","description":"Mutex on asynchronous code","version":"0.1.2","author":{"name":"rain1017"},"private":false,"homepage":"https://github.com/rain1017/async-lock","repository":{"type":"git","url":"https://github.com/rain1017/async-lock.git"},"bugs":{"url":"https://github.com/rain1017/async-lock/issues"},"keywords":["async","lock","mutex"],"engines":{"node":"0.10.x"},"scripts":{"start":"grunt","test":"grunt test","postinstall":""},"dependencies":{},"devDependencies":{"should":"~4.5.0","grunt-cli":"~0.1.13","grunt-env":"~0.4.2","grunt-contrib-watch":"~0.6.1","grunt-contrib-jshint":"~0.10.0","grunt-contrib-clean":"~0.6.0","grunt-mocha-test":"~0.12.6","load-grunt-tasks":"~2.0.0","blanket":"~1.1.6"},"contributors":[{"name":"rain1017","email":"rain1017@gmail.com"}],"gitHead":"c69cc3138333671ba8ea125fac322f7ec2ca7fd1","_id":"async-lock@0.1.2","_shasum":"2c83580bc1988384889e22cf7befba82934213f5","_from":".","_npmVersion":"2.1.18","_nodeVersion":"0.10.24","_npmUser":{"name":"rain1017","email":"rain1017@gmail.com"},"maintainers":[{"name":"rogierschouten","email":""}],"dist":{"shasum":"2c83580bc1988384889e22cf7befba82934213f5","size":5371,"noattachment":false,"key":"/async-lock/-/async-lock-0.1.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-lock/download/async-lock-0.1.2.tgz"},"directories":{},"publish_time":1421145822796,"_hasShrinkwrap":false,"_cnpm_publish_time":1421145822796,"_cnpmcore_publish_time":"2021-12-16T15:36:43.344Z"},"0.1.1":{"name":"async-lock","description":"Mutex on asynchronous code","version":"0.1.1","author":{"name":"rain1017"},"private":false,"homepage":"https://github.com/rain1017/async-lock","repository":{"type":"git","url":"https://github.com/rain1017/async-lock.git"},"bugs":{"url":"https://github.com/rain1017/async-lock/issues"},"keywords":[],"engines":{"node":"0.10.x"},"scripts":{"start":"grunt","test":"grunt test","postinstall":""},"dependencies":{},"devDependencies":{"should":"~4.5.0","grunt-cli":"~0.1.13","grunt-env":"~0.4.2","grunt-contrib-watch":"~0.6.1","grunt-contrib-jshint":"~0.10.0","grunt-contrib-clean":"~0.6.0","grunt-mocha-test":"~0.12.6","load-grunt-tasks":"~2.0.0","blanket":"~1.1.6"},"contributors":[{"name":"rain1017","email":"rain1017@gmail.com"}],"gitHead":"ad238df2ebba9ff1ce2c378761a09f67da2a7532","_id":"async-lock@0.1.1","_shasum":"3ad9d5d4efa802c7a42ce1ceec3e48576d9b2110","_from":".","_npmVersion":"2.1.18","_nodeVersion":"0.10.24","_npmUser":{"name":"rain1017","email":"rain1017@gmail.com"},"maintainers":[{"name":"rogierschouten","email":""}],"dist":{"shasum":"3ad9d5d4efa802c7a42ce1ceec3e48576d9b2110","size":5356,"noattachment":false,"key":"/async-lock/-/async-lock-0.1.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-lock/download/async-lock-0.1.1.tgz"},"directories":{},"publish_time":1421145391707,"_hasShrinkwrap":false,"_cnpm_publish_time":1421145391707,"_cnpmcore_publish_time":"2021-12-16T15:36:43.566Z"},"0.1.0":{"name":"async-lock","description":"[![Build Status](https://travis-ci.org/rain1017/async-lock.svg?branch=master)](https://travis-ci.org/rain1017/async-lock) [![Dependencies Status](https://david-dm.org/rain1017/async-lock.svg)](https://david-dm.org/rain1017/async-lock)","version":"0.1.0","author":{"name":"rain1017"},"private":false,"homepage":"https://github.com/rain1017/async-lock","repository":{"type":"git","url":"https://github.com/rain1017/async-lock.git"},"bugs":{"url":"https://github.com/rain1017/async-lock/issues"},"keywords":[],"engines":{"node":"0.10.x","npm":"1.4.x"},"scripts":{"start":"grunt","test":"grunt test","postinstall":""},"dependencies":{},"devDependencies":{"should":"~4.5.0","grunt-env":"~0.4.2","grunt-contrib-watch":"~0.6.1","grunt-contrib-jshint":"~0.10.0","grunt-contrib-clean":"~0.6.0","grunt-mocha-test":"~0.12.6","load-grunt-tasks":"~2.0.0","blanket":"~1.1.6"},"contributors":[{"name":"rain1017","email":"rain1017@gmail.com"}],"gitHead":"1ad8519ce2c9308d9d1a3a171ef9e598db99c1cf","_id":"async-lock@0.1.0","_shasum":"b4435395f90e074046c3be648d65dd8075e0cc28","_from":".","_npmVersion":"2.1.18","_nodeVersion":"0.10.24","_npmUser":{"name":"rain1017","email":"rain1017@gmail.com"},"maintainers":[{"name":"rogierschouten","email":""}],"dist":{"shasum":"b4435395f90e074046c3be648d65dd8075e0cc28","size":5362,"noattachment":false,"key":"/async-lock/-/async-lock-0.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-lock/download/async-lock-0.1.0.tgz"},"directories":{},"publish_time":1421144674925,"_hasShrinkwrap":false,"_cnpm_publish_time":1421144674925,"_cnpmcore_publish_time":"2021-12-16T15:36:43.786Z"}},"readme":"# async-lock\n\nLock on asynchronous code\n\n[![Build Status](https://travis-ci.org/rogierschouten/async-lock.svg?branch=master)](https://travis-ci.org/rogierschouten/async-lock)\n\n* ES6 promise supported\n* Multiple keys lock supported\n* Timeout supported\n* Occupation time limit supported\n* Execution time limit supported\n* Pending task limit supported\n* Domain reentrant supported\n* 100% code coverage\n\n## Disclaimer\n\nI did not create this package, and I will not add any features to it myself. I was granted the ownership because it was no longer being\nmaintained, and I volunteered to fix a bug.\n\nIf you have a new feature you would like to have incorporated, please send me a PR and I will be happy to work with you and get it merged.\nFor any bugs, PRs are most welcome but when possible I will try to get them resolved as soon as possible.\n\n## Why do you need locking on single threaded nodejs?\n\nNodejs is single threaded, and the code execution never gets interrupted inside an event loop, so locking is unnecessary? This is true ONLY IF your critical section can be executed inside a single event loop.\nHowever, if you have any async code inside your critical section (it can be simply triggered by any I/O operation, or timer), your critical logic will across multiple event loops, therefore it's not concurrency safe!\n\nConsider the following code\n```js\nredis.get('key', function(err, value) {\n\tredis.set('key', value * 2);\n});\n```\nThe above code simply multiply a redis key by 2.\nHowever, if two users run concurrently, the execution order may like this\n```\nuser1: redis.get('key') -> 1\nuser2: redis.get('key') -> 1\nuser1: redis.set('key', 1 x 2) -> 2\nuser2: redis.set('key', 1 x 2) -> 2\n```\nObviously it's not what you expected\n\n\nWith asyncLock, you can easily write your async critical section\n```js\nlock.acquire('key', function(cb) {\n\t// Concurrency safe\n\tredis.get('key', function(err, value) {\n\t\tredis.set('key', value * 2, cb);\n\t});\n}, function(err, ret) {\n});\n```\n\n## Get Started\n\n```js\nvar AsyncLock = require('async-lock');\nvar lock = new AsyncLock();\n\n/**\n * @param {String|Array} key \tresource key or keys to lock\n * @param {function} fn \texecute function\n * @param {function} cb \t(optional) callback function, otherwise will return a promise\n * @param {Object} opts \t(optional) options\n */\nlock.acquire(key, function(done) {\n\t// async work\n\tdone(err, ret);\n}, function(err, ret) {\n\t// lock released\n}, opts);\n\n// Promise mode\nlock.acquire(key, function() {\n\t// return value or promise\n}, opts).then(function() {\n\t// lock released\n});\n```\n\n## Error Handling\n\n```js\n// Callback mode\nlock.acquire(key, function(done) {\n\tdone(new Error('error'));\n}, function(err, ret) {\n\tconsole.log(err.message) // output: error\n});\n\n// Promise mode\nlock.acquire(key, function() {\n\tthrow new Error('error');\n}).catch(function(err) {\n\tconsole.log(err.message) // output: error\n});\n```\n\n## Acquire multiple keys\n\n```js\nlock.acquire([key1, key2], fn, cb);\n```\n\n## Domain reentrant lock\n\nLock is reentrant in the same domain\n\n```js\nvar domain = require('domain');\nvar lock = new AsyncLock({domainReentrant : true});\n\nvar d = domain.create();\nd.run(function() {\n\tlock.acquire('key', function() {\n\t\t//Enter lock\n\t\treturn lock.acquire('key', function() {\n\t\t\t//Enter same lock twice\n\t\t});\n\t});\n});\n```\n\n## Options\n\n```js\n// Specify timeout - max amount of time an item can remain in the queue before acquiring the lock\nvar lock = new AsyncLock({timeout: 5000});\nlock.acquire(key, fn, function(err, ret) {\n\t// timed out error will be returned here if lock not acquired in given time\n});\n\n// Specify max occupation time - max amount of time allowed between entering the queue and completing execution\nvar lock = new AsyncLock({maxOccupationTime: 3000});\nlock.acquire(key, fn, function(err, ret) {\n\t// occupation time exceeded error will be returned here if job not completed in given time\n});\n\n// Specify max execution time - max amount of time allowed between acquiring the lock and completing execution\nvar lock = new AsyncLock({maxExecutionTime: 3000});\nlock.acquire(key, fn, function(err, ret) {\n\t// execution time exceeded error will be returned here if job not completed in given time\n});\n\n// Set max pending tasks - max number of tasks allowed in the queue at a time\nvar lock = new AsyncLock({maxPending: 1000});\nlock.acquire(key, fn, function(err, ret) {\n\t// Handle too much pending error\n})\n\n// Whether there is any running or pending async function\nlock.isBusy();\n\n// Use your own promise library instead of the global Promise variable\nvar lock = new AsyncLock({Promise: require('bluebird')}); // Bluebird\nvar lock = new AsyncLock({Promise: require('q')}); // Q\n\n// Add a task to the front of the queue waiting for a given lock\nlock.acquire(key, fn1, cb); // runs immediately\nlock.acquire(key, fn2, cb); // added to queue\nlock.acquire(key, priorityFn, cb, {skipQueue: true}); // jumps queue and runs before fn2\n```\n\n## Changelog\n\nSee [Changelog](./History.md)\n\n## Issues\n\nSee [issue tracker](https://github.com/rogierschouten/async-lock/issues).\n\n## License\n\nMIT, see [LICENSE](./LICENSE)\n","_attachments":{},"homepage":"https://github.com/rogierschouten/async-lock","bugs":{"url":"https://github.com/rogierschouten/async-lock/issues"},"license":"MIT"}