1
1
/* eslint-disable unicorn/no-negated-condition */
2
- import { Kind , NameNode , OperationTypeNode } from 'graphql' ;
2
+ import { Kind , NameNode , OperationTypeDefinitionNode , OperationTypeNode } from 'graphql' ;
3
3
import type { Change , ChangeType } from '@graphql-inspector/core' ;
4
- import { ChangedCoordinateNotFoundError , handleError , ValueMismatchError } from '../errors.js' ;
4
+ import { handleError , ValueMismatchError } from '../errors.js' ;
5
5
import { nameNode } from '../node-templates.js' ;
6
6
import { PatchConfig , SchemaNode } from '../types.js' ;
7
7
@@ -15,11 +15,28 @@ export function schemaMutationTypeChanged(
15
15
( { operation } ) => operation === OperationTypeNode . MUTATION ,
16
16
) ;
17
17
if ( ! mutation ) {
18
- handleError (
19
- change ,
20
- new ChangedCoordinateNotFoundError ( Kind . SCHEMA_DEFINITION , 'mutation' ) ,
21
- config ,
22
- ) ;
18
+ if ( change . meta . oldMutationTypeName !== 'unknown' ) {
19
+ handleError (
20
+ change ,
21
+ new ValueMismatchError (
22
+ Kind . SCHEMA_DEFINITION ,
23
+ change . meta . oldMutationTypeName ,
24
+ 'unknown' ,
25
+ ) ,
26
+ config ,
27
+ ) ;
28
+ }
29
+ ( schemaNode . operationTypes as OperationTypeDefinitionNode [ ] ) = [
30
+ ...( schemaNode . operationTypes ?? [ ] ) ,
31
+ {
32
+ kind : Kind . OPERATION_TYPE_DEFINITION ,
33
+ operation : OperationTypeNode . MUTATION ,
34
+ type : {
35
+ kind : Kind . NAMED_TYPE ,
36
+ name : nameNode ( change . meta . newMutationTypeName ) ,
37
+ } ,
38
+ } ,
39
+ ] ;
23
40
} else {
24
41
if ( mutation . type . name . value !== change . meta . oldMutationTypeName ) {
25
42
handleError (
@@ -47,11 +64,24 @@ export function schemaQueryTypeChanged(
47
64
( { operation } ) => operation === OperationTypeNode . MUTATION ,
48
65
) ;
49
66
if ( ! query ) {
50
- handleError (
51
- change ,
52
- new ChangedCoordinateNotFoundError ( Kind . SCHEMA_DEFINITION , 'query' ) ,
53
- config ,
54
- ) ;
67
+ if ( change . meta . oldQueryTypeName !== 'unknown' ) {
68
+ handleError (
69
+ change ,
70
+ new ValueMismatchError ( Kind . SCHEMA_DEFINITION , change . meta . oldQueryTypeName , 'unknown' ) ,
71
+ config ,
72
+ ) ;
73
+ }
74
+ ( schemaNode . operationTypes as OperationTypeDefinitionNode [ ] ) = [
75
+ ...( schemaNode . operationTypes ?? [ ] ) ,
76
+ {
77
+ kind : Kind . OPERATION_TYPE_DEFINITION ,
78
+ operation : OperationTypeNode . QUERY ,
79
+ type : {
80
+ kind : Kind . NAMED_TYPE ,
81
+ name : nameNode ( change . meta . newQueryTypeName ) ,
82
+ } ,
83
+ } ,
84
+ ] ;
55
85
} else {
56
86
if ( query . type . name . value !== change . meta . oldQueryTypeName ) {
57
87
handleError (
@@ -79,11 +109,28 @@ export function schemaSubscriptionTypeChanged(
79
109
( { operation } ) => operation === OperationTypeNode . SUBSCRIPTION ,
80
110
) ;
81
111
if ( ! sub ) {
82
- handleError (
83
- change ,
84
- new ChangedCoordinateNotFoundError ( Kind . SCHEMA_DEFINITION , 'subscription' ) ,
85
- config ,
86
- ) ;
112
+ if ( change . meta . oldSubscriptionTypeName !== 'unknown' ) {
113
+ handleError (
114
+ change ,
115
+ new ValueMismatchError (
116
+ Kind . SCHEMA_DEFINITION ,
117
+ change . meta . oldSubscriptionTypeName ,
118
+ 'unknown' ,
119
+ ) ,
120
+ config ,
121
+ ) ;
122
+ }
123
+ ( schemaNode . operationTypes as OperationTypeDefinitionNode [ ] ) = [
124
+ ...( schemaNode . operationTypes ?? [ ] ) ,
125
+ {
126
+ kind : Kind . OPERATION_TYPE_DEFINITION ,
127
+ operation : OperationTypeNode . QUERY ,
128
+ type : {
129
+ kind : Kind . NAMED_TYPE ,
130
+ name : nameNode ( change . meta . newSubscriptionTypeName ) ,
131
+ } ,
132
+ } ,
133
+ ] ;
87
134
} else {
88
135
if ( sub . type . name . value !== change . meta . oldSubscriptionTypeName ) {
89
136
handleError (
0 commit comments