@luvio/graphql-parser 0.62.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/babel.config.js +1 -0
- package/dist/argument-node.d.ts +4 -0
- package/dist/ast.d.ts +95 -0
- package/dist/constants.d.ts +12 -0
- package/dist/directive-node.d.ts +5 -0
- package/dist/document.d.ts +3 -0
- package/dist/field-node.d.ts +4 -0
- package/dist/fragment-spread-node.d.ts +4 -0
- package/dist/fragment.d.ts +3 -0
- package/dist/inline-fragment-node.d.ts +4 -0
- package/dist/luvioGraphqlParser.js +3887 -0
- package/dist/main.d.ts +4 -0
- package/dist/operation/index.d.ts +3 -0
- package/dist/operation/query/index.d.ts +6 -0
- package/dist/type-node.d.ts +3 -0
- package/dist/value-node.d.ts +4 -0
- package/dist/variable-definition.d.ts +4 -0
- package/dist/visitor.d.ts +4 -0
- package/jest.config.js +8 -0
- package/package.json +19 -0
- package/rollup.config.js +19 -0
- package/scripts/cli.mjs +18 -0
- package/src/__tests__/ast.spec.ts +109 -0
- package/src/__tests__/main.spec.ts +600 -0
- package/src/__tests__/type-node.spec.ts +82 -0
- package/src/argument-node.ts +18 -0
- package/src/ast.ts +200 -0
- package/src/constants.ts +14 -0
- package/src/directive-node.ts +36 -0
- package/src/document.ts +33 -0
- package/src/field-node.ts +72 -0
- package/src/fragment-spread-node.ts +28 -0
- package/src/fragment.ts +46 -0
- package/src/inline-fragment-node.ts +31 -0
- package/src/main.ts +58 -0
- package/src/operation/index.ts +12 -0
- package/src/operation/query/index.ts +78 -0
- package/src/type-node.ts +39 -0
- package/src/value-node.ts +71 -0
- package/src/variable-definition.ts +37 -0
- package/src/visitor.ts +62 -0
- package/tsconfig.json +9 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { ValueNode } from 'graphql/language';
|
|
2
|
+
import { LuvioValueNode } from './ast';
|
|
3
|
+
import { TransformState } from './operation/query';
|
|
4
|
+
|
|
5
|
+
export function transform(node: ValueNode, transformState: TransformState): LuvioValueNode {
|
|
6
|
+
switch (node.kind) {
|
|
7
|
+
case 'Variable':
|
|
8
|
+
transformState.variablesUsed[node.name.value] = true;
|
|
9
|
+
return {
|
|
10
|
+
kind: 'Variable',
|
|
11
|
+
name: node.name.value,
|
|
12
|
+
};
|
|
13
|
+
case 'IntValue':
|
|
14
|
+
return {
|
|
15
|
+
kind: 'IntValue',
|
|
16
|
+
value: node.value,
|
|
17
|
+
};
|
|
18
|
+
case 'FloatValue':
|
|
19
|
+
return {
|
|
20
|
+
kind: 'FloatValue',
|
|
21
|
+
value: node.value,
|
|
22
|
+
};
|
|
23
|
+
case 'StringValue':
|
|
24
|
+
return {
|
|
25
|
+
kind: 'StringValue',
|
|
26
|
+
value: node.value,
|
|
27
|
+
};
|
|
28
|
+
case 'BooleanValue':
|
|
29
|
+
return {
|
|
30
|
+
kind: 'BooleanValue',
|
|
31
|
+
value: node.value,
|
|
32
|
+
};
|
|
33
|
+
case 'EnumValue':
|
|
34
|
+
return {
|
|
35
|
+
kind: 'EnumValue',
|
|
36
|
+
value: node.value,
|
|
37
|
+
};
|
|
38
|
+
case 'NullValue':
|
|
39
|
+
return {
|
|
40
|
+
kind: 'NullValue',
|
|
41
|
+
};
|
|
42
|
+
case 'ListValue': {
|
|
43
|
+
const values = [];
|
|
44
|
+
for (var index = 0; index < node.values.length; index++) {
|
|
45
|
+
const value = transform(node.values[index], transformState);
|
|
46
|
+
values.push(value);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return {
|
|
50
|
+
kind: 'ListValue',
|
|
51
|
+
values: values,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
case 'ObjectValue': {
|
|
55
|
+
const { fields } = node;
|
|
56
|
+
const result: { [name: string]: LuvioValueNode } = {};
|
|
57
|
+
fields.forEach((field) => {
|
|
58
|
+
const name = field.name.value;
|
|
59
|
+
const value = transform(field.value, transformState);
|
|
60
|
+
result[name] = value;
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
return {
|
|
64
|
+
kind: 'ObjectValue',
|
|
65
|
+
fields: result,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
default:
|
|
69
|
+
throw new Error('Unsupported ValueNode kind');
|
|
70
|
+
}
|
|
71
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { VariableDefinitionNode } from 'graphql/language';
|
|
2
|
+
import { LuvioVariableDefinitionNode } from './ast';
|
|
3
|
+
import { TransformState } from './operation/query';
|
|
4
|
+
import { transform as transformTypeNode } from './type-node';
|
|
5
|
+
import { transform as transformValueNode } from './value-node';
|
|
6
|
+
|
|
7
|
+
export function transform(
|
|
8
|
+
variableDefinitions: VariableDefinitionNode,
|
|
9
|
+
transformState: TransformState
|
|
10
|
+
): LuvioVariableDefinitionNode {
|
|
11
|
+
const {
|
|
12
|
+
kind,
|
|
13
|
+
variable: {
|
|
14
|
+
kind: variableKind,
|
|
15
|
+
name: { value: variableName },
|
|
16
|
+
},
|
|
17
|
+
type,
|
|
18
|
+
defaultValue,
|
|
19
|
+
} = variableDefinitions;
|
|
20
|
+
const ret: LuvioVariableDefinitionNode = {
|
|
21
|
+
kind,
|
|
22
|
+
variable: {
|
|
23
|
+
kind: variableKind,
|
|
24
|
+
name: variableName,
|
|
25
|
+
},
|
|
26
|
+
type: transformTypeNode(type),
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
if (defaultValue !== undefined) {
|
|
30
|
+
const value = transformValueNode(defaultValue, transformState);
|
|
31
|
+
ret.defaultValue = value;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// TODO: transform directives
|
|
35
|
+
|
|
36
|
+
return ret;
|
|
37
|
+
}
|
package/src/visitor.ts
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { ASTNode, ASTVisitor, visit } from 'graphql/language';
|
|
2
|
+
import { LuvioSelectionNode } from './ast';
|
|
3
|
+
import {
|
|
4
|
+
NODE_KIND_CUSTOM_FIELD_SELECTION,
|
|
5
|
+
NODE_KIND_FIELD,
|
|
6
|
+
NODE_KIND_FRAGMENT_SPREAD,
|
|
7
|
+
NODE_KIND_INLINE_FRAGMENT,
|
|
8
|
+
NODE_KIND_OBJECT_FIELD_SELECTION,
|
|
9
|
+
} from './constants';
|
|
10
|
+
import { transform as transformFieldNode } from './field-node';
|
|
11
|
+
import { transform as transformFragmentSpreadNode } from './fragment-spread-node';
|
|
12
|
+
import { transform as transformInlineFragmentNode } from './inline-fragment-node';
|
|
13
|
+
import { TransformState } from './operation/query';
|
|
14
|
+
|
|
15
|
+
export function selectionSetVisitor(
|
|
16
|
+
ast: ASTNode,
|
|
17
|
+
luvioSelectionPath: LuvioSelectionNode[],
|
|
18
|
+
transformState: TransformState
|
|
19
|
+
): void {
|
|
20
|
+
const visitor: ASTVisitor = {
|
|
21
|
+
enter(node) {
|
|
22
|
+
let selectionNode: LuvioSelectionNode | undefined;
|
|
23
|
+
switch (node.kind) {
|
|
24
|
+
case NODE_KIND_FIELD: {
|
|
25
|
+
const fieldNode = transformFieldNode(node, transformState);
|
|
26
|
+
selectionNode = fieldNode;
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
case NODE_KIND_FRAGMENT_SPREAD:
|
|
30
|
+
selectionNode = transformFragmentSpreadNode(node, transformState);
|
|
31
|
+
break;
|
|
32
|
+
case NODE_KIND_INLINE_FRAGMENT:
|
|
33
|
+
selectionNode = transformInlineFragmentNode(node, transformState);
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
if (selectionNode !== undefined) {
|
|
38
|
+
const parentNode = luvioSelectionPath[luvioSelectionPath.length - 1];
|
|
39
|
+
if (
|
|
40
|
+
parentNode.kind === NODE_KIND_OBJECT_FIELD_SELECTION ||
|
|
41
|
+
parentNode.kind === NODE_KIND_CUSTOM_FIELD_SELECTION ||
|
|
42
|
+
parentNode.kind === NODE_KIND_INLINE_FRAGMENT
|
|
43
|
+
) {
|
|
44
|
+
parentNode.luvioSelections!.push(selectionNode);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
luvioSelectionPath.push(selectionNode);
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
leave(node) {
|
|
51
|
+
switch (node.kind) {
|
|
52
|
+
case NODE_KIND_FIELD:
|
|
53
|
+
case NODE_KIND_FRAGMENT_SPREAD:
|
|
54
|
+
case NODE_KIND_INLINE_FRAGMENT:
|
|
55
|
+
luvioSelectionPath.pop();
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
visit(ast, visitor);
|
|
62
|
+
}
|