[d24f17c] | 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 | }
|
---|