{"_id":"@airfair/event-manager","_rev":"1-5a73d20ca59e78867b75aa3e05005b05","name":"@airfair/event-manager","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"@airfair/event-manager","publishConfig":{"access":"public"},"version":"1.0.0","description":"A TypeScript utility class for efficient management of event listeners in web applications.","main":"dist/index.js","targets":{"main":{"optimize":true,"includeNodeModules":true}},"source":"src/index.ts","types":"dist/index.d.ts","browserslist":"> 0.5%, last 2 versions, not dead","keywords":["Explicit Resource Management","ESNext","TypeScript"],"author":{"name":"Alexandre Moreau-Lemay"},"license":"MIT","dependencies":{"core-js":"3.35.1","tslib":"^2.6.2"},"devDependencies":{"@babel/cli":"^7.23.4","@babel/core":"^7.23.7","@babel/plugin-proposal-explicit-resource-management":"^7.23.3","@babel/preset-env":"^7.23.8","@babel/preset-typescript":"^7.23.3","@parcel/babel-preset-env":"^2.11.0","@parcel/packager-ts":"2.11.0","@parcel/transformer-typescript-types":"2.11.0","@types/core-js":"^2.5.8","parcel":"^2.11.0","typescript":"^5.3.3"},"scripts":{"watch":"parcel watch","build":"parcel build && ./post-build.sh"},"_id":"@airfair/event-manager@1.0.0","_integrity":"sha512-d6Q4bnEloreTwDOeT6tD8qjCdhlVRiWdEdN8j/lne7wmkI1fNE2NCbr1R09qUSE+1wHUml3KVsuY0Hb3CTUi9A==","_resolved":"/private/var/folders/xg/sf40yy613bg6_d5hkc3f92380000gn/T/98510e50c9060faa31f5fc0a733d6bf5/airfair-event-manager-1.0.0.tgz","_from":"file:airfair-event-manager-1.0.0.tgz","_nodeVersion":"20.10.0","_npmVersion":"10.2.3","dist":{"integrity":"sha512-d6Q4bnEloreTwDOeT6tD8qjCdhlVRiWdEdN8j/lne7wmkI1fNE2NCbr1R09qUSE+1wHUml3KVsuY0Hb3CTUi9A==","shasum":"1c260cb7b905301c22b5d1000dfd17563c4a4d6f","tarball":"https://registry.npmjs.org/@airfair/event-manager/-/event-manager-1.0.0.tgz","fileCount":12,"unpackedSize":101707,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDqyzcToJjOBnlp8DqTw/tq9YmM+Gf1BKQ0JS8R513BFAiEA48IvErjORVGZKSN2mvA/sK7hk+v8wQQqHP2VENw9lGY="}]},"_npmUser":{"name":"amoreaulemay","email":"alexandre@unless.com"},"directories":{},"maintainers":[{"name":"amoreaulemay","email":"alexandre@unless.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/event-manager_1.0.0_1705873079506_0.9419595054395047"},"_hasShrinkwrap":false},"1.0.1":{"name":"@airfair/event-manager","publishConfig":{"access":"public"},"version":"1.0.1","description":"A TypeScript utility class for efficient management of event listeners in web applications.","main":"dist/index.js","targets":{"main":{"optimize":true,"includeNodeModules":true}},"source":"src/index.ts","types":"dist/index.d.ts","browserslist":"> 0.5%, last 2 versions, not dead","keywords":["Explicit Resource Management","ESNext","TypeScript"],"author":{"name":"Alexandre Moreau-Lemay"},"license":"MIT","dependencies":{"core-js":"3.35.1","tslib":"^2.6.2"},"repository":{"type":"git","url":"git+https://github.com/amoreaulemay/evt-manager.git"},"bugs":{"url":"https://github.com/amoreaulemay/evt-manager/issues"},"homepage":"https://github.com/amoreaulemay/evt-manager#readme","devDependencies":{"@babel/cli":"^7.23.4","@babel/core":"^7.23.7","@babel/plugin-proposal-explicit-resource-management":"^7.23.3","@babel/preset-env":"^7.23.8","@babel/preset-typescript":"^7.23.3","@parcel/babel-preset-env":"^2.11.0","@parcel/packager-ts":"2.11.0","@parcel/transformer-typescript-types":"2.11.0","@types/core-js":"^2.5.8","parcel":"^2.11.0","typescript":"^5.3.3"},"scripts":{"watch":"parcel watch","build":"parcel build && ./post-build.sh"},"_id":"@airfair/event-manager@1.0.1","_integrity":"sha512-eU3s00X+GgoTHGAIobphXsQ9LqWdegiSkqE9M0EYSXMMGrp+Zjt2GoabQKdE0qJ1MpKTtg62rqHGmm+Y7cb6xw==","_resolved":"/private/var/folders/xg/sf40yy613bg6_d5hkc3f92380000gn/T/007fb117aa76ddf6d559b46fccef068f/airfair-event-manager-1.0.1.tgz","_from":"file:airfair-event-manager-1.0.1.tgz","_nodeVersion":"20.10.0","_npmVersion":"10.2.3","dist":{"integrity":"sha512-eU3s00X+GgoTHGAIobphXsQ9LqWdegiSkqE9M0EYSXMMGrp+Zjt2GoabQKdE0qJ1MpKTtg62rqHGmm+Y7cb6xw==","shasum":"bd3c6d835d61bcdd03e26248fbf83eea7fc52398","tarball":"https://registry.npmjs.org/@airfair/event-manager/-/event-manager-1.0.1.tgz","fileCount":12,"unpackedSize":101955,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFulAu322HeeosaYjMdImbE/bupP7oo+7BbggcVzfilIAiEAgUZcwrZY/KvTSqns1YPrD7sWyrfKbvBpCKott6ogAB0="}]},"_npmUser":{"name":"amoreaulemay","email":"alexandre@unless.com"},"directories":{},"maintainers":[{"name":"amoreaulemay","email":"alexandre@unless.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/event-manager_1.0.1_1705873362416_0.8557727123261323"},"_hasShrinkwrap":false}},"time":{"created":"2024-01-21T21:37:59.397Z","1.0.0":"2024-01-21T21:37:59.641Z","modified":"2024-01-21T21:42:42.835Z","1.0.1":"2024-01-21T21:42:42.641Z"},"maintainers":[{"name":"amoreaulemay","email":"alexandre@unless.com"}],"description":"A TypeScript utility class for efficient management of event listeners in web applications.","keywords":["Explicit Resource Management","ESNext","TypeScript"],"author":{"name":"Alexandre Moreau-Lemay"},"license":"MIT","readme":"# EventManager\n\n## Overview\n\n`EventManager` is a TypeScript utility class designed for efficient management of event listeners in web applications. It extends the capabilities of traditional event handling by offering a disposable interface and individual control over each event listener. This class is particularly useful in scenarios where dynamic event handling and resource management are critical.\n\nThis class is using the TC39 Stage 3 proposal for Explicit Resource Management. Polyfills and/or TypeScript 5.2 are required, as well as a transpiler for `using` keyword, such as Babel with plugin `\"@babel/plugin-proposal-explicit-resource-management\"`\n\n## Features\n\n- **Disposable Interface**: Implements a disposable pattern for efficient resource management.\n- **Individual Event Listener Control**: Each event listener is associated with a unique symbol, allowing for precise control.\n- **Dynamic Event Handling**: Facilitates the addition and removal of event listeners on-the-fly.\n\n## Installation\n\nTo use `EventManager` in your project, install the package:\n\n```bash\nnpm i @airfair/event-manager\n# -- or\nyarn add @airfair/event-manager\n# -- or\npnpm add @airfair/event-manager\n```\n\n## Usage\n\n### Importing the Class\n\nFirst, import the `EventManager` class into your TypeScript file.\n\n```ts\nimport { EventManager } from '@airfair/event-manager';\n```\n\n### Creating an Instance\n\nCreate an instance of `EventManager` to manage your event listeners\n\n```ts\nusing evtManager = new EventManager();\n```\n\n### Registering Event Listeners\n\nUse the `register` method to add event listeners. This method returns a unique symbol for each registered event.\n\n```ts\nconst myEvent = evtManager.register(targetElement, 'click', cbFunction);\n```\n\n### Deregistering Event Listeners\n\nTo remove an event listener, use the `deregister` method with the target element and the symbol returned by the `register` method.\n\n```ts\nevtManager.deregister(targetElement, myEvent);\n```\n\n### Disposal\n\nUpon disposal, this class will automatically deregister all event listeners attached to it. By utilising the TC39 Stage 3 proposal for Explicit Resource Management, this class will auto-dispose as soon as it goes out of scope. However manual disposal can be triggered.\n\n```ts\nevtManager[Symbol.dispose]()\n```\n\n### Example\n\nHere's a simple example of how `EventManager` can be used in a project:\n\n```ts\nclass MyClass implements Disposable {\n  #disposed = false;\n  #disposables: DisposableStack | undefined;\n  #manager: EventManager | undefined;\n\n  constructor() {\n    using stack = new DisposableStack();\n\n    this.#manager = stack.use(new EventManager());\n    this.#disposables = stack.move();\n  }\n\n  [Symbol.dispose]() {\n    if (!this.#disposed) {\n      this.#disposed = true;\n      const disposables = this.#disposables as DisposableStack;\n\n      this.#manager = undefined;\n      this.#disposables = undefined;\n\n      disposables[Symbol.dispose]();\n    }\n  }\n}\n```\n\n## License\n\nThis project is licensed under the MIT License.","readmeFilename":"README.md","homepage":"https://github.com/amoreaulemay/evt-manager#readme","repository":{"type":"git","url":"git+https://github.com/amoreaulemay/evt-manager.git"},"bugs":{"url":"https://github.com/amoreaulemay/evt-manager/issues"}}