source: node_modules/@swagger-api/apidom-core/cjs/traversal/visitor.cjs

main
Last change on this file was d24f17c, checked in by Aleksandar Panovski <apano77@…>, 15 months ago

Initial commit

  • Property mode set to 100644
File size: 3.4 KB
Line 
1"use strict";
2
3exports.__esModule = true;
4exports.visit = exports.keyMapDefault = exports.isNode = exports.getNodeType = exports.cloneNode = exports.PredicateVisitor = void 0;
5var _ramda = require("ramda");
6var _ramdaAdjunct = require("ramda-adjunct");
7var _apidomAst = require("@swagger-api/apidom-ast");
8exports.BREAK = _apidomAst.BREAK;
9exports.mergeAllVisitors = _apidomAst.mergeAllVisitors;
10var _index = require("../predicates/index.cjs");
11var _index2 = require("../clone/index.cjs");
12// getNodeType :: Node -> String
13const getNodeType = element => {
14 /*
15 * We're translating every possible higher element type to primitive minim type here.
16 * We're using polymorphism to recognize any higher element type as ObjectElement or ArrayElement.
17 * Using polymorphism allows us to assume any namespace.
18 *
19 * There is a problem with naming visitor methods described here: https://github.com/babel/babel/discussions/12874
20 */
21 return (0, _index.isObjectElement)(element) ? 'ObjectElement' : (0, _index.isArrayElement)(element) ? 'ArrayElement' : (0, _index.isMemberElement)(element) ? 'MemberElement' : (0, _index.isStringElement)(element) ? 'StringElement' : (0, _index.isBooleanElement)(element) ? 'BooleanElement' : (0, _index.isNumberElement)(element) ? 'NumberElement' : (0, _index.isNullElement)(element) ? 'NullElement' : (0, _index.isLinkElement)(element) ? 'LinkElement' : (0, _index.isRefElement)(element) ? 'RefElement' : undefined;
22};
23
24// cloneNode :: a -> a
25exports.getNodeType = getNodeType;
26const cloneNode = node => {
27 if ((0, _index.isElement)(node)) {
28 return (0, _index2.cloneShallow)(node);
29 }
30 return (0, _apidomAst.cloneNode)(node);
31};
32
33// isNode :: Node -> Boolean
34exports.cloneNode = cloneNode;
35const isNode = exports.isNode = (0, _ramda.pipe)(getNodeType, _ramdaAdjunct.isString);
36const keyMapDefault = exports.keyMapDefault = {
37 ObjectElement: ['content'],
38 ArrayElement: ['content'],
39 MemberElement: ['key', 'value'],
40 StringElement: [],
41 BooleanElement: [],
42 NumberElement: [],
43 NullElement: [],
44 RefElement: [],
45 LinkElement: [],
46 Annotation: [],
47 Comment: [],
48 ParseResultElement: ['content'],
49 SourceMap: ['content']
50};
51class PredicateVisitor {
52 result;
53 predicate;
54 returnOnTrue;
55 returnOnFalse;
56 constructor({
57 predicate = _ramda.F,
58 returnOnTrue,
59 returnOnFalse
60 } = {}) {
61 this.result = [];
62 this.predicate = predicate;
63 this.returnOnTrue = returnOnTrue;
64 this.returnOnFalse = returnOnFalse;
65 }
66 enter(element) {
67 if (this.predicate(element)) {
68 this.result.push(element);
69 return this.returnOnTrue;
70 }
71 return this.returnOnFalse;
72 }
73}
74exports.PredicateVisitor = PredicateVisitor;
75const visit = (root,
76// @ts-ignore
77visitor, {
78 keyMap = keyMapDefault,
79 ...rest
80} = {}) => {
81 // @ts-ignore
82 return (0, _apidomAst.visit)(root, visitor, {
83 // @ts-ignore
84 keyMap,
85 // @ts-ignore
86 nodeTypeGetter: getNodeType,
87 nodePredicate: isNode,
88 nodeCloneFn: cloneNode,
89 ...rest
90 });
91};
92
93// @ts-ignore
94exports.visit = visit;
95visit[Symbol.for('nodejs.util.promisify.custom')] = async (root,
96// @ts-ignore
97visitor, {
98 keyMap = keyMapDefault,
99 ...rest
100} = {}) => {
101 // @ts-ignore
102 return _apidomAst.visit[Symbol.for('nodejs.util.promisify.custom')](root, visitor, {
103 // @ts-ignore
104 keyMap,
105 // @ts-ignore
106 nodeTypeGetter: getNodeType,
107 nodePredicate: isNode,
108 nodeCloneFn: cloneNode,
109 ...rest
110 });
111};
Note: See TracBrowser for help on using the repository browser.