···
1
+
import { Kind } from 'graphql';
2
+
import { printBlockString } from './blockString';
3
+
import { printString } from './printString';
5
+
export function print(node) {
6
+
if (Array.isArray(node)) {
7
+
return node.map(print);
8
+
} else if (node == null || typeof node !== 'object') {
9
+
return node ? ('' + node) : '';
12
+
switch (node.kind) {
13
+
case 'OperationDefinition': {
14
+
const prefix = join(
17
+
print(node.name) + wrap('(', join(print(node.variableDefinitions), ', '), ')'),
18
+
join(print(node.directives), ' '),
23
+
return (prefix === 'query' ? '' : prefix + ' ') + print(node.selectionSet);
26
+
case 'VariableDefinition':
27
+
return print(node.variable) +
30
+
wrap(' = ', print(node.defaultValue)) +
31
+
wrap(' ', join(print(node.directives), ' '));
36
+
wrap('', print(node.alias), ': ')
38
+
+ wrap('(', join(print(node.arguments), ', '), ')'),
39
+
join(print(node.directives), ' '),
40
+
print(node.selectionSet)
46
+
return node.isBlockString ? printBlockString(node.value) : printString(node.value);
48
+
case 'BooleanValue':
49
+
return node.value ? 'true' : 'false';
61
+
return '[' + join(print(node.values), ', ') + ']';
64
+
return '{' + join(print(node.fields), ', ') + '}';
67
+
return node.name.value + ': ' + print(node.value);
69
+
case 'Variable': return '$' + node.name.value;
71
+
return join(print(node.definitions), '\n\n');
72
+
case 'SelectionSet': return block(print(node.selections));
73
+
case 'Argument': return node.name.value + ': ' + print(node.value);
75
+
case 'FragmentSpread':
76
+
return '...' + print(node.name) + wrap(' ', join(print(node.directives), ' '));
78
+
case 'InlineFragment':
82
+
wrap('on ', print(node.typeCondition)),
83
+
join(print(node.directives), ' '),
84
+
print(node.selectionSet),
89
+
case 'FragmentDefinition':
90
+
return 'fragment ' + node.name.value +
91
+
wrap('(', join(print(node.variableDefinitions), ', '), ')') + ' ' +
92
+
'on ' + print(node.typeCondition) + ' ' +
93
+
wrap('', join(print(node.directives), ' '), ' ') +
94
+
print(node.selectionSet);
97
+
return '@' + node.name.value + wrap('(', join(print(node.args), ', '), ')');
100
+
return node.name.value;
103
+
return '[' + print(node.type) + ']';
105
+
case 'NonNullType':
106
+
return print(node.type) + '!';
108
+
default: return '';
112
+
const join = (array, separator) =>
115
+
.join(separator || '')) || '';
117
+
const block = array =>
118
+
wrap('{\n ', join(array, '\n').replace(/\n/g, '\n '), '\n}');
120
+
const wrap = (start, value, end) => value
121
+
? start + value + (end || '')