Skip to content

Commit 0c28284

Browse files
committed
re-use aws manifest output to create our manifest
1 parent ff9c04e commit 0c28284

File tree

1 file changed

+28
-30
lines changed

1 file changed

+28
-30
lines changed

packages/cloudflare/src/cli/build/utils/extract-cache-assets-manifest.ts

Lines changed: 28 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,13 @@
1-
import { readFileSync } from "node:fs";
1+
import { existsSync, readFileSync } from "node:fs";
22
import path from "node:path";
33

44
import type { BuildOptions } from "@opennextjs/aws/build/helper.js";
5-
import { getBuildId } from "@opennextjs/aws/build/helper.js";
6-
import { globSync } from "glob";
7-
8-
type CacheInfo = {
9-
type: string;
10-
meta?: {
11-
headers?: {
12-
"x-next-cache-tags"?: string;
13-
};
14-
};
15-
};
5+
6+
type RawManifest = {
7+
tag: { S: string };
8+
path: { S: string };
9+
revalidatedAt: { N: string };
10+
}[];
1611

1712
export type CacheAssetsManifest = {
1813
tags: { [tag: string]: string[] };
@@ -24,25 +19,28 @@ export type CacheAssetsManifest = {
2419
*
2520
* The mapping creates an index of each tags pointing to its paths, and each path pointing to its tags.
2621
*/
27-
export function extractCacheAssetsManifest(buildOpts: BuildOptions) {
28-
const cachePath = path.join(buildOpts.outputDir, "cache");
29-
const buildId = getBuildId(buildOpts);
30-
31-
const manifest = globSync(path.join(cachePath, buildId, "**/*.cache")).reduce<CacheAssetsManifest>(
32-
(acc, p) => {
33-
const { meta } = JSON.parse(readFileSync(p, "utf-8")) as CacheInfo;
34-
const tags = meta?.headers?.["x-next-cache-tags"]?.split(",")?.map((tag) => `${buildId}/${tag}`) ?? [];
35-
36-
const routePath = path.relative(cachePath, p).replace(/\.cache$/, "");
37-
38-
acc.paths[routePath] = tags;
22+
export function extractCacheAssetsManifest(options: BuildOptions): CacheAssetsManifest {
23+
// TODO: Expose the function for getting this data as an adapter-agnostic utility in AWS.
24+
const rawManifestPath = path.join(options.outputDir, "dynamodb-provider", "dynamodb-cache.json");
25+
26+
if (!existsSync(rawManifestPath)) {
27+
return { tags: {}, paths: {} };
28+
}
29+
30+
const rawManifest: RawManifest = JSON.parse(readFileSync(rawManifestPath, "utf-8"));
31+
32+
const manifest = rawManifest.reduce<CacheAssetsManifest>(
33+
(acc, { tag: { S: tag }, path: { S: path } }) => {
34+
if (!acc.paths[path]) {
35+
acc.paths[path] = [tag];
36+
} else {
37+
acc.paths[path].push(tag);
38+
}
3939

40-
for (const tag of tags) {
41-
if (!acc.tags[tag]) {
42-
acc.tags[tag] = [routePath];
43-
} else {
44-
acc.tags[tag].push(routePath);
45-
}
40+
if (!acc.tags[tag]) {
41+
acc.tags[tag] = [path];
42+
} else {
43+
acc.tags[tag].push(path);
4644
}
4745

4846
return acc;

0 commit comments

Comments
 (0)