Add support for minLength and maxLength constraint humanization

This commit is contained in:
Luuk Scholten 2018-11-05 13:59:31 +01:00
parent 9e2853c2fd
commit b7b6e84322
2 changed files with 31 additions and 16 deletions

View File

@ -296,6 +296,8 @@ paths:
style: form style: form
schema: schema:
type: array type: array
minItems: 1
maxItems: 3
items: items:
type: string type: string
enum: enum:
@ -784,6 +786,7 @@ components:
photoUrls: photoUrls:
description: The list of URL to a cute photos featuring pet description: The list of URL to a cute photos featuring pet
type: array type: array
maxItems: 20
xml: xml:
name: photoUrl name: photoUrl
wrapped: true wrapped: true
@ -796,6 +799,7 @@ components:
tags: tags:
description: Tags attached to the pet description: Tags attached to the pet
type: array type: array
minItems: 1
xml: xml:
name: tag name: tag
wrapped: true wrapped: true

View File

@ -141,29 +141,40 @@ export function isNamedDefinition(pointer?: string): boolean {
return /^#\/components\/schemas\/[^\/]+$/.test(pointer || ''); return /^#\/components\/schemas\/[^\/]+$/.test(pointer || '');
} }
function humanizeRangeConstraint(description: string, min: number | undefined, max: number | undefined): string | undefined {
let stringRange;
if (min !== undefined && max !== undefined) {
if (min === max) {
stringRange = `${min} ${description}`;
} else {
stringRange = `[ ${min} .. ${max} ] ${description}`;
}
} else if (max !== undefined) {
stringRange = `<= ${max} ${description}`;
} else if (min !== undefined) {
if (min === 1) {
stringRange = 'non-empty';
} else {
stringRange = `>= ${min} ${description}`;
}
}
return stringRange;
}
export function humanizeConstraints(schema: OpenAPISchema): string[] { export function humanizeConstraints(schema: OpenAPISchema): string[] {
const res: string[] = []; const res: string[] = [];
let stringRange; const stringRange = humanizeRangeConstraint('characters', schema.minLength, schema.maxLength);
if (schema.minLength !== undefined && schema.maxLength !== undefined) {
if (schema.minLength === schema.maxLength) {
stringRange = `${schema.minLength} characters`;
} else {
stringRange = `[ ${schema.minLength} .. ${schema.maxLength} ] characters`;
}
} else if (schema.maxLength !== undefined) {
stringRange = `<= ${schema.maxLength} characters`;
} else if (schema.minLength !== undefined) {
if (schema.minLength === 1) {
stringRange = 'non-empty';
} else {
stringRange = `>= ${schema.minLength} characters`;
}
}
if (stringRange !== undefined) { if (stringRange !== undefined) {
res.push(stringRange); res.push(stringRange);
} }
const arrayRange = humanizeRangeConstraint('items', schema.minItems, schema.maxItems);
if (arrayRange !== undefined) {
res.push(arrayRange);
}
let numberRange; let numberRange;
if (schema.minimum !== undefined && schema.maximum !== undefined) { if (schema.minimum !== undefined && schema.maximum !== undefined) {
numberRange = schema.exclusiveMinimum ? '( ' : '[ '; numberRange = schema.exclusiveMinimum ? '( ' : '[ ';