@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.
Files changed (42) hide show
  1. package/babel.config.js +1 -0
  2. package/dist/argument-node.d.ts +4 -0
  3. package/dist/ast.d.ts +95 -0
  4. package/dist/constants.d.ts +12 -0
  5. package/dist/directive-node.d.ts +5 -0
  6. package/dist/document.d.ts +3 -0
  7. package/dist/field-node.d.ts +4 -0
  8. package/dist/fragment-spread-node.d.ts +4 -0
  9. package/dist/fragment.d.ts +3 -0
  10. package/dist/inline-fragment-node.d.ts +4 -0
  11. package/dist/luvioGraphqlParser.js +3887 -0
  12. package/dist/main.d.ts +4 -0
  13. package/dist/operation/index.d.ts +3 -0
  14. package/dist/operation/query/index.d.ts +6 -0
  15. package/dist/type-node.d.ts +3 -0
  16. package/dist/value-node.d.ts +4 -0
  17. package/dist/variable-definition.d.ts +4 -0
  18. package/dist/visitor.d.ts +4 -0
  19. package/jest.config.js +8 -0
  20. package/package.json +19 -0
  21. package/rollup.config.js +19 -0
  22. package/scripts/cli.mjs +18 -0
  23. package/src/__tests__/ast.spec.ts +109 -0
  24. package/src/__tests__/main.spec.ts +600 -0
  25. package/src/__tests__/type-node.spec.ts +82 -0
  26. package/src/argument-node.ts +18 -0
  27. package/src/ast.ts +200 -0
  28. package/src/constants.ts +14 -0
  29. package/src/directive-node.ts +36 -0
  30. package/src/document.ts +33 -0
  31. package/src/field-node.ts +72 -0
  32. package/src/fragment-spread-node.ts +28 -0
  33. package/src/fragment.ts +46 -0
  34. package/src/inline-fragment-node.ts +31 -0
  35. package/src/main.ts +58 -0
  36. package/src/operation/index.ts +12 -0
  37. package/src/operation/query/index.ts +78 -0
  38. package/src/type-node.ts +39 -0
  39. package/src/value-node.ts +71 -0
  40. package/src/variable-definition.ts +37 -0
  41. package/src/visitor.ts +62 -0
  42. 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
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,9 @@
1
+ {
2
+ "extends": "../../../tsconfig.json",
3
+
4
+ "compilerOptions": {
5
+ "outDir": "dist"
6
+ },
7
+
8
+ "include": ["src"]
9
+ }