From 5205636c4404f505b477bf7df704c630bb3df9c4 Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Sat, 18 Jan 2025 14:48:00 +0100 Subject: [PATCH] feat: add setter to sqlite cache store --- lib/cache/sqlite-cache-store.js | 91 +++++++++++++++++++-------------- 1 file changed, 54 insertions(+), 37 deletions(-) diff --git a/lib/cache/sqlite-cache-store.js b/lib/cache/sqlite-cache-store.js index a5afc829413..6072191f449 100644 --- a/lib/cache/sqlite-cache-store.js +++ b/lib/cache/sqlite-cache-store.js @@ -251,6 +251,59 @@ module.exports = class SqliteCacheStore { return result } + /** + * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} key + * @param {import('../../types/cache-interceptor.d.ts').default.CacheValue & { body: Buffer | null }} value + */ + set (key, value) { + const body = value.body + const size = body ? body.byteLength : 0 + + if (size > this.#maxEntrySize) { + return false + } + + const url = this.#makeValueUrl(key) + + const existingValue = this.#findValue(key, true) + if (existingValue) { + // Updating an existing response, let's overwrite it + this.#updateValueQuery.run( + body, + value.deleteAt, + value.statusCode, + value.statusMessage, + value.headers ? JSON.stringify(value.headers) : null, + value.etag ? value.etag : null, + value.cacheControlDirectives ? JSON.stringify(value.cacheControlDirectives) : null, + value.cachedAt, + value.staleAt, + value.deleteAt, + existingValue.id + ) + } else { + this.#prune() + // New response, let's insert it + this.#insertValueQuery.run( + url, + key.method, + body, + value.deleteAt, + value.statusCode, + value.statusMessage, + value.headers ? JSON.stringify(value.headers) : null, + value.etag ? value.etag : null, + value.cacheControlDirectives ? JSON.stringify(value.cacheControlDirectives) : null, + value.vary ? JSON.stringify(value.vary) : null, + value.cachedAt, + value.staleAt, + value.deleteAt + ) + } + + return true + } + /** * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} key * @param {import('../../types/cache-interceptor.d.ts').default.CacheValue} value @@ -260,7 +313,6 @@ module.exports = class SqliteCacheStore { assertCacheKey(key) assertCacheValue(value) - const url = this.#makeValueUrl(key) let size = 0 /** * @type {Buffer[] | null} @@ -285,42 +337,7 @@ module.exports = class SqliteCacheStore { callback() }, final (callback) { - const existingValue = store.#findValue(key, true) - if (existingValue) { - // Updating an existing response, let's overwrite it - store.#updateValueQuery.run( - Buffer.concat(body), - value.deleteAt, - value.statusCode, - value.statusMessage, - value.headers ? JSON.stringify(value.headers) : null, - value.etag ? value.etag : null, - value.cacheControlDirectives ? JSON.stringify(value.cacheControlDirectives) : null, - value.cachedAt, - value.staleAt, - value.deleteAt, - existingValue.id - ) - } else { - store.#prune() - // New response, let's insert it - store.#insertValueQuery.run( - url, - key.method, - Buffer.concat(body), - value.deleteAt, - value.statusCode, - value.statusMessage, - value.headers ? JSON.stringify(value.headers) : null, - value.etag ? value.etag : null, - value.cacheControlDirectives ? JSON.stringify(value.cacheControlDirectives) : null, - value.vary ? JSON.stringify(value.vary) : null, - value.cachedAt, - value.staleAt, - value.deleteAt - ) - } - + store.set(key, { ...value, body: Buffer.concat(body) }) callback() } })