- Added all checks for defaults

This commit is contained in:
Ferdi Koomen 2019-11-28 23:47:52 +01:00
parent 58a9a70818
commit e56a98a6ca
11 changed files with 228 additions and 32 deletions

View File

@ -9,6 +9,7 @@ export interface Model extends Schema {
template: string | null;
link: Model | null;
description: string | null;
default?: any;
isProperty: boolean;
isReadOnly: boolean;
isRequired: boolean;

View File

@ -3,5 +3,4 @@ import { Model } from './Model';
export interface OperationParameter extends Model {
in: 'path' | 'query' | 'header' | 'formData' | 'body' | 'cookie';
prop: string;
default?: any;
}

View File

@ -21,7 +21,6 @@ export function getOperationParameter(openApi: OpenApi, parameter: OpenApiParame
template: null,
link: null,
description: getComment(parameter.description),
default: getOperationParameterDefault(parameter.default),
isProperty: false,
isReadOnly: false,
isRequired: parameter.required === true,
@ -40,6 +39,7 @@ export function getOperationParameter(openApi: OpenApi, parameter: OpenApiParame
operationParameter.base = definitionRef.base;
operationParameter.template = definitionRef.template;
operationParameter.imports.push(...definitionRef.imports);
operationParameter.default = getOperationParameterDefault(parameter, operationParameter);
return operationParameter;
}
@ -50,6 +50,7 @@ export function getOperationParameter(openApi: OpenApi, parameter: OpenApiParame
operationParameter.type = PrimaryType.STRING;
operationParameter.base = PrimaryType.STRING;
operationParameter.enum.push(...enumerators);
operationParameter.default = getOperationParameterDefault(parameter, operationParameter);
return operationParameter;
}
}
@ -61,6 +62,7 @@ export function getOperationParameter(openApi: OpenApi, parameter: OpenApiParame
operationParameter.type = PrimaryType.NUMBER;
operationParameter.base = PrimaryType.NUMBER;
operationParameter.enum.push(...enumerators);
operationParameter.default = getOperationParameterDefault(parameter, operationParameter);
return operationParameter;
}
}
@ -72,6 +74,7 @@ export function getOperationParameter(openApi: OpenApi, parameter: OpenApiParame
operationParameter.base = items.base;
operationParameter.template = items.template;
operationParameter.imports.push(...items.imports);
operationParameter.default = getOperationParameterDefault(parameter, operationParameter);
return operationParameter;
}
@ -83,6 +86,7 @@ export function getOperationParameter(openApi: OpenApi, parameter: OpenApiParame
operationParameter.template = items.template;
operationParameter.imports.push(...items.imports);
operationParameter.imports.push('Dictionary');
operationParameter.default = getOperationParameterDefault(parameter, operationParameter);
return operationParameter;
}
@ -94,6 +98,7 @@ export function getOperationParameter(openApi: OpenApi, parameter: OpenApiParame
operationParameter.base = model.base;
operationParameter.template = model.template;
operationParameter.imports.push(...model.imports);
operationParameter.default = getOperationParameterDefault(parameter, operationParameter);
return operationParameter;
} else {
const model = getModel(openApi, parameter.schema);
@ -107,6 +112,7 @@ export function getOperationParameter(openApi: OpenApi, parameter: OpenApiParame
operationParameter.enum.push(...model.enum);
operationParameter.enums.push(...model.enums);
operationParameter.properties.push(...model.properties);
operationParameter.default = getOperationParameterDefault(parameter, operationParameter);
return operationParameter;
}
}
@ -119,6 +125,7 @@ export function getOperationParameter(openApi: OpenApi, parameter: OpenApiParame
operationParameter.base = definitionType.base;
operationParameter.template = definitionType.template;
operationParameter.imports.push(...definitionType.imports);
operationParameter.default = getOperationParameterDefault(parameter, operationParameter);
return operationParameter;
}

View File

@ -1,14 +1,30 @@
export function getOperationParameterDefault(value: any): string | null {
if (value === null) {
import { OpenApiParameter } from '../interfaces/OpenApiParameter';
import { OperationParameter } from '../../../client/interfaces/OperationParameter';
export function getOperationParameterDefault(parameter: OpenApiParameter, operationParameter: OperationParameter): string | null {
if (parameter.default === null) {
return 'null';
}
switch (typeof value) {
switch (typeof parameter.default) {
case 'number':
if (operationParameter.export == 'enum' && operationParameter.enum.length && operationParameter.enum[parameter.default]) {
return operationParameter.enum[parameter.default].value;
}
return JSON.stringify(parameter.default);
case 'boolean':
return JSON.stringify(value);
return JSON.stringify(parameter.default);
case 'string':
return `'${value}'`;
return `'${parameter.default}'`;
case 'object':
try {
return JSON.stringify(parameter.default, null, 4);
} catch (e) {
// Ignore
}
}
return null;

View File

@ -5,6 +5,7 @@ import { PrimaryType } from './constants';
import { getComment } from './getComment';
import { getEnum } from './getEnum';
import { getEnumFromDescription } from './getEnumFromDescription';
import { getModelDefault } from './getModelDefault';
import { getModelProperties } from './getModelProperties';
import { getType } from './getType';
@ -35,6 +36,7 @@ export function getModel(openApi: OpenApi, definition: OpenApiSchema, isProperty
model.base = definitionRef.base;
model.template = definitionRef.template;
model.imports.push(...definitionRef.imports);
model.default = getModelDefault(definition, model);
return model;
}
@ -45,6 +47,7 @@ export function getModel(openApi: OpenApi, definition: OpenApiSchema, isProperty
model.type = PrimaryType.STRING;
model.base = PrimaryType.STRING;
model.enum.push(...enumerators);
model.default = getModelDefault(definition, model);
return model;
}
}
@ -56,6 +59,7 @@ export function getModel(openApi: OpenApi, definition: OpenApiSchema, isProperty
model.type = PrimaryType.NUMBER;
model.base = PrimaryType.NUMBER;
model.enum.push(...enumerators);
model.default = getModelDefault(definition, model);
return model;
}
}
@ -68,6 +72,7 @@ export function getModel(openApi: OpenApi, definition: OpenApiSchema, isProperty
model.base = arrayItems.base;
model.template = arrayItems.template;
model.imports.push(...arrayItems.imports);
model.default = getModelDefault(definition, model);
return model;
} else {
const arrayItems = getModel(openApi, definition.items, true);
@ -77,6 +82,7 @@ export function getModel(openApi: OpenApi, definition: OpenApiSchema, isProperty
model.template = arrayItems.template;
model.link = arrayItems;
model.imports.push(...arrayItems.imports);
model.default = getModelDefault(definition, model);
return model;
}
}
@ -90,6 +96,7 @@ export function getModel(openApi: OpenApi, definition: OpenApiSchema, isProperty
model.template = additionalProperties.template;
model.imports.push(...additionalProperties.imports);
model.imports.push('Dictionary');
model.default = getModelDefault(definition, model);
return model;
} else {
const additionalProperties = getModel(openApi, definition.additionalProperties);
@ -100,6 +107,7 @@ export function getModel(openApi: OpenApi, definition: OpenApiSchema, isProperty
model.link = additionalProperties;
model.imports.push(...additionalProperties.imports);
model.imports.push('Dictionary');
model.default = getModelDefault(definition, model);
return model;
}
}
@ -108,6 +116,7 @@ export function getModel(openApi: OpenApi, definition: OpenApiSchema, isProperty
model.export = 'interface';
model.type = PrimaryType.OBJECT;
model.base = PrimaryType.OBJECT;
model.default = getModelDefault(definition, model);
if (definition.allOf) {
definition.allOf.forEach(parent => {
@ -151,6 +160,7 @@ export function getModel(openApi: OpenApi, definition: OpenApiSchema, isProperty
model.base = definitionType.base;
model.template = definitionType.template;
model.imports.push(...definitionType.imports);
model.default = getModelDefault(definition, model);
return model;
}

View File

@ -0,0 +1,31 @@
import { Model } from '../../../client/interfaces/Model';
import { OpenApiSchema } from '../interfaces/OpenApiSchema';
export function getModelDefault(definition: OpenApiSchema, model?: Model): string | null {
if (definition.default === null) {
return 'null';
}
switch (typeof definition.default) {
case 'number':
if (model && model.export == 'enum' && model.enum.length && model.enum[definition.default]) {
return model.enum[definition.default].value;
}
return JSON.stringify(definition.default);
case 'boolean':
return JSON.stringify(definition.default);
case 'string':
return `'${definition.default}'`;
case 'object':
try {
return JSON.stringify(definition.default, null, 4);
} catch (e) {
// Ignore
}
}
return null;
}

View File

@ -4,6 +4,7 @@ import { OperationParameter } from '../../../client/interfaces/OperationParamete
import { PrimaryType } from './constants';
import { getComment } from './getComment';
import { getModel } from './getModel';
import { getModelDefault } from './getModelDefault';
import { getOperationParameterName } from './getOperationParameterName';
import { getType } from './getType';
@ -18,7 +19,6 @@ export function getOperationParameter(openApi: OpenApi, parameter: OpenApiParame
template: null,
link: null,
description: getComment(parameter.description),
default: undefined,
isProperty: false,
isReadOnly: false,
isRequired: parameter.required === true,
@ -48,6 +48,8 @@ export function getOperationParameter(openApi: OpenApi, parameter: OpenApiParame
operationParameter.base = model.base;
operationParameter.template = model.template;
operationParameter.imports.push(...model.imports);
operationParameter.default = getModelDefault(parameter.schema);
return operationParameter;
} else {
const model = getModel(openApi, parameter.schema);
@ -56,6 +58,7 @@ export function getOperationParameter(openApi: OpenApi, parameter: OpenApiParame
operationParameter.base = model.base;
operationParameter.template = model.template;
operationParameter.link = model.link;
operationParameter.default = model.default;
operationParameter.imports.push(...model.imports);
operationParameter.extends.push(...model.extends);
operationParameter.enum.push(...model.enum);

View File

@ -1,15 +0,0 @@
export function getOperationParameterDefault(value: any): string | null {
if (value === null) {
return 'null';
}
switch (typeof value) {
case 'number':
case 'boolean':
return JSON.stringify(value);
case 'string':
return `'${value}'`;
}
return null;
}

View File

@ -37,7 +37,7 @@ export class {{{name}}} {
*/
public static async {{{name}}}({{#if parameters}}
{{#each parameters}}
{{{name}}}{{#unless isRequired}}?{{/unless}}: {{>type}}{{#if isNullable}} | null{{/if}}{{#if default}} = {{{default}}}{{/if}}{{#unless @last}},{{/unless}}
{{{name}}}{{#unless isRequired}}{{#unless default}}?{{/unless}}{{/unless}}: {{>type}}{{#if isNullable}} | null{{/if}}{{#if default}} = {{{default}}}{{/if}}{{#unless @last}},{{/unless}}
{{/each}}
{{/if}}): Promise<{{>result}}> {

View File

@ -98,6 +98,61 @@
]
}
},
"/api/v{api-version}/defaults": {
"get": {
"tags": [
"Defaults"
],
"operationId": "CallWithDefaultParameters",
"parameters": [
{
"description": "This is a simple string",
"name": "parameterString",
"in": "query",
"default": "Hello World!",
"type": "string"
},
{
"description": "This is a simple number",
"name": "parameterNumber",
"in": "query",
"default": 123,
"type": "number"
},
{
"description": "This is a simple boolean",
"name": "parameterBoolean",
"in": "query",
"default": true,
"type": "boolean"
},
{
"description": "This is a simple enum",
"name": "parameterEnum",
"in": "query",
"default": 0,
"schema": {
"enum": [
"Success",
"Warning",
"Error"
]
}
},
{
"description": "This is a simple model",
"name": "parameterModel",
"in": "query",
"default": {
"prop": "Hello World"
},
"schema": {
"$ref": "#/definitions/ModelWithString"
}
}
]
}
},
"/api/v{api-version}/response": {
"get": {
"tags": [
@ -629,6 +684,18 @@
"items": {
"$ref": "#/definitions/ModelWithString"
}
},
"propWithFile": {
"type": "array",
"items": {
"type": "File"
}
},
"propWithNumber": {
"type": "array",
"items": {
"type": "int"
}
}
}
},

View File

@ -124,6 +124,71 @@
}
}
},
"/api/v{api-version}/defaults": {
"get": {
"tags": [
"Defaults"
],
"operationId": "CallWithDefaultParameters",
"parameters": [
{
"description": "This is a simple string",
"name": "parameterString",
"in": "query",
"nullable": true,
"schema": {
"type": "string",
"default": "Hello World!"
}
},
{
"description": "This is a simple number",
"name": "parameterNumber",
"in": "query",
"nullable": true,
"schema": {
"type": "number",
"default": 123
}
},
{
"description": "This is a simple boolean",
"name": "parameterBoolean",
"in": "query",
"nullable": true,
"schema": {
"type": "boolean",
"default": true
}
},
{
"description": "This is a simple enum",
"name": "parameterEnum",
"in": "query",
"schema": {
"enum": [
"Success",
"Warning",
"Error"
],
"default": 0
}
},
{
"description": "This is a simple model",
"name": "parameterModel",
"in": "query",
"nullable": true,
"schema": {
"$ref": "#/components/schemas/ModelWithString",
"default": {
"prop": "Hello World"
}
}
}
]
}
},
"/api/v{api-version}/response": {
"get": {
"tags": [
@ -292,9 +357,9 @@
"name": "parameterNumber",
"in": "query",
"required": true,
"default": 123,
"schema": {
"type": "int"
"type": "int",
"default": 123
}
},
{
@ -303,9 +368,9 @@
"in": "query",
"required": true,
"nullable": true,
"default": "default",
"schema": {
"type": "string"
"type": "string",
"default": "default"
}
},
{
@ -314,9 +379,9 @@
"in": "query",
"required": true,
"nullable": true,
"default": true,
"schema": {
"type": "boolean"
"type": "boolean",
"default": true
}
},
{
@ -325,9 +390,9 @@
"in": "query",
"required": true,
"nullable": true,
"default": null,
"schema": {
"type": "object"
"type": "object",
"default": null
}
},
{
@ -745,6 +810,18 @@
"items": {
"$ref": "#/components/schemas/ModelWithString"
}
},
"propWithFile": {
"type": "array",
"items": {
"type": "File"
}
},
"propWithNumber": {
"type": "array",
"items": {
"type": "int"
}
}
}
},