In-memory caching/memoization utilities --- ## Install ```bash # Update project npm config to refer to correct registry for the @js scope echo '@js:registry=https://gitea.jbrumond.me/api/packages/js/npm/' >> ./.npmrc npm install --save @js/memo # optional - additional supporting typescript definitions npm install --save-dev @js/types ``` ## Usage ```ts import { memo } from '@js/memo'; function get_data_from_slow_source(name: string) : string { // .... } const get_data_cached = memo({ func: get_data_from_slow_source, ttl: 30_000, }); ``` ### Custom cache key generation ```ts import { memo } from '@js/memo'; interface SomeObject { id: string; foo: string; bar: number; baz: { qux: string; }; } function get_data_from_slow_source(obj: SomeObject) : string { // .... } const get_data_cached = memo({ func: get_data_from_slow_source, ttl: 30_000, // Pull just the `id` field from the first parameter to use // as the cache key key([ obj ]) { return obj.id; }, }); ``` ### Simple functions with no params ```ts import { memo_simple } from '@js/memo'; function get_data_from_slow_source() : string { // .... } const get_data_cached = memo_simple(30_000, get_data_from_slow_source); ``` ### Full async example ```ts import { memo_async } from '@js/memo'; async function get_data_from_slow_source(name: string) : Promise { // .... } const get_data_cached = memo_async({ func: get_data_from_slow_source, ttl: 30_000, stale_ttl: 5_000, promise_ttl: 5_000, }); ```