mirror of
https://github.com/Redocly/redoc.git
synced 2025-02-12 07:50:34 +03:00
parent
36ebbb1c89
commit
aba45dbbe6
|
@ -513,7 +513,7 @@ describe('Utils', () => {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
location: 'header',
|
location: 'header',
|
||||||
name: 'id',
|
name: 'x-id',
|
||||||
description: 'header parameters',
|
description: 'header parameters',
|
||||||
cases: [
|
cases: [
|
||||||
{
|
{
|
||||||
|
@ -549,9 +549,7 @@ describe('Utils', () => {
|
||||||
locationTestGroup.cases.forEach(valueTypeTestGroup => {
|
locationTestGroup.cases.forEach(valueTypeTestGroup => {
|
||||||
describe(valueTypeTestGroup.description, () => {
|
describe(valueTypeTestGroup.description, () => {
|
||||||
valueTypeTestGroup.cases.forEach(testCase => {
|
valueTypeTestGroup.cases.forEach(testCase => {
|
||||||
it(`should serialize correctly when style is ${testCase.style} and explode is ${
|
it(`should serialize correctly when style is ${testCase.style} and explode is ${testCase.explode}`, () => {
|
||||||
testCase.explode
|
|
||||||
}`, () => {
|
|
||||||
const parameter: OpenAPIParameter = {
|
const parameter: OpenAPIParameter = {
|
||||||
name: locationTestGroup.name,
|
name: locationTestGroup.name,
|
||||||
in: locationTestGroup.location,
|
in: locationTestGroup.location,
|
||||||
|
|
|
@ -163,20 +163,16 @@ function deepObjectEncodeField(fieldVal: any, fieldName: string): string {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// URI.Template doesn't support names with hypen, while OpenAPI allow
|
|
||||||
function escapeURITemplateName(template: string): string {
|
|
||||||
return template.replace(/-/g, '%2D');
|
|
||||||
}
|
|
||||||
|
|
||||||
function unescapeURITemplateName(template: string): string {
|
|
||||||
return template.replace(/%2D/g, '-');
|
|
||||||
}
|
|
||||||
|
|
||||||
function serializeFormValue(name: string, explode: boolean, value: any) {
|
function serializeFormValue(name: string, explode: boolean, value: any) {
|
||||||
name = escapeURITemplateName(name);
|
// Use RFC6570 safe name ([a-zA-Z0-9_]) and replace with our name later
|
||||||
|
// e.g. URI.template doesn't parse names with hypen (-) which are valid query param names
|
||||||
|
const safeName = '__redoc_param_name__';
|
||||||
const suffix = explode ? '*' : '';
|
const suffix = explode ? '*' : '';
|
||||||
const template = new URI.Template(`{?${name}${suffix}}`);
|
const template = new URI.Template(`{?${safeName}${suffix}}`);
|
||||||
return unescapeURITemplateName(template.expand({ [name]: value }).substring(1));
|
return template
|
||||||
|
.expand({ [safeName]: value })
|
||||||
|
.substring(1)
|
||||||
|
.replace(/__redoc_param_name__/g, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -219,7 +215,6 @@ function serializePathParameter(
|
||||||
explode: boolean,
|
explode: boolean,
|
||||||
value: any,
|
value: any,
|
||||||
): string {
|
): string {
|
||||||
name = escapeURITemplateName(name);
|
|
||||||
const suffix = explode ? '*' : '';
|
const suffix = explode ? '*' : '';
|
||||||
let prefix = '';
|
let prefix = '';
|
||||||
|
|
||||||
|
@ -229,9 +224,12 @@ function serializePathParameter(
|
||||||
prefix = ';';
|
prefix = ';';
|
||||||
}
|
}
|
||||||
|
|
||||||
const template = new URI.Template(`{${prefix}${name}${suffix}}`);
|
// Use RFC6570 safe name ([a-zA-Z0-9_]) and replace with our name later
|
||||||
|
// e.g. URI.template doesn't parse names with hypen (-) which are valid query param names
|
||||||
|
const safeName = '__redoc_param_name__';
|
||||||
|
const template = new URI.Template(`{${prefix}${safeName}${suffix}}`);
|
||||||
|
|
||||||
return unescapeURITemplateName(template.expand({ [name]: value }));
|
return template.expand({ [safeName]: value }).replace(/__redoc_param_name__/g, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
function serializeQueryParameter(
|
function serializeQueryParameter(
|
||||||
|
@ -277,18 +275,18 @@ function serializeQueryParameter(
|
||||||
}
|
}
|
||||||
|
|
||||||
function serializeHeaderParameter(
|
function serializeHeaderParameter(
|
||||||
name: string,
|
|
||||||
style: OpenAPIParameterStyle,
|
style: OpenAPIParameterStyle,
|
||||||
explode: boolean,
|
explode: boolean,
|
||||||
value: any,
|
value: any,
|
||||||
): string {
|
): string {
|
||||||
name = escapeURITemplateName(name);
|
|
||||||
switch (style) {
|
switch (style) {
|
||||||
case 'simple':
|
case 'simple':
|
||||||
const suffix = explode ? '*' : '';
|
const suffix = explode ? '*' : '';
|
||||||
const template = new URI.Template(`{${name}${suffix}}`);
|
|
||||||
|
|
||||||
return unescapeURITemplateName(template.expand({ [name]: value }));
|
// name is not important here, so use RFC6570 safe name ([a-zA-Z0-9_])
|
||||||
|
const name = '__redoc_param_name__';
|
||||||
|
const template = new URI.Template(`{${name}${suffix}}`);
|
||||||
|
return decodeURIComponent(template.expand({ [name]: value }));
|
||||||
default:
|
default:
|
||||||
console.warn('Unexpected style for header: ' + style);
|
console.warn('Unexpected style for header: ' + style);
|
||||||
return '';
|
return '';
|
||||||
|
@ -324,7 +322,7 @@ export function serializeParameterValue(parameter: OpenAPIParameter, value: any)
|
||||||
case 'query':
|
case 'query':
|
||||||
return serializeQueryParameter(name, style, explode, value);
|
return serializeQueryParameter(name, style, explode, value);
|
||||||
case 'header':
|
case 'header':
|
||||||
return serializeHeaderParameter(name, style, explode, value);
|
return serializeHeaderParameter(style, explode, value);
|
||||||
case 'cookie':
|
case 'cookie':
|
||||||
return serializeCookieParameter(name, style, explode, value);
|
return serializeCookieParameter(name, style, explode, value);
|
||||||
default:
|
default:
|
||||||
|
|
Loading…
Reference in New Issue
Block a user