11import { getLogger } from "@ui5/logger" ;
22import { fetchCdn } from "./cdnHelper.js" ;
33
4- const log = getLogger ( "utils:dataStorageHelper " ) ;
4+ const log = getLogger ( "utils:ui5Manifest " ) ;
55const MAPPING_URL = "https://raw.githubusercontent.com/SAP/ui5-manifest/main/mapping.json" ;
66const LATEST_SCHEMA_URL = "https://raw.githubusercontent.com/SAP/ui5-manifest/main/schema.json" ;
7+ const schemaCache = new Map < string , Promise < object > > ( ) ;
78
89async 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+
1435export 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