UNPKG

@tripsnek/tmf

Version:

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

66 lines 9.44 kB
import { EcoreParser } from '../ecore/ecoreparser.js'; import { TGeneratorMain } from './tgenerator-main.js'; import { Environment, safeDynamicImport } from '../utils/environment.js'; /** * (1) Parses an ECore file. * (2) Generates source code into destinationPath/src/lib * (3) Generates barrel file (index.ts) into destinationPath/src * * If not specified, destinationPath will be that of the model file. * * @param ecorePath * @param overwriteImpl * @param destinationPath */ export async function generateFromEcore(ecorePath, overwriteImpl, destinationPath, attemptFormatWithPrettier) { Environment.requireNodeEnvironment('File-based code generation'); // parse the package const pkg = await new EcoreParser().parseAsync(ecorePath); // auto-determine destination path from ecore location, if necessary let destPath; if (destinationPath) { destPath = destinationPath; } else { try { const path = await safeDynamicImport('path'); destPath = path.dirname(ecorePath); } catch (error) { throw new Error(`Path resolution failed: ${error.message}. This operation requires Node.js environment.`); } } // generate the source return generateFromEPackage(pkg, destPath, overwriteImpl, attemptFormatWithPrettier); } /** * (1) Generates source code into destinationPath/src/lib * (2) Generates barrel file (index.ts) into destinationPath/src * * @param pkg * @param destPath * @param overwriteImpl */ export async function generateFromEPackage(pkg, destPath, overwriteImpl, attemptInvokePrettier) { Environment.requireNodeEnvironment('Code generation'); try { const path = await safeDynamicImport('path'); const srcPath = path.resolve(destPath + '/src'); console.log('running TGeneratorMain, output to ' + srcPath); new TGeneratorMain(pkg, path.resolve(destPath + '/src'), overwriteImpl, path.resolve(destPath + '/src')).generate(attemptInvokePrettier); return srcPath; } catch (error) { throw new Error(`Path resolution failed: ${error.message}. This operation requires Node.js environment.`); } } /** * Generates TypeScript code from an Ecore file with configurable options. * * @param ecorePath Path to the .ecore file * @param options Optional generation options */ export async function genmodel(ecorePath, options) { return generateFromEcore(ecorePath, options?.overwriteImpl, options?.destinationPath, options?.attemptFormatWithPrettier); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxnZW51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvc291cmNlLWdlbmVyYXRvcnMvbW9kZWxnZW51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQXNCLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFRN0Y7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsaUJBQWlCLENBQ3JDLFNBQWlCLEVBQ2pCLGFBQXVCLEVBQ3ZCLGVBQXdCLEVBQ3hCLHlCQUFtQztJQUVuQyxXQUFXLENBQUMsc0JBQXNCLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUVqRSxvQkFBb0I7SUFDcEIsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUUxRCxvRUFBb0U7SUFDcEUsSUFBSSxRQUFnQixDQUFDO0lBQ3JCLElBQUksZUFBZSxFQUFFLENBQUM7UUFDcEIsUUFBUSxHQUFHLGVBQWUsQ0FBQztJQUM3QixDQUFDO1NBQU0sQ0FBQztRQUNOLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxHQUFHLE1BQU0saUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0MsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7WUFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsS0FBSyxDQUFDLE9BQU8sZ0RBQWdELENBQUMsQ0FBQztRQUM1RyxDQUFDO0lBQ0gsQ0FBQztJQUVELHNCQUFzQjtJQUN0QixPQUFPLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLHlCQUF5QixDQUFDLENBQUM7QUFDdkYsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLG9CQUFvQixDQUN4QyxHQUFhLEVBQ2IsUUFBZ0IsRUFDaEIsYUFBdUIsRUFDdkIscUJBQStCO0lBRS9CLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBRXRELElBQUksQ0FBQztRQUNILE1BQU0sSUFBSSxHQUFHLE1BQU0saUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLENBQUM7UUFDaEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQ0FBb0MsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUM1RCxJQUFJLGNBQWMsQ0FDaEIsR0FBRyxFQUNILElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxFQUMvQixhQUFhLEVBQ2IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLENBQ2hDLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDbEMsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7UUFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsS0FBSyxDQUFDLE9BQU8sZ0RBQWdELENBQUMsQ0FBQztJQUM1RyxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxRQUFRLENBQUMsU0FBaUIsRUFBRSxPQUFvQjtJQUNwRSxPQUFPLGlCQUFpQixDQUN0QixTQUFTLEVBQ1QsT0FBTyxFQUFFLGFBQWEsRUFDdEIsT0FBTyxFQUFFLGVBQWUsRUFDeEIsT0FBTyxFQUFFLHlCQUF5QixDQUNuQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVjb3JlUGFyc2VyIH0gZnJvbSAnLi4vZWNvcmUvZWNvcmVwYXJzZXIuanMnO1xyXG5pbXBvcnQgeyBFUGFja2FnZSB9IGZyb20gJy4uL21ldGFtb2RlbC9hcGkvZXBhY2thZ2UuanMnO1xyXG5pbXBvcnQgeyBUR2VuZXJhdG9yTWFpbiB9IGZyb20gJy4vdGdlbmVyYXRvci1tYWluLmpzJztcclxuaW1wb3J0IHsgRW52aXJvbm1lbnQsIENvbmRpdGlvbmFsSW1wb3J0cywgc2FmZUR5bmFtaWNJbXBvcnQgfSBmcm9tICcuLi91dGlscy9lbnZpcm9ubWVudC5qcyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEdlbk9wdGlvbnMge1xyXG4gIG92ZXJ3cml0ZUltcGw/OiBib29sZWFuOyAgICAgICAgICAgICAgLy93aGV0aGVyIHRvIG92ZXJ3cml0ZSAqLmltcGwgZmlsZXNcclxuICBkZXN0aW5hdGlvblBhdGg/OiBzdHJpbmc7ICAgICAgICAgICAgIC8vd2hlcmUgdG8gZ2VuZXJhdGUgdGhlIHNyYy8gZGlyZWN0b3J5XHJcbiAgYXR0ZW1wdEZvcm1hdFdpdGhQcmV0dGllcj86IGJvb2xlYW47ICAvL3doZXRoZXIgdG8gYXR0ZW1wdCB0byBpbnZva2UgcHJldHRpZXIgZm9ybWF0dGluZ1xyXG59XHJcblxyXG4vKipcclxuICogKDEpIFBhcnNlcyBhbiBFQ29yZSBmaWxlLlxyXG4gKiAoMikgR2VuZXJhdGVzIHNvdXJjZSBjb2RlIGludG8gZGVzdGluYXRpb25QYXRoL3NyYy9saWJcclxuICogKDMpIEdlbmVyYXRlcyBiYXJyZWwgZmlsZSAoaW5kZXgudHMpIGludG8gZGVzdGluYXRpb25QYXRoL3NyY1xyXG4gKlxyXG4gKiBJZiBub3Qgc3BlY2lmaWVkLCBkZXN0aW5hdGlvblBhdGggd2lsbCBiZSB0aGF0IG9mIHRoZSBtb2RlbCBmaWxlLlxyXG4gKlxyXG4gKiBAcGFyYW0gZWNvcmVQYXRoXHJcbiAqIEBwYXJhbSBvdmVyd3JpdGVJbXBsXHJcbiAqIEBwYXJhbSBkZXN0aW5hdGlvblBhdGhcclxuICovXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUZyb21FY29yZShcclxuICBlY29yZVBhdGg6IHN0cmluZyxcclxuICBvdmVyd3JpdGVJbXBsPzogYm9vbGVhbixcclxuICBkZXN0aW5hdGlvblBhdGg/OiBzdHJpbmcsXHJcbiAgYXR0ZW1wdEZvcm1hdFdpdGhQcmV0dGllcj86IGJvb2xlYW5cclxuKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICBFbnZpcm9ubWVudC5yZXF1aXJlTm9kZUVudmlyb25tZW50KCdGaWxlLWJhc2VkIGNvZGUgZ2VuZXJhdGlvbicpO1xyXG5cclxuICAvLyBwYXJzZSB0aGUgcGFja2FnZVxyXG4gIGNvbnN0IHBrZyA9IGF3YWl0IG5ldyBFY29yZVBhcnNlcigpLnBhcnNlQXN5bmMoZWNvcmVQYXRoKTtcclxuXHJcbiAgLy8gYXV0by1kZXRlcm1pbmUgZGVzdGluYXRpb24gcGF0aCBmcm9tIGVjb3JlIGxvY2F0aW9uLCBpZiBuZWNlc3NhcnlcclxuICBsZXQgZGVzdFBhdGg6IHN0cmluZztcclxuICBpZiAoZGVzdGluYXRpb25QYXRoKSB7XHJcbiAgICBkZXN0UGF0aCA9IGRlc3RpbmF0aW9uUGF0aDtcclxuICB9IGVsc2Uge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcGF0aCA9IGF3YWl0IHNhZmVEeW5hbWljSW1wb3J0KCdwYXRoJyk7XHJcbiAgICAgIGRlc3RQYXRoID0gcGF0aC5kaXJuYW1lKGVjb3JlUGF0aCk7XHJcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUGF0aCByZXNvbHV0aW9uIGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfS4gVGhpcyBvcGVyYXRpb24gcmVxdWlyZXMgTm9kZS5qcyBlbnZpcm9ubWVudC5gKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGdlbmVyYXRlIHRoZSBzb3VyY2VcclxuICByZXR1cm4gZ2VuZXJhdGVGcm9tRVBhY2thZ2UocGtnLCBkZXN0UGF0aCwgb3ZlcndyaXRlSW1wbCwgYXR0ZW1wdEZvcm1hdFdpdGhQcmV0dGllcik7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiAoMSkgR2VuZXJhdGVzIHNvdXJjZSBjb2RlIGludG8gZGVzdGluYXRpb25QYXRoL3NyYy9saWJcclxuICogKDIpIEdlbmVyYXRlcyBiYXJyZWwgZmlsZSAoaW5kZXgudHMpIGludG8gZGVzdGluYXRpb25QYXRoL3NyY1xyXG4gKlxyXG4gKiBAcGFyYW0gcGtnXHJcbiAqIEBwYXJhbSBkZXN0UGF0aFxyXG4gKiBAcGFyYW0gb3ZlcndyaXRlSW1wbFxyXG4gKi9cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlRnJvbUVQYWNrYWdlKFxyXG4gIHBrZzogRVBhY2thZ2UsXHJcbiAgZGVzdFBhdGg6IHN0cmluZyxcclxuICBvdmVyd3JpdGVJbXBsPzogYm9vbGVhbixcclxuICBhdHRlbXB0SW52b2tlUHJldHRpZXI/OiBib29sZWFuXHJcbik6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgRW52aXJvbm1lbnQucmVxdWlyZU5vZGVFbnZpcm9ubWVudCgnQ29kZSBnZW5lcmF0aW9uJyk7XHJcblxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBwYXRoID0gYXdhaXQgc2FmZUR5bmFtaWNJbXBvcnQoJ3BhdGgnKTtcclxuICAgIGNvbnN0IHNyY1BhdGggPSBwYXRoLnJlc29sdmUoZGVzdFBhdGggKyAnL3NyYycpO1xyXG4gICAgY29uc29sZS5sb2coJ3J1bm5pbmcgVEdlbmVyYXRvck1haW4sIG91dHB1dCB0byAnICsgc3JjUGF0aCk7XHJcbiAgICBuZXcgVEdlbmVyYXRvck1haW4oXHJcbiAgICAgIHBrZyxcclxuICAgICAgcGF0aC5yZXNvbHZlKGRlc3RQYXRoICsgJy9zcmMnKSxcclxuICAgICAgb3ZlcndyaXRlSW1wbCxcclxuICAgICAgcGF0aC5yZXNvbHZlKGRlc3RQYXRoICsgJy9zcmMnKVxyXG4gICAgKS5nZW5lcmF0ZShhdHRlbXB0SW52b2tlUHJldHRpZXIpO1xyXG4gICAgcmV0dXJuIHNyY1BhdGg7XHJcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXRoIHJlc29sdXRpb24gZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2V9LiBUaGlzIG9wZXJhdGlvbiByZXF1aXJlcyBOb2RlLmpzIGVudmlyb25tZW50LmApO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBUeXBlU2NyaXB0IGNvZGUgZnJvbSBhbiBFY29yZSBmaWxlIHdpdGggY29uZmlndXJhYmxlIG9wdGlvbnMuXHJcbiAqIFxyXG4gKiBAcGFyYW0gZWNvcmVQYXRoIFBhdGggdG8gdGhlIC5lY29yZSBmaWxlXHJcbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIGdlbmVyYXRpb24gb3B0aW9uc1xyXG4gKi9cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbm1vZGVsKGVjb3JlUGF0aDogc3RyaW5nLCBvcHRpb25zPzogR2VuT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgcmV0dXJuIGdlbmVyYXRlRnJvbUVjb3JlKFxyXG4gICAgZWNvcmVQYXRoLFxyXG4gICAgb3B0aW9ucz8ub3ZlcndyaXRlSW1wbCxcclxuICAgIG9wdGlvbnM/LmRlc3RpbmF0aW9uUGF0aCxcclxuICAgIG9wdGlvbnM/LmF0dGVtcHRGb3JtYXRXaXRoUHJldHRpZXJcclxuICApO1xyXG59Il19