@ashnazg/cachomatic

mem/disk app-side caching w/expiration

Usage no npm install needed!

<script type="module">
  import ashnazgCachomatic from 'https://cdn.skypack.dev/@ashnazg/cachomatic';
</script>

README


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.