UNPKG

@tripsnek/tmf

Version:

TypeScript Modeling Framework - A TypeScript port of the Eclipse Modeling Framework (EMF)

98 lines 3.43 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.EcoreParser = void 0; const ecore_string_parser_1 = require("./ecore-string-parser"); const environment_1 = require("../utils/environment"); const xml_to_js_parser_1 = require("./xml-to-js-parser"); /** * Parses an XML Ecore file into a TMF metamodel. */ class EcoreParser { stringParser = new ecore_string_parser_1.EcoreStringParser(); /** * Async version of parse for better error handling */ async parseAsync(ecoreFilePath) { const ecoreXml = await this.fileToXmlStringAsync(ecoreFilePath); return this.parseFromXmlStringAsync(ecoreXml); } async fileToXmlStringAsync(ecoreFilePath) { environment_1.Environment.requireNodeEnvironment('File parsing'); try { const fs = await (0, environment_1.safeDynamicImport)('fs'); const path = await (0, environment_1.safeDynamicImport)('path'); const message = "Parsing " + ecoreFilePath + " from filesystem"; // console.log(message); return fs.readFileSync(path.resolve(ecoreFilePath), "utf8"); } catch (error) { throw new Error(`File system access failed: ${error.message}. This operation requires Node.js environment.`); } } /** * Parses an Ecore XML string into a TMF metamodel. * @param ecoreXml The XML string to parse * @returns The root EPackage containing the parsed metamodel */ parseFromXmlString(ecoreXml) { const ecoreJs = this.xmlToJs(ecoreXml); return this.stringParser.parseFromJs(ecoreJs); } /** * Async version of parseFromXmlString */ async parseFromXmlStringAsync(ecoreXml) { const ecoreJs = await this.xmlToJsAsync(ecoreXml); return this.stringParser.parseFromJs(ecoreJs); } xmlToJs(ecoreXml) { // Use our new synchronous parser for both Node.js and browser try { return (0, xml_to_js_parser_1.parseStringSync)(ecoreXml); } catch (error) { console.log("ERROR ON PARSE"); console.log(error); throw error; } } async xmlToJsAsync(ecoreXml) { // Use our new asynchronous parser for both Node.js and browser try { return await (0, xml_to_js_parser_1.parseString)(ecoreXml); } catch (error) { console.log("ERROR ON PARSE"); console.log(error); throw error; } } /** * Check if file-based parsing is supported */ static isFileParsingSupported() { return environment_1.Environment.isNode; } /** * Check if XML string parsing is supported */ static isXmlParsingSupported() { // Our parser works in both Node.js and browser environments return true; } /** * Get supported operations in current environment */ static getSupportedOperations() { const operations = []; if (this.isXmlParsingSupported()) { operations.push('parseFromXmlString', 'parseFromXmlStringAsync'); } if (this.isFileParsingSupported()) { operations.push('parse', 'parseAsync', 'fileToXmlString', 'fileToXmlStringAsync'); } return operations; } } exports.EcoreParser = EcoreParser; //# sourceMappingURL=ecoreparser.js.map