Giter Club home page Giter Club logo

client-events's Introduction

Common Module for Event-driven Architecture

Supports commands and events (CQRS).

Overview

This package serves as a shared library for all message interfaces, commands and events in the system. It ensures consistency and correctness while implementing the event data model across Applications, Microservices, Aggregators and various programming languages.

How it works

Client's event data model is exported as command and event enums, and message interfaces, to enable easy lookup of the available identifiers in the system.

import { Commands, Events } from "@devpie/client-events";

console.log(Commands.EnableAccounting);
// EnableAccounting

console.log(Events.MembershipAdded);
// MembershipAdded

Existing interfaces allow us to type check the message body being sent, ensuring correctness of implementation.

export interface MembershipAddedEvent {
  id: string;
  type: Events.MembershipAdded;
  metadata: Metadata;
  data: {
    MemberId: string;
    TeamId: string;
    UserId: string;
    Role: string;
    Created: string;
  };
}

Messaging

Messaging systems allow Microservices to exchange messages without coupling them together. Some Microservices emit messages, while others listen to the messages they subscribe to.

A message is a generic term for data that could be either a command or an event. Commands are messages that trigger something to happen (in the future). Events are messages that notify listeners about something that has happened (in the past). Publishers send commands or events without knowing the consumers that may be listening.

Language Support

This package is written in TypeScript but converted to language targets. Each supported language has its own package.

Supported languages include:

Development

Modify src/events.ts, the source of truth, then re-build to update all packages.

npm run build

Release

Here's the steps to perform a manual release for Typescript and Go packages (needs to be automated). Publishing Go modules relies on git tags. https://blog.golang.org/publishing-go-modules

# 1. npm run build
# 2. update ./package.json version
# 3. commit changes to git
# 4. create a new tag for release
git tag v0.0.1
# 5. push new tag
git push origin v0.0.1
# 6. push changes to remote repository
git push origin main
# 7. publish npm module
npm publish

client-events's People

Contributors

ivorscott avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.