{"_id":"@apiratorjs/async-context","_rev":"13-ab4cb44e4589ad8581d362c0ec4d4354","name":"@apiratorjs/async-context","dist-tags":{"latest":"1.1.5"},"versions":{"1.0.1":{"name":"@apiratorjs/async-context","version":"1.0.1","author":{"url":"https://oleksiizaitsev.com","name":"Alexey Zaitsev"},"license":"MIT","_id":"@apiratorjs/async-context@1.0.1","maintainers":[{"name":"apiratorjs","email":"apirator.framework@gmail.com"}],"homepage":"https://github.com/apiratorjs/async-context#readme","bugs":{"url":"https://github.com/apiratorjs/async-context/issues"},"dist":{"shasum":"ba1374426410b478eef291a9835b388d7dd334f9","tarball":"https://registry.npmjs.org/@apiratorjs/async-context/-/async-context-1.0.1.tgz","fileCount":18,"integrity":"sha512-+bMVOghaXLoQRigvSPQrrri4hDiYNof/+s6Y75ZnjHM1G3WJ46YLwJBDrmmJnUJGVmN/ugxukBGif+ywJ1u/Ag==","signatures":[{"sig":"MEQCIEfbdClF/P3v1HdMQH+nLGy1PTMieq42vn0dsscMgobzAiAnFRbdY9jFtipIsfcof+bYY62aYvR/WZFMhVjL/UW++w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17243},"main":"dist/src/index.js","type":"commonjs","types":"dist/src/index.d.ts","engines":{"node":">=16.4.0"},"scripts":{"test":"npm run build && node --test dist/test","build":"rm -rf dist && tsc","watch":"tsc --watch","prepare":"npm run build","publish":"npm publish"},"_npmUser":{"name":"apiratorjs","email":"apirator.framework@gmail.com"},"repository":{"url":"git+https://github.com/apiratorjs/async-context.git","type":"git"},"_npmVersion":"10.8.2","description":"A Node.js async context library leveraging the node:async_hooks module, supporting context merging and overriding.","directories":{},"_nodeVersion":"20.18.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/node":"^22.13.1"},"_npmOperationalInternal":{"tmp":"tmp/async-context_1.0.1_1738974445807_0.056009484227159234","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@apiratorjs/async-context","version":"1.0.2","author":{"url":"https://oleksiizaitsev.com","name":"Alexey Zaitsev"},"license":"MIT","_id":"@apiratorjs/async-context@1.0.2","maintainers":[{"name":"apiratorjs","email":"apirator.framework@gmail.com"}],"homepage":"https://github.com/apiratorjs/async-context#readme","bugs":{"url":"https://github.com/apiratorjs/async-context/issues"},"dist":{"shasum":"1048fd91b2ba6e8b8d774ea76c2010b75d4484d2","tarball":"https://registry.npmjs.org/@apiratorjs/async-context/-/async-context-1.0.2.tgz","fileCount":18,"integrity":"sha512-GBFdjBCJmfrF32gd9rrGT8KVsL9mV2eooWVOHL5i1Kp37bTgQ7dX73odmGa1HfUV/iHCVY6TPWPN9PuqAyx5vg==","signatures":[{"sig":"MEQCIBvt1dBuJA4jf8jRV7zEKDSGZZn27Hf9debJuOgxj3zuAiA5GE+nsLbunfZ/0CFNbyBBiN5eTJcPAC9pJEvo2evAJw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17213},"main":"dist/src/index.js","type":"commonjs","types":"dist/src/index.d.ts","engines":{"node":">=16.4.0"},"scripts":{"test":"npm run build && node --test dist/test","build":"rm -rf dist && tsc","watch":"tsc --watch","prepare":"npm run build"},"_npmUser":{"name":"apiratorjs","email":"apirator.framework@gmail.com"},"repository":{"url":"git+https://github.com/apiratorjs/async-context.git","type":"git"},"_npmVersion":"10.8.2","description":"A Node.js async context library leveraging the node:async_hooks module, supporting context merging and overriding.","directories":{},"_nodeVersion":"20.18.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/node":"^22.13.1"},"_npmOperationalInternal":{"tmp":"tmp/async-context_1.0.2_1738974471287_0.40244305305863004","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@apiratorjs/async-context","version":"1.0.3","author":{"url":"https://oleksiizaitsev.com","name":"Alexey Zaitsev"},"license":"MIT","_id":"@apiratorjs/async-context@1.0.3","maintainers":[{"name":"apiratorjs","email":"apirator.framework@gmail.com"}],"homepage":"https://github.com/apiratorjs/async-context#readme","bugs":{"url":"https://github.com/apiratorjs/async-context/issues"},"dist":{"shasum":"7e754cff9926e78f6e45e9986416387ecf101be5","tarball":"https://registry.npmjs.org/@apiratorjs/async-context/-/async-context-1.0.3.tgz","fileCount":18,"integrity":"sha512-jLF1dBpwmqHUTKYGY1M0OCgJKSzuW/ReCGRdWzTpngQOQ+abCm2HV8CwQvr9/3klktKyGL8fzJgrKVwXhUKViQ==","signatures":[{"sig":"MEYCIQCKvYN5iq9F3FwnIsyNXSqKOwgVhRl2u9dSdoJhU4ng3wIhAJlsG2lU9fW59jEq+j4Gsjsml9atq/9NrVzBvGd4tilf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17231},"main":"dist/src/index.js","type":"commonjs","types":"dist/src/index.d.ts","engines":{"node":">=16.4.0"},"gitHead":"e9ce0004744e173936246494f40127f9b5df4acb","scripts":{"test":"npm run build && node --test dist/test","build":"rm -rf dist && tsc","watch":"tsc --watch","prepare":"npm run build"},"_npmUser":{"name":"apiratorjs","email":"apirator.framework@gmail.com"},"repository":{"url":"git+https://github.com/apiratorjs/async-context.git","type":"git"},"_npmVersion":"10.8.2","description":"A Node.js async context library leveraging the node:async_hooks module, supporting context merging and overriding.","directories":{},"_nodeVersion":"20.18.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/node":"^22.13.1"},"_npmOperationalInternal":{"tmp":"tmp/async-context_1.0.3_1738975537646_0.7376760756245673","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@apiratorjs/async-context","version":"1.0.5","author":{"url":"https://oleksiizaitsev.com","name":"Alexey Zaitsev"},"license":"MIT","_id":"@apiratorjs/async-context@1.0.5","maintainers":[{"name":"apiratorjs","email":"apirator.framework@gmail.com"}],"homepage":"https://github.com/apiratorjs/async-context#readme","bugs":{"url":"https://github.com/apiratorjs/async-context/issues"},"dist":{"shasum":"741bce946e894eae58584339e0c7cf330d511a5c","tarball":"https://registry.npmjs.org/@apiratorjs/async-context/-/async-context-1.0.5.tgz","fileCount":18,"integrity":"sha512-+51F4dFw9qzVEjJVtDb4pv1giyAnewQNPH/5EnQEU+y/nAsZCul78zsVQCKW0+eLa6BswUlczkhTXlBJHG3Grw==","signatures":[{"sig":"MEQCIFVmEcjRavp9WdvX/i2Gwa2eBjKHIQJzn/XelhTbzsXwAiAq9eu61lOxyrdFfB0nV27a3RTK8oHDDjLpogLcOjFNeg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15738},"main":"dist/src/index.js","type":"commonjs","types":"dist/src/index.d.ts","engines":{"node":">=16.4.0"},"gitHead":"a5c27004ad22b0f92e676a0c0c2b09c91c8cc289","scripts":{"test":"npm run build && node --test dist/test","build":"rm -rf dist && tsc","watch":"tsc --watch","prepare":"npm run build"},"_npmUser":{"name":"apiratorjs","email":"apirator.framework@gmail.com"},"repository":{"url":"git+https://github.com/apiratorjs/async-context.git","type":"git"},"_npmVersion":"10.8.2","description":"A Node.js async context library leveraging the node:async_hooks module, supporting context merging and overriding.","directories":{},"_nodeVersion":"20.18.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/node":"^22.13.1"},"_npmOperationalInternal":{"tmp":"tmp/async-context_1.0.5_1738979169269_0.8132281902835818","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@apiratorjs/async-context","version":"1.1.0","author":{"url":"https://oleksiizaitsev.com","name":"Alexey Zaitsev"},"license":"MIT","_id":"@apiratorjs/async-context@1.1.0","maintainers":[{"name":"apiratorjs","email":"apirator.framework@gmail.com"}],"homepage":"https://github.com/apiratorjs/async-context#readme","bugs":{"url":"https://github.com/apiratorjs/async-context/issues"},"dist":{"shasum":"a8ebcc3ecd444c5ae2003b39dae958907b9f2aba","tarball":"https://registry.npmjs.org/@apiratorjs/async-context/-/async-context-1.1.0.tgz","fileCount":23,"integrity":"sha512-20KTtkTmrNV7lXGhhtWo1VU37h5cG0sS66Lb1HLYNUlIWLaHEBDxAHFC0sPywB8u7FP3DmgCZ47Li1bzrqwC3A==","signatures":[{"sig":"MEQCIBS4qUWsfRdlsemHk0R1xWl2GcMJ5rzCX8ZKQ/3lss4FAiApaAOS9x8rrc8uRMsXgSV7lDbl8x3+bnwmdWCCW2wl0g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20069},"main":"dist/src/index.js","type":"commonjs","types":"dist/src/index.d.ts","engines":{"node":">=16.4.0"},"gitHead":"c82d9521f03c1bf0bb6be68e1f2140937a141a6f","scripts":{"test":"npm run build && node --test dist/test","build":"rm -rf dist && tsc","watch":"tsc --watch","prepare":"npm run build"},"_npmUser":{"name":"apiratorjs","email":"apirator.framework@gmail.com"},"repository":{"url":"git+https://github.com/apiratorjs/async-context.git","type":"git"},"_npmVersion":"10.8.2","description":"A Node.js async context library leveraging the node:async_hooks module, supporting context merging and overriding.","directories":{},"_nodeVersion":"20.18.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","typescript":"^5.7.3","@types/node":"^22.13.1"},"_npmOperationalInternal":{"tmp":"tmp/async-context_1.1.0_1739008606733_0.4566658072637808","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@apiratorjs/async-context","version":"1.1.1","author":{"url":"https://oleksiizaitsev.com","name":"Alexey Zaitsev"},"license":"MIT","_id":"@apiratorjs/async-context@1.1.1","maintainers":[{"name":"apiratorjs","email":"apirator.framework@gmail.com"}],"homepage":"https://github.com/apiratorjs/async-context#readme","bugs":{"url":"https://github.com/apiratorjs/async-context/issues"},"dist":{"shasum":"11d76c916b50759547cddcd2cbc1aed33dfcd979","tarball":"https://registry.npmjs.org/@apiratorjs/async-context/-/async-context-1.1.1.tgz","fileCount":23,"integrity":"sha512-ZPajU5bPhes3H8DBWSQ4XSANU3Q4UZepsDv/a32aVry633DucmGfQ1mgLyj2WxXRaEInT3luo3AqGb9D2jSmoA==","signatures":[{"sig":"MEUCIQD9DOIGYgVEkmtHsFNFxTt00NfaWg9I4/K3qnmMFMOEcgIgfRKju4a46q/fHtowqYUzs97iyPaXtf9ZvAD2UjR+Fik=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20313},"main":"dist/src/index.js","type":"commonjs","types":"dist/src/index.d.ts","engines":{"node":">=16.4.0"},"gitHead":"62a2e86d4154baebf93da79c2feee13da184ae5c","scripts":{"test":"npm run build && node --test dist/test","build":"rm -rf dist && tsc","watch":"tsc --watch","prepare":"npm run build && node --test dist/test"},"_npmUser":{"name":"apiratorjs","email":"apirator.framework@gmail.com"},"repository":{"url":"git+https://github.com/apiratorjs/async-context.git","type":"git"},"_npmVersion":"10.8.2","description":"A Node.js async context library leveraging the node:async_hooks module, supporting context merging and overriding.","directories":{},"_nodeVersion":"20.18.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","typescript":"^5.7.3","@types/node":"^22.13.1"},"_npmOperationalInternal":{"tmp":"tmp/async-context_1.1.1_1739012659415_0.2688458038024788","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@apiratorjs/async-context","version":"1.1.2","keywords":["async-context","async propagation","nodejs","async hooks","context management","execution context","state propagation","context merging","context overriding","typescript","per-request"],"author":{"url":"https://oleksiizaitsev.com","name":"Alexey Zaitsev"},"license":"MIT","_id":"@apiratorjs/async-context@1.1.2","maintainers":[{"name":"apiratorjs","email":"apirator.framework@gmail.com"}],"homepage":"https://github.com/apiratorjs/async-context#readme","bugs":{"url":"https://github.com/apiratorjs/async-context/issues"},"dist":{"shasum":"2a403f17ee9922910bc218da14370aba7b64762b","tarball":"https://registry.npmjs.org/@apiratorjs/async-context/-/async-context-1.1.2.tgz","fileCount":23,"integrity":"sha512-gGaXBeMrGYlKybEVAI0RQwWUrefQZFU5yrYiGPD0fVaGYMHWieWeJsQLfHKOgrvAZrQ1snt0o6O0G14+1AQnig==","signatures":[{"sig":"MEUCIHKxzc4BJsSQUn+o3H4+lxaYn2QvqEIBhOL+spOaxeHqAiEAw1rtvJ8gSt0dVim5O/zXfOr5v0BSvnJE1eRc13VGIBI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20574},"main":"dist/src/index.js","type":"commonjs","types":"dist/src/index.d.ts","engines":{"node":">=16.4.0"},"gitHead":"0cdd5eac48c28099b8af4f378bf2c4f0c1808d57","scripts":{"test":"npm run build && node --test dist/test","build":"rm -rf dist && tsc","watch":"tsc --watch","prepare":"npm run build && node --test dist/test"},"_npmUser":{"name":"apiratorjs","email":"apirator.framework@gmail.com"},"repository":{"url":"git+https://github.com/apiratorjs/async-context.git","type":"git"},"_npmVersion":"10.8.2","description":"A Node.js async context library leveraging the node:async_hooks module, supporting context merging and overriding.","directories":{},"_nodeVersion":"20.18.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","typescript":"^5.7.3","@types/node":"^22.13.1"},"_npmOperationalInternal":{"tmp":"tmp/async-context_1.1.2_1739028721947_0.8295537940194271","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@apiratorjs/async-context","version":"1.1.3","keywords":["async-context","async propagation","nodejs","async hooks","context management","execution context","state propagation","context merging","context overriding","typescript","per-request"],"author":{"url":"https://oleksiizaitsev.com","name":"Oleksii Zaitsev"},"license":"MIT","_id":"@apiratorjs/async-context@1.1.3","maintainers":[{"name":"apiratorjs","email":"apirator.framework@gmail.com"}],"homepage":"https://github.com/apiratorjs/async-context#readme","bugs":{"url":"https://github.com/apiratorjs/async-context/issues"},"dist":{"shasum":"b7339ecc2a379e34f18b2bc8ad40ee025f67f820","tarball":"https://registry.npmjs.org/@apiratorjs/async-context/-/async-context-1.1.3.tgz","fileCount":23,"integrity":"sha512-Sk3HZV9hq1lLDCver21XxlgXdgb1Zu2/G4xFrIRgpSC55LzwgwX3vxuTwT4npse4k05c7XLMYFriwwqjrxKJzw==","signatures":[{"sig":"MEQCHxJq+VJWEqKnecC5I1SB3Z8QBm0MrQSyrwdA5AjEL2cCIQCMElskZc/wPvVt3sxPRnkm+oUdxa4/AhvOc7sxAo/ksw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20790},"main":"dist/src/index.js","type":"commonjs","types":"dist/src/index.d.ts","engines":{"node":">=16.4.0"},"gitHead":"081c8c02738ba6d282244e4c2e0278d9724b01d8","scripts":{"test":"npm run build && node --test dist/test","build":"rm -rf dist && tsc","watch":"tsc --watch","prepare":"npm run build && node --test dist/test"},"_npmUser":{"name":"apiratorjs","email":"apirator.framework@gmail.com"},"repository":{"url":"git+https://github.com/apiratorjs/async-context.git","type":"git"},"_npmVersion":"10.8.2","description":"A Node.js async context library leveraging the node:async_hooks module, supporting context merging and overriding.","directories":{},"_nodeVersion":"20.18.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","typescript":"^5.7.3","@types/node":"^22.13.1"},"_npmOperationalInternal":{"tmp":"tmp/async-context_1.1.3_1739110172201_0.43408176069170823","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"@apiratorjs/async-context","version":"1.1.4","keywords":["async-context","async propagation","nodejs","async hooks","context management","execution context","state propagation","context merging","context overriding","typescript","per-request"],"author":{"url":"https://oleksiizaitsev.com","name":"Oleksii Zaitsev"},"license":"MIT","_id":"@apiratorjs/async-context@1.1.4","maintainers":[{"name":"apiratorjs","email":"apirator.framework@gmail.com"}],"homepage":"https://github.com/apiratorjs/async-context#readme","bugs":{"url":"https://github.com/apiratorjs/async-context/issues"},"dist":{"shasum":"09a6502b7cdfa6ee1aca55df9d70da1749073fd1","tarball":"https://registry.npmjs.org/@apiratorjs/async-context/-/async-context-1.1.4.tgz","fileCount":19,"integrity":"sha512-phjNSG14Lbv4ELPbn5tQQ2Uk39sKQPnGFMCAztaa458AHTnmJ5wNnhcJ1IDwxsfqw0pYNMOQ7hTjMyyUQ0TL3g==","signatures":[{"sig":"MEUCIQCsAvqXN7A9wwP+it49hpeuYbnvUzel9e7iYo1LUBLDQQIgX9uXCT9qXxQI4VLgk1Oud0eLIA28lnJ5z2UXsbRhZGU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24179},"main":"dist/src/index.js","type":"commonjs","types":"dist/src/index.d.ts","engines":{"node":">=16.4.0"},"gitHead":"c81f246d2704f9425e0190139e1463fc05a04874","scripts":{"test":"npm run build && node --test dist/test","build":"rm -rf dist && tsc","watch":"tsc --watch","prepare":"npm run build && node --test dist/test"},"_npmUser":{"name":"apiratorjs","email":"apirator.framework@gmail.com"},"repository":{"url":"git+https://github.com/apiratorjs/async-context.git","type":"git"},"_npmVersion":"10.9.2","description":"A Node.js async context library leveraging the node:async_hooks module, supporting context merging and overriding.","directories":{},"_nodeVersion":"23.7.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","typescript":"^5.7.3","@types/node":"^22.13.1"},"_npmOperationalInternal":{"tmp":"tmp/async-context_1.1.4_1744313826887_0.2703532999640539","host":"s3://npm-registry-packages-npm-production"}},"1.1.5":{"name":"@apiratorjs/async-context","version":"1.1.5","description":"A Node.js async context library leveraging the node:async_hooks module, supporting context merging and overriding.","author":{"name":"Oleksii Zaitsev","url":"https://oleksiizaitsev.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/apiratorjs/async-context.git"},"main":"dist/src/index.js","types":"dist/src/index.d.ts","publishConfig":{"access":"public"},"keywords":["async-context","async propagation","nodejs","async hooks","context management","execution context","state propagation","context merging","context overriding","typescript","per-request"],"type":"commonjs","scripts":{"build":"rm -rf dist && tsc","watch":"tsc --watch","test":"npm run build && node --test dist/test","prepare":"npm run build && node --test dist/test"},"engines":{"node":">=16.4.0"},"devDependencies":{"@types/node":"^22.13.1","tsx":"^4.19.2","typescript":"^5.7.3"},"_id":"@apiratorjs/async-context@1.1.5","gitHead":"c81f246d2704f9425e0190139e1463fc05a04874","bugs":{"url":"https://github.com/apiratorjs/async-context/issues"},"homepage":"https://github.com/apiratorjs/async-context#readme","_nodeVersion":"20.19.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-KXq7jLMvnxKvx8RH7sr0V0bzExeaiqBrWz9ZVxxtofESSbrLtJKrS4YXZalc6alX3sUVFs1maBJwQY79qBX3RA==","shasum":"78cd59724b540cd8a035786c0916ef58cfb34ff3","tarball":"https://registry.npmjs.org/@apiratorjs/async-context/-/async-context-1.1.5.tgz","fileCount":19,"unpackedSize":24623,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCXMBfxvxRX7SPTYYbil35Ysd1iKaWWf96CDCz0vXwDHgIgGDT3OLj5n0vo2YK+Zk6osWCQOB6DhFLRi+dsJZwIaS4="}]},"_npmUser":{"name":"apiratorjs","email":"apirator.framework@gmail.com"},"directories":{},"maintainers":[{"name":"apiratorjs","email":"apirator.framework@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/async-context_1.1.5_1745682587442_0.2643125875943799"},"_hasShrinkwrap":false}},"time":{"created":"2025-02-08T00:27:25.685Z","modified":"2025-04-26T15:49:47.806Z","1.0.0":"2025-02-08T00:16:12.117Z","1.0.1":"2025-02-08T00:27:26.022Z","1.0.2":"2025-02-08T00:27:51.453Z","1.0.3":"2025-02-08T00:45:37.818Z","1.0.5":"2025-02-08T01:46:09.489Z","1.1.0":"2025-02-08T09:56:46.926Z","1.1.1":"2025-02-08T11:04:19.661Z","1.1.2":"2025-02-08T15:32:02.172Z","1.1.3":"2025-02-09T14:09:32.377Z","1.1.4":"2025-04-10T19:37:07.081Z","1.1.5":"2025-04-26T15:49:47.617Z"},"bugs":{"url":"https://github.com/apiratorjs/async-context/issues"},"author":{"name":"Oleksii Zaitsev","url":"https://oleksiizaitsev.com"},"license":"MIT","homepage":"https://github.com/apiratorjs/async-context#readme","keywords":["async-context","async propagation","nodejs","async hooks","context management","execution context","state propagation","context merging","context overriding","typescript","per-request"],"repository":{"type":"git","url":"git+https://github.com/apiratorjs/async-context.git"},"description":"A Node.js async context library leveraging the node:async_hooks module, supporting context merging and overriding.","maintainers":[{"name":"apiratorjs","email":"apirator.framework@gmail.com"}],"readme":"# @apiratorjs/async-context\n\n[![NPM version](https://img.shields.io/npm/v/@apiratorjs/async-context.svg)](https://www.npmjs.com/package/@apiratorjs/async-context)\n[![License: MIT](https://img.shields.io/npm/l/@apiratorjs/async-context.svg)](https://github.com/apiratorjs/async-context/blob/main/LICENSE)\n\nA lightweight Node.js library for managing asynchronous contexts using the built-in [`node:async_hooks`](https://nodejs.org/api/async_hooks.html) module. This package allows you to share, merge, and override context data throughout your asynchronous code execution. It’s especially useful for per-request or per-transaction state management, logging, and debugging.\n\n> **Note:** Requires Node.js version **>=16.4.0**\n\n---\n\n## Features\n\n- **Async Context Management:** Seamlessly pass context data across asynchronous calls.\n- **Context Merging:** Automatically merge context data for common data types (plain objects, arrays, Maps, and Sets).\n- **Context Overriding:** Override existing context data when needed.\n- **Typed Context Store:** Built with TypeScript to provide type safety.\n- **Easy Integration:** Works out-of-the-box with Node.js asynchronous operations.\n- **Extended Map Functionality:** `AsyncContextStore` extends the native `Map` class, so all Map methods (such as `set`, `get`, `has`, `delete`, etc.) are available and it supports any type as a key—including classes.\n\n---\n\n## Installation\n\nInstall the package via npm:\n\n```bash\nnpm install @apiratorjs/async-context\n```\n\nOr using yarn:\n\n```bash\nyarn add @apiratorjs/async-context\n```\n\n## Usage\n\n### Basic Example\nUse withContext to run a callback within an asynchronous context:\n\n```typescript\nimport { AsyncContext } from \"@apiratorjs/async-context\";\n\nasync function main() {\n  await AsyncContext.withContext(\"user\", { id: 123 }, () => {\n    // Inside this callback the context is available.\n    const user = AsyncContext.getContext(\"user\");\n    console.log(\"User Context:\", user); // { id: 123 }\n  });\n}\n\nmain();\n```\n\n### Merging Context\nIf you nest context calls using the same key, the package will merge the data if they are compatible (e.g., plain objects, arrays, Maps, or Sets):\n\n```typescript\nimport { AsyncContext } from \"@apiratorjs/async-context\";\n\nAsyncContext.withContext(\"config\", { theme: \"dark\" }, () => {\n  console.log(AsyncContext.getContext(\"config\")); // { theme: \"dark\" }\n  \n  AsyncContext.withContext(\"config\", { language: \"en\" }, () => {\n    console.log(AsyncContext.getContext(\"config\")); // { theme: \"dark\", language: \"en\" }\n  });\n});\n```\n\n### Overriding Context\nUse withContextOverride to completely override a value in the context rather than merging:\n\n```typescript\nimport { AsyncContext } from \"@apiratorjs/async-context\";\n\nAsyncContext.withContext(\"user\", { id: 123, name: \"Alice\" }, () => {\n  AsyncContext.withContextOverride(\"user\", { id: 999 }, () => {\n    console.log(AsyncContext.getContext(\"user\")); // { id: 999 }\n  });\n});\n```\n\n### Working with Multiple Keys\nYou can work with multiple context keys at once by passing an AsyncContextStore. For example:\n\n```typescript\nimport { AsyncContext, AsyncContextStore } from \"@apiratorjs/async-context\";\n\n// Create a context store from a plain object.\nconst contextStore = AsyncContextStore.fromObject({\n  user: { id: 1 },\n  session: { token: \"abc\" }\n});\n\nAsyncContext.withContext(contextStore, () => {\n  const user = AsyncContext.getContext(\"user\");\n  const session = AsyncContext.getContext(\"session\");\n  console.log(\"User:\", user);       // { id: 1 }\n  console.log(\"Session:\", session); // { token: \"abc\" }\n});\n```\n\n### Retrieving Context Data\n* Entire Context: Call AsyncContext.getContext() with no arguments.\n* Specific Key: Call AsyncContext.getContext(\"key\") to get the value associated with that key.\n* Partial Context: Use AsyncContext.getMultiContext([\"key1\", \"key2\"]) to obtain a subset of the context.\n\n```typescript\n// Get the entire context store.\nconst store = AsyncContext.getContext();\n\n// Get a specific context value.\nconst user = AsyncContext.getContext(\"user\");\n\n// Get a partial context containing selected keys.\nconst partialStore = AsyncContext.getMultiContext([\"user\", \"session\"]);\n```\n\n## Running Tests\nTo run the tests locally:\n1. Clone the repository.\n2. Install the dependencies using `npm install` or `yarn install`.\n3. Run the tests using `npm test` or `yarn test`.\n\n### Contributing\n\nContributions, issues, and feature requests are welcome!\nPlease open an issue or submit a pull request on [GitHub](https://github.com/apiratorjs/async-context).\n","readmeFilename":"README.md"}