1 | import stylize, { encodeDisallowedCharacters } from './style-serializer.js';
|
---|
2 | import serialize from './content-serializer.js';
|
---|
3 | export function path({
|
---|
4 | req,
|
---|
5 | value,
|
---|
6 | parameter
|
---|
7 | }) {
|
---|
8 | const {
|
---|
9 | name,
|
---|
10 | style,
|
---|
11 | explode,
|
---|
12 | content
|
---|
13 | } = parameter;
|
---|
14 | if (content) {
|
---|
15 | const effectiveMediaType = Object.keys(content)[0];
|
---|
16 | req.url = req.url.split(`{${name}}`).join(encodeDisallowedCharacters(serialize(value, effectiveMediaType), {
|
---|
17 | escape: true
|
---|
18 | }));
|
---|
19 | return;
|
---|
20 | }
|
---|
21 | const styledValue = stylize({
|
---|
22 | key: parameter.name,
|
---|
23 | value,
|
---|
24 | style: style || 'simple',
|
---|
25 | explode: explode || false,
|
---|
26 | escape: true
|
---|
27 | });
|
---|
28 | req.url = req.url.split(`{${name}}`).join(styledValue);
|
---|
29 | }
|
---|
30 | export function query({
|
---|
31 | req,
|
---|
32 | value,
|
---|
33 | parameter
|
---|
34 | }) {
|
---|
35 | req.query = req.query || {};
|
---|
36 | if (parameter.content) {
|
---|
37 | const effectiveMediaType = Object.keys(parameter.content)[0];
|
---|
38 | const serializedValue = serialize(value, effectiveMediaType);
|
---|
39 | if (serializedValue) {
|
---|
40 | req.query[parameter.name] = serializedValue;
|
---|
41 | } else if (parameter.allowEmptyValue && value !== undefined) {
|
---|
42 | const paramName = parameter.name;
|
---|
43 | req.query[paramName] = req.query[paramName] || {};
|
---|
44 | req.query[paramName].allowEmptyValue = true;
|
---|
45 | }
|
---|
46 | return;
|
---|
47 | }
|
---|
48 | if (value === false) {
|
---|
49 | value = 'false';
|
---|
50 | }
|
---|
51 | if (value === 0) {
|
---|
52 | value = '0';
|
---|
53 | }
|
---|
54 | if (value) {
|
---|
55 | const {
|
---|
56 | style,
|
---|
57 | explode,
|
---|
58 | allowReserved
|
---|
59 | } = parameter;
|
---|
60 | req.query[parameter.name] = {
|
---|
61 | value,
|
---|
62 | serializationOption: {
|
---|
63 | style,
|
---|
64 | explode,
|
---|
65 | allowReserved
|
---|
66 | }
|
---|
67 | };
|
---|
68 | } else if (parameter.allowEmptyValue && value !== undefined) {
|
---|
69 | const paramName = parameter.name;
|
---|
70 | req.query[paramName] = req.query[paramName] || {};
|
---|
71 | req.query[paramName].allowEmptyValue = true;
|
---|
72 | }
|
---|
73 | }
|
---|
74 | const PARAMETER_HEADER_BLACKLIST = ['accept', 'authorization', 'content-type'];
|
---|
75 | export function header({
|
---|
76 | req,
|
---|
77 | parameter,
|
---|
78 | value
|
---|
79 | }) {
|
---|
80 | req.headers = req.headers || {};
|
---|
81 | if (PARAMETER_HEADER_BLACKLIST.indexOf(parameter.name.toLowerCase()) > -1) {
|
---|
82 | return;
|
---|
83 | }
|
---|
84 | if (parameter.content) {
|
---|
85 | const effectiveMediaType = Object.keys(parameter.content)[0];
|
---|
86 | req.headers[parameter.name] = serialize(value, effectiveMediaType);
|
---|
87 | return;
|
---|
88 | }
|
---|
89 | if (value !== undefined && !(Array.isArray(value) && value.length === 0)) {
|
---|
90 | req.headers[parameter.name] = stylize({
|
---|
91 | key: parameter.name,
|
---|
92 | value,
|
---|
93 | style: parameter.style || 'simple',
|
---|
94 | explode: typeof parameter.explode === 'undefined' ? false : parameter.explode,
|
---|
95 | escape: false
|
---|
96 | });
|
---|
97 | }
|
---|
98 | }
|
---|
99 | export function cookie({
|
---|
100 | req,
|
---|
101 | parameter,
|
---|
102 | value
|
---|
103 | }) {
|
---|
104 | req.headers = req.headers || {};
|
---|
105 | const type = typeof value;
|
---|
106 | if (parameter.content) {
|
---|
107 | const effectiveMediaType = Object.keys(parameter.content)[0];
|
---|
108 | req.headers.Cookie = `${parameter.name}=${serialize(value, effectiveMediaType)}`;
|
---|
109 | return;
|
---|
110 | }
|
---|
111 | if (value !== undefined && !(Array.isArray(value) && value.length === 0)) {
|
---|
112 | const prefix = type === 'object' && !Array.isArray(value) && parameter.explode ? '' : `${parameter.name}=`;
|
---|
113 | req.headers.Cookie = prefix + stylize({
|
---|
114 | key: parameter.name,
|
---|
115 | value,
|
---|
116 | escape: false,
|
---|
117 | style: parameter.style || 'form',
|
---|
118 | explode: typeof parameter.explode === 'undefined' ? false : parameter.explode
|
---|
119 | });
|
---|
120 | }
|
---|
121 | } |
---|