@tripsnek/tmf
Version:
TypeScript Modeling Framework - A TypeScript port of the Eclipse Modeling Framework (EMF)
67 lines (65 loc) • 2.52 kB
JavaScript
;
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