@odata2ts/odata2ts 0.34.0 → 0.36.0

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 (41) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +81 -81
  3. package/lib/FactoryFunctionModel.js.map +1 -1
  4. package/lib/TypeModel.js.map +1 -1
  5. package/lib/app.js +1 -0
  6. package/lib/app.js.map +1 -1
  7. package/lib/cli.js.map +1 -1
  8. package/lib/data-model/DataModel.js +20 -3
  9. package/lib/data-model/DataModel.js.map +1 -1
  10. package/lib/data-model/DataModelDigestion.d.ts +15 -0
  11. package/lib/data-model/DataModelDigestion.js +75 -23
  12. package/lib/data-model/DataModelDigestion.js.map +1 -1
  13. package/lib/data-model/DataTypeModel.d.ts +3 -0
  14. package/lib/data-model/DataTypeModel.js.map +1 -1
  15. package/lib/data-model/edmx/ODataEdmxModelBase.d.ts +1 -1
  16. package/lib/data-model/edmx/ODataEdmxModelBase.js.map +1 -1
  17. package/lib/data-model/validation/NameClashValidator.js +12 -2
  18. package/lib/data-model/validation/NameClashValidator.js.map +1 -1
  19. package/lib/data-model/validation/NameValidator.js.map +1 -1
  20. package/lib/data-model/validation/NoopValidator.js.map +1 -1
  21. package/lib/generator/ImportContainer.d.ts +10 -8
  22. package/lib/generator/ImportContainer.js +93 -72
  23. package/lib/generator/ImportContainer.js.map +1 -1
  24. package/lib/generator/ImportedNameValidator.js.map +1 -1
  25. package/lib/generator/ModelGenerator.js +40 -15
  26. package/lib/generator/ModelGenerator.js.map +1 -1
  27. package/lib/generator/QueryObjectGenerator.js +42 -33
  28. package/lib/generator/QueryObjectGenerator.js.map +1 -1
  29. package/lib/generator/ServiceGenerator.js +38 -25
  30. package/lib/generator/ServiceGenerator.js.map +1 -1
  31. package/lib/generator/import/ImportObjects.d.ts +12 -12
  32. package/lib/generator/import/ImportObjects.js +12 -12
  33. package/lib/generator/import/ImportObjects.js.map +1 -1
  34. package/lib/project/FileHandler.d.ts +4 -14
  35. package/lib/project/FileHandler.js +14 -6
  36. package/lib/project/FileHandler.js.map +1 -1
  37. package/lib/project/ProjectManager.d.ts +1 -0
  38. package/lib/project/ProjectManager.js +8 -5
  39. package/lib/project/ProjectManager.js.map +1 -1
  40. package/lib/project/TsMorphHelper.js.map +1 -1
  41. package/package.json +6 -6
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Digester = void 0;
4
4
  const tslib_1 = require("tslib");
5
+ const OptionModel_1 = require("../OptionModel");
5
6
  const DataModel_1 = require("./DataModel");
6
7
  const ServiceConfigHelper_1 = require("./ServiceConfigHelper");
7
8
  const NameClashValidator_1 = require("./validation/NameClashValidator");
@@ -18,7 +19,20 @@ class Digester {
18
19
  this.schemas = schemas;
19
20
  this.options = options;
20
21
  this.namingHelper = namingHelper;
22
+ /**
23
+ * Reverse mapping from fqName to data type: EntityType, ComplexType, EnumType, or Primitive Type.
24
+ */
21
25
  this.model2Type = new Map();
26
+ /**
27
+ * Stores models (ComplexType or EntityType) by fqName that have been referenced in the API
28
+ * as entry point or via navProp.
29
+ * For these models one or two services are generated.
30
+ *
31
+ * In this way unnecessary service generation is prevented. For example, complex types that
32
+ * are only referenced as response of an operation do not need a generated service.
33
+ * @private
34
+ */
35
+ this.serviceModels = new Set();
22
36
  this.mapProp = (p, entityPropConfig) => {
23
37
  var _a, _b;
24
38
  if (!p.$.Type) {
@@ -27,30 +41,30 @@ class Digester {
27
41
  const configProp = this.serviceConfigHelper.findPropConfigByName(p.$.Name);
28
42
  const modelName = this.namingHelper.getModelPropName((entityPropConfig === null || entityPropConfig === void 0 ? void 0 : entityPropConfig.mappedName) || (configProp === null || configProp === void 0 ? void 0 : configProp.mappedName) || p.$.Name);
29
43
  const isCollection = !!p.$.Type.match(/^Collection\(/);
30
- let dataType = p.$.Type.replace(/^Collection\(([^\)]+)\)/, "$1");
44
+ let odataDataType = p.$.Type.replace(/^Collection\(([^\)]+)\)/, "$1");
31
45
  // support for primitive type mapping
32
- if (this.namingHelper.includesServicePrefix(dataType)) {
33
- const dt = this.dataModel.getPrimitiveType(dataType);
46
+ if (this.namingHelper.includesServicePrefix(odataDataType)) {
47
+ const dt = this.dataModel.getPrimitiveType(odataDataType);
34
48
  if (dt !== undefined) {
35
- dataType = dt;
49
+ odataDataType = dt;
36
50
  }
37
51
  }
38
52
  let result;
39
53
  // domain object known from service:
40
54
  // EntityType, ComplexType, EnumType
41
- if (this.namingHelper.includesServicePrefix(dataType)) {
42
- const resultDt = this.model2Type.get(dataType);
43
- const [dataTypeName, dataTypePrefix] = this.namingHelper.getNameAndServicePrefix(dataType);
55
+ if (this.namingHelper.includesServicePrefix(odataDataType)) {
56
+ const modelType = this.model2Type.get(odataDataType);
57
+ const [dataTypeName, dataTypePrefix] = this.namingHelper.getNameAndServicePrefix(odataDataType);
44
58
  const dataTypeNamespace = [dataTypePrefix];
45
- if (!resultDt) {
46
- throw new Error(`Couldn't determine model data type for property "${p.$.Name}"! Given data type: "${dataType}".`);
59
+ if (!modelType) {
60
+ throw new Error(`Couldn't determine model type (EntityType, ComplexType, etc) for property "${p.$.Name}"! Given data type: "${odataDataType}".`);
47
61
  }
48
62
  // special handling for enums
49
- if (resultDt === "EnumType" /* DataTypes.EnumType */) {
63
+ if (modelType === "EnumType" /* DataTypes.EnumType */) {
50
64
  const enumConfig = this.serviceConfigHelper.findEnumTypeConfig(dataTypeNamespace, dataTypeName);
51
65
  result = {
52
- dataType: resultDt,
53
- type: this.namingHelper.getEnumName((_a = enumConfig === null || enumConfig === void 0 ? void 0 : enumConfig.mappedName) !== null && _a !== void 0 ? _a : dataType),
66
+ dataType: modelType,
67
+ type: this.namingHelper.getEnumName((_a = enumConfig === null || enumConfig === void 0 ? void 0 : enumConfig.mappedName) !== null && _a !== void 0 ? _a : odataDataType),
54
68
  qPath: "QEnumPath",
55
69
  qObject: isCollection ? "QEnumCollection" : undefined,
56
70
  qParam: "QEnumParam",
@@ -58,23 +72,23 @@ class Digester {
58
72
  }
59
73
  // handling of complex & entity types
60
74
  else {
61
- const entityConfig = resultDt === "ComplexType" /* DataTypes.ComplexType */
75
+ const entityConfig = modelType === "ComplexType" /* DataTypes.ComplexType */
62
76
  ? this.serviceConfigHelper.findComplexTypeConfig(dataTypeNamespace, dataTypeName)
63
77
  : this.serviceConfigHelper.findEntityTypeConfig(dataTypeNamespace, dataTypeName);
64
- const resultDataType = (_b = entityConfig === null || entityConfig === void 0 ? void 0 : entityConfig.mappedName) !== null && _b !== void 0 ? _b : dataType;
78
+ const typeName = (_b = entityConfig === null || entityConfig === void 0 ? void 0 : entityConfig.mappedName) !== null && _b !== void 0 ? _b : odataDataType;
65
79
  result = {
66
- dataType: resultDt,
67
- type: this.namingHelper.getModelName(resultDataType),
80
+ dataType: modelType,
81
+ type: this.namingHelper.getModelName(typeName),
68
82
  qPath: "QEntityPath",
69
- qObject: this.namingHelper.getQName(resultDataType),
83
+ qObject: this.namingHelper.getQName(typeName),
70
84
  qParam: "QComplexParam",
71
85
  };
72
86
  }
73
87
  }
74
88
  // OData built-in data types
75
- else if (dataType.startsWith(Digester.EDM_PREFIX)) {
76
- const { outputType, qPath, qParam, qCollection } = this.mapODataType(dataType);
77
- const { to, toModule: typeModule, converters } = this.dataModel.getConverter(dataType) || {};
89
+ else if (odataDataType.startsWith(Digester.EDM_PREFIX)) {
90
+ const { outputType, qPath, qParam, qCollection } = this.mapODataType(odataDataType);
91
+ const { to, toModule: typeModule, converters } = this.dataModel.getConverter(odataDataType) || {};
78
92
  const type = !to ? outputType : to.startsWith(Digester.EDM_PREFIX) ? this.mapODataType(to).outputType : to;
79
93
  result = {
80
94
  dataType: "PrimitiveType" /* DataTypes.PrimitiveType */,
@@ -87,9 +101,9 @@ class Digester {
87
101
  };
88
102
  }
89
103
  else {
90
- throw new Error(`Unknown type [${dataType}]: Not 'Collection(...)', not OData type 'Edm.*', not starting with one of the namespaces!`);
104
+ throw new Error(`Unknown type [${odataDataType}]: Not 'Collection(...)', not OData type 'Edm.*', not starting with one of the namespaces!`);
91
105
  }
92
- return Object.assign({ odataName: p.$.Name, name: modelName, odataType: p.$.Type, fqType: dataType, required: ifFalse(p.$.Nullable), isCollection: isCollection, managed: typeof (entityPropConfig === null || entityPropConfig === void 0 ? void 0 : entityPropConfig.managed) !== "undefined" ? entityPropConfig.managed : configProp === null || configProp === void 0 ? void 0 : configProp.managed }, result);
106
+ return Object.assign({ odataName: p.$.Name, name: modelName, odataType: p.$.Type, fqType: odataDataType, required: ifFalse(p.$.Nullable), isCollection: isCollection, managed: typeof (entityPropConfig === null || entityPropConfig === void 0 ? void 0 : entityPropConfig.managed) !== "undefined" ? entityPropConfig.managed : configProp === null || configProp === void 0 ? void 0 : configProp.managed }, result);
93
107
  };
94
108
  const namespaces = schemas.map((s) => [s.$.Namespace, s.$.Alias]);
95
109
  this.dataModel = new DataModel_1.DataModel(namespaces, version, converters);
@@ -129,6 +143,7 @@ class Digester {
129
143
  }
130
144
  digestEntityTypesAndOperations() {
131
145
  this.schemas.forEach((schema) => {
146
+ var _a;
132
147
  const ns = [schema.$.Namespace, schema.$.Alias];
133
148
  // type definitions: alias for primitive types
134
149
  this.addTypeDefinition(schema.$.Namespace, schema.TypeDefinition);
@@ -140,6 +155,7 @@ class Digester {
140
155
  this.addEntityType(ns, schema.EntityType);
141
156
  // V4 only: function & action types
142
157
  this.digestOperations(schema);
158
+ this.analyzeModelUsage(((_a = schema.EntityContainer) === null || _a === void 0 ? void 0 : _a.length) ? schema.EntityContainer[0] : undefined);
143
159
  });
144
160
  this.postProcessModel();
145
161
  this.postProcessKeys();
@@ -179,6 +195,7 @@ class Digester {
179
195
  baseProps: [],
180
196
  abstract: ifTrue(model.$.Abstract),
181
197
  open: ifTrue(model.$.OpenType),
198
+ genMode: OptionModel_1.Modes.service,
182
199
  };
183
200
  }
184
201
  addTypeDefinition(ns, types) {
@@ -190,6 +207,7 @@ class Digester {
190
207
  }
191
208
  }
192
209
  addEnum(namespace, models) {
210
+ var _a;
193
211
  if (!models || !models.length) {
194
212
  return;
195
213
  }
@@ -205,7 +223,7 @@ class Digester {
205
223
  name: enumName,
206
224
  modelName: this.namingHelper.getEnumName(enumName),
207
225
  folderPath: filePath,
208
- members: et.Member.map((m) => m.$.Name),
226
+ members: ((_a = et.Member) === null || _a === void 0 ? void 0 : _a.length) ? et.Member.map((m) => m.$.Name) : [],
209
227
  });
210
228
  }
211
229
  }
@@ -251,6 +269,34 @@ class Digester {
251
269
  }, generateId: !!keyNames.length, keyNames: keyNames, keys: [], getKeyUnion: () => keyNames.join(" | ") }));
252
270
  }
253
271
  }
272
+ analyzeModelUsage(ec) {
273
+ var _a, _b;
274
+ if ((_a = ec === null || ec === void 0 ? void 0 : ec.EntitySet) === null || _a === void 0 ? void 0 : _a.length) {
275
+ ec.EntitySet.forEach((et) => this.analyze(et.$.EntityType));
276
+ }
277
+ const ec4 = ec;
278
+ if ((_b = ec4 === null || ec4 === void 0 ? void 0 : ec4.Singleton) === null || _b === void 0 ? void 0 : _b.length) {
279
+ ec4.Singleton.forEach((singleton) => this.analyze(singleton.$.Type));
280
+ }
281
+ }
282
+ analyze(fqModelName) {
283
+ var _a;
284
+ if (this.serviceModels.has(fqModelName)) {
285
+ return;
286
+ }
287
+ this.serviceModels.add(fqModelName);
288
+ const model = (_a = this.dataModel.getEntityType(fqModelName)) !== null && _a !== void 0 ? _a : this.dataModel.getComplexType(fqModelName);
289
+ if (model) {
290
+ if (model.baseClasses.length) {
291
+ this.analyze(model.baseClasses[0]);
292
+ }
293
+ model === null || model === void 0 ? void 0 : model.props.forEach((p) => {
294
+ if (p.dataType === "ComplexType" /* DataTypes.ComplexType */ || p.dataType === "ModelType" /* DataTypes.ModelType */) {
295
+ this.analyze(p.fqType);
296
+ }
297
+ });
298
+ }
299
+ }
254
300
  postProcessModel() {
255
301
  // complex types
256
302
  const complexTypes = this.dataModel.getComplexTypes();
@@ -261,6 +307,9 @@ class Digester {
261
307
  if (open) {
262
308
  ct.open = true;
263
309
  }
310
+ if (!this.serviceModels.has(ct.fqName)) {
311
+ ct.genMode = OptionModel_1.Modes.qobjects;
312
+ }
264
313
  });
265
314
  // entity types
266
315
  const entityTypes = this.dataModel.getEntityTypes();
@@ -279,6 +328,9 @@ class Digester {
279
328
  if (open) {
280
329
  et.open = open;
281
330
  }
331
+ if (!this.serviceModels.has(et.fqName)) {
332
+ et.genMode = OptionModel_1.Modes.qobjects;
333
+ }
282
334
  et.keyNames.unshift(...baseKeys.filter((bk) => !et.keyNames.includes(bk)));
283
335
  });
284
336
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DataModelDigestion.js","sourceRoot":"","sources":["../../src/data-model/DataModelDigestion.ts"],"names":[],"mappings":"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","sourcesContent":["import { MappedConverterChains } from \"@odata2ts/converter-runtime\";\r\n\r\nimport { DigestionOptions } from \"../FactoryFunctionModel\";\r\nimport { ComplexTypeGenerationOptions, EntityTypeGenerationOptions, PropertyGenerationOptions } from \"../OptionModel\";\r\nimport { DataModel, NamespaceWithAlias, withNamespace } from \"./DataModel\";\r\nimport {\r\n ComplexType as ComplexModelType,\r\n DataTypes,\r\n EntityType as EntityModelType,\r\n ODataVersion,\r\n PropertyModel,\r\n} from \"./DataTypeModel\";\r\nimport { ComplexType, EntityType, EnumType, Property, Schema, TypeDefinition } from \"./edmx/ODataEdmxModelBase\";\r\nimport { SchemaV3 } from \"./edmx/ODataEdmxModelV3\";\r\nimport { SchemaV4 } from \"./edmx/ODataEdmxModelV4\";\r\nimport { NamingHelper } from \"./NamingHelper\";\r\nimport { ServiceConfigHelper, WithoutName } from \"./ServiceConfigHelper\";\r\nimport { NameClashValidator } from \"./validation/NameClashValidator\";\r\nimport { NameValidator } from \"./validation/NameValidator\";\r\nimport { NoopValidator } from \"./validation/NoopValidator\";\r\n\r\ntype CollectorTuple = [\r\n Array<PropertyModel>,\r\n Array<string>,\r\n { fqIdName: string; idName: string; qIdName: string; open: boolean }\r\n];\r\n\r\nfunction ifTrue(value: string | undefined): boolean {\r\n return value === \"true\";\r\n}\r\n\r\nfunction ifFalse(value: string | undefined): boolean {\r\n return value === \"false\";\r\n}\r\n\r\nexport interface TypeModel {\r\n outputType: string;\r\n qPath: string;\r\n qCollection: string;\r\n qParam: string | undefined;\r\n}\r\n\r\nexport abstract class Digester<S extends Schema<ET, CT>, ET extends EntityType, CT extends ComplexType> {\r\n protected static EDM_PREFIX = \"Edm.\";\r\n\r\n protected readonly dataModel: DataModel;\r\n protected readonly serviceConfigHelper: ServiceConfigHelper;\r\n protected readonly nameValidator: NameValidator;\r\n\r\n private model2Type = new Map<string, DataTypes>();\r\n\r\n protected constructor(\r\n protected version: ODataVersion,\r\n protected schemas: Array<S>,\r\n protected options: DigestionOptions,\r\n protected namingHelper: NamingHelper,\r\n converters?: MappedConverterChains\r\n ) {\r\n const namespaces = schemas.map<NamespaceWithAlias>((s) => [s.$.Namespace, s.$.Alias]);\r\n this.dataModel = new DataModel(namespaces, version, converters);\r\n this.serviceConfigHelper = new ServiceConfigHelper(options);\r\n this.nameValidator = this.options.bundledFileGeneration ? new NameClashValidator(options) : new NoopValidator();\r\n\r\n this.collectModelTypes(schemas);\r\n }\r\n\r\n private collectModelTypes(schemas: Array<S>) {\r\n schemas.forEach((schema) => {\r\n const { Namespace: ns, Alias: alias } = schema.$;\r\n\r\n schema.EnumType?.forEach((et) => {\r\n this.addModel2Type(ns, alias, et.$.Name, DataTypes.EnumType);\r\n });\r\n schema.ComplexType?.forEach((ct) => {\r\n this.addModel2Type(ns, alias, ct.$.Name, DataTypes.ComplexType);\r\n });\r\n schema.EntityType?.forEach((et) => {\r\n this.addModel2Type(ns, alias, et.$.Name, DataTypes.ModelType);\r\n });\r\n });\r\n }\r\n\r\n private addModel2Type(ns: string, alias: string | undefined, name: string, dt: DataTypes) {\r\n this.model2Type.set(withNamespace(ns, name), dt);\r\n if (alias) {\r\n this.model2Type.set(withNamespace(alias, name), dt);\r\n }\r\n }\r\n\r\n protected abstract getNavigationProps(entityType: ET | ComplexType): Array<Property>;\r\n\r\n protected abstract digestOperations(schema: SchemaV3 | SchemaV4): void;\r\n\r\n protected abstract digestEntityContainer(schema: SchemaV3 | SchemaV4): void;\r\n\r\n /**\r\n * Get essential infos about a given odata type from the version specific service variants.\r\n *\r\n * @param type\r\n * @return tuple of return type, query object, query collection object\r\n */\r\n protected abstract mapODataType(type: string): TypeModel;\r\n\r\n public async digest(): Promise<DataModel> {\r\n this.digestEntityTypesAndOperations();\r\n\r\n // delegate to version specific entity container digestion\r\n this.schemas.forEach((schema) => this.digestEntityContainer(schema));\r\n\r\n this.dataModel.setNameValidation(this.nameValidator.validate());\r\n return this.dataModel;\r\n }\r\n\r\n private digestEntityTypesAndOperations() {\r\n this.schemas.forEach((schema) => {\r\n const ns: NamespaceWithAlias = [schema.$.Namespace, schema.$.Alias];\r\n\r\n // type definitions: alias for primitive types\r\n this.addTypeDefinition(schema.$.Namespace, schema.TypeDefinition);\r\n\r\n // enums\r\n this.addEnum(ns, schema.EnumType);\r\n\r\n // complex types\r\n this.addComplexType(ns, schema.ComplexType);\r\n\r\n // entity types\r\n this.addEntityType(ns, schema.EntityType);\r\n\r\n // V4 only: function & action types\r\n this.digestOperations(schema);\r\n });\r\n\r\n this.postProcessModel();\r\n this.postProcessKeys();\r\n }\r\n\r\n private getBaseModel(\r\n entityConfig: WithoutName<EntityTypeGenerationOptions | ComplexTypeGenerationOptions> | undefined,\r\n model: ComplexType,\r\n namespace: string,\r\n name: string,\r\n fqName: string\r\n ) {\r\n const odataName = model.$.Name;\r\n\r\n // map properties respecting the config\r\n const props = [...(model.Property ?? []), ...this.getNavigationProps(model)].map((p) => {\r\n const epConfig = entityConfig?.properties?.find((ep) => ep.name === p.$.Name);\r\n return this.mapProp(p, epConfig);\r\n });\r\n\r\n // support for base types, i.e. extends clause of interfaces\r\n const baseClasses = [];\r\n let finalBaseClass: string | undefined = undefined;\r\n if (model.$.BaseType) {\r\n baseClasses.push(model.$.BaseType);\r\n const [baseName, basePrefix] = this.namingHelper.getNameAndServicePrefix(model.$.BaseType);\r\n const baseConfig =\r\n this.serviceConfigHelper.findEntityTypeConfig([basePrefix!], baseName) ||\r\n this.serviceConfigHelper.findComplexTypeConfig([basePrefix!], baseName);\r\n finalBaseClass = baseConfig?.mappedName ?? baseName;\r\n }\r\n\r\n return {\r\n fqName,\r\n odataName,\r\n name,\r\n modelName: this.namingHelper.getModelName(name),\r\n qName: this.namingHelper.getQName(name),\r\n editableName: this.namingHelper.getEditableModelName(name),\r\n serviceName: this.namingHelper.getServiceName(name),\r\n serviceCollectionName: this.namingHelper.getCollectionServiceName(name),\r\n folderPath: this.namingHelper.getFolderPath(namespace, name),\r\n baseClasses,\r\n finalBaseClass,\r\n props,\r\n baseProps: [], // postprocess required\r\n abstract: ifTrue(model.$.Abstract),\r\n open: ifTrue(model.$.OpenType),\r\n };\r\n }\r\n\r\n private addTypeDefinition(ns: string, types: Array<TypeDefinition> | undefined) {\r\n if (!types || !types.length) {\r\n return;\r\n }\r\n\r\n for (const t of types) {\r\n this.dataModel.addTypeDefinition(ns, t.$.Name, t.$.UnderlyingType);\r\n }\r\n }\r\n\r\n private addEnum(namespace: NamespaceWithAlias, models: Array<EnumType> | undefined) {\r\n if (!models || !models.length) {\r\n return;\r\n }\r\n\r\n for (const et of models) {\r\n const odataName = et.$.Name;\r\n const fqName = withNamespace(namespace[0], odataName);\r\n const config = this.serviceConfigHelper.findEnumTypeConfig(namespace, odataName);\r\n const enumName = this.nameValidator.addEnumType(fqName, config?.mappedName || odataName);\r\n const filePath = this.namingHelper.getFolderPath(namespace[0], enumName);\r\n this.dataModel.addEnum(namespace[0], odataName, {\r\n fqName,\r\n odataName,\r\n name: enumName,\r\n modelName: this.namingHelper.getEnumName(enumName),\r\n folderPath: filePath,\r\n members: et.Member.map((m) => m.$.Name),\r\n });\r\n }\r\n }\r\n\r\n private addComplexType(namespace: NamespaceWithAlias, models: Array<ComplexType> | undefined) {\r\n if (!models || !models.length) {\r\n return;\r\n }\r\n\r\n for (const model of models) {\r\n const config = this.serviceConfigHelper.findComplexTypeConfig(namespace, model.$.Name);\r\n const fqName = withNamespace(namespace[0], model.$.Name);\r\n const name = this.nameValidator.addComplexType(fqName, config?.mappedName || model.$.Name);\r\n const baseModel = this.getBaseModel(config, model, namespace[0], name, fqName);\r\n this.dataModel.addComplexType(namespace[0], baseModel.odataName, baseModel);\r\n }\r\n }\r\n\r\n private addEntityType(namespace: NamespaceWithAlias, models: Array<ET> | undefined) {\r\n if (!models || !models.length) {\r\n return;\r\n }\r\n\r\n for (const model of models) {\r\n const entityConfig = this.serviceConfigHelper.findEntityTypeConfig(namespace, model.$.Name);\r\n const fqName = withNamespace(namespace[0], model.$.Name);\r\n const name = this.nameValidator.addEntityType(fqName, entityConfig?.mappedName || model.$.Name);\r\n const baseModel = this.getBaseModel(entityConfig, model, namespace[0], name, fqName);\r\n\r\n // key support: we add keys from this entity,\r\n // but not keys stemming from base classes (postprocess required)\r\n const keyNames: Array<string> = [];\r\n if (entityConfig?.keys?.length) {\r\n keyNames.push(...entityConfig.keys);\r\n } else {\r\n const entity = model as EntityType;\r\n if (entity.Key && entity.Key.length && entity.Key[0].PropertyRef.length) {\r\n const propNames = entity.Key[0].PropertyRef.map((key) => key.$.Name);\r\n keyNames.push(...propNames);\r\n }\r\n }\r\n\r\n this.dataModel.addEntityType(namespace[0], baseModel.odataName, {\r\n ...baseModel,\r\n id: {\r\n fqName: baseModel.fqName,\r\n modelName: this.namingHelper.getIdModelName(name),\r\n qName: this.namingHelper.getQIdFunctionName(name),\r\n },\r\n generateId: !!keyNames.length,\r\n keyNames: keyNames, // postprocess required to include key specs from base classes\r\n keys: [], // postprocess required to include props from base classes\r\n getKeyUnion: () => keyNames.join(\" | \"),\r\n });\r\n }\r\n }\r\n\r\n private postProcessModel() {\r\n // complex types\r\n const complexTypes = this.dataModel.getComplexTypes();\r\n complexTypes.forEach((ct) => {\r\n const [baseProps, _, baseAttributes] = this.collectBaseClassPropsAndKeys(ct, []);\r\n const { open } = baseAttributes;\r\n ct.baseProps = baseProps.map((bp) => ({ ...bp }));\r\n if (open) {\r\n ct.open = true;\r\n }\r\n });\r\n // entity types\r\n const entityTypes = this.dataModel.getEntityTypes();\r\n entityTypes.forEach((et) => {\r\n const [baseProps, baseKeys, baseAttributes] = this.collectBaseClassPropsAndKeys(et, []);\r\n const { fqIdName, idName, qIdName, open } = baseAttributes;\r\n et.baseProps = baseProps.map((bp) => ({ ...bp }));\r\n\r\n if (!et.keyNames.length && idName) {\r\n et.id = {\r\n fqName: fqIdName,\r\n modelName: idName,\r\n qName: qIdName,\r\n };\r\n et.generateId = false;\r\n }\r\n if (open) {\r\n et.open = open;\r\n }\r\n et.keyNames.unshift(...baseKeys.filter((bk) => !et.keyNames.includes(bk)));\r\n });\r\n }\r\n\r\n private postProcessKeys() {\r\n const entityTypes = this.dataModel.getEntityTypes();\r\n entityTypes.forEach((et) => {\r\n const isSingleKey = et.keyNames.length === 1;\r\n const props = [...et.baseProps, ...et.props];\r\n et.keys = et.keyNames.map((keyName) => {\r\n const prop = props.find((p) => p.odataName === keyName);\r\n if (!prop) {\r\n throw new Error(`Key with name [${keyName}] not found in props!`);\r\n }\r\n\r\n // automatically set key prop to managed, if this is the only key of the given entity\r\n if (prop.managed === undefined) {\r\n prop.managed = !this.options.disableAutoManagedKey && isSingleKey;\r\n }\r\n\r\n return prop;\r\n });\r\n });\r\n }\r\n\r\n private collectBaseClassPropsAndKeys(model: ComplexModelType, visitedModels: string[]): CollectorTuple {\r\n if (visitedModels.includes(model.fqName)) {\r\n throw new Error(`Cyclic inheritance detected for model ${model.fqName}!`);\r\n }\r\n visitedModels.push(model.fqName);\r\n return model.baseClasses.reduce(\r\n ([props, keys, attributes], bc) => {\r\n const baseModel = this.dataModel.getEntityType(bc) || this.dataModel.getComplexType(bc);\r\n if (!baseModel) {\r\n throw new Error(`BaseModel \"${bc}\" doesn't exist!`);\r\n }\r\n\r\n let { fqIdName, idName, qIdName, open } = attributes;\r\n\r\n // recursive\r\n if (baseModel.baseClasses.length) {\r\n const [parentProps, parentKeys, parentAttributes] = this.collectBaseClassPropsAndKeys(\r\n baseModel,\r\n visitedModels\r\n );\r\n props.unshift(...parentProps);\r\n keys.unshift(...parentKeys);\r\n if (parentAttributes?.idName) {\r\n fqIdName = parentAttributes.fqIdName;\r\n idName = parentAttributes.idName;\r\n qIdName = parentAttributes.qIdName;\r\n }\r\n if (parentAttributes?.open) {\r\n open = true;\r\n }\r\n }\r\n\r\n props.push(...baseModel.props);\r\n const entityModel = baseModel as EntityModelType;\r\n if (entityModel.keyNames?.length) {\r\n keys.push(...entityModel.keyNames.filter((kn) => !keys.includes(kn)));\r\n fqIdName = entityModel.id.fqName;\r\n idName = entityModel.id.modelName;\r\n qIdName = entityModel.id.qName;\r\n }\r\n if (baseModel.open) {\r\n open = true;\r\n }\r\n return [props, keys, { fqIdName, idName, qIdName, open }];\r\n },\r\n [[], [], { fqIdName: \"\", idName: \"\", qIdName: \"\", open: false }] as CollectorTuple\r\n );\r\n }\r\n\r\n protected mapProp = (p: Property, entityPropConfig?: PropertyGenerationOptions | undefined): PropertyModel => {\r\n if (!p.$.Type) {\r\n throw new Error(`No type information given for property [${p.$.Name}]!`);\r\n }\r\n\r\n const configProp = this.serviceConfigHelper.findPropConfigByName(p.$.Name);\r\n const modelName = this.namingHelper.getModelPropName(\r\n entityPropConfig?.mappedName || configProp?.mappedName || p.$.Name\r\n );\r\n const isCollection = !!p.$.Type.match(/^Collection\\(/);\r\n let dataType = p.$.Type.replace(/^Collection\\(([^\\)]+)\\)/, \"$1\");\r\n\r\n // support for primitive type mapping\r\n if (this.namingHelper.includesServicePrefix(dataType)) {\r\n const dt = this.dataModel.getPrimitiveType(dataType);\r\n if (dt !== undefined) {\r\n dataType = dt;\r\n }\r\n }\r\n\r\n let result: Pick<PropertyModel, \"dataType\" | \"type\" | \"typeModule\" | \"qPath\" | \"qParam\" | \"qObject\" | \"converters\">;\r\n\r\n // domain object known from service:\r\n // EntityType, ComplexType, EnumType\r\n if (this.namingHelper.includesServicePrefix(dataType)) {\r\n const resultDt = this.model2Type.get(dataType)!;\r\n const [dataTypeName, dataTypePrefix] = this.namingHelper.getNameAndServicePrefix(dataType);\r\n const dataTypeNamespace: NamespaceWithAlias = [dataTypePrefix!];\r\n if (!resultDt) {\r\n throw new Error(\r\n `Couldn't determine model data type for property \"${p.$.Name}\"! Given data type: \"${dataType}\".`\r\n );\r\n }\r\n\r\n // special handling for enums\r\n if (resultDt === DataTypes.EnumType) {\r\n const enumConfig = this.serviceConfigHelper.findEnumTypeConfig(dataTypeNamespace, dataTypeName);\r\n result = {\r\n dataType: resultDt,\r\n type: this.namingHelper.getEnumName(enumConfig?.mappedName ?? dataType),\r\n qPath: \"QEnumPath\",\r\n qObject: isCollection ? \"QEnumCollection\" : undefined,\r\n qParam: \"QEnumParam\",\r\n };\r\n }\r\n // handling of complex & entity types\r\n else {\r\n const entityConfig =\r\n resultDt === DataTypes.ComplexType\r\n ? this.serviceConfigHelper.findComplexTypeConfig(dataTypeNamespace, dataTypeName)\r\n : this.serviceConfigHelper.findEntityTypeConfig(dataTypeNamespace, dataTypeName);\r\n const resultDataType = entityConfig?.mappedName ?? dataType;\r\n result = {\r\n dataType: resultDt,\r\n type: this.namingHelper.getModelName(resultDataType),\r\n qPath: \"QEntityPath\",\r\n qObject: this.namingHelper.getQName(resultDataType),\r\n qParam: \"QComplexParam\",\r\n };\r\n }\r\n }\r\n // OData built-in data types\r\n else if (dataType.startsWith(Digester.EDM_PREFIX)) {\r\n const { outputType, qPath, qParam, qCollection } = this.mapODataType(dataType);\r\n const { to, toModule: typeModule, converters } = this.dataModel.getConverter(dataType) || {};\r\n\r\n const type = !to ? outputType : to.startsWith(Digester.EDM_PREFIX) ? this.mapODataType(to).outputType : to;\r\n\r\n result = {\r\n dataType: DataTypes.PrimitiveType,\r\n type,\r\n typeModule,\r\n qPath,\r\n qParam,\r\n qObject: isCollection ? qCollection : undefined,\r\n converters,\r\n };\r\n } else {\r\n throw new Error(\r\n `Unknown type [${dataType}]: Not 'Collection(...)', not OData type 'Edm.*', not starting with one of the namespaces!`\r\n );\r\n }\r\n\r\n return {\r\n odataName: p.$.Name,\r\n name: modelName,\r\n odataType: p.$.Type,\r\n fqType: dataType,\r\n required: ifFalse(p.$.Nullable),\r\n isCollection: isCollection,\r\n managed: typeof entityPropConfig?.managed !== \"undefined\" ? entityPropConfig.managed : configProp?.managed,\r\n ...result,\r\n };\r\n };\r\n}\r\n"]}
1
+ {"version":3,"file":"DataModelDigestion.js","sourceRoot":"","sources":["../../src/data-model/DataModelDigestion.ts"],"names":[],"mappings":"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","sourcesContent":["import { MappedConverterChains } from \"@odata2ts/converter-runtime\";\r\n\r\nimport { DigestionOptions } from \"../FactoryFunctionModel\";\r\nimport {\r\n ComplexTypeGenerationOptions,\r\n EntityTypeGenerationOptions,\r\n Modes,\r\n PropertyGenerationOptions,\r\n} from \"../OptionModel\";\r\nimport { DataModel, NamespaceWithAlias, withNamespace } from \"./DataModel\";\r\nimport {\r\n ComplexType as ComplexModelType,\r\n DataTypes,\r\n EntityType as EntityModelType,\r\n ODataVersion,\r\n PropertyModel,\r\n} from \"./DataTypeModel\";\r\nimport { ComplexType, EntityType, EnumType, Property, Schema, TypeDefinition } from \"./edmx/ODataEdmxModelBase\";\r\nimport { EntityContainerV3, SchemaV3 } from \"./edmx/ODataEdmxModelV3\";\r\nimport { EntityContainerV4, SchemaV4 } from \"./edmx/ODataEdmxModelV4\";\r\nimport { NamingHelper } from \"./NamingHelper\";\r\nimport { ServiceConfigHelper, WithoutName } from \"./ServiceConfigHelper\";\r\nimport { NameClashValidator } from \"./validation/NameClashValidator\";\r\nimport { NameValidator } from \"./validation/NameValidator\";\r\nimport { NoopValidator } from \"./validation/NoopValidator\";\r\n\r\ntype CollectorTuple = [\r\n Array<PropertyModel>,\r\n Array<string>,\r\n { fqIdName: string; idName: string; qIdName: string; open: boolean }\r\n];\r\n\r\nfunction ifTrue(value: string | undefined): boolean {\r\n return value === \"true\";\r\n}\r\n\r\nfunction ifFalse(value: string | undefined): boolean {\r\n return value === \"false\";\r\n}\r\n\r\nexport interface TypeModel {\r\n outputType: string;\r\n qPath: string;\r\n qCollection: string;\r\n qParam: string | undefined;\r\n}\r\n\r\nexport abstract class Digester<S extends Schema<ET, CT>, ET extends EntityType, CT extends ComplexType> {\r\n protected static EDM_PREFIX = \"Edm.\";\r\n\r\n protected readonly dataModel: DataModel;\r\n protected readonly serviceConfigHelper: ServiceConfigHelper;\r\n protected readonly nameValidator: NameValidator;\r\n\r\n /**\r\n * Reverse mapping from fqName to data type: EntityType, ComplexType, EnumType, or Primitive Type.\r\n */\r\n private model2Type = new Map<string, DataTypes>();\r\n /**\r\n * Stores models (ComplexType or EntityType) by fqName that have been referenced in the API\r\n * as entry point or via navProp.\r\n * For these models one or two services are generated.\r\n *\r\n * In this way unnecessary service generation is prevented. For example, complex types that\r\n * are only referenced as response of an operation do not need a generated service.\r\n * @private\r\n */\r\n private serviceModels = new Set<string>();\r\n\r\n protected constructor(\r\n protected version: ODataVersion,\r\n protected schemas: Array<S>,\r\n protected options: DigestionOptions,\r\n protected namingHelper: NamingHelper,\r\n converters?: MappedConverterChains\r\n ) {\r\n const namespaces = schemas.map<NamespaceWithAlias>((s) => [s.$.Namespace, s.$.Alias]);\r\n this.dataModel = new DataModel(namespaces, version, converters);\r\n this.serviceConfigHelper = new ServiceConfigHelper(options);\r\n this.nameValidator = this.options.bundledFileGeneration ? new NameClashValidator(options) : new NoopValidator();\r\n\r\n this.collectModelTypes(schemas);\r\n }\r\n\r\n private collectModelTypes(schemas: Array<S>) {\r\n schemas.forEach((schema) => {\r\n const { Namespace: ns, Alias: alias } = schema.$;\r\n\r\n schema.EnumType?.forEach((et) => {\r\n this.addModel2Type(ns, alias, et.$.Name, DataTypes.EnumType);\r\n });\r\n schema.ComplexType?.forEach((ct) => {\r\n this.addModel2Type(ns, alias, ct.$.Name, DataTypes.ComplexType);\r\n });\r\n schema.EntityType?.forEach((et) => {\r\n this.addModel2Type(ns, alias, et.$.Name, DataTypes.ModelType);\r\n });\r\n });\r\n }\r\n\r\n private addModel2Type(ns: string, alias: string | undefined, name: string, dt: DataTypes) {\r\n this.model2Type.set(withNamespace(ns, name), dt);\r\n if (alias) {\r\n this.model2Type.set(withNamespace(alias, name), dt);\r\n }\r\n }\r\n\r\n protected abstract getNavigationProps(entityType: ET | ComplexType): Array<Property>;\r\n\r\n protected abstract digestOperations(schema: SchemaV3 | SchemaV4): void;\r\n\r\n protected abstract digestEntityContainer(schema: SchemaV3 | SchemaV4): void;\r\n\r\n /**\r\n * Get essential infos about a given odata type from the version specific service variants.\r\n *\r\n * @param type\r\n * @return tuple of return type, query object, query collection object\r\n */\r\n protected abstract mapODataType(type: string): TypeModel;\r\n\r\n public async digest(): Promise<DataModel> {\r\n this.digestEntityTypesAndOperations();\r\n\r\n // delegate to version specific entity container digestion\r\n this.schemas.forEach((schema) => this.digestEntityContainer(schema));\r\n\r\n this.dataModel.setNameValidation(this.nameValidator.validate());\r\n return this.dataModel;\r\n }\r\n\r\n private digestEntityTypesAndOperations() {\r\n this.schemas.forEach((schema) => {\r\n const ns: NamespaceWithAlias = [schema.$.Namespace, schema.$.Alias];\r\n\r\n // type definitions: alias for primitive types\r\n this.addTypeDefinition(schema.$.Namespace, schema.TypeDefinition);\r\n\r\n // enums\r\n this.addEnum(ns, schema.EnumType);\r\n\r\n // complex types\r\n this.addComplexType(ns, schema.ComplexType);\r\n\r\n // entity types\r\n this.addEntityType(ns, schema.EntityType);\r\n\r\n // V4 only: function & action types\r\n this.digestOperations(schema);\r\n\r\n this.analyzeModelUsage(schema.EntityContainer?.length ? schema.EntityContainer[0] : undefined);\r\n });\r\n\r\n this.postProcessModel();\r\n this.postProcessKeys();\r\n }\r\n\r\n private getBaseModel(\r\n entityConfig: WithoutName<EntityTypeGenerationOptions | ComplexTypeGenerationOptions> | undefined,\r\n model: ComplexType,\r\n namespace: string,\r\n name: string,\r\n fqName: string\r\n ) {\r\n const odataName = model.$.Name;\r\n\r\n // map properties respecting the config\r\n const props = [...(model.Property ?? []), ...this.getNavigationProps(model)].map((p) => {\r\n const epConfig = entityConfig?.properties?.find((ep) => ep.name === p.$.Name);\r\n return this.mapProp(p, epConfig);\r\n });\r\n\r\n // support for base types, i.e. extends clause of interfaces\r\n const baseClasses = [];\r\n let finalBaseClass: string | undefined = undefined;\r\n if (model.$.BaseType) {\r\n baseClasses.push(model.$.BaseType);\r\n const [baseName, basePrefix] = this.namingHelper.getNameAndServicePrefix(model.$.BaseType);\r\n const baseConfig =\r\n this.serviceConfigHelper.findEntityTypeConfig([basePrefix!], baseName) ||\r\n this.serviceConfigHelper.findComplexTypeConfig([basePrefix!], baseName);\r\n finalBaseClass = baseConfig?.mappedName ?? baseName;\r\n }\r\n\r\n return {\r\n fqName,\r\n odataName,\r\n name,\r\n modelName: this.namingHelper.getModelName(name),\r\n qName: this.namingHelper.getQName(name),\r\n editableName: this.namingHelper.getEditableModelName(name),\r\n serviceName: this.namingHelper.getServiceName(name),\r\n serviceCollectionName: this.namingHelper.getCollectionServiceName(name),\r\n folderPath: this.namingHelper.getFolderPath(namespace, name),\r\n baseClasses,\r\n finalBaseClass,\r\n props,\r\n baseProps: [], // postprocess required\r\n abstract: ifTrue(model.$.Abstract),\r\n open: ifTrue(model.$.OpenType),\r\n genMode: Modes.service,\r\n } satisfies Partial<ComplexModelType>;\r\n }\r\n\r\n private addTypeDefinition(ns: string, types: Array<TypeDefinition> | undefined) {\r\n if (!types || !types.length) {\r\n return;\r\n }\r\n\r\n for (const t of types) {\r\n this.dataModel.addTypeDefinition(ns, t.$.Name, t.$.UnderlyingType);\r\n }\r\n }\r\n\r\n private addEnum(namespace: NamespaceWithAlias, models: Array<EnumType> | undefined) {\r\n if (!models || !models.length) {\r\n return;\r\n }\r\n\r\n for (const et of models) {\r\n const odataName = et.$.Name;\r\n const fqName = withNamespace(namespace[0], odataName);\r\n const config = this.serviceConfigHelper.findEnumTypeConfig(namespace, odataName);\r\n const enumName = this.nameValidator.addEnumType(fqName, config?.mappedName || odataName);\r\n const filePath = this.namingHelper.getFolderPath(namespace[0], enumName);\r\n this.dataModel.addEnum(namespace[0], odataName, {\r\n fqName,\r\n odataName,\r\n name: enumName,\r\n modelName: this.namingHelper.getEnumName(enumName),\r\n folderPath: filePath,\r\n members: et.Member?.length ? et.Member.map((m) => m.$.Name) : [],\r\n });\r\n }\r\n }\r\n\r\n private addComplexType(namespace: NamespaceWithAlias, models: Array<ComplexType> | undefined) {\r\n if (!models || !models.length) {\r\n return;\r\n }\r\n\r\n for (const model of models) {\r\n const config = this.serviceConfigHelper.findComplexTypeConfig(namespace, model.$.Name);\r\n const fqName = withNamespace(namespace[0], model.$.Name);\r\n const name = this.nameValidator.addComplexType(fqName, config?.mappedName || model.$.Name);\r\n const baseModel = this.getBaseModel(config, model, namespace[0], name, fqName);\r\n this.dataModel.addComplexType(namespace[0], baseModel.odataName, baseModel);\r\n }\r\n }\r\n\r\n private addEntityType(namespace: NamespaceWithAlias, models: Array<ET> | undefined) {\r\n if (!models || !models.length) {\r\n return;\r\n }\r\n\r\n for (const model of models) {\r\n const entityConfig = this.serviceConfigHelper.findEntityTypeConfig(namespace, model.$.Name);\r\n const fqName = withNamespace(namespace[0], model.$.Name);\r\n const name = this.nameValidator.addEntityType(fqName, entityConfig?.mappedName || model.$.Name);\r\n const baseModel = this.getBaseModel(entityConfig, model, namespace[0], name, fqName);\r\n\r\n // key support: we add keys from this entity,\r\n // but not keys stemming from base classes (postprocess required)\r\n const keyNames: Array<string> = [];\r\n if (entityConfig?.keys?.length) {\r\n keyNames.push(...entityConfig.keys);\r\n } else {\r\n const entity = model as EntityType;\r\n if (entity.Key && entity.Key.length && entity.Key[0].PropertyRef.length) {\r\n const propNames = entity.Key[0].PropertyRef.map((key) => key.$.Name);\r\n keyNames.push(...propNames);\r\n }\r\n }\r\n\r\n this.dataModel.addEntityType(namespace[0], baseModel.odataName, {\r\n ...baseModel,\r\n id: {\r\n fqName: baseModel.fqName,\r\n modelName: this.namingHelper.getIdModelName(name),\r\n qName: this.namingHelper.getQIdFunctionName(name),\r\n },\r\n generateId: !!keyNames.length,\r\n keyNames: keyNames, // postprocess required to include key specs from base classes\r\n keys: [], // postprocess required to include props from base classes\r\n getKeyUnion: () => keyNames.join(\" | \"),\r\n });\r\n }\r\n }\r\n\r\n private analyzeModelUsage(ec: EntityContainerV3 | EntityContainerV4 | undefined) {\r\n if (ec?.EntitySet?.length) {\r\n ec.EntitySet.forEach((et) => this.analyze(et.$.EntityType));\r\n }\r\n const ec4 = ec as EntityContainerV4;\r\n if (ec4?.Singleton?.length) {\r\n ec4.Singleton.forEach((singleton) => this.analyze(singleton.$.Type));\r\n }\r\n }\r\n\r\n private analyze(fqModelName: string) {\r\n if (this.serviceModels.has(fqModelName)) {\r\n return;\r\n }\r\n\r\n this.serviceModels.add(fqModelName);\r\n const model = this.dataModel.getEntityType(fqModelName) ?? this.dataModel.getComplexType(fqModelName);\r\n\r\n if (model) {\r\n if (model.baseClasses.length) {\r\n this.analyze(model.baseClasses[0]);\r\n }\r\n model?.props.forEach((p) => {\r\n if (p.dataType === DataTypes.ComplexType || p.dataType === DataTypes.ModelType) {\r\n this.analyze(p.fqType);\r\n }\r\n });\r\n }\r\n }\r\n\r\n private postProcessModel() {\r\n // complex types\r\n const complexTypes = this.dataModel.getComplexTypes();\r\n complexTypes.forEach((ct) => {\r\n const [baseProps, _, baseAttributes] = this.collectBaseClassPropsAndKeys(ct, []);\r\n const { open } = baseAttributes;\r\n ct.baseProps = baseProps.map((bp) => ({ ...bp }));\r\n if (open) {\r\n ct.open = true;\r\n }\r\n if (!this.serviceModels.has(ct.fqName)) {\r\n ct.genMode = Modes.qobjects;\r\n }\r\n });\r\n // entity types\r\n const entityTypes = this.dataModel.getEntityTypes();\r\n entityTypes.forEach((et) => {\r\n const [baseProps, baseKeys, baseAttributes] = this.collectBaseClassPropsAndKeys(et, []);\r\n const { fqIdName, idName, qIdName, open } = baseAttributes;\r\n et.baseProps = baseProps.map((bp) => ({ ...bp }));\r\n\r\n if (!et.keyNames.length && idName) {\r\n et.id = {\r\n fqName: fqIdName,\r\n modelName: idName,\r\n qName: qIdName,\r\n };\r\n et.generateId = false;\r\n }\r\n if (open) {\r\n et.open = open;\r\n }\r\n if (!this.serviceModels.has(et.fqName)) {\r\n et.genMode = Modes.qobjects;\r\n }\r\n et.keyNames.unshift(...baseKeys.filter((bk) => !et.keyNames.includes(bk)));\r\n });\r\n }\r\n\r\n private postProcessKeys() {\r\n const entityTypes = this.dataModel.getEntityTypes();\r\n entityTypes.forEach((et) => {\r\n const isSingleKey = et.keyNames.length === 1;\r\n const props = [...et.baseProps, ...et.props];\r\n et.keys = et.keyNames.map((keyName) => {\r\n const prop = props.find((p) => p.odataName === keyName);\r\n if (!prop) {\r\n throw new Error(`Key with name [${keyName}] not found in props!`);\r\n }\r\n\r\n // automatically set key prop to managed, if this is the only key of the given entity\r\n if (prop.managed === undefined) {\r\n prop.managed = !this.options.disableAutoManagedKey && isSingleKey;\r\n }\r\n\r\n return prop;\r\n });\r\n });\r\n }\r\n\r\n private collectBaseClassPropsAndKeys(model: ComplexModelType, visitedModels: string[]): CollectorTuple {\r\n if (visitedModels.includes(model.fqName)) {\r\n throw new Error(`Cyclic inheritance detected for model ${model.fqName}!`);\r\n }\r\n visitedModels.push(model.fqName);\r\n return model.baseClasses.reduce(\r\n ([props, keys, attributes], bc) => {\r\n const baseModel = this.dataModel.getEntityType(bc) || this.dataModel.getComplexType(bc);\r\n if (!baseModel) {\r\n throw new Error(`BaseModel \"${bc}\" doesn't exist!`);\r\n }\r\n\r\n let { fqIdName, idName, qIdName, open } = attributes;\r\n\r\n // recursive\r\n if (baseModel.baseClasses.length) {\r\n const [parentProps, parentKeys, parentAttributes] = this.collectBaseClassPropsAndKeys(\r\n baseModel,\r\n visitedModels\r\n );\r\n props.unshift(...parentProps);\r\n keys.unshift(...parentKeys);\r\n if (parentAttributes?.idName) {\r\n fqIdName = parentAttributes.fqIdName;\r\n idName = parentAttributes.idName;\r\n qIdName = parentAttributes.qIdName;\r\n }\r\n if (parentAttributes?.open) {\r\n open = true;\r\n }\r\n }\r\n\r\n props.push(...baseModel.props);\r\n const entityModel = baseModel as EntityModelType;\r\n if (entityModel.keyNames?.length) {\r\n keys.push(...entityModel.keyNames.filter((kn) => !keys.includes(kn)));\r\n fqIdName = entityModel.id.fqName;\r\n idName = entityModel.id.modelName;\r\n qIdName = entityModel.id.qName;\r\n }\r\n if (baseModel.open) {\r\n open = true;\r\n }\r\n return [props, keys, { fqIdName, idName, qIdName, open }];\r\n },\r\n [[], [], { fqIdName: \"\", idName: \"\", qIdName: \"\", open: false }] as CollectorTuple\r\n );\r\n }\r\n\r\n protected mapProp = (p: Property, entityPropConfig?: PropertyGenerationOptions | undefined): PropertyModel => {\r\n if (!p.$.Type) {\r\n throw new Error(`No type information given for property [${p.$.Name}]!`);\r\n }\r\n\r\n const configProp = this.serviceConfigHelper.findPropConfigByName(p.$.Name);\r\n const modelName = this.namingHelper.getModelPropName(\r\n entityPropConfig?.mappedName || configProp?.mappedName || p.$.Name\r\n );\r\n const isCollection = !!p.$.Type.match(/^Collection\\(/);\r\n let odataDataType = p.$.Type.replace(/^Collection\\(([^\\)]+)\\)/, \"$1\");\r\n\r\n // support for primitive type mapping\r\n if (this.namingHelper.includesServicePrefix(odataDataType)) {\r\n const dt = this.dataModel.getPrimitiveType(odataDataType);\r\n if (dt !== undefined) {\r\n odataDataType = dt;\r\n }\r\n }\r\n\r\n let result: Pick<PropertyModel, \"dataType\" | \"type\" | \"typeModule\" | \"qPath\" | \"qParam\" | \"qObject\" | \"converters\">;\r\n\r\n // domain object known from service:\r\n // EntityType, ComplexType, EnumType\r\n if (this.namingHelper.includesServicePrefix(odataDataType)) {\r\n const modelType = this.model2Type.get(odataDataType)!;\r\n const [dataTypeName, dataTypePrefix] = this.namingHelper.getNameAndServicePrefix(odataDataType);\r\n const dataTypeNamespace: NamespaceWithAlias = [dataTypePrefix!];\r\n if (!modelType) {\r\n throw new Error(\r\n `Couldn't determine model type (EntityType, ComplexType, etc) for property \"${p.$.Name}\"! Given data type: \"${odataDataType}\".`\r\n );\r\n }\r\n\r\n // special handling for enums\r\n if (modelType === DataTypes.EnumType) {\r\n const enumConfig = this.serviceConfigHelper.findEnumTypeConfig(dataTypeNamespace, dataTypeName);\r\n result = {\r\n dataType: modelType,\r\n type: this.namingHelper.getEnumName(enumConfig?.mappedName ?? odataDataType),\r\n qPath: \"QEnumPath\",\r\n qObject: isCollection ? \"QEnumCollection\" : undefined,\r\n qParam: \"QEnumParam\",\r\n };\r\n }\r\n // handling of complex & entity types\r\n else {\r\n const entityConfig =\r\n modelType === DataTypes.ComplexType\r\n ? this.serviceConfigHelper.findComplexTypeConfig(dataTypeNamespace, dataTypeName)\r\n : this.serviceConfigHelper.findEntityTypeConfig(dataTypeNamespace, dataTypeName);\r\n const typeName = entityConfig?.mappedName ?? odataDataType;\r\n\r\n result = {\r\n dataType: modelType,\r\n type: this.namingHelper.getModelName(typeName),\r\n qPath: \"QEntityPath\",\r\n qObject: this.namingHelper.getQName(typeName),\r\n qParam: \"QComplexParam\",\r\n };\r\n }\r\n }\r\n // OData built-in data types\r\n else if (odataDataType.startsWith(Digester.EDM_PREFIX)) {\r\n const { outputType, qPath, qParam, qCollection } = this.mapODataType(odataDataType);\r\n const { to, toModule: typeModule, converters } = this.dataModel.getConverter(odataDataType) || {};\r\n\r\n const type = !to ? outputType : to.startsWith(Digester.EDM_PREFIX) ? this.mapODataType(to).outputType : to;\r\n\r\n result = {\r\n dataType: DataTypes.PrimitiveType,\r\n type,\r\n typeModule,\r\n qPath,\r\n qParam,\r\n qObject: isCollection ? qCollection : undefined,\r\n converters,\r\n };\r\n } else {\r\n throw new Error(\r\n `Unknown type [${odataDataType}]: Not 'Collection(...)', not OData type 'Edm.*', not starting with one of the namespaces!`\r\n );\r\n }\r\n\r\n return {\r\n odataName: p.$.Name,\r\n name: modelName,\r\n odataType: p.$.Type,\r\n fqType: odataDataType,\r\n required: ifFalse(p.$.Nullable),\r\n isCollection: isCollection,\r\n managed: typeof entityPropConfig?.managed !== \"undefined\" ? entityPropConfig.managed : configProp?.managed,\r\n ...result,\r\n };\r\n };\r\n}\r\n"]}
@@ -1,4 +1,5 @@
1
1
  import { ValueConverterImport } from "@odata2ts/converter-runtime";
2
+ import { Modes } from "../OptionModel";
2
3
  export declare enum ODataVersion {
3
4
  V2 = "2.0",
4
5
  V4 = "4.0"
@@ -58,6 +59,7 @@ export interface ComplexType {
58
59
  finalBaseClass: string | undefined;
59
60
  abstract: boolean;
60
61
  open: boolean;
62
+ genMode: Modes;
61
63
  }
62
64
  export interface EnumType {
63
65
  dataType: DataTypes;
@@ -78,6 +80,7 @@ export interface OperationType {
78
80
  parameters: Array<PropertyModel>;
79
81
  returnType?: ReturnTypeModel;
80
82
  usePost?: boolean;
83
+ overrides?: Array<Array<PropertyModel>>;
81
84
  }
82
85
  export interface ReturnTypeModel extends PropertyModel {
83
86
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DataTypeModel.js","sourceRoot":"","sources":["../../src/data-model/DataTypeModel.ts"],"names":[],"mappings":";;;AAEA,IAAY,YAGX;AAHD,WAAY,YAAY;IACtB,0BAAU,CAAA;IACV,0BAAU,CAAA;AACZ,CAAC,EAHW,YAAY,4BAAZ,YAAY,QAGvB","sourcesContent":["import { ValueConverterImport } from \"@odata2ts/converter-runtime\";\r\n\r\nexport enum ODataVersion {\r\n V2 = \"2.0\",\r\n V4 = \"4.0\",\r\n}\r\n\r\nexport const enum DataTypes {\r\n PrimitiveType = \"PrimitiveType\",\r\n EnumType = \"EnumType\",\r\n ComplexType = \"ComplexType\",\r\n ModelType = \"ModelType\",\r\n}\r\n\r\nexport const enum OperationTypes {\r\n Function = \"Function\",\r\n Action = \"Action\",\r\n}\r\n\r\nexport interface PropertyModel {\r\n odataName: string;\r\n name: string;\r\n odataType: string;\r\n fqType: string;\r\n type: string;\r\n typeModule?: string;\r\n qObject?: string;\r\n qPath: string;\r\n qParam?: string;\r\n required: boolean;\r\n isCollection: boolean;\r\n dataType: DataTypes;\r\n converters?: Array<ValueConverterImport>;\r\n managed?: boolean;\r\n}\r\n\r\nexport type ModelType = EntityType | ComplexType | EnumType;\r\n\r\nexport interface EntityType extends ComplexType {\r\n id: {\r\n // fully qualified name of entity to which this id belongs (might have been inherited)\r\n fqName: string;\r\n // that's the name of the param model for the id function\r\n modelName: string;\r\n // that's the name of the id function which is a q-object\r\n qName: string;\r\n };\r\n generateId: boolean;\r\n keyNames: Array<string>;\r\n keys: Array<PropertyModel>;\r\n getKeyUnion(): string;\r\n}\r\n\r\nexport interface ComplexType {\r\n dataType: DataTypes;\r\n fqName: string;\r\n odataName: string;\r\n name: string;\r\n modelName: string;\r\n editableName: string;\r\n qName: string;\r\n serviceName: string;\r\n serviceCollectionName: string;\r\n folderPath: string;\r\n props: Array<PropertyModel>;\r\n baseProps: Array<PropertyModel>;\r\n baseClasses: Array<string>;\r\n finalBaseClass: string | undefined;\r\n abstract: boolean;\r\n open: boolean;\r\n}\r\n\r\nexport interface EnumType {\r\n dataType: DataTypes;\r\n odataName: string;\r\n fqName: string;\r\n name: string;\r\n modelName: string;\r\n folderPath: string;\r\n members: Array<string>;\r\n}\r\n\r\nexport interface OperationType {\r\n fqName: string;\r\n odataName: string;\r\n name: string;\r\n qName: string;\r\n paramsModelName: string;\r\n type: OperationTypes;\r\n parameters: Array<PropertyModel>;\r\n returnType?: ReturnTypeModel;\r\n usePost?: boolean;\r\n}\r\n\r\nexport interface ReturnTypeModel extends PropertyModel {}\r\n\r\nexport type EntityContainerModel = {\r\n entitySets: { [name: string]: EntitySetType };\r\n singletons: { [name: string]: SingletonType };\r\n functions: { [name: string]: FunctionImportType };\r\n actions: { [name: string]: ActionImportType };\r\n};\r\n\r\nexport interface SingletonType {\r\n fqName: string;\r\n odataName: string;\r\n name: string;\r\n entityType: EntityType;\r\n navPropBinding?: Array<NavPropBindingType>;\r\n}\r\n\r\nexport interface EntitySetType {\r\n fqName: string;\r\n odataName: string;\r\n name: string;\r\n entityType: EntityType;\r\n navPropBinding?: Array<NavPropBindingType>;\r\n}\r\n\r\nexport interface NavPropBindingType {\r\n path: string;\r\n target: string;\r\n}\r\n\r\nexport interface ActionImportType {\r\n fqName: string;\r\n odataName: string;\r\n name: string;\r\n operation: string;\r\n}\r\n\r\nexport interface FunctionImportType extends ActionImportType {\r\n entitySet: string;\r\n}\r\n"]}
1
+ {"version":3,"file":"DataTypeModel.js","sourceRoot":"","sources":["../../src/data-model/DataTypeModel.ts"],"names":[],"mappings":";;;AAIA,IAAY,YAGX;AAHD,WAAY,YAAY;IACtB,0BAAU,CAAA;IACV,0BAAU,CAAA;AACZ,CAAC,EAHW,YAAY,4BAAZ,YAAY,QAGvB","sourcesContent":["import { ValueConverterImport } from \"@odata2ts/converter-runtime\";\r\n\r\nimport { Modes } from \"../OptionModel\";\r\n\r\nexport enum ODataVersion {\r\n V2 = \"2.0\",\r\n V4 = \"4.0\",\r\n}\r\n\r\nexport const enum DataTypes {\r\n PrimitiveType = \"PrimitiveType\",\r\n EnumType = \"EnumType\",\r\n ComplexType = \"ComplexType\",\r\n ModelType = \"ModelType\",\r\n}\r\n\r\nexport const enum OperationTypes {\r\n Function = \"Function\",\r\n Action = \"Action\",\r\n}\r\n\r\nexport interface PropertyModel {\r\n odataName: string;\r\n name: string;\r\n odataType: string;\r\n fqType: string;\r\n type: string;\r\n typeModule?: string;\r\n qObject?: string;\r\n qPath: string;\r\n qParam?: string;\r\n required: boolean;\r\n isCollection: boolean;\r\n dataType: DataTypes;\r\n converters?: Array<ValueConverterImport>;\r\n managed?: boolean;\r\n}\r\n\r\nexport type ModelType = EntityType | ComplexType | EnumType;\r\n\r\nexport interface EntityType extends ComplexType {\r\n id: {\r\n // fully qualified name of entity to which this id belongs (might have been inherited)\r\n fqName: string;\r\n // that's the name of the param model for the id function\r\n modelName: string;\r\n // that's the name of the id function which is a q-object\r\n qName: string;\r\n };\r\n generateId: boolean;\r\n keyNames: Array<string>;\r\n keys: Array<PropertyModel>;\r\n getKeyUnion(): string;\r\n}\r\n\r\nexport interface ComplexType {\r\n dataType: DataTypes;\r\n fqName: string;\r\n odataName: string;\r\n name: string;\r\n modelName: string;\r\n editableName: string;\r\n qName: string;\r\n serviceName: string;\r\n serviceCollectionName: string;\r\n folderPath: string;\r\n props: Array<PropertyModel>;\r\n baseProps: Array<PropertyModel>;\r\n baseClasses: Array<string>;\r\n finalBaseClass: string | undefined;\r\n abstract: boolean;\r\n open: boolean;\r\n genMode: Modes;\r\n}\r\n\r\nexport interface EnumType {\r\n dataType: DataTypes;\r\n odataName: string;\r\n fqName: string;\r\n name: string;\r\n modelName: string;\r\n folderPath: string;\r\n members: Array<string>;\r\n}\r\n\r\nexport interface OperationType {\r\n fqName: string;\r\n odataName: string;\r\n name: string;\r\n qName: string;\r\n paramsModelName: string;\r\n type: OperationTypes;\r\n parameters: Array<PropertyModel>;\r\n returnType?: ReturnTypeModel;\r\n usePost?: boolean;\r\n overrides?: Array<Array<PropertyModel>>;\r\n}\r\n\r\nexport interface ReturnTypeModel extends PropertyModel {}\r\n\r\nexport type EntityContainerModel = {\r\n entitySets: { [name: string]: EntitySetType };\r\n singletons: { [name: string]: SingletonType };\r\n functions: { [name: string]: FunctionImportType };\r\n actions: { [name: string]: ActionImportType };\r\n};\r\n\r\nexport interface SingletonType {\r\n fqName: string;\r\n odataName: string;\r\n name: string;\r\n entityType: EntityType;\r\n navPropBinding?: Array<NavPropBindingType>;\r\n}\r\n\r\nexport interface EntitySetType {\r\n fqName: string;\r\n odataName: string;\r\n name: string;\r\n entityType: EntityType;\r\n navPropBinding?: Array<NavPropBindingType>;\r\n}\r\n\r\nexport interface NavPropBindingType {\r\n path: string;\r\n target: string;\r\n}\r\n\r\nexport interface ActionImportType {\r\n fqName: string;\r\n odataName: string;\r\n name: string;\r\n operation: string;\r\n}\r\n\r\nexport interface FunctionImportType extends ActionImportType {\r\n entitySet: string;\r\n}\r\n"]}
@@ -67,7 +67,7 @@ export interface EnumType {
67
67
  $: {
68
68
  Name: string;
69
69
  };
70
- Member: Array<Member>;
70
+ Member?: Array<Member>;
71
71
  }
72
72
  export interface Member {
73
73
  $: {
@@ -1 +1 @@
1
- {"version":3,"file":"ODataEdmxModelBase.js","sourceRoot":"","sources":["../../../src/data-model/edmx/ODataEdmxModelBase.ts"],"names":[],"mappings":"","sourcesContent":["export interface ODataEdmxModelBase<VersionedSchema> {\n \"edmx:Edmx\": {\n $: {\n Version: string;\n \"xmlns:edmx\": string;\n };\n // \"edmx:Reference\": Array<any>;\n \"edmx:DataServices\": Array<DataService<VersionedSchema>>;\n };\n}\n\nexport interface DataService<VersionedSchema> {\n Schema: Array<VersionedSchema>;\n}\n\nexport interface Schema<ET extends EntityType, CT extends ComplexType> {\n $: {\n Namespace: string;\n xmlns: string;\n Alias?: string;\n };\n EntityType?: Array<ET>;\n ComplexType?: Array<CT>;\n EnumType?: Array<EnumType>;\n EntityContainer?: Array<any>;\n TypeDefinition?: Array<TypeDefinition>;\n}\n\nexport interface EntityContainer<ES = EntitySet> {\n $: {\n Name: string;\n };\n EntitySet?: Array<ES>;\n}\n\nexport interface EntitySet {\n $: {\n Name: string;\n EntityType: string;\n };\n}\n\nexport interface EntityType {\n $: {\n Name: string;\n BaseType?: string;\n Abstract?: \"true\" | \"false\";\n OpenType?: \"true\" | \"false\";\n };\n Key: Array<PropertyRef>;\n Property: Array<Property>;\n}\n\nexport interface ComplexType extends Omit<EntityType, \"Key\"> {}\n\nexport interface PropertyRef {\n PropertyRef: Array<{ $: { Name: string } }>;\n}\n\nexport interface Property {\n $: {\n Name: string;\n Type: string;\n Nullable?: \"true\" | \"false\";\n MaxLength?: number;\n Precision?: number;\n Scale?: number;\n };\n}\n\nexport interface EnumType {\n $: {\n Name: string;\n };\n Member: Array<Member>;\n}\n\nexport interface Member {\n $: {\n Name: string;\n Value: number;\n };\n}\n\nexport interface Parameter extends Property {\n Unicode?: boolean;\n}\n\nexport interface ReturnType {\n $: {\n Type: string;\n };\n}\n\nexport interface TypeDefinition {\n $: {\n Name: string;\n UnderlyingType: string;\n MaxLength?: number;\n Precision?: number;\n Scale?: number;\n };\n}\n"]}
1
+ {"version":3,"file":"ODataEdmxModelBase.js","sourceRoot":"","sources":["../../../src/data-model/edmx/ODataEdmxModelBase.ts"],"names":[],"mappings":"","sourcesContent":["export interface ODataEdmxModelBase<VersionedSchema> {\r\n \"edmx:Edmx\": {\r\n $: {\r\n Version: string;\r\n \"xmlns:edmx\": string;\r\n };\r\n // \"edmx:Reference\": Array<any>;\r\n \"edmx:DataServices\": Array<DataService<VersionedSchema>>;\r\n };\r\n}\r\n\r\nexport interface DataService<VersionedSchema> {\r\n Schema: Array<VersionedSchema>;\r\n}\r\n\r\nexport interface Schema<ET extends EntityType, CT extends ComplexType> {\r\n $: {\r\n Namespace: string;\r\n xmlns: string;\r\n Alias?: string;\r\n };\r\n EntityType?: Array<ET>;\r\n ComplexType?: Array<CT>;\r\n EnumType?: Array<EnumType>;\r\n EntityContainer?: Array<any>;\r\n TypeDefinition?: Array<TypeDefinition>;\r\n}\r\n\r\nexport interface EntityContainer<ES = EntitySet> {\r\n $: {\r\n Name: string;\r\n };\r\n EntitySet?: Array<ES>;\r\n}\r\n\r\nexport interface EntitySet {\r\n $: {\r\n Name: string;\r\n EntityType: string;\r\n };\r\n}\r\n\r\nexport interface EntityType {\r\n $: {\r\n Name: string;\r\n BaseType?: string;\r\n Abstract?: \"true\" | \"false\";\r\n OpenType?: \"true\" | \"false\";\r\n };\r\n Key: Array<PropertyRef>;\r\n Property: Array<Property>;\r\n}\r\n\r\nexport interface ComplexType extends Omit<EntityType, \"Key\"> {}\r\n\r\nexport interface PropertyRef {\r\n PropertyRef: Array<{ $: { Name: string } }>;\r\n}\r\n\r\nexport interface Property {\r\n $: {\r\n Name: string;\r\n Type: string;\r\n Nullable?: \"true\" | \"false\";\r\n MaxLength?: number;\r\n Precision?: number;\r\n Scale?: number;\r\n };\r\n}\r\n\r\nexport interface EnumType {\r\n $: {\r\n Name: string;\r\n };\r\n Member?: Array<Member>;\r\n}\r\n\r\nexport interface Member {\r\n $: {\r\n Name: string;\r\n Value: number;\r\n };\r\n}\r\n\r\nexport interface Parameter extends Property {\r\n Unicode?: boolean;\r\n}\r\n\r\nexport interface ReturnType {\r\n $: {\r\n Type: string;\r\n };\r\n}\r\n\r\nexport interface TypeDefinition {\r\n $: {\r\n Name: string;\r\n UnderlyingType: string;\r\n MaxLength?: number;\r\n Precision?: number;\r\n Scale?: number;\r\n };\r\n}\r\n"]}
@@ -58,13 +58,23 @@ class NameClashValidator {
58
58
  return this.addToTypes(fqName, name, TypeModel_1.TypeModel.EnumType);
59
59
  }
60
60
  addUnboundOperationType(fqName, name) {
61
- return this.addToTypes(fqName, name, TypeModel_1.TypeModel.OperationType);
61
+ const validationObject = { type: TypeModel_1.TypeModel.OperationType, fqName };
62
+ const hit = this.store.get(name);
63
+ // to support function overloads: allow multiple operation definitions with same fully qualified name
64
+ if (hit && hit.fqName !== fqName) {
65
+ return this.addToError(name, hit, validationObject);
66
+ }
67
+ else {
68
+ this.store.set(name, validationObject);
69
+ return name;
70
+ }
62
71
  }
63
72
  addBoundOperationType(bindingName, fqName, name) {
64
73
  const nameWithBinding = `${bindingName}_${name}`;
65
74
  const validationObject = { type: TypeModel_1.TypeModel.OperationType, fqName };
66
75
  const hit = this.store.get(nameWithBinding);
67
- if (hit) {
76
+ // to support function overloads: allow multiple operation definitions with same fully qualified name
77
+ if (hit && hit.fqName !== fqName) {
68
78
  return this.addToError(name, hit, validationObject);
69
79
  }
70
80
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"NameClashValidator.js","sourceRoot":"","sources":["../../../src/data-model/validation/NameClashValidator.ts"],"names":[],"mappings":"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","sourcesContent":["import { ConfigFileOptions } from \"../../OptionModel\";\r\nimport { TypeModel } from \"../../TypeModel\";\r\nimport { NameValidator, ValidationError } from \"./NameValidator\";\r\n\r\nexport interface NameValidatorOptions\r\n extends Pick<ConfigFileOptions, \"disableAutomaticNameClashResolution\" | \"bundledFileGeneration\"> {}\r\n\r\nexport class NameClashValidator implements NameValidator {\r\n private entityContainer = new Map<string, ValidationError>();\r\n private store = new Map<string, ValidationError>();\r\n private errors = new Map<string, ValidationError[]>();\r\n\r\n constructor(private options: NameValidatorOptions = {}) {}\r\n\r\n private addToError(name: string, hit: ValidationError, validationObject: ValidationError) {\r\n const existingErrors = this.errors.get(name);\r\n if (existingErrors) {\r\n if (!this.options.disableAutomaticNameClashResolution) {\r\n validationObject.renamedTo = `${name}${existingErrors.length + 1}`;\r\n }\r\n existingErrors.push(validationObject);\r\n } else {\r\n if (!this.options.disableAutomaticNameClashResolution) {\r\n validationObject.renamedTo = `${name}2`;\r\n }\r\n this.errors.set(name, [hit, validationObject]);\r\n }\r\n return validationObject.renamedTo ?? name;\r\n }\r\n\r\n private addToTypes(fqName: string, name: string, type: TypeModel): string {\r\n const validationObject: ValidationError = { type, fqName };\r\n const hit = this.store.get(name);\r\n if (hit) {\r\n return this.addToError(name, hit, validationObject);\r\n } else {\r\n this.store.set(name, validationObject);\r\n return name;\r\n }\r\n }\r\n\r\n private addToEntityContainer(fqName: string, name: string, type: TypeModel): string {\r\n const validationObject: ValidationError = { type, fqName };\r\n const hit = this.entityContainer.get(name);\r\n if (hit) {\r\n return this.addToError(name, hit, validationObject);\r\n } else {\r\n this.entityContainer.set(name, validationObject);\r\n return name;\r\n }\r\n }\r\n\r\n addEntityType(fqName: string, name: string) {\r\n return this.addToTypes(fqName, name, TypeModel.EntityType);\r\n }\r\n\r\n addComplexType(fqName: string, name: string) {\r\n return this.addToTypes(fqName, name, TypeModel.ComplexType);\r\n }\r\n\r\n addEnumType(fqName: string, name: string) {\r\n return this.addToTypes(fqName, name, TypeModel.EnumType);\r\n }\r\n\r\n addUnboundOperationType(fqName: string, name: string) {\r\n return this.addToTypes(fqName, name, TypeModel.OperationType);\r\n }\r\n\r\n addBoundOperationType(bindingName: string, fqName: string, name: string) {\r\n const nameWithBinding = `${bindingName}_${name}`;\r\n const validationObject: ValidationError = { type: TypeModel.OperationType, fqName };\r\n const hit = this.store.get(nameWithBinding);\r\n if (hit) {\r\n return this.addToError(name, hit, validationObject);\r\n } else {\r\n this.store.set(nameWithBinding, validationObject);\r\n return name;\r\n }\r\n }\r\n\r\n addOperationImportType(fqName: string, name: string) {\r\n return this.addToEntityContainer(fqName, name, TypeModel.OperationImportType);\r\n }\r\n\r\n addEntitySet(fqName: string, name: string) {\r\n return this.addToEntityContainer(fqName, name, TypeModel.EntitySet);\r\n }\r\n\r\n addSingleton(fqName: string, name: string) {\r\n return this.addToEntityContainer(fqName, name, TypeModel.Singleton);\r\n }\r\n\r\n validate() {\r\n return this.errors;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"NameClashValidator.js","sourceRoot":"","sources":["../../../src/data-model/validation/NameClashValidator.ts"],"names":[],"mappings":"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","sourcesContent":["import { ConfigFileOptions } from \"../../OptionModel\";\r\nimport { TypeModel } from \"../../TypeModel\";\r\nimport { NameValidator, ValidationError } from \"./NameValidator\";\r\n\r\nexport interface NameValidatorOptions\r\n extends Pick<ConfigFileOptions, \"disableAutomaticNameClashResolution\" | \"bundledFileGeneration\"> {}\r\n\r\nexport class NameClashValidator implements NameValidator {\r\n private entityContainer = new Map<string, ValidationError>();\r\n private store = new Map<string, ValidationError>();\r\n private errors = new Map<string, ValidationError[]>();\r\n\r\n constructor(private options: NameValidatorOptions = {}) {}\r\n\r\n private addToError(name: string, hit: ValidationError, validationObject: ValidationError) {\r\n const existingErrors = this.errors.get(name);\r\n if (existingErrors) {\r\n if (!this.options.disableAutomaticNameClashResolution) {\r\n validationObject.renamedTo = `${name}${existingErrors.length + 1}`;\r\n }\r\n existingErrors.push(validationObject);\r\n } else {\r\n if (!this.options.disableAutomaticNameClashResolution) {\r\n validationObject.renamedTo = `${name}2`;\r\n }\r\n this.errors.set(name, [hit, validationObject]);\r\n }\r\n return validationObject.renamedTo ?? name;\r\n }\r\n\r\n private addToTypes(fqName: string, name: string, type: TypeModel): string {\r\n const validationObject: ValidationError = { type, fqName };\r\n const hit = this.store.get(name);\r\n if (hit) {\r\n return this.addToError(name, hit, validationObject);\r\n } else {\r\n this.store.set(name, validationObject);\r\n return name;\r\n }\r\n }\r\n\r\n private addToEntityContainer(fqName: string, name: string, type: TypeModel): string {\r\n const validationObject: ValidationError = { type, fqName };\r\n const hit = this.entityContainer.get(name);\r\n if (hit) {\r\n return this.addToError(name, hit, validationObject);\r\n } else {\r\n this.entityContainer.set(name, validationObject);\r\n return name;\r\n }\r\n }\r\n\r\n addEntityType(fqName: string, name: string) {\r\n return this.addToTypes(fqName, name, TypeModel.EntityType);\r\n }\r\n\r\n addComplexType(fqName: string, name: string) {\r\n return this.addToTypes(fqName, name, TypeModel.ComplexType);\r\n }\r\n\r\n addEnumType(fqName: string, name: string) {\r\n return this.addToTypes(fqName, name, TypeModel.EnumType);\r\n }\r\n\r\n addUnboundOperationType(fqName: string, name: string) {\r\n const validationObject: ValidationError = { type: TypeModel.OperationType, fqName };\r\n\r\n const hit = this.store.get(name);\r\n // to support function overloads: allow multiple operation definitions with same fully qualified name\r\n if (hit && hit.fqName !== fqName) {\r\n return this.addToError(name, hit, validationObject);\r\n } else {\r\n this.store.set(name, validationObject);\r\n return name;\r\n }\r\n }\r\n\r\n addBoundOperationType(bindingName: string, fqName: string, name: string) {\r\n const nameWithBinding = `${bindingName}_${name}`;\r\n const validationObject: ValidationError = { type: TypeModel.OperationType, fqName };\r\n const hit = this.store.get(nameWithBinding);\r\n // to support function overloads: allow multiple operation definitions with same fully qualified name\r\n if (hit && hit.fqName !== fqName) {\r\n return this.addToError(name, hit, validationObject);\r\n } else {\r\n this.store.set(nameWithBinding, validationObject);\r\n return name;\r\n }\r\n }\r\n\r\n addOperationImportType(fqName: string, name: string) {\r\n return this.addToEntityContainer(fqName, name, TypeModel.OperationImportType);\r\n }\r\n\r\n addEntitySet(fqName: string, name: string) {\r\n return this.addToEntityContainer(fqName, name, TypeModel.EntitySet);\r\n }\r\n\r\n addSingleton(fqName: string, name: string) {\r\n return this.addToEntityContainer(fqName, name, TypeModel.Singleton);\r\n }\r\n\r\n validate() {\r\n return this.errors;\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"NameValidator.js","sourceRoot":"","sources":["../../../src/data-model/validation/NameValidator.ts"],"names":[],"mappings":"","sourcesContent":["import { TypeModel } from \"../../TypeModel\";\n\nexport interface NameValidator {\n addEntityType(fqName: string, name: string): string;\n\n addComplexType(fqName: string, name: string): string;\n\n addEnumType(fqName: string, name: string): string;\n\n addUnboundOperationType(fqName: string, name: string): string;\n\n addBoundOperationType(bindingName: string, fqName: string, name: string): string;\n\n addOperationImportType(fqName: string, name: string): string;\n\n addEntitySet(fqName: string, name: string): string;\n\n addSingleton(fqName: string, name: string): string;\n\n validate(): Map<string, ValidationError[]>;\n}\n\nexport interface ValidationError {\n fqName: string;\n type: TypeModel;\n renamedTo?: string;\n}\n"]}
1
+ {"version":3,"file":"NameValidator.js","sourceRoot":"","sources":["../../../src/data-model/validation/NameValidator.ts"],"names":[],"mappings":"","sourcesContent":["import { TypeModel } from \"../../TypeModel\";\r\n\r\nexport interface NameValidator {\r\n addEntityType(fqName: string, name: string): string;\r\n\r\n addComplexType(fqName: string, name: string): string;\r\n\r\n addEnumType(fqName: string, name: string): string;\r\n\r\n addUnboundOperationType(fqName: string, name: string): string;\r\n\r\n addBoundOperationType(bindingName: string, fqName: string, name: string): string;\r\n\r\n addOperationImportType(fqName: string, name: string): string;\r\n\r\n addEntitySet(fqName: string, name: string): string;\r\n\r\n addSingleton(fqName: string, name: string): string;\r\n\r\n validate(): Map<string, ValidationError[]>;\r\n}\r\n\r\nexport interface ValidationError {\r\n fqName: string;\r\n type: TypeModel;\r\n renamedTo?: string;\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"NoopValidator.js","sourceRoot":"","sources":["../../../src/data-model/validation/NoopValidator.ts"],"names":[],"mappings":";;;AAGA,MAAa,aAAa;IACxB,qBAAqB,CAAC,WAAmB,EAAE,MAAc,EAAE,IAAY;QACrE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,cAAc,CAAC,MAAc,EAAE,IAAY;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY,CAAC,MAAc,EAAE,IAAY;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa,CAAC,MAAc,EAAE,IAAY;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,WAAW,CAAC,MAAc,EAAE,IAAY;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sBAAsB,CAAC,MAAc,EAAE,IAAY;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY,CAAC,MAAc,EAAE,IAAY;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uBAAuB,CAAC,MAAc,EAAE,IAAY;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;CACF;AApCD,sCAoCC","sourcesContent":["import { TypeModel } from \"../../TypeModel\";\nimport { NameValidator, ValidationError } from \"./NameValidator\";\n\nexport class NoopValidator implements NameValidator {\n addBoundOperationType(bindingName: string, fqName: string, name: string): string {\n return name;\n }\n\n addComplexType(fqName: string, name: string): string {\n return name;\n }\n\n addEntitySet(fqName: string, name: string): string {\n return name;\n }\n\n addEntityType(fqName: string, name: string): string {\n return name;\n }\n\n addEnumType(fqName: string, name: string): string {\n return name;\n }\n\n addOperationImportType(fqName: string, name: string): string {\n return name;\n }\n\n addSingleton(fqName: string, name: string): string {\n return name;\n }\n\n addUnboundOperationType(fqName: string, name: string): string {\n return name;\n }\n\n validate(): Map<string, ValidationError[]> {\n return new Map();\n }\n}\n"]}
1
+ {"version":3,"file":"NoopValidator.js","sourceRoot":"","sources":["../../../src/data-model/validation/NoopValidator.ts"],"names":[],"mappings":";;;AAGA,MAAa,aAAa;IACxB,qBAAqB,CAAC,WAAmB,EAAE,MAAc,EAAE,IAAY;QACrE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,cAAc,CAAC,MAAc,EAAE,IAAY;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY,CAAC,MAAc,EAAE,IAAY;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa,CAAC,MAAc,EAAE,IAAY;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,WAAW,CAAC,MAAc,EAAE,IAAY;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sBAAsB,CAAC,MAAc,EAAE,IAAY;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY,CAAC,MAAc,EAAE,IAAY;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uBAAuB,CAAC,MAAc,EAAE,IAAY;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;CACF;AApCD,sCAoCC","sourcesContent":["import { TypeModel } from \"../../TypeModel\";\r\nimport { NameValidator, ValidationError } from \"./NameValidator\";\r\n\r\nexport class NoopValidator implements NameValidator {\r\n addBoundOperationType(bindingName: string, fqName: string, name: string): string {\r\n return name;\r\n }\r\n\r\n addComplexType(fqName: string, name: string): string {\r\n return name;\r\n }\r\n\r\n addEntitySet(fqName: string, name: string): string {\r\n return name;\r\n }\r\n\r\n addEntityType(fqName: string, name: string): string {\r\n return name;\r\n }\r\n\r\n addEnumType(fqName: string, name: string): string {\r\n return name;\r\n }\r\n\r\n addOperationImportType(fqName: string, name: string): string {\r\n return name;\r\n }\r\n\r\n addSingleton(fqName: string, name: string): string {\r\n return name;\r\n }\r\n\r\n addUnboundOperationType(fqName: string, name: string): string {\r\n return name;\r\n }\r\n\r\n validate(): Map<string, ValidationError[]> {\r\n return new Map();\r\n }\r\n}\r\n"]}
@@ -1,5 +1,5 @@
1
1
  import { ODataVersions } from "@odata2ts/odata-core";
2
- import { ImportDeclarationStructure } from "ts-morph";
2
+ import { ImportDeclarationStructure, OptionalKind } from "ts-morph";
3
3
  import { DataModel } from "../data-model/DataModel";
4
4
  import { ClientApiImports, CoreImports, QueryObjectImports, ServiceImports } from "./import/ImportObjects";
5
5
  /**
@@ -30,19 +30,21 @@ export declare class ImportContainer {
30
30
  qObject: string;
31
31
  service: string;
32
32
  }, bundledFileGeneration: boolean, reservedNames: Array<string> | undefined);
33
- addCoreLib(odataVersion: ODataVersions, ...coreLibs: Array<CoreImports>): string[];
34
- addFromQObject(...names: Array<string>): string[];
35
- addQObject(...qObjects: Array<QueryObjectImports>): string[];
36
- addClientApi(...clientApis: Array<ClientApiImports>): string[];
37
- addServiceObject(odataVersion: ODataVersions, ...serviceObjects: Array<ServiceImports>): string[];
38
- addCustomType(moduleName: string, typeName: string): string;
33
+ addCoreLib(odataVersion: ODataVersions, coreLib: CoreImports): string;
34
+ private addFromQObject;
35
+ addQObject(qObject: QueryObjectImports | string): string;
36
+ addQObjectType(qObject: string): string;
37
+ addClientApi(clientApi: ClientApiImports): string;
38
+ addServiceObject(odataVersion: ODataVersions, serviceObject: ServiceImports): string;
39
+ addCustomType(moduleName: string, typeName: string, isTypeOnly?: boolean): string;
39
40
  private pathAndFile;
40
41
  private isDifferentFile;
41
42
  private addGeneratedImport;
42
43
  addGeneratedModel(fqName: string, name: string): string;
43
44
  addGeneratedQObject(fqName: string, name: string): string;
44
45
  addGeneratedService(fqName: string, name: string): string;
45
- getImportDeclarations(fromSubPath?: boolean): Array<ImportDeclarationStructure>;
46
+ private createImportDecl;
47
+ getImportDeclarations(fromSubPath?: boolean): Array<OptionalKind<ImportDeclarationStructure>>;
46
48
  private getNamedImports;
47
49
  private getModuleSpecifier;
48
50
  }