From 2cb2edb898114d0d53153fabc5419e33b6c0d1d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20Nikoli=C4=87?= Date: Sun, 19 Apr 2026 21:21:30 +0200 Subject: [PATCH] fix(cache): pass graced entry to factory in SWR path --- packages/bentocache/src/cache/factory_runner.ts | 2 +- packages/bentocache/tests/cache/factory_context.spec.ts | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/bentocache/src/cache/factory_runner.ts b/packages/bentocache/src/cache/factory_runner.ts index 5a731134..84536bf7 100644 --- a/packages/bentocache/src/cache/factory_runner.ts +++ b/packages/bentocache/src/cache/factory_runner.ts @@ -137,7 +137,7 @@ export class FactoryRunner { * And immediately return the fallback value */ if (options.shouldSwr(hasGracedValue)) { - this.#runFactory({ key, factory, options, lockReleaser, isBackground: true }) + this.#runFactory({ key, factory, options, lockReleaser, isBackground: true, gracedValue }) throw new errors.E_FACTORY_SOFT_TIMEOUT(key) } diff --git a/packages/bentocache/tests/cache/factory_context.spec.ts b/packages/bentocache/tests/cache/factory_context.spec.ts index d2daa327..bb341038 100644 --- a/packages/bentocache/tests/cache/factory_context.spec.ts +++ b/packages/bentocache/tests/cache/factory_context.spec.ts @@ -110,14 +110,17 @@ test.group('Factory Context', () => { await sleep(100) + let gracedEntryValue; + const r1 = await cache.getOrSet({ key: 'foo', factory: ({ gracedEntry }) => { - assert.deepEqual(gracedEntry?.value, 'bar') - return gracedEntry?.value + gracedEntryValue = gracedEntry?.value + return gracedEntryValue }, }) + assert.deepEqual(gracedEntryValue, 'bar') assert.deepEqual(r1, 'bar') }) })