@swagger-api/apidom-core 0.68.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +366 -0
- package/LICENSES/Apache-2.0.txt +202 -0
- package/LICENSES/MIT.txt +9 -0
- package/README.md +679 -0
- package/cjs/deepmerge.cjs +87 -0
- package/cjs/elements/Annotation.cjs +21 -0
- package/cjs/elements/Comment.cjs +13 -0
- package/cjs/elements/ParseResult.cjs +51 -0
- package/cjs/elements/SourceMap.cjs +29 -0
- package/cjs/index.cjs +144 -0
- package/cjs/media-types.cjs +24 -0
- package/cjs/namespace.cjs +32 -0
- package/cjs/predicates/helpers.cjs +28 -0
- package/cjs/predicates/index.cjs +149 -0
- package/cjs/refractor/index.cjs +37 -0
- package/cjs/refractor/plugins/element-identity.cjs +36 -0
- package/cjs/refractor/plugins/semantic-element-identity.cjs +36 -0
- package/cjs/refractor/plugins/utils/index.cjs +26 -0
- package/cjs/refractor/registration.cjs +34 -0
- package/cjs/refractor/toolbox.cjs +20 -0
- package/cjs/serializers/json.cjs +9 -0
- package/cjs/serializers/value/ast/ephemeral-array.cjs +22 -0
- package/cjs/serializers/value/ast/ephemeral-object.cjs +21 -0
- package/cjs/serializers/value/index.cjs +67 -0
- package/cjs/serializers/value/visitor.cjs +54 -0
- package/cjs/serializers/yaml-1-2.cjs +93 -0
- package/cjs/sexprs.cjs +38 -0
- package/cjs/transcluder/Transcluder.cjs +110 -0
- package/cjs/transcluder/index.cjs +19 -0
- package/cjs/traversal/filter.cjs +20 -0
- package/cjs/traversal/find.cjs +20 -0
- package/cjs/traversal/findAtOffset.cjs +71 -0
- package/cjs/traversal/index.cjs +19 -0
- package/cjs/traversal/parents.cjs +47 -0
- package/cjs/traversal/reject.cjs +14 -0
- package/cjs/traversal/some.cjs +15 -0
- package/cjs/traversal/traverse.cjs +54 -0
- package/cjs/traversal/visitor.cjs +114 -0
- package/cjs/util.cjs +27 -0
- package/dist/apidom-core.browser.js +30952 -0
- package/dist/apidom-core.browser.min.js +1 -0
- package/es/deepmerge.js +84 -0
- package/es/elements/Annotation.js +16 -0
- package/es/elements/Comment.js +8 -0
- package/es/elements/ParseResult.js +46 -0
- package/es/elements/SourceMap.js +24 -0
- package/es/index.js +72 -0
- package/es/media-types.js +22 -0
- package/es/namespace.js +24 -0
- package/es/predicates/helpers.js +22 -0
- package/es/predicates/index.js +124 -0
- package/es/refractor/index.js +32 -0
- package/es/refractor/plugins/element-identity.js +30 -0
- package/es/refractor/plugins/semantic-element-identity.js +34 -0
- package/es/refractor/plugins/utils/index.js +19 -0
- package/es/refractor/registration.js +19 -0
- package/es/refractor/toolbox.js +13 -0
- package/es/serializers/json.js +3 -0
- package/es/serializers/value/ast/ephemeral-array.js +18 -0
- package/es/serializers/value/ast/ephemeral-object.js +17 -0
- package/es/serializers/value/index.js +61 -0
- package/es/serializers/value/visitor.js +54 -0
- package/es/serializers/yaml-1-2.js +87 -0
- package/es/sexprs.js +32 -0
- package/es/transcluder/Transcluder.js +104 -0
- package/es/transcluder/index.js +12 -0
- package/es/traversal/filter.js +14 -0
- package/es/traversal/find.js +14 -0
- package/es/traversal/findAtOffset.js +65 -0
- package/es/traversal/index.js +7 -0
- package/es/traversal/parents.js +40 -0
- package/es/traversal/reject.js +7 -0
- package/es/traversal/some.js +8 -0
- package/es/traversal/traverse.js +47 -0
- package/es/traversal/visitor.js +110 -0
- package/es/util.js +23 -0
- package/package.json +65 -0
- package/types/dist.d.ts +260 -0
- package/types/minim.d.ts +222 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import stampit from 'stampit';
|
|
2
|
+
import { isUndefined } from 'ramda-adjunct';
|
|
3
|
+
import { isObjectElement, isArrayElement, isMemberElement } from "../predicates/index.js";
|
|
4
|
+
const computeEdges = (element, edges = new WeakMap()) => {
|
|
5
|
+
if (isMemberElement(element)) {
|
|
6
|
+
// @ts-ignore
|
|
7
|
+
edges.set(element.key, element);
|
|
8
|
+
// @ts-ignore
|
|
9
|
+
computeEdges(element.key, edges);
|
|
10
|
+
// @ts-ignore
|
|
11
|
+
edges.set(element.value, element);
|
|
12
|
+
// @ts-ignore
|
|
13
|
+
computeEdges(element.value, edges);
|
|
14
|
+
} else {
|
|
15
|
+
element.children.forEach(childElement => {
|
|
16
|
+
edges.set(childElement, element);
|
|
17
|
+
computeEdges(childElement, edges);
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
return edges;
|
|
21
|
+
};
|
|
22
|
+
const transcludeChildOfMemberElement = (search, replace, edges) => {
|
|
23
|
+
const memberElement = edges.get(search);
|
|
24
|
+
if (!isMemberElement(memberElement)) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
if (memberElement.key === search) {
|
|
28
|
+
memberElement.key = replace;
|
|
29
|
+
edges.delete(search);
|
|
30
|
+
edges.set(replace, memberElement);
|
|
31
|
+
}
|
|
32
|
+
if (memberElement.value === search) {
|
|
33
|
+
memberElement.value = replace;
|
|
34
|
+
edges.delete(search);
|
|
35
|
+
edges.set(replace, memberElement);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
const transcludeChildOfObjectElement = (search, replace, edges) => {
|
|
39
|
+
const objectElement = edges.get(search);
|
|
40
|
+
if (!isObjectElement(objectElement)) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
objectElement.content = objectElement.map((value, key, member) => {
|
|
44
|
+
if (member === search) {
|
|
45
|
+
edges.delete(search);
|
|
46
|
+
edges.set(replace, objectElement);
|
|
47
|
+
return replace;
|
|
48
|
+
}
|
|
49
|
+
return member;
|
|
50
|
+
});
|
|
51
|
+
};
|
|
52
|
+
const transcludeChildOfArrayElement = (search, replace, edges) => {
|
|
53
|
+
const arrayElement = edges.get(search);
|
|
54
|
+
if (!isArrayElement(arrayElement)) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
arrayElement.content = arrayElement.map(element => {
|
|
58
|
+
if (element === search) {
|
|
59
|
+
edges.delete(search);
|
|
60
|
+
edges.set(replace, arrayElement);
|
|
61
|
+
return replace;
|
|
62
|
+
}
|
|
63
|
+
return element;
|
|
64
|
+
});
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* This is a mutating stamp. If you don't want your Element to be mutated,
|
|
69
|
+
* clone in before passing it to initializer of this stamp.
|
|
70
|
+
*/
|
|
71
|
+
|
|
72
|
+
const Transcluder = stampit.init(function TranscluderConstructor({
|
|
73
|
+
element
|
|
74
|
+
}) {
|
|
75
|
+
let edges;
|
|
76
|
+
this.transclude = function transclude(search, replace) {
|
|
77
|
+
var _edges;
|
|
78
|
+
// shortcut 1. - replacing entire ApiDOM tree
|
|
79
|
+
if (search === element) return replace;
|
|
80
|
+
// shortcut 2. - replacing nothing
|
|
81
|
+
if (search === replace) return element;
|
|
82
|
+
edges = (_edges = edges) !== null && _edges !== void 0 ? _edges : computeEdges(element);
|
|
83
|
+
const parent = edges.get(search);
|
|
84
|
+
if (isUndefined(parent)) {
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* This predicate must be first because ObjectElement extends ArrayElement.
|
|
90
|
+
* isArrayElement returns true for ObjectElements.
|
|
91
|
+
* (classical problems with polymorphism)
|
|
92
|
+
*/
|
|
93
|
+
if (isObjectElement(parent)) {
|
|
94
|
+
// @ts-ignore
|
|
95
|
+
transcludeChildOfObjectElement(search, replace, edges);
|
|
96
|
+
} else if (isArrayElement(parent)) {
|
|
97
|
+
transcludeChildOfArrayElement(search, replace, edges);
|
|
98
|
+
} else if (isMemberElement(parent)) {
|
|
99
|
+
transcludeChildOfMemberElement(search, replace, edges);
|
|
100
|
+
}
|
|
101
|
+
return element;
|
|
102
|
+
};
|
|
103
|
+
});
|
|
104
|
+
export default Transcluder;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import Transcluder from "./Transcluder.js";
|
|
2
|
+
/**
|
|
3
|
+
* This is a mutating function. If you don't want your Element to be mutated,
|
|
4
|
+
* clone in before passing it to this function.
|
|
5
|
+
*/
|
|
6
|
+
export const transclude = (search, replace, element) => {
|
|
7
|
+
const transcluder = Transcluder({
|
|
8
|
+
element
|
|
9
|
+
});
|
|
10
|
+
return transcluder.transclude(search, replace);
|
|
11
|
+
};
|
|
12
|
+
export default Transcluder;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { curry } from 'ramda';
|
|
2
|
+
import { ArraySlice } from 'minim';
|
|
3
|
+
import { PredicateVisitor, visit } from "./visitor.js"; // finds all elements matching the predicate
|
|
4
|
+
// filter :: Pred -> Element -> ArraySlice
|
|
5
|
+
const filter = curry((predicate, element) => {
|
|
6
|
+
const visitor = PredicateVisitor({
|
|
7
|
+
predicate
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
// @ts-ignore
|
|
11
|
+
visit(element, visitor);
|
|
12
|
+
return new ArraySlice(visitor.result);
|
|
13
|
+
});
|
|
14
|
+
export default filter;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { curry, pathOr } from 'ramda';
|
|
2
|
+
import { PredicateVisitor, BREAK, visit } from "./visitor.js"; // find first element that satisfies the provided predicate
|
|
3
|
+
// find :: Pred -> Element -> Element | Undefined
|
|
4
|
+
const find = curry((predicate, element) => {
|
|
5
|
+
const visitor = PredicateVisitor({
|
|
6
|
+
predicate,
|
|
7
|
+
returnOnTrue: BREAK
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
// @ts-ignore
|
|
11
|
+
visit(element, visitor);
|
|
12
|
+
return pathOr(undefined, [0], visitor.result);
|
|
13
|
+
});
|
|
14
|
+
export default find;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import stampit from 'stampit';
|
|
2
|
+
import { curry, last, pathOr } from 'ramda';
|
|
3
|
+
import { isNumber } from 'ramda-adjunct';
|
|
4
|
+
import { hasElementSourceMap } from "../predicates/index.js";
|
|
5
|
+
import { visit } from "./visitor.js";
|
|
6
|
+
const Visitor = stampit({
|
|
7
|
+
props: {
|
|
8
|
+
result: [],
|
|
9
|
+
offset: 0,
|
|
10
|
+
includeRightBound: false
|
|
11
|
+
},
|
|
12
|
+
// @ts-ignore
|
|
13
|
+
init({
|
|
14
|
+
offset = this.offset,
|
|
15
|
+
includeRightBound = this.includeRightBound
|
|
16
|
+
}) {
|
|
17
|
+
this.result = [];
|
|
18
|
+
this.offset = offset;
|
|
19
|
+
this.includeRightBound = includeRightBound;
|
|
20
|
+
},
|
|
21
|
+
methods: {
|
|
22
|
+
enter(element) {
|
|
23
|
+
if (!hasElementSourceMap(element)) {
|
|
24
|
+
return undefined; // dive in
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const sourceMapElement = element.getMetaProperty('sourceMap');
|
|
28
|
+
const charStart = sourceMapElement.positionStart.get(2).toValue();
|
|
29
|
+
const charEnd = sourceMapElement.positionEnd.get(2).toValue();
|
|
30
|
+
const isWithinOffsetRange = this.offset >= charStart && (this.offset < charEnd || this.includeRightBound && this.offset <= charEnd);
|
|
31
|
+
if (isWithinOffsetRange) {
|
|
32
|
+
this.result.push(element);
|
|
33
|
+
return undefined; // push to stack and dive in
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return false; // skip entire sub-tree
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
// Finds the most inner node at the given offset.
|
|
42
|
+
// If includeRightBound is set, also finds nodes that end at the given offset.
|
|
43
|
+
// findAtOffset :: Number -> Element -> Element | Undefined
|
|
44
|
+
const findAtOffset = curry((options, element) => {
|
|
45
|
+
let offset;
|
|
46
|
+
let includeRightBound;
|
|
47
|
+
if (isNumber(options)) {
|
|
48
|
+
offset = options;
|
|
49
|
+
includeRightBound = false;
|
|
50
|
+
} else {
|
|
51
|
+
offset = pathOr(0, ['offset'], options);
|
|
52
|
+
includeRightBound = pathOr(false, ['includeRightBound'], options);
|
|
53
|
+
}
|
|
54
|
+
const visitor = Visitor({
|
|
55
|
+
offset,
|
|
56
|
+
includeRightBound
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
// @ts-ignore
|
|
60
|
+
visit(element, visitor);
|
|
61
|
+
|
|
62
|
+
// @ts-ignore
|
|
63
|
+
return last(visitor.result);
|
|
64
|
+
});
|
|
65
|
+
export default findAtOffset;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { default as filter } from "./filter.js";
|
|
2
|
+
export { default as find } from "./find.js";
|
|
3
|
+
export { default as findAtOffset } from "./findAtOffset.js";
|
|
4
|
+
export { default as reject } from "./reject.js";
|
|
5
|
+
export { default as some } from "./some.js";
|
|
6
|
+
export { default as traverse } from "./traverse.js";
|
|
7
|
+
export { default as parents } from "./parents.js";
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import stampit from 'stampit';
|
|
2
|
+
import { visit } from "./visitor.js";
|
|
3
|
+
/* eslint-disable no-param-reassign */
|
|
4
|
+
const Visitor = stampit({
|
|
5
|
+
props: {
|
|
6
|
+
parent: null,
|
|
7
|
+
parentEdges: null
|
|
8
|
+
},
|
|
9
|
+
init() {
|
|
10
|
+
this.parentEdges = new WeakMap();
|
|
11
|
+
},
|
|
12
|
+
methods: {
|
|
13
|
+
ObjectElement(objectElement) {
|
|
14
|
+
this.parentEdges.set(objectElement, this.parent);
|
|
15
|
+
this.parent = objectElement;
|
|
16
|
+
},
|
|
17
|
+
ArrayElement(arrayElement) {
|
|
18
|
+
this.parentEdges.set(arrayElement, this.parent);
|
|
19
|
+
this.parent = arrayElement;
|
|
20
|
+
},
|
|
21
|
+
MemberElement(memberElement) {
|
|
22
|
+
this.parentEdges.set(memberElement, this.parent);
|
|
23
|
+
this.parent = memberElement;
|
|
24
|
+
},
|
|
25
|
+
enter(element) {
|
|
26
|
+
this.parentEdges.set(element, this.parent);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
/* eslint-enable */
|
|
32
|
+
|
|
33
|
+
// computes upwards edges from every child to its parent
|
|
34
|
+
// find :: Element -> WeakMap<Element, Element>
|
|
35
|
+
const parents = element => {
|
|
36
|
+
const visitor = Visitor();
|
|
37
|
+
visit(element, visitor);
|
|
38
|
+
return visitor.parentEdges;
|
|
39
|
+
};
|
|
40
|
+
export default parents;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { complement, curry } from 'ramda';
|
|
2
|
+
import filter from "./filter.js"; // complement of filter
|
|
3
|
+
// reject :: Pred -> Element -> ArraySlice
|
|
4
|
+
const reject = curry((predicate, element) => {
|
|
5
|
+
return filter(complement(predicate))(element);
|
|
6
|
+
});
|
|
7
|
+
export default reject;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { curry } from 'ramda';
|
|
2
|
+
import { isNotUndefined } from 'ramda-adjunct';
|
|
3
|
+
import find from "./find.js"; // tests whether at least one element passes the predicate
|
|
4
|
+
// some :: Pred -> Element -> Boolean
|
|
5
|
+
const some = curry((predicate, element) => {
|
|
6
|
+
return isNotUndefined(find(predicate)(element));
|
|
7
|
+
});
|
|
8
|
+
export default some;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import stampit from 'stampit';
|
|
2
|
+
import { curry, pathOr } from 'ramda';
|
|
3
|
+
import { isFunction, noop } from 'ramda-adjunct';
|
|
4
|
+
import { visit, PredicateVisitor } from "./visitor.js";
|
|
5
|
+
import { isElement } from "../predicates/index.js";
|
|
6
|
+
export const CallbackVisitor = stampit(PredicateVisitor, {
|
|
7
|
+
props: {
|
|
8
|
+
callback: noop
|
|
9
|
+
},
|
|
10
|
+
// @ts-ignore
|
|
11
|
+
init({
|
|
12
|
+
callback = this.callback
|
|
13
|
+
} = {}) {
|
|
14
|
+
this.callback = callback;
|
|
15
|
+
},
|
|
16
|
+
methods: {
|
|
17
|
+
enter(element) {
|
|
18
|
+
if (this.predicate(element)) {
|
|
19
|
+
this.callback(element);
|
|
20
|
+
return this.returnOnTrue;
|
|
21
|
+
}
|
|
22
|
+
return this.returnOnFalse;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
// executes the callback on this element and all descendants
|
|
28
|
+
// traverse :: Callback | { predicate: Pred, callback: Callback } -> Element -> Undefined
|
|
29
|
+
const traverse = curry((options, element) => {
|
|
30
|
+
let callback;
|
|
31
|
+
let predicate;
|
|
32
|
+
if (isFunction(options)) {
|
|
33
|
+
callback = options;
|
|
34
|
+
predicate = isElement;
|
|
35
|
+
} else {
|
|
36
|
+
callback = pathOr(noop, ['callback'], options);
|
|
37
|
+
predicate = pathOr(isElement, ['predicate'], options);
|
|
38
|
+
}
|
|
39
|
+
const visitor = CallbackVisitor({
|
|
40
|
+
callback,
|
|
41
|
+
predicate
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
// @ts-ignore
|
|
45
|
+
visit(element, visitor);
|
|
46
|
+
});
|
|
47
|
+
export default traverse;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
|
|
2
|
+
import _objectWithoutProperties from "@babel/runtime-corejs3/helpers/esm/objectWithoutProperties";
|
|
3
|
+
const _excluded = ["keyMap"],
|
|
4
|
+
_excluded2 = ["keyMap"];
|
|
5
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
6
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
7
|
+
import stampit from 'stampit';
|
|
8
|
+
import { curryN, F as stubFalse, pipe } from 'ramda';
|
|
9
|
+
import { isString } from 'ramda-adjunct';
|
|
10
|
+
import { visit as astVisit, BREAK, mergeAllVisitors } from '@swagger-api/apidom-ast';
|
|
11
|
+
import { isMemberElement, isArrayElement, isStringElement, isBooleanElement, isLinkElement, isRefElement, isObjectElement, isNullElement, isNumberElement } from "../predicates/index.js";
|
|
12
|
+
export { BREAK, mergeAllVisitors };
|
|
13
|
+
|
|
14
|
+
// getNodeType :: Node -> String
|
|
15
|
+
export const getNodeType = element => {
|
|
16
|
+
/*
|
|
17
|
+
* We're translating every possible higher element type to primitive minim type here.
|
|
18
|
+
* We're using polymorphism to recognize any higher element type as ObjectElement or ArrayElement.
|
|
19
|
+
* Using polymorphism allows us to assume any namespace.
|
|
20
|
+
*
|
|
21
|
+
* There is a problem with naming visitor methods described here: https://github.com/babel/babel/discussions/12874
|
|
22
|
+
*/
|
|
23
|
+
/* eslint-disable no-nested-ternary */
|
|
24
|
+
return isObjectElement(element) ? 'ObjectElement' : isArrayElement(element) ? 'ArrayElement' : isMemberElement(element) ? 'MemberElement' : isStringElement(element) ? 'StringElement' : isBooleanElement(element) ? 'BooleanElement' : isNumberElement(element) ? 'NumberElement' : isNullElement(element) ? 'NullElement' : isLinkElement(element) ? 'LinkElement' : isRefElement(element) ? 'RefElement' : undefined;
|
|
25
|
+
/* eslint-enable */
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
// isNode :: Node -> Boolean
|
|
29
|
+
export const isNode = curryN(1, pipe(getNodeType, isString));
|
|
30
|
+
export const keyMapDefault = {
|
|
31
|
+
ObjectElement: ['content'],
|
|
32
|
+
ArrayElement: ['content'],
|
|
33
|
+
MemberElement: ['key', 'value'],
|
|
34
|
+
StringElement: [],
|
|
35
|
+
BooleanElement: [],
|
|
36
|
+
NumberElement: [],
|
|
37
|
+
NullElement: [],
|
|
38
|
+
RefElement: [],
|
|
39
|
+
LinkElement: [],
|
|
40
|
+
Annotation: [],
|
|
41
|
+
Comment: [],
|
|
42
|
+
ParseResultElement: ['content'],
|
|
43
|
+
SourceMap: ['content']
|
|
44
|
+
};
|
|
45
|
+
export const PredicateVisitor = stampit({
|
|
46
|
+
props: {
|
|
47
|
+
result: [],
|
|
48
|
+
predicate: stubFalse,
|
|
49
|
+
returnOnTrue: undefined,
|
|
50
|
+
returnOnFalse: undefined
|
|
51
|
+
},
|
|
52
|
+
init({
|
|
53
|
+
// @ts-ignore
|
|
54
|
+
predicate = this.predicate,
|
|
55
|
+
// @ts-ignore
|
|
56
|
+
returnOnTrue = this.returnOnTrue,
|
|
57
|
+
// @ts-ignore
|
|
58
|
+
returnOnFalse = this.returnOnFalse
|
|
59
|
+
} = {}) {
|
|
60
|
+
this.result = [];
|
|
61
|
+
this.predicate = predicate;
|
|
62
|
+
this.returnOnTrue = returnOnTrue;
|
|
63
|
+
this.returnOnFalse = returnOnFalse;
|
|
64
|
+
},
|
|
65
|
+
methods: {
|
|
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
|
+
});
|
|
75
|
+
|
|
76
|
+
// @ts-ignore
|
|
77
|
+
export const visit = (root,
|
|
78
|
+
// @ts-ignore
|
|
79
|
+
visitor, _ref = {}) => {
|
|
80
|
+
let {
|
|
81
|
+
keyMap = keyMapDefault
|
|
82
|
+
} = _ref,
|
|
83
|
+
rest = _objectWithoutProperties(_ref, _excluded);
|
|
84
|
+
// @ts-ignore
|
|
85
|
+
return astVisit(root, visitor, _objectSpread({
|
|
86
|
+
// @ts-ignore
|
|
87
|
+
keyMap,
|
|
88
|
+
// @ts-ignore
|
|
89
|
+
nodeTypeGetter: getNodeType,
|
|
90
|
+
nodePredicate: isNode
|
|
91
|
+
}, rest));
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
// @ts-ignore
|
|
95
|
+
visit[Symbol.for('nodejs.util.promisify.custom')] = async (root,
|
|
96
|
+
// @ts-ignore
|
|
97
|
+
visitor, _ref2 = {}) => {
|
|
98
|
+
let {
|
|
99
|
+
keyMap = keyMapDefault
|
|
100
|
+
} = _ref2,
|
|
101
|
+
rest = _objectWithoutProperties(_ref2, _excluded2);
|
|
102
|
+
// @ts-ignore
|
|
103
|
+
return astVisit[Symbol.for('nodejs.util.promisify.custom')](root, visitor, _objectSpread({
|
|
104
|
+
// @ts-ignore
|
|
105
|
+
keyMap,
|
|
106
|
+
// @ts-ignore
|
|
107
|
+
nodeTypeGetter: getNodeType,
|
|
108
|
+
nodePredicate: isNode
|
|
109
|
+
}, rest));
|
|
110
|
+
};
|
package/es/util.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { defaultTo, has, mapObjIndexed, path, propSatisfies } from 'ramda';
|
|
2
|
+
import { isPlainObject, isString, trimCharsStart } from 'ramda-adjunct';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* This dereference algorithm is used exclusively for dereferencing specification objects.
|
|
6
|
+
* It doesn't handle circular references of external references and works on objects only (not arrays).
|
|
7
|
+
*/
|
|
8
|
+
// eslint-disable-next-line import/prefer-default-export
|
|
9
|
+
export const dereference = (object, root) => {
|
|
10
|
+
const rootObject = defaultTo(object, root);
|
|
11
|
+
return mapObjIndexed(val => {
|
|
12
|
+
if (isPlainObject(val) && has('$ref', val) && propSatisfies(isString, '$ref', val)) {
|
|
13
|
+
const $ref = path(['$ref'], val);
|
|
14
|
+
// @ts-ignore
|
|
15
|
+
const pointer = trimCharsStart('#/', $ref);
|
|
16
|
+
return path(pointer.split('/'), rootObject);
|
|
17
|
+
}
|
|
18
|
+
if (isPlainObject(val)) {
|
|
19
|
+
return dereference(val, rootObject);
|
|
20
|
+
}
|
|
21
|
+
return val;
|
|
22
|
+
}, object);
|
|
23
|
+
};
|
package/package.json
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@swagger-api/apidom-core",
|
|
3
|
+
"version": "0.68.1",
|
|
4
|
+
"description": "Tools for manipulating ApiDOM structures.",
|
|
5
|
+
"publishConfig": {
|
|
6
|
+
"access": "public",
|
|
7
|
+
"registry": "https://registry.npmjs.org"
|
|
8
|
+
},
|
|
9
|
+
"type": "module",
|
|
10
|
+
"sideEffects": [
|
|
11
|
+
"./es/refractor/registration.js",
|
|
12
|
+
"./cjs/refractor/registration.cjs"
|
|
13
|
+
],
|
|
14
|
+
"unpkg": "./dist/apidom-core.browser.min.js",
|
|
15
|
+
"main": "./cjs/index.cjs",
|
|
16
|
+
"exports": {
|
|
17
|
+
"types": "./types/dist.d.ts",
|
|
18
|
+
"import": "./es/index.js",
|
|
19
|
+
"require": "./cjs/index.cjs"
|
|
20
|
+
},
|
|
21
|
+
"types": "./types/dist.d.ts",
|
|
22
|
+
"scripts": {
|
|
23
|
+
"build": "npm run clean && run-p --max-parallel ${CPU_CORES:-2} typescript:declaration build:es build:cjs build:umd:browser",
|
|
24
|
+
"build:es": "cross-env BABEL_ENV=es babel src --out-dir es --extensions '.ts' --root-mode 'upward'",
|
|
25
|
+
"build:cjs": "cross-env BABEL_ENV=cjs babel src --out-dir cjs --extensions '.ts' --out-file-extension '.cjs' --root-mode 'upward'",
|
|
26
|
+
"build:umd:browser": "cross-env BABEL_ENV=browser BROWSERSLIST_ENV=production webpack --config config/webpack/browser.config.js --progress",
|
|
27
|
+
"lint": "eslint ./",
|
|
28
|
+
"lint:fix": "eslint ./ --fix",
|
|
29
|
+
"clean": "rimraf ./es ./cjs ./dist ./types",
|
|
30
|
+
"typescript:check-types": "tsc -p check-types.tsconfig.json --noEmit",
|
|
31
|
+
"typescript:declaration": "tsc -p declaration.tsconfig.json && rollup -c config/rollup/types.dist.js && copyfiles -u 2 ../@types/minim.d.ts ./types && node ../../scripts/file-prepend-bof.js './types/dist.d.ts' '/// <reference path=\"./minim.d.ts\" />'",
|
|
32
|
+
"test": "cross-env NODE_ENV=test BABEL_ENV=cjs mocha",
|
|
33
|
+
"test:update-snapshots": "cross-env UPDATE_SNAPSHOT=1 BABEL_ENV=cjs mocha",
|
|
34
|
+
"prepack": "copyfiles -u 3 ../../LICENSES/* LICENSES && copyfiles -u 2 ../../NOTICE",
|
|
35
|
+
"postpack": "rimraf NOTICE LICENSES"
|
|
36
|
+
},
|
|
37
|
+
"repository": {
|
|
38
|
+
"type": "git",
|
|
39
|
+
"url": "git+https://github.com/swagger-api/apidom.git"
|
|
40
|
+
},
|
|
41
|
+
"author": "Vladimír Gorej",
|
|
42
|
+
"license": "Apache-2.0",
|
|
43
|
+
"dependencies": {
|
|
44
|
+
"@babel/runtime-corejs3": "^7.20.7",
|
|
45
|
+
"@swagger-api/apidom-ast": "^0.68.0",
|
|
46
|
+
"@types/ramda": "=0.28.23",
|
|
47
|
+
"minim": "=0.23.8",
|
|
48
|
+
"ramda": "=0.28.0",
|
|
49
|
+
"ramda-adjunct": "=3.4.0",
|
|
50
|
+
"short-unique-id": "=4.4.4",
|
|
51
|
+
"stampit": "=4.3.2"
|
|
52
|
+
},
|
|
53
|
+
"files": [
|
|
54
|
+
"cjs/",
|
|
55
|
+
"dist/",
|
|
56
|
+
"es/",
|
|
57
|
+
"types/dist.d.ts",
|
|
58
|
+
"types/minim.d.ts",
|
|
59
|
+
"LICENSES",
|
|
60
|
+
"NOTICE",
|
|
61
|
+
"README.md",
|
|
62
|
+
"CHANGELOG.md"
|
|
63
|
+
],
|
|
64
|
+
"gitHead": "d2bc706671f1b9a593b8f0c5bca8c501ad0e4cff"
|
|
65
|
+
}
|