@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.
Files changed (184) hide show
  1. package/README.md +39 -0
  2. package/dist/cli/commands/generate-rest-client.d.ts +3 -0
  3. package/dist/cli/commands/generate-rest-client.d.ts.map +1 -0
  4. package/dist/cli/commands/generate-rest-client.js +38 -0
  5. package/dist/cli/commands/generate-rest-client.js.map +1 -0
  6. package/dist/cli/commands/generate.d.ts +3 -0
  7. package/dist/cli/commands/generate.d.ts.map +1 -0
  8. package/dist/cli/commands/generate.js +108 -0
  9. package/dist/cli/commands/generate.js.map +1 -0
  10. package/dist/cli/commands/init.d.ts +3 -0
  11. package/dist/cli/commands/init.d.ts.map +1 -0
  12. package/dist/cli/commands/init.js +57 -0
  13. package/dist/cli/commands/init.js.map +1 -0
  14. package/dist/cli/index.d.ts +3 -0
  15. package/dist/cli/index.d.ts.map +1 -0
  16. package/dist/cli/index.js +15 -0
  17. package/dist/cli/index.js.map +1 -0
  18. package/dist/debug-abstract.d.ts +2 -0
  19. package/dist/debug-abstract.d.ts.map +1 -0
  20. package/dist/debug-abstract.js +25 -0
  21. package/dist/debug-abstract.js.map +1 -0
  22. package/dist/debug-genmodel.d.ts +2 -0
  23. package/dist/debug-genmodel.d.ts.map +1 -0
  24. package/dist/debug-genmodel.js +41 -0
  25. package/dist/debug-genmodel.js.map +1 -0
  26. package/dist/genconfig/GenConfig.d.ts +125 -0
  27. package/dist/genconfig/GenConfig.d.ts.map +1 -0
  28. package/dist/genconfig/GenConfig.js +46 -0
  29. package/dist/genconfig/GenConfig.js.map +1 -0
  30. package/dist/genconfig/GenConfigConverter.d.ts +64 -0
  31. package/dist/genconfig/GenConfigConverter.d.ts.map +1 -0
  32. package/dist/genconfig/GenConfigConverter.js +293 -0
  33. package/dist/genconfig/GenConfigConverter.js.map +1 -0
  34. package/dist/genconfig/GenConfigLoader.d.ts +83 -0
  35. package/dist/genconfig/GenConfigLoader.d.ts.map +1 -0
  36. package/dist/genconfig/GenConfigLoader.js +455 -0
  37. package/dist/genconfig/GenConfigLoader.js.map +1 -0
  38. package/dist/genconfig/index.d.ts +4 -0
  39. package/dist/genconfig/index.d.ts.map +1 -0
  40. package/dist/genconfig/index.js +4 -0
  41. package/dist/genconfig/index.js.map +1 -0
  42. package/dist/generator/CodeGenerator.d.ts +45 -0
  43. package/dist/generator/CodeGenerator.d.ts.map +1 -0
  44. package/dist/generator/CodeGenerator.js +142 -0
  45. package/dist/generator/CodeGenerator.js.map +1 -0
  46. package/dist/generator/GeneratedFile.d.ts +23 -0
  47. package/dist/generator/GeneratedFile.d.ts.map +1 -0
  48. package/dist/generator/GeneratedFile.js +42 -0
  49. package/dist/generator/GeneratedFile.js.map +1 -0
  50. package/dist/generator/GeneratorContext.d.ts +73 -0
  51. package/dist/generator/GeneratorContext.d.ts.map +1 -0
  52. package/dist/generator/GeneratorContext.js +99 -0
  53. package/dist/generator/GeneratorContext.js.map +1 -0
  54. package/dist/generator/GeneratorOptions.d.ts +26 -0
  55. package/dist/generator/GeneratorOptions.d.ts.map +1 -0
  56. package/dist/generator/GeneratorOptions.js +16 -0
  57. package/dist/generator/GeneratorOptions.js.map +1 -0
  58. package/dist/generator/ImportResolver.d.ts +85 -0
  59. package/dist/generator/ImportResolver.d.ts.map +1 -0
  60. package/dist/generator/ImportResolver.js +381 -0
  61. package/dist/generator/ImportResolver.js.map +1 -0
  62. package/dist/generator/RestClientGenerator.d.ts +72 -0
  63. package/dist/generator/RestClientGenerator.d.ts.map +1 -0
  64. package/dist/generator/RestClientGenerator.js +488 -0
  65. package/dist/generator/RestClientGenerator.js.map +1 -0
  66. package/dist/generator/TypeMapper.d.ts +62 -0
  67. package/dist/generator/TypeMapper.d.ts.map +1 -0
  68. package/dist/generator/TypeMapper.js +224 -0
  69. package/dist/generator/TypeMapper.js.map +1 -0
  70. package/dist/generator/index.d.ts +9 -0
  71. package/dist/generator/index.d.ts.map +1 -0
  72. package/dist/generator/index.js +9 -0
  73. package/dist/generator/index.js.map +1 -0
  74. package/dist/generator/modes/BaseGenerator.d.ts +67 -0
  75. package/dist/generator/modes/BaseGenerator.d.ts.map +1 -0
  76. package/dist/generator/modes/BaseGenerator.js +128 -0
  77. package/dist/generator/modes/BaseGenerator.js.map +1 -0
  78. package/dist/generator/modes/DecoratorGenerator.d.ts +28 -0
  79. package/dist/generator/modes/DecoratorGenerator.d.ts.map +1 -0
  80. package/dist/generator/modes/DecoratorGenerator.js +147 -0
  81. package/dist/generator/modes/DecoratorGenerator.js.map +1 -0
  82. package/dist/generator/modes/EmfGenerator.d.ts +22 -0
  83. package/dist/generator/modes/EmfGenerator.d.ts.map +1 -0
  84. package/dist/generator/modes/EmfGenerator.js +202 -0
  85. package/dist/generator/modes/EmfGenerator.js.map +1 -0
  86. package/dist/generator/modes/PlainGenerator.d.ts +16 -0
  87. package/dist/generator/modes/PlainGenerator.d.ts.map +1 -0
  88. package/dist/generator/modes/PlainGenerator.js +95 -0
  89. package/dist/generator/modes/PlainGenerator.js.map +1 -0
  90. package/dist/generator/modes/index.d.ts +5 -0
  91. package/dist/generator/modes/index.d.ts.map +1 -0
  92. package/dist/generator/modes/index.js +5 -0
  93. package/dist/generator/modes/index.js.map +1 -0
  94. package/dist/genmodel/GenClass.d.ts +37 -0
  95. package/dist/genmodel/GenClass.d.ts.map +1 -0
  96. package/dist/genmodel/GenClass.js +14 -0
  97. package/dist/genmodel/GenClass.js.map +1 -0
  98. package/dist/genmodel/GenDataType.d.ts +19 -0
  99. package/dist/genmodel/GenDataType.d.ts.map +1 -0
  100. package/dist/genmodel/GenDataType.js +46 -0
  101. package/dist/genmodel/GenDataType.js.map +1 -0
  102. package/dist/genmodel/GenEnum.d.ts +30 -0
  103. package/dist/genmodel/GenEnum.d.ts.map +1 -0
  104. package/dist/genmodel/GenEnum.js +11 -0
  105. package/dist/genmodel/GenEnum.js.map +1 -0
  106. package/dist/genmodel/GenFeature.d.ts +30 -0
  107. package/dist/genmodel/GenFeature.d.ts.map +1 -0
  108. package/dist/genmodel/GenFeature.js +15 -0
  109. package/dist/genmodel/GenFeature.js.map +1 -0
  110. package/dist/genmodel/GenModel.d.ts +54 -0
  111. package/dist/genmodel/GenModel.d.ts.map +1 -0
  112. package/dist/genmodel/GenModel.js +24 -0
  113. package/dist/genmodel/GenModel.js.map +1 -0
  114. package/dist/genmodel/GenOperation.d.ts +19 -0
  115. package/dist/genmodel/GenOperation.d.ts.map +1 -0
  116. package/dist/genmodel/GenOperation.js +10 -0
  117. package/dist/genmodel/GenOperation.js.map +1 -0
  118. package/dist/genmodel/GenPackage.d.ts +42 -0
  119. package/dist/genmodel/GenPackage.d.ts.map +1 -0
  120. package/dist/genmodel/GenPackage.js +25 -0
  121. package/dist/genmodel/GenPackage.js.map +1 -0
  122. package/dist/genmodel/GenerationMode.d.ts +23 -0
  123. package/dist/genmodel/GenerationMode.d.ts.map +1 -0
  124. package/dist/genmodel/GenerationMode.js +25 -0
  125. package/dist/genmodel/GenerationMode.js.map +1 -0
  126. package/dist/genmodel/index.d.ts +9 -0
  127. package/dist/genmodel/index.d.ts.map +1 -0
  128. package/dist/genmodel/index.js +10 -0
  129. package/dist/genmodel/index.js.map +1 -0
  130. package/dist/index.d.ts +66 -0
  131. package/dist/index.d.ts.map +1 -0
  132. package/dist/index.js +110 -0
  133. package/dist/index.js.map +1 -0
  134. package/dist/loader/EcoreLoader.d.ts +33 -0
  135. package/dist/loader/EcoreLoader.d.ts.map +1 -0
  136. package/dist/loader/EcoreLoader.js +91 -0
  137. package/dist/loader/EcoreLoader.js.map +1 -0
  138. package/dist/loader/index.d.ts +2 -0
  139. package/dist/loader/index.d.ts.map +1 -0
  140. package/dist/loader/index.js +2 -0
  141. package/dist/loader/index.js.map +1 -0
  142. package/dist/templates/partials/decorator/class-file.ejs +98 -0
  143. package/dist/templates/partials/decorator/enum-file.ejs +35 -0
  144. package/dist/templates/partials/decorator/interface-file.ejs +61 -0
  145. package/dist/templates/partials/decorator/model-annotations.ejs +91 -0
  146. package/dist/templates/partials/decorator/package-file.ejs +7 -0
  147. package/dist/templates/partials/emf/class-file.ejs +226 -0
  148. package/dist/templates/partials/emf/enum-file.ejs +36 -0
  149. package/dist/templates/partials/emf/factory-file.ejs +54 -0
  150. package/dist/templates/partials/emf/index-file.ejs +29 -0
  151. package/dist/templates/partials/emf/interface-file.ejs +72 -0
  152. package/dist/templates/partials/emf/package-file.ejs +149 -0
  153. package/dist/templates/partials/plain/class-file.ejs +75 -0
  154. package/dist/templates/partials/plain/enum-file.ejs +28 -0
  155. package/dist/templates/partials/plain/interface-file.ejs +61 -0
  156. package/dist/templates/partials/plain/package-file.ejs +6 -0
  157. package/dist/templates/templates/partials/decorator/class-file.ejs +98 -0
  158. package/dist/templates/templates/partials/decorator/enum-file.ejs +35 -0
  159. package/dist/templates/templates/partials/decorator/interface-file.ejs +61 -0
  160. package/dist/templates/templates/partials/decorator/model-annotations.ejs +91 -0
  161. package/dist/templates/templates/partials/decorator/package-file.ejs +7 -0
  162. package/dist/templates/templates/partials/emf/class-file.ejs +226 -0
  163. package/dist/templates/templates/partials/emf/enum-file.ejs +36 -0
  164. package/dist/templates/templates/partials/emf/factory-file.ejs +54 -0
  165. package/dist/templates/templates/partials/emf/index-file.ejs +29 -0
  166. package/dist/templates/templates/partials/emf/interface-file.ejs +72 -0
  167. package/dist/templates/templates/partials/emf/package-file.ejs +149 -0
  168. package/dist/templates/templates/partials/plain/class-file.ejs +75 -0
  169. package/dist/templates/templates/partials/plain/enum-file.ejs +28 -0
  170. package/dist/templates/templates/partials/plain/interface-file.ejs +61 -0
  171. package/dist/templates/templates/partials/plain/package-file.ejs +6 -0
  172. package/dist/util/EObjectHelper.d.ts +90 -0
  173. package/dist/util/EObjectHelper.d.ts.map +1 -0
  174. package/dist/util/EObjectHelper.js +381 -0
  175. package/dist/util/EObjectHelper.js.map +1 -0
  176. package/dist/util/StringUtils.d.ts +44 -0
  177. package/dist/util/StringUtils.d.ts.map +1 -0
  178. package/dist/util/StringUtils.js +115 -0
  179. package/dist/util/StringUtils.js.map +1 -0
  180. package/dist/util/index.d.ts +3 -0
  181. package/dist/util/index.d.ts.map +1 -0
  182. package/dist/util/index.js +3 -0
  183. package/dist/util/index.js.map +1 -0
  184. 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