11import type { ExecutionResult } from 'graphql'
2+ import type { GlobalRegistry } from '../globalRegistry.js'
23import type { GraphQLExecutionResultError } from '../lib/graphql.js'
34import type { SetProperty } from '../lib/prelude.js'
5+ import type { Schema } from '../Schema/__.js'
46
57export type ReturnModeType =
68 | ReturnModeTypeGraphQL
9+ | ReturnModeTypeSuccessData
710 | ReturnModeTypeData
8- | ReturnModeTypeDataAndSchemaErrors
9- | ReturnModeTypeDataAllErrors
11+ | ReturnModeTypeDataAndErrors
1012
11- export type ReturnModeTypeBase = ReturnModeTypeGraphQL | ReturnModeTypeData | ReturnModeTypeDataAllErrors
13+ export type ReturnModeTypeBase = ReturnModeTypeGraphQL | ReturnModeTypeDataAndErrors | ReturnModeTypeData
1214
1315export type ReturnModeTypeGraphQL = 'graphql'
1416
1517export type ReturnModeTypeData = 'data'
1618
17- export type ReturnModeTypeDataAllErrors = 'dataAndAllErrors '
19+ export type ReturnModeTypeDataAndErrors = 'dataAndErrors '
1820
19- export type ReturnModeTypeDataAndSchemaErrors = 'dataAndSchemaErrors '
21+ export type ReturnModeTypeSuccessData = 'successData '
2022
2123export type OptionsInput = {
2224 returnMode : ReturnModeType | undefined
@@ -36,10 +38,52 @@ export type ApplyInputDefaults<Input extends OptionsInput> = {
3638}
3739
3840// dprint-ignore
39- export type ReturnMode < $Config extends Config , $Data , $DataRaw = undefined > =
41+ export type ReturnModeRootType < $Config extends Config , $Index extends Schema . Index , $Data extends object > =
42+ $Config [ 'returnMode' ] extends 'graphql' ? ExecutionResult < $Data > :
43+ $Config [ 'returnMode' ] extends 'data' ? $Data :
44+ $Config [ 'returnMode' ] extends 'successData' ? { [ $Key in keyof $Data ] : ExcludeSchemaErrors < $Index , $Data [ $Key ] > } :
45+ $Data | GraphQLExecutionResultError
46+
47+ // dprint-ignore
48+ export type ReturnModeRootField < $Config extends Config , $Index extends Schema . Index , $Data , $DataRaw = undefined > =
4049 $Config [ 'returnMode' ] extends 'graphql' ? ExecutionResult < $DataRaw extends undefined ? $Data : $DataRaw > :
4150 $Config [ 'returnMode' ] extends 'data' ? $Data :
51+ $Config [ 'returnMode' ] extends 'successData' ? ExcludeSchemaErrors < $Index , $Data > :
4252 $Data | GraphQLExecutionResultError
4353
54+ export type ExcludeSchemaErrors < $Index extends Schema . Index , $Data > = Exclude <
55+ $Data ,
56+ $Index [ 'error' ] [ 'objectsTypename' ] [ keyof $Index [ 'error' ] [ 'objectsTypename' ] ]
57+ >
58+
4459export type OrThrowifyConfig < $Config extends Config > = $Config [ 'returnMode' ] extends 'graphql' ? $Config
45- : SetProperty < $Config , 'returnMode' , 'data' >
60+ : SetProperty < $Config , 'returnMode' , 'successData' >
61+
62+ /**
63+ * We inject __typename select when:
64+ * 1. using schema errors
65+ * 2. using return mode successData
66+ */
67+
68+ type TypenameSelection = { __typename : true }
69+
70+ // dprint-ignore
71+ export type CreateSelectionTypename < $Config extends Config , $Index extends Schema . Index > =
72+ IsNeedSelectionTypename < $Config , $Index > extends true ? TypenameSelection : { } // eslint-disable-line
73+
74+ // dprint-ignore
75+ export type IsNeedSelectionTypename < $Config extends Config , $Index extends Schema . Index > =
76+ $Config [ 'returnMode' ] extends 'successData' ? GlobalRegistry . HasSchemaErrors < $Index [ 'name' ] > extends true ? true :
77+ false :
78+ false
79+ export type AugmentRootTypeSelectionWithTypename <
80+ $Config extends Config ,
81+ $Index extends Schema . Index ,
82+ $RootTypeName extends Schema . RootTypeName ,
83+ $Selection extends object ,
84+ > = IsNeedSelectionTypename < $Config , $Index > extends true ? {
85+ [ $Key in keyof $Selection ] :
86+ & $Selection [ $Key ]
87+ & ( $Key extends keyof $Index [ 'error' ] [ 'rootResultFields' ] [ $RootTypeName ] ? TypenameSelection : { } ) // eslint-disable-line
88+ }
89+ : $Selection
0 commit comments