{"_id":"@ad-execute-manager/event","_rev":"3-0590fefe0b2352cc8b89782770eddbcd","name":"@ad-execute-manager/event","dist-tags":{"latest":"2.0.5"},"versions":{"2.0.1":{"name":"@ad-execute-manager/event","version":"2.0.1","keywords":["event-emitter","pubsub","events","event-bus","javascript","nodejs","typescript","event-queue","listener","singleton"],"author":{"url":"https://github.com/singcl","name":"singcl","email":"iambabyer@gmail.com"},"license":"MIT","_id":"@ad-execute-manager/event@2.0.1","maintainers":[{"name":"singcl","email":"24661881@qq.com"}],"homepage":"https://npmjs.com/package/@ad-execute-manager/event","bugs":{"url":"https://github.com/singcl/ad-execute-manager/issues"},"dist":{"shasum":"6ed99c49e5bc553db2ce8782c0d9fbe18ca1bd8a","tarball":"https://registry.npmjs.org/@ad-execute-manager/event/-/event-2.0.1.tgz","fileCount":8,"integrity":"sha512-qb5Uq6ZBHlJ69yj0Es74ms0YwENtkehqdgL2z48Vq4KNmhoIedZpi6w/C62AEAVy+op6amHdLqw6wAtOzkVo7g==","signatures":[{"sig":"MEQCIHltXoWlzUT/sMGS6PDrpQ07B243DqwbqE92ihzb0qe7AiBWUkolGlHd2HYcSgeqiGPCx0XzXaHdm9yPcMic23JLXA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18050},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","engines":{"node":">=14.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"030ff053ed193cac4152bc2e390db0383e2d20a7","scripts":{"dev":"rslib build --watch","lint":"eslint .","test":"rstest","build":"rslib build && tsc","format":"prettier --write .","prepublishOnly":"npm run build"},"_npmUser":{"name":"singcl","email":"24661881@qq.com"},"repository":{"url":"git+https://github.com/singcl/ad-execute-manager.git","type":"git","directory":"packages/evnet"},"_npmVersion":"8.5.0","description":"A collection of event-related utilities for JavaScript applications including EventEmitter and PubSub implementations.","directories":{},"_nodeVersion":"16.14.2","_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.39.2","globals":"^16.5.0","prettier":"^3.7.3","@eslint/js":"^9.39.1","typescript":"^5.9.3","@rslib/core":"^0.18.5","@rstest/core":"^0.7.2","@babel/preset-env":"^7.28.5","@babel/eslint-parser":"^7.28.5","eslint-plugin-import":"^2.32.0"},"_npmOperationalInternal":{"tmp":"tmp/event_2.0.1_1770779804316_0.5372229008904814","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"@ad-execute-manager/event","version":"2.0.2","keywords":["event-emitter","pubsub","events","event-bus","javascript","nodejs","typescript","event-queue","listener","singleton"],"author":{"url":"https://github.com/singcl","name":"singcl","email":"iambabyer@gmail.com"},"license":"MIT","_id":"@ad-execute-manager/event@2.0.2","maintainers":[{"name":"singcl","email":"24661881@qq.com"}],"homepage":"https://npmjs.com/package/@ad-execute-manager/event","bugs":{"url":"https://github.com/singcl/ad-execute-manager/issues"},"dist":{"shasum":"bcd7b8929a794efef140ae8730f5ddfc7fbd7e41","tarball":"https://registry.npmjs.org/@ad-execute-manager/event/-/event-2.0.2.tgz","fileCount":8,"integrity":"sha512-oyydBKL9XADhnvymXmioFxgs+OkGyObLbhOmo37pcFZ48+w/dc2d1bPJSFW7d9p4VlBrVtEaNz5FDGSrRf/0WQ==","signatures":[{"sig":"MEUCIGJ/u4eLLaC5ApkJxHffVk9a0dEW/PX/Pd2QvmuX8YJ6AiEAnSuEbK1qL6SJwf898ANO5dTXgtMiXs2n2SlJL4nOGf8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18401},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","engines":{"node":">=14.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"125db4b0802b729880f057231b20f8a8c8596663","scripts":{"dev":"rslib build --watch","lint":"eslint .","test":"rstest","build":"rslib build && tsc","format":"prettier --write .","prepublishOnly":"npm run build"},"_npmUser":{"name":"singcl","email":"24661881@qq.com"},"repository":{"url":"git+https://github.com/singcl/ad-execute-manager.git","type":"git","directory":"packages/evnet"},"_npmVersion":"8.5.0","description":"A collection of event-related utilities for JavaScript applications including EventEmitter and PubSub implementations.","directories":{},"_nodeVersion":"16.14.2","_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.39.2","globals":"^16.5.0","prettier":"^3.7.3","@eslint/js":"^9.39.1","typescript":"^5.9.3","@rslib/core":"^0.18.5","@rstest/core":"^0.7.2","@babel/preset-env":"^7.28.5","@babel/eslint-parser":"^7.28.5","eslint-plugin-import":"^2.32.0"},"_npmOperationalInternal":{"tmp":"tmp/event_2.0.2_1770781316395_0.6149226767172042","host":"s3://npm-registry-packages-npm-production"}},"2.0.5":{"name":"@ad-execute-manager/event","version":"2.0.5","description":"A collection of event-related utilities for JavaScript applications including EventEmitter and PubSub implementations.","type":"module","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs","types":"./dist/index.d.ts"}},"main":"./dist/index.cjs","types":"./dist/index.d.ts","author":{"name":"singcl","email":"iambabyer@gmail.com","url":"https://github.com/singcl"},"license":"MIT","homepage":"https://npmjs.com/package/@ad-execute-manager/event","repository":{"type":"git","url":"git+https://github.com/singcl/ad-execute-manager.git","directory":"packages/event"},"bugs":{"url":"https://github.com/singcl/ad-execute-manager/issues"},"engines":{"node":">=14.0.0"},"keywords":["event-emitter","pubsub","events","event-bus","javascript","nodejs","typescript","event-queue","listener","singleton"],"scripts":{"build":"rslib build && tsc","dev":"rslib build --watch","format":"prettier --write .","lint":"eslint .","test":"rstest","prepublishOnly":"npm i && npm run build"},"devDependencies":{"@babel/eslint-parser":"^7.28.5","@babel/preset-env":"^7.28.5","@eslint/js":"^9.39.1","@rslib/core":"^0.18.5","@rstest/core":"^0.7.2","eslint":"^9.39.2","eslint-plugin-import":"^2.32.0","globals":"^16.5.0","prettier":"^3.7.3","typescript":"^5.9.3"},"gitHead":"496539214dcaa933fcb20441d4962601c22045b9","_id":"@ad-execute-manager/event@2.0.5","_nodeVersion":"16.14.2","_npmVersion":"8.5.0","dist":{"integrity":"sha512-ex1/gr3gymc1Pt9Vs1ESz1Yr5Q0xf5J6hEqTqHtQ2cRnhhDmuM48Vxbb9c3vZcLEjMfbtX/9RZNUQCKBr0Y6MA==","shasum":"4ca485968ff1a98662147ce40fbedee14c0290a5","tarball":"https://registry.npmjs.org/@ad-execute-manager/event/-/event-2.0.5.tgz","fileCount":8,"unpackedSize":18410,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGrfKvvSOajL0ojl28EK0OJ6Q1ljJ8168KDUNLICZzURAiAHTtAgs13DY769B6FmyZ+XW5sxgUrW84Y874msRIqvug=="}]},"_npmUser":{"name":"singcl","email":"24661881@qq.com"},"directories":{},"maintainers":[{"name":"singcl","email":"24661881@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/event_2.0.5_1770859202712_0.3530481956953593"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-11T03:16:44.224Z","modified":"2026-02-12T01:20:03.013Z","2.0.1":"2026-02-11T03:16:44.478Z","2.0.2":"2026-02-11T03:41:56.539Z","2.0.5":"2026-02-12T01:20:02.870Z"},"bugs":{"url":"https://github.com/singcl/ad-execute-manager/issues"},"author":{"name":"singcl","email":"iambabyer@gmail.com","url":"https://github.com/singcl"},"license":"MIT","homepage":"https://npmjs.com/package/@ad-execute-manager/event","keywords":["event-emitter","pubsub","events","event-bus","javascript","nodejs","typescript","event-queue","listener","singleton"],"repository":{"type":"git","url":"git+https://github.com/singcl/ad-execute-manager.git","directory":"packages/event"},"description":"A collection of event-related utilities for JavaScript applications including EventEmitter and PubSub implementations.","maintainers":[{"name":"singcl","email":"24661881@qq.com"}],"readme":"# @ad-execute-manager/event\r\n\r\nA collection of event-related utilities for JavaScript applications including EventEmitter and PubSub implementations.\r\n\r\n## Installation\r\n\r\n```bash\r\nnpm install @ad-execute-manager/event\r\n```\r\n\r\n## Features\r\n\r\n- **EventEmitter**: A powerful event emitter with support for once events, max listeners, and event queuing\r\n- **PubSub**: A simple publish-subscribe pattern implementation with automatic unsubscribe function\r\n- **Event Queuing**: Automatically queue events when no listeners are present\r\n- **Listener Limits**: Set maximum listeners per event to prevent memory leaks\r\n- **Once Events**: Support for events that only fire once\r\n- **Error Handling**: Built-in error handling for event listeners\r\n- **TypeScript Support**: Includes TypeScript type definitions\r\n- **Singleton Support**: EventEmitter includes static getInstance method for singleton pattern\r\n\r\n## Usage\r\n\r\n### EventEmitter\r\n\r\n```javascript\r\nimport { EventEmitter } from '@ad-execute-manager/event';\r\n\r\n// Create an event emitter instance\r\nconst emitter = new EventEmitter({\r\n  maxListeners: 10,\r\n  maxQueueSize: 5,\r\n  maxOnceEvents: 5\r\n});\r\n\r\n// Register event listener\r\nemitter.on('userLoggedIn', (userData) => {\r\n  console.log('User logged in:', userData);\r\n});\r\n\r\n// Register once event listener\r\nemitter.once('appStarted', (appData) => {\r\n  console.log('App started:', appData);\r\n  // This listener will be automatically removed after first execution\r\n});\r\n\r\n// Emit events\r\nemitter.emit('userLoggedIn', { id: 1, name: 'John' });\r\nemitter.emit('appStarted', { version: '1.0.0' });\r\n\r\n// Remove event listener\r\nfunction onDataReceived(data) {\r\n  console.log('Data received:', data);\r\n}\r\n\r\nemitter.on('dataReceived', onDataReceived);\r\nemitter.off('dataReceived', onDataReceived);\r\n\r\n// Remove all listeners for an event\r\nemitter.removeAllListeners('userLoggedIn');\r\n\r\n// Remove all listeners\r\n// emitter.removeAllListeners();\r\n\r\n// Using singleton pattern\r\nconst singletonEmitter = EventEmitter.getInstance({\r\n  maxListeners: 15\r\n});\r\n```\r\n\r\n### PubSub\r\n\r\n```javascript\r\nimport { PubSub } from '@ad-execute-manager/event';\r\n\r\n// Create a PubSub instance\r\nconst pubsub = new PubSub();\r\n\r\n// Subscribe to an event\r\nconst unsubscribe = pubsub.on('message', (data) => {\r\n  console.log('Message received:', data);\r\n});\r\n\r\n// Publish an event\r\npubsub.emit('message', { text: 'Hello, world!' });\r\n\r\n// Unsubscribe using the returned function\r\nunsubscribe();\r\n\r\n// Subscribe to an event only once\r\npubsub.once('notification', (notification) => {\r\n  console.log('Notification:', notification);\r\n  // This listener will be automatically removed after first execution\r\n});\r\n\r\n// Publish the notification event\r\npubsub.emit('notification', { title: 'New Message', body: 'You have a new message' });\r\n\r\n// Check listener count\r\nconst listenerCount = pubsub.listenerCount('message');\r\nconsole.log('Message listeners:', listenerCount);\r\n\r\n// Remove all listeners\r\n// pubsub.removeAllListeners();\r\n```\r\n\r\n## API\r\n\r\n### EventEmitter\r\n\r\n#### Constructor\r\n\r\n```javascript\r\nnew EventEmitter(options)\r\n```\r\n\r\n- **options** (Object): Configuration options\r\n  - **maxListeners** (Number): Maximum listeners per event, default 5\r\n  - **maxQueueSize** (Number): Maximum queue size for events with no listeners, default 1\r\n  - **maxOnceEvents** (Number): Maximum once events per event, default 5\r\n\r\n#### Methods\r\n\r\n- **on(event, listener)**: Register an event listener\r\n  - **event** (String): Event name\r\n  - **listener** (Function): Event listener function\r\n\r\n- **once(event, listener)**: Register a one-time event listener\r\n  - **event** (String): Event name\r\n  - **listener** (Function): Event listener function\r\n\r\n- **emit(event, ...args)**: Emit an event\r\n  - **event** (String): Event name\r\n  - **...args** (Any): Arguments to pass to listeners\r\n\r\n- **off(event, listenerToRemove)**: Remove an event listener\r\n  - **event** (String): Event name\r\n  - **listenerToRemove** (Function): Listener function to remove\r\n\r\n- **removeAllListeners(event)**: Remove all listeners for an event\r\n  - **event** (String, optional): Event name, omit to remove all listeners\r\n\r\n- **static getInstance(args)**: Get singleton instance\r\n  - **args** (Object): Constructor options\r\n  - **returns** (EventEmitter): Singleton instance\r\n\r\n### PubSub\r\n\r\n#### Constructor\r\n\r\n```javascript\r\nnew PubSub()\r\n```\r\n\r\n#### Methods\r\n\r\n- **on(eventName, callback)**: Subscribe to an event\r\n  - **eventName** (String): Event name\r\n  - **callback** (Function): Event callback function\r\n  - **returns** (Function): Unsubscribe function\r\n\r\n- **off(eventName, callback)**: Unsubscribe from an event\r\n  - **eventName** (String): Event name\r\n  - **callback** (Function): Callback function to remove\r\n\r\n- **emit(eventName, ...args)**: Publish an event\r\n  - **eventName** (String): Event name\r\n  - **...args** (Any): Arguments to pass to callbacks\r\n\r\n- **once(eventName, callback)**: Subscribe to an event once\r\n  - **eventName** (String): Event name\r\n  - **callback** (Function): Event callback function\r\n\r\n- **listenerCount(eventName)**: Get listener count for an event\r\n  - **eventName** (String): Event name\r\n  - **returns** (Number): Listener count\r\n\r\n- **removeAllListeners()**: Remove all listeners\r\n\r\n## Examples\r\n\r\n### Example 1: Application Event Bus\r\n\r\n```javascript\r\nimport { EventEmitter } from '@ad-execute-manager/event';\r\n\r\n// Create global event bus\r\nconst eventBus = EventEmitter.getInstance({\r\n  maxListeners: 20\r\n});\r\n\r\n// User service\r\nfunction loginUser(userData) {\r\n  // Login logic\r\n  console.log('Logging in user:', userData.username);\r\n  \r\n  // Emit login event\r\n  eventBus.emit('userLoggedIn', {\r\n    user: userData,\r\n    timestamp: new Date().toISOString()\r\n  });\r\n}\r\n\r\n// Notification service\r\nfunction setupNotifications() {\r\n  eventBus.on('userLoggedIn', (loginData) => {\r\n    console.log('Sending welcome notification to:', loginData.user.username);\r\n    // Send welcome notification\r\n  });\r\n  \r\n  eventBus.on('userLoggedOut', (logoutData) => {\r\n    console.log('Updating user status to offline:', logoutData.userId);\r\n    // Update user status\r\n  });\r\n}\r\n\r\n// Analytics service\r\nfunction setupAnalytics() {\r\n  eventBus.once('appStarted', (appData) => {\r\n    console.log('Recording app start event:', appData.version);\r\n    // Record app start analytics\r\n  });\r\n  \r\n  eventBus.on('userLoggedIn', (loginData) => {\r\n    console.log('Recording login event:', loginData.user.username);\r\n    // Record login analytics\r\n  });\r\n}\r\n\r\n// Setup services\r\nsetupNotifications();\r\nsetupAnalytics();\r\n\r\n// Start app\r\neventBus.emit('appStarted', { version: '1.0.0' });\r\n\r\n// Login user\r\nloginUser({ id: 1, username: 'john_doe', email: 'john@example.com' });\r\n```\r\n\r\n### Example 2: Component Communication\r\n\r\n```javascript\r\nimport { PubSub } from '@ad-execute-manager/event';\r\n\r\n// Create pubsub instance for component communication\r\nconst componentBus = new PubSub();\r\n\r\n// Header component\r\nfunction Header() {\r\n  // Subscribe to user changes\r\n  const unsubscribe = componentBus.on('userChanged', (user) => {\r\n    console.log('Header: Updating user display:', user.name);\r\n    // Update header with user info\r\n  });\r\n  \r\n  // Subscribe to theme changes\r\n  componentBus.on('themeChanged', (theme) => {\r\n    console.log('Header: Updating theme:', theme);\r\n    // Update header theme\r\n  });\r\n  \r\n  // Cleanup function\r\n  return () => {\r\n    unsubscribe();\r\n    console.log('Header: Unsubscribed from events');\r\n  };\r\n}\r\n\r\n// User profile component\r\nfunction UserProfile() {\r\n  // Subscribe to user changes\r\n  const unsubscribe = componentBus.on('userChanged', (user) => {\r\n    console.log('UserProfile: Updating user profile:', user.name);\r\n    // Update user profile\r\n  });\r\n  \r\n  // Cleanup function\r\n  return () => {\r\n    unsubscribe();\r\n    console.log('UserProfile: Unsubscribed from events');\r\n  };\r\n}\r\n\r\n// Settings component\r\nfunction Settings() {\r\n  // Update user\r\n  function updateUser(userData) {\r\n    console.log('Settings: Updating user');\r\n    componentBus.emit('userChanged', userData);\r\n  }\r\n  \r\n  // Change theme\r\n  function changeTheme(theme) {\r\n    console.log('Settings: Changing theme to:', theme);\r\n    componentBus.emit('themeChanged', theme);\r\n  }\r\n  \r\n  return {\r\n    updateUser,\r\n    changeTheme\r\n  };\r\n}\r\n\r\n// Initialize components\r\nconst cleanupHeader = Header();\r\nconst cleanupUserProfile = UserProfile();\r\nconst settings = Settings();\r\n\r\n// Simulate user update\r\nsettings.updateUser({ id: 1, name: 'John Doe', email: 'john@example.com' });\r\n\r\n// Simulate theme change\r\nsettings.changeTheme('dark');\r\n\r\n// Cleanup components\r\n// cleanupHeader();\r\n// cleanupUserProfile();\r\n```\r\n\r\n### Example 3: Event Queueing\r\n\r\n```javascript\r\nimport { EventEmitter } from '@ad-execute-manager/event';\r\n\r\n// Create event emitter with queueing\r\nconst emitter = new EventEmitter({\r\n  maxQueueSize: 10\r\n});\r\n\r\n// Emit events before listeners are registered\r\nconsole.log('Emitting events before listeners...');\r\nemitter.emit('data', { value: 1 });\r\nemitter.emit('data', { value: 2 });\r\nemitter.emit('data', { value: 3 });\r\n\r\n// Register listener - will receive queued events\r\nconsole.log('Registering listener...');\r\nemitter.on('data', (data) => {\r\n  console.log('Received data:', data);\r\n});\r\n\r\n// Emit more events\r\nconsole.log('Emitting more events...');\r\nemitter.emit('data', { value: 4 });\r\nemitter.emit('data', { value: 5 });\r\n```\r\n\r\n## License\r\n\r\nMIT\r\n","readmeFilename":"README.md"}