{"_id":"@bloqz/concurrency","_rev":"9-ec3dabbbfc7ee5071c0b4a355233aa75","name":"@bloqz/concurrency","dist-tags":{"latest":"1.2.2"},"versions":{"1.0.0":{"name":"@bloqz/concurrency","version":"1.0.0","keywords":["bloc","bloqz","state management","functional","rxjs","typescript"],"author":{"url":"shovelmn12@gmail.com","name":"Shovel Maman"},"license":"MIT","_id":"@bloqz/concurrency@1.0.0","maintainers":[{"name":"shovelmn12","email":"shovelmn12@gmail.com"}],"homepage":"https://github.com/shovelmn12/bloc#readme","bugs":{"url":"https://github.com/shovelmn12/bloc/issues"},"dist":{"shasum":"472e782f9c1e4243a4d92dea4bd6bc3d0070650e","tarball":"https://registry.npmjs.org/@bloqz/concurrency/-/concurrency-1.0.0.tgz","fileCount":17,"integrity":"sha512-hwh9gUzAsU+BmHJ+45tiopSkK0rcC6bc6shU6ePlllpYpw170NSksmhG9TMADamk73e/E6V4FX84FwSfLttQqQ==","signatures":[{"sig":"MEQCIAxoaBWQZZZVnCWy0NOU97h4zxAz7diWYItKIvoEbWusAiAUlMaYiBL2j22WKsiV0NVkTl4SbUdme1x9UXGwPX6gTA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16878},"type":"module","exports":{"main":"./dist/index.js","types":"./dist/index.d.ts","import":"./dist/index.js"},"gitHead":"55f6228563c6c172925230d35bb5b1c62167106e","scripts":{"build":"npm run clean && tsc","clean":"rm -rf dist","prepublishOnly":"npm run build"},"_npmUser":{"name":"shovelmn12","email":"shovelmn12@gmail.com"},"repository":{"url":"git+https://github.com/shovelmn12/bloc.git","type":"git"},"_npmVersion":"11.6.1","description":"Concurrency package for the functional Bloc state management library.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"rxjs":"^7.8.2"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.2","@bloqz/core":"^1.0.0","@types/node":"^22.13.14"},"_npmOperationalInternal":{"tmp":"tmp/concurrency_1.0.0_1759844959809_0.5723652712391119","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@bloqz/concurrency","version":"1.0.3","keywords":["bloc","bloqz","state management","functional","rxjs","typescript","concurrency"],"author":{"name":"Shovel Maman"},"license":"MIT","_id":"@bloqz/concurrency@1.0.3","maintainers":[{"name":"shovelmn12","email":"shovelmn12@gmail.com"}],"homepage":"https://github.com/shovelmn12/bloqz#readme","bugs":{"url":"https://github.com/shovelmn12/bloqz/issues"},"dist":{"shasum":"fbad7203370d7604e943c320454826c990f5aa6e","tarball":"https://registry.npmjs.org/@bloqz/concurrency/-/concurrency-1.0.3.tgz","fileCount":18,"integrity":"sha512-ZGRuELSGYFkYuGuH1DE8jWUn5HnGYuaTnORnxUWnR63KdVkXFHvsDmmh3N9lUgNfFRaKEfsvS10U4w8QcFvsaA==","signatures":[{"sig":"MEQCIEntUMtQJceWAxyPll/dN8WsYvxpa8n2lq0SeEd8kf8xAiBnyCEmp3E55h6yxnuSjxC75WB3VBpovCCQr0WRKqq3Gg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17873},"type":"module","_from":"file:bloqz-concurrency-1.0.3.tgz","exports":{"main":"./dist/index.js","types":"./dist/index.d.ts","import":"./dist/index.js"},"scripts":{"test":"vitest --run","build":"npm run clean && tsc","clean":"rm -rf dist"},"_npmUser":{"name":"shovelmn12","email":"shovelmn12@gmail.com"},"_resolved":"/private/var/folders/9_/mmrlltfn0v70blj02j_t9wtm0000gn/T/ec94e96d09716adc84603011baf17d39/bloqz-concurrency-1.0.3.tgz","_integrity":"sha512-ZGRuELSGYFkYuGuH1DE8jWUn5HnGYuaTnORnxUWnR63KdVkXFHvsDmmh3N9lUgNfFRaKEfsvS10U4w8QcFvsaA==","repository":{"url":"git+https://github.com/shovelmn12/bloqz.git","type":"git"},"_npmVersion":"11.6.2","description":"Concurrency package for the functional Bloqz state management library.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"rxjs":"^7.8.2"},"_hasShrinkwrap":false,"peerDependencies":{"@bloqz/core":"1.0.3"},"_npmOperationalInternal":{"tmp":"tmp/concurrency_1.0.3_1761207964544_0.806025352782757","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@bloqz/concurrency","version":"1.0.4","keywords":["bloc","bloqz","state management","functional","rxjs","typescript","concurrency"],"author":{"name":"Shovel Maman"},"license":"MIT","_id":"@bloqz/concurrency@1.0.4","maintainers":[{"name":"shovelmn12","email":"shovelmn12@gmail.com"}],"homepage":"https://github.com/shovelmn12/bloqz#readme","bugs":{"url":"https://github.com/shovelmn12/bloqz/issues"},"dist":{"shasum":"8ce64e20df33dc677b7f0f49b6f5b3676406287b","tarball":"https://registry.npmjs.org/@bloqz/concurrency/-/concurrency-1.0.4.tgz","fileCount":18,"integrity":"sha512-QduEe81fbMcyq7L0oUYyXV2ymmomii0pB9ukPK7MNM+5+9dN3jV6WSBysYsayy+c4lcZ5rU4o+2E9ppItYElxA==","signatures":[{"sig":"MEUCIE/XLPPaNUiQMVdJomaRmsCvgeG1Wl5oIysAXe8QZFtJAiEAgvpj7lYl3GjeEG5OUUtm2ogZTMt8WCVKOYnnZ2CQaO8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18121},"type":"module","_from":"file:bloqz-concurrency-1.0.4.tgz","exports":{"main":"./dist/index.js","types":"./dist/index.d.ts","import":"./dist/index.js"},"scripts":{"test":"vitest --run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","prebuild":"npm run clean"},"_npmUser":{"name":"shovelmn12","email":"shovelmn12@gmail.com"},"_resolved":"/private/var/folders/9_/mmrlltfn0v70blj02j_t9wtm0000gn/T/26b3a394c9fa37be103c5f1100ffb505/bloqz-concurrency-1.0.4.tgz","_integrity":"sha512-QduEe81fbMcyq7L0oUYyXV2ymmomii0pB9ukPK7MNM+5+9dN3jV6WSBysYsayy+c4lcZ5rU4o+2E9ppItYElxA==","repository":{"url":"git+https://github.com/shovelmn12/bloqz.git","type":"git"},"_npmVersion":"11.6.2","description":"Concurrency package for the functional Bloqz state management library.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"rxjs":"^7.8.2"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"@bloqz/core":"1.0.4"},"_npmOperationalInternal":{"tmp":"tmp/concurrency_1.0.4_1763458296598_0.830722241243885","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@bloqz/concurrency","version":"1.1.1","keywords":["bloc","bloqz","state management","functional","rxjs","typescript","concurrency"],"author":{"name":"Shovel Maman"},"license":"MIT","_id":"@bloqz/concurrency@1.1.1","maintainers":[{"name":"shovelmn12","email":"shovelmn12@gmail.com"}],"homepage":"https://github.com/shovelmn12/bloqz#readme","bugs":{"url":"https://github.com/shovelmn12/bloqz/issues"},"dist":{"shasum":"15eeb763dd49dcd846c4d2f36e3ed1cb2ae0cb4f","tarball":"https://registry.npmjs.org/@bloqz/concurrency/-/concurrency-1.1.1.tgz","fileCount":18,"integrity":"sha512-IWgiO9nAdGxP0YSc5H/ggEpUkAC+GTlzkx1YpKqQJslHnF/V+g4o7MXxZE3xQHbA+crHjP+HAe/ln5GiUlVTlQ==","signatures":[{"sig":"MEQCIGeVuY2oJD2TwZlxzrZFbaPsKbIC0sEJdLqfJWyiwPukAiAxkEBIIZtLFnxCPgHNJiF1nSWymUAILn4mP7v76SUXqw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18121},"type":"module","_from":"file:bloqz-concurrency-1.1.1.tgz","exports":{"main":"./dist/index.js","types":"./dist/index.d.ts","import":"./dist/index.js"},"scripts":{"test":"vitest --run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","prebuild":"npm run clean"},"_npmUser":{"name":"shovelmn12","email":"shovelmn12@gmail.com"},"_resolved":"/private/var/folders/9_/mmrlltfn0v70blj02j_t9wtm0000gn/T/3cbea94d4847971c104a049fa5df8670/bloqz-concurrency-1.1.1.tgz","_integrity":"sha512-IWgiO9nAdGxP0YSc5H/ggEpUkAC+GTlzkx1YpKqQJslHnF/V+g4o7MXxZE3xQHbA+crHjP+HAe/ln5GiUlVTlQ==","repository":{"url":"git+https://github.com/shovelmn12/bloqz.git","type":"git"},"_npmVersion":"11.6.4","description":"Concurrency package for the functional Bloqz state management library.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"rxjs":"^7.8.2"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"@bloqz/core":"1.1.1"},"_npmOperationalInternal":{"tmp":"tmp/concurrency_1.1.1_1764765548375_0.18746580307729332","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@bloqz/concurrency","version":"1.1.2","keywords":["bloc","bloqz","state management","functional","rxjs","typescript","concurrency"],"author":{"name":"Shovel Maman"},"license":"MIT","_id":"@bloqz/concurrency@1.1.2","maintainers":[{"name":"shovelmn12","email":"shovelmn12@gmail.com"}],"homepage":"https://github.com/shovelmn12/bloqz#readme","bugs":{"url":"https://github.com/shovelmn12/bloqz/issues"},"dist":{"shasum":"66fd5411099c0c42f5a631b0b5a22f056b2398e1","tarball":"https://registry.npmjs.org/@bloqz/concurrency/-/concurrency-1.1.2.tgz","fileCount":18,"integrity":"sha512-hSJdjqBjgYLCOlxwxa7scraxtmDz8EyBC6RZNI571dnC76e9saiexx2jX/J0KaMTPKgHR2rnC91weEn5esbZFg==","signatures":[{"sig":"MEQCIHGxJFNoyC+/vf2I37/WooeRJjzi9VPjsIUV0NxFQHrGAiBZk0GFAXSCuIih4QX+/AUWoOA8VxFjqmLD3NAXz6Y+Ng==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18121},"type":"module","_from":"file:bloqz-concurrency-1.1.2.tgz","exports":{"main":"./dist/index.js","types":"./dist/index.d.ts","import":"./dist/index.js"},"scripts":{"test":"vitest --run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","prebuild":"npm run clean"},"_npmUser":{"name":"shovelmn12","email":"shovelmn12@gmail.com"},"_resolved":"/private/var/folders/9_/mmrlltfn0v70blj02j_t9wtm0000gn/T/4ba5db54dce1c13af16dac05eb7df66a/bloqz-concurrency-1.1.2.tgz","_integrity":"sha512-hSJdjqBjgYLCOlxwxa7scraxtmDz8EyBC6RZNI571dnC76e9saiexx2jX/J0KaMTPKgHR2rnC91weEn5esbZFg==","repository":{"url":"git+https://github.com/shovelmn12/bloqz.git","type":"git"},"_npmVersion":"11.6.4","description":"Concurrency package for the functional Bloqz state management library.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"rxjs":"^7.8.2"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"@bloqz/core":"1.1.2"},"_npmOperationalInternal":{"tmp":"tmp/concurrency_1.1.2_1764766954061_0.8130594068229202","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@bloqz/concurrency","version":"1.1.3","keywords":["bloc","bloqz","state management","functional","rxjs","typescript","concurrency"],"author":{"name":"Shovel Maman"},"license":"MIT","_id":"@bloqz/concurrency@1.1.3","maintainers":[{"name":"shovelmn12","email":"shovelmn12@gmail.com"}],"homepage":"https://github.com/shovelmn12/bloqz#readme","bugs":{"url":"https://github.com/shovelmn12/bloqz/issues"},"dist":{"shasum":"72a8aeee4da6ecaf211ca3bb8335eb10d25bbfda","tarball":"https://registry.npmjs.org/@bloqz/concurrency/-/concurrency-1.1.3.tgz","fileCount":18,"integrity":"sha512-zxnd/q0Egt2ogTfGPFubN6e8tHcKbZO3xBLz+NtxcrseIbjf5uvT1/mL2+xOfsPzHMKY6hLk+78FZyjwZXfwMQ==","signatures":[{"sig":"MEUCIQDYCqL+7d/oBhjhbca/8zaH2tbsE/WgmPj2i3pHxilKRAIgMHRgIUf191FN+WjsgNxiTgKtAvNNJBWO1kKEDzxpyOA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18121},"type":"module","_from":"file:bloqz-concurrency-1.1.3.tgz","exports":{"main":"./dist/index.js","types":"./dist/index.d.ts","import":"./dist/index.js"},"scripts":{"test":"vitest --run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","prebuild":"npm run clean"},"_npmUser":{"name":"shovelmn12","email":"shovelmn12@gmail.com"},"_resolved":"/private/var/folders/9_/mmrlltfn0v70blj02j_t9wtm0000gn/T/3f65d039984011afa777e6ada2b401e7/bloqz-concurrency-1.1.3.tgz","_integrity":"sha512-zxnd/q0Egt2ogTfGPFubN6e8tHcKbZO3xBLz+NtxcrseIbjf5uvT1/mL2+xOfsPzHMKY6hLk+78FZyjwZXfwMQ==","repository":{"url":"git+https://github.com/shovelmn12/bloqz.git","type":"git"},"_npmVersion":"11.6.4","description":"Concurrency package for the functional Bloqz state management library.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"rxjs":"^7.8.2"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"@bloqz/core":"1.1.3"},"_npmOperationalInternal":{"tmp":"tmp/concurrency_1.1.3_1764769073033_0.4449262415400459","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@bloqz/concurrency","version":"1.2.0","keywords":["bloc","bloqz","state management","functional","rxjs","typescript","concurrency"],"author":{"name":"Shovel Maman"},"license":"MIT","_id":"@bloqz/concurrency@1.2.0","maintainers":[{"name":"shovelmn12","email":"shovelmn12@gmail.com"}],"homepage":"https://github.com/shovelmn12/bloqz#readme","bugs":{"url":"https://github.com/shovelmn12/bloqz/issues"},"dist":{"shasum":"f8a37ae908f5e9819896c2ea390979afe070ad77","tarball":"https://registry.npmjs.org/@bloqz/concurrency/-/concurrency-1.2.0.tgz","fileCount":18,"integrity":"sha512-NcfGbnjAJfW4TQ2kAN35E3EmhdLhQOnxnfs+OmMtnF0VK5hGQpgdR2D227ZVKUlVNXvAfzKLRZvdTZ8mGFpdng==","signatures":[{"sig":"MEYCIQCDiahx17ch6cu9BLnCn1XU87Rc0hmk0tE6JRA1TRePCQIhAPNwZWfg42KVieVEiz67qO8DJJLlBGIacDW4nig1znQk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18122},"type":"module","_from":"file:bloqz-concurrency-1.2.0.tgz","exports":{"main":"./dist/index.js","types":"./dist/index.d.ts","import":"./dist/index.js"},"scripts":{"test":"vitest --run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","prebuild":"npm run clean"},"_npmUser":{"name":"shovelmn12","email":"shovelmn12@gmail.com"},"_resolved":"/private/var/folders/9_/mmrlltfn0v70blj02j_t9wtm0000gn/T/3b3ff47f7b1b0768342574b4c88e37d9/bloqz-concurrency-1.2.0.tgz","_integrity":"sha512-NcfGbnjAJfW4TQ2kAN35E3EmhdLhQOnxnfs+OmMtnF0VK5hGQpgdR2D227ZVKUlVNXvAfzKLRZvdTZ8mGFpdng==","repository":{"url":"git+https://github.com/shovelmn12/bloqz.git","type":"git"},"_npmVersion":"11.6.4","description":"Concurrency package for the functional Bloqz state management library.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"rxjs":"^7.8.2"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"@bloqz/core":"^1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/concurrency_1.2.0_1764825217734_0.7161814995692946","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@bloqz/concurrency","version":"1.2.1","keywords":["bloc","bloqz","state management","functional","rxjs","typescript","concurrency"],"author":{"name":"Shovel Maman"},"license":"MIT","_id":"@bloqz/concurrency@1.2.1","maintainers":[{"name":"shovelmn12","email":"shovelmn12@gmail.com"}],"homepage":"https://github.com/shovelmn12/bloqz#readme","bugs":{"url":"https://github.com/shovelmn12/bloqz/issues"},"dist":{"shasum":"2b6eedf0bbc851032e92c354b7a37f32f1fb7f40","tarball":"https://registry.npmjs.org/@bloqz/concurrency/-/concurrency-1.2.1.tgz","fileCount":18,"integrity":"sha512-pn5NWZBtbOJP6Ae56BxvzrZwTnC20P3Rrcyi7qA1jVFj0EDfSWtsZgVzZvN08dIxZAVb2rLw5f4uQwF+Q9TPoQ==","signatures":[{"sig":"MEUCIEGrsrvDNKGej5EEq0A6aDiSlCh/dTrtYNAVqqCWdMgWAiEAoWARf0tgQAa5Gx9fjPwjdOSW0umAAxZw6iSkYxLIVjw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18235},"type":"module","_from":"file:bloqz-concurrency-1.2.1.tgz","exports":{"main":"./dist/index.js","types":"./dist/index.d.ts","import":"./dist/index.js"},"scripts":{"test":"vitest --run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","prebuild":"npm run clean"},"_npmUser":{"name":"shovelmn12","email":"shovelmn12@gmail.com"},"_resolved":"/private/var/folders/9_/mmrlltfn0v70blj02j_t9wtm0000gn/T/711af741695f94eab67d8e4c5c082cde/bloqz-concurrency-1.2.1.tgz","_integrity":"sha512-pn5NWZBtbOJP6Ae56BxvzrZwTnC20P3Rrcyi7qA1jVFj0EDfSWtsZgVzZvN08dIxZAVb2rLw5f4uQwF+Q9TPoQ==","repository":{"url":"git+https://github.com/shovelmn12/bloqz.git","type":"git"},"_npmVersion":"11.8.0","description":"Concurrency package for the functional Bloqz state management library.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"rxjs":"^7.8.2"},"_hasShrinkwrap":false,"devDependencies":{},"peerDependencies":{"@bloqz/core":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/concurrency_1.2.1_1786621909342_0.13524957596616805","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@bloqz/concurrency","version":"1.2.2","description":"Concurrency package for the functional Bloqz state management library.","keywords":["bloc","bloqz","state management","functional","rxjs","typescript","concurrency"],"homepage":"https://github.com/shovelmn12/bloqz#readme","bugs":{"url":"https://github.com/shovelmn12/bloqz/issues"},"repository":{"type":"git","url":"git+https://github.com/shovelmn12/bloqz.git"},"license":"MIT","author":"Shovel Maman","type":"module","exports":{"main":"./dist/index.js","import":"./dist/index.js","types":"./dist/index.d.ts"},"dependencies":{"rxjs":"^7.8.2"},"peerDependencies":{"@bloqz/core":"^2.0.1"},"devDependencies":{},"scripts":{"clean":"rm -rf dist","prebuild":"npm run clean","build":"tsc -p tsconfig.build.json","test":"vitest --run"},"_nodeVersion":"22.20.0","_id":"@bloqz/concurrency@1.2.2","dist":{"integrity":"sha512-LSaG2bb8boeloaBVxwHJufePLlncBV2GIcnbgjcpJtMfU5X3zjDOZNOn1jpcbVEcG/AFR6vqVr2qsJzir8JESQ==","shasum":"d2d787ffedc936d2dec2bcb96315938facc3b0c0","tarball":"https://registry.npmjs.org/@bloqz/concurrency/-/concurrency-1.2.2.tgz","fileCount":18,"unpackedSize":22754,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEoAM/sUwV3+L5Q6GVRWx2TyAh1YPqmydf6DUG3HWjDKAiAFVqewhn6PSN9ZncdTa3JT19ENTUyxsmjB3gPdf33abg=="}]},"_npmUser":{"name":"shovelmn12","email":"shovelmn12@gmail.com"},"directories":{},"maintainers":[{"name":"shovelmn12","email":"shovelmn12@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/concurrency_1.2.2_1788503013096_0.22818759028310365"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-07T13:49:19.700Z","modified":"2026-09-04T06:23:33.410Z","1.0.0":"2025-10-07T13:49:20.007Z","1.0.3":"2025-10-23T08:26:04.758Z","1.0.4":"2025-11-18T09:31:36.818Z","1.1.1":"2025-12-03T12:39:08.571Z","1.1.2":"2025-12-03T13:02:34.260Z","1.1.3":"2025-12-03T13:37:53.220Z","1.2.0":"2025-12-04T05:13:37.889Z","1.2.1":"2026-08-13T11:51:49.483Z","1.2.2":"2026-09-04T06:23:33.221Z"},"bugs":{"url":"https://github.com/shovelmn12/bloqz/issues"},"author":"Shovel Maman","license":"MIT","homepage":"https://github.com/shovelmn12/bloqz#readme","keywords":["bloc","bloqz","state management","functional","rxjs","typescript","concurrency"],"repository":{"type":"git","url":"git+https://github.com/shovelmn12/bloqz.git"},"description":"Concurrency package for the functional Bloqz state management library.","maintainers":[{"name":"shovelmn12","email":"shovelmn12@gmail.com"}],"readme":"# @bloqz/concurrency\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n<!-- Add other relevant badges: npm version, build status, etc. -->\n<!-- npm i -D @types/node -->\n[![npm version](https://badge.fury.io/js/%40bloqz%2Fconcurrency.svg)](https://badge.fury.io/js/%40bloqz%2Fconcurrency)\n\nConcurrency utilities (Event Transformers) for the TypeScript BLoC pattern implementation.\n\n## Purpose\n\nThis package provides helper functions that create standard `EventTransformer` implementations based on common RxJS operators. These transformers are used with the `handlers` object from `@bloqz/core` to control how event handlers execute, especially when events are dispatched rapidly or involve asynchronous operations.\n\nChoosing the right concurrency strategy is crucial for preventing race conditions, optimizing performance, and ensuring predictable behavior in reactive applications.\n\n## Installation\n\n```bash\n# Using npm\nnpm install @bloqz/concurrency rxjs\n\n# Using yarn\nyarn add @bloqz/concurrency rxjs\n```\n\n**Peer Dependencies:**\n\nThis package requires `rxjs` as a peer dependency. It's designed to be used with a core BLoC library (like `@bloqz/core`) that defines the `EventTransformer` type.\n\n## Usage\n\nImport the desired transformer function and pass it as the `transformer` property of a handler definition in the `handlers` object when creating a Bloc.\n\n```typescript\nimport { createBloc } from '@bloqz/core';\nimport {\n  sequential,\n  restartable,\n  droppable,\n  concurrent, // Can be used explicitly, but often the default\n} from '@bloqz/concurrency';\n\n// --- Define your Bloc, State, Event ---\ninterface MyState { /* ... */ }\ntype MyEvent =\n  | { type: 'SAVE' }\n  | { type: 'SEARCH'; query: string }\n  | { type: 'SUBMIT' }\n  | { type: 'LOG' };\n\nconst bloc = createBloc<MyEvent, MyState>({\n  initialState: { /* ... */ },\n  handlers: {\n    // Process SAVE events one after another\n    SAVE: { handler: handleSave, transformer: sequential() },\n\n    // Process only the latest SEARCH event, cancel previous searches\n    SEARCH: { handler: handleSearch, transformer: restartable() },\n\n    // Ignore subsequent SUBMIT events if one is already processing\n    SUBMIT: { handler: handleSubmit, transformer: droppable() },\n\n    // Process LOG events concurrently (the default behavior)\n    LOG: { handler: handleLog, transformer: concurrent() },\n  },\n});\n```\n\nHandlers can also be given directly as functions — in that case the default transformer (`concurrent`) is used:\n\n```typescript\nhandlers: {\n  LOG: handleLog, // Equivalent to { handler: handleLog, transformer: concurrent() }\n}\n```\n\n## Available Transformers\n\n### `concurrent<Event>()`\n\n*   **Source:** `concurrent.ts`\n*   **Behavior:** Processes events **concurrently** (in parallel). Multiple handler executions for the same event type can run simultaneously.\n*   **Underlying Operator:** `mergeMap`\n*   **Use Cases:**\n    *   Handlers that are independent of each other.\n    *   Operations where parallel execution is safe and potentially improves throughput (e.g., logging, triggering independent notifications).\n*   **Caution:** Be mindful of potential race conditions if concurrent handlers modify shared aspects of the state or interact with external resources non-atomically.\n*   **Default:** This strategy often serves as the **default** in core BLoC implementations if no specific transformer is provided.\n\n```typescript\nimport { concurrent } from '@bloqz/concurrency';\nimport { createBloc } from '@bloqz/core';\n\nconst bloc = createBloc({\n  // ...\n  handlers: {\n    LOG_EVENT: { handler: handleLogToServer, transformer: concurrent() },\n  },\n});\n```\n\n---\n\n### `sequential<Event>()`\n\n*   **Source:** `sequential.ts`\n*   **Behavior:** Processes events **sequentially** (one after another). The next handler execution for an event type only begins after the previous one has completed.\n*   **Underlying Operator:** `concatMap`\n*   **Use Cases:**\n    *   Ensuring events are processed in the order they were received.\n    *   Preventing race conditions when handlers modify the same state properties or interact with resources that require ordered access (e.g., saving data sequentially, managing queues).\n\n```typescript\nimport { sequential } from '@bloqz/concurrency';\nimport { createBloc } from '@bloqz/core';\n\nconst bloc = createBloc({\n  // ...\n  handlers: {\n    SAVE_DATA: { handler: handleSave, transformer: sequential() },\n  },\n});\n```\n\n---\n\n### `restartable<Event>()`\n\n*   **Source:** `restartable.ts`\n*   **Behavior:** Processes **only the latest** event. If a new event arrives while a previous handler for the same event type is still running, the previous execution is cancelled, and the handler starts processing the new event.\n*   **Underlying Operator:** `switchMap`\n*   **Use Cases:**\n    *   Search-as-you-type functionality, where only the results for the most recent query matter.\n    *   Handling rapidly changing inputs where intermediate states are irrelevant (e.g., real-time validation on input change).\n    *   Refreshing data where only the latest request should complete.\n\n```typescript\nimport { restartable } from '@bloqz/concurrency';\nimport { createBloc } from '@bloqz/core';\n\nconst bloc = createBloc({\n  // ...\n  handlers: {\n    SEARCH_QUERY_CHANGED: { handler: handleSearch, transformer: restartable() },\n  },\n});\n```\n\n---\n\n### `droppable<Event>()`\n\n*   **Source:** `droppable.ts`\n*   **Behavior:** **Ignores (drops)** new events if a handler for the same event type is already running. Only the first event in a sequence triggers execution until that execution completes.\n*   **Underlying Operator:** `exhaustMap`\n*   **Use Cases:**\n    *   Preventing duplicate form submissions caused by rapid button clicks.\n    *   Handling events where only the initial trigger should be processed until completion (e.g., initiating a long-running, non-cancellable task).\n    *   Simple button debouncing where subsequent clicks during processing should be ignored.\n\n```typescript\nimport { droppable } from '@bloqz/concurrency';\nimport { createBloc } from '@bloqz/core';\n\nconst bloc = createBloc({\n  // ...\n  handlers: {\n    SUBMIT_FORM: { handler: handleSubmit, transformer: droppable() },\n  },\n});\n```\n\n---\n\n## Core Concept: `EventTransformer`\n\nThese helpers produce functions matching the `EventTransformer` signature expected by the core BLoC library:\n\n```typescript\n// Likely defined in @bloqz/core or @bloqz/types\ntype EventTransformer<Event> = (\n  project: (event: Event) => ObservableInput<unknown>\n) => OperatorFunction<Event, unknown>;\n```\n\nThe `project` function encapsulates the execution of your actual `EventHandler` logic. The transformer applies the chosen RxJS operator (`mergeMap`, `concatMap`, etc.) to the stream of incoming events, controlling how the `project` function is invoked.\n\n## Contributing\n\nContributions are welcome! Please follow standard practices like opening issues for discussion before submitting pull requests.\n\n## License\n\n[MIT](../LICENSE)","readmeFilename":""}