From 6b9eaf9b3fd763be6e803ea003083361d474c54d Mon Sep 17 00:00:00 2001 From: Lokenath Karmakar Date: Mon, 8 Jul 2024 01:58:24 +0530 Subject: [PATCH] merge duplicate child schemas into one (#1507) --- .../core/src/generators/schema-definition.ts | 10 ++++ packages/core/src/getters/combine.ts | 46 +++++++++++-------- 2 files changed, 37 insertions(+), 19 deletions(-) diff --git a/packages/core/src/generators/schema-definition.ts b/packages/core/src/generators/schema-definition.ts index cf97d28ad..14b0d9eaa 100644 --- a/packages/core/src/generators/schema-definition.ts +++ b/packages/core/src/generators/schema-definition.ts @@ -102,6 +102,16 @@ export const generateSchemasDefinition = ( } } } else { + resolvedValue.schemas = resolvedValue.schemas.filter((schema) => { + if (schema.name !== schemaName) { + return true; + } + + output += `${schema.model}\n`; + imports = imports.concat(schema.imports); + + return false; + }); output += `export type ${schemaName} = ${resolvedValue.value};\n`; } diff --git a/packages/core/src/getters/combine.ts b/packages/core/src/getters/combine.ts index adb693bbe..8befa4b8b 100644 --- a/packages/core/src/getters/combine.ts +++ b/packages/core/src/getters/combine.ts @@ -157,36 +157,31 @@ export const combineSchemas = ({ const isAllEnums = resolvedData.isEnum.every((v) => v); - let resolvedValue: ScalarValue | undefined; - - if (schema.properties) { - resolvedValue = getScalar({ item: omit(schema, separator), name, context }); - } - - const value = combineValues({ - resolvedData, - separator, - resolvedValue, - context, - }); - if (isAllEnums && name && items.length > 1) { const newEnum = `// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const ${pascal( name, )} = ${getCombineEnumValue(resolvedData)}`; return { - value: `typeof ${pascal(name)}[keyof typeof ${pascal(name)}] ${nullable}\n\n${newEnum}`, + value: `typeof ${pascal(name)}[keyof typeof ${pascal(name)}] ${nullable}`, imports: [ { name: pascal(name), }, - ...resolvedData.imports.map((toImport) => ({ - ...toImport, - values: true, - })), ], - schemas: [...resolvedData.schemas], + schemas: [ + ...resolvedData.schemas, + { + imports: [ + ...resolvedData.imports.map((toImport) => ({ + ...toImport, + values: true, + })), + ], + model: newEnum, + name: name, + }, + ], isEnum: false, type: 'object' as SchemaType, isRef: false, @@ -196,6 +191,19 @@ export const combineSchemas = ({ }; } + let resolvedValue: ScalarValue | undefined; + + if (schema.properties) { + resolvedValue = getScalar({ item: omit(schema, separator), name, context }); + } + + const value = combineValues({ + resolvedData, + separator, + resolvedValue, + context, + }); + return { value: value + nullable, imports: resolvedValue