diff --git a/packages/plugins/other/visitor-plugin-common/src/base-resolvers-visitor.ts b/packages/plugins/other/visitor-plugin-common/src/base-resolvers-visitor.ts index 3d7efa48c3b..1f883822077 100644 --- a/packages/plugins/other/visitor-plugin-common/src/base-resolvers-visitor.ts +++ b/packages/plugins/other/visitor-plugin-common/src/base-resolvers-visitor.ts @@ -1105,54 +1105,58 @@ export class BaseResolversVisitor< memberTypes: readonly GraphQLObjectType[] | GraphQLObjectType[]; isTypenameNonOptional: boolean; }): string { - const result = - memberTypes - .map(type => { - const isTypeMapped = this.config.mappers[type.name]; - // 1. If mapped without placehoder, just use it without doing extra checks - if (isTypeMapped && !hasPlaceholder(isTypeMapped.type)) { - return { typename: type.name, typeValue: isTypeMapped.type }; - } + const members = memberTypes + .map(type => { + const isTypeMapped = this.config.mappers[type.name]; + // 1. If mapped without placehoder, just use it without doing extra checks + if (isTypeMapped && !hasPlaceholder(isTypeMapped.type)) { + return { typename: type.name, typeValue: isTypeMapped.type }; + } - // 2. Work out value for type - // 2a. By default, use the typescript type - let typeValue = this.convertName(type.name, {}, true); + // 2. Work out value for type + // 2a. By default, use the typescript type + let typeValue = this.convertName(type.name, {}, true); - // 2b. Find fields to Omit if needed. - // - If no field to Omit, "type with maybe Omit" is typescript type i.e. no Omit - // - If there are fields to Omit, keep track of these "type with maybe Omit" to replace in original unionMemberValue - const fieldsToOmit = this.getRelevantFieldsToOmit({ - schemaType: type, - getTypeToUse: baseType => `_RefType['${baseType}']`, - }); - if (fieldsToOmit.length > 0) { - typeValue = this.replaceFieldsInType(typeValue, fieldsToOmit); - } + // 2b. Find fields to Omit if needed. + // - If no field to Omit, "type with maybe Omit" is typescript type i.e. no Omit + // - If there are fields to Omit, keep track of these "type with maybe Omit" to replace in original unionMemberValue + const fieldsToOmit = this.getRelevantFieldsToOmit({ + schemaType: type, + getTypeToUse: baseType => `_RefType['${baseType}']`, + }); + if (fieldsToOmit.length > 0) { + typeValue = this.replaceFieldsInType(typeValue, fieldsToOmit); + } - // 2c. If type is mapped with placeholder, use the "type with maybe Omit" as {T} - if (isTypeMapped && hasPlaceholder(isTypeMapped.type)) { - return { typename: type.name, typeValue: replacePlaceholder(isTypeMapped.type, typeValue) }; - } + // 2c. If type is mapped with placeholder, use the "type with maybe Omit" as {T} + if (isTypeMapped && hasPlaceholder(isTypeMapped.type)) { + return { typename: type.name, typeValue: replacePlaceholder(isTypeMapped.type, typeValue) }; + } - // 2d. If has default mapper with placeholder, use the "type with maybe Omit" as {T} - const hasDefaultMapper = !!this.config.defaultMapper?.type; - const isScalar = this.config.scalars[typeName]; - if (hasDefaultMapper && hasPlaceholder(this.config.defaultMapper.type)) { - const finalTypename = isScalar ? this._getScalar(typeName) : typeValue; - return { - typename: type.name, - typeValue: replacePlaceholder(this.config.defaultMapper.type, finalTypename), - }; - } + // 2d. If has default mapper with placeholder, use the "type with maybe Omit" as {T} + const hasDefaultMapper = !!this.config.defaultMapper?.type; + const isScalar = this.config.scalars[typeName]; + if (hasDefaultMapper && hasPlaceholder(this.config.defaultMapper.type)) { + const finalTypename = isScalar ? this._getScalar(typeName) : typeValue; + return { + typename: type.name, + typeValue: replacePlaceholder(this.config.defaultMapper.type, finalTypename), + }; + } - return { typename: type.name, typeValue }; - }) - .map(({ typename, typeValue }) => { - const nonOptionalTypenameModifier = isTypenameNonOptional ? ` & { __typename: '${typename}' }` : ''; + return { typename: type.name, typeValue }; + }) + .map(({ typename, typeValue }) => { + const nonOptionalTypenameModifier = isTypenameNonOptional ? ` & { __typename: '${typename}' }` : ''; - return `( ${typeValue}${nonOptionalTypenameModifier} )`; // Must wrap every type in explicit "( )" to separate them - }) - .join(' | ') || 'never'; + return `( ${typeValue}${nonOptionalTypenameModifier} )`; // Must wrap every type in explicit "( )" to separate them + }); + const result = + members.length === 0 + ? 'never' + : members.length > 1 + ? `\n | ${members.map(m => m.replace(/\n/g, '\n ')).join('\n | ')}\n ` + : members.join(' | '); return result; } diff --git a/packages/plugins/other/visitor-plugin-common/src/selection-set-to-object.ts b/packages/plugins/other/visitor-plugin-common/src/selection-set-to-object.ts index 83dd59a7754..36ef21d659b 100644 --- a/packages/plugins/other/visitor-plugin-common/src/selection-set-to-object.ts +++ b/packages/plugins/other/visitor-plugin-common/src/selection-set-to-object.ts @@ -844,7 +844,7 @@ export class SelectionSetToObject 1 && this._config.extractAllFieldsToTypes) { return { @@ -944,7 +944,7 @@ export class SelectionSetToObject t.name).join(' | ')).string, + .withContent(formatUnion(subTypes.map(t => t.name))).string, ].join('\n'); } @@ -961,3 +961,10 @@ export class SelectionSetToObject 1) { + return `\n | ${members.map(m => m.replace(/\n/g, '\n ')).join('\n | ')}\n`; + } + return members.join(' | '); +} diff --git a/packages/plugins/typescript/operations/src/ts-selection-set-processor.ts b/packages/plugins/typescript/operations/src/ts-selection-set-processor.ts index 6de86a0c45d..189f47c401a 100644 --- a/packages/plugins/typescript/operations/src/ts-selection-set-processor.ts +++ b/packages/plugins/typescript/operations/src/ts-selection-set-processor.ts @@ -25,20 +25,20 @@ export class TypeScriptSelectionSetProcessor extends BaseSelectionSetProcessor `'${field.fieldName}'`).join(' | ')}>`]; + const escapedFieldNames = fields.map(field => `'${field.fieldName}'`); + return [formattedUnionTransform('MakeEmpty', parentName, escapedFieldNames)]; } let hasConditionals = false; - const conditilnalsList: string[] = []; - let resString = `Pick<${parentName}, ${fields - .map(field => { - if (field.isConditional) { - hasConditionals = true; - conditilnalsList.push(field.fieldName); - } - return `'${field.fieldName}'`; - }) - .join(' | ')}>`; + const escapedConditionalsList: string[] = []; + const escapedFieldNames = fields.map(field => { + if (field.isConditional) { + hasConditionals = true; + escapedConditionalsList.push(`'${field.fieldName}'`); + } + return `'${field.fieldName}'`; + }); + let resString = formattedUnionTransform('Pick', parentName, escapedFieldNames); if (hasConditionals) { const avoidOptional = @@ -52,7 +52,7 @@ export class TypeScriptSelectionSetProcessor extends BaseSelectionSetProcessor `'${field}'`).join(' | ')}>`; + }${formattedUnionTransform(transform, resString, escapedConditionalsList)}`; } return [resString]; } @@ -75,18 +75,13 @@ export class TypeScriptSelectionSetProcessor extends BaseSelectionSetProcessor { - const value = - aliasedField.fieldName === '__typename' - ? `'${schemaType.name}'` - : `${parentName}['${aliasedField.fieldName}']`; - - return `${aliasedField.alias}: ${value}`; - }) - .join(', ')} }`, - ]; + const selections = fields.map(aliasedField => { + const value = + aliasedField.fieldName === '__typename' ? `'${schemaType.name}'` : `${parentName}['${aliasedField.fieldName}']`; + + return `${aliasedField.alias}: ${value}`; + }); + return [formatSelections(selections)]; } transformLinkFields(fields: LinkField[]): ProcessResult { @@ -94,6 +89,24 @@ export class TypeScriptSelectionSetProcessor extends BaseSelectionSetProcessor `${field.alias || field.name}: ${field.selectionSet}`).join(', ')} }`]; + const selections = fields.map(field => `${field.alias || field.name}: ${field.selectionSet}`); + + return [formatSelections(selections)]; + } +} + +/** Equivalent to `${transformName}<${target}, ${unionElements.join(' | ')}>`, but with line feeds if necessary */ +function formattedUnionTransform(transformName: string, target: string, unionElements: string[]): string { + if (unionElements.length > 3) { + return `${transformName}<\n ${target},\n | ${unionElements.join('\n | ')}\n >`; + } + return `${transformName}<${target}, ${unionElements.join(' | ')}>`; +} + +/** Equivalent to `{ ${selections.join(', ')} }`, but with line feeds if necessary */ +function formatSelections(selections: string[]): string { + if (selections.length > 1) { + return `{\n ${selections.map(s => s.replace(/\n/g, '\n ')).join(',\n ')},\n }`; } + return `{ ${selections.join(', ')} }`; } diff --git a/packages/plugins/typescript/operations/tests/__snapshots__/ts-documents.spec.ts.snap b/packages/plugins/typescript/operations/tests/__snapshots__/ts-documents.spec.ts.snap index b363ec0e715..c1e43a77b5d 100644 --- a/packages/plugins/typescript/operations/tests/__snapshots__/ts-documents.spec.ts.snap +++ b/packages/plugins/typescript/operations/tests/__snapshots__/ts-documents.spec.ts.snap @@ -17,7 +17,12 @@ exports[`TypeScript Operations Plugin Issues #2699 - Issues with multiple interf }>; -export type GetEntityBrandDataQuery = { __typename?: 'Query', node: { __typename: 'Company', active: boolean, id: string, createdAt: any, updatedAt: any, brandData?: { __typename?: 'EntityBrandData', active: boolean, browsable: boolean, title: string, alternateTitle?: string | null, description: string } | null, createdBy?: { __typename?: 'User', id: string, name: string } | null, updatedBy?: { __typename?: 'User', id: string, name: string } | null } | { __typename: 'Theater', active: boolean, id: string, createdAt: any, updatedAt: any, brandData?: { __typename?: 'EntityBrandData', active: boolean, browsable: boolean, title: string, alternateTitle?: string | null, description: string } | null, createdBy?: { __typename?: 'User', id: string, name: string } | null, updatedBy?: { __typename?: 'User', id: string, name: string } | null } | { __typename: 'Movie', id: string, createdAt: any, updatedAt: any, brandData?: { __typename?: 'EntityBrandData', active: boolean, browsable: boolean, title: string, alternateTitle?: string | null, description: string } | null, createdBy?: { __typename?: 'User', id: string, name: string } | null, updatedBy?: { __typename?: 'User', id: string, name: string } | null } | { __typename: 'User', id: string, createdAt: any, updatedAt: any, brandData?: { __typename?: 'EntityBrandData', active: boolean, browsable: boolean, title: string, alternateTitle?: string | null, description: string } | null, createdBy?: { __typename?: 'User', id: string, name: string } | null, updatedBy?: { __typename?: 'User', id: string, name: string } | null } }; +export type GetEntityBrandDataQuery = { __typename?: 'Query', node: + | { __typename: 'Company', active: boolean, id: string, createdAt: any, updatedAt: any, brandData?: { __typename?: 'EntityBrandData', active: boolean, browsable: boolean, title: string, alternateTitle?: string | null, description: string } | null, createdBy?: { __typename?: 'User', id: string, name: string } | null, updatedBy?: { __typename?: 'User', id: string, name: string } | null } + | { __typename: 'Theater', active: boolean, id: string, createdAt: any, updatedAt: any, brandData?: { __typename?: 'EntityBrandData', active: boolean, browsable: boolean, title: string, alternateTitle?: string | null, description: string } | null, createdBy?: { __typename?: 'User', id: string, name: string } | null, updatedBy?: { __typename?: 'User', id: string, name: string } | null } + | { __typename: 'Movie', id: string, createdAt: any, updatedAt: any, brandData?: { __typename?: 'EntityBrandData', active: boolean, browsable: boolean, title: string, alternateTitle?: string | null, description: string } | null, createdBy?: { __typename?: 'User', id: string, name: string } | null, updatedBy?: { __typename?: 'User', id: string, name: string } | null } + | { __typename: 'User', id: string, createdAt: any, updatedAt: any, brandData?: { __typename?: 'EntityBrandData', active: boolean, browsable: boolean, title: string, alternateTitle?: string | null, description: string } | null, createdBy?: { __typename?: 'User', id: string, name: string } | null, updatedBy?: { __typename?: 'User', id: string, name: string } | null } + }; type EntityBrandData_Company_Fragment = { __typename?: 'Company', brandData?: { __typename?: 'EntityBrandData', active: boolean, browsable: boolean, title: string, alternateTitle?: string | null, description: string } | null }; @@ -27,7 +32,12 @@ type EntityBrandData_Movie_Fragment = { __typename?: 'Movie', brandData?: { __ty type EntityBrandData_User_Fragment = { __typename?: 'User', brandData?: { __typename?: 'EntityBrandData', active: boolean, browsable: boolean, title: string, alternateTitle?: string | null, description: string } | null }; -export type EntityBrandDataFragment = EntityBrandData_Company_Fragment | EntityBrandData_Theater_Fragment | EntityBrandData_Movie_Fragment | EntityBrandData_User_Fragment; +export type EntityBrandDataFragment = + | EntityBrandData_Company_Fragment + | EntityBrandData_Theater_Fragment + | EntityBrandData_Movie_Fragment + | EntityBrandData_User_Fragment +; type ElementMetadata_Company_Fragment = { __typename?: 'Company', createdAt: any, updatedAt: any, createdBy?: { __typename?: 'User', id: string, name: string } | null, updatedBy?: { __typename?: 'User', id: string, name: string } | null }; @@ -37,7 +47,12 @@ type ElementMetadata_Movie_Fragment = { __typename?: 'Movie', createdAt: any, up type ElementMetadata_User_Fragment = { __typename?: 'User', createdAt: any, updatedAt: any, createdBy?: { __typename?: 'User', id: string, name: string } | null, updatedBy?: { __typename?: 'User', id: string, name: string } | null }; -export type ElementMetadataFragment = ElementMetadata_Company_Fragment | ElementMetadata_Theater_Fragment | ElementMetadata_Movie_Fragment | ElementMetadata_User_Fragment; +export type ElementMetadataFragment = + | ElementMetadata_Company_Fragment + | ElementMetadata_Theater_Fragment + | ElementMetadata_Movie_Fragment + | ElementMetadata_User_Fragment +; " `; @@ -54,7 +69,10 @@ exports[`TypeScript Operations Plugin Issues #3064 - fragments over interfaces c type Venue_Transport_Fragment = { __typename?: 'Transport', id: string }; -export type VenueFragment = Venue_Hotel_Fragment | Venue_Transport_Fragment; +export type VenueFragment = + | Venue_Hotel_Fragment + | Venue_Transport_Fragment +; export type QQueryVariables = Exact<{ [key: string]: never; }>; @@ -118,7 +136,10 @@ type Venue_Hotel_Fragment = { __typename?: 'Hotel', id: string, gpsPosition: { _ type Venue_Transport_Fragment = { __typename?: 'Transport', id: string }; -export type VenueFragment = Venue_Hotel_Fragment | Venue_Transport_Fragment; +export type VenueFragment = + | Venue_Hotel_Fragment + | Venue_Transport_Fragment +; export type QQueryVariables = Exact<{ [key: string]: never; }>; @@ -139,13 +160,19 @@ exports[`TypeScript Operations Plugin Issues #6874 - generates types when parent "export type SnakeQueryQueryVariables = Exact<{ [key: string]: never; }>; -export type SnakeQueryQuery = { __typename?: 'Query', snake: { __typename?: 'Snake', name: string, features: { __typename?: 'SnakeFeatures', color: string, length: number } } | { __typename?: 'Error' } }; +export type SnakeQueryQuery = { __typename?: 'Query', snake: + | { __typename?: 'Snake', name: string, features: { __typename?: 'SnakeFeatures', color: string, length: number } } + | { __typename?: 'Error' } + }; type AnimalFragment_Bat_Fragment = { __typename?: 'Bat', features: { __typename?: 'BatFeatures', color: string, wingspan: number } }; type AnimalFragment_Snake_Fragment = { __typename?: 'Snake', features: { __typename?: 'SnakeFeatures', color: string, length: number } }; -export type AnimalFragmentFragment = AnimalFragment_Bat_Fragment | AnimalFragment_Snake_Fragment; +export type AnimalFragmentFragment = + | AnimalFragment_Bat_Fragment + | AnimalFragment_Snake_Fragment +; " `; @@ -153,7 +180,10 @@ exports[`TypeScript Operations Plugin Issues #8793 selecting __typename should n "export type SnakeQueryQueryVariables = Exact<{ [key: string]: never; }>; -export type SnakeQueryQuery = { __typename: 'Query', snake: { __typename: 'Snake' } | { __typename: 'Error' } }; +export type SnakeQueryQuery = { __typename: 'Query', snake: + | { __typename: 'Snake' } + | { __typename: 'Error' } + }; " `; @@ -220,10 +250,13 @@ export type AaaQueryVariables = Exact<{ [key: string]: never; }>; export type AaaQuery = ( { __typename?: 'Query' } - & { user: ( - { __typename?: 'User' } - & Pick - ) | { __typename?: 'Error' } } + & { user: + | ( + { __typename?: 'User' } + & Pick + ) + | { __typename?: 'Error' } + } ); " `; @@ -234,10 +267,13 @@ exports[`TypeScript Operations Plugin Selection Set Should generate the correct export type Unnamed_1_Query = ( { __typename?: 'Query' } - & { b?: Maybe<( - { __typename?: 'A' } - & Pick - ) | { __typename?: 'B' }> } + & { b?: Maybe< + | ( + { __typename?: 'A' } + & Pick + ) + | { __typename?: 'B' } + > } ); export type AFragment = ( @@ -255,28 +291,46 @@ export type BFragment = ( exports[`TypeScript Operations Plugin Selection Set Should have valid __typename usage and split types according to that (with usage) 1`] = ` "type NetRoute_Ipv4Route_Fragment = ( { __typename: 'IPV4Route' } - & { ipv4Address: Ipv4Route['address'], ipv4Gateway: Ipv4Route['gateway'] } + & { + ipv4Address: Ipv4Route['address'], + ipv4Gateway: Ipv4Route['gateway'], + } ); type NetRoute_Ipv6Route_Fragment = ( { __typename: 'IPV6Route' } - & { ipv6Address: Ipv6Route['address'], ipv6Gateway: Ipv6Route['gateway'] } + & { + ipv6Address: Ipv6Route['address'], + ipv6Gateway: Ipv6Route['gateway'], + } ); -export type NetRouteFragment = NetRoute_Ipv4Route_Fragment | NetRoute_Ipv6Route_Fragment; +export type NetRouteFragment = + | NetRoute_Ipv4Route_Fragment + | NetRoute_Ipv6Route_Fragment +; export type QqQueryVariables = Exact<{ [key: string]: never; }>; export type QqQuery = ( { __typename?: 'Query' } - & { routes: Array<( - { __typename: 'IPV4Route' } - & { ipv4Address: Ipv4Route['address'], ipv4Gateway: Ipv4Route['gateway'] } - ) | ( - { __typename: 'IPV6Route' } - & { ipv6Address: Ipv6Route['address'], ipv6Gateway: Ipv6Route['gateway'] } - )> } + & { routes: Array< + | ( + { __typename: 'IPV4Route' } + & { + ipv4Address: Ipv4Route['address'], + ipv4Gateway: Ipv4Route['gateway'], + } + ) + | ( + { __typename: 'IPV6Route' } + & { + ipv6Address: Ipv6Route['address'], + ipv6Gateway: Ipv6Route['gateway'], + } + ) + > } ); " `; @@ -284,19 +338,31 @@ export type QqQuery = ( exports[`TypeScript Operations Plugin Selection Set Should have valid __typename usage and split types according to that (with usage) 2`] = ` "type NetRoute_Ipv4Route_Fragment = ( { __typename: 'IPV4Route' } - & { ipv4Address: Ipv4Route['address'], ipv4Gateway: Ipv4Route['gateway'] } + & { + ipv4Address: Ipv4Route['address'], + ipv4Gateway: Ipv4Route['gateway'], + } ); type NetRoute_Ipv6Route_Fragment = ( { __typename: 'IPV6Route' } - & { ipv6Address: Ipv6Route['address'], ipv6Gateway: Ipv6Route['gateway'] } + & { + ipv6Address: Ipv6Route['address'], + ipv6Gateway: Ipv6Route['gateway'], + } ); -export type NetRouteFragment = NetRoute_Ipv4Route_Fragment | NetRoute_Ipv6Route_Fragment; +export type NetRouteFragment = + | NetRoute_Ipv4Route_Fragment + | NetRoute_Ipv6Route_Fragment +; export type TestFragment = ( { __typename?: 'IPV6Route' } - & { ipv6Address: Ipv6Route['address'], ipv6Gateway: Ipv6Route['gateway'] } + & { + ipv6Address: Ipv6Route['address'], + ipv6Gateway: Ipv6Route['gateway'], + } ); export type QqQueryVariables = Exact<{ [key: string]: never; }>; @@ -304,13 +370,22 @@ export type QqQueryVariables = Exact<{ [key: string]: never; }>; export type QqQuery = ( { __typename?: 'Query' } - & { routes: Array<( - { __typename: 'IPV4Route' } - & { ipv4Address: Ipv4Route['address'], ipv4Gateway: Ipv4Route['gateway'] } - ) | ( - { __typename: 'IPV6Route' } - & { ipv6Address: Ipv6Route['address'], ipv6Gateway: Ipv6Route['gateway'] } - )> } + & { routes: Array< + | ( + { __typename: 'IPV4Route' } + & { + ipv4Address: Ipv4Route['address'], + ipv4Gateway: Ipv4Route['gateway'], + } + ) + | ( + { __typename: 'IPV6Route' } + & { + ipv6Address: Ipv6Route['address'], + ipv6Gateway: Ipv6Route['gateway'], + } + ) + > } ); " `; @@ -336,20 +411,26 @@ type User_Jerry_Fragment = ( & Pick ); -export type UserFragment = User_Tom_Fragment | User_Jerry_Fragment; +export type UserFragment = + | User_Tom_Fragment + | User_Jerry_Fragment +; export type UserQueryQueryVariables = Exact<{ [key: string]: never; }>; export type UserQueryQuery = ( { __typename?: 'Query' } - & { user?: Maybe<( - { __typename?: 'Tom' } - & Pick - ) | ( - { __typename?: 'Jerry' } - & Pick - )> } + & { user?: Maybe< + | ( + { __typename?: 'Tom' } + & Pick + ) + | ( + { __typename?: 'Jerry' } + & Pick + ) + > } ); " `; @@ -397,17 +478,20 @@ export type SearchPopularQueryVariables = Exact<{ [key: string]: never; }>; export type SearchPopularQuery = ( { __typename?: 'Query' } - & { search?: Maybe - ) | ( - { __typename?: 'DimValue' } - & Pick - & { dimension?: Maybe<( + & { search?: Maybe - )> } - )>> } + ) + | ( + { __typename?: 'DimValue' } + & Pick + & { dimension?: Maybe<( + { __typename?: 'Dimension' } + & Pick + )> } + ) + >> } ); " `; @@ -418,20 +502,24 @@ exports[`TypeScript Operations Plugin Union & Interfaces Should handle union sel export type UserQueryQuery = ( { __typename?: 'Query' } - & { user: ( - { __typename?: 'User' } - & Pick - ) | ( - { __typename?: 'Error2' } - & Pick - ) | ( - { __typename?: 'Error3' } - & Pick - & { info?: Maybe<( - { __typename?: 'AdditionalInfo' } - & Pick - )> } - ) } + & { user: + | ( + { __typename?: 'User' } + & Pick + ) + | ( + { __typename?: 'Error2' } + & Pick + ) + | ( + { __typename?: 'Error3' } + & Pick + & { info?: Maybe<( + { __typename?: 'AdditionalInfo' } + & Pick + )> } + ) + } ); export type AdditionalInfoFragment = ( @@ -454,7 +542,11 @@ type UserResult1_Error3_Fragment = ( )> } ); -export type UserResult1Fragment = UserResult1_User_Fragment | UserResult1_Error2_Fragment | UserResult1_Error3_Fragment; +export type UserResult1Fragment = + | UserResult1_User_Fragment + | UserResult1_Error2_Fragment + | UserResult1_Error3_Fragment +; type UserResult_User_Fragment = ( { __typename?: 'User' } @@ -468,7 +560,11 @@ type UserResult_Error2_Fragment = ( type UserResult_Error3_Fragment = { __typename?: 'Error3' }; -export type UserResultFragment = UserResult_User_Fragment | UserResult_Error2_Fragment | UserResult_Error3_Fragment; +export type UserResultFragment = + | UserResult_User_Fragment + | UserResult_Error2_Fragment + | UserResult_Error3_Fragment +; " `; @@ -532,20 +628,24 @@ export type UserQueryQueryVariables = Exact<{ [key: string]: never; }>; export type UserQueryQuery = ( { __typename?: 'Query' } - & { user: ( - { __typename?: 'User' } - & Pick - ) | ( - { __typename?: 'Error2' } - & Pick - ) | ( - { __typename?: 'Error3' } - & Pick - & { info?: Maybe<( - { __typename?: 'AdditionalInfo' } - & Pick - )> } - ) } + & { user: + | ( + { __typename?: 'User' } + & Pick + ) + | ( + { __typename?: 'Error2' } + & Pick + ) + | ( + { __typename?: 'Error3' } + & Pick + & { info?: Maybe<( + { __typename?: 'AdditionalInfo' } + & Pick + )> } + ) + } ); function t(q: UserQueryQuery) { @@ -629,20 +729,30 @@ export type UserQueryQueryVariables = Exact<{ [key: string]: never; }>; export type UserQueryQuery = ( { __typename?: 'Query' } - & { user: ( - { __typename?: 'User' } - & Pick - ) | ( - { __typename?: 'Error2' } - & Pick - ) | ( - { __typename?: 'Error3' } - & Pick - & { info?: Maybe<( - { __typename?: 'AdditionalInfo' } - & Pick - )> } - ) } + & { user: + | ( + { __typename?: 'User' } + & Pick< + User, + | 'id' + | 'test2' + | 'login' + | 'test' + > + ) + | ( + { __typename?: 'Error2' } + & Pick + ) + | ( + { __typename?: 'Error3' } + & Pick + & { info?: Maybe<( + { __typename?: 'AdditionalInfo' } + & Pick + )> } + ) + } ); function t(q: UserQueryQuery) { diff --git a/packages/plugins/typescript/operations/tests/extract-all-types.spec.ts b/packages/plugins/typescript/operations/tests/extract-all-types.spec.ts index 4389ec63a87..986cb562773 100644 --- a/packages/plugins/typescript/operations/tests/extract-all-types.spec.ts +++ b/packages/plugins/typescript/operations/tests/extract-all-types.spec.ts @@ -95,7 +95,10 @@ describe('extractAllFieldsToTypes: true', () => { joinDate: any }; - export type UserFragment = UserFragment_DummyUser | UserFragment_ActiveUser; + export type UserFragment = + | UserFragment_DummyUser + | UserFragment_ActiveUser + ; export type MeFragment_ActiveUser_parentUser_DummyUser = { __typename: 'DummyUser', @@ -109,7 +112,10 @@ describe('extractAllFieldsToTypes: true', () => { joinDate: any }; - export type MeFragment_ActiveUser_parentUser = MeFragment_ActiveUser_parentUser_DummyUser | MeFragment_ActiveUser_parentUser_ActiveUser; + export type MeFragment_ActiveUser_parentUser = + | MeFragment_ActiveUser_parentUser_DummyUser + | MeFragment_ActiveUser_parentUser_ActiveUser + ; type Me_DummyUser_Fragment = { __typename: 'DummyUser', @@ -125,7 +131,10 @@ describe('extractAllFieldsToTypes: true', () => { parentUser: MeFragment_ActiveUser_parentUser }; - export type MeFragment = Me_DummyUser_Fragment | Me_ActiveUser_Fragment; + export type MeFragment = + | Me_DummyUser_Fragment + | Me_ActiveUser_Fragment + ; export type OverlappingFieldsMergingTestQuery_me_DummyUser = { __typename: 'DummyUser', @@ -141,7 +150,10 @@ describe('extractAllFieldsToTypes: true', () => { parentUser: MeFragment_ActiveUser_parentUser }; - export type OverlappingFieldsMergingTestQuery_me = OverlappingFieldsMergingTestQuery_me_DummyUser | OverlappingFieldsMergingTestQuery_me_ActiveUser; + export type OverlappingFieldsMergingTestQuery_me = + | OverlappingFieldsMergingTestQuery_me_DummyUser + | OverlappingFieldsMergingTestQuery_me_ActiveUser + ; export type OverlappingFieldsMergingTestQuery_Query = { __typename: 'Query', @@ -168,7 +180,10 @@ describe('extractAllFieldsToTypes: true', () => { parentUser: MeFragment_ActiveUser_parentUser }; - export type NestedOverlappingFieldsMergingTestQuery_me = NestedOverlappingFieldsMergingTestQuery_me_DummyUser | NestedOverlappingFieldsMergingTestQuery_me_ActiveUser; + export type NestedOverlappingFieldsMergingTestQuery_me = + | NestedOverlappingFieldsMergingTestQuery_me_DummyUser + | NestedOverlappingFieldsMergingTestQuery_me_ActiveUser + ; export type NestedOverlappingFieldsMergingTestQuery_Query = { __typename: 'Query', @@ -402,7 +417,15 @@ describe('extractAllFieldsToTypes: true', () => { export type ConversationBotSolutionFragment_BotSolution_originatedFrom_NotImplementedOriginatedFrom = { __typename: 'NotImplementedOriginatedFrom' }; - export type ConversationBotSolutionFragment_BotSolution_originatedFrom = ConversationBotSolutionFragment_BotSolution_originatedFrom_EmailInteraction | ConversationBotSolutionFragment_BotSolution_originatedFrom_CustomChannelInteraction | ConversationBotSolutionFragment_BotSolution_originatedFrom_TalkInteraction | ConversationBotSolutionFragment_BotSolution_originatedFrom_NativeMessagingInteraction | ConversationBotSolutionFragment_BotSolution_originatedFrom_WhatsAppInteraction | ConversationBotSolutionFragment_BotSolution_originatedFrom_WeChatInteraction | ConversationBotSolutionFragment_BotSolution_originatedFrom_NotImplementedOriginatedFrom; + export type ConversationBotSolutionFragment_BotSolution_originatedFrom = + | ConversationBotSolutionFragment_BotSolution_originatedFrom_EmailInteraction + | ConversationBotSolutionFragment_BotSolution_originatedFrom_CustomChannelInteraction + | ConversationBotSolutionFragment_BotSolution_originatedFrom_TalkInteraction + | ConversationBotSolutionFragment_BotSolution_originatedFrom_NativeMessagingInteraction + | ConversationBotSolutionFragment_BotSolution_originatedFrom_WhatsAppInteraction + | ConversationBotSolutionFragment_BotSolution_originatedFrom_WeChatInteraction + | ConversationBotSolutionFragment_BotSolution_originatedFrom_NotImplementedOriginatedFrom + ; export type ConversationBotSolutionFragment = { __typename: 'BotSolution', id: string, timestamp: string, article: ConversationBotSolutionFragment_BotSolution_article_ArchivedArticle, originatedFrom: ConversationBotSolutionFragment_BotSolution_originatedFrom }; @@ -424,7 +447,15 @@ describe('extractAllFieldsToTypes: true', () => { export type ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_NotImplementedOriginatedFrom = { __typename: 'NotImplementedOriginatedFrom' }; - export type ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom = ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_EmailInteraction | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_CustomChannelInteraction | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_TalkInteraction | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_NativeMessagingInteraction | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_WhatsAppInteraction | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_WeChatInteraction | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_NotImplementedOriginatedFrom; + export type ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom = + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_EmailInteraction + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_CustomChannelInteraction + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_TalkInteraction + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_NativeMessagingInteraction + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_WhatsAppInteraction + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_WeChatInteraction + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_NotImplementedOriginatedFrom + ; type ConversationConversationEvent_BrokenConversationEvent_Fragment = { __typename: 'BrokenConversationEvent', id: string, timestamp: string, originatedFrom: ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom }; @@ -432,7 +463,11 @@ describe('extractAllFieldsToTypes: true', () => { type ConversationConversationEvent_TalkPublicCallSummary_Fragment = { __typename: 'TalkPublicCallSummary', id: string, timestamp: string, originatedFrom: ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom }; - export type ConversationConversationEventFragment = ConversationConversationEvent_BrokenConversationEvent_Fragment | ConversationConversationEvent_BotSolution_Fragment | ConversationConversationEvent_TalkPublicCallSummary_Fragment; + export type ConversationConversationEventFragment = + | ConversationConversationEvent_BrokenConversationEvent_Fragment + | ConversationConversationEvent_BotSolution_Fragment + | ConversationConversationEvent_TalkPublicCallSummary_Fragment + ; type MessageEnvelopeData_EmailInteraction_Fragment = { __typename: 'EmailInteraction', originalEmailURLPath: string }; @@ -448,7 +483,15 @@ describe('extractAllFieldsToTypes: true', () => { type MessageEnvelopeData_NotImplementedOriginatedFrom_Fragment = { __typename: 'NotImplementedOriginatedFrom' }; - export type MessageEnvelopeDataFragment = MessageEnvelopeData_EmailInteraction_Fragment | MessageEnvelopeData_CustomChannelInteraction_Fragment | MessageEnvelopeData_TalkInteraction_Fragment | MessageEnvelopeData_NativeMessagingInteraction_Fragment | MessageEnvelopeData_WhatsAppInteraction_Fragment | MessageEnvelopeData_WeChatInteraction_Fragment | MessageEnvelopeData_NotImplementedOriginatedFrom_Fragment; + export type MessageEnvelopeDataFragment = + | MessageEnvelopeData_EmailInteraction_Fragment + | MessageEnvelopeData_CustomChannelInteraction_Fragment + | MessageEnvelopeData_TalkInteraction_Fragment + | MessageEnvelopeData_NativeMessagingInteraction_Fragment + | MessageEnvelopeData_WhatsAppInteraction_Fragment + | MessageEnvelopeData_WeChatInteraction_Fragment + | MessageEnvelopeData_NotImplementedOriginatedFrom_Fragment + ; export type AnyChannelOriginatedFromFragment = { __typename: 'CustomChannelInteraction', externalId: string, timestamp: string, resourceType: string }; @@ -466,7 +509,15 @@ describe('extractAllFieldsToTypes: true', () => { type ConversationOriginatedFrom_NotImplementedOriginatedFrom_Fragment = { __typename: 'NotImplementedOriginatedFrom' }; - export type ConversationOriginatedFromFragment = ConversationOriginatedFrom_EmailInteraction_Fragment | ConversationOriginatedFrom_CustomChannelInteraction_Fragment | ConversationOriginatedFrom_TalkInteraction_Fragment | ConversationOriginatedFrom_NativeMessagingInteraction_Fragment | ConversationOriginatedFrom_WhatsAppInteraction_Fragment | ConversationOriginatedFrom_WeChatInteraction_Fragment | ConversationOriginatedFrom_NotImplementedOriginatedFrom_Fragment; + export type ConversationOriginatedFromFragment = + | ConversationOriginatedFrom_EmailInteraction_Fragment + | ConversationOriginatedFrom_CustomChannelInteraction_Fragment + | ConversationOriginatedFrom_TalkInteraction_Fragment + | ConversationOriginatedFrom_NativeMessagingInteraction_Fragment + | ConversationOriginatedFrom_WhatsAppInteraction_Fragment + | ConversationOriginatedFrom_WeChatInteraction_Fragment + | ConversationOriginatedFrom_NotImplementedOriginatedFrom_Fragment + ; export type ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_EmailInteraction = { __typename: 'EmailInteraction', originalEmailURLPath: string }; @@ -482,7 +533,15 @@ describe('extractAllFieldsToTypes: true', () => { export type ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_NotImplementedOriginatedFrom = { __typename: 'NotImplementedOriginatedFrom' }; - export type ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom = ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_EmailInteraction | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_CustomChannelInteraction | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_TalkInteraction | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_NativeMessagingInteraction | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_WhatsAppInteraction | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_WeChatInteraction | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_NotImplementedOriginatedFrom; + export type ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom = + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_EmailInteraction + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_CustomChannelInteraction + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_TalkInteraction + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_NativeMessagingInteraction + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_WhatsAppInteraction + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_WeChatInteraction + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_NotImplementedOriginatedFrom + ; export type ConversationTalkPublicCallSummaryFragment = { __typename: 'TalkPublicCallSummary', id: string, timestamp: string, summary: string, originatedFrom: ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom }; " @@ -528,7 +587,12 @@ describe('extractAllFieldsToTypes: true', () => { & { __typename: 'NativeMessagingInteraction' | 'WhatsAppInteraction' | 'WeChatInteraction' } ); - export type ConversationBotSolutionFragment_BotSolution_originatedFrom = ConversationBotSolutionFragment_BotSolution_originatedFrom_EmailInteraction | ConversationBotSolutionFragment_BotSolution_originatedFrom_CustomChannelInteraction | ConversationBotSolutionFragment_BotSolution_originatedFrom_TalkInteraction_NotImplementedOriginatedFrom | ConversationBotSolutionFragment_BotSolution_originatedFrom_NativeMessagingInteraction_WhatsAppInteraction_WeChatInteraction; + export type ConversationBotSolutionFragment_BotSolution_originatedFrom = + | ConversationBotSolutionFragment_BotSolution_originatedFrom_EmailInteraction + | ConversationBotSolutionFragment_BotSolution_originatedFrom_CustomChannelInteraction + | ConversationBotSolutionFragment_BotSolution_originatedFrom_TalkInteraction_NotImplementedOriginatedFrom + | ConversationBotSolutionFragment_BotSolution_originatedFrom_NativeMessagingInteraction_WhatsAppInteraction_WeChatInteraction + ; export type ConversationBotSolutionFragment = ( { id: string, timestamp: string, article: ConversationBotSolutionFragment_BotSolution_article_ArchivedArticle, originatedFrom: ConversationBotSolutionFragment_BotSolution_originatedFrom } @@ -562,7 +626,12 @@ describe('extractAllFieldsToTypes: true', () => { & { __typename: 'NativeMessagingInteraction' | 'WhatsAppInteraction' | 'WeChatInteraction' } ); - export type ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom = ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_EmailInteraction | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_CustomChannelInteraction | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_TalkInteraction_NotImplementedOriginatedFrom | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_NativeMessagingInteraction_WhatsAppInteraction_WeChatInteraction; + export type ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom = + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_EmailInteraction + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_CustomChannelInteraction + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_TalkInteraction_NotImplementedOriginatedFrom + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_NativeMessagingInteraction_WhatsAppInteraction_WeChatInteraction + ; export type ConversationConversationEventFragment = ( { id: string, timestamp: string, originatedFrom: ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom } @@ -576,7 +645,10 @@ describe('extractAllFieldsToTypes: true', () => { type MessageEnvelopeData_8FBboKcmuva72FpaH1zuPdoYyrlyvueTn9fqP1dFi_Fragment = { __typename: 'CustomChannelInteraction' | 'TalkInteraction' | 'NativeMessagingInteraction' | 'WhatsAppInteraction' | 'WeChatInteraction' | 'NotImplementedOriginatedFrom' }; - export type MessageEnvelopeDataFragment = MessageEnvelopeData_EmailInteraction_Fragment | MessageEnvelopeData_8FBboKcmuva72FpaH1zuPdoYyrlyvueTn9fqP1dFi_Fragment; + export type MessageEnvelopeDataFragment = + | MessageEnvelopeData_EmailInteraction_Fragment + | MessageEnvelopeData_8FBboKcmuva72FpaH1zuPdoYyrlyvueTn9fqP1dFi_Fragment + ; export type AnyChannelOriginatedFromFragment = ( { externalId: string, timestamp: string, resourceType: string } @@ -600,7 +672,12 @@ describe('extractAllFieldsToTypes: true', () => { & { __typename: 'NativeMessagingInteraction' | 'WhatsAppInteraction' | 'WeChatInteraction' } ); - export type ConversationOriginatedFromFragment = ConversationOriginatedFrom_EmailInteraction_Fragment | ConversationOriginatedFrom_CustomChannelInteraction_Fragment | ConversationOriginatedFrom_TalkInteraction_NotImplementedOriginatedFrom_Fragment | ConversationOriginatedFrom_NativeMessagingInteraction_WhatsAppInteraction_WeChatInteraction_Fragment; + export type ConversationOriginatedFromFragment = + | ConversationOriginatedFrom_EmailInteraction_Fragment + | ConversationOriginatedFrom_CustomChannelInteraction_Fragment + | ConversationOriginatedFrom_TalkInteraction_NotImplementedOriginatedFrom_Fragment + | ConversationOriginatedFrom_NativeMessagingInteraction_WhatsAppInteraction_WeChatInteraction_Fragment + ; export type ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_EmailInteraction = ( { originalEmailURLPath: string } @@ -624,7 +701,13 @@ describe('extractAllFieldsToTypes: true', () => { export type ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_NotImplementedOriginatedFrom = { __typename: 'NotImplementedOriginatedFrom' }; - export type ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom = ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_EmailInteraction | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_CustomChannelInteraction | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_TalkInteraction | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_NativeMessagingInteraction_WhatsAppInteraction_WeChatInteraction | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_NotImplementedOriginatedFrom; + export type ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom = + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_EmailInteraction + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_CustomChannelInteraction + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_TalkInteraction + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_NativeMessagingInteraction_WhatsAppInteraction_WeChatInteraction + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_NotImplementedOriginatedFrom + ; export type ConversationTalkPublicCallSummaryFragment = ( { id: string, timestamp: string, summary: string, originatedFrom: ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom } @@ -688,7 +771,15 @@ describe('extractAllFieldsToTypes: true', () => { & ConversationOriginatedFrom_NotImplementedOriginatedFrom_Fragment ); - export type ConversationBotSolutionFragment_BotSolution_originatedFrom = ConversationBotSolutionFragment_BotSolution_originatedFrom_EmailInteraction | ConversationBotSolutionFragment_BotSolution_originatedFrom_CustomChannelInteraction | ConversationBotSolutionFragment_BotSolution_originatedFrom_TalkInteraction | ConversationBotSolutionFragment_BotSolution_originatedFrom_NativeMessagingInteraction | ConversationBotSolutionFragment_BotSolution_originatedFrom_WhatsAppInteraction | ConversationBotSolutionFragment_BotSolution_originatedFrom_WeChatInteraction | ConversationBotSolutionFragment_BotSolution_originatedFrom_NotImplementedOriginatedFrom; + export type ConversationBotSolutionFragment_BotSolution_originatedFrom = + | ConversationBotSolutionFragment_BotSolution_originatedFrom_EmailInteraction + | ConversationBotSolutionFragment_BotSolution_originatedFrom_CustomChannelInteraction + | ConversationBotSolutionFragment_BotSolution_originatedFrom_TalkInteraction + | ConversationBotSolutionFragment_BotSolution_originatedFrom_NativeMessagingInteraction + | ConversationBotSolutionFragment_BotSolution_originatedFrom_WhatsAppInteraction + | ConversationBotSolutionFragment_BotSolution_originatedFrom_WeChatInteraction + | ConversationBotSolutionFragment_BotSolution_originatedFrom_NotImplementedOriginatedFrom + ; export type ConversationBotSolutionFragment = ( { __typename: 'BotSolution', id: string, article: ConversationBotSolutionFragment_BotSolution_article_ArchivedArticle, originatedFrom: ConversationBotSolutionFragment_BotSolution_originatedFrom } @@ -734,7 +825,15 @@ describe('extractAllFieldsToTypes: true', () => { & ConversationOriginatedFrom_NotImplementedOriginatedFrom_Fragment ); - export type ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom = ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_EmailInteraction | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_CustomChannelInteraction | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_TalkInteraction | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_NativeMessagingInteraction | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_WhatsAppInteraction | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_WeChatInteraction | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_NotImplementedOriginatedFrom; + export type ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom = + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_EmailInteraction + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_CustomChannelInteraction + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_TalkInteraction + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_NativeMessagingInteraction + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_WhatsAppInteraction + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_WeChatInteraction + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_NotImplementedOriginatedFrom + ; type ConversationConversationEvent_BrokenConversationEvent_Fragment = { __typename: 'BrokenConversationEvent', id: string, timestamp: string, originatedFrom: ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom }; @@ -742,7 +841,11 @@ describe('extractAllFieldsToTypes: true', () => { type ConversationConversationEvent_TalkPublicCallSummary_Fragment = { __typename: 'TalkPublicCallSummary', id: string, timestamp: string, originatedFrom: ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom }; - export type ConversationConversationEventFragment = ConversationConversationEvent_BrokenConversationEvent_Fragment | ConversationConversationEvent_BotSolution_Fragment | ConversationConversationEvent_TalkPublicCallSummary_Fragment; + export type ConversationConversationEventFragment = + | ConversationConversationEvent_BrokenConversationEvent_Fragment + | ConversationConversationEvent_BotSolution_Fragment + | ConversationConversationEvent_TalkPublicCallSummary_Fragment + ; type MessageEnvelopeData_EmailInteraction_Fragment = { __typename: 'EmailInteraction', originalEmailURLPath: string }; @@ -758,7 +861,15 @@ describe('extractAllFieldsToTypes: true', () => { type MessageEnvelopeData_NotImplementedOriginatedFrom_Fragment = { __typename: 'NotImplementedOriginatedFrom' }; - export type MessageEnvelopeDataFragment = MessageEnvelopeData_EmailInteraction_Fragment | MessageEnvelopeData_CustomChannelInteraction_Fragment | MessageEnvelopeData_TalkInteraction_Fragment | MessageEnvelopeData_NativeMessagingInteraction_Fragment | MessageEnvelopeData_WhatsAppInteraction_Fragment | MessageEnvelopeData_WeChatInteraction_Fragment | MessageEnvelopeData_NotImplementedOriginatedFrom_Fragment; + export type MessageEnvelopeDataFragment = + | MessageEnvelopeData_EmailInteraction_Fragment + | MessageEnvelopeData_CustomChannelInteraction_Fragment + | MessageEnvelopeData_TalkInteraction_Fragment + | MessageEnvelopeData_NativeMessagingInteraction_Fragment + | MessageEnvelopeData_WhatsAppInteraction_Fragment + | MessageEnvelopeData_WeChatInteraction_Fragment + | MessageEnvelopeData_NotImplementedOriginatedFrom_Fragment + ; export type AnyChannelOriginatedFromFragment = { __typename: 'CustomChannelInteraction', externalId: string, timestamp: string, resourceType: string }; @@ -798,7 +909,15 @@ describe('extractAllFieldsToTypes: true', () => { & MessageEnvelopeData_NotImplementedOriginatedFrom_Fragment ); - export type ConversationOriginatedFromFragment = ConversationOriginatedFrom_EmailInteraction_Fragment | ConversationOriginatedFrom_CustomChannelInteraction_Fragment | ConversationOriginatedFrom_TalkInteraction_Fragment | ConversationOriginatedFrom_NativeMessagingInteraction_Fragment | ConversationOriginatedFrom_WhatsAppInteraction_Fragment | ConversationOriginatedFrom_WeChatInteraction_Fragment | ConversationOriginatedFrom_NotImplementedOriginatedFrom_Fragment; + export type ConversationOriginatedFromFragment = + | ConversationOriginatedFrom_EmailInteraction_Fragment + | ConversationOriginatedFrom_CustomChannelInteraction_Fragment + | ConversationOriginatedFrom_TalkInteraction_Fragment + | ConversationOriginatedFrom_NativeMessagingInteraction_Fragment + | ConversationOriginatedFrom_WhatsAppInteraction_Fragment + | ConversationOriginatedFrom_WeChatInteraction_Fragment + | ConversationOriginatedFrom_NotImplementedOriginatedFrom_Fragment + ; export type ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_EmailInteraction = { __typename: 'EmailInteraction' }; @@ -817,7 +936,15 @@ describe('extractAllFieldsToTypes: true', () => { export type ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_NotImplementedOriginatedFrom = { __typename: 'NotImplementedOriginatedFrom' }; - export type ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom = ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_EmailInteraction | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_CustomChannelInteraction | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_TalkInteraction | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_NativeMessagingInteraction | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_WhatsAppInteraction | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_WeChatInteraction | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_NotImplementedOriginatedFrom; + export type ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom = + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_EmailInteraction + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_CustomChannelInteraction + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_TalkInteraction + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_NativeMessagingInteraction + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_WhatsAppInteraction + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_WeChatInteraction + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_NotImplementedOriginatedFrom + ; export type ConversationTalkPublicCallSummaryFragment = ( { __typename: 'TalkPublicCallSummary', id: string, originatedFrom: ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom } @@ -882,7 +1009,15 @@ describe('extractAllFieldsToTypes: true', () => { & { ' $fragmentRefs'?: { 'ConversationOriginatedFrom_NotImplementedOriginatedFrom_Fragment': ConversationOriginatedFrom_NotImplementedOriginatedFrom_Fragment } } ); - export type ConversationBotSolutionFragment_BotSolution_originatedFrom = ConversationBotSolutionFragment_BotSolution_originatedFrom_EmailInteraction | ConversationBotSolutionFragment_BotSolution_originatedFrom_CustomChannelInteraction | ConversationBotSolutionFragment_BotSolution_originatedFrom_TalkInteraction | ConversationBotSolutionFragment_BotSolution_originatedFrom_NativeMessagingInteraction | ConversationBotSolutionFragment_BotSolution_originatedFrom_WhatsAppInteraction | ConversationBotSolutionFragment_BotSolution_originatedFrom_WeChatInteraction | ConversationBotSolutionFragment_BotSolution_originatedFrom_NotImplementedOriginatedFrom; + export type ConversationBotSolutionFragment_BotSolution_originatedFrom = + | ConversationBotSolutionFragment_BotSolution_originatedFrom_EmailInteraction + | ConversationBotSolutionFragment_BotSolution_originatedFrom_CustomChannelInteraction + | ConversationBotSolutionFragment_BotSolution_originatedFrom_TalkInteraction + | ConversationBotSolutionFragment_BotSolution_originatedFrom_NativeMessagingInteraction + | ConversationBotSolutionFragment_BotSolution_originatedFrom_WhatsAppInteraction + | ConversationBotSolutionFragment_BotSolution_originatedFrom_WeChatInteraction + | ConversationBotSolutionFragment_BotSolution_originatedFrom_NotImplementedOriginatedFrom + ; export type ConversationBotSolutionFragment = ( { __typename: 'BotSolution', id: string, article: ConversationBotSolutionFragment_BotSolution_article_ArchivedArticle, originatedFrom: ConversationBotSolutionFragment_BotSolution_originatedFrom } @@ -928,7 +1063,15 @@ describe('extractAllFieldsToTypes: true', () => { & { ' $fragmentRefs'?: { 'ConversationOriginatedFrom_NotImplementedOriginatedFrom_Fragment': ConversationOriginatedFrom_NotImplementedOriginatedFrom_Fragment } } ); - export type ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom = ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_EmailInteraction | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_CustomChannelInteraction | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_TalkInteraction | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_NativeMessagingInteraction | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_WhatsAppInteraction | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_WeChatInteraction | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_NotImplementedOriginatedFrom; + export type ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom = + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_EmailInteraction + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_CustomChannelInteraction + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_TalkInteraction + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_NativeMessagingInteraction + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_WhatsAppInteraction + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_WeChatInteraction + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_NotImplementedOriginatedFrom + ; type ConversationConversationEvent_BrokenConversationEvent_Fragment = { __typename: 'BrokenConversationEvent', id: string, timestamp: string, originatedFrom: ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom } & { ' $fragmentName'?: 'ConversationConversationEvent_BrokenConversationEvent_Fragment' }; @@ -936,7 +1079,11 @@ describe('extractAllFieldsToTypes: true', () => { type ConversationConversationEvent_TalkPublicCallSummary_Fragment = { __typename: 'TalkPublicCallSummary', id: string, timestamp: string, originatedFrom: ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom } & { ' $fragmentName'?: 'ConversationConversationEvent_TalkPublicCallSummary_Fragment' }; - export type ConversationConversationEventFragment = ConversationConversationEvent_BrokenConversationEvent_Fragment | ConversationConversationEvent_BotSolution_Fragment | ConversationConversationEvent_TalkPublicCallSummary_Fragment; + export type ConversationConversationEventFragment = + | ConversationConversationEvent_BrokenConversationEvent_Fragment + | ConversationConversationEvent_BotSolution_Fragment + | ConversationConversationEvent_TalkPublicCallSummary_Fragment + ; type MessageEnvelopeData_EmailInteraction_Fragment = { __typename: 'EmailInteraction', originalEmailURLPath: string } & { ' $fragmentName'?: 'MessageEnvelopeData_EmailInteraction_Fragment' }; @@ -952,7 +1099,15 @@ describe('extractAllFieldsToTypes: true', () => { type MessageEnvelopeData_NotImplementedOriginatedFrom_Fragment = { __typename: 'NotImplementedOriginatedFrom' } & { ' $fragmentName'?: 'MessageEnvelopeData_NotImplementedOriginatedFrom_Fragment' }; - export type MessageEnvelopeDataFragment = MessageEnvelopeData_EmailInteraction_Fragment | MessageEnvelopeData_CustomChannelInteraction_Fragment | MessageEnvelopeData_TalkInteraction_Fragment | MessageEnvelopeData_NativeMessagingInteraction_Fragment | MessageEnvelopeData_WhatsAppInteraction_Fragment | MessageEnvelopeData_WeChatInteraction_Fragment | MessageEnvelopeData_NotImplementedOriginatedFrom_Fragment; + export type MessageEnvelopeDataFragment = + | MessageEnvelopeData_EmailInteraction_Fragment + | MessageEnvelopeData_CustomChannelInteraction_Fragment + | MessageEnvelopeData_TalkInteraction_Fragment + | MessageEnvelopeData_NativeMessagingInteraction_Fragment + | MessageEnvelopeData_WhatsAppInteraction_Fragment + | MessageEnvelopeData_WeChatInteraction_Fragment + | MessageEnvelopeData_NotImplementedOriginatedFrom_Fragment + ; export type AnyChannelOriginatedFromFragment = { __typename: 'CustomChannelInteraction', externalId: string, timestamp: string, resourceType: string } & { ' $fragmentName'?: 'AnyChannelOriginatedFromFragment' }; @@ -991,7 +1146,15 @@ describe('extractAllFieldsToTypes: true', () => { & { ' $fragmentRefs'?: { 'MessageEnvelopeData_NotImplementedOriginatedFrom_Fragment': MessageEnvelopeData_NotImplementedOriginatedFrom_Fragment } } ) & { ' $fragmentName'?: 'ConversationOriginatedFrom_NotImplementedOriginatedFrom_Fragment' }; - export type ConversationOriginatedFromFragment = ConversationOriginatedFrom_EmailInteraction_Fragment | ConversationOriginatedFrom_CustomChannelInteraction_Fragment | ConversationOriginatedFrom_TalkInteraction_Fragment | ConversationOriginatedFrom_NativeMessagingInteraction_Fragment | ConversationOriginatedFrom_WhatsAppInteraction_Fragment | ConversationOriginatedFrom_WeChatInteraction_Fragment | ConversationOriginatedFrom_NotImplementedOriginatedFrom_Fragment; + export type ConversationOriginatedFromFragment = + | ConversationOriginatedFrom_EmailInteraction_Fragment + | ConversationOriginatedFrom_CustomChannelInteraction_Fragment + | ConversationOriginatedFrom_TalkInteraction_Fragment + | ConversationOriginatedFrom_NativeMessagingInteraction_Fragment + | ConversationOriginatedFrom_WhatsAppInteraction_Fragment + | ConversationOriginatedFrom_WeChatInteraction_Fragment + | ConversationOriginatedFrom_NotImplementedOriginatedFrom_Fragment + ; export type ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_EmailInteraction = { __typename: 'EmailInteraction' }; @@ -1010,7 +1173,15 @@ describe('extractAllFieldsToTypes: true', () => { export type ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_NotImplementedOriginatedFrom = { __typename: 'NotImplementedOriginatedFrom' }; - export type ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom = ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_EmailInteraction | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_CustomChannelInteraction | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_TalkInteraction | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_NativeMessagingInteraction | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_WhatsAppInteraction | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_WeChatInteraction | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_NotImplementedOriginatedFrom; + export type ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom = + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_EmailInteraction + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_CustomChannelInteraction + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_TalkInteraction + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_NativeMessagingInteraction + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_WhatsAppInteraction + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_WeChatInteraction + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_NotImplementedOriginatedFrom + ; export type ConversationTalkPublicCallSummaryFragment = ( { __typename: 'TalkPublicCallSummary', id: string, originatedFrom: ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom } @@ -1038,7 +1209,13 @@ describe('extractAllFieldsToTypes: true', () => { expect(content).toMatchInlineSnapshot(` "export type ConversationBotSolutionFragment_BotSolution_article_ArchivedArticle = ( { __typename: 'ArchivedArticle' } - & Pick + & Pick< + ArchivedArticle, + | 'id' + | 'htmlUrl' + | 'title' + | 'url' + > ); export type ConversationBotSolutionFragment_BotSolution_originatedFrom_EmailInteraction = ( @@ -1070,12 +1247,294 @@ describe('extractAllFieldsToTypes: true', () => { export type ConversationBotSolutionFragment_BotSolution_originatedFrom_NotImplementedOriginatedFrom = { __typename: 'NotImplementedOriginatedFrom' }; - export type ConversationBotSolutionFragment_BotSolution_originatedFrom = ConversationBotSolutionFragment_BotSolution_originatedFrom_EmailInteraction | ConversationBotSolutionFragment_BotSolution_originatedFrom_CustomChannelInteraction | ConversationBotSolutionFragment_BotSolution_originatedFrom_TalkInteraction | ConversationBotSolutionFragment_BotSolution_originatedFrom_NativeMessagingInteraction | ConversationBotSolutionFragment_BotSolution_originatedFrom_WhatsAppInteraction | ConversationBotSolutionFragment_BotSolution_originatedFrom_WeChatInteraction | ConversationBotSolutionFragment_BotSolution_originatedFrom_NotImplementedOriginatedFrom; + export type ConversationBotSolutionFragment_BotSolution_originatedFrom = + | ConversationBotSolutionFragment_BotSolution_originatedFrom_EmailInteraction + | ConversationBotSolutionFragment_BotSolution_originatedFrom_CustomChannelInteraction + | ConversationBotSolutionFragment_BotSolution_originatedFrom_TalkInteraction + | ConversationBotSolutionFragment_BotSolution_originatedFrom_NativeMessagingInteraction + | ConversationBotSolutionFragment_BotSolution_originatedFrom_WhatsAppInteraction + | ConversationBotSolutionFragment_BotSolution_originatedFrom_WeChatInteraction + | ConversationBotSolutionFragment_BotSolution_originatedFrom_NotImplementedOriginatedFrom + ; export type ConversationBotSolutionFragment = ( { __typename: 'BotSolution' } & Pick - & { article: ConversationBotSolutionFragment_BotSolution_article_ArchivedArticle, originatedFrom: ConversationBotSolutionFragment_BotSolution_originatedFrom } + & { + article: ConversationBotSolutionFragment_BotSolution_article_ArchivedArticle, + originatedFrom: ConversationBotSolutionFragment_BotSolution_originatedFrom, + } + ); + + export type ConversationGenericCallSummaryFragment = ( + { __typename: 'TalkPublicCallSummary' } + & Pick + ); + + export type ConversationTalkInteractionFragment = ( + { __typename: 'TalkInteraction' } + & Pick + ); + + export type ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_EmailInteraction = ( + { __typename: 'EmailInteraction' } + & Pick + ); + + export type ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_CustomChannelInteraction = ( + { __typename: 'CustomChannelInteraction' } + & Pick + ); + + export type ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_TalkInteraction = { __typename: 'TalkInteraction' }; + + export type ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_NativeMessagingInteraction = ( + { __typename: 'NativeMessagingInteraction' } + & Pick + ); + + export type ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_WhatsAppInteraction = ( + { __typename: 'WhatsAppInteraction' } + & Pick + ); + + export type ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_WeChatInteraction = ( + { __typename: 'WeChatInteraction' } + & Pick + ); + + export type ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_NotImplementedOriginatedFrom = { __typename: 'NotImplementedOriginatedFrom' }; + + export type ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom = + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_EmailInteraction + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_CustomChannelInteraction + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_TalkInteraction + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_NativeMessagingInteraction + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_WhatsAppInteraction + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_WeChatInteraction + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_NotImplementedOriginatedFrom + ; + + type ConversationConversationEvent_BrokenConversationEvent_Fragment = ( + { __typename: 'BrokenConversationEvent' } + & Pick + & { originatedFrom: ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom } + ); + + type ConversationConversationEvent_BotSolution_Fragment = ( + { __typename: 'BotSolution' } + & Pick + & { originatedFrom: ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom } + ); + + type ConversationConversationEvent_TalkPublicCallSummary_Fragment = ( + { __typename: 'TalkPublicCallSummary' } + & Pick + & { originatedFrom: ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom } + ); + + export type ConversationConversationEventFragment = + | ConversationConversationEvent_BrokenConversationEvent_Fragment + | ConversationConversationEvent_BotSolution_Fragment + | ConversationConversationEvent_TalkPublicCallSummary_Fragment + ; + + type MessageEnvelopeData_EmailInteraction_Fragment = ( + { __typename: 'EmailInteraction' } + & Pick + ); + + type MessageEnvelopeData_CustomChannelInteraction_Fragment = { __typename: 'CustomChannelInteraction' }; + + type MessageEnvelopeData_TalkInteraction_Fragment = { __typename: 'TalkInteraction' }; + + type MessageEnvelopeData_NativeMessagingInteraction_Fragment = { __typename: 'NativeMessagingInteraction' }; + + type MessageEnvelopeData_WhatsAppInteraction_Fragment = { __typename: 'WhatsAppInteraction' }; + + type MessageEnvelopeData_WeChatInteraction_Fragment = { __typename: 'WeChatInteraction' }; + + type MessageEnvelopeData_NotImplementedOriginatedFrom_Fragment = { __typename: 'NotImplementedOriginatedFrom' }; + + export type MessageEnvelopeDataFragment = + | MessageEnvelopeData_EmailInteraction_Fragment + | MessageEnvelopeData_CustomChannelInteraction_Fragment + | MessageEnvelopeData_TalkInteraction_Fragment + | MessageEnvelopeData_NativeMessagingInteraction_Fragment + | MessageEnvelopeData_WhatsAppInteraction_Fragment + | MessageEnvelopeData_WeChatInteraction_Fragment + | MessageEnvelopeData_NotImplementedOriginatedFrom_Fragment + ; + + export type AnyChannelOriginatedFromFragment = ( + { __typename: 'CustomChannelInteraction' } + & Pick + ); + + type ConversationOriginatedFrom_EmailInteraction_Fragment = ( + { __typename: 'EmailInteraction' } + & Pick + ); + + type ConversationOriginatedFrom_CustomChannelInteraction_Fragment = ( + { __typename: 'CustomChannelInteraction' } + & Pick + ); + + type ConversationOriginatedFrom_TalkInteraction_Fragment = { __typename: 'TalkInteraction' }; + + type ConversationOriginatedFrom_NativeMessagingInteraction_Fragment = ( + { __typename: 'NativeMessagingInteraction' } + & Pick + ); + + type ConversationOriginatedFrom_WhatsAppInteraction_Fragment = ( + { __typename: 'WhatsAppInteraction' } + & Pick + ); + + type ConversationOriginatedFrom_WeChatInteraction_Fragment = ( + { __typename: 'WeChatInteraction' } + & Pick + ); + + type ConversationOriginatedFrom_NotImplementedOriginatedFrom_Fragment = { __typename: 'NotImplementedOriginatedFrom' }; + + export type ConversationOriginatedFromFragment = + | ConversationOriginatedFrom_EmailInteraction_Fragment + | ConversationOriginatedFrom_CustomChannelInteraction_Fragment + | ConversationOriginatedFrom_TalkInteraction_Fragment + | ConversationOriginatedFrom_NativeMessagingInteraction_Fragment + | ConversationOriginatedFrom_WhatsAppInteraction_Fragment + | ConversationOriginatedFrom_WeChatInteraction_Fragment + | ConversationOriginatedFrom_NotImplementedOriginatedFrom_Fragment + ; + + export type ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_EmailInteraction = ( + { __typename: 'EmailInteraction' } + & Pick + ); + + export type ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_CustomChannelInteraction = ( + { __typename: 'CustomChannelInteraction' } + & Pick + ); + + export type ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_TalkInteraction = ( + { __typename: 'TalkInteraction' } + & Pick + ); + + export type ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_NativeMessagingInteraction = ( + { __typename: 'NativeMessagingInteraction' } + & Pick + ); + + export type ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_WhatsAppInteraction = ( + { __typename: 'WhatsAppInteraction' } + & Pick + ); + + export type ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_WeChatInteraction = ( + { __typename: 'WeChatInteraction' } + & Pick + ); + + export type ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_NotImplementedOriginatedFrom = { __typename: 'NotImplementedOriginatedFrom' }; + + export type ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom = + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_EmailInteraction + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_CustomChannelInteraction + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_TalkInteraction + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_NativeMessagingInteraction + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_WhatsAppInteraction + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_WeChatInteraction + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_NotImplementedOriginatedFrom + ; + + export type ConversationTalkPublicCallSummaryFragment = ( + { __typename: 'TalkPublicCallSummary' } + & Pick + & { originatedFrom: ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom } + ); + " + `); + + await validate(content, config, complexTestSchemaWithUnionsAndInterfaces); + }); + + it('should extract types from multiple fragments (preResolveTypes: false, printFieldsOnNewlines: true)', async () => { + const config: TypeScriptDocumentsPluginConfig = { + preResolveTypes: false, + extractAllFieldsToTypes: true, + nonOptionalTypename: true, + dedupeOperationSuffix: true, + printFieldsOnNewLines: true, + }; + const { content } = await plugin( + complexTestSchemaWithUnionsAndInterfaces, + [{ location: 'test-file.ts', document: fragmentsOnComplexSchema }], + config, + { outputFile: '' } + ); + expect(content).toMatchInlineSnapshot(` + "export type ConversationBotSolutionFragment_BotSolution_article_ArchivedArticle = ( + { __typename: 'ArchivedArticle' } + & Pick< + ArchivedArticle, + | 'id' + | 'htmlUrl' + | 'title' + | 'url' + > + ); + + export type ConversationBotSolutionFragment_BotSolution_originatedFrom_EmailInteraction = ( + { __typename: 'EmailInteraction' } + & Pick + ); + + export type ConversationBotSolutionFragment_BotSolution_originatedFrom_CustomChannelInteraction = ( + { __typename: 'CustomChannelInteraction' } + & Pick + ); + + export type ConversationBotSolutionFragment_BotSolution_originatedFrom_TalkInteraction = { __typename: 'TalkInteraction' }; + + export type ConversationBotSolutionFragment_BotSolution_originatedFrom_NativeMessagingInteraction = ( + { __typename: 'NativeMessagingInteraction' } + & Pick + ); + + export type ConversationBotSolutionFragment_BotSolution_originatedFrom_WhatsAppInteraction = ( + { __typename: 'WhatsAppInteraction' } + & Pick + ); + + export type ConversationBotSolutionFragment_BotSolution_originatedFrom_WeChatInteraction = ( + { __typename: 'WeChatInteraction' } + & Pick + ); + + export type ConversationBotSolutionFragment_BotSolution_originatedFrom_NotImplementedOriginatedFrom = { __typename: 'NotImplementedOriginatedFrom' }; + + export type ConversationBotSolutionFragment_BotSolution_originatedFrom = + | ConversationBotSolutionFragment_BotSolution_originatedFrom_EmailInteraction + | ConversationBotSolutionFragment_BotSolution_originatedFrom_CustomChannelInteraction + | ConversationBotSolutionFragment_BotSolution_originatedFrom_TalkInteraction + | ConversationBotSolutionFragment_BotSolution_originatedFrom_NativeMessagingInteraction + | ConversationBotSolutionFragment_BotSolution_originatedFrom_WhatsAppInteraction + | ConversationBotSolutionFragment_BotSolution_originatedFrom_WeChatInteraction + | ConversationBotSolutionFragment_BotSolution_originatedFrom_NotImplementedOriginatedFrom + ; + + export type ConversationBotSolutionFragment = ( + { __typename: 'BotSolution' } + & Pick + & { + article: ConversationBotSolutionFragment_BotSolution_article_ArchivedArticle, + originatedFrom: ConversationBotSolutionFragment_BotSolution_originatedFrom, + } ); export type ConversationGenericCallSummaryFragment = ( @@ -1117,7 +1576,15 @@ describe('extractAllFieldsToTypes: true', () => { export type ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_NotImplementedOriginatedFrom = { __typename: 'NotImplementedOriginatedFrom' }; - export type ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom = ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_EmailInteraction | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_CustomChannelInteraction | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_TalkInteraction | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_NativeMessagingInteraction | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_WhatsAppInteraction | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_WeChatInteraction | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_NotImplementedOriginatedFrom; + export type ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom = + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_EmailInteraction + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_CustomChannelInteraction + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_TalkInteraction + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_NativeMessagingInteraction + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_WhatsAppInteraction + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_WeChatInteraction + | ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom_NotImplementedOriginatedFrom + ; type ConversationConversationEvent_BrokenConversationEvent_Fragment = ( { __typename: 'BrokenConversationEvent' } @@ -1137,7 +1604,11 @@ describe('extractAllFieldsToTypes: true', () => { & { originatedFrom: ConversationConversationEventFragment_BrokenConversationEvent_originatedFrom } ); - export type ConversationConversationEventFragment = ConversationConversationEvent_BrokenConversationEvent_Fragment | ConversationConversationEvent_BotSolution_Fragment | ConversationConversationEvent_TalkPublicCallSummary_Fragment; + export type ConversationConversationEventFragment = + | ConversationConversationEvent_BrokenConversationEvent_Fragment + | ConversationConversationEvent_BotSolution_Fragment + | ConversationConversationEvent_TalkPublicCallSummary_Fragment + ; type MessageEnvelopeData_EmailInteraction_Fragment = ( { __typename: 'EmailInteraction' } @@ -1156,7 +1627,15 @@ describe('extractAllFieldsToTypes: true', () => { type MessageEnvelopeData_NotImplementedOriginatedFrom_Fragment = { __typename: 'NotImplementedOriginatedFrom' }; - export type MessageEnvelopeDataFragment = MessageEnvelopeData_EmailInteraction_Fragment | MessageEnvelopeData_CustomChannelInteraction_Fragment | MessageEnvelopeData_TalkInteraction_Fragment | MessageEnvelopeData_NativeMessagingInteraction_Fragment | MessageEnvelopeData_WhatsAppInteraction_Fragment | MessageEnvelopeData_WeChatInteraction_Fragment | MessageEnvelopeData_NotImplementedOriginatedFrom_Fragment; + export type MessageEnvelopeDataFragment = + | MessageEnvelopeData_EmailInteraction_Fragment + | MessageEnvelopeData_CustomChannelInteraction_Fragment + | MessageEnvelopeData_TalkInteraction_Fragment + | MessageEnvelopeData_NativeMessagingInteraction_Fragment + | MessageEnvelopeData_WhatsAppInteraction_Fragment + | MessageEnvelopeData_WeChatInteraction_Fragment + | MessageEnvelopeData_NotImplementedOriginatedFrom_Fragment + ; export type AnyChannelOriginatedFromFragment = ( { __typename: 'CustomChannelInteraction' } @@ -1192,7 +1671,15 @@ describe('extractAllFieldsToTypes: true', () => { type ConversationOriginatedFrom_NotImplementedOriginatedFrom_Fragment = { __typename: 'NotImplementedOriginatedFrom' }; - export type ConversationOriginatedFromFragment = ConversationOriginatedFrom_EmailInteraction_Fragment | ConversationOriginatedFrom_CustomChannelInteraction_Fragment | ConversationOriginatedFrom_TalkInteraction_Fragment | ConversationOriginatedFrom_NativeMessagingInteraction_Fragment | ConversationOriginatedFrom_WhatsAppInteraction_Fragment | ConversationOriginatedFrom_WeChatInteraction_Fragment | ConversationOriginatedFrom_NotImplementedOriginatedFrom_Fragment; + export type ConversationOriginatedFromFragment = + | ConversationOriginatedFrom_EmailInteraction_Fragment + | ConversationOriginatedFrom_CustomChannelInteraction_Fragment + | ConversationOriginatedFrom_TalkInteraction_Fragment + | ConversationOriginatedFrom_NativeMessagingInteraction_Fragment + | ConversationOriginatedFrom_WhatsAppInteraction_Fragment + | ConversationOriginatedFrom_WeChatInteraction_Fragment + | ConversationOriginatedFrom_NotImplementedOriginatedFrom_Fragment + ; export type ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_EmailInteraction = ( { __typename: 'EmailInteraction' } @@ -1226,7 +1713,15 @@ describe('extractAllFieldsToTypes: true', () => { export type ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_NotImplementedOriginatedFrom = { __typename: 'NotImplementedOriginatedFrom' }; - export type ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom = ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_EmailInteraction | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_CustomChannelInteraction | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_TalkInteraction | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_NativeMessagingInteraction | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_WhatsAppInteraction | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_WeChatInteraction | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_NotImplementedOriginatedFrom; + export type ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom = + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_EmailInteraction + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_CustomChannelInteraction + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_TalkInteraction + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_NativeMessagingInteraction + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_WhatsAppInteraction + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_WeChatInteraction + | ConversationTalkPublicCallSummaryFragment_TalkPublicCallSummary_originatedFrom_NotImplementedOriginatedFrom + ; export type ConversationTalkPublicCallSummaryFragment = ( { __typename: 'TalkPublicCallSummary' } diff --git a/packages/plugins/typescript/operations/tests/ts-documents.spec.ts b/packages/plugins/typescript/operations/tests/ts-documents.spec.ts index df5a48b697c..2185d59d425 100644 --- a/packages/plugins/typescript/operations/tests/ts-documents.spec.ts +++ b/packages/plugins/typescript/operations/tests/ts-documents.spec.ts @@ -984,10 +984,18 @@ describe('TypeScript Operations Plugin', () => { }); expect(content).toContain( - `export type Q1Query = { search: Array<{ __typename: 'Movie', id: string, title: string } | { __typename: 'Person', id: string, name: string }> };` + `\ +export type Q1Query = { search: Array< + | { __typename: 'Movie', id: string, title: string } + | { __typename: 'Person', id: string, name: string } + > };` ); expect(content).toContain( - `export type Q2Query = { search: Array<{ __typename: 'Movie', id: string, title: string } | { __typename: 'Person', id: string, name: string }> };` + `\ +export type Q2Query = { search: Array< + | { __typename: 'Movie', id: string, title: string } + | { __typename: 'Person', id: string, name: string } + > };` ); await validate(content, config, testSchema); }); @@ -5332,12 +5340,21 @@ function test(q: GetEntityBrandDataQuery): void { type CatFragment_Wolf_Fragment = {}; - export type CatFragmentFragment = CatFragment_Duck_Fragment | CatFragment_Lion_Fragment | CatFragment_Puma_Fragment | CatFragment_Wolf_Fragment; + export type CatFragmentFragment = + | CatFragment_Duck_Fragment + | CatFragment_Lion_Fragment + | CatFragment_Puma_Fragment + | CatFragment_Wolf_Fragment + ; export type KittyQueryVariables = Exact<{ [key: string]: never; }>; - export type KittyQuery = { animals: Array<{ id: string } | { id: string } | {}> }; + export type KittyQuery = { animals: Array< + | { id: string } + | { id: string } + | {} + > }; " `); }); @@ -5402,12 +5419,22 @@ function test(q: GetEntityBrandDataQuery): void { type CatFragment_Wolf_Fragment = { __typename?: 'Wolf' }; - export type CatFragmentFragment = CatFragment_Duck_Fragment | CatFragment_Lion_Fragment | CatFragment_Puma_Fragment | CatFragment_Wolf_Fragment; + export type CatFragmentFragment = + | CatFragment_Duck_Fragment + | CatFragment_Lion_Fragment + | CatFragment_Puma_Fragment + | CatFragment_Wolf_Fragment + ; export type KittyQueryVariables = Exact<{ [key: string]: never; }>; - export type KittyQuery = { __typename?: 'Query', animals: Array<{ __typename?: 'Duck' } | { __typename?: 'Lion', id: string } | { __typename?: 'Puma', id: string } | { __typename?: 'Wolf' }> }; + export type KittyQuery = { __typename?: 'Query', animals: Array< + | { __typename?: 'Duck' } + | { __typename?: 'Lion', id: string } + | { __typename?: 'Puma', id: string } + | { __typename?: 'Wolf' } + > }; " `); }); @@ -5884,16 +5911,20 @@ function test(q: GetEntityBrandDataQuery): void { "export type GetPeopleQueryVariables = Exact<{ [key: string]: never; }>; - export type GetPeopleQuery = { __typename?: 'Query', people: ( - { __typename?: 'Character' } - & { ' $fragmentRefs'?: { 'PeopleInfo_Character_Fragment': PeopleInfo_Character_Fragment } } - ) | ( - { __typename?: 'Jedi' } - & { ' $fragmentRefs'?: { 'PeopleInfo_Jedi_Fragment': PeopleInfo_Jedi_Fragment } } - ) | ( - { __typename?: 'Droid' } - & { ' $fragmentRefs'?: { 'PeopleInfo_Droid_Fragment': PeopleInfo_Droid_Fragment } } - ) }; + export type GetPeopleQuery = { __typename?: 'Query', people: + | ( + { __typename?: 'Character' } + & { ' $fragmentRefs'?: { 'PeopleInfo_Character_Fragment': PeopleInfo_Character_Fragment } } + ) + | ( + { __typename?: 'Jedi' } + & { ' $fragmentRefs'?: { 'PeopleInfo_Jedi_Fragment': PeopleInfo_Jedi_Fragment } } + ) + | ( + { __typename?: 'Droid' } + & { ' $fragmentRefs'?: { 'PeopleInfo_Droid_Fragment': PeopleInfo_Droid_Fragment } } + ) + }; type PeopleInfo_Character_Fragment = { __typename?: 'Character', name?: string | null } & { ' $fragmentName'?: 'PeopleInfo_Character_Fragment' }; @@ -5901,7 +5932,11 @@ function test(q: GetEntityBrandDataQuery): void { type PeopleInfo_Droid_Fragment = { __typename?: 'Droid', model?: string | null } & { ' $fragmentName'?: 'PeopleInfo_Droid_Fragment' }; - export type PeopleInfoFragment = PeopleInfo_Character_Fragment | PeopleInfo_Jedi_Fragment | PeopleInfo_Droid_Fragment; + export type PeopleInfoFragment = + | PeopleInfo_Character_Fragment + | PeopleInfo_Jedi_Fragment + | PeopleInfo_Droid_Fragment + ; " `); }); diff --git a/packages/plugins/typescript/resolvers/tests/__snapshots__/ts-resolvers.spec.ts.snap b/packages/plugins/typescript/resolvers/tests/__snapshots__/ts-resolvers.spec.ts.snap index 8783aac2cb1..c8cd18555b4 100644 --- a/packages/plugins/typescript/resolvers/tests/__snapshots__/ts-resolvers.spec.ts.snap +++ b/packages/plugins/typescript/resolvers/tests/__snapshots__/ts-resolvers.spec.ts.snap @@ -168,15 +168,27 @@ export type DirectiveResolverFn> = ResolversObject<{ - ChildUnion: ( Omit & { parent?: Maybe<_RefType['MyType']> } ) | ( MyOtherType ); - MyUnion: ( Omit & { unionChild?: Maybe<_RefType['ChildUnion']> } ) | ( MyOtherType ); + ChildUnion: + | ( Omit & { parent?: Maybe<_RefType['MyType']> } ) + | ( MyOtherType ) + ; + MyUnion: + | ( Omit & { unionChild?: Maybe<_RefType['ChildUnion']> } ) + | ( MyOtherType ) + ; }>; /** Mapping of interface types */ export type ResolversInterfaceTypes<_RefType extends Record> = ResolversObject<{ Node: ( SomeNode ); - AnotherNode: ( Omit & { unionChild?: Maybe<_RefType['ChildUnion']>, interfaceChild?: Maybe<_RefType['Node']> } ) | ( Omit & { unionChild?: Maybe<_RefType['ChildUnion']>, unionChildren: Array<_RefType['ChildUnion']>, interfaceChild?: Maybe<_RefType['Node']>, interfaceChildren: Array<_RefType['Node']> } ); - WithChild: ( Omit & { unionChild?: Maybe<_RefType['ChildUnion']>, interfaceChild?: Maybe<_RefType['Node']> } ) | ( Omit & { unionChild?: Maybe<_RefType['ChildUnion']>, unionChildren: Array<_RefType['ChildUnion']>, interfaceChild?: Maybe<_RefType['Node']>, interfaceChildren: Array<_RefType['Node']> } ); + AnotherNode: + | ( Omit & { unionChild?: Maybe<_RefType['ChildUnion']>, interfaceChild?: Maybe<_RefType['Node']> } ) + | ( Omit & { unionChild?: Maybe<_RefType['ChildUnion']>, unionChildren: Array<_RefType['ChildUnion']>, interfaceChild?: Maybe<_RefType['Node']>, interfaceChildren: Array<_RefType['Node']> } ) + ; + WithChild: + | ( Omit & { unionChild?: Maybe<_RefType['ChildUnion']>, interfaceChild?: Maybe<_RefType['Node']> } ) + | ( Omit & { unionChild?: Maybe<_RefType['ChildUnion']>, unionChildren: Array<_RefType['ChildUnion']>, interfaceChild?: Maybe<_RefType['Node']>, interfaceChildren: Array<_RefType['Node']> } ) + ; WithChildren: ( Omit & { unionChild?: Maybe<_RefType['ChildUnion']>, unionChildren: Array<_RefType['ChildUnion']>, interfaceChild?: Maybe<_RefType['Node']>, interfaceChildren: Array<_RefType['Node']> } ); }>; @@ -353,6 +365,269 @@ export type DirectiveResolvers = ResolversObject<{ " `; +exports[`TypeScript Resolvers Plugin Config namespacedImportName - should work correctly with imported namespaced type (printFieldsOnNewLines: true) 1`] = ` +"import { GraphQLResolveInfo, GraphQLScalarType, GraphQLScalarTypeConfig } from 'graphql'; +export type Omit = Pick>; +export type RequireFields = Omit & { [P in K]-?: NonNullable }; +export type WithIndex = TObject & Record; +export type ResolversObject = WithIndex; + +export type ResolverTypeWrapper = Promise | T; + + +export type ResolverWithResolve = { + resolve: ResolverFn; +}; +export type Resolver = ResolverFn | ResolverWithResolve; + +export type ResolverFn = ( + parent: TParent, + args: TArgs, + context: TContext, + info: GraphQLResolveInfo +) => Promise | TResult; + +export type SubscriptionSubscribeFn = ( + parent: TParent, + args: TArgs, + context: TContext, + info: GraphQLResolveInfo +) => AsyncIterable | Promise>; + +export type SubscriptionResolveFn = ( + parent: TParent, + args: TArgs, + context: TContext, + info: GraphQLResolveInfo +) => TResult | Promise; + +export interface SubscriptionSubscriberObject { + subscribe: SubscriptionSubscribeFn<{ [key in TKey]: TResult }, TParent, TContext, TArgs>; + resolve?: SubscriptionResolveFn; +} + +export interface SubscriptionResolverObject { + subscribe: SubscriptionSubscribeFn; + resolve: SubscriptionResolveFn; +} + +export type SubscriptionObject = + | SubscriptionSubscriberObject + | SubscriptionResolverObject; + +export type SubscriptionResolver = + | ((...args: any[]) => SubscriptionObject) + | SubscriptionObject; + +export type TypeResolveFn = ( + parent: TParent, + context: TContext, + info: GraphQLResolveInfo +) => Types.Maybe | Promise>; + +export type IsTypeOfResolverFn = (obj: T, context: TContext, info: GraphQLResolveInfo) => boolean | Promise; + +export type NextResolverFn = () => Promise; + +export type DirectiveResolverFn = ( + next: NextResolverFn, + parent: TParent, + args: TArgs, + context: TContext, + info: GraphQLResolveInfo +) => TResult | Promise; + +/** Mapping of union types */ +export type ResolversUnionTypes<_RefType extends Record> = ResolversObject<{ + ChildUnion: + | ( Omit & { parent?: Types.Maybe<_RefType['MyType']> } ) + | ( Types.MyOtherType ) + ; + MyUnion: + | ( Omit & { unionChild?: Types.Maybe<_RefType['ChildUnion']> } ) + | ( Types.MyOtherType ) + ; +}>; + +/** Mapping of interface types */ +export type ResolversInterfaceTypes<_RefType extends Record> = ResolversObject<{ + Node: ( Types.SomeNode ); + AnotherNode: + | ( Omit & { unionChild?: Types.Maybe<_RefType['ChildUnion']>, interfaceChild?: Types.Maybe<_RefType['Node']> } ) + | ( Omit & { unionChild?: Types.Maybe<_RefType['ChildUnion']>, unionChildren: Array<_RefType['ChildUnion']>, interfaceChild?: Types.Maybe<_RefType['Node']>, interfaceChildren: Array<_RefType['Node']> } ) + ; + WithChild: + | ( Omit & { unionChild?: Types.Maybe<_RefType['ChildUnion']>, interfaceChild?: Types.Maybe<_RefType['Node']> } ) + | ( Omit & { unionChild?: Types.Maybe<_RefType['ChildUnion']>, unionChildren: Array<_RefType['ChildUnion']>, interfaceChild?: Types.Maybe<_RefType['Node']>, interfaceChildren: Array<_RefType['Node']> } ) + ; + WithChildren: ( Omit & { unionChild?: Types.Maybe<_RefType['ChildUnion']>, unionChildren: Array<_RefType['ChildUnion']>, interfaceChild?: Types.Maybe<_RefType['Node']>, interfaceChildren: Array<_RefType['Node']> } ); +}>; + +/** Mapping between all available schema types and the resolvers types */ +export type ResolversTypes = ResolversObject<{ + MyType: ResolverTypeWrapper & { unionChild?: Types.Maybe }>; + String: ResolverTypeWrapper; + Child: ResolverTypeWrapper & { parent?: Types.Maybe }>; + MyOtherType: ResolverTypeWrapper; + ChildUnion: ResolverTypeWrapper['ChildUnion']>; + Query: ResolverTypeWrapper<{}>; + Subscription: ResolverTypeWrapper<{}>; + Node: ResolverTypeWrapper['Node']>; + ID: ResolverTypeWrapper; + SomeNode: ResolverTypeWrapper; + AnotherNode: ResolverTypeWrapper['AnotherNode']>; + WithChild: ResolverTypeWrapper['WithChild']>; + WithChildren: ResolverTypeWrapper['WithChildren']>; + AnotherNodeWithChild: ResolverTypeWrapper & { unionChild?: Types.Maybe, interfaceChild?: Types.Maybe }>; + AnotherNodeWithAll: ResolverTypeWrapper & { unionChild?: Types.Maybe, unionChildren: Array, interfaceChild?: Types.Maybe, interfaceChildren: Array }>; + MyUnion: ResolverTypeWrapper['MyUnion']>; + MyScalar: ResolverTypeWrapper; + Int: ResolverTypeWrapper; + Boolean: ResolverTypeWrapper; +}>; + +/** Mapping between all available schema types and the resolvers parents */ +export type ResolversParentTypes = ResolversObject<{ + MyType: Omit & { unionChild?: Types.Maybe }; + String: Types.Scalars['String']['output']; + Child: Omit & { parent?: Types.Maybe }; + MyOtherType: Types.MyOtherType; + ChildUnion: ResolversUnionTypes['ChildUnion']; + Query: {}; + Subscription: {}; + Node: ResolversInterfaceTypes['Node']; + ID: Types.Scalars['ID']['output']; + SomeNode: Types.SomeNode; + AnotherNode: ResolversInterfaceTypes['AnotherNode']; + WithChild: ResolversInterfaceTypes['WithChild']; + WithChildren: ResolversInterfaceTypes['WithChildren']; + AnotherNodeWithChild: Omit & { unionChild?: Types.Maybe, interfaceChild?: Types.Maybe }; + AnotherNodeWithAll: Omit & { unionChild?: Types.Maybe, unionChildren: Array, interfaceChild?: Types.Maybe, interfaceChildren: Array }; + MyUnion: ResolversUnionTypes['MyUnion']; + MyScalar: Types.Scalars['MyScalar']['output']; + Int: Types.Scalars['Int']['output']; + Boolean: Types.Scalars['Boolean']['output']; +}>; + +export type MyDirectiveDirectiveArgs = { + arg: Types.Scalars['Int']['input']; + arg2: Types.Scalars['String']['input']; + arg3: Types.Scalars['Boolean']['input']; +}; + +export type MyDirectiveDirectiveResolver = DirectiveResolverFn; + +export type AuthenticatedDirectiveArgs = { }; + +export type AuthenticatedDirectiveResolver = DirectiveResolverFn; + +export type MyTypeResolvers = ResolversObject<{ + foo?: Resolver; + otherType?: Resolver, ParentType, ContextType>; + withArgs?: Resolver, ParentType, ContextType, RequireFields>; + unionChild?: Resolver, ParentType, ContextType>; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type ChildResolvers = ResolversObject<{ + bar?: Resolver; + parent?: Resolver, ParentType, ContextType>; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type MyOtherTypeResolvers = ResolversObject<{ + bar?: Resolver; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type ChildUnionResolvers = ResolversObject<{ + __resolveType: TypeResolveFn<'Child' | 'MyOtherType', ParentType, ContextType>; +}>; + +export type QueryResolvers = ResolversObject<{ + something?: Resolver; +}>; + +export type SubscriptionResolvers = ResolversObject<{ + somethingChanged?: SubscriptionResolver, "somethingChanged", ParentType, ContextType>; +}>; + +export type NodeResolvers = ResolversObject<{ + __resolveType: TypeResolveFn<'SomeNode', ParentType, ContextType>; + id?: Resolver; +}>; + +export type SomeNodeResolvers = ResolversObject<{ + id?: Resolver; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type AnotherNodeResolvers = ResolversObject<{ + __resolveType: TypeResolveFn<'AnotherNodeWithChild' | 'AnotherNodeWithAll', ParentType, ContextType>; + id?: Resolver; +}>; + +export type WithChildResolvers = ResolversObject<{ + __resolveType: TypeResolveFn<'AnotherNodeWithChild' | 'AnotherNodeWithAll', ParentType, ContextType>; + unionChild?: Resolver, ParentType, ContextType>; + node?: Resolver, ParentType, ContextType>; +}>; + +export type WithChildrenResolvers = ResolversObject<{ + __resolveType: TypeResolveFn<'AnotherNodeWithAll', ParentType, ContextType>; + unionChildren?: Resolver, ParentType, ContextType>; + nodes?: Resolver, ParentType, ContextType>; +}>; + +export type AnotherNodeWithChildResolvers = ResolversObject<{ + id?: Resolver; + unionChild?: Resolver, ParentType, ContextType>; + interfaceChild?: Resolver, ParentType, ContextType>; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type AnotherNodeWithAllResolvers = ResolversObject<{ + id?: Resolver; + unionChild?: Resolver, ParentType, ContextType>; + unionChildren?: Resolver, ParentType, ContextType>; + interfaceChild?: Resolver, ParentType, ContextType>; + interfaceChildren?: Resolver, ParentType, ContextType>; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type MyUnionResolvers = ResolversObject<{ + __resolveType: TypeResolveFn<'MyType' | 'MyOtherType', ParentType, ContextType>; +}>; + +export interface MyScalarScalarConfig extends GraphQLScalarTypeConfig { + name: 'MyScalar'; +} + +export type Resolvers = ResolversObject<{ + MyType?: MyTypeResolvers; + Child?: ChildResolvers; + MyOtherType?: MyOtherTypeResolvers; + ChildUnion?: ChildUnionResolvers; + Query?: QueryResolvers; + Subscription?: SubscriptionResolvers; + Node?: NodeResolvers; + SomeNode?: SomeNodeResolvers; + AnotherNode?: AnotherNodeResolvers; + WithChild?: WithChildResolvers; + WithChildren?: WithChildrenResolvers; + AnotherNodeWithChild?: AnotherNodeWithChildResolvers; + AnotherNodeWithAll?: AnotherNodeWithAllResolvers; + MyUnion?: MyUnionResolvers; + MyScalar?: GraphQLScalarType; +}>; + +export type DirectiveResolvers = ResolversObject<{ + myDirective?: MyDirectiveDirectiveResolver; + authenticated?: AuthenticatedDirectiveResolver; +}>; +" +`; + exports[`TypeScript Resolvers Plugin Config namespacedImportName - should work correctly with imported namespaced type 1`] = ` "import { GraphQLResolveInfo, GraphQLScalarType, GraphQLScalarTypeConfig } from 'graphql'; export type Omit = Pick>; @@ -427,15 +702,27 @@ export type DirectiveResolverFn> = ResolversObject<{ - ChildUnion: ( Omit & { parent?: Types.Maybe<_RefType['MyType']> } ) | ( Types.MyOtherType ); - MyUnion: ( Omit & { unionChild?: Types.Maybe<_RefType['ChildUnion']> } ) | ( Types.MyOtherType ); + ChildUnion: + | ( Omit & { parent?: Types.Maybe<_RefType['MyType']> } ) + | ( Types.MyOtherType ) + ; + MyUnion: + | ( Omit & { unionChild?: Types.Maybe<_RefType['ChildUnion']> } ) + | ( Types.MyOtherType ) + ; }>; /** Mapping of interface types */ export type ResolversInterfaceTypes<_RefType extends Record> = ResolversObject<{ Node: ( Types.SomeNode ); - AnotherNode: ( Omit & { unionChild?: Types.Maybe<_RefType['ChildUnion']>, interfaceChild?: Types.Maybe<_RefType['Node']> } ) | ( Omit & { unionChild?: Types.Maybe<_RefType['ChildUnion']>, unionChildren: Array<_RefType['ChildUnion']>, interfaceChild?: Types.Maybe<_RefType['Node']>, interfaceChildren: Array<_RefType['Node']> } ); - WithChild: ( Omit & { unionChild?: Types.Maybe<_RefType['ChildUnion']>, interfaceChild?: Types.Maybe<_RefType['Node']> } ) | ( Omit & { unionChild?: Types.Maybe<_RefType['ChildUnion']>, unionChildren: Array<_RefType['ChildUnion']>, interfaceChild?: Types.Maybe<_RefType['Node']>, interfaceChildren: Array<_RefType['Node']> } ); + AnotherNode: + | ( Omit & { unionChild?: Types.Maybe<_RefType['ChildUnion']>, interfaceChild?: Types.Maybe<_RefType['Node']> } ) + | ( Omit & { unionChild?: Types.Maybe<_RefType['ChildUnion']>, unionChildren: Array<_RefType['ChildUnion']>, interfaceChild?: Types.Maybe<_RefType['Node']>, interfaceChildren: Array<_RefType['Node']> } ) + ; + WithChild: + | ( Omit & { unionChild?: Types.Maybe<_RefType['ChildUnion']>, interfaceChild?: Types.Maybe<_RefType['Node']> } ) + | ( Omit & { unionChild?: Types.Maybe<_RefType['ChildUnion']>, unionChildren: Array<_RefType['ChildUnion']>, interfaceChild?: Types.Maybe<_RefType['Node']>, interfaceChildren: Array<_RefType['Node']> } ) + ; WithChildren: ( Omit & { unionChild?: Types.Maybe<_RefType['ChildUnion']>, unionChildren: Array<_RefType['ChildUnion']>, interfaceChild?: Types.Maybe<_RefType['Node']>, interfaceChildren: Array<_RefType['Node']> } ); }>; @@ -772,15 +1059,27 @@ export type DirectiveResolverFn> = ResolversObject<{ - ChildUnion: ( Omit & { parent?: Maybe<_RefType['MyType']> } ) | ( MyOtherType ); - MyUnion: ( Omit & { unionChild?: Maybe<_RefType['ChildUnion']> } ) | ( MyOtherType ); + ChildUnion: + | ( Omit & { parent?: Maybe<_RefType['MyType']> } ) + | ( MyOtherType ) + ; + MyUnion: + | ( Omit & { unionChild?: Maybe<_RefType['ChildUnion']> } ) + | ( MyOtherType ) + ; }>; /** Mapping of interface types */ export type ResolversInterfaceTypes<_RefType extends Record> = ResolversObject<{ Node: ( SomeNode ); - AnotherNode: ( Omit & { unionChild?: Maybe<_RefType['ChildUnion']>, interfaceChild?: Maybe<_RefType['Node']> } ) | ( Omit & { unionChild?: Maybe<_RefType['ChildUnion']>, unionChildren: Array<_RefType['ChildUnion']>, interfaceChild?: Maybe<_RefType['Node']>, interfaceChildren: Array<_RefType['Node']> } ); - WithChild: ( Omit & { unionChild?: Maybe<_RefType['ChildUnion']>, interfaceChild?: Maybe<_RefType['Node']> } ) | ( Omit & { unionChild?: Maybe<_RefType['ChildUnion']>, unionChildren: Array<_RefType['ChildUnion']>, interfaceChild?: Maybe<_RefType['Node']>, interfaceChildren: Array<_RefType['Node']> } ); + AnotherNode: + | ( Omit & { unionChild?: Maybe<_RefType['ChildUnion']>, interfaceChild?: Maybe<_RefType['Node']> } ) + | ( Omit & { unionChild?: Maybe<_RefType['ChildUnion']>, unionChildren: Array<_RefType['ChildUnion']>, interfaceChild?: Maybe<_RefType['Node']>, interfaceChildren: Array<_RefType['Node']> } ) + ; + WithChild: + | ( Omit & { unionChild?: Maybe<_RefType['ChildUnion']>, interfaceChild?: Maybe<_RefType['Node']> } ) + | ( Omit & { unionChild?: Maybe<_RefType['ChildUnion']>, unionChildren: Array<_RefType['ChildUnion']>, interfaceChild?: Maybe<_RefType['Node']>, interfaceChildren: Array<_RefType['Node']> } ) + ; WithChildren: ( Omit & { unionChild?: Maybe<_RefType['ChildUnion']>, unionChildren: Array<_RefType['ChildUnion']>, interfaceChild?: Maybe<_RefType['Node']>, interfaceChildren: Array<_RefType['Node']> } ); }>; diff --git a/packages/plugins/typescript/resolvers/tests/ts-resolvers.spec.ts b/packages/plugins/typescript/resolvers/tests/ts-resolvers.spec.ts index a1d13fe829e..caf7d1876e4 100644 --- a/packages/plugins/typescript/resolvers/tests/ts-resolvers.spec.ts +++ b/packages/plugins/typescript/resolvers/tests/ts-resolvers.spec.ts @@ -152,6 +152,18 @@ describe('TypeScript Resolvers Plugin', () => { expect(content).toMatchSnapshot(); }); + it('namespacedImportName - should work correctly with imported namespaced type (printFieldsOnNewLines: true)', async () => { + const config = { + noSchemaStitching: true, + useIndexSignature: true, + namespacedImportName: 'Types', + printFieldsOnNewLines: true, + }; + const result = await plugin(resolversTestingSchema, [], config, { outputFile: '' }); + const content = mergeOutputs([result]); + expect(content).toMatchSnapshot(); + }); + it('directiveResolverMappings - should generate correct types (inline definition)', async () => { const config = { noSchemaStitching: true, diff --git a/packages/utils/graphql-codegen-testing/src/index.ts b/packages/utils/graphql-codegen-testing/src/index.ts index a837d6af42b..ee35813675e 100644 --- a/packages/utils/graphql-codegen-testing/src/index.ts +++ b/packages/utils/graphql-codegen-testing/src/index.ts @@ -19,10 +19,25 @@ function compareStrings(a: string, b: string): boolean { return a.includes(b); } +/** Ignore whitespace, trailing commas, and leading pipes */ +function similarize(str: string): string { + return ( + oneLine`${str}` + // Trim trailing commas + .replace(/\s*,(\s*[)}])/g, '$1') + // Remove leading pipes + .replace(/([<:,=(])\s*(?:\|\s*)?/g, '$1') + // Remove spaces around brackets and semicolons + .replace(/\s*([[\](){}<>;])\s*/g, '$1') + // Replace multiple spaces with a single space + .replace(/\s\s+/g, ' ') + ); +} + expect.extend({ toBeSimilarStringTo(received: string, expected: string) { - const strippedReceived = oneLine`${received}`.replace(/\s\s+/g, ' '); - const strippedExpected = oneLine`${expected}`.replace(/\s\s+/g, ' '); + const strippedReceived = similarize(received); + const strippedExpected = similarize(expected); if (compareStrings(strippedReceived, strippedExpected)) { return {