{"_id":"mutexify","_rev":"1787671","name":"mutexify","description":"mutex lock for javascript","dist-tags":{"latest":"1.4.0"},"maintainers":[{"name":"mafintosh","email":""}],"time":{"modified":"2021-11-29T11:56:31.000Z","created":"2014-11-10T18:57:38.639Z","1.4.0":"2021-11-29T11:50:52.367Z","1.3.1":"2020-09-01T13:03:53.449Z","1.3.0":"2020-04-29T16:16:45.702Z","1.2.0":"2017-08-10T06:41:41.749Z","1.1.0":"2015-05-14T20:29:37.134Z","1.0.1":"2014-11-10T19:05:10.087Z","1.0.0":"2014-11-10T18:57:38.639Z"},"users":{"matteo.collina":true,"djblue":true,"timothy_vann":true},"author":{"name":"Mathias Buus","url":"@mafintosh"},"repository":{"type":"git","url":"git+https://github.com/mafintosh/mutexify.git"},"versions":{"1.4.0":{"name":"mutexify","version":"1.4.0","description":"mutex lock for javascript","main":"index.js","dependencies":{"queue-tick":"^1.0.0"},"devDependencies":{"standard":"^14.3.3","tape":"^3.0.2"},"scripts":{"test":"tape test.js","posttest":"npm run lint","lint":"standard"},"repository":{"type":"git","url":"git+https://github.com/mafintosh/mutexify.git"},"author":{"name":"Mathias Buus","url":"@mafintosh"},"license":"MIT","bugs":{"url":"https://github.com/mafintosh/mutexify/issues"},"keywords":["mutex","lock"],"homepage":"https://github.com/mafintosh/mutexify","gitHead":"2d3dff5380ac9fa2efd6e61767ba3e228586a23c","_id":"mutexify@1.4.0","_nodeVersion":"16.8.0","_npmVersion":"6.14.15","dist":{"shasum":"b7f4ac0273c81824b840887c6a6e0bfab14bbe94","size":2567,"noattachment":false,"key":"/mutexify/-/mutexify-1.4.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/mutexify/download/mutexify-1.4.0.tgz"},"_npmUser":{"name":"mafintosh","email":"mathiasbuus@gmail.com"},"directories":{},"maintainers":[{"name":"mafintosh","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/mutexify_1.4.0_1638186652244_0.3511008575609731"},"_hasShrinkwrap":false,"publish_time":1638186652367,"_cnpm_publish_time":1638186652367},"1.3.1":{"name":"mutexify","version":"1.3.1","description":"mutex lock for javascript","main":"index.js","dependencies":{},"devDependencies":{"standard":"^14.3.3","tape":"^3.0.2"},"scripts":{"test":"tape test.js","posttest":"npm run lint","lint":"standard"},"repository":{"type":"git","url":"git+https://github.com/mafintosh/mutexify.git"},"author":{"name":"Mathias Buus","url":"@mafintosh"},"license":"MIT","bugs":{"url":"https://github.com/mafintosh/mutexify/issues"},"keywords":["mutex","lock"],"homepage":"https://github.com/mafintosh/mutexify","gitHead":"15fbcd35d375b33741deee2ef7ed68fcdae75079","_id":"mutexify@1.3.1","_nodeVersion":"12.17.0","_npmVersion":"6.14.4","dist":{"shasum":"634fa5092d8c72639fffa0f663f2716fcba7061b","size":2530,"noattachment":false,"key":"/mutexify/-/mutexify-1.3.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/mutexify/download/mutexify-1.3.1.tgz"},"maintainers":[{"name":"mafintosh","email":""}],"_npmUser":{"name":"mafintosh","email":"mathiasbuus@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/mutexify_1.3.1_1598965433360_0.7643261549903058"},"_hasShrinkwrap":false,"publish_time":1598965433449,"_cnpm_publish_time":1598965433449},"1.3.0":{"name":"mutexify","version":"1.3.0","description":"mutex lock for javascript","main":"index.js","dependencies":{},"devDependencies":{"standard":"^14.3.3","tape":"^3.0.2"},"scripts":{"test":"tape test.js","posttest":"npm run lint","lint":"standard"},"repository":{"type":"git","url":"git+https://github.com/mafintosh/mutexify.git"},"author":{"name":"Mathias Buus","url":"@mafintosh"},"license":"MIT","bugs":{"url":"https://github.com/mafintosh/mutexify/issues"},"keywords":["mutex","lock"],"homepage":"https://github.com/mafintosh/mutexify","gitHead":"f0fa7a82c4e2c2b30ad3fb7ce7ef79546f45ec25","_id":"mutexify@1.3.0","_nodeVersion":"12.16.2","_npmVersion":"6.14.4","dist":{"shasum":"b32bee9319050963cf6b5d5bce7fbd6ea08ab609","size":2540,"noattachment":false,"key":"/mutexify/-/mutexify-1.3.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/mutexify/download/mutexify-1.3.0.tgz"},"maintainers":[{"name":"mafintosh","email":""}],"_npmUser":{"name":"mafintosh","email":"mathiasbuus@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/mutexify_1.3.0_1588177005553_0.6778894536499365"},"_hasShrinkwrap":false,"publish_time":1588177005702,"_cnpm_publish_time":1588177005702},"1.2.0":{"name":"mutexify","version":"1.2.0","description":"mutex lock for javascript","main":"index.js","dependencies":{},"devDependencies":{"tape":"^3.0.2"},"scripts":{"test":"tape test.js"},"repository":{"type":"git","url":"git+https://github.com/mafintosh/mutexify.git"},"author":{"name":"Mathias Buus","url":"@mafintosh"},"license":"MIT","bugs":{"url":"https://github.com/mafintosh/mutexify/issues"},"keywords":["mutex","lock"],"homepage":"https://github.com/mafintosh/mutexify","gitHead":"9e157b322806fdd8c52b0ecefdf3d8ad741b0575","_id":"mutexify@1.2.0","_npmVersion":"5.3.0","_nodeVersion":"8.2.1","_npmUser":{"name":"mafintosh","email":"mathiasbuus@gmail.com"},"dist":{"shasum":"45597975a2b035f56dcf61ff15cc8d73c28e7639","size":2299,"noattachment":false,"key":"/mutexify/-/mutexify-1.2.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/mutexify/download/mutexify-1.2.0.tgz"},"maintainers":[{"name":"mafintosh","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/mutexify-1.2.0.tgz_1502347301681_0.04014034825377166"},"directories":{},"publish_time":1502347301749,"_hasShrinkwrap":false,"_cnpm_publish_time":1502347301749},"1.1.0":{"name":"mutexify","version":"1.1.0","description":"mutex lock for javascript","main":"index.js","dependencies":{},"devDependencies":{"tape":"^3.0.2"},"scripts":{"test":"tape test.js"},"repository":{"type":"git","url":"https://github.com/mafintosh/mutexify.git"},"author":{"name":"Mathias Buus","url":"@mafintosh"},"license":"MIT","bugs":{"url":"https://github.com/mafintosh/mutexify/issues"},"keywords":["mutex","lock"],"homepage":"https://github.com/mafintosh/mutexify","gitHead":"e2158d5c6c16c885d17d9062cea05d0dad682d31","_id":"mutexify@1.1.0","_shasum":"bbe017743e544227ee58034cd10f159921f1844d","_from":".","_npmVersion":"2.9.0","_nodeVersion":"2.0.1","_npmUser":{"name":"mafintosh","email":"mathiasbuus@gmail.com"},"maintainers":[{"name":"mafintosh","email":""}],"dist":{"shasum":"bbe017743e544227ee58034cd10f159921f1844d","size":2198,"noattachment":false,"key":"/mutexify/-/mutexify-1.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/mutexify/download/mutexify-1.1.0.tgz"},"directories":{},"publish_time":1431635377134,"_cnpm_publish_time":1431635377134,"_hasShrinkwrap":false},"1.0.1":{"name":"mutexify","version":"1.0.1","description":"mutex lock for javascript","main":"index.js","dependencies":{},"devDependencies":{"tape":"^3.0.2"},"scripts":{"test":"tape test.js"},"repository":{"type":"git","url":"https://github.com/mafintosh/mutexify.git"},"author":{"name":"Mathias Buus","url":"@mafintosh"},"license":"MIT","bugs":{"url":"https://github.com/mafintosh/mutexify/issues"},"keywords":["mutex","lock"],"homepage":"https://github.com/mafintosh/mutexify","gitHead":"fb259d8981abc4f56cf7f81e10ef3259e4bafc79","_id":"mutexify@1.0.1","_shasum":"9880206795d89e75efc1bcb4b4f52ebbd796e5e7","_from":".","_npmVersion":"2.1.7","_nodeVersion":"0.10.33","_npmUser":{"name":"mafintosh","email":"mathiasbuus@gmail.com"},"maintainers":[{"name":"mafintosh","email":""}],"dist":{"shasum":"9880206795d89e75efc1bcb4b4f52ebbd796e5e7","size":2037,"noattachment":false,"key":"/mutexify/-/mutexify-1.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/mutexify/download/mutexify-1.0.1.tgz"},"directories":{},"publish_time":1415646310087,"_cnpm_publish_time":1415646310087,"_hasShrinkwrap":false},"1.0.0":{"name":"mutexify","version":"1.0.0","description":"mutex lock for javascript","main":"index.js","dependencies":{},"devDependencies":{"tape":"^3.0.2"},"scripts":{"test":"tape test.js"},"repository":{"type":"git","url":"https://github.com/mafintosh/mutexify.git"},"author":{"name":"Mathias Buus","url":"@mafintosh"},"license":"MIT","bugs":{"url":"https://github.com/mafintosh/mutexify/issues"},"keywords":["mutex","lock"],"homepage":"https://github.com/mafintosh/mutexify","gitHead":"2496a3bb4154831760e6357567b8453882ae0808","_id":"mutexify@1.0.0","_shasum":"dfd0f58232bb977462d0db278061f8202b93b595","_from":".","_npmVersion":"2.1.7","_nodeVersion":"0.10.33","_npmUser":{"name":"mafintosh","email":"mathiasbuus@gmail.com"},"maintainers":[{"name":"mafintosh","email":""}],"dist":{"shasum":"dfd0f58232bb977462d0db278061f8202b93b595","size":1910,"noattachment":false,"key":"/mutexify/-/mutexify-1.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/mutexify/download/mutexify-1.0.0.tgz"},"directories":{},"publish_time":1415645858639,"_cnpm_publish_time":1415645858639,"_hasShrinkwrap":false}},"readme":"# mutexify\n\nBike shed mutex lock implementation in node.js\n\n```\nnpm install mutexify\n```\n\n[![build status](http://img.shields.io/travis/mafintosh/mutexify.svg?style=flat)](http://travis-ci.org/mafintosh/mutexify)\n\nHasn't this been done before? Yes, but the specific semantics of this made some of my code simpler.\n\n## Usage\n\n\n``` js\nvar mutexify = require('mutexify')\nvar lock = mutexify()\n\nlock(function(release) {\n  console.log('i am now locked')\n  setTimeout(function() {\n    release()\n  }, 1000)\n})\n\nlock(function(release) {\n  console.log('1 second later')\n  release()\n})\n```\n\nA common pattern is to call a callback after you release the lock.\nTo do this in a one-liner pass the callback and the value to `release(cb, err, value)`\n\n``` js\nvar write = function(data, cb) {\n  lock(function(release) {\n    fs.writeFile('locked-file.txt', data, release.bind(null, cb))\n  })\n}\n```\n\n`mutexify` guarantees that the order that a mutex was requested in is the order that access will be given.\n\nYou can read the lock's current state on the `lock.locked` property.\n\n### Usage with promises\n\n`mutexify` provides a Promise-based alternative.\n\n```js\nconst mutexify = require('mutexify/promise')\n\n;(async () => {\n  var lock = mutexify()\n\n  var release = await lock()\n  console.log('i am now locked')\n  setTimeout(function () {\n    release()\n  }, 1000)\n\n  release = await lock()\n  console.log('1 second later')\n  release()\n})()\n```\n\n## License\n\nMIT\n","_attachments":{},"homepage":"https://github.com/mafintosh/mutexify","bugs":{"url":"https://github.com/mafintosh/mutexify/issues"},"license":"MIT"}