@emfts/codegen 0.0.1-next.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -0
- package/dist/cli/commands/generate-rest-client.d.ts +3 -0
- package/dist/cli/commands/generate-rest-client.d.ts.map +1 -0
- package/dist/cli/commands/generate-rest-client.js +38 -0
- package/dist/cli/commands/generate-rest-client.js.map +1 -0
- package/dist/cli/commands/generate.d.ts +3 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/generate.js +108 -0
- package/dist/cli/commands/generate.js.map +1 -0
- package/dist/cli/commands/init.d.ts +3 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +57 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +15 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/debug-abstract.d.ts +2 -0
- package/dist/debug-abstract.d.ts.map +1 -0
- package/dist/debug-abstract.js +25 -0
- package/dist/debug-abstract.js.map +1 -0
- package/dist/debug-genmodel.d.ts +2 -0
- package/dist/debug-genmodel.d.ts.map +1 -0
- package/dist/debug-genmodel.js +41 -0
- package/dist/debug-genmodel.js.map +1 -0
- package/dist/genconfig/GenConfig.d.ts +125 -0
- package/dist/genconfig/GenConfig.d.ts.map +1 -0
- package/dist/genconfig/GenConfig.js +46 -0
- package/dist/genconfig/GenConfig.js.map +1 -0
- package/dist/genconfig/GenConfigConverter.d.ts +64 -0
- package/dist/genconfig/GenConfigConverter.d.ts.map +1 -0
- package/dist/genconfig/GenConfigConverter.js +293 -0
- package/dist/genconfig/GenConfigConverter.js.map +1 -0
- package/dist/genconfig/GenConfigLoader.d.ts +83 -0
- package/dist/genconfig/GenConfigLoader.d.ts.map +1 -0
- package/dist/genconfig/GenConfigLoader.js +455 -0
- package/dist/genconfig/GenConfigLoader.js.map +1 -0
- package/dist/genconfig/index.d.ts +4 -0
- package/dist/genconfig/index.d.ts.map +1 -0
- package/dist/genconfig/index.js +4 -0
- package/dist/genconfig/index.js.map +1 -0
- package/dist/generator/CodeGenerator.d.ts +45 -0
- package/dist/generator/CodeGenerator.d.ts.map +1 -0
- package/dist/generator/CodeGenerator.js +142 -0
- package/dist/generator/CodeGenerator.js.map +1 -0
- package/dist/generator/GeneratedFile.d.ts +23 -0
- package/dist/generator/GeneratedFile.d.ts.map +1 -0
- package/dist/generator/GeneratedFile.js +42 -0
- package/dist/generator/GeneratedFile.js.map +1 -0
- package/dist/generator/GeneratorContext.d.ts +73 -0
- package/dist/generator/GeneratorContext.d.ts.map +1 -0
- package/dist/generator/GeneratorContext.js +99 -0
- package/dist/generator/GeneratorContext.js.map +1 -0
- package/dist/generator/GeneratorOptions.d.ts +26 -0
- package/dist/generator/GeneratorOptions.d.ts.map +1 -0
- package/dist/generator/GeneratorOptions.js +16 -0
- package/dist/generator/GeneratorOptions.js.map +1 -0
- package/dist/generator/ImportResolver.d.ts +85 -0
- package/dist/generator/ImportResolver.d.ts.map +1 -0
- package/dist/generator/ImportResolver.js +381 -0
- package/dist/generator/ImportResolver.js.map +1 -0
- package/dist/generator/RestClientGenerator.d.ts +72 -0
- package/dist/generator/RestClientGenerator.d.ts.map +1 -0
- package/dist/generator/RestClientGenerator.js +488 -0
- package/dist/generator/RestClientGenerator.js.map +1 -0
- package/dist/generator/TypeMapper.d.ts +62 -0
- package/dist/generator/TypeMapper.d.ts.map +1 -0
- package/dist/generator/TypeMapper.js +224 -0
- package/dist/generator/TypeMapper.js.map +1 -0
- package/dist/generator/index.d.ts +9 -0
- package/dist/generator/index.d.ts.map +1 -0
- package/dist/generator/index.js +9 -0
- package/dist/generator/index.js.map +1 -0
- package/dist/generator/modes/BaseGenerator.d.ts +67 -0
- package/dist/generator/modes/BaseGenerator.d.ts.map +1 -0
- package/dist/generator/modes/BaseGenerator.js +128 -0
- package/dist/generator/modes/BaseGenerator.js.map +1 -0
- package/dist/generator/modes/DecoratorGenerator.d.ts +28 -0
- package/dist/generator/modes/DecoratorGenerator.d.ts.map +1 -0
- package/dist/generator/modes/DecoratorGenerator.js +147 -0
- package/dist/generator/modes/DecoratorGenerator.js.map +1 -0
- package/dist/generator/modes/EmfGenerator.d.ts +22 -0
- package/dist/generator/modes/EmfGenerator.d.ts.map +1 -0
- package/dist/generator/modes/EmfGenerator.js +202 -0
- package/dist/generator/modes/EmfGenerator.js.map +1 -0
- package/dist/generator/modes/PlainGenerator.d.ts +16 -0
- package/dist/generator/modes/PlainGenerator.d.ts.map +1 -0
- package/dist/generator/modes/PlainGenerator.js +95 -0
- package/dist/generator/modes/PlainGenerator.js.map +1 -0
- package/dist/generator/modes/index.d.ts +5 -0
- package/dist/generator/modes/index.d.ts.map +1 -0
- package/dist/generator/modes/index.js +5 -0
- package/dist/generator/modes/index.js.map +1 -0
- package/dist/genmodel/GenClass.d.ts +37 -0
- package/dist/genmodel/GenClass.d.ts.map +1 -0
- package/dist/genmodel/GenClass.js +14 -0
- package/dist/genmodel/GenClass.js.map +1 -0
- package/dist/genmodel/GenDataType.d.ts +19 -0
- package/dist/genmodel/GenDataType.d.ts.map +1 -0
- package/dist/genmodel/GenDataType.js +46 -0
- package/dist/genmodel/GenDataType.js.map +1 -0
- package/dist/genmodel/GenEnum.d.ts +30 -0
- package/dist/genmodel/GenEnum.d.ts.map +1 -0
- package/dist/genmodel/GenEnum.js +11 -0
- package/dist/genmodel/GenEnum.js.map +1 -0
- package/dist/genmodel/GenFeature.d.ts +30 -0
- package/dist/genmodel/GenFeature.d.ts.map +1 -0
- package/dist/genmodel/GenFeature.js +15 -0
- package/dist/genmodel/GenFeature.js.map +1 -0
- package/dist/genmodel/GenModel.d.ts +54 -0
- package/dist/genmodel/GenModel.d.ts.map +1 -0
- package/dist/genmodel/GenModel.js +24 -0
- package/dist/genmodel/GenModel.js.map +1 -0
- package/dist/genmodel/GenOperation.d.ts +19 -0
- package/dist/genmodel/GenOperation.d.ts.map +1 -0
- package/dist/genmodel/GenOperation.js +10 -0
- package/dist/genmodel/GenOperation.js.map +1 -0
- package/dist/genmodel/GenPackage.d.ts +42 -0
- package/dist/genmodel/GenPackage.d.ts.map +1 -0
- package/dist/genmodel/GenPackage.js +25 -0
- package/dist/genmodel/GenPackage.js.map +1 -0
- package/dist/genmodel/GenerationMode.d.ts +23 -0
- package/dist/genmodel/GenerationMode.d.ts.map +1 -0
- package/dist/genmodel/GenerationMode.js +25 -0
- package/dist/genmodel/GenerationMode.js.map +1 -0
- package/dist/genmodel/index.d.ts +9 -0
- package/dist/genmodel/index.d.ts.map +1 -0
- package/dist/genmodel/index.js +10 -0
- package/dist/genmodel/index.js.map +1 -0
- package/dist/index.d.ts +66 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +110 -0
- package/dist/index.js.map +1 -0
- package/dist/loader/EcoreLoader.d.ts +33 -0
- package/dist/loader/EcoreLoader.d.ts.map +1 -0
- package/dist/loader/EcoreLoader.js +91 -0
- package/dist/loader/EcoreLoader.js.map +1 -0
- package/dist/loader/index.d.ts +2 -0
- package/dist/loader/index.d.ts.map +1 -0
- package/dist/loader/index.js +2 -0
- package/dist/loader/index.js.map +1 -0
- package/dist/templates/partials/decorator/class-file.ejs +98 -0
- package/dist/templates/partials/decorator/enum-file.ejs +35 -0
- package/dist/templates/partials/decorator/interface-file.ejs +61 -0
- package/dist/templates/partials/decorator/model-annotations.ejs +91 -0
- package/dist/templates/partials/decorator/package-file.ejs +7 -0
- package/dist/templates/partials/emf/class-file.ejs +226 -0
- package/dist/templates/partials/emf/enum-file.ejs +36 -0
- package/dist/templates/partials/emf/factory-file.ejs +54 -0
- package/dist/templates/partials/emf/index-file.ejs +29 -0
- package/dist/templates/partials/emf/interface-file.ejs +72 -0
- package/dist/templates/partials/emf/package-file.ejs +149 -0
- package/dist/templates/partials/plain/class-file.ejs +75 -0
- package/dist/templates/partials/plain/enum-file.ejs +28 -0
- package/dist/templates/partials/plain/interface-file.ejs +61 -0
- package/dist/templates/partials/plain/package-file.ejs +6 -0
- package/dist/templates/templates/partials/decorator/class-file.ejs +98 -0
- package/dist/templates/templates/partials/decorator/enum-file.ejs +35 -0
- package/dist/templates/templates/partials/decorator/interface-file.ejs +61 -0
- package/dist/templates/templates/partials/decorator/model-annotations.ejs +91 -0
- package/dist/templates/templates/partials/decorator/package-file.ejs +7 -0
- package/dist/templates/templates/partials/emf/class-file.ejs +226 -0
- package/dist/templates/templates/partials/emf/enum-file.ejs +36 -0
- package/dist/templates/templates/partials/emf/factory-file.ejs +54 -0
- package/dist/templates/templates/partials/emf/index-file.ejs +29 -0
- package/dist/templates/templates/partials/emf/interface-file.ejs +72 -0
- package/dist/templates/templates/partials/emf/package-file.ejs +149 -0
- package/dist/templates/templates/partials/plain/class-file.ejs +75 -0
- package/dist/templates/templates/partials/plain/enum-file.ejs +28 -0
- package/dist/templates/templates/partials/plain/interface-file.ejs +61 -0
- package/dist/templates/templates/partials/plain/package-file.ejs +6 -0
- package/dist/util/EObjectHelper.d.ts +90 -0
- package/dist/util/EObjectHelper.d.ts.map +1 -0
- package/dist/util/EObjectHelper.js +381 -0
- package/dist/util/EObjectHelper.js.map +1 -0
- package/dist/util/StringUtils.d.ts +44 -0
- package/dist/util/StringUtils.d.ts.map +1 -0
- package/dist/util/StringUtils.js +115 -0
- package/dist/util/StringUtils.js.map +1 -0
- package/dist/util/index.d.ts +3 -0
- package/dist/util/index.d.ts.map +1 -0
- package/dist/util/index.js +3 -0
- package/dist/util/index.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GenFeature.js","sourceRoot":"","sources":["../../src/genmodel/GenFeature.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAkCnD;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAA2B;IACjE,OAAO;QACL,YAAY,EAAE,OAAO;QACrB,QAAQ,EAAE,YAAY,CAAC,QAAQ;QAC/B,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,KAAK;QAClB,mBAAmB,EAAE,KAAK;KAC3B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { GenPackage } from './GenPackage.js';
|
|
2
|
+
import { GenerationMode } from './GenerationMode.js';
|
|
3
|
+
/**
|
|
4
|
+
* Root generation model configuration
|
|
5
|
+
*/
|
|
6
|
+
export interface GenModel {
|
|
7
|
+
/** Output directory for generated model code */
|
|
8
|
+
modelDirectory: string;
|
|
9
|
+
/** Output directory for edit code (optional) */
|
|
10
|
+
editDirectory?: string;
|
|
11
|
+
/** Output directory for editor code (optional) */
|
|
12
|
+
editorDirectory?: string;
|
|
13
|
+
/** Plugin ID for generated code */
|
|
14
|
+
modelPluginID?: string;
|
|
15
|
+
/** Generation mode (PLAIN, DECORATOR, or EMF) */
|
|
16
|
+
generationMode: GenerationMode;
|
|
17
|
+
/** Generate interface files */
|
|
18
|
+
generateInterfaces: boolean;
|
|
19
|
+
/** Generate implementation classes */
|
|
20
|
+
generateClasses: boolean;
|
|
21
|
+
/** Generate factory classes */
|
|
22
|
+
generateFactory: boolean;
|
|
23
|
+
/** Generate package classes (EMF mode) */
|
|
24
|
+
generatePackage: boolean;
|
|
25
|
+
/** Generate resource implementation */
|
|
26
|
+
generateResource: boolean;
|
|
27
|
+
/** Use bounded wildcards in generic types */
|
|
28
|
+
boundedGenericTypeNames: boolean;
|
|
29
|
+
/** File header comment */
|
|
30
|
+
copyrightText?: string;
|
|
31
|
+
/** Packages to generate */
|
|
32
|
+
genPackages: GenPackage[];
|
|
33
|
+
/** Referenced packages (for cross-references) */
|
|
34
|
+
usedGenPackages: GenPackage[];
|
|
35
|
+
/** Custom import manager class */
|
|
36
|
+
importManager?: string;
|
|
37
|
+
/** Feature delegation mode */
|
|
38
|
+
featureDelegation: 'None' | 'Virtual' | 'Reflective';
|
|
39
|
+
/** Root extends class (EMF mode) */
|
|
40
|
+
rootExtendsClass: string;
|
|
41
|
+
/** Root extends interface (EMF mode) */
|
|
42
|
+
rootExtendsInterface: string;
|
|
43
|
+
/** Root implements interface */
|
|
44
|
+
rootImplementsInterface?: string;
|
|
45
|
+
/** Suppress EMF types in generated code */
|
|
46
|
+
suppressEMFTypes: boolean;
|
|
47
|
+
/** Suppress generation of genmodel file */
|
|
48
|
+
suppressGenModelAnnotations: boolean;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Create default GenModel
|
|
52
|
+
*/
|
|
53
|
+
export declare function createDefaultGenModel(): GenModel;
|
|
54
|
+
//# sourceMappingURL=GenModel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GenModel.d.ts","sourceRoot":"","sources":["../../src/genmodel/GenModel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,gDAAgD;IAChD,cAAc,EAAE,MAAM,CAAC;IAEvB,gDAAgD;IAChD,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,kDAAkD;IAClD,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,mCAAmC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,iDAAiD;IACjD,cAAc,EAAE,cAAc,CAAC;IAE/B,+BAA+B;IAC/B,kBAAkB,EAAE,OAAO,CAAC;IAE5B,sCAAsC;IACtC,eAAe,EAAE,OAAO,CAAC;IAEzB,+BAA+B;IAC/B,eAAe,EAAE,OAAO,CAAC;IAEzB,0CAA0C;IAC1C,eAAe,EAAE,OAAO,CAAC;IAEzB,uCAAuC;IACvC,gBAAgB,EAAE,OAAO,CAAC;IAE1B,6CAA6C;IAC7C,uBAAuB,EAAE,OAAO,CAAC;IAEjC,0BAA0B;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,2BAA2B;IAC3B,WAAW,EAAE,UAAU,EAAE,CAAC;IAE1B,iDAAiD;IACjD,eAAe,EAAE,UAAU,EAAE,CAAC;IAE9B,kCAAkC;IAClC,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,8BAA8B;IAC9B,iBAAiB,EAAE,MAAM,GAAG,SAAS,GAAG,YAAY,CAAC;IAErD,oCAAoC;IACpC,gBAAgB,EAAE,MAAM,CAAC;IAEzB,wCAAwC;IACxC,oBAAoB,EAAE,MAAM,CAAC;IAE7B,gCAAgC;IAChC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAEjC,2CAA2C;IAC3C,gBAAgB,EAAE,OAAO,CAAC;IAE1B,2CAA2C;IAC3C,2BAA2B,EAAE,OAAO,CAAC;CACtC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,QAAQ,CAkBhD"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { GenerationMode } from './GenerationMode.js';
|
|
2
|
+
/**
|
|
3
|
+
* Create default GenModel
|
|
4
|
+
*/
|
|
5
|
+
export function createDefaultGenModel() {
|
|
6
|
+
return {
|
|
7
|
+
modelDirectory: './generated',
|
|
8
|
+
generationMode: GenerationMode.DECORATOR,
|
|
9
|
+
generateInterfaces: true,
|
|
10
|
+
generateClasses: true,
|
|
11
|
+
generateFactory: true,
|
|
12
|
+
generatePackage: true,
|
|
13
|
+
generateResource: false,
|
|
14
|
+
boundedGenericTypeNames: false,
|
|
15
|
+
genPackages: [],
|
|
16
|
+
usedGenPackages: [],
|
|
17
|
+
featureDelegation: 'None',
|
|
18
|
+
rootExtendsClass: 'BasicEObject',
|
|
19
|
+
rootExtendsInterface: 'EObject',
|
|
20
|
+
suppressEMFTypes: false,
|
|
21
|
+
suppressGenModelAnnotations: false
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=GenModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GenModel.js","sourceRoot":"","sources":["../../src/genmodel/GenModel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAsErD;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO;QACL,cAAc,EAAE,aAAa;QAC7B,cAAc,EAAE,cAAc,CAAC,SAAS;QACxC,kBAAkB,EAAE,IAAI;QACxB,eAAe,EAAE,IAAI;QACrB,eAAe,EAAE,IAAI;QACrB,eAAe,EAAE,IAAI;QACrB,gBAAgB,EAAE,KAAK;QACvB,uBAAuB,EAAE,KAAK;QAC9B,WAAW,EAAE,EAAE;QACf,eAAe,EAAE,EAAE;QACnB,iBAAiB,EAAE,MAAM;QACzB,gBAAgB,EAAE,cAAc;QAChC,oBAAoB,EAAE,SAAS;QAC/B,gBAAgB,EAAE,KAAK;QACvB,2BAA2B,EAAE,KAAK;KACnC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { EOperation } from '@emfts/core';
|
|
2
|
+
/**
|
|
3
|
+
* Generation configuration for an EOperation
|
|
4
|
+
*/
|
|
5
|
+
export interface GenOperation {
|
|
6
|
+
/** Reference to the Ecore operation */
|
|
7
|
+
ecoreOperation: EOperation;
|
|
8
|
+
/** Generate method body (false = abstract/stub) */
|
|
9
|
+
generateBody: boolean;
|
|
10
|
+
/** Custom method body implementation */
|
|
11
|
+
body?: string;
|
|
12
|
+
/** Documentation override */
|
|
13
|
+
documentation?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Create default GenOperation from EOperation
|
|
17
|
+
*/
|
|
18
|
+
export declare function createDefaultGenOperation(operation: EOperation): GenOperation;
|
|
19
|
+
//# sourceMappingURL=GenOperation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GenOperation.d.ts","sourceRoot":"","sources":["../../src/genmodel/GenOperation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,uCAAuC;IACvC,cAAc,EAAE,UAAU,CAAC;IAE3B,mDAAmD;IACnD,YAAY,EAAE,OAAO,CAAC;IAEtB,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,6BAA6B;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,UAAU,GAAG,YAAY,CAK7E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GenOperation.js","sourceRoot":"","sources":["../../src/genmodel/GenOperation.ts"],"names":[],"mappings":"AAmBA;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,SAAqB;IAC7D,OAAO;QACL,cAAc,EAAE,SAAS;QACzB,YAAY,EAAE,KAAK;KACpB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { EPackage } from '@emfts/core';
|
|
2
|
+
import type { GenClass } from './GenClass.js';
|
|
3
|
+
import type { GenEnum } from './GenEnum.js';
|
|
4
|
+
import type { GenDataType } from './GenDataType.js';
|
|
5
|
+
/**
|
|
6
|
+
* Generation configuration for an EPackage
|
|
7
|
+
*/
|
|
8
|
+
export interface GenPackage {
|
|
9
|
+
/** Reference to the Ecore package */
|
|
10
|
+
ecorePackage: EPackage;
|
|
11
|
+
/** Prefix for generated class names (e.g., "Person" -> "PersonImpl") */
|
|
12
|
+
prefix: string;
|
|
13
|
+
/** Base package path for imports (e.g., "com.example.model") */
|
|
14
|
+
basePackage: string;
|
|
15
|
+
/** Suffix for interface package */
|
|
16
|
+
interfacePackageSuffix: string;
|
|
17
|
+
/** Suffix for implementation package */
|
|
18
|
+
classPackageSuffix: string;
|
|
19
|
+
/** Generate adapter factory */
|
|
20
|
+
adapterFactory: boolean;
|
|
21
|
+
/** Generate resource factory */
|
|
22
|
+
generateResourceFactory: boolean;
|
|
23
|
+
/** File extension for resources */
|
|
24
|
+
fileExtension: string;
|
|
25
|
+
/** Content type identifier */
|
|
26
|
+
contentTypeIdentifier?: string;
|
|
27
|
+
/** Classes to generate */
|
|
28
|
+
genClasses: GenClass[];
|
|
29
|
+
/** Enums to generate */
|
|
30
|
+
genEnums: GenEnum[];
|
|
31
|
+
/** Data types to generate */
|
|
32
|
+
genDataTypes: GenDataType[];
|
|
33
|
+
/** Nested packages */
|
|
34
|
+
nestedGenPackages: GenPackage[];
|
|
35
|
+
/** Documentation override */
|
|
36
|
+
documentation?: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Create default GenPackage from EPackage
|
|
40
|
+
*/
|
|
41
|
+
export declare function createDefaultGenPackage(ePackage: EPackage): GenPackage;
|
|
42
|
+
//# sourceMappingURL=GenPackage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GenPackage.d.ts","sourceRoot":"","sources":["../../src/genmodel/GenPackage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,qCAAqC;IACrC,YAAY,EAAE,QAAQ,CAAC;IAEvB,wEAAwE;IACxE,MAAM,EAAE,MAAM,CAAC;IAEf,gEAAgE;IAChE,WAAW,EAAE,MAAM,CAAC;IAEpB,mCAAmC;IACnC,sBAAsB,EAAE,MAAM,CAAC;IAE/B,wCAAwC;IACxC,kBAAkB,EAAE,MAAM,CAAC;IAE3B,+BAA+B;IAC/B,cAAc,EAAE,OAAO,CAAC;IAExB,gCAAgC;IAChC,uBAAuB,EAAE,OAAO,CAAC;IAEjC,mCAAmC;IACnC,aAAa,EAAE,MAAM,CAAC;IAEtB,8BAA8B;IAC9B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B,0BAA0B;IAC1B,UAAU,EAAE,QAAQ,EAAE,CAAC;IAEvB,wBAAwB;IACxB,QAAQ,EAAE,OAAO,EAAE,CAAC;IAEpB,6BAA6B;IAC7B,YAAY,EAAE,WAAW,EAAE,CAAC;IAE5B,sBAAsB;IACtB,iBAAiB,EAAE,UAAU,EAAE,CAAC;IAEhC,6BAA6B;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,GAAG,UAAU,CAgBtE"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { getName } from '../util/EObjectHelper.js';
|
|
2
|
+
/**
|
|
3
|
+
* Create default GenPackage from EPackage
|
|
4
|
+
*/
|
|
5
|
+
export function createDefaultGenPackage(ePackage) {
|
|
6
|
+
const name = getName(ePackage) ?? 'model';
|
|
7
|
+
return {
|
|
8
|
+
ecorePackage: ePackage,
|
|
9
|
+
prefix: capitalize(name),
|
|
10
|
+
basePackage: '',
|
|
11
|
+
interfacePackageSuffix: '',
|
|
12
|
+
classPackageSuffix: 'impl',
|
|
13
|
+
adapterFactory: false,
|
|
14
|
+
generateResourceFactory: false,
|
|
15
|
+
fileExtension: name.toLowerCase(),
|
|
16
|
+
genClasses: [],
|
|
17
|
+
genEnums: [],
|
|
18
|
+
genDataTypes: [],
|
|
19
|
+
nestedGenPackages: []
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function capitalize(str) {
|
|
23
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=GenPackage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GenPackage.js","sourceRoot":"","sources":["../../src/genmodel/GenPackage.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAiDnD;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,QAAkB;IACxD,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC;IAC1C,OAAO;QACL,YAAY,EAAE,QAAQ;QACtB,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC;QACxB,WAAW,EAAE,EAAE;QACf,sBAAsB,EAAE,EAAE;QAC1B,kBAAkB,EAAE,MAAM;QAC1B,cAAc,EAAE,KAAK;QACrB,uBAAuB,EAAE,KAAK;QAC9B,aAAa,EAAE,IAAI,CAAC,WAAW,EAAE;QACjC,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,EAAE;QACZ,YAAY,EAAE,EAAE;QAChB,iBAAiB,EAAE,EAAE;KACtB,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generation mode for code output
|
|
3
|
+
*/
|
|
4
|
+
export declare enum GenerationMode {
|
|
5
|
+
/** Pure TypeScript POJOs without dependencies */
|
|
6
|
+
PLAIN = "plain",
|
|
7
|
+
/** Classes with @Attribute, @Reference decorators and reflect-metadata */
|
|
8
|
+
DECORATOR = "decorator",
|
|
9
|
+
/** EMF-conformant classes extending BasicEObject with eLiterals */
|
|
10
|
+
EMF = "emf"
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Property access mode for generated features
|
|
14
|
+
*/
|
|
15
|
+
export declare enum PropertyMode {
|
|
16
|
+
/** No property generated */
|
|
17
|
+
NONE = "none",
|
|
18
|
+
/** Read-only property (getter only) */
|
|
19
|
+
READONLY = "readonly",
|
|
20
|
+
/** Full read/write property */
|
|
21
|
+
EDITABLE = "editable"
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=GenerationMode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GenerationMode.d.ts","sourceRoot":"","sources":["../../src/genmodel/GenerationMode.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,cAAc;IACxB,iDAAiD;IACjD,KAAK,UAAU;IAEf,0EAA0E;IAC1E,SAAS,cAAc;IAEvB,mEAAmE;IACnE,GAAG,QAAQ;CACZ;AAED;;GAEG;AACH,oBAAY,YAAY;IACtB,4BAA4B;IAC5B,IAAI,SAAS;IAEb,uCAAuC;IACvC,QAAQ,aAAa;IAErB,+BAA+B;IAC/B,QAAQ,aAAa;CACtB"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generation mode for code output
|
|
3
|
+
*/
|
|
4
|
+
export var GenerationMode;
|
|
5
|
+
(function (GenerationMode) {
|
|
6
|
+
/** Pure TypeScript POJOs without dependencies */
|
|
7
|
+
GenerationMode["PLAIN"] = "plain";
|
|
8
|
+
/** Classes with @Attribute, @Reference decorators and reflect-metadata */
|
|
9
|
+
GenerationMode["DECORATOR"] = "decorator";
|
|
10
|
+
/** EMF-conformant classes extending BasicEObject with eLiterals */
|
|
11
|
+
GenerationMode["EMF"] = "emf";
|
|
12
|
+
})(GenerationMode || (GenerationMode = {}));
|
|
13
|
+
/**
|
|
14
|
+
* Property access mode for generated features
|
|
15
|
+
*/
|
|
16
|
+
export var PropertyMode;
|
|
17
|
+
(function (PropertyMode) {
|
|
18
|
+
/** No property generated */
|
|
19
|
+
PropertyMode["NONE"] = "none";
|
|
20
|
+
/** Read-only property (getter only) */
|
|
21
|
+
PropertyMode["READONLY"] = "readonly";
|
|
22
|
+
/** Full read/write property */
|
|
23
|
+
PropertyMode["EDITABLE"] = "editable";
|
|
24
|
+
})(PropertyMode || (PropertyMode = {}));
|
|
25
|
+
//# sourceMappingURL=GenerationMode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GenerationMode.js","sourceRoot":"","sources":["../../src/genmodel/GenerationMode.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAN,IAAY,cASX;AATD,WAAY,cAAc;IACxB,iDAAiD;IACjD,iCAAe,CAAA;IAEf,0EAA0E;IAC1E,yCAAuB,CAAA;IAEvB,mEAAmE;IACnE,6BAAW,CAAA;AACb,CAAC,EATW,cAAc,KAAd,cAAc,QASzB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,YASX;AATD,WAAY,YAAY;IACtB,4BAA4B;IAC5B,6BAAa,CAAA;IAEb,uCAAuC;IACvC,qCAAqB,CAAA;IAErB,+BAA+B;IAC/B,qCAAqB,CAAA;AACvB,CAAC,EATW,YAAY,KAAZ,YAAY,QASvB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from './GenerationMode.js';
|
|
2
|
+
export * from './GenFeature.js';
|
|
3
|
+
export * from './GenOperation.js';
|
|
4
|
+
export * from './GenEnum.js';
|
|
5
|
+
export * from './GenDataType.js';
|
|
6
|
+
export * from './GenClass.js';
|
|
7
|
+
export * from './GenPackage.js';
|
|
8
|
+
export * from './GenModel.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/genmodel/index.ts"],"names":[],"mappings":"AACA,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// Internal GenModel types (used by CodeGenerator)
|
|
2
|
+
export * from './GenerationMode.js';
|
|
3
|
+
export * from './GenFeature.js';
|
|
4
|
+
export * from './GenOperation.js';
|
|
5
|
+
export * from './GenEnum.js';
|
|
6
|
+
export * from './GenDataType.js';
|
|
7
|
+
export * from './GenClass.js';
|
|
8
|
+
export * from './GenPackage.js';
|
|
9
|
+
export * from './GenModel.js';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/genmodel/index.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
export * from './genconfig/index.js';
|
|
2
|
+
export * from './generator/index.js';
|
|
3
|
+
export * from './loader/index.js';
|
|
4
|
+
export * from './util/index.js';
|
|
5
|
+
export { CodeGenerator } from './generator/CodeGenerator.js';
|
|
6
|
+
export { RestClientGenerator } from './generator/RestClientGenerator.js';
|
|
7
|
+
export { GenConfigLoader } from './genconfig/GenConfigLoader.js';
|
|
8
|
+
export { GenConfigConverter } from './genconfig/GenConfigConverter.js';
|
|
9
|
+
export { EcoreLoader } from './loader/EcoreLoader.js';
|
|
10
|
+
export { TypeMapper } from './generator/TypeMapper.js';
|
|
11
|
+
export { ImportResolver } from './generator/ImportResolver.js';
|
|
12
|
+
export type { GenConfig, GenerationSettings, PackageSettings, ClassDefaults, FeatureDefaults, ClassOverride, FeatureOverride, GenConfigMode, GenConfigPropertyMode } from './genconfig/GenConfig.js';
|
|
13
|
+
export type { GeneratorOptions } from './generator/GeneratorOptions.js';
|
|
14
|
+
export type { GeneratedFile } from './generator/GeneratedFile.js';
|
|
15
|
+
export type { GenerationResult } from './generator/CodeGenerator.js';
|
|
16
|
+
export { GenerationMode, PropertyMode } from './genmodel/GenerationMode.js';
|
|
17
|
+
import { type GenerationResult } from './generator/CodeGenerator.js';
|
|
18
|
+
/**
|
|
19
|
+
* Options for the generate function
|
|
20
|
+
*/
|
|
21
|
+
export interface GenerateOptions {
|
|
22
|
+
/** Path to the .ecore model file */
|
|
23
|
+
ecorePath: string;
|
|
24
|
+
/** Path to the .genconfig.xmi file */
|
|
25
|
+
configPath: string;
|
|
26
|
+
/** Output directory override (optional, uses config value if not specified) */
|
|
27
|
+
outputDir?: string;
|
|
28
|
+
/** Whether to write files to disk (default: true) */
|
|
29
|
+
writeFiles?: boolean;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Generate TypeScript code from Ecore models
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```typescript
|
|
36
|
+
* import { generate } from 'emfts-codegen';
|
|
37
|
+
*
|
|
38
|
+
* const result = await generate({
|
|
39
|
+
* ecorePath: 'model/library.ecore',
|
|
40
|
+
* configPath: 'model/library.genconfig.xmi',
|
|
41
|
+
* outputDir: 'src/generated' // optional override
|
|
42
|
+
* });
|
|
43
|
+
*
|
|
44
|
+
* console.log(`Generated ${result.files.length} files`);
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
export declare function generate(options: GenerateOptions): Promise<GenerationResult>;
|
|
48
|
+
/**
|
|
49
|
+
* Generate code without writing to disk
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```typescript
|
|
53
|
+
* import { generateInMemory } from 'emfts-codegen';
|
|
54
|
+
*
|
|
55
|
+
* const result = await generateInMemory({
|
|
56
|
+
* ecorePath: 'model/library.ecore',
|
|
57
|
+
* configPath: 'model/library.genconfig.xmi'
|
|
58
|
+
* });
|
|
59
|
+
*
|
|
60
|
+
* for (const file of result.files) {
|
|
61
|
+
* console.log(`${file.path}:\n${file.content}`);
|
|
62
|
+
* }
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
export declare function generateInMemory(options: Omit<GenerateOptions, 'outputDir' | 'writeFiles'>): Promise<GenerationResult>;
|
|
66
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,sBAAsB,CAAC;AAGrC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,iBAAiB,CAAC;AAGhC,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAG/D,YAAY,EAAE,SAAS,EAAE,kBAAkB,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACrM,YAAY,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,YAAY,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,YAAY,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAGrE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5E,OAAO,EAAiB,KAAK,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAOpF;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA6BlF;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,WAAW,GAAG,YAAY,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAmB5H"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
// GenConfig (public API)
|
|
2
|
+
export * from './genconfig/index.js';
|
|
3
|
+
// Generator
|
|
4
|
+
export * from './generator/index.js';
|
|
5
|
+
// Loader
|
|
6
|
+
export * from './loader/index.js';
|
|
7
|
+
// Utilities
|
|
8
|
+
export * from './util/index.js';
|
|
9
|
+
// Re-export main classes
|
|
10
|
+
export { CodeGenerator } from './generator/CodeGenerator.js';
|
|
11
|
+
export { RestClientGenerator } from './generator/RestClientGenerator.js';
|
|
12
|
+
export { GenConfigLoader } from './genconfig/GenConfigLoader.js';
|
|
13
|
+
export { GenConfigConverter } from './genconfig/GenConfigConverter.js';
|
|
14
|
+
export { EcoreLoader } from './loader/EcoreLoader.js';
|
|
15
|
+
export { TypeMapper } from './generator/TypeMapper.js';
|
|
16
|
+
export { ImportResolver } from './generator/ImportResolver.js';
|
|
17
|
+
// Internal types (for advanced usage)
|
|
18
|
+
export { GenerationMode, PropertyMode } from './genmodel/GenerationMode.js';
|
|
19
|
+
import { CodeGenerator } from './generator/CodeGenerator.js';
|
|
20
|
+
import { GenConfigLoader } from './genconfig/GenConfigLoader.js';
|
|
21
|
+
import { GenConfigConverter } from './genconfig/GenConfigConverter.js';
|
|
22
|
+
import { EcoreLoader } from './loader/EcoreLoader.js';
|
|
23
|
+
import * as fs from 'fs';
|
|
24
|
+
import * as path from 'path';
|
|
25
|
+
/**
|
|
26
|
+
* Generate TypeScript code from Ecore models
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```typescript
|
|
30
|
+
* import { generate } from 'emfts-codegen';
|
|
31
|
+
*
|
|
32
|
+
* const result = await generate({
|
|
33
|
+
* ecorePath: 'model/library.ecore',
|
|
34
|
+
* configPath: 'model/library.genconfig.xmi',
|
|
35
|
+
* outputDir: 'src/generated' // optional override
|
|
36
|
+
* });
|
|
37
|
+
*
|
|
38
|
+
* console.log(`Generated ${result.files.length} files`);
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export async function generate(options) {
|
|
42
|
+
const { ecorePath, configPath, writeFiles = true } = options;
|
|
43
|
+
// Load ecore model
|
|
44
|
+
const ecoreLoader = new EcoreLoader();
|
|
45
|
+
const ePackage = await ecoreLoader.load(ecorePath);
|
|
46
|
+
// Load genconfig
|
|
47
|
+
const configLoader = new GenConfigLoader();
|
|
48
|
+
configLoader.registerPackage(ePackage);
|
|
49
|
+
const genConfig = await configLoader.load(configPath);
|
|
50
|
+
// Convert to internal GenModel
|
|
51
|
+
const converter = new GenConfigConverter();
|
|
52
|
+
const genModel = converter.convert(genConfig);
|
|
53
|
+
// Use outputDir from options or from config
|
|
54
|
+
const outputDir = options.outputDir || genConfig.generation.outputDir;
|
|
55
|
+
// Generate code
|
|
56
|
+
const generator = new CodeGenerator(genModel);
|
|
57
|
+
const result = await generator.generate();
|
|
58
|
+
// Write files if requested
|
|
59
|
+
if (writeFiles) {
|
|
60
|
+
await writeGeneratedFiles(result.files, outputDir);
|
|
61
|
+
}
|
|
62
|
+
return result;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Generate code without writing to disk
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```typescript
|
|
69
|
+
* import { generateInMemory } from 'emfts-codegen';
|
|
70
|
+
*
|
|
71
|
+
* const result = await generateInMemory({
|
|
72
|
+
* ecorePath: 'model/library.ecore',
|
|
73
|
+
* configPath: 'model/library.genconfig.xmi'
|
|
74
|
+
* });
|
|
75
|
+
*
|
|
76
|
+
* for (const file of result.files) {
|
|
77
|
+
* console.log(`${file.path}:\n${file.content}`);
|
|
78
|
+
* }
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
export async function generateInMemory(options) {
|
|
82
|
+
const { ecorePath, configPath } = options;
|
|
83
|
+
// Load ecore model
|
|
84
|
+
const ecoreLoader = new EcoreLoader();
|
|
85
|
+
const ePackage = await ecoreLoader.load(ecorePath);
|
|
86
|
+
// Load genconfig
|
|
87
|
+
const configLoader = new GenConfigLoader();
|
|
88
|
+
configLoader.registerPackage(ePackage);
|
|
89
|
+
const genConfig = await configLoader.load(configPath);
|
|
90
|
+
// Convert to internal GenModel
|
|
91
|
+
const converter = new GenConfigConverter();
|
|
92
|
+
const genModel = converter.convert(genConfig);
|
|
93
|
+
// Generate code
|
|
94
|
+
const generator = new CodeGenerator(genModel);
|
|
95
|
+
return generator.generate();
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Helper to write generated files to disk
|
|
99
|
+
*/
|
|
100
|
+
async function writeGeneratedFiles(files, outputDir) {
|
|
101
|
+
for (const file of files) {
|
|
102
|
+
const filePath = path.join(outputDir, file.path);
|
|
103
|
+
const dirPath = path.dirname(filePath);
|
|
104
|
+
if (!fs.existsSync(dirPath)) {
|
|
105
|
+
fs.mkdirSync(dirPath, { recursive: true });
|
|
106
|
+
}
|
|
107
|
+
fs.writeFileSync(filePath, file.content, 'utf-8');
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { EPackage } from '@emfts/core';
|
|
2
|
+
/**
|
|
3
|
+
* Loads Ecore models using emfts
|
|
4
|
+
*/
|
|
5
|
+
export declare class EcoreLoader {
|
|
6
|
+
private resourceSet;
|
|
7
|
+
private loadedPackages;
|
|
8
|
+
/**
|
|
9
|
+
* Initialize with a resource set
|
|
10
|
+
*/
|
|
11
|
+
init(): Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* Load an Ecore model from file
|
|
14
|
+
*/
|
|
15
|
+
load(ecorePath: string): Promise<EPackage>;
|
|
16
|
+
/**
|
|
17
|
+
* Load multiple Ecore models
|
|
18
|
+
*/
|
|
19
|
+
loadAll(ecorePaths: string[]): Promise<Map<string, EPackage>>;
|
|
20
|
+
/**
|
|
21
|
+
* Get a loaded package by nsURI
|
|
22
|
+
*/
|
|
23
|
+
getPackage(nsURI: string): EPackage | undefined;
|
|
24
|
+
/**
|
|
25
|
+
* Get all loaded packages
|
|
26
|
+
*/
|
|
27
|
+
getAllPackages(): Map<string, EPackage>;
|
|
28
|
+
/**
|
|
29
|
+
* Check if an object is an EPackage
|
|
30
|
+
*/
|
|
31
|
+
private isEPackage;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=EcoreLoader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EcoreLoader.d.ts","sourceRoot":"","sources":["../../src/loader/EcoreLoader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAyB,MAAM,aAAa,CAAC;AAEnE;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,cAAc,CAAoC;IAE1D;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAa3B;;OAEG;IACG,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAiDhD;;OAEG;IACG,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAOnE;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAI/C;;OAEG;IACH,cAAc,IAAI,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC;IAIvC;;OAEG;IACH,OAAO,CAAC,UAAU;CAMnB"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { readFile } from 'fs/promises';
|
|
2
|
+
/**
|
|
3
|
+
* Loads Ecore models using emfts
|
|
4
|
+
*/
|
|
5
|
+
export class EcoreLoader {
|
|
6
|
+
resourceSet = null;
|
|
7
|
+
loadedPackages = new Map();
|
|
8
|
+
/**
|
|
9
|
+
* Initialize with a resource set
|
|
10
|
+
*/
|
|
11
|
+
async init() {
|
|
12
|
+
const { BasicResourceSet, getEcorePackage, ECORE_NS_URI } = await import('@emfts/core');
|
|
13
|
+
// Initialize EcorePackage
|
|
14
|
+
getEcorePackage();
|
|
15
|
+
// Create resource set
|
|
16
|
+
this.resourceSet = new BasicResourceSet();
|
|
17
|
+
// Register EcorePackage
|
|
18
|
+
this.resourceSet.getPackageRegistry().set(ECORE_NS_URI, getEcorePackage());
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Load an Ecore model from file
|
|
22
|
+
*/
|
|
23
|
+
async load(ecorePath) {
|
|
24
|
+
if (!this.resourceSet) {
|
|
25
|
+
await this.init();
|
|
26
|
+
}
|
|
27
|
+
const { XMIResource, URI } = await import('@emfts/core');
|
|
28
|
+
// Read file content
|
|
29
|
+
const content = await readFile(ecorePath, 'utf-8');
|
|
30
|
+
// Create URI and resource
|
|
31
|
+
const uri = URI.createURI(ecorePath);
|
|
32
|
+
const resource = new XMIResource(uri);
|
|
33
|
+
// Set resource set before loading
|
|
34
|
+
resource.setResourceSet(this.resourceSet);
|
|
35
|
+
// Load from string
|
|
36
|
+
resource.loadFromString(content);
|
|
37
|
+
// Check for errors
|
|
38
|
+
const errors = resource.getErrors();
|
|
39
|
+
if (errors.length > 0) {
|
|
40
|
+
console.error('Errors loading Ecore:', errors.map(e => e.message).join(', '));
|
|
41
|
+
}
|
|
42
|
+
// Get root package
|
|
43
|
+
const contents = resource.getContents();
|
|
44
|
+
if (contents.length === 0) {
|
|
45
|
+
throw new Error(`No content found in ${ecorePath}`);
|
|
46
|
+
}
|
|
47
|
+
const root = contents[0];
|
|
48
|
+
if (!this.isEPackage(root)) {
|
|
49
|
+
throw new Error(`Root element is not an EPackage in ${ecorePath}`);
|
|
50
|
+
}
|
|
51
|
+
const ePackage = root;
|
|
52
|
+
const nsURI = ePackage.getNsURI();
|
|
53
|
+
if (nsURI) {
|
|
54
|
+
this.loadedPackages.set(nsURI, ePackage);
|
|
55
|
+
// Register in resource set's registry
|
|
56
|
+
this.resourceSet.getPackageRegistry().set(nsURI, ePackage);
|
|
57
|
+
}
|
|
58
|
+
return ePackage;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Load multiple Ecore models
|
|
62
|
+
*/
|
|
63
|
+
async loadAll(ecorePaths) {
|
|
64
|
+
for (const path of ecorePaths) {
|
|
65
|
+
await this.load(path);
|
|
66
|
+
}
|
|
67
|
+
return new Map(this.loadedPackages);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Get a loaded package by nsURI
|
|
71
|
+
*/
|
|
72
|
+
getPackage(nsURI) {
|
|
73
|
+
return this.loadedPackages.get(nsURI);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get all loaded packages
|
|
77
|
+
*/
|
|
78
|
+
getAllPackages() {
|
|
79
|
+
return new Map(this.loadedPackages);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Check if an object is an EPackage
|
|
83
|
+
*/
|
|
84
|
+
isEPackage(obj) {
|
|
85
|
+
return obj !== null &&
|
|
86
|
+
typeof obj === 'object' &&
|
|
87
|
+
'getEClassifiers' in obj &&
|
|
88
|
+
'getNsURI' in obj;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=EcoreLoader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EcoreLoader.js","sourceRoot":"","sources":["../../src/loader/EcoreLoader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/loader/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/loader/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
|