@odata2ts/odata2ts 0.23.1 → 0.25.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 (78) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/lib/FactoryFunctionModel.d.ts +13 -13
  3. package/lib/FactoryFunctionModel.js +2 -2
  4. package/lib/FactoryFunctionModel.js.map +1 -1
  5. package/lib/NamingModel.d.ts +182 -182
  6. package/lib/NamingModel.js +11 -11
  7. package/lib/NamingModel.js.map +1 -1
  8. package/lib/OptionModel.d.ts +228 -223
  9. package/lib/OptionModel.js +23 -23
  10. package/lib/OptionModel.js.map +1 -1
  11. package/lib/app.d.ts +8 -8
  12. package/lib/app.js +67 -63
  13. package/lib/app.js.map +1 -1
  14. package/lib/cli.d.ts +3 -3
  15. package/lib/cli.js +153 -153
  16. package/lib/data-model/DataModel.d.ts +88 -85
  17. package/lib/data-model/DataModel.js +141 -134
  18. package/lib/data-model/DataModel.js.map +1 -1
  19. package/lib/data-model/DataModelDigestion.d.ts +48 -44
  20. package/lib/data-model/DataModelDigestion.js +299 -274
  21. package/lib/data-model/DataModelDigestion.js.map +1 -1
  22. package/lib/data-model/DataModelDigestionV2.d.ts +10 -10
  23. package/lib/data-model/DataModelDigestionV2.js +210 -200
  24. package/lib/data-model/DataModelDigestionV2.js.map +1 -1
  25. package/lib/data-model/DataModelDigestionV4.d.ts +3 -3
  26. package/lib/data-model/DataModelDigestionV4.js +197 -195
  27. package/lib/data-model/DataModelDigestionV4.js.map +1 -1
  28. package/lib/data-model/DataTypeModel.d.ts +102 -102
  29. package/lib/data-model/DataTypeModel.js +8 -8
  30. package/lib/data-model/DataTypeModel.js.map +1 -1
  31. package/lib/data-model/NamingHelper.d.ts +57 -55
  32. package/lib/data-model/NamingHelper.js +231 -214
  33. package/lib/data-model/NamingHelper.js.map +1 -1
  34. package/lib/data-model/ServiceConfigHelper.d.ts +21 -21
  35. package/lib/data-model/ServiceConfigHelper.js +113 -113
  36. package/lib/data-model/edmx/ODataEdmxModelBase.d.ts +92 -80
  37. package/lib/data-model/edmx/ODataEdmxModelBase.js +2 -2
  38. package/lib/data-model/edmx/ODataEdmxModelBase.js.map +1 -1
  39. package/lib/data-model/edmx/ODataEdmxModelV3.d.ts +63 -63
  40. package/lib/data-model/edmx/ODataEdmxModelV3.js +2 -2
  41. package/lib/data-model/edmx/ODataEdmxModelV4.d.ts +67 -67
  42. package/lib/data-model/edmx/ODataEdmxModelV4.js +2 -2
  43. package/lib/defaultConfig.d.ts +9 -9
  44. package/lib/defaultConfig.js +165 -164
  45. package/lib/defaultConfig.js.map +1 -1
  46. package/lib/evaluateConfig.d.ts +25 -25
  47. package/lib/evaluateConfig.js +82 -82
  48. package/lib/generator/ImportContainer.d.ts +16 -16
  49. package/lib/generator/ImportContainer.js +91 -91
  50. package/lib/generator/ModelGenerator.d.ts +2 -2
  51. package/lib/generator/ModelGenerator.js +211 -183
  52. package/lib/generator/ModelGenerator.js.map +1 -1
  53. package/lib/generator/QueryObjectGenerator.d.ts +2 -2
  54. package/lib/generator/QueryObjectGenerator.js +239 -239
  55. package/lib/generator/ServiceGenerator.d.ts +8 -8
  56. package/lib/generator/ServiceGenerator.js +422 -422
  57. package/lib/generator/index.d.ts +3 -3
  58. package/lib/generator/index.js +9 -9
  59. package/lib/index.d.ts +3 -3
  60. package/lib/index.js +6 -6
  61. package/lib/project/ProjectManager.d.ts +30 -30
  62. package/lib/project/ProjectManager.js +177 -175
  63. package/lib/project/ProjectManager.js.map +1 -1
  64. package/lib/project/formatter/BaseFormatter.d.ts +49 -49
  65. package/lib/project/formatter/BaseFormatter.js +30 -30
  66. package/lib/project/formatter/FileFormatter.d.ts +16 -16
  67. package/lib/project/formatter/FileFormatter.js +2 -2
  68. package/lib/project/formatter/NoopFormatter.d.ts +29 -29
  69. package/lib/project/formatter/NoopFormatter.js +42 -42
  70. package/lib/project/formatter/PrettierFormatter.d.ts +46 -46
  71. package/lib/project/formatter/PrettierFormatter.js +92 -92
  72. package/lib/project/formatter/index.d.ts +2 -2
  73. package/lib/project/formatter/index.js +14 -14
  74. package/lib/project/logger/logFilePath.d.ts +1 -1
  75. package/lib/project/logger/logFilePath.js +12 -12
  76. package/lib/run-cli.d.ts +2 -2
  77. package/lib/run-cli.js +6 -6
  78. package/package.json +27 -28
@@ -1,240 +1,240 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generateQueryObjects = void 0;
4
- const odata_core_1 = require("@odata2ts/odata-core");
5
- const ts_morph_1 = require("ts-morph");
6
- const processors_1 = require("xml2js/lib/processors");
7
- const ImportContainer_1 = require("./ImportContainer");
8
- const generateQueryObjects = (dataModel, sourceFile, version, options, namingHelper) => {
9
- const generator = new QueryObjectGenerator(dataModel, sourceFile, version, options, namingHelper);
10
- return generator.generate();
11
- };
12
- exports.generateQueryObjects = generateQueryObjects;
13
- class QueryObjectGenerator {
14
- constructor(dataModel, sourceFile, version, options, namingHelper) {
15
- this.dataModel = dataModel;
16
- this.sourceFile = sourceFile;
17
- this.version = version;
18
- this.options = options;
19
- this.namingHelper = namingHelper;
20
- }
21
- generate() {
22
- const importContainer = new ImportContainer_1.ImportContainer(this.namingHelper.getFileNames());
23
- this.generateModels(importContainer);
24
- if (!this.options.skipOperations) {
25
- this.generateUnboundOperations(importContainer);
26
- }
27
- this.sourceFile.addImportDeclarations(importContainer.getImportDeclarations(false));
28
- }
29
- generateModels(importContainer) {
30
- this.dataModel.getModels().forEach((model) => {
31
- this.generateModel(model, importContainer);
32
- if (!this.options.skipIdModels) {
33
- this.generateIdFunction(model, importContainer);
34
- }
35
- if (!this.options.skipOperations) {
36
- this.generateBoundOperations(model.name, importContainer);
37
- }
38
- });
39
- this.dataModel.getComplexTypes().forEach((model) => {
40
- this.generateModel(model, importContainer);
41
- });
42
- if (this.dataModel.getModels().length || this.dataModel.getComplexTypes().length) {
43
- importContainer.addFromQObject("QueryObject");
44
- }
45
- }
46
- generateModel(model, importContainer) {
47
- let extendsClause = "QueryObject";
48
- if (model.baseClasses.length) {
49
- const baseClass = model.baseClasses[0];
50
- const baseModel = this.dataModel.getModel(baseClass) || this.dataModel.getComplexType(baseClass);
51
- extendsClause = baseModel.qName;
52
- }
53
- this.sourceFile.addClass({
54
- name: model.qName,
55
- isExported: true,
56
- extends: extendsClause,
57
- properties: this.generateQueryObjectProps(model.props, importContainer),
58
- });
59
- this.sourceFile.addVariableStatement({
60
- declarationKind: ts_morph_1.VariableDeclarationKind.Const,
61
- isExported: true,
62
- declarations: [
63
- {
64
- name: (0, processors_1.firstCharLowerCase)(model.qName),
65
- initializer: `new ${model.qName}()`,
66
- },
67
- ],
68
- });
69
- }
70
- generateQueryObjectProps(props, importContainer) {
71
- return props.map((prop) => {
72
- const { odataName } = prop;
73
- const name = this.namingHelper.getQPropName(prop.name);
74
- const isModelType = prop.dataType === "ModelType" /* DataTypes.ModelType */ || prop.dataType === "ComplexType" /* DataTypes.ComplexType */;
75
- let qPathInit;
76
- // factor in collections
77
- if (prop.isCollection) {
78
- const cType = `Q${isModelType ? "Entity" : ""}CollectionPath`;
79
- const qObject = prop.qObject;
80
- if (!qObject) {
81
- throw new Error("QObject for collection is missing!");
82
- }
83
- qPathInit = `new ${cType}(this.withPrefix("${odataName}"), () => ${qObject})`;
84
- importContainer.addFromQObject(cType);
85
- if (!isModelType) {
86
- importContainer.addFromQObject(qObject);
87
- }
88
- }
89
- else {
90
- if (isModelType) {
91
- qPathInit = `new ${prop.qPath}(this.withPrefix("${odataName}"), () => ${prop.qObject})`;
92
- }
93
- else {
94
- let converterStmt = this.generateConverterStmt(prop.converters, importContainer);
95
- qPathInit = `new ${prop.qPath}(this.withPrefix("${odataName}")${converterStmt ? `, ${converterStmt}` : ""})`;
96
- }
97
- // add import for data type
98
- importContainer.addFromQObject(prop.qPath);
99
- }
100
- return {
101
- name,
102
- scope: ts_morph_1.Scope.Public,
103
- isReadonly: true,
104
- initializer: qPathInit,
105
- };
106
- });
107
- }
108
- generateConverterStmt(converters, importContainer) {
109
- if (!(converters === null || converters === void 0 ? void 0 : converters.length)) {
110
- return;
111
- }
112
- converters.forEach((converter) => {
113
- importContainer.addCustomType(converter.package, converter.converterId);
114
- });
115
- if (converters.length === 1) {
116
- return converters[0].converterId;
117
- }
118
- else {
119
- importContainer.addCustomType("@odata2ts/converter-runtime", "createChain");
120
- const [first, second, ...moreConverters] = converters;
121
- return moreConverters.reduce((stmt, conv) => `${stmt}.chain(${conv.converterId})`, `createChain(${first.converterId}, ${second.converterId})`);
122
- }
123
- }
124
- generateIdFunction(model, importContainer) {
125
- if (!model.generateId) {
126
- return;
127
- }
128
- const qFunc = "QId";
129
- importContainer.addFromQObject(qFunc);
130
- importContainer.addGeneratedModel(model.idModelName);
131
- this.sourceFile.addClass({
132
- name: model.qIdFunctionName,
133
- isExported: true,
134
- extends: `${qFunc}<${model.idModelName}>`,
135
- properties: [
136
- {
137
- name: "params",
138
- scope: ts_morph_1.Scope.Private,
139
- isReadonly: true,
140
- initializer: this.getParamInitString(model.keys, importContainer),
141
- },
142
- ],
143
- methods: [
144
- {
145
- name: "getParams",
146
- statements: ["return this.params"],
147
- },
148
- ],
149
- });
150
- }
151
- getParamInitString(props, importContainer) {
152
- return `[${props
153
- .map((prop) => {
154
- var _a;
155
- const isComplexParam = prop.dataType === "ModelType" /* DataTypes.ModelType */ || prop.dataType === "ComplexType" /* DataTypes.ComplexType */;
156
- if (prop.qParam) {
157
- importContainer.addFromQObject(prop.qParam);
158
- }
159
- const isMappedNameNecessary = prop.odataName !== prop.name;
160
- const mappedName = isMappedNameNecessary ? `"${prop.name}"` : ((_a = prop.converters) === null || _a === void 0 ? void 0 : _a.length) ? "undefined" : undefined;
161
- const converterStmt = this.generateConverterStmt(prop.converters, importContainer);
162
- const mappedNameParam = mappedName ? `, ${mappedName}` : "";
163
- const complexQParam = isComplexParam ? `, new ${prop.qObject}()` : "";
164
- const converterParam = converterStmt ? `, ${converterStmt}` : "";
165
- return `new ${prop.qParam}("${prop.odataName}"${complexQParam}${mappedNameParam}${converterParam})`;
166
- })
167
- .join(",")}]`;
168
- }
169
- generateUnboundOperations(importContainer) {
170
- this.dataModel.getUnboundOperationTypes().forEach((operation) => {
171
- this.generateOperation(operation, importContainer);
172
- });
173
- }
174
- generateBoundOperations(bindingName, importContainer) {
175
- this.dataModel.getOperationTypeByEntityOrCollectionBinding(bindingName).forEach((operation) => {
176
- this.generateOperation(operation, importContainer);
177
- });
178
- }
179
- generateOperation(operation, importContainer) {
180
- var _a;
181
- const isV2 = this.version === odata_core_1.ODataVersions.V2;
182
- const qOperation = operation.type === "Action" /* OperationTypes.Action */ ? "QAction" : "QFunction";
183
- const returnType = operation.returnType;
184
- let returnTypeOpStmt = "";
185
- const hasParams = operation.parameters.length > 0;
186
- importContainer.addFromQObject(qOperation);
187
- if (hasParams) {
188
- importContainer.addGeneratedModel(operation.paramsModelName);
189
- }
190
- if (returnType) {
191
- if (returnType.dataType === "ComplexType" /* DataTypes.ComplexType */ || returnType.dataType === "ModelType" /* DataTypes.ModelType */) {
192
- if (returnType.qObject) {
193
- importContainer.addFromQObject("OperationReturnType", "ReturnTypes", "QComplexParam");
194
- returnTypeOpStmt = `new OperationReturnType(ReturnTypes.COMPLEX${returnType.isCollection ? "_COLLECTION" : ""}, new QComplexParam("NONE", new ${returnType.qObject}))`;
195
- }
196
- }
197
- else if (returnType.converters && returnType.qParam) {
198
- importContainer.addFromQObject("OperationReturnType", "ReturnTypes", returnType.qParam);
199
- returnTypeOpStmt = `new OperationReturnType(ReturnTypes.VALUE${returnType.isCollection ? "_COLLECTION" : ""}, new ${returnType.qParam}("NONE", undefined, ${this.generateConverterStmt(returnType.converters, importContainer)}))`;
200
- }
201
- }
202
- this.sourceFile.addClass({
203
- name: operation.qName,
204
- isExported: true,
205
- extends: qOperation + (hasParams ? `<${operation.paramsModelName}>` : ""),
206
- properties: [
207
- {
208
- name: "params",
209
- scope: ts_morph_1.Scope.Private,
210
- isReadonly: true,
211
- type: ((_a = operation.parameters) === null || _a === void 0 ? void 0 : _a.length) ? undefined : "[]",
212
- initializer: this.getParamInitString(operation.parameters, importContainer),
213
- },
214
- ],
215
- ctors: [
216
- {
217
- statements: [
218
- `super("${operation.odataName}"${returnTypeOpStmt ? ", " + returnTypeOpStmt : isV2 ? ", undefined" : ""}${isV2 ? ", { v2Mode: true }" : ""})`,
219
- ],
220
- },
221
- ],
222
- methods: [
223
- {
224
- name: "getParams",
225
- statements: ["return this.params"],
226
- },
227
- // functions without params: add an overriding buildUrl() to not force users to have to pass undefined as param
228
- ...(operation.type === "Function" /* OperationTypes.Function */ && !hasParams
229
- ? [
230
- {
231
- name: "buildUrl",
232
- statements: ["return super.buildUrl(undefined)"],
233
- },
234
- ]
235
- : []),
236
- ],
237
- });
238
- }
239
- }
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateQueryObjects = void 0;
4
+ const odata_core_1 = require("@odata2ts/odata-core");
5
+ const ts_morph_1 = require("ts-morph");
6
+ const processors_1 = require("xml2js/lib/processors");
7
+ const ImportContainer_1 = require("./ImportContainer");
8
+ const generateQueryObjects = (dataModel, sourceFile, version, options, namingHelper) => {
9
+ const generator = new QueryObjectGenerator(dataModel, sourceFile, version, options, namingHelper);
10
+ return generator.generate();
11
+ };
12
+ exports.generateQueryObjects = generateQueryObjects;
13
+ class QueryObjectGenerator {
14
+ constructor(dataModel, sourceFile, version, options, namingHelper) {
15
+ this.dataModel = dataModel;
16
+ this.sourceFile = sourceFile;
17
+ this.version = version;
18
+ this.options = options;
19
+ this.namingHelper = namingHelper;
20
+ }
21
+ generate() {
22
+ const importContainer = new ImportContainer_1.ImportContainer(this.namingHelper.getFileNames());
23
+ this.generateModels(importContainer);
24
+ if (!this.options.skipOperations) {
25
+ this.generateUnboundOperations(importContainer);
26
+ }
27
+ this.sourceFile.addImportDeclarations(importContainer.getImportDeclarations(false));
28
+ }
29
+ generateModels(importContainer) {
30
+ this.dataModel.getModels().forEach((model) => {
31
+ this.generateModel(model, importContainer);
32
+ if (!this.options.skipIdModels) {
33
+ this.generateIdFunction(model, importContainer);
34
+ }
35
+ if (!this.options.skipOperations) {
36
+ this.generateBoundOperations(model.name, importContainer);
37
+ }
38
+ });
39
+ this.dataModel.getComplexTypes().forEach((model) => {
40
+ this.generateModel(model, importContainer);
41
+ });
42
+ if (this.dataModel.getModels().length || this.dataModel.getComplexTypes().length) {
43
+ importContainer.addFromQObject("QueryObject");
44
+ }
45
+ }
46
+ generateModel(model, importContainer) {
47
+ let extendsClause = "QueryObject";
48
+ if (model.baseClasses.length) {
49
+ const baseClass = model.baseClasses[0];
50
+ const baseModel = this.dataModel.getModel(baseClass) || this.dataModel.getComplexType(baseClass);
51
+ extendsClause = baseModel.qName;
52
+ }
53
+ this.sourceFile.addClass({
54
+ name: model.qName,
55
+ isExported: true,
56
+ extends: extendsClause,
57
+ properties: this.generateQueryObjectProps(model.props, importContainer),
58
+ });
59
+ this.sourceFile.addVariableStatement({
60
+ declarationKind: ts_morph_1.VariableDeclarationKind.Const,
61
+ isExported: true,
62
+ declarations: [
63
+ {
64
+ name: (0, processors_1.firstCharLowerCase)(model.qName),
65
+ initializer: `new ${model.qName}()`,
66
+ },
67
+ ],
68
+ });
69
+ }
70
+ generateQueryObjectProps(props, importContainer) {
71
+ return props.map((prop) => {
72
+ const { odataName } = prop;
73
+ const name = this.namingHelper.getQPropName(prop.name);
74
+ const isModelType = prop.dataType === "ModelType" /* DataTypes.ModelType */ || prop.dataType === "ComplexType" /* DataTypes.ComplexType */;
75
+ let qPathInit;
76
+ // factor in collections
77
+ if (prop.isCollection) {
78
+ const cType = `Q${isModelType ? "Entity" : ""}CollectionPath`;
79
+ const qObject = prop.qObject;
80
+ if (!qObject) {
81
+ throw new Error("QObject for collection is missing!");
82
+ }
83
+ qPathInit = `new ${cType}(this.withPrefix("${odataName}"), () => ${qObject})`;
84
+ importContainer.addFromQObject(cType);
85
+ if (!isModelType) {
86
+ importContainer.addFromQObject(qObject);
87
+ }
88
+ }
89
+ else {
90
+ if (isModelType) {
91
+ qPathInit = `new ${prop.qPath}(this.withPrefix("${odataName}"), () => ${prop.qObject})`;
92
+ }
93
+ else {
94
+ let converterStmt = this.generateConverterStmt(prop.converters, importContainer);
95
+ qPathInit = `new ${prop.qPath}(this.withPrefix("${odataName}")${converterStmt ? `, ${converterStmt}` : ""})`;
96
+ }
97
+ // add import for data type
98
+ importContainer.addFromQObject(prop.qPath);
99
+ }
100
+ return {
101
+ name,
102
+ scope: ts_morph_1.Scope.Public,
103
+ isReadonly: true,
104
+ initializer: qPathInit,
105
+ };
106
+ });
107
+ }
108
+ generateConverterStmt(converters, importContainer) {
109
+ if (!(converters === null || converters === void 0 ? void 0 : converters.length)) {
110
+ return;
111
+ }
112
+ converters.forEach((converter) => {
113
+ importContainer.addCustomType(converter.package, converter.converterId);
114
+ });
115
+ if (converters.length === 1) {
116
+ return converters[0].converterId;
117
+ }
118
+ else {
119
+ importContainer.addCustomType("@odata2ts/converter-runtime", "createChain");
120
+ const [first, second, ...moreConverters] = converters;
121
+ return moreConverters.reduce((stmt, conv) => `${stmt}.chain(${conv.converterId})`, `createChain(${first.converterId}, ${second.converterId})`);
122
+ }
123
+ }
124
+ generateIdFunction(model, importContainer) {
125
+ if (!model.generateId) {
126
+ return;
127
+ }
128
+ const qFunc = "QId";
129
+ importContainer.addFromQObject(qFunc);
130
+ importContainer.addGeneratedModel(model.idModelName);
131
+ this.sourceFile.addClass({
132
+ name: model.qIdFunctionName,
133
+ isExported: true,
134
+ extends: `${qFunc}<${model.idModelName}>`,
135
+ properties: [
136
+ {
137
+ name: "params",
138
+ scope: ts_morph_1.Scope.Private,
139
+ isReadonly: true,
140
+ initializer: this.getParamInitString(model.keys, importContainer),
141
+ },
142
+ ],
143
+ methods: [
144
+ {
145
+ name: "getParams",
146
+ statements: ["return this.params"],
147
+ },
148
+ ],
149
+ });
150
+ }
151
+ getParamInitString(props, importContainer) {
152
+ return `[${props
153
+ .map((prop) => {
154
+ var _a;
155
+ const isComplexParam = prop.dataType === "ModelType" /* DataTypes.ModelType */ || prop.dataType === "ComplexType" /* DataTypes.ComplexType */;
156
+ if (prop.qParam) {
157
+ importContainer.addFromQObject(prop.qParam);
158
+ }
159
+ const isMappedNameNecessary = prop.odataName !== prop.name;
160
+ const mappedName = isMappedNameNecessary ? `"${prop.name}"` : ((_a = prop.converters) === null || _a === void 0 ? void 0 : _a.length) ? "undefined" : undefined;
161
+ const converterStmt = this.generateConverterStmt(prop.converters, importContainer);
162
+ const mappedNameParam = mappedName ? `, ${mappedName}` : "";
163
+ const complexQParam = isComplexParam ? `, new ${prop.qObject}()` : "";
164
+ const converterParam = converterStmt ? `, ${converterStmt}` : "";
165
+ return `new ${prop.qParam}("${prop.odataName}"${complexQParam}${mappedNameParam}${converterParam})`;
166
+ })
167
+ .join(",")}]`;
168
+ }
169
+ generateUnboundOperations(importContainer) {
170
+ this.dataModel.getUnboundOperationTypes().forEach((operation) => {
171
+ this.generateOperation(operation, importContainer);
172
+ });
173
+ }
174
+ generateBoundOperations(bindingName, importContainer) {
175
+ this.dataModel.getOperationTypeByEntityOrCollectionBinding(bindingName).forEach((operation) => {
176
+ this.generateOperation(operation, importContainer);
177
+ });
178
+ }
179
+ generateOperation(operation, importContainer) {
180
+ var _a;
181
+ const isV2 = this.version === odata_core_1.ODataVersions.V2;
182
+ const qOperation = operation.type === "Action" /* OperationTypes.Action */ ? "QAction" : "QFunction";
183
+ const returnType = operation.returnType;
184
+ let returnTypeOpStmt = "";
185
+ const hasParams = operation.parameters.length > 0;
186
+ importContainer.addFromQObject(qOperation);
187
+ if (hasParams) {
188
+ importContainer.addGeneratedModel(operation.paramsModelName);
189
+ }
190
+ if (returnType) {
191
+ if (returnType.dataType === "ComplexType" /* DataTypes.ComplexType */ || returnType.dataType === "ModelType" /* DataTypes.ModelType */) {
192
+ if (returnType.qObject) {
193
+ importContainer.addFromQObject("OperationReturnType", "ReturnTypes", "QComplexParam");
194
+ returnTypeOpStmt = `new OperationReturnType(ReturnTypes.COMPLEX${returnType.isCollection ? "_COLLECTION" : ""}, new QComplexParam("NONE", new ${returnType.qObject}))`;
195
+ }
196
+ }
197
+ else if (returnType.converters && returnType.qParam) {
198
+ importContainer.addFromQObject("OperationReturnType", "ReturnTypes", returnType.qParam);
199
+ returnTypeOpStmt = `new OperationReturnType(ReturnTypes.VALUE${returnType.isCollection ? "_COLLECTION" : ""}, new ${returnType.qParam}("NONE", undefined, ${this.generateConverterStmt(returnType.converters, importContainer)}))`;
200
+ }
201
+ }
202
+ this.sourceFile.addClass({
203
+ name: operation.qName,
204
+ isExported: true,
205
+ extends: qOperation + (hasParams ? `<${operation.paramsModelName}>` : ""),
206
+ properties: [
207
+ {
208
+ name: "params",
209
+ scope: ts_morph_1.Scope.Private,
210
+ isReadonly: true,
211
+ type: ((_a = operation.parameters) === null || _a === void 0 ? void 0 : _a.length) ? undefined : "[]",
212
+ initializer: this.getParamInitString(operation.parameters, importContainer),
213
+ },
214
+ ],
215
+ ctors: [
216
+ {
217
+ statements: [
218
+ `super("${operation.odataName}"${returnTypeOpStmt ? ", " + returnTypeOpStmt : isV2 ? ", undefined" : ""}${isV2 ? ", { v2Mode: true }" : ""})`,
219
+ ],
220
+ },
221
+ ],
222
+ methods: [
223
+ {
224
+ name: "getParams",
225
+ statements: ["return this.params"],
226
+ },
227
+ // functions without params: add an overriding buildUrl() to not force users to have to pass undefined as param
228
+ ...(operation.type === "Function" /* OperationTypes.Function */ && !hasParams
229
+ ? [
230
+ {
231
+ name: "buildUrl",
232
+ statements: ["return super.buildUrl(undefined)"],
233
+ },
234
+ ]
235
+ : []),
236
+ ],
237
+ });
238
+ }
239
+ }
240
240
  //# sourceMappingURL=QueryObjectGenerator.js.map
@@ -1,8 +1,8 @@
1
- import { ODataVersions } from "@odata2ts/odata-core";
2
- import { ClassDeclarationStructure } from "ts-morph";
3
- import { DataModel } from "../data-model/DataModel";
4
- import { NamingHelper } from "../data-model/NamingHelper";
5
- import { ProjectManager } from "../project/ProjectManager";
6
- export interface PropsAndOps extends Required<Pick<ClassDeclarationStructure, "properties" | "methods">> {
7
- }
8
- export declare function generateServices(dataModel: DataModel, project: ProjectManager, version: ODataVersions, namingHelper: NamingHelper): Promise<void>;
1
+ import { ODataVersions } from "@odata2ts/odata-core";
2
+ import { ClassDeclarationStructure } from "ts-morph";
3
+ import { DataModel } from "../data-model/DataModel";
4
+ import { NamingHelper } from "../data-model/NamingHelper";
5
+ import { ProjectManager } from "../project/ProjectManager";
6
+ export interface PropsAndOps extends Required<Pick<ClassDeclarationStructure, "properties" | "methods">> {
7
+ }
8
+ export declare function generateServices(dataModel: DataModel, project: ProjectManager, version: ODataVersions, namingHelper: NamingHelper): Promise<void>;