@swagger-api/apidom-ast 0.76.2 → 0.78.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 (59) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/cjs/Error.cjs +1 -2
  3. package/cjs/Literal.cjs +1 -2
  4. package/cjs/Node.cjs +1 -2
  5. package/cjs/ParseResult.cjs +1 -2
  6. package/cjs/Position.cjs +2 -4
  7. package/cjs/index.cjs +3 -2
  8. package/cjs/json/nodes/JsonArray.cjs +1 -2
  9. package/cjs/json/nodes/JsonDocument.cjs +1 -2
  10. package/cjs/json/nodes/JsonEscapeSequence.cjs +1 -2
  11. package/cjs/json/nodes/JsonFalse.cjs +1 -2
  12. package/cjs/json/nodes/JsonKey.cjs +1 -2
  13. package/cjs/json/nodes/JsonNode.cjs +1 -2
  14. package/cjs/json/nodes/JsonNull.cjs +1 -2
  15. package/cjs/json/nodes/JsonNumber.cjs +1 -2
  16. package/cjs/json/nodes/JsonObject.cjs +1 -2
  17. package/cjs/json/nodes/JsonProperty.cjs +1 -2
  18. package/cjs/json/nodes/JsonString.cjs +1 -2
  19. package/cjs/json/nodes/JsonStringContent.cjs +1 -2
  20. package/cjs/json/nodes/JsonTrue.cjs +1 -2
  21. package/cjs/json/nodes/JsonValue.cjs +1 -2
  22. package/cjs/json/nodes/predicates.cjs +12 -24
  23. package/cjs/predicates.cjs +4 -8
  24. package/cjs/traversal/visitor.cjs +92 -89
  25. package/cjs/yaml/errors/YamlSchemaError.cjs +1 -2
  26. package/cjs/yaml/errors/YamlTagError.cjs +1 -2
  27. package/cjs/yaml/nodes/YamlAlias.cjs +1 -2
  28. package/cjs/yaml/nodes/YamlAnchor.cjs +1 -2
  29. package/cjs/yaml/nodes/YamlCollection.cjs +1 -2
  30. package/cjs/yaml/nodes/YamlComment.cjs +1 -2
  31. package/cjs/yaml/nodes/YamlDirective.cjs +1 -2
  32. package/cjs/yaml/nodes/YamlDocument.cjs +1 -2
  33. package/cjs/yaml/nodes/YamlKeyValuePair.cjs +1 -2
  34. package/cjs/yaml/nodes/YamlMapping.cjs +1 -2
  35. package/cjs/yaml/nodes/YamlNode.cjs +1 -2
  36. package/cjs/yaml/nodes/YamlScalar.cjs +1 -2
  37. package/cjs/yaml/nodes/YamlSequence.cjs +1 -2
  38. package/cjs/yaml/nodes/YamlStream.cjs +1 -2
  39. package/cjs/yaml/nodes/YamlStyle.cjs +3 -6
  40. package/cjs/yaml/nodes/YamlTag.cjs +2 -4
  41. package/cjs/yaml/nodes/predicates.cjs +10 -20
  42. package/cjs/yaml/schemas/ScalarTag.cjs +1 -2
  43. package/cjs/yaml/schemas/Tag.cjs +1 -2
  44. package/cjs/yaml/schemas/canonical-format.cjs +4 -6
  45. package/cjs/yaml/schemas/failsafe/GenericMapping.cjs +1 -2
  46. package/cjs/yaml/schemas/failsafe/GenericSequence.cjs +1 -2
  47. package/cjs/yaml/schemas/failsafe/GenericString.cjs +1 -2
  48. package/cjs/yaml/schemas/failsafe/index.cjs +1 -2
  49. package/cjs/yaml/schemas/json/Boolean.cjs +1 -2
  50. package/cjs/yaml/schemas/json/FloatingPoint.cjs +1 -2
  51. package/cjs/yaml/schemas/json/Integer.cjs +1 -2
  52. package/cjs/yaml/schemas/json/Null.cjs +1 -2
  53. package/cjs/yaml/schemas/json/index.cjs +1 -2
  54. package/dist/apidom-ast.browser.js +3954 -17202
  55. package/dist/apidom-ast.browser.min.js +1 -1
  56. package/es/index.mjs +1 -1
  57. package/es/traversal/visitor.mjs +88 -85
  58. package/package.json +4 -4
  59. package/types/dist.d.ts +4 -2
package/CHANGELOG.md CHANGED
@@ -3,6 +3,23 @@
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.78.0](https://github.com/swagger-api/apidom/compare/v0.77.0...v0.78.0) (2023-10-17)
7
+
8
+ ### Bug Fixes
9
+
10
+ - **types:** fix regression in @types/ramda@0.29.6 ([#3281](https://github.com/swagger-api/apidom/issues/3281)) ([c6c279f](https://github.com/swagger-api/apidom/commit/c6c279f526e07b16221d8c00dd0041eeb93e1290)), closes [#3279](https://github.com/swagger-api/apidom/issues/3279)
11
+
12
+ # [0.77.0](https://github.com/swagger-api/apidom/compare/v0.76.2...v0.77.0) (2023-10-03)
13
+
14
+ ### Bug Fixes
15
+
16
+ - **core:** always perform immutable async traversal ([#3164](https://github.com/swagger-api/apidom/issues/3164)) ([a47f870](https://github.com/swagger-api/apidom/commit/a47f87018fcca235bd1490e1f014bcdd2430b2d5)), closes [#3110](https://github.com/swagger-api/apidom/issues/3110)
17
+ - **core:** always perform immutable traversal ([#3163](https://github.com/swagger-api/apidom/issues/3163)) ([f2fcab0](https://github.com/swagger-api/apidom/commit/f2fcab0c7a68ca0c39fae6165ff9b5fdf0f12e52)), closes [#3110](https://github.com/swagger-api/apidom/issues/3110)
18
+
19
+ ### Features
20
+
21
+ - **ast:** apply upstream changes to core visitor/traversal mechanism ([#3187](https://github.com/swagger-api/apidom/issues/3187)) ([1f4306b](https://github.com/swagger-api/apidom/commit/1f4306be9e639d6d80373fec5dca02e57c24466e)), closes [/github.com/swagger-api/apidom/blob/79da9ab06385718dd780da811f6bc6a438d2ff07/NOTICE#L12-L14](https://github.com//github.com/swagger-api/apidom/blob/79da9ab06385718dd780da811f6bc6a438d2ff07/NOTICE/issues/L12-L14)
22
+
6
23
  ## [0.76.2](https://github.com/swagger-api/apidom/compare/v0.76.1...v0.76.2) (2023-09-08)
7
24
 
8
25
  ### Bug Fixes
package/cjs/Error.cjs CHANGED
@@ -21,5 +21,4 @@ const Error = (0, _stampit.default)(_Node.default, {
21
21
  this.isUnexpected = isUnexpected;
22
22
  }
23
23
  });
24
- var _default = Error;
25
- exports.default = _default;
24
+ var _default = exports.default = Error;
package/cjs/Literal.cjs CHANGED
@@ -18,5 +18,4 @@ const Literal = (0, _stampit.default)(_Node.default, {
18
18
  this.value = value;
19
19
  }
20
20
  });
21
- var _default = Literal;
22
- exports.default = _default;
21
+ var _default = exports.default = Literal;
package/cjs/Node.cjs CHANGED
@@ -42,5 +42,4 @@ const Node = (0, _stampit.default)({
42
42
  }
43
43
  }
44
44
  });
45
- var _default = Node;
46
- exports.default = _default;
45
+ var _default = exports.default = Node;
@@ -18,5 +18,4 @@ const ParseResult = (0, _stampit.default)(_Node.default, {
18
18
  }
19
19
  }
20
20
  });
21
- var _default = ParseResult;
22
- exports.default = _default;
21
+ var _default = exports.default = ParseResult;
package/cjs/Position.cjs CHANGED
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequ
4
4
  exports.__esModule = true;
5
5
  exports.default = exports.Point = void 0;
6
6
  var _stampit = _interopRequireDefault(require("stampit"));
7
- const Point = (0, _stampit.default)({
7
+ const Point = exports.Point = (0, _stampit.default)({
8
8
  statics: {
9
9
  type: 'point'
10
10
  },
@@ -24,7 +24,6 @@ const Point = (0, _stampit.default)({
24
24
  this.char = char;
25
25
  }
26
26
  });
27
- exports.Point = Point;
28
27
  const Position = (0, _stampit.default)({
29
28
  statics: {
30
29
  type: 'position'
@@ -42,5 +41,4 @@ const Position = (0, _stampit.default)({
42
41
  this.end = end;
43
42
  }
44
43
  });
45
- var _default = Position;
46
- exports.default = _default;
44
+ var _default = exports.default = Position;
package/cjs/index.cjs CHANGED
@@ -3,7 +3,7 @@
3
3
  var _interopRequireWildcard = require("@babel/runtime-corejs3/helpers/interopRequireWildcard").default;
4
4
  var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
5
5
  exports.__esModule = true;
6
- exports.visit = exports.mergeAllVisitors = exports.isYamlTag = exports.isYamlStream = exports.isYamlSequence = exports.isYamlScalar = exports.isYamlMapping = exports.isYamlKeyValuePair = exports.isYamlDocument = exports.isYamlDirective = exports.isYamlAlias = exports.isPosition = exports.isPoint = exports.isParseResult = exports.isNode = exports.isLiteral = exports.isJsonTrue = exports.isJsonStringContent = exports.isJsonString = exports.isJsonProperty = exports.isJsonObject = exports.isJsonNumber = exports.isJsonNull = exports.isJsonKey = exports.isJsonFalse = exports.isJsonEscapeSequence = exports.isJsonDocument = exports.isJsonArray = exports.getVisitFn = exports.getNodeType = exports.YamlTagError = exports.YamlTag = exports.YamlStyleGroup = exports.YamlStyle = exports.YamlStream = exports.YamlSequence = exports.YamlSchemaError = exports.YamlScalar = exports.YamlNodeKind = exports.YamlNode = exports.YamlMapping = exports.YamlKeyValuePair = exports.YamlJsonSchema = exports.YamlFailsafeSchema = exports.YamlDocument = exports.YamlDirective = exports.YamlComment = exports.YamlCollection = exports.YamlAnchor = exports.YamlAlias = exports.Position = exports.Point = exports.ParseResult = exports.Literal = exports.JsonValue = exports.JsonTrue = exports.JsonStringContent = exports.JsonString = exports.JsonProperty = exports.JsonObject = exports.JsonNumber = exports.JsonNull = exports.JsonNode = exports.JsonKey = exports.JsonFalse = exports.JsonEscapeSequence = exports.JsonDocument = exports.JsonArray = exports.Error = exports.BREAK = void 0;
6
+ exports.visit = exports.mergeAllVisitors = exports.isYamlTag = exports.isYamlStream = exports.isYamlSequence = exports.isYamlScalar = exports.isYamlMapping = exports.isYamlKeyValuePair = exports.isYamlDocument = exports.isYamlDirective = exports.isYamlAlias = exports.isPosition = exports.isPoint = exports.isParseResult = exports.isNode = exports.isLiteral = exports.isJsonTrue = exports.isJsonStringContent = exports.isJsonString = exports.isJsonProperty = exports.isJsonObject = exports.isJsonNumber = exports.isJsonNull = exports.isJsonKey = exports.isJsonFalse = exports.isJsonEscapeSequence = exports.isJsonDocument = exports.isJsonArray = exports.getVisitFn = exports.getNodeType = exports.cloneNode = exports.YamlTagError = exports.YamlTag = exports.YamlStyleGroup = exports.YamlStyle = exports.YamlStream = exports.YamlSequence = exports.YamlSchemaError = exports.YamlScalar = exports.YamlNodeKind = exports.YamlNode = exports.YamlMapping = exports.YamlKeyValuePair = exports.YamlJsonSchema = exports.YamlFailsafeSchema = exports.YamlDocument = exports.YamlDirective = exports.YamlComment = exports.YamlCollection = exports.YamlAnchor = exports.YamlAlias = exports.Position = exports.Point = exports.ParseResult = exports.Literal = exports.JsonValue = exports.JsonTrue = exports.JsonStringContent = exports.JsonString = exports.JsonProperty = exports.JsonObject = exports.JsonNumber = exports.JsonNull = exports.JsonNode = exports.JsonKey = exports.JsonFalse = exports.JsonEscapeSequence = exports.JsonDocument = exports.JsonArray = exports.Error = exports.BREAK = void 0;
7
7
  var _JsonNode = _interopRequireDefault(require("./json/nodes/JsonNode.cjs"));
8
8
  exports.JsonNode = _JsonNode.default;
9
9
  var _JsonDocument = _interopRequireDefault(require("./json/nodes/JsonDocument.cjs"));
@@ -113,4 +113,5 @@ exports.BREAK = _visitor.BREAK;
113
113
  exports.mergeAllVisitors = _visitor.mergeAll;
114
114
  exports.visit = _visitor.visit;
115
115
  exports.getNodeType = _visitor.getNodeType;
116
- exports.isNode = _visitor.isNode;
116
+ exports.isNode = _visitor.isNode;
117
+ exports.cloneNode = _visitor.cloneNode;
@@ -17,5 +17,4 @@ const JsonArray = (0, _stampit.default)(_JsonNode.default, {
17
17
  }
18
18
  }
19
19
  });
20
- var _default = JsonArray;
21
- exports.default = _default;
20
+ var _default = exports.default = JsonArray;
@@ -18,5 +18,4 @@ const JsonDocument = (0, _stampit.default)(_JsonNode.default, {
18
18
  }
19
19
  }
20
20
  });
21
- var _default = JsonDocument;
22
- exports.default = _default;
21
+ var _default = exports.default = JsonDocument;
@@ -10,5 +10,4 @@ const JsonEscapeSequence = (0, _stampit.default)(_JsonValue.default, {
10
10
  type: 'escapeSequence'
11
11
  }
12
12
  });
13
- var _default = JsonEscapeSequence;
14
- exports.default = _default;
13
+ var _default = exports.default = JsonEscapeSequence;
@@ -10,5 +10,4 @@ const JsonFalse = (0, _stampit.default)(_JsonValue.default, {
10
10
  type: 'false'
11
11
  }
12
12
  });
13
- var _default = JsonFalse;
14
- exports.default = _default;
13
+ var _default = exports.default = JsonFalse;
@@ -10,5 +10,4 @@ const JsonKey = (0, _stampit.default)(_JsonString.default, {
10
10
  type: 'key'
11
11
  }
12
12
  });
13
- var _default = JsonKey;
14
- exports.default = _default;
13
+ var _default = exports.default = JsonKey;
@@ -6,5 +6,4 @@ exports.default = void 0;
6
6
  var _stampit = _interopRequireDefault(require("stampit"));
7
7
  var _Node = _interopRequireDefault(require("../../Node.cjs"));
8
8
  const JsonNode = (0, _stampit.default)(_Node.default);
9
- var _default = JsonNode;
10
- exports.default = _default;
9
+ var _default = exports.default = JsonNode;
@@ -10,5 +10,4 @@ const JsonNull = (0, _stampit.default)(_JsonValue.default, {
10
10
  type: 'null'
11
11
  }
12
12
  });
13
- var _default = JsonNull;
14
- exports.default = _default;
13
+ var _default = exports.default = JsonNull;
@@ -10,5 +10,4 @@ const JsonNumber = (0, _stampit.default)(_JsonValue.default, {
10
10
  type: 'number'
11
11
  }
12
12
  });
13
- var _default = JsonNumber;
14
- exports.default = _default;
13
+ var _default = exports.default = JsonNumber;
@@ -17,5 +17,4 @@ const JsonObject = (0, _stampit.default)(_JsonNode.default, {
17
17
  }
18
18
  }
19
19
  });
20
- var _default = JsonObject;
21
- exports.default = _default;
20
+ var _default = exports.default = JsonObject;
@@ -23,5 +23,4 @@ const JsonProperty = (0, _stampit.default)(_JsonNode.default, {
23
23
  }
24
24
  }
25
25
  });
26
- var _default = JsonProperty;
27
- exports.default = _default;
26
+ var _default = exports.default = JsonProperty;
@@ -23,5 +23,4 @@ const JsonString = (0, _stampit.default)(_JsonNode.default, {
23
23
  }
24
24
  }
25
25
  });
26
- var _default = JsonString;
27
- exports.default = _default;
26
+ var _default = exports.default = JsonString;
@@ -10,5 +10,4 @@ const JsonStringContent = (0, _stampit.default)(_JsonValue.default, {
10
10
  type: 'stringContent'
11
11
  }
12
12
  });
13
- var _default = JsonStringContent;
14
- exports.default = _default;
13
+ var _default = exports.default = JsonStringContent;
@@ -10,5 +10,4 @@ const JsonTrue = (0, _stampit.default)(_JsonValue.default, {
10
10
  type: 'true'
11
11
  }
12
12
  });
13
- var _default = JsonTrue;
14
- exports.default = _default;
13
+ var _default = exports.default = JsonTrue;
@@ -18,5 +18,4 @@ const JsonValue = (0, _stampit.default)(_JsonNode.default, {
18
18
  this.value = value;
19
19
  }
20
20
  });
21
- var _default = JsonValue;
22
- exports.default = _default;
21
+ var _default = exports.default = JsonValue;
@@ -3,27 +3,15 @@
3
3
  exports.__esModule = true;
4
4
  exports.isTrue = exports.isStringContent = exports.isString = exports.isProperty = exports.isObject = exports.isNumber = exports.isNull = exports.isKey = exports.isFalse = exports.isEscapeSequence = exports.isDocument = exports.isArray = void 0;
5
5
  var _predicates = require("../../predicates.cjs");
6
- const isDocument = _predicates.isNodeType.bind(undefined, 'document');
7
- exports.isDocument = isDocument;
8
- const isString = _predicates.isNodeType.bind(undefined, 'string');
9
- exports.isString = isString;
10
- const isFalse = _predicates.isNodeType.bind(undefined, 'false');
11
- exports.isFalse = isFalse;
12
- const isTrue = _predicates.isNodeType.bind(undefined, 'true');
13
- exports.isTrue = isTrue;
14
- const isNull = _predicates.isNodeType.bind(undefined, 'null');
15
- exports.isNull = isNull;
16
- const isNumber = _predicates.isNodeType.bind(undefined, 'number');
17
- exports.isNumber = isNumber;
18
- const isArray = _predicates.isNodeType.bind(undefined, 'array');
19
- exports.isArray = isArray;
20
- const isObject = _predicates.isNodeType.bind(undefined, 'object');
21
- exports.isObject = isObject;
22
- const isStringContent = _predicates.isNodeType.bind(undefined, 'stringContent');
23
- exports.isStringContent = isStringContent;
24
- const isEscapeSequence = _predicates.isNodeType.bind(undefined, 'escapeSequence');
25
- exports.isEscapeSequence = isEscapeSequence;
26
- const isProperty = _predicates.isNodeType.bind(undefined, 'property');
27
- exports.isProperty = isProperty;
28
- const isKey = _predicates.isNodeType.bind(undefined, 'key');
29
- exports.isKey = isKey;
6
+ const isDocument = exports.isDocument = _predicates.isNodeType.bind(undefined, 'document');
7
+ const isString = exports.isString = _predicates.isNodeType.bind(undefined, 'string');
8
+ const isFalse = exports.isFalse = _predicates.isNodeType.bind(undefined, 'false');
9
+ const isTrue = exports.isTrue = _predicates.isNodeType.bind(undefined, 'true');
10
+ const isNull = exports.isNull = _predicates.isNodeType.bind(undefined, 'null');
11
+ const isNumber = exports.isNumber = _predicates.isNodeType.bind(undefined, 'number');
12
+ const isArray = exports.isArray = _predicates.isNodeType.bind(undefined, 'array');
13
+ const isObject = exports.isObject = _predicates.isNodeType.bind(undefined, 'object');
14
+ const isStringContent = exports.isStringContent = _predicates.isNodeType.bind(undefined, 'stringContent');
15
+ const isEscapeSequence = exports.isEscapeSequence = _predicates.isNodeType.bind(undefined, 'escapeSequence');
16
+ const isProperty = exports.isProperty = _predicates.isNodeType.bind(undefined, 'property');
17
+ const isKey = exports.isKey = _predicates.isNodeType.bind(undefined, 'key');
@@ -4,11 +4,7 @@ exports.__esModule = true;
4
4
  exports.isPosition = exports.isPoint = exports.isParseResult = exports.isNodeType = exports.isLiteral = void 0;
5
5
  const isNodeType = (type, node) => (node == null ? void 0 : node.type) === type;
6
6
  exports.isNodeType = isNodeType;
7
- const isLiteral = isNodeType.bind(undefined, 'literal');
8
- exports.isLiteral = isLiteral;
9
- const isPosition = isNodeType.bind(undefined, 'position');
10
- exports.isPosition = isPosition;
11
- const isPoint = isNodeType.bind(undefined, 'point');
12
- exports.isPoint = isPoint;
13
- const isParseResult = isNodeType.bind(undefined, 'parseResult');
14
- exports.isParseResult = isParseResult;
7
+ const isLiteral = exports.isLiteral = isNodeType.bind(undefined, 'literal');
8
+ const isPosition = exports.isPosition = isNodeType.bind(undefined, 'position');
9
+ const isPoint = exports.isPoint = isNodeType.bind(undefined, 'point');
10
+ const isParseResult = exports.isParseResult = isNodeType.bind(undefined, 'parseResult');
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  exports.__esModule = true;
4
- exports.visit = exports.mergeAll = exports.isNode = exports.getVisitFn = exports.getNodeType = exports.BREAK = void 0;
4
+ exports.visit = exports.mergeAll = exports.isNode = exports.getVisitFn = exports.getNodeType = exports.cloneNode = exports.BREAK = void 0;
5
5
  var _apidomError = require("@swagger-api/apidom-error");
6
6
  /**
7
7
  * SPDX-FileCopyrightText: Copyright (c) GraphQL Contributors
@@ -39,32 +39,35 @@ const getVisitFn = (visitor, type, isLeaving) => {
39
39
  return null;
40
40
  };
41
41
  exports.getVisitFn = getVisitFn;
42
- const BREAK = {};
42
+ const BREAK = exports.BREAK = {};
43
43
 
44
44
  // getNodeType :: Node -> String
45
- exports.BREAK = BREAK;
46
45
  const getNodeType = node => node == null ? void 0 : node.type;
47
46
 
48
47
  // isNode :: Node -> Boolean
49
48
  exports.getNodeType = getNodeType;
50
49
  const isNode = node => typeof getNodeType(node) === 'string';
51
50
 
51
+ // cloneNode :: a -> a
52
+ exports.isNode = isNode;
53
+ const cloneNode = node => Object.create(Object.getPrototypeOf(node), Object.getOwnPropertyDescriptors(node));
54
+
52
55
  /**
53
56
  * Creates a new visitor instance which delegates to many visitors to run in
54
57
  * parallel. Each visitor will be visited for each node before moving on.
55
58
  *
56
59
  * If a prior visitor edits a node, no following visitors will see that node.
57
60
  */
58
- exports.isNode = isNode;
61
+ exports.cloneNode = cloneNode;
59
62
  const mergeAll = (visitors, {
60
63
  visitFnGetter = getVisitFn,
61
64
  nodeTypeGetter = getNodeType
62
65
  } = {}) => {
63
- const skipping = new Array(visitors.length);
66
+ const skipping = new Array(visitors.length).fill(null);
64
67
  return {
65
68
  enter(node, ...rest) {
66
69
  for (let i = 0; i < visitors.length; i += 1) {
67
- if (skipping[i] == null) {
70
+ if (skipping[i] === null) {
68
71
  const fn = visitFnGetter(visitors[i], nodeTypeGetter(node), /* isLeaving */false);
69
72
  if (typeof fn === 'function') {
70
73
  const result = fn.call(visitors[i], node, ...rest);
@@ -82,7 +85,7 @@ const mergeAll = (visitors, {
82
85
  },
83
86
  leave(node, ...rest) {
84
87
  for (let i = 0; i < visitors.length; i += 1) {
85
- if (skipping[i] == null) {
88
+ if (skipping[i] === null) {
86
89
  const fn = visitFnGetter(visitors[i], nodeTypeGetter(node), /* isLeaving */true);
87
90
  if (typeof fn === 'function') {
88
91
  const result = fn.call(visitors[i], node, ...rest);
@@ -205,6 +208,7 @@ visitor, {
205
208
  visitFnGetter = getVisitFn,
206
209
  nodeTypeGetter = getNodeType,
207
210
  nodePredicate = isNode,
211
+ nodeCloneFn = cloneNode,
208
212
  detectCycles = true
209
213
  } = {}) => {
210
214
  const visitorKeys = keyMap || {};
@@ -214,15 +218,14 @@ visitor, {
214
218
  let index = -1;
215
219
  let parent;
216
220
  let edits = [];
221
+ let node = root;
217
222
  const path = [];
218
223
  // @ts-ignore
219
224
  const ancestors = [];
220
- let newRoot = root;
221
225
  do {
222
226
  index += 1;
223
227
  const isLeaving = index === keys.length;
224
228
  let key;
225
- let node;
226
229
  const isEdited = isLeaving && edits.length !== 0;
227
230
  if (isLeaving) {
228
231
  key = ancestors.length === 0 ? undefined : path.pop();
@@ -231,23 +234,22 @@ visitor, {
231
234
  parent = ancestors.pop();
232
235
  if (isEdited) {
233
236
  if (inArray) {
234
- // @ts-ignore
237
+ // @ts-ignore; creating clone
235
238
  node = node.slice();
239
+ let editOffset = 0;
240
+ for (const [editKey, editValue] of edits) {
241
+ const arrayKey = editKey - editOffset;
242
+ if (editValue === deleteNodeSymbol) {
243
+ node.splice(arrayKey, 1);
244
+ editOffset += 1;
245
+ } else {
246
+ node[arrayKey] = editValue;
247
+ }
248
+ }
236
249
  } else {
237
250
  // creating clone
238
- node = Object.create(Object.getPrototypeOf(node), Object.getOwnPropertyDescriptors(node));
239
- }
240
- let editOffset = 0;
241
- for (let ii = 0; ii < edits.length; ii += 1) {
242
- let editKey = edits[ii][0];
243
- const editValue = edits[ii][1];
244
- if (inArray) {
245
- editKey -= editOffset;
246
- }
247
- if (inArray && editValue === deleteNodeSymbol) {
248
- node.splice(editKey, 1);
249
- editOffset += 1;
250
- } else {
251
+ node = nodeCloneFn(node);
252
+ for (const [editKey, editValue] of edits) {
251
253
  node[editKey] = editValue;
252
254
  }
253
255
  }
@@ -260,15 +262,13 @@ visitor, {
260
262
  inArray = stack.inArray;
261
263
  // @ts-ignore
262
264
  stack = stack.prev;
263
- } else {
264
- key = parent ? inArray ? index : keys[index] : undefined;
265
- node = parent ? parent[key] : newRoot;
265
+ } else if (parent !== deleteNodeSymbol && parent !== undefined) {
266
+ key = inArray ? index : keys[index];
267
+ node = parent[key];
266
268
  if (node === deleteNodeSymbol || node === undefined) {
267
269
  continue;
268
270
  }
269
- if (parent) {
270
- path.push(key);
271
- }
271
+ path.push(key);
272
272
  }
273
273
  if (ancestors.includes(node)) {
274
274
  continue;
@@ -278,6 +278,7 @@ visitor, {
278
278
  if (!nodePredicate(node)) {
279
279
  throw new _apidomError.ApiDOMError(`Invalid AST Node: ${JSON.stringify(node)}`);
280
280
  }
281
+
281
282
  // cycle detected; skipping over a sub-tree to avoid recursion
282
283
  if (detectCycles && ancestors.includes(node)) {
283
284
  path.pop();
@@ -290,25 +291,26 @@ visitor, {
290
291
  for (const [stateKey, stateValue] of Object.entries(state)) {
291
292
  visitor[stateKey] = stateValue;
292
293
  }
294
+ // retrieve result
293
295
  result = visitFn.call(visitor, node, key, parent, path, ancestors);
294
- if (result === breakSymbol) {
295
- break;
296
+ }
297
+ if (result === breakSymbol) {
298
+ break;
299
+ }
300
+ if (result === skipVisitingNodeSymbol) {
301
+ if (!isLeaving) {
302
+ path.pop();
303
+ continue;
296
304
  }
297
- if (result === skipVisitingNodeSymbol) {
298
- if (!isLeaving) {
305
+ } else if (result !== undefined) {
306
+ edits.push([key, result]);
307
+ if (!isLeaving) {
308
+ if (nodePredicate(result)) {
309
+ node = result;
310
+ } else {
299
311
  path.pop();
300
312
  continue;
301
313
  }
302
- } else if (result !== undefined) {
303
- edits.push([key, result]);
304
- if (!isLeaving) {
305
- if (nodePredicate(result)) {
306
- node = result;
307
- } else {
308
- path.pop();
309
- continue;
310
- }
311
- }
312
314
  }
313
315
  }
314
316
  }
@@ -316,6 +318,7 @@ visitor, {
316
318
  edits.push([key, node]);
317
319
  }
318
320
  if (!isLeaving) {
321
+ var _visitorKeys$nodeType;
319
322
  stack = {
320
323
  inArray,
321
324
  index,
@@ -325,19 +328,19 @@ visitor, {
325
328
  };
326
329
  inArray = Array.isArray(node);
327
330
  // @ts-ignore
328
- keys = inArray ? node : visitorKeys[nodeTypeGetter(node)] || [];
331
+ keys = inArray ? node : (_visitorKeys$nodeType = visitorKeys[nodeTypeGetter(node)]) != null ? _visitorKeys$nodeType : [];
329
332
  index = -1;
330
333
  edits = [];
331
- if (parent) {
334
+ if (parent !== deleteNodeSymbol && parent !== undefined) {
332
335
  ancestors.push(parent);
333
336
  }
334
337
  parent = node;
335
338
  }
336
339
  } while (stack !== undefined);
337
340
  if (edits.length !== 0) {
338
- [, newRoot] = edits[edits.length - 1];
341
+ return edits.at(-1)[1];
339
342
  }
340
- return newRoot;
343
+ return root;
341
344
  };
342
345
 
343
346
  /**
@@ -358,6 +361,7 @@ visitor, {
358
361
  visitFnGetter = getVisitFn,
359
362
  nodeTypeGetter = getNodeType,
360
363
  nodePredicate = isNode,
364
+ nodeCloneFn = cloneNode,
361
365
  detectCycles = true
362
366
  } = {}) => {
363
367
  const visitorKeys = keyMap || {};
@@ -367,15 +371,14 @@ visitor, {
367
371
  let index = -1;
368
372
  let parent;
369
373
  let edits = [];
374
+ let node = root;
370
375
  const path = [];
371
376
  // @ts-ignore
372
377
  const ancestors = [];
373
- let newRoot = root;
374
378
  do {
375
379
  index += 1;
376
380
  const isLeaving = index === keys.length;
377
381
  let key;
378
- let node;
379
382
  const isEdited = isLeaving && edits.length !== 0;
380
383
  if (isLeaving) {
381
384
  key = ancestors.length === 0 ? undefined : path.pop();
@@ -384,23 +387,22 @@ visitor, {
384
387
  parent = ancestors.pop();
385
388
  if (isEdited) {
386
389
  if (inArray) {
387
- // @ts-ignore
390
+ // @ts-ignore; creating clone
388
391
  node = node.slice();
392
+ let editOffset = 0;
393
+ for (const [editKey, editValue] of edits) {
394
+ const arrayKey = editKey - editOffset;
395
+ if (editValue === deleteNodeSymbol) {
396
+ node.splice(arrayKey, 1);
397
+ editOffset += 1;
398
+ } else {
399
+ node[arrayKey] = editValue;
400
+ }
401
+ }
389
402
  } else {
390
403
  // creating clone
391
- node = Object.create(Object.getPrototypeOf(node), Object.getOwnPropertyDescriptors(node));
392
- }
393
- let editOffset = 0;
394
- for (let ii = 0; ii < edits.length; ii += 1) {
395
- let editKey = edits[ii][0];
396
- const editValue = edits[ii][1];
397
- if (inArray) {
398
- editKey -= editOffset;
399
- }
400
- if (inArray && editValue === deleteNodeSymbol) {
401
- node.splice(editKey, 1);
402
- editOffset += 1;
403
- } else {
404
+ node = nodeCloneFn(node);
405
+ for (const [editKey, editValue] of edits) {
404
406
  node[editKey] = editValue;
405
407
  }
406
408
  }
@@ -413,21 +415,20 @@ visitor, {
413
415
  inArray = stack.inArray;
414
416
  // @ts-ignore
415
417
  stack = stack.prev;
416
- } else {
417
- key = parent ? inArray ? index : keys[index] : undefined;
418
- node = parent ? parent[key] : newRoot;
418
+ } else if (parent !== deleteNodeSymbol && parent !== undefined) {
419
+ key = inArray ? index : keys[index];
420
+ node = parent[key];
419
421
  if (node === deleteNodeSymbol || node === undefined) {
420
422
  continue;
421
423
  }
422
- if (parent) {
423
- path.push(key);
424
- }
424
+ path.push(key);
425
425
  }
426
426
  let result;
427
427
  if (!Array.isArray(node)) {
428
428
  if (!nodePredicate(node)) {
429
429
  throw new _apidomError.ApiDOMError(`Invalid AST Node: ${JSON.stringify(node)}`);
430
430
  }
431
+
431
432
  // cycle detected; skipping over a sub-tree to avoid recursion
432
433
  if (detectCycles && ancestors.includes(node)) {
433
434
  path.pop();
@@ -440,26 +441,27 @@ visitor, {
440
441
  visitor[stateKey] = stateValue;
441
442
  }
442
443
 
443
- // eslint-disable-next-line no-await-in-loop
444
- result = await visitFn.call(visitor, node, key, parent, path, ancestors);
445
- if (result === breakSymbol) {
446
- break;
444
+ // retrieve result
445
+ result = await visitFn.call(visitor, node, key, parent, path, ancestors); // eslint-disable-line no-await-in-loop
446
+ }
447
+
448
+ if (result === breakSymbol) {
449
+ break;
450
+ }
451
+ if (result === skipVisitingNodeSymbol) {
452
+ if (!isLeaving) {
453
+ path.pop();
454
+ continue;
447
455
  }
448
- if (result === skipVisitingNodeSymbol) {
449
- if (!isLeaving) {
456
+ } else if (result !== undefined) {
457
+ edits.push([key, result]);
458
+ if (!isLeaving) {
459
+ if (nodePredicate(result)) {
460
+ node = result;
461
+ } else {
450
462
  path.pop();
451
463
  continue;
452
464
  }
453
- } else if (result !== undefined) {
454
- edits.push([key, result]);
455
- if (!isLeaving) {
456
- if (nodePredicate(result)) {
457
- node = result;
458
- } else {
459
- path.pop();
460
- continue;
461
- }
462
- }
463
465
  }
464
466
  }
465
467
  }
@@ -467,6 +469,7 @@ visitor, {
467
469
  edits.push([key, node]);
468
470
  }
469
471
  if (!isLeaving) {
472
+ var _visitorKeys$nodeType2;
470
473
  stack = {
471
474
  inArray,
472
475
  index,
@@ -476,19 +479,19 @@ visitor, {
476
479
  };
477
480
  inArray = Array.isArray(node);
478
481
  // @ts-ignore
479
- keys = inArray ? node : visitorKeys[nodeTypeGetter(node)] || [];
482
+ keys = inArray ? node : (_visitorKeys$nodeType2 = visitorKeys[nodeTypeGetter(node)]) != null ? _visitorKeys$nodeType2 : [];
480
483
  index = -1;
481
484
  edits = [];
482
- if (parent) {
485
+ if (parent !== deleteNodeSymbol && parent !== undefined) {
483
486
  ancestors.push(parent);
484
487
  }
485
488
  parent = node;
486
489
  }
487
490
  } while (stack !== undefined);
488
491
  if (edits.length !== 0) {
489
- [, newRoot] = edits[edits.length - 1];
492
+ return edits.at(-1)[1];
490
493
  }
491
- return newRoot;
494
+ return root;
492
495
  };
493
496
 
494
497
  /* eslint-enable */
@@ -4,5 +4,4 @@ exports.__esModule = true;
4
4
  exports.default = void 0;
5
5
  var _apidomError = require("@swagger-api/apidom-error");
6
6
  class YamlSchemaError extends _apidomError.ApiDOMStructuredError {}
7
- var _default = YamlSchemaError;
8
- exports.default = _default;
7
+ var _default = exports.default = YamlSchemaError;