From a38e76e9c58e90df77b46221fb894598b85631e0 Mon Sep 17 00:00:00 2001 From: Victor Berchet Date: Mon, 14 Apr 2025 19:34:06 +0200 Subject: [PATCH] fix(tagCache): do not call writeTags with an empty list --- .changeset/lemon-needles-fold.md | 5 +++++ packages/open-next/src/adapters/cache.ts | 7 ++++++- packages/tests-unit/tests/adapters/cache.test.ts | 8 ++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 .changeset/lemon-needles-fold.md diff --git a/.changeset/lemon-needles-fold.md b/.changeset/lemon-needles-fold.md new file mode 100644 index 000000000..638f83659 --- /dev/null +++ b/.changeset/lemon-needles-fold.md @@ -0,0 +1,5 @@ +--- +"@opennextjs/aws": patch +--- + +fix(tagCache): do not call writeTags with an empty list diff --git a/packages/open-next/src/adapters/cache.ts b/packages/open-next/src/adapters/cache.ts index 9a5719433..fe573f7d7 100644 --- a/packages/open-next/src/adapters/cache.ts +++ b/packages/open-next/src/adapters/cache.ts @@ -311,8 +311,12 @@ export default class Cache { if (config?.disableTagCache || config?.disableIncrementalCache) { return; } + const _tags = Array.isArray(tags) ? tags : [tags]; + if (_tags.length === 0) { + return; + } + try { - const _tags = Array.isArray(tags) ? tags : [tags]; if (globalThis.tagCache.mode === "nextMode") { const paths = (await globalThis.tagCache.getPathsByTags?.(_tags)) ?? []; @@ -336,6 +340,7 @@ export default class Cache { } return; } + for (const tag of _tags) { debug("revalidateTag", tag); // Find all keys with the given tag diff --git a/packages/tests-unit/tests/adapters/cache.test.ts b/packages/tests-unit/tests/adapters/cache.test.ts index eb7dafae3..4dff3166c 100644 --- a/packages/tests-unit/tests/adapters/cache.test.ts +++ b/packages/tests-unit/tests/adapters/cache.test.ts @@ -587,6 +587,14 @@ describe("CacheHandler", () => { expect(invalidateCdnHandler.invalidatePaths).not.toHaveBeenCalled(); }); + it("Should not call writeTags when the tag list is empty for nextMode", async () => { + globalThis.tagCache.mode = "nextMode"; + await cache.revalidateTag([]); + + expect(tagCache.writeTags).not.toHaveBeenCalled(); + expect(invalidateCdnHandler.invalidatePaths).not.toHaveBeenCalled(); + }); + it("Should call writeTags and invalidateCdnHandler.invalidatePaths for nextMode that supports getPathsByTags", async () => { globalThis.tagCache.mode = "nextMode"; globalThis.tagCache.getPathsByTags = vi