6.0.18 • Published 3 years ago

cachify-wrapper v6.0.18

Weekly downloads
64
License
ISC
Repository
github
Last release
3 years ago

cachify-wrapper

Wraps a function with a caching layer

Usage

callback

Wraps a function with a caching layer

Parameters

  • fn function callback-last style function
  • storage Storage\<K, RecordPacked\> cache storage (optional, default InMemoryStorageCb)
  • options Options (optional, default {})
  • hasher Function creates key for KV-storage from fn arguments (optional, default JSON.stringify)

Examples

const wrapper = require('cachify-wrapper').default;
class Storage {
	constructor() {
		this.data = new Map();
	}
	get = (key, cb) => cb(null, this.data.get(key))
	set = (key, value, ttl, cb) => {
		this.data.set(key, value);
		if (ttl > 0) setTimeout(() => this.data.delete(key), ttl);
		cb(null, true);
	}
	del = (key, cb) => cb(null, this.data.delete(key))
}
const storage = new Storage();
let count = 0;
const inc = (a, cb) => cb(null, count += a);
const cached = wrapper(inc, storage, {expire: 100});
setTimeout(() => cached(1, (_error, payload) => console.info(payload)), 0); // Invokes request
setTimeout(() => cached(1, (_error, payload) => console.info(payload)), 100); // Takes cached result
setTimeout(() => cached(1, (_error, payload) => console.info(payload)), 200); // Invokes second request

cached.set(2, 'manual value', 1000, () =>
	cached.get(2, (_, result) => {
		console.info(result);
		cached.del(2, () =>
			cached.get(2, (_, result) => console.info(result)))
	}));

Returns function

promise

Wraps a function with a caching layer

Parameters

Examples

const wrapperPromise = require('cachify-wrapper').promise;
let count = 0;
const inc = async(a) => count += a;
const cached = wrapperPromise(inc, storage, {expire: 1000});
const p1 = cached(1).then((payload) => console.info(payload)); // Invokes request
const p2 = p1.then(() => cached(1).then((payload) => console.info(payload))); // Takes cached result

Returns function (...any): Promise\

Options

Type: Object

Properties

  • storage Object?

    • storage.timeout number? max storage response time before considering it as failed, and invoking fn
  • source Object?

    • source.timeout number? max fn response time before considering it as failed
  • expire number? time to consider cached data expired [in milliseconds]

  • spread number? expire time spread (prevents simultaneous deletions saved items from storage)
  • lock number? lock timeout (prevents simultaneous concurrent invoke of fn at initial period)
  • stale number? additional ttl for stale data
  • ttl number? forced ttl (TimeToLive) for data (useful if storage is using from multiply services with different expire)
  • retries number? number of storage requests passes before fn call
  • error number? ttl for erroneous state cache (prevents frequent call of fn)
  • verbose number? verbosity flag

CacheAbsentError

Extends Error

no cache error

Functions

Storage

storage interface

get

Parameters
  • key K
  • cb CB\

set

Parameters

del

Parameters

RecordPacked

Type: Object

Properties

InMemoryStorageCb

get

Parameters
  • key K
  • cb CB\

set

Parameters

del

Parameters

InMemoryStorageSerializable

Extends InMemoryStorage

expire

Parameters

export

Returns Iterable\<KRecordTuple\<K, V>>

import

Parameters
  • dump Iterable\<KRecordTuple\<K, V>>

InMemoryStorageRecord

Type: Object

Properties

InMemoryStorage

Parameters

  • source Iterable\<KRecordTuple\<K, V>>?

get

Parameters
  • key K

set

Parameters
  • key K
  • value V

del

Parameters
  • key K

has

Parameters
  • key K

expire

Parameters
6.0.18

3 years ago

6.0.17

3 years ago

6.0.16

3 years ago

6.0.10

3 years ago

6.0.4

3 years ago

6.0.0

3 years ago

5.0.0

4 years ago

4.1.0

6 years ago

4.0.2

6 years ago

4.0.1

6 years ago

3.2.4

6 years ago

3.2.2

6 years ago

3.2.1

6 years ago

3.2.0

6 years ago

3.1.0

6 years ago

2.0.1

6 years ago

1.1.2

6 years ago

1.1.1

6 years ago

1.0.1

6 years ago