{"_id":"@alsadi/async_utils","_rev":"10-069e897314b92a49842bac21062a374c","name":"@alsadi/async_utils","dist-tags":{"latest":"0.2.3"},"versions":{"0.0.1":{"name":"@alsadi/async_utils","description":"Miscellaneous Asynchronous Generators Utilities for ECMAScript NodeJs","version":"0.0.1","private":false,"author":{"name":"alsadi@gmail.com"},"license":"Apache-2.0","type":"module","repository":{"type":"git","url":"git+https://github.com/muayyad-alsadi/es-async-utils.git"},"keywords":["async","ipc"],"bugs":{"url":"https://github.com/muayyad-alsadi/es-async-utils/issues"},"homepage":"https://github.com/muayyad-alsadi/es-async-utils#readme","gitHead":"2f69df02a16b5371efcfd1fa0f2f2673e2fd3a6f","_id":"@alsadi/async_utils@0.0.1","_nodeVersion":"16.18.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-O1kIlrOWXsGYQFCS5qliJmECRCIxKop23TElnjR4TfB7umj+lt7LMIa/YQpASrEcee0BU6KPy74Kj17bRrSAwQ==","shasum":"0a4763153386eac08a991c430110b5fd34fceb71","tarball":"https://registry.npmjs.org/@alsadi/async_utils/-/async_utils-0.0.1.tgz","fileCount":4,"unpackedSize":15108,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEKm5dy5+vm3y7TPSIY0QNBjkLDhOhUrYtukuS/FRDUZAiEAufctsJspq+svDHpTF1J2/djM5viWd34gMEcG7fzkOzc="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj7MTHACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoPTBAAooR284Ps8gNGQXOGtURbKBaJbwgJfYKhKf+tg4fA2yz3D00I\r\n+f1EFxKovb5Tn+MXwMaRHjXbx7h8SRdTXriZe/7sUzjmr+BNTepGMSalHDRq\r\nmldJMdT7QEPyVGs3t/O354pffjASy2IBhiqj05MBAYMu9EgXOpE9lgvl/mHp\r\nlZsR7BsGKIuYzuwwo5G3EKYZQUpQUZuevIOaldCu2jGpA3lMzNn2zSN00YY/\r\nam3em8VwnMJfkLyPb6Y0n2KsFJL7croZcG/N/9laxM6Ec0Nno3IM1aJ9tKvn\r\nmU5/vIHPS5HhzQme1TXuG4fcDH1JnpKHqmCpw4P5Esi1fDWWK28Db9kPHXMh\r\nAEE2Q8ftR7xzt7wabCjrCJhjGY/SOsDT25IQXAtP+zAufJVxSRpv2lhFW6vp\r\nwALFSWPIGoYBvv540+GwtKpPVcrUKYsVRNZihqjLKiB9iGuKSbmVaLLBf3LD\r\npw6jvqRFLSupCDOP0ulXuRNCRiJKFwr+Hfres3Xo2MNgkUb4pRn85umyYBUv\r\nXAEKi7r8jFmYRXVIytveuDcDtXjkS3tNAtW4NT7Vob25zIWL7ho7/bSt1W9Q\r\nvTaW8NxqDq04fpAS+U/zGXkD2tEAQ/bR7z7GIrV8rZCKHR0Q7qvE6CKxbth2\r\nfFpZHMJfGPebvvpiEeEn8gK9hvc+pqFOmgc=\r\n=Qbms\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"alsadi","email":"alsadi@gmail.com"},"directories":{},"maintainers":[{"name":"alsadi","email":"alsadi@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async_utils_0.0.1_1676461255003_0.8580886354055717"},"_hasShrinkwrap":false},"0.0.2":{"name":"@alsadi/async_utils","description":"Miscellaneous Asynchronous Generators Utilities for ECMAScript NodeJs","version":"0.0.2","private":false,"author":{"name":"alsadi@gmail.com"},"license":"Apache-2.0","type":"module","repository":{"type":"git","url":"git+https://github.com/muayyad-alsadi/es-async-utils.git"},"keywords":["async","ipc"],"bugs":{"url":"https://github.com/muayyad-alsadi/es-async-utils/issues"},"homepage":"https://github.com/muayyad-alsadi/es-async-utils#readme","gitHead":"763de2e0db70cadee513b5fbb68aeb736add038f","_id":"@alsadi/async_utils@0.0.2","_nodeVersion":"16.18.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-h3efyJ1BS+eRlfWQiJUlqbic4tGvPUD3FAOTVJ/d4PZAyqpSgIl6d7G//l16XE0snXMkMLreItcBqbyIh2xqrA==","shasum":"bc5c1407cf0bec04aa88347520fd16b408c1859c","tarball":"https://registry.npmjs.org/@alsadi/async_utils/-/async_utils-0.0.2.tgz","fileCount":4,"unpackedSize":17379,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAD2jzp1kxFffVNC12gpxa3NhpvyACMaCZO68eK9AWpJAiBh5NUvImIc6dtViz3pcRRnRfyhySw91T4JEt1aDYSHSg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj9Mv6ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpE5Q//fsws1UjJ5q8zb71swZ/cWG4Jh70c4Eia6wrOQEHvk+n2xmO6\r\n1Q2fRS4pSaHcD6oiHdaD9Np0p2rbFTzrmuib5HBbxUNYKUmkbhdLrSherdxA\r\nQlg8XPQplXholuOQiy7s8k6nJ8XrW5USLwh5zftuzxU+jCArH9aa34nKzWUV\r\neGuaV7mmz/AUePxt1BDKhtms4EIJPxjdDupOEqFFkPMcxDOoyviWNwmgHGyD\r\ndW5iQUHZ+1idcfXeECVt++MjNvm2dcTBb3epkXamnDJsawixRCKHxllGm38T\r\nt4K1VKOkaU0HjYlCSnTqnGtojYmOZ6yU/uTMPtuqcdzYB/Uyb7qj4VJLeBX2\r\nBHIMx0KfMD+gNfnQfsmauwfgF0/z1EMMpkkC1FwlLp3wjxibQ+ajzDbOHfEp\r\n7O6uM26AKzKd81qnmZ+fOEaAL51mQ1BaVA3bQ/Pkr3i179ZEWzWOHQsY5WG/\r\niKSrLFNYKzUaTUBq7N32Sz5DqQ53yQeCcZXwVgVX0WCHhRx6jet8Gu4dyTf/\r\nhphVriqUbmk5jqTopkHzZWUze2HEm/tHw68EICUovm3t8VHid1hRDwzxjQVN\r\nkYNC1blgbIUEgowoCZpjrjU1vCJdWOWbI5LTyrSOWsCHEz+/OeaUykueb3dp\r\nGICHzX+VMVoEs6D4KhbZbaOBH1pbw4/5gQc=\r\n=1Otb\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"alsadi","email":"alsadi@gmail.com"},"directories":{},"maintainers":[{"name":"alsadi","email":"alsadi@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async_utils_0.0.2_1676987386846_0.3023978628626429"},"_hasShrinkwrap":false},"0.0.4":{"name":"@alsadi/async_utils","description":"Miscellaneous Asynchronous Generators Utilities for ECMAScript NodeJs","version":"0.0.4","private":false,"author":{"name":"alsadi@gmail.com"},"license":"Apache-2.0","type":"module","repository":{"type":"git","url":"git+https://github.com/muayyad-alsadi/es-async-utils.git"},"keywords":["async","ipc"],"bugs":{"url":"https://github.com/muayyad-alsadi/es-async-utils/issues"},"homepage":"https://github.com/muayyad-alsadi/es-async-utils#readme","gitHead":"7edc9e68701feb0b8284aa4598cc7fd6eccaf0b6","_id":"@alsadi/async_utils@0.0.4","_nodeVersion":"16.18.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-0NwcI8wYj/AF07BmQKL5dFlFkUdjOGwSdPkpBxL2/tYYlT8hoJOEbax2Izz26nQgloLOE2Yxc3FNtkk9hqSV0Q==","shasum":"fd43c78ea617d898e6c05eec8567f39e0bba7fa5","tarball":"https://registry.npmjs.org/@alsadi/async_utils/-/async_utils-0.0.4.tgz","fileCount":7,"unpackedSize":25587,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICzmrqn3NOFRz5asfRMRuaxYfLl9nVrM2xJefiFTSjolAiA4wZLwuqpVCPt34/7ez3lEra6z+5sqB8XqcunInMijgQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj9hfnACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoWxhAAmYQyOdGwyhOE6XPxYQuXOoHmsRPzWX56BrcTCO4GQe1636kX\r\n5PucnHx75n2USLHKbSeKWbIbhGvidhbdmQ8U2AQJIoMBZGZ2gbD/6UWyMHqV\r\nZO1hVYPM/7bUaCXQy0BaDbeZrlNZ4d3J8WWGLFW5DstaDyuYGDuHt/EjLlq4\r\ntknQ/mTfyusVtkpLJx9tD/8bC5bd+j1l8JG/gw+3kJPVkYoaQs6LL0JPyocm\r\nAhtqZG5zcyiSfoGnW3B2JAArHlauHcMDmLXgrRlZsfaoJ0LsrgQgfCEJRh1c\r\nZXa8yymIPRb4fZ2M7O10ONDHXXnMURQWJEUYEpLlOfwu7JJh3/UYY/A/6bGr\r\n/GpBGsBlkhfwZqNK0CGRpBg1I8vOwGM08b9ZownmS8Y+hIX+0X9mGYi40eER\r\noroq1s/ODyRS9N01M7sfkSosIXm+T9DerPt3+J8Xz9inLmNvGgsoj0cCkaUQ\r\nEsKAci9Z8oOnG7bD87gdVyFGI0X2TUCx2mxCsYd2ICrTW4CQljKGZkgcJTT0\r\nNJiQQzfudzn0P9sAWY+MhFljL4MVD9LjLyPXzhiF9WtIVCHQEkVON+8Z8DFS\r\nJQKPPdswn2HQ8X8O7mMstplGs4RkGWogwbU5Ol6KumTnjVy9x/pZq2z+nhB5\r\n8WRV/dfmIlUi6OpoRpzm5CKzGg7e/K3/Ovk=\r\n=8Gvt\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"alsadi","email":"alsadi@gmail.com"},"directories":{},"maintainers":[{"name":"alsadi","email":"alsadi@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async_utils_0.0.4_1677072359667_0.6647895122340088"},"_hasShrinkwrap":false},"0.0.5":{"name":"@alsadi/async_utils","description":"Miscellaneous Asynchronous Generators Utilities for ECMAScript NodeJs","version":"0.0.5","private":false,"author":{"name":"alsadi@gmail.com"},"license":"Apache-2.0","type":"module","repository":{"type":"git","url":"git+https://github.com/muayyad-alsadi/es-async-utils.git"},"keywords":["async","ipc"],"bugs":{"url":"https://github.com/muayyad-alsadi/es-async-utils/issues"},"homepage":"https://github.com/muayyad-alsadi/es-async-utils#readme","gitHead":"8dcc9a72e6ee284e6ec42f86cb54e21e1f791aac","_id":"@alsadi/async_utils@0.0.5","_nodeVersion":"16.18.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-7Kbw/oBFPsv/1vokwGFmJhGqA6rDNK4xrrStM86Odd8WeNrvdSLsIKpK1JEkM5vq4p750xuu0PBrsZR9C6skkw==","shasum":"6edb0c2f69e3023096b157560e72bb8c05254c86","tarball":"https://registry.npmjs.org/@alsadi/async_utils/-/async_utils-0.0.5.tgz","fileCount":7,"unpackedSize":27071,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCnC2A9WGRq1zDJWA+PmsG3nLMNb3rqFCcz5xdEWrk9MAIgQWKwe4YeJQ4Tl13gWWnKn69Jje5Hi2T/YNnsjgoCJmE="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj9hgoACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqMuw/9GA1PzO88dFWyClS7ZG1yRI4A4UXvU2Y6ZA6rRi5zJOF8GYmX\r\ncbqWrbrfpaZ0vs2CYx5HzdiAGHJDFDfWSJlYnWvEvy0NUuiBdbWIMC+wEj6B\r\n+aNKxmxX8jv/3Lj1NY7Xkf69KpTvSHOG+i3PPHRfg1tptBEDrHTG7YWm7c1j\r\nJCfuVSRY6knxDkLdyIIMyLcWgjHJBvNB0SJkBVsQDIkBf4TVVk6iDybutfDU\r\n9cuNsT5RhhcgYpfOcJhpDkqpqamaZIi/L9s5m2bR4zKRtrzO2cGhK6zoqBGX\r\nkZtLU8edyEQRPKkQtz9Dl2J1tWx7ZoV4jC+VDC9ncbBIjjPzFRbBVV0vUcL9\r\nbhbAQRNktWT75K0NffA+FkAMPXR97/+bTS0vSkc1JjdLDGtVOAewKEvrLqQU\r\n60ekWgfoiGH6SJSOaSsgacsfq62jGQOXh0h9jGGNSS8096ExlrULnpmCp23x\r\nWjbYPv2CpAuqjRoxB9BPA9LhCzCwHNuT3M6nnObB+Epr2EPz/dz7KGEz1pw+\r\nv3AWZyRhqAiTAp6I1V0BqamuL2YI6UfUUf1n+FyxO/KftsLNMyeeKjOgJBkf\r\n5+AWBaN5TKqvyDRQba4MeoAerJtArNgpjA/pEQGtuXhBjdbNkQlv88wHQyj/\r\njrWMVzcuG8ULAg0yI/xO5xyLK4dGWko4/AA=\r\n=RXe8\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"alsadi","email":"alsadi@gmail.com"},"directories":{},"maintainers":[{"name":"alsadi","email":"alsadi@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async_utils_0.0.5_1677072424066_0.9538680039401755"},"_hasShrinkwrap":false},"0.0.6":{"name":"@alsadi/async_utils","description":"Miscellaneous Asynchronous Generators Utilities for ECMAScript NodeJs","version":"0.0.6","private":false,"author":{"name":"alsadi@gmail.com"},"license":"Apache-2.0","type":"module","repository":{"type":"git","url":"git+https://github.com/muayyad-alsadi/es-async-utils.git"},"keywords":["async","ipc"],"bugs":{"url":"https://github.com/muayyad-alsadi/es-async-utils/issues"},"homepage":"https://github.com/muayyad-alsadi/es-async-utils#readme","gitHead":"8d8e6b6dea2f1986b7dd18a02ef4ded19d17ccd5","_id":"@alsadi/async_utils@0.0.6","_nodeVersion":"16.18.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-u/m1ALNabZQvH8MtDsq+A8bkfDuvATvo5ohVcIeYMY0fqCGseBesvSHahFq38SICTy4Xr1471ZKDtKL1BEqhqw==","shasum":"931d67e0564932836313fe6a2163aef59afb1f94","tarball":"https://registry.npmjs.org/@alsadi/async_utils/-/async_utils-0.0.6.tgz","fileCount":7,"unpackedSize":27459,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICaAv0IFOZjb6VGDHyw2VCeIGJXbnvOO9NqkdhGYB89JAiAh0yG/Y2TOSO3A80jl99SL0pH7u4lprOKdmJh1tn2lig=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj+xxVACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqifg//Ydb7PX6Ub9eVtFsnFdJCjE+QeIJL4hbyXBDWRtIYqL2DdfIv\r\n8hahLfbIi3SyeY3zwZRxUyD6N3I9QpEoHyyuIkXpwYsmonBZh9I5XEO34q9O\r\nqtGxb9IoqaSPSZTCabHb6c+jDNMIolq9s0ZytK7J6SwNiUDh8m+b2XyK3UEN\r\nCn5srgmsjCrucW3/0sgkGQ0m7Hw3zJWZxkVsTCUHan0GSNxxzTv2alkyDCal\r\nnUa9fwhmv89mCMQpYm043CBF5z6oxoKh99Q98fEB61MQ4A8jGFDPfqbYHhMI\r\nTNql2/HgfcvkhBe3UTjwdXBUyhq84SvA2M/Ju+SvP2u0jH/gj33sk3423DWO\r\nMu7zlStyOMM3Hkl6ezTiEj2n9/f25JcEtuwlFmOsrP/R/DdILtU4iC49YrGY\r\noCAR8/i09TnZJywlrYnYaCmJEPuafjTlELtlyQ/6ugUkgr5H78JSN/53DIwF\r\n01frOB2oosOybzOBz+xzKz5UoFPaAT38auuj7s/MLjnViZWPdwSut8PrjguD\r\ncDWfFV5n4XzunNj2dir3zhPtuMmtgE7D7GG0ZD1in16fP5XgcBs/ePKOeP5L\r\nYM8uxTF46kkOAXUGt6R+LnOd55fEqgZMl7qDj/fZAQP8bAmGj+FrdTjT2ytV\r\nqEbTW4e8DKGpanDHb7AW2blTFr9MzPAJ/HA=\r\n=o9Fb\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"alsadi","email":"alsadi@gmail.com"},"directories":{},"maintainers":[{"name":"alsadi","email":"alsadi@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async_utils_0.0.6_1677401173264_0.39511035401501315"},"_hasShrinkwrap":false},"0.0.7":{"name":"@alsadi/async_utils","description":"Miscellaneous Asynchronous Generators Utilities for ECMAScript NodeJs","version":"0.0.7","private":false,"author":{"name":"alsadi@gmail.com"},"license":"Apache-2.0","main":"index.js","type":"module","repository":{"type":"git","url":"git+https://github.com/muayyad-alsadi/es-async-utils.git"},"keywords":["async","ipc"],"bugs":{"url":"https://github.com/muayyad-alsadi/es-async-utils/issues"},"homepage":"https://github.com/muayyad-alsadi/es-async-utils#readme","gitHead":"2f50f0e2201de70374a3ffb33aa2581cf5e74ddb","_id":"@alsadi/async_utils@0.0.7","_nodeVersion":"16.18.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-Y+SImQZQWQsSRmf305QQpwMVAWlwYjm/A2NenUxtSZOazwf0q81v3+CMQ1xTEmivlcD+PF5VuvfCxUr9EXcOjg==","shasum":"5b0e8310565017f127b5826df7640ef44fa3b402","tarball":"https://registry.npmjs.org/@alsadi/async_utils/-/async_utils-0.0.7.tgz","fileCount":7,"unpackedSize":27481,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC9FxbzwVIa4s8RKzpybPePovmVcTVmLUyZvSsYue76MQIhAPeeFY+yvUguyEaDerAhrw6LTR4JRmwGmbK1yQHJzSbR"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj/J3eACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqD/g//WXQ05/8p4cBlqRgOU49C01SifDYnbeSdEMBzCj24X3PN6Xai\r\nyWW1v8XPO5n8SH/Wg+cZM5wir0sHjzw0zzIRRWgiOB900f45OdBZF3HS1JMT\r\n17Wc6eLoAdUz99+lSRT8JpeMVdu1wto/PUtnTxmzetEynzombXSDkvUJjwaU\r\nnclWg2426CqvpXdOQGU7lGJsENojKpD+ywnhbDWOqMa+0OBiLvryVHRmIAFX\r\n3oXD++IWwrQZrSkuK38z5sqzMs3CeyLjaoNcJZlETaSO8JKu83by7WPteidk\r\nld0Buw7Fpd+semJxTfr7zy+iCWA0osltYYGA6Yitxzm0jcpQpTKbVUnqtrw2\r\n88OHhSNVbz99+NhEdlXbw0zq0y2r2XP0I29TI4TIyOCOaxb7tB4kqzNj/BVK\r\nsLq3qkvBzlZ+JzhXgGQV/vQDQ3CsO2sftnlntzNU46BfvZB+6YQZaveNZSCA\r\nuaUIYFaPTVkDUoW8/uvf/G9L8ACWrWZx2AkPnPQv5dUBLpcpuNM9A6/77aB7\r\nd9YEP2hAJSL1WIEpB9ra3NUH7jkDoFwO8YDSUcdFrwXAynGAJKhqmy7SoGw+\r\nKjWRFPfy+HAhZPlp3M/Aqwa0XP+9btfWiXiRnck7xBHdjYuGxTUj0EnSf2c8\r\nIcc0HFoHBkXwxuMX8CuzM2BuEnZA2OAXn8U=\r\n=ruTY\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"alsadi","email":"alsadi@gmail.com"},"directories":{},"maintainers":[{"name":"alsadi","email":"alsadi@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async_utils_0.0.7_1677499870504_0.4865788223468166"},"_hasShrinkwrap":false},"0.0.8":{"name":"@alsadi/async_utils","description":"Miscellaneous Asynchronous Generators Utilities for ECMAScript NodeJs","version":"0.0.8","private":false,"author":{"name":"alsadi@gmail.com"},"license":"Apache-2.0","main":"index.js","type":"module","repository":{"type":"git","url":"git+https://github.com/muayyad-alsadi/es-async-utils.git"},"keywords":["async","ipc"],"bugs":{"url":"https://github.com/muayyad-alsadi/es-async-utils/issues"},"homepage":"https://github.com/muayyad-alsadi/es-async-utils#readme","dependencies":{},"gitHead":"34bd8728886ac678aaac488642a709bcad1c13d2","_id":"@alsadi/async_utils@0.0.8","_nodeVersion":"16.18.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-JAapc4om2gBBTikmMRTuqdzeWhTZtQVGcR/r5Mip/q0jmyG/7ODBeJYmeRhKpq4CeK1UZR0px+Lw6wpVoXdD7w==","shasum":"905b1a7bc9fa51fed2a6e1f0f4358b7a9fb7af54","tarball":"https://registry.npmjs.org/@alsadi/async_utils/-/async_utils-0.0.8.tgz","fileCount":12,"unpackedSize":289481,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQClv8dyhd4s8CBod7PojGrbL1IITGQ5MCnDEtsIm6I6TwIgHLmrstcrpiRZVpqszLfsV4PMNmRy37Zb90XkQdaP+vQ="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkCItPACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq0dg//cBEPcc73iSmyq0jCjAWPbtTLsiF20yfXIwSVHubKDD0CDuHW\r\nLneBXT91VDRtuLjpL+gwUZYFeR8peXXWsEXN1VfgyYC7GyGZmAM8VBRpmUc2\r\nnLzoQsv/PXvoOmosF8I9jHlfNnJpDODz6qE7N0skDKRiOp6wA84nk5iaD6Cv\r\nWbdPI8JtCan2CqmYr7lMe/WioAObfxnv0UMfLoMirtjz8BFiClI19wfgyB7L\r\nWIiI/klM3L86IfKGhsO4n85IjrOZK92eI1L5qATM8bz90TPOi4wetatK8fE6\r\nd8mGzSlZHZ1SO/Tmc/EB83HL2McjFT12t1jRWJTnXLJx4qP382WvhnId5LKk\r\nfZrRZOy1Ob4RfC+DFhEsgBHmNmhXYIAFTAfwJ9DkUhZCaxujpCU/46sV7kr1\r\nODxuKb1EkaX5YttTQIRSnk57xYFnCD7Bshixna21fDd9SmHIf+4IbvlZtHVe\r\nX8i2UCPLOKfE7RhRJU/pzu+MjEMGlO2W800XwTPflsC5/m2anbmALU2laBOl\r\nEXGYguatvupGd3LE1jPXPJAAN1JaFDGVLOPLF0BWEvzp19BFqdFjAC8fhM2V\r\nZu2GW8QOQeo/3WDHgBmsG3H1rl1XojaS4rq9XzZCZK9A7AKrPmmOGqrcamW3\r\ngL4vqupT4yN1LAbPGJPq8mOazgYgLyKIMMY=\r\n=UckO\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"alsadi","email":"alsadi@gmail.com"},"directories":{},"maintainers":[{"name":"alsadi","email":"alsadi@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async_utils_0.0.8_1678281551369_0.43457529823844765"},"_hasShrinkwrap":false},"0.0.9":{"name":"@alsadi/async_utils","description":"Miscellaneous Asynchronous Generators Utilities for ECMAScript NodeJs","version":"0.0.9","private":false,"author":{"name":"alsadi@gmail.com"},"license":"Apache-2.0","main":"index.js","type":"module","scripts":{"types":"tsc index.js --declaration --allowJs --emitDeclarationOnly --outFile index.d.ts","lint":"eslint -c .eslintrc.json index.js","lintfix":"eslint -c .eslintrc.json --fix index.js","prettier":"prettier -w ."},"repository":{"type":"git","url":"git+https://github.com/muayyad-alsadi/es-async-utils.git"},"keywords":["async","ipc"],"bugs":{"url":"https://github.com/muayyad-alsadi/es-async-utils/issues"},"homepage":"https://github.com/muayyad-alsadi/es-async-utils#readme","devDependencies":{"eslint":"^8.37.0","eslint-config-prettier":"^8.8.0","eslint-plugin-import":"^2.27.5","eslint-plugin-jsdoc":"^40.1.0","eslint-plugin-promise":"^6.1.1","eslint-plugin-security":"^1.7.1","prettier":"^2.8.7","typescript":"^5.0.2"},"types":"./index.d.ts","gitHead":"005c764fdef9d09fa5c435cff218f86bd963c6b6","_id":"@alsadi/async_utils@0.0.9","_nodeVersion":"16.18.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-euuldh/ckDCBQvR5yaCvecxHrFp24FFHEvTwJXrRn6YROByWTdsDPCkFfmCJvkf5SCqdkOMsoDNKcHP9bW1PpQ==","shasum":"8b761ea0556a501c2dcf77272d6fb6e3480f9696","tarball":"https://registry.npmjs.org/@alsadi/async_utils/-/async_utils-0.0.9.tgz","fileCount":15,"unpackedSize":296126,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBFOynKLUEHITF4iVAhh9Of/sjqaEacT7s/NGLApNUK0AiEA4naIJlTL2KBip1EBC56g6shgSDtvZ4RqnXa71au1BBw="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkJEKAACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmplAQ//V9kP6EXyNQ67QU5HW7WBX3dDIme8KQUuEBb/eTTxi+qVY6eo\r\n8mozC31TeMdmsiLM77iSC+b3+wVBk+fgJmF0/aEN5G01wIFfI9CDZ5xmN+rL\r\nXgNODfUSYpQtMeH1OB3An8LvRWu97iAsjd74YufMnOotNnIWYzdxS27eY5Ty\r\nYGe4WmmL8BA4rEgzWCh72W1GjU78wIAA9MZBIWZP+MCKyciH5K1jEyL/bv6X\r\nJf8z9cvbR23erfrRWU8rz5ydsV5sA+IuO/HkghM0F1BX+0hHuLeOSG+RNDx5\r\nQs06HBJhE79qFEDQqHlNizVvWnemTom0gmlT3gGyvALs6NLwJNy2cJiXvQC8\r\n2tzqDI2jpn1H6ZheSXC5lSANv9QSZmxtpgJEAFZMV6KWHMsuIcGLBLgrGUah\r\nY9wyEEE8a36OwMCXQpJcG0kiUFgJni2eeC2lEx2mVGvhgqoO0aSP4nPgRsd0\r\nMQM659KxRs3haHnpY9BU7lklwQZD04QX2KQwtdsSAwLq9pD8ipjaJqefaPaA\r\nBvLV4Y3D3oLsjRVS9tIzUA+jph9YHsxbrPfLYhcGqwE2ao+x56mYThLNwCnJ\r\nfurofLZs0fUnoy0V6KNrYHEmARCg6IL1lkY8ON5iy60/i36OASx2oCFQeG2h\r\nszMc7IX8/5LUxqohnkAkWyxwcKugjv28sBE=\r\n=82sn\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"alsadi","email":"alsadi@gmail.com"},"directories":{},"maintainers":[{"name":"alsadi","email":"alsadi@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async_utils_0.0.9_1680097920450_0.6979243372897885"},"_hasShrinkwrap":false},"0.2.1":{"name":"@alsadi/async_utils","description":"Miscellaneous Asynchronous Generators Utilities for ECMAScript NodeJs","version":"0.2.1","private":false,"author":{"name":"alsadi@gmail.com"},"license":"Apache-2.0","main":"index.js","type":"module","scripts":{"types":"tsc index.js --declaration --allowJs --emitDeclarationOnly --outFile index.d.ts","lint":"eslint -c .eslintrc.json index.js","lintfix":"eslint -c .eslintrc.json --fix index.js","prettier":"prettier -w ."},"repository":{"type":"git","url":"git+https://github.com/muayyad-alsadi/es-async-utils.git"},"keywords":["async","ipc"],"bugs":{"url":"https://github.com/muayyad-alsadi/es-async-utils/issues"},"homepage":"https://github.com/muayyad-alsadi/es-async-utils#readme","devDependencies":{"eslint":"^8.37.0","eslint-config-prettier":"^8.8.0","eslint-config-standard":"^17.0.0","eslint-plugin-import":"^2.27.5","eslint-plugin-jsdoc":"^40.1.0","eslint-plugin-promise":"^6.1.1","eslint-plugin-security":"^1.7.1","prettier":"^2.8.7","typescript":"^5.0.2"},"types":"./index.d.ts","gitHead":"c3c69e0d2a53403fcc52db007098a737f10923cb","_id":"@alsadi/async_utils@0.2.1","_nodeVersion":"16.18.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-mQZo3qXq4Hq6Jj2S/O1F+bZaGyTqyzLH4rIDn/p/0tnwBQbW/n6v5DWnmOfCApj0v0v+wHbB8j/dR5F2/Jp2zQ==","shasum":"d48a57be3e26860d64e40ccdda5f0a2ed00205ac","tarball":"https://registry.npmjs.org/@alsadi/async_utils/-/async_utils-0.2.1.tgz","fileCount":16,"unpackedSize":296255,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICn5AWnyyJCgBcx5Y6gLC1UmEzXDQotdjGotsZ4gTdn/AiEAyZLplh2Zanynj9hUUZcqlhJ0HlmIKp6ELznNhm3ygEM="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkJEdcACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqVlQ/9HKIfYAeo6VOZMvmwAXsLRsoVsOI6ksCxNSaUPvgDiFnuvg7p\r\naH419BJsrnEMALx4v6MNM03I3OJLxKdJiRy2H4CDKlVtlf4fUHn5E91mykof\r\nOJMACKcCYXp96RN2WnG6dPOWZaxG+IehItkwHYg1bEQdJ69rwhXtCpurt1wL\r\nt75mY6cJDXdnTa3uYHCdG6EmUC3tm0zhCRZdHeStLV0LHGr4q3Nkb2gPYLcR\r\nIG8ZAKr8F08Tsw3VpDFnHEyq3Nbl+MzJNycz8eOvg04uG9/pG7LunP8i/iw0\r\nd2oIyErZHkDJzz03lT2l+0q1G3qtnupc0WOB1OODtk/fO761SJtFYgEpuGv0\r\n5jn9Wb0tm2x+3H97xmc/ihdllmv0ZbhuWS0VIqFlyXmSylkOPsTgOACdVkS2\r\nrc0LoFQMqUly65/f0i1r8TjUGsQ1hIyC7IrqH/Ym4i7CQ0wD1/V9PbKPl7Xe\r\njwY5UfoABc8YIAFbIzSlY3m5XlKyYPvcbvVsEmHaTvaLOOjbRWNpMbYSPsD+\r\nTku0jbSeEbIzLpFmIcw0Y2BprEgFUCQJ+CRWAVJPt9LngsEXMpHK1+fUx8Ia\r\nLTi0Hh6/UBIvnrUfgsIUfknx7jF8flvHvkJ+9JKyg3dk/7DbZSJsrQL3UZaT\r\nOWiws015uX/wC1T2Smex8r62j8FL/pSlTKw=\r\n=HVxy\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"alsadi","email":"alsadi@gmail.com"},"directories":{},"maintainers":[{"name":"alsadi","email":"alsadi@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async_utils_0.2.1_1680099164223_0.4496676024197228"},"_hasShrinkwrap":false},"0.2.2":{"name":"@alsadi/async_utils","description":"Miscellaneous Asynchronous Generators Utilities for ECMAScript NodeJs","version":"0.2.2","private":false,"author":{"name":"alsadi@gmail.com"},"license":"Apache-2.0","main":"index.js","type":"module","types":"./index.d.ts","scripts":{"types":"tsc index.js --declaration --allowJs --emitDeclarationOnly --outDir .","lint":"eslint -c .eslintrc.json index.js","lintfix":"eslint -c .eslintrc.json --fix index.js","prettier":"prettier -w ."},"repository":{"type":"git","url":"git+https://github.com/muayyad-alsadi/es-async-utils.git"},"keywords":["async","ipc"],"bugs":{"url":"https://github.com/muayyad-alsadi/es-async-utils/issues"},"homepage":"https://github.com/muayyad-alsadi/es-async-utils#readme","devDependencies":{"eslint":"^8.37.0","eslint-config-prettier":"^8.8.0","eslint-config-standard":"^17.0.0","eslint-plugin-import":"^2.27.5","eslint-plugin-jsdoc":"^40.1.0","eslint-plugin-promise":"^6.1.1","eslint-plugin-security":"^1.7.1","prettier":"^2.8.7","typescript":"^5.0.2"},"gitHead":"c21c2adaef99fa8a789985cd1d376dd9449e3859","_id":"@alsadi/async_utils@0.2.2","_nodeVersion":"16.18.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-7iWicwrc6e19YP+Pv1hqJXGYKRAcrfRUOZnPJskU8IDtjxaNeuH7dMpnobCPcI5NX6VwRps1NeQBLEclZHy7VQ==","shasum":"7a6ddc53a43ae142fbe1ed31350ebecbc73f8ff4","tarball":"https://registry.npmjs.org/@alsadi/async_utils/-/async_utils-0.2.2.tgz","fileCount":17,"unpackedSize":299077,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICU2IUZ2HDdCX2pzZKbZmkxp6Fh8WTKpD+ImE/OHkzObAiEArGUaU0lecFmpay8CNOS9jV23mqWal6krJ/VomD3xOmo="}]},"_npmUser":{"name":"alsadi","email":"alsadi@gmail.com"},"directories":{},"maintainers":[{"name":"alsadi","email":"alsadi@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async_utils_0.2.2_1693752881685_0.7932799565815105"},"_hasShrinkwrap":false},"0.2.3":{"name":"@alsadi/async_utils","description":"Miscellaneous Asynchronous Generators Utilities for ECMAScript NodeJs","version":"0.2.3","private":false,"author":{"name":"alsadi@gmail.com"},"license":"Apache-2.0","main":"index.js","type":"module","types":"./index.d.ts","scripts":{"types":"tsc index.js --declaration --allowJs --emitDeclarationOnly --outDir .","lint":"eslint -c .eslintrc.json index.js","lintfix":"eslint -c .eslintrc.json --fix index.js","prettier":"prettier -w ."},"repository":{"type":"git","url":"git+https://github.com/muayyad-alsadi/es-async-utils.git"},"keywords":["async","ipc"],"bugs":{"url":"https://github.com/muayyad-alsadi/es-async-utils/issues"},"homepage":"https://github.com/muayyad-alsadi/es-async-utils#readme","devDependencies":{"eslint":"^8.37.0","eslint-config-prettier":"^8.8.0","eslint-config-standard":"^17.0.0","eslint-plugin-import":"^2.27.5","eslint-plugin-jsdoc":"^40.1.0","eslint-plugin-promise":"^6.1.1","eslint-plugin-security":"^1.7.1","prettier":"^2.8.7","typescript":"^5.0.2"},"gitHead":"3146a0794f95a5bf65285048efdb9c486c69bd80","_id":"@alsadi/async_utils@0.2.3","_nodeVersion":"16.18.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-hj8mtsdsWF6w9pMhHFN5IQpNJdG17iInc1mPKO+iSbj6jkBSppDXBZXmWWigoW6TfGT/5M71X//5kqxSVG39YQ==","shasum":"fcdb8aaf7ab7b3b303c7182180fb87859d541d9b","tarball":"https://registry.npmjs.org/@alsadi/async_utils/-/async_utils-0.2.3.tgz","fileCount":15,"unpackedSize":42434,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID8zoHxNAcTv4rDRStrDOVzqfpEv+1ADZMZZctLgpkuXAiEAspfS1kGPTRhN8e4JrlI8cFXI1B15rfLByT6L4LqlKps="}]},"_npmUser":{"name":"alsadi","email":"alsadi@gmail.com"},"directories":{},"maintainers":[{"name":"alsadi","email":"alsadi@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/async_utils_0.2.3_1693752953235_0.7789706075089842"},"_hasShrinkwrap":false}},"time":{"created":"2023-02-15T11:40:54.929Z","0.0.1":"2023-02-15T11:40:55.196Z","modified":"2023-09-03T14:55:53.628Z","0.0.2":"2023-02-21T13:49:46.956Z","0.0.4":"2023-02-22T13:25:59.806Z","0.0.5":"2023-02-22T13:27:04.212Z","0.0.6":"2023-02-26T08:46:13.412Z","0.0.7":"2023-02-27T12:11:10.671Z","0.0.8":"2023-03-08T13:19:11.563Z","0.0.9":"2023-03-29T13:52:00.662Z","0.2.1":"2023-03-29T14:12:44.389Z","0.2.2":"2023-09-03T14:54:41.963Z","0.2.3":"2023-09-03T14:55:53.452Z"},"maintainers":[{"name":"alsadi","email":"alsadi@gmail.com"}],"description":"Miscellaneous Asynchronous Generators Utilities for ECMAScript NodeJs","homepage":"https://github.com/muayyad-alsadi/es-async-utils#readme","keywords":["async","ipc"],"repository":{"type":"git","url":"git+https://github.com/muayyad-alsadi/es-async-utils.git"},"author":{"name":"alsadi@gmail.com"},"bugs":{"url":"https://github.com/muayyad-alsadi/es-async-utils/issues"},"license":"Apache-2.0","readme":"# Miscellaneous Asynchronous Generators Utilities for ECMAScript NodeJs\n\n-   `sleep` - await the returned promise to sleep the given time\n-   `chain_generators` - collect items from multiple async generators from which\n    ever comes first\n-   `bulks` - collect items from the given async generator into chunks of given\n    size\n-   `generatorFromEvents` - convert emmited events to async generator\n-   `AsyncSemaphore` - resource-limiting lock used like this\n    `sem.with(async function(){do_expensive_work_here();})`\n-   `AsyncLock` - behaves like normal thread lock implemented using\n    AsyncSemaphore with special case of `n=1`\n-   `AsyncEvent` - use `await event.wait()` which will return when `event.set()`\n-   `AsyncEventAlt` - same as `AsyncEvent` implemented using\n    [EventEmitter](https://nodejs.org/docs/latest-v14.x/api/events.html#events_class_eventemitter)\n-   `AsyncChannel` - a queue of optionally given size that have producers\n    (`await ch.push(item)`) and cosumers (`item=await ch.consume()`)\n\n## Usage\n\n```\nnpm install --save '@alsadi/async_utils'\n```\n\nand in your code\n\n```\nimport {sleep, chain_generators, bulks} from '@alsadi/async_utils'\n```\n\n## Sleep\n\n```javascript\nimport { sleep } from \"@alsadi/async_utils\";\nasync function main() {\n    const p = sleep(5000).then(() =>\n        console.log(\"this will appear after 5 seconds\")\n    );\n    console.log(\"sleeping for 2 seconds: started ...\");\n    await sleep(2000);\n    console.log(\"sleeping for 2 seconds: started done\");\n    console.log(\"3 seconds remaining: ...\");\n    await p;\n}\nmain();\n```\n\n## Chaining async generators (possibly infinite)\n\nIf you have two infinite async generators `gen1` and `gen2` that produce items\nyou can consume those items as they arrive\n\n```javascript\nfor await (const item of chain_generators([gen1, gen2])) {\n    console.log(item);\n}\n```\n\n## Collecting items from an async generator into chunks of given size\n\n```javascript\nfor await (const chunk of bulks(3, gen3)) {\n    console.log(chunk);\n}\n```\n\n## generatorFromEvents\n\nNode's built-in\n[http server](https://nodejs.org/api/http.html#httpcreateserveroptions-requestlistener)\nhave events like [data](https://nodejs.org/api/net.html#event-data) on `request`\n\n```javascript\nconst gen = generatorFromEvents(request, [\"data\"], [\"end\"], [\"error\"]);\nfor await (const [name, [chunk]] of gen) {\n    console.log(name, chunk.length);\n}\n```\n\n## AsyncSemaphore - resource-limiting lock\n\n### AsyncSemaphore Background\n\nAs [Semaphores](https://man7.org/linux/man-pages/man7/sem_overview.7.html) are\nimportant to coordinate threads. This node module gives you a similar feature\nfor your async tasks.\n\nA Semaphore indicates available resources to a given capacity. When this limit\nis reached, it will sleep until a resource is free.\n\nThink of it like a sound card with limited number of channels, let's say 8\nchannels, in this case we have a semaphore of size 8, when a process acquire it,\nthere will be 7 free resources available when another process acquire it, there\nwill be 6 free resources available. When all resources are taken the trial to\nacquire it will sleep until it's available.\n\n### AsyncSemaphore Usage\n\nIf you have an async generator or you have a producer that generates many tasks\nand you want a cheap way to limit how many pending tasks\n\n```javascript\nimport { SemaphorePromise } from \"@alsadi/semaphore\";\n// indicate that we can have 5 pending tasks\n// 5 resources can be allocated without sleep\nconst sem = new SemaphorePromise(5);\nasync function main() {\n    // ...\n    await sem.acquire(); // this will return directly or sleep until resource is available\n    const wrapped_promise = myasync_task()\n        .then(console.log)\n        .finally(() => sem.release()); // when done a resource is available again\n    // ...\n}\n```\n\nyou can use `sem.with(...)` to do `acquire()` and `release()` automatically.\n`sem.with(...)` takes a function that returns the promise\n\n```javascript\nimport { SemaphorePromise } from \"@alsadi/semaphore\";\n// indicate that we can have 5 pending tasks\n// 5 resources can be allocated without sleep\nconst sem = new SemaphorePromise(5);\nasync function main() {\n    // ...\n    const wrapped_promise = sem.with(function () {\n        return myasync_task().then(console.log);\n    });\n    // ...\n}\n```\n\nYou can use this inside async generators\n\n```javascript\nasync function* mygen() {\n    while (something()) {\n        yield sem.with(function () {\n            return myasync_task().then(console.log);\n        });\n    }\n}\n```\n\n### AsyncSemaphore Implementation\n\nThis implementation only uses an integer counter and a Promise with a callback\nOther than that it's zero cost. It does not have busy loops or arbtrary sleeps.\nThe size of the semaphore does not affect its cost.\n\n## AsyncLock - classical lock behavior\n\n```javascript\nimport { sleep, AsyncLock } from \"./index.js\";\n\nconst lock = new AsyncLock();\n\nasync function main() {\n    const result = await lock.with(my_async_function);\n    const result = await lock.with(() => do_something()); // do_something() returns a promise\n    const result = await lock.with(async function () {\n        await do_something();\n    });\n}\n```\n\n## AsyncEvent\n\n```javascript\nasync function main() {\n    const event = new AsyncEvent();\n    // somewhere event will be set\n    sleep(5000).then(() => event.set());\n    await event.wait();\n}\n```\n\n## AsyncChannel - a queue of optionally given size that have producers and cosumers\n\nYou can pass an optional queue size, otherwise queue will be unlimited.\n\n```javascript\nconst queue_size = 7;\nconst ch = new AsyncChannel(queue_size);\n```\n\nwhen you push to the queue you must use await because if queue size limit, push\nwill sleep until consumers do their work\n\n```javascript\nasync function producer(name) {\n    for (let i = 0; i < 10; ++i) {\n        await ch.push(`${name}-${i}`);\n    }\n}\np = [];\np.push(producer(\"my-producer1\"));\np.push(producer(\"my-producer2\"));\nawait Promise.all(p);\n```\n\nitems in queue are consumed like this\n\n```javascript\nwhile (true) {\n    const item = await ch.consume();\n    await do_something(item);\n}\n```\n\nyou can use async generators like this\n\n```javascript\nasync my_consumer() {\n    for await (const item of ch.consume_items()) {\n        await do_something(item);\n    }\n}\nc=[]\nc.push(my_consumer());\nc.push(my_consumer());\nc.push(my_consumer());\nawait Promise.all(c);\n```\n\nyou can run multiple consumers and producers\n","readmeFilename":"README.md"}