@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,224 @@
|
|
|
1
|
+
import * as EObjectHelper from '../util/EObjectHelper.js';
|
|
2
|
+
/**
|
|
3
|
+
* Maps Ecore types to TypeScript types
|
|
4
|
+
*/
|
|
5
|
+
export class TypeMapper {
|
|
6
|
+
customMappings = new Map();
|
|
7
|
+
constructor() {
|
|
8
|
+
this.initDefaultMappings();
|
|
9
|
+
}
|
|
10
|
+
initDefaultMappings() {
|
|
11
|
+
// Ecore primitive types
|
|
12
|
+
this.customMappings.set('EString', 'string');
|
|
13
|
+
this.customMappings.set('EChar', 'string');
|
|
14
|
+
this.customMappings.set('ECharacterObject', 'string');
|
|
15
|
+
this.customMappings.set('EBoolean', 'boolean');
|
|
16
|
+
this.customMappings.set('EBooleanObject', 'boolean');
|
|
17
|
+
this.customMappings.set('EInt', 'number');
|
|
18
|
+
this.customMappings.set('EIntegerObject', 'number');
|
|
19
|
+
this.customMappings.set('EByte', 'number');
|
|
20
|
+
this.customMappings.set('EByteObject', 'number');
|
|
21
|
+
this.customMappings.set('EShort', 'number');
|
|
22
|
+
this.customMappings.set('EShortObject', 'number');
|
|
23
|
+
this.customMappings.set('ELong', 'number');
|
|
24
|
+
this.customMappings.set('ELongObject', 'number');
|
|
25
|
+
this.customMappings.set('EFloat', 'number');
|
|
26
|
+
this.customMappings.set('EFloatObject', 'number');
|
|
27
|
+
this.customMappings.set('EDouble', 'number');
|
|
28
|
+
this.customMappings.set('EDoubleObject', 'number');
|
|
29
|
+
this.customMappings.set('EBigInteger', 'bigint');
|
|
30
|
+
this.customMappings.set('EBigDecimal', 'number');
|
|
31
|
+
this.customMappings.set('EDate', 'Date');
|
|
32
|
+
this.customMappings.set('EJavaObject', 'unknown');
|
|
33
|
+
this.customMappings.set('EJavaClass', 'unknown');
|
|
34
|
+
this.customMappings.set('EByteArray', 'Uint8Array');
|
|
35
|
+
this.customMappings.set('EFeatureMapEntry', 'unknown');
|
|
36
|
+
this.customMappings.set('EEnumerator', 'unknown');
|
|
37
|
+
this.customMappings.set('EDiagnosticChain', 'unknown');
|
|
38
|
+
this.customMappings.set('EMap', 'Map<unknown, unknown>');
|
|
39
|
+
this.customMappings.set('EEList', 'Array<unknown>');
|
|
40
|
+
this.customMappings.set('ETreeIterator', 'IterableIterator<unknown>');
|
|
41
|
+
this.customMappings.set('EInvocationTargetException', 'Error');
|
|
42
|
+
this.customMappings.set('EResource', 'Resource');
|
|
43
|
+
this.customMappings.set('EResourceSet', 'ResourceSet');
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Add a custom type mapping
|
|
47
|
+
*/
|
|
48
|
+
addMapping(ecoreName, tsType) {
|
|
49
|
+
this.customMappings.set(ecoreName, tsType);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Map an EClassifier to TypeScript type
|
|
53
|
+
*/
|
|
54
|
+
mapClassifier(classifier) {
|
|
55
|
+
if (!classifier) {
|
|
56
|
+
return 'unknown';
|
|
57
|
+
}
|
|
58
|
+
const name = EObjectHelper.getName(classifier);
|
|
59
|
+
if (!name) {
|
|
60
|
+
return 'unknown';
|
|
61
|
+
}
|
|
62
|
+
// Check custom mappings first
|
|
63
|
+
if (this.customMappings.has(name)) {
|
|
64
|
+
return this.customMappings.get(name);
|
|
65
|
+
}
|
|
66
|
+
// For EClass and EEnum, use the name directly
|
|
67
|
+
return name;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Map an EStructuralFeature to TypeScript type string
|
|
71
|
+
*/
|
|
72
|
+
mapFeature(feature) {
|
|
73
|
+
const baseType = this.mapFeatureBaseType(feature);
|
|
74
|
+
const many = EObjectHelper.isMany(feature);
|
|
75
|
+
if (many) {
|
|
76
|
+
return `${baseType}[]`;
|
|
77
|
+
}
|
|
78
|
+
return baseType;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Map the base type of a feature (without array wrapper)
|
|
82
|
+
*/
|
|
83
|
+
mapFeatureBaseType(feature) {
|
|
84
|
+
// Use eType directly
|
|
85
|
+
const eType = EObjectHelper.getEType(feature);
|
|
86
|
+
return this.mapClassifier(eType);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Map an EGenericType to TypeScript type string
|
|
90
|
+
*/
|
|
91
|
+
mapGenericType(genericType) {
|
|
92
|
+
const classifier = EObjectHelper.getFeatureValue(genericType, 'eClassifier');
|
|
93
|
+
if (!classifier) {
|
|
94
|
+
// Type parameter reference
|
|
95
|
+
const typeParameter = EObjectHelper.getFeatureValue(genericType, 'eTypeParameter');
|
|
96
|
+
if (typeParameter) {
|
|
97
|
+
return EObjectHelper.getName(typeParameter) ?? 'T';
|
|
98
|
+
}
|
|
99
|
+
return 'unknown';
|
|
100
|
+
}
|
|
101
|
+
const baseName = this.mapClassifier(classifier);
|
|
102
|
+
const typeArguments = EObjectHelper.getFeatureValue(genericType, 'eTypeArguments') || [];
|
|
103
|
+
if (typeArguments && typeArguments.length > 0) {
|
|
104
|
+
const args = typeArguments.map((arg) => this.mapGenericType(arg)).join(', ');
|
|
105
|
+
return `${baseName}<${args}>`;
|
|
106
|
+
}
|
|
107
|
+
return baseName;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Get the default value for a type
|
|
111
|
+
*/
|
|
112
|
+
getDefaultValue(feature) {
|
|
113
|
+
const defaultLiteral = EObjectHelper.getDefaultValueLiteral(feature);
|
|
114
|
+
if (defaultLiteral !== null && defaultLiteral !== undefined) {
|
|
115
|
+
return this.convertDefaultValue(feature, defaultLiteral);
|
|
116
|
+
}
|
|
117
|
+
if (EObjectHelper.isMany(feature)) {
|
|
118
|
+
return '[]';
|
|
119
|
+
}
|
|
120
|
+
// Check if required
|
|
121
|
+
const lowerBound = EObjectHelper.getLowerBound(feature);
|
|
122
|
+
if (lowerBound === 0) {
|
|
123
|
+
return null; // Optional, no default
|
|
124
|
+
}
|
|
125
|
+
// Get default for type
|
|
126
|
+
const typeName = this.mapFeatureBaseType(feature);
|
|
127
|
+
return this.getTypeDefault(typeName);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Convert a default value literal to TypeScript
|
|
131
|
+
*/
|
|
132
|
+
convertDefaultValue(feature, literal) {
|
|
133
|
+
const typeName = this.mapFeatureBaseType(feature);
|
|
134
|
+
switch (typeName) {
|
|
135
|
+
case 'string':
|
|
136
|
+
// Already a string, add quotes if not present
|
|
137
|
+
if (!literal.startsWith('"') && !literal.startsWith("'")) {
|
|
138
|
+
return `"${literal}"`;
|
|
139
|
+
}
|
|
140
|
+
return literal;
|
|
141
|
+
case 'boolean':
|
|
142
|
+
return literal.toLowerCase() === 'true' ? 'true' : 'false';
|
|
143
|
+
case 'number':
|
|
144
|
+
case 'bigint':
|
|
145
|
+
return literal;
|
|
146
|
+
case 'Date':
|
|
147
|
+
return `new Date("${literal}")`;
|
|
148
|
+
default:
|
|
149
|
+
// Enum or custom type - check if it's an enum
|
|
150
|
+
const eType = EObjectHelper.getEType(feature);
|
|
151
|
+
if (eType && this.isEEnum(eType)) {
|
|
152
|
+
const enumName = EObjectHelper.getName(eType) ?? typeName;
|
|
153
|
+
return `${enumName}.${literal}`;
|
|
154
|
+
}
|
|
155
|
+
return literal;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Get default value for a TypeScript type
|
|
160
|
+
*/
|
|
161
|
+
getTypeDefault(typeName) {
|
|
162
|
+
switch (typeName) {
|
|
163
|
+
case 'string':
|
|
164
|
+
return '""';
|
|
165
|
+
case 'boolean':
|
|
166
|
+
return 'false';
|
|
167
|
+
case 'number':
|
|
168
|
+
return '0';
|
|
169
|
+
case 'bigint':
|
|
170
|
+
return '0n';
|
|
171
|
+
default:
|
|
172
|
+
return null;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Check if a classifier is an EEnum
|
|
177
|
+
*/
|
|
178
|
+
isEEnum(classifier) {
|
|
179
|
+
// Check for static interface
|
|
180
|
+
if ('getELiterals' in classifier)
|
|
181
|
+
return true;
|
|
182
|
+
// Check for dynamic object - look at eClass name
|
|
183
|
+
const eClass = classifier.eClass?.();
|
|
184
|
+
const eClassName = eClass?.getName?.();
|
|
185
|
+
return eClassName === 'EEnum';
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Check if a classifier is an EClass
|
|
189
|
+
*/
|
|
190
|
+
isEClass(classifier) {
|
|
191
|
+
// Check for static interface
|
|
192
|
+
if ('getEStructuralFeatures' in classifier)
|
|
193
|
+
return true;
|
|
194
|
+
// Check for dynamic object - look at eClass name
|
|
195
|
+
const eClass = classifier.eClass?.();
|
|
196
|
+
const eClassName = eClass?.getName?.();
|
|
197
|
+
return eClassName === 'EClass';
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Check if a classifier is an EDataType
|
|
201
|
+
*/
|
|
202
|
+
isEDataType(classifier) {
|
|
203
|
+
// Check for static interface
|
|
204
|
+
if ('isSerializable' in classifier && !this.isEEnum(classifier))
|
|
205
|
+
return true;
|
|
206
|
+
// Check for dynamic object - look at eClass name
|
|
207
|
+
const eClass = classifier.eClass?.();
|
|
208
|
+
const eClassName = eClass?.getName?.();
|
|
209
|
+
return eClassName === 'EDataType' && !this.isEEnum(classifier);
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Check if a feature is an attribute
|
|
213
|
+
*/
|
|
214
|
+
isAttribute(feature) {
|
|
215
|
+
return !('isContainment' in feature);
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Check if a feature is a reference
|
|
219
|
+
*/
|
|
220
|
+
isReference(feature) {
|
|
221
|
+
return 'isContainment' in feature;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=TypeMapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TypeMapper.js","sourceRoot":"","sources":["../../src/generator/TypeMapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from './CodeGenerator.js';
|
|
2
|
+
export * from './GeneratorContext.js';
|
|
3
|
+
export * from './GeneratorOptions.js';
|
|
4
|
+
export * from './GeneratedFile.js';
|
|
5
|
+
export * from './TypeMapper.js';
|
|
6
|
+
export * from './ImportResolver.js';
|
|
7
|
+
export * from './RestClientGenerator.js';
|
|
8
|
+
export * from './modes/index.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from './CodeGenerator.js';
|
|
2
|
+
export * from './GeneratorContext.js';
|
|
3
|
+
export * from './GeneratorOptions.js';
|
|
4
|
+
export * from './GeneratedFile.js';
|
|
5
|
+
export * from './TypeMapper.js';
|
|
6
|
+
export * from './ImportResolver.js';
|
|
7
|
+
export * from './RestClientGenerator.js';
|
|
8
|
+
export * from './modes/index.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import ejs from 'ejs';
|
|
2
|
+
import type { GenPackage } from '../../genmodel/GenPackage.js';
|
|
3
|
+
import type { GenClass } from '../../genmodel/GenClass.js';
|
|
4
|
+
import type { GenEnum } from '../../genmodel/GenEnum.js';
|
|
5
|
+
import type { GeneratorContext } from '../GeneratorContext.js';
|
|
6
|
+
import { GeneratedFile } from '../GeneratedFile.js';
|
|
7
|
+
/**
|
|
8
|
+
* Base class for mode-specific generators
|
|
9
|
+
*/
|
|
10
|
+
export declare abstract class BaseGenerator {
|
|
11
|
+
protected context: GeneratorContext;
|
|
12
|
+
protected templateCache: Map<string, ejs.TemplateFunction>;
|
|
13
|
+
constructor(context: GeneratorContext);
|
|
14
|
+
/**
|
|
15
|
+
* Get the template directory for this mode
|
|
16
|
+
*/
|
|
17
|
+
protected abstract getTemplateDir(): string;
|
|
18
|
+
/**
|
|
19
|
+
* Generate a class file
|
|
20
|
+
*/
|
|
21
|
+
abstract generateClass(genClass: GenClass, genPackage: GenPackage): Promise<GeneratedFile>;
|
|
22
|
+
/**
|
|
23
|
+
* Generate an interface file
|
|
24
|
+
*/
|
|
25
|
+
abstract generateInterface(genClass: GenClass, genPackage: GenPackage): Promise<GeneratedFile>;
|
|
26
|
+
/**
|
|
27
|
+
* Generate an enum file
|
|
28
|
+
*/
|
|
29
|
+
abstract generateEnum(genEnum: GenEnum, genPackage: GenPackage): Promise<GeneratedFile>;
|
|
30
|
+
/**
|
|
31
|
+
* Generate a package barrel file
|
|
32
|
+
*/
|
|
33
|
+
abstract generatePackageFile(genPackage: GenPackage): Promise<GeneratedFile>;
|
|
34
|
+
/**
|
|
35
|
+
* Generate factory file (EMF mode only, returns null for others)
|
|
36
|
+
*/
|
|
37
|
+
generateFactory(genPackage: GenPackage): Promise<GeneratedFile | null>;
|
|
38
|
+
/**
|
|
39
|
+
* Load and compile a template
|
|
40
|
+
*/
|
|
41
|
+
protected loadTemplate(templateName: string): Promise<ejs.TemplateFunction>;
|
|
42
|
+
/**
|
|
43
|
+
* Render a template with data
|
|
44
|
+
*/
|
|
45
|
+
protected render(templateName: string, data: Record<string, unknown>): Promise<string>;
|
|
46
|
+
/**
|
|
47
|
+
* Create a generated file
|
|
48
|
+
*/
|
|
49
|
+
protected createFile(path: string, content: string): GeneratedFile;
|
|
50
|
+
/**
|
|
51
|
+
* Get output path for a class
|
|
52
|
+
*/
|
|
53
|
+
protected getClassPath(genClass: GenClass, genPackage: GenPackage, suffix?: string): string;
|
|
54
|
+
/**
|
|
55
|
+
* Get output path for an interface
|
|
56
|
+
*/
|
|
57
|
+
protected getInterfacePath(genClass: GenClass, genPackage: GenPackage): string;
|
|
58
|
+
/**
|
|
59
|
+
* Get output path for an enum
|
|
60
|
+
*/
|
|
61
|
+
protected getEnumPath(genEnum: GenEnum, genPackage: GenPackage): string;
|
|
62
|
+
/**
|
|
63
|
+
* Get output path for a package
|
|
64
|
+
*/
|
|
65
|
+
protected getPackagePath(genPackage: GenPackage): string;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=BaseGenerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseGenerator.d.ts","sourceRoot":"","sources":["../../../src/generator/modes/BaseGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AAItB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAMpD;;GAEG;AACH,8BAAsB,aAAa;IACjC,SAAS,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACpC,SAAS,CAAC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAa;gBAE3D,OAAO,EAAE,gBAAgB;IAIrC;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,cAAc,IAAI,MAAM;IAE3C;;OAEG;IACH,QAAQ,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC;IAE1F;;OAEG;IACH,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC;IAE9F;;OAEG;IACH,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC;IAEvF;;OAEG;IACH,QAAQ,CAAC,mBAAmB,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC;IAE5E;;OAEG;IACG,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAI5E;;OAEG;cACa,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAsBjF;;OAEG;cACa,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IA2C5F;;OAEG;IACH,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa;IAIlE;;OAEG;IACH,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAE,MAAW,GAAG,MAAM;IAM/F;;OAEG;IACH,SAAS,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,GAAG,MAAM;IAM9E;;OAEG;IACH,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,GAAG,MAAM;IAMvE;;OAEG;IACH,SAAS,CAAC,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM;CAIzD"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import ejs from 'ejs';
|
|
2
|
+
import { readFile } from 'fs/promises';
|
|
3
|
+
import { join, dirname } from 'path';
|
|
4
|
+
import { fileURLToPath } from 'url';
|
|
5
|
+
import { GeneratedFile } from '../GeneratedFile.js';
|
|
6
|
+
import * as EObjectHelper from '../../util/EObjectHelper.js';
|
|
7
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
8
|
+
const __dirname = dirname(__filename);
|
|
9
|
+
/**
|
|
10
|
+
* Base class for mode-specific generators
|
|
11
|
+
*/
|
|
12
|
+
export class BaseGenerator {
|
|
13
|
+
context;
|
|
14
|
+
templateCache = new Map();
|
|
15
|
+
constructor(context) {
|
|
16
|
+
this.context = context;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Generate factory file (EMF mode only, returns null for others)
|
|
20
|
+
*/
|
|
21
|
+
async generateFactory(genPackage) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Load and compile a template
|
|
26
|
+
*/
|
|
27
|
+
async loadTemplate(templateName) {
|
|
28
|
+
if (this.templateCache.has(templateName)) {
|
|
29
|
+
return this.templateCache.get(templateName);
|
|
30
|
+
}
|
|
31
|
+
const templateDir = this.getTemplateDir();
|
|
32
|
+
const templatePath = join(templateDir, `${templateName}.ejs`);
|
|
33
|
+
try {
|
|
34
|
+
const content = await readFile(templatePath, 'utf-8');
|
|
35
|
+
const template = ejs.compile(content, {
|
|
36
|
+
filename: templatePath,
|
|
37
|
+
async: false
|
|
38
|
+
});
|
|
39
|
+
this.templateCache.set(templateName, template);
|
|
40
|
+
return template;
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
this.context.error(`Failed to load template: ${templatePath}`, templateName);
|
|
44
|
+
throw error;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Render a template with data
|
|
49
|
+
*/
|
|
50
|
+
async render(templateName, data) {
|
|
51
|
+
const template = await this.loadTemplate(templateName);
|
|
52
|
+
// Add common helpers
|
|
53
|
+
const fullData = {
|
|
54
|
+
...data,
|
|
55
|
+
context: this.context,
|
|
56
|
+
typeMapper: this.context.typeMapper,
|
|
57
|
+
importResolver: this.context.importResolver,
|
|
58
|
+
indent: (level) => this.context.getIndent(level),
|
|
59
|
+
header: this.context.getFileHeader(),
|
|
60
|
+
// Helper functions
|
|
61
|
+
capitalize: (s) => s ? s.charAt(0).toUpperCase() + s.slice(1) : '',
|
|
62
|
+
uncapitalize: (s) => s ? s.charAt(0).toLowerCase() + s.slice(1) : '',
|
|
63
|
+
toUpperSnake: (s) => s ? s.replace(/([A-Z])/g, '_$1').toUpperCase().replace(/^_/, '') : '',
|
|
64
|
+
toLowerSnake: (s) => s ? s.replace(/([A-Z])/g, '_$1').toLowerCase().replace(/^_/, '') : '',
|
|
65
|
+
// EObject helper functions for dynamic objects
|
|
66
|
+
getName: EObjectHelper.getName,
|
|
67
|
+
getFeatureValue: EObjectHelper.getFeatureValue,
|
|
68
|
+
getLiteral: EObjectHelper.getLiteral,
|
|
69
|
+
getValue: EObjectHelper.getValue,
|
|
70
|
+
isMany: EObjectHelper.isMany,
|
|
71
|
+
checkIsAbstract: EObjectHelper.isAbstract,
|
|
72
|
+
checkIsInterface: EObjectHelper.isInterface,
|
|
73
|
+
getEType: EObjectHelper.getEType,
|
|
74
|
+
getESuperTypes: EObjectHelper.getESuperTypes,
|
|
75
|
+
getEStructuralFeatures: EObjectHelper.getEStructuralFeatures,
|
|
76
|
+
getEOperations: EObjectHelper.getEOperations,
|
|
77
|
+
getETypeParameters: EObjectHelper.getETypeParameters,
|
|
78
|
+
getEParameters: EObjectHelper.getEParameters,
|
|
79
|
+
getELiterals: EObjectHelper.getELiterals,
|
|
80
|
+
getEPackage: EObjectHelper.getEPackage,
|
|
81
|
+
getDefaultValueLiteral: EObjectHelper.getDefaultValueLiteral,
|
|
82
|
+
getLowerBound: EObjectHelper.getLowerBound,
|
|
83
|
+
getUpperBound: EObjectHelper.getUpperBound,
|
|
84
|
+
isContainment: EObjectHelper.isContainment,
|
|
85
|
+
getEOpposite: EObjectHelper.getEOpposite,
|
|
86
|
+
getExtendedMetaDataName: EObjectHelper.getExtendedMetaDataName
|
|
87
|
+
};
|
|
88
|
+
return template(fullData);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Create a generated file
|
|
92
|
+
*/
|
|
93
|
+
createFile(path, content) {
|
|
94
|
+
return new GeneratedFile(path, content, this.context.options.outputDirectory);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Get output path for a class
|
|
98
|
+
*/
|
|
99
|
+
getClassPath(genClass, genPackage, suffix = '') {
|
|
100
|
+
const className = genClass.implClassName ?? EObjectHelper.getName(genClass.ecoreClass) ?? 'Unknown';
|
|
101
|
+
const packagePath = this.getPackagePath(genPackage);
|
|
102
|
+
return join(packagePath, `${className}${suffix}.ts`);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Get output path for an interface
|
|
106
|
+
*/
|
|
107
|
+
getInterfacePath(genClass, genPackage) {
|
|
108
|
+
const interfaceName = genClass.interfaceName ?? EObjectHelper.getName(genClass.ecoreClass) ?? 'Unknown';
|
|
109
|
+
const packagePath = this.getPackagePath(genPackage);
|
|
110
|
+
return join(packagePath, `${interfaceName}.ts`);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Get output path for an enum
|
|
114
|
+
*/
|
|
115
|
+
getEnumPath(genEnum, genPackage) {
|
|
116
|
+
const enumName = EObjectHelper.getName(genEnum.ecoreEnum) ?? 'Unknown';
|
|
117
|
+
const packagePath = this.getPackagePath(genPackage);
|
|
118
|
+
return join(packagePath, `${enumName}.ts`);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Get output path for a package
|
|
122
|
+
*/
|
|
123
|
+
getPackagePath(genPackage) {
|
|
124
|
+
const basePath = genPackage.basePackage.replace(/\./g, '/');
|
|
125
|
+
return basePath;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=BaseGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseGenerator.js","sourceRoot":"","sources":["../../../src/generator/modes/BaseGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { GenPackage } from '../../genmodel/GenPackage.js';
|
|
2
|
+
import type { GenClass } from '../../genmodel/GenClass.js';
|
|
3
|
+
import type { GenEnum } from '../../genmodel/GenEnum.js';
|
|
4
|
+
import { BaseGenerator } from './BaseGenerator.js';
|
|
5
|
+
import { GeneratedFile } from '../GeneratedFile.js';
|
|
6
|
+
/**
|
|
7
|
+
* Generator for decorator-based TypeScript classes
|
|
8
|
+
*/
|
|
9
|
+
export declare class DecoratorGenerator extends BaseGenerator {
|
|
10
|
+
protected getTemplateDir(): string;
|
|
11
|
+
generateClass(genClass: GenClass, genPackage: GenPackage): Promise<GeneratedFile>;
|
|
12
|
+
generateInterface(genClass: GenClass, genPackage: GenPackage): Promise<GeneratedFile>;
|
|
13
|
+
generateEnum(genEnum: GenEnum, genPackage: GenPackage): Promise<GeneratedFile>;
|
|
14
|
+
/**
|
|
15
|
+
* Get enum name, handling both proper EEnum instances and dynamically loaded objects
|
|
16
|
+
*/
|
|
17
|
+
private getEnumName;
|
|
18
|
+
/**
|
|
19
|
+
* Get enum literals, handling both proper EEnum instances and dynamically loaded objects
|
|
20
|
+
*/
|
|
21
|
+
private getEnumLiterals;
|
|
22
|
+
generatePackageFile(genPackage: GenPackage): Promise<GeneratedFile>;
|
|
23
|
+
/**
|
|
24
|
+
* Generate ModelAnnotations file
|
|
25
|
+
*/
|
|
26
|
+
generateModelAnnotations(genPackage: GenPackage): Promise<GeneratedFile>;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=DecoratorGenerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DecoratorGenerator.d.ts","sourceRoot":"","sources":["../../../src/generator/modes/DecoratorGenerator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAKpD;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,aAAa;IACnD,SAAS,CAAC,cAAc,IAAI,MAAM;IAI5B,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC;IAyBjF,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC;IAsBrF,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC;IAoBpF;;OAEG;IACH,OAAO,CAAC,WAAW;IAkBnB;;OAEG;IACH,OAAO,CAAC,eAAe;IAmBjB,mBAAmB,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC;IAkCzE;;OAEG;IACG,wBAAwB,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC;CAQ/E"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { join, dirname } from 'path';
|
|
2
|
+
import { fileURLToPath } from 'url';
|
|
3
|
+
import { BaseGenerator } from './BaseGenerator.js';
|
|
4
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
5
|
+
const __dirname = dirname(__filename);
|
|
6
|
+
/**
|
|
7
|
+
* Generator for decorator-based TypeScript classes
|
|
8
|
+
*/
|
|
9
|
+
export class DecoratorGenerator extends BaseGenerator {
|
|
10
|
+
getTemplateDir() {
|
|
11
|
+
return join(__dirname, '../../templates/partials/decorator');
|
|
12
|
+
}
|
|
13
|
+
async generateClass(genClass, genPackage) {
|
|
14
|
+
this.context.setCurrentPackage(genPackage);
|
|
15
|
+
this.context.setCurrentClass(genClass);
|
|
16
|
+
const eClass = genClass.ecoreClass;
|
|
17
|
+
const className = genClass.implClassName ?? eClass.getName() ?? 'Unknown';
|
|
18
|
+
const nsURI = genPackage.ecorePackage.getNsURI() ?? '';
|
|
19
|
+
const content = await this.render('class-file', {
|
|
20
|
+
genClass,
|
|
21
|
+
genPackage,
|
|
22
|
+
eClass,
|
|
23
|
+
className,
|
|
24
|
+
nsURI,
|
|
25
|
+
isAbstract: eClass.isAbstract(),
|
|
26
|
+
superTypes: eClass.getESuperTypes(),
|
|
27
|
+
features: genClass.genFeatures,
|
|
28
|
+
operations: genClass.genOperations,
|
|
29
|
+
typeParameters: eClass.getETypeParameters()
|
|
30
|
+
});
|
|
31
|
+
const path = this.getClassPath(genClass, genPackage);
|
|
32
|
+
return this.createFile(path, content);
|
|
33
|
+
}
|
|
34
|
+
async generateInterface(genClass, genPackage) {
|
|
35
|
+
this.context.setCurrentPackage(genPackage);
|
|
36
|
+
this.context.setCurrentClass(genClass);
|
|
37
|
+
const eClass = genClass.ecoreClass;
|
|
38
|
+
const interfaceName = genClass.interfaceName ?? eClass.getName() ?? 'Unknown';
|
|
39
|
+
const content = await this.render('interface-file', {
|
|
40
|
+
genClass,
|
|
41
|
+
genPackage,
|
|
42
|
+
eClass,
|
|
43
|
+
interfaceName,
|
|
44
|
+
superTypes: eClass.getESuperTypes(),
|
|
45
|
+
features: genClass.genFeatures,
|
|
46
|
+
operations: genClass.genOperations,
|
|
47
|
+
typeParameters: eClass.getETypeParameters()
|
|
48
|
+
});
|
|
49
|
+
const path = this.getInterfacePath(genClass, genPackage);
|
|
50
|
+
return this.createFile(path, content);
|
|
51
|
+
}
|
|
52
|
+
async generateEnum(genEnum, genPackage) {
|
|
53
|
+
this.context.setCurrentPackage(genPackage);
|
|
54
|
+
const eEnum = genEnum.ecoreEnum;
|
|
55
|
+
const enumName = this.getEnumName(eEnum);
|
|
56
|
+
const literals = this.getEnumLiterals(eEnum);
|
|
57
|
+
const content = await this.render('enum-file', {
|
|
58
|
+
genEnum,
|
|
59
|
+
genPackage,
|
|
60
|
+
eEnum,
|
|
61
|
+
enumName,
|
|
62
|
+
literals,
|
|
63
|
+
useStringValues: genEnum.useStringValues
|
|
64
|
+
});
|
|
65
|
+
const path = this.getEnumPath(genEnum, genPackage);
|
|
66
|
+
return this.createFile(path, content);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Get enum name, handling both proper EEnum instances and dynamically loaded objects
|
|
70
|
+
*/
|
|
71
|
+
getEnumName(eEnum) {
|
|
72
|
+
if (typeof eEnum.getName === 'function') {
|
|
73
|
+
return eEnum.getName() ?? 'Unknown';
|
|
74
|
+
}
|
|
75
|
+
if (eEnum.name !== undefined) {
|
|
76
|
+
return eEnum.name;
|
|
77
|
+
}
|
|
78
|
+
// Try eGet
|
|
79
|
+
if (typeof eEnum.eGet === 'function' && typeof eEnum.eClass === 'function') {
|
|
80
|
+
const eClass = eEnum.eClass();
|
|
81
|
+
const feature = eClass?.getEStructuralFeature?.('name');
|
|
82
|
+
if (feature) {
|
|
83
|
+
return eEnum.eGet(feature) ?? 'Unknown';
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return 'Unknown';
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Get enum literals, handling both proper EEnum instances and dynamically loaded objects
|
|
90
|
+
*/
|
|
91
|
+
getEnumLiterals(eEnum) {
|
|
92
|
+
if (typeof eEnum.getELiterals === 'function') {
|
|
93
|
+
return eEnum.getELiterals();
|
|
94
|
+
}
|
|
95
|
+
if (Array.isArray(eEnum.eLiterals)) {
|
|
96
|
+
return eEnum.eLiterals;
|
|
97
|
+
}
|
|
98
|
+
// Try eGet
|
|
99
|
+
if (typeof eEnum.eGet === 'function' && typeof eEnum.eClass === 'function') {
|
|
100
|
+
const eClass = eEnum.eClass();
|
|
101
|
+
const feature = eClass?.getEStructuralFeature?.('eLiterals');
|
|
102
|
+
if (feature) {
|
|
103
|
+
const result = eEnum.eGet(feature);
|
|
104
|
+
return Array.isArray(result) ? result : [];
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return [];
|
|
108
|
+
}
|
|
109
|
+
async generatePackageFile(genPackage) {
|
|
110
|
+
this.context.setCurrentPackage(genPackage);
|
|
111
|
+
const ePackage = genPackage.ecorePackage;
|
|
112
|
+
const packageName = genPackage.prefix ?? ePackage.getName() ?? 'Model';
|
|
113
|
+
// Collect all exports
|
|
114
|
+
const exports = [];
|
|
115
|
+
for (const genClass of genPackage.genClasses) {
|
|
116
|
+
const name = genClass.ecoreClass.getName();
|
|
117
|
+
if (name) {
|
|
118
|
+
exports.push(name);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
for (const genEnum of genPackage.genEnums) {
|
|
122
|
+
const name = this.getEnumName(genEnum.ecoreEnum);
|
|
123
|
+
if (name && name !== 'Unknown') {
|
|
124
|
+
exports.push(name);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
const content = await this.render('package-file', {
|
|
128
|
+
genPackage,
|
|
129
|
+
ePackage,
|
|
130
|
+
packageName,
|
|
131
|
+
exports
|
|
132
|
+
});
|
|
133
|
+
const packagePath = this.getPackagePath(genPackage);
|
|
134
|
+
return this.createFile(join(packagePath, 'index.ts'), content);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Generate ModelAnnotations file
|
|
138
|
+
*/
|
|
139
|
+
async generateModelAnnotations(genPackage) {
|
|
140
|
+
const content = await this.render('model-annotations', {
|
|
141
|
+
genPackage
|
|
142
|
+
});
|
|
143
|
+
const packagePath = this.getPackagePath(genPackage);
|
|
144
|
+
return this.createFile(join(packagePath, 'ModelAnnotations.ts'), content);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=DecoratorGenerator.js.map
|