Skip to content

Commit 05db3b9

Browse files
committed
Escape reserved keywords in schema names for v3, closes ferdikoomen#1186
1 parent f26bf12 commit 05db3b9

File tree

4 files changed

+39
-2
lines changed

4 files changed

+39
-2
lines changed

src/openApi/v3/parser/getModels.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type { Model } from '../../../client/interfaces/Model';
22
import type { OpenApi } from '../interfaces/OpenApi';
33
import { getModel } from './getModel';
4+
import { reservedWords } from './getOperationParameterName';
45
import { getType } from './getType';
56

67
export const getModels = (openApi: OpenApi): Model[] => {
@@ -10,7 +11,7 @@ export const getModels = (openApi: OpenApi): Model[] => {
1011
if (openApi.components.schemas.hasOwnProperty(definitionName)) {
1112
const definition = openApi.components.schemas[definitionName];
1213
const definitionType = getType(definitionName);
13-
const model = getModel(openApi, definition, true, definitionType.base);
14+
const model = getModel(openApi, definition, true, definitionType.base.replace(reservedWords, '_$1'));
1415
models.push(model);
1516
}
1617
}

src/openApi/v3/parser/getOperationParameterName.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import camelCase from 'camelcase';
22

3-
const reservedWords =
3+
export const reservedWords =
44
/^(arguments|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|eval|export|extends|false|finally|for|function|if|implements|import|in|instanceof|interface|let|new|null|package|private|protected|public|return|static|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)$/g;
55

66
/**

test/__snapshots__/index.spec.ts.snap

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3607,6 +3607,7 @@ export { CancelablePromise, CancelError } from './core/CancelablePromise';
36073607
export { OpenAPI } from './core/OpenAPI';
36083608
export type { OpenAPIConfig } from './core/OpenAPI';
36093609

3610+
export type { _default } from './models/_default';
36103611
export type { ArrayWithArray } from './models/ArrayWithArray';
36113612
export type { ArrayWithBooleans } from './models/ArrayWithBooleans';
36123613
export type { ArrayWithNumbers } from './models/ArrayWithNumbers';
@@ -3672,6 +3673,7 @@ export type { SimpleReference } from './models/SimpleReference';
36723673
export type { SimpleString } from './models/SimpleString';
36733674
export type { SimpleStringWithPattern } from './models/SimpleStringWithPattern';
36743675

3676+
export { $_default } from './schemas/$_default';
36753677
export { $ArrayWithArray } from './schemas/$ArrayWithArray';
36763678
export { $ArrayWithBooleans } from './schemas/$ArrayWithBooleans';
36773679
export { $ArrayWithNumbers } from './schemas/$ArrayWithNumbers';
@@ -3761,6 +3763,18 @@ export { UploadService } from './services/UploadService';
37613763
"
37623764
`;
37633765

3766+
exports[`v3 should generate: ./test/generated/v3/models/_default.ts 1`] = `
3767+
"/* istanbul ignore file */
3768+
/* tslint:disable */
3769+
/* eslint-disable */
3770+
3771+
export type _default = {
3772+
name?: string;
3773+
};
3774+
3775+
"
3776+
`;
3777+
37643778
exports[`v3 should generate: ./test/generated/v3/models/ArrayWithArray.ts 1`] = `
37653779
"/* istanbul ignore file */
37663780
/* tslint:disable */
@@ -4849,6 +4863,20 @@ export type SimpleStringWithPattern = string | null;
48494863
"
48504864
`;
48514865

4866+
exports[`v3 should generate: ./test/generated/v3/schemas/$_default.ts 1`] = `
4867+
"/* istanbul ignore file */
4868+
/* tslint:disable */
4869+
/* eslint-disable */
4870+
export const $_default = {
4871+
properties: {
4872+
name: {
4873+
type: 'string',
4874+
},
4875+
},
4876+
} as const;
4877+
"
4878+
`;
4879+
48524880
exports[`v3 should generate: ./test/generated/v3/schemas/$ArrayWithArray.ts 1`] = `
48534881
"/* istanbul ignore file */
48544882
/* tslint:disable */

test/spec/v3.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2507,6 +2507,14 @@
25072507
}
25082508
}
25092509
},
2510+
"default": {
2511+
"type": "object",
2512+
"properties": {
2513+
"name": {
2514+
"type": "string"
2515+
}
2516+
}
2517+
},
25102518
"Pageable": {
25112519
"type": "object",
25122520
"properties": {

0 commit comments

Comments
 (0)