Skip to content

v10.10.1

Choose a tag to compare

@camilb camilb released this 16 Sep 15:40
· 333 commits to main since this release
922becd

Cache not-found content results briefly instead of refetching them on every request.

ContentDelivery treated any falsy cached value as a miss, so a stored null story lookup still reached the API on every request. Only an absent cache entry is a miss now: a stored null, false or 0 is a hit. Null results (API 403, 404 and 410 as mapped by story() and gallery()) are kept for negativeTtl seconds, 60 by default and configurable through cache.negativeTtl on PrezlyAdapter.connect, which must be a positive integer. The deadline is written into the cached envelope and enforced on read, so a cache layer that ignores the new ttl hint, or a null written by an older Theme Kit, is a miss rather than a stale hit. The memory cache expires these entries; the Redis cache writes them with their own EX and does not renew it on read. A cache version change still invalidates them immediately. Errors keep throwing and are never stored; undefined results are no longer written. Clients created with a custom fetch and no requestScope keep treating null as a miss.

Cache.set gains an optional { ttl } argument; custom caches that ignore it keep working. Telemetry counts a cached null as cache_hit.

The manifests drop the legacy devEngines field, which npm 11.13 rejects; engines carries the same constraint.

10.10.0 was published with pnpm workspace:^ dependency specifiers left unrewritten and cannot be installed. It is deprecated on npm; use 10.10.1. The README documents publishing with a hardware security key so this does not recur.

Bea adopts this release in prezly/theme-nextjs-bea alongside the middleware slug pre-filter (DEV-24197); together they remove most story-lookup API calls for missing paths. Linear: DEV-24151.