{"_id":"async-mutex","_rev":"4204910","name":"async-mutex","description":"A mutex for guarding async workflows","dist-tags":{"latest":"0.5.0"},"maintainers":[{"name":"dirtyhairy","email":"cnspeckn@googlemail.com"}],"time":{"modified":"2026-03-04T17:03:08.000Z","created":"2016-10-12T22:55:38.862Z","0.5.0":"2024-03-11T19:26:24.229Z","0.4.1":"2024-01-17T21:30:34.828Z","0.4.0":"2022-09-02T14:25:14.901Z","0.3.2":"2021-08-30T21:32:53.873Z","0.3.1":"2021-02-22T20:30:32.295Z","0.3.0":"2021-02-05T19:43:43.460Z","0.2.6":"2020-11-27T23:27:53.454Z","0.2.5":"2020-11-27T23:22:34.775Z","0.2.4":"2020-07-09T18:24:44.253Z","0.2.3":"2020-06-18T19:28:20.745Z","0.2.2":"2020-04-14T22:22:09.430Z","0.2.1":"2020-04-06T21:50:07.276Z","0.2.0":"2020-04-06T21:47:13.364Z","0.1.4":"2019-09-26T21:22:39.498Z","0.1.3":"2017-09-09T13:04:01.134Z","0.1.2":"2017-06-29T09:47:03.990Z","0.1.1":"2017-01-04T13:38:40.693Z","0.1.0":"2016-10-12T22:55:38.862Z"},"users":{},"author":{"name":"Christian Speckner","email":"cnspeckn@googlemail.com","url":"https://github.com/DirtyHairy/"},"repository":{"type":"git","url":"git+https://github.com/DirtyHairy/async-mutex.git"},"versions":{"0.5.0":{"name":"async-mutex","version":"0.5.0","description":"A mutex for guarding async workflows","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","build":"tsc && tsc -p tsconfig.es6.json && tsc -p tsconfig.mjs.json && rollup -o index.mjs mjs/index.js","prepublishOnly":"yarn test && yarn build","test":"yarn lint && nyc --reporter=text --reporter=html --reporter=lcov mocha test/*.ts","coveralls":"cat ./coverage/lcov.info | coveralls"},"author":{"name":"Christian Speckner","email":"cnspeckn@googlemail.com","url":"https://github.com/DirtyHairy/"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/DirtyHairy/async-mutex.git"},"prettier":{"printWidth":120,"tabWidth":4,"singleQuote":true,"parser":"typescript"},"importSort":{".js, .jsx, .ts, .tsx":{"style":"eslint","parser":"typescript"}},"eslintConfig":{"root":true,"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint"],"extends":["eslint:recommended","plugin:@typescript-eslint/eslint-recommended","plugin:@typescript-eslint/recommended"],"rules":{"eqeqeq":"error","@typescript-eslint/no-namespace":"off","no-async-promise-executor":"off"}},"keywords":["mutex","async"],"devDependencies":{"@sinonjs/fake-timers":"^11.2.2","@types/mocha":"^10.0.6","@types/node":"^20.11.25","@types/sinonjs__fake-timers":"^8.1.2","@typescript-eslint/eslint-plugin":"^7.2.0","@typescript-eslint/parser":"^7.2.0","coveralls":"^3.1.1","eslint":"^8.57.0","import-sort-style-eslint":"^6.0.0","mocha":"^10.3.0","nyc":"^15.1.0","prettier":"^3.2.5","prettier-plugin-import-sort":"^0.0.7","rollup":"^4.12.1","ts-node":"^10.9.1","typescript":"^5.4.2"},"main":"lib/index.js","module":"es6/index.js","types":"lib/index.d.ts","exports":{".":{"import":"./index.mjs","require":"./lib/index.js","default":"./lib/index.js"},"./package.json":"./package.json"},"dependencies":{"tslib":"^2.4.0"},"_id":"async-mutex@0.5.0","gitHead":"ca071fca1a72e00bc9bb02626c88393eefe63695","bugs":{"url":"https://github.com/DirtyHairy/async-mutex/issues"},"homepage":"https://github.com/DirtyHairy/async-mutex#readme","_nodeVersion":"21.6.2","_npmVersion":"10.2.4","dist":{"shasum":"353c69a0b9e75250971a64ac203b0ebfddd75482","size":11702,"noattachment":false,"key":"/async-mutex/-/async-mutex-0.5.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-mutex/download/async-mutex-0.5.0.tgz"},"_npmUser":{"name":"dirtyhairy","email":"cnspeckn@googlemail.com"},"directories":{},"maintainers":[{"name":"dirtyhairy","email":"cnspeckn@googlemail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-mutex_0.5.0_1710185184024_0.2843697821018598"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-03-11T19:26:24.229Z","publish_time":1710185184229,"_source_registry_name":"default","_cnpm_publish_time":1710185184229},"0.4.1":{"name":"async-mutex","version":"0.4.1","description":"A mutex for guarding async workflows","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","build":"tsc && tsc -p tsconfig.es6.json && tsc -p tsconfig.mjs.json && rollup -o index.mjs mjs/index.js","prepublishOnly":"yarn test && yarn build","test":"yarn lint && nyc --reporter=text --reporter=html --reporter=lcov mocha test/*.ts","coveralls":"cat ./coverage/lcov.info | coveralls"},"author":{"name":"Christian Speckner","email":"cnspeckn@googlemail.com","url":"https://github.com/DirtyHairy/"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/DirtyHairy/async-mutex.git"},"prettier":{"printWidth":120,"tabWidth":4,"singleQuote":true,"parser":"typescript"},"importSort":{".js, .jsx, .ts, .tsx":{"style":"eslint","parser":"typescript"}},"eslintConfig":{"root":true,"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint"],"extends":["eslint:recommended","plugin:@typescript-eslint/eslint-recommended","plugin:@typescript-eslint/recommended"],"rules":{"eqeqeq":"error","@typescript-eslint/no-namespace":"off","no-async-promise-executor":"off"}},"keywords":["mutex","async"],"devDependencies":{"@sinonjs/fake-timers":"^11.2.2","@types/mocha":"^10.0.6","@types/node":"^20.11.5","@types/sinonjs__fake-timers":"^8.1.2","@typescript-eslint/eslint-plugin":"^6.19.0","@typescript-eslint/parser":"^6.19.0","coveralls":"^3.1.1","eslint":"^8.23.0","import-sort-style-eslint":"^6.0.0","mocha":"^10.0.0","nyc":"^15.1.0","prettier":"^3.2.4","prettier-plugin-import-sort":"^0.0.7","rollup":"^4.9.5","ts-node":"^10.9.1","typescript":"^5.3.3"},"main":"lib/index.js","module":"es6/index.js","types":"lib/index.d.ts","exports":{".":{"import":"./index.mjs","require":"./lib/index.js","default":"./lib/index.js"},"./package.json":"./package.json"},"dependencies":{"tslib":"^2.4.0"},"_id":"async-mutex@0.4.1","gitHead":"ae43294c5a3479f2a5adbf977fb4cb4dd5dba547","bugs":{"url":"https://github.com/DirtyHairy/async-mutex/issues"},"homepage":"https://github.com/DirtyHairy/async-mutex#readme","_nodeVersion":"21.4.0","_npmVersion":"10.2.4","dist":{"shasum":"bccf55b96f2baf8df90ed798cb5544a1f6ee4c2c","size":10641,"noattachment":false,"key":"/async-mutex/-/async-mutex-0.4.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-mutex/download/async-mutex-0.4.1.tgz"},"_npmUser":{"name":"dirtyhairy","email":"cnspeckn@googlemail.com"},"directories":{},"maintainers":[{"name":"dirtyhairy","email":"cnspeckn@googlemail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-mutex_0.4.1_1705527034606_0.578769577690389"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-01-17T21:30:34.828Z","publish_time":1705527034828,"_source_registry_name":"default","_cnpm_publish_time":1705527034828},"0.4.0":{"name":"async-mutex","version":"0.4.0","description":"A mutex for guarding async workflows","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","build":"tsc && tsc -p tsconfig.es6.json && tsc -p tsconfig.mjs.json && rollup -o index.mjs mjs/index.js","prepublishOnly":"yarn test && yarn build","test":"yarn lint && nyc --reporter=text --reporter=html --reporter=lcov mocha test/*.ts","coveralls":"cat ./coverage/lcov.info | coveralls"},"author":{"name":"Christian Speckner","email":"cnspeckn@googlemail.com","url":"https://github.com/DirtyHairy/"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/DirtyHairy/async-mutex.git"},"prettier":{"printWidth":120,"tabWidth":4,"singleQuote":true,"parser":"typescript"},"importSort":{".js, .jsx, .ts, .tsx":{"style":"eslint","parser":"typescript"}},"eslintConfig":{"root":true,"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint"],"extends":["eslint:recommended","plugin:@typescript-eslint/eslint-recommended","plugin:@typescript-eslint/recommended"],"rules":{"eqeqeq":"error","@typescript-eslint/no-namespace":"off","no-async-promise-executor":"off"}},"keywords":["mutex","async"],"devDependencies":{"@sinonjs/fake-timers":"^9.1.2","@types/mocha":"^9.1.1","@types/node":"^18.7.14","@types/sinonjs__fake-timers":"^8.1.2","@typescript-eslint/eslint-plugin":"^5.36.1","@typescript-eslint/parser":"^5.36.1","coveralls":"^3.1.1","eslint":"^8.23.0","import-sort-style-eslint":"^6.0.0","mocha":"^10.0.0","nyc":"^15.1.0","prettier":"^2.7.1","prettier-plugin-import-sort":"^0.0.7","rollup":"^2.56.3","ts-node":"^10.9.1","typescript":"^4.8.2"},"main":"lib/index.js","module":"es6/index.js","types":"lib/index.d.ts","exports":{".":{"import":"./index.mjs","require":"./lib/index.js","default":"./lib/index.js"},"./package.json":"./package.json"},"dependencies":{"tslib":"^2.4.0"},"gitHead":"3d2d987e60799d0fa222f1df8f99fc90ed570bfd","bugs":{"url":"https://github.com/DirtyHairy/async-mutex/issues"},"homepage":"https://github.com/DirtyHairy/async-mutex#readme","_id":"async-mutex@0.4.0","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"shasum":"ae8048cd4d04ace94347507504b3cf15e631c25f","size":10598,"noattachment":false,"key":"/async-mutex/-/async-mutex-0.4.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-mutex/download/async-mutex-0.4.0.tgz"},"_npmUser":{"name":"dirtyhairy","email":"cnspeckn@googlemail.com"},"directories":{},"maintainers":[{"name":"dirtyhairy","email":"cnspeckn@googlemail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-mutex_0.4.0_1662128714751_0.9285192449094033"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-09-02T14:27:08.777Z","publish_time":1662128714901,"_cnpm_publish_time":1662128714901},"0.3.2":{"name":"async-mutex","version":"0.3.2","description":"A mutex for guarding async workflows","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","build":"tsc && tsc -p tsconfig.es6.json && tsc -p tsconfig.mjs.json && rollup -o index.mjs mjs/index.js","prepublishOnly":"yarn test && yarn build","test":"yarn lint && nyc --reporter=text --reporter=html --reporter=lcov mocha test/*.ts","coveralls":"cat ./coverage/lcov.info | coveralls"},"author":{"name":"Christian Speckner","email":"cnspeckn@googlemail.com","url":"https://github.com/DirtyHairy/"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/DirtyHairy/async-mutex.git"},"prettier":{"printWidth":120,"tabWidth":4,"singleQuote":true,"parser":"typescript"},"importSort":{".js, .jsx, .ts, .tsx":{"style":"eslint","parser":"typescript"}},"eslintConfig":{"root":true,"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint"],"extends":["eslint:recommended","plugin:@typescript-eslint/eslint-recommended","plugin:@typescript-eslint/recommended"],"rules":{"eqeqeq":"error","@typescript-eslint/no-namespace":"off","no-async-promise-executor":"off"}},"keywords":["mutex","async"],"devDependencies":{"@sinonjs/fake-timers":"^7.1.2","@types/mocha":"^9.0.0","@types/node":"^16.7.8","@types/sinonjs__fake-timers":"^6.0.3","@typescript-eslint/eslint-plugin":"^4.30.0","@typescript-eslint/parser":"^4.30.0","coveralls":"^3.1.1","eslint":"^7.32.0","import-sort-style-eslint":"^6.0.0","mocha":"^9.1.1","nyc":"^15.1.0","prettier":"^2.3.2","prettier-plugin-import-sort":"^0.0.7","rollup":"^2.56.3","ts-node":"^10.2.1","typescript":"^4.4.2"},"main":"lib/index.js","module":"es6/index.js","types":"lib/index.d.ts","exports":{".":{"import":"./index.mjs","require":"./lib/index.js","default":"./lib/index.js"},"./package.json":"./package.json"},"dependencies":{"tslib":"^2.3.1"},"gitHead":"0acc02c7ebae776d493a32b5f1fd3fcb0612dd06","bugs":{"url":"https://github.com/DirtyHairy/async-mutex/issues"},"homepage":"https://github.com/DirtyHairy/async-mutex#readme","_id":"async-mutex@0.3.2","_nodeVersion":"16.4.0","_npmVersion":"7.18.1","dist":{"shasum":"1485eda5bda1b0ec7c8df1ac2e815757ad1831df","size":10076,"noattachment":false,"key":"/async-mutex/-/async-mutex-0.3.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-mutex/download/async-mutex-0.3.2.tgz"},"_npmUser":{"name":"dirtyhairy","email":"cnspeckn@googlemail.com"},"directories":{},"maintainers":[{"name":"dirtyhairy","email":"cnspeckn@googlemail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-mutex_0.3.2_1630359173691_0.3846385392783369"},"_hasShrinkwrap":false,"publish_time":1630359173873,"_cnpm_publish_time":1630359173873,"_cnpmcore_publish_time":"2021-12-16T10:53:56.518Z"},"0.3.1":{"name":"async-mutex","version":"0.3.1","description":"A mutex for guarding async workflows","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","build":"tsc && tsc -p tsconfig.es6.json && tsc -p tsconfig.mjs.json && rollup -o index.mjs mjs/index.js","prepublishOnly":"yarn test && yarn build","test":"yarn lint && nyc --reporter=text --reporter=html --reporter=lcov mocha test/*.ts","coveralls":"cat ./coverage/lcov.info | coveralls"},"author":{"name":"Christian Speckner","email":"cnspeckn@googlemail.com","url":"https://github.com/DirtyHairy/"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/DirtyHairy/async-mutex.git"},"prettier":{"printWidth":120,"tabWidth":4,"singleQuote":true,"parser":"typescript"},"importSort":{".js, .jsx, .ts, .tsx":{"style":"eslint","parser":"typescript"}},"eslintConfig":{"root":true,"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint"],"extends":["eslint:recommended","plugin:@typescript-eslint/eslint-recommended","plugin:@typescript-eslint/recommended"],"rules":{"eqeqeq":"error","@typescript-eslint/no-namespace":"off","no-async-promise-executor":"off"}},"keywords":["mutex","async"],"devDependencies":{"@sinonjs/fake-timers":"^6.0.1","@types/mocha":"^8.2.0","@types/node":"^14.14.25","@types/sinonjs__fake-timers":"^6.0.2","@typescript-eslint/eslint-plugin":"^4.14.2","@typescript-eslint/parser":"^4.14.2","coveralls":"^3.1.0","eslint":"^7.19.0","import-sort-style-eslint":"^6.0.0","mocha":"^8.2.1","nyc":"^15.1.0","prettier":"^2.2.1","prettier-plugin-import-sort":"^0.0.6","rollup":"^2.38.5","ts-node":"^9.1.1","typescript":"^4.1.3"},"main":"lib/index.js","module":"es6/index.js","types":"lib/index.d.ts","exports":{".":{"import":"./index.mjs","require":"./lib/index.js","default":"./lib/index.js"},"./package.json":"./package.json"},"dependencies":{"tslib":"^2.1.0"},"gitHead":"93f1ff7d6d69745242ef34e6ace5ca3df60ee52b","bugs":{"url":"https://github.com/DirtyHairy/async-mutex/issues"},"homepage":"https://github.com/DirtyHairy/async-mutex#readme","_id":"async-mutex@0.3.1","_nodeVersion":"15.8.0","_npmVersion":"7.5.0","dist":{"shasum":"7033af665f1c7cebed8b878267a43ba9e77c5f67","size":10721,"noattachment":false,"key":"/async-mutex/-/async-mutex-0.3.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-mutex/download/async-mutex-0.3.1.tgz"},"_npmUser":{"name":"dirtyhairy","email":"cnspeckn@googlemail.com"},"directories":{},"maintainers":[{"name":"dirtyhairy","email":"cnspeckn@googlemail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-mutex_0.3.1_1614025832108_0.8187723692653652"},"_hasShrinkwrap":false,"publish_time":1614025832295,"_cnpm_publish_time":1614025832295,"_cnpmcore_publish_time":"2021-12-16T10:53:56.724Z"},"0.3.0":{"name":"async-mutex","version":"0.3.0","description":"A mutex for guarding async workflows","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","build":"tsc && tsc -p tsconfig.es6.json && tsc -p tsconfig.mjs.json && rollup -o index.mjs mjs/index.js","prepublishOnly":"yarn test && yarn build","test":"yarn lint && nyc --reporter=text --reporter=html --reporter=lcov mocha test/*.ts","coveralls":"cat ./coverage/lcov.info | coveralls"},"author":{"name":"Christian Speckner","email":"cnspeckn@googlemail.com","url":"https://github.com/DirtyHairy/"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/DirtyHairy/async-mutex.git"},"prettier":{"printWidth":120,"tabWidth":4,"singleQuote":true,"parser":"typescript"},"importSort":{".js, .jsx, .ts, .tsx":{"style":"eslint","parser":"typescript"}},"eslintConfig":{"root":true,"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint"],"extends":["eslint:recommended","plugin:@typescript-eslint/eslint-recommended","plugin:@typescript-eslint/recommended"],"rules":{"eqeqeq":"error","@typescript-eslint/no-namespace":"off","no-async-promise-executor":"off"}},"keywords":["mutex","async"],"devDependencies":{"@sinonjs/fake-timers":"^6.0.1","@types/mocha":"^8.2.0","@types/node":"^14.14.25","@types/sinonjs__fake-timers":"^6.0.2","@typescript-eslint/eslint-plugin":"^4.14.2","@typescript-eslint/parser":"^4.14.2","coveralls":"^3.1.0","eslint":"^7.19.0","import-sort-style-eslint":"^6.0.0","mocha":"^8.2.1","nyc":"^15.1.0","prettier":"^2.2.1","prettier-plugin-import-sort":"^0.0.6","rollup":"^2.38.5","ts-node":"^9.1.1","typescript":"^4.1.3"},"main":"lib/index.js","module":"es6/index.js","types":"lib/index.d.ts","exports":{".":{"import":"./index.mjs","require":"./lib/index.js","default":"./lib/index.js"},"./package.json":"./package.json"},"dependencies":{"tslib":"^2.1.0"},"gitHead":"4feefdaf19ddb0ca0c583d48c131aefb43c4efe1","bugs":{"url":"https://github.com/DirtyHairy/async-mutex/issues"},"homepage":"https://github.com/DirtyHairy/async-mutex#readme","_id":"async-mutex@0.3.0","_nodeVersion":"15.8.0","_npmVersion":"7.5.0","dist":{"shasum":"5bc765c271dfc05c48040c12032a92f1dbef2dc3","size":10668,"noattachment":false,"key":"/async-mutex/-/async-mutex-0.3.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-mutex/download/async-mutex-0.3.0.tgz"},"_npmUser":{"name":"dirtyhairy","email":"cnspeckn@googlemail.com"},"directories":{},"maintainers":[{"name":"dirtyhairy","email":"cnspeckn@googlemail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-mutex_0.3.0_1612554223310_0.624376327057371"},"_hasShrinkwrap":false,"publish_time":1612554223460,"_cnpm_publish_time":1612554223460,"_cnpmcore_publish_time":"2021-12-16T10:53:56.947Z"},"0.2.6":{"name":"async-mutex","version":"0.2.6","description":"A mutex for guarding async workflows","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","build":"tsc && tsc -p tsconfig.es6.json && tsc -p tsconfig.mjs.json && rollup -o index.mjs mjs/index.js","prepublishOnly":"yarn test && yarn build","test":"yarn lint && nyc --reporter=text --reporter=html --reporter=lcov mocha test/*.ts","coveralls":"cat ./coverage/lcov.info | coveralls"},"author":{"name":"Christian Speckner","email":"cnspeckn@googlemail.com","url":"https://github.com/DirtyHairy/"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/DirtyHairy/async-mutex.git"},"prettier":{"printWidth":120,"tabWidth":4,"singleQuote":true,"parser":"typescript"},"importSort":{".js, .jsx, .ts, .tsx":{"style":"eslint","parser":"typescript"}},"eslintConfig":{"root":true,"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint"],"extends":["eslint:recommended","plugin:@typescript-eslint/eslint-recommended","plugin:@typescript-eslint/recommended"],"rules":{"eqeqeq":"error","@typescript-eslint/no-namespace":"off","no-async-promise-executor":"off"}},"keywords":["mutex","async"],"devDependencies":{"@sinonjs/fake-timers":"^6.0.1","@types/mocha":"^8.0.4","@types/node":"^14.14.10","@types/sinonjs__fake-timers":"^6.0.2","@typescript-eslint/eslint-plugin":"^4.8.2","@typescript-eslint/parser":"^4.8.2","coveralls":"^3.1.0","eslint":"^7.14.0","import-sort-style-eslint":"^6.0.0","mocha":"^8.2.1","nyc":"^15.1.0","prettier":"^2.2.0","prettier-plugin-import-sort":"^0.0.6","rollup":"^2.33.3","ts-node":"^9.0.0","typescript":"^4.1.2"},"main":"lib/index.js","module":"es6/index.js","types":"lib/index.d.ts","exports":{".":{"import":"./index.mjs","require":"./lib/index.js","default":"./lib/index.js"},"./package.json":"./package.json"},"dependencies":{"tslib":"^2.0.0"},"gitHead":"6cec83aa0bc0a65677c2615fd9fa35c84c3714a4","bugs":{"url":"https://github.com/DirtyHairy/async-mutex/issues"},"homepage":"https://github.com/DirtyHairy/async-mutex#readme","_id":"async-mutex@0.2.6","_nodeVersion":"15.0.1","_npmVersion":"7.0.3","dist":{"shasum":"0d7a3deb978bc2b984d5908a2038e1ae2e54ff40","size":8647,"noattachment":false,"key":"/async-mutex/-/async-mutex-0.2.6.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-mutex/download/async-mutex-0.2.6.tgz"},"_npmUser":{"name":"dirtyhairy","email":"cnspeckn@googlemail.com"},"directories":{},"maintainers":[{"name":"dirtyhairy","email":"cnspeckn@googlemail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-mutex_0.2.6_1606519673349_0.5811113704445667"},"_hasShrinkwrap":false,"publish_time":1606519673454,"_cnpm_publish_time":1606519673454,"_cnpmcore_publish_time":"2021-12-16T10:53:57.159Z"},"0.2.5":{"name":"async-mutex","version":"0.2.5","description":"A mutex for guarding async workflows","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","build":"tsc && tsc -p tsconfig.es6.json && tsc -p tsconfig.mjs.json && rollup -o index.mjs mjs/index.js","prepublish":"yarn test && yarn build","test":"yarn lint && nyc --reporter=text --reporter=html --reporter=lcov mocha test/*.ts","coveralls":"cat ./coverage/lcov.info | coveralls"},"author":{"name":"Christian Speckner","email":"cnspeckn@googlemail.com","url":"https://github.com/DirtyHairy/"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/DirtyHairy/async-mutex.git"},"prettier":{"printWidth":120,"tabWidth":4,"singleQuote":true,"parser":"typescript"},"importSort":{".js, .jsx, .ts, .tsx":{"style":"eslint","parser":"typescript"}},"eslintConfig":{"root":true,"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint"],"extends":["eslint:recommended","plugin:@typescript-eslint/eslint-recommended","plugin:@typescript-eslint/recommended"],"rules":{"eqeqeq":"error","@typescript-eslint/no-namespace":"off","no-async-promise-executor":"off"}},"keywords":["mutex","async"],"devDependencies":{"@sinonjs/fake-timers":"^6.0.1","@types/mocha":"^8.0.4","@types/node":"^14.14.10","@types/sinonjs__fake-timers":"^6.0.2","@typescript-eslint/eslint-plugin":"^4.8.2","@typescript-eslint/parser":"^4.8.2","coveralls":"^3.1.0","eslint":"^7.14.0","import-sort-style-eslint":"^6.0.0","mocha":"^8.2.1","nyc":"^15.1.0","prettier":"^2.2.0","prettier-plugin-import-sort":"^0.0.6","rollup":"^2.33.3","ts-node":"^9.0.0","typescript":"^4.1.2"},"main":"lib/index.js","module":"es6/index.js","types":"lib/index.d.ts","exports":{".":{"import":"./index.mjs","require":"./lib/index.js","default":"./lib/index.js"},"./package.json":"./package.json"},"dependencies":{"tslib":"^2.0.0"},"gitHead":"2593cedbaaa85732590b84c381e77a5b8aa82c89","bugs":{"url":"https://github.com/DirtyHairy/async-mutex/issues"},"homepage":"https://github.com/DirtyHairy/async-mutex#readme","_id":"async-mutex@0.2.5","_nodeVersion":"15.0.1","_npmVersion":"7.0.3","dist":{"shasum":"6c57da9cb01b31067ce6cc41d51d35eb5080540e","size":8601,"noattachment":false,"key":"/async-mutex/-/async-mutex-0.2.5.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-mutex/download/async-mutex-0.2.5.tgz"},"_npmUser":{"name":"dirtyhairy","email":"cnspeckn@googlemail.com"},"directories":{},"maintainers":[{"name":"dirtyhairy","email":"cnspeckn@googlemail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-mutex_0.2.5_1606519354621_0.2492035368308987"},"_hasShrinkwrap":false,"publish_time":1606519354775,"_cnpm_publish_time":1606519354775,"_cnpmcore_publish_time":"2021-12-16T10:53:57.342Z"},"0.2.4":{"name":"async-mutex","version":"0.2.4","description":"A mutex for guarding async workflows","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","build":"tsc && tsc -p tsconfig.es6.json && tsc -p tsconfig.mjs.json && rollup -o index.mjs mjs/index.js","prepublish":"yarn test && yarn build","test":"yarn lint && nyc --reporter=text --reporter=html --reporter=lcov mocha test/*.ts","coveralls":"cat ./coverage/lcov.info | coveralls"},"author":{"name":"Christian Speckner","email":"cnspeckn@googlemail.com","url":"https://github.com/DirtyHairy/"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/DirtyHairy/async-mutex.git"},"prettier":{"printWidth":120,"tabWidth":4,"singleQuote":true,"parser":"typescript"},"importSort":{".js, .jsx, .ts, .tsx":{"style":"eslint","parser":"typescript"}},"eslintConfig":{"root":true,"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint"],"extends":["eslint:recommended","plugin:@typescript-eslint/eslint-recommended","plugin:@typescript-eslint/recommended"],"rules":{"eqeqeq":"error","@typescript-eslint/no-namespace":"off","no-async-promise-executor":"off"}},"keywords":["mutex","async"],"devDependencies":{"@sinonjs/fake-timers":"^6.0.1","@types/mocha":"^7.0.2","@types/node":"^14.0.13","@types/sinonjs__fake-timers":"^6.0.1","@typescript-eslint/eslint-plugin":"^3.3.0","@typescript-eslint/parser":"^3.3.0","coveralls":"^3.1.0","eslint":"^7.2.0","import-sort-style-eslint":"^6.0.0","mocha":"^8.0.1","nyc":"^15.1.0","prettier":"^2.0.5","prettier-plugin-import-sort":"^0.0.4","rollup":"^2.17.0","ts-node":"^8.10.2","typescript":"^3.9.5"},"main":"lib/index.js","module":"es6/index.js","types":"lib/index.d.ts","exports":{".":{"import":"./index.mjs","require":"./lib/index.js","default":"./lib/index.js"},"./package.json":"./package.json"},"dependencies":{"tslib":"^2.0.0"},"gitHead":"0ccb014c913de99ceb02e57836ccd992042672ab","bugs":{"url":"https://github.com/DirtyHairy/async-mutex/issues"},"homepage":"https://github.com/DirtyHairy/async-mutex#readme","_id":"async-mutex@0.2.4","_nodeVersion":"14.4.0","_npmVersion":"6.14.4","dist":{"shasum":"f6ea5f9cc73147f395f86fa573a2af039fe63082","size":8517,"noattachment":false,"key":"/async-mutex/-/async-mutex-0.2.4.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-mutex/download/async-mutex-0.2.4.tgz"},"maintainers":[{"name":"dirtyhairy","email":"cnspeckn@googlemail.com"}],"_npmUser":{"name":"dirtyhairy","email":"cnspeckn@googlemail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-mutex_0.2.4_1594319084151_0.9756951668914797"},"_hasShrinkwrap":false,"publish_time":1594319084253,"_cnpm_publish_time":1594319084253,"_cnpmcore_publish_time":"2021-12-16T10:53:57.563Z"},"0.2.3":{"name":"async-mutex","version":"0.2.3","description":"A mutex for guarding async workflows","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","build":"tsc && tsc -p tsconfig.es6.json && tsc -p tsconfig.mjs.json && rollup -o index.mjs mjs/index.js","prepublish":"yarn test && yarn build","test":"yarn lint && nyc --reporter=text --reporter=html --reporter=lcov mocha test/*.ts","coveralls":"cat ./coverage/lcov.info | coveralls"},"author":{"name":"Christian Speckner","email":"cnspeckn@googlemail.com","url":"https://github.com/DirtyHairy/"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/DirtyHairy/async-mutex.git"},"prettier":{"printWidth":120,"tabWidth":4,"singleQuote":true,"parser":"typescript"},"importSort":{".js, .jsx, .ts, .tsx":{"style":"eslint","parser":"typescript"}},"eslintConfig":{"root":true,"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint"],"extends":["eslint:recommended","plugin:@typescript-eslint/eslint-recommended","plugin:@typescript-eslint/recommended"],"rules":{"eqeqeq":"error","@typescript-eslint/no-namespace":"off","no-async-promise-executor":"off"}},"keywords":["mutex","async"],"devDependencies":{"@sinonjs/fake-timers":"^6.0.1","@types/mocha":"^7.0.2","@types/node":"^14.0.13","@types/sinonjs__fake-timers":"^6.0.1","@typescript-eslint/eslint-plugin":"^3.3.0","@typescript-eslint/parser":"^3.3.0","coveralls":"^3.1.0","eslint":"^7.2.0","import-sort-style-eslint":"^6.0.0","mocha":"^8.0.1","nyc":"^15.1.0","prettier":"^2.0.5","prettier-plugin-import-sort":"^0.0.4","rollup":"^2.17.0","ts-node":"^8.10.2","typescript":"^3.9.5"},"main":"lib/index.js","module":"es6/index.js","types":"lib/index.d.ts","exports":{".":{"import":"./index.mjs","require":"./lib/index.js","default":"./lib/index.js"},"./package.json":"./package.json"},"dependencies":{"tslib":"^2.0.0"},"gitHead":"391433bf0ced35237a1e63f05328c107c11c1194","bugs":{"url":"https://github.com/DirtyHairy/async-mutex/issues"},"homepage":"https://github.com/DirtyHairy/async-mutex#readme","_id":"async-mutex@0.2.3","_nodeVersion":"14.4.0","_npmVersion":"6.14.4","dist":{"shasum":"9ce5109e03514e5e11c456b7aeb15022f989ffb1","size":8233,"noattachment":false,"key":"/async-mutex/-/async-mutex-0.2.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-mutex/download/async-mutex-0.2.3.tgz"},"maintainers":[{"name":"dirtyhairy","email":"cnspeckn@googlemail.com"}],"_npmUser":{"name":"dirtyhairy","email":"cnspeckn@googlemail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-mutex_0.2.3_1592508500540_0.3250992232951613"},"_hasShrinkwrap":false,"publish_time":1592508500745,"_cnpm_publish_time":1592508500745,"_cnpmcore_publish_time":"2021-12-16T10:53:57.778Z"},"0.2.2":{"name":"async-mutex","version":"0.2.2","description":"A mutex for guarding async workflows","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","build":"tsc && tsc -p tsconfig.es6.json && tsc -p tsconfig.mjs.json && rollup -o index.mjs mjs/index.js","prepublish":"yarn test && yarn build","test":"yarn lint && nyc --reporter=text --reporter=html --reporter=lcov mocha test/*.ts","coveralls":"cat ./coverage/lcov.info | coveralls"},"author":{"name":"Christian Speckner","email":"cnspeckn@googlemail.com","url":"https://github.com/DirtyHairy/"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/DirtyHairy/async-mutex.git"},"prettier":{"printWidth":120,"tabWidth":4,"singleQuote":true,"parser":"typescript"},"importSort":{".js, .jsx, .ts, .tsx":{"style":"eslint","parser":"typescript"}},"eslintConfig":{"root":true,"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint"],"extends":["eslint:recommended","plugin:@typescript-eslint/eslint-recommended","plugin:@typescript-eslint/recommended"],"rules":{"eqeqeq":"error","@typescript-eslint/no-namespace":"off","no-async-promise-executor":"off"}},"keywords":["mutex","async"],"devDependencies":{"@sinonjs/fake-timers":"^6.0.1","@types/mocha":"^7.0.2","@types/node":"^13.11.0","@types/sinonjs__fake-timers":"^6.0.1","@typescript-eslint/eslint-plugin":"^2.26.0","@typescript-eslint/parser":"^2.26.0","coveralls":"^3.0.11","eslint":"^6.8.0","import-sort-style-eslint":"^6.0.0","mocha":"^7.1.1","nyc":"^15.0.1","prettier":"^2.0.2","prettier-plugin-import-sort":"^0.0.4","rollup":"^2.3.2","ts-node":"^8.8.1","typescript":"^3.6.3"},"main":"lib/index.js","module":"es6/index.js","types":"lib/index.d.ts","exports":{"import":"./index.mjs","require":"./lib/index.js","default":"./lib/index.js"},"dependencies":{"tslib":"^1.11.1"},"gitHead":"493ae57c8c2766bece2605bc986662da8b02ea40","bugs":{"url":"https://github.com/DirtyHairy/async-mutex/issues"},"homepage":"https://github.com/DirtyHairy/async-mutex#readme","_id":"async-mutex@0.2.2","_nodeVersion":"13.10.1","_npmVersion":"6.13.7","dist":{"shasum":"3a9de4be23615abce7d52730b4d3a43d9258fe06","size":7832,"noattachment":false,"key":"/async-mutex/-/async-mutex-0.2.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-mutex/download/async-mutex-0.2.2.tgz"},"maintainers":[{"name":"dirtyhairy","email":"cnspeckn@googlemail.com"}],"_npmUser":{"name":"dirtyhairy","email":"cnspeckn@googlemail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-mutex_0.2.2_1586902929209_0.9273251617931066"},"_hasShrinkwrap":false,"publish_time":1586902929430,"_cnpm_publish_time":1586902929430,"_cnpmcore_publish_time":"2021-12-16T10:53:58.027Z"},"0.2.1":{"name":"async-mutex","version":"0.2.1","description":"A mutex for guarding async workflows","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","build":"tsc && tsc -p tsconfig.es6.json && tsc -p tsconfig.mjs.json && rollup -o index.mjs mjs/index.js","prepublish":"yarn test && yarn build","test":"yarn lint && nyc --reporter=text --reporter=html --reporter=lcov mocha test/*.ts","coveralls":"cat ./coverage/lcov.info | coveralls"},"author":{"name":"Christian Speckner","email":"cnspeckn@googlemail.com","url":"https://github.com/DirtyHairy/"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/DirtyHairy/async-mutex.git"},"prettier":{"printWidth":120,"tabWidth":4,"singleQuote":true,"parser":"typescript"},"importSort":{".js, .jsx, .ts, .tsx":{"style":"eslint","parser":"typescript"}},"eslintConfig":{"root":true,"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint"],"extends":["eslint:recommended","plugin:@typescript-eslint/eslint-recommended","plugin:@typescript-eslint/recommended"],"rules":{"eqeqeq":"error","@typescript-eslint/no-namespace":"off","no-async-promise-executor":"off"}},"keywords":["mutex","async"],"devDependencies":{"@sinonjs/fake-timers":"^6.0.1","@types/mocha":"^7.0.2","@types/node":"^13.11.0","@types/sinonjs__fake-timers":"^6.0.1","@typescript-eslint/eslint-plugin":"^2.26.0","@typescript-eslint/parser":"^2.26.0","coveralls":"^3.0.11","eslint":"^6.8.0","import-sort-style-eslint":"^6.0.0","mocha":"^7.1.1","nyc":"^15.0.1","prettier":"^2.0.2","prettier-plugin-import-sort":"^0.0.4","rollup":"^2.3.2","ts-node":"^8.8.1","typescript":"^3.6.3"},"main":"lib/index.js","module":"es6/index.js","types":"lib/index.d.ts","exports":{"import":"./index.mjs","require":"./lib/index.js"},"dependencies":{"tslib":"^1.11.1"},"gitHead":"c15e3bc23011c15f1a173470622a477184bdc900","bugs":{"url":"https://github.com/DirtyHairy/async-mutex/issues"},"homepage":"https://github.com/DirtyHairy/async-mutex#readme","_id":"async-mutex@0.2.1","_nodeVersion":"13.10.1","_npmVersion":"6.13.7","dist":{"shasum":"ffa0bc669f54f7692812b0ce83de487564677c08","size":7740,"noattachment":false,"key":"/async-mutex/-/async-mutex-0.2.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-mutex/download/async-mutex-0.2.1.tgz"},"maintainers":[{"name":"dirtyhairy","email":"cnspeckn@googlemail.com"}],"_npmUser":{"name":"dirtyhairy","email":"cnspeckn@googlemail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-mutex_0.2.1_1586209807089_0.7618329946601321"},"_hasShrinkwrap":false,"publish_time":1586209807276,"_cnpm_publish_time":1586209807276,"_cnpmcore_publish_time":"2021-12-16T10:53:58.731Z"},"0.2.0":{"name":"async-mutex","version":"0.2.0","description":"A mutex for guarding async workflows","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","build":"tsc && tsc -p tsconfig.es6.json && tsc -p tsconfig.mjs.json && rollup -o index.mjs mjs/index.js","prepublish":"yarn test && yarn build","test":"yarn lint && nyc --reporter=text --reporter=html --reporter=lcov mocha test/*.ts","coveralls":"cat ./coverage/lcov.info | coveralls"},"author":{"name":"Christian Speckner","email":"cnspeckn@googlemail.com","url":"https://github.com/DirtyHairy/"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/DirtyHairy/async-mutex.git"},"prettier":{"printWidth":120,"tabWidth":4,"singleQuote":true,"parser":"typescript"},"importSort":{".js, .jsx, .ts, .tsx":{"style":"eslint","parser":"typescript"}},"eslintConfig":{"root":true,"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint"],"extends":["eslint:recommended","plugin:@typescript-eslint/eslint-recommended","plugin:@typescript-eslint/recommended"],"rules":{"eqeqeq":"error","@typescript-eslint/no-namespace":"off","no-async-promise-executor":"off"}},"keywords":["mutex","async"],"devDependencies":{"@sinonjs/fake-timers":"^6.0.1","@types/mocha":"^7.0.2","@types/node":"^13.11.0","@types/sinonjs__fake-timers":"^6.0.1","@typescript-eslint/eslint-plugin":"^2.26.0","@typescript-eslint/parser":"^2.26.0","coveralls":"^3.0.11","eslint":"^6.8.0","import-sort-style-eslint":"^6.0.0","mocha":"^7.1.1","nyc":"^15.0.1","prettier":"^2.0.2","prettier-plugin-import-sort":"^0.0.4","rollup":"^2.3.2","ts-node":"^8.8.1","typescript":"^3.6.3"},"main":"lib/index.js","module":"es6/index.js","types":"lib/index.d.ts","exports":{"import":"./index.mjs","require":"./lib/index.js"},"dependencies":{"tslib":"^1.11.1"},"gitHead":"80bbe48f9b16d08a44b13e52fc99787b0c295264","bugs":{"url":"https://github.com/DirtyHairy/async-mutex/issues"},"homepage":"https://github.com/DirtyHairy/async-mutex#readme","_id":"async-mutex@0.2.0","_nodeVersion":"13.10.1","_npmVersion":"6.13.7","dist":{"shasum":"03a8accaf5ecc37b80936095038762ff8824013c","size":9715,"noattachment":false,"key":"/async-mutex/-/async-mutex-0.2.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-mutex/download/async-mutex-0.2.0.tgz"},"maintainers":[{"name":"dirtyhairy","email":"cnspeckn@googlemail.com"}],"_npmUser":{"name":"dirtyhairy","email":"cnspeckn@googlemail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-mutex_0.2.0_1586209633198_0.4945852804463342"},"_hasShrinkwrap":false,"publish_time":1586209633364,"_cnpm_publish_time":1586209633364,"_cnpmcore_publish_time":"2021-12-16T10:53:58.943Z"},"0.1.4":{"name":"async-mutex","version":"0.1.4","description":"A mutex for guarding async workflows","scripts":{"prepublish":"tslint src/**/*.ts test/**/*.ts && tsc","pretest":"tslint src/**/*.ts test/**/*.ts && tsc -p tsconfig.test.json","test":"mocha -R spec -u tdd build/test"},"author":{"name":"Christian Speckner","email":"cnspeckn@googlemail.com","url":"https://github.com/DirtyHairy/"},"license":"MIT","repository":{"type":"git","url":"https://github.com/DirtyHairy/async-mutex"},"keywords":["mutex","async"],"devDependencies":{"@types/mocha":"^5.2.7","@types/node":"^12.7.8","mocha":"^6.2.0","tslint":"^5.20.0","typescript":"^3.6.3"},"main":"lib/index.js","types":"lib/index.d.ts","dependencies":{},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2016 Christian Speckner <cnspeckn@googlemail.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"async-mutex@0.1.4","dist":{"shasum":"a47d1eebf584f7dcdd760e3642dc2c58613bef5c","size":4046,"noattachment":false,"key":"/async-mutex/-/async-mutex-0.1.4.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-mutex/download/async-mutex-0.1.4.tgz"},"maintainers":[{"name":"dirtyhairy","email":"cnspeckn@googlemail.com"}],"_npmUser":{"name":"dirtyhairy","email":"cnspeckn@googlemail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-mutex_0.1.4_1569532959348_0.35195007413921675"},"_hasShrinkwrap":false,"publish_time":1569532959498,"_cnpm_publish_time":1569532959498,"_cnpmcore_publish_time":"2021-12-16T10:53:59.172Z"},"0.1.3":{"name":"async-mutex","version":"0.1.3","description":"A mutex for guarding async workflows","scripts":{"prepublish":"tslint src/**/*.ts test/**/*.ts && tsc","pretest":"tslint src/**/*.ts test/**/*.ts && tsc -p tsconfig.test.json","test":"mocha -R spec -u tdd build/test"},"author":{"name":"Christian Speckner","email":"cnspeckn@googlemail.com","url":"https://github.com/DirtyHairy/"},"license":"MIT","repository":{"type":"git","url":"https://github.com/DirtyHairy/async-mutex"},"keywords":["mutex","async"],"devDependencies":{"@types/mocha":"^2.2.41","@types/node":"^8.0.5","mocha":"^3.4.2","tslint":"^5.4.3","typescript":"^2.4.1"},"main":"lib/index.js","types":"lib/index.d.ts","dependencies":{},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2016 Christian Speckner <cnspeckn@googlemail.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"async-mutex@0.1.3","dist":{"shasum":"0aad2112369795ab3f17e33744556d2ecf547566","size":5494,"noattachment":false,"key":"/async-mutex/-/async-mutex-0.1.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-mutex/download/async-mutex-0.1.3.tgz"},"maintainers":[{"name":"dirtyhairy","email":"cnspeckn@googlemail.com"}],"_npmUser":{"name":"dirtyhairy","email":"cnspeckn@googlemail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-mutex-0.1.3.tgz_1504962240194_0.901334943715483"},"directories":{},"publish_time":1504962241134,"_hasShrinkwrap":false,"_cnpm_publish_time":1504962241134,"_cnpmcore_publish_time":"2021-12-16T10:53:59.381Z"},"0.1.2":{"name":"async-mutex","version":"0.1.2","description":"A mutex for guarding async workflows","scripts":{"prepublish":"tslint src/**/*.ts test/**/*.ts && tsc","pretest":"tslint src/**/*.ts test/**/*.ts && tsc -p tsconfig.test.json","test":"mocha -R spec -u tdd build/test"},"author":{"name":"Christian Speckner","email":"cnspeckn@googlemail.com","url":"https://github.com/DirtyHairy/"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/DirtyHairy/async-mutex.git"},"keywords":["mutex","async"],"devDependencies":{"mocha":"~3.4.2","typescript":"~2.4.1"},"main":"lib/index.js","types":"lib/index.d.ts","dependencies":{"@types/mocha":"^2.2.41","@types/node":"^8.0.5","tslint":"^5.4.3"},"gitHead":"499e0f0ffb85cdcfa46c3928216db7f958a90aec","bugs":{"url":"https://github.com/DirtyHairy/async-mutex/issues"},"homepage":"https://github.com/DirtyHairy/async-mutex#readme","_id":"async-mutex@0.1.2","_npmVersion":"5.0.3","_nodeVersion":"8.1.2","_npmUser":{"name":"dirtyhairy","email":"cnspeckn@googlemail.com"},"dist":{"shasum":"f53483356ad470d12c5e7cba8e0aa9850c600840","size":10634,"noattachment":false,"key":"/async-mutex/-/async-mutex-0.1.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-mutex/download/async-mutex-0.1.2.tgz"},"maintainers":[{"name":"dirtyhairy","email":"cnspeckn@googlemail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async-mutex-0.1.2.tgz_1498729623005_0.337429310195148"},"directories":{},"publish_time":1498729623990,"_hasShrinkwrap":false,"_cnpm_publish_time":1498729623990,"_cnpmcore_publish_time":"2021-12-16T10:53:59.764Z"},"0.1.1":{"name":"async-mutex","version":"0.1.1","description":"A mutex for guarding async workflows","scripts":{"prepublish":"tsc","pretest":"typings install && tsc -p tsconfig.test.json","test":"mocha -R spec -u tdd test"},"author":{"name":"Christian Speckner","email":"cnspeckn@googlemail.com","url":"https://github.com/DirtyHairy/"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/DirtyHairy/async-mutex.git"},"keywords":["mutex","async"],"devDependencies":{"mocha":"~3.1.0","typescript":"~2.0.3","typings":"~1.4.0"},"main":"lib/index.js","types":"lib/index.d.ts","gitHead":"a026ac37ebfa908f9a65bc832dbf1fc338b16adf","bugs":{"url":"https://github.com/DirtyHairy/async-mutex/issues"},"homepage":"https://github.com/DirtyHairy/async-mutex#readme","_id":"async-mutex@0.1.1","_shasum":"22fd682c63065ac414f4e358c6afa9eba220cdd9","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.7.0","_npmUser":{"name":"dirtyhairy","email":"cnspeckn@googlemail.com"},"dist":{"shasum":"22fd682c63065ac414f4e358c6afa9eba220cdd9","size":4878,"noattachment":false,"key":"/async-mutex/-/async-mutex-0.1.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-mutex/download/async-mutex-0.1.1.tgz"},"maintainers":[{"name":"dirtyhairy","email":"cnspeckn@googlemail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/async-mutex-0.1.1.tgz_1483537120162_0.3154253074899316"},"directories":{},"publish_time":1483537120693,"_hasShrinkwrap":false,"_cnpm_publish_time":1483537120693,"_cnpmcore_publish_time":"2021-12-16T10:53:59.970Z"},"0.1.0":{"name":"async-mutex","version":"0.1.0","description":"A mutex for guarding async workflows","scripts":{"prepublish":"tsc","pretest":"typings install && tsc -p tsconfig.test.json","test":"mocha -R spec -u tdd test"},"author":{"name":"Christian Speckner","email":"cnspeckn@googlemail.com","url":"https://github.com/DirtyHairy/"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/DirtyHairy/async-mutex.git"},"keywords":["mutex","async"],"devDependencies":{"mocha":"~3.1.0","typescript":"~2.0.3","typings":"~1.4.0"},"main":"lib/index.js","types":"lib/index.d.ts","gitHead":"e7bfd5d9c8f8d1d13f2b37541db0fc99d83961fa","bugs":{"url":"https://github.com/DirtyHairy/async-mutex/issues"},"homepage":"https://github.com/DirtyHairy/async-mutex#readme","_id":"async-mutex@0.1.0","_shasum":"2c3345bed59f04ded64d050a5efd8a20853867d2","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.7.0","_npmUser":{"name":"dirtyhairy","email":"cnspeckn@googlemail.com"},"dist":{"shasum":"2c3345bed59f04ded64d050a5efd8a20853867d2","size":4652,"noattachment":false,"key":"/async-mutex/-/async-mutex-0.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/async-mutex/download/async-mutex-0.1.0.tgz"},"maintainers":[{"name":"dirtyhairy","email":"cnspeckn@googlemail.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/async-mutex-0.1.0.tgz_1476312937924_0.09670562390238047"},"directories":{},"publish_time":1476312938862,"_hasShrinkwrap":false,"_cnpm_publish_time":1476312938862,"_cnpmcore_publish_time":"2021-12-16T10:54:00.213Z"}},"readme":"[![Build status](https://github.com/DirtyHairy/async-mutex/workflows/Build%20and%20Tests/badge.svg)](https://github.com/DirtyHairy/async-mutex/actions?query=workflow%3A%22Build+and+Tests%22)\n[![NPM version](https://badge.fury.io/js/async-mutex.svg)](https://badge.fury.io/js/async-mutex)\n[![Coverage Status](https://coveralls.io/repos/github/DirtyHairy/async-mutex/badge.svg?branch=master)](https://coveralls.io/github/DirtyHairy/async-mutex?branch=master)\n\n# What is it?\n\nThis package implements primitives for synchronizing asynchronous operations in\nJavascript.\n\n## Mutex\n\nThe term \"mutex\" usually refers to a data structure used to synchronize\nconcurrent processes running on different threads. For example, before accessing\na non-threadsafe resource, a thread will lock the mutex. This is guaranteed\nto block the thread until no other thread holds a lock on the mutex and thus\nenforces exclusive access to the resource. Once the operation is complete, the\nthread releases the lock, allowing other threads to acquire a lock and access the\nresource.\n\nWhile Javascript is strictly single-threaded, the asynchronous nature of its\nexecution model allows for race conditions that require similar synchronization\nprimitives. Consider for example a library communicating with a web worker that\nneeds to exchange several subsequent messages with the worker in order to achieve\na task. As these messages are exchanged in an asynchronous manner, it is perfectly\npossible that the library is called again during this process. Depending on the\nway state is handled during the async process, this will lead to race conditions\nthat are hard to fix and even harder to track down.\n\nThis library solves the problem by applying the concept of mutexes to Javascript.\nLocking the mutex will return a promise that resolves once the mutex becomes\navailable. Once the async process is complete (usually taking multiple\nspins of the event loop), a callback supplied to the caller should be called in order\nto release the mutex, allowing the next scheduled worker to execute.\n\n# Semaphore\n\nImagine a situation where you need to control access to several instances of\na shared resource. For example, you might want to distribute images between several\nworker processes that perform transformations, or you might want to create a web\ncrawler that performs a defined number of requests in parallel.\n\nA semaphore is a data structure that is initialized with an arbitrary integer value and that\ncan be locked multiple times.\nAs long as the semaphore value is positive, locking it will return the current value\nand the locking process will continue execution immediately; the semaphore will\nbe decremented upon locking. Releasing the lock will increment the semaphore again.\n\nOnce the semaphore has reached zero, the next process that attempts to acquire a lock\nwill be suspended until another process releases its lock and this increments the semaphore\nagain.\n\nThis library provides a semaphore implementation for Javascript that is similar to the\nmutex implementation described above.\n\n# How to use it?\n\n## Installation\n\nYou can install the library into your project via npm\n\n    npm install async-mutex\n\nThe library is written in TypeScript and will work in any environment that\nsupports ES5, ES6 promises and `Array.isArray`. On ancient browsers,\na shim can be used (e.g. [core-js](https://github.com/zloirock/core-js)).\nNo external typings are required for using this library with\nTypeScript (version >= 2).\n\nStarting with Node 12.16 and 13.7, native ES6 style imports are supported.\n\n**WARNING:** Node 13 versions < 13.2.0 fail to import this package correctly.\nNode 12 and earlier are fine, as are newer versions of Node 13.\n\n## Importing\n\n**CommonJS:**\n```javascript\nvar Mutex = require('async-mutex').Mutex;\nvar Semaphore = require('async-mutex').Semaphore;\nvar withTimeout = require('async-mutex').withTimeout;\n```\n\n**ES6:**\n```javascript\nimport {Mutex, Semaphore, withTimeout} from 'async-mutex';\n```\n\n**TypeScript:**\n```typescript\nimport {Mutex, MutexInterface, Semaphore, SemaphoreInterface, withTimeout} from 'async-mutex';\n```\n\nWith the latest version of Node, native ES6 style imports are supported.\n\n##  Mutex API\n\n### Creating\n\n```typescript\nconst mutex = new Mutex();\n```\n\nCreate a new mutex.\n\n### Synchronized code execution\n\nPromise style:\n```typescript\nmutex\n    .runExclusive(() => {\n        // ...\n    })\n    .then((result) => {\n        // ...\n    });\n```\n\nasync/await:\n```typescript\nawait mutex.runExclusive(async () => {\n    // ...\n});\n```\n\n`runExclusive` schedules the supplied callback to be run once the mutex is unlocked.\nThe function may return a promise. Once the promise is resolved or rejected (or immediately after\nexecution if an immediate value was returned),\nthe mutex is released. `runExclusive` returns a promise that adopts the state of the function result.\n\nThe mutex is released and the result rejected if an exception occurs during execution\nof the callback.\n\n### Manual locking / releasing\n\nPromise style:\n```typescript\nmutex\n    .acquire()\n    .then(function(release) {\n        // ...\n\n        release();\n    });\n```\n\nasync/await:\n```typescript\nconst release = await mutex.acquire();\ntry {\n    // ...\n} finally {\n    release();\n}\n```\n\n`acquire` returns an (ES6) promise that will resolve as soon as the mutex is\navailable. The promise resolves with a function `release` that\nmust be called once the mutex should be released again. The `release` callback\nis idempotent.\n\n**IMPORTANT:** Failure to call `release` will hold the mutex locked and will\nlikely deadlock the application. Make sure to call `release` under all circumstances\nand handle exceptions accordingly.\n\n### Unscoped release\n\nAs an alternative to calling the `release` callback returned by `acquire`, the mutex\ncan be released by calling `release` directly on it:\n\n```typescript\nmutex.release();\n```\n\n### Checking whether the mutex is locked\n\n```typescript\nmutex.isLocked();\n```\n\n### Cancelling pending locks\n\nPending locks can be cancelled by calling `cancel()` on the mutex. This will reject\nall pending locks with `E_CANCELED`:\n\nPromise style:\n```typescript\nimport {E_CANCELED} from 'async-mutex';\n\nmutex\n    .runExclusive(() => {\n        // ...\n    })\n    .then(() => {\n        // ...\n    })\n    .catch(e => {\n        if (e === E_CANCELED) {\n            // ...\n        }\n    });\n```\n\nasync/await:\n```typescript\nimport {E_CANCELED} from 'async-mutex';\n\ntry {\n    await mutex.runExclusive(() => {\n        // ...\n    });\n} catch (e) {\n    if (e === E_CANCELED) {\n        // ...\n    }\n}\n```\n\nThis works with `acquire`, too:\nif `acquire` is used for locking, the resulting promise will reject with `E_CANCELED`.\n\nThe error that is thrown can be customized by passing a different error to the `Mutex`\nconstructor:\n\n```typescript\nconst mutex = new Mutex(new Error('fancy custom error'));\n```\n\nNote that while all pending locks are cancelled, a currently held lock will not be\nrevoked. In consequence, the mutex may not be available even after `cancel()` has been called.\n\n### Waiting until the mutex is available\n\nYou can wait until the mutex is available without locking it by calling `waitForUnlock()`.\nThis will return a promise that resolve once the mutex can be acquired again. This operation\nwill not lock the mutex, and there is no guarantee that the mutex will still be available\nonce an async barrier has been encountered.\n\nPromise style:\n```typescript\nmutex\n    .waitForUnlock()\n    .then(() => {\n        // ...\n    });\n```\n\nAsync/await:\n```typescript\nawait mutex.waitForUnlock();\n// ...\n```\n\n\n##  Semaphore API\n\n### Creating\n\n```typescript\nconst semaphore = new Semaphore(initialValue);\n```\n\nCreates a new semaphore. `initialValue` is an arbitrary integer that defines the\ninitial value of the semaphore.\n\n### Synchronized code execution\n\nPromise style:\n```typescript\nsemaphore\n    .runExclusive(function(value) {\n        // ...\n    })\n    .then(function(result) {\n        // ...\n    });\n```\n\nasync/await:\n```typescript\nawait semaphore.runExclusive(async (value) => {\n    // ...\n});\n```\n\n`runExclusive` schedules the supplied callback to be run once the semaphore is available.\nThe callback will receive the current value of the semaphore as its argument.\nThe function may return a promise. Once the promise is resolved or rejected (or immediately after\nexecution if an immediate value was returned),\nthe semaphore is released. `runExclusive` returns a promise that adopts the state of the function result.\n\nThe semaphore is released and the result rejected if an exception occurs during execution\nof the callback.\n\n`runExclusive` accepts a first optional argument `weight`. Specifying a `weight` will decrement the\nsemaphore by the specified value, and the callback will only be invoked once the semaphore's\nvalue greater or equal to `weight`.\n\n`runExclusive` accepts a second optional argument `priority`. Specifying a greater value for `priority`\ntells the scheduler to run this task before other tasks. `priority` can be any real number. The default\nis zero.\n\n### Manual locking / releasing\n\nPromise style:\n```typescript\nsemaphore\n    .acquire()\n    .then(function([value, release]) {\n        // ...\n\n        release();\n    });\n```\n\nasync/await:\n```typescript\nconst [value, release] = await semaphore.acquire();\ntry {\n    // ...\n} finally {\n    release();\n}\n```\n\n`acquire` returns an (ES6) promise that will resolve as soon as the semaphore is\navailable. The promise resolves to an array with the\nfirst entry being the current value of the semaphore, and the second value a\nfunction that must be called to release the semaphore once the critical operation\nhas completed. The `release` callback is idempotent.\n\n**IMPORTANT:** Failure to call `release` will hold the semaphore locked and will\nlikely deadlock the application. Make sure to call `release` under all circumstances\nand handle exceptions accordingly.\n\n`acquire` accepts a first optional argument `weight`. Specifying a `weight` will decrement the\nsemaphore by the specified value, and the semaphore will only be acquired once its\nvalue is greater or equal to `weight`.\n\n`acquire` accepts a second optional argument `priority`. Specifying a greater value for `priority`\ntells the scheduler to release the semaphore to the caller before other callers. `priority` can be\nany real number. The default is zero.\n\n### Unscoped release\n\nAs an alternative to calling the `release` callback returned by `acquire`, the semaphore\ncan be released by calling `release` directly on it:\n\n```typescript\nsemaphore.release();\n```\n\n`release` accepts an optional argument `weight` and increments the semaphore accordingly.\n\n**IMPORTANT:** Releasing a previously acquired semaphore with the releaser that was\nreturned by acquire will automatically increment the semaphore by the correct weight. If\nyou release by calling the unscoped `release` you have to supply the correct weight\nyourself!\n\n### Getting the semaphore value\n\n```typescript\nsemaphore.getValue()\n```\n\n### Checking whether the semaphore is locked\n\n```typescript\nsemaphore.isLocked();\n```\n\nThe semaphore is considered to be locked if its value is either zero or negative.\n\n### Setting the semaphore value\n\nThe value of a semaphore can be set directly to a desired value. A positive value will\ncause the semaphore to schedule any pending waiters accordingly.\n\n```typescript\nsemaphore.setValue();\n```\n\n### Cancelling pending locks\n\nPending locks can be cancelled by calling `cancel()` on the semaphore. This will reject\nall pending locks with `E_CANCELED`:\n\nPromise style:\n```typescript\nimport {E_CANCELED} from 'async-mutex';\n\nsemaphore\n    .runExclusive(() => {\n        // ...\n    })\n    .then(() => {\n        // ...\n    })\n    .catch(e => {\n        if (e === E_CANCELED) {\n            // ...\n        }\n    });\n```\n\nasync/await:\n```typescript\nimport {E_CANCELED} from 'async-mutex';\n\ntry {\n    await semaphore.runExclusive(() => {\n        // ...\n    });\n} catch (e) {\n    if (e === E_CANCELED) {\n        // ...\n    }\n}\n```\n\nThis works with `acquire`, too:\nif `acquire` is used for locking, the resulting promise will reject with `E_CANCELED`.\n\nThe error that is thrown can be customized by passing a different error to the `Semaphore`\nconstructor:\n\n```typescript\nconst semaphore = new Semaphore(2, new Error('fancy custom error'));\n```\n\nNote that while all pending locks are cancelled, any currently held locks will not be\nrevoked. In consequence, the semaphore may not be available even after `cancel()` has been called.\n\n### Waiting until the semaphore is available\n\nYou can wait until the semaphore is available without locking it by calling `waitForUnlock()`.\nThis will return a promise that resolve once the semaphore can be acquired again. This operation\nwill not lock the semaphore, and there is no guarantee that the semaphore will still be available\nonce an async barrier has been encountered.\n\nPromise style:\n```typescript\nsemaphore\n    .waitForUnlock()\n    .then(() => {\n        // ...\n    });\n```\n\nAsync/await:\n```typescript\nawait semaphore.waitForUnlock();\n// ...\n```\n\n`waitForUnlock` accepts optional arguments `weight` and `priority`. The promise will resolve as soon\nas it is possible to `acquire` the semaphore with the given weight and priority. Scheduled tasks with\nthe greatest `priority` values execute first.\n\n\n## Limiting the time waiting for a mutex or semaphore to become available\n\nSometimes it is desirable to limit the time a program waits for a mutex or\nsemaphore to become available. The `withTimeout` decorator can be applied\nto both semaphores and mutexes and changes the behavior of `acquire` and\n`runExclusive` accordingly.\n\n```typescript\nimport {withTimeout, E_TIMEOUT} from 'async-mutex';\n\nconst mutexWithTimeout = withTimeout(new Mutex(), 100);\nconst semaphoreWithTimeout = withTimeout(new Semaphore(5), 100);\n```\n\nThe API of the decorated mutex or semaphore is unchanged.\n\nThe second argument of `withTimeout` is the timeout in milliseconds. After the\ntimeout is exceeded, the promise returned by `acquire` and `runExclusive` will\nreject with `E_TIMEOUT`. The latter will not run the provided callback in case\nof an timeout.\n\nThe third argument of `withTimeout` is optional and can be used to\ncustomize the error with which the promise is rejected.\n\n```typescript\nconst mutexWithTimeout = withTimeout(new Mutex(), 100, new Error('new fancy error'));\nconst semaphoreWithTimeout = withTimeout(new Semaphore(5), 100, new Error('new fancy error'));\n```\n\n### Failing early if the mutex or semaphore is not available\n\nA shortcut exists for the case where you do not want to wait for a lock to\nbe available at all. The `tryAcquire` decorator can be applied to both mutexes\nand semaphores and changes the behavior of `acquire` and `runExclusive` to\nimmediately throw `E_ALREADY_LOCKED` if the mutex is not available.\n\nPromise style:\n```typescript\nimport {tryAcquire, E_ALREADY_LOCKED} from 'async-mutex';\n\ntryAcquire(semaphoreOrMutex)\n    .runExclusive(() => {\n        // ...\n    })\n    .then(() => {\n        // ...\n    })\n    .catch(e => {\n        if (e === E_ALREADY_LOCKED) {\n            // ...\n        }\n    });\n```\n\nasync/await:\n```typescript\nimport {tryAcquire, E_ALREADY_LOCKED} from 'async-mutex';\n\ntry {\n    await tryAcquire(semaphoreOrMutex).runExclusive(() => {\n        // ...\n    });\n} catch (e) {\n    if (e === E_ALREADY_LOCKED) {\n        // ...\n    }\n}\n```\n\nAgain, the error can be customized by providing a custom error as second argument to\n`tryAcquire`.\n\n```typescript\ntryAcquire(semaphoreOrMutex, new Error('new fancy error'))\n    .runExclusive(() => {\n        // ...\n    });\n```\n# License\n\nFeel free to use this library under the conditions of the MIT license.\n","_attachments":{},"homepage":"https://github.com/DirtyHairy/async-mutex#readme","bugs":{"url":"https://github.com/DirtyHairy/async-mutex/issues"},"license":"MIT"}