From 05db3b97f87bb80d713cae7e0af71963410d956f Mon Sep 17 00:00:00 2001 From: Mauro Bieg Date: Wed, 10 Aug 2022 11:10:18 +0200 Subject: [PATCH] Escape reserved keywords in schema names for v3, closes #1186 --- src/openApi/v3/parser/getModels.ts | 3 +- .../v3/parser/getOperationParameterName.ts | 2 +- test/__snapshots__/index.spec.ts.snap | 28 +++++++++++++++++++ test/spec/v3.json | 8 ++++++ 4 files changed, 39 insertions(+), 2 deletions(-) diff --git a/src/openApi/v3/parser/getModels.ts b/src/openApi/v3/parser/getModels.ts index 3ca6393e..9cb1195d 100644 --- a/src/openApi/v3/parser/getModels.ts +++ b/src/openApi/v3/parser/getModels.ts @@ -1,6 +1,7 @@ import type { Model } from '../../../client/interfaces/Model'; import type { OpenApi } from '../interfaces/OpenApi'; import { getModel } from './getModel'; +import { reservedWords } from './getOperationParameterName'; import { getType } from './getType'; export const getModels = (openApi: OpenApi): Model[] => { @@ -10,7 +11,7 @@ export const getModels = (openApi: OpenApi): Model[] => { if (openApi.components.schemas.hasOwnProperty(definitionName)) { const definition = openApi.components.schemas[definitionName]; const definitionType = getType(definitionName); - const model = getModel(openApi, definition, true, definitionType.base); + const model = getModel(openApi, definition, true, definitionType.base.replace(reservedWords, '_$1')); models.push(model); } } diff --git a/src/openApi/v3/parser/getOperationParameterName.ts b/src/openApi/v3/parser/getOperationParameterName.ts index de9b154b..32a35100 100644 --- a/src/openApi/v3/parser/getOperationParameterName.ts +++ b/src/openApi/v3/parser/getOperationParameterName.ts @@ -1,6 +1,6 @@ import camelCase from 'camelcase'; -const reservedWords = +export const reservedWords = /^(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; /** diff --git a/test/__snapshots__/index.spec.ts.snap b/test/__snapshots__/index.spec.ts.snap index cb3405f2..8da43481 100644 --- a/test/__snapshots__/index.spec.ts.snap +++ b/test/__snapshots__/index.spec.ts.snap @@ -3607,6 +3607,7 @@ export { CancelablePromise, CancelError } from './core/CancelablePromise'; export { OpenAPI } from './core/OpenAPI'; export type { OpenAPIConfig } from './core/OpenAPI'; +export type { _default } from './models/_default'; export type { ArrayWithArray } from './models/ArrayWithArray'; export type { ArrayWithBooleans } from './models/ArrayWithBooleans'; export type { ArrayWithNumbers } from './models/ArrayWithNumbers'; @@ -3672,6 +3673,7 @@ export type { SimpleReference } from './models/SimpleReference'; export type { SimpleString } from './models/SimpleString'; export type { SimpleStringWithPattern } from './models/SimpleStringWithPattern'; +export { $_default } from './schemas/$_default'; export { $ArrayWithArray } from './schemas/$ArrayWithArray'; export { $ArrayWithBooleans } from './schemas/$ArrayWithBooleans'; export { $ArrayWithNumbers } from './schemas/$ArrayWithNumbers'; @@ -3761,6 +3763,18 @@ export { UploadService } from './services/UploadService'; " `; +exports[`v3 should generate: ./test/generated/v3/models/_default.ts 1`] = ` +"/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +export type _default = { + name?: string; +}; + +" +`; + exports[`v3 should generate: ./test/generated/v3/models/ArrayWithArray.ts 1`] = ` "/* istanbul ignore file */ /* tslint:disable */ @@ -4849,6 +4863,20 @@ export type SimpleStringWithPattern = string | null; " `; +exports[`v3 should generate: ./test/generated/v3/schemas/$_default.ts 1`] = ` +"/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export const $_default = { + properties: { + name: { + type: 'string', + }, + }, +} as const; +" +`; + exports[`v3 should generate: ./test/generated/v3/schemas/$ArrayWithArray.ts 1`] = ` "/* istanbul ignore file */ /* tslint:disable */ diff --git a/test/spec/v3.json b/test/spec/v3.json index aca05aca..50c1b4bf 100644 --- a/test/spec/v3.json +++ b/test/spec/v3.json @@ -2507,6 +2507,14 @@ } } }, + "default": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + }, "Pageable": { "type": "object", "properties": {