From e3ff6277d1319d01b155bd7d476cf6b686ec5fa6 Mon Sep 17 00:00:00 2001 From: Ferdi Koomen Date: Fri, 18 Dec 2020 17:33:22 +0100 Subject: [PATCH] - Cleanup --- src/openApi/v2/parser/getEnum.ts | 2 +- src/openApi/v2/parser/getModel.ts | 2 +- src/openApi/v2/parser/getModelComposition.ts | 4 +- src/openApi/v2/parser/getModelProperties.ts | 2 +- .../v2/parser/getOperationParameter.ts | 2 +- src/openApi/v2/parser/getOperationResponse.ts | 2 +- src/openApi/v3/parser/getEnum.ts | 2 +- src/openApi/v3/parser/getModel.ts | 2 +- src/openApi/v3/parser/getModelComposition.ts | 4 +- src/openApi/v3/parser/getModelProperties.ts | 2 +- .../v3/parser/getOperationParameter.ts | 2 +- .../v3/parser/getOperationRequestBody.ts | 2 +- src/openApi/v3/parser/getOperationResponse.ts | 2 +- src/openApi/v3/parser/getPattern.spec.ts | 14 ------- src/openApi/v3/parser/getPattern.ts | 10 ----- src/openApi/v3/parser/isDefined.ts | 7 ---- .../v2/parser => utils}/getPattern.spec.ts | 0 .../v2/parser => utils}/getPattern.ts | 0 src/{openApi/v2/parser => utils}/isDefined.ts | 0 src/utils/isEqual.ts | 38 +++++++++++++++++++ 20 files changed, 53 insertions(+), 46 deletions(-) delete mode 100644 src/openApi/v3/parser/getPattern.spec.ts delete mode 100644 src/openApi/v3/parser/getPattern.ts delete mode 100644 src/openApi/v3/parser/isDefined.ts rename src/{openApi/v2/parser => utils}/getPattern.spec.ts (100%) rename src/{openApi/v2/parser => utils}/getPattern.ts (100%) rename src/{openApi/v2/parser => utils}/isDefined.ts (100%) create mode 100644 src/utils/isEqual.ts diff --git a/src/openApi/v2/parser/getEnum.ts b/src/openApi/v2/parser/getEnum.ts index 7f43c538..be285179 100644 --- a/src/openApi/v2/parser/getEnum.ts +++ b/src/openApi/v2/parser/getEnum.ts @@ -1,5 +1,5 @@ import type { Enum } from '../../../client/interfaces/Enum'; -import { isDefined } from './isDefined'; +import { isDefined } from '../../../utils/isDefined'; export function getEnum(values?: (string | number)[]): Enum[] { if (Array.isArray(values)) { diff --git a/src/openApi/v2/parser/getModel.ts b/src/openApi/v2/parser/getModel.ts index f04a4819..407dda28 100644 --- a/src/openApi/v2/parser/getModel.ts +++ b/src/openApi/v2/parser/getModel.ts @@ -1,4 +1,5 @@ import type { Model } from '../../../client/interfaces/Model'; +import { getPattern } from '../../../utils/getPattern'; import type { OpenApi } from '../interfaces/OpenApi'; import type { OpenApiSchema } from '../interfaces/OpenApiSchema'; import { extendEnum } from './extendEnum'; @@ -7,7 +8,6 @@ import { getEnum } from './getEnum'; import { getEnumFromDescription } from './getEnumFromDescription'; import { getModelComposition } from './getModelComposition'; import { getModelProperties } from './getModelProperties'; -import { getPattern } from './getPattern'; import { getType } from './getType'; export function getModel(openApi: OpenApi, definition: OpenApiSchema, isDefinition: boolean = false, name: string = ''): Model { diff --git a/src/openApi/v2/parser/getModelComposition.ts b/src/openApi/v2/parser/getModelComposition.ts index 060b83a1..a398175a 100644 --- a/src/openApi/v2/parser/getModelComposition.ts +++ b/src/openApi/v2/parser/getModelComposition.ts @@ -14,8 +14,8 @@ export function getModelComposition(openApi: OpenApi, definitions: OpenApiSchema properties: [], }; - const modes = definitions.map(definition => getModel(openApi, definition)); - modes + const models = definitions.map(definition => getModel(openApi, definition)); + models .filter(model => { const hasProperties = model.properties.length; const hasEnums = model.enums.length; diff --git a/src/openApi/v2/parser/getModelProperties.ts b/src/openApi/v2/parser/getModelProperties.ts index 387f33bf..2e577c91 100644 --- a/src/openApi/v2/parser/getModelProperties.ts +++ b/src/openApi/v2/parser/getModelProperties.ts @@ -1,10 +1,10 @@ import type { Model } from '../../../client/interfaces/Model'; +import { getPattern } from '../../../utils/getPattern'; import type { OpenApi } from '../interfaces/OpenApi'; import type { OpenApiSchema } from '../interfaces/OpenApiSchema'; import { escapeName } from './escapeName'; import { getComment } from './getComment'; import type { getModel } from './getModel'; -import { getPattern } from './getPattern'; import { getType } from './getType'; // Fix for circular dependency diff --git a/src/openApi/v2/parser/getOperationParameter.ts b/src/openApi/v2/parser/getOperationParameter.ts index 61444a24..de18c71a 100644 --- a/src/openApi/v2/parser/getOperationParameter.ts +++ b/src/openApi/v2/parser/getOperationParameter.ts @@ -1,4 +1,5 @@ import type { OperationParameter } from '../../../client/interfaces/OperationParameter'; +import { getPattern } from '../../../utils/getPattern'; import type { OpenApi } from '../interfaces/OpenApi'; import type { OpenApiParameter } from '../interfaces/OpenApiParameter'; import { extendEnum } from './extendEnum'; @@ -8,7 +9,6 @@ import { getEnumFromDescription } from './getEnumFromDescription'; import { getModel } from './getModel'; import { getOperationParameterDefault } from './getOperationParameterDefault'; import { getOperationParameterName } from './getOperationParameterName'; -import { getPattern } from './getPattern'; import { getType } from './getType'; export function getOperationParameter(openApi: OpenApi, parameter: OpenApiParameter): OperationParameter { diff --git a/src/openApi/v2/parser/getOperationResponse.ts b/src/openApi/v2/parser/getOperationResponse.ts index 0325f379..e552fe30 100644 --- a/src/openApi/v2/parser/getOperationResponse.ts +++ b/src/openApi/v2/parser/getOperationResponse.ts @@ -1,9 +1,9 @@ import type { OperationResponse } from '../../../client/interfaces/OperationResponse'; +import { getPattern } from '../../../utils/getPattern'; import type { OpenApi } from '../interfaces/OpenApi'; import type { OpenApiResponse } from '../interfaces/OpenApiResponse'; import { getComment } from './getComment'; import { getModel } from './getModel'; -import { getPattern } from './getPattern'; import { getType } from './getType'; export function getOperationResponse(openApi: OpenApi, response: OpenApiResponse, responseCode: number): OperationResponse { diff --git a/src/openApi/v3/parser/getEnum.ts b/src/openApi/v3/parser/getEnum.ts index 7f43c538..be285179 100644 --- a/src/openApi/v3/parser/getEnum.ts +++ b/src/openApi/v3/parser/getEnum.ts @@ -1,5 +1,5 @@ import type { Enum } from '../../../client/interfaces/Enum'; -import { isDefined } from './isDefined'; +import { isDefined } from '../../../utils/isDefined'; export function getEnum(values?: (string | number)[]): Enum[] { if (Array.isArray(values)) { diff --git a/src/openApi/v3/parser/getModel.ts b/src/openApi/v3/parser/getModel.ts index 2981c69a..063bfe65 100644 --- a/src/openApi/v3/parser/getModel.ts +++ b/src/openApi/v3/parser/getModel.ts @@ -1,4 +1,5 @@ import type { Model } from '../../../client/interfaces/Model'; +import { getPattern } from '../../../utils/getPattern'; import type { OpenApi } from '../interfaces/OpenApi'; import type { OpenApiSchema } from '../interfaces/OpenApiSchema'; import { extendEnum } from './extendEnum'; @@ -8,7 +9,6 @@ import { getEnumFromDescription } from './getEnumFromDescription'; import { getModelComposition } from './getModelComposition'; import { getModelDefault } from './getModelDefault'; import { getModelProperties } from './getModelProperties'; -import { getPattern } from './getPattern'; import { getType } from './getType'; export function getModel(openApi: OpenApi, definition: OpenApiSchema, isDefinition: boolean = false, name: string = ''): Model { diff --git a/src/openApi/v3/parser/getModelComposition.ts b/src/openApi/v3/parser/getModelComposition.ts index 060b83a1..a398175a 100644 --- a/src/openApi/v3/parser/getModelComposition.ts +++ b/src/openApi/v3/parser/getModelComposition.ts @@ -14,8 +14,8 @@ export function getModelComposition(openApi: OpenApi, definitions: OpenApiSchema properties: [], }; - const modes = definitions.map(definition => getModel(openApi, definition)); - modes + const models = definitions.map(definition => getModel(openApi, definition)); + models .filter(model => { const hasProperties = model.properties.length; const hasEnums = model.enums.length; diff --git a/src/openApi/v3/parser/getModelProperties.ts b/src/openApi/v3/parser/getModelProperties.ts index 03618e44..17caa16a 100644 --- a/src/openApi/v3/parser/getModelProperties.ts +++ b/src/openApi/v3/parser/getModelProperties.ts @@ -1,10 +1,10 @@ import type { Model } from '../../../client/interfaces/Model'; +import { getPattern } from '../../../utils/getPattern'; import type { OpenApi } from '../interfaces/OpenApi'; import type { OpenApiSchema } from '../interfaces/OpenApiSchema'; import { escapeName } from './escapeName'; import { getComment } from './getComment'; import type { getModel } from './getModel'; -import { getPattern } from './getPattern'; import { getType } from './getType'; // Fix for circular dependency diff --git a/src/openApi/v3/parser/getOperationParameter.ts b/src/openApi/v3/parser/getOperationParameter.ts index 956cf35d..b126fc9b 100644 --- a/src/openApi/v3/parser/getOperationParameter.ts +++ b/src/openApi/v3/parser/getOperationParameter.ts @@ -1,11 +1,11 @@ import type { OperationParameter } from '../../../client/interfaces/OperationParameter'; +import { getPattern } from '../../../utils/getPattern'; import type { OpenApi } from '../interfaces/OpenApi'; import type { OpenApiParameter } from '../interfaces/OpenApiParameter'; import { getComment } from './getComment'; import { getModel } from './getModel'; import { getModelDefault } from './getModelDefault'; import { getOperationParameterName } from './getOperationParameterName'; -import { getPattern } from './getPattern'; import { getType } from './getType'; export function getOperationParameter(openApi: OpenApi, parameter: OpenApiParameter): OperationParameter { diff --git a/src/openApi/v3/parser/getOperationRequestBody.ts b/src/openApi/v3/parser/getOperationRequestBody.ts index e1b418c3..321c68e6 100644 --- a/src/openApi/v3/parser/getOperationRequestBody.ts +++ b/src/openApi/v3/parser/getOperationRequestBody.ts @@ -1,10 +1,10 @@ import type { OperationParameter } from '../../../client/interfaces/OperationParameter'; +import { getPattern } from '../../../utils/getPattern'; import type { OpenApi } from '../interfaces/OpenApi'; import type { OpenApiRequestBody } from '../interfaces/OpenApiRequestBody'; import { getComment } from './getComment'; import { getContent } from './getContent'; import { getModel } from './getModel'; -import { getPattern } from './getPattern'; import { getType } from './getType'; export function getOperationRequestBody(openApi: OpenApi, parameter: OpenApiRequestBody): OperationParameter { diff --git a/src/openApi/v3/parser/getOperationResponse.ts b/src/openApi/v3/parser/getOperationResponse.ts index 4e57a47b..ee5e7055 100644 --- a/src/openApi/v3/parser/getOperationResponse.ts +++ b/src/openApi/v3/parser/getOperationResponse.ts @@ -1,10 +1,10 @@ import type { OperationResponse } from '../../../client/interfaces/OperationResponse'; +import { getPattern } from '../../../utils/getPattern'; import type { OpenApi } from '../interfaces/OpenApi'; import type { OpenApiResponse } from '../interfaces/OpenApiResponse'; import { getComment } from './getComment'; import { getContent } from './getContent'; import { getModel } from './getModel'; -import { getPattern } from './getPattern'; import { getType } from './getType'; export function getOperationResponse(openApi: OpenApi, response: OpenApiResponse, responseCode: number): OperationResponse { diff --git a/src/openApi/v3/parser/getPattern.spec.ts b/src/openApi/v3/parser/getPattern.spec.ts deleted file mode 100644 index 09094664..00000000 --- a/src/openApi/v3/parser/getPattern.spec.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { getPattern } from './getPattern'; - -describe('getPattern', () => { - it('should produce correct result', () => { - expect(getPattern()).toEqual(undefined); - expect(getPattern('')).toEqual(''); - expect(getPattern('^[a-zA-Z]')).toEqual('^[a-zA-Z]'); - expect(getPattern('^\\w+$')).toEqual('^\\\\w+$'); - expect(getPattern('^\\d{3}-\\d{2}-\\d{4}$')).toEqual('^\\\\d{3}-\\\\d{2}-\\\\d{4}$'); - expect(getPattern('\\')).toEqual('\\\\'); - expect(getPattern('\\/')).toEqual('\\\\/'); - expect(getPattern('\\/\\/')).toEqual('\\\\/\\\\/'); - }); -}); diff --git a/src/openApi/v3/parser/getPattern.ts b/src/openApi/v3/parser/getPattern.ts deleted file mode 100644 index a4f54bfa..00000000 --- a/src/openApi/v3/parser/getPattern.ts +++ /dev/null @@ -1,10 +0,0 @@ -/** - * The spec generates a pattern like this '^\d{3}-\d{2}-\d{4}$' - * However, to use it in HTML or inside new RegExp() we need to - * escape the pattern to become: '^\\d{3}-\\d{2}-\\d{4}$' in order - * to make it a valid regexp string. - * @param pattern - */ -export function getPattern(pattern?: string): string | undefined { - return pattern?.replace(/\\/g, '\\\\'); -} diff --git a/src/openApi/v3/parser/isDefined.ts b/src/openApi/v3/parser/isDefined.ts deleted file mode 100644 index 7a9615b6..00000000 --- a/src/openApi/v3/parser/isDefined.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Check if a value is defined - * @param value - */ -export function isDefined(value: T | undefined | null | ''): value is Exclude { - return value !== undefined && value !== null && value !== ''; -} diff --git a/src/openApi/v2/parser/getPattern.spec.ts b/src/utils/getPattern.spec.ts similarity index 100% rename from src/openApi/v2/parser/getPattern.spec.ts rename to src/utils/getPattern.spec.ts diff --git a/src/openApi/v2/parser/getPattern.ts b/src/utils/getPattern.ts similarity index 100% rename from src/openApi/v2/parser/getPattern.ts rename to src/utils/getPattern.ts diff --git a/src/openApi/v2/parser/isDefined.ts b/src/utils/isDefined.ts similarity index 100% rename from src/openApi/v2/parser/isDefined.ts rename to src/utils/isDefined.ts diff --git a/src/utils/isEqual.ts b/src/utils/isEqual.ts new file mode 100644 index 00000000..d3fe474e --- /dev/null +++ b/src/utils/isEqual.ts @@ -0,0 +1,38 @@ +export function isEqual(a: any, b: any): boolean { + if (a === b) { + return true; + } + + if (a && b && typeof a === 'object' && typeof b === 'object') { + if (Array.isArray(a) && Array.isArray(b)) { + if (a.length !== b.length) { + return false; + } + for (let i = 0; i < a.length; i++) { + if (!isEqual(a[i], b[i])) { + return false; + } + } + return true; + } + + const keysA = Object.keys(a); + const keysB = Object.keys(b); + if (keysA.length !== keysB.length) { + return false; + } + + for (let i = 0; i < keysA.length; i++) { + const key = keysA[i]; + if (!Object.prototype.hasOwnProperty.call(b, key)) { + return false; + } + if (!isEqual(a[key], b[key])) { + return false; + } + } + return true; + } + + return a !== a && b !== b; +}