@vates/decorate-with

Creates a decorator from a function wrapper

Usage no npm install needed!

<script type="module">
  import vatesDecorateWith from 'https://cdn.skypack.dev/@vates/decorate-with';
</script>

README

@vates/decorate-with

Package Version License PackagePhobia Node compatibility

Creates a decorator from a function wrapper

Install

Installation of the npm package:

> npm install --save @vates/decorate-with

Usage

decorateWith(fn, ...args)

Creates a new (legacy) method decorator from a function decorator, for instance, allows using Lodash's functions as decorators:

import { decorateWith } from '@vates/decorate-with'

class Foo {
  @decorateWith(lodash.debounce, 150)
  bar() {
    // body
  }
}

decorateMethodsWith(class, map)

Decorates a number of methods directly, without using the decorator syntax:

import { decorateMethodsWith } from '@vates/decorate-with'

class Foo {
  bar() {
    // body
  }

  baz() {
    // body
  }
}

decorateMethodsWith(Foo, {
  // without arguments
  bar: lodash.curry,

  // with arguments
  baz: [lodash.debounce, 150],
})

The decorated class is returned, so you can export it directly.

To apply multiple transforms to a method, you can either call decorateMethodsWith multiple times or use @vates/compose:

decorateMethodsWith(Foo, {
  bar: compose([
    [lodash.debounce, 150]
    lodash.curry,
  ])
})

perInstance(fn, ...args)

Helper to decorate the method by instance instead of for the whole class.

This is often necessary for caching or deduplicating calls.

import { perInstance } from '@vates/decorateWith'

class Foo {
  @decorateWith(perInstance, lodash.memoize)
  bar() {
    // body
  }
}

Because it's a normal function, it can also be used with decorateMethodsWith, with compose or even by itself.

Contributions

Contributions are very welcomed, either on the documentation or on the code.

You may:

  • report any issue you've encountered;
  • fork and create a pull request.

License

ISC © Vates SAS