{"version":3,"sources":["../src/NodeStack.ts","../src/LinkableDictionary.ts","../src/NodeSelector.ts","../src/visitor.ts","../src/staticVisitor.ts","../src/identityVisitor.ts","../src/interceptVisitor.ts","../src/pipe.ts","../src/recordNodeStackVisitor.ts","../src/bottomUpTransformerVisitor.ts","../src/mapVisitor.ts","../src/consoleLogVisitor.ts","../src/topDownTransformerVisitor.ts","../src/deleteNodesVisitor.ts","../src/extendVisitor.ts","../src/mergeVisitor.ts","../src/getByteSizeVisitor.ts","../src/getDebugStringVisitor.ts","../src/singleNodeVisitor.ts","../src/getResolvedInstructionInputsVisitor.ts","../src/nonNullableIdentityVisitor.ts","../src/removeDocsVisitor.ts","../src/getUniqueHashStringVisitor.ts","../src/interceptFirstVisitVisitor.ts","../src/voidVisitor.ts","../src/recordLinkablesVisitor.ts","../src/tapVisitor.ts"],"names":["isNode","programNode","instructionNode","nodeSelectors","lastNodeSelector","KinobiError","REGISTERED_NODE_KINDS","visit","stack","VALUE_NODES"],"mappings":"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","file":"index.node.mjs","sourcesContent":["import { GetNodeFromKind, InstructionNode, isNode, Node, NodeKind, ProgramNode } from '@kinobi-so/nodes';\n\nexport class NodeStack {\n    private readonly stack: Node[];\n\n    constructor(stack: Node[] = []) {\n        this.stack = [...stack];\n    }\n\n    public push(node: Node): void {\n        this.stack.push(node);\n    }\n\n    public pop(): Node | undefined {\n        return this.stack.pop();\n    }\n\n    public peek(): Node | undefined {\n        return this.isEmpty() ? undefined : this.stack[this.stack.length - 1];\n    }\n\n    public find<TKind extends NodeKind>(kind: TKind | TKind[]): GetNodeFromKind<TKind> | undefined {\n        for (let index = this.stack.length - 1; index >= 0; index--) {\n            const node = this.stack[index];\n            if (isNode(node, kind)) return node;\n        }\n        return undefined;\n    }\n\n    public getProgram(): ProgramNode | undefined {\n        return this.find('programNode');\n    }\n\n    public getInstruction(): InstructionNode | undefined {\n        return this.find('instructionNode');\n    }\n\n    public all(): readonly Node[] {\n        return [...this.stack];\n    }\n\n    public isEmpty(): boolean {\n        return this.stack.length === 0;\n    }\n\n    public clone(): NodeStack {\n        return new NodeStack(this.stack);\n    }\n\n    public toString(): string {\n        return this.toStringArray().join(' > ');\n    }\n\n    public toStringArray(): string[] {\n        return this.stack.map((node): string => {\n            return 'name' in node ? `[${node.kind}]${node.name}` : `[${node.kind}]`;\n        });\n    }\n}\n","import { KINOBI_ERROR__LINKED_NODE_NOT_FOUND, KinobiError } from '@kinobi-so/errors';\nimport {\n    AccountLinkNode,\n    AccountNode,\n    CamelCaseString,\n    DefinedTypeLinkNode,\n    DefinedTypeNode,\n    InstructionAccountLinkNode,\n    InstructionAccountNode,\n    InstructionArgumentLinkNode,\n    InstructionArgumentNode,\n    InstructionLinkNode,\n    InstructionNode,\n    isNode,\n    LinkNode,\n    PdaLinkNode,\n    PdaNode,\n    ProgramLinkNode,\n    ProgramNode,\n} from '@kinobi-so/nodes';\n\nimport { NodeStack } from './NodeStack';\n\nexport type LinkableNode =\n    | AccountNode\n    | DefinedTypeNode\n    | InstructionAccountNode\n    | InstructionArgumentNode\n    | InstructionNode\n    | PdaNode\n    | ProgramNode;\n\nexport const LINKABLE_NODES: LinkableNode['kind'][] = [\n    'accountNode',\n    'definedTypeNode',\n    'instructionAccountNode',\n    'instructionArgumentNode',\n    'instructionNode',\n    'pdaNode',\n    'programNode',\n];\n\ntype ProgramDictionary = {\n    accounts: Map<string, AccountNode>;\n    definedTypes: Map<string, DefinedTypeNode>;\n    instructions: Map<string, InstructionDictionary>;\n    pdas: Map<string, PdaNode>;\n    program: ProgramNode;\n};\n\ntype InstructionDictionary = {\n    accounts: Map<string, InstructionAccountNode>;\n    arguments: Map<string, InstructionArgumentNode>;\n    instruction: InstructionNode;\n};\n\nexport class LinkableDictionary {\n    readonly programs: Map<string, ProgramDictionary> = new Map();\n\n    readonly stack: NodeStack = new NodeStack();\n\n    record(node: LinkableNode): this {\n        const programDictionary = this.getOrCreateProgramDictionary(node);\n        if (!programDictionary) return this; // Do not record nodes that are outside of a program.\n        const instructionDictionary = this.getOrCreateInstructionDictionary(programDictionary, node);\n\n        if (isNode(node, 'accountNode')) {\n            programDictionary.accounts.set(node.name, node);\n        } else if (isNode(node, 'definedTypeNode')) {\n            programDictionary.definedTypes.set(node.name, node);\n        } else if (isNode(node, 'pdaNode')) {\n            programDictionary.pdas.set(node.name, node);\n        } else if (instructionDictionary && isNode(node, 'instructionAccountNode')) {\n            instructionDictionary.accounts.set(node.name, node);\n        } else if (instructionDictionary && isNode(node, 'instructionArgumentNode')) {\n            instructionDictionary.arguments.set(node.name, node);\n        }\n\n        return this;\n    }\n\n    getOrThrow(linkNode: AccountLinkNode): AccountNode;\n    getOrThrow(linkNode: DefinedTypeLinkNode): DefinedTypeNode;\n    getOrThrow(linkNode: InstructionAccountLinkNode): InstructionAccountNode;\n    getOrThrow(linkNode: InstructionArgumentLinkNode): InstructionArgumentNode;\n    getOrThrow(linkNode: InstructionLinkNode): InstructionNode;\n    getOrThrow(linkNode: PdaLinkNode): PdaNode;\n    getOrThrow(linkNode: ProgramLinkNode): ProgramNode;\n    getOrThrow(linkNode: LinkNode): LinkableNode {\n        const node = this.get(linkNode as ProgramLinkNode) as LinkableNode | undefined;\n\n        if (!node) {\n            throw new KinobiError(KINOBI_ERROR__LINKED_NODE_NOT_FOUND, {\n                kind: linkNode.kind,\n                linkNode,\n                name: linkNode.name,\n                stack: this.stack.all(),\n            });\n        }\n\n        return node;\n    }\n\n    get(linkNode: AccountLinkNode): AccountNode | undefined;\n    get(linkNode: DefinedTypeLinkNode): DefinedTypeNode | undefined;\n    get(linkNode: InstructionAccountLinkNode): InstructionAccountNode | undefined;\n    get(linkNode: InstructionArgumentLinkNode): InstructionArgumentNode | undefined;\n    get(linkNode: InstructionLinkNode): InstructionNode | undefined;\n    get(linkNode: PdaLinkNode): PdaNode | undefined;\n    get(linkNode: ProgramLinkNode): ProgramNode | undefined;\n    get(linkNode: LinkNode): LinkableNode | undefined {\n        const programDictionary = this.getProgramDictionary(linkNode);\n        if (!programDictionary) return undefined;\n        const instructionDictionary = this.getInstructionDictionary(programDictionary, linkNode);\n\n        if (isNode(linkNode, 'accountLinkNode')) {\n            return programDictionary.accounts.get(linkNode.name);\n        } else if (isNode(linkNode, 'definedTypeLinkNode')) {\n            return programDictionary.definedTypes.get(linkNode.name);\n        } else if (isNode(linkNode, 'instructionAccountLinkNode')) {\n            return instructionDictionary?.accounts.get(linkNode.name);\n        } else if (isNode(linkNode, 'instructionArgumentLinkNode')) {\n            return instructionDictionary?.arguments.get(linkNode.name);\n        } else if (isNode(linkNode, 'instructionLinkNode')) {\n            return instructionDictionary?.instruction;\n        } else if (isNode(linkNode, 'pdaLinkNode')) {\n            return programDictionary.pdas.get(linkNode.name);\n        } else if (isNode(linkNode, 'programLinkNode')) {\n            return programDictionary.program;\n        }\n\n        return undefined;\n    }\n\n    has(linkNode: LinkNode): boolean {\n        const programDictionary = this.getProgramDictionary(linkNode);\n        if (!programDictionary) return false;\n        const instructionDictionary = this.getInstructionDictionary(programDictionary, linkNode);\n\n        if (isNode(linkNode, 'accountLinkNode')) {\n            return programDictionary.accounts.has(linkNode.name);\n        } else if (isNode(linkNode, 'definedTypeLinkNode')) {\n            return programDictionary.definedTypes.has(linkNode.name);\n        } else if (isNode(linkNode, 'instructionAccountLinkNode')) {\n            return !!instructionDictionary && instructionDictionary.accounts.has(linkNode.name);\n        } else if (isNode(linkNode, 'instructionArgumentLinkNode')) {\n            return !!instructionDictionary && instructionDictionary.arguments.has(linkNode.name);\n        } else if (isNode(linkNode, 'instructionLinkNode')) {\n            return programDictionary.instructions.has(linkNode.name);\n        } else if (isNode(linkNode, 'pdaLinkNode')) {\n            return programDictionary.pdas.has(linkNode.name);\n        } else if (isNode(linkNode, 'programLinkNode')) {\n            return true;\n        }\n\n        return false;\n    }\n\n    private getOrCreateProgramDictionary(node: LinkableNode): ProgramDictionary | undefined {\n        const programNode = isNode(node, 'programNode') ? node : this.stack.getProgram();\n        if (!programNode) return undefined;\n\n        let programDictionary = this.programs.get(programNode.name);\n        if (!programDictionary) {\n            programDictionary = {\n                accounts: new Map(),\n                definedTypes: new Map(),\n                instructions: new Map(),\n                pdas: new Map(),\n                program: programNode,\n            };\n            this.programs.set(programNode.name, programDictionary);\n        }\n\n        return programDictionary;\n    }\n\n    private getOrCreateInstructionDictionary(\n        programDictionary: ProgramDictionary,\n        node: LinkableNode,\n    ): InstructionDictionary | undefined {\n        const instructionNode = isNode(node, 'instructionNode') ? node : this.stack.getInstruction();\n        if (!instructionNode) return undefined;\n\n        let instructionDictionary = programDictionary.instructions.get(instructionNode.name);\n        if (!instructionDictionary) {\n            instructionDictionary = {\n                accounts: new Map(),\n                arguments: new Map(),\n                instruction: instructionNode,\n            };\n            programDictionary.instructions.set(instructionNode.name, instructionDictionary);\n        }\n\n        return instructionDictionary;\n    }\n\n    private getProgramDictionary(linkNode: LinkNode): ProgramDictionary | undefined {\n        let programName: CamelCaseString | undefined = undefined;\n        if (isNode(linkNode, 'programLinkNode')) {\n            programName = linkNode.name;\n        } else if ('program' in linkNode) {\n            programName = linkNode.program?.name;\n        } else if ('instruction' in linkNode) {\n            programName = linkNode.instruction?.program?.name;\n        }\n        programName = programName ?? this.stack.getProgram()?.name;\n\n        return programName ? this.programs.get(programName) : undefined;\n    }\n\n    private getInstructionDictionary(\n        programDictionary: ProgramDictionary,\n        linkNode: LinkNode,\n    ): InstructionDictionary | undefined {\n        let instructionName: CamelCaseString | undefined = undefined;\n        if (isNode(linkNode, 'instructionLinkNode')) {\n            instructionName = linkNode.name;\n        } else if ('instruction' in linkNode) {\n            instructionName = linkNode.instruction?.name;\n        }\n        instructionName = instructionName ?? this.stack.getInstruction()?.name;\n\n        return instructionName ? programDictionary.instructions.get(instructionName) : undefined;\n    }\n}\n","import { camelCase, CamelCaseString, Node } from '@kinobi-so/nodes';\n\nimport type { NodeStack } from './NodeStack';\n\nexport type NodeSelector = NodeSelectorFunction | NodeSelectorPath;\n\n/**\n * A string that can be used to select a node in a Kinobi tree.\n * - `*` matches any node.\n * - `someText` matches the name of a node, if any.\n * - `[someNode]` matches a node of the given kind.\n * - `[someNode|someOtherNode]` matches a node with any of the given kind.\n * - `[someNode]someText` matches both the kind and the name of a node.\n * - `a.b.c` matches a node `c` such that its parent stack contains `a` and `b` in order (but not necessarily subsequent).\n */\nexport type NodeSelectorPath = string;\n\nexport type NodeSelectorFunction = (node: Node, stack: NodeStack) => boolean;\n\nexport const getNodeSelectorFunction = (selector: NodeSelector): NodeSelectorFunction => {\n    if (typeof selector === 'function') return selector;\n\n    const checkNode = (node: Node, nodeSelector: string): boolean => {\n        if (nodeSelector === '*') return true;\n        const matches = nodeSelector.match(/^(?:\\[([^\\]]+)\\])?(.*)?$/);\n        if (!matches) return false;\n        const [, kinds, name] = matches;\n\n        // Check kinds.\n        const kindArray = kinds ? kinds.split('|').map(camelCase) : [];\n        if (kindArray.length > 0 && !kindArray.includes(node.kind as CamelCaseString)) {\n            return false;\n        }\n\n        // Check names.\n        if (name && (!('name' in node) || camelCase(name) !== node.name)) {\n            return false;\n        }\n\n        return true;\n    };\n\n    const checkStack = (nodeStack: Node[], nodeSelectors: string[]): boolean => {\n        if (nodeSelectors.length === 0) return true;\n        if (nodeStack.length === 0) return false;\n        const lastNode = nodeStack.pop() as Node;\n        const lastNodeSelector = nodeSelectors.pop() as string;\n        return checkNode(lastNode, lastNodeSelector)\n            ? checkStack(nodeStack, nodeSelectors)\n            : checkStack(nodeStack, [...nodeSelectors, lastNodeSelector]);\n    };\n\n    const nodeSelectors = selector.split('.');\n    const lastNodeSelector = nodeSelectors.pop() as string;\n\n    return (node, stack) => checkNode(node, lastNodeSelector) && checkStack(stack.all() as Node[], [...nodeSelectors]);\n};\n\nexport const getConjunctiveNodeSelectorFunction = (selector: NodeSelector | NodeSelector[]): NodeSelectorFunction => {\n    const selectors = Array.isArray(selector) ? selector : [selector];\n    const selectorFunctions = selectors.map(getNodeSelectorFunction);\n    return (node, stack) => selectorFunctions.every(fn => fn(node, stack));\n};\n","import { KINOBI_ERROR__UNRECOGNIZED_NODE_KIND, KinobiError } from '@kinobi-so/errors';\nimport { type GetNodeFromKind, type Node, type NodeKind, pascalCase, REGISTERED_NODE_KINDS } from '@kinobi-so/nodes';\n\nexport type Visitor<TReturn, TNodeKind extends NodeKind = NodeKind> = {\n    [K in TNodeKind as GetVisitorFunctionName<K>]: (node: GetNodeFromKind<K>) => TReturn;\n};\n\nexport type GetVisitorFunctionName<T extends Node['kind']> = T extends `${infer TWithoutNode}Node`\n    ? `visit${Capitalize<TWithoutNode>}`\n    : never;\n\nexport function visit<TReturn, TNode extends Node>(node: TNode, visitor: Visitor<TReturn, TNode['kind']>): TReturn {\n    const key = getVisitFunctionName(node.kind) as GetVisitorFunctionName<TNode['kind']>;\n    return (visitor[key] as (typeof visitor)[typeof key] & ((node: TNode) => TReturn))(node);\n}\n\nexport function visitOrElse<TReturn, TNode extends Node, TNodeKind extends NodeKind>(\n    node: TNode,\n    visitor: Visitor<TReturn, TNodeKind>,\n    fallback: (node: TNode) => TReturn,\n): TReturn {\n    const key = getVisitFunctionName<TNode['kind']>(node.kind);\n    return (key in visitor ? (visitor[key] as (node: TNode) => TReturn) : fallback)(node);\n}\n\nexport function getVisitFunctionName<TNodeKind extends NodeKind>(nodeKind: TNodeKind) {\n    if (!REGISTERED_NODE_KINDS.includes(nodeKind)) {\n        throw new KinobiError(KINOBI_ERROR__UNRECOGNIZED_NODE_KIND, { kind: nodeKind });\n    }\n\n    return `visit${pascalCase(nodeKind.slice(0, -4))}` as GetVisitorFunctionName<TNodeKind>;\n}\n","import { Node, NodeKind, REGISTERED_NODE_KINDS } from '@kinobi-so/nodes';\n\nimport { getVisitFunctionName, Visitor } from './visitor';\n\nexport function staticVisitor<TReturn, TNodeKind extends NodeKind = NodeKind>(\n    fn: (node: Node) => TReturn,\n    nodeKeys: TNodeKind[] = REGISTERED_NODE_KINDS as TNodeKind[],\n): Visitor<TReturn, TNodeKind> {\n    const visitor = {} as Visitor<TReturn>;\n    nodeKeys.forEach(key => {\n        visitor[getVisitFunctionName(key)] = fn.bind(visitor);\n    });\n    return visitor;\n}\n","import {\n    accountLinkNode,\n    accountNode,\n    amountTypeNode,\n    arrayTypeNode,\n    arrayValueNode,\n    assertIsNestedTypeNode,\n    assertIsNode,\n    booleanTypeNode,\n    conditionalValueNode,\n    constantDiscriminatorNode,\n    constantPdaSeedNode,\n    constantValueNode,\n    COUNT_NODES,\n    dateTimeTypeNode,\n    definedTypeLinkNode,\n    definedTypeNode,\n    DISCRIMINATOR_NODES,\n    ENUM_VARIANT_TYPE_NODES,\n    enumEmptyVariantTypeNode,\n    enumStructVariantTypeNode,\n    enumTupleVariantTypeNode,\n    enumTypeNode,\n    enumValueNode,\n    fixedSizeTypeNode,\n    hiddenPrefixTypeNode,\n    hiddenSuffixTypeNode,\n    INSTRUCTION_INPUT_VALUE_NODES,\n    instructionAccountLinkNode,\n    instructionAccountNode,\n    instructionArgumentLinkNode,\n    instructionArgumentNode,\n    instructionByteDeltaNode,\n    instructionLinkNode,\n    instructionNode,\n    instructionRemainingAccountsNode,\n    mapEntryValueNode,\n    mapTypeNode,\n    mapValueNode,\n    Node,\n    NodeKind,\n    optionTypeNode,\n    PDA_SEED_NODES,\n    pdaLinkNode,\n    pdaNode,\n    pdaSeedValueNode,\n    pdaValueNode,\n    postOffsetTypeNode,\n    prefixedCountNode,\n    preOffsetTypeNode,\n    programNode,\n    REGISTERED_NODE_KINDS,\n    remainderOptionTypeNode,\n    removeNullAndAssertIsNodeFilter,\n    resolverValueNode,\n    rootNode,\n    sentinelTypeNode,\n    setTypeNode,\n    setValueNode,\n    sizePrefixTypeNode,\n    solAmountTypeNode,\n    someValueNode,\n    structFieldTypeNode,\n    structFieldValueNode,\n    structTypeNode,\n    structValueNode,\n    tupleTypeNode,\n    tupleValueNode,\n    TYPE_NODES,\n    VALUE_NODES,\n    variablePdaSeedNode,\n    zeroableOptionTypeNode,\n} from '@kinobi-so/nodes';\n\nimport { staticVisitor } from './staticVisitor';\nimport { visit as baseVisit, Visitor } from './visitor';\n\nexport function identityVisitor<TNodeKind extends NodeKind = NodeKind>(\n    nodeKeys: TNodeKind[] = REGISTERED_NODE_KINDS as TNodeKind[],\n): Visitor<Node | null, TNodeKind> {\n    const castedNodeKeys: NodeKind[] = nodeKeys;\n    const visitor = staticVisitor(node => Object.freeze({ ...node }), castedNodeKeys) as Visitor<Node | null>;\n    const visit =\n        (v: Visitor<Node | null>) =>\n        (node: Node): Node | null =>\n            castedNodeKeys.includes(node.kind) ? baseVisit(node, v) : Object.freeze({ ...node });\n\n    if (castedNodeKeys.includes('rootNode')) {\n        visitor.visitRoot = function visitRoot(node) {\n            const program = visit(this)(node.program);\n            if (program === null) return null;\n            assertIsNode(program, 'programNode');\n            return rootNode(\n                program,\n                node.additionalPrograms.map(visit(this)).filter(removeNullAndAssertIsNodeFilter('programNode')),\n            );\n        };\n    }\n\n    if (castedNodeKeys.includes('programNode')) {\n        visitor.visitProgram = function visitProgram(node) {\n            return programNode({\n                ...node,\n                accounts: node.accounts.map(visit(this)).filter(removeNullAndAssertIsNodeFilter('accountNode')),\n                definedTypes: node.definedTypes\n                    .map(visit(this))\n                    .filter(removeNullAndAssertIsNodeFilter('definedTypeNode')),\n                errors: node.errors.map(visit(this)).filter(removeNullAndAssertIsNodeFilter('errorNode')),\n                instructions: node.instructions\n                    .map(visit(this))\n                    .filter(removeNullAndAssertIsNodeFilter('instructionNode')),\n                pdas: node.pdas.map(visit(this)).filter(removeNullAndAssertIsNodeFilter('pdaNode')),\n            });\n        };\n    }\n\n    if (castedNodeKeys.includes('pdaNode')) {\n        visitor.visitPda = function visitPda(node) {\n            return pdaNode({\n                ...node,\n                seeds: node.seeds.map(visit(this)).filter(removeNullAndAssertIsNodeFilter(PDA_SEED_NODES)),\n            });\n        };\n    }\n\n    if (castedNodeKeys.includes('accountNode')) {\n        visitor.visitAccount = function visitAccount(node) {\n            const data = visit(this)(node.data);\n            if (data === null) return null;\n            assertIsNode(data, 'structTypeNode');\n            const pda = node.pda ? (visit(this)(node.pda) ?? undefined) : undefined;\n            if (pda) assertIsNode(pda, 'pdaLinkNode');\n            return accountNode({ ...node, data, pda });\n        };\n    }\n\n    if (castedNodeKeys.includes('instructionNode')) {\n        visitor.visitInstruction = function visitInstruction(node) {\n            return instructionNode({\n                ...node,\n                accounts: node.accounts\n                    .map(visit(this))\n                    .filter(removeNullAndAssertIsNodeFilter('instructionAccountNode')),\n                arguments: node.arguments\n                    .map(visit(this))\n                    .filter(removeNullAndAssertIsNodeFilter('instructionArgumentNode')),\n                byteDeltas: node.byteDeltas\n                    ? node.byteDeltas\n                          .map(visit(this))\n                          .filter(removeNullAndAssertIsNodeFilter('instructionByteDeltaNode'))\n                    : undefined,\n                discriminators: node.discriminators\n                    ? node.discriminators.map(visit(this)).filter(removeNullAndAssertIsNodeFilter(DISCRIMINATOR_NODES))\n                    : undefined,\n                extraArguments: node.extraArguments\n                    ? node.extraArguments\n                          .map(visit(this))\n                          .filter(removeNullAndAssertIsNodeFilter('instructionArgumentNode'))\n                    : undefined,\n                remainingAccounts: node.remainingAccounts\n                    ? node.remainingAccounts\n                          .map(visit(this))\n                          .filter(removeNullAndAssertIsNodeFilter('instructionRemainingAccountsNode'))\n                    : undefined,\n                subInstructions: node.subInstructions\n                    ? node.subInstructions.map(visit(this)).filter(removeNullAndAssertIsNodeFilter('instructionNode'))\n                    : undefined,\n            });\n        };\n    }\n\n    if (castedNodeKeys.includes('instructionAccountNode')) {\n        visitor.visitInstructionAccount = function visitInstructionAccount(node) {\n            const defaultValue = node.defaultValue ? (visit(this)(node.defaultValue) ?? undefined) : undefined;\n            if (defaultValue) assertIsNode(defaultValue, INSTRUCTION_INPUT_VALUE_NODES);\n            return instructionAccountNode({ ...node, defaultValue });\n        };\n    }\n\n    if (castedNodeKeys.includes('instructionArgumentNode')) {\n        visitor.visitInstructionArgument = function visitInstructionArgument(node) {\n            const type = visit(this)(node.type);\n            if (type === null) return null;\n            assertIsNode(type, TYPE_NODES);\n            const defaultValue = node.defaultValue ? (visit(this)(node.defaultValue) ?? undefined) : undefined;\n            if (defaultValue) assertIsNode(defaultValue, INSTRUCTION_INPUT_VALUE_NODES);\n            return instructionArgumentNode({ ...node, defaultValue, type });\n        };\n    }\n\n    if (castedNodeKeys.includes('instructionRemainingAccountsNode')) {\n        visitor.visitInstructionRemainingAccounts = function visitInstructionRemainingAccounts(node) {\n            const value = visit(this)(node.value);\n            if (value === null) return null;\n            assertIsNode(value, ['argumentValueNode', 'resolverValueNode']);\n            return instructionRemainingAccountsNode(value, { ...node });\n        };\n    }\n\n    if (castedNodeKeys.includes('instructionByteDeltaNode')) {\n        visitor.visitInstructionByteDelta = function visitInstructionByteDelta(node) {\n            const value = visit(this)(node.value);\n            if (value === null) return null;\n            assertIsNode(value, ['numberValueNode', 'accountLinkNode', 'argumentValueNode', 'resolverValueNode']);\n            return instructionByteDeltaNode(value, { ...node });\n        };\n    }\n\n    if (castedNodeKeys.includes('definedTypeNode')) {\n        visitor.visitDefinedType = function visitDefinedType(node) {\n            const type = visit(this)(node.type);\n            if (type === null) return null;\n            assertIsNode(type, TYPE_NODES);\n            return definedTypeNode({ ...node, type });\n        };\n    }\n\n    if (castedNodeKeys.includes('arrayTypeNode')) {\n        visitor.visitArrayType = function visitArrayType(node) {\n            const size = visit(this)(node.count);\n            if (size === null) return null;\n            assertIsNode(size, COUNT_NODES);\n            const item = visit(this)(node.item);\n            if (item === null) return null;\n            assertIsNode(item, TYPE_NODES);\n            return arrayTypeNode(item, size);\n        };\n    }\n\n    if (castedNodeKeys.includes('enumTypeNode')) {\n        visitor.visitEnumType = function visitEnumType(node) {\n            return enumTypeNode(\n                node.variants.map(visit(this)).filter(removeNullAndAssertIsNodeFilter(ENUM_VARIANT_TYPE_NODES)),\n                { size: node.size },\n            );\n        };\n    }\n\n    if (castedNodeKeys.includes('enumStructVariantTypeNode')) {\n        visitor.visitEnumStructVariantType = function visitEnumStructVariantType(node) {\n            const newStruct = visit(this)(node.struct);\n            if (!newStruct) {\n                return enumEmptyVariantTypeNode(node.name);\n            }\n            assertIsNode(newStruct, 'structTypeNode');\n            if (newStruct.fields.length === 0) {\n                return enumEmptyVariantTypeNode(node.name);\n            }\n            return enumStructVariantTypeNode(node.name, newStruct);\n        };\n    }\n\n    if (castedNodeKeys.includes('enumTupleVariantTypeNode')) {\n        visitor.visitEnumTupleVariantType = function visitEnumTupleVariantType(node) {\n            const newTuple = visit(this)(node.tuple);\n            if (!newTuple) {\n                return enumEmptyVariantTypeNode(node.name);\n            }\n            assertIsNode(newTuple, 'tupleTypeNode');\n            if (newTuple.items.length === 0) {\n                return enumEmptyVariantTypeNode(node.name);\n            }\n            return enumTupleVariantTypeNode(node.name, newTuple);\n        };\n    }\n\n    if (castedNodeKeys.includes('mapTypeNode')) {\n        visitor.visitMapType = function visitMapType(node) {\n            const size = visit(this)(node.count);\n            if (size === null) return null;\n            assertIsNode(size, COUNT_NODES);\n            const key = visit(this)(node.key);\n            if (key === null) return null;\n            assertIsNode(key, TYPE_NODES);\n            const value = visit(this)(node.value);\n            if (value === null) return null;\n            assertIsNode(value, TYPE_NODES);\n            return mapTypeNode(key, value, size);\n        };\n    }\n\n    if (castedNodeKeys.includes('optionTypeNode')) {\n        visitor.visitOptionType = function visitOptionType(node) {\n            const prefix = visit(this)(node.prefix);\n            if (prefix === null) return null;\n            assertIsNestedTypeNode(prefix, 'numberTypeNode');\n            const item = visit(this)(node.item);\n            if (item === null) return null;\n            assertIsNode(item, TYPE_NODES);\n            return optionTypeNode(item, { ...node, prefix });\n        };\n    }\n\n    if (castedNodeKeys.includes('zeroableOptionTypeNode')) {\n        visitor.visitZeroableOptionType = function visitZeroableOptionType(node) {\n            const item = visit(this)(node.item);\n            if (item === null) return null;\n            assertIsNode(item, TYPE_NODES);\n            const zeroValue = node.zeroValue ? (visit(this)(node.zeroValue) ?? undefined) : undefined;\n            if (zeroValue) assertIsNode(zeroValue, 'constantValueNode');\n            return zeroableOptionTypeNode(item, zeroValue);\n        };\n    }\n\n    if (castedNodeKeys.includes('remainderOptionTypeNode')) {\n        visitor.visitRemainderOptionType = function visitRemainderOptionType(node) {\n            const item = visit(this)(node.item);\n            if (item === null) return null;\n            assertIsNode(item, TYPE_NODES);\n            return remainderOptionTypeNode(item);\n        };\n    }\n\n    if (castedNodeKeys.includes('booleanTypeNode')) {\n        visitor.visitBooleanType = function visitBooleanType(node) {\n            const size = visit(this)(node.size);\n            if (size === null) return null;\n            assertIsNestedTypeNode(size, 'numberTypeNode');\n            return booleanTypeNode(size);\n        };\n    }\n\n    if (castedNodeKeys.includes('setTypeNode')) {\n        visitor.visitSetType = function visitSetType(node) {\n            const size = visit(this)(node.count);\n            if (size === null) return null;\n            assertIsNode(size, COUNT_NODES);\n            const item = visit(this)(node.item);\n            if (item === null) return null;\n            assertIsNode(item, TYPE_NODES);\n            return setTypeNode(item, size);\n        };\n    }\n\n    if (castedNodeKeys.includes('structTypeNode')) {\n        visitor.visitStructType = function visitStructType(node) {\n            const fields = node.fields.map(visit(this)).filter(removeNullAndAssertIsNodeFilter('structFieldTypeNode'));\n            return structTypeNode(fields);\n        };\n    }\n\n    if (castedNodeKeys.includes('structFieldTypeNode')) {\n        visitor.visitStructFieldType = function visitStructFieldType(node) {\n            const type = visit(this)(node.type);\n            if (type === null) return null;\n            assertIsNode(type, TYPE_NODES);\n            const defaultValue = node.defaultValue ? (visit(this)(node.defaultValue) ?? undefined) : undefined;\n            if (defaultValue) assertIsNode(defaultValue, VALUE_NODES);\n            return structFieldTypeNode({ ...node, defaultValue, type });\n        };\n    }\n\n    if (castedNodeKeys.includes('tupleTypeNode')) {\n        visitor.visitTupleType = function visitTupleType(node) {\n            const items = node.items.map(visit(this)).filter(removeNullAndAssertIsNodeFilter(TYPE_NODES));\n            return tupleTypeNode(items);\n        };\n    }\n\n    if (castedNodeKeys.includes('amountTypeNode')) {\n        visitor.visitAmountType = function visitAmountType(node) {\n            const number = visit(this)(node.number);\n            if (number === null) return null;\n            assertIsNestedTypeNode(number, 'numberTypeNode');\n            return amountTypeNode(number, node.decimals, node.unit);\n        };\n    }\n\n    if (castedNodeKeys.includes('dateTimeTypeNode')) {\n        visitor.visitDateTimeType = function visitDateTimeType(node) {\n            const number = visit(this)(node.number);\n            if (number === null) return null;\n            assertIsNestedTypeNode(number, 'numberTypeNode');\n            return dateTimeTypeNode(number);\n        };\n    }\n\n    if (castedNodeKeys.includes('solAmountTypeNode')) {\n        visitor.visitSolAmountType = function visitSolAmountType(node) {\n            const number = visit(this)(node.number);\n            if (number === null) return null;\n            assertIsNestedTypeNode(number, 'numberTypeNode');\n            return solAmountTypeNode(number);\n        };\n    }\n\n    if (castedNodeKeys.includes('prefixedCountNode')) {\n        visitor.visitPrefixedCount = function visitPrefixedCount(node) {\n            const prefix = visit(this)(node.prefix);\n            if (prefix === null) return null;\n            assertIsNestedTypeNode(prefix, 'numberTypeNode');\n            return prefixedCountNode(prefix);\n        };\n    }\n\n    if (castedNodeKeys.includes('arrayValueNode')) {\n        visitor.visitArrayValue = function visitArrayValue(node) {\n            return arrayValueNode(node.items.map(visit(this)).filter(removeNullAndAssertIsNodeFilter(VALUE_NODES)));\n        };\n    }\n\n    if (castedNodeKeys.includes('constantValueNode')) {\n        visitor.visitConstantValue = function visitConstantValue(node) {\n            const type = visit(this)(node.type);\n            if (type === null) return null;\n            assertIsNode(type, TYPE_NODES);\n            const value = visit(this)(node.value);\n            if (value === null) return null;\n            assertIsNode(value, VALUE_NODES);\n            return constantValueNode(type, value);\n        };\n    }\n\n    if (castedNodeKeys.includes('enumValueNode')) {\n        visitor.visitEnumValue = function visitEnumValue(node) {\n            const enumLink = visit(this)(node.enum);\n            if (enumLink === null) return null;\n            assertIsNode(enumLink, ['definedTypeLinkNode']);\n            const value = node.value ? (visit(this)(node.value) ?? undefined) : undefined;\n            if (value) assertIsNode(value, ['structValueNode', 'tupleValueNode']);\n            return enumValueNode(enumLink, node.variant, value);\n        };\n    }\n\n    if (castedNodeKeys.includes('mapValueNode')) {\n        visitor.visitMapValue = function visitMapValue(node) {\n            return mapValueNode(\n                node.entries.map(visit(this)).filter(removeNullAndAssertIsNodeFilter('mapEntryValueNode')),\n            );\n        };\n    }\n\n    if (castedNodeKeys.includes('mapEntryValueNode')) {\n        visitor.visitMapEntryValue = function visitMapEntryValue(node) {\n            const key = visit(this)(node.key);\n            if (key === null) return null;\n            assertIsNode(key, VALUE_NODES);\n            const value = visit(this)(node.value);\n            if (value === null) return null;\n            assertIsNode(value, VALUE_NODES);\n            return mapEntryValueNode(key, value);\n        };\n    }\n\n    if (castedNodeKeys.includes('setValueNode')) {\n        visitor.visitSetValue = function visitSetValue(node) {\n            return setValueNode(node.items.map(visit(this)).filter(removeNullAndAssertIsNodeFilter(VALUE_NODES)));\n        };\n    }\n\n    if (castedNodeKeys.includes('someValueNode')) {\n        visitor.visitSomeValue = function visitSomeValue(node) {\n            const value = visit(this)(node.value);\n            if (value === null) return null;\n            assertIsNode(value, VALUE_NODES);\n            return someValueNode(value);\n        };\n    }\n\n    if (castedNodeKeys.includes('structValueNode')) {\n        visitor.visitStructValue = function visitStructValue(node) {\n            return structValueNode(\n                node.fields.map(visit(this)).filter(removeNullAndAssertIsNodeFilter('structFieldValueNode')),\n            );\n        };\n    }\n\n    if (castedNodeKeys.includes('structFieldValueNode')) {\n        visitor.visitStructFieldValue = function visitStructFieldValue(node) {\n            const value = visit(this)(node.value);\n            if (value === null) return null;\n            assertIsNode(value, VALUE_NODES);\n            return structFieldValueNode(node.name, value);\n        };\n    }\n\n    if (castedNodeKeys.includes('tupleValueNode')) {\n        visitor.visitTupleValue = function visitTupleValue(node) {\n            return tupleValueNode(node.items.map(visit(this)).filter(removeNullAndAssertIsNodeFilter(VALUE_NODES)));\n        };\n    }\n\n    if (castedNodeKeys.includes('constantPdaSeedNode')) {\n        visitor.visitConstantPdaSeed = function visitConstantPdaSeed(node) {\n            const type = visit(this)(node.type);\n            if (type === null) return null;\n            assertIsNode(type, TYPE_NODES);\n            const value = visit(this)(node.value);\n            if (value === null) return null;\n            assertIsNode(value, [...VALUE_NODES, 'programIdValueNode']);\n            return constantPdaSeedNode(type, value);\n        };\n    }\n\n    if (castedNodeKeys.includes('variablePdaSeedNode')) {\n        visitor.visitVariablePdaSeed = function visitVariablePdaSeed(node) {\n            const type = visit(this)(node.type);\n            if (type === null) return null;\n            assertIsNode(type, TYPE_NODES);\n            return variablePdaSeedNode(node.name, type, node.docs);\n        };\n    }\n\n    if (castedNodeKeys.includes('resolverValueNode')) {\n        visitor.visitResolverValue = function visitResolverValue(node) {\n            const dependsOn = (node.dependsOn ?? [])\n                .map(visit(this))\n                .filter(removeNullAndAssertIsNodeFilter(['accountValueNode', 'argumentValueNode']));\n            return resolverValueNode(node.name, {\n                ...node,\n                dependsOn: dependsOn.length === 0 ? undefined : dependsOn,\n            });\n        };\n    }\n\n    if (castedNodeKeys.includes('conditionalValueNode')) {\n        visitor.visitConditionalValue = function visitConditionalValue(node) {\n            const condition = visit(this)(node.condition);\n            if (condition === null) return null;\n            assertIsNode(condition, ['resolverValueNode', 'accountValueNode', 'argumentValueNode']);\n            const value = node.value ? (visit(this)(node.value) ?? undefined) : undefined;\n            if (value) assertIsNode(value, VALUE_NODES);\n            const ifTrue = node.ifTrue ? (visit(this)(node.ifTrue) ?? undefined) : undefined;\n            if (ifTrue) assertIsNode(ifTrue, INSTRUCTION_INPUT_VALUE_NODES);\n            const ifFalse = node.ifFalse ? (visit(this)(node.ifFalse) ?? undefined) : undefined;\n            if (ifFalse) assertIsNode(ifFalse, INSTRUCTION_INPUT_VALUE_NODES);\n            if (!ifTrue && !ifFalse) return null;\n            return conditionalValueNode({ condition, ifFalse, ifTrue, value });\n        };\n    }\n\n    if (castedNodeKeys.includes('pdaValueNode')) {\n        visitor.visitPdaValue = function visitPdaValue(node) {\n            const pda = visit(this)(node.pda);\n            if (pda === null) return null;\n            assertIsNode(pda, ['pdaLinkNode', 'pdaNode']);\n            const seeds = node.seeds.map(visit(this)).filter(removeNullAndAssertIsNodeFilter('pdaSeedValueNode'));\n            return pdaValueNode(pda, seeds);\n        };\n    }\n\n    if (castedNodeKeys.includes('pdaSeedValueNode')) {\n        visitor.visitPdaSeedValue = function visitPdaSeedValue(node) {\n            const value = visit(this)(node.value);\n            if (value === null) return null;\n            assertIsNode(value, [...VALUE_NODES, 'accountValueNode', 'argumentValueNode']);\n            return pdaSeedValueNode(node.name, value);\n        };\n    }\n\n    if (castedNodeKeys.includes('fixedSizeTypeNode')) {\n        visitor.visitFixedSizeType = function visitFixedSizeType(node) {\n            const type = visit(this)(node.type);\n            if (type === null) return null;\n            assertIsNode(type, TYPE_NODES);\n            return fixedSizeTypeNode(type, node.size);\n        };\n    }\n\n    if (castedNodeKeys.includes('sizePrefixTypeNode')) {\n        visitor.visitSizePrefixType = function visitSizePrefixType(node) {\n            const prefix = visit(this)(node.prefix);\n            if (prefix === null) return null;\n            assertIsNestedTypeNode(prefix, 'numberTypeNode');\n            const type = visit(this)(node.type);\n            if (type === null) return null;\n            assertIsNode(type, TYPE_NODES);\n            return sizePrefixTypeNode(type, prefix);\n        };\n    }\n\n    if (castedNodeKeys.includes('preOffsetTypeNode')) {\n        visitor.visitPreOffsetType = function visitPreOffsetType(node) {\n            const type = visit(this)(node.type);\n            if (type === null) return null;\n            assertIsNode(type, TYPE_NODES);\n            return preOffsetTypeNode(type, node.offset, node.strategy);\n        };\n    }\n\n    if (castedNodeKeys.includes('postOffsetTypeNode')) {\n        visitor.visitPostOffsetType = function visitPostOffsetType(node) {\n            const type = visit(this)(node.type);\n            if (type === null) return null;\n            assertIsNode(type, TYPE_NODES);\n            return postOffsetTypeNode(type, node.offset, node.strategy);\n        };\n    }\n\n    if (castedNodeKeys.includes('sentinelTypeNode')) {\n        visitor.visitSentinelType = function visitSentinelType(node) {\n            const sentinel = visit(this)(node.sentinel);\n            if (sentinel === null) return null;\n            assertIsNode(sentinel, 'constantValueNode');\n            const type = visit(this)(node.type);\n            if (type === null) return null;\n            assertIsNode(type, TYPE_NODES);\n            return sentinelTypeNode(type, sentinel);\n        };\n    }\n\n    if (castedNodeKeys.includes('hiddenPrefixTypeNode')) {\n        visitor.visitHiddenPrefixType = function visitHiddenPrefixType(node) {\n            const type = visit(this)(node.type);\n            if (type === null) return null;\n            assertIsNode(type, TYPE_NODES);\n            const prefix = node.prefix.map(visit(this)).filter(removeNullAndAssertIsNodeFilter('constantValueNode'));\n            if (prefix.length === 0) return type;\n            return hiddenPrefixTypeNode(type, prefix);\n        };\n    }\n\n    if (castedNodeKeys.includes('hiddenSuffixTypeNode')) {\n        visitor.visitHiddenSuffixType = function visitHiddenSuffixType(node) {\n            const type = visit(this)(node.type);\n            if (type === null) return null;\n            assertIsNode(type, TYPE_NODES);\n            const suffix = node.suffix.map(visit(this)).filter(removeNullAndAssertIsNodeFilter('constantValueNode'));\n            if (suffix.length === 0) return type;\n            return hiddenSuffixTypeNode(type, suffix);\n        };\n    }\n\n    if (castedNodeKeys.includes('constantDiscriminatorNode')) {\n        visitor.visitConstantDiscriminator = function visitConstantDiscriminator(node) {\n            const constant = visit(this)(node.constant);\n            if (constant === null) return null;\n            assertIsNode(constant, 'constantValueNode');\n            return constantDiscriminatorNode(constant, node.offset);\n        };\n    }\n\n    if (castedNodeKeys.includes('accountLinkNode')) {\n        visitor.visitAccountLink = function visitAccountLink(node) {\n            const program = node.program ? (visit(this)(node.program) ?? undefined) : undefined;\n            if (program) assertIsNode(program, 'programLinkNode');\n            return accountLinkNode(node.name, program);\n        };\n    }\n\n    if (castedNodeKeys.includes('definedTypeLinkNode')) {\n        visitor.visitDefinedTypeLink = function visitDefinedTypeLink(node) {\n            const program = node.program ? (visit(this)(node.program) ?? undefined) : undefined;\n            if (program) assertIsNode(program, 'programLinkNode');\n            return definedTypeLinkNode(node.name, program);\n        };\n    }\n\n    if (castedNodeKeys.includes('instructionLinkNode')) {\n        visitor.visitInstructionLink = function visitInstructionLink(node) {\n            const program = node.program ? (visit(this)(node.program) ?? undefined) : undefined;\n            if (program) assertIsNode(program, 'programLinkNode');\n            return instructionLinkNode(node.name, program);\n        };\n    }\n\n    if (castedNodeKeys.includes('instructionAccountLinkNode')) {\n        visitor.visitInstructionAccountLink = function visitInstructionAccountLink(node) {\n            const instruction = node.instruction ? (visit(this)(node.instruction) ?? undefined) : undefined;\n            if (instruction) assertIsNode(instruction, 'instructionLinkNode');\n            return instructionAccountLinkNode(node.name, instruction);\n        };\n    }\n\n    if (castedNodeKeys.includes('instructionArgumentLinkNode')) {\n        visitor.visitInstructionArgumentLink = function visitInstructionArgumentLink(node) {\n            const instruction = node.instruction ? (visit(this)(node.instruction) ?? undefined) : undefined;\n            if (instruction) assertIsNode(instruction, 'instructionLinkNode');\n            return instructionArgumentLinkNode(node.name, instruction);\n        };\n    }\n\n    if (castedNodeKeys.includes('pdaLinkNode')) {\n        visitor.visitPdaLink = function visitPdaLink(node) {\n            const program = node.program ? (visit(this)(node.program) ?? undefined) : undefined;\n            if (program) assertIsNode(program, 'programLinkNode');\n            return pdaLinkNode(node.name, program);\n        };\n    }\n\n    return visitor as Visitor<Node, TNodeKind>;\n}\n","import { Node, NodeKind, REGISTERED_NODE_KINDS } from '@kinobi-so/nodes';\n\nimport { getVisitFunctionName, GetVisitorFunctionName, Visitor } from './visitor';\n\nexport type VisitorInterceptor<TReturn> = <TNode extends Node>(node: TNode, next: (node: TNode) => TReturn) => TReturn;\n\nexport function interceptVisitor<TReturn, TNodeKind extends NodeKind>(\n    visitor: Visitor<TReturn, TNodeKind>,\n    interceptor: VisitorInterceptor<TReturn>,\n): Visitor<TReturn, TNodeKind> {\n    const registeredVisitFunctions = REGISTERED_NODE_KINDS.map(getVisitFunctionName);\n\n    return Object.fromEntries(\n        Object.keys(visitor).flatMap(key => {\n            const castedKey = key as GetVisitorFunctionName<TNodeKind>;\n            if (!registeredVisitFunctions.includes(castedKey)) {\n                return [];\n            }\n\n            return [\n                [\n                    castedKey,\n                    function interceptedVisitNode<TNode extends Node>(this: Visitor<TReturn, TNodeKind>, node: TNode) {\n                        const baseFunction = visitor[castedKey] as (node: TNode) => TReturn;\n                        return interceptor<TNode>(node, baseFunction.bind(this));\n                    },\n                ],\n            ];\n        }),\n    ) as Visitor<TReturn, TNodeKind>;\n}\n","/**\n * Copied from @solana/functional.\n * @see https://github.com/solana-labs/solana-web3.js/blob/master/packages/functional/src/pipe.ts\n *\n * ---\n *\n * General pipe function.\n * Provide an initial value and a list of functions to pipe it through.\n *\n * Following common implementations of pipe functions that use TypeScript,\n * this function supports a maximum arity of 10 for type safety.\n * @see https://github.com/ramda/ramda/blob/master/source/pipe.js\n * @see https://github.com/darky/rocket-pipes/blob/master/index.ts\n *\n * Note you can use nested pipes to extend this limitation, like so:\n * ```typescript\n * const myValue = pipe(\n *      pipe(\n *          1,\n *          (x) => x + 1,\n *          (x) => x * 2,\n *          (x) => x - 1,\n *      ),\n *      (y) => y / 3,\n *      (y) => y + 1,\n * );\n * ```\n * @param init  The initial value\n * @param fns   Any number of functions to pipe the value through\n * @returns     The final value with all functions applied\n */\nexport function pipe<TInitial>(init: TInitial): TInitial;\nexport function pipe<TInitial, R1>(init: TInitial, init_r1: (init: TInitial) => R1): R1;\nexport function pipe<TInitial, R1, R2>(init: TInitial, init_r1: (init: TInitial) => R1, r1_r2: (r1: R1) => R2): R2;\nexport function pipe<TInitial, R1, R2, R3>(\n    init: TInitial,\n    init_r1: (init: TInitial) => R1,\n    r1_r2: (r1: R1) => R2,\n    r2_r3: (r2: R2) => R3,\n): R3;\nexport function pipe<TInitial, R1, R2, R3, R4>(\n    init: TInitial,\n    init_r1: (init: TInitial) => R1,\n    r1_r2: (r1: R1) => R2,\n    r2_r3: (r2: R2) => R3,\n    r3_r4: (r3: R3) => R4,\n): R4;\nexport function pipe<TInitial, R1, R2, R3, R4, R5>(\n    init: TInitial,\n    init_r1: (init: TInitial) => R1,\n    r1_r2: (r1: R1) => R2,\n    r2_r3: (r2: R2) => R3,\n    r3_r4: (r3: R3) => R4,\n    r4_r5: (r4: R4) => R5,\n): R5;\nexport function pipe<TInitial, R1, R2, R3, R4, R5, R6>(\n    init: TInitial,\n    init_r1: (init: TInitial) => R1,\n    r1_r2: (r1: R1) => R2,\n    r2_r3: (r2: R2) => R3,\n    r3_r4: (r3: R3) => R4,\n    r4_r5: (r4: R4) => R5,\n    r5_r6: (r5: R5) => R6,\n): R6;\nexport function pipe<TInitial, R1, R2, R3, R4, R5, R6, R7>(\n    init: TInitial,\n    init_r1: (init: TInitial) => R1,\n    r1_r2: (r1: R1) => R2,\n    r2_r3: (r2: R2) => R3,\n    r3_r4: (r3: R3) => R4,\n    r4_r5: (r4: R4) => R5,\n    r5_r6: (r5: R5) => R6,\n    r6_r7: (r6: R6) => R7,\n): R7;\nexport function pipe<TInitial, R1, R2, R3, R4, R5, R6, R7, R8>(\n    init: TInitial,\n    init_r1: (init: TInitial) => R1,\n    r1_r2: (r1: R1) => R2,\n    r2_r3: (r2: R2) => R3,\n    r3_r4: (r3: R3) => R4,\n    r4_r5: (r4: R4) => R5,\n    r5_r6: (r5: R5) => R6,\n    r6_r7: (r6: R6) => R7,\n    r7_r8: (r7: R7) => R8,\n): R8;\nexport function pipe<TInitial, R1, R2, R3, R4, R5, R6, R7, R8, R9>(\n    init: TInitial,\n    init_r1: (init: TInitial) => R1,\n    r1_r2: (r1: R1) => R2,\n    r2_r3: (r2: R2) => R3,\n    r3_r4: (r3: R3) => R4,\n    r4_r5: (r4: R4) => R5,\n    r5_r6: (r5: R5) => R6,\n    r6_r7: (r6: R6) => R7,\n    r7_r8: (r7: R7) => R8,\n    r8_r9: (r8: R8) => R9,\n): R9;\nexport function pipe<TInitial, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10>(\n    init: TInitial,\n    init_r1: (init: TInitial) => R1,\n    r1_r2: (r1: R1) => R2,\n    r2_r3: (r2: R2) => R3,\n    r3_r4: (r3: R3) => R4,\n    r4_r5: (r4: R4) => R5,\n    r5_r6: (r5: R5) => R6,\n    r6_r7: (r6: R6) => R7,\n    r7_r8: (r7: R7) => R8,\n    r8_r9: (r8: R8) => R9,\n    r9_r10: (r9: R9) => R10,\n): R10;\nexport function pipe<TInitial>(init: TInitial, ...fns: CallableFunction[]) {\n    return fns.reduce((acc, fn) => fn(acc), init);\n}\n","import { NodeKind } from '@kinobi-so/nodes';\n\nimport { interceptVisitor } from './interceptVisitor';\nimport { NodeStack } from './NodeStack';\nimport { Visitor } from './visitor';\n\nexport function recordNodeStackVisitor<TReturn, TNodeKind extends NodeKind>(\n    visitor: Visitor<TReturn, TNodeKind>,\n    stack: NodeStack,\n): Visitor<TReturn, TNodeKind> {\n    return interceptVisitor(visitor, (node, next) => {\n        stack.push(node);\n        const newNode = next(node);\n        stack.pop();\n        return newNode;\n    });\n}\n","import { Node, NodeKind } from '@kinobi-so/nodes';\n\nimport { identityVisitor } from './identityVisitor';\nimport { interceptVisitor } from './interceptVisitor';\nimport { getConjunctiveNodeSelectorFunction, NodeSelector } from './NodeSelector';\nimport { NodeStack } from './NodeStack';\nimport { pipe } from './pipe';\nimport { recordNodeStackVisitor } from './recordNodeStackVisitor';\nimport { Visitor } from './visitor';\n\nexport type BottomUpNodeTransformer<TNode extends Node = Node> = (node: TNode, stack: NodeStack) => Node | null;\n\nexport type BottomUpNodeTransformerWithSelector<TNode extends Node = Node> = {\n    select: NodeSelector | NodeSelector[];\n    transform: BottomUpNodeTransformer<TNode>;\n};\n\nexport function bottomUpTransformerVisitor<TNodeKind extends NodeKind = NodeKind>(\n    transformers: (BottomUpNodeTransformer | BottomUpNodeTransformerWithSelector)[],\n    nodeKeys?: TNodeKind[],\n): Visitor<Node | null, TNodeKind> {\n    const transformerFunctions = transformers.map((transformer): BottomUpNodeTransformer => {\n        if (typeof transformer === 'function') return transformer;\n        return (node, stack) =>\n            getConjunctiveNodeSelectorFunction(transformer.select)(node, stack)\n                ? transformer.transform(node, stack)\n                : node;\n    });\n\n    const stack = new NodeStack();\n    return pipe(\n        identityVisitor(nodeKeys),\n        v => recordNodeStackVisitor(v, stack),\n        v =>\n            interceptVisitor(v, (node, next) =>\n                transformerFunctions.reduce(\n                    (acc, transformer) => (acc === null ? null : transformer(acc, stack.clone())),\n                    next(node),\n                ),\n            ),\n    );\n}\n","import { GetNodeFromKind, NodeKind, REGISTERED_NODE_KINDS } from '@kinobi-so/nodes';\n\nimport { getVisitFunctionName, GetVisitorFunctionName, Visitor } from './visitor';\n\nexport function mapVisitor<TReturnFrom, TReturnTo, TNodeKind extends NodeKind>(\n    visitor: Visitor<TReturnFrom, TNodeKind>,\n    map: (from: TReturnFrom) => TReturnTo,\n): Visitor<TReturnTo, TNodeKind> {\n    const registeredVisitFunctions = REGISTERED_NODE_KINDS.map(getVisitFunctionName);\n    return Object.fromEntries(\n        Object.keys(visitor).flatMap(key => {\n            const castedKey = key as GetVisitorFunctionName<TNodeKind>;\n            if (!registeredVisitFunctions.includes(castedKey)) {\n                return [];\n            }\n\n            return [\n                [\n                    castedKey,\n                    (node: GetNodeFromKind<TNodeKind>) =>\n                        map((visitor[castedKey] as (node: GetNodeFromKind<TNodeKind>) => TReturnFrom)(node)),\n                ],\n            ];\n        }),\n    ) as unknown as Visitor<TReturnTo, TNodeKind>;\n}\n","import { NodeKind } from '@kinobi-so/nodes';\n\nimport { mapVisitor } from './mapVisitor';\nimport { Visitor } from './visitor';\n\nexport function consoleLogVisitor<TNodeKind extends NodeKind = NodeKind>(\n    visitor: Visitor<string, TNodeKind>,\n): Visitor<void, TNodeKind> {\n    // eslint-disable-next-line no-console\n    return mapVisitor(visitor, value => console.log(value));\n}\n","import { Node, NodeKind } from '@kinobi-so/nodes';\n\nimport { identityVisitor } from './identityVisitor';\nimport { interceptVisitor } from './interceptVisitor';\nimport { getConjunctiveNodeSelectorFunction, NodeSelector } from './NodeSelector';\nimport { NodeStack } from './NodeStack';\nimport { pipe } from './pipe';\nimport { recordNodeStackVisitor } from './recordNodeStackVisitor';\nimport { Visitor } from './visitor';\n\nexport type TopDownNodeTransformer<TNode extends Node = Node> = <T extends TNode = TNode>(\n    node: T,\n    stack: NodeStack,\n) => T | null;\n\nexport type TopDownNodeTransformerWithSelector<TNode extends Node = Node> = {\n    select: NodeSelector | NodeSelector[];\n    transform: TopDownNodeTransformer<TNode>;\n};\n\nexport function topDownTransformerVisitor<TNodeKind extends NodeKind = NodeKind>(\n    transformers: (TopDownNodeTransformer | TopDownNodeTransformerWithSelector)[],\n    nodeKeys?: TNodeKind[],\n): Visitor<Node | null, TNodeKind> {\n    const transformerFunctions = transformers.map((transformer): TopDownNodeTransformer => {\n        if (typeof transformer === 'function') return transformer;\n        return (node, stack) =>\n            getConjunctiveNodeSelectorFunction(transformer.select)(node, stack)\n                ? transformer.transform(node, stack)\n                : node;\n    });\n\n    const stack = new NodeStack();\n    return pipe(\n        identityVisitor(nodeKeys),\n        v => recordNodeStackVisitor(v, stack),\n        v =>\n            interceptVisitor(v, (node, next) => {\n                const appliedNode = transformerFunctions.reduce(\n                    (acc, transformer) => (acc === null ? null : transformer(acc, stack.clone())),\n                    node as Parameters<typeof next>[0] | null,\n                );\n                if (appliedNode === null) return null;\n                return next(appliedNode);\n            }),\n    );\n}\n","import { NodeKind } from '@kinobi-so/nodes';\n\nimport { NodeSelector } from './NodeSelector';\nimport { TopDownNodeTransformerWithSelector, topDownTransformerVisitor } from './topDownTransformerVisitor';\n\nexport function deleteNodesVisitor<TNodeKind extends NodeKind = NodeKind>(\n    selectors: NodeSelector[],\n    nodeKeys?: TNodeKind[],\n) {\n    return topDownTransformerVisitor<TNodeKind>(\n        selectors.map(\n            (selector): TopDownNodeTransformerWithSelector => ({\n                select: selector,\n                transform: () => null,\n            }),\n        ),\n        nodeKeys,\n    );\n}\n","import { KINOBI_ERROR__VISITORS__CANNOT_EXTEND_MISSING_VISIT_FUNCTION, KinobiError } from '@kinobi-so/errors';\nimport { GetNodeFromKind, Node, NodeKind, REGISTERED_NODE_KINDS } from '@kinobi-so/nodes';\n\nimport { getVisitFunctionName, GetVisitorFunctionName, Visitor } from './visitor';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype DontInfer<T> = T extends any ? T : never;\n\nexport type VisitorOverrideFunction<TReturn, TNodeKind extends NodeKind, TNode extends Node> = (\n    node: TNode,\n    scope: {\n        next: (node: TNode) => TReturn;\n        self: Visitor<TReturn, TNodeKind>;\n    },\n) => TReturn;\n\nexport type VisitorOverrides<TReturn, TNodeKind extends NodeKind> = {\n    [K in TNodeKind as GetVisitorFunctionName<K>]?: VisitorOverrideFunction<TReturn, TNodeKind, GetNodeFromKind<K>>;\n};\n\nexport function extendVisitor<TReturn, TNodeKind extends NodeKind>(\n    visitor: Visitor<TReturn, TNodeKind>,\n    overrides: DontInfer<VisitorOverrides<TReturn, TNodeKind>>,\n): Visitor<TReturn, TNodeKind> {\n    const registeredVisitFunctions = REGISTERED_NODE_KINDS.map(getVisitFunctionName);\n\n    const overriddenFunctions = Object.fromEntries(\n        Object.keys(overrides).flatMap(key => {\n            if (!(registeredVisitFunctions as string[]).includes(key)) {\n                return [];\n            }\n\n            const castedKey = key as GetVisitorFunctionName<TNodeKind>;\n\n            if (!visitor[castedKey]) {\n                throw new KinobiError(KINOBI_ERROR__VISITORS__CANNOT_EXTEND_MISSING_VISIT_FUNCTION, {\n                    visitFunction: castedKey,\n                });\n            }\n\n            return [\n                [\n                    castedKey,\n                    function extendedVisitNode<TNode extends Node>(this: Visitor<TReturn, TNodeKind>, node: TNode) {\n                        const extendedFunction = overrides[castedKey] as VisitorOverrideFunction<\n                            TReturn,\n                            TNodeKind,\n                            TNode\n                        >;\n                        const nextFunction = visitor[castedKey] as unknown as (node: TNode) => TReturn;\n                        return extendedFunction.bind(this)(node, {\n                            next: nextFunction.bind(this),\n                            self: this,\n                        });\n                    },\n                ],\n            ];\n        }),\n    ) as Partial<Visitor<TReturn, TNodeKind>>;\n\n    return {\n        ...visitor,\n        ...overriddenFunctions,\n    };\n}\n","import { getAllPrograms, Node, NodeKind, REGISTERED_NODE_KINDS } from '@kinobi-so/nodes';\n\nimport { staticVisitor } from './staticVisitor';\nimport { visit as baseVisit, Visitor } from './visitor';\n\nexport function mergeVisitor<TReturn, TNodeKind extends NodeKind = NodeKind>(\n    leafValue: (node: Node) => TReturn,\n    merge: (node: Node, values: TReturn[]) => TReturn,\n    nodeKeys: TNodeKind[] = REGISTERED_NODE_KINDS as TNodeKind[],\n): Visitor<TReturn, TNodeKind> {\n    const castedNodeKeys: NodeKind[] = nodeKeys;\n    const visitor = staticVisitor(leafValue, castedNodeKeys) as Visitor<TReturn>;\n    const visit =\n        (v: Visitor<TReturn>) =>\n        (node: Node): TReturn[] =>\n            castedNodeKeys.includes(node.kind) ? [baseVisit(node, v)] : [];\n\n    if (castedNodeKeys.includes('rootNode')) {\n        visitor.visitRoot = function visitRoot(node) {\n            return merge(node, getAllPrograms(node).flatMap(visit(this)));\n        };\n    }\n\n    if (castedNodeKeys.includes('programNode')) {\n        visitor.visitProgram = function visitProgram(node) {\n            return merge(node, [\n                ...node.pdas.flatMap(visit(this)),\n                ...node.accounts.flatMap(visit(this)),\n                ...node.instructions.flatMap(visit(this)),\n                ...node.definedTypes.flatMap(visit(this)),\n                ...node.errors.flatMap(visit(this)),\n            ]);\n        };\n    }\n\n    if (castedNodeKeys.includes('pdaNode')) {\n        visitor.visitPda = function visitPda(node) {\n            return merge(node, node.seeds.flatMap(visit(this)));\n        };\n    }\n\n    if (castedNodeKeys.includes('accountNode')) {\n        visitor.visitAccount = function visitAccount(node) {\n            return merge(node, [\n                ...visit(this)(node.data),\n                ...(node.pda ? visit(this)(node.pda) : []),\n                ...(node.discriminators ?? []).flatMap(visit(this)),\n            ]);\n        };\n    }\n\n    if (castedNodeKeys.includes('instructionNode')) {\n        visitor.visitInstruction = function visitInstruction(node) {\n            return merge(node, [\n                ...node.accounts.flatMap(visit(this)),\n                ...node.arguments.flatMap(visit(this)),\n                ...(node.extraArguments ?? []).flatMap(visit(this)),\n                ...(node.remainingAccounts ?? []).flatMap(visit(this)),\n                ...(node.byteDeltas ?? []).flatMap(visit(this)),\n                ...(node.discriminators ?? []).flatMap(visit(this)),\n                ...(node.subInstructions ?? []).flatMap(visit(this)),\n            ]);\n        };\n    }\n\n    if (castedNodeKeys.includes('instructionAccountNode')) {\n        visitor.visitInstructionAccount = function visitInstructionAccount(node) {\n            return merge(node, [...(node.defaultValue ? visit(this)(node.defaultValue) : [])]);\n        };\n    }\n\n    if (castedNodeKeys.includes('instructionArgumentNode')) {\n        visitor.visitInstructionArgument = function visitInstructionArgument(node) {\n            return merge(node, [\n                ...visit(this)(node.type),\n                ...(node.defaultValue ? visit(this)(node.defaultValue) : []),\n            ]);\n        };\n    }\n\n    if (castedNodeKeys.includes('instructionRemainingAccountsNode')) {\n        visitor.visitInstructionRemainingAccounts = function visitInstructionRemainingAccounts(node) {\n            return merge(node, visit(this)(node.value));\n        };\n    }\n\n    if (castedNodeKeys.includes('instructionByteDeltaNode')) {\n        visitor.visitInstructionByteDelta = function visitInstructionByteDelta(node) {\n            return merge(node, visit(this)(node.value));\n        };\n    }\n\n    if (castedNodeKeys.includes('definedTypeNode')) {\n        visitor.visitDefinedType = function visitDefinedType(node) {\n            return merge(node, visit(this)(node.type));\n        };\n    }\n\n    if (castedNodeKeys.includes('arrayTypeNode')) {\n        visitor.visitArrayType = function visitArrayType(node) {\n            return merge(node, [...visit(this)(node.count), ...visit(this)(node.item)]);\n        };\n    }\n\n    if (castedNodeKeys.includes('enumTypeNode')) {\n        visitor.visitEnumType = function visitEnumType(node) {\n            return merge(node, [...visit(this)(node.size), ...node.variants.flatMap(visit(this))]);\n        };\n    }\n\n    if (castedNodeKeys.includes('enumStructVariantTypeNode')) {\n        visitor.visitEnumStructVariantType = function visitEnumStructVariantType(node) {\n            return merge(node, visit(this)(node.struct));\n        };\n    }\n\n    if (castedNodeKeys.includes('enumTupleVariantTypeNode')) {\n        visitor.visitEnumTupleVariantType = function visitEnumTupleVariantType(node) {\n            return merge(node, visit(this)(node.tuple));\n        };\n    }\n\n    if (castedNodeKeys.includes('mapTypeNode')) {\n        visitor.visitMapType = function visitMapType(node) {\n            return merge(node, [...visit(this)(node.count), ...visit(this)(node.key), ...visit(this)(node.value)]);\n        };\n    }\n\n    if (castedNodeKeys.includes('optionTypeNode')) {\n        visitor.visitOptionType = function visitOptionType(node) {\n            return merge(node, [...visit(this)(node.prefix), ...visit(this)(node.item)]);\n        };\n    }\n\n    if (castedNodeKeys.includes('zeroableOptionTypeNode')) {\n        visitor.visitZeroableOptionType = function visitZeroableOptionType(node) {\n            return merge(node, [...visit(this)(node.item), ...(node.zeroValue ? visit(this)(node.zeroValue) : [])]);\n        };\n    }\n\n    if (castedNodeKeys.includes('remainderOptionTypeNode')) {\n        visitor.visitRemainderOptionType = function visitRemainderOptionType(node) {\n            return merge(node, visit(this)(node.item));\n        };\n    }\n\n    if (castedNodeKeys.includes('booleanTypeNode')) {\n        visitor.visitBooleanType = function visitBooleanType(node) {\n            return merge(node, visit(this)(node.size));\n        };\n    }\n\n    if (castedNodeKeys.includes('setTypeNode')) {\n        visitor.visitSetType = function visitSetType(node) {\n            return merge(node, [...visit(this)(node.count), ...visit(this)(node.item)]);\n        };\n    }\n\n    if (castedNodeKeys.includes('structTypeNode')) {\n        visitor.visitStructType = function visitStructType(node) {\n            return merge(node, node.fields.flatMap(visit(this)));\n        };\n    }\n\n    if (castedNodeKeys.includes('structFieldTypeNode')) {\n        visitor.visitStructFieldType = function visitStructFieldType(node) {\n            return merge(node, [\n                ...visit(this)(node.type),\n                ...(node.defaultValue ? visit(this)(node.defaultValue) : []),\n            ]);\n        };\n    }\n\n    if (castedNodeKeys.includes('tupleTypeNode')) {\n        visitor.visitTupleType = function visitTupleType(node) {\n            return merge(node, node.items.flatMap(visit(this)));\n        };\n    }\n\n    if (castedNodeKeys.includes('amountTypeNode')) {\n        visitor.visitAmountType = function visitAmountType(node) {\n            return merge(node, visit(this)(node.number));\n        };\n    }\n\n    if (castedNodeKeys.includes('dateTimeTypeNode')) {\n        visitor.visitDateTimeType = function visitDateTimeType(node) {\n            return merge(node, visit(this)(node.number));\n        };\n    }\n\n    if (castedNodeKeys.includes('solAmountTypeNode')) {\n        visitor.visitSolAmountType = function visitSolAmountType(node) {\n            return merge(node, visit(this)(node.number));\n        };\n    }\n\n    if (castedNodeKeys.includes('prefixedCountNode')) {\n        visitor.visitPrefixedCount = function visitPrefixedCount(node) {\n            return merge(node, visit(this)(node.prefix));\n        };\n    }\n\n    if (castedNodeKeys.includes('arrayValueNode')) {\n        visitor.visitArrayValue = function visitArrayValue(node) {\n            return merge(node, node.items.flatMap(visit(this)));\n        };\n    }\n\n    if (castedNodeKeys.includes('constantValueNode')) {\n        visitor.visitConstantValue = function visitConstantValue(node) {\n            return merge(node, [...visit(this)(node.type), ...visit(this)(node.value)]);\n        };\n    }\n\n    if (castedNodeKeys.includes('enumValueNode')) {\n        visitor.visitEnumValue = function visitEnumValue(node) {\n            return merge(node, [...visit(this)(node.enum), ...(node.value ? visit(this)(node.value) : [])]);\n        };\n    }\n\n    if (castedNodeKeys.includes('mapValueNode')) {\n        visitor.visitMapValue = function visitMapValue(node) {\n            return merge(node, node.entries.flatMap(visit(this)));\n        };\n    }\n\n    if (castedNodeKeys.includes('mapEntryValueNode')) {\n        visitor.visitMapEntryValue = function visitMapEntryValue(node) {\n            return merge(node, [...visit(this)(node.key), ...visit(this)(node.value)]);\n        };\n    }\n\n    if (castedNodeKeys.includes('setValueNode')) {\n        visitor.visitSetValue = function visitSetValue(node) {\n            return merge(node, node.items.flatMap(visit(this)));\n        };\n    }\n\n    if (castedNodeKeys.includes('someValueNode')) {\n        visitor.visitSomeValue = function visitSomeValue(node) {\n            return merge(node, visit(this)(node.value));\n        };\n    }\n\n    if (castedNodeKeys.includes('structValueNode')) {\n        visitor.visitStructValue = function visitStructValue(node) {\n            return merge(node, node.fields.flatMap(visit(this)));\n        };\n    }\n\n    if (castedNodeKeys.includes('structFieldValueNode')) {\n        visitor.visitStructFieldValue = function visitStructFieldValue(node) {\n            return merge(node, visit(this)(node.value));\n        };\n    }\n\n    if (castedNodeKeys.includes('tupleValueNode')) {\n        visitor.visitTupleValue = function visitTupleValue(node) {\n            return merge(node, node.items.flatMap(visit(this)));\n        };\n    }\n\n    if (castedNodeKeys.includes('constantPdaSeedNode')) {\n        visitor.visitConstantPdaSeed = function visitConstantPdaSeed(node) {\n            return merge(node, [...visit(this)(node.type), ...visit(this)(node.value)]);\n        };\n    }\n\n    if (castedNodeKeys.includes('variablePdaSeedNode')) {\n        visitor.visitVariablePdaSeed = function visitVariablePdaSeed(node) {\n            return merge(node, visit(this)(node.type));\n        };\n    }\n\n    if (castedNodeKeys.includes('resolverValueNode')) {\n        visitor.visitResolverValue = function visitResolverValue(node) {\n            return merge(node, (node.dependsOn ?? []).flatMap(visit(this)));\n        };\n    }\n\n    if (castedNodeKeys.includes('conditionalValueNode')) {\n        visitor.visitConditionalValue = function visitConditionalValue(node) {\n            return merge(node, [\n                ...visit(this)(node.condition),\n                ...(node.value ? visit(this)(node.value) : []),\n                ...(node.ifTrue ? visit(this)(node.ifTrue) : []),\n                ...(node.ifFalse ? visit(this)(node.ifFalse) : []),\n            ]);\n        };\n    }\n\n    if (castedNodeKeys.includes('pdaValueNode')) {\n        visitor.visitPdaValue = function visitPdaValue(node) {\n            return merge(node, [...visit(this)(node.pda), ...node.seeds.flatMap(visit(this))]);\n        };\n    }\n\n    if (castedNodeKeys.includes('pdaSeedValueNode')) {\n        visitor.visitPdaSeedValue = function visitPdaSeedValue(node) {\n            return merge(node, visit(this)(node.value));\n        };\n    }\n\n    if (castedNodeKeys.includes('fixedSizeTypeNode')) {\n        visitor.visitFixedSizeType = function visitFixedSizeType(node) {\n            return merge(node, visit(this)(node.type));\n        };\n    }\n\n    if (castedNodeKeys.includes('sizePrefixTypeNode')) {\n        visitor.visitSizePrefixType = function visitSizePrefixType(node) {\n            return merge(node, [...visit(this)(node.prefix), ...visit(this)(node.type)]);\n        };\n    }\n\n    if (castedNodeKeys.includes('preOffsetTypeNode')) {\n        visitor.visitPreOffsetType = function visitPreOffsetType(node) {\n            return merge(node, visit(this)(node.type));\n        };\n    }\n\n    if (castedNodeKeys.includes('postOffsetTypeNode')) {\n        visitor.visitPostOffsetType = function visitPostOffsetType(node) {\n            return merge(node, visit(this)(node.type));\n        };\n    }\n\n    if (castedNodeKeys.includes('sentinelTypeNode')) {\n        visitor.visitSentinelType = function visitSentinelType(node) {\n            return merge(node, [...visit(this)(node.sentinel), ...visit(this)(node.type)]);\n        };\n    }\n\n    if (castedNodeKeys.includes('hiddenPrefixTypeNode')) {\n        visitor.visitHiddenPrefixType = function visitHiddenPrefixType(node) {\n            return merge(node, [...node.prefix.flatMap(visit(this)), ...visit(this)(node.type)]);\n        };\n    }\n\n    if (castedNodeKeys.includes('hiddenSuffixTypeNode')) {\n        visitor.visitHiddenSuffixType = function visitHiddenSuffixType(node) {\n            return merge(node, [...visit(this)(node.type), ...node.suffix.flatMap(visit(this))]);\n        };\n    }\n\n    if (castedNodeKeys.includes('constantDiscriminatorNode')) {\n        visitor.visitConstantDiscriminator = function visitConstantDiscriminator(node) {\n            return merge(node, visit(this)(node.constant));\n        };\n    }\n\n    if (castedNodeKeys.includes('accountLinkNode')) {\n        visitor.visitAccountLink = function visitAccountLink(node) {\n            return merge(node, node.program ? visit(this)(node.program) : []);\n        };\n    }\n\n    if (castedNodeKeys.includes('definedTypeLinkNode')) {\n        visitor.visitDefinedTypeLink = function visitDefinedTypeLink(node) {\n            return merge(node, node.program ? visit(this)(node.program) : []);\n        };\n    }\n\n    if (castedNodeKeys.includes('instructionLinkNode')) {\n        visitor.visitInstructionLink = function visitInstructionLink(node) {\n            return merge(node, node.program ? visit(this)(node.program) : []);\n        };\n    }\n\n    if (castedNodeKeys.includes('instructionAccountLinkNode')) {\n        visitor.visitInstructionAccountLink = function visitInstructionAccountLink(node) {\n            return merge(node, node.instruction ? visit(this)(node.instruction) : []);\n        };\n    }\n\n    if (castedNodeKeys.includes('instructionArgumentLinkNode')) {\n        visitor.visitInstructionArgumentLink = function visitInstructionArgumentLink(node) {\n            return merge(node, node.instruction ? visit(this)(node.instruction) : []);\n        };\n    }\n\n    if (castedNodeKeys.includes('pdaLinkNode')) {\n        visitor.visitPdaLink = function visitPdaLink(node) {\n            return merge(node, node.program ? visit(this)(node.program) : []);\n        };\n    }\n\n    return visitor as Visitor<TReturn, TNodeKind>;\n}\n","import { isNode, isScalarEnum, REGISTERED_TYPE_NODE_KINDS, RegisteredTypeNode } from '@kinobi-so/nodes';\n\nimport { LinkableDictionary } from './LinkableDictionary';\nimport { mergeVisitor } from './mergeVisitor';\nimport { visit, Visitor } from './visitor';\n\nexport type ByteSizeVisitorKeys =\n    | RegisteredTypeNode['kind']\n    | 'accountNode'\n    | 'definedTypeLinkNode'\n    | 'definedTypeNode'\n    | 'instructionArgumentNode'\n    | 'instructionNode';\n\nexport function getByteSizeVisitor(linkables: LinkableDictionary): Visitor<number | null, ByteSizeVisitorKeys> {\n    const visitedDefinedTypes = new Map<string, number | null>();\n    const definedTypeStack: string[] = [];\n\n    const sumSizes = (values: (number | null)[]): number | null =>\n        values.reduce((all, one) => (all === null || one === null ? null : all + one), 0 as number | null);\n\n    const visitor = mergeVisitor(\n        () => null as number | null,\n        (_, values) => sumSizes(values),\n        [\n            ...REGISTERED_TYPE_NODE_KINDS,\n            'definedTypeLinkNode',\n            'definedTypeNode',\n            'accountNode',\n            'instructionNode',\n            'instructionArgumentNode',\n        ],\n    );\n\n    return {\n        ...visitor,\n\n        visitAccount(node) {\n            return visit(node.data, this);\n        },\n\n        visitArrayType(node) {\n            if (!isNode(node.count, 'fixedCountNode')) return null;\n            const fixedSize = node.count.value;\n            const itemSize = visit(node.item, this);\n            const arraySize = itemSize !== null ? itemSize * fixedSize : null;\n            return fixedSize === 0 ? 0 : arraySize;\n        },\n\n        visitDefinedType(node) {\n            if (visitedDefinedTypes.has(node.name)) {\n                return visitedDefinedTypes.get(node.name)!;\n            }\n            definedTypeStack.push(node.name);\n            const child = visit(node.type, this);\n            definedTypeStack.pop();\n            visitedDefinedTypes.set(node.name, child);\n            return child;\n        },\n\n        visitDefinedTypeLink(node) {\n            // Fetch the linked type and return null if not found.\n            // The validator visitor will throw a proper error later on.\n            const linkedDefinedType = linkables.get(node);\n            if (!linkedDefinedType) {\n                return null;\n            }\n\n            // This prevents infinite recursion by using assuming\n            // cyclic types don't have a fixed size.\n            if (definedTypeStack.includes(linkedDefinedType.name)) {\n                return null;\n            }\n\n            return visit(linkedDefinedType, this);\n        },\n\n        visitEnumEmptyVariantType() {\n            return 0;\n        },\n\n        visitEnumType(node) {\n            const prefix = visit(node.size, this) ?? 1;\n            if (isScalarEnum(node)) return prefix;\n            const variantSizes = node.variants.map(v => visit(v, this));\n            const allVariantHaveTheSameFixedSize = variantSizes.every((one, _, all) => one === all[0]);\n            return allVariantHaveTheSameFixedSize && variantSizes.length > 0 && variantSizes[0] !== null\n                ? variantSizes[0] + prefix\n                : null;\n        },\n\n        visitFixedSizeType(node) {\n            return node.size;\n        },\n\n        visitInstruction(node) {\n            return sumSizes(node.arguments.map(arg => visit(arg, this)));\n        },\n\n        visitInstructionArgument(node) {\n            return visit(node.type, this);\n        },\n\n        visitNumberType(node) {\n            return parseInt(node.format.slice(1), 10) / 8;\n        },\n\n        visitOptionType(node) {\n            if (!node.fixed) return null;\n            const prefixSize = visit(node.prefix, this) as number;\n            const itemSize = visit(node.item, this);\n            return itemSize !== null ? itemSize + prefixSize : null;\n        },\n\n        visitPublicKeyType() {\n            return 32;\n        },\n    };\n}\n","import { Node } from '@kinobi-so/nodes';\n\nimport { interceptVisitor } from './interceptVisitor';\nimport { mergeVisitor } from './mergeVisitor';\nimport { pipe } from './pipe';\nimport { Visitor } from './visitor';\n\nexport function getDebugStringVisitor(options: { indent?: boolean; indentSeparator?: string } = {}): Visitor<string> {\n    const indent = options.indent ?? false;\n    const indentSeparator = options.indentSeparator ?? '|   ';\n    let stackLevel = -1;\n\n    return pipe(\n        mergeVisitor<string>(\n            node => {\n                const details = getNodeDetails(node).join('.');\n                if (indent) {\n                    return `${indentSeparator.repeat(stackLevel)}${node.kind}${details ? ` [${details}]` : ''}`;\n                }\n                return `${node.kind}${details ? `[${details}]` : ''}`;\n            },\n            (node, values) => {\n                const details = getNodeDetails(node).join('.');\n                if (indent) {\n                    return [\n                        `${indentSeparator.repeat(stackLevel)}${node.kind}${details ? ` [${details}]` : ''}`,\n                        ...values,\n                    ].join('\\n');\n                }\n                return `${node.kind}${details ? `[${details}]` : ''}(${values.join(', ')})`;\n            },\n        ),\n        v =>\n            interceptVisitor(v, (node, next) => {\n                stackLevel += 1;\n                const newNode = next(node);\n                stackLevel -= 1;\n                return newNode;\n            }),\n    );\n}\n\nfunction getNodeDetails(node: Node): string[] {\n    switch (node.kind) {\n        case 'programNode':\n            return [node.name, node.publicKey];\n        case 'instructionAccountNode':\n            return [\n                node.name,\n                ...(node.isWritable ? ['writable'] : []),\n                ...(node.isSigner === true ? ['signer'] : []),\n                ...(node.isSigner === 'either' ? ['optionalSigner'] : []),\n                ...(node.isOptional ? ['optional'] : []),\n            ];\n        case 'instructionRemainingAccountsNode':\n            return [\n                ...(node.isOptional ? ['optional'] : []),\n                ...(node.isWritable ? ['writable'] : []),\n                ...(node.isSigner === true ? ['signer'] : []),\n                ...(node.isSigner === 'either' ? ['optionalSigner'] : []),\n            ];\n        case 'instructionByteDeltaNode':\n            return [...(node.subtract ? ['subtract'] : []), ...(node.withHeader ? ['withHeader'] : [])];\n        case 'errorNode':\n            return [node.code.toString(), node.name];\n        case 'accountLinkNode':\n        case 'definedTypeLinkNode':\n        case 'instructionAccountLinkNode':\n        case 'instructionArgumentLinkNode':\n        case 'instructionLinkNode':\n        case 'pdaLinkNode':\n        case 'programLinkNode':\n            return [node.name];\n        case 'numberTypeNode':\n            return [node.format, ...(node.endian === 'be' ? ['bigEndian'] : [])];\n        case 'amountTypeNode':\n            return [node.decimals.toString(), ...(node.unit ? [node.unit] : [])];\n        case 'stringTypeNode':\n            return [node.encoding];\n        case 'optionTypeNode':\n            return node.fixed ? ['fixed'] : [];\n        case 'fixedCountNode':\n            return [node.value.toString()];\n        case 'numberValueNode':\n            return [node.number.toString()];\n        case 'stringValueNode':\n            return [node.string];\n        case 'booleanValueNode':\n            return [node.boolean ? 'true' : 'false'];\n        case 'bytesValueNode':\n            return [node.encoding, node.data];\n        case 'publicKeyValueNode':\n            return [...(node.identifier ? [`${node.identifier}`] : []), node.publicKey];\n        case 'enumValueNode':\n            return [node.variant];\n        case 'resolverValueNode':\n            return [node.name];\n        case 'constantDiscriminatorNode':\n            return [...(node.offset > 0 ? [`offset:${node.offset}`] : [])];\n        case 'fieldDiscriminatorNode':\n            return [node.name, ...(node.offset > 0 ? [`offset:${node.offset}`] : [])];\n        case 'sizeDiscriminatorNode':\n            return [node.size.toString()];\n        case 'fixedSizeTypeNode':\n            return [node.size.toString()];\n        case 'preOffsetTypeNode':\n            return [node.offset.toString(), node.strategy ?? 'relative'];\n        case 'postOffsetTypeNode':\n            return [node.offset.toString(), node.strategy ?? 'relative'];\n        default:\n            return 'name' in node ? [node.name] : [];\n    }\n}\n","import { GetNodeFromKind, NodeKind, RootNode } from '@kinobi-so/nodes';\n\nimport { getVisitFunctionName, GetVisitorFunctionName, Visitor } from './visitor';\n\nexport function singleNodeVisitor<TReturn, TNodeKey extends NodeKind = NodeKind>(\n    key: TNodeKey,\n    fn: (node: GetNodeFromKind<TNodeKey>) => TReturn,\n): Visitor<TReturn, TNodeKey> {\n    const visitor = {} as Visitor<TReturn, TNodeKey>;\n    visitor[getVisitFunctionName(key)] = fn as unknown as Visitor<TReturn, TNodeKey>[GetVisitorFunctionName<TNodeKey>];\n\n    return visitor;\n}\n\nexport function rootNodeVisitor<TReturn = RootNode>(fn: (node: RootNode) => TReturn) {\n    return singleNodeVisitor('rootNode', fn);\n}\n","/* eslint-disable no-case-declarations */\nimport {\n    KINOBI_ERROR__VISITORS__CANNOT_USE_OPTIONAL_ACCOUNT_AS_PDA_SEED_VALUE,\n    KINOBI_ERROR__VISITORS__CYCLIC_DEPENDENCY_DETECTED_WHEN_RESOLVING_INSTRUCTION_DEFAULT_VALUES,\n    KINOBI_ERROR__VISITORS__INVALID_INSTRUCTION_DEFAULT_VALUE_DEPENDENCY,\n    KinobiError,\n} from '@kinobi-so/errors';\nimport {\n    AccountValueNode,\n    accountValueNode,\n    ArgumentValueNode,\n    argumentValueNode,\n    CamelCaseString,\n    getAllInstructionArguments,\n    InstructionAccountNode,\n    InstructionArgumentNode,\n    InstructionInputValueNode,\n    InstructionNode,\n    isNode,\n    VALUE_NODES,\n} from '@kinobi-so/nodes';\n\nimport { singleNodeVisitor } from './singleNodeVisitor';\nimport { Visitor } from './visitor';\n\nexport type ResolvedInstructionInput = ResolvedInstructionAccount | ResolvedInstructionArgument;\nexport type ResolvedInstructionAccount = InstructionAccountNode & {\n    dependsOn: InstructionDependency[];\n    isPda: boolean;\n    resolvedIsOptional: boolean;\n    resolvedIsSigner: boolean | 'either';\n};\nexport type ResolvedInstructionArgument = InstructionArgumentNode & {\n    dependsOn: InstructionDependency[];\n};\ntype InstructionInput = InstructionAccountNode | InstructionArgumentNode;\ntype InstructionDependency = AccountValueNode | ArgumentValueNode;\n\nexport function getResolvedInstructionInputsVisitor(\n    options: { includeDataArgumentValueNodes?: boolean } = {},\n): Visitor<ResolvedInstructionInput[], 'instructionNode'> {\n    const includeDataArgumentValueNodes = options.includeDataArgumentValueNodes ?? false;\n    let stack: InstructionInput[] = [];\n    let resolved: ResolvedInstructionInput[] = [];\n    let visitedAccounts = new Map<string, ResolvedInstructionAccount>();\n    let visitedArgs = new Map<string, ResolvedInstructionArgument>();\n\n    function resolveInstructionInput(instruction: InstructionNode, input: InstructionInput): void {\n        // Ensure we don't visit the same input twice.\n        if (\n            (isNode(input, 'instructionAccountNode') && visitedAccounts.has(input.name)) ||\n            (isNode(input, 'instructionArgumentNode') && visitedArgs.has(input.name))\n        ) {\n            return;\n        }\n\n        // Ensure we don't have a circular dependency.\n        const isCircular = stack.some(({ kind, name }) => kind === input.kind && name === input.name);\n        if (isCircular) {\n            const cycle = [...stack, input];\n            throw new KinobiError(\n                KINOBI_ERROR__VISITORS__CYCLIC_DEPENDENCY_DETECTED_WHEN_RESOLVING_INSTRUCTION_DEFAULT_VALUES,\n                {\n                    cycle,\n                    formattedCycle: cycle.map(({ name }) => name).join(' -> '),\n                    instruction,\n                    instructionName: instruction.name,\n                },\n            );\n        }\n\n        // Resolve whilst keeping track of the stack.\n        stack.push(input);\n        const localResolved =\n            input.kind === 'instructionAccountNode'\n                ? resolveInstructionAccount(instruction, input)\n                : resolveInstructionArgument(instruction, input);\n        stack.pop();\n\n        // Store the resolved input.\n        resolved.push(localResolved);\n        if (localResolved.kind === 'instructionAccountNode') {\n            visitedAccounts.set(input.name, localResolved);\n        } else {\n            visitedArgs.set(input.name, localResolved);\n        }\n    }\n\n    function resolveInstructionAccount(\n        instruction: InstructionNode,\n        account: InstructionAccountNode,\n    ): ResolvedInstructionAccount {\n        // Find and visit dependencies first.\n        const dependsOn = getInstructionDependencies(account);\n        resolveInstructionDependencies(instruction, account, dependsOn);\n\n        const localResolved: ResolvedInstructionAccount = {\n            ...account,\n            dependsOn,\n            isPda: getAllInstructionArguments(instruction).some(\n                argument =>\n                    isNode(argument.defaultValue, 'accountBumpValueNode') &&\n                    argument.defaultValue.name === account.name,\n            ),\n            resolvedIsOptional: account.isOptional,\n            resolvedIsSigner: account.isSigner,\n        };\n\n        switch (localResolved.defaultValue?.kind) {\n            case 'accountValueNode':\n                const defaultAccount = visitedAccounts.get(localResolved.defaultValue.name)!;\n                const resolvedIsPublicKey = account.isSigner === false && defaultAccount.isSigner === false;\n                const resolvedIsSigner = account.isSigner === true && defaultAccount.isSigner === true;\n                const resolvedIsOptionalSigner = !resolvedIsPublicKey && !resolvedIsSigner;\n                localResolved.resolvedIsSigner = resolvedIsOptionalSigner ? 'either' : resolvedIsSigner;\n                localResolved.resolvedIsOptional = defaultAccount.isOptional;\n                break;\n            case 'publicKeyValueNode':\n            case 'programLinkNode':\n            case 'programIdValueNode':\n                localResolved.resolvedIsSigner = account.isSigner === false ? false : 'either';\n                localResolved.resolvedIsOptional = false;\n                break;\n            case 'pdaValueNode':\n                localResolved.resolvedIsSigner = account.isSigner === false ? false : 'either';\n                localResolved.resolvedIsOptional = false;\n                const { seeds } = localResolved.defaultValue;\n                seeds.forEach(seed => {\n                    if (!isNode(seed.value, 'accountValueNode')) return;\n                    const dependency = visitedAccounts.get(seed.value.name)!;\n                    if (dependency.resolvedIsOptional) {\n                        throw new KinobiError(KINOBI_ERROR__VISITORS__CANNOT_USE_OPTIONAL_ACCOUNT_AS_PDA_SEED_VALUE, {\n                            instruction: instruction,\n                            instructionAccount: account,\n                            instructionAccountName: account.name,\n                            instructionName: instruction.name,\n                            seed,\n                            seedName: seed.name,\n                            seedValueName: seed.value.name,\n                        });\n                    }\n                });\n                break;\n            case 'identityValueNode':\n            case 'payerValueNode':\n            case 'resolverValueNode':\n                localResolved.resolvedIsOptional = false;\n                break;\n            default:\n                break;\n        }\n\n        return localResolved;\n    }\n\n    function resolveInstructionArgument(\n        instruction: InstructionNode,\n        argument: InstructionArgumentNode,\n    ): ResolvedInstructionArgument {\n        // Find and visit dependencies first.\n        const dependsOn = getInstructionDependencies(argument);\n        resolveInstructionDependencies(instruction, argument, dependsOn);\n\n        return { ...argument, dependsOn };\n    }\n\n    function resolveInstructionDependencies(\n        instruction: InstructionNode,\n        parent: InstructionInput,\n        dependencies: InstructionDependency[],\n    ): void {\n        dependencies.forEach(dependency => {\n            let input: InstructionInput | null = null;\n            if (isNode(dependency, 'accountValueNode')) {\n                const dependencyAccount = instruction.accounts.find(a => a.name === dependency.name);\n                if (!dependencyAccount) {\n                    throw new KinobiError(KINOBI_ERROR__VISITORS__INVALID_INSTRUCTION_DEFAULT_VALUE_DEPENDENCY, {\n                        dependency,\n                        dependencyKind: dependency.kind,\n                        dependencyName: dependency.name,\n                        instruction,\n                        instructionName: instruction.name,\n                        parent,\n                        parentKind: parent.kind,\n                        parentName: parent.name,\n                    });\n                }\n                input = { ...dependencyAccount };\n            } else if (isNode(dependency, 'argumentValueNode')) {\n                const dependencyArgument = getAllInstructionArguments(instruction).find(\n                    a => a.name === dependency.name,\n                );\n                if (!dependencyArgument) {\n                    throw new KinobiError(KINOBI_ERROR__VISITORS__INVALID_INSTRUCTION_DEFAULT_VALUE_DEPENDENCY, {\n                        dependency,\n                        dependencyKind: dependency.kind,\n                        dependencyName: dependency.name,\n                        instruction,\n                        instructionName: instruction.name,\n                        parent,\n                        parentKind: parent.kind,\n                        parentName: parent.name,\n                    });\n                }\n                input = { ...dependencyArgument };\n            }\n            if (input) {\n                resolveInstructionInput(instruction, input);\n            }\n        });\n    }\n\n    return singleNodeVisitor('instructionNode', (node): ResolvedInstructionInput[] => {\n        // Ensure we always start with a clean slate.\n        stack = [];\n        resolved = [];\n        visitedAccounts = new Map();\n        visitedArgs = new Map();\n\n        const inputs: InstructionInput[] = [\n            ...node.accounts,\n            ...node.arguments.filter(a => {\n                if (includeDataArgumentValueNodes) return a.defaultValue;\n                return a.defaultValue && !isNode(a.defaultValue, VALUE_NODES);\n            }),\n            ...(node.extraArguments ?? []).filter(a => a.defaultValue),\n        ];\n\n        // Visit all instruction accounts.\n        inputs.forEach(input => {\n            resolveInstructionInput(node, input);\n        });\n\n        return resolved;\n    });\n}\n\nexport function deduplicateInstructionDependencies(dependencies: InstructionDependency[]): InstructionDependency[] {\n    const accounts = new Map<CamelCaseString, InstructionDependency>();\n    const args = new Map<CamelCaseString, InstructionDependency>();\n    dependencies.forEach(dependency => {\n        if (isNode(dependency, 'accountValueNode')) {\n            accounts.set(dependency.name, dependency);\n        } else if (isNode(dependency, 'argumentValueNode')) {\n            args.set(dependency.name, dependency);\n        }\n    });\n    return [...accounts.values(), ...args.values()];\n}\n\nexport function getInstructionDependencies(input: InstructionInput | InstructionNode): InstructionDependency[] {\n    if (isNode(input, 'instructionNode')) {\n        return deduplicateInstructionDependencies([\n            ...input.accounts.flatMap(getInstructionDependencies),\n            ...input.arguments.flatMap(getInstructionDependencies),\n            ...(input.extraArguments ?? []).flatMap(getInstructionDependencies),\n        ]);\n    }\n\n    if (!input.defaultValue) return [];\n\n    const getNestedDependencies = (defaultValue: InstructionInputValueNode | undefined): InstructionDependency[] => {\n        if (!defaultValue) return [];\n        return getInstructionDependencies({ ...input, defaultValue });\n    };\n\n    if (isNode(input.defaultValue, ['accountValueNode', 'accountBumpValueNode'])) {\n        return [accountValueNode(input.defaultValue.name)];\n    }\n\n    if (isNode(input.defaultValue, ['argumentValueNode'])) {\n        return [argumentValueNode(input.defaultValue.name)];\n    }\n\n    if (isNode(input.defaultValue, 'pdaValueNode')) {\n        const dependencies = new Map<CamelCaseString, InstructionDependency>();\n        input.defaultValue.seeds.forEach(seed => {\n            if (isNode(seed.value, ['accountValueNode', 'argumentValueNode'])) {\n                dependencies.set(seed.value.name, { ...seed.value });\n            }\n        });\n        return [...dependencies.values()];\n    }\n\n    if (isNode(input.defaultValue, 'resolverValueNode')) {\n        return input.defaultValue.dependsOn ?? [];\n    }\n\n    if (isNode(input.defaultValue, 'conditionalValueNode')) {\n        return deduplicateInstructionDependencies([\n            ...getNestedDependencies(input.defaultValue.condition),\n            ...getNestedDependencies(input.defaultValue.ifTrue),\n            ...getNestedDependencies(input.defaultValue.ifFalse),\n        ]);\n    }\n\n    return [];\n}\n","import { Node, NodeKind, REGISTERED_NODE_KINDS } from '@kinobi-so/nodes';\n\nimport { identityVisitor } from './identityVisitor';\nimport { Visitor } from './visitor';\n\nexport function nonNullableIdentityVisitor<TNodeKind extends NodeKind = NodeKind>(\n    nodeKeys: TNodeKind[] = REGISTERED_NODE_KINDS as TNodeKind[],\n): Visitor<Node, TNodeKind> {\n    return identityVisitor<TNodeKind>(nodeKeys) as Visitor<Node, TNodeKind>;\n}\n","import { NodeKind } from '@kinobi-so/nodes';\n\nimport { interceptVisitor } from './interceptVisitor';\nimport { nonNullableIdentityVisitor } from './nonNullableIdentityVisitor';\n\nexport function removeDocsVisitor<TNodeKind extends NodeKind = NodeKind>(nodeKeys?: TNodeKind[]) {\n    return interceptVisitor(nonNullableIdentityVisitor(nodeKeys), (node, next) => {\n        if ('docs' in node) {\n            return next({ ...node, docs: [] });\n        }\n        return next(node);\n    });\n}\n","import stringify from 'json-stable-stringify';\n\nimport { mapVisitor } from './mapVisitor';\nimport { removeDocsVisitor } from './removeDocsVisitor';\nimport { staticVisitor } from './staticVisitor';\nimport { Visitor } from './visitor';\n\nexport function getUniqueHashStringVisitor(options: { removeDocs?: boolean } = {}): Visitor<string> {\n    const removeDocs = options.removeDocs ?? false;\n    if (!removeDocs) {\n        return staticVisitor(node => stringify(node));\n    }\n    return mapVisitor(removeDocsVisitor(), node => stringify(node));\n}\n","import type { NodeKind } from '@kinobi-so/nodes';\n\nimport { interceptVisitor, VisitorInterceptor } from './interceptVisitor';\nimport { Visitor } from './visitor';\n\nexport function interceptFirstVisitVisitor<TReturn, TNodeKind extends NodeKind>(\n    visitor: Visitor<TReturn, TNodeKind>,\n    interceptor: VisitorInterceptor<TReturn>,\n): Visitor<TReturn, TNodeKind> {\n    let isFirstVisit = true;\n\n    return interceptVisitor(visitor, (node, next) => {\n        try {\n            if (isFirstVisit) {\n                isFirstVisit = false;\n                const result = interceptor(node, next);\n                isFirstVisit = true;\n                return result;\n            }\n            return next(node);\n        } catch (error) {\n            isFirstVisit = true;\n            throw error;\n        }\n    });\n}\n","import type { NodeKind } from '@kinobi-so/nodes';\n\nimport { mergeVisitor } from './mergeVisitor';\nimport { Visitor } from './visitor';\n\nexport function voidVisitor<TNodeKind extends NodeKind = NodeKind>(nodeKeys?: TNodeKind[]): Visitor<void, TNodeKind> {\n    return mergeVisitor(\n        () => undefined,\n        () => undefined,\n        nodeKeys,\n    );\n}\n","import { isNode, type NodeKind } from '@kinobi-so/nodes';\n\nimport { interceptFirstVisitVisitor } from './interceptFirstVisitVisitor';\nimport { interceptVisitor } from './interceptVisitor';\nimport { LINKABLE_NODES, LinkableDictionary } from './LinkableDictionary';\nimport { pipe } from './pipe';\nimport { recordNodeStackVisitor } from './recordNodeStackVisitor';\nimport { visit, Visitor } from './visitor';\nimport { voidVisitor } from './voidVisitor';\n\nexport function recordLinkablesVisitor<TReturn, TNodeKind extends NodeKind>(\n    visitor: Visitor<TReturn, TNodeKind>,\n    linkables: LinkableDictionary,\n): Visitor<TReturn, TNodeKind> {\n    const recordingVisitor = pipe(\n        voidVisitor(),\n        v =>\n            interceptVisitor(v, (node, next) => {\n                if (isNode(node, LINKABLE_NODES)) {\n                    linkables.record(node);\n                }\n                return next(node);\n            }),\n        v => recordNodeStackVisitor(v, linkables.stack),\n    );\n\n    return pipe(\n        visitor,\n        v =>\n            interceptFirstVisitVisitor(v, (node, next) => {\n                visit(node, recordingVisitor);\n                return next(node);\n            }),\n        v => recordNodeStackVisitor(v, linkables.stack),\n    );\n}\n","import { GetNodeFromKind, NodeKind } from '@kinobi-so/nodes';\n\nimport { getVisitFunctionName, GetVisitorFunctionName, Visitor } from './visitor';\n\nexport function tapVisitor<TReturn, TNodeKey extends NodeKind, TVisitor extends Visitor<TReturn, TNodeKey>>(\n    visitor: TVisitor,\n    key: TNodeKey,\n    tap: (node: GetNodeFromKind<TNodeKey>) => void,\n): TVisitor {\n    const newVisitor = { ...visitor };\n    newVisitor[getVisitFunctionName(key)] = function tappedVisitNode(\n        this: TVisitor,\n        node: GetNodeFromKind<TNodeKey>,\n    ): TReturn {\n        tap(node);\n        const parentFunction = visitor[getVisitFunctionName(key)] as (node: GetNodeFromKind<TNodeKey>) => TReturn;\n        return parentFunction.bind(this)(node);\n    } as TVisitor[GetVisitorFunctionName<TNodeKey>];\n\n    return newVisitor;\n}\n"]}