UNPKG

@codama/visitors

Version:

All visitors for the Codama framework

1 lines 114 kB
{"version":3,"sources":["../src/addPdasVisitor.ts","../src/flattenInstructionDataArgumentsVisitor.ts","../src/createSubInstructionsFromEnumArgsVisitor.ts","../src/deduplicateIdenticalDefinedTypesVisitor.ts","../src/fillDefaultPdaSeedValuesVisitor.ts","../src/flattenStructVisitor.ts","../src/getDefinedTypeHistogramVisitor.ts","../src/setAccountDiscriminatorFromFieldVisitor.ts","../src/setFixedAccountSizesVisitor.ts","../src/setInstructionAccountDefaultValuesVisitor.ts","../src/setInstructionDiscriminatorsVisitor.ts","../src/setNumberWrappersVisitor.ts","../src/setStructDefaultValuesVisitor.ts","../src/transformDefinedTypesIntoAccountsVisitor.ts","../src/transformU8ArraysToBytesVisitor.ts","../src/unwrapDefinedTypesVisitor.ts","../src/unwrapInstructionArgsDefinedTypesVisitor.ts","../src/unwrapTupleEnumWithSingleStructVisitor.ts","../src/unwrapTypeDefinedLinksVisitor.ts","../src/renameHelpers.ts","../src/updateAccountsVisitor.ts","../src/updateDefinedTypesVisitor.ts","../src/updateErrorsVisitor.ts","../src/updateInstructionsVisitor.ts","../src/updateProgramsVisitor.ts"],"names":["bottomUpTransformerVisitor","camelCase","assertIsNode","CodamaError","CODAMA_ERROR__VISITORS__CANNOT_ADD_DUPLICATED_PDA_NAMES","programNode","pdaNode","instructionNode","nodes","isNode","instructionArgumentNode","CODAMA_ERROR__VISITORS__CANNOT_FLATTEN_STRUCT_WITH_CONFLICTING_ATTRIBUTES","LinkableDictionary","CODAMA_ERROR__VISITORS__INSTRUCTION_ENUM_ARGUMENT_NOT_FOUND","numberValueNode","numberTypeNode","pipe","recordLinkablesOnFirstVisitVisitor","rootNodeVisitor","getAllPrograms","getUniqueHashStringVisitor","visit","deleteNodesVisitor","getLastNodeFromPath","identityVisitor","INSTRUCTION_INPUT_VALUE_NODES","extendVisitor","CODAMA_ERROR__VISITORS__INVALID_PDA_SEED_VALUES","pdaValueNode","pdaSeedValueNode","accountValueNode","getAllInstructionArguments","argumentValueNode","isNodeFilter","structTypeNode","NodeStack","mergeVisitor","interceptVisitor","findProgramNodeFromPath","recordNodeStackVisitor","resolveNestedTypeNode","CODAMA_ERROR__VISITORS__ACCOUNT_FIELD_NOT_FOUND","accountNode","transformNestedTypeNode","structFieldTypeNode","fieldDiscriminatorNode","topDownTransformerVisitor","isNodePath","getByteSizeVisitor","payerValueNode","identityValueNode","programIdValueNode","publicKeyValueNode","nonNullableIdentityVisitor","assertIsNestedTypeNode","dateTimeTypeNode","solAmountTypeNode","amountTypeNode","CODAMA_ERROR__VISITORS__INVALID_NUMBER_WRAPPER","TYPE_NODES","fixedSizeTypeNode","bytesTypeNode","arrayTypeNode","assertIsNodeFilter","getRecordLinkablesVisitor","definedTypeLinkNode","getNodeSelectorFunction","REGISTERED_NODE_KINDS","getAllDefinedTypes","enumStructVariantTypeNode","enumTypeNode","enumTupleVariantTypeNode","enumEmptyVariantTypeNode","pdaLinkNode","accountLinkNode","definedTypeNode","errorNode","instructionAccountNode","programLinkNode"],"mappings":"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","file":"index.browser.cjs","sourcesContent":["import { CODAMA_ERROR__VISITORS__CANNOT_ADD_DUPLICATED_PDA_NAMES, CodamaError } from '@codama/errors';\nimport { assertIsNode, camelCase, pdaNode, PdaNodeInput, programNode } from '@codama/nodes';\nimport { bottomUpTransformerVisitor } from '@codama/visitors-core';\n\nexport function addPdasVisitor(pdas: Record<string, Omit<PdaNodeInput, 'programId'>[]>) {\n    return bottomUpTransformerVisitor(\n        Object.entries(pdas).map(([uncasedProgramName, newPdas]) => {\n            const programName = camelCase(uncasedProgramName);\n            return {\n                select: `[programNode]${programName}`,\n                transform: node => {\n                    assertIsNode(node, 'programNode');\n                    const existingPdaNames = new Set((node.pdas ?? []).map(pda => pda.name));\n                    const newPdaNames = new Set(newPdas.map(pda => pda.name));\n                    const overlappingPdaNames = new Set([...existingPdaNames].filter(name => newPdaNames.has(name)));\n                    if (overlappingPdaNames.size > 0) {\n                        throw new CodamaError(CODAMA_ERROR__VISITORS__CANNOT_ADD_DUPLICATED_PDA_NAMES, {\n                            duplicatedPdaNames: [...overlappingPdaNames],\n                            program: node,\n                            programName: node.name,\n                        });\n                    }\n                    return programNode({\n                        ...node,\n                        pdas: [\n                            ...(node.pdas ?? []),\n                            ...newPdas.map(({ name, seeds, docs }) => pdaNode({ docs, name, seeds })),\n                        ],\n                    });\n                },\n            };\n        }),\n    );\n}\n","import { CODAMA_ERROR__VISITORS__CANNOT_FLATTEN_STRUCT_WITH_CONFLICTING_ATTRIBUTES, CodamaError } from '@codama/errors';\nimport {\n    assertIsNode,\n    camelCase,\n    InstructionArgumentNode,\n    instructionArgumentNode,\n    instructionNode,\n    isNode,\n} from '@codama/nodes';\nimport { bottomUpTransformerVisitor } from '@codama/visitors-core';\n\nexport function flattenInstructionDataArgumentsVisitor() {\n    return bottomUpTransformerVisitor([\n        {\n            select: '[instructionNode]',\n            transform: instruction => {\n                assertIsNode(instruction, 'instructionNode');\n                return instructionNode({\n                    ...instruction,\n                    arguments: flattenInstructionArguments(instruction.arguments ?? []),\n                });\n            },\n        },\n    ]);\n}\n\nexport type FlattenInstructionArgumentsConfig = string[] | '*';\n\nexport const flattenInstructionArguments = (\n    nodes: InstructionArgumentNode[],\n    options: FlattenInstructionArgumentsConfig = '*',\n): InstructionArgumentNode[] => {\n    const camelCaseOptions = options === '*' ? options : options.map(camelCase);\n    const shouldInline = (node: InstructionArgumentNode): boolean =>\n        options === '*' || camelCaseOptions.includes(camelCase(node.name));\n    const inlinedArguments = nodes.flatMap(node => {\n        if (isNode(node.type, 'structTypeNode') && shouldInline(node)) {\n            return (node.type.fields ?? []).map(field => instructionArgumentNode({ ...field }));\n        }\n        return node;\n    });\n\n    const inlinedFieldsNames = inlinedArguments.map(arg => arg.name);\n    const duplicates = inlinedFieldsNames.filter((e, i, a) => a.indexOf(e) !== i);\n    const uniqueDuplicates = [...new Set(duplicates)];\n    const hasConflictingNames = uniqueDuplicates.length > 0;\n\n    if (hasConflictingNames) {\n        throw new CodamaError(CODAMA_ERROR__VISITORS__CANNOT_FLATTEN_STRUCT_WITH_CONFLICTING_ATTRIBUTES, {\n            conflictingAttributes: uniqueDuplicates,\n        });\n    }\n\n    return hasConflictingNames ? nodes : inlinedArguments;\n};\n","import { CODAMA_ERROR__VISITORS__INSTRUCTION_ENUM_ARGUMENT_NOT_FOUND, CodamaError } from '@codama/errors';\nimport {\n    assertIsNode,\n    camelCase,\n    EnumTypeNode,\n    instructionArgumentNode,\n    InstructionNode,\n    instructionNode,\n    isNode,\n    numberTypeNode,\n    numberValueNode,\n} from '@codama/nodes';\nimport {\n    BottomUpNodeTransformerWithSelector,\n    bottomUpTransformerVisitor,\n    LinkableDictionary,\n    pipe,\n    recordLinkablesOnFirstVisitVisitor,\n} from '@codama/visitors-core';\n\nimport { flattenInstructionArguments } from './flattenInstructionDataArgumentsVisitor';\n\nexport function createSubInstructionsFromEnumArgsVisitor(map: Record<string, string>) {\n    const linkables = new LinkableDictionary();\n\n    const visitor = bottomUpTransformerVisitor(\n        Object.entries(map).map(([selector, argNameInput]): BottomUpNodeTransformerWithSelector => ({\n            select: ['[instructionNode]', selector],\n            transform: (node, stack) => {\n                assertIsNode(node, 'instructionNode');\n\n                const argFields = node.arguments ?? [];\n                const argName = camelCase(argNameInput);\n                const argFieldIndex = argFields.findIndex(field => field.name === argName);\n                const argField = argFieldIndex >= 0 ? argFields[argFieldIndex] : null;\n                if (!argField) {\n                    throw new CodamaError(CODAMA_ERROR__VISITORS__INSTRUCTION_ENUM_ARGUMENT_NOT_FOUND, {\n                        argumentName: argName,\n                        instruction: node,\n                        instructionName: node.name,\n                    });\n                }\n\n                let argType: EnumTypeNode;\n                if (isNode(argField.type, 'enumTypeNode')) {\n                    argType = argField.type;\n                } else if (\n                    isNode(argField.type, 'definedTypeLinkNode') &&\n                    linkables.has([...stack.getPath(), argField.type])\n                ) {\n                    const linkedType = linkables.get([...stack.getPath(), argField.type])?.type;\n                    assertIsNode(linkedType, 'enumTypeNode');\n                    argType = linkedType;\n                } else {\n                    throw new CodamaError(CODAMA_ERROR__VISITORS__INSTRUCTION_ENUM_ARGUMENT_NOT_FOUND, {\n                        argumentName: argName,\n                        instruction: node,\n                        instructionName: node.name,\n                    });\n                }\n\n                const subInstructions = (argType.variants ?? []).map((variant, index): InstructionNode => {\n                    const subName = camelCase(`${node.name} ${variant.name}`);\n                    const subFields = argFields.slice(0, argFieldIndex);\n                    subFields.push(\n                        instructionArgumentNode({\n                            defaultValue: numberValueNode(index),\n                            defaultValueStrategy: 'omitted',\n                            name: `${subName}Discriminator`,\n                            type: numberTypeNode('u8'),\n                        }),\n                    );\n                    if (isNode(variant, 'enumStructVariantTypeNode')) {\n                        subFields.push(\n                            instructionArgumentNode({\n                                ...argField,\n                                type: variant.struct,\n                            }),\n                        );\n                    } else if (isNode(variant, 'enumTupleVariantTypeNode')) {\n                        subFields.push(\n                            instructionArgumentNode({\n                                ...argField,\n                                type: variant.tuple,\n                            }),\n                        );\n                    }\n                    subFields.push(...argFields.slice(argFieldIndex + 1));\n\n                    return instructionNode({\n                        ...node,\n                        arguments: flattenInstructionArguments(subFields),\n                        name: subName,\n                    });\n                });\n\n                return instructionNode({\n                    ...node,\n                    subInstructions: [...(node.subInstructions ?? []), ...subInstructions],\n                });\n            },\n        })),\n    );\n\n    return pipe(visitor, v => recordLinkablesOnFirstVisitVisitor(v, linkables));\n}\n","import { assertIsNode, DefinedTypeNode, getAllPrograms, ProgramNode } from '@codama/nodes';\nimport {\n    deleteNodesVisitor,\n    getUniqueHashStringVisitor,\n    NodeSelector,\n    rootNodeVisitor,\n    visit,\n} from '@codama/visitors-core';\n\ntype DefinedTypeWithProgram = {\n    program: ProgramNode;\n    type: DefinedTypeNode;\n};\n\nexport function deduplicateIdenticalDefinedTypesVisitor() {\n    return rootNodeVisitor(root => {\n        const typeMap = new Map<string, DefinedTypeWithProgram[]>();\n\n        // Fill the type map with all defined types.\n        const allPrograms = getAllPrograms(root);\n        allPrograms.forEach(program => {\n            (program.definedTypes ?? []).forEach(type => {\n                const typeWithProgram = { program, type };\n                const list = typeMap.get(type.name) ?? [];\n                typeMap.set(type.name, [...list, typeWithProgram]);\n            });\n        });\n\n        // Remove all types that are not duplicated.\n        typeMap.forEach((list, name) => {\n            if (list.length <= 1) {\n                typeMap.delete(name);\n            }\n        });\n\n        // Remove duplicates whose types are not equal.\n        const hashVisitor = getUniqueHashStringVisitor({ removeDocs: true });\n        typeMap.forEach((list, name) => {\n            const types = list.map(item => visit(item.type, hashVisitor));\n            const typesAreEqual = types.every((type, _, arr) => type === arr[0]);\n            if (!typesAreEqual) {\n                typeMap.delete(name);\n            }\n        });\n\n        // Get the selectors for all defined types that needs deleting.\n        // Thus, we must select all but the first duplicate of each list.\n        const deleteSelectors = Array.from(typeMap.values())\n            // Order lists by program index, get their tails and flatten.\n            .flatMap(list => {\n                const sortedList = list.sort((a, b) => allPrograms.indexOf(a.program) - allPrograms.indexOf(b.program));\n                const [, ...sortedListTail] = sortedList;\n                return sortedListTail;\n            })\n            // Get selectors from the defined types and their programs.\n            .map(({ program, type }): NodeSelector => `[programNode]${program.name}.[definedTypeNode]${type.name}`);\n\n        // Delete the identified nodes if any.\n        if (deleteSelectors.length > 0) {\n            const newRoot = visit(root, deleteNodesVisitor(deleteSelectors));\n            assertIsNode(newRoot, 'rootNode');\n            return newRoot;\n        }\n\n        return root;\n    });\n}\n","import { CODAMA_ERROR__VISITORS__INVALID_PDA_SEED_VALUES, CodamaError } from '@codama/errors';\nimport {\n    accountValueNode,\n    argumentValueNode,\n    assertIsNode,\n    getAllInstructionArguments,\n    INSTRUCTION_INPUT_VALUE_NODES,\n    InstructionInputValueNode,\n    InstructionNode,\n    isNode,\n    isNodeFilter,\n    PdaNode,\n    PdaSeedValueNode,\n    pdaSeedValueNode,\n    pdaValueNode,\n} from '@codama/nodes';\nimport {\n    extendVisitor,\n    getLastNodeFromPath,\n    identityVisitor,\n    LinkableDictionary,\n    NodePath,\n    pipe,\n    Visitor,\n} from '@codama/visitors-core';\n\n/**\n * Fills in default values for variable PDA seeds that are not explicitly provided.\n * Namely, public key seeds are filled with an accountValueNode using the seed name\n * and other types of seeds are filled with an argumentValueNode using the seed name.\n *\n * An instruction and linkable dictionary are required to determine which seeds are\n * valids and to find the pdaLinkNode for the seed respectively. Any invalid default\n * seed won't be filled in.\n *\n * Strict mode goes one step further and will throw an error if the final array of\n * pdaSeedValueNodes contains invalid seeds or if there aren't enough variable seeds.\n */\nexport function fillDefaultPdaSeedValuesVisitor(\n    instructionPath: NodePath<InstructionNode>,\n    linkables: LinkableDictionary,\n    strictMode: boolean = false,\n) {\n    const instruction = getLastNodeFromPath(instructionPath);\n    return pipe(identityVisitor({ keys: INSTRUCTION_INPUT_VALUE_NODES }), v =>\n        extendVisitor(v, {\n            visitPdaValue(node, { next }) {\n                const visitedNode = next(node);\n                assertIsNode(visitedNode, 'pdaValueNode');\n                const foundPda = isNode(visitedNode.pda, 'pdaNode')\n                    ? visitedNode.pda\n                    : linkables.get([...instructionPath, visitedNode.pda]);\n                if (!foundPda) return visitedNode;\n                const seeds = addDefaultSeedValuesFromPdaWhenMissing(instruction, foundPda, visitedNode.seeds ?? []);\n                if (strictMode && !allSeedsAreValid(instruction, foundPda, seeds)) {\n                    throw new CodamaError(CODAMA_ERROR__VISITORS__INVALID_PDA_SEED_VALUES, {\n                        instruction,\n                        instructionName: instruction.name,\n                        pda: foundPda,\n                        pdaName: foundPda.name,\n                    });\n                }\n                return pdaValueNode(visitedNode.pda, seeds);\n            },\n        }),\n    ) as Visitor<InstructionInputValueNode, InstructionInputValueNode['kind']>;\n}\n\nfunction addDefaultSeedValuesFromPdaWhenMissing(\n    instruction: InstructionNode,\n    pda: PdaNode,\n    existingSeeds: PdaSeedValueNode[],\n): PdaSeedValueNode[] {\n    const existingSeedNames = new Set(existingSeeds.map(seed => seed.name));\n    const defaultSeeds = getDefaultSeedValuesFromPda(instruction, pda).filter(\n        seed => !existingSeedNames.has(seed.name),\n    );\n    return [...existingSeeds, ...defaultSeeds];\n}\n\nfunction getDefaultSeedValuesFromPda(instruction: InstructionNode, pda: PdaNode): PdaSeedValueNode[] {\n    return (pda.seeds ?? []).flatMap((seed): PdaSeedValueNode[] => {\n        if (!isNode(seed, 'variablePdaSeedNode')) return [];\n\n        const hasMatchingAccount = (instruction.accounts ?? []).some(a => a.name === seed.name);\n        if (isNode(seed.type, 'publicKeyTypeNode') && hasMatchingAccount) {\n            return [pdaSeedValueNode(seed.name, accountValueNode(seed.name))];\n        }\n\n        const hasMatchingArgument = getAllInstructionArguments(instruction).some(a => a.name === seed.name);\n        if (hasMatchingArgument) {\n            return [pdaSeedValueNode(seed.name, argumentValueNode(seed.name))];\n        }\n\n        return [];\n    });\n}\n\nfunction allSeedsAreValid(instruction: InstructionNode, foundPda: PdaNode, seeds: PdaSeedValueNode[]) {\n    const hasAllVariableSeeds =\n        (foundPda.seeds ?? []).filter(isNodeFilter('variablePdaSeedNode')).length === seeds.length;\n    const allAccountsName = (instruction.accounts ?? []).map(a => a.name);\n    const allArgumentsName = getAllInstructionArguments(instruction).map(a => a.name);\n    const validSeeds = seeds.every(seed => {\n        if (isNode(seed.value, 'accountValueNode')) {\n            return allAccountsName.includes(seed.value.name);\n        }\n        if (isNode(seed.value, 'argumentValueNode')) {\n            return allArgumentsName.includes(seed.value.name);\n        }\n        return true;\n    });\n\n    return hasAllVariableSeeds && validSeeds;\n}\n","import { CODAMA_ERROR__VISITORS__CANNOT_FLATTEN_STRUCT_WITH_CONFLICTING_ATTRIBUTES, CodamaError } from '@codama/errors';\nimport {\n    assertIsNode,\n    camelCase,\n    isNode,\n    Node,\n    StructFieldTypeNode,\n    StructTypeNode,\n    structTypeNode,\n} from '@codama/nodes';\nimport { BottomUpNodeTransformerWithSelector, bottomUpTransformerVisitor } from '@codama/visitors-core';\n\nexport type FlattenStructOptions = string[] | '*';\n\nexport function flattenStructVisitor(map: Record<string, FlattenStructOptions>) {\n    return bottomUpTransformerVisitor(\n        Object.entries(map).map(([stack, options]): BottomUpNodeTransformerWithSelector => ({\n            select: `${stack}.[structTypeNode]`,\n            transform: node => flattenStruct(node, options),\n        })),\n    );\n}\n\nexport const flattenStruct = (node: Node, options: FlattenStructOptions = '*'): StructTypeNode => {\n    assertIsNode(node, 'structTypeNode');\n    const camelCaseOptions = options === '*' ? options : options.map(camelCase);\n    const shouldInline = (field: StructFieldTypeNode): boolean =>\n        options === '*' || camelCaseOptions.includes(camelCase(field.name));\n    const inlinedFields = (node.fields ?? []).flatMap(field => {\n        if (isNode(field.type, 'structTypeNode') && shouldInline(field)) {\n            return field.type.fields ?? [];\n        }\n        return [field];\n    });\n\n    const inlinedFieldsNames = inlinedFields.map(arg => arg.name);\n    const duplicates = inlinedFieldsNames.filter((e, i, a) => a.indexOf(e) !== i);\n    const uniqueDuplicates = [...new Set(duplicates)];\n    const hasConflictingNames = uniqueDuplicates.length > 0;\n\n    if (hasConflictingNames) {\n        throw new CodamaError(CODAMA_ERROR__VISITORS__CANNOT_FLATTEN_STRUCT_WITH_CONFLICTING_ATTRIBUTES, {\n            conflictingAttributes: uniqueDuplicates,\n        });\n    }\n\n    return hasConflictingNames ? node : structTypeNode(inlinedFields);\n};\n","import { CamelCaseString } from '@codama/nodes';\nimport {\n    extendVisitor,\n    findProgramNodeFromPath,\n    interceptVisitor,\n    mergeVisitor,\n    NodeStack,\n    pipe,\n    recordNodeStackVisitor,\n    visit,\n    Visitor,\n} from '@codama/visitors-core';\n\ntype DefinedTypeHistogramKey = CamelCaseString | `${CamelCaseString}.${CamelCaseString}`;\n\nexport type DefinedTypeHistogram = {\n    [key: DefinedTypeHistogramKey]: {\n        directlyAsInstructionArgs: number;\n        inAccounts: number;\n        inDefinedTypes: number;\n        inEvents: number;\n        inInstructionArgs: number;\n        total: number;\n    };\n};\n\nfunction mergeHistograms(histograms: DefinedTypeHistogram[]): DefinedTypeHistogram {\n    const result: DefinedTypeHistogram = {};\n\n    histograms.forEach(histogram => {\n        Object.keys(histogram).forEach(key => {\n            const mainCaseKey = key as CamelCaseString;\n            if (result[mainCaseKey] === undefined) {\n                result[mainCaseKey] = histogram[mainCaseKey];\n            } else {\n                result[mainCaseKey].total += histogram[mainCaseKey].total;\n                result[mainCaseKey].inAccounts += histogram[mainCaseKey].inAccounts;\n                result[mainCaseKey].inDefinedTypes += histogram[mainCaseKey].inDefinedTypes;\n                result[mainCaseKey].inEvents += histogram[mainCaseKey].inEvents;\n                result[mainCaseKey].inInstructionArgs += histogram[mainCaseKey].inInstructionArgs;\n                result[mainCaseKey].directlyAsInstructionArgs += histogram[mainCaseKey].directlyAsInstructionArgs;\n            }\n        });\n    });\n\n    return result;\n}\n\nexport function getDefinedTypeHistogramVisitor(): Visitor<DefinedTypeHistogram> {\n    const stack = new NodeStack();\n    let mode: 'account' | 'definedType' | 'event' | 'instruction' | null = null;\n    let stackLevel = 0;\n\n    return pipe(\n        mergeVisitor(\n            () => ({}) as DefinedTypeHistogram,\n            (_, histograms) => mergeHistograms(histograms),\n        ),\n        v =>\n            interceptVisitor(v, (node, next) => {\n                stackLevel += 1;\n                const newNode = next(node);\n                stackLevel -= 1;\n                return newNode;\n            }),\n        v =>\n            extendVisitor(v, {\n                visitAccount(node, { self }) {\n                    mode = 'account';\n                    stackLevel = 0;\n                    const histogram = visit(node.data, self);\n                    mode = null;\n                    return histogram;\n                },\n\n                visitDefinedType(node, { self }) {\n                    mode = 'definedType';\n                    stackLevel = 0;\n                    const histogram = visit(node.type, self);\n                    mode = null;\n                    return histogram;\n                },\n\n                visitDefinedTypeLink(node) {\n                    const program = findProgramNodeFromPath(stack.getPath());\n                    const key = program ? `${program.name}.${node.name}` : node.name;\n                    return {\n                        [key]: {\n                            directlyAsInstructionArgs: Number(mode === 'instruction' && stackLevel <= 1),\n                            inAccounts: Number(mode === 'account'),\n                            inDefinedTypes: Number(mode === 'definedType'),\n                            inEvents: Number(mode === 'event'),\n                            inInstructionArgs: Number(mode === 'instruction'),\n                            total: 1,\n                        },\n                    };\n                },\n\n                visitEvent(node, { self }) {\n                    mode = 'event';\n                    stackLevel = 0;\n                    const histogram = visit(node.data, self);\n                    mode = null;\n                    return histogram;\n                },\n\n                visitInstruction(node, { self }) {\n                    mode = 'instruction';\n                    stackLevel = 0;\n                    const dataHistograms = (node.arguments ?? []).map(arg => visit(arg, self));\n                    const extraHistograms = (node.extraArguments ?? []).map(arg => visit(arg, self));\n                    mode = null;\n                    const subHistograms = (node.subInstructions ?? []).map(ix => visit(ix, self));\n                    return mergeHistograms([...dataHistograms, ...extraHistograms, ...subHistograms]);\n                },\n            }),\n        v => recordNodeStackVisitor(v, stack),\n    );\n}\n","import { CODAMA_ERROR__VISITORS__ACCOUNT_FIELD_NOT_FOUND, CodamaError } from '@codama/errors';\nimport {\n    accountNode,\n    assertIsNode,\n    camelCase,\n    fieldDiscriminatorNode,\n    resolveNestedTypeNode,\n    structFieldTypeNode,\n    structTypeNode,\n    transformNestedTypeNode,\n    ValueNode,\n} from '@codama/nodes';\nimport { BottomUpNodeTransformerWithSelector, bottomUpTransformerVisitor } from '@codama/visitors-core';\n\nexport function setAccountDiscriminatorFromFieldVisitor(\n    map: Record<string, { field: string; offset?: number; value: ValueNode }>,\n) {\n    return bottomUpTransformerVisitor(\n        Object.entries(map).map(([selector, { field, value, offset }]): BottomUpNodeTransformerWithSelector => ({\n            select: ['[accountNode]', selector],\n            transform: node => {\n                assertIsNode(node, 'accountNode');\n\n                const accountData = resolveNestedTypeNode(node.data);\n                const accountFields = accountData.fields ?? [];\n                const fieldIndex = accountFields.findIndex(f => f.name === field);\n                if (fieldIndex < 0) {\n                    throw new CodamaError(CODAMA_ERROR__VISITORS__ACCOUNT_FIELD_NOT_FOUND, {\n                        account: node,\n                        missingField: camelCase(field),\n                        name: node.name,\n                    });\n                }\n\n                const fieldNode = accountFields[fieldIndex];\n                return accountNode({\n                    ...node,\n                    data: transformNestedTypeNode(node.data, () =>\n                        structTypeNode([\n                            ...accountFields.slice(0, fieldIndex),\n                            structFieldTypeNode({\n                                ...fieldNode,\n                                defaultValue: value,\n                                defaultValueStrategy: 'omitted',\n                            }),\n                            ...accountFields.slice(fieldIndex + 1),\n                        ]),\n                    ),\n                    discriminators: [fieldDiscriminatorNode(field, offset), ...(node.discriminators ?? [])],\n                });\n            },\n        })),\n    );\n}\n","import { accountNode, assertIsNode } from '@codama/nodes';\nimport {\n    getByteSizeVisitor,\n    getLastNodeFromPath,\n    isNodePath,\n    LinkableDictionary,\n    pipe,\n    recordLinkablesOnFirstVisitVisitor,\n    topDownTransformerVisitor,\n    visit,\n} from '@codama/visitors-core';\n\nexport function setFixedAccountSizesVisitor() {\n    const linkables = new LinkableDictionary();\n\n    const visitor = topDownTransformerVisitor(\n        [\n            {\n                select: path => isNodePath(path, 'accountNode') && getLastNodeFromPath(path).size === undefined,\n                transform: (node, stack) => {\n                    assertIsNode(node, 'accountNode');\n                    const size = visit(node.data, getByteSizeVisitor(linkables, { stack }));\n                    if (size === null) return node;\n                    return accountNode({ ...node, size }) as typeof node;\n                },\n            },\n        ],\n        { keys: ['rootNode', 'programNode', 'accountNode'] },\n    );\n\n    return pipe(visitor, v => recordLinkablesOnFirstVisitVisitor(v, linkables));\n}\n","import {\n    camelCase,\n    identityValueNode,\n    InstructionAccountNode,\n    InstructionInputValueNode,\n    InstructionNode,\n    instructionNode,\n    payerValueNode,\n    programIdValueNode,\n    publicKeyValueNode,\n} from '@codama/nodes';\nimport {\n    extendVisitor,\n    LinkableDictionary,\n    NodeStack,\n    nonNullableIdentityVisitor,\n    pipe,\n    recordLinkablesOnFirstVisitVisitor,\n    recordNodeStackVisitor,\n    visit,\n} from '@codama/visitors-core';\n\nimport { fillDefaultPdaSeedValuesVisitor } from './fillDefaultPdaSeedValuesVisitor';\n\nexport type InstructionAccountDefaultRule = {\n    /** The name of the instruction account or a pattern to match on it. */\n    account: RegExp | string;\n    /** The default value to assign to it. */\n    defaultValue: InstructionInputValueNode;\n    /** @defaultValue `false`. */\n    ignoreIfOptional?: boolean;\n    /** @defaultValue Defaults to searching accounts on all instructions. */\n    instruction?: string;\n};\n\nexport const getCommonInstructionAccountDefaultRules = (): InstructionAccountDefaultRule[] => [\n    {\n        account: /^(payer|feePayer)$/,\n        defaultValue: payerValueNode(),\n        ignoreIfOptional: true,\n    },\n    {\n        account: /^(authority)$/,\n        defaultValue: identityValueNode(),\n        ignoreIfOptional: true,\n    },\n    {\n        account: /^(programId)$/,\n        defaultValue: programIdValueNode(),\n        ignoreIfOptional: true,\n    },\n    {\n        account: /^(systemProgram|splSystemProgram)$/,\n        defaultValue: publicKeyValueNode('11111111111111111111111111111111', 'splSystem'),\n        ignoreIfOptional: true,\n    },\n    {\n        account: /^(tokenProgram|splTokenProgram)$/,\n        defaultValue: publicKeyValueNode('TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA', 'splToken'),\n        ignoreIfOptional: true,\n    },\n    {\n        account: /^(ataProgram|splAtaProgram)$/,\n        defaultValue: publicKeyValueNode('ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL', 'splAssociatedToken'),\n        ignoreIfOptional: true,\n    },\n    {\n        account: /^(tokenMetadataProgram|mplTokenMetadataProgram)$/,\n        defaultValue: publicKeyValueNode('metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s', 'mplTokenMetadata'),\n        ignoreIfOptional: true,\n    },\n    {\n        account: /^(tokenAuth|mplTokenAuth|authorization|mplAuthorization|auth|mplAuth)RulesProgram$/,\n        defaultValue: publicKeyValueNode('auth9SigNpDKz4sJJ1DfCTuZrZNSAgh9sFD3rboVmgg', 'mplTokenAuthRules'),\n        ignoreIfOptional: true,\n    },\n    {\n        account: /^(candyMachineProgram|mplCandyMachineProgram)$/,\n        defaultValue: publicKeyValueNode('CndyV3LdqHUfDLmE5naZjVN8rBZz4tqhdefbAnjHG3JR', 'mplCandyMachine'),\n        ignoreIfOptional: true,\n    },\n    {\n        account: /^(candyGuardProgram|mplCandyGuardProgram)$/,\n        defaultValue: publicKeyValueNode('Guard1JwRhJkVH6XZhzoYxeBVQe872VH6QggF4BWmS9g', 'mplCandyGuard'),\n        ignoreIfOptional: true,\n    },\n    {\n        account: /^(clockSysvar|sysvarClock)$/,\n        defaultValue: publicKeyValueNode('SysvarC1ock11111111111111111111111111111111'),\n        ignoreIfOptional: true,\n    },\n    {\n        account: /^(epochScheduleSysvar|sysvarEpochSchedule)$/,\n        defaultValue: publicKeyValueNode('SysvarEpochSchedu1e111111111111111111111111'),\n        ignoreIfOptional: true,\n    },\n    {\n        account: /^(instructions?Sysvar|sysvarInstructions?)(Account)?$/,\n        defaultValue: publicKeyValueNode('Sysvar1nstructions1111111111111111111111111'),\n        ignoreIfOptional: true,\n    },\n    {\n        account: /^(recentBlockhashesSysvar|sysvarRecentBlockhashes)$/,\n        defaultValue: publicKeyValueNode('SysvarRecentB1ockHashes11111111111111111111'),\n        ignoreIfOptional: true,\n    },\n    {\n        account: /^(rent|rentSysvar|sysvarRent)$/,\n        defaultValue: publicKeyValueNode('SysvarRent111111111111111111111111111111111'),\n        ignoreIfOptional: true,\n    },\n    {\n        account: /^(rewardsSysvar|sysvarRewards)$/,\n        defaultValue: publicKeyValueNode('SysvarRewards111111111111111111111111111111'),\n        ignoreIfOptional: true,\n    },\n    {\n        account: /^(slotHashesSysvar|sysvarSlotHashes)$/,\n        defaultValue: publicKeyValueNode('SysvarS1otHashes111111111111111111111111111'),\n        ignoreIfOptional: true,\n    },\n    {\n        account: /^(slotHistorySysvar|sysvarSlotHistory)$/,\n        defaultValue: publicKeyValueNode('SysvarS1otHistory11111111111111111111111111'),\n        ignoreIfOptional: true,\n    },\n    {\n        account: /^(stakeHistorySysvar|sysvarStakeHistory)$/,\n        defaultValue: publicKeyValueNode('SysvarStakeHistory1111111111111111111111111'),\n        ignoreIfOptional: true,\n    },\n    {\n        account: /^(mplCoreProgram)$/,\n        defaultValue: publicKeyValueNode('CoREENxT6tW1HoK8ypY1SxRMZTcVPm7R94rH4PZNhX7d', 'mplCore'),\n        ignoreIfOptional: true,\n    },\n];\n\nexport function setInstructionAccountDefaultValuesVisitor(rules: InstructionAccountDefaultRule[]) {\n    const linkables = new LinkableDictionary();\n    const stack = new NodeStack();\n\n    // Place the rules with instructions first.\n    const sortedRules = rules.sort((a, b) => {\n        const ia = 'instruction' in a;\n        const ib = 'instruction' in b;\n        if ((ia && ib) || (!a && !ib)) return 0;\n        return ia ? -1 : 1;\n    });\n\n    function matchRule(\n        instruction: InstructionNode,\n        account: InstructionAccountNode,\n    ): InstructionAccountDefaultRule | undefined {\n        return sortedRules.find(rule => {\n            if ('instruction' in rule && rule.instruction && camelCase(rule.instruction) !== instruction.name) {\n                return false;\n            }\n            return typeof rule.account === 'string'\n                ? camelCase(rule.account) === account.name\n                : rule.account.test(account.name);\n        });\n    }\n\n    return pipe(\n        nonNullableIdentityVisitor({ keys: ['rootNode', 'programNode', 'instructionNode'] }),\n        v =>\n            extendVisitor(v, {\n                visitInstruction(node) {\n                    const instructionPath = stack.getPath('instructionNode');\n                    const instructionAccounts = (node.accounts ?? []).map((account): InstructionAccountNode => {\n                        const rule = matchRule(node, account);\n                        if (!rule) return account;\n\n                        if ((rule.ignoreIfOptional ?? false) && (account.isOptional || !!account.defaultValue)) {\n                            return account;\n                        }\n\n                        try {\n                            return {\n                                ...account,\n                                defaultValue: visit(\n                                    rule.defaultValue,\n                                    fillDefaultPdaSeedValuesVisitor(instructionPath, linkables, true),\n                                ),\n                            };\n                        } catch {\n                            return account;\n                        }\n                    });\n\n                    return instructionNode({\n                        ...node,\n                        accounts: instructionAccounts,\n                    });\n                },\n            }),\n        v => recordNodeStackVisitor(v, stack),\n        v => recordLinkablesOnFirstVisitVisitor(v, linkables),\n    );\n}\n","import {\n    assertIsNode,\n    fieldDiscriminatorNode,\n    instructionArgumentNode,\n    instructionNode,\n    numberTypeNode,\n    TypeNode,\n    ValueNode,\n} from '@codama/nodes';\nimport { BottomUpNodeTransformerWithSelector, bottomUpTransformerVisitor } from '@codama/visitors-core';\n\ntype Discriminator = {\n    /** @defaultValue `[]` */\n    docs?: string[];\n    /** @defaultValue `\"discriminator\"` */\n    name?: string;\n    /** @defaultValue `\"omitted\"` */\n    strategy?: 'omitted' | 'optional';\n    /** @defaultValue `numberTypeNode('u8')` */\n    type?: TypeNode;\n    value: ValueNode;\n};\n\nexport function setInstructionDiscriminatorsVisitor(map: Record<string, Discriminator>) {\n    return bottomUpTransformerVisitor(\n        Object.entries(map).map(([selector, discriminator]): BottomUpNodeTransformerWithSelector => ({\n            select: ['[instructionNode]', selector],\n            transform: node => {\n                assertIsNode(node, 'instructionNode');\n                const discriminatorArgument = instructionArgumentNode({\n                    defaultValue: discriminator.value,\n                    defaultValueStrategy: discriminator.strategy ?? 'omitted',\n                    docs: discriminator.docs ?? [],\n                    name: discriminator.name ?? 'discriminator',\n                    type: discriminator.type ?? numberTypeNode('u8'),\n                });\n\n                return instructionNode({\n                    ...node,\n                    arguments: [discriminatorArgument, ...(node.arguments ?? [])],\n                    discriminators: [\n                        fieldDiscriminatorNode(discriminator.name ?? 'discriminator'),\n                        ...(node.discriminators ?? []),\n                    ],\n                });\n            },\n        })),\n    );\n}\n","import { CODAMA_ERROR__VISITORS__INVALID_NUMBER_WRAPPER, CodamaError } from '@codama/errors';\nimport { amountTypeNode, assertIsNestedTypeNode, dateTimeTypeNode, solAmountTypeNode } from '@codama/nodes';\nimport { BottomUpNodeTransformerWithSelector, bottomUpTransformerVisitor } from '@codama/visitors-core';\n\nexport type NumberWrapper =\n    | { decimals: number; kind: 'Amount'; unit?: string }\n    | { kind: 'DateTime' }\n    | { kind: 'SolAmount' };\n\ntype NumberWrapperMap = Record<string, NumberWrapper>;\n\nexport function setNumberWrappersVisitor(map: NumberWrapperMap) {\n    return bottomUpTransformerVisitor(\n        Object.entries(map).map(([selectorStack, wrapper]): BottomUpNodeTransformerWithSelector => ({\n            select: `${selectorStack}.[numberTypeNode]`,\n            transform: node => {\n                assertIsNestedTypeNode(node, 'numberTypeNode');\n                switch (wrapper.kind) {\n                    case 'DateTime':\n                        return dateTimeTypeNode(node);\n                    case 'SolAmount':\n                        return solAmountTypeNode(node);\n                    case 'Amount':\n                        return amountTypeNode(node, wrapper.decimals, wrapper.unit);\n                    default:\n                        throw new CodamaError(CODAMA_ERROR__VISITORS__INVALID_NUMBER_WRAPPER, { wrapper });\n                }\n            },\n        })),\n    );\n}\n","import {\n    assertIsNode,\n    camelCase,\n    InstructionArgumentNode,\n    instructionArgumentNode,\n    instructionNode,\n    StructFieldTypeNode,\n    structFieldTypeNode,\n    structTypeNode,\n    ValueNode,\n} from '@codama/nodes';\nimport { BottomUpNodeTransformerWithSelector, bottomUpTransformerVisitor } from '@codama/visitors-core';\n\ntype StructDefaultValueMap = Record<string, Record<string, StructDefaultValue>>;\ntype StructDefaultValue = ValueNode | { strategy?: 'omitted' | 'optional'; value: ValueNode } | null;\n\nexport function setStructDefaultValuesVisitor(map: StructDefaultValueMap) {\n    return bottomUpTransformerVisitor(\n        Object.entries(map).flatMap(([stack, defaultValues]): BottomUpNodeTransformerWithSelector[] => {\n            const camelCasedDefaultValues = Object.fromEntries(\n                Object.entries(defaultValues).map(([key, value]) => [camelCase(key), value]),\n            );\n\n            return [\n                {\n                    select: `${stack}.[structTypeNode]`,\n                    transform: node => {\n                        assertIsNode(node, 'structTypeNode');\n                        const fields = (node.fields ?? []).map((field): StructFieldTypeNode => {\n                            const defaultValue = camelCasedDefaultValues[field.name];\n                            if (defaultValue === undefined) return field;\n                            if (defaultValue === null) {\n                                return structFieldTypeNode({\n                                    ...field,\n                                    defaultValue: undefined,\n                                    defaultValueStrategy: undefined,\n                                });\n                            }\n                            return structFieldTypeNode({\n                                ...field,\n                                defaultValue: 'kind' in defaultValue ? defaultValue : defaultValue.value,\n                                defaultValueStrategy: 'kind' in defaultValue ? undefined : defaultValue.strategy,\n                            });\n                        });\n                        return structTypeNode(fields);\n                    },\n                },\n                {\n                    select: ['[instructionNode]', stack],\n                    transform: node => {\n                        assertIsNode(node, 'instructionNode');\n                        const transformArguments = (arg: InstructionArgumentNode): InstructionArgumentNode => {\n                            const defaultValue = camelCasedDefaultValues[arg.name];\n                            if (defaultValue === undefined) return arg;\n                            if (defaultValue === null) {\n                                return instructionArgumentNode({\n                                    ...arg,\n                                    defaultValue: undefined,\n                                    defaultValueStrategy: undefined,\n                                });\n                            }\n                            return instructionArgumentNode({\n                                ...arg,\n                                defaultValue: 'kind' in defaultValue ? defaultValue : defaultValue.value,\n                                defaultValueStrategy: 'kind' in defaultValue ? undefined : defaultValue.strategy,\n                            });\n                        };\n                        return instructionNode({\n                            ...node,\n                            arguments: (node.arguments ?? []).map(transformArguments),\n                            extraArguments: node.extraArguments\n                                ? node.extraArguments.map(transformArguments)\n                                : undefined,\n                        });\n                    },\n                },\n            ];\n        }),\n    );\n}\n","import { accountNode, assertIsNode, programNode } from '@codama/nodes';\nimport { extendVisitor, nonNullableIdentityVisitor, pipe } from '@codama/visitors-core';\n\nexport function transformDefinedTypesIntoAccountsVisitor(definedTypes: string[]) {\n    return pipe(nonNullableIdentityVisitor({ keys: ['rootNode', 'programNode'] }), v =>\n        extendVisitor(v, {\n            visitProgram(program) {\n                const typesToExtract = (program.definedTypes ?? []).filter(node => definedTypes.includes(node.name));\n\n                const newDefinedTypes = (program.definedTypes ?? []).filter(node => !definedTypes.includes(node.name));\n\n                const newAccounts = typesToExtract.map(node => {\n                    assertIsNode(node.type, 'structTypeNode');\n                    return accountNode({\n                        ...node,\n                        data: node.type,\n                        discriminators: [],\n                        size: undefined,\n                    });\n                });\n\n                return programNode({\n                    ...program,\n                    accounts: [...(program.accounts ?? []), ...newAccounts],\n                    definedTypes: newDefinedTypes,\n                });\n            },\n        }),\n    );\n}\n","import {\n    ArrayTypeNode,\n    arrayTypeNode,\n    assertIsNode,\n    bytesTypeNode,\n    fixedSizeTypeNode,\n    isNode,\n    TYPE_NODES,\n} from '@codama/nodes';\nimport { extendVisitor, nonNullableIdentityVisitor, pipe, visit } from '@codama/visitors-core';\n\nexport function transformU8ArraysToBytesVisitor(sizes: number[] | '*' = '*') {\n    const hasRequiredSize = (count: ArrayTypeNode['count']): boolean => {\n        if (!isNode(count, 'fixedCountNode')) return false;\n        return sizes === '*' || sizes.includes(count.value);\n    };\n\n    return pipe(nonNullableIdentityVisitor(), v =>\n        extendVisitor(v, {\n            visitArrayType(node, { self }) {\n                const child = visit(node.item, self);\n                assertIsNode(child, TYPE_NODES);\n\n                if (\n                    isNode(child, 'numberTypeNode') &&\n                    child.format === 'u8' &&\n                    isNode(node.count, 'fixedCountNode') &&\n                    hasRequiredSize(node.count)\n                ) {\n                    return fixedSizeTypeNode(bytesTypeNode(), node.count.value);\n                }\n\n                return arrayTypeNode(child, node.count);\n            },\n        }),\n    );\n}\n","import { assertIsNodeFilter, camelCase, CamelCaseString, programNode } from '@codama/nodes';\nimport {\n    extendVisitor,\n    findProgramNodeFromPath,\n    getLastNodeFromPath,\n    LinkableDictionary,\n    NodeStack,\n    nonNullableIdentityVisitor,\n    pipe,\n    recordLinkablesOnFirstVisitVisitor,\n    recordNodeStackVisitor,\n    visit,\n} from '@codama/visitors-core';\n\nexport function unwrapDefinedTypesVisitor(typesToInline: string[] | '*' = '*') {\n    const linkables = new LinkableDictionary();\n    const stack = new NodeStack();\n    const typesToInlineCamelCased = (typesToInline === '*' ? [] : typesToInline).map(fullPath => {\n        if (!fullPath.includes('.')) return camelCase(fullPath);\n        const [programName, typeName] = fullPath.split('.');\n        return `${camelCase(programName)}.${camelCase(typeName)}`;\n    });\n    const shouldInline = (typeName: CamelCaseString, programName: CamelCaseString | undefined): boolean => {\n        if (typesToInline === '*') return true;\n        const fullPath = `${programName}.${typeName}`;\n        if (!!programName && typesToInlineCamelCased.includes(fullPath)) return true;\n        return typesToInlineCamelCased.includes(typeName);\n    };\n\n    return pipe(\n        nonNullableIdentityVisitor(),\n        v =>\n            extendVisitor(v, {\n                visitDefinedTypeLink(linkType, { self }) {\n                    const programName = linkType.program?.name ?? findProgramNodeFromPath(stack.getPath())?.name;\n                    if (!shouldInline(linkType.name, programName)) {\n                        return linkType;\n                    }\n                    const definedTypePath = linkables.getPathOrThrow(stack.getPath('definedTypeLinkNode'));\n                    const definedType = getLastNodeFromPath(definedTypePath);\n\n                    stack.pushPath(definedTypePath);\n                    const result = visit(definedType.type, self);\n                    stack.popPath();\n                    return result;\n                },\n\n                visitProgram(program, { self }) {\n                    return programNode({\n                        ...program,\n                        accounts: (program.accounts ?? [])\n                            .map(account => visit(account, self))\n                            .filter(assertIsNodeFilter('accountNode')),\n                        definedTypes: (program.definedTypes ?? [])\n                            .filter(definedType => !shouldInline(definedType.name, program.name))\n                            .map(type => visit(type, self))\n                            .filter(assertIsNodeFilter('definedTypeNode')),\n                        instructions: (program.instructions ?? [])\n                            .map(instruction => visit(instruction, self))\n                            .filter(assertIsNodeFilter('instructionNode')),\n                    });\n                },\n            }),\n        v => recordNodeStackVisitor(v, stack),\n        v => recordLinkablesOnFirstVisitVisitor(v, linkables),\n    );\n}\n","import { assertIsNode, CamelCaseString, definedTypeLinkNode, isNode } from '@codama/nodes';\nimport { getRecordLinkablesVisitor, LinkableDictionary, rootNodeVisitor, visit } from '@codama/visitors-core';\n\nimport { getDefinedTypeHistogramVisitor } from './getDefinedTypeHistogramVisitor';\nimport { unwrapDefinedTypesVisitor } from './unwrapDefinedTypesVisitor';\n\nexport function unwrapInstructionArgsDefinedTypesVisitor() {\n    return rootNodeVisitor(root => {\n        const histogram = visit(root, getDefinedTypeHistogramVisitor());\n        const linkables = new LinkableDictionary();\n        visit(root, getRecordLinkablesVisitor(linkables));\n\n        const definedTypesToInline = (Object.keys(histogram) as CamelCaseString[])\n            // Get all defined types used exactly once as an instruction argument.\n            .filter(key => (histogram[key].total ?? 0) === 1 && (histogram[key].directlyAsInstructionArgs ?? 0) === 1)\n            // Filter out enums which are better defined as external types.\n            .filter(key => {\n                const names = key.split('.');\n                const link = names.length == 2 ? definedTypeLinkNode(names[1], names[0]) : definedTypeLinkNode(key);\n                const found = linkables.get([link]);\n                return found && !isNode(found.type, 'enumTypeNode');\n            });\n\n        // Inline the identified defined types if any.\n        if (definedTypesToInline.length > 0) {\n            const inlineVisitor = unwrapDefinedTypesVisitor(definedTypesToInline);\n            const newRoot = visit(root, inlineVisitor);\n            assertIsNode(newRoot, 'rootNode');\n            return newRoot;\n        }\n\n        return root;\n    });\n}\n","import {\n    assertIsNode,\n    CamelCaseString,\n    DefinedTypeNode,\n    enumStructVariantTypeNode,\n    getAllDefinedTypes,\n    isNode,\n    REGISTERED_NODE_KINDS,\n    resolveNestedTypeNode,\n    StructTypeNode,\n    transformNestedTypeNode,\n} from '@codama/nodes';\nimport {\n    bottomUpTransformerVisitor,\n    getNodeSelectorFunction,\n    NodeSelectorFunction,\n    NodeStack,\n    rootNodeVisitor,\n    visit,\n} from '@codama/visitors-core';\n\nimport { getDefinedTypeHistogramVisitor } from './getDefinedTypeHistogramVisitor';\nimport { unwrapDefinedTypesVisitor } from './unwrapDefinedTypesVisitor';\n\nexport function unwrapTupleEnumWithSingleStructVisitor(enumsOrVariantsToUnwrap: string[] | '*' = '*') {\n    const selectorFunctions: NodeSelectorFunction[] =\n        enumsOrVariantsToUnwrap === '*'\n            ? [() => true]\n            : enumsOrVariantsToUnwrap.map(selector => getNodeSelectorFunction(selector));\n\n    const shouldUnwrap = (stack: NodeStack): boolean =>\n        selectorFunctions.some(selector => selector(stack.getPath(REGISTERED_NODE_KINDS)));\n\n    return rootNodeVisitor(root => {\n        const typesToPotentiallyUnwrap: string[] = [];\n        const definedTypes: Map<string, DefinedTypeNode> = new Map(\n            getAllDefinedTypes(root).map(definedType => [definedType.name, definedType]),\n        );\n\n        let newRoot = visit(\n            root,\n            bottomUpTransformerVisitor([\n                {\n                    select: '[enumTupleVariantTypeNode]',\n                    transform: (node, stack) => {\n                        assertIsNode(node, 'enumTupleVariantTypeNode');\n                        if (!shouldUnwrap(stack)) return node;\n                        const tupleNode = resolveNestedTypeNode(node.tuple);\n                        const tupleItems = tupleNode.items ?? [];\n                        if (tupleItems.length !== 1) return node;\n                        let item = tupleItems[0];\n                        if (isNode(item, 'definedTypeLinkNode')) {\n                            const definedType = definedTypes.get(item.name);\n                            if (!definedType) return node;\n                            if (!isNode(definedType.type, 'structTypeNode')) return node;\n                            typesToPotentiallyUnwrap.push(item.name);\n                            item = definedType.type;\n                        }\n                        if (!isNode(item, 'structTypeNode')) return node;\n                        const nestedStruct = transformNestedTypeNode(node.tuple, () => item as StructTypeNode);\n                        return enumStructVariantTypeNode(node.name, nestedStruct);\n                    },\n                },\n            ]),\n        );\n        assertIsNode(newRoot, 'rootNode');\n\n        const histogram = visit(newRoot, getDefinedTypeHistogramVisitor());\n        const typesToUnwrap = typesToPotentiallyUnwrap.filter(\n            type => !histogram[type as CamelCaseString] || histogram[type as CamelCaseString].total === 0,\n        );\n\n        newRoot = visit(newRoot, unwrapDefinedTypesVisitor(typesToUnwrap));\n        assertIsNode(newRoot, 'rootNode');\n\n        return newRoot;\n    });\n}\n","import {\n    BottomUpNodeTransformerWithSelector,\n    bottomUpTransformerVisitor,\n    LinkableDictionary,\n    pipe,\n    recordLinkablesOnFirstVisitVisitor,\n} from '@codama/visitors-core';\n\nexport function unwrapTypeDefinedLinksVisitor(definedLinksType: string[]) {\n    const linkables = new LinkableDictionary();\n\n    const transformers: BottomUpNodeTransformerWithSelector[] = definedLinksType.map(selector => ({\n        select: ['[definedTypeLinkNode]', selector],\n        transform: (_, stack) => {\n            const definedType = linkables.getOrThrow(stack.getPath('definedTypeLinkNode'));\n            return definedType.type;\n        },\n    }));\n\n    return pipe(bottomUpTransformerVisitor(transformers), v => recordLinkablesOnFirstVisitVisitor(v, linkables));\n}\n","import {\n    enumEmptyVariantTypeNode,\n    enumStructVariantTypeNode,\n    enumTupleVariantTypeNode,\n    EnumTypeNode,\n    enumTypeNode,\n    EnumVariantTypeNode,\n    isNode,\n    structFieldTypeNode,\n    StructTypeNode,\n    structTypeNode,\n} from '@codama/nodes';\n\nexport function renameStructNode(node: StructTypeNode, map: Record<string, string>): StructTypeNode {\n    return structTypeNode(\n        (node.fields ?? []).map(field =>\n            map[field.name] ? structFieldTypeNode({ ...field, name: map[field.name] }) : field,\n        ),\n    );\n}\n\nexport function renameEnumNode(node: EnumTypeNode, map: Record<string, string>): EnumTypeNode {\n    return enumTypeNode(\n        (node.variants ?? []).map(variant =>\n            map[variant.name] ? renameEnumVariant(variant, map[variant.name]) : variant,\n        ),\n        { ...node },\n    );\n}\n\nfunction renameEnumVariant(variant: EnumVariantTypeNode, newName: string) {\n    if (isNode(variant, 'enumStructVariantTypeNode')) {\n        return enumStructVariantTypeNode(newName, variant.struct);\n    }\n    if (isNode(variant, 'enumTupleVariantTypeNode')) {\n        return enumTupleVariantTypeNode(newName, variant.tuple);\n    }\n    return enumEmptyVariantTypeNode(newName);\n}\n","import {\n    accountLinkNode,\n    accountNode,\n    AccountNodeInput,\n    assertIsNode,\n    camelCase,\n    CamelCaseString,\n    pdaLinkNode,\n    PdaNode,\n    pdaNode,\n    PdaSeedNode,\n    programNode,\n    transformNestedTypeNode,\n} from '@codama/nodes';\nimport {\n    BottomUpNodeTransformerWithSelector,\n    bottomUpTransformerVisitor,\n    findProgramNodeFromPath,\n} from '@codama/visitors-core';\n\nimport { renameStructNode } from './renameHelpers';\n\nexport type AccountUpdates =\n    | { delete: true }\n    | (Partial<Omit<AccountNodeInput, 'data'>> & {\n          data?: Record<string, string>;\n          seeds?: PdaSeedNode[];\n      });\n\nexport function updateAccountsVisitor(map: Record<string, AccountUpdates>) {\n    return bottomUpTransformerVisitor(\n        Object.entries(map).flatMap(([selector, updates]) => {\n            const newName =\n                typeof updates === 'object' && 'name' in updates && updates.name ? camelCase(updates.name) : undefined;\n            const pdasToUpsert = [] as { pda: PdaNode; program: CamelCaseString }[];\n\n            const transformers: BottomUpNodeTransformerWithSelector[] = [\n                {\n                    select: ['[accountNode]', selector],\n                    transform: (node, stack) => {\n                        assertIsNode(node, 'accountNode');\n                        if ('delete' in updates) return null;\n\n                        const programNode = findProgramNodeFromPath(stack.getPath())!;\n                        const { seeds, pda, ...assignableUpdates } = updates;\n                        let newPda = node.pda;\n                        if (pda && seeds !== undefined) {\n                            newPda = pda;\n                            pdasToUpsert.push({\n                                pda: pdaNode({ name: pda.name, seeds }),\n                                program: programNode.name,\n                            });\n                        } else if (pda) {\n                            newPda = pda;\n                        } else if (seeds !== undefined && node.pda) {\n                            pdasToUpsert.push({\n                                pda: pdaNode({ name: node.pda.name, seeds }),\n                                program: programNode.name,\n                            });\n                        } else if (seeds !== undefined) {\n                            newPda = pdaLinkNode(newName ?? node.name);\n                            pdasToUpsert.push({\n                                pda: pdaNode({ name: newName ?? node.name, seeds }),\n                                program: programNode.name,\n                            });\n                        }\n\n                        return accountNode({\n                            ...node,\n                            ...assignableUpdates,\n                            data: transformNestedTypeNode(node.data, struct =>\n                                renameStructNode(struct, updates.data ?? {}),\n                            ),\n                            pda: newPda,\n                        });\n                    },\n                },\n                {\n                    select: `[programNode]`,\n                    transform: node => {\n                        assertIsNode(node, 'programNode');\n                        const pdasToUpsertForProgram = pdasToUpsert\n                            .filter(p => p.program === node.name)\n                            .map(p => p.pda);\n                        if (pdasToUpsertForProgram.length === 0) return node;\n                        const existingPdaNames = new Set((node.pdas ?? []).map(pda => pda.name));\n                        const pdasToCreate = pdasToUpsertForProgram.filter(p => !existingPdaNames.has(p.name));\n                        const pdasToUpdate = new Map(\n                            pdasToUpsertForProgram.filter(p => existingPdaNames.has(p.name)).map(p => [p.name, p]),\n                        );\n                        const newPdas = [...(node.pdas ?? []).map(p => pdasToUpdate.get(p.name) ?? p), ...pdasToCreate];\n                        return programNode({ ...node, pdas: newPdas });\n                    },\n                },\n            ];\n\n            if (newName) {\n                transformers.push(\n                    {\n                        select: ['[accountLinkNode]', selector],\n                        transform: node => {\n                            assertIsNode(node, 'accountLinkNode');\n                            return accountLinkNode(newName);\n                        },\n                    },\n                    {\n                        select: ['[pdaNode]', selector],\n                        transform: node => {\n                            assertIsNode(node, 'pdaNode');\n                            return pdaNode({ name: newName, seeds: node.seeds });\n                        },\n                    },\n                    {\n                        select: ['[pdaLinkNode]', selector],\n                        transform: node => {\n                            assertIsNode(node, 'pdaLinkNode');\n                            return pdaLinkNode(newName);\n                        },\n                    },\n                );\n            }\n\n            return transformers;\n        }),\n    );\n}\n","import {\n    assertIsNode,\n    camelCase,\n    definedTypeLinkNode,\n    definedTypeNode,\n    DefinedTypeNodeInput,\n    isNode,\n} from '@codama/nodes';\nimport { BottomUpNodeTransformerWithSelector, bottomUpTransformerVisitor } from '@codama/visitors-core';\n\nimport { renameEnumNode, renameStructNode } from './renameHelpers';\n\nexport type DefinedTypeUpdates =\n    | { delete: true }\n    | (Partial<Omit<DefinedTypeNodeInput, 'data'>> & {\n          data?: Record<string, string>;\n      });\n\nexport function updateDefinedTypesVisitor(map: Record<string, DefinedTypeUpdates>) {\n    return bottomUpTransformerVisitor(\n        Object.entries(map).flatMap(([selector, updates]): BottomUpNodeTransformerWithSelector[] => {\n            const newName =\n                typeof updates === 'object' && 'name' in updates && updates.name ? camelCase(updates.name) : undefined;\n\n            const transformers: BottomUpNodeTransformerWithSelector[] = [\n                {\n                    select: ['[definedTypeNode]', selector],\n                    transform: node => {\n                        assertIsNode(node, 'definedTypeNode');\n                        if ('delete' in updates) {\n                            return null;\n                        }\n                        const { data: dataUpdates, ...otherUpdates } = updates;\n                        let newType = node.type;\n                        if (isNode(node.type, 'structTypeNode')) {\n                            newType = renameStructNode(node.type, dataUpdates ?? {});\n                        } else if (isNode(node.type, 'enumTypeNode')) {\n                            newType = renameEnumNode(node.type, dataUpdates ?? {});\n                        }\n                        return definedTypeNode({\n                            ...node,\n                            ...otherUpdates,\n                            name: newName ?? node.name,\n                            type: newType,\n                        });\n                    },\n                },\n            ];\n\n            if (newName) {\n                transformers.push({\n                    select: ['[definedTypeLinkNode]', selector],\n                    transform: node => {\n                        assertIsNode(node, 'definedTypeLinkNode');\n                        return definedTypeLinkNode(newName);\n                    },\n                });\n            }\n\n            return transformers;\n        }),\n    );\n}\n","import { assertIsNode, errorNode, ErrorNodeInput } from '@codama/nodes';\nimport { BottomUpNodeTransformerWithSelector, bottomUpTransformerVisitor } from '@codama/visitors-core';\n\nexport type ErrorUpdates = Partial<ErrorNodeInput> | { delete: true };\n\nexport function updateErrorsVisitor(map: Record<string, ErrorUpdates>) {\n    return bottomUpTransformerVisitor(\n        Object.entries(map).map(([name, updates]): BottomUpNodeTransformerWithSelector => ({\n            select: `[errorNode]${name}`,\n            transform: node => {\n                assertIsNode(node, 'errorNode');\n                if ('delete' in updates) return null;\n                return errorNode({ ...node, ...updates });\n            },\n        })),\n    );\n}\n","import {\n    assertIsNode,\n    InstructionAccountNode,\n    instructionAccountNode,\n    InstructionAccountNodeInput,\n    InstructionArgumentNode,\n    instructionArgumentNode,\n    InstructionArgumentNodeInput,\n    InstructionInputValueNode,\n    InstructionNode,\n    instructionNode,\n    InstructionNodeInput,\n    TYPE_NODES,\n} from '@codama/nodes';\nimport {\n    BottomUpNodeTransformerWithSelector,\n    bottomUpTransformerVisitor,\n    LinkableDictionary,\n    NodePath,\n    NodeStack,\n    pipe,\n    recordLinkablesOnFirstVisitVisitor,\n    recordNodeStackVisitor,\n    visit,\n} from '@codama/visitors-core';\n\nimport { fillDefaultPdaSeedValuesVisitor } from './fillDefaultPdaSeedValuesVisitor';\n\nexport type InstructionUpdates =\n    | Partial<\n          Omit<InstructionNodeInput, 'accounts' | 'arguments' | 'extraArguments'> & {\n              accounts?: InstructionAccountUpdates;\n              arguments?: InstructionArgumentUpdates;\n          }\n      >\n    | { delete: true };\n\nexport type InstructionAccountUpdates = Record<\n    string,\n    Partial<Omit<InstructionAccountNodeInput, 'defaultValue'>> & {\n        defaultValue?: InstructionInputValueNode | null;\n    }\n>;\n\nexport type InstructionArgumentUpdates = Record<\n    string,\n    Partial<Omit<InstructionArgumentNodeInput, 'defaultValue'>> & {\n        defaultValue?: InstructionInputValueNode | null;\n    }\n>;\n\nexport function updateInstructionsVisitor(map: Record<string, InstructionUpdates>) {\n    const linkables = new LinkableDictionary();\n    const stack = new NodeStack();\n\n    const transformers = Object.entries(map).map(([selector, updates]): BottomUpNodeTransformerWithSelector => ({\n        select: ['[instructionNode]', selector],\n        transform: node => {\n            assertIsNode(node, 'instructionNode');\n            if ('delete' in updates) {\n                return null;\n            }\n\n            const instructionPath = stack.getPath('instructionNode');\n            const { accounts: accountUpdates, arguments: argumentUpdates, ...metadataUpdates } = updates;\n            const { newArguments, newExtraArguments } = handleInstructionArguments(node, argumentUpdates ?? {});\n            const newAccounts = (node.accounts ?? []).map(account =>\n                handleInstructionAccount(instructionPath, account, accountUpdates ?? {}, linkables),\n            );\n            return instructionNode({\n                ...node,\n                ...metadataUpdates,\n                accounts: newAccounts,\n                arguments: newArguments,\n                extraArguments: newExtraArguments.length > 0 ? newExtraArguments : undefined,\n            });\n        },\n    }));\n\n    return pipe(\n        bottomUpTransformerVisitor(transformers),\n        v => recordNodeStackVisitor(v, stack),\n        v => recordLinkablesOnFirstVisitVisitor(v, linkables),\n    );\n}\n\nfunction handleInstructionAccount(\n    instructionPath: NodePath<InstructionNode>,\n    account: InstructionAccountNode,\n    accountUpdates: InstructionAccountUpdates,\n    linkables: LinkableDictionary,\n): InstructionAccountNode {\n    const accountUpdate = accountUpdates?.[account.name];\n    if (!accountUpdate) return account;\n    const { defaultValue, ...acountWithoutDefault } = {\n        ...account,\n        ...accountUpdate,\n    };\n\n    if (!defaultValue) {\n        return instructionAccountNode(acountWithoutDefault);\n    }\n\n    return instructionAccountNode({\n        ...acountWithoutDefault,\n        defaultValue: visit(defaultValue, fillDefaultPdaSeedValuesVisitor(instructionPath, linkables)),\n    });\n}\n\nfunction handleInstructionArguments(\n    instruction: InstructionNode,\n    argUpdates: InstructionArgumentUpdates,\n): {\n    newArguments: InstructionArgumentNode[];\n    newExtraArguments: InstructionArgumentNode[];\n} {\n    const usedArguments = new Set<string>();\n\n    const newArguments = (instruction.arguments ?? []).map(node => {\n        const argUpdate = argUpdates[node.name];\n        if (!argUpdate) return node;\n        usedArguments.add(node.name);\n        return instructionArgumentNode({\n            ...node,\n            defaultValue: argUpdate.defaultValue ?? node.defaultValue,\n            defaultValueStrategy: argUpdate.defaultValueStrategy ?? node.defaultValueStrategy,\n            docs: argUpdate.docs ?? node.docs,\n            name: argUpdate.name ?? node.name,\n            type: argUpdate.type ?? node.type,\n        });\n    });\n\n    const updatedExtraArguments = (instruction.extraArguments ?? []).map(node => {\n        if (usedArguments.has(node.name)) return node;\n        const argUpdate = argUpdates[node.name];\n        if (!argUpdate) return node;\n        usedArguments.add(node.name);\n        return instructionArgumentNode({\n            ...node,\n            defaultValue: argUpdate.defaultValue ?? node.defaultValue,\n            defaultValueStrategy: argUpdate.defaultValueStrategy ?? node.defaultValueStrategy,\n            docs: argUpdate.docs ?? node.docs,\n            name: argUpdate.name ?? node.name,\n            type: argUpdate.type ?? node.type,\n        });\n    });\n\n    const newExtraArguments = [\n        ...updatedExtraArguments,\n        ...Object.entries(argUpdates)\n            .filter(([argName]) => !usedArguments.has(argName))\n            .map(([argName, argUpdate]) => {\n                const { type } = argUpdate;\n                assertIsNode(type, TYPE_NODES);\n                return instructionArgumentNode({\n                    defaultValue: argUpdate.defaultValue ?? undefined,\n                    defaultValueStrategy: argUpdate.defaultValueStrategy ?? undefined,\n                    docs: argUpdate.docs ?? [],\n                    name: argUpdate.name ?? argName,\n                    type,\n                });\n            }),\n    ];\n\n    return { newArguments, newExtraArguments };\n}\n","import { assertIsNode, camelCase, programLinkNode, programNode, ProgramNodeInput } from '@codama/nodes';\nimport { BottomUpNodeTransformerWithSelector, bottomUpTransformerVisitor } from '@codama/visitors-core';\n\nexport type ProgramUpdates =\n    | Partial<Omit<ProgramNodeInput, 'accounts' | 'definedTypes' | 'errors' | 'instructions'>>\n    | { delete: true };\n\nexport function updateProgramsVisitor(map: Record<string, ProgramUpdates>) {\n    return bottomUpTransformerVisitor(\n        Object.entries(map).flatMap(([name, updates]): BottomUpNodeTransformerWithSelector[] => {\n            const newName =\n                typeof updates === 'object' && 'name' in updates && updates.name ? camelCase(updates.name) : undefined;\n\n            const transformers: BottomUpNodeTransformerWithSelector[] = [\n                {\n                    select: `[programNode]${name}`,\n                    transform: node => {\n                        assertIsNode(node, 'programNode');\n                        if ('delete' in updates) return null;\n                        return programNode({ ...node, ...updates });\n                    },\n                },\n            ];\n\n            if (newName) {\n                transformers.push({\n                    select: `[programLinkNode]${name}`,\n                    transform: node => {\n                        assertIsNode(node, 'programLinkNode');\n                        return programLinkNode(newName);\n                    },\n                });\n            }\n\n            return transformers;\n        }),\n    );\n}\n"]}