5.0.4 • Published 2 years ago

hollywood-js v5.0.4

Weekly downloads
1
License
MIT
Repository
github
Last release
2 years ago

Hollywood

Build Status Coverage Status NPM Version NPM Downloads Install Size

Hollywood-js is a Framework for building very modular and high scalable server side applications following CQRS (Command Query Responsibility Segregation) and enforcing IoC.

It provides a Bounded Context oriented architecture, enforcing isolation and event driven communication between them. Hollywood-js it's strongly CQRS structured, allowing you to define or not a DDD / Clean Architecture project.

Includes advanced Event Sourcing capabilities like Event Store abstractions, Event Store Snapshots, Projections and Event Bus (Listeners and Subscribers).

Documentation

Documentation about Hollywood, DDD and EventSourcing available here

Documentation still a wip

Installation

NPM:

npm install hollywood-js

Yarn:

yarn add hollywood-js

CQRS Framework with Event Sourcing support.

Features:

  • Dependency Injection (Built around Inversify).
    • Module hierarchy for Bounded Context isolation.
  • DDD toolbox
    • Event Driven
      • Support for different event streams
    • In Memory implementations for testing
    • AggregateRoot and EventSourced abstractions
  • Event Store
    • Event Store decoupled from storage implementation thanks to DBAL (Database Abstraction Layer)
    • In Memory Event Store DBAL implementations for testing
    • Configurable SnapshotStore support.
    • In Memory Snapshot DBAL implementation for testing
    • Built in Event Bus
  • Command and Query Bus
    • Command and Query handlers autowiring
    • Middlewares support for Command and Query bus
  • Libraries should NOT log, I don't log, I throw Errors.
  • Not a server framework but tested with express and fastify (this last one the one I recommend, see /examples).

Basic Usage

import ModuleContext from "./ModuleContext";
import Kernel from "./Kernel";
import {inject} from "inversify";

const parameters = new Map([
  ['hello.style', 'hey']
]);

class Hey {
  constructor(@inject('hello.style') private readonly style: string) {}

  hello(): string {
    return this.style
  }
}

const MainModule = new ModuleContext({
  services: [
    ['hey', {instance: Hey}]
  ]
})

const kernel = new Kernel('dev', true, parameters, MainModule);

kernel.container.get<Hey>('key').hello() // 'key'

Module dependencies

import ModuleContext from "./ModuleContext";
import Kernel from "./Kernel";
import {inject} from "inversify";

const parameters = new Map([
  ['hello.style', 'hey']
]);

class Hey {
  constructor(@inject('hello.style') private readonly style: string) {}

  hello(): string {
    return this.style
  }
}

const HeyModule = new ModuleContext({
  services: [
    ['hey', {instance: Hey}]
  ]
})

class Person {
    constructor(@inject('hey') private readonly hey: Hey) {}

    sayHello(): string {
        return this.key.hello()
    }
}

const PersonModule = new ModuleContext({
  services: [
    ['person', {instance: Person}]
  ],
  modules: [HeyModule]
})
const kernel = new Kernel('dev', true, parameters, MainModule);

kernel.container.get<Person>('person').sayHello() // 'key'
5.0.4

2 years ago

5.0.2

3 years ago

5.0.1

3 years ago

5.0.0

3 years ago

4.0.5

3 years ago

4.0.4

3 years ago

4.0.7

3 years ago

4.0.1

3 years ago

4.0.0

3 years ago

4.0.3

3 years ago

4.0.2

3 years ago

3.0.0

4 years ago

2.0.0

4 years ago

1.9.3

4 years ago

1.9.2

4 years ago

1.9.1

4 years ago

1.9.0

4 years ago

1.8.5

4 years ago

1.8.4

4 years ago

1.8.3

4 years ago

1.8.2

5 years ago

1.8.1

5 years ago

1.8.0

5 years ago

1.7.0

5 years ago

1.6.4

5 years ago

1.6.3

5 years ago

1.6.2

5 years ago

1.6.1

5 years ago

1.6.0

5 years ago

1.5.0

6 years ago

1.4.6

6 years ago

1.4.5

6 years ago

1.4.4

6 years ago

1.4.3

6 years ago

1.4.2

6 years ago

1.4.1

6 years ago

1.4.0

6 years ago

1.3.0

6 years ago

1.2.7

6 years ago

1.2.6

6 years ago

1.2.5

6 years ago

1.2.4

6 years ago

1.2.3

6 years ago

1.2.2

6 years ago

1.2.1

6 years ago

1.2.0

6 years ago

1.1.16

6 years ago

1.1.15

6 years ago

1.1.14

6 years ago

1.1.13

6 years ago

1.1.12

6 years ago

1.1.11

6 years ago

1.1.10

6 years ago

1.1.9

6 years ago

1.1.8

6 years ago

1.1.7

6 years ago

1.1.6

6 years ago

1.1.5

6 years ago

1.1.4

6 years ago

1.1.3

6 years ago

1.1.2

6 years ago

1.1.1

6 years ago

1.1.0

6 years ago

1.0.11

6 years ago

1.0.10

6 years ago

1.0.9

6 years ago

1.0.8

6 years ago

1.0.7

6 years ago

1.0.6

6 years ago

1.0.5

6 years ago

1.0.4

6 years ago

1.0.3

6 years ago

1.0.2

6 years ago

1.0.1

6 years ago

1.0.0

6 years ago