pip-services3-commons-node
    TypeScript icon, indicating that this package has built-in type declarations

    3.0.8 • Public • Published

    Pip.Services Logo
    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.

    Install

    npm i pip-services3-commons-node

    DownloadsWeekly Downloads

    69

    Version

    3.0.8

    License

    MIT

    Unpacked Size

    1.4 MB

    Total Files

    550

    Last publish

    Collaborators

    • seroukhov