From ef83bdb709ebde008b90930a6875b24f042a41b0 Mon Sep 17 00:00:00 2001 From: Dario Aprea Date: Tue, 20 Sep 2022 15:01:05 +0200 Subject: [PATCH] fix: refine type generation for relationships --- src/bin/generateTypes.ts | 78 +++++++++++++++++++++++++--------------- 1 file changed, 49 insertions(+), 29 deletions(-) diff --git a/src/bin/generateTypes.ts b/src/bin/generateTypes.ts index 99ed3cdf59..bc6ead5189 100644 --- a/src/bin/generateTypes.ts +++ b/src/bin/generateTypes.ts @@ -131,33 +131,50 @@ function generateFieldTypes(config: SanitizedConfig, fields: Field[]): { if (Array.isArray(field.relationTo)) { if (field.hasMany) { fieldSchema = { - type: 'array', - items: { - oneOf: field.relationTo.map((relation) => { - const idFieldType = getCollectionIDType(config.collections, relation); + oneOf: [ + { + type: 'array', + items: { + oneOf: field.relationTo.map((relation) => { + const idFieldType = getCollectionIDType(config.collections, relation); - return { - type: 'object', - additionalProperties: false, - properties: { - value: { - oneOf: [ - { + return { + type: 'object', + additionalProperties: false, + properties: { + value: { type: idFieldType, }, - { + relationTo: { + const: relation, + }, + }, + required: ['value', 'relationTo'], + }; + }), + }, + }, + { + type: 'array', + items: { + oneOf: field.relationTo.map((relation) => { + return { + type: 'object', + additionalProperties: false, + properties: { + value: { $ref: `#/definitions/${relation}`, }, - ], - }, - relationTo: { - const: relation, - }, - }, - required: ['value', 'relationTo'], - }; - }), - }, + relationTo: { + const: relation, + }, + }, + required: ['value', 'relationTo'], + }; + }), + }, + }, + ], }; } else { fieldSchema = { @@ -192,17 +209,20 @@ function generateFieldTypes(config: SanitizedConfig, fields: Field[]): { if (field.hasMany) { fieldSchema = { - type: 'array', - items: { - oneOf: [ - { + oneOf: [ + { + type: 'array', + items: { type: idFieldType, }, - { + }, + { + type: 'array', + items: { $ref: `#/definitions/${field.relationTo}`, }, - ], - }, + }, + ], }; } else { fieldSchema = {