Skip to content

Commit 8166d7f

Browse files
committed
🚧 WIP Refactor utilities
1 parent 143f65e commit 8166d7f

19 files changed

+921
-1915
lines changed

src/TreeOperations/tree.ts

Lines changed: 55 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import {
66
ParserTree,
77
Value,
88
ScalarTypes,
9+
Instances,
10+
ValueDefinition,
911
} from '@/Models';
1012
import { getTypeName } from '@/shared';
1113
import {
@@ -33,8 +35,8 @@ export const mutate = (tree: ParserTree, allNodes: ParserField[]) => {
3335
}
3436
};
3537
const deleteFieldFromNode = (n: ParserField, i: number) => {
36-
const argName = n.args[i].name;
3738
if (n.data.type === TypeDefinition.InterfaceTypeDefinition) {
39+
const argName = n.args[i].name;
3840
tree.nodes
3941
.filter((filterNode) => filterNode.interfaces.includes(n.name))
4042
.forEach((nodeWithThisInterface) => {
@@ -74,7 +76,7 @@ export const mutate = (tree: ParserTree, allNodes: ParserField[]) => {
7476
regenerateId(node);
7577
mutateParentIfField(node);
7678
};
77-
const renameNode = (node: ParserField, newName: string) => {
79+
const renameRootNode = (node: ParserField, newName: string) => {
7880
const isError = allNodes.map((n) => n.name).includes(newName);
7981
if (isError) {
8082
return;
@@ -100,6 +102,56 @@ export const mutate = (tree: ParserTree, allNodes: ParserField[]) => {
100102
regenerateId(node);
101103
};
102104
const removeNode = (node: ParserField) => {
105+
if (node.data.type === TypeSystemDefinition.FieldDefinition) {
106+
const parent = allNodes.find((parentNode) => parentNode.args.includes(node));
107+
if (parent) {
108+
const index = parent.args.indexOf(node);
109+
deleteFieldFromNode(parent, index);
110+
}
111+
return;
112+
}
113+
if (node.data.type === TypeSystemDefinition.UnionMemberDefinition) {
114+
const parent = allNodes.find((parentNode) => parentNode.args.includes(node));
115+
if (parent) {
116+
const index = parent.args.indexOf(node);
117+
deleteFieldFromNode(parent, index);
118+
}
119+
return;
120+
}
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(parent, indexInDirective);
128+
}
129+
}
130+
return;
131+
}
132+
if (node.data.type === ValueDefinition.InputValueDefinition) {
133+
const parent = allNodes.find((parentNode) => parentNode.args.includes(node));
134+
if (parent) {
135+
const index = parent.args.indexOf(node);
136+
deleteFieldFromNode(parent, index);
137+
} else {
138+
const parent = allNodes.find((p) => p.args.some((a) => a.args.includes(node)));
139+
const field = parent?.args.find((a) => a.args.includes(node));
140+
if (field) {
141+
const fieldIndex = field.args.findIndex((f) => f === node);
142+
deleteFieldFromNode(field, fieldIndex);
143+
}
144+
}
145+
return;
146+
}
147+
if (node.data.type === ValueDefinition.EnumValueDefinition) {
148+
const parent = allNodes.find((parentNode) => parentNode.args.includes(node));
149+
if (parent) {
150+
const index = parent.args.indexOf(node);
151+
deleteFieldFromNode(parent, index);
152+
}
153+
return;
154+
}
103155
const deletedNode = tree.nodes.findIndex((n) => n === node);
104156
if (deletedNode === -1) throw new Error('Error deleting a node');
105157
// co jak usuwamy extension interface
@@ -167,10 +219,9 @@ export const mutate = (tree: ParserTree, allNodes: ParserField[]) => {
167219
};
168220
};
169221
return {
170-
deleteFieldFromNode,
171222
updateFieldOnNode,
172223
addFieldToNode,
173-
renameNode,
224+
renameRootNode,
174225
removeNode,
175226
implementInterface,
176227
deImplementInterface,

src/__tests__/Parser/Comment.spec.ts

Lines changed: 10 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,5 @@
1-
import { createParserField } from '@/shared';
2-
import {
3-
Helpers,
4-
ParserTree,
5-
ScalarTypes,
6-
TypeDefinition,
7-
TypeDefinitionDisplayStrings,
8-
TypeSystemDefinition,
9-
Options,
10-
} from '../../Models';
1+
import { createParserField, createPlainField, createRootField } from '@/shared';
2+
import { Helpers, ParserTree, ScalarTypes, TypeDefinition, Options } from '../../Models';
113
import { Parser } from '../../Parser';
124

135
describe('Comment tests on parser', () => {
@@ -21,32 +13,13 @@ describe('Comment tests on parser', () => {
2113
const tree = Parser.parse(schema);
2214
const treeMock: ParserTree = {
2315
nodes: [
24-
createParserField({
16+
createRootField({
2517
name: 'Person',
26-
type: {
27-
fieldType: {
28-
name: TypeDefinitionDisplayStrings.type,
29-
type: Options.name,
30-
},
31-
},
32-
data: {
33-
type: TypeDefinition.ObjectTypeDefinition,
34-
},
35-
18+
type: TypeDefinition.ObjectTypeDefinition,
3619
args: [
37-
createParserField({
20+
createPlainField({
3821
name: 'name',
39-
40-
type: {
41-
fieldType: {
42-
name: ScalarTypes.String,
43-
type: Options.name,
44-
},
45-
},
46-
47-
data: {
48-
type: TypeSystemDefinition.FieldDefinition,
49-
},
22+
type: ScalarTypes.String,
5023
}),
5124
],
5225
}),
@@ -80,33 +53,14 @@ type Person{
8053
const tree = Parser.parse(schema);
8154
const treeMock: ParserTree = {
8255
nodes: [
83-
createParserField({
56+
createRootField({
8457
name: 'Person',
85-
type: {
86-
fieldType: {
87-
name: TypeDefinitionDisplayStrings.type,
88-
type: Options.name,
89-
},
90-
},
91-
data: {
92-
type: TypeDefinition.ObjectTypeDefinition,
93-
},
58+
type: TypeDefinition.ObjectTypeDefinition,
9459
description: `# My header`,
95-
9660
args: [
97-
createParserField({
61+
createPlainField({
9862
name: 'name',
99-
100-
type: {
101-
fieldType: {
102-
name: ScalarTypes.String,
103-
type: Options.name,
104-
},
105-
},
106-
107-
data: {
108-
type: TypeSystemDefinition.FieldDefinition,
109-
},
63+
type: ScalarTypes.String,
11064
}),
11165
],
11266
}),

0 commit comments

Comments
 (0)