From 69c878a40f14fadd45404f68aeceebcbf746dbab Mon Sep 17 00:00:00 2001 From: Thomas Heartman Date: Wed, 29 Jun 2022 11:03:09 +0200 Subject: [PATCH] Fix: remove recursive schema inclusion --- src/lib/openapi/nested-schemas.test.ts | 15 ------- src/lib/openapi/nested-schemas.ts | 19 --------- src/lib/openapi/spec/events-schema.test.ts | 41 +++++++++++++++++++ src/lib/openapi/spec/events-schema.ts | 7 ++-- src/lib/openapi/spec/feature-events-schema.ts | 7 ++-- 5 files changed, 49 insertions(+), 40 deletions(-) delete mode 100644 src/lib/openapi/nested-schemas.test.ts delete mode 100644 src/lib/openapi/nested-schemas.ts diff --git a/src/lib/openapi/nested-schemas.test.ts b/src/lib/openapi/nested-schemas.test.ts deleted file mode 100644 index dc6cebe228..0000000000 --- a/src/lib/openapi/nested-schemas.test.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { includeSchemasRecursively } from './nested-schemas'; - -test('includeSchemasRecursively', () => { - const schemaFour = { components: {} }; - const schemaThree = { components: { schemas: { schemaFour } } }; - const schemaOne = { - components: { schemas: { schemaTwo: schemaFour, schemaThree } }, - }; - expect(includeSchemasRecursively({ schemaOne })).toEqual({ - schemaOne, - schemaTwo: schemaFour, - schemaThree, - schemaFour, - }); -}); diff --git a/src/lib/openapi/nested-schemas.ts b/src/lib/openapi/nested-schemas.ts deleted file mode 100644 index 35ce0eac1c..0000000000 --- a/src/lib/openapi/nested-schemas.ts +++ /dev/null @@ -1,19 +0,0 @@ -export interface ISchemaObject { - [k: string]: IComponentSchema; -} - -interface IComponentSchema { - components: { schemas?: ISchemaObject }; -} - -export const includeSchemasRecursively = ( - schemas: ISchemaObject, -): ISchemaObject => - Object.entries(schemas).reduce( - (acc: ISchemaObject, [key, value]) => ({ - ...acc, - [key]: value, - ...includeSchemasRecursively(value.components.schemas ?? {}), - }), - {}, - ); diff --git a/src/lib/openapi/spec/events-schema.test.ts b/src/lib/openapi/spec/events-schema.test.ts index d26c9ea4dd..509102ed2a 100644 --- a/src/lib/openapi/spec/events-schema.test.ts +++ b/src/lib/openapi/spec/events-schema.test.ts @@ -34,3 +34,44 @@ test('eventsSchema', () => { validateSchema('#/components/schemas/eventsSchema', data), ).toBeUndefined(); }); + +test('eventsSchema types', () => { + const data: EventsSchema = { + version: 1, + events: [ + { + // @ts-expect-error + id: '1', + type: 'feature-created', + createdBy: 'user@company.com', + createdAt: '2022-05-31T13:32:20.560Z', + data: { + name: 'new-feature', + description: 'Toggle description', + type: 'release', + project: 'my-project', + stale: false, + variants: [], + createdAt: '2022-05-31T13:32:20.547Z', + lastSeenAt: null, + impressionData: true, + }, + preData: null, + tags: [ + { + type: '', + // @ts-expect-error + value: 1, + }, + ], + featureName: 'new-feature', + project: 'my-project', + environment: null, + }, + ], + }; + + expect( + validateSchema('#/components/schemas/eventsSchema', data), + ).not.toBeUndefined(); +}); diff --git a/src/lib/openapi/spec/events-schema.ts b/src/lib/openapi/spec/events-schema.ts index c1ad6a59bb..efa7137253 100644 --- a/src/lib/openapi/spec/events-schema.ts +++ b/src/lib/openapi/spec/events-schema.ts @@ -1,6 +1,6 @@ import { FromSchema } from 'json-schema-to-ts'; import { eventSchema } from './event-schema'; -import { includeSchemasRecursively } from '../nested-schemas'; +import { tagSchema } from './tag-schema'; export const eventsSchema = { $id: '#/components/schemas/eventsSchema', @@ -18,9 +18,10 @@ export const eventsSchema = { }, }, components: { - schemas: includeSchemasRecursively({ + schemas: { eventSchema, - }), + tagSchema, + }, }, } as const; diff --git a/src/lib/openapi/spec/feature-events-schema.ts b/src/lib/openapi/spec/feature-events-schema.ts index 376d9c9ca1..2abc7568cc 100644 --- a/src/lib/openapi/spec/feature-events-schema.ts +++ b/src/lib/openapi/spec/feature-events-schema.ts @@ -1,6 +1,6 @@ import { FromSchema } from 'json-schema-to-ts'; -import { includeSchemasRecursively } from '../nested-schemas'; import { eventSchema } from './event-schema'; +import { tagSchema } from './tag-schema'; export const featureEventsSchema = { $id: '#/components/schemas/featureEventsSchema', @@ -17,9 +17,10 @@ export const featureEventsSchema = { }, }, components: { - schemas: includeSchemasRecursively({ + schemas: { eventSchema, - }), + tagSchema, + }, }, } as const;