UNPKG

@codama/visitors

Version:

All visitors for the Codama framework

1 lines 106 kB
{"version":3,"sources":["../src/index.ts","../src/addPdasVisitor.ts","../src/createSubInstructionsFromEnumArgsVisitor.ts","../src/flattenInstructionDataArgumentsVisitor.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/updateAccountsVisitor.ts","../src/renameHelpers.ts","../src/updateDefinedTypesVisitor.ts","../src/updateErrorsVisitor.ts","../src/updateInstructionsVisitor.ts","../src/updateProgramsVisitor.ts"],"sourcesContent":["export * from '@codama/visitors-core';\n\nexport * from './addPdasVisitor';\nexport * from './createSubInstructionsFromEnumArgsVisitor';\nexport * from './deduplicateIdenticalDefinedTypesVisitor';\nexport * from './fillDefaultPdaSeedValuesVisitor';\nexport * from './flattenInstructionDataArgumentsVisitor';\nexport * from './flattenStructVisitor';\nexport * from './getDefinedTypeHistogramVisitor';\nexport * from './setAccountDiscriminatorFromFieldVisitor';\nexport * from './setFixedAccountSizesVisitor';\nexport * from './setInstructionAccountDefaultValuesVisitor';\nexport * from './setInstructionDiscriminatorsVisitor';\nexport * from './setNumberWrappersVisitor';\nexport * from './setStructDefaultValuesVisitor';\nexport * from './transformDefinedTypesIntoAccountsVisitor';\nexport * from './transformU8ArraysToBytesVisitor';\nexport * from './unwrapDefinedTypesVisitor';\nexport * from './unwrapInstructionArgsDefinedTypesVisitor';\nexport * from './unwrapTupleEnumWithSingleStructVisitor';\nexport * from './unwrapTypeDefinedLinksVisitor';\nexport * from './updateAccountsVisitor';\nexport * from './updateDefinedTypesVisitor';\nexport * from './updateErrorsVisitor';\nexport * from './updateInstructionsVisitor';\nexport * from './updateProgramsVisitor';\n","import { CODAMA_ERROR__VISITORS__CANNOT_ADD_DUPLICATED_PDA_NAMES, CodamaError } from '@codama/errors';\nimport { assertIsNode, camelCase, pdaNode, PdaSeedNode, programNode } from '@codama/nodes';\nimport { bottomUpTransformerVisitor } from '@codama/visitors-core';\n\nexport function addPdasVisitor(pdas: Record<string, { name: string; seeds: PdaSeedNode[] }[]>) {\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: [...node.pdas, ...newPdas.map(pda => pdaNode({ name: pda.name, seeds: pda.seeds }))],\n                    });\n                },\n            };\n        }),\n    );\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(\n            ([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\n    return pipe(visitor, v => recordLinkablesOnFirstVisitVisitor(v, linkables));\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 { 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 = 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(\n            ([stack, options]): BottomUpNodeTransformerWithSelector => ({\n                select: `${stack}.[structTypeNode]`,\n                transform: node => flattenStruct(node, options),\n            }),\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        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].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' | '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                            inInstructionArgs: Number(mode === 'instruction'),\n                            total: 1,\n                        },\n                    };\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    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(\n            ([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 fieldIndex = accountData.fields.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: field,\n                            name: node.name,\n                        });\n                    }\n\n                    const fieldNode = accountData.fields[fieldIndex];\n                    return accountNode({\n                        ...node,\n                        data: transformNestedTypeNode(node.data, () =>\n                            structTypeNode([\n                                ...accountData.fields.slice(0, fieldIndex),\n                                structFieldTypeNode({\n                                    ...fieldNode,\n                                    defaultValue: value,\n                                    defaultValueStrategy: 'omitted',\n                                }),\n                                ...accountData.fields.slice(fieldIndex + 1),\n                            ]),\n                        ),\n                        discriminators: [fieldDiscriminatorNode(field, offset), ...(node.discriminators ?? [])],\n                    });\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(\n            ([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}\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(\n            ([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}\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    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 => selectorFunctions.some(selector => selector(stack.getPath()));\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                        if (tupleNode.items.length !== 1) return node;\n                        let item = tupleNode.items[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    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    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 => (map[field.name] ? structFieldTypeNode({ ...field, name: map[field.name] }) : field)),\n    );\n}\n\nexport function renameEnumNode(node: EnumTypeNode, map: Record<string, string>): EnumTypeNode {\n    return enumTypeNode(\n        node.variants.map(variant => (map[variant.name] ? renameEnumVariant(variant, map[variant.name]) : variant)),\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    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(\n            ([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}\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    | { delete: true }\n    | (InstructionMetadataUpdates & {\n          accounts?: InstructionAccountUpdates;\n          arguments?: InstructionArgumentUpdates;\n      });\n\nexport type InstructionMetadataUpdates = Partial<\n    Omit<\n        InstructionNodeInput,\n        | 'accounts'\n        | 'arguments'\n        | 'byteDeltas'\n        | 'discriminators'\n        | 'extraArguments'\n        | 'remainingAccounts'\n        | 'subInstructions'\n    >\n>;\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(\n        ([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\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"],"mappings":"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","names":["CodamaError","assertIsNode","camelCase","instructionArgumentNode","instructionNode","isNode","bottomUpTransformerVisitor","CodamaError","assertIsNode","camelCase","bottomUpTransformerVisitor","bottomUpTransformerVisitor","assertIsNode","camelCase","CodamaError","isNode","instructionArgumentNode","instructionNode","assertIsNode","CodamaError","assertIsNode","isNode","pipe","CODAMA_ERROR__VISITORS__CANNOT_FLATTEN_STRUCT_WITH_CONFLICTING_ATTRIBUTES","CodamaError","assertIsNode","camelCase","isNode","bottomUpTransformerVisitor","extendVisitor","pipe","visit","CodamaError","assertIsNode","structTypeNode","bottomUpTransformerVisitor","accountNode","assertIsNode","getLastNodeFromPath","LinkableDictionary","pipe","recordLinkablesOnFirstVisitVisitor","visit","camelCase","instructionNode","extendVisitor","LinkableDictionary","NodeStack","pipe","recordLinkablesOnFirstVisitVisitor","recordNodeStackVisitor","visit","LinkableDictionary","NodeStack","camelCase","pipe","extendVisitor","visit","instructionNode","recordNodeStackVisitor","recordLinkablesOnFirstVisitVisitor","assertIsNode","fieldDiscriminatorNode","instructionArgumentNode","instructionNode","numberTypeNode","bottomUpTransformerVisitor","CodamaError","bottomUpTransformerVisitor","assertIsNode","camelCase","instructionArgumentNode","instructionNode","structFieldTypeNode","structTypeNode","bottomUpTransformerVisitor","accountNode","assertIsNode","programNode","extendVisitor","nonNullableIdentityVisitor","pipe","assertIsNode","isNode","extendVisitor","nonNullableIdentityVisitor","pipe","visit","camelCase","programNode","extendVisitor","findProgramNodeFromPath","getLastNodeFromPath","LinkableDictionary","NodeStack","nonNullableIdentityVisitor","pipe","recordLinkablesOnFirstVisitVisitor","recordNodeStackVisitor","visit","assertIsNode","isNode","LinkableDictionary","rootNodeVisitor","visit","rootNodeVisitor","visit","LinkableDictionary","isNode","assertIsNode","assertIsNode","isNode","resolveNestedTypeNode","transformNestedTypeNode","bottomUpTransformerVisitor","rootNodeVisitor","visit","rootNodeVisitor","visit","bottomUpTransformerVisitor","assertIsNode","resolveNestedTypeNode","isNode","transformNestedTypeNode","bottomUpTransformerVisitor","LinkableDictionary","pipe","recordLinkablesOnFirstVisitVisitor","accountNode","assertIsNode","camelCase","pdaNode","programNode","transformNestedTypeNode","bottomUpTransformerVisitor","findProgramNodeFromPath","enumStructVariantTypeNode","isNode","structFieldTypeNode","structTypeNode","bottomUpTransformerVisitor","camelCase","assertIsNode","programNode","findProgramNodeFromPath","pdaNode","accountNode","transformNestedTypeNode","assertIsNode","camelCase","definedTypeLinkNode","isNode","bottomUpTransformerVisitor","bottomUpTransformerVisitor","camelCase","assertIsNode","isNode","definedTypeLinkNode","assertIsNode","bottomUpTransformerVisitor","assertIsNode","instructionArgumentNode","instructionNode","TYPE_NODES","bottomUpTransformerVisitor","LinkableDictionary","NodeStack","pipe","recordLinkablesOnFirstVisitVisitor","recordNodeStackVisitor","visit","LinkableDictionary","NodeStack","assertIsNode","instructionNode","pipe","bottomUpTransformerVisitor","recordNodeStackVisitor","recordLinkablesOnFirstVisitVisitor","visit","instructionArgumentNode","TYPE_NODES","assertIsNode","camelCase","programNode","bottomUpTransformerVisitor"]}