@odata2ts/odata2ts 0.23.1 → 0.24.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 (77) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +74 -74
  3. package/lib/FactoryFunctionModel.d.ts +13 -13
  4. package/lib/FactoryFunctionModel.js +2 -2
  5. package/lib/FactoryFunctionModel.js.map +1 -1
  6. package/lib/NamingModel.d.ts +182 -182
  7. package/lib/NamingModel.js +11 -11
  8. package/lib/NamingModel.js.map +1 -1
  9. package/lib/OptionModel.d.ts +228 -223
  10. package/lib/OptionModel.js +23 -23
  11. package/lib/OptionModel.js.map +1 -1
  12. package/lib/app.d.ts +8 -8
  13. package/lib/app.js +63 -63
  14. package/lib/app.js.map +1 -1
  15. package/lib/cli.d.ts +3 -3
  16. package/lib/cli.js +153 -153
  17. package/lib/data-model/DataModel.d.ts +85 -85
  18. package/lib/data-model/DataModel.js +134 -134
  19. package/lib/data-model/DataModelDigestion.d.ts +44 -44
  20. package/lib/data-model/DataModelDigestion.js +274 -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 +200 -200
  24. package/lib/data-model/DataModelDigestionV4.d.ts +3 -3
  25. package/lib/data-model/DataModelDigestionV4.js +195 -195
  26. package/lib/data-model/DataTypeModel.d.ts +102 -102
  27. package/lib/data-model/DataTypeModel.js +8 -8
  28. package/lib/data-model/DataTypeModel.js.map +1 -1
  29. package/lib/data-model/NamingHelper.d.ts +55 -55
  30. package/lib/data-model/NamingHelper.js +214 -214
  31. package/lib/data-model/ServiceConfigHelper.d.ts +21 -21
  32. package/lib/data-model/ServiceConfigHelper.js +113 -113
  33. package/lib/data-model/edmx/ODataEdmxModelBase.d.ts +80 -80
  34. package/lib/data-model/edmx/ODataEdmxModelBase.js +2 -2
  35. package/lib/data-model/edmx/ODataEdmxModelBase.js.map +1 -1
  36. package/lib/data-model/edmx/ODataEdmxModelV3.d.ts +63 -63
  37. package/lib/data-model/edmx/ODataEdmxModelV3.js +2 -2
  38. package/lib/data-model/edmx/ODataEdmxModelV4.d.ts +67 -67
  39. package/lib/data-model/edmx/ODataEdmxModelV4.js +2 -2
  40. package/lib/defaultConfig.d.ts +9 -9
  41. package/lib/defaultConfig.js +165 -164
  42. package/lib/defaultConfig.js.map +1 -1
  43. package/lib/evaluateConfig.d.ts +25 -25
  44. package/lib/evaluateConfig.js +82 -82
  45. package/lib/generator/ImportContainer.d.ts +16 -16
  46. package/lib/generator/ImportContainer.js +91 -91
  47. package/lib/generator/ImportContainer.js.map +1 -1
  48. package/lib/generator/ModelGenerator.d.ts +2 -2
  49. package/lib/generator/ModelGenerator.js +211 -183
  50. package/lib/generator/ModelGenerator.js.map +1 -1
  51. package/lib/generator/QueryObjectGenerator.d.ts +2 -2
  52. package/lib/generator/QueryObjectGenerator.js +239 -239
  53. package/lib/generator/ServiceGenerator.d.ts +8 -8
  54. package/lib/generator/ServiceGenerator.js +422 -422
  55. package/lib/generator/ServiceGenerator.js.map +1 -1
  56. package/lib/generator/index.d.ts +3 -3
  57. package/lib/generator/index.js +9 -9
  58. package/lib/index.d.ts +3 -3
  59. package/lib/index.js +6 -6
  60. package/lib/project/ProjectManager.d.ts +30 -30
  61. package/lib/project/ProjectManager.js +177 -175
  62. package/lib/project/ProjectManager.js.map +1 -1
  63. package/lib/project/formatter/BaseFormatter.d.ts +49 -49
  64. package/lib/project/formatter/BaseFormatter.js +30 -30
  65. package/lib/project/formatter/FileFormatter.d.ts +16 -16
  66. package/lib/project/formatter/FileFormatter.js +2 -2
  67. package/lib/project/formatter/NoopFormatter.d.ts +29 -29
  68. package/lib/project/formatter/NoopFormatter.js +42 -42
  69. package/lib/project/formatter/PrettierFormatter.d.ts +46 -46
  70. package/lib/project/formatter/PrettierFormatter.js +92 -92
  71. package/lib/project/formatter/index.d.ts +2 -2
  72. package/lib/project/formatter/index.js +14 -14
  73. package/lib/project/logger/logFilePath.d.ts +1 -1
  74. package/lib/project/logger/logFilePath.js +12 -12
  75. package/lib/run-cli.d.ts +2 -2
  76. package/lib/run-cli.js +6 -6
  77. 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>;