UNPKG

@tripsnek/tmf

Version:

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

63 lines (61 loc) 8.21 kB
import { TGenUtils as DU } from './tgen-utils.js'; /** * Source code generation for API interface .ts files for EClasses. * * @tripsnek */ export class TGeneratorApi { generate(eClass, toImport) { const isEcore = eClass.getEPackage().getName() == 'ecore'; const pkg = eClass.getEPackage(); const pkgClassName = DU.genPackageClassName(pkg); const pkgFileName = DU.genPackageFileName(pkg); //if generating async service for the class, name it *Async const className = eClass.getName(); return `${isEcore ? DU.ECORE_DEFAULT_IMPORTS : DU.DEFAULT_IMPORTS} ${DU.genApiImports(eClass, toImport, `.`)}import { ${pkgClassName} } from '../${pkgFileName}.js'; /** * 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 += ` ${DU.getterSig(field)};\n`; // Generate setters for changeable references if (!field.isMany() && field.isChangeable()) { result += ` ${DU.setterSig(field)};\n`; } } return result; } generateOperations(eClass) { let result = ''; for (const eop of eClass.getEOperations()) { result += ' ' + DU.eopSignature(eop) + ';\n'; } return result; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGdlbmVyYXRvci1hcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3NvdXJjZS1nZW5lcmF0b3JzL3RnZW5lcmF0b3ItYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLElBQUksRUFBRSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHbEQ7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBQ2pCLFFBQVEsQ0FBQyxNQUFjLEVBQUUsUUFBMEI7UUFDeEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLE9BQU8sQ0FBQztRQUMxRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakMsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUvQywyREFBMkQ7UUFDM0QsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRW5DLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGVBQWU7O0VBRW5FLEVBQUUsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsWUFBWSxZQUFZLGVBQWUsV0FBVzs7O3dCQUduRSxTQUFTOzttQkFFZCxTQUFTLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQztFQUM3RCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUM7Q0FDOUQsQ0FBQztJQUNBLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxNQUFjO1FBQ3ZDLElBQUksTUFBTSxHQUFHLFNBQVMsQ0FBQztRQUN2QixJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN2QyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxTQUFTO2dCQUFFLE1BQU0sR0FBRyxFQUFFLENBQUM7O2dCQUMxQyxNQUFNLElBQUksVUFBVSxDQUFDO1FBQzVCLENBQUM7YUFBTSxDQUFDO1lBQ04sS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUN4RCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNqRCxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUN6RCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxjQUFjLENBQUMsTUFBYztRQUNuQyxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDaEIsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLENBQUMsc0JBQXNCLEVBQUUsRUFBRSxDQUFDO1lBQ3BELHVFQUF1RTtZQUN2RSxrQ0FBa0M7WUFDbEMsTUFBTSxJQUFJLEtBQUssRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBRXhDLDZDQUE2QztZQUM3QyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEtBQUssQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO2dCQUM1QyxNQUFNLElBQUksS0FBSyxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDMUMsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRU8sa0JBQWtCLENBQUMsTUFBYztRQUN2QyxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDaEIsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQztZQUMxQyxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ2hELENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFQ2xhc3MgfSBmcm9tICcuLi9tZXRhbW9kZWwvYXBpL2VjbGFzcy5qcyc7XHJcbmltcG9ydCB7IFRHZW5VdGlscyBhcyBEVSB9IGZyb20gJy4vdGdlbi11dGlscy5qcyc7XHJcbmltcG9ydCB7IEVDbGFzc2lmaWVyIH0gZnJvbSAnLi4vbWV0YW1vZGVsL2FwaS9lY2xhc3NpZmllci5qcyc7XHJcblxyXG4vKipcclxuICogU291cmNlIGNvZGUgZ2VuZXJhdGlvbiBmb3IgQVBJIGludGVyZmFjZSAudHMgZmlsZXMgZm9yIEVDbGFzc2VzLlxyXG4gKlxyXG4gKiBAdHJpcHNuZWtcclxuICovXHJcbmV4cG9ydCBjbGFzcyBUR2VuZXJhdG9yQXBpIHtcclxuICBwdWJsaWMgZ2VuZXJhdGUoZUNsYXNzOiBFQ2xhc3MsIHRvSW1wb3J0OiBTZXQ8RUNsYXNzaWZpZXI+KTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGlzRWNvcmUgPSBlQ2xhc3MuZ2V0RVBhY2thZ2UoKS5nZXROYW1lKCkgPT0gJ2Vjb3JlJztcclxuICAgIGNvbnN0IHBrZyA9IGVDbGFzcy5nZXRFUGFja2FnZSgpO1xyXG4gICAgY29uc3QgcGtnQ2xhc3NOYW1lID0gRFUuZ2VuUGFja2FnZUNsYXNzTmFtZShwa2cpO1xyXG4gICAgY29uc3QgcGtnRmlsZU5hbWUgPSBEVS5nZW5QYWNrYWdlRmlsZU5hbWUocGtnKTtcclxuXHJcbiAgICAvL2lmIGdlbmVyYXRpbmcgYXN5bmMgc2VydmljZSBmb3IgdGhlIGNsYXNzLCBuYW1lIGl0ICpBc3luY1xyXG4gICAgY29uc3QgY2xhc3NOYW1lID0gZUNsYXNzLmdldE5hbWUoKTtcclxuXHJcbiAgICByZXR1cm4gYCR7aXNFY29yZSA/IERVLkVDT1JFX0RFRkFVTFRfSU1QT1JUUyA6IERVLkRFRkFVTFRfSU1QT1JUU31cclxuXHJcbiR7RFUuZ2VuQXBpSW1wb3J0cyhlQ2xhc3MsIHRvSW1wb3J0LCBgLmApfWltcG9ydCB7ICR7cGtnQ2xhc3NOYW1lfSB9IGZyb20gJy4uLyR7cGtnRmlsZU5hbWV9LmpzJztcclxuXHJcbi8qKlxyXG4gKiBTb3VyY2UtZ2VuIEFQSSBmb3IgJHtjbGFzc05hbWV9LlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSAke2NsYXNzTmFtZX0gJHt0aGlzLmdlbmVyYXRlU3VwZXJUeXBlcyhlQ2xhc3MpfSB7XHJcbiR7dGhpcy5nZW5lcmF0ZUZpZWxkcyhlQ2xhc3MpfSR7dGhpcy5nZW5lcmF0ZU9wZXJhdGlvbnMoZUNsYXNzKX19XHJcbmA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlU3VwZXJUeXBlcyhlQ2xhc3M6IEVDbGFzcyk6IHN0cmluZyB7XHJcbiAgICBsZXQgcmVzdWx0ID0gJ2V4dGVuZHMnO1xyXG4gICAgaWYgKGVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLnNpemUoKSA8IDEpIHtcclxuICAgICAgaWYgKGVDbGFzcy5nZXROYW1lKCkgPT0gJ0VPYmplY3QnKSByZXN1bHQgPSAnJztcclxuICAgICAgZWxzZSByZXN1bHQgKz0gJyBFT2JqZWN0JztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZUNsYXNzLmdldEVTdXBlclR5cGVzKCkuc2l6ZSgpOyBpKyspIHtcclxuICAgICAgICBjb25zdCBzdXBlclR5cGUgPSBlQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5nZXQoaSk7XHJcbiAgICAgICAgcmVzdWx0ICs9IGAke2kgPiAwID8gJywnIDogJyd9ICR7c3VwZXJUeXBlLmdldE5hbWUoKX1gO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUZpZWxkcyhlQ2xhc3M6IEVDbGFzcyk6IHN0cmluZyB7XHJcbiAgICBsZXQgcmVzdWx0ID0gJyc7XHJcbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkpIHtcclxuICAgICAgLy9kbyBub3QgZ2VuZXJhdGUgZ2V0dGVycy9zZXR0ZXJzIG9uIHB1YmxpYyBBUEkgZm9yIGNvbXBhbmlvbiBpZCBmaWVsZHNcclxuICAgICAgLy8gR2VuZXJhdGUgZ2V0dGVycyBmb3IgYWxsIGZpZWxkc1xyXG4gICAgICByZXN1bHQgKz0gYCAgJHtEVS5nZXR0ZXJTaWcoZmllbGQpfTtcXG5gO1xyXG5cclxuICAgICAgLy8gR2VuZXJhdGUgc2V0dGVycyBmb3IgY2hhbmdlYWJsZSByZWZlcmVuY2VzXHJcbiAgICAgIGlmICghZmllbGQuaXNNYW55KCkgJiYgZmllbGQuaXNDaGFuZ2VhYmxlKCkpIHtcclxuICAgICAgICByZXN1bHQgKz0gYCAgJHtEVS5zZXR0ZXJTaWcoZmllbGQpfTtcXG5gO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZU9wZXJhdGlvbnMoZUNsYXNzOiBFQ2xhc3MpOiBzdHJpbmcge1xyXG4gICAgbGV0IHJlc3VsdCA9ICcnO1xyXG4gICAgZm9yIChjb25zdCBlb3Agb2YgZUNsYXNzLmdldEVPcGVyYXRpb25zKCkpIHtcclxuICAgICAgcmVzdWx0ICs9ICcgICcgKyBEVS5lb3BTaWduYXR1cmUoZW9wKSArICc7XFxuJztcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG59XHJcbiJdfQ==