···
import { BREAK, Kind } from '@0no-co/graphql.web';
2
-
import { getEnterLeaveForKind } from 'graphql/language/visitor';
2
+
export { BREAK, visit, Kind } from '@0no-co/graphql.web';
4
+
export function getEnterLeaveForKind(visitor, kind) {
5
+
if (typeof visitor[kind] === 'object') {
6
+
return visitor[kind];
9
+
enter: visitor[kind] || visitor.enter,
10
+
leave: visitor.leave,
4
-
export { getEnterLeaveForKind, getVisitFn } from 'graphql/language/visitor';
5
-
export { BREAK, visit, Kind } from '@0no-co/graphql.web';
14
+
export function getVisitFn(visitor, kind, isLeaving) {
15
+
const { enter, leave } = getEnterLeaveForKind(visitor, kind);
16
+
return isLeaving ? leave : enter;
export function visitInParallel(visitors) {
const skipping = new Array(visitors.length).fill(null);
9
-
const mergedVisitor = Object.create(null);
21
+
const mergedVisitor = {};
11
-
for (const kind of Object.values(Kind)) {
23
+
for (const kindName in Kind) {
24
+
const kind = Kind[kindName];
13
-
const enterList = new Array(visitors.length).fill(undefined);
14
-
const leaveList = new Array(visitors.length).fill(undefined);
26
+
const enterList = new Array(visitors.length).fill();
27
+
const leaveList = new Array(visitors.length).fill();
for (let i = 0; i < visitors.length; ++i) {
const { enter, leave } = getEnterLeaveForKind(visitors[i], kind);
···
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) {
37
+
mergedVisitor[kind] = {
39
+
const node = args[0];
40
+
for (let i = 0; i < visitors.length; i++) {
42
+
const result = enterList[i] && enterList[i].apply(visitors[i], args);
43
+
if (result === false) {
45
+
} else if (result === BREAK) {
46
+
skipping[i] = BREAK;
47
+
} 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) {
54
+
const node = args[0];
55
+
for (let i = 0; i < visitors.length; i++) {
57
+
const result = leaveList[i] && leaveList[i].apply(visitors[i], args);
58
+
if (result === BREAK) {
59
+
skipping[i] = BREAK;
60
+
} else if (result !== undefined && result !== false) {
63
+
} else if (skipping[i] === node) {
53
-
} else if (skipping[i] === node) {
60
-
mergedVisitor[kind] = mergedEnterLeave;