- Fixed required field order for referenced parameters

This commit is contained in:
Ferdi Koomen 2021-10-28 23:12:30 +02:00
parent 83a2370d3c
commit cc6c7f2241
7 changed files with 59 additions and 47 deletions

View File

@ -46,7 +46,7 @@
"build": "rollup --config --environment NODE_ENV:development",
"build:watch": "rollup --config --environment NODE_ENV:development --watch",
"release": "rollup --config --environment NODE_ENV:production",
"run": "node ./test/index.js",
"run": "NODE_ENV=production node ./test/index.js",
"test": "jest --selectProjects UNIT",
"test:update": "jest --selectProjects UNIT --updateSnapshot",
"test:watch": "jest --selectProjects UNIT --watch",

View File

@ -11,6 +11,7 @@ import { getOperationResponseHeader } from './getOperationResponseHeader';
import { getOperationResponses } from './getOperationResponses';
import { getOperationResults } from './getOperationResults';
import { getServiceClassName } from './getServiceClassName';
import { sortByRequired } from './sortByRequired';
export function getOperation(
openApi: OpenApi,
@ -73,5 +74,7 @@ export function getOperation(
});
}
operation.parameters = operation.parameters.sort(sortByRequired);
return operation;
}

View File

@ -3,7 +3,6 @@ import type { OpenApi } from '../interfaces/OpenApi';
import type { OpenApiParameter } from '../interfaces/OpenApiParameter';
import { getOperationParameter } from './getOperationParameter';
import { getRef } from './getRef';
import { sortByRequired } from './sortByRequired';
export function getOperationParameters(openApi: OpenApi, parameters: OpenApiParameter[]): OperationParameters {
const operationParameters: OperationParameters = {
@ -58,12 +57,5 @@ export function getOperationParameters(openApi: OpenApi, parameters: OpenApiPara
}
}
});
operationParameters.parameters = operationParameters.parameters.sort(sortByRequired);
operationParameters.parametersPath = operationParameters.parametersPath.sort(sortByRequired);
operationParameters.parametersQuery = operationParameters.parametersQuery.sort(sortByRequired);
operationParameters.parametersForm = operationParameters.parametersForm.sort(sortByRequired);
operationParameters.parametersCookie = operationParameters.parametersCookie.sort(sortByRequired);
operationParameters.parametersHeader = operationParameters.parametersHeader.sort(sortByRequired);
return operationParameters;
}

View File

@ -69,7 +69,6 @@ export function getOperation(
const requestBody = getOperationRequestBody(openApi, requestBodyDef);
operation.imports.push(...requestBody.imports);
operation.parameters.push(requestBody);
operation.parameters = operation.parameters.sort(sortByRequired);
operation.parametersBody = requestBody;
}
@ -86,5 +85,7 @@ export function getOperation(
});
}
operation.parameters = operation.parameters.sort(sortByRequired);
return operation;
}

View File

@ -3,7 +3,6 @@ import type { OpenApi } from '../interfaces/OpenApi';
import type { OpenApiParameter } from '../interfaces/OpenApiParameter';
import { getOperationParameter } from './getOperationParameter';
import { getRef } from './getRef';
import { sortByRequired } from './sortByRequired';
export function getOperationParameters(openApi: OpenApi, parameters: OpenApiParameter[]): OperationParameters {
const operationParameters: OperationParameters = {
@ -58,12 +57,5 @@ export function getOperationParameters(openApi: OpenApi, parameters: OpenApiPara
}
}
});
operationParameters.parameters = operationParameters.parameters.sort(sortByRequired);
operationParameters.parametersPath = operationParameters.parametersPath.sort(sortByRequired);
operationParameters.parametersQuery = operationParameters.parametersQuery.sort(sortByRequired);
operationParameters.parametersForm = operationParameters.parametersForm.sort(sortByRequired);
operationParameters.parametersCookie = operationParameters.parametersCookie.sort(sortByRequired);
operationParameters.parametersHeader = operationParameters.parametersHeader.sort(sortByRequired);
return operationParameters;
}

View File

@ -2105,12 +2105,12 @@ export class DefaultsService {
method: 'PUT',
path: \`/api/v\${OpenAPI.VERSION}/defaults\`,
query: {
'parameterStringWithNoDefault': parameterStringWithNoDefault,
'parameterOptionalStringWithDefault': parameterOptionalStringWithDefault,
'parameterOptionalStringWithEmptyDefault': parameterOptionalStringWithEmptyDefault,
'parameterOptionalStringWithNoDefault': parameterOptionalStringWithNoDefault,
'parameterStringWithDefault': parameterStringWithDefault,
'parameterStringWithEmptyDefault': parameterStringWithEmptyDefault,
'parameterStringWithNoDefault': parameterStringWithNoDefault,
},
});
}
@ -2293,8 +2293,8 @@ export class ParametersService {
'parameter.header': parameterHeader,
},
query: {
'parameter-query': parameterQuery,
'default': _default,
'parameter-query': parameterQuery,
},
formData: {
'parameter_form': parameterForm,
@ -2494,13 +2494,13 @@ export class TypesService {
method: 'GET',
path: \`/api/v\${OpenAPI.VERSION}/types\`,
query: {
'parameterArray': parameterArray,
'parameterDictionary': parameterDictionary,
'parameterEnum': parameterEnum,
'parameterNumber': parameterNumber,
'parameterString': parameterString,
'parameterBoolean': parameterBoolean,
'parameterObject': parameterObject,
'parameterArray': parameterArray,
'parameterDictionary': parameterDictionary,
'parameterEnum': parameterEnum,
},
});
}
@ -5051,12 +5051,12 @@ export class DefaultsService {
method: 'PUT',
path: \`/api/v\${OpenAPI.VERSION}/defaults\`,
query: {
'parameterStringWithNoDefault': parameterStringWithNoDefault,
'parameterOptionalStringWithDefault': parameterOptionalStringWithDefault,
'parameterOptionalStringWithEmptyDefault': parameterOptionalStringWithEmptyDefault,
'parameterOptionalStringWithNoDefault': parameterOptionalStringWithNoDefault,
'parameterStringWithDefault': parameterStringWithDefault,
'parameterStringWithEmptyDefault': parameterStringWithEmptyDefault,
'parameterStringWithNoDefault': parameterStringWithNoDefault,
},
});
}
@ -5315,8 +5315,8 @@ export class ParametersService {
'parameter.header': parameterHeader,
},
query: {
'parameter-query': parameterQuery,
'default': _default,
'parameter-query': parameterQuery,
},
formData: {
'parameter_form': parameterForm,
@ -5591,13 +5591,13 @@ export class TypesService {
method: 'GET',
path: \`/api/v\${OpenAPI.VERSION}/types\`,
query: {
'parameterArray': parameterArray,
'parameterDictionary': parameterDictionary,
'parameterEnum': parameterEnum,
'parameterNumber': parameterNumber,
'parameterString': parameterString,
'parameterBoolean': parameterBoolean,
'parameterObject': parameterObject,
'parameterArray': parameterArray,
'parameterDictionary': parameterDictionary,
'parameterEnum': parameterEnum,
},
});
}

View File

@ -1,11 +1,12 @@
'use strict';
const OpenAPI = require('../dist');
const fetch = require('node-fetch');
async function generateV2() {
async function generate(input, output) {
await OpenAPI.generate({
input: './test/spec/v2.json',
output: './test/generated/v2/',
input,
output,
httpClient: OpenAPI.HttpClient.FETCH,
useOptions: false,
useUnionTypes: false,
@ -17,24 +18,47 @@ async function generateV2() {
});
}
async function generateV3() {
await OpenAPI.generate({
input: './test/spec/v3.json',
output: './test/generated/v3/',
httpClient: OpenAPI.HttpClient.FETCH,
useOptions: false,
useUnionTypes: false,
exportCore: true,
exportSchemas: true,
exportModels: true,
exportServices: true,
// request: './test/custom/request.ts',
async function generateRealWorldSpecs() {
const response = await fetch('https://api.apis.guru/v2/list.json');
const list = await response.json();
delete list['api.video'];
delete list['apideck.com:vault'];
delete list['amazonaws.com:mediaconvert'];
delete list['bungie.net'];
delete list['docusign.net'];
delete list['googleapis.com:adsense'];
delete list['googleapis.com:servicebroker'];
delete list['kubernetes.io'];
delete list['microsoft.com:graph'];
delete list['presalytics.io:ooxml'];
delete list['stripe.com'];
const specs = Object.entries(list).map(([name, api]) => {
const latestVersion = api.versions[api.preferred];
return {
name: name
.replace(/^[^a-zA-Z]+/g, '')
.replace(/[^\w\-]+/g, '-')
.trim()
.toLowerCase(),
url: latestVersion.swaggerYamlUrl || latestVersion.swaggerUrl,
};
});
for (let i = 0; i < specs.length; i++) {
const spec = specs[i];
await generate(spec.url, `./test/generated/${spec.name}/`);
}
}
async function generate() {
await generateV2();
await generateV3();
async function main() {
// await generate('./test/spec/v2.json', './test/generated/v2/');
// await generate('./test/spec/v3.json', './test/generated/v3/');
// await generateRealWorldSpecs();
await generate('https://api.apis.guru/v2/specs/asana.com/1.0/openapi.yaml', './test/generated/asana/');
await generate('https://api.apis.guru/v2/specs/amazonaws.com/ec2/2016-11-15/openapi.yaml', './test/generated/ec2/');
await generate('https://api.apis.guru/v2/specs/aucklandmuseum.com/2.0.0/swagger.yaml', './test/generated/aucklandmuseum/');
}
generate();
main();