UNPKG

ui5plugin-parser

Version:
82 lines (81 loc) 3.03 kB
"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;