{"_id":"2pl","_rev":"10-e9946ffb7a8387361c381d67c7410ef6","name":"2pl","time":{"modified":"2022-06-12T14:07:01.918Z","created":"2015-10-19T05:08:50.924Z","0.0.1":"2015-10-19T05:08:50.924Z","0.0.2":"2015-10-23T07:57:35.169Z","1.0.0":"2015-10-30T09:34:35.133Z","1.1.0":"2015-11-02T07:30:16.913Z","1.1.1":"2015-11-04T05:27:15.449Z","1.2.0":"2015-12-10T07:32:33.545Z","1.2.1":"2016-07-01T17:03:50.087Z"},"maintainers":[{"name":"cshum","email":"adrian@cshum.com"}],"dist-tags":{"latest":"1.2.1"},"description":"Two-phase locking for asynchronous JavaScript executions.","readme":"# 2PL\n\nIn-memory two-phase locking for asynchronous JavaScript functions.\n\n[![Build Status](https://travis-ci.org/cshum/2pl.svg)](https://travis-ci.org/cshum/2pl)\n\n```\nnpm install 2pl\n```\n\nMultiple lock keys can be acquired during the lifetime of a lock instance,\nwhere release is done in one operation.\n\n```js\nvar lock = require('2pl')\nvar shared = {} // in-memory lock object shared across instances\n\nvar l = lock(shared, { ttl: 5000 }) // new instance, 5 seconds timeout\n\nl.acquire('a', function (err) {\n  // a is locked\n  l.acquire('b', function (err) {\n    // b is locked\n    l.release(function (err) {\n      // a and b are released\n    })\n  })\n})\n\n```\n\n## API\n\n### var l = lock(shared, [options])\n\nCreate a new instance with `shared` object holding the in-memory locks.\nAccepts following options:\n\n* `ttl`: Time to live (milliseconds) of lock instance for liveness. Defaults to 20 seconds.\n\n### l.acquire(key, [callback])\n\nAttempts to acquire a lock, given a string `key`.\nAccepts an optional callback function, invoked on success or error.\n\n### l.extend(ttl, [callback])\n\nAttempts to extend `ttl` of lock in milliseconds.\nAccepts an optional callback function, invoked on success or error.\n\n### l.release([callback])\n\nAttempts to release lock.\nAccepts an optional callback function, invoked on success or error.\n\n### var createLock = lock.creator([options])\n\nReturns a factory function `createLock([options])` that create instances under the same shared lock object.\n\n```js\nvar createLock = lock.creator({ ttl: 5000 })\n\nvar l1 = createLock() // ttl 5000\nvar l2 = createLock({ ttl: 500 }) // ttl 500\n```\n\n## License\n\nMIT\n","versions":{"0.0.2":{"name":"2pl","version":"0.0.2","description":"WORK IN PROGRESS","author":{"name":"Adrian C Shum","email":"adrian@cshum.com"},"scripts":{"test":"standard && node test.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/cshum/2pl.git"},"license":"MIT","dependencies":{"async-depth-first":"^1.0.1","sema":"^1.0.0","xtend":"^4.0.0"},"devDependencies":{"standard":"^5.1.0","tape":"^3.0.3"},"gitHead":"53944978e2221b143c2123ef762b77e5aca413dc","bugs":{"url":"https://github.com/cshum/2pl/issues"},"homepage":"https://github.com/cshum/2pl#readme","_id":"2pl@0.0.2","_shasum":"201ef4250cc6ec888e4c07ee9470dd218a749d89","_from":".","_npmVersion":"2.12.1","_nodeVersion":"0.12.6","_npmUser":{"name":"cshum","email":"adrian@cshum.com"},"maintainers":[{"name":"cshum","email":"adrian@cshum.com"}],"dist":{"shasum":"201ef4250cc6ec888e4c07ee9470dd218a749d89","tarball":"https://registry.npmjs.org/2pl/-/2pl-0.0.2.tgz","integrity":"sha512-j3Gviga5rH1z1O4gikAL4jPKLZmCQBl3LjrZ1H8FKKSd1oeFHyx1AkrRm8fXeVGA6EYscMlacljbc3L3zo2JXQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIELRFxU3fO75BIKYq17av6SUREqmK5rHTWsitZIN6VQjAiBpimGRyX82vLIlOWToWOgZWYex6IQMbkUuhNd7zY7J0g=="}]}},"1.0.0":{"name":"2pl","version":"1.0.0","description":"Two-phase locking for asynchronous JavaScript executions.","author":{"name":"Adrian C Shum","email":"adrian@cshum.com"},"scripts":{"test":"standard && node test.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/cshum/2pl.git"},"license":"MIT","dependencies":{"sema":"^1.0.0","xtend":"^4.0.0"},"devDependencies":{"standard":"^5.1.0","tape":"^3.0.3"},"gitHead":"8676727d3762d328b16976a32b4502c5c1e5f5cb","bugs":{"url":"https://github.com/cshum/2pl/issues"},"homepage":"https://github.com/cshum/2pl#readme","_id":"2pl@1.0.0","_shasum":"b69eeb3dc86159891fda9e9d6827c0b11a264177","_from":".","_npmVersion":"2.12.1","_nodeVersion":"0.12.6","_npmUser":{"name":"cshum","email":"adrian@cshum.com"},"maintainers":[{"name":"cshum","email":"adrian@cshum.com"}],"dist":{"shasum":"b69eeb3dc86159891fda9e9d6827c0b11a264177","tarball":"https://registry.npmjs.org/2pl/-/2pl-1.0.0.tgz","integrity":"sha512-kd0KHNpJP5zeHBHYmThXv2oqLlQXflZ1yx30pGLUliRNcXU2Q0AHOpE8kwLQHziqsDfAjbiCHgq48OCFDeeVPA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD6Je11k5C4qJc6a8nl85KwVwYNATqIfj0tvXOFZaBHugIgGBwH5QLMCXNpBDovoKkK38toiVYijlZKeEgKv0ROizI="}]}},"1.1.0":{"name":"2pl","version":"1.1.0","description":"Two-phase locking for asynchronous JavaScript executions.","author":{"name":"Adrian C Shum","email":"adrian@cshum.com"},"scripts":{"test":"standard && node test.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/cshum/2pl.git"},"license":"MIT","dependencies":{"sema":"^1.0.0","xtend":"^4.0.0"},"devDependencies":{"standard":"^5.1.0","tape":"^3.0.3"},"gitHead":"e336bd14aedd07be90acdea5d43ea109d2cde9d8","bugs":{"url":"https://github.com/cshum/2pl/issues"},"homepage":"https://github.com/cshum/2pl#readme","_id":"2pl@1.1.0","_shasum":"9e8d57aa1c853abdb8547d1eee0898378a79b7ec","_from":".","_npmVersion":"2.12.1","_nodeVersion":"0.12.6","_npmUser":{"name":"cshum","email":"adrian@cshum.com"},"maintainers":[{"name":"cshum","email":"adrian@cshum.com"}],"dist":{"shasum":"9e8d57aa1c853abdb8547d1eee0898378a79b7ec","tarball":"https://registry.npmjs.org/2pl/-/2pl-1.1.0.tgz","integrity":"sha512-kiviGfqqqUUvwP+eBXOd2f3cJ4s5pPK+pZCHkNJQrfXIt+dlw50Njuiws3hmbjVKmh60m4NFK7c7N/SuSsc2Tw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDSmQ3Vfud1DYbULRE6KuivFIg723BHGj5m4zc0so814AiEAiqyoUEycwQSSe6HhuFBiZwDDDtUBRE+/C4KBlMxAuXI="}]}},"1.1.1":{"name":"2pl","version":"1.1.1","description":"Two-phase locking for asynchronous JavaScript executions.","author":{"name":"Adrian C Shum","email":"adrian@cshum.com"},"scripts":{"test":"standard && node test.js"},"repository":{"type":"git","url":"git@github.com:cshum/2pl.git"},"license":"MIT","dependencies":{"sema":"^1.0.0","xtend":"^4.0.0"},"devDependencies":{"standard":"^5.1.0","tape":"^3.0.3"},"gitHead":"3cb3ff8dfcdab0261ed49f0d0dbe70b2690390a6","bugs":{"url":"https://github.com/cshum/2pl/issues"},"homepage":"https://github.com/cshum/2pl","_id":"2pl@1.1.1","_shasum":"38e2256e9201a48b80b53afa23cbdbad76423d0a","_from":".","_npmVersion":"2.5.1","_nodeVersion":"0.12.0","_npmUser":{"name":"cshum","email":"adrian@cshum.com"},"maintainers":[{"name":"cshum","email":"adrian@cshum.com"}],"dist":{"shasum":"38e2256e9201a48b80b53afa23cbdbad76423d0a","tarball":"https://registry.npmjs.org/2pl/-/2pl-1.1.1.tgz","integrity":"sha512-mExeviXXMZduf3YUjy5ee4O1qxPjNadiYbj8YVRTlJiMggYR/rHKPHyOFWCc0NtxU+P6rE51WpRFfFgOqC9LpA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHTwCJHNzwv4NynHOMAYE2g1sV7zFtND+kaRAU97ljy/AiEA6l+y1fu2ujq18Nj3D/0E8IkNbl7jq/3XnCPqTcO+znE="}]}},"1.2.0":{"name":"2pl","version":"1.2.0","description":"Two-phase locking for asynchronous JavaScript executions.","author":{"name":"Adrian C Shum","email":"adrian@cshum.com"},"scripts":{"test":"standard && node test.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/cshum/2pl.git"},"license":"MIT","dependencies":{"ginga":"^2.1.3","sema":"^1.0.0","xtend":"^4.0.0"},"devDependencies":{"standard":"^5.1.0","tape":"^3.0.3"},"gitHead":"3ed5deccee0db81f7feb992f9356f30188877a4b","bugs":{"url":"https://github.com/cshum/2pl/issues"},"homepage":"https://github.com/cshum/2pl#readme","_id":"2pl@1.2.0","_shasum":"0486824fc5ebe010867d4c29e46c130fc8875e71","_from":".","_npmVersion":"3.3.9","_nodeVersion":"5.0.0","_npmUser":{"name":"cshum","email":"adrian@cshum.com"},"dist":{"shasum":"0486824fc5ebe010867d4c29e46c130fc8875e71","tarball":"https://registry.npmjs.org/2pl/-/2pl-1.2.0.tgz","integrity":"sha512-H3nsK2qgvEEhHQGfPfgyTPaCTcrQZSINtuJEwti0AWNMaVWlZ3iiDkE/ye8k9wZHVwjYMniIKtx0ZM2tpeDugw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFC0eCXIBQLH5DBc1fyeaWs9gxTDyGKtIGTHdmIy6ODTAiAXXfmV/N7z+Vbm2WMtM1NU0UsWFg4TrhNg1ZQFQnwx/w=="}]},"maintainers":[{"name":"cshum","email":"adrian@cshum.com"}]},"1.2.1":{"name":"2pl","version":"1.2.1","description":"Two-phase locking for asynchronous JavaScript executions.","author":{"name":"Adrian C Shum","email":"adrian@cshum.com"},"scripts":{"test":"standard && node test.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/cshum/2pl.git"},"license":"MIT","dependencies":{"sema":"^2.0.3","xtend":"^4.0.1"},"devDependencies":{"standard":"^7.1.2","tape":"^4.6.0"},"gitHead":"2ce17f2b77ca80cecbd88567e1592486d11898c2","bugs":{"url":"https://github.com/cshum/2pl/issues"},"homepage":"https://github.com/cshum/2pl#readme","_id":"2pl@1.2.1","_shasum":"134ebaba34046c734de717f6d832be05544a0618","_from":".","_npmVersion":"3.9.5","_nodeVersion":"6.2.2","_npmUser":{"name":"cshum","email":"adrian@cshum.com"},"maintainers":[{"name":"cshum","email":"adrian@cshum.com"}],"dist":{"shasum":"134ebaba34046c734de717f6d832be05544a0618","tarball":"https://registry.npmjs.org/2pl/-/2pl-1.2.1.tgz","integrity":"sha512-DJYbOxGyXwVuH/ssHyaBqrAxwP1qSpUU9PU02fA9EPJ0iHnySb+4PhKyZjBSgjDKQsZzm6mF7AsDKvPWXGTHwA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD1BpEKgV2cmDFCLl9i917afOLsE5iemgjEJeQUCyyJMAIhAIxpVb66e34Uc/Ll7WNe02XDXMnVOC3O/7TUSjLjlyp5"}]},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/2pl-1.2.1.tgz_1467392626536_0.06396424258127809"}}},"homepage":"https://github.com/cshum/2pl#readme","repository":{"type":"git","url":"git+ssh://git@github.com/cshum/2pl.git"},"author":{"name":"Adrian C Shum","email":"adrian@cshum.com"},"bugs":{"url":"https://github.com/cshum/2pl/issues"},"license":"MIT","readmeFilename":"README.md"}