3.0.8 • Published 3 years ago

pip-services3-commons-node v3.0.8

Weekly downloads
326
License
MIT
Repository
github
Last release
3 years ago

Portable Abstractions and Patterns for Node.js

This module is a part of the Pip.Services polyglot microservices toolkit. It provides a set of basic patterns used in microservices or backend services. Also the module implemenets a reasonably thin abstraction layer over most fundamental functions across all languages supported by the toolkit to facilitate symmetric implementation.

This module contains the following packages:

  • Commands - commanding and eventing patterns
  • Config - configuration pattern
  • Convert - portable value converters
  • Data - data patterns
  • Errors- application errors
  • Random - random data generators
  • Refer - locator inversion of control (IoC) pattern
  • Reflect - portable reflection utilities
  • Run - component life-cycle management patterns
  • Validate - validation patterns

Quick links:

Use

Install the NPM package as

npm install pip-services3-commons-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-services3-commons-node';
import { ConfigParams } from 'pip-services3-commons-node';
import { IReferenceable } from 'pip-services3-commons-node';
import { IReferences } from 'pip-services3-commons-node';
import { Descriptor } from 'pip-services3-commons-node';
import { IOpenable } from 'pip-services3-commons-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(correlationId: string, callback: (err: any) => void): void {
        this._opened = true;
        console.log("MyComponentA has been opened.");
        callback(null);
    }

    public close(correlationId: string, 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-services3-commons-node';
import { References } from 'pip-services3-commons-node';
import { Descriptor } from 'pip-services3-commons-node';

let myComponentA = new MyComponentA();

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

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

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

Develop

For development you shall install the following prerequisites:

  • Node.js 8+
  • 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.

The documentation is written by Egor Nuzhnykh, Alexey Dvoykin, Mark Makarychev.

@everything-registry/sub-chunk-2439iqs-clients-restgateway-nodeiqs-clients-rosters-nodeiqs-clients-shifts-nodeiqs-clients-signals-nodeiqs-clients-stateupdates-nodeiqs-clients-statistics-nodeiqs-clients-zones-nodeiqs-facade-public-nodeiqs-services-agreements-nodeiqs-services-attendance-nodeiqs-services-cloudwatch-nodeiqs-services-controlobjects-nodeiqs-services-corrections-nodeiqs-services-currdevicestates-nodeiqs-services-currobjectstates-nodeiqs-services-dataprofiles-nodeiqs-services-deviceconfigs-nodeiqs-services-deviceprofiles-nodeiqs-services-devices-nodeiqs-services-emergencyplans-nodeiqs-services-eventgeneration-nodeiqs-services-eventrules-nodeiqs-services-eventtemplates-nodeiqs-services-gateways-nodeiqs-services-incidents-nodeiqs-services-locations-nodeiqs-services-mqttgateway-nodeiqs-services-objectgroups-nodeiqs-services-objectstates-nodeiqs-services-opevents-nodeiqs-services-resolutions-nodeiqs-services-restgateway-nodeiqs-services-rosters-nodeiqs-services-shifts-nodeiqs-services-signals-nodeiqs-services-stateupdates-nodeiqs-services-teltonikagateway-nodeiqs-services-zones-nodeiqs-bindles-infrastructure-nodeiqs-bundles-configuration-nodeiqs-bundles-content-nodeiqs-clients-agreements-nodeiqs-clients-attendance-nodeiqs-clients-cloudwatch-nodeiqs-clients-controlobjects-nodeiqs-clients-corrections-nodeiqs-clients-currdevicestates-nodeiqs-clients-currobjectstates-nodeiqs-clients-dataprofiles-nodeiqs-clients-deviceconfigs-nodeiqs-clients-deviceprofiles-nodeiqs-clients-devices-nodeiqs-clients-emergencyplans-nodeiqs-clients-eventgeneration-nodeiqs-clients-eventrules-nodeiqs-clients-eventtemplates-nodeiqs-clients-gateways-nodeiqs-clients-incidents-nodeiqs-clients-locations-nodeiqs-clients-mqttgateway-nodeiqs-clients-objectgroups-nodeiqs-clients-objectstates-nodeiqs-clients-opevents-nodeiqs-clients-resolutions-node@infinitebrahmanuniverse/nolb-pippip-services3-components-nodepip-services3-container-nodepip-services3-couchbase-nodepip-services3-data-nodepip-services3-datadog-nodepip-services3-elasticsearch-nodepip-services3-expressions-nodepip-services3-facade-nodepip-services3-fluentd-nodepip-services3-grpc-nodepip-services3-kafka-nodepip-services3-memcached-nodepip-services3-messaging-nodepip-services3-mongodb-nodepip-services3-mongoose-nodepip-services3-mqtt-nodepip-services3-mysql-nodepip-services3-nats-nodepip-services3-postgres-nodepip-services-roles-nodepip-services-routeanalysis-nodepip-services-routes-nodepip-services-sessions-nodepip-services-settings-nodepip-services-sms-nodepip-services-smssettings-nodepip-services-statistics-nodepip-services-tags-nodepip-services-tips-nodepip-services-transducerdata-nodepip-services3-aws-nodepip-services3-prometheus-nodepip-services3-redis-nodepip-services3-rpc-node
3.0.8

3 years ago

3.0.6

4 years ago

3.0.5

5 years ago

3.0.4

5 years ago