Skip to content

Commit d55bd1b

Browse files
committed
EVERYTHING works
1 parent f176130 commit d55bd1b

File tree

3 files changed

+34
-10
lines changed

3 files changed

+34
-10
lines changed

src/execute/oas3/parameter-builders.js

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ import stylize from './style-serializer'
33
export default {
44
path,
55
query,
6-
header
6+
header,
7+
cookie
78
}
89

910
function path({req, value, parameter}) {
@@ -96,3 +97,24 @@ function header({req, parameter, value}) {
9697
})
9798
}
9899
}
100+
101+
function cookie({req, parameter, value}) {
102+
req.headers = req.headers || {}
103+
const type = typeof value
104+
105+
if (type !== 'undefined') {
106+
const prefix = (
107+
type === "object" &&
108+
!Array.isArray(value) &&
109+
parameter.explode
110+
) ? '' : `${parameter.name}=`
111+
112+
req.headers['Cookie'] = prefix + stylize({
113+
key: parameter.name,
114+
value,
115+
escape: false,
116+
style: parameter.style || 'form',
117+
explode: typeof parameter.explode === 'undefined' ? false : parameter.explode
118+
})
119+
}
120+
}

src/execute/oas3/style-serializer.js

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ export default function (config) {
1111
return encodePrimitive(config)
1212
}
1313

14-
const escape = str => encodeURIComponent(str)
14+
const escapeFn = str => encodeURIComponent(str)
1515

16-
function encodeArray({key, value, style, explode, parameter}) {
16+
function encodeArray({key, value, style, explode, parameter, escape = true}) {
1717
if (style === 'simple') {
1818
return value.join(',')
1919
}
@@ -32,18 +32,19 @@ function encodeArray({key, value, style, explode, parameter}) {
3232
}
3333

3434
if (style === 'form') {
35-
const after = explode ? `&${key}=` : escape(',')
35+
const commaValue = escape ? escapeFn(',') : ','
36+
const after = explode ? `&${key}=` : commaValue
3637
return value.join(after)
3738
}
3839

3940
if (style === 'spaceDelimited') {
4041
const after = explode ? `${key}=` : ''
41-
return value.join(`${escape(' ')}${after}`)
42+
return value.join(`${escapeFn(' ')}${after}`)
4243
}
4344

4445
if (style === 'pipeDelimited') {
4546
const after = explode ? `${key}=` : ''
46-
return value.join(`${escape('|')}${after}`)
47+
return value.join(`${escapeFn('|')}${after}`)
4748
}
4849
}
4950

@@ -92,9 +93,10 @@ function encodeObject({key, value, style, explode}) {
9293
if (style === 'form') {
9394
return valueKeys.reduce((prev, curr) => {
9495
const val = value[curr]
95-
const prefix = prev ? `${prev},` : ``
96+
const prefix = prev ? `${prev}${explode ? '&' : ','}` : ``
97+
const separator = explode ? '=' : ','
9698

97-
return `${prefix}${curr},${val}`
99+
return `${prefix}${curr}${separator}${val}`
98100
}, '')
99101
}
100102
}

test/oas3/execute/style-explode.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ const petstoreSpec = jsYaml.safeLoad(fs.readFileSync(path.join('test', 'oas3', '
1212
// Supported shape... { spec, operationId, parameters, securities, fetch }
1313
// One can use operationId or pathItem + method
1414

15-
describe.only('buildRequest w/ `style` & `explode` - OpenAPI Specification 3.0', function () {
15+
describe('buildRequest w/ `style` & `explode` - OpenAPI Specification 3.0', function () {
1616
describe('path parameters', function () {
1717
describe('primitive values', function () {
1818
it('default: should build a path parameter in a simple/no-explode format', function () {
@@ -1739,7 +1739,7 @@ describe.only('buildRequest w/ `style` & `explode` - OpenAPI Specification 3.0',
17391739
})
17401740
})
17411741
})
1742-
describe.skip('cookie parameters', function () {
1742+
describe('cookie parameters', function () {
17431743
describe('primitive values', function () {
17441744
const VALUE = 5
17451745

0 commit comments

Comments
 (0)