I’m hitting the following issue when I’m using bentocache 1.6.1 as a memory cache with serialize to false.
Namespaced cache created from the initial cache do not preserve the serialize property
A possible workaround is to use tags and not rely on namespaces
You can find below a test generated by LLM that exhibit this behavior.
import { test } from '@japa/runner'
import { BentoCache, bentostore } from 'bentocache'
import { memoryDriver } from 'bentocache/drivers/memory'
test.group('bentocache namespace() + serialize:false interaction', () => {
test('non-namespaced getOrSet preserves a Map value across a cache hit', async ({ assert }) => {
const cache = new BentoCache({
default: 'memory',
stores: {
memory: bentostore().useL1Layer(memoryDriver({ maxItems: 100, serialize: false })),
},
}).use('memory')
await cache.getOrSet({ key: 'foo', factory: async () => new Map([['a', 1]]) })
const hit = await cache.getOrSet({
key: 'foo',
factory: async () => {
throw new Error('should have been served from cache')
},
})
assert.instanceOf(hit, Map)
})
test('KNOWN BUG: namespaced getOrSet does NOT preserve a Map value across a cache hit', async ({
assert,
}) => {
const cache = new BentoCache({
default: 'memory',
stores: {
memory: bentostore().useL1Layer(memoryDriver({ maxItems: 100, serialize: false })),
},
}).use('memory')
const nsCache = cache.namespace("ns");
await nsCache.getOrSet({ key: 'bar', factory: async () => new Map([['a', 1]]) })
const hit = await nsCache.getOrSet({
key: 'bar',
factory: async () => {
throw new Error('should have been served from cache')
},
})
// Expected outcome given the bug: the Map got JSON-round-tripped into `{}`.
assert.notInstanceOf(hit, Map)
})
})
The cache-driver page have information about not setting serialize: false with an L2 cache but I have none set-up here.
I’m hitting the following issue when I’m using bentocache 1.6.1 as a memory cache with serialize to false.
Namespaced cache created from the initial cache do not preserve the serialize property
A possible workaround is to use
tagsand not rely on namespacesYou can find below a test generated by LLM that exhibit this behavior.
The cache-driver page have information about not setting serialize: false with an L2 cache but I have none set-up here.