Skip to content
/ events Public

Register events using decorators on service methods

License

Notifications You must be signed in to change notification settings

dimkl/events

Repository files navigation

Events

@dimkl/events is a dependency-free JS library for listening & dispatching events on class methods.

Installation

Use the package manager npm to install @dimkl/events

npm install @dimkl/events

Requirements & limitations

  • node >= 16
  • typescript decorators support enabled in tsconfig using "experimentalDecorators": true

Usage

Examples can be found in examples/ folder:

Use examples

Execute npm run setup:examples

Testing

codecov

Run tests

npm test

Support

For feature request or issues contact me via email or open an issue in repo

Publish

npm version {patch|minor|major}
npm publish

Injecting events types

The injected event types will be used with @on decorator methods and they should be defined using interface merging strategy. Example:

declare global {
  interface {{eventName}}Event extends IEvent {
    type: "{{eventName}}"
    data?: {{any_data_type}}
  }

  interface Events {
    "{{eventName}}": {{eventName}}Event
  }
}

You can also check the ErrorEvent definition in codebase.

Roadmap

  • Add tests & code coverage
  • Add .github/{ISSUE|PULL_REQUEST}
  • Changelog & Github Releases
  • Isomorphic support
  • Code coverage shield
  • Features
    • [-] @on/dispatch on functions -- not possible
    • @on/dispatch on class
    • @on/dispatch for static & instance methods
    • remove event(s) on eventBus
    • inject events and event types
  • Github action to publish (if test pass & coverage not affected)
    • on chore -> patch
    • on fix -> patch
    • on feat -> minor
    • on fix|feat with (BREAKING CHANGE) -> major
  • Support react-native (EventTarget is not supported)

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Please make sure to update tests as appropriate.

License

ISC