|
1 | 1 | import { resolve as resolvePathTemplate } from 'openapi-path-templating'; |
| 2 | +import { serializeCookie } from '@swaggerexpert/cookie'; |
2 | 3 |
|
3 | 4 | import stylize, { encodeCharacters } from './style-serializer.js'; |
4 | 5 | import serialize from './content-serializer.js'; |
| 6 | +import cookieValueEncoder from '../../helpers/cookie-value-encoder.js'; |
5 | 7 |
|
6 | 8 | export function path({ req, value, parameter, baseURL }) { |
7 | 9 | const { name, style, explode, content } = parameter; |
@@ -29,7 +31,7 @@ export function path({ req, value, parameter, baseURL }) { |
29 | 31 | key: parameter.name, |
30 | 32 | value: val, |
31 | 33 | style: style || 'simple', |
32 | | - explode: explode || false, |
| 34 | + explode: explode ?? false, |
33 | 35 | escape: 'reserved', |
34 | 36 | }), |
35 | 37 | } |
@@ -106,28 +108,41 @@ export function header({ req, parameter, value }) { |
106 | 108 | } |
107 | 109 |
|
108 | 110 | export function cookie({ req, parameter, value }) { |
| 111 | + const { name: cookieName } = parameter; |
| 112 | + |
109 | 113 | req.headers = req.headers || {}; |
110 | | - const type = typeof value; |
111 | 114 |
|
112 | 115 | if (value !== undefined && parameter.content) { |
113 | 116 | const effectiveMediaType = Object.keys(parameter.content)[0]; |
| 117 | + const cookieValue = serialize(value, effectiveMediaType); |
114 | 118 |
|
115 | | - req.headers.Cookie = `${parameter.name}=${serialize(value, effectiveMediaType)}`; |
| 119 | + req.headers.Cookie = serializeCookie( |
| 120 | + { [cookieName]: cookieValue }, |
| 121 | + { |
| 122 | + encoders: { value: cookieValueEncoder }, |
| 123 | + } |
| 124 | + ); |
116 | 125 | return; |
117 | 126 | } |
118 | 127 |
|
119 | 128 | if (value !== undefined && !(Array.isArray(value) && value.length === 0)) { |
120 | | - const prefix = |
121 | | - type === 'object' && !Array.isArray(value) && parameter.explode ? '' : `${parameter.name}=`; |
122 | | - |
123 | | - req.headers.Cookie = |
124 | | - prefix + |
125 | | - stylize({ |
126 | | - key: parameter.name, |
127 | | - value, |
128 | | - escape: false, |
129 | | - style: parameter.style || 'form', |
130 | | - explode: typeof parameter.explode === 'undefined' ? false : parameter.explode, |
131 | | - }); |
| 129 | + const serializedValue = stylize({ |
| 130 | + key: parameter.name, |
| 131 | + value, |
| 132 | + escape: false, |
| 133 | + style: parameter.style || 'form', |
| 134 | + explode: parameter.explode ?? false, |
| 135 | + }); |
| 136 | + const cookieValue = |
| 137 | + Array.isArray(value) && parameter.explode |
| 138 | + ? `${cookieName}=${serializedValue}` |
| 139 | + : serializedValue; |
| 140 | + |
| 141 | + req.headers.Cookie = serializeCookie( |
| 142 | + { [cookieName]: cookieValue }, |
| 143 | + { |
| 144 | + encoders: { value: cookieValueEncoder }, |
| 145 | + } |
| 146 | + ); |
132 | 147 | } |
133 | 148 | } |
0 commit comments