Skip to content

Commit 1b85d3b

Browse files
committed
share names between files
1 parent 1b62163 commit 1b85d3b

File tree

7 files changed

+48
-29
lines changed

7 files changed

+48
-29
lines changed

.changeset/metal-lemons-sparkle.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
"@opennextjs/cloudflare": patch
33
---
44

5-
feat: auto-populate kv incremental cache
5+
feat: populate kv incremental cache

packages/cloudflare/src/api/overrides/incremental-cache/kv-incremental-cache.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@ import type { CacheValue, IncrementalCache, WithLastModified } from "@opennextjs
33
import { IgnorableError } from "@opennextjs/aws/utils/error.js";
44

55
import { getCloudflareContext } from "../../cloudflare-context.js";
6-
import { debugCache, IncrementalCacheEntry } from "../internal.js";
6+
import { debugCache, FALLBACK_BUILD_ID, IncrementalCacheEntry } from "../internal.js";
77

88
export const NAME = "cf-kv-incremental-cache";
99

10+
export const BINDING_NAME = "NEXT_INC_CACHE_KV";
11+
1012
/**
1113
* Open Next cache based on Cloudflare KV.
1214
*
@@ -21,7 +23,7 @@ class KVIncrementalCache implements IncrementalCache {
2123
key: string,
2224
isFetch?: IsFetch
2325
): Promise<WithLastModified<CacheValue<IsFetch>> | null> {
24-
const kv = getCloudflareContext().env.NEXT_INC_CACHE_KV;
26+
const kv = getCloudflareContext().env[BINDING_NAME];
2527
if (!kv) throw new IgnorableError("No KV Namespace");
2628

2729
debugCache(`Get ${key}`);
@@ -53,7 +55,7 @@ class KVIncrementalCache implements IncrementalCache {
5355
value: CacheValue<IsFetch>,
5456
isFetch?: IsFetch
5557
): Promise<void> {
56-
const kv = getCloudflareContext().env.NEXT_INC_CACHE_KV;
58+
const kv = getCloudflareContext().env[BINDING_NAME];
5759
if (!kv) throw new IgnorableError("No KV Namespace");
5860

5961
debugCache(`Set ${key}`);
@@ -76,7 +78,7 @@ class KVIncrementalCache implements IncrementalCache {
7678
}
7779

7880
async delete(key: string): Promise<void> {
79-
const kv = getCloudflareContext().env.NEXT_INC_CACHE_KV;
81+
const kv = getCloudflareContext().env[BINDING_NAME];
8082
if (!kv) throw new IgnorableError("No KV Namespace");
8183

8284
debugCache(`Delete ${key}`);
@@ -89,7 +91,7 @@ class KVIncrementalCache implements IncrementalCache {
8991
}
9092

9193
protected getKVKey(key: string, isFetch?: boolean): string {
92-
const buildId = process.env.NEXT_BUILD_ID ?? "no-build-id";
94+
const buildId = process.env.NEXT_BUILD_ID ?? FALLBACK_BUILD_ID;
9395
return `${buildId}/${key}.${isFetch ? "fetch" : "cache"}`.replace(/\/+/g, "/");
9496
}
9597
}

packages/cloudflare/src/api/overrides/incremental-cache/r2-incremental-cache.ts

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,15 @@ import type { CacheValue, IncrementalCache, WithLastModified } from "@opennextjs
33
import { IgnorableError } from "@opennextjs/aws/utils/error.js";
44

55
import { getCloudflareContext } from "../../cloudflare-context.js";
6-
import { debugCache } from "../internal.js";
6+
import { debugCache, FALLBACK_BUILD_ID } from "../internal.js";
77

88
export const NAME = "cf-r2-incremental-cache";
99

10+
export const BINDING_NAME = "NEXT_INC_CACHE_R2_BUCKET";
11+
12+
export const PREFIX_ENV_NAME = "NEXT_INC_CACHE_R2_PREFIX";
13+
export const DEFAULT_PREFIX = "incremental-cache";
14+
1015
/**
1116
* An instance of the Incremental Cache that uses an R2 bucket (`NEXT_INC_CACHE_R2_BUCKET`) as it's
1217
* underlying data store.
@@ -21,7 +26,7 @@ class R2IncrementalCache implements IncrementalCache {
2126
key: string,
2227
isFetch?: IsFetch
2328
): Promise<WithLastModified<CacheValue<IsFetch>> | null> {
24-
const r2 = getCloudflareContext().env.NEXT_INC_CACHE_R2_BUCKET;
29+
const r2 = getCloudflareContext().env[BINDING_NAME];
2530
if (!r2) throw new IgnorableError("No R2 bucket");
2631

2732
debugCache(`Get ${key}`);
@@ -45,7 +50,7 @@ class R2IncrementalCache implements IncrementalCache {
4550
value: CacheValue<IsFetch>,
4651
isFetch?: IsFetch
4752
): Promise<void> {
48-
const r2 = getCloudflareContext().env.NEXT_INC_CACHE_R2_BUCKET;
53+
const r2 = getCloudflareContext().env[BINDING_NAME];
4954
if (!r2) throw new IgnorableError("No R2 bucket");
5055

5156
debugCache(`Set ${key}`);
@@ -58,7 +63,7 @@ class R2IncrementalCache implements IncrementalCache {
5863
}
5964

6065
async delete(key: string): Promise<void> {
61-
const r2 = getCloudflareContext().env.NEXT_INC_CACHE_R2_BUCKET;
66+
const r2 = getCloudflareContext().env[BINDING_NAME];
6267
if (!r2) throw new IgnorableError("No R2 bucket");
6368

6469
debugCache(`Delete ${key}`);
@@ -71,9 +76,9 @@ class R2IncrementalCache implements IncrementalCache {
7176
}
7277

7378
protected getR2Key(key: string, isFetch?: boolean): string {
74-
const directory = getCloudflareContext().env.NEXT_INC_CACHE_R2_PREFIX ?? "incremental-cache";
79+
const directory = getCloudflareContext().env[PREFIX_ENV_NAME] ?? DEFAULT_PREFIX;
7580

76-
return `${directory}/${process.env.NEXT_BUILD_ID ?? "no-build-id"}/${key}.${isFetch ? "fetch" : "cache"}`.replace(
81+
return `${directory}/${process.env.NEXT_BUILD_ID ?? FALLBACK_BUILD_ID}/${key}.${isFetch ? "fetch" : "cache"}`.replace(
7782
/\/+/g,
7883
"/"
7984
);

packages/cloudflare/src/api/overrides/incremental-cache/regional-cache.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { error } from "@opennextjs/aws/adapters/logger.js";
22
import { CacheValue, IncrementalCache, WithLastModified } from "@opennextjs/aws/types/overrides.js";
33

44
import { getCloudflareContext } from "../../cloudflare-context.js";
5-
import { debugCache, IncrementalCacheEntry } from "../internal.js";
5+
import { debugCache, FALLBACK_BUILD_ID, IncrementalCacheEntry } from "../internal.js";
66
import { NAME as KV_CACHE_NAME } from "./kv-incremental-cache.js";
77

88
const ONE_MINUTE_IN_SECONDS = 60;
@@ -129,7 +129,7 @@ class RegionalCache implements IncrementalCache {
129129
protected getCacheKey(key: string, isFetch?: boolean) {
130130
return new Request(
131131
new URL(
132-
`${process.env.NEXT_BUILD_ID ?? "no-build-id"}/${key}.${isFetch ? "fetch" : "cache"}`,
132+
`${process.env.NEXT_BUILD_ID ?? FALLBACK_BUILD_ID}/${key}.${isFetch ? "fetch" : "cache"}`,
133133
"http://cache.local"
134134
)
135135
);

packages/cloudflare/src/api/overrides/internal.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,5 @@ export const debugCache = (name: string, ...args: unknown[]) => {
1010
console.log(`[${name}] `, ...args);
1111
}
1212
};
13+
14+
export const FALLBACK_BUILD_ID = "no-build-id";

packages/cloudflare/src/api/overrides/tag-cache/d1-next-tag-cache.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@ import type { NextModeTagCache } from "@opennextjs/aws/types/overrides.js";
44
import { RecoverableError } from "@opennextjs/aws/utils/error.js";
55

66
import { getCloudflareContext } from "../../cloudflare-context.js";
7-
import { debugCache } from "../internal.js";
7+
import { debugCache, FALLBACK_BUILD_ID } from "../internal.js";
88

99
export const NAME = "d1-next-mode-tag-cache";
1010

11+
export const BINDING_NAME = "NEXT_TAG_CACHE_D1";
12+
1113
export class D1NextModeTagCache implements NextModeTagCache {
1214
readonly mode = "nextMode" as const;
1315
readonly name = NAME;
@@ -46,8 +48,7 @@ export class D1NextModeTagCache implements NextModeTagCache {
4648
}
4749

4850
private getConfig() {
49-
const cfEnv = getCloudflareContext().env;
50-
const db = cfEnv.NEXT_TAG_CACHE_D1;
51+
const db = getCloudflareContext().env[BINDING_NAME];
5152

5253
if (!db) debugCache("No D1 database found");
5354

@@ -71,7 +72,7 @@ export class D1NextModeTagCache implements NextModeTagCache {
7172
}
7273

7374
protected getBuildId() {
74-
return process.env.NEXT_BUILD_ID ?? "no-build-id";
75+
return process.env.NEXT_BUILD_ID ?? FALLBACK_BUILD_ID;
7576
}
7677
}
7778

packages/cloudflare/src/cli/commands/populate-cache.ts

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,20 @@ import { globSync } from "glob";
1414
import { tqdm } from "ts-tqdm";
1515
import { unstable_readConfig } from "wrangler";
1616

17-
import { NAME as KV_CACHE_NAME } from "../../api/overrides/incremental-cache/kv-incremental-cache.js";
18-
import { NAME as R2_CACHE_NAME } from "../../api/overrides/incremental-cache/r2-incremental-cache.js";
19-
import { NAME as D1_TAG_NAME } from "../../api/overrides/tag-cache/d1-next-tag-cache.js";
17+
import {
18+
BINDING_NAME as KV_CACHE_BINDING_NAME,
19+
NAME as KV_CACHE_NAME,
20+
} from "../../api/overrides/incremental-cache/kv-incremental-cache.js";
21+
import {
22+
BINDING_NAME as R2_CACHE_BINDING_NAME,
23+
DEFAULT_PREFIX as R2_CACHE_DEFAULT_PREFIX,
24+
NAME as R2_CACHE_NAME,
25+
PREFIX_ENV_NAME as R2_CACHE_PREFIX_ENV_NAME,
26+
} from "../../api/overrides/incremental-cache/r2-incremental-cache.js";
27+
import {
28+
NAME as D1_TAG_NAME,
29+
BINDING_NAME as D1_TAG_BINDING_NAME,
30+
} from "../../api/overrides/tag-cache/d1-next-tag-cache.js";
2031
import type { WranglerTarget } from "../utils/run-wrangler.js";
2132
import { runWrangler } from "../utils/run-wrangler.js";
2233

@@ -66,18 +77,16 @@ export async function populateCache(
6677
case R2_CACHE_NAME: {
6778
const config = unstable_readConfig({ env: populateCacheOptions.environment });
6879

69-
const binding = (config.r2_buckets ?? []).find(
70-
({ binding }) => binding === "NEXT_INC_CACHE_R2_BUCKET"
71-
);
80+
const binding = (config.r2_buckets ?? []).find(({ binding }) => binding === R2_CACHE_BINDING_NAME);
7281

7382
if (!binding) {
74-
throw new Error("No R2 binding 'NEXT_INC_CACHE_R2_BUCKET' found!");
83+
throw new Error(`No R2 binding '${R2_CACHE_BINDING_NAME}' found!`);
7584
}
7685

7786
const bucket = binding.bucket_name;
7887

7988
if (!bucket) {
80-
throw new Error("R2 binding 'NEXT_INC_CACHE_R2_BUCKET' should have a 'bucket_name'");
89+
throw new Error(`R2 binding '${R2_CACHE_BINDING_NAME}' should have a 'bucket_name'`);
8190
}
8291

8392
logger.info("\nPopulating R2 incremental cache...");
@@ -86,7 +95,7 @@ export async function populateCache(
8695
for (const { fsPath, destPath } of tqdm(assets)) {
8796
const fullDestPath = path.join(
8897
bucket,
89-
process.env.NEXT_INC_CACHE_R2_PREFIX ?? "incremental-cache",
98+
process.env[R2_CACHE_PREFIX_ENV_NAME] ?? R2_CACHE_DEFAULT_PREFIX,
9099
destPath
91100
);
92101

@@ -111,7 +120,7 @@ export async function populateCache(
111120
[
112121
"kv key put",
113122
JSON.stringify(destPath),
114-
"--binding NEXT_INC_CACHE_KV",
123+
`--binding ${JSON.stringify(KV_CACHE_BINDING_NAME)}`,
115124
`--path ${JSON.stringify(fsPath)}`,
116125
],
117126
{ ...populateCacheOptions, logging: "error" }
@@ -135,7 +144,7 @@ export async function populateCache(
135144
options,
136145
[
137146
"d1 execute",
138-
"NEXT_TAG_CACHE_D1",
147+
JSON.stringify(D1_TAG_BINDING_NAME),
139148
`--command "CREATE TABLE IF NOT EXISTS revalidations (tag TEXT NOT NULL, revalidatedAt INTEGER NOT NULL, UNIQUE(tag) ON CONFLICT REPLACE);"`,
140149
],
141150
{ ...populateCacheOptions, logging: "error" }

0 commit comments

Comments
 (0)