ui5plugin-parser
Version:
94 lines (93 loc) • 3.96 kB
JavaScript
;
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;