UNPKG

ui5plugin-parser

Version:
94 lines (93 loc) 3.96 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const AbstractCustomClass_1 = require("../../classes/parsing/ui5class/AbstractCustomClass"); const AbstractFileReader_1 = require("../../classes/parsing/util/filereader/AbstractFileReader"); class ParserPool { static register(parser) { this._parsers.push(parser); } static deregister(parserToDeregister) { const parserRegistered = this._parsers.some(cachedParser => cachedParser === parserToDeregister); if (parserRegistered) { const indexOfParser = this._parsers.indexOf(parserToDeregister); this._parsers.splice(indexOfParser, 1); } } static getParserForCustomClass(className) { const manifests = this.getAllManifests(); const manifest = manifests.find(manifest => className.startsWith(manifest.componentName)); return (manifest && this._parsers.find(parser => { return parser.fileReader.getAllManifests().includes(manifest); })); } static getParserForFile(fsPath) { const fsPathLower = (0, AbstractFileReader_1.toNative)(fsPath).toLowerCase(); const manifests = this.getAllManifests(); const manifest = manifests.find(manifest => fsPathLower.startsWith(manifest.fsPath.toLowerCase())); return (manifest && this._parsers.find(parser => { return parser.fileReader.getAllManifests().includes(manifest); })); } static getAllParsers() { return this._parsers; } static getAllParsersExcept(except) { return this.getAllParsers().filter(parser => parser !== except); } static getAllFileReaders() { return this._parsers.map(parser => parser.fileReader); } static getAllFileReadersExcept(except) { return this.getAllFileReaders().filter(fileReader => fileReader !== except); } static getAllFragments() { return this.getAllFileReaders().flatMap(fileReader => fileReader.getAllFragments()); } static getFragment(fragmentName) { const fileReaders = ParserPool.getAllFileReaders(); const fileReader = fileReaders.find(fileReader => fileReader.getFragment(fragmentName)); return fileReader?.getFragment(fragmentName); } static getAllViews() { return this.getAllFileReaders().flatMap(fileReader => fileReader.getAllViews()); } static getAllManifests() { const manifests = this.getAllFileReaders().flatMap(fileReader => fileReader.getAllManifests()); const sortedByNameManifests = manifests.sort((firstManifest, secondManifest) => { return secondManifest.componentName.length - firstManifest.componentName.length; }); return sortedByNameManifests; } static getManifestForClass(className = "") { const manifests = this.getAllManifests(); const manifest = manifests.find(manifest => className.startsWith(manifest.componentName)); return manifest; } static getAllExistentUIClasses() { return this.getAllParsers().reduce((UIClasses, parser) => { const UIClassesFromCurrentParser = parser.classFactory.getAllExistentUIClasses(); UIClasses = { ...UIClasses, ...UIClassesFromCurrentParser }; return UIClasses; }, {}); } static getAllCustomUIClasses() { const allUIClasses = this.getAllExistentUIClasses(); return Object.keys(allUIClasses) .filter(UIClassName => { return allUIClasses[UIClassName] instanceof AbstractCustomClass_1.AbstractCustomClass; }) .map(UIClassName => allUIClasses[UIClassName]); } static clearCache() { this._parsers.forEach(parser => { parser.fileReader.clearCache(); }); } } ParserPool._parsers = []; exports.default = ParserPool;