@3xpo/promi
TypeScript icon, indicating that this package has built-in type declarations

0.1.11 • Public • Published

@3xpo/promi

Dependency-free, Typesafe library for converting callback-based asynchronous functions into promises in NodeJS.

Installation

pnpm i @3xpo/promi

Usage

The below brotliCompress/brotliDecompress functions are just used as an example. You can use any function where the last value is a callback (ie arg1,arg2,arg3,callback).

Promi.wrap

Wraps a function. Depends on the first parameter being an error of some kind. Returns a function that returns a promise.

If the callback only gets err, value, it will return just value - if it, however, gets (err, ...value) (where ...value has a length not equal to 1), it will return value as an array.

This is the intended way to use Promi. It uses Promi.wrapPromise under the hood.

// import
import {
  brotliCompress as callbackBrotliCompress,
  brotliDecompress as callbackBrotliDecompress,
} from 'zlib';
import Promi from '@3xpo/promi';

// wrap the functions
const brotliCompress = Promi.wrap(brotliDecompress),
  brotliDecompress = Promi.wrap(brotliDecompress);

// in an async function
console.log(await brotliDecompress(await brotliCompress('test'))); // => 'test'

Promi.call

Small wrapper around Promi.wrap to call the function immediately.

// import
import { brotliCompress, brotliDecompress } from 'zlib';
import Promi from '@3xpo/promi';

// in an async function
console.log(
  await Promi.call(brotliDecompress, await Promi.call(brotliCompress, 'test')),
); // => 'test'

Promi.wrapPromise

Directly wraps a function, returning an array of return values. This will always return a function which returns an array, even if the array only includes one value.

import {
  brotliCompress as callbackBrotliCompress,
  brotliDecompress as callbackBrotliDecompress,
} from 'zlib';
import Promi from '@3xpo/promi';

const brotliCompress = Promi.wrapPromise(callbackBrotliCompress);
const brotliDecompress = Promi.wrapPromise(callbackBrotliDecompress);
const [err, compressed] = await brotliCompress('test');
if (err) throw err;
const [err2, decompressed] = await brotliDecompress(compressed);
if (err2) throw err2;
console.log(decompressed); // => 'test'

Promi.callPromise

Promi.call, for Promi.wrapPromise

import { brotliCompress, brotliDecompress } from 'zlib';
import Promi from '@3xpo/promi';

const [err, compressed] = await Promi.callPromise(brotliCompress, 'test');
if (err) throw err;
const [err2, decompressed] = await Promi.wrapPromise(
  brotliDecompress,
  compressed,
);
if (err2) throw err2;
console.log(decompressed); // => 'test'

Readme

Keywords

none

Package Sidebar

Install

npm i @3xpo/promi

Weekly Downloads

59

Version

0.1.11

License

MIT

Unpacked Size

25.2 kB

Total Files

11

Last publish

Collaborators

  • exponentialworkload