{"version":3,"sources":["../src/ImportMap.ts","../src/utils/cargoToml.ts","../src/utils/codecs.ts","../src/renderValueNodeVisitor.ts","../src/utils/discriminatorConstant.ts","../src/utils/linkOverrides.ts","../src/utils/render.ts","../src/utils/traitOptions.ts","../src/getTypeManifestVisitor.ts","../src/getRenderMapVisitor.ts","../src/renderVisitor.ts"],"names":["joinPath","fileExists","writeFile","stringify","logWarn","missingDependencies","CodamaError","CODAMA_ERROR__RENDERERS__MISSING_DEPENDENCY_VERSIONS","subset","minVersion","ltVersion","parse","readFile","getUtf8Encoder","getBase16Encoder","getBase58Encoder","getBase64Encoder","visit","numberValueNode","arrayValueNode","isNode","bytesValueNode","pascalCase","render","isNodeFilter","camelCase","VALUE_NODES","snakeCase","CODAMA_ERROR__UNEXPECTED_NODE_KIND","join","nunjucks","kebabCase","titleCase","assertIsNode","isScalarEnum","traits","getTraitsFromNode","pipe","mergeVisitor","REGISTERED_TYPE_NODE_KINDS","extendVisitor","resolveNestedTypeNode","remainderCountNode","fixedCountNode","prefixedCountNode","arrayTypeNode","numberTypeNode","CODAMA_ERROR__RENDERERS__UNSUPPORTED_NODE","parseDocs","definedTypeNode","LinkableDictionary","NodeStack","staticVisitor","createRenderMap","seedManifest","resolvedType","structTypeNodeFromInstructionArgumentNodes","mergeRenderMaps","getAllInstructionsWithSubs","addToRenderMap","getAllPrograms","getAllAccounts","getAllDefinedTypes","recordNodeStackVisitor","recordLinkablesOnFirstVisitVisitor","rootNodeVisitor","deleteDirectory","writeRenderMap","spawnSync","logError"],"mappings":"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","file":"index.node.cjs","sourcesContent":["import type { TypeManifest } from './getTypeManifestVisitor';\n\n/** Rust keywords that should not be identified as crate names. */\nexport const RUST_CORE_IMPORTS = new Set(['std', 'crate', 'super', 'self', 'core', 'alloc', 'clippy']);\n\nconst DEFAULT_MODULE_MAP: Record<string, string> = {\n    generated: 'crate::generated',\n    generatedAccounts: 'crate::generated::accounts',\n    generatedErrors: 'crate::generated::errors',\n    generatedInstructions: 'crate::generated::instructions',\n    generatedTypes: 'crate::generated::types',\n    hooked: 'crate::hooked',\n    mplEssentials: 'mpl_toolbox',\n    mplToolbox: 'mpl_toolbox',\n};\n\nexport class ImportMap {\n    protected readonly _imports: Set<string> = new Set();\n\n    protected readonly _aliases: Map<string, string> = new Map();\n\n    get imports(): Set<string> {\n        return this._imports;\n    }\n\n    get aliases(): Map<string, string> {\n        return this._aliases;\n    }\n\n    add(imports: Set<string> | string[] | string): ImportMap {\n        const newImports = typeof imports === 'string' ? [imports] : imports;\n        newImports.forEach(i => this._imports.add(i));\n        return this;\n    }\n\n    remove(imports: Set<string> | string[] | string): ImportMap {\n        const importsToRemove = typeof imports === 'string' ? [imports] : imports;\n        importsToRemove.forEach(i => this._imports.delete(i));\n        return this;\n    }\n\n    mergeWith(...others: ImportMap[]): ImportMap {\n        others.forEach(other => {\n            this.add(other._imports);\n            other._aliases.forEach((alias, importName) => this.addAlias(importName, alias));\n        });\n        return this;\n    }\n\n    mergeWithManifest(manifest: TypeManifest): ImportMap {\n        return this.mergeWith(manifest.imports);\n    }\n\n    addAlias(importName: string, alias: string): ImportMap {\n        this._aliases.set(importName, alias);\n        return this;\n    }\n\n    isEmpty(): boolean {\n        return this._imports.size === 0;\n    }\n\n    resolveDependencyMap(dependencies: Record<string, string>): ImportMap {\n        const dependencyMap = { ...DEFAULT_MODULE_MAP, ...dependencies };\n        const newImportMap = new ImportMap();\n        const resolveDependency = (i: string): string => {\n            const dependencyKey = Object.keys(dependencyMap).find(key => i.startsWith(`${key}::`));\n            if (!dependencyKey) return i;\n            const dependencyValue = dependencyMap[dependencyKey];\n            return dependencyValue + i.slice(dependencyKey.length);\n        };\n        this._imports.forEach(i => newImportMap.add(resolveDependency(i)));\n        this._aliases.forEach((alias, i) => newImportMap.addAlias(resolveDependency(i), alias));\n        return newImportMap;\n    }\n\n    getExternalDependencies(dependencyMap: Record<string, string>): Set<string> {\n        const resolvedMap = this.resolveDependencyMap(dependencyMap);\n        return new Set([...resolvedMap._imports].map(i => i.split('::')[0]).filter(i => !RUST_CORE_IMPORTS.has(i)));\n    }\n\n    toString(dependencies: Record<string, string>): string {\n        const resolvedMap = this.resolveDependencyMap(dependencies);\n        const importStatements = [...resolvedMap.imports].map(i => {\n            const alias = resolvedMap.aliases.get(i);\n            if (alias) return `use ${i} as ${alias};`;\n            return `use ${i};`;\n        });\n        return importStatements.join('\\n');\n    }\n}\n","import { CODAMA_ERROR__RENDERERS__MISSING_DEPENDENCY_VERSIONS, CodamaError, logWarn } from '@codama/errors';\nimport { fileExists, joinPath, readFile, RenderMap, writeFile } from '@codama/renderers-core';\nimport { parse, stringify } from '@iarna/toml';\nimport { lt as ltVersion, minVersion, subset } from 'semver';\n\nimport { ImportMap, RUST_CORE_IMPORTS } from '../ImportMap';\nimport type { RenderOptions } from '../renderVisitor';\nimport type { Fragment } from './fragment';\n\ntype CargoToml = CargoDependencyGroups & {\n    description?: string;\n    edition?: string | { workspace: true };\n    features?: Record<string, string[]>;\n    license?: string | { workspace: true };\n    name?: string;\n    repository?: string | { workspace: true };\n    target?: Record<string, CargoDependencyGroups>;\n    version?: string;\n    workspace?: { dependencies?: CargoDependencies };\n};\ntype CargoDependencyGroups = {\n    'build-dependencies'?: CargoDependencies;\n    dependencies?: CargoDependencies;\n    'dev-dependencies'?: CargoDependencies;\n};\n\nexport type CargoDependencies = Record<string, CargoDependency>;\ntype CargoDependency = CargoDependencyObject | string;\ntype CargoDependencyObject = {\n    branch?: string;\n    'default-features'?: boolean;\n    features?: string[];\n    git?: string;\n    optional?: boolean;\n    package?: string;\n    path?: string;\n    tag?: string;\n    version?: string;\n    workspace?: boolean;\n};\n\nexport const DEFAULT_DEPENDENCY_VERSIONS: CargoDependencies = {\n    'anchor-lang': { optional: true, version: '~0.31' },\n    borsh: '^1.0',\n    'num-derive': '^0.4',\n    'num-traits': '^0.2',\n    'solana-account': '~3.0',\n    'solana-account-info': '~3.1',\n    'solana-address': { features: ['borsh', 'copy', 'curve25519', 'decode'], version: '~2.2' },\n    'solana-cpi': '~3.1',\n    'solana-decode-error': '~2.3',\n    'solana-instruction': '~3.2',\n    'solana-program-error': '~3.0',\n    'solana-rpc-client': { optional: true, version: '^3.0' },\n    'spl-collections': { features: ['borsh'], version: '^0.1' },\n    thiserror: '^1.0',\n};\n\nexport function syncCargoToml(\n    renderMap: RenderMap<Fragment>,\n    crateFolder: string,\n    options: Pick<RenderOptions, 'dependencyMap' | 'dependencyVersions' | 'syncCargoToml'>,\n): void {\n    const shouldSyncCargoToml = options.syncCargoToml ?? false;\n    const cargoTomlPath = joinPath(crateFolder, 'Cargo.toml');\n    const usedDependencies = getUsedDependencyVersions(\n        renderMap,\n        options.dependencyMap ?? {},\n        options.dependencyVersions ?? {},\n    );\n\n    // If we should not sync the Cargo.toml, exit early.\n    if (!shouldSyncCargoToml) {\n        // However, if the Cargo.toml exists, we can still check it and\n        // warn the user about out-of-date or missing dependencies.\n        if (fileExists(cargoTomlPath)) {\n            checkExistingCargoToml(readCargoToml(cargoTomlPath), usedDependencies);\n        }\n        return;\n    }\n\n    if (fileExists(cargoTomlPath)) {\n        const cargoToml = updateExistingCargoToml(readCargoToml(cargoTomlPath), usedDependencies);\n        writeFile(cargoTomlPath, stringify(cargoToml) + '\\n');\n    } else {\n        const cargoToml = createNewCargoToml(usedDependencies);\n        writeFile(cargoTomlPath, stringify(cargoToml) + '\\n');\n    }\n}\n\nexport function createNewCargoToml(usedDependencies: CargoDependencies): CargoToml {\n    return updateExistingCargoToml(\n        {\n            name: 'rust-client',\n            // eslint-disable-next-line sort-keys-fix/sort-keys-fix\n            description: '',\n            version: '1.0.0',\n            // eslint-disable-next-line sort-keys-fix/sort-keys-fix\n            repository: { workspace: true },\n            // eslint-disable-next-line sort-keys-fix/sort-keys-fix\n            edition: { workspace: true },\n            license: { workspace: true },\n            // eslint-disable-next-line sort-keys-fix/sort-keys-fix\n            features: {\n                anchor: ['dep:anchor-lang'],\n                'anchor-idl-build': ['anchor', 'anchor-lang?/idl-build'],\n                fetch: ['dep:solana-rpc-client'],\n            },\n            // eslint-disable-next-line sort-keys-fix/sort-keys-fix\n            dependencies: {},\n        },\n        usedDependencies,\n    );\n}\n\nexport function updateExistingCargoToml(cargoToml: CargoToml, usedDependencies: CargoDependencies): CargoToml {\n    const foundUsedDependencies = new Set<string>();\n\n    const updatedCargoToml = updateCargoDependencies(cargoToml, dependencyGroup => {\n        return Object.fromEntries(\n            Object.entries(dependencyGroup).map(([dependencyKey, dependency]) => {\n                const foundUsedDependency = findCargoDependencyByImportName(\n                    usedDependencies,\n                    getCargoDependencyImportName(dependencyKey),\n                );\n                if (!foundUsedDependency) {\n                    return [dependencyKey, dependency];\n                }\n\n                const [usedDependencyKey, usedDependency] = foundUsedDependency;\n                foundUsedDependencies.add(usedDependencyKey);\n\n                const usedDependencyCrateName = getCargoDependencyCrateName(usedDependencyKey, usedDependency);\n                if (!shouldUpdateDependency(usedDependencyCrateName, dependency, usedDependency)) {\n                    return [dependencyKey, dependency];\n                }\n\n                const newVersion = getCargoDependencyVersion(usedDependency) as string;\n                return [\n                    dependencyKey,\n                    typeof dependency === 'string' ? newVersion : { ...dependency, version: newVersion },\n                ];\n            }),\n        );\n    });\n\n    const usedDependenciesToAdd = Object.entries(usedDependencies).filter(\n        ([usedDependencyKey]) => !foundUsedDependencies.has(usedDependencyKey),\n    );\n    for (const [usedDependencyKey, usedDependency] of usedDependenciesToAdd) {\n        updatedCargoToml.dependencies = updatedCargoToml.dependencies ?? {};\n        updatedCargoToml.dependencies[usedDependencyKey] = usedDependency;\n    }\n\n    return updatedCargoToml;\n}\n\nexport function checkExistingCargoToml(cargoToml: CargoToml, usedDependencies: CargoDependencies): void {\n    const missingDependencies: string[] = [];\n    const dependenciesToUpdate: string[] = [];\n    const existingDependencies = {\n        ...cargoToml['build-dependencies'],\n        ...cargoToml['dev-dependencies'],\n        ...cargoToml.dependencies,\n        ...cargoToml.workspace?.dependencies,\n        ...Object.values(cargoToml.target ?? {}).reduce((acc, target) => {\n            return {\n                ...acc,\n                ...target['build-dependencies'],\n                ...target['dev-dependencies'],\n                ...target.dependencies,\n            };\n        }, {} as CargoDependencies),\n    };\n\n    for (const [usedDependencyKey, usedDependency] of Object.entries(usedDependencies)) {\n        const foundExistingDependency = findCargoDependencyByImportName(\n            existingDependencies,\n            getCargoDependencyImportName(usedDependencyKey),\n        );\n        if (!foundExistingDependency) {\n            missingDependencies.push(usedDependencyKey);\n        } else if (shouldUpdateDependency(foundExistingDependency[0], foundExistingDependency[1], usedDependency)) {\n            dependenciesToUpdate.push(usedDependencyKey);\n        }\n    }\n\n    if (missingDependencies.length === 0 && dependenciesToUpdate.length === 0) return;\n    const missingList = missingDependencies\n        .map(d => `- ${d} missing: ${getCargoDependencyVersion(usedDependencies[d])}\\n`)\n        .join('');\n    const outdatedList = dependenciesToUpdate\n        .map(\n            d =>\n                `- ${d} outdated: ${getCargoDependencyVersion(existingDependencies[d])} ` +\n                `-> ${getCargoDependencyVersion(usedDependencies[d])}\\n`,\n        )\n        .join('');\n    logWarn(\n        `The following dependencies in your \\`Cargo.toml\\` are out-of-date or missing:\\n` +\n            `${missingList}${outdatedList}`,\n    );\n}\n\nexport function getUsedDependencyVersions(\n    renderMap: RenderMap<Fragment>,\n    dependencyMap: Record<string, string>,\n    dependencyVersions: CargoDependencies,\n): CargoDependencies {\n    const usedImportNames = getUsedImportNames(renderMap, dependencyMap);\n    const dependencyVersionsWithDefaults: CargoDependencies = {\n        ...DEFAULT_DEPENDENCY_VERSIONS,\n        ...dependencyVersions,\n    };\n\n    const [usedDependencyVersion, missingDependencies] = [...usedImportNames].reduce(\n        ([acc, missingDependencies], usedImportName) => {\n            const usedDependency = findCargoDependencyByImportName(dependencyVersionsWithDefaults, usedImportName);\n            if (usedDependency) {\n                acc[usedDependency[0]] = usedDependency[1];\n            } else {\n                missingDependencies.add(usedImportName);\n            }\n            return [acc, missingDependencies];\n        },\n        [{} as CargoDependencies, new Set<string>()],\n    );\n\n    if (missingDependencies.size > 0) {\n        throw new CodamaError(CODAMA_ERROR__RENDERERS__MISSING_DEPENDENCY_VERSIONS, {\n            dependencies: [...missingDependencies],\n            message: 'Please add these dependencies to the `dependencyVersions` option.',\n        });\n    }\n\n    return usedDependencyVersion;\n}\n\nfunction getUsedImportNames(renderMap: RenderMap<Fragment>, dependencyMap: Record<string, string>): Set<string> {\n    const fragments = [...renderMap.values()];\n    const fromImportMap = new ImportMap()\n        .mergeWith(...fragments.map(({ imports }) => imports))\n        .getExternalDependencies(dependencyMap);\n\n    // Match paths with at least 2 segments, optionally starting with \"::\"\n    // and capturing only the crate name (first segment). For instance,\n    // \"some_crate::some_module::SomeType\" or \"::some_crate::SomeType\".\n    const PATH_REGEX = /\\b(?:::)?([a-z_][a-z0-9_]*)(?:::[a-zA-Z0-9_]+)+/g;\n    const fromContent = fragments.flatMap(({ content }) => {\n        return [...content.matchAll(PATH_REGEX)]\n            .map(match => match[1])\n            .filter(crateName => !RUST_CORE_IMPORTS.has(crateName));\n    });\n\n    return new Set([...fromImportMap, ...fromContent]);\n}\n\nexport function shouldUpdateDependency(\n    dependency: string,\n    currentDependency: CargoDependency,\n    requiredDependency: CargoDependency,\n): boolean {\n    const currentRange = getCargoDependencyVersion(currentDependency);\n    const requiredRange = getCargoDependencyVersion(requiredDependency);\n    return !!currentRange && !!requiredRange && shouldUpdateRange(dependency, currentRange, requiredRange);\n}\n\nexport function shouldUpdateRange(dependency: string, currentRange: string, requiredRange: string): boolean {\n    currentRange = cargoToNpmSemver(currentRange);\n    requiredRange = cargoToNpmSemver(requiredRange);\n\n    try {\n        // Check if currentRange is a subset of requiredRange\n        // If yes, required is looser or equal, no update needed\n        if (subset(currentRange, requiredRange)) {\n            return false;\n        }\n\n        // Get the minimum versions from both ranges.\n        const minRequiredVersion = minVersion(requiredRange);\n        const minCurrentVersion = minVersion(currentRange);\n        if (!minCurrentVersion || !minRequiredVersion) {\n            throw new Error('Could not determine minimum versions.');\n        }\n\n        // Update if the minimum required version is greater than the current minimum version.\n        if (ltVersion(minCurrentVersion, minRequiredVersion)) {\n            return true;\n        }\n\n        // Otherwise, do not update.\n        return false;\n    } catch (error) {\n        console.warn(\n            `Could not parse the following ranges for dependency \"${dependency}\":` +\n                ` [${currentRange}] and/or [${requiredRange}].` +\n                ` Caused by: ${(error as Error).message}`,\n        );\n        return false;\n    }\n}\n\nfunction updateCargoDependencies(\n    cargoToml: CargoToml,\n    updateFn: (deps: CargoDependencies) => CargoDependencies,\n): CargoToml {\n    const updatedCargoToml = JSON.parse(JSON.stringify(cargoToml)) as CargoToml;\n\n    // Standard dependency sections.\n    const standardSections = ['dependencies', 'dev-dependencies', 'build-dependencies'] as const;\n    for (const section of standardSections) {\n        if (updatedCargoToml[section]) {\n            updatedCargoToml[section] = updateFn(updatedCargoToml[section]);\n        }\n    }\n\n    // Target-specific dependencies.\n    if (updatedCargoToml.target) {\n        for (const targetKey of Object.keys(updatedCargoToml.target)) {\n            for (const section of standardSections) {\n                if (updatedCargoToml.target[targetKey][section]) {\n                    updatedCargoToml.target[targetKey][section] = updateFn(updatedCargoToml.target[targetKey][section]);\n                }\n            }\n        }\n    }\n\n    // Workspace dependencies.\n    if (updatedCargoToml.workspace?.dependencies) {\n        updatedCargoToml.workspace.dependencies = updateFn(updatedCargoToml.workspace.dependencies);\n    }\n\n    return updatedCargoToml;\n}\n\nfunction cargoToNpmSemver(cargoVersion: string): string {\n    const version = cargoVersion.trim();\n    return /^\\d+(\\.\\d+)?(\\.\\d+)?/.test(version) ? `^${version}` : version;\n}\n\nfunction getCargoDependencyVersion(dependency: CargoDependency): string | undefined {\n    return typeof dependency === 'string' ? dependency : dependency.version;\n}\n\nfunction getCargoDependencyCrateName(key: string, dependency: CargoDependency): string {\n    return typeof dependency !== 'string' && dependency.package ? dependency.package : key;\n}\n\nfunction getCargoDependencyImportName(key: string): string {\n    return key.replace(/-/g, '_');\n}\n\nfunction findCargoDependencyByImportName(\n    dependencies: CargoDependencies,\n    importName: string,\n): [string, CargoDependency] | undefined {\n    return Object.entries(dependencies).find(([key]) => {\n        return getCargoDependencyImportName(key) === importName;\n    });\n}\n\nfunction readCargoToml(path: string): CargoToml {\n    return parse(readFile(path)) as CargoToml;\n}\n","import { BytesValueNode } from '@codama/nodes';\nimport { getBase16Encoder, getBase58Encoder, getBase64Encoder, getUtf8Encoder } from '@solana/codecs-strings';\n\nexport function getBytesFromBytesValueNode(node: BytesValueNode): Uint8Array {\n    switch (node.encoding) {\n        case 'utf8':\n            return getUtf8Encoder().encode(node.data) as Uint8Array;\n        case 'base16':\n            return getBase16Encoder().encode(node.data) as Uint8Array;\n        case 'base58':\n            return getBase58Encoder().encode(node.data) as Uint8Array;\n        case 'base64':\n        default:\n            return getBase64Encoder().encode(node.data) as Uint8Array;\n    }\n}\n","import {\n    arrayValueNode,\n    bytesValueNode,\n    isNode,\n    numberValueNode,\n    pascalCase,\n    RegisteredValueNode,\n    ValueNode,\n} from '@codama/nodes';\nimport { visit, Visitor } from '@codama/visitors-core';\n\nimport { ImportMap } from './ImportMap';\nimport { getBytesFromBytesValueNode, GetImportFromFunction } from './utils';\n\nexport function renderValueNode(\n    value: ValueNode,\n    getImportFrom: GetImportFromFunction,\n    useStr: boolean = false,\n): {\n    imports: ImportMap;\n    render: string;\n} {\n    return visit(value, renderValueNodeVisitor(getImportFrom, useStr));\n}\n\nexport function renderValueNodeVisitor(\n    getImportFrom: GetImportFromFunction,\n    useStr: boolean = false,\n): Visitor<\n    {\n        imports: ImportMap;\n        render: string;\n    },\n    RegisteredValueNode['kind']\n> {\n    return {\n        visitArrayValue(node) {\n            const list = node.items.map(v => visit(v, this));\n            return {\n                imports: new ImportMap().mergeWith(...list.map(c => c.imports)),\n                render: `[${list.map(c => c.render).join(', ')}]`,\n            };\n        },\n        visitBooleanValue(node) {\n            return {\n                imports: new ImportMap(),\n                render: JSON.stringify(node.boolean),\n            };\n        },\n        visitBytesValue(node) {\n            const bytes = getBytesFromBytesValueNode(node);\n            const numbers = Array.from(bytes).map(numberValueNode);\n            return visit(arrayValueNode(numbers), this);\n        },\n        visitConstantValue(node) {\n            if (isNode(node.value, 'bytesValueNode')) {\n                return visit(node.value, this);\n            }\n            if (isNode(node.type, 'stringTypeNode') && isNode(node.value, 'stringValueNode')) {\n                return visit(bytesValueNode(node.type.encoding, node.value.string), this);\n            }\n            if (isNode(node.type, 'numberTypeNode') && isNode(node.value, 'numberValueNode')) {\n                const numberManifest = visit(node.value, this);\n                const { format, endian } = node.type;\n                const byteFunction = endian === 'le' ? 'to_le_bytes' : 'to_be_bytes';\n                numberManifest.render = `${numberManifest.render}${format}.${byteFunction}()`;\n                return numberManifest;\n            }\n            throw new Error('Unsupported constant value type.');\n        },\n        visitEnumValue(node) {\n            const imports = new ImportMap();\n            const enumName = pascalCase(node.enum.name);\n            const variantName = pascalCase(node.variant);\n            const importFrom = getImportFrom(node.enum);\n            imports.add(`${importFrom}::${enumName}`);\n            if (!node.value) {\n                return { imports, render: `${enumName}::${variantName}` };\n            }\n            const enumValue = visit(node.value, this);\n            const fields = enumValue.render;\n            return {\n                imports: imports.mergeWith(enumValue.imports),\n                render: `${enumName}::${variantName} ${fields}`,\n            };\n        },\n        visitMapEntryValue(node) {\n            const mapKey = visit(node.key, this);\n            const mapValue = visit(node.value, this);\n            return {\n                imports: mapKey.imports.mergeWith(mapValue.imports),\n                render: `[${mapKey.render}, ${mapValue.render}]`,\n            };\n        },\n        visitMapValue(node) {\n            const map = node.entries.map(entry => visit(entry, this));\n            const imports = new ImportMap().add('std::collection::HashMap');\n            return {\n                imports: imports.mergeWith(...map.map(c => c.imports)),\n                render: `HashMap::from([${map.map(c => c.render).join(', ')}])`,\n            };\n        },\n        visitNoneValue() {\n            return {\n                imports: new ImportMap(),\n                render: 'None',\n            };\n        },\n        visitNumberValue(node) {\n            return {\n                imports: new ImportMap(),\n                render: node.number.toString(),\n            };\n        },\n        visitPublicKeyValue(node) {\n            return {\n                imports: new ImportMap().add('solana_address'),\n                render: `address!(\"${node.publicKey}\")`,\n            };\n        },\n        visitSetValue(node) {\n            const set = node.items.map(v => visit(v, this));\n            const imports = new ImportMap().add('std::collection::HashSet');\n            return {\n                imports: imports.mergeWith(...set.map(c => c.imports)),\n                render: `HashSet::from([${set.map(c => c.render).join(', ')}])`,\n            };\n        },\n        visitSomeValue(node) {\n            const child = visit(node.value, this);\n            return {\n                ...child,\n                render: `Some(${child.render})`,\n            };\n        },\n        visitStringValue(node) {\n            return {\n                imports: new ImportMap(),\n                render: useStr ? `${JSON.stringify(node.string)}` : `String::from(${JSON.stringify(node.string)})`,\n            };\n        },\n        visitStructFieldValue(node) {\n            const structValue = visit(node.value, this);\n            return {\n                imports: structValue.imports,\n                render: `${node.name}: ${structValue.render}`,\n            };\n        },\n        visitStructValue(node) {\n            const struct = node.fields.map(field => visit(field, this));\n            return {\n                imports: new ImportMap().mergeWith(...struct.map(c => c.imports)),\n                render: `{ ${struct.map(c => c.render).join(', ')} }`,\n            };\n        },\n        visitTupleValue(node) {\n            const tuple = node.items.map(v => visit(v, this));\n            return {\n                imports: new ImportMap().mergeWith(...tuple.map(c => c.imports)),\n                render: `(${tuple.map(c => c.render).join(', ')})`,\n            };\n        },\n    };\n}\n","import {\n    camelCase,\n    ConstantDiscriminatorNode,\n    DiscriminatorNode,\n    FieldDiscriminatorNode,\n    InstructionArgumentNode,\n    isNode,\n    isNodeFilter,\n    snakeCase,\n    StructFieldTypeNode,\n    VALUE_NODES,\n} from '@codama/nodes';\nimport { visit } from '@codama/visitors-core';\n\nimport { getTypeManifestVisitor, TypeManifest } from '../getTypeManifestVisitor';\nimport { ImportMap } from '../ImportMap';\nimport { renderValueNode } from '../renderValueNodeVisitor';\nimport { GetImportFromFunction } from './linkOverrides';\n\ntype Fragment = { imports: ImportMap; render: string };\n\nfunction mergeFragments(fragments: Fragment[], merge: (parts: string[]) => string): Fragment {\n    const imports = fragments.reduce((acc, frag) => acc.mergeWith(frag.imports), new ImportMap());\n    const render = merge(fragments.map(frag => frag.render));\n    return { imports, render };\n}\n\nexport function getDiscriminatorConstants(scope: {\n    discriminatorNodes: DiscriminatorNode[];\n    fields: InstructionArgumentNode[] | StructFieldTypeNode[];\n    getImportFrom: GetImportFromFunction;\n    prefix: string;\n    typeManifestVisitor: ReturnType<typeof getTypeManifestVisitor>;\n}): Fragment {\n    const fragments = scope.discriminatorNodes\n        .map(node => getDiscriminatorConstant(node, scope))\n        .filter(Boolean) as Fragment[];\n\n    return mergeFragments(fragments, r => r.join('\\n\\n'));\n}\n\nfunction getDiscriminatorConstant(\n    discriminatorNode: DiscriminatorNode,\n    scope: {\n        discriminatorNodes: DiscriminatorNode[];\n        fields: InstructionArgumentNode[] | StructFieldTypeNode[];\n        getImportFrom: GetImportFromFunction;\n        prefix: string;\n        typeManifestVisitor: ReturnType<typeof getTypeManifestVisitor>;\n    },\n) {\n    switch (discriminatorNode.kind) {\n        case 'constantDiscriminatorNode':\n            return getConstantDiscriminatorConstant(discriminatorNode, scope);\n        case 'fieldDiscriminatorNode':\n            return getFieldDiscriminatorConstant(discriminatorNode, scope);\n        default:\n            return null;\n    }\n}\n\nfunction getConstantDiscriminatorConstant(\n    discriminatorNode: ConstantDiscriminatorNode,\n    scope: {\n        discriminatorNodes: DiscriminatorNode[];\n        getImportFrom: GetImportFromFunction;\n        prefix: string;\n        typeManifestVisitor: ReturnType<typeof getTypeManifestVisitor>;\n    },\n): Fragment {\n    const { discriminatorNodes, getImportFrom, prefix, typeManifestVisitor } = scope;\n\n    const index = discriminatorNodes.filter(isNodeFilter('constantDiscriminatorNode')).indexOf(discriminatorNode);\n    const suffix = index <= 0 ? '' : `_${index + 1}`;\n\n    const name = camelCase(`${prefix}_discriminator${suffix}`);\n    const typeManifest = visit(discriminatorNode.constant.type, typeManifestVisitor);\n    const value = renderValueNode(discriminatorNode.constant.value, getImportFrom);\n    return getConstant(name, typeManifest, value);\n}\n\nfunction getFieldDiscriminatorConstant(\n    discriminatorNode: FieldDiscriminatorNode,\n    scope: {\n        fields: InstructionArgumentNode[] | StructFieldTypeNode[];\n        getImportFrom: GetImportFromFunction;\n        prefix: string;\n        typeManifestVisitor: ReturnType<typeof getTypeManifestVisitor>;\n    },\n): Fragment | null {\n    const { fields, prefix, getImportFrom, typeManifestVisitor } = scope;\n\n    const field = fields.find(f => f.name === discriminatorNode.name);\n    if (!field || !field.defaultValue || !isNode(field.defaultValue, VALUE_NODES)) {\n        return null;\n    }\n\n    const name = camelCase(`${prefix}_${discriminatorNode.name}`);\n    const typeManifest = visit(field.type, typeManifestVisitor);\n    const value = renderValueNode(field.defaultValue, getImportFrom);\n    return getConstant(name, typeManifest, value);\n}\n\nfunction getConstant(name: string, typeManifest: TypeManifest, value: Fragment): Fragment {\n    const type: Fragment = { imports: typeManifest.imports, render: typeManifest.type };\n    return mergeFragments([type, value], ([t, v]) => `pub const ${snakeCase(name).toUpperCase()}: ${t} = ${v};`);\n}\n","import { CODAMA_ERROR__UNEXPECTED_NODE_KIND, CodamaError } from '@codama/errors';\nimport {\n    AccountLinkNode,\n    DefinedTypeLinkNode,\n    InstructionLinkNode,\n    PdaLinkNode,\n    ProgramLinkNode,\n    ResolverValueNode,\n} from '@codama/nodes';\n\nexport type LinkOverrides = {\n    accounts?: Record<string, string>;\n    definedTypes?: Record<string, string>;\n    instructions?: Record<string, string>;\n    pdas?: Record<string, string>;\n    programs?: Record<string, string>;\n    resolvers?: Record<string, string>;\n};\n\ntype OverridableNodes =\n    | AccountLinkNode\n    | DefinedTypeLinkNode\n    | InstructionLinkNode\n    | PdaLinkNode\n    | ProgramLinkNode\n    | ResolverValueNode;\n\nexport type GetImportFromFunction = (node: OverridableNodes, fallback?: string) => string;\n\nexport function getImportFromFactory(overrides: LinkOverrides): GetImportFromFunction {\n    const linkOverrides = {\n        accounts: overrides.accounts ?? {},\n        definedTypes: overrides.definedTypes ?? {},\n        instructions: overrides.instructions ?? {},\n        pdas: overrides.pdas ?? {},\n        programs: overrides.programs ?? {},\n        resolvers: overrides.resolvers ?? {},\n    };\n\n    return (node: OverridableNodes) => {\n        const kind = node.kind;\n        switch (kind) {\n            case 'accountLinkNode':\n                return linkOverrides.accounts[node.name] ?? 'generatedAccounts';\n            case 'definedTypeLinkNode':\n                return linkOverrides.definedTypes[node.name] ?? 'generatedTypes';\n            case 'instructionLinkNode':\n                return linkOverrides.instructions[node.name] ?? 'generatedInstructions';\n            case 'pdaLinkNode':\n                return linkOverrides.pdas[node.name] ?? 'generatedAccounts';\n            case 'programLinkNode':\n                return linkOverrides.programs[node.name] ?? 'generatedPrograms';\n            case 'resolverValueNode':\n                return linkOverrides.resolvers[node.name] ?? 'hooked';\n            default:\n                throw new CodamaError(CODAMA_ERROR__UNEXPECTED_NODE_KIND, {\n                    expectedKinds: [\n                        'AccountLinkNode',\n                        'DefinedTypeLinkNode',\n                        'InstructionLinkNode',\n                        'PdaLinkNode',\n                        'ProgramLinkNode',\n                        'resolverValueNode',\n                    ],\n                    kind: kind satisfies never,\n                    node,\n                });\n        }\n    };\n}\n","import { dirname as pathDirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport { camelCase, kebabCase, pascalCase, snakeCase, titleCase } from '@codama/nodes';\nimport nunjucks, { ConfigureOptions as NunJucksOptions } from 'nunjucks';\n\nexport function rustDocblock(docs: string[]): string {\n    if (docs.length <= 0) return '';\n    const lines = docs.map(doc => `/// ${doc}`);\n    return `${lines.join('\\n')}\\n`;\n}\n\nexport const render = (template: string, context?: object, options?: NunJucksOptions): string => {\n    // @ts-expect-error import.meta will be used in the right environment.\n    const dirname = __ESM__ ? pathDirname(fileURLToPath(import.meta.url)) : __dirname;\n    const templates = __TEST__ ? join(dirname, '..', '..', 'public', 'templates') : join(dirname, 'templates'); // Path to templates from bundled output file.\n    const env = nunjucks.configure(templates, { autoescape: false, trimBlocks: true, ...options });\n    env.addFilter('pascalCase', pascalCase);\n    env.addFilter('camelCase', camelCase);\n    env.addFilter('snakeCase', snakeCase);\n    env.addFilter('kebabCase', kebabCase);\n    env.addFilter('titleCase', titleCase);\n    env.addFilter('rustDocblock', rustDocblock);\n    // Returns whether or not the provided traits are implemented on the type.\n    env.addFilter('hasTrait', (traits: string, ...traitNames: string[]) => {\n        if (typeof traits !== 'string') return false;\n        return traitNames.some(traitName => traits.includes(traitName));\n    });\n    return env.render(template, context);\n};\n","import {\n    AccountNode,\n    assertIsNode,\n    camelCase,\n    DefinedTypeNode,\n    InstructionNode,\n    isNode,\n    isScalarEnum,\n} from '@codama/nodes';\n\nimport { ImportMap } from '../ImportMap';\n\nexport type TraitOptions = {\n    /** The default traits to implement for all types. */\n    baseDefaults?: string[];\n    /**\n     * The default traits to implement for data enums only — on top of the base defaults.\n     * Data enums are enums with at least one non-unit variant.\n     */\n    dataEnumDefaults?: string[];\n    /**\n     * The mapping of feature flags to traits.\n     * For each entry, the traits will be rendered within a\n     * `#[cfg_attr(feature = \"feature_name\", derive(Traits))]` attribute.\n     */\n    featureFlags?: Record<string, string[]>;\n    /** The complete trait overrides of specific types. */\n    overrides?: Record<string, string[]>;\n    /**\n     * The default traits to implement for scalar enums only — on top of the base defaults.\n     * Scalar enums are enums with no variants or only unit variants.\n     */\n    scalarEnumDefaults?: string[];\n    /** The default traits to implement for structs only — on top of the base defaults. */\n    structDefaults?: string[];\n    /** Whether or not to use the fully qualified name for traits, instead of importing them. */\n    useFullyQualifiedName?: boolean;\n};\n\nexport const DEFAULT_TRAIT_OPTIONS: Required<TraitOptions> = {\n    baseDefaults: ['borsh::BorshSerialize', 'borsh::BorshDeserialize', 'Clone', 'Debug', 'Eq', 'PartialEq'],\n    dataEnumDefaults: [],\n    featureFlags: {},\n    overrides: {},\n    scalarEnumDefaults: ['Copy', 'PartialOrd', 'Hash', 'num_derive::FromPrimitive'],\n    structDefaults: [],\n    useFullyQualifiedName: false,\n};\n\nexport type GetTraitsFromNodeFunction = (node: AccountNode | DefinedTypeNode | InstructionNode) => {\n    imports: ImportMap;\n    render: string;\n};\n\nexport function getTraitsFromNodeFactory(options: TraitOptions = {}): GetTraitsFromNodeFunction {\n    return node => getTraitsFromNode(node, options);\n}\n\nexport function getTraitsFromNode(\n    node: AccountNode | DefinedTypeNode | InstructionNode,\n    userOptions: TraitOptions = {},\n): { imports: ImportMap; render: string } {\n    assertIsNode(node, ['accountNode', 'definedTypeNode', 'instructionNode']);\n    const options: Required<TraitOptions> = { ...DEFAULT_TRAIT_OPTIONS, ...userOptions };\n\n    // Get the node type and return early if it's a type alias.\n    const nodeType = getNodeType(node);\n    if (nodeType === 'alias') {\n        return { imports: new ImportMap(), render: '' };\n    }\n\n    // Find all the FQN traits for the node.\n    const sanitizedOverrides = Object.fromEntries(\n        Object.entries(options.overrides).map(([key, value]) => [camelCase(key), value]),\n    );\n    const nodeOverrides: string[] | undefined = sanitizedOverrides[node.name];\n    const allTraits = nodeOverrides === undefined ? getDefaultTraits(nodeType, options) : nodeOverrides;\n\n    // Wrap the traits in feature flags if necessary.\n    const partitionedTraits = partitionTraitsInFeatures(allTraits, options.featureFlags);\n    let unfeaturedTraits = partitionedTraits[0];\n    const featuredTraits = partitionedTraits[1];\n\n    // Import the traits if necessary.\n    const imports = new ImportMap();\n    if (!options.useFullyQualifiedName) {\n        unfeaturedTraits = extractFullyQualifiedNames(unfeaturedTraits, imports);\n    }\n\n    // Render the trait lines.\n    const traitLines: string[] = [\n        ...(unfeaturedTraits.length > 0 ? [`#[derive(${unfeaturedTraits.join(', ')})]\\n`] : []),\n        ...Object.entries(featuredTraits).map(([feature, traits]) => {\n            return `#[cfg_attr(feature = \"${feature}\", derive(${traits.join(', ')}))]\\n`;\n        }),\n    ];\n\n    return { imports, render: traitLines.join('') };\n}\n\nfunction getNodeType(\n    node: AccountNode | DefinedTypeNode | InstructionNode,\n): 'alias' | 'dataEnum' | 'scalarEnum' | 'struct' {\n    if (isNode(node, ['accountNode', 'instructionNode'])) return 'struct';\n    if (isNode(node.type, 'structTypeNode')) return 'struct';\n    if (isNode(node.type, 'enumTypeNode')) {\n        return isScalarEnum(node.type) ? 'scalarEnum' : 'dataEnum';\n    }\n    return 'alias';\n}\n\nfunction getDefaultTraits(\n    nodeType: 'dataEnum' | 'scalarEnum' | 'struct',\n    options: Pick<\n        Required<TraitOptions>,\n        'baseDefaults' | 'dataEnumDefaults' | 'scalarEnumDefaults' | 'structDefaults'\n    >,\n): string[] {\n    switch (nodeType) {\n        case 'dataEnum':\n            return [...options.baseDefaults, ...options.dataEnumDefaults];\n        case 'scalarEnum':\n            return [...options.baseDefaults, ...options.scalarEnumDefaults];\n        case 'struct':\n            return [...options.baseDefaults, ...options.structDefaults];\n    }\n}\n\nfunction partitionTraitsInFeatures(\n    traits: string[],\n    featureFlags: Record<string, string[]>,\n): [string[], Record<string, string[]>] {\n    // Reverse the feature flags option for quick lookup.\n    // If there are any duplicate traits, the first one encountered will be used.\n    const reverseFeatureFlags = Object.entries(featureFlags).reduce(\n        (acc, [feature, traits]) => {\n            for (const trait of traits) {\n                if (!acc[trait]) acc[trait] = feature;\n            }\n            return acc;\n        },\n        {} as Record<string, string>,\n    );\n\n    const unfeaturedTraits: string[] = [];\n    const featuredTraits: Record<string, string[]> = {};\n    for (const trait of traits) {\n        const feature: string | undefined = reverseFeatureFlags[trait];\n        if (feature === undefined) {\n            unfeaturedTraits.push(trait);\n        } else {\n            if (!featuredTraits[feature]) featuredTraits[feature] = [];\n            featuredTraits[feature].push(trait);\n        }\n    }\n\n    return [unfeaturedTraits, featuredTraits];\n}\n\nfunction extractFullyQualifiedNames(traits: string[], imports: ImportMap): string[] {\n    return traits.map(trait => {\n        const index = trait.lastIndexOf('::');\n        if (index === -1) return trait;\n        imports.add(trait);\n        return trait.slice(index + 2);\n    });\n}\n\n/**\n * Helper function to get the serde field attribute format based on trait configuration.\n * Returns the appropriate attribute string for serde field customization, or empty string if no serde traits.\n */\nexport function getSerdeFieldAttribute(\n    serdeWith: string,\n    node: AccountNode | DefinedTypeNode | InstructionNode,\n    userOptions: TraitOptions = {},\n): string {\n    assertIsNode(node, ['accountNode', 'definedTypeNode', 'instructionNode']);\n    const options: Required<TraitOptions> = { ...DEFAULT_TRAIT_OPTIONS, ...userOptions };\n\n    // Get the node type and return early if it's a type alias.\n    const nodeType = getNodeType(node);\n    if (nodeType === 'alias') {\n        return '';\n    }\n\n    // Find all the traits for the node.\n    const sanitizedOverrides = Object.fromEntries(\n        Object.entries(options.overrides).map(([key, value]) => [camelCase(key), value]),\n    );\n    const nodeOverrides: string[] | undefined = sanitizedOverrides[node.name];\n    const allTraits = nodeOverrides === undefined ? getDefaultTraits(nodeType, options) : nodeOverrides;\n\n    // Check if serde traits are present.\n    const hasSerdeSerialize = allTraits.some(t => t === 'serde::Serialize' || t === 'Serialize');\n    const hasSerdeDeserialize = allTraits.some(t => t === 'serde::Deserialize' || t === 'Deserialize');\n\n    if (!hasSerdeSerialize && !hasSerdeDeserialize) {\n        return '';\n    }\n\n    // Check if serde is feature-flagged.\n    const partitionedTraits = partitionTraitsInFeatures(allTraits, options.featureFlags);\n    const featuredTraits = partitionedTraits[1];\n\n    // Find which feature flag contains serde traits.\n    let serdeFeatureName: string | undefined;\n    for (const [feature, traits] of Object.entries(featuredTraits)) {\n        if (\n            traits.some(\n                t => t === 'serde::Serialize' || t === 'serde::Deserialize' || t === 'Serialize' || t === 'Deserialize',\n            )\n        ) {\n            serdeFeatureName = feature;\n            break;\n        }\n    }\n\n    if (serdeFeatureName) {\n        return `#[cfg_attr(feature = \"${serdeFeatureName}\", serde(with = \"${serdeWith}\"))]\\n`;\n    } else {\n        return `#[serde(with = \"${serdeWith}\")]\\n`;\n    }\n}\n","import { CODAMA_ERROR__RENDERERS__UNSUPPORTED_NODE, CodamaError } from '@codama/errors';\nimport {\n    AccountNode,\n    arrayTypeNode,\n    CountNode,\n    DefinedTypeNode,\n    definedTypeNode,\n    fixedCountNode,\n    InstructionNode,\n    isNode,\n    NumberTypeNode,\n    numberTypeNode,\n    parseDocs,\n    pascalCase,\n    prefixedCountNode,\n    REGISTERED_TYPE_NODE_KINDS,\n    remainderCountNode,\n    resolveNestedTypeNode,\n    snakeCase,\n} from '@codama/nodes';\nimport { extendVisitor, mergeVisitor, pipe, visit } from '@codama/visitors-core';\n\nimport { ImportMap } from './ImportMap';\nimport {\n    GetImportFromFunction,\n    getSerdeFieldAttribute,\n    GetTraitsFromNodeFunction,\n    rustDocblock,\n    TraitOptions,\n} from './utils';\n\nexport type TypeManifest = {\n    imports: ImportMap;\n    nestedStructs: string[];\n    type: string;\n};\n\nexport function getTypeManifestVisitor(options: {\n    getImportFrom: GetImportFromFunction;\n    getTraitsFromNode: GetTraitsFromNodeFunction;\n    nestedStruct?: boolean;\n    parentName?: string | null;\n    traitOptions?: TraitOptions;\n}) {\n    const { getImportFrom, getTraitsFromNode, traitOptions } = options;\n    let parentName: string | null = options.parentName ?? null;\n    let nestedStruct: boolean = options.nestedStruct ?? false;\n    let inlineStruct: boolean = false;\n    let parentSize: NumberTypeNode | number | null = null;\n    let parentNode: AccountNode | DefinedTypeNode | InstructionNode | null = null;\n\n    return pipe(\n        mergeVisitor(\n            (): TypeManifest => ({ imports: new ImportMap(), nestedStructs: [], type: '' }),\n            (_, values) => ({\n                ...mergeManifests(values),\n                type: values.map(v => v.type).join('\\n'),\n            }),\n            { keys: [...REGISTERED_TYPE_NODE_KINDS, 'definedTypeLinkNode', 'definedTypeNode', 'accountNode'] },\n        ),\n        v =>\n            extendVisitor(v, {\n                visitAccount(account, { self }) {\n                    parentName = pascalCase(account.name);\n                    parentNode = account;\n                    const manifest = visit(account.data, self);\n                    const traits = getTraitsFromNode(account);\n                    manifest.imports.mergeWith(traits.imports);\n                    parentName = null;\n                    parentNode = null;\n                    return {\n                        ...manifest,\n                        type: traits.render + manifest.type,\n                    };\n                },\n\n                visitArrayType(arrayType, { self }) {\n                    const childManifest = visit(arrayType.item, self);\n\n                    if (isNode(arrayType.count, 'fixedCountNode')) {\n                        return {\n                            ...childManifest,\n                            type: `[${childManifest.type}; ${arrayType.count.value}]`,\n                        };\n                    }\n\n                    if (isNode(arrayType.count, 'remainderCountNode')) {\n                        childManifest.imports.add('spl_collections::TrailingVec');\n                        return {\n                            ...childManifest,\n                            type: `TrailingVec<${childManifest.type}>`,\n                        };\n                    }\n\n                    const prefix = resolveNestedTypeNode(arrayType.count.prefix);\n                    if (prefix.endian === 'le') {\n                        switch (prefix.format) {\n                            case 'u32':\n                                return {\n                                    ...childManifest,\n                                    type: `Vec<${childManifest.type}>`,\n                                };\n                            case 'u8':\n                            case 'u16':\n                            case 'u64': {\n                                const prefixFormat = prefix.format.toUpperCase();\n                                childManifest.imports.add(`spl_collections::${prefixFormat}PrefixedVec`);\n                                return {\n                                    ...childManifest,\n                                    type: `${prefixFormat}PrefixedVec<${childManifest.type}>`,\n                                };\n                            }\n                            case 'shortU16': {\n                                childManifest.imports.add('solana_short_vec::ShortVec');\n                                return {\n                                    ...childManifest,\n                                    type: `ShortVec<${childManifest.type}>`,\n                                };\n                            }\n                            default:\n                                throw new Error(`Array prefix not supported: ${prefix.format}`);\n                        }\n                    }\n\n                    // TODO: Add to the Rust validator.\n                    throw new Error('Array size not supported by Borsh');\n                },\n\n                visitBooleanType(booleanType) {\n                    const resolvedSize = resolveNestedTypeNode(booleanType.size);\n                    if (resolvedSize.format === 'u8' && resolvedSize.endian === 'le') {\n                        return {\n                            imports: new ImportMap(),\n                            nestedStructs: [],\n                            type: 'bool',\n                        };\n                    }\n\n                    // TODO: Add to the Rust validator.\n                    throw new Error('Bool size not supported by Borsh');\n                },\n\n                visitBytesType(_bytesType, { self }) {\n                    let arraySize: CountNode = remainderCountNode();\n                    if (typeof parentSize === 'number') {\n                        arraySize = fixedCountNode(parentSize);\n                    } else if (parentSize && typeof parentSize === 'object') {\n                        arraySize = prefixedCountNode(parentSize);\n                    }\n                    const arrayType = arrayTypeNode(numberTypeNode('u8'), arraySize);\n                    return visit(arrayType, self);\n                },\n\n                visitDefinedType(definedType, { self }) {\n                    parentName = pascalCase(definedType.name);\n                    parentNode = definedType;\n                    const manifest = visit(definedType.type, self);\n                    const traits = getTraitsFromNode(definedType);\n                    manifest.imports.mergeWith(traits.imports);\n                    parentName = null;\n                    parentNode = null;\n\n                    const renderedType = isNode(definedType.type, ['enumTypeNode', 'structTypeNode'])\n                        ? manifest.type\n                        : `pub type ${pascalCase(definedType.name)} = ${manifest.type};`;\n\n                    return { ...manifest, type: `${traits.render}${renderedType}` };\n                },\n\n                visitDefinedTypeLink(node) {\n                    const pascalCaseDefinedType = pascalCase(node.name);\n                    const importFrom = getImportFrom(node);\n                    return {\n                        imports: new ImportMap().add(`${importFrom}::${pascalCaseDefinedType}`),\n                        nestedStructs: [],\n                        type: pascalCaseDefinedType,\n                    };\n                },\n\n                visitEnumEmptyVariantType(enumEmptyVariantType) {\n                    const name = pascalCase(enumEmptyVariantType.name);\n                    return {\n                        imports: new ImportMap(),\n                        nestedStructs: [],\n                        type: `${name},`,\n                    };\n                },\n\n                visitEnumStructVariantType(enumStructVariantType, { self }) {\n                    const name = pascalCase(enumStructVariantType.name);\n                    const originalParentName = parentName;\n\n                    if (!originalParentName) {\n                        throw new Error('Enum struct variant type must have a parent name.');\n                    }\n\n                    inlineStruct = true;\n                    parentName = pascalCase(originalParentName) + name;\n                    const typeManifest = visit(enumStructVariantType.struct, self);\n                    inlineStruct = false;\n                    parentName = originalParentName;\n\n                    return {\n                        ...typeManifest,\n                        type: `${name} ${typeManifest.type},`,\n                    };\n                },\n\n                visitEnumTupleVariantType(enumTupleVariantType, { self }) {\n                    const name = pascalCase(enumTupleVariantType.name);\n                    const originalParentName = parentName;\n\n                    if (!originalParentName) {\n                        throw new Error('Enum struct variant type must have a parent name.');\n                    }\n\n                    parentName = pascalCase(originalParentName) + name;\n                    const childManifest = visit(enumTupleVariantType.tuple, self);\n                    parentName = originalParentName;\n\n                    let derive = '';\n                    if (parentNode && childManifest.type === '(Address)') {\n                        derive = getSerdeFieldAttribute(\n                            'serde_with::As::<serde_with::DisplayFromStr>',\n                            parentNode,\n                            traitOptions,\n                        );\n                    } else if (parentNode && childManifest.type === '(Vec<Address>)') {\n                        derive = getSerdeFieldAttribute(\n                            'serde_with::As::<Vec<serde_with::DisplayFromStr>>',\n                            parentNode,\n                            traitOptions,\n                        );\n                    }\n\n                    return {\n                        ...childManifest,\n                        type: `${derive}${name}${childManifest.type},`,\n                    };\n                },\n\n                visitEnumType(enumType, { self }) {\n                    const originalParentName = parentName;\n                    if (!originalParentName) {\n                        // TODO: Add to the Rust validator.\n                        throw new Error('Enum type must have a parent name.');\n                    }\n\n                    const variants = enumType.variants.map(variant => visit(variant, self));\n                    const variantNames = variants.map(variant => variant.type).join('\\n');\n                    const mergedManifest = mergeManifests(variants);\n\n                    return {\n                        ...mergedManifest,\n                        type: `pub enum ${pascalCase(originalParentName)} {\\n${variantNames}\\n}`,\n                    };\n                },\n\n                visitFixedSizeType(fixedSizeType, { self }) {\n                    parentSize = fixedSizeType.size;\n                    const manifest = visit(fixedSizeType.type, self);\n                    parentSize = null;\n                    return manifest;\n                },\n\n                visitMapType(mapType, { self }) {\n                    const key = visit(mapType.key, self);\n                    const value = visit(mapType.value, self);\n                    const mergedManifest = mergeManifests([key, value]);\n                    mergedManifest.imports.add('std::collections::HashMap');\n                    return {\n                        ...mergedManifest,\n                        type: `HashMap<${key.type}, ${value.type}>`,\n                    };\n                },\n\n                visitNumberType(numberType) {\n                    if (numberType.endian !== 'le') {\n                        // TODO: Add to the Rust validator.\n                        throw new Error('Number endianness not supported by Borsh');\n                    }\n\n                    if (numberType.format === 'shortU16') {\n                        return {\n                            imports: new ImportMap().add('solana_short_vec::ShortU16'),\n                            nestedStructs: [],\n                            type: 'ShortU16',\n                        };\n                    }\n\n                    return {\n                        imports: new ImportMap(),\n                        nestedStructs: [],\n                        type: numberType.format,\n                    };\n                },\n\n                visitOptionType(optionType, { self }) {\n                    const childManifest = visit(optionType.item, self);\n\n                    const optionPrefix = resolveNestedTypeNode(optionType.prefix);\n                    if (optionPrefix.format === 'u8' && optionPrefix.endian === 'le') {\n                        return {\n                            ...childManifest,\n                            type: `Option<${childManifest.type}>`,\n                        };\n                    }\n\n                    // TODO: Add to the Rust validator.\n                    throw new Error('Option size not supported by Borsh');\n                },\n\n                visitPublicKeyType() {\n                    return {\n                        imports: new ImportMap().add('solana_address::Address'),\n                        nestedStructs: [],\n                        type: 'Address',\n                    };\n                },\n\n                visitRemainderOptionType(node) {\n                    throw new CodamaError(CODAMA_ERROR__RENDERERS__UNSUPPORTED_NODE, { kind: node.kind, node });\n                },\n\n                visitSetType(setType, { self }) {\n                    const childManifest = visit(setType.item, self);\n                    childManifest.imports.add('std::collections::HashSet');\n                    return {\n                        ...childManifest,\n                        type: `HashSet<${childManifest.type}>`,\n                    };\n                },\n\n                visitSizePrefixType(sizePrefixType, { self }) {\n                    parentSize = resolveNestedTypeNode(sizePrefixType.prefix);\n                    const manifest = visit(sizePrefixType.type, self);\n                    parentSize = null;\n                    return manifest;\n                },\n\n                visitStringType() {\n                    if (!parentSize) {\n                        return {\n                            imports: new ImportMap().add(`spl_collections::TrailingStr`),\n                            nestedStructs: [],\n                            type: `TrailingStr`,\n                        };\n                    }\n\n                    if (typeof parentSize === 'number') {\n                        return {\n                            imports: new ImportMap(),\n                            nestedStructs: [],\n                            type: `[u8; ${parentSize}]`,\n                        };\n                    }\n\n                    if (isNode(parentSize, 'numberTypeNode') && parentSize.endian === 'le') {\n                        switch (parentSize.format) {\n                            case 'u32':\n                                return {\n                                    imports: new ImportMap(),\n                                    nestedStructs: [],\n                                    type: 'String',\n                                };\n                            case 'u8':\n                            case 'u16':\n                            case 'u64': {\n                                const prefix = parentSize.format.toUpperCase();\n                                return {\n                                    imports: new ImportMap().add(`spl_collections::${prefix}PrefixedStr`),\n                                    nestedStructs: [],\n                                    type: `${prefix}PrefixedStr`,\n                                };\n                            }\n                            default:\n                                throw new Error(`'String size not supported: ${parentSize.format}`);\n                        }\n                    }\n\n                    // TODO: Add to the Rust validator.\n                    throw new Error('String size not supported by Borsh');\n                },\n\n                visitStructFieldType(structFieldType, { self }) {\n                    const originalParentName = parentName;\n                    const originalInlineStruct = inlineStruct;\n                    const originalNestedStruct = nestedStruct;\n\n                    if (!originalParentName) {\n                        throw new Error('Struct field type must have a parent name.');\n                    }\n\n                    parentName = pascalCase(originalParentName) + pascalCase(structFieldType.name);\n                    nestedStruct = true;\n                    inlineStruct = false;\n\n                    const fieldManifest = visit(structFieldType.type, self);\n\n                    parentName = originalParentName;\n                    inlineStruct = originalInlineStruct;\n                    nestedStruct = originalNestedStruct;\n\n                    const fieldName = snakeCase(structFieldType.name);\n                    const docblock = rustDocblock(parseDocs(structFieldType.docs));\n                    const resolvedNestedType = resolveNestedTypeNode(structFieldType.type);\n\n                    let derive = '';\n                    if (parentNode) {\n                        if (fieldManifest.type === 'Address') {\n                            derive = getSerdeFieldAttribute(\n                                'serde_with::As::<serde_with::DisplayFromStr>',\n                                parentNode,\n                                traitOptions,\n                            );\n                        } else if (fieldManifest.type === 'Vec<Address>') {\n                            derive = getSerdeFieldAttribute(\n                                'serde_with::As::<Vec<serde_with::DisplayFromStr>>',\n                                parentNode,\n                                traitOptions,\n                            );\n                        } else if (\n                            isNode(resolvedNestedType, 'arrayTypeNode') &&\n                            isNode(resolvedNestedType.count, 'fixedCountNode') &&\n                            resolvedNestedType.count.value > 32\n                        ) {\n                            derive = getSerdeFieldAttribute('serde_big_array::BigArray', parentNode, traitOptions);\n                        } else if (\n                            isNode(resolvedNestedType, ['bytesTypeNode', 'stringTypeNode']) &&\n                            isNode(structFieldType.type, 'fixedSizeTypeNode') &&\n                            structFieldType.type.size > 32\n                        ) {\n                            derive = getSerdeFieldAttribute(\n                                'serde_with::As::<serde_with::Bytes>',\n                                parentNode,\n                                traitOptions,\n                            );\n                        }\n                    }\n\n                    return {\n                        ...fieldManifest,\n                        type: inlineStruct\n                            ? `${docblock}${derive}${fieldName}: ${fieldManifest.type},`\n                            : `${docblock}${derive}pub ${fieldName}: ${fieldManifest.type},`,\n                    };\n                },\n\n                visitStructType(structType, { self }) {\n                    const originalParentName = parentName;\n\n                    if (!originalParentName) {\n                        // TODO: Add to the Rust validator.\n                        throw new Error('Struct type must have a parent name.');\n                    }\n\n                    const fields = structType.fields.map(field => visit(field, self));\n                    const fieldTypes = fields.map(field => field.type).join('\\n');\n                    const mergedManifest = mergeManifests(fields);\n\n                    if (nestedStruct) {\n                        const nestedTraits = getTraitsFromNode(\n                            definedTypeNode({ name: originalParentName, type: structType }),\n                        );\n                        mergedManifest.imports.mergeWith(nestedTraits.imports);\n                        return {\n                            ...mergedManifest,\n                            nestedStructs: [\n                                ...mergedManifest.nestedStructs,\n                                `${nestedTraits.render}pub struct ${pascalCase(originalParentName)} {\\n${fieldTypes}\\n}`,\n                            ],\n                            type: pascalCase(originalParentName),\n                        };\n                    }\n\n                    if (inlineStruct) {\n                        return { ...mergedManifest, type: `{\\n${fieldTypes}\\n}` };\n                    }\n\n                    return {\n                        ...mergedManifest,\n                        type: `pub struct ${pascalCase(originalParentName)} {\\n${fieldTypes}\\n}`,\n                    };\n                },\n\n                visitTupleType(tupleType, { self }) {\n                    const items = tupleType.items.map(item => visit(item, self));\n                    const mergedManifest = mergeManifests(items);\n\n                    return {\n                        ...mergedManifest,\n                        type: `(${items.map(item => item.type).join(', ')})`,\n                    };\n                },\n\n                visitZeroableOptionType(node) {\n                    throw new CodamaError(CODAMA_ERROR__RENDERERS__UNSUPPORTED_NODE, { kind: node.kind, node });\n                },\n            }),\n    );\n}\n\nfunction mergeManifests(manifests: TypeManifest[]): Pick<TypeManifest, 'imports' | 'nestedStructs'> {\n    return {\n        imports: new ImportMap().mergeWith(...manifests.map(td => td.imports)),\n        nestedStructs: manifests.flatMap(m => m.nestedStructs),\n    };\n}\n","import { logWarn } from '@codama/errors';\nimport {\n    getAllAccounts,\n    getAllDefinedTypes,\n    getAllInstructionsWithSubs,\n    getAllPrograms,\n    InstructionNode,\n    isNode,\n    isNodeFilter,\n    pascalCase,\n    ProgramNode,\n    resolveNestedTypeNode,\n    snakeCase,\n    structTypeNodeFromInstructionArgumentNodes,\n    VALUE_NODES,\n} from '@codama/nodes';\nimport { addToRenderMap, createRenderMap, mergeRenderMaps } from '@codama/renderers-core';\nimport {\n    extendVisitor,\n    LinkableDictionary,\n    NodeStack,\n    pipe,\n    recordLinkablesOnFirstVisitVisitor,\n    recordNodeStackVisitor,\n    staticVisitor,\n    visit,\n} from '@codama/visitors-core';\n\nimport { getTypeManifestVisitor } from './getTypeManifestVisitor';\nimport { ImportMap } from './ImportMap';\nimport { renderValueNode } from './renderValueNodeVisitor';\nimport {\n    CargoDependencies,\n    Fragment,\n    getDiscriminatorConstants,\n    getImportFromFactory,\n    getTraitsFromNodeFactory,\n    LinkOverrides,\n    render,\n    TraitOptions,\n} from './utils';\n\nexport type GetRenderMapOptions = {\n    anchorTraits?: boolean;\n    defaultTraitOverrides?: string[];\n    dependencyMap?: Record<string, string>;\n    dependencyVersions?: CargoDependencies;\n    linkOverrides?: LinkOverrides;\n    renderParentInstructions?: boolean;\n    traitOptions?: TraitOptions;\n};\n\nexport function getRenderMapVisitor(options: GetRenderMapOptions = {}) {\n    const linkables = new LinkableDictionary();\n    const stack = new NodeStack();\n    let program: ProgramNode | null = null;\n\n    const renderParentInstructions = options.renderParentInstructions ?? false;\n    const dependencyMap = options.dependencyMap ?? {};\n    const getImportFrom = getImportFromFactory(options.linkOverrides ?? {});\n    const getTraitsFromNode = getTraitsFromNodeFactory(options.traitOptions);\n    const typeManifestVisitor = getTypeManifestVisitor({\n        getImportFrom,\n        getTraitsFromNode,\n        traitOptions: options.traitOptions,\n    });\n    const anchorTraits = options.anchorTraits ?? true;\n\n    return pipe(\n        staticVisitor(() => createRenderMap<Fragment>(), {\n            keys: ['rootNode', 'programNode', 'instructionNode', 'accountNode', 'definedTypeNode'],\n        }),\n        v =>\n            extendVisitor(v, {\n                visitAccount(node) {\n                    const typeManifest = visit(node, typeManifestVisitor);\n\n                    // Discriminator constants.\n                    const fields = resolveNestedTypeNode(node.data).fields;\n                    const discriminatorConstants = getDiscriminatorConstants({\n                        discriminatorNodes: node.discriminators ?? [],\n                        fields,\n                        getImportFrom,\n                        prefix: node.name,\n                        typeManifestVisitor,\n                    });\n\n                    // Seeds.\n                    const seedsImports = new ImportMap();\n                    const pda = node.pda ? linkables.get([...stack.getPath(), node.pda]) : undefined;\n                    const pdaSeeds = pda?.seeds ?? [];\n                    const seeds = pdaSeeds.map(seed => {\n                        if (isNode(seed, 'variablePdaSeedNode')) {\n                            const seedManifest = visit(seed.type, typeManifestVisitor);\n                            seedsImports.mergeWith(seedManifest.imports);\n                            const resolvedType = resolveNestedTypeNode(seed.type);\n                            return { ...seed, resolvedType, typeManifest: seedManifest };\n                        }\n                        if (isNode(seed.value, 'programIdValueNode')) {\n                            return seed;\n                        }\n                        const seedManifest = visit(seed.type, typeManifestVisitor);\n                        const valueManifest = renderValueNode(seed.value, getImportFrom, true);\n                        seedsImports.mergeWith(valueManifest.imports);\n                        const resolvedType = resolveNestedTypeNode(seed.type);\n                        return { ...seed, resolvedType, typeManifest: seedManifest, valueManifest };\n                    });\n                    const hasVariableSeeds = pdaSeeds.filter(isNodeFilter('variablePdaSeedNode')).length > 0;\n                    const constantSeeds = seeds\n                        .filter(isNodeFilter('constantPdaSeedNode'))\n                        .filter(seed => !isNode(seed.value, 'programIdValueNode'));\n\n                    const imports = typeManifest.imports\n                        .mergeWith(...(hasVariableSeeds ? [seedsImports] : []))\n                        .mergeWith(discriminatorConstants.imports)\n                        .remove(`generatedAccounts::${pascalCase(node.name)}`);\n\n                    return createRenderMap(`accounts/${snakeCase(node.name)}.rs`, {\n                        content: render('accountsPage.njk', {\n                            account: node,\n                            anchorTraits,\n                            constantSeeds,\n                            discriminatorConstants: discriminatorConstants.render,\n                            hasVariableSeeds,\n                            imports: imports.toString(dependencyMap),\n                            pda,\n                            program,\n                            seeds,\n                            typeManifest,\n                        }),\n                        imports,\n                    });\n                },\n\n                visitDefinedType(node) {\n                    const typeManifest = visit(node, typeManifestVisitor);\n                    const imports = new ImportMap()\n                        .mergeWithManifest(typeManifest)\n                        .remove(`generatedTypes::${pascalCase(node.name)}`);\n\n                    return createRenderMap(`types/${snakeCase(node.name)}.rs`, {\n                        content: render('definedTypesPage.njk', {\n                            definedType: node,\n                            imports: imports.toString(dependencyMap),\n                            typeManifest,\n                        }),\n                        imports,\n                    });\n                },\n\n                visitInstruction(node) {\n                    // Imports.\n                    const imports = new ImportMap();\n\n                    // canMergeAccountsAndArgs\n                    const accountsAndArgsConflicts = getConflictsForInstructionAccountsAndArgs(node);\n                    if (accountsAndArgsConflicts.length > 0) {\n                        logWarn(\n                            `[Rust] Accounts and args of instruction [${node.name}] have the following ` +\n                                `conflicting attributes [${accountsAndArgsConflicts.join(', ')}]. ` +\n                                `Thus, the conflicting arguments will be suffixed with \"_arg\". ` +\n                                'You may want to rename the conflicting attributes.',\n                        );\n                    }\n\n                    // Discriminator constants.\n                    const discriminatorConstants = getDiscriminatorConstants({\n                        discriminatorNodes: node.discriminators ?? [],\n                        fields: node.arguments,\n                        getImportFrom,\n                        prefix: node.name,\n                        typeManifestVisitor,\n                    });\n\n                    // Instruction args.\n                    const instructionArgs: {\n                        default: boolean;\n                        innerOptionType: string | null;\n                        name: string;\n                        optional: boolean;\n                        type: string;\n                        value: string | null;\n                    }[] = [];\n                    let hasArgs = false;\n                    let hasOptional = false;\n\n                    node.arguments.forEach(argument => {\n                        const argumentVisitor = getTypeManifestVisitor({\n                            getImportFrom,\n                            getTraitsFromNode,\n                            nestedStruct: true,\n                            parentName: `${pascalCase(node.name)}InstructionData`,\n                        });\n                        const manifest = visit(argument.type, argumentVisitor);\n                        imports.mergeWith(manifest.imports);\n                        const innerOptionType = isNode(argument.type, 'optionTypeNode')\n                            ? manifest.type.slice('Option<'.length, -1)\n                            : null;\n\n                        const hasDefaultValue = !!argument.defaultValue && isNode(argument.defaultValue, VALUE_NODES);\n                        let renderValue: string | null = null;\n                        if (hasDefaultValue) {\n                            const { imports: argImports, render: value } = renderValueNode(\n                                argument.defaultValue,\n                                getImportFrom,\n                            );\n                            imports.mergeWith(argImports);\n                            renderValue = value;\n                        }\n\n                        hasArgs = hasArgs || argument.defaultValueStrategy !== 'omitted';\n                        hasOptional = hasOptional || (hasDefaultValue && argument.defaultValueStrategy !== 'omitted');\n\n                        const name = accountsAndArgsConflicts.includes(argument.name)\n                            ? `${argument.name}_arg`\n                            : argument.name;\n\n                        instructionArgs.push({\n                            default: hasDefaultValue && argument.defaultValueStrategy === 'omitted',\n                            innerOptionType,\n                            name,\n                            optional: hasDefaultValue && argument.defaultValueStrategy !== 'omitted',\n                            type: manifest.type,\n                            value: renderValue,\n                        });\n                    });\n\n                    const struct = structTypeNodeFromInstructionArgumentNodes(node.arguments);\n                    const structVisitor = getTypeManifestVisitor({\n                        getImportFrom,\n                        getTraitsFromNode,\n                        parentName: `${pascalCase(node.name)}InstructionData`,\n                    });\n                    const typeManifest = visit(struct, structVisitor);\n\n                    const dataTraits = getTraitsFromNode(node);\n                    imports\n                        .mergeWith(dataTraits.imports)\n                        .mergeWith(discriminatorConstants.imports)\n                        .remove(`generatedInstructions::${pascalCase(node.name)}`);\n\n                    return createRenderMap(`instructions/${snakeCase(node.name)}.rs`, {\n                        content: render('instructionsPage.njk', {\n                            dataTraits: dataTraits.render,\n                            discriminatorConstants: discriminatorConstants.render,\n                            hasArgs,\n                            hasOptional,\n                            imports: imports.toString(dependencyMap),\n                            instruction: node,\n                            instructionArgs,\n                            program,\n                            typeManifest,\n                        }),\n                        imports,\n                    });\n                },\n\n                visitProgram(node, { self }) {\n                    program = node;\n                    let renders = mergeRenderMaps([\n                        ...node.accounts.map(account => visit(account, self)),\n                        ...node.definedTypes.map(type => visit(type, self)),\n                        ...getAllInstructionsWithSubs(node, {\n                            leavesOnly: !renderParentInstructions,\n                        }).map(ix => visit(ix, self)),\n                    ]);\n\n                    // Errors.\n                    if (node.errors.length > 0) {\n                        renders = addToRenderMap(renders, `errors/${snakeCase(node.name)}.rs`, {\n                            content: render('errorsPage.njk', {\n                                errors: node.errors,\n                                imports: new ImportMap().toString(dependencyMap),\n                                program: node,\n                            }),\n                            imports: new ImportMap(),\n                        });\n                    }\n\n                    program = null;\n                    return renders;\n                },\n\n                visitRoot(node, { self }) {\n                    const programsToExport = getAllPrograms(node);\n                    const accountsToExport = getAllAccounts(node);\n                    const instructionsToExport = getAllInstructionsWithSubs(node, {\n                        leavesOnly: !renderParentInstructions,\n                    });\n                    const definedTypesToExport = getAllDefinedTypes(node);\n                    const hasAnythingToExport =\n                        programsToExport.length > 0 ||\n                        accountsToExport.length > 0 ||\n                        instructionsToExport.length > 0 ||\n                        definedTypesToExport.length > 0;\n\n                    const ctx = {\n                        accountsToExport,\n                        definedTypesToExport,\n                        hasAnythingToExport,\n                        instructionsToExport,\n                        programsToExport,\n                        root: node,\n                    };\n\n                    return mergeRenderMaps([\n                        createRenderMap({\n                            ['accounts/mod.rs']:\n                                accountsToExport.length > 0\n                                    ? { content: render('accountsMod.njk', ctx), imports: new ImportMap() }\n                                    : undefined,\n                            ['errors/mod.rs']:\n                                programsToExport.length > 0\n                                    ? { content: render('errorsMod.njk', ctx), imports: new ImportMap() }\n                                    : undefined,\n                            ['instructions/mod.rs']:\n                                instructionsToExport.length > 0\n                                    ? { content: render('instructionsMod.njk', ctx), imports: new ImportMap() }\n                                    : undefined,\n                            ['mod.rs']: { content: render('rootMod.njk', ctx), imports: new ImportMap() },\n                            ['programs.rs']:\n                                programsToExport.length > 0\n                                    ? { content: render('programsMod.njk', ctx), imports: new ImportMap() }\n                                    : undefined,\n                            ['shared.rs']:\n                                accountsToExport.length > 0\n                                    ? { content: render('sharedPage.njk', ctx), imports: new ImportMap() }\n                                    : undefined,\n                            ['types/mod.rs']:\n                                definedTypesToExport.length > 0\n                                    ? { content: render('definedTypesMod.njk', ctx), imports: new ImportMap() }\n                                    : undefined,\n                        }),\n                        ...getAllPrograms(node).map(p => visit(p, self)),\n                    ]);\n                },\n            }),\n        v => recordNodeStackVisitor(v, stack),\n        v => recordLinkablesOnFirstVisitVisitor(v, linkables),\n    );\n}\n\nfunction getConflictsForInstructionAccountsAndArgs(instruction: InstructionNode): string[] {\n    const allNames = [\n        ...instruction.accounts.map(account => account.name),\n        ...instruction.arguments.map(argument => argument.name),\n    ];\n    const duplicates = allNames.filter((e, i, a) => a.indexOf(e) !== i);\n    return [...new Set(duplicates)];\n}\n","import { logError, logWarn } from '@codama/errors';\nimport { deleteDirectory, joinPath, writeRenderMap } from '@codama/renderers-core';\nimport { rootNodeVisitor, visit } from '@codama/visitors-core';\nimport { spawnSync } from 'child_process';\n\nimport { GetRenderMapOptions, getRenderMapVisitor } from './getRenderMapVisitor';\nimport { syncCargoToml } from './utils';\n\nexport type RenderOptions = GetRenderMapOptions & {\n    deleteFolderBeforeRendering?: boolean;\n    formatCode?: boolean;\n    generatedFolder?: string;\n    syncCargoToml?: boolean;\n    toolchain?: string;\n};\n\nexport function renderVisitor(crateFolder: string, options: RenderOptions = {}) {\n    return rootNodeVisitor(root => {\n        const generatedFolder = joinPath(crateFolder, options.generatedFolder ?? 'src/generated');\n\n        // Delete existing generated folder.\n        if (options.deleteFolderBeforeRendering ?? true) {\n            deleteDirectory(generatedFolder);\n        }\n\n        // Render the new files.\n        const renderMap = visit(root, getRenderMapVisitor(options));\n        writeRenderMap(renderMap, generatedFolder);\n\n        // Sync Cargo.toml dependencies and versions, if requested.\n        syncCargoToml(renderMap, crateFolder, options);\n\n        // format the code\n        if (options.formatCode) {\n            const removeFalsy = <T>(arg: T | false | null | undefined): arg is T => Boolean(arg);\n            runFormatter(\n                'cargo',\n                [options.toolchain, 'fmt', '--manifest-path', `${crateFolder}/Cargo.toml`].filter(removeFalsy),\n            );\n        }\n    });\n}\n\nfunction runFormatter(cmd: string, args: string[]) {\n    const { stdout, stderr, error } = spawnSync(cmd, args);\n    if (error?.message?.includes('ENOENT')) {\n        logWarn(`Could not find ${cmd}, skipping formatting.`);\n        return;\n    }\n    if (stdout.length > 0) {\n        logWarn(`(cargo-fmt) ${stdout ? stdout?.toString() : error}`);\n    }\n    if (stderr.length > 0) {\n        logError(`(cargo-fmt) ${stderr ? stderr.toString() : error}`);\n    }\n}\n"]}