1 | "use strict";
|
---|
2 |
|
---|
3 | exports.__esModule = true;
|
---|
4 | exports.visit = exports.keyMapDefault = exports.isNode = exports.getNodeType = exports.cloneNode = exports.PredicateVisitor = void 0;
|
---|
5 | var _ramda = require("ramda");
|
---|
6 | var _ramdaAdjunct = require("ramda-adjunct");
|
---|
7 | var _apidomAst = require("@swagger-api/apidom-ast");
|
---|
8 | exports.BREAK = _apidomAst.BREAK;
|
---|
9 | exports.mergeAllVisitors = _apidomAst.mergeAllVisitors;
|
---|
10 | var _index = require("../predicates/index.cjs");
|
---|
11 | var _index2 = require("../clone/index.cjs");
|
---|
12 | // getNodeType :: Node -> String
|
---|
13 | const 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
|
---|
25 | exports.getNodeType = getNodeType;
|
---|
26 | const 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
|
---|
34 | exports.cloneNode = cloneNode;
|
---|
35 | const isNode = exports.isNode = (0, _ramda.pipe)(getNodeType, _ramdaAdjunct.isString);
|
---|
36 | const 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 | };
|
---|
51 | class 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 | }
|
---|
74 | exports.PredicateVisitor = PredicateVisitor;
|
---|
75 | const visit = (root,
|
---|
76 | // @ts-ignore
|
---|
77 | visitor, {
|
---|
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
|
---|
94 | exports.visit = visit;
|
---|
95 | visit[Symbol.for('nodejs.util.promisify.custom')] = async (root,
|
---|
96 | // @ts-ignore
|
---|
97 | visitor, {
|
---|
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 | }; |
---|