Skip to content

Commit a3b638a

Browse files
committed
🐛 directive removal should not be considered node removal - to many places
1 parent af51d9f commit a3b638a

File tree

3 files changed

+12
-15
lines changed

3 files changed

+12
-15
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "graphql-js-tree",
3-
"version": "0.2.6",
3+
"version": "0.2.7",
44
"private": false,
55
"license": "MIT",
66
"description": "GraphQL Parser providing simplier structure",

src/TreeOperations/tree.ts

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -118,17 +118,6 @@ export const mutate = (tree: ParserTree, allNodes: ParserField[]) => {
118118
}
119119
return;
120120
}
121-
if (node.data.type === Instances.Argument) {
122-
const parent = allNodes.find((p) => p.directives.some((a) => a.args.includes(node)));
123-
if (parent) {
124-
const parentDirective = parent.directives.find((d) => d.args.some((a) => a === node));
125-
if (parentDirective) {
126-
const indexInDirective = parentDirective.args.indexOf(node);
127-
deleteFieldFromNode(parentDirective, indexInDirective);
128-
}
129-
}
130-
return;
131-
}
132121
if (node.data.type === ValueDefinition.InputValueDefinition) {
133122
const parent = allNodes.find((parentNode) => parentNode.args.includes(node));
134123
if (parent) {
@@ -152,6 +141,12 @@ export const mutate = (tree: ParserTree, allNodes: ParserField[]) => {
152141
}
153142
return;
154143
}
144+
if (node.data.type === Instances.Directive) {
145+
throw new Error('Directives should be removed on node directly not using this function');
146+
}
147+
if (node.data.type === Instances.Argument) {
148+
throw new Error('Directive Arguments should be removed on node directly not using this function');
149+
}
155150
const deletedNode = tree.nodes.findIndex((n) => n === node);
156151
if (deletedNode === -1) throw new Error('Error deleting a node');
157152
// co jak usuwamy extension interface

src/__tests__/TreeOperations/tree.remove.spec.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,13 @@ describe('Tree Operations - node removal tests', () => {
4848
expect(treeMock.nodes[1].args[1].id).not.toEqual(oldFieldId);
4949
expect(treeMock.nodes[1].id).not.toEqual(oldQueryId);
5050
});
51+
test('Delete directive from node', () => {
52+
const treeMock = createMock();
53+
expect(() => mutate(treeMock, treeMock.nodes).removeNode(treeMock.nodes[0].directives[0])).toThrowError();
54+
});
5155
test('Delete argument node from Directive Instance', () => {
5256
const treeMock = createMock();
53-
const oldArgument = JSON.parse(JSON.stringify(treeMock.nodes[0].directives[0].args[0]));
54-
mutate(treeMock, treeMock.nodes).removeNode(treeMock.nodes[0].directives[0].args[0]);
55-
expect(treeMock.nodes[0].directives[0].args).not.toContainEqual(oldArgument);
57+
expect(() => mutate(treeMock, treeMock.nodes).removeNode(treeMock.nodes[0].directives[0].args[0])).toThrowError();
5658
});
5759
test('Delete union member from union node', () => {
5860
const treeMock = createMock();

0 commit comments

Comments
 (0)