@aws/nx-plugin 1.0.0-rc.30 → 1.0.0-rc.32
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.
- package/LICENSE-THIRD-PARTY +235 -1336
- package/README.md +1 -1
- package/package.json +1 -2
- package/src/mcp-server/tools/create-workspace-command.js +2 -2
- package/src/mcp-server/tools/create-workspace-command.js.map +1 -1
- package/src/open-api/ts-client/__snapshots__/generator.additional-properties.spec.ts.snap +147 -33
- package/src/open-api/ts-client/__snapshots__/generator.arrays.spec.ts.snap +308 -75
- package/src/open-api/ts-client/__snapshots__/generator.complex-types.spec.ts.snap +286 -62
- package/src/open-api/ts-client/__snapshots__/generator.composite-types.spec.ts.snap +674 -93
- package/src/open-api/ts-client/__snapshots__/generator.content-type.spec.ts.snap +211 -36
- package/src/open-api/ts-client/__snapshots__/generator.duplicate-types.spec.ts.snap +196 -44
- package/src/open-api/ts-client/__snapshots__/generator.edge-cases.spec.ts.snap +5507 -0
- package/src/open-api/ts-client/__snapshots__/generator.fast-api.spec.ts.snap +219 -60
- package/src/open-api/ts-client/__snapshots__/generator.multipart.spec.ts.snap +280 -0
- package/src/open-api/ts-client/__snapshots__/generator.primitive-types.spec.ts.snap +351 -80
- package/src/open-api/ts-client/__snapshots__/generator.request.spec.ts.snap +170 -49
- package/src/open-api/ts-client/__snapshots__/generator.reserved-keywords.spec.ts.snap +98 -22
- package/src/open-api/ts-client/__snapshots__/generator.response.spec.ts.snap +147 -33
- package/src/open-api/ts-client/__snapshots__/generator.streaming.spec.ts.snap +392 -88
- package/src/open-api/ts-client/__snapshots__/generator.tags.spec.ts.snap +196 -44
- package/src/open-api/ts-client/files/client.gen.ts.template +166 -19
- package/src/open-api/ts-client/files/types.gen.ts.template +4 -4
- package/src/open-api/ts-client/generator.js +1 -1
- package/src/open-api/ts-client/generator.js.map +1 -1
- package/src/open-api/ts-hooks/files/options-proxy.gen.ts.template +5 -0
- package/src/open-api/ts-hooks/generator.spec.tsx +70 -0
- package/src/open-api/utils/codegen-data/languages.d.ts +0 -6
- package/src/open-api/utils/codegen-data/languages.js +23 -18
- package/src/open-api/utils/codegen-data/languages.js.map +1 -1
- package/src/open-api/utils/codegen-data/types.d.ts +240 -10
- package/src/open-api/utils/codegen-data/types.js +24 -1
- package/src/open-api/utils/codegen-data/types.js.map +1 -1
- package/src/open-api/utils/codegen-data.d.ts +2 -2
- package/src/open-api/utils/codegen-data.js +357 -617
- package/src/open-api/utils/codegen-data.js.map +1 -1
- package/src/open-api/utils/normalise.js +167 -22
- package/src/open-api/utils/normalise.js.map +1 -1
- package/src/open-api/utils/parser.d.ts +55 -0
- package/src/open-api/utils/parser.js +754 -0
- package/src/open-api/utils/parser.js.map +1 -0
- package/src/open-api/utils/types.d.ts +18 -0
- package/src/open-api/utils/types.js.map +1 -1
- package/src/preset/__snapshots__/generator.spec.ts.snap +6 -6
- package/src/py/fast-api/__snapshots__/generator.terraform.spec.ts.snap +414 -6
- package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +276 -4
- package/src/trpc/backend/__snapshots__/generator.spec.ts.snap +414 -6
- package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +0 -23
- package/src/ts/mcp-server/generator.js +10 -22
- package/src/ts/mcp-server/generator.js.map +1 -1
- package/src/utils/api-constructs/files/terraform/app/apis/http/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +69 -1
- package/src/utils/api-constructs/files/terraform/app/apis/rest/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +69 -1
- package/src/utils/mcp.js +1 -1
- package/src/utils/mcp.js.map +1 -1
- package/src/utils/names.d.ts +6 -0
- package/src/utils/names.js +6 -1
- package/src/utils/names.js.map +1 -1
- package/src/utils/versions.d.ts +5 -5
- package/src/utils/versions.js +4 -4
- package/src/utils/versions.js.map +1 -1
|
@@ -1,5 +1,270 @@
|
|
|
1
1
|
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
|
|
2
2
|
|
|
3
|
+
exports[`openApiTsClientGenerator - composite schemas > marshals a polymorphic list as an array of a discriminated union > client.gen.ts 1`] = `
|
|
4
|
+
"import type { Animal, Cat, Dog } from './types.gen.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Utility for serialisation and deserialisation of API types.
|
|
8
|
+
*/
|
|
9
|
+
export class $IO {
|
|
10
|
+
public static $mapValues = (data: any, fn: (item: any) => any) =>
|
|
11
|
+
Object.fromEntries(Object.entries(data).map(([k, v]) => [k, fn(v)]));
|
|
12
|
+
|
|
13
|
+
public static Animal = {
|
|
14
|
+
toJson: (model: Animal): any => {
|
|
15
|
+
if (model === undefined || model === null) {
|
|
16
|
+
return model;
|
|
17
|
+
}
|
|
18
|
+
switch ((model as any).kind) {
|
|
19
|
+
case 'cat':
|
|
20
|
+
return $IO.Cat.toJson(model as Cat);
|
|
21
|
+
case 'dog':
|
|
22
|
+
return $IO.Dog.toJson(model as Dog);
|
|
23
|
+
}
|
|
24
|
+
return {
|
|
25
|
+
...$IO.Cat.toJson(model as Cat),
|
|
26
|
+
...$IO.Dog.toJson(model as Dog),
|
|
27
|
+
};
|
|
28
|
+
},
|
|
29
|
+
fromJson: (json: any): Animal => {
|
|
30
|
+
if (json === undefined || json === null) {
|
|
31
|
+
return json;
|
|
32
|
+
}
|
|
33
|
+
switch (json?.['kind']) {
|
|
34
|
+
case 'cat':
|
|
35
|
+
return $IO.Cat.fromJson(json);
|
|
36
|
+
case 'dog':
|
|
37
|
+
return $IO.Dog.fromJson(json);
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
...$IO.Cat.fromJson(json),
|
|
41
|
+
...$IO.Dog.fromJson(json),
|
|
42
|
+
};
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
public static Cat = {
|
|
47
|
+
toJson: (model: Cat): any => {
|
|
48
|
+
if (model === undefined || model === null) {
|
|
49
|
+
return model;
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
...(model.kind === undefined
|
|
53
|
+
? {}
|
|
54
|
+
: {
|
|
55
|
+
kind: model.kind,
|
|
56
|
+
}),
|
|
57
|
+
...(model.napAt === undefined
|
|
58
|
+
? {}
|
|
59
|
+
: {
|
|
60
|
+
napAt: model.napAt.toISOString(),
|
|
61
|
+
}),
|
|
62
|
+
};
|
|
63
|
+
},
|
|
64
|
+
fromJson: (json: any): Cat => {
|
|
65
|
+
if (json === undefined || json === null) {
|
|
66
|
+
return json;
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
kind: json['kind'],
|
|
70
|
+
napAt: new Date(json['napAt']),
|
|
71
|
+
};
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
public static Dog = {
|
|
76
|
+
toJson: (model: Dog): any => {
|
|
77
|
+
if (model === undefined || model === null) {
|
|
78
|
+
return model;
|
|
79
|
+
}
|
|
80
|
+
return {
|
|
81
|
+
...(model.kind === undefined
|
|
82
|
+
? {}
|
|
83
|
+
: {
|
|
84
|
+
kind: model.kind,
|
|
85
|
+
}),
|
|
86
|
+
...(model.walkAt === undefined
|
|
87
|
+
? {}
|
|
88
|
+
: {
|
|
89
|
+
walkAt: model.walkAt.toISOString(),
|
|
90
|
+
}),
|
|
91
|
+
};
|
|
92
|
+
},
|
|
93
|
+
fromJson: (json: any): Dog => {
|
|
94
|
+
if (json === undefined || json === null) {
|
|
95
|
+
return json;
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
kind: json['kind'],
|
|
99
|
+
walkAt: new Date(json['walkAt']),
|
|
100
|
+
};
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Client configuration for TestApi
|
|
107
|
+
*/
|
|
108
|
+
export interface TestApiConfig {
|
|
109
|
+
/**
|
|
110
|
+
* Base URL for the API
|
|
111
|
+
*/
|
|
112
|
+
url: string;
|
|
113
|
+
/**
|
|
114
|
+
* Custom instance of fetch. By default the global 'fetch' is used.
|
|
115
|
+
* You can override this to add custom middleware for use cases such as adding authentication headers.
|
|
116
|
+
*/
|
|
117
|
+
fetch?: typeof fetch;
|
|
118
|
+
/**
|
|
119
|
+
* Additional configuration
|
|
120
|
+
*/
|
|
121
|
+
options?: {
|
|
122
|
+
/**
|
|
123
|
+
* By default, the client will add a Content-Type header, set to the media type defined for
|
|
124
|
+
* the request in the OpenAPI specification.
|
|
125
|
+
* Set this to false to omit this header.
|
|
126
|
+
*/
|
|
127
|
+
omitContentTypeHeader?: boolean;
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* API Client for TestApi
|
|
133
|
+
*/
|
|
134
|
+
export class TestApi {
|
|
135
|
+
private $config: TestApiConfig;
|
|
136
|
+
|
|
137
|
+
constructor(config: TestApiConfig) {
|
|
138
|
+
this.$config = config;
|
|
139
|
+
|
|
140
|
+
this.listPets = this.listPets.bind(this);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
private $collectionDelimiters: { [format: string]: string } = {
|
|
144
|
+
csv: ',',
|
|
145
|
+
ssv: ' ',
|
|
146
|
+
pipes: '|',
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
private $deepObject = (key: string, value: any): string[] => {
|
|
150
|
+
if (value === undefined || value === null) {
|
|
151
|
+
return [];
|
|
152
|
+
}
|
|
153
|
+
if (typeof value !== 'object') {
|
|
154
|
+
return [\`\${key}=\${encodeURIComponent(String(value))}\`];
|
|
155
|
+
}
|
|
156
|
+
return Object.entries(value).flatMap(([prop, v]) =>
|
|
157
|
+
this.$deepObject(\`\${key}[\${encodeURIComponent(prop)}]\`, v),
|
|
158
|
+
);
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
private $url = (
|
|
162
|
+
path: string,
|
|
163
|
+
pathParameters: { [key: string]: any },
|
|
164
|
+
queryParameters: { [key: string]: any },
|
|
165
|
+
collectionFormats?: {
|
|
166
|
+
[key: string]: 'multi' | 'csv' | 'ssv' | 'pipes' | 'deepObject';
|
|
167
|
+
},
|
|
168
|
+
): string => {
|
|
169
|
+
const baseUrl = this.$config.url.endsWith('/')
|
|
170
|
+
? this.$config.url.slice(0, -1)
|
|
171
|
+
: this.$config.url;
|
|
172
|
+
const pathWithParameters = Object.entries(pathParameters).reduce(
|
|
173
|
+
(withParams, [key, value]) =>
|
|
174
|
+
withParams.replace(\`{\${key}}\`, encodeURIComponent(\`\${value}\`)),
|
|
175
|
+
path,
|
|
176
|
+
);
|
|
177
|
+
const queryString = Object.entries(queryParameters)
|
|
178
|
+
.flatMap(([key, value]) => {
|
|
179
|
+
if (Array.isArray(value) && collectionFormats?.[key] === 'multi') {
|
|
180
|
+
return value.map(
|
|
181
|
+
(v) => \`\${encodeURIComponent(key)}=\${encodeURIComponent(\`\${v}\`)}\`,
|
|
182
|
+
);
|
|
183
|
+
}
|
|
184
|
+
if (
|
|
185
|
+
collectionFormats?.[key] === 'deepObject' &&
|
|
186
|
+
value !== null &&
|
|
187
|
+
typeof value === 'object'
|
|
188
|
+
) {
|
|
189
|
+
return this.$deepObject(encodeURIComponent(key), value);
|
|
190
|
+
}
|
|
191
|
+
const delimiter =
|
|
192
|
+
this.$collectionDelimiters[collectionFormats?.[key] ?? 'csv'] ?? ',';
|
|
193
|
+
return [
|
|
194
|
+
\`\${encodeURIComponent(key)}=\${encodeURIComponent(Array.isArray(value) ? value.map(String).join(delimiter) : String(value))}\`,
|
|
195
|
+
];
|
|
196
|
+
})
|
|
197
|
+
.join('&');
|
|
198
|
+
return (
|
|
199
|
+
baseUrl + pathWithParameters + (queryString ? \`?\${queryString}\` : '')
|
|
200
|
+
);
|
|
201
|
+
};
|
|
202
|
+
|
|
203
|
+
private $headers = (
|
|
204
|
+
headerParameters: { [key: string]: any },
|
|
205
|
+
collectionFormats?: { [key: string]: 'multi' | 'csv' | 'ssv' | 'pipes' },
|
|
206
|
+
): [string, string][] => {
|
|
207
|
+
return Object.entries(headerParameters).flatMap(([key, value]) => {
|
|
208
|
+
if (Array.isArray(value) && collectionFormats?.[key] === 'multi') {
|
|
209
|
+
return value.map((v) => [key, String(v)]) as [string, string][];
|
|
210
|
+
}
|
|
211
|
+
const delimiter =
|
|
212
|
+
this.$collectionDelimiters[collectionFormats?.[key] ?? 'csv'] ?? ',';
|
|
213
|
+
return [
|
|
214
|
+
[
|
|
215
|
+
key,
|
|
216
|
+
Array.isArray(value)
|
|
217
|
+
? value.map(String).join(delimiter)
|
|
218
|
+
: String(value),
|
|
219
|
+
],
|
|
220
|
+
];
|
|
221
|
+
});
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
private $fetch: typeof fetch = (...args) =>
|
|
225
|
+
(this.$config.fetch ?? fetch)(...args);
|
|
226
|
+
|
|
227
|
+
public async listPets(): Promise<Array<Animal>> {
|
|
228
|
+
const pathParameters: { [key: string]: any } = {};
|
|
229
|
+
const queryParameters: { [key: string]: any } = {};
|
|
230
|
+
const headerParameters: { [key: string]: any } = {};
|
|
231
|
+
|
|
232
|
+
const body = undefined;
|
|
233
|
+
|
|
234
|
+
const response = await this.$fetch(
|
|
235
|
+
this.$url('/pets', pathParameters, queryParameters),
|
|
236
|
+
{
|
|
237
|
+
headers: this.$headers(headerParameters),
|
|
238
|
+
method: 'GET',
|
|
239
|
+
body,
|
|
240
|
+
},
|
|
241
|
+
);
|
|
242
|
+
|
|
243
|
+
if (response.status === 200) {
|
|
244
|
+
return ((await response.json()) as Array<any>).map($IO.Animal.fromJson);
|
|
245
|
+
}
|
|
246
|
+
throw new Error(
|
|
247
|
+
\`Unknown response status \${response.status} returned by API\`,
|
|
248
|
+
);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
"
|
|
252
|
+
`;
|
|
253
|
+
|
|
254
|
+
exports[`openApiTsClientGenerator - composite schemas > marshals a polymorphic list as an array of a discriminated union > types.gen.ts 1`] = `
|
|
255
|
+
"export type Animal = Cat | Dog;
|
|
256
|
+
export type Cat = {
|
|
257
|
+
kind: 'cat';
|
|
258
|
+
napAt: Date;
|
|
259
|
+
};
|
|
260
|
+
export type Dog = {
|
|
261
|
+
kind: 'dog';
|
|
262
|
+
walkAt: Date;
|
|
263
|
+
};
|
|
264
|
+
export type ListPetsError = never;
|
|
265
|
+
"
|
|
266
|
+
`;
|
|
267
|
+
|
|
3
268
|
exports[`openApiTsClientGenerator - composite schemas > should generate valid TypeScript for composite types 1`] = `
|
|
4
269
|
"export type PutTest200Response = PutTest200ResponseAllOf &
|
|
5
270
|
PutTest200ResponseAllOf1;
|
|
@@ -47,7 +312,7 @@ exports[`openApiTsClientGenerator - composite schemas > should generate valid Ty
|
|
|
47
312
|
* Utility for serialisation and deserialisation of API types.
|
|
48
313
|
*/
|
|
49
314
|
export class $IO {
|
|
50
|
-
|
|
315
|
+
public static $mapValues = (data: any, fn: (item: any) => any) =>
|
|
51
316
|
Object.fromEntries(Object.entries(data).map(([k, v]) => [k, fn(v)]));
|
|
52
317
|
|
|
53
318
|
public static PutTest200Response = {
|
|
@@ -274,11 +539,31 @@ export class TestApi {
|
|
|
274
539
|
this.putTest = this.putTest.bind(this);
|
|
275
540
|
}
|
|
276
541
|
|
|
542
|
+
private $collectionDelimiters: { [format: string]: string } = {
|
|
543
|
+
csv: ',',
|
|
544
|
+
ssv: ' ',
|
|
545
|
+
pipes: '|',
|
|
546
|
+
};
|
|
547
|
+
|
|
548
|
+
private $deepObject = (key: string, value: any): string[] => {
|
|
549
|
+
if (value === undefined || value === null) {
|
|
550
|
+
return [];
|
|
551
|
+
}
|
|
552
|
+
if (typeof value !== 'object') {
|
|
553
|
+
return [\`\${key}=\${encodeURIComponent(String(value))}\`];
|
|
554
|
+
}
|
|
555
|
+
return Object.entries(value).flatMap(([prop, v]) =>
|
|
556
|
+
this.$deepObject(\`\${key}[\${encodeURIComponent(prop)}]\`, v),
|
|
557
|
+
);
|
|
558
|
+
};
|
|
559
|
+
|
|
277
560
|
private $url = (
|
|
278
561
|
path: string,
|
|
279
562
|
pathParameters: { [key: string]: any },
|
|
280
563
|
queryParameters: { [key: string]: any },
|
|
281
|
-
collectionFormats?: {
|
|
564
|
+
collectionFormats?: {
|
|
565
|
+
[key: string]: 'multi' | 'csv' | 'ssv' | 'pipes' | 'deepObject';
|
|
566
|
+
},
|
|
282
567
|
): string => {
|
|
283
568
|
const baseUrl = this.$config.url.endsWith('/')
|
|
284
569
|
? this.$config.url.slice(0, -1)
|
|
@@ -289,15 +574,24 @@ export class TestApi {
|
|
|
289
574
|
path,
|
|
290
575
|
);
|
|
291
576
|
const queryString = Object.entries(queryParameters)
|
|
292
|
-
.
|
|
577
|
+
.flatMap(([key, value]) => {
|
|
293
578
|
if (Array.isArray(value) && collectionFormats?.[key] === 'multi') {
|
|
294
|
-
return value
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
)
|
|
298
|
-
.join('&');
|
|
579
|
+
return value.map(
|
|
580
|
+
(v) => \`\${encodeURIComponent(key)}=\${encodeURIComponent(\`\${v}\`)}\`,
|
|
581
|
+
);
|
|
299
582
|
}
|
|
300
|
-
|
|
583
|
+
if (
|
|
584
|
+
collectionFormats?.[key] === 'deepObject' &&
|
|
585
|
+
value !== null &&
|
|
586
|
+
typeof value === 'object'
|
|
587
|
+
) {
|
|
588
|
+
return this.$deepObject(encodeURIComponent(key), value);
|
|
589
|
+
}
|
|
590
|
+
const delimiter =
|
|
591
|
+
this.$collectionDelimiters[collectionFormats?.[key] ?? 'csv'] ?? ',';
|
|
592
|
+
return [
|
|
593
|
+
\`\${encodeURIComponent(key)}=\${encodeURIComponent(Array.isArray(value) ? value.map(String).join(delimiter) : String(value))}\`,
|
|
594
|
+
];
|
|
301
595
|
})
|
|
302
596
|
.join('&');
|
|
303
597
|
return (
|
|
@@ -307,13 +601,22 @@ export class TestApi {
|
|
|
307
601
|
|
|
308
602
|
private $headers = (
|
|
309
603
|
headerParameters: { [key: string]: any },
|
|
310
|
-
collectionFormats?: { [key: string]: 'multi' | 'csv' },
|
|
604
|
+
collectionFormats?: { [key: string]: 'multi' | 'csv' | 'ssv' | 'pipes' },
|
|
311
605
|
): [string, string][] => {
|
|
312
606
|
return Object.entries(headerParameters).flatMap(([key, value]) => {
|
|
313
607
|
if (Array.isArray(value) && collectionFormats?.[key] === 'multi') {
|
|
314
608
|
return value.map((v) => [key, String(v)]) as [string, string][];
|
|
315
609
|
}
|
|
316
|
-
|
|
610
|
+
const delimiter =
|
|
611
|
+
this.$collectionDelimiters[collectionFormats?.[key] ?? 'csv'] ?? ',';
|
|
612
|
+
return [
|
|
613
|
+
[
|
|
614
|
+
key,
|
|
615
|
+
Array.isArray(value)
|
|
616
|
+
? value.map(String).join(delimiter)
|
|
617
|
+
: String(value),
|
|
618
|
+
],
|
|
619
|
+
];
|
|
317
620
|
});
|
|
318
621
|
};
|
|
319
622
|
|
|
@@ -356,7 +659,7 @@ export class TestApi {
|
|
|
356
659
|
|
|
357
660
|
exports[`openApiTsClientGenerator - composite schemas > should handle FastAPI-style discriminated unions with string const (Literal) 1`] = `
|
|
358
661
|
"export type Circle = {
|
|
359
|
-
kind:
|
|
662
|
+
kind: 'circle';
|
|
360
663
|
radius: number;
|
|
361
664
|
};
|
|
362
665
|
export type Kind = 'circle';
|
|
@@ -366,7 +669,7 @@ export type ShapesOut = {
|
|
|
366
669
|
};
|
|
367
670
|
export type ShapesOutCanonical = Circle | Square;
|
|
368
671
|
export type Square = {
|
|
369
|
-
kind:
|
|
672
|
+
kind: 'square';
|
|
370
673
|
side: number;
|
|
371
674
|
};
|
|
372
675
|
export type GetShapesError = never;
|
|
@@ -385,7 +688,7 @@ exports[`openApiTsClientGenerator - composite schemas > should handle FastAPI-st
|
|
|
385
688
|
* Utility for serialisation and deserialisation of API types.
|
|
386
689
|
*/
|
|
387
690
|
export class $IO {
|
|
388
|
-
|
|
691
|
+
public static $mapValues = (data: any, fn: (item: any) => any) =>
|
|
389
692
|
Object.fromEntries(Object.entries(data).map(([k, v]) => [k, fn(v)]));
|
|
390
693
|
|
|
391
694
|
public static Circle = {
|
|
@@ -445,6 +748,12 @@ export class $IO {
|
|
|
445
748
|
if (model === undefined || model === null) {
|
|
446
749
|
return model;
|
|
447
750
|
}
|
|
751
|
+
switch ((model as any).kind) {
|
|
752
|
+
case 'circle':
|
|
753
|
+
return $IO.Circle.toJson(model as Circle);
|
|
754
|
+
case 'square':
|
|
755
|
+
return $IO.Square.toJson(model as Square);
|
|
756
|
+
}
|
|
448
757
|
return {
|
|
449
758
|
...$IO.Circle.toJson(model as Circle),
|
|
450
759
|
...$IO.Square.toJson(model as Square),
|
|
@@ -454,6 +763,12 @@ export class $IO {
|
|
|
454
763
|
if (json === undefined || json === null) {
|
|
455
764
|
return json;
|
|
456
765
|
}
|
|
766
|
+
switch (json?.['kind']) {
|
|
767
|
+
case 'circle':
|
|
768
|
+
return $IO.Circle.fromJson(json);
|
|
769
|
+
case 'square':
|
|
770
|
+
return $IO.Square.fromJson(json);
|
|
771
|
+
}
|
|
457
772
|
return {
|
|
458
773
|
...$IO.Circle.fromJson(json),
|
|
459
774
|
...$IO.Square.fromJson(json),
|
|
@@ -529,11 +844,31 @@ export class TestApi {
|
|
|
529
844
|
this.getShapes = this.getShapes.bind(this);
|
|
530
845
|
}
|
|
531
846
|
|
|
847
|
+
private $collectionDelimiters: { [format: string]: string } = {
|
|
848
|
+
csv: ',',
|
|
849
|
+
ssv: ' ',
|
|
850
|
+
pipes: '|',
|
|
851
|
+
};
|
|
852
|
+
|
|
853
|
+
private $deepObject = (key: string, value: any): string[] => {
|
|
854
|
+
if (value === undefined || value === null) {
|
|
855
|
+
return [];
|
|
856
|
+
}
|
|
857
|
+
if (typeof value !== 'object') {
|
|
858
|
+
return [\`\${key}=\${encodeURIComponent(String(value))}\`];
|
|
859
|
+
}
|
|
860
|
+
return Object.entries(value).flatMap(([prop, v]) =>
|
|
861
|
+
this.$deepObject(\`\${key}[\${encodeURIComponent(prop)}]\`, v),
|
|
862
|
+
);
|
|
863
|
+
};
|
|
864
|
+
|
|
532
865
|
private $url = (
|
|
533
866
|
path: string,
|
|
534
867
|
pathParameters: { [key: string]: any },
|
|
535
868
|
queryParameters: { [key: string]: any },
|
|
536
|
-
collectionFormats?: {
|
|
869
|
+
collectionFormats?: {
|
|
870
|
+
[key: string]: 'multi' | 'csv' | 'ssv' | 'pipes' | 'deepObject';
|
|
871
|
+
},
|
|
537
872
|
): string => {
|
|
538
873
|
const baseUrl = this.$config.url.endsWith('/')
|
|
539
874
|
? this.$config.url.slice(0, -1)
|
|
@@ -544,15 +879,24 @@ export class TestApi {
|
|
|
544
879
|
path,
|
|
545
880
|
);
|
|
546
881
|
const queryString = Object.entries(queryParameters)
|
|
547
|
-
.
|
|
882
|
+
.flatMap(([key, value]) => {
|
|
548
883
|
if (Array.isArray(value) && collectionFormats?.[key] === 'multi') {
|
|
549
|
-
return value
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
884
|
+
return value.map(
|
|
885
|
+
(v) => \`\${encodeURIComponent(key)}=\${encodeURIComponent(\`\${v}\`)}\`,
|
|
886
|
+
);
|
|
887
|
+
}
|
|
888
|
+
if (
|
|
889
|
+
collectionFormats?.[key] === 'deepObject' &&
|
|
890
|
+
value !== null &&
|
|
891
|
+
typeof value === 'object'
|
|
892
|
+
) {
|
|
893
|
+
return this.$deepObject(encodeURIComponent(key), value);
|
|
554
894
|
}
|
|
555
|
-
|
|
895
|
+
const delimiter =
|
|
896
|
+
this.$collectionDelimiters[collectionFormats?.[key] ?? 'csv'] ?? ',';
|
|
897
|
+
return [
|
|
898
|
+
\`\${encodeURIComponent(key)}=\${encodeURIComponent(Array.isArray(value) ? value.map(String).join(delimiter) : String(value))}\`,
|
|
899
|
+
];
|
|
556
900
|
})
|
|
557
901
|
.join('&');
|
|
558
902
|
return (
|
|
@@ -562,13 +906,22 @@ export class TestApi {
|
|
|
562
906
|
|
|
563
907
|
private $headers = (
|
|
564
908
|
headerParameters: { [key: string]: any },
|
|
565
|
-
collectionFormats?: { [key: string]: 'multi' | 'csv' },
|
|
909
|
+
collectionFormats?: { [key: string]: 'multi' | 'csv' | 'ssv' | 'pipes' },
|
|
566
910
|
): [string, string][] => {
|
|
567
911
|
return Object.entries(headerParameters).flatMap(([key, value]) => {
|
|
568
912
|
if (Array.isArray(value) && collectionFormats?.[key] === 'multi') {
|
|
569
913
|
return value.map((v) => [key, String(v)]) as [string, string][];
|
|
570
914
|
}
|
|
571
|
-
|
|
915
|
+
const delimiter =
|
|
916
|
+
this.$collectionDelimiters[collectionFormats?.[key] ?? 'csv'] ?? ',';
|
|
917
|
+
return [
|
|
918
|
+
[
|
|
919
|
+
key,
|
|
920
|
+
Array.isArray(value)
|
|
921
|
+
? value.map(String).join(delimiter)
|
|
922
|
+
: String(value),
|
|
923
|
+
],
|
|
924
|
+
];
|
|
572
925
|
});
|
|
573
926
|
};
|
|
574
927
|
|
|
@@ -628,7 +981,7 @@ exports[`openApiTsClientGenerator - composite schemas > should handle anyOf with
|
|
|
628
981
|
* Utility for serialisation and deserialisation of API types.
|
|
629
982
|
*/
|
|
630
983
|
export class $IO {
|
|
631
|
-
|
|
984
|
+
public static $mapValues = (data: any, fn: (item: any) => any) =>
|
|
632
985
|
Object.fromEntries(Object.entries(data).map(([k, v]) => [k, fn(v)]));
|
|
633
986
|
|
|
634
987
|
public static TestAnyOfAny200Response = {
|
|
@@ -743,11 +1096,31 @@ export class TestApi {
|
|
|
743
1096
|
this.testAnyOfAny = this.testAnyOfAny.bind(this);
|
|
744
1097
|
}
|
|
745
1098
|
|
|
1099
|
+
private $collectionDelimiters: { [format: string]: string } = {
|
|
1100
|
+
csv: ',',
|
|
1101
|
+
ssv: ' ',
|
|
1102
|
+
pipes: '|',
|
|
1103
|
+
};
|
|
1104
|
+
|
|
1105
|
+
private $deepObject = (key: string, value: any): string[] => {
|
|
1106
|
+
if (value === undefined || value === null) {
|
|
1107
|
+
return [];
|
|
1108
|
+
}
|
|
1109
|
+
if (typeof value !== 'object') {
|
|
1110
|
+
return [\`\${key}=\${encodeURIComponent(String(value))}\`];
|
|
1111
|
+
}
|
|
1112
|
+
return Object.entries(value).flatMap(([prop, v]) =>
|
|
1113
|
+
this.$deepObject(\`\${key}[\${encodeURIComponent(prop)}]\`, v),
|
|
1114
|
+
);
|
|
1115
|
+
};
|
|
1116
|
+
|
|
746
1117
|
private $url = (
|
|
747
1118
|
path: string,
|
|
748
1119
|
pathParameters: { [key: string]: any },
|
|
749
1120
|
queryParameters: { [key: string]: any },
|
|
750
|
-
collectionFormats?: {
|
|
1121
|
+
collectionFormats?: {
|
|
1122
|
+
[key: string]: 'multi' | 'csv' | 'ssv' | 'pipes' | 'deepObject';
|
|
1123
|
+
},
|
|
751
1124
|
): string => {
|
|
752
1125
|
const baseUrl = this.$config.url.endsWith('/')
|
|
753
1126
|
? this.$config.url.slice(0, -1)
|
|
@@ -758,15 +1131,24 @@ export class TestApi {
|
|
|
758
1131
|
path,
|
|
759
1132
|
);
|
|
760
1133
|
const queryString = Object.entries(queryParameters)
|
|
761
|
-
.
|
|
1134
|
+
.flatMap(([key, value]) => {
|
|
762
1135
|
if (Array.isArray(value) && collectionFormats?.[key] === 'multi') {
|
|
763
|
-
return value
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
1136
|
+
return value.map(
|
|
1137
|
+
(v) => \`\${encodeURIComponent(key)}=\${encodeURIComponent(\`\${v}\`)}\`,
|
|
1138
|
+
);
|
|
1139
|
+
}
|
|
1140
|
+
if (
|
|
1141
|
+
collectionFormats?.[key] === 'deepObject' &&
|
|
1142
|
+
value !== null &&
|
|
1143
|
+
typeof value === 'object'
|
|
1144
|
+
) {
|
|
1145
|
+
return this.$deepObject(encodeURIComponent(key), value);
|
|
768
1146
|
}
|
|
769
|
-
|
|
1147
|
+
const delimiter =
|
|
1148
|
+
this.$collectionDelimiters[collectionFormats?.[key] ?? 'csv'] ?? ',';
|
|
1149
|
+
return [
|
|
1150
|
+
\`\${encodeURIComponent(key)}=\${encodeURIComponent(Array.isArray(value) ? value.map(String).join(delimiter) : String(value))}\`,
|
|
1151
|
+
];
|
|
770
1152
|
})
|
|
771
1153
|
.join('&');
|
|
772
1154
|
return (
|
|
@@ -776,13 +1158,22 @@ export class TestApi {
|
|
|
776
1158
|
|
|
777
1159
|
private $headers = (
|
|
778
1160
|
headerParameters: { [key: string]: any },
|
|
779
|
-
collectionFormats?: { [key: string]: 'multi' | 'csv' },
|
|
1161
|
+
collectionFormats?: { [key: string]: 'multi' | 'csv' | 'ssv' | 'pipes' },
|
|
780
1162
|
): [string, string][] => {
|
|
781
1163
|
return Object.entries(headerParameters).flatMap(([key, value]) => {
|
|
782
1164
|
if (Array.isArray(value) && collectionFormats?.[key] === 'multi') {
|
|
783
1165
|
return value.map((v) => [key, String(v)]) as [string, string][];
|
|
784
1166
|
}
|
|
785
|
-
|
|
1167
|
+
const delimiter =
|
|
1168
|
+
this.$collectionDelimiters[collectionFormats?.[key] ?? 'csv'] ?? ',';
|
|
1169
|
+
return [
|
|
1170
|
+
[
|
|
1171
|
+
key,
|
|
1172
|
+
Array.isArray(value)
|
|
1173
|
+
? value.map(String).join(delimiter)
|
|
1174
|
+
: String(value),
|
|
1175
|
+
],
|
|
1176
|
+
];
|
|
786
1177
|
});
|
|
787
1178
|
};
|
|
788
1179
|
|
|
@@ -853,7 +1244,7 @@ exports[`openApiTsClientGenerator - composite schemas > should handle anyOf with
|
|
|
853
1244
|
* Utility for serialisation and deserialisation of API types.
|
|
854
1245
|
*/
|
|
855
1246
|
export class $IO {
|
|
856
|
-
|
|
1247
|
+
public static $mapValues = (data: any, fn: (item: any) => any) =>
|
|
857
1248
|
Object.fromEntries(Object.entries(data).map(([k, v]) => [k, fn(v)]));
|
|
858
1249
|
|
|
859
1250
|
public static TestAnyOfEnum200Response = {
|
|
@@ -968,11 +1359,31 @@ export class TestApi {
|
|
|
968
1359
|
this.testAnyOfEnum = this.testAnyOfEnum.bind(this);
|
|
969
1360
|
}
|
|
970
1361
|
|
|
1362
|
+
private $collectionDelimiters: { [format: string]: string } = {
|
|
1363
|
+
csv: ',',
|
|
1364
|
+
ssv: ' ',
|
|
1365
|
+
pipes: '|',
|
|
1366
|
+
};
|
|
1367
|
+
|
|
1368
|
+
private $deepObject = (key: string, value: any): string[] => {
|
|
1369
|
+
if (value === undefined || value === null) {
|
|
1370
|
+
return [];
|
|
1371
|
+
}
|
|
1372
|
+
if (typeof value !== 'object') {
|
|
1373
|
+
return [\`\${key}=\${encodeURIComponent(String(value))}\`];
|
|
1374
|
+
}
|
|
1375
|
+
return Object.entries(value).flatMap(([prop, v]) =>
|
|
1376
|
+
this.$deepObject(\`\${key}[\${encodeURIComponent(prop)}]\`, v),
|
|
1377
|
+
);
|
|
1378
|
+
};
|
|
1379
|
+
|
|
971
1380
|
private $url = (
|
|
972
1381
|
path: string,
|
|
973
1382
|
pathParameters: { [key: string]: any },
|
|
974
1383
|
queryParameters: { [key: string]: any },
|
|
975
|
-
collectionFormats?: {
|
|
1384
|
+
collectionFormats?: {
|
|
1385
|
+
[key: string]: 'multi' | 'csv' | 'ssv' | 'pipes' | 'deepObject';
|
|
1386
|
+
},
|
|
976
1387
|
): string => {
|
|
977
1388
|
const baseUrl = this.$config.url.endsWith('/')
|
|
978
1389
|
? this.$config.url.slice(0, -1)
|
|
@@ -983,15 +1394,24 @@ export class TestApi {
|
|
|
983
1394
|
path,
|
|
984
1395
|
);
|
|
985
1396
|
const queryString = Object.entries(queryParameters)
|
|
986
|
-
.
|
|
1397
|
+
.flatMap(([key, value]) => {
|
|
987
1398
|
if (Array.isArray(value) && collectionFormats?.[key] === 'multi') {
|
|
988
|
-
return value
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
1399
|
+
return value.map(
|
|
1400
|
+
(v) => \`\${encodeURIComponent(key)}=\${encodeURIComponent(\`\${v}\`)}\`,
|
|
1401
|
+
);
|
|
1402
|
+
}
|
|
1403
|
+
if (
|
|
1404
|
+
collectionFormats?.[key] === 'deepObject' &&
|
|
1405
|
+
value !== null &&
|
|
1406
|
+
typeof value === 'object'
|
|
1407
|
+
) {
|
|
1408
|
+
return this.$deepObject(encodeURIComponent(key), value);
|
|
993
1409
|
}
|
|
994
|
-
|
|
1410
|
+
const delimiter =
|
|
1411
|
+
this.$collectionDelimiters[collectionFormats?.[key] ?? 'csv'] ?? ',';
|
|
1412
|
+
return [
|
|
1413
|
+
\`\${encodeURIComponent(key)}=\${encodeURIComponent(Array.isArray(value) ? value.map(String).join(delimiter) : String(value))}\`,
|
|
1414
|
+
];
|
|
995
1415
|
})
|
|
996
1416
|
.join('&');
|
|
997
1417
|
return (
|
|
@@ -1001,13 +1421,22 @@ export class TestApi {
|
|
|
1001
1421
|
|
|
1002
1422
|
private $headers = (
|
|
1003
1423
|
headerParameters: { [key: string]: any },
|
|
1004
|
-
collectionFormats?: { [key: string]: 'multi' | 'csv' },
|
|
1424
|
+
collectionFormats?: { [key: string]: 'multi' | 'csv' | 'ssv' | 'pipes' },
|
|
1005
1425
|
): [string, string][] => {
|
|
1006
1426
|
return Object.entries(headerParameters).flatMap(([key, value]) => {
|
|
1007
1427
|
if (Array.isArray(value) && collectionFormats?.[key] === 'multi') {
|
|
1008
1428
|
return value.map((v) => [key, String(v)]) as [string, string][];
|
|
1009
1429
|
}
|
|
1010
|
-
|
|
1430
|
+
const delimiter =
|
|
1431
|
+
this.$collectionDelimiters[collectionFormats?.[key] ?? 'csv'] ?? ',';
|
|
1432
|
+
return [
|
|
1433
|
+
[
|
|
1434
|
+
key,
|
|
1435
|
+
Array.isArray(value)
|
|
1436
|
+
? value.map(String).join(delimiter)
|
|
1437
|
+
: String(value),
|
|
1438
|
+
],
|
|
1439
|
+
];
|
|
1011
1440
|
});
|
|
1012
1441
|
};
|
|
1013
1442
|
|
|
@@ -1088,7 +1517,7 @@ exports[`openApiTsClientGenerator - composite schemas > should handle composite
|
|
|
1088
1517
|
* Utility for serialisation and deserialisation of API types.
|
|
1089
1518
|
*/
|
|
1090
1519
|
export class $IO {
|
|
1091
|
-
|
|
1520
|
+
public static $mapValues = (data: any, fn: (item: any) => any) =>
|
|
1092
1521
|
Object.fromEntries(Object.entries(data).map(([k, v]) => [k, fn(v)]));
|
|
1093
1522
|
|
|
1094
1523
|
public static CompositeRequestContent = {
|
|
@@ -1294,11 +1723,31 @@ export class TestApi {
|
|
|
1294
1723
|
this.composite = this.composite.bind(this);
|
|
1295
1724
|
}
|
|
1296
1725
|
|
|
1726
|
+
private $collectionDelimiters: { [format: string]: string } = {
|
|
1727
|
+
csv: ',',
|
|
1728
|
+
ssv: ' ',
|
|
1729
|
+
pipes: '|',
|
|
1730
|
+
};
|
|
1731
|
+
|
|
1732
|
+
private $deepObject = (key: string, value: any): string[] => {
|
|
1733
|
+
if (value === undefined || value === null) {
|
|
1734
|
+
return [];
|
|
1735
|
+
}
|
|
1736
|
+
if (typeof value !== 'object') {
|
|
1737
|
+
return [\`\${key}=\${encodeURIComponent(String(value))}\`];
|
|
1738
|
+
}
|
|
1739
|
+
return Object.entries(value).flatMap(([prop, v]) =>
|
|
1740
|
+
this.$deepObject(\`\${key}[\${encodeURIComponent(prop)}]\`, v),
|
|
1741
|
+
);
|
|
1742
|
+
};
|
|
1743
|
+
|
|
1297
1744
|
private $url = (
|
|
1298
1745
|
path: string,
|
|
1299
1746
|
pathParameters: { [key: string]: any },
|
|
1300
1747
|
queryParameters: { [key: string]: any },
|
|
1301
|
-
collectionFormats?: {
|
|
1748
|
+
collectionFormats?: {
|
|
1749
|
+
[key: string]: 'multi' | 'csv' | 'ssv' | 'pipes' | 'deepObject';
|
|
1750
|
+
},
|
|
1302
1751
|
): string => {
|
|
1303
1752
|
const baseUrl = this.$config.url.endsWith('/')
|
|
1304
1753
|
? this.$config.url.slice(0, -1)
|
|
@@ -1309,15 +1758,24 @@ export class TestApi {
|
|
|
1309
1758
|
path,
|
|
1310
1759
|
);
|
|
1311
1760
|
const queryString = Object.entries(queryParameters)
|
|
1312
|
-
.
|
|
1761
|
+
.flatMap(([key, value]) => {
|
|
1313
1762
|
if (Array.isArray(value) && collectionFormats?.[key] === 'multi') {
|
|
1314
|
-
return value
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1763
|
+
return value.map(
|
|
1764
|
+
(v) => \`\${encodeURIComponent(key)}=\${encodeURIComponent(\`\${v}\`)}\`,
|
|
1765
|
+
);
|
|
1766
|
+
}
|
|
1767
|
+
if (
|
|
1768
|
+
collectionFormats?.[key] === 'deepObject' &&
|
|
1769
|
+
value !== null &&
|
|
1770
|
+
typeof value === 'object'
|
|
1771
|
+
) {
|
|
1772
|
+
return this.$deepObject(encodeURIComponent(key), value);
|
|
1319
1773
|
}
|
|
1320
|
-
|
|
1774
|
+
const delimiter =
|
|
1775
|
+
this.$collectionDelimiters[collectionFormats?.[key] ?? 'csv'] ?? ',';
|
|
1776
|
+
return [
|
|
1777
|
+
\`\${encodeURIComponent(key)}=\${encodeURIComponent(Array.isArray(value) ? value.map(String).join(delimiter) : String(value))}\`,
|
|
1778
|
+
];
|
|
1321
1779
|
})
|
|
1322
1780
|
.join('&');
|
|
1323
1781
|
return (
|
|
@@ -1327,13 +1785,22 @@ export class TestApi {
|
|
|
1327
1785
|
|
|
1328
1786
|
private $headers = (
|
|
1329
1787
|
headerParameters: { [key: string]: any },
|
|
1330
|
-
collectionFormats?: { [key: string]: 'multi' | 'csv' },
|
|
1788
|
+
collectionFormats?: { [key: string]: 'multi' | 'csv' | 'ssv' | 'pipes' },
|
|
1331
1789
|
): [string, string][] => {
|
|
1332
1790
|
return Object.entries(headerParameters).flatMap(([key, value]) => {
|
|
1333
1791
|
if (Array.isArray(value) && collectionFormats?.[key] === 'multi') {
|
|
1334
1792
|
return value.map((v) => [key, String(v)]) as [string, string][];
|
|
1335
1793
|
}
|
|
1336
|
-
|
|
1794
|
+
const delimiter =
|
|
1795
|
+
this.$collectionDelimiters[collectionFormats?.[key] ?? 'csv'] ?? ',';
|
|
1796
|
+
return [
|
|
1797
|
+
[
|
|
1798
|
+
key,
|
|
1799
|
+
Array.isArray(value)
|
|
1800
|
+
? value.map(String).join(delimiter)
|
|
1801
|
+
: String(value),
|
|
1802
|
+
],
|
|
1803
|
+
];
|
|
1337
1804
|
});
|
|
1338
1805
|
};
|
|
1339
1806
|
|
|
@@ -1444,7 +1911,7 @@ exports[`openApiTsClientGenerator - composite schemas > should handle inline pri
|
|
|
1444
1911
|
* Utility for serialisation and deserialisation of API types.
|
|
1445
1912
|
*/
|
|
1446
1913
|
export class $IO {
|
|
1447
|
-
|
|
1914
|
+
public static $mapValues = (data: any, fn: (item: any) => any) =>
|
|
1448
1915
|
Object.fromEntries(Object.entries(data).map(([k, v]) => [k, fn(v)]));
|
|
1449
1916
|
|
|
1450
1917
|
public static TestArrays200Response = {
|
|
@@ -1692,11 +2159,31 @@ export class TestApi {
|
|
|
1692
2159
|
this.testPrimitiveText = this.testPrimitiveText.bind(this);
|
|
1693
2160
|
}
|
|
1694
2161
|
|
|
2162
|
+
private $collectionDelimiters: { [format: string]: string } = {
|
|
2163
|
+
csv: ',',
|
|
2164
|
+
ssv: ' ',
|
|
2165
|
+
pipes: '|',
|
|
2166
|
+
};
|
|
2167
|
+
|
|
2168
|
+
private $deepObject = (key: string, value: any): string[] => {
|
|
2169
|
+
if (value === undefined || value === null) {
|
|
2170
|
+
return [];
|
|
2171
|
+
}
|
|
2172
|
+
if (typeof value !== 'object') {
|
|
2173
|
+
return [\`\${key}=\${encodeURIComponent(String(value))}\`];
|
|
2174
|
+
}
|
|
2175
|
+
return Object.entries(value).flatMap(([prop, v]) =>
|
|
2176
|
+
this.$deepObject(\`\${key}[\${encodeURIComponent(prop)}]\`, v),
|
|
2177
|
+
);
|
|
2178
|
+
};
|
|
2179
|
+
|
|
1695
2180
|
private $url = (
|
|
1696
2181
|
path: string,
|
|
1697
2182
|
pathParameters: { [key: string]: any },
|
|
1698
2183
|
queryParameters: { [key: string]: any },
|
|
1699
|
-
collectionFormats?: {
|
|
2184
|
+
collectionFormats?: {
|
|
2185
|
+
[key: string]: 'multi' | 'csv' | 'ssv' | 'pipes' | 'deepObject';
|
|
2186
|
+
},
|
|
1700
2187
|
): string => {
|
|
1701
2188
|
const baseUrl = this.$config.url.endsWith('/')
|
|
1702
2189
|
? this.$config.url.slice(0, -1)
|
|
@@ -1707,15 +2194,24 @@ export class TestApi {
|
|
|
1707
2194
|
path,
|
|
1708
2195
|
);
|
|
1709
2196
|
const queryString = Object.entries(queryParameters)
|
|
1710
|
-
.
|
|
2197
|
+
.flatMap(([key, value]) => {
|
|
1711
2198
|
if (Array.isArray(value) && collectionFormats?.[key] === 'multi') {
|
|
1712
|
-
return value
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
)
|
|
1716
|
-
.join('&');
|
|
2199
|
+
return value.map(
|
|
2200
|
+
(v) => \`\${encodeURIComponent(key)}=\${encodeURIComponent(\`\${v}\`)}\`,
|
|
2201
|
+
);
|
|
1717
2202
|
}
|
|
1718
|
-
|
|
2203
|
+
if (
|
|
2204
|
+
collectionFormats?.[key] === 'deepObject' &&
|
|
2205
|
+
value !== null &&
|
|
2206
|
+
typeof value === 'object'
|
|
2207
|
+
) {
|
|
2208
|
+
return this.$deepObject(encodeURIComponent(key), value);
|
|
2209
|
+
}
|
|
2210
|
+
const delimiter =
|
|
2211
|
+
this.$collectionDelimiters[collectionFormats?.[key] ?? 'csv'] ?? ',';
|
|
2212
|
+
return [
|
|
2213
|
+
\`\${encodeURIComponent(key)}=\${encodeURIComponent(Array.isArray(value) ? value.map(String).join(delimiter) : String(value))}\`,
|
|
2214
|
+
];
|
|
1719
2215
|
})
|
|
1720
2216
|
.join('&');
|
|
1721
2217
|
return (
|
|
@@ -1725,13 +2221,22 @@ export class TestApi {
|
|
|
1725
2221
|
|
|
1726
2222
|
private $headers = (
|
|
1727
2223
|
headerParameters: { [key: string]: any },
|
|
1728
|
-
collectionFormats?: { [key: string]: 'multi' | 'csv' },
|
|
2224
|
+
collectionFormats?: { [key: string]: 'multi' | 'csv' | 'ssv' | 'pipes' },
|
|
1729
2225
|
): [string, string][] => {
|
|
1730
2226
|
return Object.entries(headerParameters).flatMap(([key, value]) => {
|
|
1731
2227
|
if (Array.isArray(value) && collectionFormats?.[key] === 'multi') {
|
|
1732
2228
|
return value.map((v) => [key, String(v)]) as [string, string][];
|
|
1733
2229
|
}
|
|
1734
|
-
|
|
2230
|
+
const delimiter =
|
|
2231
|
+
this.$collectionDelimiters[collectionFormats?.[key] ?? 'csv'] ?? ',';
|
|
2232
|
+
return [
|
|
2233
|
+
[
|
|
2234
|
+
key,
|
|
2235
|
+
Array.isArray(value)
|
|
2236
|
+
? value.map(String).join(delimiter)
|
|
2237
|
+
: String(value),
|
|
2238
|
+
],
|
|
2239
|
+
];
|
|
1735
2240
|
});
|
|
1736
2241
|
};
|
|
1737
2242
|
|
|
@@ -1776,7 +2281,7 @@ export class TestApi {
|
|
|
1776
2281
|
if (!this.$config.options?.omitContentTypeHeader) {
|
|
1777
2282
|
headerParameters['Content-Type'] = 'application/json';
|
|
1778
2283
|
}
|
|
1779
|
-
const
|
|
2284
|
+
const queryCollectionFormats = {
|
|
1780
2285
|
someParameter: 'multi',
|
|
1781
2286
|
} as const;
|
|
1782
2287
|
const body =
|
|
@@ -1792,10 +2297,10 @@ export class TestApi {
|
|
|
1792
2297
|
'/arrays-with-other-parameters',
|
|
1793
2298
|
pathParameters,
|
|
1794
2299
|
queryParameters,
|
|
1795
|
-
|
|
2300
|
+
queryCollectionFormats,
|
|
1796
2301
|
),
|
|
1797
2302
|
{
|
|
1798
|
-
headers: this.$headers(headerParameters
|
|
2303
|
+
headers: this.$headers(headerParameters),
|
|
1799
2304
|
method: 'POST',
|
|
1800
2305
|
body,
|
|
1801
2306
|
},
|
|
@@ -1956,7 +2461,7 @@ exports[`openApiTsClientGenerator - composite schemas > should handle not schema
|
|
|
1956
2461
|
* Utility for serialisation and deserialisation of API types.
|
|
1957
2462
|
*/
|
|
1958
2463
|
export class $IO {
|
|
1959
|
-
|
|
2464
|
+
public static $mapValues = (data: any, fn: (item: any) => any) =>
|
|
1960
2465
|
Object.fromEntries(Object.entries(data).map(([k, v]) => [k, fn(v)]));
|
|
1961
2466
|
|
|
1962
2467
|
public static TestNot200Response = {
|
|
@@ -2089,11 +2594,31 @@ export class TestApi {
|
|
|
2089
2594
|
this.testNot = this.testNot.bind(this);
|
|
2090
2595
|
}
|
|
2091
2596
|
|
|
2597
|
+
private $collectionDelimiters: { [format: string]: string } = {
|
|
2598
|
+
csv: ',',
|
|
2599
|
+
ssv: ' ',
|
|
2600
|
+
pipes: '|',
|
|
2601
|
+
};
|
|
2602
|
+
|
|
2603
|
+
private $deepObject = (key: string, value: any): string[] => {
|
|
2604
|
+
if (value === undefined || value === null) {
|
|
2605
|
+
return [];
|
|
2606
|
+
}
|
|
2607
|
+
if (typeof value !== 'object') {
|
|
2608
|
+
return [\`\${key}=\${encodeURIComponent(String(value))}\`];
|
|
2609
|
+
}
|
|
2610
|
+
return Object.entries(value).flatMap(([prop, v]) =>
|
|
2611
|
+
this.$deepObject(\`\${key}[\${encodeURIComponent(prop)}]\`, v),
|
|
2612
|
+
);
|
|
2613
|
+
};
|
|
2614
|
+
|
|
2092
2615
|
private $url = (
|
|
2093
2616
|
path: string,
|
|
2094
2617
|
pathParameters: { [key: string]: any },
|
|
2095
2618
|
queryParameters: { [key: string]: any },
|
|
2096
|
-
collectionFormats?: {
|
|
2619
|
+
collectionFormats?: {
|
|
2620
|
+
[key: string]: 'multi' | 'csv' | 'ssv' | 'pipes' | 'deepObject';
|
|
2621
|
+
},
|
|
2097
2622
|
): string => {
|
|
2098
2623
|
const baseUrl = this.$config.url.endsWith('/')
|
|
2099
2624
|
? this.$config.url.slice(0, -1)
|
|
@@ -2104,15 +2629,24 @@ export class TestApi {
|
|
|
2104
2629
|
path,
|
|
2105
2630
|
);
|
|
2106
2631
|
const queryString = Object.entries(queryParameters)
|
|
2107
|
-
.
|
|
2632
|
+
.flatMap(([key, value]) => {
|
|
2108
2633
|
if (Array.isArray(value) && collectionFormats?.[key] === 'multi') {
|
|
2109
|
-
return value
|
|
2110
|
-
|
|
2111
|
-
|
|
2112
|
-
|
|
2113
|
-
|
|
2634
|
+
return value.map(
|
|
2635
|
+
(v) => \`\${encodeURIComponent(key)}=\${encodeURIComponent(\`\${v}\`)}\`,
|
|
2636
|
+
);
|
|
2637
|
+
}
|
|
2638
|
+
if (
|
|
2639
|
+
collectionFormats?.[key] === 'deepObject' &&
|
|
2640
|
+
value !== null &&
|
|
2641
|
+
typeof value === 'object'
|
|
2642
|
+
) {
|
|
2643
|
+
return this.$deepObject(encodeURIComponent(key), value);
|
|
2114
2644
|
}
|
|
2115
|
-
|
|
2645
|
+
const delimiter =
|
|
2646
|
+
this.$collectionDelimiters[collectionFormats?.[key] ?? 'csv'] ?? ',';
|
|
2647
|
+
return [
|
|
2648
|
+
\`\${encodeURIComponent(key)}=\${encodeURIComponent(Array.isArray(value) ? value.map(String).join(delimiter) : String(value))}\`,
|
|
2649
|
+
];
|
|
2116
2650
|
})
|
|
2117
2651
|
.join('&');
|
|
2118
2652
|
return (
|
|
@@ -2122,13 +2656,22 @@ export class TestApi {
|
|
|
2122
2656
|
|
|
2123
2657
|
private $headers = (
|
|
2124
2658
|
headerParameters: { [key: string]: any },
|
|
2125
|
-
collectionFormats?: { [key: string]: 'multi' | 'csv' },
|
|
2659
|
+
collectionFormats?: { [key: string]: 'multi' | 'csv' | 'ssv' | 'pipes' },
|
|
2126
2660
|
): [string, string][] => {
|
|
2127
2661
|
return Object.entries(headerParameters).flatMap(([key, value]) => {
|
|
2128
2662
|
if (Array.isArray(value) && collectionFormats?.[key] === 'multi') {
|
|
2129
2663
|
return value.map((v) => [key, String(v)]) as [string, string][];
|
|
2130
2664
|
}
|
|
2131
|
-
|
|
2665
|
+
const delimiter =
|
|
2666
|
+
this.$collectionDelimiters[collectionFormats?.[key] ?? 'csv'] ?? ',';
|
|
2667
|
+
return [
|
|
2668
|
+
[
|
|
2669
|
+
key,
|
|
2670
|
+
Array.isArray(value)
|
|
2671
|
+
? value.map(String).join(delimiter)
|
|
2672
|
+
: String(value),
|
|
2673
|
+
],
|
|
2674
|
+
];
|
|
2132
2675
|
});
|
|
2133
2676
|
};
|
|
2134
2677
|
|
|
@@ -2191,7 +2734,7 @@ exports[`openApiTsClientGenerator - composite schemas > should round-trip Date t
|
|
|
2191
2734
|
* Utility for serialisation and deserialisation of API types.
|
|
2192
2735
|
*/
|
|
2193
2736
|
export class $IO {
|
|
2194
|
-
|
|
2737
|
+
public static $mapValues = (data: any, fn: (item: any) => any) =>
|
|
2195
2738
|
Object.fromEntries(Object.entries(data).map(([k, v]) => [k, fn(v)]));
|
|
2196
2739
|
|
|
2197
2740
|
public static MaybeDate = {
|
|
@@ -2281,11 +2824,31 @@ export class TestApi {
|
|
|
2281
2824
|
this.postMaybeDate = this.postMaybeDate.bind(this);
|
|
2282
2825
|
}
|
|
2283
2826
|
|
|
2827
|
+
private $collectionDelimiters: { [format: string]: string } = {
|
|
2828
|
+
csv: ',',
|
|
2829
|
+
ssv: ' ',
|
|
2830
|
+
pipes: '|',
|
|
2831
|
+
};
|
|
2832
|
+
|
|
2833
|
+
private $deepObject = (key: string, value: any): string[] => {
|
|
2834
|
+
if (value === undefined || value === null) {
|
|
2835
|
+
return [];
|
|
2836
|
+
}
|
|
2837
|
+
if (typeof value !== 'object') {
|
|
2838
|
+
return [\`\${key}=\${encodeURIComponent(String(value))}\`];
|
|
2839
|
+
}
|
|
2840
|
+
return Object.entries(value).flatMap(([prop, v]) =>
|
|
2841
|
+
this.$deepObject(\`\${key}[\${encodeURIComponent(prop)}]\`, v),
|
|
2842
|
+
);
|
|
2843
|
+
};
|
|
2844
|
+
|
|
2284
2845
|
private $url = (
|
|
2285
2846
|
path: string,
|
|
2286
2847
|
pathParameters: { [key: string]: any },
|
|
2287
2848
|
queryParameters: { [key: string]: any },
|
|
2288
|
-
collectionFormats?: {
|
|
2849
|
+
collectionFormats?: {
|
|
2850
|
+
[key: string]: 'multi' | 'csv' | 'ssv' | 'pipes' | 'deepObject';
|
|
2851
|
+
},
|
|
2289
2852
|
): string => {
|
|
2290
2853
|
const baseUrl = this.$config.url.endsWith('/')
|
|
2291
2854
|
? this.$config.url.slice(0, -1)
|
|
@@ -2296,15 +2859,24 @@ export class TestApi {
|
|
|
2296
2859
|
path,
|
|
2297
2860
|
);
|
|
2298
2861
|
const queryString = Object.entries(queryParameters)
|
|
2299
|
-
.
|
|
2862
|
+
.flatMap(([key, value]) => {
|
|
2300
2863
|
if (Array.isArray(value) && collectionFormats?.[key] === 'multi') {
|
|
2301
|
-
return value
|
|
2302
|
-
|
|
2303
|
-
|
|
2304
|
-
|
|
2305
|
-
|
|
2864
|
+
return value.map(
|
|
2865
|
+
(v) => \`\${encodeURIComponent(key)}=\${encodeURIComponent(\`\${v}\`)}\`,
|
|
2866
|
+
);
|
|
2867
|
+
}
|
|
2868
|
+
if (
|
|
2869
|
+
collectionFormats?.[key] === 'deepObject' &&
|
|
2870
|
+
value !== null &&
|
|
2871
|
+
typeof value === 'object'
|
|
2872
|
+
) {
|
|
2873
|
+
return this.$deepObject(encodeURIComponent(key), value);
|
|
2306
2874
|
}
|
|
2307
|
-
|
|
2875
|
+
const delimiter =
|
|
2876
|
+
this.$collectionDelimiters[collectionFormats?.[key] ?? 'csv'] ?? ',';
|
|
2877
|
+
return [
|
|
2878
|
+
\`\${encodeURIComponent(key)}=\${encodeURIComponent(Array.isArray(value) ? value.map(String).join(delimiter) : String(value))}\`,
|
|
2879
|
+
];
|
|
2308
2880
|
})
|
|
2309
2881
|
.join('&');
|
|
2310
2882
|
return (
|
|
@@ -2314,13 +2886,22 @@ export class TestApi {
|
|
|
2314
2886
|
|
|
2315
2887
|
private $headers = (
|
|
2316
2888
|
headerParameters: { [key: string]: any },
|
|
2317
|
-
collectionFormats?: { [key: string]: 'multi' | 'csv' },
|
|
2889
|
+
collectionFormats?: { [key: string]: 'multi' | 'csv' | 'ssv' | 'pipes' },
|
|
2318
2890
|
): [string, string][] => {
|
|
2319
2891
|
return Object.entries(headerParameters).flatMap(([key, value]) => {
|
|
2320
2892
|
if (Array.isArray(value) && collectionFormats?.[key] === 'multi') {
|
|
2321
2893
|
return value.map((v) => [key, String(v)]) as [string, string][];
|
|
2322
2894
|
}
|
|
2323
|
-
|
|
2895
|
+
const delimiter =
|
|
2896
|
+
this.$collectionDelimiters[collectionFormats?.[key] ?? 'csv'] ?? ',';
|
|
2897
|
+
return [
|
|
2898
|
+
[
|
|
2899
|
+
key,
|
|
2900
|
+
Array.isArray(value)
|
|
2901
|
+
? value.map(String).join(delimiter)
|
|
2902
|
+
: String(value),
|
|
2903
|
+
],
|
|
2904
|
+
];
|
|
2324
2905
|
});
|
|
2325
2906
|
};
|
|
2326
2907
|
|