{"_id":"@24vlh/angular-tools","_rev":"10-65ec5086b03ef0c1abd8db86611a399a","name":"@24vlh/angular-tools","dist-tags":{"latest":"2.0.3"},"versions":{"1.0.0":{"name":"@24vlh/angular-tools","version":"1.0.0","keywords":["angular library","angular redux store","angular websockets","angular server sent events"],"author":{"name":"@vlah.io"},"license":"Apache-2.0","_id":"@24vlh/angular-tools@1.0.0","maintainers":[{"name":"24vlh","email":"sprindo@gmail.com"}],"dist":{"shasum":"3938b0fbec3829481b4e0edda52bc3bc48bbce15","tarball":"https://registry.npmjs.org/@24vlh/angular-tools/-/angular-tools-1.0.0.tgz","fileCount":64,"integrity":"sha512-XShni8sGvv6i/dJshchZ3BFqQ+8JEtUbyYDil3pHeiDMn0pn1WrjaiYMwJLtR0QcSbSaNskx0dNBewhUsJJGoA==","signatures":[{"sig":"MEYCIQCOPQEHfJ4KXr8ATFTh5MEx56vgivQleMc2lGMUvGOJVwIhAPw+fVK7YIKzpTmOwRkP4AUun78Cv7HMF1QAERKAQqG0","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":508587},"module":"fesm2022/24vlh-angular-tools.mjs","exports":{".":{"esm":"./esm2022/24vlh-angular-tools.mjs","types":"./index.d.ts","default":"./fesm2022/24vlh-angular-tools.mjs","esm2022":"./esm2022/24vlh-angular-tools.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"27ca3d801230448c0d520513d7c705ead8f9b9e8","typings":"index.d.ts","_npmUser":{"name":"24vlh","email":"sprindo@gmail.com"},"_npmVersion":"10.2.4","description":"Small footprint library for Angular projects.","directories":{},"sideEffects":false,"_nodeVersion":"20.11.1","dependencies":{"tslib":"^2.3.0"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"^7.8.1","zone.js":"^0.14.4","immutable":"^5.0.0-beta.5","@angular/core":"^17.1.0","@angular/common":"^17.1.0","@24vlh/ts-assert":"^1.0.9","@24vlh/ts-helpers":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/angular-tools_1.0.0_1711503383556_0.5961655462434978","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"@24vlh/angular-tools","version":"1.0.1","keywords":["angular library","angular redux store","angular websockets","angular server sent events"],"author":{"name":"@vlah.io"},"license":"Apache-2.0","_id":"@24vlh/angular-tools@1.0.1","maintainers":[{"name":"24vlh","email":"sprindo@gmail.com"}],"dist":{"shasum":"35a3556522596f3c9a249b0c4436b87b89ad2616","tarball":"https://registry.npmjs.org/@24vlh/angular-tools/-/angular-tools-1.0.1.tgz","fileCount":65,"integrity":"sha512-J8JcXJQjsUg3bwlwslkupbiJuRYnaIEpfqWp0WIN3/6CDfZ4W8yAfRO83RYb2I7CpYBYNLXQHnKkDnRlIZ45Ww==","signatures":[{"sig":"MEUCIHn4Zk/9WGCxYb1UiEBFnI/0CPxwbJR888u8zjfX0kRuAiEAzMeaEuRKPcdJquj4gJC1t3aSIg5baGJYFDDJhRhfDY0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":519977},"module":"fesm2022/24vlh-angular-tools.mjs","exports":{".":{"esm":"./esm2022/24vlh-angular-tools.mjs","types":"./index.d.ts","default":"./fesm2022/24vlh-angular-tools.mjs","esm2022":"./esm2022/24vlh-angular-tools.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"0d34b8c3b19329e144b77b67c01de0e58868a279","typings":"index.d.ts","_npmUser":{"name":"24vlh","email":"sprindo@gmail.com"},"_npmVersion":"10.2.4","description":"Small footprint library for Angular projects.","directories":{},"sideEffects":false,"_nodeVersion":"20.11.1","dependencies":{"tslib":"^2.3.0"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"^7.8.1","zone.js":"^0.14.4","immutable":"^5.0.0-beta.5","@angular/core":"^17.1.0","@angular/common":"^17.1.0","@24vlh/ts-assert":"^1.0.9","@24vlh/ts-helpers":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/angular-tools_1.0.1_1711505281812_0.20754177145881836","host":"s3://npm-registry-packages"}},"1.0.2":{"name":"@24vlh/angular-tools","version":"1.0.2","keywords":["angular library","angular redux store","angular websockets","angular server sent events"],"author":{"name":"@vlah.io"},"license":"Apache-2.0","_id":"@24vlh/angular-tools@1.0.2","maintainers":[{"name":"24vlh","email":"sprindo@gmail.com"}],"dist":{"shasum":"deeb056811aa232886ed6c1c6ab2bc4f0529fe0d","tarball":"https://registry.npmjs.org/@24vlh/angular-tools/-/angular-tools-1.0.2.tgz","fileCount":67,"integrity":"sha512-yRp5O9W79Cl16YUQkQPf/LPXK6b95ZriwHpmwfV8TbtxIz2Q+fxoeYT5P+h4PAaDtvMppCgaC+LwwROTWH1NKA==","signatures":[{"sig":"MEUCIQDVHwZH1tZyQwWz/deBphU8vCi64OdauISAb1TLuAnWVwIgZNX2yNJkOpkd5RXxa0WF2AjQ/15d46XqjSzXLfe/mSA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":569254},"module":"fesm2022/24vlh-angular-tools.mjs","exports":{".":{"esm":"./esm2022/24vlh-angular-tools.mjs","types":"./index.d.ts","default":"./fesm2022/24vlh-angular-tools.mjs","esm2022":"./esm2022/24vlh-angular-tools.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"26b4a679ee6f32300f0ca7d02a469a562d56074b","typings":"index.d.ts","_npmUser":{"name":"24vlh","email":"sprindo@gmail.com"},"_npmVersion":"10.2.4","description":"Small footprint library for Angular projects.","directories":{},"sideEffects":false,"_nodeVersion":"20.11.1","dependencies":{"tslib":"^2.3.0"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"^7.8.1","zone.js":"^0.14.4","immutable":"^5.0.0-beta.5","@angular/core":"^17.1.0","@angular/common":"^17.1.0","@24vlh/ts-assert":"^1.0.9","@24vlh/ts-helpers":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/angular-tools_1.0.2_1711661735052_0.4473548944585497","host":"s3://npm-registry-packages"}},"1.0.3":{"name":"@24vlh/angular-tools","version":"1.0.3","keywords":["angular library","angular redux store","angular websockets","angular server sent events"],"author":{"name":"@vlah.io"},"license":"Apache-2.0","_id":"@24vlh/angular-tools@1.0.3","maintainers":[{"name":"24vlh","email":"sprindo@gmail.com"}],"dist":{"shasum":"f4cc866d353ab9587b988c232041dc7c4b70dee3","tarball":"https://registry.npmjs.org/@24vlh/angular-tools/-/angular-tools-1.0.3.tgz","fileCount":67,"integrity":"sha512-4d0ZcxQIw/1Xy+/QSXL1u2AECPI2khh6yv8IGWkasQzI1uSLC032sw/Gt4aAP6jcTYb39eUFSYrEc5+94e0V7w==","signatures":[{"sig":"MEUCIQCT1t/dutIcmgsRK6Hzz03VTHtsDxSpcdZJ0yeCO2JBTQIgXnLN+/5ca/peui81Hcb2rznND5MKLRRFH/+jdHqJBoc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":602575},"module":"fesm2022/24vlh-angular-tools.mjs","exports":{".":{"esm":"./esm2022/24vlh-angular-tools.mjs","types":"./index.d.ts","default":"./fesm2022/24vlh-angular-tools.mjs","esm2022":"./esm2022/24vlh-angular-tools.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"22c2d211c52bdba91117c208c966c09eb9d18ca8","typings":"index.d.ts","_npmUser":{"name":"24vlh","email":"sprindo@gmail.com"},"_npmVersion":"10.5.0","description":"Small footprint library for Angular projects.","directories":{},"sideEffects":false,"_nodeVersion":"20.12.0","dependencies":{"tslib":"^2.6.2"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"^7.8.1","zone.js":"^0.14.4","immutable":"^5.0.0-beta.5","@angular/core":"^17.3.3","@angular/common":"^17.3.3","@24vlh/ts-assert":"^1.0.9","@24vlh/ts-helpers":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/angular-tools_1.0.3_1712376252478_0.8056314003003391","host":"s3://npm-registry-packages"}},"1.0.4":{"name":"@24vlh/angular-tools","version":"1.0.4","keywords":["angular library","angular redux store","angular websockets","angular server sent events"],"author":{"name":"@vlah.io"},"license":"Apache-2.0","_id":"@24vlh/angular-tools@1.0.4","maintainers":[{"name":"24vlh","email":"sprindo@gmail.com"}],"dist":{"shasum":"e55c2069522db2c575312748e400264d5b8dcd79","tarball":"https://registry.npmjs.org/@24vlh/angular-tools/-/angular-tools-1.0.4.tgz","fileCount":77,"integrity":"sha512-HBnZnLfveMFBM0y6wMf9sY90cELBqU7RFZYm4mmPXEHMF3Ngrm+GiHXJBhXlj+bjeiaADw+mDPmT5UGmeHO1Xg==","signatures":[{"sig":"MEYCIQDvwbVknJjiRoBOkQ15sPBHLcxYEgkoXC2GOrflM6GssAIhAIH9Y7vSk2z+dJZqLKVOIHyfw+bnYuLpMyALRgNQd4VT","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":628225},"module":"fesm2022/24vlh-angular-tools.mjs","exports":{".":{"esm":"./esm2022/24vlh-angular-tools.mjs","types":"./index.d.ts","default":"./fesm2022/24vlh-angular-tools.mjs","esm2022":"./esm2022/24vlh-angular-tools.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"8a36c1cc70c89adecb7bfa1bd78b6d0e3c00ebbd","typings":"index.d.ts","_npmUser":{"name":"24vlh","email":"sprindo@gmail.com"},"_npmVersion":"10.5.0","description":"Small footprint library for Angular projects.","directories":{},"sideEffects":false,"_nodeVersion":"20.12.0","dependencies":{"tslib":"^2.6.2"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"^7.8.1","zone.js":"^0.14.4","immutable":"^5.0.0-beta.5","@angular/core":"^17.3.3","@angular/common":"^17.3.3","@24vlh/ts-assert":"^1.0.9","@24vlh/ts-helpers":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/angular-tools_1.0.4_1712433491367_0.14689926500070905","host":"s3://npm-registry-packages"}},"1.0.5":{"name":"@24vlh/angular-tools","version":"1.0.5","keywords":["angular library","angular redux store","angular websockets","angular server sent events"],"author":{"name":"@vlah.io"},"license":"Apache-2.0","_id":"@24vlh/angular-tools@1.0.5","maintainers":[{"name":"24vlh","email":"sprindo@gmail.com"}],"dist":{"shasum":"19a7d5e046c3a68c7874ea14f10e8aa7d48ba819","tarball":"https://registry.npmjs.org/@24vlh/angular-tools/-/angular-tools-1.0.5.tgz","fileCount":77,"integrity":"sha512-2V1/E2AchaNaNRTeo5b4yimPyaPJD5++oS2+Nt8uFQbVvBq1aWXlhwMVLamLWmxACXfe7S6nsk137TYF5N1IoQ==","signatures":[{"sig":"MEUCIQCqO86KMvLmHg6Lpc/zazJNS10a2fzoB060q/Uv5y5LkAIgM2Fm4Y3ISa5WB7uA8Qwut5u7n6KYy5OI57OeQNnvy6c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":628350},"module":"fesm2022/24vlh-angular-tools.mjs","exports":{".":{"esm":"./esm2022/24vlh-angular-tools.mjs","types":"./index.d.ts","default":"./fesm2022/24vlh-angular-tools.mjs","esm2022":"./esm2022/24vlh-angular-tools.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"16ede3d32f40e929e9d620861aae0b73bc380af5","typings":"index.d.ts","_npmUser":{"name":"24vlh","email":"sprindo@gmail.com"},"_npmVersion":"10.5.2","description":"Small footprint library for Angular projects.","directories":{},"sideEffects":false,"_nodeVersion":"20.13.1","dependencies":{"tslib":"^2.6.2"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"^7.8.1","zone.js":"^0.14.5","immutable":"^5.0.0-beta.5","@angular/core":"^17.3.10","@angular/common":"^17.3.10","@24vlh/ts-assert":"^1.0.10","@24vlh/ts-helpers":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/angular-tools_1.0.5_1717521758490_0.7885947557705311","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"@24vlh/angular-tools","version":"2.0.0","keywords":["angular library","angular redux store","angular websockets","angular server sent events"],"author":{"name":"@vlah.io"},"license":"Apache-2.0","_id":"@24vlh/angular-tools@2.0.0","maintainers":[{"name":"24vlh","email":"sprindo@gmail.com"}],"dist":{"shasum":"cfd748188d313f6a1cb06c6e79ec6d9231269900","tarball":"https://registry.npmjs.org/@24vlh/angular-tools/-/angular-tools-2.0.0.tgz","fileCount":77,"integrity":"sha512-GA+QGPB4SVigokGPRrQqjwer1019OmUuZTeCdZRL3amZqBW/OIqnkYdxyyRd9G7tbhmcHmdCxJZLv/7fhO9Ouw==","signatures":[{"sig":"MEQCIFdzLum90hZ7KGOEmarXliXcvtbBGxP/B1iTIqx9oO0dAiBuJ+DCz6wofshASA0P+GueCcpZl+avZD3FsyrPgW28qg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":628306},"module":"fesm2022/24vlh-angular-tools.mjs","exports":{".":{"esm":"./esm2022/24vlh-angular-tools.mjs","types":"./index.d.ts","default":"./fesm2022/24vlh-angular-tools.mjs","esm2022":"./esm2022/24vlh-angular-tools.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"cb0df2b7f9a0342c886f44b8e5e968fc08027f32","typings":"index.d.ts","_npmUser":{"name":"24vlh","email":"sprindo@gmail.com"},"_npmVersion":"10.5.2","description":"Small footprint library for Angular projects.","directories":{},"sideEffects":false,"_nodeVersion":"20.13.1","dependencies":{"tslib":"^2.6.2"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"^7.8.1","zone.js":"^0.14.6","immutable":"^5.0.0-beta.5","@angular/core":"^18.0.1","@angular/common":"^18.0.1","@24vlh/ts-assert":"^1.0.10","@24vlh/ts-helpers":"^1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/angular-tools_2.0.0_1717523642661_0.4337393391672173","host":"s3://npm-registry-packages"}},"2.0.1":{"name":"@24vlh/angular-tools","version":"2.0.1","keywords":["angular library","angular redux store","angular websockets","angular server sent events"],"author":{"name":"@vlah.io"},"license":"Apache-2.0","_id":"@24vlh/angular-tools@2.0.1","maintainers":[{"name":"24vlh","email":"sprindo@gmail.com"}],"dist":{"shasum":"5cc5f59d2600a0aaf4c8dc03ec8d3ea80c9151c1","tarball":"https://registry.npmjs.org/@24vlh/angular-tools/-/angular-tools-2.0.1.tgz","fileCount":77,"integrity":"sha512-TKusmJu/WTzAl0mPycAMK1aftGc+1DF3WeBP74nRFimG9TLk9NmirEhQlG/pqmGW97adUed1OmH/MQ12lryDYw==","signatures":[{"sig":"MEUCIQDScARUosso7MmClp50XnU6GAvJXs99+B4CTB6KNpUtLwIgC1R+9nZ9ojlHpoxwYwG1K2Ph4mAMPwe9v+nTczYBy6M=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":628305},"module":"fesm2022/24vlh-angular-tools.mjs","exports":{".":{"esm":"./esm2022/24vlh-angular-tools.mjs","types":"./index.d.ts","default":"./fesm2022/24vlh-angular-tools.mjs","esm2022":"./esm2022/24vlh-angular-tools.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"6336d34d9c7b24028b58761ba89e670591e237d0","typings":"index.d.ts","_npmUser":{"name":"24vlh","email":"sprindo@gmail.com"},"_npmVersion":"10.8.1","description":"Small footprint library for Angular projects.","directories":{},"sideEffects":false,"_nodeVersion":"20.16.0","dependencies":{"tslib":"^2.6.3"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"^7.8.1","zone.js":"^0.14.10","immutable":"^5.0.0-rc.1","@angular/core":"^18.1.4","@angular/common":"^18.1.4","@24vlh/ts-assert":"^1.0.11","@24vlh/ts-helpers":"^1.0.2"},"_npmOperationalInternal":{"tmp":"tmp/angular-tools_2.0.1_1723529133623_0.5394493326084886","host":"s3://npm-registry-packages"}},"2.0.2":{"name":"@24vlh/angular-tools","version":"2.0.2","keywords":["angular library","angular redux store","angular websockets","angular server sent events"],"author":{"name":"@vlah.io"},"license":"Apache-2.0","_id":"@24vlh/angular-tools@2.0.2","maintainers":[{"name":"24vlh","email":"sprindo@gmail.com"}],"dist":{"shasum":"ee6a20492200e5c89be470a55c97630e34cd6294","tarball":"https://registry.npmjs.org/@24vlh/angular-tools/-/angular-tools-2.0.2.tgz","fileCount":77,"integrity":"sha512-OcM7ng4W9+/0OT9OkwMJc8Vjp3Cxap0wDO977GpMTvWNUGBUQG66O5d1YGQpJaHmUFOvW1AX5Bj4XP0te1rcwA==","signatures":[{"sig":"MEYCIQCBGY7nDPdfPOAUyTGbULNs7thC85cT9U4imhL46Jb9wAIhAN9ASWpPNsoh/ZnFAo5JTsUsBjUiPUj1tCJ3zUb/i5BK","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":628310},"module":"fesm2022/24vlh-angular-tools.mjs","exports":{".":{"esm":"./esm2022/24vlh-angular-tools.mjs","types":"./index.d.ts","default":"./fesm2022/24vlh-angular-tools.mjs","esm2022":"./esm2022/24vlh-angular-tools.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"a2a8741d2443153c054726da69250cd5d43fdf3b","typings":"index.d.ts","_npmUser":{"name":"24vlh","email":"sprindo@gmail.com"},"_npmVersion":"10.8.2","description":"Small footprint library for Angular projects.","directories":{},"sideEffects":false,"_nodeVersion":"20.17.0","dependencies":{"tslib":"^2.7.0"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"^7.8.1","zone.js":"^0.14.10","immutable":"^5.0.0-rc.1","@angular/core":"^18.2.3","@angular/common":"^18.2.3","@24vlh/ts-assert":"^1.0.12","@24vlh/ts-helpers":"^1.0.3"},"_npmOperationalInternal":{"tmp":"tmp/angular-tools_2.0.2_1725915157313_0.5112038746088696","host":"s3://npm-registry-packages"}},"2.0.3":{"name":"@24vlh/angular-tools","version":"2.0.3","description":"Small footprint library for Angular projects.","author":{"name":"@vlah.io"},"license":"Apache-2.0","keywords":["angular library","angular redux store","angular websockets","angular server sent events"],"peerDependencies":{"@24vlh/ts-assert":"^1.0.13","@24vlh/ts-helpers":"^1.0.4","@angular/common":"^19.2.5","@angular/core":"^19.2.5","immutable":"^5.1.1","rxjs":"^7.8.2","zone.js":"^0.15.0"},"dependencies":{"tslib":"^2.8.1"},"sideEffects":false,"module":"fesm2022/24vlh-angular-tools.mjs","typings":"index.d.ts","exports":{"./package.json":{"default":"./package.json"},".":{"types":"./index.d.ts","default":"./fesm2022/24vlh-angular-tools.mjs"}},"_id":"@24vlh/angular-tools@2.0.3","gitHead":"b0c580311ca2a5ed5cf16168e20be4c282fcb3af","_nodeVersion":"20.19.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-SCubXOkGofwN0y08F3rol2N74zl2ibh5d1iM2wWIgRTarbvgFEx2XF67mF40QDuRrfsC4WYcSnBUaIdjFc8sBQ==","shasum":"b27543963ab638bd950e5b32041eba3a8eba5d8b","tarball":"https://registry.npmjs.org/@24vlh/angular-tools/-/angular-tools-2.0.3.tgz","fileCount":41,"unpackedSize":330012,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCLBqJcIAEO4PDx4uem7wuYXP/eVKZ1y4tL599A1mK9pAIgL3lD5IhRdwzgI7pNFcAAXDjHP7xtNd2JAslFpyMde4w="}]},"_npmUser":{"name":"24vlh","email":"sprindo@gmail.com"},"directories":{},"maintainers":[{"name":"24vlh","email":"sprindo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/angular-tools_2.0.3_1743926731197_0.8437355725985922"},"_hasShrinkwrap":false}},"time":{"created":"2024-03-27T01:36:23.455Z","modified":"2025-04-06T08:05:31.611Z","1.0.0":"2024-03-27T01:36:23.754Z","1.0.1":"2024-03-27T02:08:02.020Z","1.0.2":"2024-03-28T21:35:35.214Z","1.0.3":"2024-04-06T04:04:12.638Z","1.0.4":"2024-04-06T19:58:11.536Z","1.0.5":"2024-06-04T17:22:38.638Z","2.0.0":"2024-06-04T17:54:02.817Z","2.0.1":"2024-08-13T06:05:33.801Z","2.0.2":"2024-09-09T20:52:37.485Z","2.0.3":"2025-04-06T08:05:31.409Z"},"author":{"name":"@vlah.io"},"license":"Apache-2.0","keywords":["angular library","angular redux store","angular websockets","angular server sent events"],"description":"Small footprint library for Angular projects.","maintainers":[{"name":"24vlh","email":"sprindo@gmail.com"}],"readme":"# Angular Tools\n\n## IntersectionObserverDirective\n\n`IntersectionObserverDirective` is a directive that implements the Intersection Observer API. It emits an event each\ntime the host element intersects with the viewport.\n\n### Usage\n\nTo use the `IntersectionObserverDirective`, add the `vlhIntersectionObserver` attribute to an element in your template.\nBind a method to the `(intersection)` output event to handle the intersection event.\n\nHere's an example:\n\n```angular17html\n\n<div vlhIntersectionObserver (intersection)=\"onIntersection($event)\"></div>\n```\n\n## ExponentiallyBackoff Function\n\n`ExponentiallyBackoff` is a function that implements exponential backoff in observables.\n\n### Usage\n\nThis function takes four parameters:\n\n- `maxRetryAttempts`: The maximum number of retry attempts. Default is 3.\n- `initialDelay`: The initial delay in milliseconds before the first retry. Default is 1000.\n- `maxDelay`: The maximum delay in milliseconds between retries. Default is 2 minutes.\n- `disableAndUseConstantDelayOf`: If provided, disables exponential backoff and uses this constant delay instead.\n\nIt returns a function that takes an Observable and returns an Observable with retry logic applied.\n\nHere's an example:\n\n```typescript\nExponentiallyBackoff(10, 1000, 2 * 60 * 1000, 5000);\n```\n\n## TimeoutBackoff Function\n\n`TimeoutBackoff` is a function that implements timeout backoff in observables.\n\n### Usage\n\nThis function takes three parameters:\n\n- `maxRetryAttempts`: The maximum number of retry attempts. Default is 3.\n- `initialDelay`: The initial delay in milliseconds before the first retry. Default is 1000.\n- `maxDelay`: The maximum delay in milliseconds between retries. Default is 2 minutes.\n\nIt returns a function that takes an Observable and returns an Observable with retry logic applied.\n\nHere's an example:\n\n```typescript\nTimeoutBackoff(10, 1000, 2 * 60 * 1000);\n```\n\n## Service worker classes\n\n- `CustomEventWorker` A class that helps create and listen to custom events.\n- `PollingWorker` A class that helps create and manage polling tasks.\n- `ServerSentEventWorker` A class that helps listen to server-sent events.\n- `StoreWorker` A class that helps manage data flow using the Redux pattern.\n- `SubscriptionWorker` A class that helps manage subscriptions to observables.\n- `WebsocketWorker` A class that helps send/read messages to/from a websocket connections.\n\n### Usage\n\nWhen bootstrapping each class, it is best to use the provided `PROVIDER_FACTORY` helpers.\n\n#### CustomEventWorker\n\n````typescript\nconst workerInjectionToken = new InjectionToken<CustomEventWorker<T>>('worker');\nproviders: [\n  CUSTOM_EVENT_PROVIDER_FACTORY(workerInjectionToken)\n]\n````\n\n````typescript\nconst workerInjectionToken = new InjectionToken<CustomEventWorker<T>>('worker');\nproviders: [\n  CUSTOM_EVENT_PROVIDER_FACTORY(workerInjectionToken, {\n    replySubjectBufferSize: 1,\n    windowObjectInjectionToken: CUSTOM_EVENT_WINDOW_OBJECT,\n    windowObject: window\n  }),\n]\n````\n\n##### Example\n\n````typescript\ncustomEventWorker.DispatchCustomEvent(window, 'type', data);\n````\n\n````typescript\ncustomEventWorker.DispatchCustomEvent(window, 'type', data);\n````\n\n````typescript\ncustomEventWorker.dispatch(data);\n````\n\n````typescript\ncustomEventWorker.dispatch(data, eventInitDict);\n````\n\n````typescript\ncustomEventWorker.listen$();\n````\n\n````typescript\ncustomEventWorker.listen$((data: T) => data.key === 'value');\n````\n\n````typescript\ncustomEventWorker.listen$(\n  (data: T) => data.key === 'value',\n  (prev: T, curr: T) => prev.key === curr.key\n);\n````\n\n````typescript\ncustomEventWorker.listen$().pipe(\n  filter((data: T) => data.key === 'value')\n);\n````\n\n#### PollingWorker\n\n````typescript\nconst workerInjectionToken = new InjectionToken<PollingWorker<T>>('worker');\nproviders: [\n  POLLING_PROVIDER_FACTORY(workerInjectionToken)\n]\n````\n\n````typescript\nconst workerInjectionToken = new InjectionToken<PollingWorker<T>>('worker');\nproviders: [\n  POLLING_PROVIDER_FACTORY(workerInjectionToken, {\n    windowObjectInjectionToken: POLLING_WINDOW_OBJECT,\n    windowObject: window\n  }),\n]\n````\n\n##### Example\n\n````typescript\npollingWorker.startPolling(url);\n````\n\n````typescript\npollingWorker.startPolling(url, 1000);\n````\n\n````typescript\npollingWorker.startPolling(url, 1000, (data: T) => data.key === 'value');\n````\n\n````typescript\npollingWorker.startPolling(\n  url,\n  1000,\n  (data: T) => data.key === 'value',\n  (prev: T, curr: T) => prev.key === curr.key\n);\n````\n\n````typescript\npollingWorker.startPolling(url, 1000).pipe(\n  filter((data: T) => data.key === 'value')\n);\n````\n\n#### ServerSentEventWorker\n\n````typescript\nconst workerInjectionToken = new InjectionToken<ServerSentEventWorker<T>>('worker');\nproviders: [\n  SERVER_SENT_EVENT_PROVIDER_FACTORY(workerInjectionToken)\n]\n````\n\n````typescript\nconst workerInjectionToken = new InjectionToken<ServerSentEventWorker<T>>('worker');\nproviders: [\n  SERVER_SENT_EVENT_PROVIDER_FACTORY(workerInjectionToken, {\n    windowObjectInjectionToken: SERVER_SENT_EVENT_WINDOW_OBJECT,\n    windowObject: window\n  }),\n]\n````\n\n##### Example\n\n````typescript\nserverSentEventWorker.connect();\n````\n\n````typescript\nserverSentEventWorker.listen$();\n````\n\n````typescript\nserverSentEventWorker.listen$((data: T) => data.key === 'value');\n````\n\n````typescript\nserverSentEventWorker.listen$(\n  (data: T) => data.key === 'value',\n  (prev: T, curr: T) => prev.key === curr.key\n);\n````\n\n````typescript\nserverSentEventWorker.listen$().pipe(\n  filter((data: T) => data.key === 'value')\n);\n````\n\n#### StoreWorker\n\n````typescript\nconst workerInjectionToken = new InjectionToken<StoreWorker<T>>('worker');\nproviders: [\n  STORE_PROVIDER_FACTORY(workerInjectionToken)\n]\n````\n\n````typescript\nconst workerInjectionToken = new InjectionToken<StoreWorker<T>>('worker');\nproviders: [\n  STORE_PROVIDER_FACTORY(workerInjectionToken, {\n    windowObjectInjectionToken: STORE_WINDOW_OBJECT,\n    windowObject: window\n  }),\n]\n````\n\n#### SubscriptionWorker\n\n````typescript\nconst workerInjectionToken = new InjectionToken<SubscriptionWorker<T>>('worker');\nproviders: [\n  SUBSCRIPTION_PROVIDER_FACTORY(workerInjectionToken)\n]\n````\n\n````typescript\nconst workerInjectionToken = new InjectionToken<SubscriptionWorker<T>>('worker');\nproviders: [\n  SUBSCRIPTION_PROVIDER_FACTORY(workerInjectionToken, {\n    windowObjectInjectionToken: SUBSCRIPTION_WINDOW_OBJECT,\n    windowObject: window\n  }),\n]\n````\n\n##### Example\n\n````typescript\nsubscriptionWorker.add(subscriptionLike);\n````\n\n````typescript\nsubscriptionWorker.unsubscribe();\n````\n\n````typescript\nsubscriptionWorker.map('key', subscriptionLike);\n````\n\n````typescript\nsubscriptionWorker.unsubscribeMapped('key');\n````\n\n````typescript\nsubscriptionWorker.unsubscribeAllMapped();\n````\n\n#### WebsocketWorker\n\n````typescript\nconst workerInjectionToken = new InjectionToken<WebsocketWorker<T>>('worker');\nproviders: [\n  WEBSOCKET_PROVIDER_FACTORY(workerInjectionToken)\n]\n````\n\n````typescript\nconst workerInjectionToken = new InjectionToken<WebsocketWorker<T>>('worker');\nproviders: [\n  WEBSOCKET_PROVIDER_FACTORY(workerInjectionToken, {\n    windowObjectInjectionToken: WEBSOCKET_WINDOW_OBJECT,\n    windowObject: window\n  }),\n]\n````\n","readmeFilename":"README.md"}