Skip to content

Commit 05e911f

Browse files
authored
add(dev-overrides): In memory tagCache with nextMode (#964)
* add(dev-overrides): In memory tagCache with nextMode * changeset * changeset * Delete .changeset/gentle-ducks-mix.md * fix changeset * review * review * mv const
1 parent df136b1 commit 05e911f

File tree

4 files changed

+62
-1
lines changed

4 files changed

+62
-1
lines changed

.changeset/few-wombats-design.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@opennextjs/aws": patch
3+
---
4+
5+
add(dev-overrides): In memory tagCache with nextMode

examples/app-router/open-next.config.local.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ export default {
77
converter: "node",
88
incrementalCache: "fs-dev",
99
queue: "direct",
10-
tagCache: "dummy",
10+
tagCache: "fs-dev-nextMode",
1111
},
1212
},
1313

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import type { NextModeTagCache } from "types/overrides";
2+
import { debug } from "../../adapters/logger";
3+
4+
const tagsMap = new Map<string, number>();
5+
6+
export default {
7+
name: "fs-dev-nextMode",
8+
mode: "nextMode",
9+
getLastRevalidated: async (tags: string[]) => {
10+
if (globalThis.openNextConfig.dangerous?.disableTagCache) {
11+
return 0;
12+
}
13+
14+
let lastRevalidated = 0;
15+
16+
tags.forEach((tag) => {
17+
const tagTime = tagsMap.get(tag);
18+
if (tagTime && tagTime > lastRevalidated) {
19+
lastRevalidated = tagTime;
20+
}
21+
});
22+
23+
debug("getLastRevalidated result:", lastRevalidated);
24+
return lastRevalidated;
25+
},
26+
hasBeenRevalidated: async (tags: string[], lastModified?: number) => {
27+
if (globalThis.openNextConfig.dangerous?.disableTagCache) {
28+
return false;
29+
}
30+
31+
const hasRevalidatedTag = tags.some((tag) => {
32+
const tagRevalidatedAt = tagsMap.get(tag);
33+
return tagRevalidatedAt ? tagRevalidatedAt > (lastModified ?? 0) : false;
34+
});
35+
36+
debug("hasBeenRevalidated result:", hasRevalidatedTag);
37+
return hasRevalidatedTag;
38+
},
39+
writeTags: async (tags: string[]) => {
40+
if (
41+
globalThis.openNextConfig.dangerous?.disableTagCache ||
42+
tags.length === 0
43+
) {
44+
return;
45+
}
46+
47+
debug("writeTags", { tags: tags });
48+
49+
tags.forEach((tag) => {
50+
tagsMap.set(tag, Date.now());
51+
});
52+
53+
debug("writeTags completed, written", tags.length, "tags");
54+
},
55+
} satisfies NextModeTagCache;

packages/open-next/src/types/open-next.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ export type IncludedTagCache =
175175
| "dynamodb-lite"
176176
| "dynamodb-nextMode"
177177
| "fs-dev"
178+
| "fs-dev-nextMode"
178179
| "dummy";
179180

180181
export type IncludedImageLoader =

0 commit comments

Comments
 (0)