|
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