Skip to content
/ swrr Public

⏩ Stale While Revalidated Resources — keeps data fast

License

Notifications You must be signed in to change notification settings

maraisr/swrr

Repository files navigation

swrr

Stale While Revalidate Resource · an edge pass-through cache utility

js downloads licenses gzip size brotli size

This is free to use software, but if you do like it, consisder supporting me ❤️

sponsor me buy me a coffee

Caveat ~ Currently cache backplane is assumed to be Cloudflare Workers KV. Before we hit 1.0 release, we will aim to support a generic and abstract backplane for the likes of Redis, Memcached, or other layers.

🚀 Usage

// file: my-worker.esm.ts

import * as swr from 'swrr';

const getPostsInCategorySince = async ({ category, since }) => {
  const posts = await cms.getPostsInCategory(category);

  return posts.filter((post) => post.updatedAt > since);
};

export default {
  async fetch(req, env, ctx) {
    // ⬇️️ create "container", all resources will batch in this boundary.
    //   ~> you'd probably want this in a middleware.
    const makeResource = swr.make(env.KV_NAMESPACE, ctx);

    // ⬇️ create a resource connected to a handler and name it
    const getLatestPosts = makeResource('posts', getPostsInCategorySince);

    // ... whatever elese

    // ⬇️ run the resource, passing in whatever arguments you'd like
    const posts = await getLatestPosts({ category: 'foobar', since: '2022-01-01' });

    // ~> and one would now find a KV entry for
    //      'posts__cdbdf4617568dc29453d3fee5f5ca79a7713b15f'

    return new Response(posts, { headers: { 'content-type': 'application/json' } });
  },
};

License

MIT © Marais Rossouw

About

⏩ Stale While Revalidated Resources — keeps data fast

Topics

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Sponsor this project