3.25.0 • Published 3 days ago

@s-ui/decorators v3.25.0

Weekly downloads
985
License
ISC
Repository
-
Last release
3 days ago

sui-decorators

Set of ES6 decorators to improve your apps

Installation

npm install @schibstedspain/decorators --save

Reference

Error

Wrapper any function and handle the errors for you:

If the function return a promise:

If the function is a sync function:

import {inlineError} from '@s-ui/decorators';

class Buzz {
  @inlineError
  method() {
    return Promise.reject(new Error('KO'))
  }

}

const buzz = new Buzz()
const [err, resp] = buzz.method()

console.log(typeof err) // ==> Error

@streamify

Creates a stream of calls to any method of a class. Dependency of RxJS

import {streamify} from '@s-ui/decorators';

@streamify('greeting', 'greetingAsync')
class Person {
    greeting(name){
        return `Hi ${name}`;
    }

    greetingAsync(name){
        return new Promise( resolve => setTimeout(resolve, 100, `Hi ${name}`) );
    }
}

const person = new Person();

person.$.greeting.subscribe(({params, result}) => {
    console.log(`method was called with ${params} and response was "${result}"`); // => method was called with ['Carlos'] and response was "Hi Carlos"
});

person.$.greetingAsync.subscribe(({params, result}) => {
    console.log(`method was called with ${params} and response was "${result}"`); // => method was called with ['Carlos'] and response was "Hi Carlos"
});

person.greeting('Carlos');
person.greetingAsync('Carlos');

@cache

Creates a cache of calls to any method of a class.

import {cache} from 'cv-decorators';

class Dummy {
  @cache()
  syncRndNumber (num) { return Math.random() }
}
const dummy = new Dummy()

const firstCall = dummy.syncRndNumber()
const secondCall = dummy.syncRndNumber()

// => firstCall === secondCall

Dump cache to console if setting to truthy 'dumpCache' key in localStorage:

localStorage.__dumpCache__ = true

By default the TTL for the keys in the cache is 500ms, but it can be changed with

import {cache} from 'cv-decorators';

class Dummy {
  @cache({ttl: 2000})
  syncRndNumber (num) { return Math.random() }
}

For this method the cache is 2 seconds

It is possible to set TTL using a string with the format ttl: 'XXX [second|seconds|minute|minutes|hour|hours]', thus, avoiding writing very large integers Example

Options:

  • ttl (500ms): Time to life for each cache register

  • server (false): If the cache will be used in a NodeJS env. Be careful that could break your server

  • algorithm ('lru'): Which algorithm will be used to discard register in the cache when will be full. Can be lru | lfu

  • trackTo: Is you pass a host, each 20secds will be send a ping to ${trackTo}/__tracking/cache/event/stats with a header x-payload where there is a object with the stats of hit, miss, env and algorithm

  • size (100): How many register can be in the cache before start to remove register.

3.25.0-beta.1

22 days ago

3.24.0

2 years ago

3.25.0

2 years ago

3.23.0

2 years ago

3.22.0

3 years ago

3.21.0

4 years ago

3.20.0

4 years ago

3.19.0

4 years ago

3.18.0

4 years ago

3.17.0

4 years ago

3.16.0-beta.3

4 years ago

3.16.0-beta.4

4 years ago

3.16.0-beta.2

4 years ago

3.16.0-beta.1

4 years ago

3.16.0-beta.0

4 years ago

3.16.0

4 years ago

3.15.0

4 years ago

3.14.0

4 years ago

3.13.0

4 years ago

3.12.0

4 years ago

3.11.0

4 years ago

3.10.0

5 years ago

3.9.0

5 years ago

3.8.0

5 years ago

3.7.0

5 years ago

3.6.0

5 years ago

3.5.0

5 years ago

3.4.0

5 years ago

3.3.0

5 years ago

3.2.0

5 years ago

3.1.0

5 years ago

3.0.0

5 years ago

7.0.0

5 years ago

2.1.0-beta.0

5 years ago

2.0.0

5 years ago

1.10.0

5 years ago

1.9.0

5 years ago

1.8.0

6 years ago

1.7.0

6 years ago

1.6.0

6 years ago

1.5.0

6 years ago

1.4.0

6 years ago