UNPKG

ui5plugin-parser

Version:
75 lines (74 loc) 4.19 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.UI5TSParser = void 0; const path = require("path"); const ts_morph_1 = require("ts-morph"); const PackageParserConfigHandler_1 = require("../classes/config/PackageParserConfigHandler"); const HTTPHandler_1 = require("../classes/http/HTTPHandler"); const URLBuilder_1 = require("../classes/http/URLBuilder"); const SAPIcons_1 = require("../classes/librarydata/SAPIcons"); const SAPNodeDAO_1 = require("../classes/librarydata/SAPNodeDAO"); const UI5MetadataDAO_1 = require("../classes/librarydata/UI5MetadataDAO"); const TSClassFactory_1 = require("../classes/parsing/ui5class/factory/TSClassFactory"); const TSFileReader_1 = require("../classes/parsing/util/filereader/TSFileReader"); const ResourceModelData_1 = require("../classes/parsing/util/i18n/ResourceModelData"); const TextDocumentTransformer_1 = require("../classes/parsing/util/textdocument/TextDocumentTransformer"); const XMLParser_1 = require("../classes/parsing/util/xml/XMLParser"); const ReusableMethods_1 = require("../classes/ReusableMethods"); const AbstractUI5Parser_1 = require("./abstraction/AbstractUI5Parser"); class UI5TSParser extends AbstractUI5Parser_1.AbstractUI5Parser { constructor(params, packagePath) { super(packagePath); this.tsProjects = []; this.workspaceFolder = params.workspaceFolder; this.classFactory = params?.classFactory || new TSClassFactory_1.TSClassFactory(); this.classFactory.setParser(this); this.configHandler = params?.configHandler || new PackageParserConfigHandler_1.PackageParserConfigHandler(packagePath); this.fileReader = params?.fileReader || new TSFileReader_1.TSFileReader(this.configHandler, this.classFactory); this.fileReader.setParser(this); this.icons = new SAPIcons_1.SAPIcons(this); this.metadataDAO = new UI5MetadataDAO_1.UI5MetadataDAO(this); this.nodeDAO = new SAPNodeDAO_1.SAPNodeDAO(this); this.urlBuilder = new URLBuilder_1.URLBuilder(this.configHandler); this.httpHandler = new HTTPHandler_1.HTTPHandler(this.configHandler); this.resourceModelData = new ResourceModelData_1.ResourceModelData(this); this.textDocumentTransformer = new TextDocumentTransformer_1.TextDocumentTransformer(this); this.reusableMethods = new ReusableMethods_1.ReusableMethods(this.textDocumentTransformer); this.xmlParser = new XMLParser_1.XMLParser(this); } getProject(fsPath) { return this.tsProjects.find(tsProject => { const [rootDirectory] = tsProject.getRootDirectories(); return (!!tsProject.getSourceFile(fsPath) || (rootDirectory && path.normalize(fsPath).includes(path.normalize(rootDirectory.getPath())))); }); } processSourceFiles(project, changedFiles) { const tsSourceFiles = changedFiles.filter(sourceFile => !sourceFile.compilerNode.fileName.endsWith(".d.ts")); tsSourceFiles.forEach(sourceFile => { const className = this.fileReader.getClassNameFromPath(sourceFile.compilerNode.fileName); if (className) { this.classFactory.setNewCodeForClass(className, sourceFile.getFullText(), false, sourceFile, project, false); } }); } initializeCustomClasses() { const { project, sourceFiles } = this._initializeTS(this.workspaceFolder.fsPath); this.processSourceFiles(project, sourceFiles); } _initializeTS(folderPath) { const configPath = ts_morph_1.ts.findConfigFile(folderPath, ts_morph_1.ts.sys.fileExists, "tsconfig.json"); if (!configPath) { throw new Error("Could not find a valid 'tsconfig.json'."); } const project = new ts_morph_1.Project({ tsConfigFilePath: configPath }); this.tsProjects.push(project); const sourceFiles = project.getSourceFiles(); const pathMap = project.getCompilerOptions().paths; const paths = pathMap ? Object.keys(pathMap).flatMap(key => pathMap[key]) : []; return { paths, sourceFiles, project }; } } exports.UI5TSParser = UI5TSParser;