1 | import type { Document } from './doc/Document.js';
|
2 | import type { Alias } from './nodes/Alias.js';
|
3 | import { Node } from './nodes/Node.js';
|
4 | import type { Pair } from './nodes/Pair.js';
|
5 | import type { Scalar } from './nodes/Scalar.js';
|
6 | import type { YAMLMap } from './nodes/YAMLMap.js';
|
7 | import type { YAMLSeq } from './nodes/YAMLSeq.js';
|
8 | export type visitorFn<T> = (key: number | 'key' | 'value' | null, node: T, path: readonly (Document | Node | Pair)[]) => void | symbol | number | Node | Pair;
|
9 | export type visitor = visitorFn<unknown> | {
|
10 | Alias?: visitorFn<Alias>;
|
11 | Collection?: visitorFn<YAMLMap | YAMLSeq>;
|
12 | Map?: visitorFn<YAMLMap>;
|
13 | Node?: visitorFn<Alias | Scalar | YAMLMap | YAMLSeq>;
|
14 | Pair?: visitorFn<Pair>;
|
15 | Scalar?: visitorFn<Scalar>;
|
16 | Seq?: visitorFn<YAMLSeq>;
|
17 | Value?: visitorFn<Scalar | YAMLMap | YAMLSeq>;
|
18 | };
|
19 | export type asyncVisitorFn<T> = (key: number | 'key' | 'value' | null, node: T, path: readonly (Document | Node | Pair)[]) => void | symbol | number | Node | Pair | Promise<void | symbol | number | Node | Pair>;
|
20 | export type asyncVisitor = asyncVisitorFn<unknown> | {
|
21 | Alias?: asyncVisitorFn<Alias>;
|
22 | Collection?: asyncVisitorFn<YAMLMap | YAMLSeq>;
|
23 | Map?: asyncVisitorFn<YAMLMap>;
|
24 | Node?: asyncVisitorFn<Alias | Scalar | YAMLMap | YAMLSeq>;
|
25 | Pair?: asyncVisitorFn<Pair>;
|
26 | Scalar?: asyncVisitorFn<Scalar>;
|
27 | Seq?: asyncVisitorFn<YAMLSeq>;
|
28 | Value?: asyncVisitorFn<Scalar | YAMLMap | YAMLSeq>;
|
29 | };
|
30 | /**
|
31 | * Apply a visitor to an AST node or document.
|
32 | *
|
33 | * Walks through the tree (depth-first) starting from `node`, calling a
|
34 | * `visitor` function with three arguments:
|
35 | * - `key`: For sequence values and map `Pair`, the node's index in the
|
36 | * collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.
|
37 | * `null` for the root node.
|
38 | * - `node`: The current node.
|
39 | * - `path`: The ancestry of the current node.
|
40 | *
|
41 | * The return value of the visitor may be used to control the traversal:
|
42 | * - `undefined` (default): Do nothing and continue
|
43 | * - `visit.SKIP`: Do not visit the children of this node, continue with next
|
44 | * sibling
|
45 | * - `visit.BREAK`: Terminate traversal completely
|
46 | * - `visit.REMOVE`: Remove the current node, then continue with the next one
|
47 | * - `Node`: Replace the current node, then continue by visiting it
|
48 | * - `number`: While iterating the items of a sequence or map, set the index
|
49 | * of the next step. This is useful especially if the index of the current
|
50 | * node has changed.
|
51 | *
|
52 | * If `visitor` is a single function, it will be called with all values
|
53 | * encountered in the tree, including e.g. `null` values. Alternatively,
|
54 | * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,
|
55 | * `Alias` and `Scalar` node. To define the same visitor function for more than
|
56 | * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)
|
57 | * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most
|
58 | * specific defined one will be used for each node.
|
59 | */
|
60 | export declare function visit(node: Node | Document | null, visitor: visitor): void;
|
61 | export declare namespace visit {
|
62 | var BREAK: symbol;
|
63 | var SKIP: symbol;
|
64 | var REMOVE: symbol;
|
65 | }
|
66 | /**
|
67 | * Apply an async visitor to an AST node or document.
|
68 | *
|
69 | * Walks through the tree (depth-first) starting from `node`, calling a
|
70 | * `visitor` function with three arguments:
|
71 | * - `key`: For sequence values and map `Pair`, the node's index in the
|
72 | * collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.
|
73 | * `null` for the root node.
|
74 | * - `node`: The current node.
|
75 | * - `path`: The ancestry of the current node.
|
76 | *
|
77 | * The return value of the visitor may be used to control the traversal:
|
78 | * - `Promise`: Must resolve to one of the following values
|
79 | * - `undefined` (default): Do nothing and continue
|
80 | * - `visit.SKIP`: Do not visit the children of this node, continue with next
|
81 | * sibling
|
82 | * - `visit.BREAK`: Terminate traversal completely
|
83 | * - `visit.REMOVE`: Remove the current node, then continue with the next one
|
84 | * - `Node`: Replace the current node, then continue by visiting it
|
85 | * - `number`: While iterating the items of a sequence or map, set the index
|
86 | * of the next step. This is useful especially if the index of the current
|
87 | * node has changed.
|
88 | *
|
89 | * If `visitor` is a single function, it will be called with all values
|
90 | * encountered in the tree, including e.g. `null` values. Alternatively,
|
91 | * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,
|
92 | * `Alias` and `Scalar` node. To define the same visitor function for more than
|
93 | * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)
|
94 | * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most
|
95 | * specific defined one will be used for each node.
|
96 | */
|
97 | export declare function visitAsync(node: Node | Document | null, visitor: asyncVisitor): Promise<void>;
|
98 | export declare namespace visitAsync {
|
99 | var BREAK: symbol;
|
100 | var SKIP: symbol;
|
101 | var REMOVE: symbol;
|
102 | }
|