{"_rev":"11-be052b2b9cfaa85aeb7f6217d6141b35","time":{"created":"2025-10-05T18:38:48.286Z","modified":"2025-10-05T18:38:48.778Z","1.0.0":"2025-10-04T09:23:51.777Z","0.0.1":"2025-10-04T12:13:09.317Z","0.0.2":"2025-10-04T12:21:53.700Z","0.0.3":"2025-10-05T16:31:09.423Z","0.0.4":"2025-10-05T18:38:48.528Z"},"_id":"@avonrylew/events","name":"@avonrylew/events","dist-tags":{"latest":"0.0.4"},"versions":{"0.0.4":{"name":"@avonrylew/events","version":"0.0.4","description":"Performance-focused event emitter implementation featuring single-listener storage optimization, direct parameter passing, and minimal overhead design.","keywords":["event","emitter","typescript","fast","tiny"],"homepage":"https://github.com/avonryle/events#readme","bugs":{"url":"https://github.com/avonryle/events/issues"},"repository":{"type":"git","url":"git+https://github.com/avonryle/events.git"},"license":"MIT","author":{"name":"avonryle"},"exports":"./index.min.js","scripts":{"build":"bun build ./index.ts --outfile ./index.min.js --minify --target node","test:bench":"bun run __tests__/benchmark.ts","test:feature":"bun run __tests__/feature.ts","test:memory":"bun run __tests__/memory.ts"},"publishConfig":{"access":"public"},"_id":"@avonrylew/events@0.0.4","_nodeVersion":"24.9.0","_npmVersion":"11.6.0","dist":{"integrity":"sha512-LFvyF9J34vRFOmEEZHJSHPAac+f0QdXXuUhrEAefEBduFd0cg6du2LV3Hp6JHVY3lTwXQ9yktJmFdUPKpkjZuQ==","shasum":"e1b4868b2581b5d329a21be1e052a838e3a95508","tarball":"https://registry.npmjs.org/@avonrylew/events/-/events-0.0.4.tgz","fileCount":3,"unpackedSize":9527,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCio8Wvf1EIlIeCEbtt91X+V7te3Zns7I+vkLMNnz1loAIgMrEaF5bJ8M6P3fvqH5/MgE+u8ym/bl2IZdq408X+xIw="}]},"_npmUser":{"name":"avonrylew","email":"dhaanddi@gmail.com"},"directories":{},"maintainers":[{"name":"avonrylew","email":"dhaanddi@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/events_0.0.4_1759689528356_0.6418911673396919"},"_hasShrinkwrap":false}},"maintainers":[{"name":"avonrylew","email":"dhaanddi@gmail.com"}],"description":"Performance-focused event emitter implementation featuring single-listener storage optimization, direct parameter passing, and minimal overhead design.","homepage":"https://github.com/avonryle/events#readme","keywords":["event","emitter","typescript","fast","tiny"],"repository":{"type":"git","url":"git+https://github.com/avonryle/events.git"},"author":{"name":"avonryle"},"bugs":{"url":"https://github.com/avonryle/events/issues"},"license":"MIT","readme":"# @avonrylew/events\n\n## Description\n\nA high-performance, type-safe event emitter that prioritizes speed without sacrificing features. Designed for scenarios where millions of events per second matter, while maintaining full TypeScript support and a rich API including wildcard listeners, promise-based event waiting, and comprehensive listener management.\n\nOutperforms eventemitter3 in single-listener scenarios (the most common use case) while staying competitive across all workloads.\n\nTHIS PROJECT IS CURRENTLY IN ALPHA TESTING. EXPECT ISSUES (honestly just memory leaks at the moment, everything else should work fine.)\n\n## Installation\n```bash\nnpm install @avonrylew/events\n# or\nbun add @avonrylew/events\n# or\nyarn add @avonrylew/events\n```\n\n## API Methods\n\n```typescript\n// Add listeners\nemitter.on(event, handler)      // Regular listener\nemitter.once(event, handler)    // One-time listener\n\n// Remove listeners\nemitter.off(event, handler)     // Remove specific\nemitter.off(event)              // Remove all for event\nemitter.off()                   // Remove all listeners\nemitter.clear(event?)           // Alias for off()\n\n// Emit events\nemitter.emit(event, ...args)    // Returns boolean\n\n// Wildcard listeners\nemitter.onAny((event, ...args) => {})\nemitter.offAny(handler)\nemitter.offAny()                // Remove all wildcard listeners\n\n// Utilities\nemitter.count(event?)           // Count listeners (total or per event)\nemitter.names()                 // Get all event names\nemitter.listeners(event)        // Get listeners for event\nemitter.max(n)                  // Set max listeners warning threshold\n\n// Promise-based\nawait emitter.wait(event, timeout?)  // Wait for event with optional timeout\n```\n\n## Quick Start\n```typescript\nimport { EventEmitter } from '@avonrylew/events';\n\ninterface Events {\n  ready: () => void;\n  data: (value: string) => void;\n  error: (error: Error) => void;\n}\n\nconst emitter = new EventEmitter<Events>();\n\n// Register listeners\nemitter.on('ready', () => console.log('Ready!'));\nemitter.once('data', (value) => console.log(value));\n\n// Emit events\nemitter.emit('ready');\nemitter.emit('data', 'Hello World');\n\n// Remove listeners\nemitter.off('ready', handler);\nemitter.clear(); // Remove all listeners\n```\n*check [demos](https://github.com/avonryle/events/tree/main/demos) for more examples.*\n\n## Features\n\n| Feature                  | @avonrylew/events | tseep | tiny-typed-emitter | eventemitter3 |\n|--------------------------|-------------------|-------|--------------------|---------------|\n| on() / once() / off()    | ✅                | ✅    | ✅                 | ✅            |\n| Wildcard onAny() / offAny() | ✅             | ❌    | ❌                 | ❌            |\n| clear() (all / specific) | ✅                | ❌    | ✅                  | ✅            |\n| count() listener count   | ✅                | ❌    | ⚠️ Partial         | ✅            |\n| names() list event names | ✅                | ❌    | ❌                 | ✅            |\n| wait() Promise-based listener | ✅           | ❌    | ❌                 | ❌            |\n| max() limit max listeners | ✅               | ❌    | ❌                 | ❌            |\n| TypeScript generic support | ✅ Strong       | ✅    | ✅                 | ⚠️ Partial    |\n| Lightweight (unpacked size)    | ✅ 5.46 kB               | ✅ 105 kB    | ✅ 5.3 kB                  | ✅ 73.4 kB      | \n\n## Performance Benchmarks\n\n| Test | @avonrylew/events | tseep | tiny-typed-emitter | eventemitter3 |\n|------|-------------------|-------|--------------------|--------------| \n| emit (1 listener) | 117,883,903 ⚡ | 78,920,154 | 80,169,678 | 114,160,714 |\n| emit (10 listeners) | 21,333,284 | 53,100,696 ⚡ | 13,600,686 | 19,974,968 |\n| once + emit | 12,223,202 ⚡ | 3,395,743 | 4,182,692 | 11,880,773 |\n| emit (multiple args) | 33,925,591 | 42,474,765 | 42,559,347 ⚡ | 29,681,331 |\n| on + off | 28,377,211 ⚡ | 1,713,299 | 9,033,476 | 13,639,721 |\n| add listener | 37,202,834 | 1,786,343 | 12,220,241 | 84,448,430 ⚡ |\n| emit (no args) | 44,523,204 | 55,132,587 | 63,401,344 ⚡ | 35,761,228 |\n\n*All values in ops/sec. ⚡ indicates fastest in category.* \n\n*Benchmarks run on Bun runtime using [benchmark.ts](https://github.com/avonryle/events/blob/main/__tests__/benchmark.ts)*\n\n## Memory Usage Comparison\nThe following table shows the memory consumption when creating 1000 instances with 10 listeners each (measured on Bun runtime with GC exposed):\n| Library | Heap Δ (MB) | RSS Δ (MB) | Total Δ (MB) |\n|---------|-------------|------------|--------------|\n| @avonrylew/events | 0.03 | 6.45 | 6.49 |\n| tseep | 0.08 | 8.39 | 8.54 |\n| tiny-typed-emitter | 0.04 | 0.39 | 0.46 |\n| eventemitter3 | 0.00 | 0.63 | 0.63 |\n\n*Memory test run on Bun runtime using [memory.ts](https://github.com/avonryle/events/blob/main/__tests__/memory-test.ts).*\n","readmeFilename":"README.md"}