@swagger-api/apidom-core 0.92.0 → 0.94.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.
Files changed (35) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/cjs/clone/errors/CloneError.cjs +1 -0
  3. package/cjs/elements/SourceMap.cjs +1 -1
  4. package/cjs/identity/errors/ElementIdentityError.cjs +1 -0
  5. package/cjs/identity/index.cjs +1 -0
  6. package/cjs/transcluder/Transcluder.cjs +20 -18
  7. package/cjs/transcluder/index.cjs +1 -1
  8. package/cjs/transformers/serializers/value/index.cjs +34 -36
  9. package/cjs/transformers/serializers/yaml-1-2.cjs +60 -65
  10. package/cjs/transformers/sexprs.cjs +18 -24
  11. package/cjs/traversal/filter.cjs +1 -1
  12. package/cjs/traversal/find.cjs +1 -1
  13. package/cjs/traversal/findAtOffset.cjs +23 -29
  14. package/cjs/traversal/parents.cjs +21 -31
  15. package/cjs/traversal/traverse.cjs +17 -19
  16. package/cjs/traversal/visitor.cjs +17 -27
  17. package/dist/apidom-core.browser.js +1585 -1652
  18. package/dist/apidom-core.browser.min.js +1 -1
  19. package/es/clone/errors/CloneError.mjs +1 -0
  20. package/es/elements/SourceMap.mjs +1 -1
  21. package/es/identity/errors/ElementIdentityError.mjs +1 -0
  22. package/es/identity/index.mjs +1 -0
  23. package/es/transcluder/Transcluder.mjs +20 -17
  24. package/es/transcluder/index.mjs +1 -1
  25. package/es/transformers/serializers/value/index.mjs +33 -36
  26. package/es/transformers/serializers/yaml-1-2.mjs +60 -65
  27. package/es/transformers/sexprs.mjs +18 -23
  28. package/es/traversal/filter.mjs +1 -1
  29. package/es/traversal/find.mjs +1 -1
  30. package/es/traversal/findAtOffset.mjs +23 -29
  31. package/es/traversal/parents.mjs +21 -29
  32. package/es/traversal/traverse.mjs +16 -18
  33. package/es/traversal/visitor.mjs +16 -26
  34. package/package.json +4 -4
  35. package/types/dist.d.ts +18 -14
package/CHANGELOG.md CHANGED
@@ -3,6 +3,14 @@
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.94.0](https://github.com/swagger-api/apidom/compare/v0.93.0...v0.94.0) (2024-02-05)
7
+
8
+ **Note:** Version bump only for package @swagger-api/apidom-core
9
+
10
+ # [0.93.0](https://github.com/swagger-api/apidom/compare/v0.92.0...v0.93.0) (2024-01-23)
11
+
12
+ **Note:** Version bump only for package @swagger-api/apidom-core
13
+
6
14
  # [0.92.0](https://github.com/swagger-api/apidom/compare/v0.91.0...v0.92.0) (2024-01-12)
7
15
 
8
16
  **Note:** Version bump only for package @swagger-api/apidom-core
@@ -4,6 +4,7 @@ exports.__esModule = true;
4
4
  exports.default = void 0;
5
5
  var _apidomError = require("@swagger-api/apidom-error");
6
6
  class CloneError extends _apidomError.ApiDOMStructuredError {
7
+ value;
7
8
  constructor(message, structuredOptions) {
8
9
  super(message, structuredOptions);
9
10
  if (typeof structuredOptions !== 'undefined') {
@@ -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 === null) {
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]);
@@ -4,6 +4,7 @@ exports.__esModule = true;
4
4
  exports.default = void 0;
5
5
  var _apidomError = require("@swagger-api/apidom-error");
6
6
  class ElementIdentityError extends _apidomError.ApiDOMStructuredError {
7
+ value;
7
8
  constructor(message, structuredOptions) {
8
9
  super(message, structuredOptions);
9
10
  if (typeof structuredOptions !== 'undefined') {
@@ -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,22 @@ const transcludeChildOfArrayElement = (search, replace, edges) => {
74
72
  * clone in before passing it to initializer of this stamp.
75
73
  */
76
74
 
77
- const Transcluder = _stampit.default.init(function TranscluderConstructor({
78
- element
79
- }) {
80
- let edges;
81
- this.transclude = function transclude(search, replace) {
82
- var _edges;
75
+ class Transcluder {
76
+ element;
77
+ edges;
78
+ constructor({
79
+ element
80
+ }) {
81
+ this.element = element;
82
+ }
83
+ transclude(search, replace) {
84
+ var _this$edges;
83
85
  // shortcut 1. - replacing entire ApiDOM tree
84
- if (search === element) return replace;
86
+ if (search === this.element) return replace;
85
87
  // shortcut 2. - replacing nothing
86
- if (search === replace) return element;
87
- edges = (_edges = edges) != null ? _edges : computeEdges(element);
88
- const parent = edges.get(search);
88
+ if (search === replace) return this.element;
89
+ this.edges = (_this$edges = this.edges) != null ? _this$edges : computeEdges(this.element);
90
+ const parent = this.edges.get(search);
89
91
  if ((0, _ramdaAdjunct.isUndefined)(parent)) {
90
92
  return undefined;
91
93
  }
@@ -97,13 +99,13 @@ const Transcluder = _stampit.default.init(function TranscluderConstructor({
97
99
  */
98
100
  if ((0, _index.isObjectElement)(parent)) {
99
101
  // @ts-ignore
100
- transcludeChildOfObjectElement(search, replace, edges);
102
+ transcludeChildOfObjectElement(search, replace, this.edges);
101
103
  } else if ((0, _index.isArrayElement)(parent)) {
102
- transcludeChildOfArrayElement(search, replace, edges);
104
+ transcludeChildOfArrayElement(search, replace, this.edges);
103
105
  } else if ((0, _index.isMemberElement)(parent)) {
104
- transcludeChildOfMemberElement(search, replace, edges);
106
+ transcludeChildOfMemberElement(search, replace, this.edges);
105
107
  }
106
- return element;
107
- };
108
- });
108
+ return this.element;
109
+ }
110
+ }
109
111
  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 = (0, _Transcluder.default)({
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 @typescript-eslint/naming-convention */
12
- const Visitor = _stampit.default.init(function _Visitor() {
13
- const references = new WeakMap();
14
- this.BooleanElement = function _BooleanElement(element) {
15
- return element.toValue();
16
- };
17
- this.NumberElement = function _NumberElement(element) {
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
- this.EphemeralObject = {
37
- leave(ephemeral) {
23
+ EphemeralObject = {
24
+ leave: ephemeral => {
38
25
  return ephemeral.toObject();
39
26
  }
40
27
  };
41
- this.MemberElement = {
42
- enter(element) {
28
+ MemberElement = {
29
+ enter: element => {
43
30
  return [element.key, element.value];
44
31
  }
45
32
  };
46
- this.ArrayElement = {
47
- enter(element) {
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
- this.EphemeralArray = {
57
- leave(ephemeral) {
43
+ EphemeralArray = {
44
+ leave: ephemeral => {
58
45
  return ephemeral.toArray();
59
46
  }
60
47
  };
61
- });
62
- /* eslint-enable */
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,81 @@
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
- const YamlVisitor = (0, _stampit.default)({
10
- props: {
11
- result: '',
12
- indent: 0,
13
- indentChar: ' '
14
- },
15
- init({
8
+ class YamlVisitor {
9
+ static indentChar = ' ';
10
+ result;
11
+ indent;
12
+ constructor({
16
13
  directive = false,
17
14
  indent = 0
18
15
  } = {}) {
19
16
  this.result = directive ? '%YAML 1.2\n---\n' : '';
20
17
  this.indent = indent;
21
- },
22
- methods: {
23
- NumberElement(element) {
24
- this.result += (0, _index.default)(element);
25
- },
26
- BooleanElement(element) {
27
- const value = (0, _index.default)(element);
28
- this.result += value ? 'true' : 'false';
29
- },
30
- StringElement(element) {
31
- // for simplicity and avoiding ambiguity we always wrap strings in quotes
32
- this.result += JSON.stringify((0, _index.default)(element));
33
- },
34
- NullElement() {
35
- this.result += 'null';
36
- },
37
- ArrayElement(element) {
38
- if (element.length === 0) {
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
- });
18
+ }
19
+ NumberElement(element) {
20
+ this.result += (0, _index.default)(element);
21
+ }
22
+ BooleanElement(element) {
23
+ const value = (0, _index.default)(element);
24
+ this.result += value ? 'true' : 'false';
25
+ }
26
+ StringElement(element) {
27
+ // for simplicity and avoiding ambiguity we always wrap strings in quotes
28
+ this.result += JSON.stringify((0, _index.default)(element));
29
+ }
30
+ NullElement() {
31
+ this.result += 'null';
32
+ }
33
+ ArrayElement(element) {
34
+ if (element.length === 0) {
35
+ this.result += '[]';
53
36
  return false;
54
- },
55
- ObjectElement(element) {
56
- if (element.length === 0) {
57
- this.result += '{}';
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}`;
37
+ }
38
+ element.forEach(item => {
39
+ const visitor = new YamlVisitor({
40
+ indent: this.indent + 1
77
41
  });
42
+ const indent = YamlVisitor.indentChar.repeat(this.indent);
43
+ (0, _visitor.visit)(item, visitor);
44
+ const {
45
+ result
46
+ } = visitor;
47
+ this.result += result.startsWith('\n') ? `\n${indent}-${result}` : `\n${indent}- ${result}`;
48
+ });
49
+ return false;
50
+ }
51
+ ObjectElement(element) {
52
+ if (element.length === 0) {
53
+ this.result += '{}';
78
54
  return false;
79
55
  }
56
+ element.forEach((value, key) => {
57
+ const keyVisitor = new YamlVisitor({
58
+ indent: this.indent + 1
59
+ });
60
+ const valueVisitor = new YamlVisitor({
61
+ indent: this.indent + 1
62
+ });
63
+ const indent = YamlVisitor.indentChar.repeat(this.indent);
64
+ (0, _visitor.visit)(key, keyVisitor);
65
+ (0, _visitor.visit)(value, valueVisitor);
66
+ const {
67
+ result: keyResult
68
+ } = keyVisitor;
69
+ const {
70
+ result: valueResult
71
+ } = valueVisitor;
72
+ this.result += valueResult.startsWith('\n') ? `\n${indent}${keyResult}:${valueResult}` : `\n${indent}${keyResult}: ${valueResult}`;
73
+ });
74
+ return false;
80
75
  }
81
- });
76
+ }
82
77
  const serializer = (element, {
83
78
  directive = false
84
79
  } = {}) => {
85
- const visitor = YamlVisitor({
80
+ const visitor = new YamlVisitor({
86
81
  directive
87
82
  });
88
83
  (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
- const SymbolicExpressionsVisitor = (0, _stampit.default)({
9
- props: {
10
- nestingLevel: 0,
11
- result: ''
12
- },
13
- methods: {
14
- enter(element) {
15
- const {
16
- element: elementName
17
- } = element;
18
- const capitalizedElementName = elementName.charAt(0).toUpperCase() + elementName.slice(1);
19
- const indent = ' '.repeat(this.nestingLevel);
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
  };
@@ -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 = (0, _visitor.PredicateVisitor)({
9
+ const visitor = new _visitor.PredicateVisitor({
10
10
  predicate
11
11
  });
12
12
  (0, _visitor.visit)(element, visitor);
@@ -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 = (0, _visitor.PredicateVisitor)({
9
+ const visitor = new _visitor.PredicateVisitor({
10
10
  predicate,
11
11
  returnOnTrue: _visitor.BREAK
12
12
  });
@@ -3,44 +3,38 @@
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
- const Visitor = (0, _stampit.default)({
13
- props: {
14
- result: [],
15
- offset: 0,
16
- includeRightBound: false
17
- },
18
- // @ts-ignore
19
- init({
20
- offset = this.offset,
21
- includeRightBound = this.includeRightBound
22
- }) {
11
+ class Visitor {
12
+ result;
13
+ offset;
14
+ includeRightBound;
15
+ constructor({
16
+ offset = 0,
17
+ includeRightBound = false
18
+ } = {}) {
23
19
  this.result = [];
24
20
  this.offset = offset;
25
21
  this.includeRightBound = includeRightBound;
26
- },
27
- methods: {
28
- enter(element) {
29
- if (!(0, _index.hasElementSourceMap)(element)) {
30
- return undefined; // dive in
31
- }
32
- const sourceMapElement = element.getMetaProperty('sourceMap');
33
- const charStart = (0, _index2.default)(sourceMapElement.positionStart.get(2));
34
- const charEnd = (0, _index2.default)(sourceMapElement.positionEnd.get(2));
35
- const isWithinOffsetRange = this.offset >= charStart && (this.offset < charEnd || this.includeRightBound && this.offset <= charEnd);
36
- if (isWithinOffsetRange) {
37
- this.result.push(element);
38
- return undefined; // push to stack and dive in
39
- }
40
- return false; // skip entire sub-tree
22
+ }
23
+ enter(element) {
24
+ if (!(0, _index.hasElementSourceMap)(element)) {
25
+ return undefined; // dive in
26
+ }
27
+ const sourceMapElement = element.getMetaProperty('sourceMap');
28
+ const charStart = (0, _index2.default)(sourceMapElement.positionStart.get(2));
29
+ const charEnd = (0, _index2.default)(sourceMapElement.positionEnd.get(2));
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
41
34
  }
35
+ return false; // skip entire sub-tree
42
36
  }
43
- });
37
+ }
44
38
  // Finds the most inner node at the given offset.
45
39
  // If includeRightBound is set, also finds nodes that end at the given offset.
46
40
  // findAtOffset :: Number -> Element -> Element | Undefined
@@ -54,7 +48,7 @@ const findAtOffset = (options, element) => {
54
48
  offset = (0, _ramda.pathOr)(0, ['offset'], options);
55
49
  includeRightBound = (0, _ramda.pathOr)(false, ['includeRightBound'], options);
56
50
  }
57
- const visitor = Visitor({
51
+ const visitor = new Visitor({
58
52
  offset,
59
53
  includeRightBound
60
54
  });
@@ -1,44 +1,34 @@
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
- /* eslint-disable no-param-reassign */
9
-
10
- const Visitor = (0, _stampit.default)({
11
- props: {
12
- parent: null,
13
- parentEdges: null
14
- },
15
- init() {
6
+ class Visitor {
7
+ parentEdges;
8
+ parent;
9
+ constructor() {
16
10
  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
11
  }
35
- });
36
-
37
- /* eslint-enable */
12
+ ObjectElement(objectElement) {
13
+ this.parentEdges.set(objectElement, this.parent);
14
+ this.parent = objectElement;
15
+ }
16
+ ArrayElement(arrayElement) {
17
+ this.parentEdges.set(arrayElement, this.parent);
18
+ this.parent = arrayElement;
19
+ }
20
+ MemberElement(memberElement) {
21
+ this.parentEdges.set(memberElement, this.parent);
22
+ this.parent = memberElement;
23
+ }
24
+ enter(element) {
25
+ this.parentEdges.set(element, this.parent);
26
+ }
27
+ }
38
28
 
39
29
  // computes upwards edges from every child to its parent
40
30
  const parents = element => {
41
- const visitor = Visitor();
31
+ const visitor = new Visitor();
42
32
  (0, _visitor.visit)(element, visitor);
43
33
  return visitor.parentEdges;
44
34
  };
@@ -1,35 +1,33 @@
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
- const CallbackVisitor = exports.CallbackVisitor = (0, _stampit.default)(_visitor.PredicateVisitor, {
12
- props: {
13
- callback: _ramdaAdjunct.noop
14
- },
15
- // @ts-ignore
16
- init({
17
- callback = this.callback
9
+ class CallbackVisitor extends _visitor.PredicateVisitor {
10
+ callback;
11
+ constructor({
12
+ callback = _ramdaAdjunct.noop,
13
+ ...rest
18
14
  } = {}) {
15
+ super({
16
+ ...rest
17
+ });
19
18
  this.callback = callback;
20
- },
21
- methods: {
22
- enter(element) {
23
- if (this.predicate(element)) {
24
- this.callback(element);
25
- return this.returnOnTrue;
26
- }
27
- return this.returnOnFalse;
19
+ }
20
+ enter(element) {
21
+ if (this.predicate(element)) {
22
+ this.callback(element);
23
+ return this.returnOnTrue;
28
24
  }
25
+ return this.returnOnFalse;
29
26
  }
30
- });
27
+ }
31
28
 
32
29
  // executes the callback on this element and all descendants
30
+ exports.CallbackVisitor = CallbackVisitor;
33
31
  const traverse = (options, element) => {
34
32
  let callback;
35
33
  let predicate;
@@ -40,7 +38,7 @@ const traverse = (options, element) => {
40
38
  callback = (0, _ramda.pathOr)(_ramdaAdjunct.noop, ['callback'], options);
41
39
  predicate = (0, _ramda.pathOr)(_index.isElement, ['predicate'], options);
42
40
  }
43
- const visitor = CallbackVisitor({
41
+ const visitor = new CallbackVisitor({
44
42
  callback,
45
43
  predicate
46
44
  });