@nestia/sdk 3.11.0-dev.20240813-10 → 3.11.0-dev.20240814

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 (135) hide show
  1. package/assets/bundle/api/Resolved.ts +1 -0
  2. package/assets/bundle/api/module.ts +1 -0
  3. package/lib/NestiaSdkApplication.d.ts +1 -0
  4. package/lib/NestiaSdkApplication.js +24 -26
  5. package/lib/NestiaSdkApplication.js.map +1 -1
  6. package/lib/analyses/ReflectControllerAnalyzer.js +2 -0
  7. package/lib/analyses/ReflectControllerAnalyzer.js.map +1 -1
  8. package/lib/analyses/ReflectHttpOperationAnalyzer.js +10 -1
  9. package/lib/analyses/ReflectHttpOperationAnalyzer.js.map +1 -1
  10. package/lib/analyses/ReflectHttpOperationExceptionAnalyzer.d.ts +15 -0
  11. package/lib/analyses/ReflectHttpOperationExceptionAnalyzer.js +50 -0
  12. package/lib/analyses/ReflectHttpOperationExceptionAnalyzer.js.map +1 -0
  13. package/lib/analyses/ReflectHttpOperationParameterAnalyzer.js +14 -9
  14. package/lib/analyses/ReflectHttpOperationParameterAnalyzer.js.map +1 -1
  15. package/lib/analyses/ReflectHttpOperationResponseAnalyzer.js +2 -1
  16. package/lib/analyses/ReflectHttpOperationResponseAnalyzer.js.map +1 -1
  17. package/lib/analyses/ReflectWebSocketOperationAnalyzer.js +3 -2
  18. package/lib/analyses/ReflectWebSocketOperationAnalyzer.js.map +1 -1
  19. package/lib/analyses/TypedHttpRouteAnalyzer.js +3 -1
  20. package/lib/analyses/TypedHttpRouteAnalyzer.js.map +1 -1
  21. package/lib/executable/internal/NestiaSdkCommand.d.ts +1 -0
  22. package/lib/executable/internal/NestiaSdkCommand.js +3 -2
  23. package/lib/executable/internal/NestiaSdkCommand.js.map +1 -1
  24. package/lib/executable/sdk.js +3 -0
  25. package/lib/executable/sdk.js.map +1 -1
  26. package/lib/generates/CloneGenerator.d.ts +4 -0
  27. package/lib/generates/CloneGenerator.js +62 -60
  28. package/lib/generates/CloneGenerator.js.map +1 -1
  29. package/lib/generates/SdkGenerator.js +4 -3
  30. package/lib/generates/SdkGenerator.js.map +1 -1
  31. package/lib/generates/SwaggerGenerator.js +60 -8
  32. package/lib/generates/SwaggerGenerator.js.map +1 -1
  33. package/lib/generates/internal/E2eFileProgrammer.js +11 -3
  34. package/lib/generates/internal/E2eFileProgrammer.js.map +1 -1
  35. package/lib/generates/internal/ImportDictionary.js +1 -1
  36. package/lib/generates/internal/ImportDictionary.js.map +1 -1
  37. package/lib/generates/internal/SdkAliasCollection.d.ts +5 -1
  38. package/lib/generates/internal/SdkAliasCollection.js +24 -8
  39. package/lib/generates/internal/SdkAliasCollection.js.map +1 -1
  40. package/lib/generates/internal/SdkFileProgrammer.js +1 -1
  41. package/lib/generates/internal/SdkFileProgrammer.js.map +1 -1
  42. package/lib/generates/internal/SdkHttpCloneProgrammer.d.ts +11 -0
  43. package/lib/generates/internal/SdkHttpCloneProgrammer.js +75 -142
  44. package/lib/generates/internal/SdkHttpCloneProgrammer.js.map +1 -1
  45. package/lib/generates/internal/SdkHttpCloneReferencer.d.ts +4 -0
  46. package/lib/generates/internal/SdkHttpCloneReferencer.js +62 -0
  47. package/lib/generates/internal/SdkHttpCloneReferencer.js.map +1 -0
  48. package/lib/generates/internal/SdkHttpFunctionProgrammer.js +26 -13
  49. package/lib/generates/internal/SdkHttpFunctionProgrammer.js.map +1 -1
  50. package/lib/generates/internal/SdkHttpNamespaceProgrammer.js +17 -8
  51. package/lib/generates/internal/SdkHttpNamespaceProgrammer.js.map +1 -1
  52. package/lib/generates/internal/SdkHttpRouteProgrammer.js +2 -2
  53. package/lib/generates/internal/SdkHttpRouteProgrammer.js.map +1 -1
  54. package/lib/generates/internal/SdkHttpSimulationProgrammer.js +8 -5
  55. package/lib/generates/internal/SdkHttpSimulationProgrammer.js.map +1 -1
  56. package/lib/generates/internal/SdkWebSocketNamespaceProgrammer.js +12 -5
  57. package/lib/generates/internal/SdkWebSocketNamespaceProgrammer.js.map +1 -1
  58. package/lib/generates/internal/SdkWebSocketRouteProgrammer.js +3 -3
  59. package/lib/generates/internal/SdkWebSocketRouteProgrammer.js.map +1 -1
  60. package/lib/generates/internal/SwaggerOperationComposer.js +19 -1
  61. package/lib/generates/internal/SwaggerOperationComposer.js.map +1 -1
  62. package/lib/generates/internal/SwaggerOperationParameterComposer.js +3 -3
  63. package/lib/generates/internal/SwaggerOperationParameterComposer.js.map +1 -1
  64. package/lib/structures/IReflectHttpOperation.d.ts +1 -1
  65. package/lib/structures/IReflectHttpOperationException.d.ts +2 -2
  66. package/lib/structures/ITypedApplication.d.ts +2 -0
  67. package/lib/transform.js +2 -2
  68. package/lib/transform.js.map +1 -1
  69. package/lib/transformers/IOperationMetadata.d.ts +6 -1
  70. package/lib/transformers/{ISdkTransformerContext.d.ts → ISdkOperationTransformerContext.d.ts} +1 -1
  71. package/lib/transformers/{ISdkTransformerContext.js → ISdkOperationTransformerContext.js} +1 -1
  72. package/lib/transformers/ISdkOperationTransformerContext.js.map +1 -0
  73. package/lib/transformers/SdkOperationProgrammer.d.ts +13 -0
  74. package/lib/transformers/{SdkMetadataProgrammer.js → SdkOperationProgrammer.js} +36 -55
  75. package/lib/transformers/SdkOperationProgrammer.js.map +1 -0
  76. package/lib/transformers/SdkOperationTransformer.d.ts +4 -0
  77. package/lib/transformers/{SdkTransformer.js → SdkOperationTransformer.js} +56 -16
  78. package/lib/transformers/SdkOperationTransformer.js.map +1 -0
  79. package/lib/utils/MetadataUtil.d.ts +4 -0
  80. package/lib/utils/MetadataUtil.js +34 -0
  81. package/lib/utils/MetadataUtil.js.map +1 -0
  82. package/lib/utils/StringUtil.d.ts +1 -0
  83. package/lib/utils/StringUtil.js +6 -0
  84. package/lib/utils/StringUtil.js.map +1 -1
  85. package/lib/validators/HttpHeadersValidator.d.ts +5 -0
  86. package/lib/validators/HttpHeadersValidator.js +29 -0
  87. package/lib/validators/HttpHeadersValidator.js.map +1 -0
  88. package/lib/validators/HttpQueryValidator.d.ts +5 -0
  89. package/lib/validators/HttpQueryValidator.js +29 -0
  90. package/lib/validators/HttpQueryValidator.js.map +1 -0
  91. package/package.json +8 -8
  92. package/src/NestiaSdkApplication.ts +20 -30
  93. package/src/analyses/ReflectControllerAnalyzer.ts +2 -0
  94. package/src/analyses/ReflectHttpOperationAnalyzer.ts +10 -1
  95. package/src/analyses/ReflectHttpOperationExceptionAnalyzer.ts +71 -0
  96. package/src/analyses/ReflectHttpOperationParameterAnalyzer.ts +37 -8
  97. package/src/analyses/ReflectHttpOperationResponseAnalyzer.ts +8 -0
  98. package/src/analyses/ReflectWebSocketOperationAnalyzer.ts +10 -2
  99. package/src/analyses/TypedHttpRouteAnalyzer.ts +4 -1
  100. package/src/executable/internal/NestiaSdkCommand.ts +3 -2
  101. package/src/executable/sdk.ts +2 -0
  102. package/src/generates/CloneGenerator.ts +61 -60
  103. package/src/generates/SdkGenerator.ts +3 -3
  104. package/src/generates/SwaggerGenerator.ts +84 -10
  105. package/src/generates/internal/E2eFileProgrammer.ts +13 -3
  106. package/src/generates/internal/ImportDictionary.ts +1 -1
  107. package/src/generates/internal/SdkAliasCollection.ts +32 -10
  108. package/src/generates/internal/SdkFileProgrammer.ts +1 -1
  109. package/src/generates/internal/SdkHttpCloneProgrammer.ts +118 -144
  110. package/src/generates/internal/SdkHttpCloneReferencer.ts +71 -0
  111. package/src/generates/internal/SdkHttpFunctionProgrammer.ts +31 -16
  112. package/src/generates/internal/SdkHttpNamespaceProgrammer.ts +252 -230
  113. package/src/generates/internal/SdkHttpRouteProgrammer.ts +2 -2
  114. package/src/generates/internal/SdkHttpSimulationProgrammer.ts +30 -24
  115. package/src/generates/internal/SdkWebSocketNamespaceProgrammer.ts +14 -6
  116. package/src/generates/internal/SdkWebSocketRouteProgrammer.ts +6 -8
  117. package/src/generates/internal/SwaggerOperationComposer.ts +25 -0
  118. package/src/generates/internal/SwaggerOperationParameterComposer.ts +3 -0
  119. package/src/structures/IReflectHttpOperation.ts +1 -4
  120. package/src/structures/IReflectHttpOperationException.ts +2 -2
  121. package/src/structures/ITypedApplication.ts +3 -0
  122. package/src/transform.ts +2 -2
  123. package/src/transformers/IOperationMetadata.ts +7 -1
  124. package/src/transformers/{ISdkTransformerContext.ts → ISdkOperationTransformerContext.ts} +1 -1
  125. package/src/transformers/{SdkMetadataProgrammer.ts → SdkOperationProgrammer.ts} +40 -62
  126. package/src/transformers/{SdkTransformer.ts → SdkOperationTransformer.ts} +88 -16
  127. package/src/utils/MetadataUtil.ts +26 -0
  128. package/src/utils/StringUtil.ts +8 -0
  129. package/src/validators/HttpHeadersValidator.ts +34 -0
  130. package/src/validators/HttpQueryValidator.ts +34 -0
  131. package/lib/transformers/ISdkTransformerContext.js.map +0 -1
  132. package/lib/transformers/SdkMetadataProgrammer.d.ts +0 -11
  133. package/lib/transformers/SdkMetadataProgrammer.js.map +0 -1
  134. package/lib/transformers/SdkTransformer.d.ts +0 -4
  135. package/lib/transformers/SdkTransformer.js.map +0 -1
@@ -33,9 +33,9 @@ export namespace SdkHttpNamespaceProgrammer {
33
33
  ts.factory.createModuleBlock([
34
34
  ...types,
35
35
  ...(types.length ? [FilePrinter.enter()] : []),
36
- write_metadata(importer)(route, props),
36
+ write_metadata(project)(importer)(route, props),
37
37
  FilePrinter.enter(),
38
- write_path(route, props.query),
38
+ write_path(project)(importer)(route, props.query),
39
39
  ...(project.config.simulate
40
40
  ? [
41
41
  SdkHttpSimulationProgrammer.random(project)(importer)(route),
@@ -92,12 +92,16 @@ export namespace SdkHttpNamespaceProgrammer {
92
92
  "Input",
93
93
  SdkAliasCollection.input(project)(importer)(props.input),
94
94
  );
95
- if (route.success.type.name !== "void")
95
+ if (
96
+ project.config.propagate === true ||
97
+ route.success.metadata.size() !== 0
98
+ )
96
99
  declare("Output", SdkAliasCollection.output(project)(importer)(route));
97
100
  return array;
98
101
  };
99
102
 
100
103
  const write_metadata =
104
+ (project: INestiaProject) =>
101
105
  (importer: ImportDictionary) =>
102
106
  (
103
107
  route: ITypedHttpRoute,
@@ -159,7 +163,13 @@ export namespace SdkHttpNamespaceProgrammer {
159
163
  ts.factory.createIdentifier(
160
164
  `${SdkImportWizard.typia(importer)}.http.createAssertQuery`,
161
165
  ),
162
- [SdkAliasCollection.name(route.success.type)],
166
+ [
167
+ project.config.clone === true
168
+ ? SdkAliasCollection.from(project)(importer)(
169
+ route.success.metadata,
170
+ )
171
+ : SdkAliasCollection.name(route.success),
172
+ ],
163
173
  undefined,
164
174
  ),
165
175
  ),
@@ -174,263 +184,275 @@ export namespace SdkHttpNamespaceProgrammer {
174
184
  ),
175
185
  );
176
186
 
177
- const write_path = (
178
- route: ITypedHttpRoute,
179
- query: ITypedHttpRouteParameter.IQuery | undefined,
180
- ): ts.VariableStatement => {
181
- const g = {
182
- total: [
183
- ...route.parameters.filter(
184
- (param) => param.category === "param" || param.category === "query",
185
- ),
186
- ],
187
- query: route.parameters
188
- .filter((param) => param.category === "query")
189
- .filter((param) => param.field !== null),
190
- path: route.parameters.filter((param) => param.category === "param"),
191
- };
192
- const out = (body: ts.ConciseBody) =>
193
- constant("path")(
194
- ts.factory.createArrowFunction(
195
- [],
196
- [],
197
- g.total.map((p) =>
198
- IdentifierFactory.parameter(
199
- p.name,
200
- p === query
201
- ? p.metadata.isRequired() === false
202
- ? ts.factory.createUnionTypeNode([
203
- ts.factory.createTypeReferenceNode(`${route.name}.Query`),
204
- ts.factory.createTypeReferenceNode("undefined"),
205
- ])
206
- : ts.factory.createTypeReferenceNode(`${route.name}.Query`)
207
- : SdkAliasCollection.name(p.type),
187
+ const write_path =
188
+ (project: INestiaProject) =>
189
+ (importer: ImportDictionary) =>
190
+ (
191
+ route: ITypedHttpRoute,
192
+ query: ITypedHttpRouteParameter.IQuery | undefined,
193
+ ): ts.VariableStatement => {
194
+ const g = {
195
+ total: [
196
+ ...route.parameters.filter(
197
+ (param) => param.category === "param" || param.category === "query",
198
+ ),
199
+ ],
200
+ query: route.parameters
201
+ .filter((param) => param.category === "query")
202
+ .filter((param) => param.field !== null),
203
+ path: route.parameters.filter((param) => param.category === "param"),
204
+ };
205
+ const out = (body: ts.ConciseBody) =>
206
+ constant("path")(
207
+ ts.factory.createArrowFunction(
208
+ [],
209
+ [],
210
+ g.total.map((p) =>
211
+ IdentifierFactory.parameter(
212
+ p.name,
213
+ p === query
214
+ ? p.metadata.isRequired() === false
215
+ ? ts.factory.createUnionTypeNode([
216
+ ts.factory.createTypeReferenceNode(
217
+ `${route.name}.Query`,
218
+ ),
219
+ ts.factory.createTypeReferenceNode("undefined"),
220
+ ])
221
+ : ts.factory.createTypeReferenceNode(`${route.name}.Query`)
222
+ : project.config.clone === true
223
+ ? SdkAliasCollection.from(project)(importer)(p.metadata)
224
+ : SdkAliasCollection.name(p),
225
+ ),
208
226
  ),
227
+ undefined,
228
+ undefined,
229
+ body,
209
230
  ),
210
- undefined,
211
- undefined,
212
- body,
213
- ),
214
- );
215
- if (g.total.length === 0)
216
- return out(ts.factory.createStringLiteral(route.path));
231
+ );
232
+ if (g.total.length === 0)
233
+ return out(ts.factory.createStringLiteral(route.path));
217
234
 
218
- const template = () => {
219
- const splitted: string[] = route.path.split(":");
220
- if (splitted.length === 1)
221
- return ts.factory.createStringLiteral(route.path);
222
- return ts.factory.createTemplateExpression(
223
- ts.factory.createTemplateHead(splitted[0]),
224
- splitted.slice(1).map((s, i, arr) => {
225
- const name: string = s.split("/")[0];
226
- return ts.factory.createTemplateSpan(
227
- ts.factory.createCallExpression(
228
- ts.factory.createIdentifier("encodeURIComponent"),
229
- undefined,
230
- [
231
- ts.factory.createBinaryExpression(
232
- ts.factory.createIdentifier(
233
- g.path.find((p) => p.field === name)!.name,
235
+ const template = () => {
236
+ const splitted: string[] = route.path.split(":");
237
+ if (splitted.length === 1)
238
+ return ts.factory.createStringLiteral(route.path);
239
+ return ts.factory.createTemplateExpression(
240
+ ts.factory.createTemplateHead(splitted[0]),
241
+ splitted.slice(1).map((s, i, arr) => {
242
+ const name: string = s.split("/")[0];
243
+ return ts.factory.createTemplateSpan(
244
+ ts.factory.createCallExpression(
245
+ ts.factory.createIdentifier("encodeURIComponent"),
246
+ undefined,
247
+ [
248
+ ts.factory.createBinaryExpression(
249
+ ts.factory.createIdentifier(
250
+ g.path.find((p) => p.field === name)!.name,
251
+ ),
252
+ ts.factory.createToken(ts.SyntaxKind.QuestionQuestionToken),
253
+ ts.factory.createStringLiteral("null"),
234
254
  ),
235
- ts.factory.createToken(ts.SyntaxKind.QuestionQuestionToken),
236
- ts.factory.createStringLiteral("null"),
237
- ),
238
- ],
239
- ),
240
- (i !== arr.length - 1
241
- ? ts.factory.createTemplateMiddle
242
- : ts.factory.createTemplateTail)(s.substring(name.length)),
243
- );
244
- }),
245
- );
246
- };
247
- if (query === undefined && g.query.length === 0) return out(template());
255
+ ],
256
+ ),
257
+ (i !== arr.length - 1
258
+ ? ts.factory.createTemplateMiddle
259
+ : ts.factory.createTemplateTail)(s.substring(name.length)),
260
+ );
261
+ }),
262
+ );
263
+ };
264
+ if (query === undefined && g.query.length === 0) return out(template());
248
265
 
249
- const block = (expr: ts.Expression) => {
250
- const computeName = (str: string): string =>
251
- g.total.find((p) => p.name === str) !== undefined
252
- ? computeName("_" + str)
253
- : str;
254
- const variables: string = computeName("variables");
255
- return ts.factory.createBlock(
256
- [
257
- local(variables)("URLSearchParams")(
258
- ts.factory.createNewExpression(
259
- ts.factory.createIdentifier("URLSearchParams"),
260
- [],
261
- [],
262
- ),
263
- ),
264
- ts.factory.createForOfStatement(
265
- undefined,
266
- ts.factory.createVariableDeclarationList(
267
- [
268
- ts.factory.createVariableDeclaration(
269
- ts.factory.createArrayBindingPattern([
270
- ts.factory.createBindingElement(
271
- undefined,
272
- undefined,
273
- ts.factory.createIdentifier("key"),
274
- undefined,
275
- ),
276
- ts.factory.createBindingElement(
277
- undefined,
278
- undefined,
279
- ts.factory.createIdentifier("value"),
280
- undefined,
281
- ),
282
- ]),
283
- undefined,
284
- undefined,
285
- undefined,
286
- ),
287
- ],
288
- ts.NodeFlags.Const,
266
+ const block = (expr: ts.Expression) => {
267
+ const computeName = (str: string): string =>
268
+ g.total.find((p) => p.name === str) !== undefined
269
+ ? computeName("_" + str)
270
+ : str;
271
+ const variables: string = computeName("variables");
272
+ return ts.factory.createBlock(
273
+ [
274
+ local(variables)("URLSearchParams")(
275
+ ts.factory.createNewExpression(
276
+ ts.factory.createIdentifier("URLSearchParams"),
277
+ [],
278
+ [],
279
+ ),
289
280
  ),
290
- ts.factory.createCallExpression(
291
- ts.factory.createIdentifier("Object.entries"),
281
+ ts.factory.createForOfStatement(
292
282
  undefined,
293
- [ts.factory.createAsExpression(expr, TypeFactory.keyword("any"))],
294
- ),
295
- ts.factory.createIfStatement(
296
- ts.factory.createStrictEquality(
297
- ts.factory.createIdentifier("undefined"),
298
- ts.factory.createIdentifier("value"),
299
- ),
300
- ts.factory.createContinueStatement(),
301
- ts.factory.createIfStatement(
302
- ts.factory.createCallExpression(
303
- ts.factory.createIdentifier("Array.isArray"),
304
- undefined,
305
- [ts.factory.createIdentifier("value")],
306
- ),
307
- ts.factory.createExpressionStatement(
308
- ts.factory.createCallExpression(
309
- ts.factory.createPropertyAccessExpression(
310
- ts.factory.createIdentifier("value"),
311
- ts.factory.createIdentifier("forEach"),
312
- ),
313
- undefined,
314
- [
315
- ts.factory.createArrowFunction(
283
+ ts.factory.createVariableDeclarationList(
284
+ [
285
+ ts.factory.createVariableDeclaration(
286
+ ts.factory.createArrayBindingPattern([
287
+ ts.factory.createBindingElement(
316
288
  undefined,
317
289
  undefined,
318
- [IdentifierFactory.parameter("elem")],
290
+ ts.factory.createIdentifier("key"),
319
291
  undefined,
292
+ ),
293
+ ts.factory.createBindingElement(
294
+ undefined,
295
+ undefined,
296
+ ts.factory.createIdentifier("value"),
320
297
  undefined,
321
- ts.factory.createCallExpression(
322
- IdentifierFactory.access(
323
- ts.factory.createIdentifier(variables),
324
- )("append"),
325
- undefined,
326
- [
327
- ts.factory.createIdentifier("key"),
328
- ts.factory.createCallExpression(
329
- ts.factory.createIdentifier("String"),
330
- undefined,
331
- [ts.factory.createIdentifier("elem")],
332
- ),
333
- ],
334
- ),
335
298
  ),
336
- ],
299
+ ]),
300
+ undefined,
301
+ undefined,
302
+ undefined,
337
303
  ),
304
+ ],
305
+ ts.NodeFlags.Const,
306
+ ),
307
+ ts.factory.createCallExpression(
308
+ ts.factory.createIdentifier("Object.entries"),
309
+ undefined,
310
+ [
311
+ ts.factory.createAsExpression(
312
+ expr,
313
+ TypeFactory.keyword("any"),
314
+ ),
315
+ ],
316
+ ),
317
+ ts.factory.createIfStatement(
318
+ ts.factory.createStrictEquality(
319
+ ts.factory.createIdentifier("undefined"),
320
+ ts.factory.createIdentifier("value"),
338
321
  ),
339
- ts.factory.createExpressionStatement(
322
+ ts.factory.createContinueStatement(),
323
+ ts.factory.createIfStatement(
340
324
  ts.factory.createCallExpression(
341
- IdentifierFactory.access(
342
- ts.factory.createIdentifier(variables),
343
- )("set"),
325
+ ts.factory.createIdentifier("Array.isArray"),
344
326
  undefined,
345
- [
346
- ts.factory.createIdentifier("key"),
347
- ts.factory.createCallExpression(
348
- ts.factory.createIdentifier("String"),
349
- undefined,
350
- [ts.factory.createIdentifier("value")],
351
- ),
352
- ],
327
+ [ts.factory.createIdentifier("value")],
353
328
  ),
354
- ),
355
- ),
356
- ),
357
- ),
358
- local("location")("string")(template()),
359
- ts.factory.createReturnStatement(
360
- ts.factory.createConditionalExpression(
361
- ts.factory.createStrictEquality(
362
- ExpressionFactory.number(0),
363
- IdentifierFactory.access(
364
- ts.factory.createIdentifier(variables),
365
- )("size"),
366
- ),
367
- undefined,
368
- ts.factory.createIdentifier("location"),
369
- undefined,
370
- ts.factory.createTemplateExpression(
371
- ts.factory.createTemplateHead(""),
372
- [
373
- ts.factory.createTemplateSpan(
374
- ts.factory.createIdentifier("location"),
375
- ts.factory.createTemplateMiddle("?"),
329
+ ts.factory.createExpressionStatement(
330
+ ts.factory.createCallExpression(
331
+ ts.factory.createPropertyAccessExpression(
332
+ ts.factory.createIdentifier("value"),
333
+ ts.factory.createIdentifier("forEach"),
334
+ ),
335
+ undefined,
336
+ [
337
+ ts.factory.createArrowFunction(
338
+ undefined,
339
+ undefined,
340
+ [IdentifierFactory.parameter("elem")],
341
+ undefined,
342
+ undefined,
343
+ ts.factory.createCallExpression(
344
+ IdentifierFactory.access(
345
+ ts.factory.createIdentifier(variables),
346
+ )("append"),
347
+ undefined,
348
+ [
349
+ ts.factory.createIdentifier("key"),
350
+ ts.factory.createCallExpression(
351
+ ts.factory.createIdentifier("String"),
352
+ undefined,
353
+ [ts.factory.createIdentifier("elem")],
354
+ ),
355
+ ],
356
+ ),
357
+ ),
358
+ ],
359
+ ),
376
360
  ),
377
- ts.factory.createTemplateSpan(
361
+ ts.factory.createExpressionStatement(
378
362
  ts.factory.createCallExpression(
379
363
  IdentifierFactory.access(
380
364
  ts.factory.createIdentifier(variables),
381
- )("toString"),
382
- undefined,
365
+ )("set"),
383
366
  undefined,
367
+ [
368
+ ts.factory.createIdentifier("key"),
369
+ ts.factory.createCallExpression(
370
+ ts.factory.createIdentifier("String"),
371
+ undefined,
372
+ [ts.factory.createIdentifier("value")],
373
+ ),
374
+ ],
384
375
  ),
385
- ts.factory.createTemplateTail(""),
386
376
  ),
387
- ],
377
+ ),
388
378
  ),
389
379
  ),
380
+ local("location")("string")(template()),
381
+ ts.factory.createReturnStatement(
382
+ ts.factory.createConditionalExpression(
383
+ ts.factory.createStrictEquality(
384
+ ExpressionFactory.number(0),
385
+ IdentifierFactory.access(
386
+ ts.factory.createIdentifier(variables),
387
+ )("size"),
388
+ ),
389
+ undefined,
390
+ ts.factory.createIdentifier("location"),
391
+ undefined,
392
+ ts.factory.createTemplateExpression(
393
+ ts.factory.createTemplateHead(""),
394
+ [
395
+ ts.factory.createTemplateSpan(
396
+ ts.factory.createIdentifier("location"),
397
+ ts.factory.createTemplateMiddle("?"),
398
+ ),
399
+ ts.factory.createTemplateSpan(
400
+ ts.factory.createCallExpression(
401
+ IdentifierFactory.access(
402
+ ts.factory.createIdentifier(variables),
403
+ )("toString"),
404
+ undefined,
405
+ undefined,
406
+ ),
407
+ ts.factory.createTemplateTail(""),
408
+ ),
409
+ ],
410
+ ),
411
+ ),
412
+ ),
413
+ ],
414
+ true,
415
+ );
416
+ };
417
+ if (query !== undefined && g.query.length === 0)
418
+ return out(
419
+ block(
420
+ query.metadata.isRequired() === false
421
+ ? ts.factory.createBinaryExpression(
422
+ ts.factory.createIdentifier(query.name),
423
+ ts.factory.createToken(ts.SyntaxKind.QuestionQuestionToken),
424
+ ts.factory.createObjectLiteralExpression([], false),
425
+ )
426
+ : ts.factory.createIdentifier(query.name),
390
427
  ),
391
- ],
392
- true,
393
- );
394
- };
395
- if (query !== undefined && g.query.length === 0)
428
+ );
396
429
  return out(
397
430
  block(
398
- query.metadata.isRequired() === false
399
- ? ts.factory.createBinaryExpression(
400
- ts.factory.createIdentifier(query.name),
401
- ts.factory.createToken(ts.SyntaxKind.QuestionQuestionToken),
402
- ts.factory.createObjectLiteralExpression([], false),
403
- )
404
- : ts.factory.createIdentifier(query.name),
431
+ ts.factory.createObjectLiteralExpression(
432
+ [
433
+ ...(query
434
+ ? [
435
+ ts.factory.createSpreadAssignment(
436
+ ts.factory.createIdentifier(query.name),
437
+ ),
438
+ ]
439
+ : []),
440
+ ...g.query.map((q) =>
441
+ q.name === q.field
442
+ ? ts.factory.createShorthandPropertyAssignment(q.name)
443
+ : ts.factory.createPropertyAssignment(
444
+ Escaper.variable(q.field!)
445
+ ? q.field!
446
+ : ts.factory.createStringLiteral(q.field!),
447
+ ts.factory.createIdentifier(q.name),
448
+ ),
449
+ ),
450
+ ],
451
+ true,
452
+ ),
405
453
  ),
406
454
  );
407
- return out(
408
- block(
409
- ts.factory.createObjectLiteralExpression(
410
- [
411
- ...(query
412
- ? [
413
- ts.factory.createSpreadAssignment(
414
- ts.factory.createIdentifier(query.name),
415
- ),
416
- ]
417
- : []),
418
- ...g.query.map((q) =>
419
- q.name === q.field
420
- ? ts.factory.createShorthandPropertyAssignment(q.name)
421
- : ts.factory.createPropertyAssignment(
422
- Escaper.variable(q.field!)
423
- ? q.field!
424
- : ts.factory.createStringLiteral(q.field!),
425
- ts.factory.createIdentifier(q.name),
426
- ),
427
- ),
428
- ],
429
- true,
430
- ),
431
- ),
432
- );
433
- };
455
+ };
434
456
 
435
457
  const write_stringify =
436
458
  (project: INestiaProject) =>
@@ -16,10 +16,10 @@ export namespace SdkHttpRouteProgrammer {
16
16
  const props = {
17
17
  headers: route.parameters
18
18
  .filter((p) => p.category === "headers")
19
- .find((p) => p.field === undefined),
19
+ .find((p) => p.field === null),
20
20
  query: route.parameters
21
21
  .filter((p) => p.category === "query")
22
- .find((p) => p.field === undefined),
22
+ .find((p) => p.field === null),
23
23
  input: route.parameters.find((p) => p.category === "body"),
24
24
  };
25
25
  return [
@@ -68,7 +68,8 @@ export namespace SdkHttpSimulationProgrammer {
68
68
  },
69
69
  ): ts.VariableStatement => {
70
70
  const output: boolean =
71
- project.config.propagate === true || route.success.type.name !== "void";
71
+ project.config.propagate === true ||
72
+ route.success.metadata.size() !== 0;
72
73
  const caller = () =>
73
74
  ts.factory.createCallExpression(
74
75
  ts.factory.createIdentifier("random"),
@@ -105,7 +106,7 @@ export namespace SdkHttpSimulationProgrammer {
105
106
  ts.factory.createTypeReferenceNode(
106
107
  SdkImportWizard.IConnection(importer),
107
108
  route.parameters.some(
108
- (p) => p.category === "headers" && p.field === undefined,
109
+ (p) => p.category === "headers" && p.field === null,
109
110
  )
110
111
  ? [
111
112
  ts.factory.createTypeReferenceNode(
@@ -130,7 +131,9 @@ export namespace SdkHttpSimulationProgrammer {
130
131
  ? ts.factory.createTypeReferenceNode(
131
132
  `${route.name}.${p === props.query ? "Query" : "Input"}`,
132
133
  )
133
- : SdkAliasCollection.name(p.type),
134
+ : project.config.clone === true
135
+ ? SdkAliasCollection.from(project)(importer)(p.metadata)
136
+ : SdkAliasCollection.name(p),
134
137
  ),
135
138
  ),
136
139
  ],
@@ -141,28 +144,31 @@ export namespace SdkHttpSimulationProgrammer {
141
144
  ...assert(project)(importer)(route),
142
145
  ts.factory.createReturnStatement(
143
146
  project.config.propagate
144
- ? ts.factory.createObjectLiteralExpression(
145
- [
146
- ts.factory.createPropertyAssignment(
147
- "success",
148
- ts.factory.createTrue(),
149
- ),
150
- ts.factory.createPropertyAssignment(
151
- "status",
152
- ExpressionFactory.number(
153
- route.success.status ??
154
- (route.method === "POST" ? 201 : 200),
147
+ ? ts.factory.createAsExpression(
148
+ ts.factory.createObjectLiteralExpression(
149
+ [
150
+ ts.factory.createPropertyAssignment(
151
+ "success",
152
+ ts.factory.createTrue(),
155
153
  ),
156
- ),
157
- ts.factory.createPropertyAssignment(
158
- "headers",
159
- LiteralFactory.generate({
160
- "Content-Type": route.success.contentType,
161
- }),
162
- ),
163
- ts.factory.createPropertyAssignment("data", caller()),
164
- ],
165
- true,
154
+ ts.factory.createPropertyAssignment(
155
+ "status",
156
+ ExpressionFactory.number(
157
+ route.success.status ??
158
+ (route.method === "POST" ? 201 : 200),
159
+ ),
160
+ ),
161
+ ts.factory.createPropertyAssignment(
162
+ "headers",
163
+ LiteralFactory.generate({
164
+ "Content-Type": route.success.contentType,
165
+ }),
166
+ ),
167
+ ts.factory.createPropertyAssignment("data", caller()),
168
+ ],
169
+ true,
170
+ ),
171
+ ts.factory.createTypeReferenceNode("Output"),
166
172
  )
167
173
  : caller(),
168
174
  ),