{"_id":"p-lock","_rev":"7-244abaf35581a494b1cf60770d83b96d","name":"p-lock","dist-tags":{"latest":"4.0.1"},"versions":{"1.0.0":{"name":"p-lock","version":"1.0.0","keywords":["promise","lock","simple","async"],"author":{"url":"https://connorwhite.org","name":"Connor White","email":"connor.bcw@gmail.com"},"license":"MIT","_id":"p-lock@1.0.0","maintainers":[{"name":"bconnorwhite","email":"connor.bcw@gmail.com"}],"homepage":"https://connorwhite.org/github/p-lock","dist":{"shasum":"8a8bf8b587d45da4ed6dc3c136724bae963aa024","tarball":"https://registry.npmjs.org/p-lock/-/p-lock-1.0.0.tgz","fileCount":7,"integrity":"sha512-TfEbUJiaV+AtnNEZM3wKlSpEf3/lxFWouSvUAj8KL+qHYvQEkj1/iCmvijvmSWQRl36jWZe8xLWGIvwtELibhw==","signatures":[{"sig":"MEUCIQC8GPa4FPQh4cf4r+gCLG9147Qkgih9Aq6hpkjIkYiDkQIgOiZfxDu5Xd0aWaDfwfBEwy1dg1jrvqhhHu8F2V9ij14=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":3654,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJga7kzCRA9TVsSAnZWagAA8okP/RlO5P3bam099EjM50MW\n+JogMulhMPD02bmuhviGlvY2JNTH/FpCh3vJ/qRPfYK4gZ2Rfh0ZV3IxVTZf\n56nEvkZHmnvOFX8Zgm5jr2dfTfwj3ACvhGcqNFR6H/4W7ZURYHrFc/kpw1vZ\nmZz3vhPA47OYVl9lVsR9lKYiWShBr2unSndbISOhVPXETT82aH0bjIpaFPeY\nsLEGrrBoe/TPuHmynwaY402BtW/2iDKwW3rxTCpXgsmI7Xdsi7Zm0y0R0HDH\nezqnWUGQ4FS6q3xmSk0n4YKU7IYrXarBJxX/QMgKoU3jve3DjOtp61yIqrfK\njlsGmIzfGBQkUA1324TWRhwtYBeu/nDfNUFIsg/SOnWzi/Ax7DWFkxlj3dYh\nabcv/9aHSe4zHxrod0LvMWZ3K8PsdHVyPqPNzxnTmALm8tT+uTYKHZFYCb7t\np9rULP4qzjHzrbS8b2vPsdaX4RGcDrFnnt5/SJZokmFrIRIf4Yk0uKvoJTxr\na7kMDf/JThvvdnq22i9rhhTWqFZ1NsadvQPGmomym1FSN9JjeF0MQPS6+2hv\nF0X1ilBNtFcqFtB4LERb3BBt+XBt0o2Jvzu68y938tGuRacxGNk8GmrZEWN3\nLVprma5/ItR9ff8HAIxbpTuWMva+ZCdmJ4O9gkL/qhYtNOB84srKdkHOyXNK\nffV5\r\n=xOAb\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/index.js","husky":{"hooks":{"commit-msg":"bob lint commit"}},"private":false,"scripts":{"lint":"bob lint","test":"bob test","build":"bob build","commit":"bob commit","release":"bob publish"},"_npmUser":{"name":"bconnorwhite","email":"connor.bcw@gmail.com"},"repository":{"url":"git+https://github.com/bconnorwhite/p-lock.git","type":"git"},"description":"Simple promise lock","directories":{},"eslintConfig":{"extends":"eslint-config-bob"},"_hasShrinkwrap":false,"devDependencies":{"@bconnorwhite/bob":"^2.9.4"},"npmpackagejsonlint":{"extends":"npm-package-json-lint-config-bob"},"_npmOperationalInternal":{"tmp":"tmp/p-lock_1.0.0_1617672499365_0.9231049250337451","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"p-lock","version":"2.0.0","keywords":["promise","lock","simple","async"],"author":{"url":"https://connorwhite.org","name":"Connor White","email":"connor.bcw@gmail.com"},"license":"MIT","_id":"p-lock@2.0.0","maintainers":[{"name":"bconnorwhite","email":"connor.bcw@gmail.com"}],"homepage":"https://connorwhite.org/github/p-lock","dist":{"shasum":"04bf81ce040f9669cbb4eab297d52ee75a8aa32c","tarball":"https://registry.npmjs.org/p-lock/-/p-lock-2.0.0.tgz","fileCount":7,"integrity":"sha512-suad0a3DcVDYFenGxiTksqLKXnfwMsL677qfbHJKajeUe1PFHQ/TEqsszydwCL1P5lqWDIk+mmhXsaqQegFHlw==","signatures":[{"sig":"MEQCIBUZ5DphKzo9cBVBME/dwaTEFv4ozU5vir/HjrDwxmQIAiBkI9QN00PyVqY4u6yckrVe3jnIVZRGuuxvtspg9YKfNw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":4108,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJga8SwCRA9TVsSAnZWagAAt+gP/2q49n1u6i07ZrKIfETZ\nG9/tqJl+BnKPY3C941HyzksYFer1fEBk6cH9dFeR/ocVsV4+bMEVxKDEIFzC\nKCKoXUT3difklmPSxQVqCWvoC5PapCZgidMN5chsy8gZ8gOWmvJJnSmtNMI9\nJPw4tEEkz52ccx/mM5b/6MLL3DsFhzMnS6TkKtwX00pbBw2Etp4hjvWwwEFT\nPmBt43ALpSOe7BwTt4OUfpucrgX1X1ntJ3eEnz4wX8FVlCS4Rm/pUe2SBxF6\nGDrcvp+87Ch7u4IsBaG8xko9tVCrRkWpx12i3jMmcbwuFF93LhzGD4vw83ya\nZV2MTBOH2xXyoMe8NcZSbt1sSZkkSHuqunqURNkbAp/tWPqlvc5Ughd+yxjU\n39yFrc9X9MYOhLjz6ryN368rxh3nw5gDtF1IpFl5sizki/2AjMG1DFDPqp5f\n06wfyoF3Aj4DbEJio/3K2D2VVZ0VO3hszIMSFbzq3oyOHZJK1cqzVL4Fvxua\n5SBqLPjgCG2rvWdtKcU9qVMLUjQs60HrQjEQHTqWByZoGwjs4v8ucJlejPC2\n04Ka2u1uyCM1/v9SefscJlhmQs90DYe1xTkTMKwnn65kj5bRjOtCmVxiw7XJ\naOmBUbVXwlLtcPWH/gki44dR5NeJmpVM2eBuIXrlwU95DptskOa5g0BuYRsc\nLThQ\r\n=tAQ0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/index.js","husky":{"hooks":{"commit-msg":"bob lint commit"}},"private":false,"scripts":{"lint":"bob lint","test":"bob test","build":"bob build","commit":"bob commit","release":"bob publish"},"_npmUser":{"name":"bconnorwhite","email":"connor.bcw@gmail.com"},"repository":{"url":"git+https://github.com/bconnorwhite/p-lock.git","type":"git"},"description":"Simple promise lock","directories":{},"eslintConfig":{"extends":"eslint-config-bob"},"_hasShrinkwrap":false,"devDependencies":{"@bconnorwhite/bob":"^2.9.4"},"npmpackagejsonlint":{"extends":"npm-package-json-lint-config-bob"},"_npmOperationalInternal":{"tmp":"tmp/p-lock_2.0.0_1617675439934_0.09723231519011288","host":"s3://npm-registry-packages"}},"2.1.0":{"name":"p-lock","version":"2.1.0","keywords":["promise","lock","simple","async"],"author":{"url":"https://connorwhite.org","name":"Connor White","email":"connor.bcw@gmail.com"},"license":"MIT","_id":"p-lock@2.1.0","maintainers":[{"name":"bconnorwhite","email":"connor.bcw@gmail.com"}],"homepage":"https://connorwhite.org/github/p-lock","dist":{"shasum":"6f9dbc55d3aac5b0f75c8ec47f3a6f1b954135f8","tarball":"https://registry.npmjs.org/p-lock/-/p-lock-2.1.0.tgz","fileCount":7,"integrity":"sha512-pi2yT8gNhVrV4LgsUvJWQy58TXH1HG2+NXDby9+UrsS/9fXb0FJH9aCxbdHJ0EAQ6XC7ggSP6GAzuR5puDArUQ==","signatures":[{"sig":"MEQCIEcks0GYRPaThxcHWnGV8wFYdu9YQebGVQHH3EEdAsAaAiAnG9SbBANEA1e1WFaKk8ZG4K0JdZl6mrE+Dr2/fzDa6g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":6849,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJghHzwCRA9TVsSAnZWagAAP6kP/0678MYc3GXFvrZNdMCs\nMd/v3iuaB0oqeYD9icO4yHXZ6U1/MiquLZQd9LCCXWMxzlEWXaEaGzgO7Q88\n3vItnC+U+R+mHYo6fL/CyuL2tjJn8iJWGdp7mNLvXlKDKGSY9hekRsGfa55u\n32KfDnovjW/HOVsXskLBfKxyzYP6uOg2a3wI28qtVxX85UpWn7Glr6TSILrm\nnY9FfjHX+Y8iVNKtgxHTwSCGqVeV8egW7deW6FDsI5ApbEjRofYt4M3Wkvgj\nFGinlqzUF4w/uwSZFlkUBtWV25QB9DsPqslsCLpg+UGrhxoqOA9T0/Cj+TWU\nKRhaY9HWoSiMkHD+Bcuab32o4t0flfmbi+YdyNt3L5g1NbuV2MViog4DRtMy\nMT5Kp/NSAxCVq/vfc9fBhouDf3vPRFtYnOUBsxsqq7DXULoj+vdHPmNcwebe\n4XoksPIVnIOY40QngKtk0m2XgIRj9/PLU9AZQGX23kOPOxk1E9aWCrBlaA4Q\ne1tGtU+SGB6iEUnQNvvhaPj5O5193T0YmBxn/WCLlocYHyekCIJ6UHB9QV9U\nCkdeYlus51/y9l3id13ajGlt/9mLZp9HlHTfyH58qRSqgkpIo/EeZlu6yD4K\nASM1o+F0Y46gjDFwLPjyhn6xiKMav0MCBdfBC5n1DrGkUYeiptVDHSGi97kt\nJTzO\r\n=9Sob\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./build/index.js","husky":{"hooks":{"commit-msg":"bob lint commit"}},"private":false,"scripts":{"lint":"bob lint","test":"bob test","build":"bob build","commit":"bob commit","release":"bob publish"},"_npmUser":{"name":"bconnorwhite","email":"connor.bcw@gmail.com"},"repository":{"url":"git+https://github.com/bconnorwhite/p-lock.git","type":"git"},"description":"Simple promise lock","directories":{},"eslintConfig":{"extends":"eslint-config-bob"},"_hasShrinkwrap":false,"devDependencies":{"@bconnorwhite/bob":"^2.9.4"},"npmpackagejsonlint":{"extends":"npm-package-json-lint-config-bob"},"_npmOperationalInternal":{"tmp":"tmp/p-lock_2.1.0_1619295471801_0.026035470851726528","host":"s3://npm-registry-packages"}},"3.0.0":{"name":"p-lock","version":"3.0.0","keywords":["promise","lock","simple","async"],"author":{"name":"Connor White"},"license":"MIT","_id":"p-lock@3.0.0","maintainers":[{"name":"bconnorwhite","email":"connor.bcw@gmail.com"}],"dist":{"shasum":"6a14783804cec3ef7d453385414bf9770264649f","tarball":"https://registry.npmjs.org/p-lock/-/p-lock-3.0.0.tgz","fileCount":8,"integrity":"sha512-uIdp1bNOU0HEEZQen9F3a/QP4caB9H5ZcOR/TSX8X15Yf9cvy7BPzMhIn6+hzXNNGtcJpDmnM4C9k1kiBLeOTg==","signatures":[{"sig":"MEQCIE3cXzD1QK7kObv9A4GFDt0Z3nzc9Z8PFFNgB3zUcmzoAiB/s8Rm1Hv9pTvHt0PSZO05ZTRdgBvLuD0JJCtvKOGlwA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":7290,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjveWBACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmplqg//dzjd+1Xn6L7WdTgp9/LjkJ/jP4pkF7KpYMAl/ZzkbfeURjLF\r\ncewg1yYoPwaG631+3aS6noaZq/7vSJag3qC2i4Tab1+Jpb6/eCDFd/wupWHn\r\nctVVEmXTo4j/6axbyYU57m75+DVEASqg1/HbKi7/O3S8aM9NgWFpdk1E+/s/\r\ndCSaDaDuYqRVdnQIAF5jquXrLEdm3EtUIUSUGcrRgK5+lKqYAC0NHZLfzQj7\r\nT/Of9IUqk2V4tN9mS5EQSavh7bFZHNwX2CqLci154WxdUp44JUSjNwLuJLrf\r\nusZvuacaf88sLXr/Ayoc4G1FnCB4o8Z1vcj4E6pNeqyr+kYQwF91RI4+iIn/\r\naXHRbqNSI10bnDmO9++6pdm0SWFzTnFfM7hDcKo+aD1PFcutH+q2n2MgNgb5\r\nIXfTgshq6HJ0+BGa5+Jt7y+R8ibT7eLWcjNkbdaR/JblsrARrPen1/qnFMbO\r\n9Qd5u5XW4ru7Tgdp574piC7JuE6zFzQpr2vWpDzbhmConwSQhuoJ47ZUPpgg\r\nAK7smeNtoOkbSWEhkuJyWVGukZcwm5teQGGRtTyzvqlTV7nqVRZ7N2ET1n86\r\nyHMZta4dYk2Vnyi7+NG82FoUiPJwaQ4LcVfTDHoDv9GsqQ3aLpuRaP6K+gIp\r\nhuT+hvATr5yv1z0PGsJm75ls2DBRjM+n+GQ=\r\n=qt/O\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"preset":"@autosoft/jest-preset"},"main":".auto/build/index.js","type":"module","types":".auto/build/index.d.ts","engines":{"node":"^14.13.1 || >=16.0.0"},"exports":"./.auto/build/index.js","private":false,"scripts":{"dev":"auto dev","lint":"auto lint","test":"auto test","build":"auto build","prepack":"yarn build","release":"auto release","typecheck":"auto typecheck"},"_npmUser":{"name":"bconnorwhite","email":"connor.bcw@gmail.com"},"repository":{"url":"git+https://github.com/bconnorwhite/p-lock.git","type":"git"},"description":"Simple promise lock","directories":{},"eslintConfig":{"extends":"@autosoft/eslint-config"},"_hasShrinkwrap":false,"devDependencies":{"autorepo":"^0.1.9"},"npmpackagejsonlint":{"extends":"npm-package-json-lint-config-auto"},"_npmOperationalInternal":{"tmp":"tmp/p-lock_3.0.0_1673389440884_0.043793686746246285","host":"s3://npm-registry-packages"}},"4.0.0":{"name":"p-lock","version":"4.0.0","keywords":["promise","lock","queue","simple","async"],"author":{"url":"https://bconnorwhite.com","name":"Connor White","email":"oss@bconnorwhite.com"},"license":"MIT","_id":"p-lock@4.0.0","maintainers":[{"name":"bconnorwhite","email":"connor.bcw@gmail.com"}],"homepage":"https://github.bconnorwhite.com/p-lock#readme","bugs":{"url":"https://github.com/bconnorwhite/p-lock/issues"},"dist":{"shasum":"252013510caa46411c6898eec81d49285c8fd592","tarball":"https://registry.npmjs.org/p-lock/-/p-lock-4.0.0.tgz","fileCount":6,"integrity":"sha512-YHFwcmDAWE3ep67t36oe5k5/1UUAD2NNkRWzWVVI9hVADpuVD2XFgNX5wMvcAUbQKl9BV+o8xwDUCP2bh4qSbA==","signatures":[{"sig":"MEUCIFr7YoyfMdK87FL1exTtdTEM+LUYMlZ90XsXQuzP3zKTAiEA10wyeQoyxBy6y/k6/3ycG9UV9gQnla2Kru69RTmKbkw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/p-lock@4.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8626},"main":"./build/index.js","type":"module","types":"./build/index.d.ts","engines":{"bun":">=1.3.0","node":">=20.0.0"},"exports":{".":"./build/index.js"},"gitHead":"9d31250fdd889e36e205bf13a90a4cb9cf39dd88","private":false,"scripts":{"lint":"npm run lint:package && npm run lint:source","test":"npm run test:node && npm run test:browser && npm run test:bun","build":"tsc --project ./tsconfig.json","prepack":"npm run build","release":"npm publish","coverage":"vitest run --config ./vitest.config.mjs --project node --coverage","test:bun":"bun test ./test/index.test.ts","test:node":"vitest run --config ./vitest.config.mjs --project node","typecheck":"npm run build && tsc --project ./test/tsconfig.json","lint:source":"ESLINT_USE_FLAT_CONFIG=false eslint src test --ext .ts","lint:package":"npmPkgJsonLint .","test:browser":"vitest run --config ./vitest.config.mjs --project browser"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2af49d25-1480-45b3-90e5-7c9763df8e9e"}},"repository":{"url":"git+https://github.com/bconnorwhite/p-lock.git","type":"git"},"_npmVersion":"11.9.0","description":"Simple promise lock","directories":{},"_nodeVersion":"24.14.0","eslintConfig":{"extends":"@bconnorwhite/eslint-config"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.39.4","vitest":"^3.2.4","playwright":"^1.58.2","typescript":"^5.9.3","@types/node":"^24.3.0","@vitest/browser":"^3.2.4","eslint-plugin-json":"^4.0.1","@vitest/coverage-v8":"^3.2.4","eslint-plugin-import":"^2.32.0","npm-package-json-lint":"^9.1.0","@bconnorwhite/tsconfig":"^1.0.0","@typescript-eslint/parser":"^8.56.1","@bconnorwhite/eslint-config":"^1.1.0","@typescript-eslint/eslint-plugin":"^8.56.1","npm-package-json-lint-config-bconnorwhite":"^1.0.0"},"npmpackagejsonlint":{"extends":"npm-package-json-lint-config-bconnorwhite/oss"},"_npmOperationalInternal":{"tmp":"tmp/p-lock_4.0.0_1773327109565_0.19185033658720996","host":"s3://npm-registry-packages-npm-production"}},"4.0.1":{"name":"p-lock","version":"4.0.1","description":"Simple promise lock","license":"MIT","private":false,"author":{"name":"Connor White","email":"oss@bconnorwhite.com","url":"https://bconnorwhite.com"},"homepage":"https://github.bconnorwhite.com/p-lock#readme","repository":{"type":"git","url":"git+https://github.com/bconnorwhite/p-lock.git"},"bugs":{"url":"https://github.com/bconnorwhite/p-lock/issues"},"keywords":["promise","lock","queue","simple","async"],"type":"module","main":"./build/index.js","exports":{".":"./build/index.js"},"types":"./build/index.d.ts","engines":{"bun":">=1.3.0","node":">=20.0.0"},"scripts":{"build":"tsc --project ./tsconfig.json","coverage":"vitest run --config ./vitest.config.mjs --project node --coverage","lint":"npm run lint:package && npm run lint:source","lint:package":"npmPkgJsonLint .","lint:source":"ESLINT_USE_FLAT_CONFIG=false eslint src test --ext .ts","prepack":"npm run build","release":"npm publish","test":"npm run test:node && npm run test:browser && npm run test:bun","test:browser":"vitest run --config ./vitest.config.mjs --project browser","test:bun":"bun test ./test/index.test.ts","test:node":"vitest run --config ./vitest.config.mjs --project node","typecheck":"npm run build && tsc --project ./test/tsconfig.json"},"devDependencies":{"@bconnorwhite/eslint-config":"^1.1.0","@bconnorwhite/tsconfig":"^1.0.0","@types/node":"^24.3.0","@typescript-eslint/eslint-plugin":"^8.56.1","@typescript-eslint/parser":"^8.56.1","@vitest/browser":"^3.2.4","@vitest/coverage-v8":"^3.2.4","eslint":"^9.39.4","eslint-plugin-import":"^2.32.0","eslint-plugin-json":"^4.0.1","npm-package-json-lint":"^9.1.0","npm-package-json-lint-config-bconnorwhite":"^1.0.0","playwright":"^1.58.2","typescript":"^5.9.3","vitest":"^3.2.4"},"eslintConfig":{"extends":"@bconnorwhite/eslint-config"},"npmpackagejsonlint":{"extends":"npm-package-json-lint-config-bconnorwhite/oss"},"gitHead":"815d2b5f389e16ca944ebcf5682e9d7a761251da","_id":"p-lock@4.0.1","_nodeVersion":"24.14.0","_npmVersion":"11.9.0","dist":{"integrity":"sha512-fxb3lnfjNFhXrSty+BMODCBQtigmsMEzU3kAwG3JB/xtAhkq1hGsm/nzE5BE23qt8X+R9d94Qbfl9zm6E9LkvQ==","shasum":"51d8a046af2c2a4ebb6f2cb53825ff36a75af2de","tarball":"https://registry.npmjs.org/p-lock/-/p-lock-4.0.1.tgz","fileCount":6,"unpackedSize":8820,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/p-lock@4.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAjhUw4KFjfA+iMEubIOffSYPxhho2OD8sawUSHofi0SAiArLRkSuo2WCo53SktGbog27cEyeYwhbhPV+dT+24uEmA=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2af49d25-1480-45b3-90e5-7c9763df8e9e"}},"directories":{},"maintainers":[{"name":"bconnorwhite","email":"connor.bcw@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/p-lock_4.0.1_1773327451909_0.24478743585115326"},"_hasShrinkwrap":false}},"time":{"created":"2021-04-06T01:28:19.365Z","modified":"2026-03-12T14:57:32.324Z","1.0.0":"2021-04-06T01:28:19.501Z","2.0.0":"2021-04-06T02:17:20.065Z","2.1.0":"2021-04-24T20:17:52.027Z","3.0.0":"2023-01-10T22:24:01.117Z","4.0.0":"2026-03-12T14:51:49.705Z","4.0.1":"2026-03-12T14:57:32.038Z"},"bugs":{"url":"https://github.com/bconnorwhite/p-lock/issues"},"author":{"name":"Connor White","email":"oss@bconnorwhite.com","url":"https://bconnorwhite.com"},"license":"MIT","homepage":"https://github.bconnorwhite.com/p-lock#readme","keywords":["promise","lock","queue","simple","async"],"repository":{"type":"git","url":"git+https://github.com/bconnorwhite/p-lock.git"},"description":"Simple promise lock","maintainers":[{"name":"bconnorwhite","email":"connor.bcw@gmail.com"}],"readme":"<!--BEGIN HEADER-->\n<div id=\"top\" align=\"center\">\n  <h1>p-lock</h1>\n  <a href=\"https://npmjs.com/package/p-lock\">\n    <img alt=\"NPM\" src=\"https://img.shields.io/npm/v/p-lock.svg\">\n  </a>\n  <a href=\"https://github.com/bconnorwhite/p-lock\">\n    <img alt=\"TypeScript\" src=\"https://img.shields.io/github/languages/top/bconnorwhite/p-lock.svg\">\n  </a>\n  <a href=\"https://coveralls.io/github/bconnorwhite/p-lock?branch=main\">\n    <img alt=\"Coverage Status\" src=\"https://img.shields.io/coveralls/github/bconnorwhite/p-lock.svg?branch=main\">\n  </a>\n</div>\n\n<br />\n\n<blockquote align=\"center\">Simple promise lock.</blockquote>\n\n---\n<!--END HEADER-->\n\n<!-- BEGIN INSTALLATION -->\n## Installation\n\n<details open>\n  <summary>\n    <a href=\"https://www.npmjs.com/package/p-lock\">\n      <img src=\"https://img.shields.io/badge/npm-CB3837?logo=npm&logoColor=white\" alt=\"NPM\" />\n    </a>\n  </summary>\n\n```sh\nnpm install p-lock\n```\n\n</details>\n\n<details>\n  <summary>\n    <a href=\"https://yarnpkg.com/package/p-lock\">\n      <img src=\"https://img.shields.io/badge/yarn-2C8EBB?logo=yarn&logoColor=white\" alt=\"Yarn\" />\n    </a>\n  </summary>\n\n```sh\nyarn add p-lock\n```\n\n</details>\n\n<details>\n  <summary>\n    <img src=\"https://img.shields.io/badge/pnpm-F69220?logo=pnpm&logoColor=white\" alt=\"PNPM\" />\n  </summary>\n\n```sh\npnpm add p-lock\n```\n\n</details>\n\n<details>\n  <summary>\n    <img src=\"https://img.shields.io/badge/bun-EE81C3?logo=bun&logoColor=white\" alt=\"Bun\" />\n  </summary>\n\n```sh\nbun add p-lock\n```\n\n</details>\n<!-- END INSTALLATION -->\n\n## About\n\nThis package provides a simple promise queue, which is useful for preventing race conditions between multiple promises.\n\n## Overview\n\nFirst, we get a lock function:\n\n```ts\nimport { getLock } from \"p-lock\";\n\nconst lock = getLock();\n```\n\nCalling the lock function returns a promise that resolves when it reaches the front of the queue.\n\nThe promise resolves with a release function, which must be called to continue the queue:\n\n```ts\nlock(\"example-key\").then((release) => {\n  // Now this callback is at the front of the queue for \"example-key\"\n  // do something...\n  release();\n});\n```\n\n## Full Example\n\nIn this example, we have two promises writing to the same file. However, we want to ensure that the first one finishes before the second one starts.\n\n```ts\nimport { writeFile } from \"fs\";\nimport { getLock } from \"p-lock\";\n\nconst lock = getLock();\n\nlock(\"file\").then((release) => {\n  setTimeout(() => {\n    writeFile(\"test.txt\", \"hello\", () => {\n      release();\n    });\n  }, 1000);\n});\n\nlock(\"file\").then((release) => {\n  writeFile(\"test.txt\", \"world\", () => {\n    release();\n  });\n});\n\n// Contents of test.txt will be \"world\"\n```\n\n### Replace\n\nIn some cases, we may want to replace an existing promise waiting for a lock, rather than waiting for it to finish.\n\nThe `replace` option allows us to do this:\n\n```ts\nimport { writeFile } from \"fs\";\nimport { getLock } from \"p-lock\";\n\nconst lock = getLock({ replace: true });\n\nlet writeCounter = 0;\n\nlock(\"file\").then((release) => {\n  setTimeout(() => {\n    writeCounter += 1;\n    writeFile(\"test.txt\", `update #${writeCounter}`, () => {\n      release();\n    });\n  }, 1000);\n});\n\nlock(\"file\").then((release) => {\n  writeCounter += 1;\n  writeFile(\"test.txt\", `update #${writeCounter}`, () => {\n    release();\n  });\n}).catch(() => {\n  // This promise will reject, since the next one replaces.\n});\n\nlock(\"file\").then((release) => {\n  writeCounter += 1;\n  writeFile(\"test.txt\", `update #${writeCounter}`, () => {\n    release();\n  });\n});\n\n// Contents of test.txt will be \"update #2\"\n```\n\n<!--BEGIN FOOTER-->\n<h2 id=\"license\">License <a href=\"https://opensource.org/licenses/MIT\"><img align=\"right\" alt=\"license\" src=\"https://img.shields.io/npm/l/p-lock.svg\"></a></h2>\n\n[MIT](https://opensource.org/licenses/MIT) - _MIT License_\n<!--END FOOTER-->\n","readmeFilename":"README.md"}