diff --git a/package.json b/package.json index 64d96b08..21dbf50f 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/src/openApi/v2/parser/getOperation.ts b/src/openApi/v2/parser/getOperation.ts index 7c6dc834..68aa30cf 100644 --- a/src/openApi/v2/parser/getOperation.ts +++ b/src/openApi/v2/parser/getOperation.ts @@ -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; } diff --git a/src/openApi/v2/parser/getOperationParameters.ts b/src/openApi/v2/parser/getOperationParameters.ts index 61f8bc23..6bba9bc4 100644 --- a/src/openApi/v2/parser/getOperationParameters.ts +++ b/src/openApi/v2/parser/getOperationParameters.ts @@ -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; } diff --git a/src/openApi/v3/parser/getOperation.ts b/src/openApi/v3/parser/getOperation.ts index 4edff402..ccdae984 100644 --- a/src/openApi/v3/parser/getOperation.ts +++ b/src/openApi/v3/parser/getOperation.ts @@ -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; } diff --git a/src/openApi/v3/parser/getOperationParameters.ts b/src/openApi/v3/parser/getOperationParameters.ts index 4d6612d1..f4cc7503 100644 --- a/src/openApi/v3/parser/getOperationParameters.ts +++ b/src/openApi/v3/parser/getOperationParameters.ts @@ -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; } diff --git a/test/__snapshots__/index.spec.js.snap b/test/__snapshots__/index.spec.js.snap index 5f5d807f..b877d666 100644 --- a/test/__snapshots__/index.spec.js.snap +++ b/test/__snapshots__/index.spec.js.snap @@ -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, }, }); } diff --git a/test/index.js b/test/index.js index 9ff966a1..584654ad 100644 --- a/test/index.js +++ b/test/index.js @@ -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();