@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.
- package/CHANGELOG.md +17 -0
- package/cjs/Error.cjs +1 -2
- package/cjs/Literal.cjs +1 -2
- package/cjs/Node.cjs +1 -2
- package/cjs/ParseResult.cjs +1 -2
- package/cjs/Position.cjs +2 -4
- package/cjs/index.cjs +3 -2
- package/cjs/json/nodes/JsonArray.cjs +1 -2
- package/cjs/json/nodes/JsonDocument.cjs +1 -2
- package/cjs/json/nodes/JsonEscapeSequence.cjs +1 -2
- package/cjs/json/nodes/JsonFalse.cjs +1 -2
- package/cjs/json/nodes/JsonKey.cjs +1 -2
- package/cjs/json/nodes/JsonNode.cjs +1 -2
- package/cjs/json/nodes/JsonNull.cjs +1 -2
- package/cjs/json/nodes/JsonNumber.cjs +1 -2
- package/cjs/json/nodes/JsonObject.cjs +1 -2
- package/cjs/json/nodes/JsonProperty.cjs +1 -2
- package/cjs/json/nodes/JsonString.cjs +1 -2
- package/cjs/json/nodes/JsonStringContent.cjs +1 -2
- package/cjs/json/nodes/JsonTrue.cjs +1 -2
- package/cjs/json/nodes/JsonValue.cjs +1 -2
- package/cjs/json/nodes/predicates.cjs +12 -24
- package/cjs/predicates.cjs +4 -8
- package/cjs/traversal/visitor.cjs +92 -89
- package/cjs/yaml/errors/YamlSchemaError.cjs +1 -2
- package/cjs/yaml/errors/YamlTagError.cjs +1 -2
- package/cjs/yaml/nodes/YamlAlias.cjs +1 -2
- package/cjs/yaml/nodes/YamlAnchor.cjs +1 -2
- package/cjs/yaml/nodes/YamlCollection.cjs +1 -2
- package/cjs/yaml/nodes/YamlComment.cjs +1 -2
- package/cjs/yaml/nodes/YamlDirective.cjs +1 -2
- package/cjs/yaml/nodes/YamlDocument.cjs +1 -2
- package/cjs/yaml/nodes/YamlKeyValuePair.cjs +1 -2
- package/cjs/yaml/nodes/YamlMapping.cjs +1 -2
- package/cjs/yaml/nodes/YamlNode.cjs +1 -2
- package/cjs/yaml/nodes/YamlScalar.cjs +1 -2
- package/cjs/yaml/nodes/YamlSequence.cjs +1 -2
- package/cjs/yaml/nodes/YamlStream.cjs +1 -2
- package/cjs/yaml/nodes/YamlStyle.cjs +3 -6
- package/cjs/yaml/nodes/YamlTag.cjs +2 -4
- package/cjs/yaml/nodes/predicates.cjs +10 -20
- package/cjs/yaml/schemas/ScalarTag.cjs +1 -2
- package/cjs/yaml/schemas/Tag.cjs +1 -2
- package/cjs/yaml/schemas/canonical-format.cjs +4 -6
- package/cjs/yaml/schemas/failsafe/GenericMapping.cjs +1 -2
- package/cjs/yaml/schemas/failsafe/GenericSequence.cjs +1 -2
- package/cjs/yaml/schemas/failsafe/GenericString.cjs +1 -2
- package/cjs/yaml/schemas/failsafe/index.cjs +1 -2
- package/cjs/yaml/schemas/json/Boolean.cjs +1 -2
- package/cjs/yaml/schemas/json/FloatingPoint.cjs +1 -2
- package/cjs/yaml/schemas/json/Integer.cjs +1 -2
- package/cjs/yaml/schemas/json/Null.cjs +1 -2
- package/cjs/yaml/schemas/json/index.cjs +1 -2
- package/dist/apidom-ast.browser.js +3954 -17202
- package/dist/apidom-ast.browser.min.js +1 -1
- package/es/index.mjs +1 -1
- package/es/traversal/visitor.mjs +88 -85
- package/package.json +4 -4
- 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
package/cjs/Literal.cjs
CHANGED
package/cjs/Node.cjs
CHANGED
package/cjs/ParseResult.cjs
CHANGED
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;
|
@@ -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;
|
@@ -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.
|
8
|
-
const
|
9
|
-
exports.
|
10
|
-
const
|
11
|
-
exports.
|
12
|
-
const
|
13
|
-
exports.
|
14
|
-
const
|
15
|
-
exports.
|
16
|
-
const
|
17
|
-
exports.
|
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');
|
package/cjs/predicates.cjs
CHANGED
@@ -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.
|
9
|
-
const
|
10
|
-
exports.
|
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.
|
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]
|
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]
|
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 =
|
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 =
|
265
|
-
node = parent
|
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
|
-
|
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
|
-
|
295
|
-
|
296
|
+
}
|
297
|
+
if (result === breakSymbol) {
|
298
|
+
break;
|
299
|
+
}
|
300
|
+
if (result === skipVisitingNodeSymbol) {
|
301
|
+
if (!isLeaving) {
|
302
|
+
path.pop();
|
303
|
+
continue;
|
296
304
|
}
|
297
|
-
|
298
|
-
|
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
|
-
|
341
|
+
return edits.at(-1)[1];
|
339
342
|
}
|
340
|
-
return
|
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 =
|
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 =
|
418
|
-
node = parent
|
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
|
-
|
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
|
-
//
|
444
|
-
result = await visitFn.call(visitor, node, key, parent, path, ancestors);
|
445
|
-
|
446
|
-
|
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
|
-
|
449
|
-
|
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
|
-
|
492
|
+
return edits.at(-1)[1];
|
490
493
|
}
|
491
|
-
return
|
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;
|