@swagger-api/apidom-core 0.92.0 → 0.93.0
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 +4 -0
- package/cjs/elements/SourceMap.cjs +1 -1
- package/cjs/identity/index.cjs +1 -0
- package/cjs/transcluder/Transcluder.cjs +18 -18
- package/cjs/transcluder/index.cjs +1 -1
- package/cjs/transformers/serializers/value/index.cjs +34 -36
- package/cjs/transformers/serializers/yaml-1-2.cjs +58 -65
- package/cjs/transformers/sexprs.cjs +18 -24
- package/cjs/traversal/filter.cjs +1 -1
- package/cjs/traversal/find.cjs +1 -1
- package/cjs/traversal/findAtOffset.cjs +20 -29
- package/cjs/traversal/parents.cjs +19 -31
- package/cjs/traversal/traverse.cjs +16 -19
- package/cjs/traversal/visitor.cjs +13 -27
- package/dist/apidom-core.browser.js +258 -324
- package/dist/apidom-core.browser.min.js +1 -1
- package/es/elements/SourceMap.mjs +1 -1
- package/es/identity/index.mjs +1 -0
- package/es/transcluder/Transcluder.mjs +18 -17
- package/es/transcluder/index.mjs +1 -1
- package/es/transformers/serializers/value/index.mjs +33 -36
- package/es/transformers/serializers/yaml-1-2.mjs +58 -65
- package/es/transformers/sexprs.mjs +18 -23
- package/es/traversal/filter.mjs +1 -1
- package/es/traversal/find.mjs +1 -1
- package/es/traversal/findAtOffset.mjs +20 -29
- package/es/traversal/parents.mjs +19 -29
- package/es/traversal/traverse.mjs +15 -18
- package/es/traversal/visitor.mjs +12 -26
- package/package.json +4 -4
- package/types/dist.d.ts +18 -14
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [0.93.0](https://github.com/swagger-api/apidom/compare/v0.92.0...v0.93.0) (2024-01-23)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @swagger-api/apidom-core
|
|
9
|
+
|
|
6
10
|
# [0.92.0](https://github.com/swagger-api/apidom/compare/v0.91.0...v0.92.0) (2024-01-12)
|
|
7
11
|
|
|
8
12
|
**Note:** Version bump only for package @swagger-api/apidom-core
|
|
@@ -15,7 +15,7 @@ class SourceMap extends _minim.ArrayElement {
|
|
|
15
15
|
return this.children.filter(item => item.classes.contains('position')).get(1);
|
|
16
16
|
}
|
|
17
17
|
set position(position) {
|
|
18
|
-
if (position ===
|
|
18
|
+
if (typeof position === 'undefined') {
|
|
19
19
|
return;
|
|
20
20
|
}
|
|
21
21
|
const start = new _minim.ArrayElement([position.start.row, position.start.column, position.start.char]);
|
package/cjs/identity/index.cjs
CHANGED
|
@@ -8,6 +8,7 @@ var _stampit = _interopRequireDefault(require("stampit"));
|
|
|
8
8
|
var _shortUniqueId = _interopRequireDefault(require("short-unique-id"));
|
|
9
9
|
var _ElementIdentityError = _interopRequireDefault(require("./errors/ElementIdentityError.cjs"));
|
|
10
10
|
var _index = require("../predicates/index.cjs");
|
|
11
|
+
// @TODO(oliwia.rogala@smartbear.com): transforming this stamp to class will break backward compatibility
|
|
11
12
|
const IdentityManager = exports.IdentityManager = (0, _stampit.default)({
|
|
12
13
|
props: {
|
|
13
14
|
uuid: null,
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
4
3
|
exports.__esModule = true;
|
|
5
4
|
exports.default = void 0;
|
|
6
|
-
var _stampit = _interopRequireDefault(require("stampit"));
|
|
7
5
|
var _ramdaAdjunct = require("ramda-adjunct");
|
|
8
6
|
var _index = require("../predicates/index.cjs");
|
|
9
7
|
const computeEdges = (element, edges = new WeakMap()) => {
|
|
@@ -74,18 +72,20 @@ const transcludeChildOfArrayElement = (search, replace, edges) => {
|
|
|
74
72
|
* clone in before passing it to initializer of this stamp.
|
|
75
73
|
*/
|
|
76
74
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
75
|
+
class Transcluder {
|
|
76
|
+
constructor({
|
|
77
|
+
element
|
|
78
|
+
}) {
|
|
79
|
+
this.element = element;
|
|
80
|
+
}
|
|
81
|
+
transclude(search, replace) {
|
|
82
|
+
var _this$edges;
|
|
83
83
|
// shortcut 1. - replacing entire ApiDOM tree
|
|
84
|
-
if (search === element) return replace;
|
|
84
|
+
if (search === this.element) return replace;
|
|
85
85
|
// shortcut 2. - replacing nothing
|
|
86
|
-
if (search === replace) return element;
|
|
87
|
-
edges = (
|
|
88
|
-
const parent = edges.get(search);
|
|
86
|
+
if (search === replace) return this.element;
|
|
87
|
+
this.edges = (_this$edges = this.edges) != null ? _this$edges : computeEdges(this.element);
|
|
88
|
+
const parent = this.edges.get(search);
|
|
89
89
|
if ((0, _ramdaAdjunct.isUndefined)(parent)) {
|
|
90
90
|
return undefined;
|
|
91
91
|
}
|
|
@@ -97,13 +97,13 @@ const Transcluder = _stampit.default.init(function TranscluderConstructor({
|
|
|
97
97
|
*/
|
|
98
98
|
if ((0, _index.isObjectElement)(parent)) {
|
|
99
99
|
// @ts-ignore
|
|
100
|
-
transcludeChildOfObjectElement(search, replace, edges);
|
|
100
|
+
transcludeChildOfObjectElement(search, replace, this.edges);
|
|
101
101
|
} else if ((0, _index.isArrayElement)(parent)) {
|
|
102
|
-
transcludeChildOfArrayElement(search, replace, edges);
|
|
102
|
+
transcludeChildOfArrayElement(search, replace, this.edges);
|
|
103
103
|
} else if ((0, _index.isMemberElement)(parent)) {
|
|
104
|
-
transcludeChildOfMemberElement(search, replace, edges);
|
|
104
|
+
transcludeChildOfMemberElement(search, replace, this.edges);
|
|
105
105
|
}
|
|
106
|
-
return element;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
106
|
+
return this.element;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
109
|
var _default = exports.default = Transcluder;
|
|
@@ -9,7 +9,7 @@ var _Transcluder = _interopRequireDefault(require("./Transcluder.cjs"));
|
|
|
9
9
|
* clone in before passing it to this function.
|
|
10
10
|
*/
|
|
11
11
|
const transclude = (search, replace, element) => {
|
|
12
|
-
const transcluder =
|
|
12
|
+
const transcluder = new _Transcluder.default({
|
|
13
13
|
element
|
|
14
14
|
});
|
|
15
15
|
return transcluder.transclude(search, replace);
|
|
@@ -3,64 +3,62 @@
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
4
4
|
exports.__esModule = true;
|
|
5
5
|
exports.default = void 0;
|
|
6
|
-
var _stampit = _interopRequireDefault(require("stampit"));
|
|
7
6
|
var _visitor = require("./visitor.cjs");
|
|
8
7
|
var _ephemeralArray = _interopRequireDefault(require("./ast/ephemeral-array.cjs"));
|
|
9
8
|
var _ephemeralObject = _interopRequireDefault(require("./ast/ephemeral-object.cjs"));
|
|
10
9
|
var _index = require("../../../predicates/index.cjs");
|
|
11
|
-
/* eslint-disable
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
return element.toValue();
|
|
19
|
-
};
|
|
20
|
-
this.StringElement = function _StringElement(element) {
|
|
21
|
-
return element.toValue();
|
|
22
|
-
};
|
|
23
|
-
this.NullElement = function _NullElement() {
|
|
24
|
-
return null;
|
|
25
|
-
};
|
|
26
|
-
this.ObjectElement = {
|
|
27
|
-
enter(element) {
|
|
28
|
-
if (references.has(element)) {
|
|
29
|
-
return references.get(element).toReference();
|
|
10
|
+
/* eslint-disable class-methods-use-this */
|
|
11
|
+
|
|
12
|
+
class Visitor {
|
|
13
|
+
ObjectElement = {
|
|
14
|
+
enter: element => {
|
|
15
|
+
if (this.references.has(element)) {
|
|
16
|
+
return this.references.get(element).toReference();
|
|
30
17
|
}
|
|
31
18
|
const ephemeral = new _ephemeralObject.default(element.content);
|
|
32
|
-
references.set(element, ephemeral);
|
|
19
|
+
this.references.set(element, ephemeral);
|
|
33
20
|
return ephemeral;
|
|
34
21
|
}
|
|
35
22
|
};
|
|
36
|
-
|
|
37
|
-
leave
|
|
23
|
+
EphemeralObject = {
|
|
24
|
+
leave: ephemeral => {
|
|
38
25
|
return ephemeral.toObject();
|
|
39
26
|
}
|
|
40
27
|
};
|
|
41
|
-
|
|
42
|
-
enter
|
|
28
|
+
MemberElement = {
|
|
29
|
+
enter: element => {
|
|
43
30
|
return [element.key, element.value];
|
|
44
31
|
}
|
|
45
32
|
};
|
|
46
|
-
|
|
47
|
-
enter
|
|
48
|
-
if (references.has(element)) {
|
|
49
|
-
return references.get(element).toReference();
|
|
33
|
+
ArrayElement = {
|
|
34
|
+
enter: element => {
|
|
35
|
+
if (this.references.has(element)) {
|
|
36
|
+
return this.references.get(element).toReference();
|
|
50
37
|
}
|
|
51
38
|
const ephemeral = new _ephemeralArray.default(element.content);
|
|
52
|
-
references.set(element, ephemeral);
|
|
39
|
+
this.references.set(element, ephemeral);
|
|
53
40
|
return ephemeral;
|
|
54
41
|
}
|
|
55
42
|
};
|
|
56
|
-
|
|
57
|
-
leave
|
|
43
|
+
EphemeralArray = {
|
|
44
|
+
leave: ephemeral => {
|
|
58
45
|
return ephemeral.toArray();
|
|
59
46
|
}
|
|
60
47
|
};
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
48
|
+
references = new WeakMap();
|
|
49
|
+
BooleanElement(element) {
|
|
50
|
+
return element.toValue();
|
|
51
|
+
}
|
|
52
|
+
NumberElement(element) {
|
|
53
|
+
return element.toValue();
|
|
54
|
+
}
|
|
55
|
+
StringElement(element) {
|
|
56
|
+
return element.toValue();
|
|
57
|
+
}
|
|
58
|
+
NullElement() {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
64
62
|
const serializer = element => {
|
|
65
63
|
if (!(0, _index.isElement)(element)) return element;
|
|
66
64
|
|
|
@@ -68,6 +66,6 @@ const serializer = element => {
|
|
|
68
66
|
if ((0, _index.isStringElement)(element) || (0, _index.isNumberElement)(element) || (0, _index.isBooleanElement)(element) || (0, _index.isNullElement)(element)) {
|
|
69
67
|
return element.toValue();
|
|
70
68
|
}
|
|
71
|
-
return (0, _visitor.visit)(element, Visitor());
|
|
69
|
+
return (0, _visitor.visit)(element, new Visitor());
|
|
72
70
|
};
|
|
73
71
|
var _default = exports.default = serializer;
|
|
@@ -3,86 +3,79 @@
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
4
4
|
exports.__esModule = true;
|
|
5
5
|
exports.default = void 0;
|
|
6
|
-
var _stampit = _interopRequireDefault(require("stampit"));
|
|
7
6
|
var _visitor = require("../../traversal/visitor.cjs");
|
|
8
7
|
var _index = _interopRequireDefault(require("./value/index.cjs"));
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
indent: 0,
|
|
13
|
-
indentChar: ' '
|
|
14
|
-
},
|
|
15
|
-
init({
|
|
8
|
+
class YamlVisitor {
|
|
9
|
+
static indentChar = ' ';
|
|
10
|
+
constructor({
|
|
16
11
|
directive = false,
|
|
17
12
|
indent = 0
|
|
18
13
|
} = {}) {
|
|
19
14
|
this.result = directive ? '%YAML 1.2\n---\n' : '';
|
|
20
15
|
this.indent = indent;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
this.result += '[]';
|
|
40
|
-
return false;
|
|
41
|
-
}
|
|
42
|
-
element.forEach(item => {
|
|
43
|
-
const visitor = YamlVisitor({
|
|
44
|
-
indent: this.indent + 1
|
|
45
|
-
});
|
|
46
|
-
const indent = this.indentChar.repeat(this.indent);
|
|
47
|
-
(0, _visitor.visit)(item, visitor);
|
|
48
|
-
const {
|
|
49
|
-
result
|
|
50
|
-
} = visitor;
|
|
51
|
-
this.result += result.startsWith('\n') ? `\n${indent}-${result}` : `\n${indent}- ${result}`;
|
|
52
|
-
});
|
|
16
|
+
}
|
|
17
|
+
NumberElement(element) {
|
|
18
|
+
this.result += (0, _index.default)(element);
|
|
19
|
+
}
|
|
20
|
+
BooleanElement(element) {
|
|
21
|
+
const value = (0, _index.default)(element);
|
|
22
|
+
this.result += value ? 'true' : 'false';
|
|
23
|
+
}
|
|
24
|
+
StringElement(element) {
|
|
25
|
+
// for simplicity and avoiding ambiguity we always wrap strings in quotes
|
|
26
|
+
this.result += JSON.stringify((0, _index.default)(element));
|
|
27
|
+
}
|
|
28
|
+
NullElement() {
|
|
29
|
+
this.result += 'null';
|
|
30
|
+
}
|
|
31
|
+
ArrayElement(element) {
|
|
32
|
+
if (element.length === 0) {
|
|
33
|
+
this.result += '[]';
|
|
53
34
|
return false;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
this.
|
|
58
|
-
return false;
|
|
59
|
-
}
|
|
60
|
-
element.forEach((value, key) => {
|
|
61
|
-
const keyVisitor = YamlVisitor({
|
|
62
|
-
indent: this.indent + 1
|
|
63
|
-
});
|
|
64
|
-
const valueVisitor = YamlVisitor({
|
|
65
|
-
indent: this.indent + 1
|
|
66
|
-
});
|
|
67
|
-
const indent = this.indentChar.repeat(this.indent);
|
|
68
|
-
(0, _visitor.visit)(key, keyVisitor);
|
|
69
|
-
(0, _visitor.visit)(value, valueVisitor);
|
|
70
|
-
const {
|
|
71
|
-
result: keyResult
|
|
72
|
-
} = keyVisitor;
|
|
73
|
-
const {
|
|
74
|
-
result: valueResult
|
|
75
|
-
} = valueVisitor;
|
|
76
|
-
this.result += valueResult.startsWith('\n') ? `\n${indent}${keyResult}:${valueResult}` : `\n${indent}${keyResult}: ${valueResult}`;
|
|
35
|
+
}
|
|
36
|
+
element.forEach(item => {
|
|
37
|
+
const visitor = new YamlVisitor({
|
|
38
|
+
indent: this.indent + 1
|
|
77
39
|
});
|
|
40
|
+
const indent = YamlVisitor.indentChar.repeat(this.indent);
|
|
41
|
+
(0, _visitor.visit)(item, visitor);
|
|
42
|
+
const {
|
|
43
|
+
result
|
|
44
|
+
} = visitor;
|
|
45
|
+
this.result += result.startsWith('\n') ? `\n${indent}-${result}` : `\n${indent}- ${result}`;
|
|
46
|
+
});
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
ObjectElement(element) {
|
|
50
|
+
if (element.length === 0) {
|
|
51
|
+
this.result += '{}';
|
|
78
52
|
return false;
|
|
79
53
|
}
|
|
54
|
+
element.forEach((value, key) => {
|
|
55
|
+
const keyVisitor = new YamlVisitor({
|
|
56
|
+
indent: this.indent + 1
|
|
57
|
+
});
|
|
58
|
+
const valueVisitor = new YamlVisitor({
|
|
59
|
+
indent: this.indent + 1
|
|
60
|
+
});
|
|
61
|
+
const indent = YamlVisitor.indentChar.repeat(this.indent);
|
|
62
|
+
(0, _visitor.visit)(key, keyVisitor);
|
|
63
|
+
(0, _visitor.visit)(value, valueVisitor);
|
|
64
|
+
const {
|
|
65
|
+
result: keyResult
|
|
66
|
+
} = keyVisitor;
|
|
67
|
+
const {
|
|
68
|
+
result: valueResult
|
|
69
|
+
} = valueVisitor;
|
|
70
|
+
this.result += valueResult.startsWith('\n') ? `\n${indent}${keyResult}:${valueResult}` : `\n${indent}${keyResult}: ${valueResult}`;
|
|
71
|
+
});
|
|
72
|
+
return false;
|
|
80
73
|
}
|
|
81
|
-
}
|
|
74
|
+
}
|
|
82
75
|
const serializer = (element, {
|
|
83
76
|
directive = false
|
|
84
77
|
} = {}) => {
|
|
85
|
-
const visitor = YamlVisitor({
|
|
78
|
+
const visitor = new YamlVisitor({
|
|
86
79
|
directive
|
|
87
80
|
});
|
|
88
81
|
(0, _visitor.visit)(element, visitor);
|
|
@@ -1,36 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
4
3
|
exports.__esModule = true;
|
|
5
4
|
exports.default = void 0;
|
|
6
|
-
var _stampit = _interopRequireDefault(require("stampit"));
|
|
7
5
|
var _visitor = require("../traversal/visitor.cjs");
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
this.result += this.nestingLevel > 0 ? '\n' : '';
|
|
21
|
-
this.result += `${indent}(${capitalizedElementName}Element`;
|
|
22
|
-
this.nestingLevel += 1;
|
|
23
|
-
},
|
|
24
|
-
leave() {
|
|
25
|
-
this.nestingLevel -= 1;
|
|
26
|
-
this.result += ')';
|
|
27
|
-
}
|
|
6
|
+
class SymbolicExpressionsVisitor {
|
|
7
|
+
result = '';
|
|
8
|
+
nestingLevel = 0;
|
|
9
|
+
enter(element) {
|
|
10
|
+
const {
|
|
11
|
+
element: elementName
|
|
12
|
+
} = element;
|
|
13
|
+
const capitalizedElementName = elementName.charAt(0).toUpperCase() + elementName.slice(1);
|
|
14
|
+
const indent = ' '.repeat(this.nestingLevel);
|
|
15
|
+
this.result += this.nestingLevel > 0 ? '\n' : '';
|
|
16
|
+
this.result += `${indent}(${capitalizedElementName}Element`;
|
|
17
|
+
this.nestingLevel += 1;
|
|
28
18
|
}
|
|
29
|
-
|
|
19
|
+
leave() {
|
|
20
|
+
this.nestingLevel -= 1;
|
|
21
|
+
this.result += ')';
|
|
22
|
+
}
|
|
23
|
+
}
|
|
30
24
|
|
|
31
25
|
// transforms ApiDOM into S-expressions (Symbolic Expressions)
|
|
32
26
|
const sexprs = element => {
|
|
33
|
-
const visitor = SymbolicExpressionsVisitor();
|
|
27
|
+
const visitor = new SymbolicExpressionsVisitor();
|
|
34
28
|
(0, _visitor.visit)(element, visitor);
|
|
35
29
|
return visitor.result;
|
|
36
30
|
};
|
package/cjs/traversal/filter.cjs
CHANGED
|
@@ -6,7 +6,7 @@ var _minim = require("minim");
|
|
|
6
6
|
var _visitor = require("./visitor.cjs");
|
|
7
7
|
// finds all elements matching the predicate
|
|
8
8
|
const filter = (predicate, element) => {
|
|
9
|
-
const visitor =
|
|
9
|
+
const visitor = new _visitor.PredicateVisitor({
|
|
10
10
|
predicate
|
|
11
11
|
});
|
|
12
12
|
(0, _visitor.visit)(element, visitor);
|
package/cjs/traversal/find.cjs
CHANGED
|
@@ -6,7 +6,7 @@ var _ramda = require("ramda");
|
|
|
6
6
|
var _visitor = require("./visitor.cjs");
|
|
7
7
|
// find first element that satisfies the provided predicate
|
|
8
8
|
const find = (predicate, element) => {
|
|
9
|
-
const visitor =
|
|
9
|
+
const visitor = new _visitor.PredicateVisitor({
|
|
10
10
|
predicate,
|
|
11
11
|
returnOnTrue: _visitor.BREAK
|
|
12
12
|
});
|
|
@@ -3,44 +3,35 @@
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
4
4
|
exports.__esModule = true;
|
|
5
5
|
exports.default = void 0;
|
|
6
|
-
var _stampit = _interopRequireDefault(require("stampit"));
|
|
7
6
|
var _ramda = require("ramda");
|
|
8
7
|
var _ramdaAdjunct = require("ramda-adjunct");
|
|
9
8
|
var _index = require("../predicates/index.cjs");
|
|
10
9
|
var _visitor = require("./visitor.cjs");
|
|
11
10
|
var _index2 = _interopRequireDefault(require("../transformers/serializers/value/index.cjs"));
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
},
|
|
18
|
-
// @ts-ignore
|
|
19
|
-
init({
|
|
20
|
-
offset = this.offset,
|
|
21
|
-
includeRightBound = this.includeRightBound
|
|
22
|
-
}) {
|
|
11
|
+
class Visitor {
|
|
12
|
+
constructor({
|
|
13
|
+
offset = 0,
|
|
14
|
+
includeRightBound = false
|
|
15
|
+
} = {}) {
|
|
23
16
|
this.result = [];
|
|
24
17
|
this.offset = offset;
|
|
25
18
|
this.includeRightBound = includeRightBound;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
return undefined; // push to stack and dive in
|
|
39
|
-
}
|
|
40
|
-
return false; // skip entire sub-tree
|
|
19
|
+
}
|
|
20
|
+
enter(element) {
|
|
21
|
+
if (!(0, _index.hasElementSourceMap)(element)) {
|
|
22
|
+
return undefined; // dive in
|
|
23
|
+
}
|
|
24
|
+
const sourceMapElement = element.getMetaProperty('sourceMap');
|
|
25
|
+
const charStart = (0, _index2.default)(sourceMapElement.positionStart.get(2));
|
|
26
|
+
const charEnd = (0, _index2.default)(sourceMapElement.positionEnd.get(2));
|
|
27
|
+
const isWithinOffsetRange = this.offset >= charStart && (this.offset < charEnd || this.includeRightBound && this.offset <= charEnd);
|
|
28
|
+
if (isWithinOffsetRange) {
|
|
29
|
+
this.result.push(element);
|
|
30
|
+
return undefined; // push to stack and dive in
|
|
41
31
|
}
|
|
32
|
+
return false; // skip entire sub-tree
|
|
42
33
|
}
|
|
43
|
-
}
|
|
34
|
+
}
|
|
44
35
|
// Finds the most inner node at the given offset.
|
|
45
36
|
// If includeRightBound is set, also finds nodes that end at the given offset.
|
|
46
37
|
// findAtOffset :: Number -> Element -> Element | Undefined
|
|
@@ -54,7 +45,7 @@ const findAtOffset = (options, element) => {
|
|
|
54
45
|
offset = (0, _ramda.pathOr)(0, ['offset'], options);
|
|
55
46
|
includeRightBound = (0, _ramda.pathOr)(false, ['includeRightBound'], options);
|
|
56
47
|
}
|
|
57
|
-
const visitor = Visitor({
|
|
48
|
+
const visitor = new Visitor({
|
|
58
49
|
offset,
|
|
59
50
|
includeRightBound
|
|
60
51
|
});
|
|
@@ -1,44 +1,32 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
4
3
|
exports.__esModule = true;
|
|
5
4
|
exports.default = void 0;
|
|
6
|
-
var _stampit = _interopRequireDefault(require("stampit"));
|
|
7
5
|
var _visitor = require("./visitor.cjs");
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const Visitor = (0, _stampit.default)({
|
|
11
|
-
props: {
|
|
12
|
-
parent: null,
|
|
13
|
-
parentEdges: null
|
|
14
|
-
},
|
|
15
|
-
init() {
|
|
6
|
+
class Visitor {
|
|
7
|
+
constructor() {
|
|
16
8
|
this.parentEdges = new WeakMap();
|
|
17
|
-
},
|
|
18
|
-
methods: {
|
|
19
|
-
ObjectElement(objectElement) {
|
|
20
|
-
this.parentEdges.set(objectElement, this.parent);
|
|
21
|
-
this.parent = objectElement;
|
|
22
|
-
},
|
|
23
|
-
ArrayElement(arrayElement) {
|
|
24
|
-
this.parentEdges.set(arrayElement, this.parent);
|
|
25
|
-
this.parent = arrayElement;
|
|
26
|
-
},
|
|
27
|
-
MemberElement(memberElement) {
|
|
28
|
-
this.parentEdges.set(memberElement, this.parent);
|
|
29
|
-
this.parent = memberElement;
|
|
30
|
-
},
|
|
31
|
-
enter(element) {
|
|
32
|
-
this.parentEdges.set(element, this.parent);
|
|
33
|
-
}
|
|
34
9
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
10
|
+
ObjectElement(objectElement) {
|
|
11
|
+
this.parentEdges.set(objectElement, this.parent);
|
|
12
|
+
this.parent = objectElement;
|
|
13
|
+
}
|
|
14
|
+
ArrayElement(arrayElement) {
|
|
15
|
+
this.parentEdges.set(arrayElement, this.parent);
|
|
16
|
+
this.parent = arrayElement;
|
|
17
|
+
}
|
|
18
|
+
MemberElement(memberElement) {
|
|
19
|
+
this.parentEdges.set(memberElement, this.parent);
|
|
20
|
+
this.parent = memberElement;
|
|
21
|
+
}
|
|
22
|
+
enter(element) {
|
|
23
|
+
this.parentEdges.set(element, this.parent);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
38
26
|
|
|
39
27
|
// computes upwards edges from every child to its parent
|
|
40
28
|
const parents = element => {
|
|
41
|
-
const visitor = Visitor();
|
|
29
|
+
const visitor = new Visitor();
|
|
42
30
|
(0, _visitor.visit)(element, visitor);
|
|
43
31
|
return visitor.parentEdges;
|
|
44
32
|
};
|
|
@@ -1,35 +1,32 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
4
3
|
exports.__esModule = true;
|
|
5
4
|
exports.default = exports.CallbackVisitor = void 0;
|
|
6
|
-
var _stampit = _interopRequireDefault(require("stampit"));
|
|
7
5
|
var _ramda = require("ramda");
|
|
8
6
|
var _ramdaAdjunct = require("ramda-adjunct");
|
|
9
7
|
var _visitor = require("./visitor.cjs");
|
|
10
8
|
var _index = require("../predicates/index.cjs");
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
callback
|
|
14
|
-
|
|
15
|
-
// @ts-ignore
|
|
16
|
-
init({
|
|
17
|
-
callback = this.callback
|
|
9
|
+
class CallbackVisitor extends _visitor.PredicateVisitor {
|
|
10
|
+
constructor({
|
|
11
|
+
callback = _ramdaAdjunct.noop,
|
|
12
|
+
...rest
|
|
18
13
|
} = {}) {
|
|
14
|
+
super({
|
|
15
|
+
...rest
|
|
16
|
+
});
|
|
19
17
|
this.callback = callback;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
return this.returnOnTrue;
|
|
26
|
-
}
|
|
27
|
-
return this.returnOnFalse;
|
|
18
|
+
}
|
|
19
|
+
enter(element) {
|
|
20
|
+
if (this.predicate(element)) {
|
|
21
|
+
this.callback(element);
|
|
22
|
+
return this.returnOnTrue;
|
|
28
23
|
}
|
|
24
|
+
return this.returnOnFalse;
|
|
29
25
|
}
|
|
30
|
-
}
|
|
26
|
+
}
|
|
31
27
|
|
|
32
28
|
// executes the callback on this element and all descendants
|
|
29
|
+
exports.CallbackVisitor = CallbackVisitor;
|
|
33
30
|
const traverse = (options, element) => {
|
|
34
31
|
let callback;
|
|
35
32
|
let predicate;
|
|
@@ -40,7 +37,7 @@ const traverse = (options, element) => {
|
|
|
40
37
|
callback = (0, _ramda.pathOr)(_ramdaAdjunct.noop, ['callback'], options);
|
|
41
38
|
predicate = (0, _ramda.pathOr)(_index.isElement, ['predicate'], options);
|
|
42
39
|
}
|
|
43
|
-
const visitor = CallbackVisitor({
|
|
40
|
+
const visitor = new CallbackVisitor({
|
|
44
41
|
callback,
|
|
45
42
|
predicate
|
|
46
43
|
});
|