16.0.1 • Published 2 months ago

common-services v16.0.1

Weekly downloads
84
License
MIT
Repository
github
Last release
2 months ago

common-services

A module to gather very common services.

GitHub license Coverage Status

This module contains various common injectable services that are often used into a wide range of applications.

The services provided here are meant to have a very tiny surface API in order to be easily mocked but also implemented with different technologies.

For example, the counter service could be implemented with a distributed architecture, the codeGenerator though a database...

The services are designed to be used with Knifecycle a simple but feature complete dependency injection tool but can also be used by hand.

API

Functions

initCodeGenerator(services) ⇒ Promise.<function()> | Promise.<function()>

Instantiate the codeGenerator service

Kind: global function

ParamTypeDefaultDescription
servicesObjectThe services to inject
services.CHARS_SETObjectEXPLICIT_CHARSAn optional char set to pick cars into
services.randomObjectMath.randomAn optional random function to replace the Math.random one used by default
services.logObjectnoopAn optional logging function

Example

import {
  DEFAULT_LOGGER,
  initCodeGenerator,
  initLog,
} from 'common-services';

const log = await initLog({
  logger: DEFAULT_LOGGER,
});

const codeGenerator = await initCodeGenerator({
  log,
});

initCodeGenerator~codeGenerator(length) ⇒ Promise.<String>

Returns a random code

Kind: inner method of initCodeGenerator
Returns: Promise.<String> - A promise of the generated code

ParamTypeDefaultDescription
lengthNumber6An optional custon code length (defaults to 6)

Example

console.log([
  codeGenerator(),
  codeGenerator(),
  codeGenerator(),
]);
// Prints: ABCDEF,GHJKMN,PRSTUV

initCounter(services) ⇒ Promise.<function()>

Instantiate the counter service

Kind: global function
Returns: Promise.<function()> - A promise of the counter function

ParamTypeDefaultDescription
servicesObjectThe services to inject
services.COUNTERObjectDEFAULT_COUNTERAn optional configuration object
services.logObjectnoopAn optional logging function

Example

import {
  initCounter,
  initLog,
} from 'common-services';

const log = await initLog({
  logger: DEFAULT_LOGGER
});

const counter = await initCounter({
  COUNTER: { firstCount: 1 },
  log,
});

initCounter~counter() ⇒ Promise.<number>

Returns the current count and increment the counter

Kind: inner method of initCounter
Returns: Promise.<number> - A promise of the current count
Example

console.log([
  counter(),
  counter(),
  counter(),
]);
// Prints: 1,2,3

initDelay(services) ⇒ Promise.<Object>

Instantiate the delay service

Kind: global function
Returns: Promise.<Object> - A promise of the delay service

ParamTypeDefaultDescription
servicesObjectThe services to inject
services.logfunctionnoopA logging function

Example

import {
  DEFAULT_LOGGER,
  initDelay,
  initLog,
} from 'common-services';

const log = await initLog({
  logger: DEFAULT_LOGGER
});

const delay = await initDelay({
  log,
});

initDelay~create(delay) ⇒ Promise

Create a new delay

Kind: inner method of initDelay
Returns: Promise - A promise to be resolved after that delay or rejected if it is cancelled.

ParamTypeDescription
delayNumberThe delay in ms

Example

await delay.create(1000);
console.log('1000 ms elapsed!');

initDelay~clear(promise) ⇒ Promise

Cancel an earlier created delay

Kind: inner method of initDelay
Returns: Promise - A promise resolved when cancellation is done.

ParamTypeDescription
promisePromiseThe promise of the delay to cancel

Example

try {
  const delayPromise = delay.create(1000);
  await Promise.all(delayPromise, delay.clear(delayPromise));
  console.log('1000 ms elapsed!');
} catch (err) {
  if(err.code != 'E_DELAY_CLEARED') {
    trow err;
  }
  console.log('Cancelled!'));
}
// Prints: Cancelled!

initImporter(path) ⇒ Promise.<Object>

Allow to import ES modules.

Kind: global function
Returns: Promise.<Object> - A promise of an imported module.

ParamTypeDescription
pathstringThe module path

initLock(services) ⇒ Promise.<Object>

Instantiate the lock service

Kind: global function
Returns: Promise.<Object> - A promise of the lock service

ParamTypeDefaultDescription
servicesObjectThe services to inject
services.LOCKS_MAPMapA map to store le current locks (optional)
services.LOCK_TIMEOUTNumberInfitinyThe timeout in milliseconds for the lock to be released.
services.logfunctionA logging function
services.delayObjectA delay service like the common-services one

Example

import {
  DEFAULT_LOGGER,
  initLog,
  initDelay,
  initLock
} from 'common-services';
import ms from 'ms';

const log = await initLog({
  logger: DEFAULT_LOGGER
});
const delay = await initDelay({ log });
const lock = await initLock({
  LOCK_TIMEOUT: ms('5s'),
  delay,
  log,
});


run();

async function run() {
  // The following async jobs are done sequentially
  // if they have the same `resourceKey` value
  await Promise.all(asynTasks.map(async (asyncTask) => {
    await lock.take(asyncTask.resourceKey);

    await myAsyncStuff1(asyncTask);
    await myAsyncStuff2(asyncTask);
    await myAsyncStuff3(asyncTask);

   lock.release(asyncTask.resourceKey);
  });
}

initLock~take(key) ⇒ Promise

Take the lock on the given resource key

Kind: inner method of initLock
Returns: Promise - A promise to be resolved when the lock is gained or rejected if the lock release timeout is reached.

ParamTypeDescription
keyStringA unique key for the locked resource

initLock~release(key) ⇒ void

Release the lock on the given resource key

Kind: inner method of initLock

ParamTypeDescription
keyStringA unique key for the resource to release

initLog(services) ⇒ Promise.<function()>

Instantiate the logging service

Kind: global function
Returns: Promise.<function()> - A promise of the logging function

ParamTypeDescription
servicesObjectThe services to inject
services.loggerObjectThe logger object that output the logs

Example

import {
  DEFAULT_LOGGER,
  initLog,
} from 'common-services';

const log = await initLog({
  logger: DEFAULT_LOGGER,
});

initLog~log(type, ...args) ⇒ void

Logging function

Kind: inner method of initLog

ParamTypeDescription
typeStringLog type
...args*Log contents

Example

log('debug', 'Luke, I am your father!')

initRandom(services) ⇒ Promise.<function()>

Instantiate the random service

Kind: global function
Returns: Promise.<function()> - A promise of the random function

ParamTypeDefaultDescription
servicesObjectThe services to inject
services.logObjectnoopA logging function

Example

import {
  DEFAULT_LOGGER,
  initLog,
  initRandom
} from 'common-services';

const log = await initLog({
  logger: DEFAULT_LOGGER,
});

const random = await initRandom({
  log,
});

initRandom~random() ⇒ number

Returns a new random number

Kind: inner method of initRandom
Returns: number - The random number
Example

random()
// Prints: 0.3141592653589793

initResolve(services) ⇒ Promise.<function()>

Instantiate the resolve service

Kind: global function
Returns: Promise.<function()> - A promise of the resolve service

ParamTypeDescription
servicesObjectThe services to inject
services.MAIN_FILE_URLStringAn URL pointing to the main file run
services.logfunctionA logging function

Example

import {
  DEFAULT_LOGGER,
  initLog,
  initResolve,
} from 'common-services';

const log = await initLog({
  logger: DEFAULT_LOGGER,
});

const resolve = initResolve({
  MAIN_FILE_URL: import.meta.url,
  log,
});

resolve('./myfile.ts');
}

resolve(path) ⇒ Promise.<string>

Allow to resolve a path with the module system.

Kind: global function
Returns: Promise.<string> - A promise of a fully qualified module path

ParamTypeDescription
pathstringThe serializable constants to gather

initTime(services) ⇒ Promise.<function()>

Instantiate the time service

Kind: global function
Returns: Promise.<function()> - A promise of the time function

ParamTypeDefaultDescription
servicesObjectThe services to inject
services.logObjectnoopA logging function

Example

import {
  DEFAULT_LOGGER,
  initLog,
  initTime,
} from 'common-services';

const log = await initLog({
  logger: DEFAULT_LOGGER,
});

const time = await initTime({
  log,
});

initTime~time() ⇒ number

Returns the current timestamp

Kind: inner method of initTime
Returns: number - The current timestamp
Example

time()
// Prints: 1326585600000

Authors

License

MIT

16.0.1

2 months ago

16.0.0

2 months ago

15.1.0

2 months ago

15.0.0

9 months ago

14.0.0

9 months ago

13.0.0

9 months ago

12.1.0

1 year ago

12.0.0

1 year ago

11.1.0

2 years ago

10.0.1

2 years ago

10.0.2

2 years ago

10.0.3

2 years ago

11.0.0

2 years ago

11.0.1

2 years ago

10.0.0

2 years ago

9.0.1

3 years ago

9.0.0

3 years ago

8.0.2

4 years ago

8.0.1

4 years ago

8.0.0

4 years ago

7.1.5

4 years ago

7.1.4

4 years ago

7.1.3

4 years ago

7.1.2

4 years ago

7.1.1

4 years ago

7.1.0

4 years ago

7.0.0

4 years ago

6.2.0

4 years ago

6.1.0

4 years ago

6.0.2

4 years ago

6.0.1

4 years ago

6.0.0-beta.0

4 years ago

6.0.0

4 years ago

5.0.3

5 years ago

5.0.2

5 years ago

5.0.1

5 years ago

5.0.0

5 years ago

4.0.0

6 years ago

3.2.0

6 years ago

3.1.1

6 years ago

3.1.0

6 years ago

3.0.1

6 years ago

3.0.0

6 years ago

2.0.0

6 years ago

1.0.0

6 years ago

0.0.0

7 years ago