···
1
-
export { getEnterLeaveForKind, getVisitFn, visitInParallel } from 'graphql/language/visitor';
1
+
import { BREAK, Kind } from '@0no-co/graphql.web';
2
+
import { getEnterLeaveForKind } from 'graphql/language/visitor';
4
+
export { getEnterLeaveForKind, getVisitFn } from 'graphql/language/visitor';
5
+
export { BREAK, visit, Kind } from '@0no-co/graphql.web';
7
+
export function visitInParallel(visitors) {
8
+
const skipping = new Array(visitors.length).fill(null);
9
+
const mergedVisitor = Object.create(null);
11
+
for (const kind of Object.values(Kind)) {
12
+
let hasVisitor = false;
13
+
const enterList = new Array(visitors.length).fill(undefined);
14
+
const leaveList = new Array(visitors.length).fill(undefined);
16
+
for (let i = 0; i < visitors.length; ++i) {
17
+
const { enter, leave } = getEnterLeaveForKind(visitors[i], kind);
18
+
hasVisitor = hasVisitor || enter != null || leave != null;
19
+
enterList[i] = enter;
20
+
leaveList[i] = leave;
27
+
const mergedEnterLeave = {
29
+
const node = args[0];
30
+
for (let i = 0; i < visitors.length; i++) {
31
+
if (skipping[i] === null) {
32
+
const result = enterList[i] && enterList[i].apply(visitors[i], args);
33
+
if (result === false) {
35
+
} else if (result === BREAK) {
36
+
skipping[i] = BREAK;
37
+
} else if (result !== undefined) {
44
+
const node = args[0];
45
+
for (let i = 0; i < visitors.length; i++) {
46
+
if (skipping[i] === null) {
47
+
const result = leaveList[i] && leaveList[i].apply(visitors[i], args);
48
+
if (result === BREAK) {
49
+
skipping[i] = BREAK;
50
+
} else if (result !== undefined && result !== false) {
53
+
} else if (skipping[i] === node) {
3
-
export { BREAK, visit } from '@0no-co/graphql.web';
60
+
mergedVisitor[kind] = mergedEnterLeave;
63
+
return mergedVisitor;