@ashnazg/cachomatic

0.0.3 • Public • Published

title: "@ashnazg/cachomatic" sidebar_label: "cachomatic"

I wrote a expiring-memoization decorator that has an optional disk-backed layer.

It understands promises, and excludes any non-serializable part of the underlying function's params from the cache-id.

Usage

var {createCacheAround} = require('@ashnazg/cachomatic');

async function doWork(...whatever_args) {
	return {whatever:'result'};
}

// this'll create a memory-backed cache who's entries expire after 1 day.
var doLessWork = createCacheAround({func:doWork});
var slowly_answered = await doLessWork('question');
var immediately_answered = await doLessWork('question');

// there's a "ttl" conf for setting the expiration:
var doLeastWork = createCacheAround({
	func:doWork,
	ttl: {
		// as long as at least _one_ of these fields is given, it's a valid TTL
		weeks: 1,
		days: 2,
		hours: 7,
		minutes: 5,
		seconds: 12,
		ms: 42
	},
	/*optional onLethal(err) {handle errors yourself instead of exiting}*/
});

disk-backed

Memory-only is good for many production cases, but as a dev, I hate having the cache empty every time I touch the server code.

If you create your wrapper with {path: '/tmp/convenient-label'} it'll use that as a prefix for creating one file per cache entry, resembling $path-$integer.

var persistReboot = createCacheAround({
	func:doWork,
	path: '/tmp/cachomatic-demo',
	ttl: { hours: 8 }
});

Release 0.0.3

the optional hook onLethal() wasn't being called.

Release 0.0.2

Despite the docs saying they're the same, I'm having better luke with require('fs/promises') than I am with require('fs').promises

Release 0.0.1

First release. is passing my test harness, but hasn't been used in a real system yet.

Readme

Keywords

none

Package Sidebar

Install

npm i @ashnazg/cachomatic

Weekly Downloads

2

Version

0.0.3

License

MIT

Unpacked Size

10.8 kB

Total Files

6

Last publish

Collaborators

  • xander