@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,381 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ecore primitive types that map to TypeScript built-ins (no import needed)
|
|
3
|
+
*/
|
|
4
|
+
const ECORE_PRIMITIVES = new Set([
|
|
5
|
+
'EString', 'EChar', 'ECharacterObject',
|
|
6
|
+
'EBoolean', 'EBooleanObject',
|
|
7
|
+
'EInt', 'EIntegerObject', 'EByte', 'EByteObject',
|
|
8
|
+
'EShort', 'EShortObject', 'ELong', 'ELongObject',
|
|
9
|
+
'EFloat', 'EFloatObject', 'EDouble', 'EDoubleObject',
|
|
10
|
+
'EBigInteger', 'EBigDecimal',
|
|
11
|
+
'EDate',
|
|
12
|
+
'EJavaObject', 'EJavaClass',
|
|
13
|
+
'EByteArray',
|
|
14
|
+
'EFeatureMapEntry', 'EEnumerator',
|
|
15
|
+
'EDiagnosticChain',
|
|
16
|
+
'EMap', 'EEList', 'ETreeIterator',
|
|
17
|
+
'EInvocationTargetException',
|
|
18
|
+
'EResource', 'EResourceSet'
|
|
19
|
+
]);
|
|
20
|
+
/**
|
|
21
|
+
* Resolves imports for generated files
|
|
22
|
+
*/
|
|
23
|
+
export class ImportResolver {
|
|
24
|
+
packagePathMap = new Map();
|
|
25
|
+
/**
|
|
26
|
+
* Register a package with its import path
|
|
27
|
+
*/
|
|
28
|
+
registerPackage(nsURI, importPath) {
|
|
29
|
+
this.packagePathMap.set(nsURI, importPath);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get all imports needed for a class
|
|
33
|
+
*/
|
|
34
|
+
resolveImportsForClass(eClass, genPackage, mode) {
|
|
35
|
+
const imports = new Map();
|
|
36
|
+
// Get super types - handle both static and dynamic objects
|
|
37
|
+
const superTypes = this.getSuperTypes(eClass);
|
|
38
|
+
for (const superType of superTypes) {
|
|
39
|
+
this.addImportForClassifier(imports, superType, eClass, genPackage);
|
|
40
|
+
}
|
|
41
|
+
// Get structural features - handle both static and dynamic objects
|
|
42
|
+
const features = this.getStructuralFeatures(eClass);
|
|
43
|
+
for (const feature of features) {
|
|
44
|
+
this.addImportsForFeature(imports, feature, eClass, genPackage);
|
|
45
|
+
}
|
|
46
|
+
// Add mode-specific imports
|
|
47
|
+
this.addModeImports(imports, mode, genPackage);
|
|
48
|
+
return Array.from(imports.values());
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Get super types from EClass (handles both static and dynamic)
|
|
52
|
+
*/
|
|
53
|
+
getSuperTypes(eClass) {
|
|
54
|
+
if (typeof eClass.getESuperTypes === 'function') {
|
|
55
|
+
return eClass.getESuperTypes() || [];
|
|
56
|
+
}
|
|
57
|
+
if (typeof eClass.eGet === 'function' && typeof eClass.eClass === 'function') {
|
|
58
|
+
const metaClass = eClass.eClass();
|
|
59
|
+
if (metaClass) {
|
|
60
|
+
const feature = metaClass.getEStructuralFeature?.('eSuperTypes');
|
|
61
|
+
if (feature) {
|
|
62
|
+
const result = eClass.eGet(feature);
|
|
63
|
+
if (Array.isArray(result))
|
|
64
|
+
return result;
|
|
65
|
+
if (result && typeof result[Symbol.iterator] === 'function') {
|
|
66
|
+
return Array.from(result);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return [];
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Get structural features from EClass (handles both static and dynamic)
|
|
75
|
+
*/
|
|
76
|
+
getStructuralFeatures(eClass) {
|
|
77
|
+
if (typeof eClass.getEStructuralFeatures === 'function') {
|
|
78
|
+
return eClass.getEStructuralFeatures() || [];
|
|
79
|
+
}
|
|
80
|
+
if (typeof eClass.eGet === 'function' && typeof eClass.eClass === 'function') {
|
|
81
|
+
const metaClass = eClass.eClass();
|
|
82
|
+
if (metaClass) {
|
|
83
|
+
const feature = metaClass.getEStructuralFeature?.('eStructuralFeatures');
|
|
84
|
+
if (feature) {
|
|
85
|
+
const result = eClass.eGet(feature);
|
|
86
|
+
if (Array.isArray(result))
|
|
87
|
+
return result;
|
|
88
|
+
if (result && typeof result[Symbol.iterator] === 'function') {
|
|
89
|
+
return Array.from(result);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return [];
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Add import for a classifier if needed
|
|
98
|
+
*/
|
|
99
|
+
addImportForClassifier(imports, classifier, currentClass, genPackage) {
|
|
100
|
+
const name = this.getName(classifier);
|
|
101
|
+
if (!name || imports.has(name)) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
// Skip Ecore primitive types (they map to TypeScript built-ins)
|
|
105
|
+
if (ECORE_PRIMITIVES.has(name)) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
// Check if same class
|
|
109
|
+
if (name === this.getName(currentClass)) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
// Check if it's a proxy
|
|
113
|
+
if ('eIsProxy' in classifier && classifier.eIsProxy()) {
|
|
114
|
+
const proxyImport = this.resolveProxyImport(classifier);
|
|
115
|
+
if (proxyImport) {
|
|
116
|
+
// Skip primitive proxies too
|
|
117
|
+
if (ECORE_PRIMITIVES.has(proxyImport.typeName)) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
imports.set(proxyImport.typeName, proxyImport);
|
|
121
|
+
}
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
// Get the package
|
|
125
|
+
let classifierPackage = this.getEPackage(classifier);
|
|
126
|
+
// If package is null, check if the classifier exists in the current package
|
|
127
|
+
// This handles dynamic enum types that may not have their container set
|
|
128
|
+
if (!classifierPackage) {
|
|
129
|
+
const currentPackage = genPackage.ecorePackage;
|
|
130
|
+
// Check if a classifier with this name exists in the current package
|
|
131
|
+
const classifiers = currentPackage.getEClassifiers?.() || [];
|
|
132
|
+
for (const c of classifiers) {
|
|
133
|
+
if (this.getName(c) === name) {
|
|
134
|
+
classifierPackage = currentPackage;
|
|
135
|
+
break;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
if (!classifierPackage) {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
const currentPackage = genPackage.ecorePackage;
|
|
143
|
+
const importPath = this.getImportPath(classifierPackage, currentPackage, name);
|
|
144
|
+
imports.set(name, {
|
|
145
|
+
typeName: name,
|
|
146
|
+
importPath,
|
|
147
|
+
isTypeOnly: false
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Add imports for a structural feature
|
|
152
|
+
*/
|
|
153
|
+
addImportsForFeature(imports, feature, currentClass, genPackage) {
|
|
154
|
+
// Use eType - try helper method for dynamic objects
|
|
155
|
+
let eType = null;
|
|
156
|
+
if (typeof feature.getEType === 'function') {
|
|
157
|
+
eType = feature.getEType();
|
|
158
|
+
}
|
|
159
|
+
else if (typeof feature.eGet === 'function' && typeof feature.eClass === 'function') {
|
|
160
|
+
const eClass = feature.eClass();
|
|
161
|
+
if (eClass) {
|
|
162
|
+
const typeFeature = eClass.getEStructuralFeature?.('eType');
|
|
163
|
+
if (typeFeature) {
|
|
164
|
+
eType = feature.eGet(typeFeature);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
if (eType) {
|
|
169
|
+
this.addImportForClassifier(imports, eType, currentClass, genPackage);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Add imports for a generic type
|
|
174
|
+
*/
|
|
175
|
+
addImportsForGenericType(imports, genericType, currentClass, genPackage) {
|
|
176
|
+
const classifier = genericType.getEClassifier();
|
|
177
|
+
if (classifier) {
|
|
178
|
+
this.addImportForClassifier(imports, classifier, currentClass, genPackage);
|
|
179
|
+
}
|
|
180
|
+
// Process type arguments
|
|
181
|
+
const typeArgs = genericType.getETypeArguments();
|
|
182
|
+
if (typeArgs) {
|
|
183
|
+
for (const arg of typeArgs) {
|
|
184
|
+
this.addImportsForGenericType(imports, arg, currentClass, genPackage);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Resolve import for a proxy object
|
|
190
|
+
*/
|
|
191
|
+
resolveProxyImport(classifier, currentPackage) {
|
|
192
|
+
if (!('eProxyURI' in classifier)) {
|
|
193
|
+
return null;
|
|
194
|
+
}
|
|
195
|
+
const proxyURI = classifier.eProxyURI();
|
|
196
|
+
if (!proxyURI) {
|
|
197
|
+
return null;
|
|
198
|
+
}
|
|
199
|
+
const uriString = proxyURI.toString();
|
|
200
|
+
if (!uriString.includes('#//')) {
|
|
201
|
+
return null;
|
|
202
|
+
}
|
|
203
|
+
const [packageURI, typeName] = uriString.split('#//');
|
|
204
|
+
// Check if the proxy refers to a type in the same file/package
|
|
205
|
+
// (e.g., "library.ecore#//BookCategory" when we're generating Book)
|
|
206
|
+
// In this case, use a relative import
|
|
207
|
+
const isLocalFile = packageURI.endsWith('.ecore') && !packageURI.includes('/');
|
|
208
|
+
if (isLocalFile) {
|
|
209
|
+
return {
|
|
210
|
+
typeName,
|
|
211
|
+
importPath: `./${typeName}`,
|
|
212
|
+
isTypeOnly: false
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
const importPath = this.getPackageImportPath(packageURI) ?? this.uriToImportPath(packageURI);
|
|
216
|
+
return {
|
|
217
|
+
typeName,
|
|
218
|
+
importPath,
|
|
219
|
+
isTypeOnly: false
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Get import path for a package
|
|
224
|
+
*/
|
|
225
|
+
getImportPath(sourcePackage, currentPackage, typeName) {
|
|
226
|
+
const sourceURI = sourcePackage.getNsURI();
|
|
227
|
+
const currentURI = currentPackage.getNsURI();
|
|
228
|
+
// Same package - relative import
|
|
229
|
+
if (sourceURI === currentURI) {
|
|
230
|
+
return `./${typeName}`;
|
|
231
|
+
}
|
|
232
|
+
// Different package - check registered paths
|
|
233
|
+
if (sourceURI && this.packagePathMap.has(sourceURI)) {
|
|
234
|
+
return this.packagePathMap.get(sourceURI);
|
|
235
|
+
}
|
|
236
|
+
// Use URI as fallback
|
|
237
|
+
return this.uriToImportPath(sourceURI ?? typeName);
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Get registered import path for a package URI
|
|
241
|
+
*/
|
|
242
|
+
getPackageImportPath(nsURI) {
|
|
243
|
+
return this.packagePathMap.get(nsURI);
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Convert a URI to an import path
|
|
247
|
+
*/
|
|
248
|
+
uriToImportPath(uri) {
|
|
249
|
+
// Remove protocol
|
|
250
|
+
let path = uri;
|
|
251
|
+
if (path.startsWith('http://')) {
|
|
252
|
+
path = path.substring(7);
|
|
253
|
+
}
|
|
254
|
+
else if (path.startsWith('https://')) {
|
|
255
|
+
path = path.substring(8);
|
|
256
|
+
}
|
|
257
|
+
// Convert to valid import path
|
|
258
|
+
return path.replace(/[^a-zA-Z0-9./]/g, '-');
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Add mode-specific imports
|
|
262
|
+
*/
|
|
263
|
+
addModeImports(imports, mode, genPackage) {
|
|
264
|
+
switch (mode) {
|
|
265
|
+
case 'decorator':
|
|
266
|
+
imports.set('ModelAnnotations', {
|
|
267
|
+
typeName: 'Documentation, Attribute, ModelClass, Reference, Enum',
|
|
268
|
+
importPath: './ModelAnnotations',
|
|
269
|
+
isTypeOnly: false
|
|
270
|
+
});
|
|
271
|
+
break;
|
|
272
|
+
case 'emf':
|
|
273
|
+
imports.set('BasicEObject', {
|
|
274
|
+
typeName: 'BasicEObject',
|
|
275
|
+
importPath: '@emfts/core',
|
|
276
|
+
isTypeOnly: false
|
|
277
|
+
});
|
|
278
|
+
imports.set('EClass', {
|
|
279
|
+
typeName: 'EClass',
|
|
280
|
+
importPath: '@emfts/core',
|
|
281
|
+
isTypeOnly: true
|
|
282
|
+
});
|
|
283
|
+
imports.set('EStructuralFeature', {
|
|
284
|
+
typeName: 'EStructuralFeature',
|
|
285
|
+
importPath: '@emfts/core',
|
|
286
|
+
isTypeOnly: true
|
|
287
|
+
});
|
|
288
|
+
break;
|
|
289
|
+
case 'plain':
|
|
290
|
+
default:
|
|
291
|
+
// No additional imports for plain mode
|
|
292
|
+
break;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Get name from ENamedElement (works with both static and dynamic EObjects)
|
|
297
|
+
*/
|
|
298
|
+
getName(obj) {
|
|
299
|
+
if (!obj)
|
|
300
|
+
return null;
|
|
301
|
+
// Try direct method first
|
|
302
|
+
if (typeof obj.getName === 'function') {
|
|
303
|
+
return obj.getName();
|
|
304
|
+
}
|
|
305
|
+
// Try eGet for dynamic objects
|
|
306
|
+
if (typeof obj.eGet === 'function' && typeof obj.eClass === 'function') {
|
|
307
|
+
const eClass = obj.eClass();
|
|
308
|
+
if (eClass) {
|
|
309
|
+
const nameFeature = eClass.getEStructuralFeature?.('name');
|
|
310
|
+
if (nameFeature) {
|
|
311
|
+
return obj.eGet(nameFeature);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
// Fallback to property access
|
|
316
|
+
return obj.name ?? null;
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Get the package of a classifier
|
|
320
|
+
*/
|
|
321
|
+
getEPackage(classifier) {
|
|
322
|
+
if (!classifier)
|
|
323
|
+
return null;
|
|
324
|
+
// Try direct method first
|
|
325
|
+
if (typeof classifier.getEPackage === 'function') {
|
|
326
|
+
return classifier.getEPackage();
|
|
327
|
+
}
|
|
328
|
+
// Try eGet for dynamic objects
|
|
329
|
+
if (typeof classifier.eGet === 'function' && typeof classifier.eClass === 'function') {
|
|
330
|
+
const eClass = classifier.eClass();
|
|
331
|
+
if (eClass) {
|
|
332
|
+
const pkgFeature = eClass.getEStructuralFeature?.('ePackage');
|
|
333
|
+
if (pkgFeature) {
|
|
334
|
+
return classifier.eGet(pkgFeature);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
// Try eContainer for contained objects
|
|
339
|
+
if (typeof classifier.eContainer === 'function') {
|
|
340
|
+
const container = classifier.eContainer();
|
|
341
|
+
if (container && this.isEPackage(container)) {
|
|
342
|
+
return container;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
return null;
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Check if an object is an EPackage
|
|
349
|
+
*/
|
|
350
|
+
isEPackage(obj) {
|
|
351
|
+
return obj !== null &&
|
|
352
|
+
typeof obj === 'object' &&
|
|
353
|
+
'getEClassifiers' in obj &&
|
|
354
|
+
'getNsURI' in obj;
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Format imports as TypeScript import statements
|
|
358
|
+
*/
|
|
359
|
+
formatImports(imports) {
|
|
360
|
+
// Group imports by path
|
|
361
|
+
const byPath = new Map();
|
|
362
|
+
for (const imp of imports) {
|
|
363
|
+
const existing = byPath.get(imp.importPath) ?? [];
|
|
364
|
+
existing.push(imp);
|
|
365
|
+
byPath.set(imp.importPath, existing);
|
|
366
|
+
}
|
|
367
|
+
const lines = [];
|
|
368
|
+
for (const [path, imps] of byPath) {
|
|
369
|
+
const typeOnly = imps.every(i => i.isTypeOnly);
|
|
370
|
+
const names = imps.map(i => i.typeName).join(', ');
|
|
371
|
+
if (typeOnly) {
|
|
372
|
+
lines.push(`import type { ${names} } from '${path}';`);
|
|
373
|
+
}
|
|
374
|
+
else {
|
|
375
|
+
lines.push(`import { ${names} } from '${path}';`);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
return lines.join('\n');
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
//# sourceMappingURL=ImportResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImportResolver.js","sourceRoot":"","sources":["../../src/generator/ImportResolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
interface RestClientGeneratorOptions {
|
|
2
|
+
outputDir: string;
|
|
3
|
+
verbose?: boolean;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Generates TypeScript fetch clients from rest-api.ecore + XMI instance
|
|
7
|
+
*/
|
|
8
|
+
export declare class RestClientGenerator {
|
|
9
|
+
private options;
|
|
10
|
+
constructor(options: RestClientGeneratorOptions);
|
|
11
|
+
/**
|
|
12
|
+
* Load the REST API metamodel and instance, then generate client code
|
|
13
|
+
*/
|
|
14
|
+
generate(metamodelPath: string, instancePath: string): Promise<string[]>;
|
|
15
|
+
/**
|
|
16
|
+
* Load and parse the XMI model into ApiModel
|
|
17
|
+
*/
|
|
18
|
+
private loadModel;
|
|
19
|
+
/**
|
|
20
|
+
* Extract ApiModel from dynamic EObject tree
|
|
21
|
+
*/
|
|
22
|
+
private extractModel;
|
|
23
|
+
private extractResource;
|
|
24
|
+
private extractEndpoint;
|
|
25
|
+
private extractParameter;
|
|
26
|
+
/**
|
|
27
|
+
* Generate all TypeScript files
|
|
28
|
+
*/
|
|
29
|
+
private generateFiles;
|
|
30
|
+
/**
|
|
31
|
+
* Generate api-base.ts with shared utilities
|
|
32
|
+
*/
|
|
33
|
+
private generateApiBase;
|
|
34
|
+
/**
|
|
35
|
+
* Generate a TypeScript API class for a REST resource
|
|
36
|
+
*/
|
|
37
|
+
private generateResourceApi;
|
|
38
|
+
/**
|
|
39
|
+
* Generate a single endpoint method
|
|
40
|
+
*/
|
|
41
|
+
private generateEndpointMethod;
|
|
42
|
+
/**
|
|
43
|
+
* Generate URL construction code
|
|
44
|
+
*/
|
|
45
|
+
private generateUrlConstruction;
|
|
46
|
+
/**
|
|
47
|
+
* Generate response handling code based on endpoint config
|
|
48
|
+
*/
|
|
49
|
+
private generateResponseHandling;
|
|
50
|
+
/**
|
|
51
|
+
* Build method parameter string
|
|
52
|
+
*/
|
|
53
|
+
private buildMethodParams;
|
|
54
|
+
/**
|
|
55
|
+
* Determine the TypeScript return type for an endpoint
|
|
56
|
+
*/
|
|
57
|
+
private getReturnType;
|
|
58
|
+
/**
|
|
59
|
+
* Map data type string to TypeScript type
|
|
60
|
+
*/
|
|
61
|
+
private mapDataType;
|
|
62
|
+
/**
|
|
63
|
+
* Map body parameter type
|
|
64
|
+
*/
|
|
65
|
+
private mapBodyType;
|
|
66
|
+
/**
|
|
67
|
+
* Generate barrel export index.ts
|
|
68
|
+
*/
|
|
69
|
+
private generateIndex;
|
|
70
|
+
}
|
|
71
|
+
export {};
|
|
72
|
+
//# sourceMappingURL=RestClientGenerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RestClientGenerator.d.ts","sourceRoot":"","sources":["../../src/generator/RestClientGenerator.ts"],"names":[],"mappings":"AAuCA,UAAU,0BAA0B;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,OAAO,CAA6B;gBAEhC,OAAO,EAAE,0BAA0B;IAI/C;;OAEG;IACG,QAAQ,CAAC,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAK9E;;OAEG;YACW,SAAS;IA4DvB;;OAEG;IACH,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,eAAe;IAmCvB,OAAO,CAAC,gBAAgB;IAsBxB;;OAEG;YACW,aAAa;IAuC3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAoFvB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA4B3B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA4D9B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAuC/B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAiBhC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA4BzB;;OAEG;IACH,OAAO,CAAC,aAAa;IAarB;;OAEG;IACH,OAAO,CAAC,WAAW;IAWnB;;OAEG;IACH,OAAO,CAAC,WAAW;IAUnB;;OAEG;IACH,OAAO,CAAC,aAAa;CAmBtB"}
|