|
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