@@ -10,6 +10,12 @@ import {
1010 ValueDefinition ,
1111} from '@/Models' ;
1212import { getTypeName } from '@/shared' ;
13+ import {
14+ recursivelyDeleteDirectiveArgument ,
15+ recursivelyDeleteDirectiveNodes ,
16+ recursivelyRenameDirectiveNodes ,
17+ recursivelyUpdateDirectiveArgument ,
18+ } from '@/TreeOperations/directive' ;
1319import {
1420 changeInterfaceField ,
1521 updateInterfaceNodeAddField ,
@@ -59,6 +65,10 @@ export const mutate = (tree: ParserTree, allNodes: ParserField[]) => {
5965
6066 const updateFieldOnNode = ( node : ParserField , i : number , updatedField : ParserField ) => {
6167 regenerateId ( updatedField ) ;
68+ if ( node . data . type === TypeSystemDefinition . DirectiveDefinition ) {
69+ const oldField : ParserField = JSON . parse ( JSON . stringify ( node . args [ i ] ) ) ;
70+ recursivelyUpdateDirectiveArgument ( allNodes , node . name , oldField , updatedField , allNodes ) ;
71+ }
6272 if ( node . data . type === TypeDefinition . InterfaceTypeDefinition ) {
6373 const oldField : ParserField = JSON . parse ( JSON . stringify ( node . args [ i ] ) ) ;
6474 changeInterfaceField ( tree . nodes , node , oldField , updatedField ) ;
@@ -81,6 +91,9 @@ export const mutate = (tree: ParserTree, allNodes: ParserField[]) => {
8191 if ( isError ) {
8292 return ;
8393 }
94+ if ( node . data . type === TypeSystemDefinition . DirectiveDefinition ) {
95+ recursivelyRenameDirectiveNodes ( allNodes , node . name , newName ) ;
96+ }
8497 if ( node . data . type === TypeDefinition . InterfaceTypeDefinition ) {
8598 const oldName = node . name ;
8699 tree . nodes
@@ -121,6 +134,9 @@ export const mutate = (tree: ParserTree, allNodes: ParserField[]) => {
121134 if ( node . data . type === ValueDefinition . InputValueDefinition ) {
122135 const parent = allNodes . find ( ( parentNode ) => parentNode . args . includes ( node ) ) ;
123136 if ( parent ) {
137+ if ( parent . data . type === TypeSystemDefinition . DirectiveDefinition ) {
138+ recursivelyDeleteDirectiveArgument ( allNodes , parent . name , node ) ;
139+ }
124140 const index = parent . args . indexOf ( node ) ;
125141 deleteFieldFromNode ( parent , index ) ;
126142 } else {
@@ -142,10 +158,13 @@ export const mutate = (tree: ParserTree, allNodes: ParserField[]) => {
142158 return ;
143159 }
144160 if ( node . data . type === Instances . Directive ) {
145- throw new Error ( 'Directives should be removed on node directly not using this function' ) ;
161+ throw new Error ( 'Directive Instances should be removed on node directly not using this function' ) ;
146162 }
147163 if ( node . data . type === Instances . Argument ) {
148- throw new Error ( 'Directive Arguments should be removed on node directly not using this function' ) ;
164+ throw new Error ( 'Directive Instance Arguments should be removed on node directly not using this function' ) ;
165+ }
166+ if ( node . data . type === TypeSystemDefinition . DirectiveDefinition ) {
167+ recursivelyDeleteDirectiveNodes ( allNodes , node . name ) ;
149168 }
150169 const deletedNode = tree . nodes . findIndex ( ( n ) => n === node ) ;
151170 if ( deletedNode === - 1 ) throw new Error ( 'Error deleting a node' ) ;
@@ -224,7 +243,7 @@ export const mutate = (tree: ParserTree, allNodes: ParserField[]) => {
224243 } ;
225244} ;
226245
227- const checkValueType = ( node : ParserField , nodes : ParserField [ ] ) => {
246+ export const checkValueType = ( node : ParserField , nodes : ParserField [ ] ) => {
228247 const isArray = isArrayType ( node . type . fieldType ) ;
229248 if ( isArray ) return Value . ListValue ;
230249 const tName = getTypeName ( node . type . fieldType ) ;
0 commit comments