{"_id":"hookified","_rev":"29-db7228167c5c3375be82b3d6af192306","name":"hookified","dist-tags":{"latest":"1.15.0"},"versions":{"0.5.0":{"name":"hookified","version":"0.5.0","keywords":["hooks","emittery","eventemitter","eventemitter3","middleware","events","hooks","event-hooks","hook-system","event-driven","event-emitter","hook-handlers","async-hooks","middleware","emit","event-management","before-after-hooks","event-listeners","custom-hooks","hook-utilities","typescript-hooks"],"author":{"name":"Jared Wray","email":"me@jaredwray.com"},"license":"MIT","_id":"hookified@0.5.0","maintainers":[{"name":"jaredwray","email":"me@jaredwray.com"}],"homepage":"https://github.com/jaredwray/hookified#readme","bugs":{"url":"https://github.com/jaredwray/hookified/issues"},"dist":{"shasum":"36bb1555dfeb17cf3aa689160ff7deccd34a2a50","tarball":"https://registry.npmjs.org/hookified/-/hookified-0.5.0.tgz","fileCount":25,"integrity":"sha512-RsdVcoPMFg1ZA1VhhNn6C79AFaBCgTDdn/oL46TwZ5wPSyqlvPkO/oPC1+T7brs5vjgRT4yASkO2ARzLWwLYzw==","signatures":[{"sig":"MEUCIHHFm0Iz7bwGrCjUxK4jabcesU+8e6hirFDAkhJUho6GAiEA8TTJIqOFO7MZ4safyTI5cX01n4pxWs9+/XqfFO5XMpo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":441315},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"a65ccdc9987943de6b530749def1382397a488e9","scripts":{"test":"xo --fix && vitest run --coverage","build":"rimraf ./dist && tsc","clean":"rimraf ./dist ./coverage ./site/dist","prepare":"npm run build","test:ci":"xo && vitest run --coverage","website:build":"docula build","website:serve":"docula serve"},"_npmUser":{"name":"jaredwray","email":"me@jaredwray.com"},"repository":{"url":"git+https://github.com/jaredwray/hookified.git","type":"git"},"_npmVersion":"10.8.2","description":"Event and Middleware Hooks","directories":{},"_nodeVersion":"20.15.0","dependencies":{"emittery":"^1.0.3"},"_hasShrinkwrap":false,"devDependencies":{"xo":"^0.59.3","docula":"^0.9.0","rimraf":"^6.0.1","vitest":"^2.0.5","typescript":"^5.5.4","@vitest/coverage-v8":"^2.0.5"},"_npmOperationalInternal":{"tmp":"tmp/hookified_0.5.0_1725377792106_0.19906680498134577","host":"s3://npm-registry-packages"}},"0.5.1":{"name":"hookified","version":"0.5.1","keywords":["hooks","emittery","eventemitter","eventemitter3","middleware","events","hooks","event-hooks","hook-system","event-driven","event-emitter","hook-handlers","async-hooks","middleware","emit","event-management","before-after-hooks","event-listeners","custom-hooks","hook-utilities","typescript-hooks"],"author":{"name":"Jared Wray","email":"me@jaredwray.com"},"license":"MIT","_id":"hookified@0.5.1","maintainers":[{"name":"jaredwray","email":"me@jaredwray.com"}],"homepage":"https://github.com/jaredwray/hookified#readme","bugs":{"url":"https://github.com/jaredwray/hookified/issues"},"dist":{"shasum":"1735d7b39e53326234000a18c019edb8c958619f","tarball":"https://registry.npmjs.org/hookified/-/hookified-0.5.1.tgz","fileCount":6,"integrity":"sha512-DGZEUGayX9abIeK1KtzYCuIBOXxm1PUHCY5k6NnTRjW1EzJphPhd44Qbba85wQusIa2nYJlBWcyO9PCOuAhoWg==","signatures":[{"sig":"MEUCIQDGssVDa+v+Hpg2MaW0lFgANpwVA3erP97ocsbWkjzp3gIgNo1oCyaDl0Ny0sjBbhi2jm6vIn4vhEiqGik6ZITOCwQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":7983},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":"./dist/index.js","gitHead":"2f35e5905be0365351551a610799ec25e5d211a2","scripts":{"test":"xo --fix && vitest run --coverage","build":"rimraf ./dist && tsc","clean":"rimraf ./dist ./coverage ./site/dist","prepare":"npm run build","test:ci":"xo && vitest run --coverage","website:build":"docula build","website:serve":"docula serve"},"_npmUser":{"name":"jaredwray","email":"me@jaredwray.com"},"repository":{"url":"git+https://github.com/jaredwray/hookified.git","type":"git"},"_npmVersion":"10.8.2","description":"Event and Middleware Hooks","directories":{},"_nodeVersion":"20.17.0","dependencies":{"emittery":"^1.0.3"},"_hasShrinkwrap":false,"devDependencies":{"xo":"^0.59.3","docula":"^0.9.0","rimraf":"^6.0.1","vitest":"^2.0.5","typescript":"^5.5.4","@vitest/coverage-v8":"^2.0.5"},"_npmOperationalInternal":{"tmp":"tmp/hookified_0.5.1_1725379433611_0.1592169726789623","host":"s3://npm-registry-packages"}},"0.6.0":{"name":"hookified","version":"0.6.0","keywords":["hooks","emittery","eventemitter","eventemitter3","middleware","events","hooks","event-hooks","hook-system","event-driven","event-emitter","hook-handlers","async-hooks","middleware","emit","event-management","before-after-hooks","event-listeners","custom-hooks","hook-utilities","typescript-hooks"],"author":{"name":"Jared Wray","email":"me@jaredwray.com"},"license":"MIT","_id":"hookified@0.6.0","maintainers":[{"name":"jaredwray","email":"me@jaredwray.com"}],"homepage":"https://github.com/jaredwray/hookified#readme","bugs":{"url":"https://github.com/jaredwray/hookified/issues"},"dist":{"shasum":"028348abbac7480829bfcd124e7c7df939e392aa","tarball":"https://registry.npmjs.org/hookified/-/hookified-0.6.0.tgz","fileCount":6,"integrity":"sha512-QH4ibDZPjmVoUyVH8k7WcCYwCMJNC7jrZZwFs3tcliiv19khQ8xG7ZdZMFzsQqOKbQXlGEZw6js8adIKrSaAoQ==","signatures":[{"sig":"MEUCIHrg+683bXh/wDJSosnMY5LGWCSKOoaUmoffUU6Ie+AUAiEAzwp1XsCZ1FUjZnfP/Stam1WUEpvmS6s6rNsrhfejhCI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":7843},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":"./dist/index.js","gitHead":"2d795cf0f627cd356d93dcb5fad0d953129f597d","scripts":{"test":"xo --fix && vitest run --coverage","build":"rimraf ./dist && tsc","clean":"rimraf ./dist ./coverage ./site/dist","prepare":"npm run build","test:ci":"xo && vitest run --coverage","website:build":"docula build","website:serve":"docula serve"},"_npmUser":{"name":"jaredwray","email":"me@jaredwray.com"},"repository":{"url":"git+https://github.com/jaredwray/hookified.git","type":"git"},"_npmVersion":"10.8.2","description":"Event and Middleware Hooks","directories":{},"_nodeVersion":"20.17.0","dependencies":{"emittery":"^1.0.3"},"_hasShrinkwrap":false,"devDependencies":{"xo":"^0.59.3","docula":"^0.9.0","rimraf":"^6.0.1","vitest":"^2.0.5","typescript":"^5.5.4","@vitest/coverage-v8":"^2.0.5"},"_npmOperationalInternal":{"tmp":"tmp/hookified_0.6.0_1725392709069_0.9368188462054925","host":"s3://npm-registry-packages"}},"0.7.0":{"name":"hookified","version":"0.7.0","keywords":["hooks","emittery","eventemitter","eventemitter3","middleware","events","hooks","event-hooks","hook-system","event-driven","event-emitter","hook-handlers","async-hooks","middleware","emit","event-management","before-after-hooks","event-listeners","custom-hooks","hook-utilities","typescript-hooks"],"author":{"name":"Jared Wray","email":"me@jaredwray.com"},"license":"MIT","_id":"hookified@0.7.0","maintainers":[{"name":"jaredwray","email":"me@jaredwray.com"}],"homepage":"https://github.com/jaredwray/hookified#readme","bugs":{"url":"https://github.com/jaredwray/hookified/issues"},"dist":{"shasum":"5a31c4bced553564c342a83e49a5fd47ab791d3f","tarball":"https://registry.npmjs.org/hookified/-/hookified-0.7.0.tgz","fileCount":6,"integrity":"sha512-qK/KzGV2bwyhxopA2GB3KZsLmVUNcnu5+ynRXT9YEBQCdSNIUt7kPq9+618hsWyvmu/caQZA1yhlwUdYhB0beQ==","signatures":[{"sig":"MEUCIDUj/fuhYA7fAzydRSmeSl+J6b/tDUAQ1ieTpRsC0w3pAiEAuEgjy4wx8qdBe2U9ah3Dzz75XWAgyZ9qIDYZJpgCf70=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":9516},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":"./dist/index.js","gitHead":"cc94ce7e2e0faa1622d2a4f5b54b1d68f25cb5bb","scripts":{"test":"xo --fix && vitest run --coverage","build":"rimraf ./dist && tsc","clean":"rimraf ./dist ./coverage ./site/dist","prepare":"npm run build","test:ci":"xo && vitest run --coverage","website:build":"docula build","website:serve":"docula serve"},"_npmUser":{"name":"jaredwray","email":"me@jaredwray.com"},"repository":{"url":"git+https://github.com/jaredwray/hookified.git","type":"git"},"_npmVersion":"10.8.2","description":"Event and Middleware Hooks","directories":{},"_nodeVersion":"20.17.0","dependencies":{"emittery":"^1.0.3"},"_hasShrinkwrap":false,"devDependencies":{"xo":"^0.59.3","docula":"^0.9.0","rimraf":"^6.0.1","vitest":"^2.0.5","typescript":"^5.5.4","@vitest/coverage-v8":"^2.0.5"},"_npmOperationalInternal":{"tmp":"tmp/hookified_0.7.0_1725638837601_0.0026709807541318575","host":"s3://npm-registry-packages"}},"0.7.1":{"name":"hookified","version":"0.7.1","keywords":["hooks","emittery","eventemitter","eventemitter3","middleware","events","hooks","event-hooks","hook-system","event-driven","event-emitter","hook-handlers","async-hooks","middleware","emit","event-management","before-after-hooks","event-listeners","custom-hooks","hook-utilities","typescript-hooks"],"author":{"name":"Jared Wray","email":"me@jaredwray.com"},"license":"MIT","_id":"hookified@0.7.1","maintainers":[{"name":"jaredwray","email":"me@jaredwray.com"}],"homepage":"https://github.com/jaredwray/hookified#readme","bugs":{"url":"https://github.com/jaredwray/hookified/issues"},"dist":{"shasum":"e3ea90c749b5fb25fb39a24e370af7055c5a4b1b","tarball":"https://registry.npmjs.org/hookified/-/hookified-0.7.1.tgz","fileCount":6,"integrity":"sha512-AefYGsVTMR1+Qp1VWyPTJIrxE5egJMUBuuBxKZIywusBNlMKwh3QsVwR1F2llS1vVuWF0cyKlNW4EG0Urfi6FQ==","signatures":[{"sig":"MEUCIQCOzr4aV5v7McqbDptS9CA6DwMmEBGC9OWA/vViyBOXdAIgJgj89h4mLKo/8CSQ2SpJbWJdmLKQJS2MDWHHE//Iwss=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":9496},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":"./dist/index.js","gitHead":"c53728cbe4aa6cad061f1578f7ca4117d8d302ad","scripts":{"test":"xo --fix && vitest run --coverage","build":"rimraf ./dist && tsc","clean":"rimraf ./dist ./coverage ./site/dist","prepare":"npm run build","test:ci":"xo && vitest run --coverage","website:build":"docula build","website:serve":"docula serve"},"_npmUser":{"name":"jaredwray","email":"me@jaredwray.com"},"repository":{"url":"git+https://github.com/jaredwray/hookified.git","type":"git"},"_npmVersion":"10.8.2","description":"Event and Middleware Hooks","directories":{},"_nodeVersion":"20.17.0","dependencies":{"emittery":"^1.0.3"},"_hasShrinkwrap":false,"devDependencies":{"xo":"^0.59.3","docula":"^0.9.0","rimraf":"^6.0.1","vitest":"^2.0.5","typescript":"^5.5.4","@vitest/coverage-v8":"^2.0.5"},"_npmOperationalInternal":{"tmp":"tmp/hookified_0.7.1_1725652066859_0.30377788974999476","host":"s3://npm-registry-packages"}},"1.0.0":{"name":"hookified","version":"1.0.0","keywords":["hooks","emittery","eventemitter","eventemitter3","middleware","events","hooks","event-hooks","hook-system","event-driven","event-emitter","hook-handlers","async-hooks","middleware","emit","event-management","before-after-hooks","event-listeners","custom-hooks","hook-utilities","typescript-hooks"],"author":{"name":"Jared Wray","email":"me@jaredwray.com"},"license":"MIT","_id":"hookified@1.0.0","maintainers":[{"name":"jaredwray","email":"me@jaredwray.com"}],"homepage":"https://github.com/jaredwray/hookified#readme","bugs":{"url":"https://github.com/jaredwray/hookified/issues"},"dist":{"shasum":"24c8112c78f5ac2efc12fa3ca7d71fb8e8ab8f91","tarball":"https://registry.npmjs.org/hookified/-/hookified-1.0.0.tgz","fileCount":7,"integrity":"sha512-VoKOpqgKAgMWaLBMMZ2NZWrUlfXjT7sweU1xwY3oZPAYotH1x1Y31+C/gaz/RPRPV6dR8hT4szkUyB7fcwCM1w==","signatures":[{"sig":"MEQCIGBdSH/4d/SPaWQbnr35ujGAlt4VLkDZbhZJAo5zvY+lAiBH91CmeRTYOzOLX9gNu2brFV/JuTVHFCgM5+KvTL1xYQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":11270},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"a45fdefba4e44f2efd2ce9d87d8ccdb8437af742","scripts":{"test":"xo --fix && vitest run --coverage","build":"rimraf ./dist && tsup src/index.ts --format cjs,esm --dts --clean","clean":"rimraf ./dist ./coverage ./site/dist","prepare":"npm run build","test:ci":"xo && vitest run --coverage","website:build":"docula build","website:serve":"docula serve"},"_npmUser":{"name":"jaredwray","email":"me@jaredwray.com"},"repository":{"url":"git+https://github.com/jaredwray/hookified.git","type":"git"},"_npmVersion":"10.8.2","description":"Event and Middleware Hooks","directories":{},"_nodeVersion":"20.17.0","dependencies":{"emittery":"^1.0.3"},"_hasShrinkwrap":false,"devDependencies":{"xo":"^0.59.3","tsup":"^8.3.0","docula":"^0.9.0","rimraf":"^6.0.1","vitest":"^2.1.1","typescript":"^5.6.2","@vitest/coverage-v8":"^2.1.1"},"_npmOperationalInternal":{"tmp":"tmp/hookified_1.0.0_1726600384510_0.27010948951686675","host":"s3://npm-registry-packages"}},"1.1.0":{"name":"hookified","version":"1.1.0","keywords":["hooks","emittery","eventemitter","eventemitter3","middleware","events","hooks","event-hooks","hook-system","event-driven","event-emitter","hook-handlers","async-hooks","middleware","emit","event-management","before-after-hooks","event-listeners","custom-hooks","hook-utilities","typescript-hooks"],"author":{"name":"Jared Wray","email":"me@jaredwray.com"},"license":"MIT","_id":"hookified@1.1.0","maintainers":[{"name":"jaredwray","email":"me@jaredwray.com"}],"homepage":"https://github.com/jaredwray/hookified#readme","bugs":{"url":"https://github.com/jaredwray/hookified/issues"},"dist":{"shasum":"a17e65817e38f0695652cca147196c9e07ca72df","tarball":"https://registry.npmjs.org/hookified/-/hookified-1.1.0.tgz","fileCount":7,"integrity":"sha512-/OqDmsW7CTHUXcMegyLkTXijkKirTK3UjB3X/GrfjFdxQMiAXkXsM2o4z/VtsH5br1VjKDUIbcwcqAkGa5c2LA==","signatures":[{"sig":"MEQCIGM4i8RpSgyIgdfR5Hed1YMb2KdHqlrAQkvFV0c6hhmuAiBix636RTOrRobr5hMwMOp1y0ukzSkp3qSain7F9APWnA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":17139},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"e1012faa35932d974a2ee1b5bad8dce17ac055df","scripts":{"test":"xo --fix && vitest run --coverage","build":"rimraf ./dist && tsup src/index.ts --format cjs,esm --dts --clean","clean":"rimraf ./dist ./coverage ./site/dist","prepare":"npm run build","test:ci":"xo && vitest run --coverage","website:build":"docula build","website:serve":"docula serve"},"_npmUser":{"name":"jaredwray","email":"me@jaredwray.com"},"repository":{"url":"git+https://github.com/jaredwray/hookified.git","type":"git"},"_npmVersion":"10.8.2","description":"Event and Middleware Hooks","directories":{},"_nodeVersion":"20.17.0","_hasShrinkwrap":false,"devDependencies":{"xo":"^0.59.3","tsup":"^8.3.0","docula":"^0.9.0","rimraf":"^6.0.1","vitest":"^2.1.1","typescript":"^5.6.2","@vitest/coverage-v8":"^2.1.1"},"_npmOperationalInternal":{"tmp":"tmp/hookified_1.1.0_1727115966441_0.3051113546040869","host":"s3://npm-registry-packages"}},"1.2.0":{"name":"hookified","version":"1.2.0","keywords":["hooks","eventemitter","eventemitter3","middleware","events","hooks","event-hooks","hook-system","event-driven","event-emitter","hook-handlers","middleware","emit","event-management","before-after-hooks","event-listeners","custom-hooks","hook-utilities","typescript-hooks"],"author":{"name":"Jared Wray","email":"me@jaredwray.com"},"license":"MIT","_id":"hookified@1.2.0","maintainers":[{"name":"jaredwray","email":"me@jaredwray.com"}],"homepage":"https://github.com/jaredwray/hookified#readme","bugs":{"url":"https://github.com/jaredwray/hookified/issues"},"dist":{"shasum":"ab4f39e667c69eb877082cdc48f9d3decad125fb","tarball":"https://registry.npmjs.org/hookified/-/hookified-1.2.0.tgz","fileCount":7,"integrity":"sha512-32q0JrtZRAdCGeEa8IcBz4iABsrP4UiDrbFj/WADL1VyNHRvHdGs8MrYvaIZWMzbff1xdS3Tw8kBt6YvcSL7jQ==","signatures":[{"sig":"MEYCIQC75SSdqWsfdndnBCONdaobHITtRYRQg6JEewVzCiiQQQIhAIeRLX1tQe5i0DnS63pbXvXO0dAoVHQW+1pa6uVmSkqM","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":15963},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"3b0bf69b4c351c5ad381ab961a6c552824fcf186","scripts":{"test":"xo --fix && vitest run --coverage","build":"rimraf ./dist && tsup src/index.ts --format cjs,esm --dts --clean","clean":"rimraf ./dist ./coverage ./site/dist","prepare":"npm run build","test:ci":"xo && vitest run --coverage","website:build":"docula build","website:serve":"docula serve"},"_npmUser":{"name":"jaredwray","email":"me@jaredwray.com"},"repository":{"url":"git+https://github.com/jaredwray/hookified.git","type":"git"},"_npmVersion":"10.8.2","description":"Event and Middleware Hooks","directories":{},"_nodeVersion":"20.17.0","_hasShrinkwrap":false,"devDependencies":{"xo":"^0.59.3","tsup":"^8.3.0","docula":"^0.9.1","rimraf":"^6.0.1","vitest":"^2.1.1","typescript":"^5.6.2","@vitest/coverage-v8":"^2.1.1"},"_npmOperationalInternal":{"tmp":"tmp/hookified_1.2.0_1727882490384_0.507117956171208","host":"s3://npm-registry-packages"}},"1.2.1":{"name":"hookified","version":"1.2.1","keywords":["hooks","eventemitter","eventemitter3","middleware","events","hooks","event-hooks","hook-system","event-driven","event-emitter","hook-handlers","middleware","emit","event-management","before-after-hooks","event-listeners","custom-hooks","hook-utilities","typescript-hooks"],"author":{"name":"Jared Wray","email":"me@jaredwray.com"},"license":"MIT","_id":"hookified@1.2.1","maintainers":[{"name":"jaredwray","email":"me@jaredwray.com"}],"homepage":"https://github.com/jaredwray/hookified#readme","bugs":{"url":"https://github.com/jaredwray/hookified/issues"},"dist":{"shasum":"855c367fd150aec0592368818070db5426fb820b","tarball":"https://registry.npmjs.org/hookified/-/hookified-1.2.1.tgz","fileCount":7,"integrity":"sha512-Lo9+Xq8R2vAxE/aMSR0LBs1ZBhpyn+w9rLP6UqX8K3jqunKMHYSC6UuhRsUlWcAQ7Gp7k3pJfScMIAY5fYJR2w==","signatures":[{"sig":"MEUCIQC1NyuzwRQEjb2WACm13SGV2phPEC4zia9o2LsaNQm43wIgfk2QHR9vq0llmaW3b5WQlAPRPS/NdfsX5hj6XTV6wio=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":15925},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"91693c938a899789c5d76e07f0c38c8711cae6ac","scripts":{"test":"xo --fix && vitest run --coverage","build":"rimraf ./dist && tsup src/index.ts --format cjs,esm --dts --clean","clean":"rimraf ./dist ./coverage ./site/dist","prepare":"npm run build","test:ci":"xo && vitest run --coverage","website:build":"docula build","website:serve":"docula serve"},"_npmUser":{"name":"jaredwray","email":"me@jaredwray.com"},"repository":{"url":"git+https://github.com/jaredwray/hookified.git","type":"git"},"_npmVersion":"10.8.2","description":"Event and Middleware Hooks","directories":{},"_nodeVersion":"20.17.0","_hasShrinkwrap":false,"devDependencies":{"xo":"^0.59.3","tsup":"^8.3.0","docula":"^0.9.3","rimraf":"^6.0.1","vitest":"^2.1.2","typescript":"^5.6.3","@vitest/coverage-v8":"^2.1.2"},"_npmOperationalInternal":{"tmp":"tmp/hookified_1.2.1_1728856630647_0.47112625219379445","host":"s3://npm-registry-packages"}},"1.3.0":{"name":"hookified","version":"1.3.0","keywords":["hooks","eventemitter","eventemitter3","middleware","events","hooks","event-hooks","hook-system","event-driven","event-emitter","hook-handlers","middleware","emit","event-management","before-after-hooks","event-listeners","custom-hooks","hook-utilities","typescript-hooks"],"author":{"name":"Jared Wray","email":"me@jaredwray.com"},"license":"MIT","_id":"hookified@1.3.0","maintainers":[{"name":"jaredwray","email":"me@jaredwray.com"}],"homepage":"https://github.com/jaredwray/hookified#readme","bugs":{"url":"https://github.com/jaredwray/hookified/issues"},"dist":{"shasum":"3d4e01a5b7d5b8c18b848fbe321ab0fde7d98bf9","tarball":"https://registry.npmjs.org/hookified/-/hookified-1.3.0.tgz","fileCount":11,"integrity":"sha512-w1qTqik5y0pLVlrqBgtj7H0oFRhTAfmT1gmzCrjU6dCJrI2B7zD0jZAZv7OVOVTpbYMnmbA9O0zUQzwkqN4BSw==","signatures":[{"sig":"MEUCIDbxsIer6KMj9bsmf9i7z8l9zOCw4F0iKoLEhgN58BPrAiEA4sgZRnUms6xOD/T7mlbXo1RoYwLUBPSasVEnlCt5HL4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":33739},"main":"dist/node/index.cjs","type":"module","types":"dist/node/index.d.ts","module":"dist/node/index.js","exports":{".":{"import":"./dist/node/index.js","require":"./dist/node/index.cjs"},"./browser":{"import":"./dist/browser/index.js","default":"./dist/browser/index.global.js"}},"gitHead":"ba6787c0823470d535ad05306b35e961b2e28f8c","scripts":{"test":"xo --fix && vitest run --coverage","build":"rimraf ./dist && tsup","clean":"rimraf ./dist ./coverage ./site/dist","prepare":"npm run build","test:ci":"xo && vitest run --coverage","website:build":"docula build","website:serve":"docula serve"},"_npmUser":{"name":"jaredwray","email":"me@jaredwray.com"},"repository":{"url":"git+https://github.com/jaredwray/hookified.git","type":"git"},"_npmVersion":"10.8.2","description":"Event and Middleware Hooks","directories":{},"_nodeVersion":"20.17.0","_hasShrinkwrap":false,"devDependencies":{"xo":"^0.59.3","tsup":"^8.3.0","docula":"^0.9.3","rimraf":"^6.0.1","vitest":"^2.1.3","typescript":"^5.6.3","@vitest/coverage-v8":"^2.1.3"},"_npmOperationalInternal":{"tmp":"tmp/hookified_1.3.0_1728936250898_0.2605133181595183","host":"s3://npm-registry-packages"}},"1.4.0":{"name":"hookified","version":"1.4.0","keywords":["hooks","eventemitter","eventemitter3","middleware","events","hooks","event-hooks","hook-system","event-driven","event-emitter","hook-handlers","middleware","emit","event-management","before-after-hooks","event-listeners","custom-hooks","hook-utilities","typescript-hooks"],"author":{"name":"Jared Wray","email":"me@jaredwray.com"},"license":"MIT","_id":"hookified@1.4.0","maintainers":[{"name":"jaredwray","email":"me@jaredwray.com"}],"homepage":"https://github.com/jaredwray/hookified#readme","bugs":{"url":"https://github.com/jaredwray/hookified/issues"},"dist":{"shasum":"79395630147ea21f25a1b0daae79d701e75e6e09","tarball":"https://registry.npmjs.org/hookified/-/hookified-1.4.0.tgz","fileCount":11,"integrity":"sha512-P2ETS9IFdI9g/qcpu0/ZYTiOPECBK4M07CQT+yAoMZr8eltlh4Lt7aizKscUS+ZzRyUpAPloFZmPNH74jQ7q6w==","signatures":[{"sig":"MEYCIQDc59ZuBaexKiPXs/6eC95OkZIeXnnWkfJBSKSnZHTncwIhAJG0OfQ6N984kmBjSAeTcj0Hdv0huTgu+P5QjLI+6oeD","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":58111},"main":"dist/node/index.cjs","type":"module","types":"dist/node/index.d.ts","module":"dist/node/index.js","exports":{".":{"import":"./dist/node/index.js","require":"./dist/node/index.cjs"},"./browser":{"import":"./dist/browser/index.js","default":"./dist/browser/index.global.js"}},"gitHead":"094b6053c3b6b8717b1d7b282adcccd6d1303905","scripts":{"test":"xo --fix && vitest run --coverage","build":"rimraf ./dist && tsup","clean":"rimraf ./dist ./coverage ./site/dist","prepare":"npm run build","test:ci":"xo && vitest run --coverage","website:build":"docula build","website:serve":"docula serve"},"_npmUser":{"name":"jaredwray","email":"me@jaredwray.com"},"repository":{"url":"git+https://github.com/jaredwray/hookified.git","type":"git"},"_npmVersion":"10.8.2","description":"Event and Middleware Hooks","directories":{},"_nodeVersion":"20.17.0","_hasShrinkwrap":false,"devDependencies":{"xo":"^0.59.3","tsup":"^8.3.0","docula":"^0.9.3","rimraf":"^6.0.1","vitest":"^2.1.3","typescript":"^5.6.3","@vitest/coverage-v8":"^2.1.3"},"_npmOperationalInternal":{"tmp":"tmp/hookified_1.4.0_1729025803565_0.5102201385144798","host":"s3://npm-registry-packages"}},"1.5.0":{"name":"hookified","version":"1.5.0","keywords":["hooks","eventemitter","eventemitter3","middleware","events","hooks","event-hooks","hook-system","event-driven","event-emitter","hook-handlers","middleware","emit","event-management","before-after-hooks","event-listeners","custom-hooks","hook-utilities","typescript-hooks"],"author":{"name":"Jared Wray","email":"me@jaredwray.com"},"license":"MIT","_id":"hookified@1.5.0","maintainers":[{"name":"jaredwray","email":"me@jaredwray.com"}],"homepage":"https://github.com/jaredwray/hookified#readme","bugs":{"url":"https://github.com/jaredwray/hookified/issues"},"dist":{"shasum":"bb0ca401840ad6e9fdb0ddbe040592bfa8cb04f8","tarball":"https://registry.npmjs.org/hookified/-/hookified-1.5.0.tgz","fileCount":11,"integrity":"sha512-4U0zw2ibOws7kfGdNCIL6oRg+t6ITxkgi9kUaJ71IDp0ZATHjvY6o7l90RBa/R8H2qOKl47SZISA5a3hNnei1g==","signatures":[{"sig":"MEQCIGztzMett1IXucNIx4MeTMIcEjmhuhV2xm0HjlLjltlqAiBNl4xT7KUupcfnxYnSUSwH4EsqH2O2Jy7H+slzoqLGvQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":91011},"main":"dist/node/index.cjs","type":"module","types":"dist/node/index.d.ts","module":"dist/node/index.js","exports":{".":{"import":"./dist/node/index.js","require":"./dist/node/index.cjs"},"./browser":{"import":"./dist/browser/index.js","default":"./dist/browser/index.global.js"}},"gitHead":"cb522e9f725697af61e6ccde702b6ee8683880da","scripts":{"test":"xo --fix && vitest run --coverage","build":"rimraf ./dist && tsup","clean":"rimraf ./dist ./coverage ./site/dist","prepare":"npm run build","test:ci":"xo && vitest run --coverage","website:build":"docula build","website:serve":"docula serve"},"_npmUser":{"name":"jaredwray","email":"me@jaredwray.com"},"repository":{"url":"git+https://github.com/jaredwray/hookified.git","type":"git"},"_npmVersion":"10.8.2","description":"Event and Middleware Hooks","directories":{},"_nodeVersion":"20.18.0","_hasShrinkwrap":false,"devDependencies":{"xo":"^0.59.3","tsup":"^8.3.5","docula":"^0.9.4","rimraf":"^6.0.1","vitest":"^2.1.4","typescript":"^5.6.3","@vitest/coverage-v8":"^2.1.4"},"_npmOperationalInternal":{"tmp":"tmp/hookified_1.5.0_1730230469293_0.6361099685351088","host":"s3://npm-registry-packages"}},"1.5.1":{"name":"hookified","version":"1.5.1","keywords":["hooks","eventemitter","eventemitter3","middleware","events","hooks","event-hooks","hook-system","event-driven","event-emitter","hook-handlers","middleware","emit","event-management","before-after-hooks","event-listeners","custom-hooks","hook-utilities","typescript-hooks"],"author":{"name":"Jared Wray","email":"me@jaredwray.com"},"license":"MIT","_id":"hookified@1.5.1","maintainers":[{"name":"jaredwray","email":"me@jaredwray.com"}],"homepage":"https://github.com/jaredwray/hookified#readme","bugs":{"url":"https://github.com/jaredwray/hookified/issues"},"dist":{"shasum":"2a473492d9c392b703e8b56fb458832387ec8081","tarball":"https://registry.npmjs.org/hookified/-/hookified-1.5.1.tgz","fileCount":11,"integrity":"sha512-sZQQ5QgNVQUXffNd66qefqOMXA88CXIV0gW8I4bMAJYeu1ZCJsyy7sdchaoHzRyS4o0cXw3krNDXkljZr7uexw==","signatures":[{"sig":"MEYCIQC2l5+cwCtmoFdHelCr9x4l1ETMWBHJ2dtLns5M6sVkCQIhALVccPuYK/VshLmfanwVLSDcBV0ICeh5N57qVy/FD2s5","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":103179},"main":"dist/node/index.cjs","type":"module","types":"dist/node/index.d.ts","module":"dist/node/index.js","exports":{".":{"import":"./dist/node/index.js","require":"./dist/node/index.cjs"},"./browser":{"import":"./dist/browser/index.js","default":"./dist/browser/index.global.js"}},"gitHead":"671a59744674a50da997fcea4b13986f3a10636a","scripts":{"test":"xo --fix && vitest run --coverage","build":"rimraf ./dist && tsup","clean":"rimraf ./dist ./coverage ./site/dist","prepare":"npm run build","test:ci":"xo && vitest run --coverage","website:build":"docula build","website:serve":"docula serve"},"_npmUser":{"name":"jaredwray","email":"me@jaredwray.com"},"repository":{"url":"git+https://github.com/jaredwray/hookified.git","type":"git"},"_npmVersion":"10.8.2","description":"Event and Middleware Hooks","directories":{},"_nodeVersion":"20.18.0","_hasShrinkwrap":false,"devDependencies":{"xo":"^0.59.3","tsup":"^8.3.5","docula":"^0.9.5","rimraf":"^6.0.1","vitest":"^2.1.5","typescript":"^5.7.2","@vitest/coverage-v8":"^2.1.5"},"_npmOperationalInternal":{"tmp":"tmp/hookified_1.5.1_1732552739025_0.02615936761492499","host":"s3://npm-registry-packages"}},"1.6.0":{"name":"hookified","version":"1.6.0","keywords":["hooks","eventemitter","eventemitter3","middleware","events","hooks","event-hooks","hook-system","event-driven","event-emitter","hook-handlers","middleware","emit","event-management","before-after-hooks","event-listeners","custom-hooks","hook-utilities","typescript-hooks"],"author":{"name":"Jared Wray","email":"me@jaredwray.com"},"license":"MIT","_id":"hookified@1.6.0","maintainers":[{"name":"jaredwray","email":"me@jaredwray.com"}],"homepage":"https://github.com/jaredwray/hookified#readme","bugs":{"url":"https://github.com/jaredwray/hookified/issues"},"dist":{"shasum":"161315ed4525a21f74d710dd9cec71e73951bed2","tarball":"https://registry.npmjs.org/hookified/-/hookified-1.6.0.tgz","fileCount":11,"integrity":"sha512-se7cpwTA+iA/eY548Bu03JJqBiEZAqU2jnyKdj5B5qurtBg64CZGHTgqCv4Yh7NWu6FGI09W61MCq+NoPj9GXA==","signatures":[{"sig":"MEQCIFhKG/9XaMfuj4GxaQmkAuN2+t1sGWQ6V7/MP9MLJRZNAiBJulTzJm9BczRRY0i5U39iLYn/iesSjWlHVDTPc2FtdA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":109557},"main":"dist/node/index.cjs","type":"module","types":"dist/node/index.d.ts","module":"dist/node/index.js","exports":{".":{"import":"./dist/node/index.js","require":"./dist/node/index.cjs"},"./browser":{"import":"./dist/browser/index.js","default":"./dist/browser/index.global.js"}},"gitHead":"d129019487f7c916b37fa017363378d8551f2c1e","scripts":{"test":"xo --fix && vitest run --coverage","build":"rimraf ./dist && tsup","clean":"rimraf ./dist ./coverage ./site/dist","prepare":"npm run build","test:ci":"xo && vitest run --coverage","website:build":"docula build","website:serve":"docula serve"},"_npmUser":{"name":"jaredwray","email":"me@jaredwray.com"},"repository":{"url":"git+https://github.com/jaredwray/hookified.git","type":"git"},"_npmVersion":"10.8.2","description":"Event and Middleware Hooks","directories":{},"_nodeVersion":"20.18.1","_hasShrinkwrap":false,"devDependencies":{"xo":"^0.60.0","tsup":"^8.3.5","docula":"^0.9.6","rimraf":"^6.0.1","vitest":"^2.1.8","typescript":"^5.7.2","@vitest/coverage-v8":"^2.1.8"},"_npmOperationalInternal":{"tmp":"tmp/hookified_1.6.0_1734890261097_0.5691988703218527","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"hookified","version":"1.7.0","keywords":["hooks","eventemitter","eventemitter3","middleware","events","hooks","event-hooks","hook-system","event-driven","event-emitter","hook-handlers","middleware","emit","event-management","before-after-hooks","event-listeners","custom-hooks","hook-utilities","typescript-hooks"],"author":{"name":"Jared Wray","email":"me@jaredwray.com"},"license":"MIT","_id":"hookified@1.7.0","maintainers":[{"name":"jaredwray","email":"me@jaredwray.com"}],"homepage":"https://github.com/jaredwray/hookified#readme","bugs":{"url":"https://github.com/jaredwray/hookified/issues"},"dist":{"shasum":"d1eb2a1d099fd4eeb3c43e5f75f3fe2ae82aae13","tarball":"https://registry.npmjs.org/hookified/-/hookified-1.7.0.tgz","fileCount":11,"integrity":"sha512-XQdMjqC1AyeOzfs+17cnIk7Wdfu1hh2JtcyNfBf5u9jHrT3iZUlGHxLTntFBuk5lwkqJ6l3+daeQdHK5yByHVA==","signatures":[{"sig":"MEUCIC4ZONHd/hbgHfb070K6SLjUbX5xJdZxFYlMhC6dMTBjAiEA1Jt/ir0u/+gCyzI438qnZPUQVubkXeU8lTrA1WMuc/o=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":115213},"main":"dist/node/index.cjs","type":"module","types":"dist/node/index.d.ts","module":"dist/node/index.js","exports":{".":{"import":"./dist/node/index.js","require":"./dist/node/index.cjs"},"./browser":{"import":"./dist/browser/index.js","default":"./dist/browser/index.global.js"}},"gitHead":"674764b464185fd5fa69a0b3240d2f16caf3d87c","scripts":{"test":"xo --fix && vitest run --coverage","build":"rimraf ./dist && tsup","clean":"rimraf ./dist ./coverage ./site/dist","prepare":"npm run build","test:ci":"xo && vitest run --coverage","website:build":"docula build","website:serve":"docula serve"},"_npmUser":{"name":"jaredwray","email":"me@jaredwray.com"},"repository":{"url":"git+https://github.com/jaredwray/hookified.git","type":"git"},"_npmVersion":"10.8.2","description":"Event and Middleware Hooks","directories":{},"_nodeVersion":"20.18.1","_hasShrinkwrap":false,"devDependencies":{"xo":"^0.60.0","tsup":"^8.3.5","docula":"^0.9.6","rimraf":"^6.0.1","vitest":"^3.0.2","typescript":"^5.7.3","@vitest/coverage-v8":"^3.0.2"},"_npmOperationalInternal":{"tmp":"tmp/hookified_1.7.0_1737138320301_0.6621646165127408","host":"s3://npm-registry-packages-npm-production"}},"1.7.1":{"name":"hookified","version":"1.7.1","keywords":["hooks","eventemitter","eventemitter3","middleware","events","hooks","event-hooks","hook-system","event-driven","event-emitter","hook-handlers","middleware","emit","event-management","before-after-hooks","event-listeners","custom-hooks","hook-utilities","typescript-hooks"],"author":{"name":"Jared Wray","email":"me@jaredwray.com"},"license":"MIT","_id":"hookified@1.7.1","maintainers":[{"name":"jaredwray","email":"me@jaredwray.com"}],"homepage":"https://github.com/jaredwray/hookified#readme","bugs":{"url":"https://github.com/jaredwray/hookified/issues"},"dist":{"shasum":"b08228173e06e9e8767bae1dffb216b8c6171b41","tarball":"https://registry.npmjs.org/hookified/-/hookified-1.7.1.tgz","fileCount":11,"integrity":"sha512-OXcdHsXeOiD7OJ5zvWj8Oy/6RCdLwntAX+wUrfemNcMGn6sux4xbEHi2QXwqePYhjQ/yvxxq2MvCRirdlHscBw==","signatures":[{"sig":"MEYCIQDULwjx+1oPZ4MPblT5+J4U/lPHrAxHPsaf6RhG0n223AIhAKLbs01FdTlS6k2MlEatIQ9abDgaovKb5UBsDnVroI2X","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":115223},"main":"dist/node/index.cjs","type":"module","types":"dist/node/index.d.ts","module":"dist/node/index.js","exports":{".":{"import":"./dist/node/index.js","require":"./dist/node/index.cjs"},"./browser":{"import":"./dist/browser/index.js","default":"./dist/browser/index.global.js"}},"gitHead":"168280fffadf0e7889a4e5455d3196804fc6b5fa","scripts":{"test":"xo --fix && vitest run --coverage","build":"rimraf ./dist && tsup","clean":"rimraf ./dist ./coverage ./site/dist","prepare":"npm run build","test:ci":"xo && vitest run --coverage","website:build":"docula build","website:serve":"docula serve"},"_npmUser":{"name":"jaredwray","email":"me@jaredwray.com"},"repository":{"url":"git+https://github.com/jaredwray/hookified.git","type":"git"},"_npmVersion":"10.8.2","description":"Event Emitting and Middleware Hooks","directories":{},"_nodeVersion":"20.18.2","_hasShrinkwrap":false,"devDependencies":{"xo":"^0.60.0","tsup":"^8.3.6","docula":"^0.10.0","rimraf":"^6.0.1","vitest":"^3.0.5","typescript":"^5.7.3","@vitest/coverage-v8":"^3.0.5"},"_npmOperationalInternal":{"tmp":"tmp/hookified_1.7.1_1739570599557_0.11437825369127896","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"hookified","version":"1.8.0","keywords":["hooks","eventemitter","eventemitter3","middleware","events","hooks","event-hooks","hook-system","event-driven","event-emitter","hook-handlers","middleware","emit","event-management","before-after-hooks","event-listeners","custom-hooks","hook-utilities","typescript-hooks"],"author":{"name":"Jared Wray","email":"me@jaredwray.com"},"license":"MIT","_id":"hookified@1.8.0","maintainers":[{"name":"jaredwray","email":"me@jaredwray.com"}],"homepage":"https://github.com/jaredwray/hookified#readme","bugs":{"url":"https://github.com/jaredwray/hookified/issues"},"dist":{"shasum":"ad99ceb307265fddffa9411db8dab83594888a21","tarball":"https://registry.npmjs.org/hookified/-/hookified-1.8.0.tgz","fileCount":11,"integrity":"sha512-kQBBQyYk1Q+jq3KQfR3nXsk/fTQzVCBZq05bXJckCRPZoA61dsLCsujWUZxKBqeMasXHKsNyirPx8yzXvhSEEg==","signatures":[{"sig":"MEUCIE69vhfUNXCgT9I2rHmmC108yJuKT+LRQS/qpT5DvPbfAiEA1GciXRtxQXoVPpYL+1T3XDv9lpsp+yqlpzB2M0OQljk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":122353},"main":"dist/node/index.cjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"dist/node/index.d.ts","module":"dist/node/index.js","exports":{".":{"import":"./dist/node/index.js","require":"./dist/node/index.cjs"},"./browser":{"import":"./dist/browser/index.js","default":"./dist/browser/index.global.js"}},"gitHead":"ad9ee3ff066d8ee19be9eafa8158724d4058b1c2","scripts":{"test":"xo --fix && vitest run --coverage","build":"rimraf ./dist && tsup","clean":"rimraf ./dist ./coverage ./site/dist","prepare":"npm run build","test:ci":"xo && vitest run --coverage","website:build":"docula build","website:serve":"docula serve"},"_npmUser":{"name":"jaredwray","email":"me@jaredwray.com"},"repository":{"url":"git+https://github.com/jaredwray/hookified.git","type":"git"},"_npmVersion":"10.8.2","description":"Event Emitting and Middleware Hooks","directories":{},"_nodeVersion":"20.18.3","_hasShrinkwrap":false,"devDependencies":{"xo":"^0.60.0","pino":"^9.6.0","tsup":"^8.4.0","docula":"^0.10.1","rimraf":"^6.0.1","vitest":"^3.0.8","typescript":"^5.8.2","@vitest/coverage-v8":"^3.0.8"},"_npmOperationalInternal":{"tmp":"tmp/hookified_1.8.0_1741881593507_0.6139705842925669","host":"s3://npm-registry-packages-npm-production"}},"1.8.1":{"name":"hookified","version":"1.8.1","keywords":["hooks","eventemitter","eventemitter3","middleware","events","hooks","event-hooks","hook-system","event-driven","event-emitter","hook-handlers","middleware","emit","event-management","before-after-hooks","event-listeners","custom-hooks","hook-utilities","typescript-hooks"],"author":{"name":"Jared Wray","email":"me@jaredwray.com"},"license":"MIT","_id":"hookified@1.8.1","maintainers":[{"name":"jaredwray","email":"me@jaredwray.com"}],"homepage":"https://github.com/jaredwray/hookified#readme","bugs":{"url":"https://github.com/jaredwray/hookified/issues"},"dist":{"shasum":"74a8c97d36e5f8004d230ee2156a607cc84c358c","tarball":"https://registry.npmjs.org/hookified/-/hookified-1.8.1.tgz","fileCount":11,"integrity":"sha512-GrO2l93P8xCWBSTBX9l2BxI78VU/MAAYag+pG8curS3aBGy0++ZlxrQ7PdUOUVMbn5BwkGb6+eRrnf43ipnFEA==","signatures":[{"sig":"MEQCIBYoX7wZg6uOP5jaPFDOQoDZzVGMRzo3Ubd1BF90c02IAiA/y4e32/rljwpj0CkSr0GsanOcEzHOQ1pvzavbXwFx7A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":108468},"main":"dist/node/index.cjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"dist/node/index.d.ts","module":"dist/node/index.js","exports":{".":{"import":"./dist/node/index.js","require":"./dist/node/index.cjs"},"./browser":{"import":"./dist/browser/index.js","default":"./dist/browser/index.global.js"}},"gitHead":"2fa64b2d137617c8dea8e7d221348163184b03d6","scripts":{"test":"xo --fix && vitest run --coverage","build":"rimraf ./dist && tsup","clean":"rimraf ./dist ./coverage ./site/dist","prepare":"npm run build","test:ci":"xo && vitest run --coverage","benchmark":"pnpm benchmark:hooks && pnpm benchmark:emit","website:build":"docula build","website:serve":"docula serve","benchmark:emit":"pnpm tsx benchmark/emit.ts","benchmark:hooks":"pnpm tsx benchmark/hook.ts"},"_npmUser":{"name":"jaredwray","email":"me@jaredwray.com"},"repository":{"url":"git+https://github.com/jaredwray/hookified.git","type":"git"},"_npmVersion":"10.8.2","description":"Event Emitting and Middleware Hooks","directories":{},"_nodeVersion":"20.18.3","_hasShrinkwrap":false,"devDependencies":{"xo":"^0.60.0","tsx":"^4.19.3","pino":"^9.6.0","tsup":"^8.4.0","docula":"^0.10.1","rimraf":"^6.0.1","vitest":"^3.0.8","emittery":"^1.1.0","hookable":"^5.5.3","tinybench":"^3.1.1","typescript":"^5.8.2","eventemitter3":"^5.0.1","@vitest/coverage-v8":"^3.0.8","@monstermann/tinybench-pretty-printer":"^0.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hookified_1.8.1_1741911797696_0.2541659577278301","host":"s3://npm-registry-packages-npm-production"}},"1.8.2":{"name":"hookified","version":"1.8.2","keywords":["hooks","eventemitter","eventemitter3","middleware","events","hooks","event-hooks","hook-system","event-driven","event-emitter","hook-handlers","middleware","emit","event-management","before-after-hooks","event-listeners","custom-hooks","hook-utilities","typescript-hooks"],"author":{"name":"Jared Wray","email":"me@jaredwray.com"},"license":"MIT","_id":"hookified@1.8.2","maintainers":[{"name":"jaredwray","email":"me@jaredwray.com"}],"homepage":"https://github.com/jaredwray/hookified#readme","bugs":{"url":"https://github.com/jaredwray/hookified/issues"},"dist":{"shasum":"b365a89dfce3da43e790673a6a97d3b896ae5fa7","tarball":"https://registry.npmjs.org/hookified/-/hookified-1.8.2.tgz","fileCount":11,"integrity":"sha512-5nZbBNP44sFCDjSoB//0N7m508APCgbQ4mGGo1KJGBYyCKNHfry1Pvd0JVHZIxjdnqn8nFRBAN/eFB6Rk/4w5w==","signatures":[{"sig":"MEYCIQDISUkLl+pwDrPPmsTFiJzxcnVLJrEYmV7FJWPfzYotSQIhAL7lnaEWUhOgMNNmNWnDHTW7Y23UpL+0ohtqiyK/Vk8T","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":108637},"main":"dist/node/index.cjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"dist/node/index.d.ts","module":"dist/node/index.js","exports":{".":{"import":"./dist/node/index.js","require":"./dist/node/index.cjs"},"./browser":{"import":"./dist/browser/index.js","default":"./dist/browser/index.global.js"}},"gitHead":"4df97112e8e660722968934cc8d4cb059cdb9fb2","scripts":{"test":"xo --fix && vitest run --coverage","build":"rimraf ./dist && tsup","clean":"rimraf ./dist ./coverage ./site/dist","prepare":"pnpm build","test:ci":"xo && vitest run --coverage","benchmark":"pnpm benchmark:hooks && pnpm benchmark:emit","website:build":"docula build","website:serve":"docula serve","benchmark:emit":"pnpm tsx benchmark/emit.ts","benchmark:hooks":"pnpm tsx benchmark/hook.ts"},"_npmUser":{"name":"jaredwray","email":"me@jaredwray.com"},"repository":{"url":"git+https://github.com/jaredwray/hookified.git","type":"git"},"_npmVersion":"10.8.2","description":"Event Emitting and Middleware Hooks","directories":{},"_nodeVersion":"20.19.0","_hasShrinkwrap":false,"devDependencies":{"xo":"^0.60.0","tsx":"^4.19.3","pino":"^9.6.0","tsup":"^8.4.0","docula":"^0.11.0","rimraf":"^6.0.1","vitest":"^3.1.1","emittery":"^1.1.0","hookable":"^5.5.3","tinybench":"^4.0.1","typescript":"^5.8.3","eventemitter3":"^5.0.1","@vitest/coverage-v8":"^3.1.1","@monstermann/tinybench-pretty-printer":"^0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/hookified_1.8.2_1744226182603_0.26296648745391504","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"hookified","version":"1.9.0","keywords":["hooks","eventemitter","eventemitter3","middleware","events","hooks","event-hooks","hook-system","event-driven","event-emitter","hook-handlers","middleware","emit","event-management","before-after-hooks","event-listeners","custom-hooks","hook-utilities","typescript-hooks"],"author":{"name":"Jared Wray","email":"me@jaredwray.com"},"license":"MIT","_id":"hookified@1.9.0","maintainers":[{"name":"jaredwray","email":"me@jaredwray.com"}],"homepage":"https://github.com/jaredwray/hookified#readme","bugs":{"url":"https://github.com/jaredwray/hookified/issues"},"dist":{"shasum":"271211f61c63b3a68a8ead9d9fddd72b5806c004","tarball":"https://registry.npmjs.org/hookified/-/hookified-1.9.0.tgz","fileCount":11,"integrity":"sha512-2yEEGqphImtKIe1NXWEhu6yD3hlFR4Mxk4Mtp3XEyScpSt4pQ4ymmXA1zzxZpj99QkFK+nN0nzjeb2+RUi/6CQ==","signatures":[{"sig":"MEQCIDqJ5gwhTtttYHl1VWDC8DCQYWjrlMpJzTniW/NDKQc8AiAqv3Pv0fJkA3VNnEJuOguJ/63ZJGx91saIsR2oMh4c6g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":113174},"main":"dist/node/index.cjs","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"dist/node/index.d.ts","module":"dist/node/index.js","exports":{".":{"import":"./dist/node/index.js","require":"./dist/node/index.cjs"},"./browser":{"import":"./dist/browser/index.js","default":"./dist/browser/index.global.js"}},"gitHead":"c64dd68774a4631a82e6504307b89c92472b64ed","scripts":{"test":"xo --fix && vitest run --coverage","build":"rimraf ./dist && tsup","clean":"rimraf ./dist ./coverage ./site/dist","prepare":"pnpm build","test:ci":"xo && vitest run --coverage","benchmark":"pnpm benchmark:hooks && pnpm benchmark:emit","website:build":"docula build","website:serve":"docula serve","benchmark:emit":"pnpm tsx benchmark/emit.ts","benchmark:hooks":"pnpm tsx benchmark/hook.ts"},"_npmUser":{"name":"jaredwray","email":"me@jaredwray.com"},"repository":{"url":"git+https://github.com/jaredwray/hookified.git","type":"git"},"_npmVersion":"10.8.2","description":"Event Emitting and Middleware Hooks","directories":{},"_nodeVersion":"20.19.1","_hasShrinkwrap":false,"devDependencies":{"xo":"^0.60.0","tsx":"^4.19.4","pino":"^9.6.0","tsup":"^8.4.0","docula":"^0.11.1","rimraf":"^6.0.1","vitest":"^3.1.3","emittery":"^1.1.0","hookable":"^5.5.3","tinybench":"^4.0.1","typescript":"^5.8.3","eventemitter3":"^5.0.1","@vitest/coverage-v8":"^3.1.3","@monstermann/tinybench-pretty-printer":"^0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/hookified_1.9.0_1746555807569_0.7111438314336029","host":"s3://npm-registry-packages-npm-production"}},"1.9.1":{"name":"hookified","version":"1.9.1","keywords":["hooks","eventemitter","eventemitter3","middleware","events","hooks","event-hooks","hook-system","event-driven","event-emitter","hook-handlers","middleware","emit","event-management","before-after-hooks","event-listeners","custom-hooks","hook-utilities","typescript-hooks"],"author":{"name":"Jared Wray","email":"me@jaredwray.com"},"license":"MIT","_id":"hookified@1.9.1","maintainers":[{"name":"jaredwray","email":"me@jaredwray.com"}],"homepage":"https://github.com/jaredwray/hookified#readme","bugs":{"url":"https://github.com/jaredwray/hookified/issues"},"dist":{"shasum":"d30cb77590672a05029b7ea9adf25b71c406121d","tarball":"https://registry.npmjs.org/hookified/-/hookified-1.9.1.tgz","fileCount":11,"integrity":"sha512-u3pxtGhKjcSXnGm1CX6aXS9xew535j3lkOCegbA6jdyh0BaAjTbXI4aslKstCr6zUNtoCxFGFKwjbSHdGrMB8g==","signatures":[{"sig":"MEYCIQD6IGqNqTnnaTFH4NCj2zLAjn3GnKygbR/AKOBlZurOYwIhAN03OxYmp3JK8ZlsWY6BZxlUPNrC95H4ORS9qc5VAMXJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":113572},"main":"dist/node/index.cjs","pnpm":{"onlyBuiltDependencies":["esbuild","unrs-resolver"]},"type":"module","types":"dist/node/index.d.ts","module":"dist/node/index.js","exports":{".":{"import":"./dist/node/index.js","require":"./dist/node/index.cjs"},"./browser":{"import":"./dist/browser/index.js","default":"./dist/browser/index.global.js"}},"gitHead":"08cba1668a5d1247b5aef59afecd51b47f57cf5d","scripts":{"test":"xo --fix && vitest run --coverage","build":"rimraf ./dist && tsup","clean":"rimraf ./dist ./coverage ./site/dist","prepare":"pnpm build","test:ci":"xo && vitest run --coverage","benchmark":"pnpm benchmark:hooks && pnpm benchmark:emit","website:build":"docula build","website:serve":"docula serve","benchmark:emit":"pnpm tsx benchmark/emit.ts","benchmark:hooks":"pnpm tsx benchmark/hook.ts"},"_npmUser":{"name":"jaredwray","email":"me@jaredwray.com"},"repository":{"url":"git+https://github.com/jaredwray/hookified.git","type":"git"},"_npmVersion":"10.9.2","description":"Event Emitting and Middleware Hooks","directories":{},"_nodeVersion":"22.16.0","_hasShrinkwrap":false,"devDependencies":{"xo":"^1.0.5","tsx":"^4.19.4","pino":"^9.7.0","tsup":"^8.5.0","docula":"^0.12.2","rimraf":"^6.0.1","vitest":"^3.1.4","emittery":"^1.1.0","hookable":"^5.5.3","tinybench":"^4.0.1","typescript":"^5.8.3","@types/node":"^22.15.29","eventemitter3":"^5.0.1","@vitest/coverage-v8":"^3.1.4","@monstermann/tinybench-pretty-printer":"^0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/hookified_1.9.1_1748861933852_0.8320004029506838","host":"s3://npm-registry-packages-npm-production"}},"1.10.0":{"name":"hookified","version":"1.10.0","keywords":["hooks","eventemitter","eventemitter3","middleware","events","hooks","event-hooks","hook-system","event-driven","event-emitter","hook-handlers","middleware","emit","event-management","before-after-hooks","event-listeners","custom-hooks","hook-utilities","typescript-hooks"],"author":{"name":"Jared Wray","email":"me@jaredwray.com"},"license":"MIT","_id":"hookified@1.10.0","maintainers":[{"name":"jaredwray","email":"me@jaredwray.com"}],"homepage":"https://github.com/jaredwray/hookified#readme","bugs":{"url":"https://github.com/jaredwray/hookified/issues"},"dist":{"shasum":"ee7d7c83d6dec027aaa2296a8ffeadd84cbd9fd2","tarball":"https://registry.npmjs.org/hookified/-/hookified-1.10.0.tgz","fileCount":11,"integrity":"sha512-dJw0492Iddsj56U1JsSTm9E/0B/29a1AuoSLRAte8vQg/kaTGF3IgjEWT8c8yG4cC10+HisE1x5QAwR0Xwc+DA==","signatures":[{"sig":"MEYCIQC+sIBrGoAGz2iWfdCvnAZiEGOdVTFIPXUSiZaPNP64qAIhAPco/lLMzlNfYfPxJPcPXkv7LNrdhdC5R5K6o2qwmyNd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":116810},"main":"dist/node/index.cjs","pnpm":{"onlyBuiltDependencies":["esbuild","unrs-resolver"]},"type":"module","types":"dist/node/index.d.ts","module":"dist/node/index.js","exports":{".":{"import":"./dist/node/index.js","require":"./dist/node/index.cjs"},"./browser":{"import":"./dist/browser/index.js","default":"./dist/browser/index.global.js"}},"gitHead":"ad2cc95efd9b25b4b34e43e488babf5eb989dfe4","scripts":{"test":"xo --fix && vitest run --coverage","build":"rimraf ./dist && tsup","clean":"rimraf ./dist ./coverage ./site/dist","prepare":"pnpm build","test:ci":"xo && vitest run --coverage","benchmark":"pnpm benchmark:hooks && pnpm benchmark:emit","website:build":"docula build","website:serve":"docula serve","benchmark:emit":"pnpm tsx benchmark/emit.ts","benchmark:hooks":"pnpm tsx benchmark/hook.ts"},"_npmUser":{"name":"jaredwray","actor":{"name":"jaredwray","type":"user","email":"me@jaredwray.com"},"email":"me@jaredwray.com"},"repository":{"url":"git+https://github.com/jaredwray/hookified.git","type":"git"},"_npmVersion":"10.9.2","description":"Event Emitting and Middleware Hooks","directories":{},"_nodeVersion":"22.16.0","_hasShrinkwrap":false,"devDependencies":{"xo":"^1.1.1","tsx":"^4.20.3","pino":"^9.7.0","tsup":"^8.5.0","docula":"^0.13.0","rimraf":"^6.0.1","vitest":"^3.2.4","emittery":"^1.2.0","hookable":"^5.5.3","tinybench":"^4.0.1","typescript":"^5.8.3","@types/node":"^24.0.7","eventemitter3":"^5.0.1","@vitest/coverage-v8":"^3.2.4","@monstermann/tinybench-pretty-printer":"^0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/hookified_1.10.0_1751182949148_0.3385494004176468","host":"s3://npm-registry-packages-npm-production"}},"1.11.0":{"name":"hookified","version":"1.11.0","keywords":["hooks","eventemitter","eventemitter3","middleware","events","hooks","event-hooks","hook-system","event-driven","event-emitter","hook-handlers","middleware","emit","event-management","before-after-hooks","event-listeners","custom-hooks","hook-utilities","typescript-hooks"],"author":{"name":"Jared Wray","email":"me@jaredwray.com"},"license":"MIT","_id":"hookified@1.11.0","maintainers":[{"name":"jaredwray","email":"me@jaredwray.com"}],"homepage":"https://github.com/jaredwray/hookified#readme","bugs":{"url":"https://github.com/jaredwray/hookified/issues"},"dist":{"shasum":"085a8f1e196ffe31905d5122b40a8e547c69e660","tarball":"https://registry.npmjs.org/hookified/-/hookified-1.11.0.tgz","fileCount":11,"integrity":"sha512-aDdIN3GyU5I6wextPplYdfmWCo+aLmjjVbntmX6HLD5RCi/xKsivYEBhnRD+d9224zFf008ZpLMPlWF0ZodYZw==","signatures":[{"sig":"MEUCIQCIW/LxRYMCRKK6lf2JkXsgr0mK5hUya/s6w8YT0HNlPgIgFa0RGqyqAdi0yizyfhv1zBARv6/p1zmVyrEqqygrh3k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":125953},"main":"dist/node/index.cjs","pnpm":{"onlyBuiltDependencies":["esbuild","unrs-resolver"]},"type":"module","types":"dist/node/index.d.ts","module":"dist/node/index.js","exports":{".":{"import":"./dist/node/index.js","require":"./dist/node/index.cjs"},"./browser":{"import":"./dist/browser/index.js","default":"./dist/browser/index.global.js"}},"gitHead":"ca134890d59c470a75279e189c8424a7e551e141","scripts":{"test":"xo --fix && vitest run --coverage","build":"rimraf ./dist && tsup","clean":"rimraf ./dist ./coverage ./site/dist","prepare":"pnpm build","test:ci":"xo && vitest run --coverage","benchmark":"pnpm benchmark:hooks && pnpm benchmark:emit","website:build":"docula build","website:serve":"docula serve","benchmark:emit":"pnpm tsx benchmark/emit.ts","benchmark:hooks":"pnpm tsx benchmark/hook.ts"},"_npmUser":{"name":"jaredwray","email":"me@jaredwray.com"},"repository":{"url":"git+https://github.com/jaredwray/hookified.git","type":"git"},"_npmVersion":"10.9.2","description":"Event Emitting and Middleware Hooks","directories":{},"_nodeVersion":"22.17.1","_hasShrinkwrap":false,"devDependencies":{"xo":"^1.2.1","tsx":"^4.20.3","pino":"^9.7.0","tsup":"^8.5.0","docula":"^0.13.1","rimraf":"^6.0.1","vitest":"^3.2.4","emittery":"^1.2.0","hookable":"^5.5.3","tinybench":"^4.0.1","typescript":"^5.8.3","@types/node":"^24.1.0","eventemitter3":"^5.0.1","@vitest/coverage-v8":"^3.2.4","@monstermann/tinybench-pretty-printer":"^0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/hookified_1.11.0_1753549859857_0.12770170962180272","host":"s3://npm-registry-packages-npm-production"}},"1.12.0":{"name":"hookified","version":"1.12.0","keywords":["hooks","eventemitter","eventemitter3","middleware","events","hooks","event-hooks","hook-system","event-driven","event-emitter","hook-handlers","middleware","emit","event-management","before-after-hooks","event-listeners","custom-hooks","hook-utilities","typescript-hooks"],"author":{"name":"Jared Wray","email":"me@jaredwray.com"},"license":"MIT","_id":"hookified@1.12.0","maintainers":[{"name":"jaredwray","email":"me@jaredwray.com"}],"homepage":"https://github.com/jaredwray/hookified#readme","bugs":{"url":"https://github.com/jaredwray/hookified/issues"},"dist":{"shasum":"eb4097ed1459211eef47fe85a8b3382c5f633996","tarball":"https://registry.npmjs.org/hookified/-/hookified-1.12.0.tgz","fileCount":11,"integrity":"sha512-hMr1Y9TCLshScrBbV2QxJ9BROddxZ12MX9KsCtuGGy/3SmmN5H1PllKerrVlSotur9dlE8hmUKAOSa3WDzsZmQ==","signatures":[{"sig":"MEQCIBww6kHLHm0eSExLx/5pwnroHyi1nP+Bo5ajhVtQ1oZxAiAw3wetS7tY0W/EUQNllLx2eDt6Bb4qjdkESG4tL/5L+w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130720},"main":"dist/node/index.cjs","pnpm":{"onlyBuiltDependencies":["esbuild","unrs-resolver"]},"type":"module","types":"dist/node/index.d.ts","module":"dist/node/index.js","exports":{".":{"import":"./dist/node/index.js","require":"./dist/node/index.cjs"},"./browser":{"import":"./dist/browser/index.js","default":"./dist/browser/index.global.js"}},"gitHead":"e560c0e4246c3828d93a22422da28db21ddd23a8","scripts":{"lint":"biome check --write","test":"pnpm lint && vitest run --coverage","build":"rimraf ./dist && tsup","clean":"rimraf ./dist ./coverage ./site/dist","prepare":"pnpm build","test:ci":"biome check && vitest run --coverage","benchmark":"pnpm benchmark:hooks && pnpm benchmark:emit","website:build":"docula build","website:serve":"docula serve","benchmark:emit":"pnpm tsx benchmark/emit.ts","benchmark:hooks":"pnpm tsx benchmark/hook.ts"},"_npmUser":{"name":"jaredwray","email":"me@jaredwray.com"},"repository":{"url":"git+https://github.com/jaredwray/hookified.git","type":"git"},"_npmVersion":"10.9.3","description":"Event Emitting and Middleware Hooks","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","pino":"^9.9.0","tsup":"^8.5.0","docula":"^0.20.0","rimraf":"^6.0.1","vitest":"^3.2.4","emittery":"^1.2.0","hookable":"^5.5.3","tinybench":"^5.0.0","typescript":"^5.9.2","@types/node":"^24.3.0","eventemitter3":"^5.0.1","@biomejs/biome":"^2.2.0","@vitest/coverage-v8":"^3.2.4","@monstermann/tinybench-pretty-printer":"^0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/hookified_1.12.0_1755878570295_0.7263374979977604","host":"s3://npm-registry-packages-npm-production"}},"1.12.1":{"name":"hookified","version":"1.12.1","keywords":["hooks","eventemitter","eventemitter3","middleware","events","hooks","event-hooks","hook-system","event-driven","event-emitter","hook-handlers","middleware","emit","event-management","before-after-hooks","event-listeners","custom-hooks","hook-utilities","typescript-hooks"],"author":{"name":"Jared Wray","email":"me@jaredwray.com"},"license":"MIT","_id":"hookified@1.12.1","maintainers":[{"name":"jaredwray","email":"me@jaredwray.com"}],"homepage":"https://github.com/jaredwray/hookified#readme","bugs":{"url":"https://github.com/jaredwray/hookified/issues"},"dist":{"shasum":"b0de0116ca346fd6c4e55db901f52d5cd728ef00","tarball":"https://registry.npmjs.org/hookified/-/hookified-1.12.1.tgz","fileCount":11,"integrity":"sha512-xnKGl+iMIlhrZmGHB729MqlmPoWBznctSQTYCpFKqNsCgimJQmithcW0xSQMMFzYnV2iKUh25alswn6epgxS0Q==","signatures":[{"sig":"MEUCIHDaybNaeCDiQVWiIh4I6044WlS4VIUxaiEBKKZZKEDNAiEA2kCZ3Mwj6MP+93Vao6pOyoj5Prytt8ajc5GkmCo30DI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":161382},"main":"dist/node/index.cjs","pnpm":{"onlyBuiltDependencies":["unrs-resolver"]},"type":"module","types":"dist/node/index.d.ts","module":"dist/node/index.js","exports":{".":{"import":"./dist/node/index.js","require":"./dist/node/index.cjs"},"./browser":{"import":"./dist/browser/index.js","default":"./dist/browser/index.global.js"}},"gitHead":"3b6bc58d50c6807f027d9e908669dcc879b9854e","scripts":{"lint":"biome check --write --error-on-warnings","test":"pnpm lint && vitest run --coverage","build":"rimraf ./dist && tsup","clean":"rimraf ./dist ./coverage ./site/dist","prepare":"pnpm build","test:ci":"biome check --error-on-warnings && vitest run --coverage","benchmark":"pnpm benchmark:hooks && pnpm benchmark:emit","website:build":"docula build","website:serve":"docula serve","benchmark:emit":"pnpm tsx benchmark/emit.ts","benchmark:hooks":"pnpm tsx benchmark/hook.ts"},"_npmUser":{"name":"jaredwray","email":"me@jaredwray.com"},"repository":{"url":"git+https://github.com/jaredwray/hookified.git","type":"git"},"_npmVersion":"10.9.3","description":"Event Emitting and Middleware Hooks","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.5","pino":"^9.10.0","tsup":"^8.5.0","docula":"^0.20.0","rimraf":"^6.0.1","vitest":"^3.2.4","emittery":"^1.2.0","hookable":"^5.5.3","tinybench":"^5.0.1","typescript":"^5.9.2","@types/node":"^24.5.2","eventemitter3":"^5.0.1","@biomejs/biome":"^2.2.4","@vitest/coverage-v8":"^3.2.4","@monstermann/tinybench-pretty-printer":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hookified_1.12.1_1758210569295_0.528716611218732","host":"s3://npm-registry-packages-npm-production"}},"1.12.2":{"name":"hookified","version":"1.12.2","keywords":["hooks","eventemitter","eventemitter3","middleware","events","hooks","event-hooks","hook-system","event-driven","event-emitter","hook-handlers","middleware","emit","event-management","before-after-hooks","event-listeners","custom-hooks","hook-utilities","typescript-hooks"],"author":{"name":"Jared Wray","email":"me@jaredwray.com"},"license":"MIT","_id":"hookified@1.12.2","maintainers":[{"name":"jaredwray","email":"me@jaredwray.com"}],"homepage":"https://github.com/jaredwray/hookified#readme","bugs":{"url":"https://github.com/jaredwray/hookified/issues"},"dist":{"shasum":"7002b17a98f6d594648df088f8c48a292eb241f7","tarball":"https://registry.npmjs.org/hookified/-/hookified-1.12.2.tgz","fileCount":11,"integrity":"sha512-aokUX1VdTpI0DUsndvW+OiwmBpKCu/NgRsSSkuSY0zq8PY6Q6a+lmOfAFDXAAOtBqJELvcWY9L1EVtzjbQcMdg==","signatures":[{"sig":"MEQCIEsqGlhJ0KmRIq306EtwPJxf+oQKlQfh6qY2pKEs4L4BAiAaa9HyW9utNSqeMQSXgHo1eO/9Mkz7dPzs4pFj9HLtwQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":214662},"main":"dist/node/index.cjs","pnpm":{"onlyBuiltDependencies":["unrs-resolver"]},"type":"module","types":"dist/node/index.d.ts","module":"dist/node/index.js","exports":{".":{"import":"./dist/node/index.js","require":"./dist/node/index.cjs"},"./browser":{"import":"./dist/browser/index.js","default":"./dist/browser/index.global.js"}},"gitHead":"7105ff3a20e7c6639bfa344925debf15ff510877","scripts":{"lint":"biome check --write --error-on-warnings","test":"pnpm lint && vitest run --coverage","build":"rimraf ./dist && tsup","clean":"rimraf ./dist ./coverage ./site/dist","prepare":"pnpm build","test:ci":"biome check --error-on-warnings && vitest run --coverage","benchmark":"pnpm benchmark:hooks && pnpm benchmark:emit","website:build":"docula build","website:serve":"docula serve","benchmark:emit":"pnpm tsx benchmark/emit.ts","benchmark:hooks":"pnpm tsx benchmark/hook.ts"},"_npmUser":{"name":"jaredwray","email":"me@jaredwray.com"},"repository":{"url":"git+https://github.com/jaredwray/hookified.git","type":"git"},"_npmVersion":"10.9.3","description":"Event Emitting and Middleware Hooks","directories":{},"_nodeVersion":"22.20.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","pino":"^10.0.0","tsup":"^8.5.0","docula":"^0.30.0","rimraf":"^6.0.1","vitest":"^3.2.4","emittery":"^1.2.0","hookable":"^5.5.3","tinybench":"^5.0.1","typescript":"^5.9.3","@types/node":"^24.7.2","eventemitter3":"^5.0.1","@biomejs/biome":"^2.2.6","@vitest/coverage-v8":"^3.2.4","@monstermann/tinybench-pretty-printer":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hookified_1.12.2_1760550152310_0.6257597172416958","host":"s3://npm-registry-packages-npm-production"}},"1.13.0":{"name":"hookified","version":"1.13.0","keywords":["hooks","eventemitter","eventemitter3","middleware","events","hooks","event-hooks","hook-system","event-driven","event-emitter","hook-handlers","middleware","emit","event-management","before-after-hooks","event-listeners","custom-hooks","hook-utilities","typescript-hooks"],"author":{"name":"Jared Wray","email":"me@jaredwray.com"},"license":"MIT","_id":"hookified@1.13.0","maintainers":[{"name":"jaredwray","email":"me@jaredwray.com"}],"homepage":"https://github.com/jaredwray/hookified#readme","bugs":{"url":"https://github.com/jaredwray/hookified/issues"},"dist":{"shasum":"fa7f8ab04897d77eecba52f35fe29e3d1f97dbbf","tarball":"https://registry.npmjs.org/hookified/-/hookified-1.13.0.tgz","fileCount":11,"integrity":"sha512-6sPYUY8olshgM/1LDNW4QZQN0IqgKhtl/1C8koNZBJrKLBk3AZl6chQtNwpNztvfiApHMEwMHek5rv993PRbWw==","signatures":[{"sig":"MEUCIQCTgLsr2gF6OaYBdRwyvEpWplq5n0jMh+SCILoaVZ+LagIgAzVC2WJ3wdMTjMrE5/lZ5429GHlmgUDtaOkATgk7M2o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":231785},"main":"dist/node/index.cjs","pnpm":{"onlyBuiltDependencies":["unrs-resolver"]},"type":"module","types":"dist/node/index.d.ts","module":"dist/node/index.js","exports":{".":{"import":"./dist/node/index.js","require":"./dist/node/index.cjs"},"./browser":{"import":"./dist/browser/index.js","default":"./dist/browser/index.global.js"}},"gitHead":"fea36ca5bd0aeceeb56b0a85d4148a9c8f06bef2","scripts":{"lint":"biome check --write --error-on-warnings","test":"pnpm lint && vitest run --coverage","build":"rimraf ./dist && tsup","clean":"rimraf ./dist ./coverage ./site/dist","prepare":"pnpm build","test:ci":"biome check --error-on-warnings && vitest run --coverage","benchmark":"pnpm benchmark:hooks && pnpm benchmark:emit","website:build":"docula build","website:serve":"docula serve","benchmark:emit":"pnpm tsx benchmark/emit.ts","benchmark:hooks":"pnpm tsx benchmark/hook.ts"},"_npmUser":{"name":"jaredwray","email":"me@jaredwray.com"},"repository":{"url":"git+https://github.com/jaredwray/hookified.git","type":"git"},"_npmVersion":"10.9.4","description":"Event Emitting and Middleware Hooks","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","pino":"^10.1.0","tsup":"^8.5.0","docula":"^0.31.0","rimraf":"^6.1.0","vitest":"^4.0.8","emittery":"^1.2.0","hookable":"^5.5.3","tinybench":"^5.1.0","typescript":"^5.9.3","@types/node":"^24.10.0","eventemitter3":"^5.0.1","@biomejs/biome":"^2.3.5","@vitest/coverage-v8":"^4.0.8","@monstermann/tinybench-pretty-printer":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hookified_1.13.0_1762893725902_0.7923983919774353","host":"s3://npm-registry-packages-npm-production"}},"1.14.0":{"name":"hookified","version":"1.14.0","keywords":["hooks","eventemitter","eventemitter3","middleware","events","hooks","event-hooks","hook-system","event-driven","event-emitter","hook-handlers","middleware","emit","event-management","before-after-hooks","event-listeners","custom-hooks","hook-utilities","typescript-hooks"],"author":{"name":"Jared Wray","email":"me@jaredwray.com"},"license":"MIT","_id":"hookified@1.14.0","maintainers":[{"name":"jaredwray","email":"me@jaredwray.com"}],"homepage":"https://github.com/jaredwray/hookified#readme","bugs":{"url":"https://github.com/jaredwray/hookified/issues"},"dist":{"shasum":"815ca3b9f3e77c782f583bf3974e966df7a9fd7b","tarball":"https://registry.npmjs.org/hookified/-/hookified-1.14.0.tgz","fileCount":11,"integrity":"sha512-pi1ynXIMFx/uIIwpWJ/5CEtOHLGtnUB0WhGeeYT+fKcQ+WCQbm3/rrkAXnpfph++PgepNqPdTC2WTj8A6k6zoQ==","signatures":[{"sig":"MEYCIQCaMa7e6Pbv7IwdBHFMG2DccQwnRdmZow6ECbTaQ/0XCgIhAP6XQqgeuk2hiRjsWZUHeFOeBec7zNzI/ThnauQRyaox","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":229839},"main":"./dist/node/index.js","type":"module","types":"./dist/node/index.d.ts","module":"./dist/node/index.js","exports":{".":{"import":{"types":"./dist/node/index.d.ts","default":"./dist/node/index.js"},"default":"./dist/node/index.js","require":{"types":"./dist/node/index.d.cts","default":"./dist/node/index.cjs"}},"./browser":{"import":"./dist/browser/index.js","default":"./dist/browser/index.global.js"}},"gitHead":"f3e0d9f3c5b1790e2f5073308bc078bfd61fdcbf","scripts":{"lint":"biome check --write --error-on-warnings","test":"pnpm lint && vitest run --coverage","build":"rimraf ./dist && tsup","clean":"rimraf ./dist ./coverage ./site/dist","prepare":"pnpm build","test:ci":"biome check --error-on-warnings && vitest run --coverage","benchmark":"pnpm benchmark:hooks && pnpm benchmark:emit","website:build":"docula build","website:serve":"docula serve","benchmark:emit":"pnpm tsx benchmark/emit.ts","benchmark:hooks":"pnpm tsx benchmark/hook.ts"},"_npmUser":{"name":"jaredwray","email":"me@jaredwray.com"},"repository":{"url":"git+https://github.com/jaredwray/hookified.git","type":"git"},"_npmVersion":"10.9.4","description":"Event Emitting and Middleware Hooks","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","pino":"^10.1.0","tsup":"^8.5.1","docula":"^0.31.1","rimraf":"^6.1.2","vitest":"^4.0.15","emittery":"^1.2.0","hookable":"^5.5.3","tinybench":"^6.0.0","typescript":"^5.9.3","@types/node":"^24.10.1","eventemitter3":"^5.0.1","@biomejs/biome":"^2.3.8","@vitest/coverage-v8":"^4.0.15","@monstermann/tinybench-pretty-printer":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/hookified_1.14.0_1765227962504_0.7163536802917139","host":"s3://npm-registry-packages-npm-production"}},"1.15.0":{"name":"hookified","version":"1.15.0","description":"Event Emitting and Middleware Hooks","type":"module","main":"./dist/node/index.js","module":"./dist/node/index.js","types":"./dist/node/index.d.ts","exports":{".":{"import":{"types":"./dist/node/index.d.ts","default":"./dist/node/index.js"},"require":{"types":"./dist/node/index.d.cts","default":"./dist/node/index.cjs"},"default":"./dist/node/index.js"},"./browser":{"import":"./dist/browser/index.js","default":"./dist/browser/index.global.js"}},"scripts":{"lint":"biome check --write --error-on-warnings","test":"pnpm lint && vitest run --coverage","test:ci":"biome check --error-on-warnings && vitest run --coverage","clean":"rimraf ./dist ./coverage ./site/dist","build":"rimraf ./dist && tsup","benchmark":"pnpm benchmark:hooks && pnpm benchmark:emit","benchmark:hooks":"pnpm tsx benchmark/hook.ts","benchmark:emit":"pnpm tsx benchmark/emit.ts","website:build":"docula build","website:serve":"docula serve","prepare":"pnpm build"},"keywords":["hooks","eventemitter","eventemitter3","middleware","events","hooks","event-hooks","hook-system","event-driven","event-emitter","hook-handlers","middleware","emit","event-management","before-after-hooks","event-listeners","custom-hooks","hook-utilities","typescript-hooks"],"repository":{"type":"git","url":"git+https://github.com/jaredwray/hookified.git"},"author":{"name":"Jared Wray","email":"me@jaredwray.com"},"license":"MIT","bugs":{"url":"https://github.com/jaredwray/hookified/issues"},"homepage":"https://github.com/jaredwray/hookified#readme","devDependencies":{"@biomejs/biome":"^2.3.8","@monstermann/tinybench-pretty-printer":"^0.3.0","@types/node":"^25.0.3","@vitest/coverage-v8":"^4.0.15","docula":"^0.31.1","emittery":"^1.2.0","eventemitter3":"^5.0.1","hookable":"^6.0.1","pino":"^10.1.0","rimraf":"^6.1.2","tinybench":"^6.0.0","tsup":"^8.5.1","tsx":"^4.21.0","typescript":"^5.9.3","vitest":"^4.0.15"},"_id":"hookified@1.15.0","gitHead":"8e555b76ff5d1bfef5caea5720c951cf1caf45a9","_nodeVersion":"22.21.1","_npmVersion":"10.9.4","dist":{"integrity":"sha512-51w+ZZGt7Zw5q7rM3nC4t3aLn/xvKDETsXqMczndvwyVQhAHfUmUuFBRFcos8Iyebtk7OAE9dL26wFNzZVVOkw==","shasum":"d51db9fe134b8bd19c1aa88f9fcd7878995e4b66","tarball":"https://registry.npmjs.org/hookified/-/hookified-1.15.0.tgz","fileCount":11,"unpackedSize":239450,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD9C9oekQEh34c8Ij8t4LH0bYthzVV9mMgQ679GA20vHAIgFHOd2UGa9XGRw16jjsxYuFaxGraKxTAUBQm04JgpH4M="}]},"_npmUser":{"name":"jaredwray","email":"me@jaredwray.com"},"directories":{},"maintainers":[{"name":"jaredwray","email":"me@jaredwray.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/hookified_1.15.0_1767588640230_0.9574574898920485"},"_hasShrinkwrap":false}},"time":{"created":"2024-09-03T15:36:32.105Z","modified":"2026-01-05T04:50:40.570Z","0.5.0":"2024-09-03T15:36:32.307Z","0.5.1":"2024-09-03T16:03:53.747Z","0.6.0":"2024-09-03T19:45:09.274Z","0.7.0":"2024-09-06T16:07:17.765Z","0.7.1":"2024-09-06T19:47:47.049Z","1.0.0":"2024-09-17T19:13:04.693Z","1.1.0":"2024-09-23T18:26:06.615Z","1.2.0":"2024-10-02T15:21:30.567Z","1.2.1":"2024-10-13T21:57:10.899Z","1.3.0":"2024-10-14T20:04:11.089Z","1.4.0":"2024-10-15T20:56:43.776Z","1.5.0":"2024-10-29T19:34:29.510Z","1.5.1":"2024-11-25T16:38:59.207Z","1.6.0":"2024-12-22T17:57:41.285Z","1.7.0":"2025-01-17T18:25:20.523Z","1.7.1":"2025-02-14T22:03:19.752Z","1.8.0":"2025-03-13T15:59:53.692Z","1.8.1":"2025-03-14T00:23:17.892Z","1.8.2":"2025-04-09T19:16:22.792Z","1.9.0":"2025-05-06T18:23:27.753Z","1.9.1":"2025-06-02T10:58:54.127Z","1.10.0":"2025-06-29T07:42:29.336Z","1.11.0":"2025-07-26T17:11:00.036Z","1.12.0":"2025-08-22T16:02:50.489Z","1.12.1":"2025-09-18T15:49:29.522Z","1.12.2":"2025-10-15T17:42:32.520Z","1.13.0":"2025-11-11T20:42:06.085Z","1.14.0":"2025-12-08T21:06:02.678Z","1.15.0":"2026-01-05T04:50:40.375Z"},"bugs":{"url":"https://github.com/jaredwray/hookified/issues"},"author":{"name":"Jared Wray","email":"me@jaredwray.com"},"license":"MIT","homepage":"https://github.com/jaredwray/hookified#readme","keywords":["hooks","eventemitter","eventemitter3","middleware","events","hooks","event-hooks","hook-system","event-driven","event-emitter","hook-handlers","middleware","emit","event-management","before-after-hooks","event-listeners","custom-hooks","hook-utilities","typescript-hooks"],"repository":{"type":"git","url":"git+https://github.com/jaredwray/hookified.git"},"description":"Event Emitting and Middleware Hooks","maintainers":[{"name":"jaredwray","email":"me@jaredwray.com"}],"readme":"![Hookified](site/logo.svg)\n\n# Event Emitting and Middleware Hooks\n\n[![tests](https://github.com/jaredwray/hookified/actions/workflows/tests.yaml/badge.svg)](https://github.com/jaredwray/hookified/actions/workflows/tests.yaml)\n[![GitHub license](https://img.shields.io/github/license/jaredwray/hookified)](https://github.com/jaredwray/hookified/blob/master/LICENSE)\n[![codecov](https://codecov.io/gh/jaredwray/hookified/graph/badge.svg?token=nKkVklTFdA)](https://codecov.io/gh/jaredwray/hookified)\n[![npm](https://img.shields.io/npm/dm/hookified)](https://npmjs.com/package/hookified)\n[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/hookified/badge)](https://www.jsdelivr.com/package/npm/hookified)\n[![npm](https://img.shields.io/npm/v/hookified)](https://npmjs.com/package/hookified)\n\n# Features\n- Simple replacement for EventEmitter\n- Async / Sync Middleware Hooks for Your Methods \n- ESM / CJS with Types and Nodejs 20+\n- Browser Support and Delivered via CDN\n- Ability to throw errors in hooks\n- Ability to pass in a logger (such as Pino) for errors\n- Enforce consistent hook naming conventions with `enforceBeforeAfter`\n- Deprecation warnings for hooks with `deprecatedHooks`\n- Control deprecated hook execution with `allowDeprecated`\n- No package dependencies and only 200KB in size\n- Fast and Efficient with [Benchmarks](#benchmarks)\n- Maintained on a regular basis!\n\n# Table of Contents\n- [Installation](#installation)\n- [Usage](#usage)\n- [Using it in the Browser](#using-it-in-the-browser)\n- [API - Hooks](#api---hooks)\n - [.throwOnHookError](#throwhookerror)\n - [.logger](#logger)\n - [.enforceBeforeAfter](#enforcebeforeafter)\n - [.deprecatedHooks](#deprecatedhooks)\n - [.allowDeprecated](#allowdeprecated)\n - [.onHook(eventName, handler)](#onhookeventname-handler)\n - [.onHookEntry(hookEntry)](#onhookentryhookentry)\n - [.addHook(eventName, handler)](#addhookeventname-handler)\n - [.onHooks(Array)](#onhooksarray)\n - [.onceHook(eventName, handler)](#oncehookeventname-handler)\n - [.prependHook(eventName, handler)](#prependhookeventname-handler)\n - [.prependOnceHook(eventName, handler)](#prependoncehookeventname-handler)\n - [.removeHook(eventName)](#removehookeventname)\n - [.removeHooks(Array)](#removehooksarray)\n - [.hook(eventName, ...args)](#hookeventname-args)\n - [.callHook(eventName, ...args)](#callhookeventname-args)\n - [.beforeHook(eventName, ...args)](#beforehookeventname-args)\n - [.afterHook(eventName, ...args)](#afterhookeventname-args)\n - [.hookSync(eventName, ...args)](#hooksync-eventname-args)\n - [.hooks](#hooks)\n - [.getHooks(eventName)](#gethookseventname)\n - [.clearHooks(eventName)](#clearhookeventname)\n- [API - Events](#api---events)\n - [.throwOnEmitError](#throwonemitterror)\n - [.throwOnEmptyListeners](#throwonemptylisteners)\n - [.on(eventName, handler)](#oneventname-handler)\n - [.off(eventName, handler)](#offeventname-handler)\n - [.emit(eventName, ...args)](#emiteventname-args)\n - [.listeners(eventName)](#listenerseventname)\n - [.removeAllListeners(eventName)](#removealllistenerseventname)\n - [.setMaxListeners(maxListeners: number)](#setmaxlistenersmaxlisteners-number)\n - [.once(eventName, handler)](#oneventname-handler-1)\n - [.prependListener(eventName, handler)](#prependlistenereventname-handler)\n - [.prependOnceListener(eventName, handler)](#prependoncelistenereventname-handler)\n - [.eventNames()](#eventnames)\n - [.listenerCount(eventName?)](#listenercounteventname)\n - [.rawListeners(eventName?)](#rawlistenerseventname)\n- [Logging](#logging)\n- [Benchmarks](#benchmarks)\n- [How to Contribute](#how-to-contribute)\n- [License and Copyright](#license-and-copyright)\n\n# Installation\n```bash\nnpm install hookified --save\n```\n\n# Usage\nThis was built because we constantly wanted hooks and events extended on libraires we are building such as [Keyv](https://keyv.org) and [Cacheable](https://cacheable.org). This is a simple way to add hooks and events to your classes.\n\n```javascript\nimport { Hookified } from 'hookified';\n\nclass MyClass extends Hookified {\n constructor() {\n super();\n }\n\n async myMethodEmittingEvent() {\n this.emit('message', 'Hello World'); //using Emittery\n }\n\n //with hooks you can pass data in and if they are subscribed via onHook they can modify the data\n async myMethodWithHooks() Promise {\n let data = { some: 'data' };\n // do something\n await this.hook('before:myMethod2', data);\n\n return data;\n }\n}\n```\n\nYou can even pass in multiple arguments to the hooks:\n\n```javascript\nimport { Hookified } from 'hookified';\n\nclass MyClass extends Hookified {\n constructor() {\n super();\n }\n\n async myMethodWithHooks() Promise {\n let data = { some: 'data' };\n let data2 = { some: 'data2' };\n // do something\n await this.hook('before:myMethod2', data, data2);\n\n return data;\n }\n}\n```\n\n# Using it in the Browser\n\n```html\n\n```\n\nif you are not using ESM modules, you can use the following:\n\n```html\n\n\n```\n\n# API - Hooks\n\n## .throwOnHookError\n\nIf set to true, errors thrown in hooks will be thrown. If set to false, errors will be only emitted.\n\n```javascript\nimport { Hookified } from 'hookified';\n\nclass MyClass extends Hookified {\n constructor() {\n super({ throwOnHookError: true });\n }\n}\n\nconst myClass = new MyClass();\n\nconsole.log(myClass.throwOnHookError); // true. because it is set in super\n\ntry {\n myClass.onHook('error-event', async () => {\n throw new Error('error');\n });\n\n await myClass.hook('error-event');\n} catch (error) {\n console.log(error.message); // error\n}\n\nmyClass.throwOnHookError = false;\nconsole.log(myClass.throwOnHookError); // false\n```\n\n## .logger\nIf set, errors thrown in hooks will be logged to the logger. If not set, errors will be only emitted.\n\n```javascript\nimport { Hookified } from 'hookified';\nimport pino from 'pino';\n\nconst logger = pino(); // create a logger instance that is compatible with Logger type\n\nclass MyClass extends Hookified {\n constructor() {\n super({ logger });\n }\n\n async myMethodWithHooks() Promise {\n let data = { some: 'data' };\n // do something\n await this.hook('before:myMethod2', data);\n\n return data;\n }\n}\n\nconst myClass = new MyClass();\nmyClass.onHook('before:myMethod2', async () => {\n throw new Error('error');\n});\n\n// when you call before:myMethod2 it will log the error to the logger\nawait myClass.hook('before:myMethod2');\n```\n\n## .enforceBeforeAfter\n\nIf set to true, enforces that all hook names must start with 'before' or 'after'. This is useful for maintaining consistent hook naming conventions in your application. Default is false.\n\n```javascript\nimport { Hookified } from 'hookified';\n\nclass MyClass extends Hookified {\n constructor() {\n super({ enforceBeforeAfter: true });\n }\n}\n\nconst myClass = new MyClass();\n\nconsole.log(myClass.enforceBeforeAfter); // true\n\n// These will work fine\nmyClass.onHook('beforeSave', async () => {\n console.log('Before save hook');\n});\n\nmyClass.onHook('afterSave', async () => {\n console.log('After save hook');\n});\n\nmyClass.onHook('before:validation', async () => {\n console.log('Before validation hook');\n});\n\n// This will throw an error\ntry {\n myClass.onHook('customEvent', async () => {\n console.log('This will not work');\n });\n} catch (error) {\n console.log(error.message); // Hook event \"customEvent\" must start with \"before\" or \"after\" when enforceBeforeAfter is enabled\n}\n\n// You can also change it dynamically\nmyClass.enforceBeforeAfter = false;\nmyClass.onHook('customEvent', async () => {\n console.log('This will work now');\n});\n```\n\nThe validation applies to all hook-related methods:\n- `onHook()`, `addHook()`, `onHookEntry()`, `onHooks()`\n- `prependHook()`, `onceHook()`, `prependOnceHook()`\n- `hook()`, `callHook()`\n- `getHooks()`, `removeHook()`, `removeHooks()`\n\nNote: The `beforeHook()` and `afterHook()` helper methods automatically generate proper hook names and work regardless of the `enforceBeforeAfter` setting.\n\n## .deprecatedHooks\n\nA Map of deprecated hook names to deprecation messages. When a deprecated hook is used, a warning will be emitted via the 'warn' event and logged to the logger (if available). Default is an empty Map.\n\n```javascript\nimport { Hookified } from 'hookified';\n\n// Define deprecated hooks with custom messages\nconst deprecatedHooks = new Map([\n ['oldHook', 'Use newHook instead'],\n ['legacyMethod', 'This hook will be removed in v2.0'],\n ['deprecatedFeature', ''] // Empty message - will just say \"deprecated\"\n]);\n\nclass MyClass extends Hookified {\n constructor() {\n super({ deprecatedHooks });\n }\n}\n\nconst myClass = new MyClass();\n\nconsole.log(myClass.deprecatedHooks); // Map with deprecated hooks\n\n// Listen for deprecation warnings\nmyClass.on('warn', (event) => {\n console.log(`Deprecation warning: ${event.message}`);\n // event.hook contains the hook name\n // event.message contains the full warning message\n});\n\n// Using a deprecated hook will emit warnings\nmyClass.onHook('oldHook', () => {\n console.log('This hook is deprecated');\n});\n// Output: Hook \"oldHook\" is deprecated: Use newHook instead\n\n// Using a deprecated hook with empty message\nmyClass.onHook('deprecatedFeature', () => {\n console.log('This hook is deprecated');\n});\n// Output: Hook \"deprecatedFeature\" is deprecated\n\n// You can also set deprecated hooks dynamically\nmyClass.deprecatedHooks.set('anotherOldHook', 'Please migrate to the new API');\n\n// Works with logger if provided\nimport pino from 'pino';\nconst logger = pino();\n\nconst myClassWithLogger = new Hookified({ \n deprecatedHooks,\n logger \n});\n\n// Deprecation warnings will be logged to logger.warn\n```\n\nThe deprecation warning system applies to all hook-related methods:\n- Registration: `onHook()`, `addHook()`, `onHookEntry()`, `onHooks()`, `prependHook()`, `onceHook()`, `prependOnceHook()`\n- Execution: `hook()`, `callHook()`\n- Management: `getHooks()`, `removeHook()`, `removeHooks()`\n\nDeprecation warnings are emitted in two ways:\n1. **Event**: A 'warn' event is emitted with `{ hook: string, message: string }`\n2. **Logger**: Logged to `logger.warn()` if a logger is configured and has a `warn` method\n\n## .allowDeprecated\n\nControls whether deprecated hooks are allowed to be registered and executed. Default is true. When set to false, deprecated hooks will still emit warnings but will be prevented from registration and execution.\n\n```javascript\nimport { Hookified } from 'hookified';\n\nconst deprecatedHooks = new Map([\n ['oldHook', 'Use newHook instead']\n]);\n\nclass MyClass extends Hookified {\n constructor() {\n super({ deprecatedHooks, allowDeprecated: false });\n }\n}\n\nconst myClass = new MyClass();\n\nconsole.log(myClass.allowDeprecated); // false\n\n// Listen for deprecation warnings (still emitted even when blocked)\nmyClass.on('warn', (event) => {\n console.log(`Warning: ${event.message}`);\n});\n\n// Try to register a deprecated hook - will emit warning but not register\nmyClass.onHook('oldHook', () => {\n console.log('This will never execute');\n});\n// Output: Warning: Hook \"oldHook\" is deprecated: Use newHook instead\n\n// Verify hook was not registered\nconsole.log(myClass.getHooks('oldHook')); // undefined\n\n// Try to execute a deprecated hook - will emit warning but not execute\nawait myClass.hook('oldHook');\n// Output: Warning: Hook \"oldHook\" is deprecated: Use newHook instead\n// (but no handlers execute)\n\n// Non-deprecated hooks work normally\nmyClass.onHook('validHook', () => {\n console.log('This works fine');\n});\n\nconsole.log(myClass.getHooks('validHook')); // [handler function]\n\n// You can dynamically change the setting\nmyClass.allowDeprecated = true;\n\n// Now deprecated hooks can be registered and executed\nmyClass.onHook('oldHook', () => {\n console.log('Now this works');\n});\n\nconsole.log(myClass.getHooks('oldHook')); // [handler function]\n```\n\n**Behavior when `allowDeprecated` is false:**\n- **Registration**: All hook registration methods (`onHook`, `addHook`, `prependHook`, etc.) will emit warnings but skip registration\n- **Execution**: Hook execution methods (`hook`, `callHook`) will emit warnings but skip execution \n- **Management**: Hook management methods (`getHooks`, `removeHook`) will emit warnings and return undefined/skip operations\n- **Warnings**: Deprecation warnings are always emitted regardless of `allowDeprecated` setting\n\n**Use cases:**\n- **Development**: Keep `allowDeprecated: true` to maintain functionality while seeing warnings\n- **Testing**: Set `allowDeprecated: false` to ensure no deprecated hooks are accidentally used\n- **Migration**: Gradually disable deprecated hooks during API transitions\n- **Production**: Disable deprecated hooks to prevent legacy code execution\n\n## .onHook(eventName, handler)\n\nSubscribe to a hook event.\n\n```javascript\nimport { Hookified } from 'hookified';\n\nclass MyClass extends Hookified {\n constructor() {\n super();\n }\n\n async myMethodWithHooks() Promise {\n let data = { some: 'data' };\n // do something\n await this.hook('before:myMethod2', data);\n\n return data;\n }\n}\n\nconst myClass = new MyClass();\nmyClass.onHook('before:myMethod2', async (data) => {\n data.some = 'new data';\n});\n```\n\n## .onHookEntry(hookEntry)\n\nThis allows you to create a hook with the `HookEntry` type which includes the event and handler. This is useful for creating hooks with a single object.\n\n```javascript\nimport { Hookified, HookEntry } from 'hookified';\n\nclass MyClass extends Hookified {\n constructor() {\n super();\n }\n\n async myMethodWithHooks() Promise {\n let data = { some: 'data' };\n // do something\n await this.hook('before:myMethod2', data);\n\n return data;\n }\n}\n\nconst myClass = new MyClass();\nmyClass.onHookEntry({\n event: 'before:myMethod2',\n handler: async (data) => {\n data.some = 'new data';\n },\n});\n```\n\n## .addHook(eventName, handler)\n\nThis is an alias for `.onHook(eventName, handler)` for backwards compatibility.\n\n## .onHooks(Array)\n\nSubscribe to multiple hook events at once\n\n```javascript\nimport { Hookified } from 'hookified';\n\nclass MyClass extends Hookified {\n constructor() {\n super();\n }\n\n async myMethodWithHooks() Promise {\n let data = { some: 'data' };\n await this.hook('before:myMethodWithHooks', data);\n \n // do something here with the data\n data.some = 'new data';\n\n await this.hook('after:myMethodWithHooks', data);\n\n return data;\n }\n}\n\nconst myClass = new MyClass();\nconst hooks = [\n {\n event: 'before:myMethodWithHooks',\n handler: async (data) => {\n data.some = 'new data1';\n },\n },\n {\n event: 'after:myMethodWithHooks',\n handler: async (data) => {\n data.some = 'new data2';\n },\n },\n];\n```\n\n## .onceHook(eventName, handler)\n\nSubscribe to a hook event once.\n\n```javascript\nimport { Hookified } from 'hookified';\n\nclass MyClass extends Hookified {\n constructor() {\n super();\n }\n\n async myMethodWithHooks() Promise {\n let data = { some: 'data' };\n // do something\n await this.hook('before:myMethod2', data);\n\n return data;\n }\n}\n\nconst myClass = new MyClass();\n\nmyClass.onHookOnce('before:myMethod2', async (data) => {\n data.some = 'new data';\n});\n\nmyClass.myMethodWithHooks();\n\nconsole.log(myClass.hooks.length); // 0\n```\n\n## .prependHook(eventName, handler)\n\nSubscribe to a hook event before all other hooks.\n\n```javascript\nimport { Hookified } from 'hookified';\n\nclass MyClass extends Hookified {\n constructor() {\n super();\n }\n\n async myMethodWithHooks() Promise {\n let data = { some: 'data' };\n // do something\n await this.hook('before:myMethod2', data);\n\n return data;\n }\n}\n\nconst myClass = new MyClass();\nmyClass.onHook('before:myMethod2', async (data) => {\n data.some = 'new data';\n});\nmyClass.preHook('before:myMethod2', async (data) => {\n data.some = 'will run before new data';\n});\n```\n\n## .prependOnceHook(eventName, handler)\n\nSubscribe to a hook event before all other hooks. After it is used once it will be removed.\n\n```javascript\nimport { Hookified } from 'hookified';\n\nclass MyClass extends Hookified {\n constructor() {\n super();\n }\n\n async myMethodWithHooks() Promise {\n let data = { some: 'data' };\n // do something\n await this.hook('before:myMethod2', data);\n\n return data;\n }\n}\n\nconst myClass = new MyClass();\nmyClass.onHook('before:myMethod2', async (data) => {\n data.some = 'new data';\n});\nmyClass.preHook('before:myMethod2', async (data) => {\n data.some = 'will run before new data';\n});\n```\n\n## .removeHook(eventName)\n\nUnsubscribe from a hook event.\n\n```javascript\nimport { Hookified } from 'hookified';\n\nclass MyClass extends Hookified {\n constructor() {\n super();\n }\n\n async myMethodWithHooks() Promise {\n let data = { some: 'data' };\n // do something\n await this.hook('before:myMethod2', data);\n\n return data;\n }\n}\n\nconst myClass = new MyClass();\nconst handler = async (data) => {\n data.some = 'new data';\n};\n\nmyClass.onHook('before:myMethod2', handler);\n\nmyClass.removeHook('before:myMethod2', handler);\n```\n\n## .removeHooks(Array)\nUnsubscribe from multiple hooks.\n\n```javascript\nimport { Hookified } from 'hookified';\n\nclass MyClass extends Hookified {\n constructor() {\n super();\n }\n\n async myMethodWithHooks() Promise {\n let data = { some: 'data' };\n await this.hook('before:myMethodWithHooks', data);\n \n // do something\n data.some = 'new data';\n await this.hook('after:myMethodWithHooks', data);\n\n return data;\n }\n}\n\nconst myClass = new MyClass();\n\nconst hooks = [\n {\n event: 'before:myMethodWithHooks',\n handler: async (data) => {\n data.some = 'new data1';\n },\n },\n {\n event: 'after:myMethodWithHooks',\n handler: async (data) => {\n data.some = 'new data2';\n },\n },\n];\nmyClass.onHooks(hooks);\n\n// remove all hooks\nmyClass.removeHook(hooks);\n```\n\n## .hook(eventName, ...args)\n\nRun a hook event.\n\n```javascript\nimport { Hookified } from 'hookified';\n\nclass MyClass extends Hookified {\n constructor() {\n super();\n }\n\n async myMethodWithHooks() Promise {\n let data = { some: 'data' };\n // do something\n await this.hook('before:myMethod2', data);\n\n return data;\n }\n}\n```\n\nin this example we are passing multiple arguments to the hook:\n\n```javascript\nimport { Hookified } from 'hookified';\n\nclass MyClass extends Hookified {\n constructor() {\n super();\n }\n\n async myMethodWithHooks() Promise {\n let data = { some: 'data' };\n let data2 = { some: 'data2' };\n // do something\n await this.hook('before:myMethod2', data, data2);\n\n return data;\n }\n}\n\nconst myClass = new MyClass();\n\nmyClass.onHook('before:myMethod2', async (data, data2) => {\n data.some = 'new data';\n data2.some = 'new data2';\n});\n\nawait myClass.myMethodWithHooks();\n```\n\n## .callHook(eventName, ...args)\n\nThis is an alias for `.hook(eventName, ...args)` for backwards compatibility.\n\n## .beforeHook(eventName, ...args)\n\nThis is a helper function that will prepend a hook name with `before:`.\n\n```javascript\nimport { Hookified } from 'hookified';\n\nclass MyClass extends Hookified {\n constructor() {\n super();\n }\n\n async myMethodWithHooks() Promise {\n let data = { some: 'data' };\n // the event name will be `before:myMethod2`\n await this.beforeHook('myMethod2', data);\n\n return data;\n }\n}\n```\n\n## .afterHook(eventName, ...args)\n\nThis is a helper function that will prepend a hook name with `after:`.\n\n```javascript\nimport { Hookified } from 'hookified';\n\nclass MyClass extends Hookified {\n constructor() {\n super();\n }\n\n async myMethodWithHooks() Promise {\n let data = { some: 'data' };\n // the event name will be `after:myMethod2`\n await this.afterHook('myMethod2', data);\n\n return data;\n }\n}\n```\n\n## .hookSync(eventName, ...args)\n\nRun a hook event synchronously. Async handlers (functions declared with `async` keyword) are silently skipped and only synchronous handlers are executed.\n\n> **Note:** The `.hook()` method is preferred as it executes both sync and async functions. Use `.hookSync()` only when you specifically need synchronous execution.\n\n```javascript\nimport { Hookified } from 'hookified';\n\nclass MyClass extends Hookified {\n constructor() {\n super();\n }\n\n myMethodWithSyncHooks() {\n let data = { some: 'data' };\n // Only synchronous handlers will execute\n this.hookSync('before:myMethod', data);\n\n return data;\n }\n}\n\nconst myClass = new MyClass();\n\n// This sync handler will execute\nmyClass.onHook('before:myMethod', (data) => {\n data.some = 'modified';\n});\n\n// This async handler will be silently skipped\nmyClass.onHook('before:myMethod', async (data) => {\n data.some = 'will not run';\n});\n\nmyClass.myMethodWithSyncHooks(); // Only sync handler runs\n```\n\n## .hooks\n\nGet all hooks.\n\n```javascript\nimport { Hookified } from 'hookified';\n\nclass MyClass extends Hookified {\n constructor() {\n super();\n }\n\n async myMethodWithHooks() Promise {\n let data = { some: 'data' };\n // do something\n await this.hook('before:myMethod2', data);\n\n return data;\n }\n}\n\nconst myClass = new MyClass();\nmyClass.onHook('before:myMethod2', async (data) => {\n data.some = 'new data';\n});\n\nconsole.log(myClass.hooks);\n```\n\n## .getHooks(eventName)\n\nGet all hooks for an event.\n\n```javascript\nimport { Hookified } from 'hookified';\n\nclass MyClass extends Hookified {\n constructor() {\n super();\n }\n\n async myMethodWithHooks() Promise {\n let data = { some: 'data' };\n // do something\n await this.hook('before:myMethod2', data);\n\n return data;\n }\n}\n\nconst myClass = new MyClass();\nmyClass.onHook('before:myMethod2', async (data) => {\n data.some = 'new data';\n});\n\nconsole.log(myClass.getHooks('before:myMethod2'));\n```\n\n## .clearHooks(eventName)\n\nClear all hooks for an event.\n\n```javascript\nimport { Hookified } from 'hookified';\n\nclass MyClass extends Hookified {\n constructor() {\n super();\n }\n\n async myMethodWithHooks() Promise {\n let data = { some: 'data' };\n // do something\n await this.hook('before:myMethod2', data);\n\n return data;\n }\n}\n\nconst myClass = new MyClass();\n\nmyClass.onHook('before:myMethod2', async (data) => {\n data.some = 'new data';\n});\n\nmyClass.clearHooks('before:myMethod2');\n```\n\n# API - Events\n\n## .throwOnEmitError\n\nIf set to true, errors emitted as `error` will be thrown if there are no listeners. If set to false, errors will be only emitted.\n\n```javascript\nimport { Hookified } from 'hookified';\n\nclass MyClass extends Hookified {\n constructor() {\n super();\n }\n\n async myMethodWithHooks() Promise {\n let data = { some: 'data' };\n // do something\n await this.hook('before:myMethod2', data);\n\n return data;\n }\n}\n```\n\n## .throwOnEmptyListeners\n\nIf set to true, errors will be thrown when emitting an `error` event with no listeners. This follows the standard Node.js EventEmitter behavior. Default is false. In version 2, this will be set to true by default.\n\n```javascript\nimport { Hookified } from 'hookified';\n\nclass MyClass extends Hookified {\n constructor() {\n super({ throwOnEmptyListeners: true });\n }\n}\n\nconst myClass = new MyClass();\n\nconsole.log(myClass.throwOnEmptyListeners); // true\n\n// This will throw because there are no error listeners\ntry {\n myClass.emit('error', new Error('Something went wrong'));\n} catch (error) {\n console.log(error.message); // Something went wrong\n}\n\n// Add an error listener - now it won't throw\nmyClass.on('error', (error) => {\n console.log('Error caught:', error.message);\n});\n\nmyClass.emit('error', new Error('This will be caught')); // No throw, listener handles it\n\n// You can also change it dynamically\nmyClass.throwOnEmptyListeners = false;\nconsole.log(myClass.throwOnEmptyListeners); // false\n```\n\n**Difference between `throwOnEmitError` and `throwOnEmptyListeners`:**\n- `throwOnEmitError`: Throws when emitting 'error' event every time.\n- `throwOnEmptyListeners`: Throws only when there are NO error listeners registered\n\nWhen both are set to `true`, `throwOnEmitError` takes precedence.\n\n## .on(eventName, handler)\n\nSubscribe to an event.\n\n```javascript\nimport { Hookified } from 'hookified';\n\nclass MyClass extends Hookified {\n constructor() {\n super();\n }\n\n async myMethodEmittingEvent() {\n this.emit('message', 'Hello World');\n }\n}\n\nconst myClass = new MyClass();\n\nmyClass.on('message', (message) => {\n console.log(message);\n});\n```\n\n## .off(eventName, handler)\n\nUnsubscribe from an event.\n\n```javascript\nimport { Hookified } from 'hookified';\n\nclass MyClass extends Hookified {\n constructor() {\n super();\n }\n\n async myMethodEmittingEvent() {\n this.emit('message', 'Hello World');\n }\n}\n\nconst myClass = new MyClass();\nmyClass.on('message', (message) => {\n console.log(message);\n});\n\nmyClass.off('message', (message) => {\n console.log(message);\n});\n```\n\n## .emit(eventName, ...args)\n\nEmit an event.\n\n```javascript\nimport { Hookified } from 'hookified';\n\nclass MyClass extends Hookified {\n constructor() {\n super();\n }\n\n async myMethodEmittingEvent() {\n this.emit('message', 'Hello World');\n }\n}\n```\n\n## .listeners(eventName)\n\nGet all listeners for an event.\n\n```javascript\nimport { Hookified } from 'hookified';\n\nclass MyClass extends Hookified {\n constructor() {\n super();\n }\n\n async myMethodEmittingEvent() {\n this.emit('message', 'Hello World');\n }\n}\n\nconst myClass = new MyClass();\n\nmyClass.on('message', (message) => {\n console.log(message);\n});\n\nconsole.log(myClass.listeners('message'));\n```\n\n## .removeAllListeners(eventName)\n\nRemove all listeners for an event.\n\n```javascript\nimport { Hookified } from 'hookified';\n\nclass MyClass extends Hookified {\n constructor() {\n super();\n }\n\n async myMethodEmittingEvent() {\n this.emit('message', 'Hello World');\n }\n}\n\nconst myClass = new MyClass();\n\nmyClass.on('message', (message) => {\n console.log(message);\n});\n\nmyClass.removeAllListeners('message');\n```\n\n## .setMaxListeners(maxListeners: number)\n\nSet the maximum number of listeners and will truncate if there are already too many.\n\n```javascript\nimport { Hookified } from 'hookified';\n\nclass MyClass extends Hookified {\n constructor() {\n super();\n }\n\n async myMethodEmittingEvent() {\n this.emit('message', 'Hello World');\n }\n}\n\nconst myClass = new MyClass();\n\nmyClass.setMaxListeners(1);\n\nmyClass.on('message', (message) => {\n console.log(message);\n});\n\nmyClass.on('message', (message) => {\n console.log(message);\n}); // this will not be added and console warning\n\nconsole.log(myClass.listenerCount('message')); // 1\n```\n\n## .once(eventName, handler)\n\nSubscribe to an event once.\n\n```javascript\nimport { Hookified } from 'hookified';\n\nclass MyClass extends Hookified {\n constructor() {\n super();\n }\n}\n\nconst myClass = new MyClass();\n\nmyClass.once('message', (message) => {\n console.log(message);\n});\n\nmyClass.emit('message', 'Hello World');\n\nmyClass.emit('message', 'Hello World'); // this will not be called\n```\n\n## .prependListener(eventName, handler)\n\nPrepend a listener to an event. This will be called before any other listeners.\n\n```javascript\nimport { Hookified } from 'hookified';\n\nclass MyClass extends Hookified {\n constructor() {\n super();\n }\n}\n\nconst myClass = new MyClass();\n\nmyClass.prependListener('message', (message) => {\n console.log(message);\n});\n```\n\n## .prependOnceListener(eventName, handler)\n\nPrepend a listener to an event once. This will be called before any other listeners.\n\n```javascript\nimport { Hookified } from 'hookified';\n\nclass MyClass extends Hookified {\n constructor() {\n super();\n }\n}\n\nconst myClass = new MyClass();\n\nmyClass.prependOnceListener('message', (message) => {\n console.log(message);\n});\n\nmyClass.emit('message', 'Hello World');\n```\n\n## .eventNames()\n\nGet all event names.\n\n```javascript\nimport { Hookified } from 'hookified';\n\nclass MyClass extends Hookified {\n constructor() {\n super();\n }\n}\n\nconst myClass = new MyClass();\n\nmyClass.on('message', (message) => {\n console.log(message);\n});\n\nconsole.log(myClass.eventNames());\n```\n\n## .listenerCount(eventName?)\n\nGet the count of listeners for an event or all events if evenName not provided.\n\n```javascript\nimport { Hookified } from 'hookified';\n\nclass MyClass extends Hookified {\n constructor() {\n super();\n }\n}\n\nconst myClass = new MyClass();\n\nmyClass.on('message', (message) => {\n console.log(message);\n});\n\nconsole.log(myClass.listenerCount('message')); // 1\n```\n\n## .rawListeners(eventName?)\n\nGet all listeners for an event or all events if evenName not provided.\n\n```javascript\nimport { Hookified } from 'hookified';\n\nclass MyClass extends Hookified {\n constructor() {\n super();\n }\n}\n\nconst myClass = new MyClass();\n\nmyClass.on('message', (message) => {\n console.log(message);\n});\n\nconsole.log(myClass.rawListeners('message'));\n```\n\n# Logging\n\nHookified integrates logging directly into the event system. When a logger is configured, all emitted events are automatically logged to the appropriate log level based on the event name.\n\n## How It Works\n\nWhen you emit an event, Hookified automatically sends the event data to the configured logger using the appropriate log method:\n\n| Event Name | Logger Method |\n|------------|---------------|\n| `error` | `logger.error()` |\n| `warn` | `logger.warn()` |\n| `debug` | `logger.debug()` |\n| `trace` | `logger.trace()` |\n| `fatal` | `logger.fatal()` |\n| Any other | `logger.info()` |\n\nThe logger receives two arguments:\n1. **message**: A string extracted from the event data (error messages, object messages, or JSON stringified data)\n2. **context**: An object containing `{ event: eventName, data: originalData }`\n\n## Setting Up a Logger\n\nAny logger that implements the `Logger` interface is compatible. This includes popular loggers like [Pino](https://github.com/pinojs/pino), [Winston](https://github.com/winstonjs/winston), [Bunyan](https://github.com/trentm/node-bunyan), and others.\n\n```typescript\ntype Logger = {\n trace: (message: string, ...args: unknown[]) => void;\n debug: (message: string, ...args: unknown[]) => void;\n info: (message: string, ...args: unknown[]) => void;\n warn: (message: string, ...args: unknown[]) => void;\n error: (message: string, ...args: unknown[]) => void;\n fatal: (message: string, ...args: unknown[]) => void;\n};\n```\n\n## Usage Example with Pino\n\n```javascript\nimport { Hookified } from 'hookified';\nimport pino from 'pino';\n\nconst logger = pino();\n\nclass MyService extends Hookified {\n constructor() {\n super({ logger });\n }\n\n async processData(data) {\n // This will log to logger.info with the data\n this.emit('info', { action: 'processing', data });\n\n try {\n // ... process data\n this.emit('debug', { action: 'completed', result: 'success' });\n } catch (err) {\n // This will log to logger.error with the error message\n this.emit('error', err);\n }\n }\n}\n\nconst service = new MyService();\n\n// All events are automatically logged\nservice.emit('info', 'Service started'); // -> logger.info()\nservice.emit('warn', { message: 'Low memory' }); // -> logger.warn()\nservice.emit('error', new Error('Failed')); // -> logger.error()\nservice.emit('custom-event', { foo: 'bar' }); // -> logger.info() (default)\n```\n\nYou can also set or change the logger after instantiation:\n\n```javascript\nconst service = new MyService();\nservice.logger = pino({ level: 'debug' });\n\n// Or remove the logger\nservice.logger = undefined;\n```\n\n# Benchmarks\n\nWe are doing very simple benchmarking to see how this compares to other libraries using `tinybench`. This is not a full benchmark but just a simple way to see how it performs. Our goal is to be as close or better than the other libraries including native (EventEmitter).\n\n## Hooks\n\n| name | summary | ops/sec | time/op | margin | samples |\n|-----------------------|:---------:|----------:|----------:|:--------:|----------:|\n| Hookified (v1.14.0) | 🥇 | 3M | 318ns | ±0.01% | 3M |\n| Hookable (v6.0.1) | -57% | 1M | 834ns | ±0.01% | 1M |\n\n## Emits\n\nThis shows how on par `hookified` is to the native `EventEmitter` and popular `eventemitter3`. These are simple emitting benchmarks to see how it performs.\n\n| name | summary | ops/sec | time/op | margin | samples |\n|---------------------------|:---------:|----------:|----------:|:--------:|----------:|\n| Hookified (v1.13.0) | 🥇 | 12M | 90ns | ±3.17% | 11M |\n| EventEmitter3 (v5.0.1) | -0.52% | 12M | 89ns | ±1.66% | 11M |\n| EventEmitter (v20.17.0) | -3.5% | 12M | 91ns | ±0.42% | 11M |\n| Emittery (v1.2.0) | -91% | 1M | 1µs | ±3.33% | 959K |\n\n_Note: the `EventEmitter` version is Nodejs versioning._\n\n# How to Contribute\n\nHookified is written in TypeScript and tests are written in `vitest`. To run the tests, use the following command:\n\nTo setup the environment and run the tests:\n\n```bash\npnpm i && pnpm test\n```\n\nNote that we are using `pnpm` as our package manager. If you don't have it installed, you can install it globally with:\n\n```bash\nnpm install -g pnpm\n```\n\nTo contribute follow the [Contributing Guidelines](CONTRIBUTING.md) and [Code of Conduct](CODE_OF_CONDUCT.md).\n\n```bash\npnpm i && pnpm test\n```\n\nNote that we are using `pnpm` as our package manager. If you don't have it installed, you can install it globally with:\n\n```bash\nnpm install -g pnpm\n```\n\nTo contribute follow the [Contributing Guidelines](CONTRIBUTING.md) and [Code of Conduct](CODE_OF_CONDUCT.md).\n\n# License and Copyright\n\n[MIT & © Jared Wray](LICENSE)\n\n\n\n\n","readmeFilename":"README.md"}