npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

common-services

v17.0.1

Published

A module to gather very common services.

Downloads

2,548

Readme

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

| Param | Type | Default | Description | | --- | --- | --- | --- | | services | Object | | The services to inject | | [services.CHARS_SET] | Object | EXPLICIT_CHARS | An optional char set to pick cars into | | [services.random] | Object | Math.random | An optional random function to replace the Math.random one used by default | | [services.log] | Object | noop | An 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

| Param | Type | Default | Description | | --- | --- | --- | --- | | [length] | Number | 6 | An 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

| Param | Type | Default | Description | | --- | --- | --- | --- | | services | Object | | The services to inject | | [services.COUNTER] | Object | DEFAULT_COUNTER | An optional configuration object | | [services.log] | Object | noop | An 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

| Param | Type | Default | Description | | --- | --- | --- | --- | | services | Object | | The services to inject | | [services.log] | function | noop | A 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.

| Param | Type | Description | | --- | --- | --- | | delay | Number | The 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.

| Param | Type | Description | | --- | --- | --- | | promise | Promise | The 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.

| Param | Type | Description | | --- | --- | --- | | path | string | The module path |

initLock(services) ⇒ Promise.<Object>

Instantiate the lock service

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

| Param | Type | Default | Description | | --- | --- | --- | --- | | services | Object | | The services to inject | | [services.LOCKS_MAP] | Map | | A map to store le current locks (optional) | | [services.LOCK_TIMEOUT] | Number | Infitiny | The timeout in milliseconds for the lock to be released. | | [services.log] | function | | A logging function | | [services.delay] | Object | | A 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.

| Param | Type | Description | | --- | --- | --- | | key | String | A unique key for the locked resource |

initLock~release(key) ⇒ void

Release the lock on the given resource key

Kind: inner method of initLock

| Param | Type | Description | | --- | --- | --- | | key | String | A 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

| Param | Type | Description | | --- | --- | --- | | services | Object | The services to inject | | services.logger | Object | The 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

| Param | Type | Description | | --- | --- | --- | | type | String | Log type | | ...args | * | Log contents |

Example

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

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

Instantiate the LRU Pool service

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

| Param | Type | Default | Description | | --- | --- | --- | --- | | services | Object | | The services to inject | | [services.log] | Object | noop | A logging function |

Example

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

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

const random = await initLRUPool({
  MAX_POOL_SIZE: 50,
  poolManager: {
    // ...
  },
  log,
});

initRandom~random() ⇒ number

Returns a new random number

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

random()
// Prints: 0.3141592653589793

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

Instantiate the random service

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

| Param | Type | Default | Description | | --- | --- | --- | --- | | services | Object | | The services to inject | | [services.log] | Object | noop | A 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

| Param | Type | Description | | --- | --- | --- | | services | Object | The services to inject | | services.MAIN_FILE_URL | String | An URL pointing to the main file run | | [services.log] | function | A 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

| Param | Type | Description | | --- | --- | --- | | path | string | The serializable constants to gather |

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

Instantiate the time service

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

| Param | Type | Default | Description | | --- | --- | --- | --- | | services | Object | | The services to inject | | [services.log] | Object | noop | A 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