| 123456789101112131415161718192021222324252627282930313233343536373839 |
- import { numberTypeNode, publicKeyTypeNode, tupleTypeNode } from '@codama/nodes';
- import { expect, test } from 'vitest';
- import { deleteNodesVisitor, visit } from '../src';
- test('it can delete nodes using selectors', () => {
- // Given the following tree.
- const node = tupleTypeNode([numberTypeNode('u32'), tupleTypeNode([numberTypeNode('u32'), publicKeyTypeNode()])]);
- // And a visitor that deletes all number nodes.
- const visitor = deleteNodesVisitor(['[numberTypeNode]']);
- // When we visit the tree using that visitor.
- const result = visit(node, visitor);
- // Then we expect the number nodes to have been deleted.
- expect(result).toEqual(tupleTypeNode([tupleTypeNode([publicKeyTypeNode()])]));
- });
- test('it can create partial visitors', () => {
- // Given the following tree.
- const node = tupleTypeNode([numberTypeNode('u32'), tupleTypeNode([numberTypeNode('u32'), publicKeyTypeNode()])]);
- // And a visitor that deletes all number nodes and public key nodes
- // but does not support public key nodes.
- const visitor = deleteNodesVisitor(['[numberTypeNode]', '[publicKeyTypeNode]'], {
- keys: ['tupleTypeNode', 'numberTypeNode'],
- });
- // When we visit the tree using that visitor.
- const result = visit(node, visitor);
- // Then only the number nodes have been deleted.
- expect(result).toEqual(tupleTypeNode([tupleTypeNode([publicKeyTypeNode()])]));
- // And the public key node cannot be visited.
- // @ts-expect-error PublicKeyTypeNode is not supported.
- expect(() => visit(publicKeyTypeNode(), visitor)).toThrow();
- });
|