Skip to content

Commit da333df

Browse files
committed
refactor(ui5Manifest.ts): Cache the schema
1 parent acc3ee0 commit da333df

File tree

1 file changed

+23
-6
lines changed

1 file changed

+23
-6
lines changed

src/utils/ui5Manifest.ts

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,37 @@
11
import {getLogger} from "@ui5/logger";
22
import {fetchCdn} from "./cdnHelper.js";
33

4-
const log = getLogger("utils:dataStorageHelper");
4+
const log = getLogger("utils:ui5Manifest");
55
const MAPPING_URL = "https://raw.githubusercontent.com/SAP/ui5-manifest/main/mapping.json";
66
const LATEST_SCHEMA_URL = "https://raw.githubusercontent.com/SAP/ui5-manifest/main/schema.json";
7+
const schemaCache = new Map<string, Promise<object>>();
78

89
async function getUI5toManifestVersionMap() {
910
const mapping = await fetchCdn(MAPPING_URL);
1011

1112
return mapping as Record<string, string>;
1213
}
1314

15+
async function fetchSchema(manifestVersion: string) {
16+
if (schemaCache.has(manifestVersion)) {
17+
log.info(`Loading cached schema for manifest version: ${manifestVersion}`);
18+
19+
try {
20+
const schema = await schemaCache.get(manifestVersion)!;
21+
return schema;
22+
} catch {
23+
schemaCache.delete(manifestVersion);
24+
}
25+
}
26+
27+
log.info(`Fetching schema for manifest version: ${manifestVersion}`);
28+
schemaCache.set(manifestVersion, fetchCdn(LATEST_SCHEMA_URL));
29+
const schema = await schemaCache.get(manifestVersion)!;
30+
log.info(`Fetched UI5 manifest schema from ${LATEST_SCHEMA_URL}`);
31+
32+
return schema;
33+
}
34+
1435
export async function getLatestManifestVersion() {
1536
const versionMap = await getUI5toManifestVersionMap();
1637

@@ -26,9 +47,5 @@ export async function getManifestSchema(manifestVersion: string) {
2647
throw new Error(`Only 'latest' manifest version is supported, but got '${manifestVersion}'.`);
2748
}
2849

29-
// Fetch the UI5 manifest schema
30-
const schema = await fetchCdn(LATEST_SCHEMA_URL);
31-
log.info(`Fetched UI5 manifest schema from ${LATEST_SCHEMA_URL}`);
32-
33-
return schema;
50+
return await fetchSchema(manifestVersion);
3451
}

0 commit comments

Comments
 (0)