Skip to content

ryoid/ctrlcache

Repository files navigation

ctrlcache

Manage and build HTTP Cache-Control headers.

Features

  • TypeScript, with TSDoc for directives
  • Create presets for reusable cache policies
  • Parse Cache-Control headers from requests and extend them
  • Lightweight, with no dependencies

Install

npm install ctrlcache

API

Create cache policies and use them in your responses.

export const cacheShort = new CacheControl({
  maxAge: 60,
  staleWhileRevalidate: 60,
});

new Response("data", {
  headers: { "Cache-Control": cacheShort.serialize() },
});

// Other APIs
CacheControl.parse("max-age=60, stale-while-revalidate=60");
CacheControl.serialize({
  maxAge: 60,
  staleWhileRevalidate: 60,
});

Parse and manage cache control from headers

You can also easily manage cache control from headers of an external response.

const res = await fetch("https://example.com");
const cacheControl = CacheControl.parse(res.headers.get("Cache-Control"));
// Update the cache control settings
cacheControl.settings.maxAge = 60;

return new Response(res.body, {
  headers: { "Cache-Control": cacheControl.serialize() },
});

Directives

For a list of all supported directives, see the CacheControlSettings type definition.

Utilities

We also export functions to parse and serialize cache control headers.

// Parse a cache control header
// Alias CacheControl.parse
function parseCacheControl(header: string): CacheControlSettings;
// Serialize a cache control settings object to a string
// Alias CacheControl.serialize
function serializeCacheControl(settings: CacheControlSettings): string;