Skip to content

Commit cc6c7f2

Browse files
committed
- Fixed required field order for referenced parameters
1 parent 83a2370 commit cc6c7f2

File tree

7 files changed

+59
-47
lines changed

7 files changed

+59
-47
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
"build": "rollup --config --environment NODE_ENV:development",
4747
"build:watch": "rollup --config --environment NODE_ENV:development --watch",
4848
"release": "rollup --config --environment NODE_ENV:production",
49-
"run": "node ./test/index.js",
49+
"run": "NODE_ENV=production node ./test/index.js",
5050
"test": "jest --selectProjects UNIT",
5151
"test:update": "jest --selectProjects UNIT --updateSnapshot",
5252
"test:watch": "jest --selectProjects UNIT --watch",

src/openApi/v2/parser/getOperation.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { getOperationResponseHeader } from './getOperationResponseHeader';
1111
import { getOperationResponses } from './getOperationResponses';
1212
import { getOperationResults } from './getOperationResults';
1313
import { getServiceClassName } from './getServiceClassName';
14+
import { sortByRequired } from './sortByRequired';
1415

1516
export function getOperation(
1617
openApi: OpenApi,
@@ -73,5 +74,7 @@ export function getOperation(
7374
});
7475
}
7576

77+
operation.parameters = operation.parameters.sort(sortByRequired);
78+
7679
return operation;
7780
}

src/openApi/v2/parser/getOperationParameters.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import type { OpenApi } from '../interfaces/OpenApi';
33
import type { OpenApiParameter } from '../interfaces/OpenApiParameter';
44
import { getOperationParameter } from './getOperationParameter';
55
import { getRef } from './getRef';
6-
import { sortByRequired } from './sortByRequired';
76

87
export function getOperationParameters(openApi: OpenApi, parameters: OpenApiParameter[]): OperationParameters {
98
const operationParameters: OperationParameters = {
@@ -58,12 +57,5 @@ export function getOperationParameters(openApi: OpenApi, parameters: OpenApiPara
5857
}
5958
}
6059
});
61-
62-
operationParameters.parameters = operationParameters.parameters.sort(sortByRequired);
63-
operationParameters.parametersPath = operationParameters.parametersPath.sort(sortByRequired);
64-
operationParameters.parametersQuery = operationParameters.parametersQuery.sort(sortByRequired);
65-
operationParameters.parametersForm = operationParameters.parametersForm.sort(sortByRequired);
66-
operationParameters.parametersCookie = operationParameters.parametersCookie.sort(sortByRequired);
67-
operationParameters.parametersHeader = operationParameters.parametersHeader.sort(sortByRequired);
6860
return operationParameters;
6961
}

src/openApi/v3/parser/getOperation.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ export function getOperation(
6969
const requestBody = getOperationRequestBody(openApi, requestBodyDef);
7070
operation.imports.push(...requestBody.imports);
7171
operation.parameters.push(requestBody);
72-
operation.parameters = operation.parameters.sort(sortByRequired);
7372
operation.parametersBody = requestBody;
7473
}
7574

@@ -86,5 +85,7 @@ export function getOperation(
8685
});
8786
}
8887

88+
operation.parameters = operation.parameters.sort(sortByRequired);
89+
8990
return operation;
9091
}

src/openApi/v3/parser/getOperationParameters.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import type { OpenApi } from '../interfaces/OpenApi';
33
import type { OpenApiParameter } from '../interfaces/OpenApiParameter';
44
import { getOperationParameter } from './getOperationParameter';
55
import { getRef } from './getRef';
6-
import { sortByRequired } from './sortByRequired';
76

87
export function getOperationParameters(openApi: OpenApi, parameters: OpenApiParameter[]): OperationParameters {
98
const operationParameters: OperationParameters = {
@@ -58,12 +57,5 @@ export function getOperationParameters(openApi: OpenApi, parameters: OpenApiPara
5857
}
5958
}
6059
});
61-
62-
operationParameters.parameters = operationParameters.parameters.sort(sortByRequired);
63-
operationParameters.parametersPath = operationParameters.parametersPath.sort(sortByRequired);
64-
operationParameters.parametersQuery = operationParameters.parametersQuery.sort(sortByRequired);
65-
operationParameters.parametersForm = operationParameters.parametersForm.sort(sortByRequired);
66-
operationParameters.parametersCookie = operationParameters.parametersCookie.sort(sortByRequired);
67-
operationParameters.parametersHeader = operationParameters.parametersHeader.sort(sortByRequired);
6860
return operationParameters;
6961
}

test/__snapshots__/index.spec.js.snap

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2105,12 +2105,12 @@ export class DefaultsService {
21052105
method: 'PUT',
21062106
path: \`/api/v\${OpenAPI.VERSION}/defaults\`,
21072107
query: {
2108-
'parameterStringWithNoDefault': parameterStringWithNoDefault,
21092108
'parameterOptionalStringWithDefault': parameterOptionalStringWithDefault,
21102109
'parameterOptionalStringWithEmptyDefault': parameterOptionalStringWithEmptyDefault,
21112110
'parameterOptionalStringWithNoDefault': parameterOptionalStringWithNoDefault,
21122111
'parameterStringWithDefault': parameterStringWithDefault,
21132112
'parameterStringWithEmptyDefault': parameterStringWithEmptyDefault,
2113+
'parameterStringWithNoDefault': parameterStringWithNoDefault,
21142114
},
21152115
});
21162116
}
@@ -2293,8 +2293,8 @@ export class ParametersService {
22932293
'parameter.header': parameterHeader,
22942294
},
22952295
query: {
2296-
'parameter-query': parameterQuery,
22972296
'default': _default,
2297+
'parameter-query': parameterQuery,
22982298
},
22992299
formData: {
23002300
'parameter_form': parameterForm,
@@ -2494,13 +2494,13 @@ export class TypesService {
24942494
method: 'GET',
24952495
path: \`/api/v\${OpenAPI.VERSION}/types\`,
24962496
query: {
2497-
'parameterArray': parameterArray,
2498-
'parameterDictionary': parameterDictionary,
2499-
'parameterEnum': parameterEnum,
25002497
'parameterNumber': parameterNumber,
25012498
'parameterString': parameterString,
25022499
'parameterBoolean': parameterBoolean,
25032500
'parameterObject': parameterObject,
2501+
'parameterArray': parameterArray,
2502+
'parameterDictionary': parameterDictionary,
2503+
'parameterEnum': parameterEnum,
25042504
},
25052505
});
25062506
}
@@ -5051,12 +5051,12 @@ export class DefaultsService {
50515051
method: 'PUT',
50525052
path: \`/api/v\${OpenAPI.VERSION}/defaults\`,
50535053
query: {
5054-
'parameterStringWithNoDefault': parameterStringWithNoDefault,
50555054
'parameterOptionalStringWithDefault': parameterOptionalStringWithDefault,
50565055
'parameterOptionalStringWithEmptyDefault': parameterOptionalStringWithEmptyDefault,
50575056
'parameterOptionalStringWithNoDefault': parameterOptionalStringWithNoDefault,
50585057
'parameterStringWithDefault': parameterStringWithDefault,
50595058
'parameterStringWithEmptyDefault': parameterStringWithEmptyDefault,
5059+
'parameterStringWithNoDefault': parameterStringWithNoDefault,
50605060
},
50615061
});
50625062
}
@@ -5315,8 +5315,8 @@ export class ParametersService {
53155315
'parameter.header': parameterHeader,
53165316
},
53175317
query: {
5318-
'parameter-query': parameterQuery,
53195318
'default': _default,
5319+
'parameter-query': parameterQuery,
53205320
},
53215321
formData: {
53225322
'parameter_form': parameterForm,
@@ -5591,13 +5591,13 @@ export class TypesService {
55915591
method: 'GET',
55925592
path: \`/api/v\${OpenAPI.VERSION}/types\`,
55935593
query: {
5594-
'parameterArray': parameterArray,
5595-
'parameterDictionary': parameterDictionary,
5596-
'parameterEnum': parameterEnum,
55975594
'parameterNumber': parameterNumber,
55985595
'parameterString': parameterString,
55995596
'parameterBoolean': parameterBoolean,
56005597
'parameterObject': parameterObject,
5598+
'parameterArray': parameterArray,
5599+
'parameterDictionary': parameterDictionary,
5600+
'parameterEnum': parameterEnum,
56015601
},
56025602
});
56035603
}

test/index.js

Lines changed: 43 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
'use strict';
22

33
const OpenAPI = require('../dist');
4+
const fetch = require('node-fetch');
45

5-
async function generateV2() {
6+
async function generate(input, output) {
67
await OpenAPI.generate({
7-
input: './test/spec/v2.json',
8-
output: './test/generated/v2/',
8+
input,
9+
output,
910
httpClient: OpenAPI.HttpClient.FETCH,
1011
useOptions: false,
1112
useUnionTypes: false,
@@ -17,24 +18,47 @@ async function generateV2() {
1718
});
1819
}
1920

20-
async function generateV3() {
21-
await OpenAPI.generate({
22-
input: './test/spec/v3.json',
23-
output: './test/generated/v3/',
24-
httpClient: OpenAPI.HttpClient.FETCH,
25-
useOptions: false,
26-
useUnionTypes: false,
27-
exportCore: true,
28-
exportSchemas: true,
29-
exportModels: true,
30-
exportServices: true,
31-
// request: './test/custom/request.ts',
21+
async function generateRealWorldSpecs() {
22+
const response = await fetch('https://api.apis.guru/v2/list.json');
23+
24+
const list = await response.json();
25+
delete list['api.video'];
26+
delete list['apideck.com:vault'];
27+
delete list['amazonaws.com:mediaconvert'];
28+
delete list['bungie.net'];
29+
delete list['docusign.net'];
30+
delete list['googleapis.com:adsense'];
31+
delete list['googleapis.com:servicebroker'];
32+
delete list['kubernetes.io'];
33+
delete list['microsoft.com:graph'];
34+
delete list['presalytics.io:ooxml'];
35+
delete list['stripe.com'];
36+
37+
const specs = Object.entries(list).map(([name, api]) => {
38+
const latestVersion = api.versions[api.preferred];
39+
return {
40+
name: name
41+
.replace(/^[^a-zA-Z]+/g, '')
42+
.replace(/[^\w\-]+/g, '-')
43+
.trim()
44+
.toLowerCase(),
45+
url: latestVersion.swaggerYamlUrl || latestVersion.swaggerUrl,
46+
};
3247
});
48+
49+
for (let i = 0; i < specs.length; i++) {
50+
const spec = specs[i];
51+
await generate(spec.url, `./test/generated/${spec.name}/`);
52+
}
3353
}
3454

35-
async function generate() {
36-
await generateV2();
37-
await generateV3();
55+
async function main() {
56+
// await generate('./test/spec/v2.json', './test/generated/v2/');
57+
// await generate('./test/spec/v3.json', './test/generated/v3/');
58+
// await generateRealWorldSpecs();
59+
await generate('https://api.apis.guru/v2/specs/asana.com/1.0/openapi.yaml', './test/generated/asana/');
60+
await generate('https://api.apis.guru/v2/specs/amazonaws.com/ec2/2016-11-15/openapi.yaml', './test/generated/ec2/');
61+
await generate('https://api.apis.guru/v2/specs/aucklandmuseum.com/2.0.0/swagger.yaml', './test/generated/aucklandmuseum/');
3862
}
3963

40-
generate();
64+
main();

0 commit comments

Comments
 (0)