UNPKG

@tripsnek/tmf

Version:

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

67 lines (65 loc) 2.52 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TGeneratorApi = void 0; const tgen_utils_1 = require("./tgen-utils"); /** * Source code generation for API interface .ts files for EClasses. * * @tripsnek */ class TGeneratorApi { generate(eClass, toImport) { const isEcore = eClass.getEPackage().getName() == 'ecore'; const pkg = eClass.getEPackage(); const pkgClassName = tgen_utils_1.TGenUtils.genPackageClassName(pkg); const pkgFileName = tgen_utils_1.TGenUtils.genPackageFileName(pkg); //if generating async service for the class, name it *Async const className = eClass.getName(); return `${isEcore ? tgen_utils_1.TGenUtils.ECORE_DEFAULT_IMPORTS : tgen_utils_1.TGenUtils.DEFAULT_IMPORTS} ${tgen_utils_1.TGenUtils.genApiImports(eClass, toImport, `.`)}import { ${pkgClassName} } from '../${pkgFileName}'; /** * Source-gen API for ${className}. */ export interface ${className} ${this.generateSuperTypes(eClass)} { ${this.generateFields(eClass)}${this.generateOperations(eClass)}} `; } generateSuperTypes(eClass) { let result = 'extends'; if (eClass.getESuperTypes().size() < 1) { if (eClass.getName() == 'EObject') result = ''; else result += ' EObject'; } else { for (let i = 0; i < eClass.getESuperTypes().size(); i++) { const superType = eClass.getESuperTypes().get(i); result += `${i > 0 ? ',' : ''} ${superType.getName()}`; } } return result; } generateFields(eClass) { let result = ''; for (const field of eClass.getEStructuralFeatures()) { //do not generate getters/setters on public API for companion id fields // Generate getters for all fields result += ` ${tgen_utils_1.TGenUtils.getterSig(field)};\n`; // Generate setters for changeable references if (!field.isMany() && field.isChangeable()) { result += ` ${tgen_utils_1.TGenUtils.setterSig(field)};\n`; } } return result; } generateOperations(eClass) { let result = ''; for (const eop of eClass.getEOperations()) { result += ' ' + tgen_utils_1.TGenUtils.eopSignature(eop) + ';\n'; } return result; } } exports.TGeneratorApi = TGeneratorApi; //# sourceMappingURL=tgenerator-api.js.map