0.0.6 • Published 7 months ago

pip-services4-components-node v0.0.6

Weekly downloads
-
License
MIT
Repository
github
Last release
7 months ago

Portable Component Model for Node.js

This module is a part of the Pip.Services polyglot microservices toolkit.

It defines a portable component model interfaces and provides utility classes to handle component lifecycle.

The module contains the following packages:

  • Build - basic factories for constructing objects
  • Config - configuration pattern
  • Refer - locator inversion of control (IoC) pattern
  • Run - component life-cycle management patterns

Quick links:

Use

Install the NPM package as

npm install pip-services4-components-node --save

Then you are ready to start using the Pip.Services patterns to augment your backend code.

For instance, here is how you can implement a component, that receives configuration, get assigned references, can be opened and closed using the patterns from this module.

import { IConfigurable } from 'pip-services4-components-node';
import { ConfigParams } from 'pip-services4-components-node';
import { IReferenceable } from 'pip-services4-components-node';
import { IReferences } from 'pip-services4-components-node';
import { Descriptor } from 'pip-services4-components-node';
import { IOpenable } from 'pip-services4-components-node';

export class MyComponentA implements IConfigurable, IReferenceable, IOpenable {
    private _param1: string = "ABC";
    private _param2: number = 123;
    private _anotherComponent: MyComponentB;
    private _opened: boolean = true;

    public configure(config: ConfigParams): void {
        this._param1 = config.getAsStringWithDefault("param1", this._param1);
        this._param2 = config.getAsIntegerWithDefault("param2", this._param2);
    }

    public setReferences(refs: IReferences): void {
        this._anotherComponent = refs.getOneRequired<MyComponentB>(
            new Descriptor("myservice", "mycomponent-b", "*", "*", "1.0")
        );
    }

    public isOpen(): boolean {
        return this._opened;
    }

    public open(context: IContext, callback: (err: any) => void): void {
        this._opened = true;
        console.log("MyComponentA has been opened.");
        callback(null);
    }

    public close(context: IContext, callback: (err: any) => void): void {
        this._opened = true;
        console.log("MyComponentA has been closed.");
        callback(null);
    }

}

Then here is how the component can be used in the code

import { ConfigParams } from 'pip-services4-components-node';
import { References } from 'pip-services4-components-node';
import { Descriptor } from 'pip-services4-components-node';

let myComponentA = new MyComponentA();

// Configure the component
myComponentA.configure(ConfigParams.fromTuples(
  'param1', 'XYZ',
  'param2', 987
));

// Set references to the component
myComponentA.setReferences(References.fromTuples(
  new Descriptor("myservice", "mycomponent-b", "default", "default", "1.0",) myComponentB
));

// Open the component
myComponentA.open("123", (err) => {
   console.log("MyComponentA has been opened.");
   ...
});

If you need to create components using their locators (descriptors) implement component factories similar to the example below.

import { Factory } from 'pip-services4-components-node';
import { Descriptor } from 'pip-services4-components-node';

export class MyFactory extends Factory {
  public static myComponentDescriptor: Descriptor = new Descriptor("myservice", "mycomponent", "default", "*", "1.0");
  
  public MyFactory() {
    super();
    
    this.registerAsType(MyFactory.myComponentDescriptor, MyComponent);    
  }
}

// Using the factory

let myFactory = MyFactory();

let myComponent1 = myFactory.create(new Descriptor("myservice", "mycomponent", "default", "myComponent1", "1.0");
let myComponent2 = myFactory.create(new Descriptor("myservice", "mycomponent", "default", "myComponent2", "1.0");

...

Develop

For development you shall install the following prerequisites:

  • Node.js 14+
  • Visual Studio Code or another IDE of your choice
  • Docker
  • Typescript

Install dependencies:

npm install

Compile the code:

tsc

Run automated tests:

npm test

Generate API documentation:

./docgen.ps1

Before committing changes run dockerized build and test as:

./build.ps1
./test.ps1
./clear.ps1

Contacts

The module is created and maintained by Sergey Seroukhov and Danil Prisyazhniy.

The documentation is written by:

  • Egor Nuzhnykh
  • Alexey Dvoykin
  • Mark Makarychev
  • Eugenio Andrieu
@everything-registry/sub-chunk-2439pip-services4-aws-nodepip-services4-azure-nodepip-services4-cassandra-nodepip-services4-rpc-nodepip-services4-sqlite-nodepip-services4-sqlserver-nodepip-services4-swagger-nodepip-services4-vault-nodepip-services4-config-nodepip-services4-container-nodepip-services4-couchbase-nodepip-services4-datadog-nodepip-services4-elasticsearch-nodepip-services4-expressions-nodepip-services4-fluentd-nodepip-services4-gcp-nodepip-services4-grpc-nodepip-services4-http-nodepip-services4-prometheus-nodepip-services4-rabbitmq-nodepip-services4-redis-nodepip-services4-kafka-nodepip-services4-logic-nodepip-services4-memcached-nodepip-services4-messaging-nodepip-services4-mongodb-nodepip-services4-mqtt-nodepip-services4-mysql-nodepip-services4-nats-nodepip-services4-observability-nodepip-services4-persistence-nodepip-services4-postgres-nodeservice-shoppingcarts-nodeservice-products-nodeservice-basic-pipservicesservice-cruddata-pipservicesbm-vslice-ecommerce-facade-nodebm-vslice-ecommerce-layered-client-payments-pipservices-nodebm-vslice-ecommerce-layered-client-products-pipservices-nodebm-vslice-ecommerce-layered-client-purchaseorders-pipservices-nodebm-vslice-ecommerce-layered-facade-public-pipservices-nodebm-vslice-ecommerce-layered-service-orderprocessing-pipservices-nodebm-vslice-ecommerce-layered-service-payments-pipservices-nodebm-vslice-ecommerce-layered-service-products-pipservices-nodebm-vslice-ecommerce-layered-service-purchaseorders-pipservices-nodebm-vslice-layered-client-payments-nodebm-vslice-layered-client-products-nodebm-vslice-layered-client-purchaseorders-nodebm-vslice-layered-service-orderprocessing-nodebm-vslice-layered-service-payments-nodebm-vslice-layered-service-products-nodebm-vslice-layered-service-purchaseorders-nodebm-vslice-layered-service-shoppingcarts-node
0.0.6

7 months ago

0.0.5

11 months ago

0.0.4

12 months ago

0.0.3

12 months ago

0.0.2

12 months ago

0.0.1

12 months ago