{"_id":"limit-concur","_rev":"6-70ae84ae818898b62ac2b4ff230ad2e5","name":"limit-concur","dist-tags":{"latest":"4.0.0"},"versions":{"0.0.1":{"name":"limit-concur","version":"0.0.1","keywords":["async","concurrency","limit","limited","promise","await","ratelimit","throttle","rate"],"author":{"url":"https://tomeraberba.ch","name":"Tomer Aberbach","email":"tomeraberbach@gmail.com"},"license":"Apache-2.0","_id":"limit-concur@0.0.1","maintainers":[{"name":"tomeraberbach","email":"tomeraberbach@gmail.com"}],"homepage":"https://github.com/TomerAberbach/limit-concur","bugs":{"url":"https://github.com/TomerAberbach/limit-concur/issues"},"ava":{"require":["./test/helpers/fast-check.js"]},"tsd":{"directory":"./test"},"dist":{"shasum":"e89ba47261a2d6f28e25ad4cd1bc8e183dabf3f4","tarball":"https://registry.npmjs.org/limit-concur/-/limit-concur-0.0.1.tgz","fileCount":5,"integrity":"sha512-g2fgUIMmL77U4Sw7u2iXBK0LPEdYH9MBW/bxeGhMxPUdwoB1TlWG8W/kT6Gmzbr2hAfz/y2/hSE+rlU/V7SL6A==","signatures":[{"sig":"MEYCIQCts3pYjF7z8bHomtrthdOJpqVX1hMCAs+uFk6VCOZNoAIhALaUpkxkwCKISglciRC6JRyCfw0C2O+GZrIHRM5JSQpA","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":18905,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbfDACRA9TVsSAnZWagAAKFEP/0u/5oOZU3wCjOkhln7J\nI3zwmzMtHKudfINpBLO0Ow1RBfQ8j4R/OImrIdXiqMoDmZXTiohBPFX3QVdb\n5LLyHw0zxoGSLOQhOLoepDNWETq7MQkU6vBI1exG7spOcT4aJ+6jadvE+iKa\n9wdXkCRTpByvTZOphyF6HCridqdkuqKmAWu+qTXaZy5q3uycep2yzzSV5kus\nf7mqfxkZEWShKcmCZr3g61ttoa3H+R/x1uNYCW6WrBfPqNuUxWu9eO8ZJ1Pf\n8iYt8JaDnmi+9RNbxESHOZ7Kwry4AAuedrCwQ2YRpboGXfpTrRq58Bi54zgT\nAhZCv0NJhFJAM1DOR33Pm8ghV5GS9awkMW20qRYP2rVkyDom+ryxG6GDrIQA\n3Y6xXwyI5cjCWE96cBR//GWMLqyiivYNnezAoO8nmnukQsPxU7aTlV0zmqs0\n5W+L/M+wMICXHtygXkqMs16DPHbG6FwFg7g/gR1+jRUZ+bw8l9o52vWm2CQe\nnJH1q/OxkklT2TP1lxeYr4aDxx6PhhPiagyk1xlElI1BPZR1FIMWXHle/ybf\n3QHuiTHgL5Tklf1aalJ5MY9tkCZlPRk8GAgrrajfGLU9Y2NByn8tSceT3rAe\nETQVbxy4MWJO5XY5xzh/bg8buTQFxiCICfTk4u2xYwBZOTwMgYhMft6fsIuc\nSfGb\r\n=/J8P\r\n-----END PGP SIGNATURE-----\r\n"},"type":"module","husky":{"hooks":{"commit-msg":"commitlint -E HUSKY_GIT_PARAMS","pre-commit":"lint-staged"}},"types":"./src/index.d.ts","module":"./src/index.js","engines":{"node":">= 12.17"},"exports":"./src/index.js","gitHead":"bf182092b0aa52a2203f33f66497064025f524b9","scripts":{"lint":"run-s lint:*","test":"run-s test:*","license":"addlicense $(git diff --name-only HEAD)","test:js":"ava","test:ts":"tsd","coverage":"c8 run-s test:js","lint:eslint":"run-s \"lint:eslint:base -- --fix .\"","lint:prettier":"run-s \"lint:prettier:base -- --write .\"","lint:eslint:base":"eslint --cache --ext js --ignore-path .gitignore","lint:prettier:base":"prettier --loglevel silent --ignore-path .gitignore"},"_npmUser":{"name":"tomeraberbach","email":"tomeraberbach@gmail.com"},"prettier":"@tomer/prettier-config","commitlint":{"extends":"@commitlint/config-conventional"},"repository":{"url":"git+https://github.com/TomerAberbach/limit-concur.git","type":"git"},"_npmVersion":"7.6.3","description":"Limit an async function's concurrency with ease!","directories":{},"lint-staged":{"*.js":["addlicense","run-s \"lint:prettier:base -- --write {@}\" --","run-s \"lint:eslint:base -- --fix {@}\" --"],"*.ts":["addlicense","run-s \"lint:prettier:base -- --write {@}\" --"],"*.{json,yml,md}":"run-s \"lint:prettier:base -- --write {@}\" --"},"_nodeVersion":"15.11.0","browserslist":["defaults","not IE 11","not op_mini all"],"eslintConfig":{"extends":"@tomer"},"_hasShrinkwrap":false,"devDependencies":{"c8":"7.7.0","ava":"3.15.0","tsd":"0.14.0","husky":"4.3.8","eslint":"7.23.0","p-state":"0.2.0","prettier":"2.2.1","fast-check":"2.14.0","typescript":"4.2.3","lint-staged":"10.5.4","npm-run-all":"4.1.5","ava-fast-check":"4.0.2","@commitlint/cli":"12.1.1","@sinonjs/fake-timers":"7.0.2","@tomer/eslint-config":"0.1.0","@tomer/prettier-config":"0.1.0","@commitlint/config-conventional":"12.1.1"},"_npmOperationalInternal":{"tmp":"tmp/limit-concur_0.0.1_1617817792078_0.7999027230583022","host":"s3://npm-registry-packages"}},"1.0.0":{"name":"limit-concur","version":"1.0.0","keywords":["async","concurrency","limit","limited","promise","await","ratelimit","throttle","rate"],"author":{"url":"https://tomeraberba.ch","name":"Tomer Aberbach","email":"tomeraberbach@gmail.com"},"license":"Apache-2.0","_id":"limit-concur@1.0.0","maintainers":[{"name":"tomeraberbach","email":"tomeraberbach@gmail.com"}],"homepage":"https://github.com/TomerAberbach/limit-concur","bugs":{"url":"https://github.com/TomerAberbach/limit-concur/issues"},"dist":{"shasum":"d943476a2c39968f03e4fafa8a9d6bcadbb24415","tarball":"https://registry.npmjs.org/limit-concur/-/limit-concur-1.0.0.tgz","fileCount":6,"integrity":"sha512-FIbonzi3Xla0CT8n4EVoXGepV55yh++dLcarwbGw8YGOd2ld6RHZywPmUxyr0+QcylVr/0cC8Wz4UbUMsQ+HPA==","signatures":[{"sig":"MEYCIQCUWu244n01CEwjcGX17bCyeE/xv7wrruXOPjmFSMk8NQIhALVXrBwp3rIFyKH8jmropqgUNwhS7SqEfj47YMnESmJ+","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":19619,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhwVsUCRA9TVsSAnZWagAA7aQQAJlLTew3IJgycQclv+zL\nXBO9GV7xBu4XYliyfZzCkAdnn0CE81BRxkoGXIH1A9Xfymkg1voD8NpDbRgg\nErZVlsvkWJzU1r3tYPwgfCkui0PDKw8qq17HMCh2l4cbVdWY4MFSpuIeH3Pn\n21bRg6imjdv4Sv88+RVvUJdTBEaUZnDoHbuTUqE2WwCXzobt9ZJr1OIOZ8aa\nSTF/eRQRRM4NNHJKPz18ISU7yRybzPve9uYeHitWIWIBuZnYFtekEI5F7KOP\nYSXNjIoKl9SmEuJf74mcFjzSWyfQP34gTDAkEVyK9XptSbYVusE/fOJOT+MW\nwAeCQFrEsxAH5NReyt4KkxscQIeZxLADzyMsrBVKyditOQmyyhPTUxqI+Zjd\nN9O2e5Hia9soZpsswtqIlKdK9yDb3Q8n18k5BHo/U7BuCmgHC9e1avdsHxYb\nGle6w+jMQqkCNYRa8KRloaZdryKab4+kKwmvOcJymUOXApU4pozEJk98dAlh\nZYiF+Xpddj+opJFTloKq8THFvQFB2kj01xR0I29UlWVaRx2SgcjOrIyw3LEn\nOPn9KBSt3mqutQHXeUT9JHYTXWody4rSkXuhNXMvnsIqSqAyMia2cn8kaTnx\nkYzsMUfjHm5fwaDg51v9vUKbaKW1t6m4zafNtuOP5dA7JzDSyH3RjjAgmmwd\nWzbO\r\n=H+F+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.cjs","type":"module","_from":"file:limit-concur-1.0.0.tgz","types":"./src/index.d.ts","module":"./dist/index.js","engines":{"node":">= 12.17"},"exports":{"import":"./dist/index.js","require":"./dist/index.cjs"},"scripts":{"lint":"tomer lint -g","test":"tomer test","build":"tomer build -f \"esm,cjs\" src/index.js"},"_npmUser":{"name":"tomeraberbach","email":"tomeraberbach@gmail.com"},"_resolved":"/Users/tomer/Documents/Tomer/work/avocational/code/projects/limit-concur/limit-concur-1.0.0.tgz","_integrity":"sha512-FIbonzi3Xla0CT8n4EVoXGepV55yh++dLcarwbGw8YGOd2ld6RHZywPmUxyr0+QcylVr/0cC8Wz4UbUMsQ+HPA==","repository":"TomerAberbach/limit-concur","_npmVersion":"8.1.4","description":"Limit an async function's concurrency with ease!","directories":{},"_nodeVersion":"17.2.0","browserslist":["defaults","not IE 11","not op_mini all"],"_hasShrinkwrap":false,"devDependencies":{"ava":"3.15.0","tsd":"0.19.0","tomer":"0.0.20","p-state":"1.0.0","fast-check":"2.20.0","ava-fast-check":"4.0.2","@sinonjs/fake-timers":"8.1.0"},"_npmOperationalInternal":{"tmp":"tmp/limit-concur_1.0.0_1640061716432_0.08565786492372252","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"limit-concur","version":"2.0.0","keywords":["async","concurrency","limit","limited","promise","await","ratelimit","throttle","rate"],"author":{"url":"https://tomeraberba.ch","name":"Tomer Aberbach","email":"tomeraberbach@gmail.com"},"license":"Apache-2.0","_id":"limit-concur@2.0.0","maintainers":[{"name":"tomeraberbach","email":"tomeraberbach@gmail.com"}],"homepage":"https://github.com/TomerAberbach/limit-concur","bugs":{"url":"https://github.com/TomerAberbach/limit-concur/issues"},"dist":{"shasum":"d525c7762886c9b42de12a9ec2fdd0ec04dbf3d7","tarball":"https://registry.npmjs.org/limit-concur/-/limit-concur-2.0.0.tgz","fileCount":6,"integrity":"sha512-PHmhxSVA5iwMDoenbgwDwSt2XL7pi0zwmr6QuZYrAmut6z8NRJmKwzUzHY/2ztrx/aP//knQz3f/RDDrZDqpOg==","signatures":[{"sig":"MEUCIQDRrhtreaMyUUfdY8mwpgi8N4fL8Cf8U6/2ZoWbw5tu3AIgI344MMruOdj6TCoZckx5eUzctjx4xBmewSd88WjfG6I=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":16423},"main":"./dist/index.min.cjs","type":"module","_from":"file:limit-concur-2.0.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.min.js","engines":{"node":">= 16"},"exports":{"types":"./dist/index.d.ts","import":"./dist/index.min.js","require":"./dist/index.min.cjs"},"scripts":{"lint":"tomer lint","test":"tomer test","build":"tomer build","clean":"tomer clean dist","format":"tomer format","typecheck":"tomer typecheck"},"_npmUser":{"name":"tomeraberbach","email":"tomeraberbach@gmail.com"},"prettier":"tomer/prettier","_resolved":"/private/var/folders/kn/41l_nk9568j6j0grkb3g35580000gn/T/8738d0ee138543fa0ce412c2afb2f322/limit-concur-2.0.0.tgz","_integrity":"sha512-PHmhxSVA5iwMDoenbgwDwSt2XL7pi0zwmr6QuZYrAmut6z8NRJmKwzUzHY/2ztrx/aP//knQz3f/RDDrZDqpOg==","repository":{"url":"git+https://github.com/TomerAberbach/limit-concur.git","type":"git"},"_npmVersion":"10.5.0","description":"Limit an async function&#39;s concurrency with ease!","directories":{},"sideEffects":false,"_nodeVersion":"21.7.1","browserslist":["defaults","not IE 11","not op_mini all"],"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","tomer":"^3.0.4","eslint":"^8.57.0","prettier":"^3.2.5","typescript":"^5.4.2","@types/jest":"^29.5.12","@sinonjs/fake-timers":"^11.2.2","@types/sinonjs__fake-timers":"^8.1.5"},"_npmOperationalInternal":{"tmp":"tmp/limit-concur_2.0.0_1710704864250_0.3912740677463993","host":"s3://npm-registry-packages"}},"3.0.0":{"name":"limit-concur","version":"3.0.0","keywords":["async","concurrency","limit","limited","promise","await","ratelimit","throttle","rate"],"author":{"url":"https://tomeraberba.ch","name":"Tomer Aberbach","email":"tomeraberbach@gmail.com"},"license":"Apache-2.0","_id":"limit-concur@3.0.0","maintainers":[{"name":"tomeraberbach","email":"tomeraberbach@gmail.com"}],"homepage":"https://github.com/TomerAberbach/limit-concur","bugs":{"url":"https://github.com/TomerAberbach/limit-concur/issues"},"dist":{"shasum":"556364a0a67f57f7f0baed95af6e86a910a30348","tarball":"https://registry.npmjs.org/limit-concur/-/limit-concur-3.0.0.tgz","fileCount":6,"integrity":"sha512-SISsOroIMfgdfXyD9ERqCR1+lPcjPen3/aZA8Idnvtp0IqX6Z66CE2yeMXWtKPqkeUj8XFUvKefZenrhXPeXAw==","signatures":[{"sig":"MEQCIFhymt+qdweawvocvOCPG8swvZ1o2uBLb1zJHtEc89gXAiAUvefxGCoiq+H3G+vRY4op/pljpOJAfzc6nIskmXlbyQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":16382},"main":"./dist/index.min.cjs","type":"module","_from":"file:limit-concur-3.0.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.min.js","engines":{"node":">= 18"},"exports":{"types":"./dist/index.d.ts","import":"./dist/index.min.js","require":"./dist/index.min.cjs"},"scripts":{"lint":"tomer lint","test":"tomer test","build":"tomer build","clean":"tomer clean dist","format":"tomer format","typecheck":"tomer typecheck"},"_npmUser":{"name":"tomeraberbach","email":"tomeraberbach@gmail.com"},"prettier":"tomer/prettier","_resolved":"/private/var/folders/kn/41l_nk9568j6j0grkb3g35580000gn/T/82c5345794024003063a5e6f2ccb8190/limit-concur-3.0.0.tgz","_integrity":"sha512-SISsOroIMfgdfXyD9ERqCR1+lPcjPen3/aZA8Idnvtp0IqX6Z66CE2yeMXWtKPqkeUj8XFUvKefZenrhXPeXAw==","repository":{"url":"git+https://github.com/TomerAberbach/limit-concur.git","type":"git"},"_npmVersion":"10.5.0","description":"Limit an async function&#39;s concurrency with ease!","directories":{},"sideEffects":false,"_nodeVersion":"21.7.3","browserslist":["defaults","not IE 11","not op_mini all"],"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","tomer":"^3.2.0","eslint":"^8.57.0","prettier":"^3.2.5","typescript":"^5.4.5","@types/jest":"^29.5.12","@sinonjs/fake-timers":"^11.2.2","@types/sinonjs__fake-timers":"^8.1.5"},"_npmOperationalInternal":{"tmp":"tmp/limit-concur_3.0.0_1715360075840_0.3194508578101878","host":"s3://npm-registry-packages"}},"4.0.0":{"name":"limit-concur","version":"4.0.0","author":{"name":"Tomer Aberbach","email":"tomer@aberba.ch","url":"https://tomeraberba.ch"},"description":"Limit an async function's concurrency with ease!","keywords":["async","concurrency","limit","limited","promise","await","ratelimit","throttle","rate"],"homepage":"https://github.com/TomerAberbach/limit-concur","repository":{"type":"git","url":"git+https://github.com/TomerAberbach/limit-concur.git"},"bugs":{"url":"https://github.com/TomerAberbach/limit-concur/issues"},"funding":{"url":"https://github.com/sponsors/TomerAberbach"},"license":"Apache-2.0 AND MIT","type":"module","sideEffects":false,"engines":{"node":">= 22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"prettier":"@tomer/prettier-config","devDependencies":{"@fast-check/vitest":"^0.2.2","@rollup/plugin-terser":"^0.4.4","@tomer/eslint-config":"^4.1.0","@tomer/prettier-config":"^4.0.0","@vitest/coverage-v8":"^3.2.4","eslint":"^9.32.0","jest-extended":"^6.0.0","jsdom":"^26.1.0","prettier":"^3.6.2","publint":"^0.3.12","rollup-plugin-tree-shakeable":"^1.0.3","tsdown":"^0.13.2","typescript":"^5.9.2","vitest":"^3.2.4"},"scripts":{"format":"prettier --cache --write .","lint":"eslint --cache --cache-location node_modules/.cache/eslint/ --fix .","typecheck":"tsc --noEmit","test":"vitest","coverage":"vitest --coverage","bench":"vitest bench","build":"tsdown"},"_id":"limit-concur@4.0.0","_integrity":"sha512-BXUCP52gLz8JA8/cRKkXswOV6FnA2gl8hL8DbgQuo8XA9NKcwU3Oq/Cg1JyAZ+gyNmFEZXI+ZYLes0BrZkl+7g==","_resolved":"/private/var/folders/kn/41l_nk9568j6j0grkb3g35580000gn/T/9a75b39c0ddd7b2cec3361ab05298823/limit-concur-4.0.0.tgz","_from":"file:limit-concur-4.0.0.tgz","_nodeVersion":"24.4.1","_npmVersion":"11.4.2","dist":{"integrity":"sha512-BXUCP52gLz8JA8/cRKkXswOV6FnA2gl8hL8DbgQuo8XA9NKcwU3Oq/Cg1JyAZ+gyNmFEZXI+ZYLes0BrZkl+7g==","shasum":"4281ad542094b2c98b580cdbd78fb83f115b1549","tarball":"https://registry.npmjs.org/limit-concur/-/limit-concur-4.0.0.tgz","fileCount":7,"unpackedSize":22529,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCoA1wA+OPzaBR4v9lEisRV52SCA8Ts+yCYTF3ccyNIvwIgE03AQ6KHMkMjfH8bRymoMSF0Zv0wSq2xvTm4stFBGTo="}]},"_npmUser":{"name":"tomeraberbach","email":"tomer@aberba.ch"},"directories":{},"maintainers":[{"name":"tomeraberbach","email":"tomer@aberba.ch"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/limit-concur_4.0.0_1754184886769_0.3768561390327154"},"_hasShrinkwrap":false}},"time":{"created":"2021-04-07T17:49:52.032Z","modified":"2025-08-03T01:34:47.141Z","0.0.1":"2021-04-07T17:49:52.298Z","1.0.0":"2021-12-21T04:41:56.639Z","2.0.0":"2024-03-17T19:47:44.422Z","3.0.0":"2024-05-10T16:54:36.008Z","4.0.0":"2025-08-03T01:34:46.968Z"},"bugs":{"url":"https://github.com/TomerAberbach/limit-concur/issues"},"author":{"name":"Tomer Aberbach","email":"tomer@aberba.ch","url":"https://tomeraberba.ch"},"license":"Apache-2.0 AND MIT","homepage":"https://github.com/TomerAberbach/limit-concur","keywords":["async","concurrency","limit","limited","promise","await","ratelimit","throttle","rate"],"repository":{"type":"git","url":"git+https://github.com/TomerAberbach/limit-concur.git"},"description":"Limit an async function's concurrency with ease!","maintainers":[{"name":"tomeraberbach","email":"tomer@aberba.ch"}],"readme":"<h1 align=\"center\">\n  limit-concur\n</h1>\n\n<div align=\"center\">\n  <a href=\"https://npmjs.org/package/limit-concur\">\n    <img src=\"https://badgen.net/npm/v/limit-concur\" alt=\"version\" />\n  </a>\n  <a href=\"https://github.com/TomerAberbach/limit-concur/actions\">\n    <img src=\"https://github.com/TomerAberbach/limit-concur/workflows/CI/badge.svg\" alt=\"CI\" />\n  </a>\n  <a href=\"https://unpkg.com/limit-concur/dist/index.js\">\n    <img src=\"https://deno.bundlejs.com/?q=limit-concur&badge\" alt=\"gzip size\" />\n  </a>\n  <a href=\"https://unpkg.com/limit-concur/dist/index.js\">\n    <img src=\"https://deno.bundlejs.com/?q=limit-concur&config={%22compression%22:{%22type%22:%22brotli%22}}&badge\" alt=\"brotli size\" />\n  </a>\n  <a href=\"https://github.com/sponsors/TomerAberbach\">\n    <img src=\"https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&color=%23fe8e86\" alt=\"Sponsor\" />\n  </a>\n</div>\n\n<div align=\"center\">\n  Limit an async function's concurrency with ease!\n</div>\n\n## Features\n\n- **Tiny:** only ~300 B minzipped\n- **Flexible:** works for any function that returns a `Promise`\n\n## Install\n\n```sh\n$ npm i limit-concur\n```\n\n## Usage\n\n```js\nimport limitConcur from 'limit-concur'\n\nconst categories = await (\n  await fetch(`https://api.chucknorris.io/jokes/categories`)\n).json()\n\nlet pendingRequests = 0\nconst getChuckNorrisJoke = async category => {\n  console.log(`pending requests: ${++pendingRequests}`)\n  const response = await fetch(\n    `https://api.chucknorris.io/jokes/random?category=${encodeURIComponent(category)}`,\n  )\n  const { value } = await response.json()\n  console.log(`pending requests: ${--pendingRequests}`)\n  return value\n}\n\nconst limitedGetChuckNorrisJoke = limitConcur(4, getChuckNorrisJoke)\n\n// At most 4 requests are pending at any given time!\nconst jokes = await Promise.all(categories.map(limitedGetChuckNorrisJoke))\nconsole.log(jokes)\n//=> pending requests: 1\n//=> pending requests: 2\n//=> pending requests: 3\n//=> pending requests: 4\n//=> pending requests: 3\n//=> pending requests: 4\n//=> ...\n//=> pending requests: 3\n//=> pending requests: 2\n//=> pending requests: 1\n//=> pending requests: 0\n//=> [\n//     'Chuck Norris once rode a nine foot grizzly bear through an automatic car wash, instead of taking a shower.',\n//     \"Chuck Norris is actually the front man for Apple. He let's Steve Jobs run the show when he's on a mission. Chuck Norris is always on a mission.\",\n//     \"Bill Gates thinks he's Chuck Norris. Chuck Norris actually laughed. Once.\",\n//     'Chuck Norris can install iTunes without installing Quicktime.',\n//     ...\n//   ]\n```\n\n### Recipes\n\n#### Replacing [`p-map`](https://github.com/sindresorhus/p-map)\n\n```js\nimport limitConcur from 'limit-concur'\n\nconst urls = [`https://tomeraberba.ch`, `https://lfi.dev`, `https://npmjs.com`]\n\nconst mapper = async url => {\n  const { redirected } = await fetch(url, { method: `head` })\n  return redirected\n}\n\nconst results = await Promise.all(urls.map(limitConcur(2, mapper)))\nconsole.log(results)\n//=> [ false, false, true ]\n```\n\n#### Replacing [`p-all`](https://github.com/sindresorhus/p-all)\n\n```js\nimport limitConcur from 'limit-concur'\n\nconst actions = [\n  () => fetch(`https://tomeraberba.ch`),\n  () => fetch(`https://lfi.dev`),\n  () => checkSomething(),\n  () => doSomethingElse(),\n]\n\nconst results = await Promise.all(\n  actions.map(limitConcur(2, action => action())),\n)\nconsole.log(results)\n//=> [ ..., ..., ... ]\n```\n\n#### Replacing [`p-limit`](https://github.com/sindresorhus/p-limit)\n\n```js\nimport limitConcur from 'limit-concur'\n\nconst limit = limitConcur(1, fn => fn())\n\nconst input = [\n  limit(() => fetchSomething(`foo`)),\n  limit(() => fetchSomething(`bar`)),\n  limit(() => doSomething()),\n]\n\nconst results = await Promise.all(input)\nconsole.log(results)\n//=> [ ..., ..., ... ]\n```\n\n#### Replacing [`p-filter`](https://github.com/sindresorhus/p-filter)\n\n```js\nimport limitConcur from 'limit-concur'\n\nconst urls = [`https://tomeraberba.ch`, `https://lfi.dev`, `https://npmjs.com`]\n\nconst filterer = async url => {\n  const { redirected } = await fetch(url, { method: `head` })\n  return !redirected\n}\n\nconst results = await Promise.all(\n  urls.map(limitConcur(2, async url => ({ url, keep: await filterer(url) }))),\n)\nconst filtered = results.flatMap(({ url, keep }) => (keep ? [url] : []))\nconsole.log(filtered)\n//=> [ 'https://tomeraberba.ch', 'https://lfi.dev' ]\n```\n\n#### Replacing [`p-props`](https://github.com/sindresorhus/p-props)\n\n```js\nimport limitConcur from 'limit-concur'\n\nconst urls = {\n  tomer: `https://tomeraberba.ch`,\n  lfi: `https://lfi.dev`,\n  npm: `https://npmjs.com`,\n}\n\nconst mapper = async url => {\n  const { redirected } = await fetch(url, { method: `head` })\n  return redirected\n}\n\nconst results = Object.fromEntries(\n  await Promise.all(\n    Object.entries(urls).map(\n      limitConcur(2, async ([name, url]) => [name, await mapper(url)]),\n    ),\n  ),\n)\nconsole.log(results)\n//=> { tomer: false, lfi: false, npm: true }\n```\n\n## Contributing\n\nStars are always welcome!\n\nFor bugs and feature requests,\n[please create an issue](https://github.com/TomerAberbach/limit-concur/issues/new).\n\n## License\n\n[MIT](https://github.com/TomerAberbach/limit-concur/blob/main/license) ©\n[Tomer Aberbach](https://github.com/TomerAberbach) \\\n[Apache 2.0](https://github.com/TomerAberbach/limit-concur/blob/main/license-apache) ©\n[Google](https://github.com/TomerAberbach/limit-concur/blob/main/notice-apache)\n","readmeFilename":"readme.md"}