ui5plugin-parser
Version:
82 lines (81 loc) • 3.03 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.UI5MetadataPreloader = void 0;
const URLBuilder_1 = require("../http/URLBuilder");
const IFileReader_1 = require("../parsing/util/filereader/IFileReader");
class UI5MetadataPreloader {
constructor(parser) {
this._libNames = {};
this.namespaceDesignTimes = {};
this.libsPreloaded = new Promise(resolve => {
this._resolveLibPreload = resolve;
});
this.parser = parser;
}
async preloadLibs(nodes) {
let cache = this._loadCache();
if (!cache) {
const promises = [];
nodes.forEach((node) => {
this._getUniqueLibNames(node);
});
for (const i in this._libNames) {
promises.push(this.getMetadataForLib(i));
}
return Promise.all(promises).then(() => {
cache = this.namespaceDesignTimes;
this._writeCache();
this._resolveLibPreload(cache);
});
}
else {
this.namespaceDesignTimes = cache;
this._resolveLibPreload(cache);
return new Promise(resolve => resolve(cache));
}
}
async getMetadataForLib(lib) {
return await this._fetchMetadataForLib(lib);
}
_fetchMetadataForLib(lib) {
return new Promise((resolve, reject) => {
if (this.namespaceDesignTimes[lib]) {
if (this.namespaceDesignTimes[lib].then) {
this.namespaceDesignTimes[lib].then(() => {
resolve(this.namespaceDesignTimes[lib]);
});
}
else {
resolve(this.namespaceDesignTimes[lib]);
}
}
else {
setTimeout(async () => {
const readPath = new URLBuilder_1.URLBuilder(this.parser.configHandler).getDesignTimeUrlForLib(lib);
this.namespaceDesignTimes[lib] = this.parser.httpHandler.get(readPath);
try {
this.namespaceDesignTimes[lib] = await this.namespaceDesignTimes[lib];
resolve(this.namespaceDesignTimes[lib]);
}
catch (error) {
reject(error);
}
}, Math.round(Math.random() * 150));
}
});
}
_loadCache() {
return this.parser.fileReader.getCache(IFileReader_1.IFileReader.CacheType.Metadata);
}
_writeCache() {
const cache = JSON.stringify(this.namespaceDesignTimes);
this.parser.fileReader.setCache(IFileReader_1.IFileReader.CacheType.Metadata, cache);
}
_getUniqueLibNames(node) {
this._libNames[node.getLib()] = "";
if (node.nodes) {
node.nodes.forEach(this._getUniqueLibNames, this);
}
}
}
exports.UI5MetadataPreloader = UI5MetadataPreloader;