@swagger-api/apidom-ast 0.68.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 (110) hide show
  1. package/CHANGELOG.md +352 -0
  2. package/LICENSES/Apache-2.0.txt +202 -0
  3. package/LICENSES/MIT.txt +9 -0
  4. package/NOTICE +57 -0
  5. package/README.md +98 -0
  6. package/cjs/Error.cjs +25 -0
  7. package/cjs/Literal.cjs +22 -0
  8. package/cjs/Node.cjs +46 -0
  9. package/cjs/ParseResult.cjs +22 -0
  10. package/cjs/Position.cjs +46 -0
  11. package/cjs/index.cjs +113 -0
  12. package/cjs/json/nodes/JsonArray.cjs +21 -0
  13. package/cjs/json/nodes/JsonDocument.cjs +22 -0
  14. package/cjs/json/nodes/JsonEscapeSequence.cjs +14 -0
  15. package/cjs/json/nodes/JsonFalse.cjs +14 -0
  16. package/cjs/json/nodes/JsonKey.cjs +14 -0
  17. package/cjs/json/nodes/JsonNode.cjs +10 -0
  18. package/cjs/json/nodes/JsonNull.cjs +14 -0
  19. package/cjs/json/nodes/JsonNumber.cjs +14 -0
  20. package/cjs/json/nodes/JsonObject.cjs +21 -0
  21. package/cjs/json/nodes/JsonProperty.cjs +27 -0
  22. package/cjs/json/nodes/JsonString.cjs +27 -0
  23. package/cjs/json/nodes/JsonStringContent.cjs +14 -0
  24. package/cjs/json/nodes/JsonTrue.cjs +14 -0
  25. package/cjs/json/nodes/JsonValue.cjs +22 -0
  26. package/cjs/json/nodes/predicates.cjs +29 -0
  27. package/cjs/predicates.cjs +14 -0
  28. package/cjs/traversal/visitor.cjs +493 -0
  29. package/cjs/yaml/nodes/YamlAlias.cjs +22 -0
  30. package/cjs/yaml/nodes/YamlAnchor.cjs +22 -0
  31. package/cjs/yaml/nodes/YamlCollection.cjs +10 -0
  32. package/cjs/yaml/nodes/YamlComment.cjs +22 -0
  33. package/cjs/yaml/nodes/YamlDirective.cjs +30 -0
  34. package/cjs/yaml/nodes/YamlDocument.cjs +14 -0
  35. package/cjs/yaml/nodes/YamlKeyValuePair.cjs +40 -0
  36. package/cjs/yaml/nodes/YamlMapping.cjs +24 -0
  37. package/cjs/yaml/nodes/YamlNode.cjs +28 -0
  38. package/cjs/yaml/nodes/YamlScalar.cjs +22 -0
  39. package/cjs/yaml/nodes/YamlSequence.cjs +27 -0
  40. package/cjs/yaml/nodes/YamlStream.cjs +26 -0
  41. package/cjs/yaml/nodes/YamlStyle.cjs +33 -0
  42. package/cjs/yaml/nodes/YamlTag.cjs +32 -0
  43. package/cjs/yaml/nodes/predicates.cjs +25 -0
  44. package/cjs/yaml/schemas/ScalarTag.cjs +43 -0
  45. package/cjs/yaml/schemas/Tag.cjs +14 -0
  46. package/cjs/yaml/schemas/canonical-format.cjs +129 -0
  47. package/cjs/yaml/schemas/failsafe/GenericMapping.cjs +29 -0
  48. package/cjs/yaml/schemas/failsafe/GenericSequence.cjs +29 -0
  49. package/cjs/yaml/schemas/failsafe/GenericString.cjs +24 -0
  50. package/cjs/yaml/schemas/failsafe/index.cjs +96 -0
  51. package/cjs/yaml/schemas/json/Boolean.cjs +30 -0
  52. package/cjs/yaml/schemas/json/FloatingPoint.cjs +30 -0
  53. package/cjs/yaml/schemas/json/Integer.cjs +30 -0
  54. package/cjs/yaml/schemas/json/Null.cjs +29 -0
  55. package/cjs/yaml/schemas/json/index.cjs +47 -0
  56. package/dist/apidom-ast.browser.js +21212 -0
  57. package/dist/apidom-ast.browser.min.js +2 -0
  58. package/dist/apidom-ast.browser.min.js.LICENSE.txt +6 -0
  59. package/es/Error.js +19 -0
  60. package/es/Literal.js +16 -0
  61. package/es/Node.js +40 -0
  62. package/es/ParseResult.js +16 -0
  63. package/es/Position.js +39 -0
  64. package/es/index.js +39 -0
  65. package/es/json/nodes/JsonArray.js +15 -0
  66. package/es/json/nodes/JsonDocument.js +16 -0
  67. package/es/json/nodes/JsonEscapeSequence.js +8 -0
  68. package/es/json/nodes/JsonFalse.js +8 -0
  69. package/es/json/nodes/JsonKey.js +8 -0
  70. package/es/json/nodes/JsonNode.js +4 -0
  71. package/es/json/nodes/JsonNull.js +8 -0
  72. package/es/json/nodes/JsonNumber.js +8 -0
  73. package/es/json/nodes/JsonObject.js +15 -0
  74. package/es/json/nodes/JsonProperty.js +21 -0
  75. package/es/json/nodes/JsonString.js +21 -0
  76. package/es/json/nodes/JsonStringContent.js +8 -0
  77. package/es/json/nodes/JsonTrue.js +8 -0
  78. package/es/json/nodes/JsonValue.js +16 -0
  79. package/es/json/nodes/predicates.js +13 -0
  80. package/es/predicates.js +5 -0
  81. package/es/traversal/visitor.js +483 -0
  82. package/es/yaml/nodes/YamlAlias.js +16 -0
  83. package/es/yaml/nodes/YamlAnchor.js +16 -0
  84. package/es/yaml/nodes/YamlCollection.js +4 -0
  85. package/es/yaml/nodes/YamlComment.js +16 -0
  86. package/es/yaml/nodes/YamlDirective.js +24 -0
  87. package/es/yaml/nodes/YamlDocument.js +8 -0
  88. package/es/yaml/nodes/YamlKeyValuePair.js +34 -0
  89. package/es/yaml/nodes/YamlMapping.js +18 -0
  90. package/es/yaml/nodes/YamlNode.js +22 -0
  91. package/es/yaml/nodes/YamlScalar.js +16 -0
  92. package/es/yaml/nodes/YamlSequence.js +21 -0
  93. package/es/yaml/nodes/YamlStream.js +20 -0
  94. package/es/yaml/nodes/YamlStyle.js +25 -0
  95. package/es/yaml/nodes/YamlTag.js +25 -0
  96. package/es/yaml/nodes/predicates.js +11 -0
  97. package/es/yaml/schemas/ScalarTag.js +37 -0
  98. package/es/yaml/schemas/Tag.js +8 -0
  99. package/es/yaml/schemas/canonical-format.js +122 -0
  100. package/es/yaml/schemas/failsafe/GenericMapping.js +23 -0
  101. package/es/yaml/schemas/failsafe/GenericSequence.js +23 -0
  102. package/es/yaml/schemas/failsafe/GenericString.js +18 -0
  103. package/es/yaml/schemas/failsafe/index.js +90 -0
  104. package/es/yaml/schemas/json/Boolean.js +24 -0
  105. package/es/yaml/schemas/json/FloatingPoint.js +24 -0
  106. package/es/yaml/schemas/json/Integer.js +24 -0
  107. package/es/yaml/schemas/json/Null.js +23 -0
  108. package/es/yaml/schemas/json/index.js +41 -0
  109. package/package.json +62 -0
  110. package/types/dist.d.ts +362 -0
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
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
+ 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;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.isPosition = exports.isPoint = exports.isParseResult = exports.isNodeType = exports.isLiteral = void 0;
5
+ const isNodeType = (type, node) => (node === null || node === void 0 ? void 0 : node.type) === type;
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;
@@ -0,0 +1,493 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.visit = exports.mergeAll = exports.isNode = exports.getVisitFn = exports.getNodeType = exports.BREAK = void 0;
5
+ /**
6
+ * SPDX-FileCopyrightText: Copyright (c) GraphQL Contributors
7
+ *
8
+ * SPDX-License-Identifier: MIT
9
+ */
10
+
11
+ // getVisitFn :: (Visitor, String, Boolean) -> Function
12
+ const getVisitFn = (visitor, type, isLeaving) => {
13
+ const typeVisitor = visitor[type];
14
+ if (typeVisitor != null) {
15
+ if (!isLeaving && typeof typeVisitor === 'function') {
16
+ // { Type() {} }
17
+ return typeVisitor;
18
+ }
19
+ const typeSpecificVisitor = isLeaving ? typeVisitor.leave : typeVisitor.enter;
20
+ if (typeof typeSpecificVisitor === 'function') {
21
+ // { Type: { enter() {}, leave() {} } }
22
+ return typeSpecificVisitor;
23
+ }
24
+ } else {
25
+ const specificVisitor = isLeaving ? visitor.leave : visitor.enter;
26
+ if (specificVisitor != null) {
27
+ if (typeof specificVisitor === 'function') {
28
+ // { enter() {}, leave() {} }
29
+ return specificVisitor;
30
+ }
31
+ const specificTypeVisitor = specificVisitor[type];
32
+ if (typeof specificTypeVisitor === 'function') {
33
+ // { enter: { Type() {} }, leave: { Type() {} } }
34
+ return specificTypeVisitor;
35
+ }
36
+ }
37
+ }
38
+ return null;
39
+ };
40
+ exports.getVisitFn = getVisitFn;
41
+ const BREAK = {};
42
+
43
+ // getNodeType :: Node -> String
44
+ exports.BREAK = BREAK;
45
+ const getNodeType = node => node === null || node === void 0 ? void 0 : node.type;
46
+
47
+ // isNode :: Node -> Boolean
48
+ exports.getNodeType = getNodeType;
49
+ const isNode = node => typeof getNodeType(node) === 'string';
50
+
51
+ /**
52
+ * Creates a new visitor instance which delegates to many visitors to run in
53
+ * parallel. Each visitor will be visited for each node before moving on.
54
+ *
55
+ * If a prior visitor edits a node, no following visitors will see that node.
56
+ */
57
+ exports.isNode = isNode;
58
+ const mergeAll = (visitors, {
59
+ visitFnGetter = getVisitFn,
60
+ nodeTypeGetter = getNodeType
61
+ } = {}) => {
62
+ const skipping = new Array(visitors.length);
63
+ return {
64
+ enter(node, ...rest) {
65
+ for (let i = 0; i < visitors.length; i += 1) {
66
+ if (skipping[i] == null) {
67
+ const fn = visitFnGetter(visitors[i], nodeTypeGetter(node), /* isLeaving */false);
68
+ if (typeof fn === 'function') {
69
+ const result = fn.call(visitors[i], node, ...rest);
70
+ if (result === false) {
71
+ skipping[i] = node;
72
+ } else if (result === BREAK) {
73
+ skipping[i] = BREAK;
74
+ } else if (result !== undefined) {
75
+ return result;
76
+ }
77
+ }
78
+ }
79
+ }
80
+ return undefined;
81
+ },
82
+ leave(node, ...rest) {
83
+ for (let i = 0; i < visitors.length; i += 1) {
84
+ if (skipping[i] == null) {
85
+ const fn = visitFnGetter(visitors[i], nodeTypeGetter(node), /* isLeaving */true);
86
+ if (typeof fn === 'function') {
87
+ const result = fn.call(visitors[i], node, ...rest);
88
+ if (result === BREAK) {
89
+ skipping[i] = BREAK;
90
+ } else if (result !== undefined && result !== false) {
91
+ return result;
92
+ }
93
+ }
94
+ } else if (skipping[i] === node) {
95
+ skipping[i] = null;
96
+ }
97
+ }
98
+ return undefined;
99
+ }
100
+ };
101
+ };
102
+
103
+ /* eslint-disable no-continue, no-nested-ternary, no-param-reassign */
104
+ /**
105
+ * visit() will walk through an AST using a preorder depth first traversal, calling
106
+ * the visitor's enter function at each node in the traversal, and calling the
107
+ * leave function after visiting that node and all of its child nodes.
108
+ *
109
+ * By returning different values from the enter and leave functions, the
110
+ * behavior of the visitor can be altered, including skipping over a sub-tree of
111
+ * the AST (by returning false), editing the AST by returning a value or null
112
+ * to remove the value, or to stop the whole traversal by returning BREAK.
113
+ *
114
+ * When using visit() to edit an AST, the original AST will not be modified, and
115
+ * a new version of the AST with the changes applied will be returned from the
116
+ * visit function.
117
+ *
118
+ * const editedAST = visit(ast, {
119
+ * enter(node, key, parent, path, ancestors) {
120
+ * // @return
121
+ * // undefined: no action
122
+ * // false: skip visiting this node
123
+ * // BREAK: stop visiting altogether
124
+ * // null: delete this node
125
+ * // any value: replace this node with the returned value
126
+ * },
127
+ * leave(node, key, parent, path, ancestors) {
128
+ * // @return
129
+ * // undefined: no action
130
+ * // false: no action
131
+ * // BREAK: stop visiting altogether
132
+ * // null: delete this node
133
+ * // any value: replace this node with the returned value
134
+ * }
135
+ * });
136
+ *
137
+ * Alternatively to providing enter() and leave() functions, a visitor can
138
+ * instead provide functions named the same as the kinds of AST nodes, or
139
+ * enter/leave visitors at a named key, leading to four permutations of
140
+ * visitor API:
141
+ *
142
+ * 1) Named visitors triggered when entering a node a specific kind.
143
+ *
144
+ * visit(ast, {
145
+ * Kind(node) {
146
+ * // enter the "Kind" node
147
+ * }
148
+ * })
149
+ *
150
+ * 2) Named visitors that trigger upon entering and leaving a node of
151
+ * a specific kind.
152
+ *
153
+ * visit(ast, {
154
+ * Kind: {
155
+ * enter(node) {
156
+ * // enter the "Kind" node
157
+ * }
158
+ * leave(node) {
159
+ * // leave the "Kind" node
160
+ * }
161
+ * }
162
+ * })
163
+ *
164
+ * 3) Generic visitors that trigger upon entering and leaving any node.
165
+ *
166
+ * visit(ast, {
167
+ * enter(node) {
168
+ * // enter any node
169
+ * },
170
+ * leave(node) {
171
+ * // leave any node
172
+ * }
173
+ * })
174
+ *
175
+ * 4) Parallel visitors for entering and leaving nodes of a specific kind.
176
+ *
177
+ * visit(ast, {
178
+ * enter: {
179
+ * Kind(node) {
180
+ * // enter the "Kind" node
181
+ * }
182
+ * },
183
+ * leave: {
184
+ * Kind(node) {
185
+ * // leave the "Kind" node
186
+ * }
187
+ * }
188
+ * })
189
+ *
190
+ * @sig visit :: (Node, Visitor, Options)
191
+ * @sig Options = { keyMap: Object, state: Object }
192
+ */
193
+ exports.mergeAll = mergeAll;
194
+ const visit = (
195
+ // @ts-ignore
196
+ root,
197
+ // @ts-ignore
198
+ visitor, {
199
+ keyMap = null,
200
+ state = {},
201
+ breakSymbol = BREAK,
202
+ deleteNodeSymbol = null,
203
+ skipVisitingNodeSymbol = false,
204
+ visitFnGetter = getVisitFn,
205
+ nodeTypeGetter = getNodeType,
206
+ nodePredicate = isNode,
207
+ detectCycles = true
208
+ } = {}) => {
209
+ const visitorKeys = keyMap || {};
210
+ let stack;
211
+ let inArray = Array.isArray(root);
212
+ let keys = [root];
213
+ let index = -1;
214
+ let parent;
215
+ let edits = [];
216
+ const path = [];
217
+ // @ts-ignore
218
+ const ancestors = [];
219
+ let newRoot = root;
220
+ do {
221
+ index += 1;
222
+ const isLeaving = index === keys.length;
223
+ let key;
224
+ let node;
225
+ const isEdited = isLeaving && edits.length !== 0;
226
+ if (isLeaving) {
227
+ key = ancestors.length === 0 ? undefined : path.pop();
228
+ node = parent;
229
+ // @ts-ignore
230
+ parent = ancestors.pop();
231
+ if (isEdited) {
232
+ if (inArray) {
233
+ // @ts-ignore
234
+ node = node.slice();
235
+ } else {
236
+ // creating clone
237
+ node = Object.create(Object.getPrototypeOf(node), Object.getOwnPropertyDescriptors(node));
238
+ }
239
+ let editOffset = 0;
240
+ for (let ii = 0; ii < edits.length; ii += 1) {
241
+ let editKey = edits[ii][0];
242
+ const editValue = edits[ii][1];
243
+ if (inArray) {
244
+ editKey -= editOffset;
245
+ }
246
+ if (inArray && editValue === deleteNodeSymbol) {
247
+ node.splice(editKey, 1);
248
+ editOffset += 1;
249
+ } else {
250
+ node[editKey] = editValue;
251
+ }
252
+ }
253
+ }
254
+ index = stack.index;
255
+ keys = stack.keys;
256
+ // @ts-ignore
257
+ edits = stack.edits;
258
+ // @ts-ignore
259
+ inArray = stack.inArray;
260
+ // @ts-ignore
261
+ stack = stack.prev;
262
+ } else {
263
+ key = parent ? inArray ? index : keys[index] : undefined;
264
+ node = parent ? parent[key] : newRoot;
265
+ if (node === deleteNodeSymbol || node === undefined) {
266
+ continue;
267
+ }
268
+ if (parent) {
269
+ path.push(key);
270
+ }
271
+ }
272
+ if (ancestors.includes(node)) {
273
+ continue;
274
+ }
275
+ let result;
276
+ if (!Array.isArray(node)) {
277
+ if (!nodePredicate(node)) {
278
+ throw new Error(`Invalid AST Node: ${JSON.stringify(node)}`);
279
+ }
280
+ // cycle detected; skipping over a sub-tree to avoid recursion
281
+ if (detectCycles && ancestors.includes(node)) {
282
+ path.pop();
283
+ continue;
284
+ }
285
+ // call appropriate visitor function if available
286
+ const visitFn = visitFnGetter(visitor, nodeTypeGetter(node), isLeaving);
287
+ if (visitFn) {
288
+ // assign state
289
+ for (const [stateKey, stateValue] of Object.entries(state)) {
290
+ visitor[stateKey] = stateValue;
291
+ }
292
+ result = visitFn.call(visitor, node, key, parent, path, ancestors);
293
+ if (result === breakSymbol) {
294
+ break;
295
+ }
296
+ if (result === skipVisitingNodeSymbol) {
297
+ if (!isLeaving) {
298
+ path.pop();
299
+ continue;
300
+ }
301
+ } else if (result !== undefined) {
302
+ edits.push([key, result]);
303
+ if (!isLeaving) {
304
+ if (nodePredicate(result)) {
305
+ node = result;
306
+ } else {
307
+ path.pop();
308
+ continue;
309
+ }
310
+ }
311
+ }
312
+ }
313
+ }
314
+ if (result === undefined && isEdited) {
315
+ edits.push([key, node]);
316
+ }
317
+ if (!isLeaving) {
318
+ stack = {
319
+ inArray,
320
+ index,
321
+ keys,
322
+ edits,
323
+ prev: stack
324
+ };
325
+ inArray = Array.isArray(node);
326
+ // @ts-ignore
327
+ keys = inArray ? node : visitorKeys[nodeTypeGetter(node)] || [];
328
+ index = -1;
329
+ edits = [];
330
+ if (parent) {
331
+ ancestors.push(parent);
332
+ }
333
+ parent = node;
334
+ }
335
+ } while (stack !== undefined);
336
+ if (edits.length !== 0) {
337
+ [, newRoot] = edits[edits.length - 1];
338
+ }
339
+ return newRoot;
340
+ };
341
+
342
+ /**
343
+ * Asynchronous version of visit.
344
+ */
345
+ // @ts-ignore
346
+ exports.visit = visit;
347
+ visit[Symbol.for('nodejs.util.promisify.custom')] = async (
348
+ // @ts-ignore
349
+ root,
350
+ // @ts-ignore
351
+ visitor, {
352
+ keyMap = null,
353
+ state = {},
354
+ breakSymbol = BREAK,
355
+ deleteNodeSymbol = null,
356
+ skipVisitingNodeSymbol = false,
357
+ visitFnGetter = getVisitFn,
358
+ nodeTypeGetter = getNodeType,
359
+ nodePredicate = isNode,
360
+ detectCycles = true
361
+ } = {}) => {
362
+ const visitorKeys = keyMap || {};
363
+ let stack;
364
+ let inArray = Array.isArray(root);
365
+ let keys = [root];
366
+ let index = -1;
367
+ let parent;
368
+ let edits = [];
369
+ const path = [];
370
+ // @ts-ignore
371
+ const ancestors = [];
372
+ let newRoot = root;
373
+ do {
374
+ index += 1;
375
+ const isLeaving = index === keys.length;
376
+ let key;
377
+ let node;
378
+ const isEdited = isLeaving && edits.length !== 0;
379
+ if (isLeaving) {
380
+ key = ancestors.length === 0 ? undefined : path.pop();
381
+ node = parent;
382
+ // @ts-ignore
383
+ parent = ancestors.pop();
384
+ if (isEdited) {
385
+ if (inArray) {
386
+ // @ts-ignore
387
+ node = node.slice();
388
+ } else {
389
+ // creating clone
390
+ node = Object.create(Object.getPrototypeOf(node), Object.getOwnPropertyDescriptors(node));
391
+ }
392
+ let editOffset = 0;
393
+ for (let ii = 0; ii < edits.length; ii += 1) {
394
+ let editKey = edits[ii][0];
395
+ const editValue = edits[ii][1];
396
+ if (inArray) {
397
+ editKey -= editOffset;
398
+ }
399
+ if (inArray && editValue === deleteNodeSymbol) {
400
+ node.splice(editKey, 1);
401
+ editOffset += 1;
402
+ } else {
403
+ node[editKey] = editValue;
404
+ }
405
+ }
406
+ }
407
+ index = stack.index;
408
+ keys = stack.keys;
409
+ // @ts-ignore
410
+ edits = stack.edits;
411
+ // @ts-ignore
412
+ inArray = stack.inArray;
413
+ // @ts-ignore
414
+ stack = stack.prev;
415
+ } else {
416
+ key = parent ? inArray ? index : keys[index] : undefined;
417
+ node = parent ? parent[key] : newRoot;
418
+ if (node === deleteNodeSymbol || node === undefined) {
419
+ continue;
420
+ }
421
+ if (parent) {
422
+ path.push(key);
423
+ }
424
+ }
425
+ let result;
426
+ if (!Array.isArray(node)) {
427
+ if (!nodePredicate(node)) {
428
+ throw new Error(`Invalid AST Node: ${JSON.stringify(node)}`);
429
+ }
430
+ // cycle detected; skipping over a sub-tree to avoid recursion
431
+ if (detectCycles && ancestors.includes(node)) {
432
+ path.pop();
433
+ continue;
434
+ }
435
+ const visitFn = visitFnGetter(visitor, nodeTypeGetter(node), isLeaving);
436
+ if (visitFn) {
437
+ // assign state
438
+ for (const [stateKey, stateValue] of Object.entries(state)) {
439
+ visitor[stateKey] = stateValue;
440
+ }
441
+
442
+ // eslint-disable-next-line no-await-in-loop
443
+ result = await visitFn.call(visitor, node, key, parent, path, ancestors);
444
+ if (result === breakSymbol) {
445
+ break;
446
+ }
447
+ if (result === skipVisitingNodeSymbol) {
448
+ if (!isLeaving) {
449
+ path.pop();
450
+ continue;
451
+ }
452
+ } else if (result !== undefined) {
453
+ edits.push([key, result]);
454
+ if (!isLeaving) {
455
+ if (nodePredicate(result)) {
456
+ node = result;
457
+ } else {
458
+ path.pop();
459
+ continue;
460
+ }
461
+ }
462
+ }
463
+ }
464
+ }
465
+ if (result === undefined && isEdited) {
466
+ edits.push([key, node]);
467
+ }
468
+ if (!isLeaving) {
469
+ stack = {
470
+ inArray,
471
+ index,
472
+ keys,
473
+ edits,
474
+ prev: stack
475
+ };
476
+ inArray = Array.isArray(node);
477
+ // @ts-ignore
478
+ keys = inArray ? node : visitorKeys[nodeTypeGetter(node)] || [];
479
+ index = -1;
480
+ edits = [];
481
+ if (parent) {
482
+ ancestors.push(parent);
483
+ }
484
+ parent = node;
485
+ }
486
+ } while (stack !== undefined);
487
+ if (edits.length !== 0) {
488
+ [, newRoot] = edits[edits.length - 1];
489
+ }
490
+ return newRoot;
491
+ };
492
+
493
+ /* eslint-enable */
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
4
+ exports.__esModule = true;
5
+ exports.default = void 0;
6
+ var _stampit = _interopRequireDefault(require("stampit"));
7
+ var _Node = _interopRequireDefault(require("../../Node.cjs"));
8
+ const YamlAlias = (0, _stampit.default)(_Node.default, {
9
+ statics: {
10
+ type: 'alias'
11
+ },
12
+ props: {
13
+ content: null
14
+ },
15
+ init({
16
+ content = null
17
+ } = {}) {
18
+ this.content = content;
19
+ }
20
+ });
21
+ var _default = YamlAlias;
22
+ exports.default = _default;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
4
+ exports.__esModule = true;
5
+ exports.default = void 0;
6
+ var _stampit = _interopRequireDefault(require("stampit"));
7
+ var _Node = _interopRequireDefault(require("../../Node.cjs"));
8
+ const YamlAnchor = (0, _stampit.default)(_Node.default, {
9
+ statics: {
10
+ type: 'anchor'
11
+ },
12
+ props: {
13
+ name: null
14
+ },
15
+ init({
16
+ name = null
17
+ } = {}) {
18
+ this.name = name;
19
+ }
20
+ });
21
+ var _default = YamlAnchor;
22
+ exports.default = _default;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
4
+ exports.__esModule = true;
5
+ exports.default = void 0;
6
+ var _stampit = _interopRequireDefault(require("stampit"));
7
+ var _YamlNode = _interopRequireDefault(require("./YamlNode.cjs"));
8
+ const YamlCollection = (0, _stampit.default)(_YamlNode.default, {});
9
+ var _default = YamlCollection;
10
+ exports.default = _default;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
4
+ exports.__esModule = true;
5
+ exports.default = void 0;
6
+ var _stampit = _interopRequireDefault(require("stampit"));
7
+ var _Node = _interopRequireDefault(require("../../Node.cjs"));
8
+ const YamlComment = (0, _stampit.default)(_Node.default, {
9
+ statics: {
10
+ type: 'comment'
11
+ },
12
+ props: {
13
+ content: null
14
+ },
15
+ init({
16
+ content = null
17
+ } = {}) {
18
+ this.content = content;
19
+ }
20
+ });
21
+ var _default = YamlComment;
22
+ exports.default = _default;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
4
+ exports.__esModule = true;
5
+ exports.default = void 0;
6
+ var _stampit = _interopRequireDefault(require("stampit"));
7
+ var _ramda = require("ramda");
8
+ var _Node = _interopRequireDefault(require("../../Node.cjs"));
9
+ const YamlDirective = (0, _stampit.default)(_Node.default, {
10
+ statics: {
11
+ type: 'directive'
12
+ },
13
+ props: {
14
+ name: null,
15
+ parameters: null
16
+ },
17
+ init({
18
+ name = null,
19
+ parameters = {}
20
+ } = {}) {
21
+ this.name = name;
22
+ this.parameters = (0, _ramda.mergeRight)({
23
+ version: null,
24
+ handle: null,
25
+ prefix: null
26
+ }, parameters);
27
+ }
28
+ });
29
+ var _default = YamlDirective;
30
+ exports.default = _default;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
4
+ exports.__esModule = true;
5
+ exports.default = void 0;
6
+ var _stampit = _interopRequireDefault(require("stampit"));
7
+ var _Node = _interopRequireDefault(require("../../Node.cjs"));
8
+ const YamlDocument = (0, _stampit.default)(_Node.default, {
9
+ statics: {
10
+ type: 'document'
11
+ }
12
+ });
13
+ var _default = YamlDocument;
14
+ exports.default = _default;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
4
+ exports.__esModule = true;
5
+ exports.default = void 0;
6
+ var _stampit = _interopRequireDefault(require("stampit"));
7
+ var _Node = _interopRequireDefault(require("../../Node.cjs"));
8
+ var _YamlStyle = _interopRequireDefault(require("./YamlStyle.cjs"));
9
+ var _predicates = require("./predicates.cjs");
10
+ const YamlKeyValuePair = (0, _stampit.default)(_Node.default, _YamlStyle.default, {
11
+ statics: {
12
+ type: 'keyValuePair'
13
+ },
14
+ propertyDescriptors: {
15
+ key: {
16
+ get() {
17
+ // @ts-ignore
18
+ return this.children.filter(node => (0, _predicates.isScalar)(node) || (0, _predicates.isMapping)(node) || (0, _predicates.isSequence)(node))[0];
19
+ },
20
+ enumerable: true
21
+ },
22
+ value: {
23
+ get() {
24
+ // @ts-ignore
25
+ const {
26
+ key,
27
+ children
28
+ } = this;
29
+ const excludeKeyPredicate = node => node !== key;
30
+ const valuePredicate = node => (0, _predicates.isScalar)(node) || (0, _predicates.isMapping)(node) || (0, _predicates.isSequence)(node) || (0, _predicates.isAlias)(node);
31
+
32
+ // @ts-ignore
33
+ return children.filter(node => excludeKeyPredicate(node) && valuePredicate(node))[0];
34
+ },
35
+ enumerable: true
36
+ }
37
+ }
38
+ });
39
+ var _default = YamlKeyValuePair;
40
+ exports.default = _default;