|
1 | | -import { ParamDecorator } from "./pathparams"; |
2 | | -import { ParamsSerializerOptions } from "axios"; |
3 | | -import { parseParamDecorator } from "./utils"; |
| 1 | +import {ParamDecorator} from "./pathparams"; |
| 2 | +import {ParamsSerializerOptions} from "axios"; |
| 3 | +import {parseParamDecorator} from "./utils"; |
4 | 4 | import qs from "qs"; |
5 | 5 |
|
6 | 6 | export const qpMetadataKey = "queryParam"; |
7 | 7 |
|
8 | 8 | export function getQueryParamSerializer( |
9 | | - queryParams: any |
| 9 | + queryParams: any |
10 | 10 | ): ParamsSerializerOptions { |
11 | | - let paramsSerializer: ParamsSerializerOptions = { |
12 | | - serialize: formSerializerExplode, |
13 | | - }; |
14 | | - if (queryParams == null) return paramsSerializer; |
15 | | - const fieldNames: string[] = Object.getOwnPropertyNames(queryParams); |
16 | | - fieldNames.forEach((fname) => { |
17 | | - const qpAnn: string = Reflect.getMetadata( |
18 | | - qpMetadataKey, |
19 | | - queryParams, |
20 | | - fname |
21 | | - ); |
22 | | - if (qpAnn == null) return { serialize: (params: any) => "" }; |
23 | | - const qpDecorator: ParamDecorator = parseParamDecorator( |
24 | | - qpAnn, |
25 | | - fname, |
26 | | - "form", |
27 | | - true |
28 | | - ); |
29 | | - if (qpDecorator == null) return; |
30 | | - if (qpDecorator.Serialization === "json") |
31 | | - paramsSerializer = { |
32 | | - serialize: (params: any) => { |
33 | | - return JSON.stringify(params); |
34 | | - }, |
35 | | - }; |
36 | | - else { |
37 | | - switch (qpDecorator.Style) { |
38 | | - case "deepObject": |
39 | | - paramsSerializer = { |
40 | | - serialize: (params: any) => { |
41 | | - return qs.stringify(params); |
42 | | - }, |
43 | | - }; |
44 | | - break; |
45 | | - case "form": |
46 | | - if (qpDecorator.Explode) { |
| 11 | + let paramsSerializer: ParamsSerializerOptions = { |
| 12 | + serialize: formSerializerExplode, |
| 13 | + }; |
| 14 | + if (queryParams == null) return paramsSerializer; |
| 15 | + const fieldNames: string[] = Object.getOwnPropertyNames(queryParams); |
| 16 | + fieldNames.forEach((fname) => { |
| 17 | + const qpAnn: string = Reflect.getMetadata( |
| 18 | + qpMetadataKey, |
| 19 | + queryParams, |
| 20 | + fname |
| 21 | + ); |
| 22 | + if (qpAnn == null) return {serialize: (params: any) => ""}; |
| 23 | + const qpDecorator: ParamDecorator = parseParamDecorator( |
| 24 | + qpAnn, |
| 25 | + fname, |
| 26 | + "form", |
| 27 | + true |
| 28 | + ); |
| 29 | + if (qpDecorator == null) return; |
| 30 | + if (qpDecorator.Serialization === "json") |
47 | 31 | paramsSerializer = { |
48 | | - serialize: formSerializerExplode, |
| 32 | + serialize: (params: any) => Object.keys(params).map(key => |
| 33 | + `${key}=${JSON.stringify(params[key])}` |
| 34 | + ).join("&"), |
49 | 35 | }; |
50 | | - } else { |
51 | | - paramsSerializer = { |
52 | | - serialize: formSerializer, |
53 | | - }; |
54 | | - } |
55 | | - break; |
56 | | - default: |
57 | | - // go to next query parameter field, assume first implemented serializer will serialize all query parameters for this request |
58 | | - return; |
59 | | - } |
60 | | - } |
61 | | - }); |
62 | | - return paramsSerializer; |
| 36 | + else { |
| 37 | + switch (qpDecorator.Style) { |
| 38 | + case "deepObject": |
| 39 | + paramsSerializer = { |
| 40 | + serialize: (params: any) => { |
| 41 | + return qs.stringify(params); |
| 42 | + }, |
| 43 | + }; |
| 44 | + break; |
| 45 | + case "form": |
| 46 | + if (qpDecorator.Explode) { |
| 47 | + paramsSerializer = { |
| 48 | + serialize: formSerializerExplode, |
| 49 | + }; |
| 50 | + } else { |
| 51 | + paramsSerializer = { |
| 52 | + serialize: formSerializer, |
| 53 | + }; |
| 54 | + } |
| 55 | + break; |
| 56 | + default: |
| 57 | + // go to next query parameter field, assume first implemented serializer will serialize all query parameters for this request |
| 58 | + return; |
| 59 | + } |
| 60 | + } |
| 61 | + }); |
| 62 | + return paramsSerializer; |
63 | 63 | } |
64 | 64 |
|
65 | 65 | function formSerializer(params: any): string { |
66 | | - const query: string[] = []; |
67 | | - Object.entries(Object.assign({}, params)).forEach(([key, value]) => { |
68 | | - if (value !== Object(value)) query.push(`${key}=${value}`); |
69 | | - else if (Array.isArray(value)) { |
70 | | - const values: string = value.join(","); |
71 | | - query.push(`${key}=${values}`); |
72 | | - } else if (value instanceof Map) { |
73 | | - const values: string[] = []; |
74 | | - value.forEach((v, k) => { |
75 | | - values.push(`${k},${v}`); |
76 | | - }); |
77 | | - query.push(`${key}=${values.join(",")}`); |
78 | | - } else { |
79 | | - const values: string = Object.entries(Object.assign({}, value)) |
80 | | - .map(([objKey, objValue]) => `${objKey},${objValue}`) |
81 | | - .join(","); |
82 | | - query.push(`${key}=${values}`); |
83 | | - } |
84 | | - }); |
85 | | - return query.join("&"); |
| 66 | + const query: string[] = []; |
| 67 | + Object.entries(Object.assign({}, params)).forEach(([key, value]) => { |
| 68 | + if (value !== Object(value)) query.push(`${key}=${value}`); |
| 69 | + else if (Array.isArray(value)) { |
| 70 | + const values: string = value.join(","); |
| 71 | + query.push(`${key}=${values}`); |
| 72 | + } else { |
| 73 | + const values: string = Object.entries(Object.assign({}, value)) |
| 74 | + .map(([objKey, objValue]) => `${objKey},${objValue}`) |
| 75 | + .join(","); |
| 76 | + query.push(`${key}=${values}`); |
| 77 | + } |
| 78 | + }); |
| 79 | + return query.join("&"); |
86 | 80 | } |
87 | 81 |
|
88 | 82 | function formSerializerExplode(params: any): string { |
89 | | - const query: string[] = []; |
90 | | - Object.entries(Object.assign({}, params)).forEach(([key, value]) => { |
91 | | - if (value !== Object(value)) query.push(`${key}=${value}`); |
92 | | - else if (Array.isArray(value)) { |
93 | | - query.push(value.map((aValue) => `${key}=${aValue}`).join("&")); |
94 | | - } else if (value instanceof Map) { |
95 | | - const values: string[] = []; |
96 | | - value.forEach((v, k) => { |
97 | | - values.push(`${k}=${v}`); |
98 | | - }); |
99 | | - query.push(values.join("&")); |
100 | | - } else |
101 | | - query.push( |
102 | | - Object.entries(Object.assign({}, value)) |
103 | | - .map(([objKey, objValue]) => `${objKey}=${objValue}`) |
104 | | - .join("&") |
105 | | - ); |
106 | | - }); |
107 | | - return query.join("&"); |
| 83 | + const query: string[] = []; |
| 84 | + Object.entries(Object.assign({}, params)).forEach(([key, value]) => { |
| 85 | + if (value !== Object(value)) query.push(`${key}=${value}`); |
| 86 | + else if (Array.isArray(value)) { |
| 87 | + query.push(value.map((aValue) => `${key}=${aValue}`).join("&")); |
| 88 | + } else |
| 89 | + query.push( |
| 90 | + Object.entries(Object.assign({}, value)) |
| 91 | + .map(([objKey, objValue]) => `${objKey}=${objValue}`) |
| 92 | + .join("&") |
| 93 | + ); |
| 94 | + }); |
| 95 | + return query.join("&"); |
108 | 96 | } |
0 commit comments