Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

pip-services3-commons-node

Portable abstractions and patterns for Pip.Services in Node.js

pip.services, microservice, commons, library

readme

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.

changelog

Pip.Services Logo
Portable Abstractions and Patterns for Node.js ChangeLog

3.0.0 (2018-08-21)

Breaking changes

  • Moved component definitions into a separate package

2.10.0 (2018-03-26)

Features

  • data Added ProjectionParams
  • validate Added ProjectionParamsSchema
  • count Added reset_timeout parameter to CachedCounter

Breaking changes

  • Added ContextInfo and InfoFactory

2.9.0 (2018-03-20)

Breaking changes

  • Moved FluentdLogger, MemcachedCache and MemcachedLock to pip-services-oss package
  • Changed logical group in descriptors to 'pip-services'

2.8.0 (2018-03-01)

Features

  • Moved from mustache to handlebars

2.8.0 (2018-02-17)

Features

  • Added lock package for distributed locks
  • Added memcached cache and lock
  • Added JsonConverter.fromToObject() method
  • Added Fluentd logger

2.7.0 (2017-09-30)

Features

  • Integrated mustache template engine to parameterize config files
  • Improved creation of properties in RecursiveObjectWriter

2.5.0 (2017-08-05)

Features

  • Added to FixedRateTimer support for callback

Bug Fixed

  • Fixed setAsObject in AnyValueMap and StringValueMap with 1 parameter

2.4.0 (2017-04-20)

Breaking changes

  • Deprecated and removed ReferenceQuery

Bug Fixed

  • Fixed field names in validation

2.3.10 (2017-04-19)

Bug Fixed

  • Fixed validation error messages
  • Fixed connection resolution in MemoryDiscovery
  • Fixed number of defects in ConnectionResolver
  • Fixed number of defects in CredentialResolver

2.3.3 (2017-04-12)

Bug Fixed

  • Relaxed validation of numbers in Node.js

2.3.0 (2017-04-11)

Features

  • validate Added FilterParamsSchema and PagingParamsSchema
  • config Added parameters to ConfigReader.readConfig()

2.2.4 (2017-04-09)

Bug Fixed

  • Code cleanup after sync with Python
  • Fixed date to string conversion

2.2.0 (2017-04-05)

Features

  • data Added IChangeable interface

Bug Fixes

  • Fixed field names in ITrackable interface

2.1.0 (2017-03-31)

Features

  • data Added MultiString class
  • data Added TagsProcessor class

2.0.11 (2017-03-28)

Features

  • command Added ICommandable interface
  • command Command contructor not accepts a function
  • data Added fromValue static method to FilterParams, StringValueMap, Parameters

2.0.8 (2017-03-16)

Breaking Changes

  • ConnectionParams.getUri() now returns stored property instead of calculating it

2.0.0 (2017-02-24)

Cleaned up and simplified dependency management and object creation.

Features

  • refer Added DependencyResolver
  • build Added Factory

Breaking Changes

  • Refactored refer package. Removed IDescriptable and ILocateable interface. Made locator a mandatory requirement to place component into references.
  • Moved ManagedReferences to pip-services-container
  • Made IConfigReader interface asynchronous

Bug Fixes

  • Replaced log formatting with C-like format from util package

1.0.0-1.0.3 (2017-01-28 - 2017-02-24)

Initial public release

Features

  • build Component factories framework
  • commands Command and Eventing patterns
  • config Configuration framework
  • convert Portable soft data converters
  • count Performance counters components
  • data Data value objects and random value generators
  • errors Portable application errors
  • log Logging components
  • random Random data generators
  • refer Component referencing framework
  • reflect Portable reflection helpers
  • run Execution framework
  • validate Data validators