@codama/renderers-js 1.3.4 → 1.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/dist/index.node.cjs +1543 -966
  2. package/dist/index.node.cjs.map +1 -1
  3. package/dist/index.node.mjs +1459 -879
  4. package/dist/index.node.mjs.map +1 -1
  5. package/dist/templates/fragments/instructionExtraArgs.njk +1 -1
  6. package/dist/templates/fragments/pdaFunction.njk +3 -3
  7. package/dist/templates/fragments/type.njk +3 -3
  8. package/dist/templates/fragments/typeDecoder.njk +1 -1
  9. package/dist/templates/fragments/typeEncoder.njk +1 -1
  10. package/dist/types/ImportMap.d.ts +1 -1
  11. package/dist/types/ImportMap.d.ts.map +1 -1
  12. package/dist/types/TypeManifest.d.ts +5 -5
  13. package/dist/types/TypeManifest.d.ts.map +1 -1
  14. package/dist/types/fragments/accountFetchHelpers.d.ts +1 -1
  15. package/dist/types/fragments/accountFetchHelpers.d.ts.map +1 -1
  16. package/dist/types/fragments/accountPdaHelpers.d.ts +1 -1
  17. package/dist/types/fragments/accountPdaHelpers.d.ts.map +1 -1
  18. package/dist/types/fragments/accountSizeHelpers.d.ts +1 -1
  19. package/dist/types/fragments/accountType.d.ts +1 -1
  20. package/dist/types/fragments/discriminatorCondition.d.ts +1 -1
  21. package/dist/types/fragments/discriminatorCondition.d.ts.map +1 -1
  22. package/dist/types/fragments/discriminatorConstants.d.ts +1 -1
  23. package/dist/types/fragments/discriminatorConstants.d.ts.map +1 -1
  24. package/dist/types/fragments/index.d.ts +0 -1
  25. package/dist/types/fragments/index.d.ts.map +1 -1
  26. package/dist/types/fragments/instructionAccountMeta.d.ts +1 -1
  27. package/dist/types/fragments/instructionAccountMeta.d.ts.map +1 -1
  28. package/dist/types/fragments/instructionAccountTypeParam.d.ts +1 -1
  29. package/dist/types/fragments/instructionAccountTypeParam.d.ts.map +1 -1
  30. package/dist/types/fragments/instructionByteDelta.d.ts +1 -1
  31. package/dist/types/fragments/instructionByteDelta.d.ts.map +1 -1
  32. package/dist/types/fragments/instructionData.d.ts +1 -1
  33. package/dist/types/fragments/instructionExtraArgs.d.ts +1 -1
  34. package/dist/types/fragments/instructionExtraArgs.d.ts.map +1 -1
  35. package/dist/types/fragments/instructionFunction.d.ts +1 -1
  36. package/dist/types/fragments/instructionFunction.d.ts.map +1 -1
  37. package/dist/types/fragments/instructionInputDefault.d.ts +1 -1
  38. package/dist/types/fragments/instructionInputDefault.d.ts.map +1 -1
  39. package/dist/types/fragments/instructionInputResolved.d.ts +1 -1
  40. package/dist/types/fragments/instructionInputResolved.d.ts.map +1 -1
  41. package/dist/types/fragments/instructionInputType.d.ts +1 -1
  42. package/dist/types/fragments/instructionInputType.d.ts.map +1 -1
  43. package/dist/types/fragments/instructionParseFunction.d.ts +1 -1
  44. package/dist/types/fragments/instructionParseFunction.d.ts.map +1 -1
  45. package/dist/types/fragments/instructionRemainingAccounts.d.ts +1 -1
  46. package/dist/types/fragments/instructionRemainingAccounts.d.ts.map +1 -1
  47. package/dist/types/fragments/instructionType.d.ts +1 -1
  48. package/dist/types/fragments/instructionType.d.ts.map +1 -1
  49. package/dist/types/fragments/pdaFunction.d.ts +1 -1
  50. package/dist/types/fragments/pdaFunction.d.ts.map +1 -1
  51. package/dist/types/fragments/program.d.ts +1 -1
  52. package/dist/types/fragments/program.d.ts.map +1 -1
  53. package/dist/types/fragments/programAccounts.d.ts +1 -1
  54. package/dist/types/fragments/programAccounts.d.ts.map +1 -1
  55. package/dist/types/fragments/programErrors.d.ts +1 -1
  56. package/dist/types/fragments/programErrors.d.ts.map +1 -1
  57. package/dist/types/fragments/programInstructions.d.ts +1 -1
  58. package/dist/types/fragments/programInstructions.d.ts.map +1 -1
  59. package/dist/types/fragments/type.d.ts +1 -1
  60. package/dist/types/fragments/type.d.ts.map +1 -1
  61. package/dist/types/fragments/typeCodec.d.ts +1 -1
  62. package/dist/types/fragments/typeCodec.d.ts.map +1 -1
  63. package/dist/types/fragments/typeDecoder.d.ts +1 -1
  64. package/dist/types/fragments/typeDecoder.d.ts.map +1 -1
  65. package/dist/types/fragments/typeDiscriminatedUnionHelpers.d.ts +1 -1
  66. package/dist/types/fragments/typeDiscriminatedUnionHelpers.d.ts.map +1 -1
  67. package/dist/types/fragments/typeEncoder.d.ts +1 -1
  68. package/dist/types/fragments/typeEncoder.d.ts.map +1 -1
  69. package/dist/types/fragments/typeWithCodec.d.ts +1 -1
  70. package/dist/types/getRenderMapVisitor.d.ts +1 -2
  71. package/dist/types/getRenderMapVisitor.d.ts.map +1 -1
  72. package/dist/types/getTypeManifestVisitor.d.ts +9 -3
  73. package/dist/types/getTypeManifestVisitor.d.ts.map +1 -1
  74. package/dist/types/utils/fragment.d.ts +20 -0
  75. package/dist/types/utils/fragment.d.ts.map +1 -0
  76. package/dist/types/utils/index.d.ts +1 -0
  77. package/dist/types/utils/index.d.ts.map +1 -1
  78. package/package.json +7 -7
  79. package/dist/types/fragments/common.d.ts +0 -25
  80. package/dist/types/fragments/common.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/ImportMap.ts","../src/fragments/accountFetchHelpers.ts","../src/fragments/common.ts","../src/utils/async.ts","../src/utils/codecs.ts","../src/utils/customData.ts","../src/utils/linkOverrides.ts","../src/utils/render.ts","../src/fragments/accountPdaHelpers.ts","../src/fragments/accountSizeHelpers.ts","../src/fragments/accountType.ts","../src/fragments/type.ts","../src/fragments/typeDecoder.ts","../src/fragments/typeEncoder.ts","../src/fragments/typeCodec.ts","../src/fragments/typeWithCodec.ts","../src/fragments/discriminatorCondition.ts","../src/fragments/instructionAccountMeta.ts","../src/fragments/instructionAccountTypeParam.ts","../src/fragments/instructionByteDelta.ts","../src/fragments/instructionData.ts","../src/fragments/discriminatorConstants.ts","../src/fragments/instructionExtraArgs.ts","../src/fragments/instructionFunction.ts","../src/fragments/instructionInputResolved.ts","../src/fragments/instructionInputDefault.ts","../src/fragments/instructionInputType.ts","../src/fragments/instructionRemainingAccounts.ts","../src/fragments/instructionParseFunction.ts","../src/fragments/instructionType.ts","../src/fragments/pdaFunction.ts","../src/fragments/program.ts","../src/fragments/programAccounts.ts","../src/fragments/programErrors.ts","../src/fragments/programInstructions.ts","../src/fragments/typeDiscriminatedUnionHelpers.ts","../src/TypeManifest.ts","../src/getRenderMapVisitor.ts","../src/getTypeManifestVisitor.ts","../src/nameTransformers.ts","../src/renderVisitor.ts"],"sourcesContent":["export * from './ImportMap';\nexport * from './TypeManifest';\nexport * from './getRenderMapVisitor';\nexport * from './getTypeManifestVisitor';\nexport * from './nameTransformers';\nexport * from './renderVisitor';\n\nexport { renderVisitor as default } from './renderVisitor';\n","import { Fragment } from './fragments';\nimport { TypeManifest } from './TypeManifest';\n\nconst DEFAULT_EXTERNAL_MODULE_MAP: Record<string, string> = {\n solanaAccounts: '@solana/kit',\n solanaAddresses: '@solana/kit',\n solanaCodecsCore: '@solana/kit',\n solanaCodecsDataStructures: '@solana/kit',\n solanaCodecsNumbers: '@solana/kit',\n solanaCodecsStrings: '@solana/kit',\n solanaErrors: '@solana/kit',\n solanaInstructions: '@solana/kit',\n solanaOptions: '@solana/kit',\n solanaPrograms: '@solana/kit',\n solanaRpcTypes: '@solana/kit',\n solanaSigners: '@solana/kit',\n};\n\nconst DEFAULT_GRANULAR_EXTERNAL_MODULE_MAP: Record<string, string> = {\n solanaAccounts: '@solana/accounts',\n solanaAddresses: '@solana/addresses',\n solanaCodecsCore: '@solana/codecs',\n solanaCodecsDataStructures: '@solana/codecs',\n solanaCodecsNumbers: '@solana/codecs',\n solanaCodecsStrings: '@solana/codecs',\n solanaErrors: '@solana/errors',\n solanaInstructions: '@solana/instructions',\n solanaOptions: '@solana/codecs',\n solanaPrograms: '@solana/programs',\n solanaRpcTypes: '@solana/rpc-types',\n solanaSigners: '@solana/signers',\n};\n\nconst DEFAULT_INTERNAL_MODULE_MAP: Record<string, string> = {\n errors: '../errors',\n generated: '..',\n generatedAccounts: '../accounts',\n generatedErrors: '../errors',\n generatedInstructions: '../instructions',\n generatedPdas: '../pdas',\n generatedPrograms: '../programs',\n generatedTypes: '../types',\n hooked: '../../hooked',\n shared: '../shared',\n types: '../types',\n};\n\nexport class ImportMap {\n protected readonly _imports: Map<string, Set<string>> = new Map();\n\n protected readonly _aliases: Map<string, Record<string, string>> = new Map();\n\n add(module: string, imports: Set<string> | string[] | string): ImportMap {\n const newImports = new Set(typeof imports === 'string' ? [imports] : imports);\n if (newImports.size === 0) return this;\n const currentImports = this._imports.get(module) ?? new Set();\n newImports.forEach(i => currentImports.add(i));\n this._imports.set(module, currentImports);\n return this;\n }\n\n remove(module: string, imports: Set<string> | string[] | string): ImportMap {\n const importsToRemove = new Set(typeof imports === 'string' ? [imports] : imports);\n if (importsToRemove.size === 0) return this;\n const currentImports = this._imports.get(module) ?? new Set();\n importsToRemove.forEach(i => currentImports.delete(i));\n if (currentImports.size === 0) {\n this._imports.delete(module);\n } else {\n this._imports.set(module, currentImports);\n }\n return this;\n }\n\n mergeWith(...others: (Fragment | ImportMap)[]): ImportMap {\n others.forEach(rawOther => {\n const other = 'imports' in rawOther ? rawOther.imports : rawOther;\n other._imports.forEach((imports, module) => {\n this.add(module, imports);\n });\n other._aliases.forEach((aliases, module) => {\n Object.entries(aliases).forEach(([name, alias]) => {\n this.addAlias(module, name, alias);\n });\n });\n });\n return this;\n }\n\n mergeWithManifest(manifest: TypeManifest): ImportMap {\n return this.mergeWith(manifest.strictType, manifest.looseType, manifest.encoder, manifest.decoder);\n }\n\n addAlias(module: string, name: string, alias: string): ImportMap {\n const currentAliases = this._aliases.get(module) ?? {};\n currentAliases[name] = alias;\n this._aliases.set(module, currentAliases);\n return this;\n }\n\n isEmpty(): boolean {\n return this._imports.size === 0;\n }\n\n resolve(dependencies: Record<string, string> = {}, useGranularImports = false): Map<string, Set<string>> {\n // Resolve aliases.\n const aliasedMap = new Map<string, Set<string>>(\n [...this._imports.entries()].map(([module, imports]) => {\n const aliasMap = this._aliases.get(module) ?? {};\n const joinedImports = [...imports].map(i => (aliasMap[i] ? `${i} as ${aliasMap[i]}` : i));\n return [module, new Set(joinedImports)];\n }),\n );\n\n // Resolve dependency mappings.\n const dependencyMap = {\n ...(useGranularImports ? DEFAULT_GRANULAR_EXTERNAL_MODULE_MAP : DEFAULT_EXTERNAL_MODULE_MAP),\n ...DEFAULT_INTERNAL_MODULE_MAP,\n ...dependencies,\n };\n const resolvedMap = new Map<string, Set<string>>();\n aliasedMap.forEach((imports, module) => {\n const resolvedModule: string = dependencyMap[module] ?? module;\n const currentImports = resolvedMap.get(resolvedModule) ?? new Set();\n imports.forEach(i => currentImports.add(i));\n resolvedMap.set(resolvedModule, currentImports);\n });\n\n return resolvedMap;\n }\n\n toString(dependencies: Record<string, string> = {}, useGranularImports = false): string {\n return [...this.resolve(dependencies, useGranularImports).entries()]\n .sort(([a], [b]) => {\n const aIsRelative = a.startsWith('.');\n const bIsRelative = b.startsWith('.');\n if (aIsRelative && !bIsRelative) return 1;\n if (!aIsRelative && bIsRelative) return -1;\n return a.localeCompare(b);\n })\n .map(([module, imports]) => {\n const joinedImports = [...imports]\n .sort()\n .filter(i => {\n // import of a type can either be '<Type>' or 'type <Type>', so\n // we filter out 'type <Type>' variation if there is a '<Type>'\n const name = i.split(' ');\n if (name.length > 1) {\n return !imports.has(name[1]);\n }\n return true;\n })\n .join(', ');\n return `import { ${joinedImports} } from '${module}';`;\n })\n .join('\\n');\n }\n}\n","import { AccountNode } from '@codama/nodes';\nimport { getLastNodeFromPath, NodePath } from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { TypeManifest } from '../TypeManifest';\nimport { Fragment, fragment, fragmentFromTemplate } from './common';\n\nexport function getAccountFetchHelpersFragment(\n scope: Pick<GlobalFragmentScope, 'customAccountData' | 'nameApi'> & {\n accountPath: NodePath<AccountNode>;\n typeManifest: TypeManifest;\n },\n): Fragment {\n const { accountPath, typeManifest, nameApi, customAccountData } = scope;\n const accountNode = getLastNodeFromPath(accountPath);\n const hasCustomData = customAccountData.has(accountNode.name);\n const accountTypeFragment = hasCustomData\n ? typeManifest.strictType.clone()\n : fragment(nameApi.dataType(accountNode.name));\n const decoderFunctionFragment = hasCustomData\n ? typeManifest.decoder.clone()\n : fragment(`${nameApi.decoderFunction(accountNode.name)}()`);\n\n return fragmentFromTemplate('accountFetchHelpers.njk', {\n accountType: accountTypeFragment.render,\n decodeFunction: nameApi.accountDecodeFunction(accountNode.name),\n decoderFunction: decoderFunctionFragment.render,\n fetchAllFunction: nameApi.accountFetchAllFunction(accountNode.name),\n fetchAllMaybeFunction: nameApi.accountFetchAllMaybeFunction(accountNode.name),\n fetchFunction: nameApi.accountFetchFunction(accountNode.name),\n fetchMaybeFunction: nameApi.accountFetchMaybeFunction(accountNode.name),\n })\n .mergeImportsWith(accountTypeFragment, decoderFunctionFragment)\n .addImports('solanaAddresses', ['type Address'])\n .addImports('solanaAccounts', [\n 'type Account',\n 'assertAccountExists',\n 'assertAccountsExist',\n 'decodeAccount',\n 'type EncodedAccount',\n 'fetchEncodedAccount',\n 'fetchEncodedAccounts',\n 'type FetchAccountConfig',\n 'type FetchAccountsConfig',\n 'type MaybeAccount',\n 'type MaybeEncodedAccount',\n ]);\n}\n","import { join } from 'node:path';\n\nimport { ConfigureOptions } from 'nunjucks';\n\nimport { ImportMap } from '../ImportMap';\nimport { render } from '../utils';\n\nexport function fragment(render: string, imports?: ImportMap): Fragment {\n return new Fragment(render, imports);\n}\n\nexport function fragmentFromTemplate(fragmentFile: string, context?: object, options?: ConfigureOptions): Fragment {\n return fragment(render(join('fragments', fragmentFile), context, options));\n}\n\nexport function mergeFragments(fragments: Fragment[], mergeRenders: (renders: string[]) => string): Fragment {\n return new Fragment(\n mergeRenders(fragments.map(f => f.render)),\n new ImportMap().mergeWith(...fragments),\n new Set(fragments.flatMap(f => [...f.features])),\n );\n}\n\nexport class Fragment {\n public render: string;\n\n public imports: ImportMap;\n\n public features: Set<FragmentFeature>;\n\n constructor(render: string, imports?: ImportMap, features?: Set<FragmentFeature>) {\n this.render = render;\n this.imports = imports ? new ImportMap().mergeWith(imports) : new ImportMap();\n this.features = new Set([...(features ?? [])]);\n }\n\n setRender(render: string): this {\n this.render = render;\n return this;\n }\n\n mapRender(fn: (render: string) => string): this {\n this.render = fn(this.render);\n return this;\n }\n\n addImports(module: string, imports: Set<string> | string[] | string): this {\n this.imports.add(module, imports);\n return this;\n }\n\n removeImports(module: string, imports: Set<string> | string[] | string): this {\n this.imports.remove(module, imports);\n return this;\n }\n\n mergeImportsWith(...others: (Fragment | ImportMap)[]): this {\n this.imports.mergeWith(...others);\n return this;\n }\n\n addImportAlias(module: string, name: string, alias: string): this {\n this.imports.addAlias(module, name, alias);\n return this;\n }\n\n addFeatures(features: FragmentFeature | FragmentFeature[]): this {\n const featureArray = typeof features === 'string' ? [features] : features;\n featureArray.forEach(f => this.features.add(f));\n return this;\n }\n\n removeFeatures(features: FragmentFeature | FragmentFeature[]): this {\n const featureArray = typeof features === 'string' ? [features] : features;\n featureArray.forEach(f => this.features.delete(f));\n return this;\n }\n\n hasFeatures(features: FragmentFeature | FragmentFeature[]): boolean {\n const featureArray = typeof features === 'string' ? [features] : features;\n return featureArray.every(f => this.features.has(f));\n }\n\n mergeFeaturesWith(...others: Fragment[]): this {\n others.forEach(f => this.addFeatures([...f.features]));\n return this;\n }\n\n clone(): Fragment {\n return new Fragment(this.render).mergeImportsWith(this.imports);\n }\n\n toString(): string {\n return this.render;\n }\n}\n\nexport type FragmentFeature = 'instruction:resolverScopeVariable';\n","import {\n AccountValueNode,\n accountValueNode,\n ArgumentValueNode,\n argumentValueNode,\n CamelCaseString,\n InstructionAccountNode,\n InstructionArgumentNode,\n InstructionInputValueNode,\n InstructionNode,\n isNode,\n} from '@codama/nodes';\nimport { deduplicateInstructionDependencies, ResolvedInstructionInput } from '@codama/visitors-core';\n\nexport function hasAsyncFunction(\n instructionNode: InstructionNode,\n resolvedInputs: ResolvedInstructionInput[],\n asyncResolvers: string[],\n): boolean {\n const hasByteDeltasAsync = (instructionNode.byteDeltas ?? []).some(\n ({ value }) => isNode(value, 'resolverValueNode') && asyncResolvers.includes(value.name),\n );\n const hasRemainingAccountsAsync = (instructionNode.remainingAccounts ?? []).some(\n ({ value }) => isNode(value, 'resolverValueNode') && asyncResolvers.includes(value.name),\n );\n\n return hasAsyncDefaultValues(resolvedInputs, asyncResolvers) || hasByteDeltasAsync || hasRemainingAccountsAsync;\n}\n\nexport function hasAsyncDefaultValues(resolvedInputs: ResolvedInstructionInput[], asyncResolvers: string[]): boolean {\n return resolvedInputs.some(\n input => !!input.defaultValue && isAsyncDefaultValue(input.defaultValue, asyncResolvers),\n );\n}\n\nexport function isAsyncDefaultValue(defaultValue: InstructionInputValueNode, asyncResolvers: string[]): boolean {\n switch (defaultValue.kind) {\n case 'pdaValueNode':\n return true;\n case 'resolverValueNode':\n return asyncResolvers.includes(defaultValue.name);\n case 'conditionalValueNode':\n return (\n isAsyncDefaultValue(defaultValue.condition, asyncResolvers) ||\n (defaultValue.ifFalse == null ? false : isAsyncDefaultValue(defaultValue.ifFalse, asyncResolvers)) ||\n (defaultValue.ifTrue == null ? false : isAsyncDefaultValue(defaultValue.ifTrue, asyncResolvers))\n );\n default:\n return false;\n }\n}\n\nexport function getInstructionDependencies(\n input: InstructionAccountNode | InstructionArgumentNode | InstructionNode,\n asyncResolvers: string[],\n useAsync: boolean,\n): (AccountValueNode | ArgumentValueNode)[] {\n if (isNode(input, 'instructionNode')) {\n return deduplicateInstructionDependencies([\n ...input.accounts.flatMap(x => getInstructionDependencies(x, asyncResolvers, useAsync)),\n ...input.arguments.flatMap(x => getInstructionDependencies(x, asyncResolvers, useAsync)),\n ...(input.extraArguments ?? []).flatMap(x => getInstructionDependencies(x, asyncResolvers, useAsync)),\n ]);\n }\n\n if (!input.defaultValue) return [];\n\n const getNestedDependencies = (\n defaultValue: InstructionInputValueNode | undefined,\n ): (AccountValueNode | ArgumentValueNode)[] => {\n if (!defaultValue) return [];\n return getInstructionDependencies({ ...input, defaultValue }, asyncResolvers, useAsync);\n };\n\n if (isNode(input.defaultValue, ['accountValueNode', 'accountBumpValueNode'])) {\n return [accountValueNode(input.defaultValue.name)];\n }\n\n if (isNode(input.defaultValue, ['argumentValueNode'])) {\n return [argumentValueNode(input.defaultValue.name)];\n }\n\n if (isNode(input.defaultValue, 'pdaValueNode')) {\n const dependencies = new Map<CamelCaseString, AccountValueNode | ArgumentValueNode>();\n input.defaultValue.seeds.forEach(seed => {\n if (isNode(seed.value, ['accountValueNode', 'argumentValueNode'])) {\n dependencies.set(seed.value.name, { ...seed.value });\n }\n });\n return [...dependencies.values()];\n }\n\n if (isNode(input.defaultValue, 'resolverValueNode')) {\n const isSynchronousResolver = !asyncResolvers.includes(input.defaultValue.name);\n if (useAsync || isSynchronousResolver) {\n return input.defaultValue.dependsOn ?? [];\n }\n }\n\n if (isNode(input.defaultValue, 'conditionalValueNode')) {\n return deduplicateInstructionDependencies([\n ...getNestedDependencies(input.defaultValue.condition),\n ...getNestedDependencies(input.defaultValue.ifTrue),\n ...getNestedDependencies(input.defaultValue.ifFalse),\n ]);\n }\n\n return [];\n}\n","import { 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 AccountNode,\n camelCase,\n CamelCaseString,\n DefinedTypeLinkNode,\n definedTypeLinkNode,\n DefinedTypeNode,\n definedTypeNode,\n InstructionNode,\n isNode,\n structTypeNodeFromInstructionArgumentNodes,\n} from '@codama/nodes';\n\nexport type CustomDataOptions =\n | string\n | {\n extract?: boolean;\n extractAs?: string;\n importAs?: string;\n importFrom?: string;\n name: string;\n };\n\nexport type ParsedCustomDataOptions = Map<\n CamelCaseString,\n {\n extract: boolean;\n extractAs: CamelCaseString;\n importAs: CamelCaseString;\n importFrom: string;\n linkNode: DefinedTypeLinkNode;\n }\n>;\n\nexport const parseCustomDataOptions = (\n customDataOptions: CustomDataOptions[],\n defaultSuffix: string,\n): ParsedCustomDataOptions =>\n new Map(\n customDataOptions.map(o => {\n const options = typeof o === 'string' ? { name: o } : o;\n const importAs = camelCase(options.importAs ?? `${options.name}${defaultSuffix}`);\n const importFrom = options.importFrom ?? 'hooked';\n return [\n camelCase(options.name),\n {\n extract: options.extract ?? false,\n extractAs: options.extractAs ? camelCase(options.extractAs) : importAs,\n importAs,\n importFrom,\n linkNode: definedTypeLinkNode(importAs),\n },\n ];\n }),\n );\n\nexport const getDefinedTypeNodesToExtract = (\n nodes: AccountNode[] | InstructionNode[],\n parsedCustomDataOptions: ParsedCustomDataOptions,\n): DefinedTypeNode[] =>\n nodes.flatMap(node => {\n const options = parsedCustomDataOptions.get(node.name);\n if (!options || !options.extract) return [];\n\n if (isNode(node, 'accountNode')) {\n return [definedTypeNode({ name: options.extractAs, type: { ...node.data } })];\n }\n\n return [\n definedTypeNode({\n name: options.extractAs,\n type: structTypeNodeFromInstructionArgumentNodes(node.arguments),\n }),\n ];\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\nimport { ParsedCustomDataOptions } from './customData';\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(\n overrides: LinkOverrides,\n customAccountData: ParsedCustomDataOptions,\n customInstructionData: ParsedCustomDataOptions,\n): GetImportFromFunction {\n const customDataOverrides = Object.fromEntries(\n [...customAccountData.values(), ...customInstructionData.values()].map(({ importFrom, importAs }) => [\n importAs,\n importFrom,\n ]),\n );\n const linkOverrides = {\n accounts: overrides.accounts ?? {},\n definedTypes: { ...customDataOverrides, ...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] ?? 'generatedPdas';\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 jsDocblock(docs: string[]): string {\n if (docs.length <= 0) return '';\n if (docs.length === 1) return `/** ${docs[0]} */\\n`;\n const lines = docs.map(doc => ` * ${doc}`);\n return `/**\\n${lines.join('\\n')}\\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('jsDocblock', jsDocblock);\n return env.render(template, context);\n};\n","import { AccountNode, isNodeFilter } from '@codama/nodes';\nimport { findProgramNodeFromPath, getLastNodeFromPath, NodePath } from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport type { TypeManifest } from '../TypeManifest';\nimport { Fragment, fragment, fragmentFromTemplate } from './common';\n\nexport function getAccountPdaHelpersFragment(\n scope: Pick<GlobalFragmentScope, 'customAccountData' | 'linkables' | 'nameApi'> & {\n accountPath: NodePath<AccountNode>;\n typeManifest: TypeManifest;\n },\n): Fragment {\n const { accountPath, nameApi, linkables, customAccountData, typeManifest } = scope;\n const accountNode = getLastNodeFromPath(accountPath);\n const programNode = findProgramNodeFromPath(accountPath)!;\n const pdaNode = accountNode.pda ? linkables.get([...accountPath, accountNode.pda]) : undefined;\n if (!pdaNode) {\n return fragment('');\n }\n\n const accountTypeFragment = customAccountData.has(accountNode.name)\n ? typeManifest.strictType.clone()\n : fragment(nameApi.dataType(accountNode.name));\n\n // Here we cannot use the `getImportFrom` function because\n // we need to know the seeds of the PDA in order to know\n // if we need to render a `seeds` argument or not.\n const importFrom = 'generatedPdas';\n const pdaSeedsType = nameApi.pdaSeedsType(pdaNode.name);\n const findPdaFunction = nameApi.pdaFindFunction(pdaNode.name);\n const hasVariableSeeds = pdaNode.seeds.filter(isNodeFilter('variablePdaSeedNode')).length > 0;\n\n return fragmentFromTemplate('accountPdaHelpers.njk', {\n accountType: accountTypeFragment.render,\n fetchFromSeedsFunction: nameApi.accountFetchFromSeedsFunction(accountNode.name),\n fetchFunction: nameApi.accountFetchFunction(accountNode.name),\n fetchMaybeFromSeedsFunction: nameApi.accountFetchMaybeFromSeedsFunction(accountNode.name),\n fetchMaybeFunction: nameApi.accountFetchMaybeFunction(accountNode.name),\n findPdaFunction,\n hasVariableSeeds,\n pdaSeedsType,\n program: programNode,\n })\n .mergeImportsWith(accountTypeFragment)\n .addImports(importFrom, hasVariableSeeds ? [pdaSeedsType, findPdaFunction] : [findPdaFunction])\n .addImports('solanaAddresses', ['type Address'])\n .addImports('solanaAccounts', [\n 'type Account',\n 'assertAccountExists',\n 'type FetchAccountConfig',\n 'type MaybeAccount',\n ]);\n}\n","import { AccountNode } from '@codama/nodes';\nimport { getLastNodeFromPath, NodePath } from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { Fragment, fragment, fragmentFromTemplate } from './common';\n\nexport function getAccountSizeHelpersFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi'> & { accountPath: NodePath<AccountNode> },\n): Fragment {\n const { accountPath, nameApi } = scope;\n const accountNode = getLastNodeFromPath(accountPath);\n if (accountNode.size == null) {\n return fragment('');\n }\n\n return fragmentFromTemplate('accountSizeHelpers.njk', {\n account: accountNode,\n getSizeFunction: nameApi.accountGetSizeFunction(accountNode.name),\n });\n}\n","import { AccountNode, resolveNestedTypeNode } from '@codama/nodes';\nimport { getLastNodeFromPath, NodePath } from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { TypeManifest } from '../TypeManifest';\nimport { Fragment, fragment } from './common';\nimport { getTypeWithCodecFragment } from './typeWithCodec';\n\nexport function getAccountTypeFragment(\n scope: Pick<GlobalFragmentScope, 'customAccountData' | 'nameApi'> & {\n accountPath: NodePath<AccountNode>;\n size: number | null;\n typeManifest: TypeManifest;\n },\n): Fragment {\n const { accountPath, typeManifest, nameApi, customAccountData } = scope;\n const accountNode = getLastNodeFromPath(accountPath);\n\n if (customAccountData.has(accountNode.name)) {\n return fragment('');\n }\n\n return getTypeWithCodecFragment({\n manifest: typeManifest,\n name: accountNode.name,\n nameApi,\n node: resolveNestedTypeNode(accountNode.data),\n size: scope.size,\n });\n}\n","import type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { TypeManifest } from '../TypeManifest';\nimport { Fragment, fragmentFromTemplate } from './common';\n\nexport function getTypeFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi'> & {\n docs?: string[];\n manifest: TypeManifest;\n name: string;\n },\n): Fragment {\n const { name, manifest, nameApi, docs = [] } = scope;\n const typeFragment = fragmentFromTemplate('type.njk', {\n docs,\n looseName: nameApi.dataArgsType(name),\n manifest,\n strictName: nameApi.dataType(name),\n });\n\n if (!manifest.isEnum) {\n typeFragment.mergeImportsWith(manifest.strictType, manifest.looseType);\n }\n\n return typeFragment;\n}\n","import { isDataEnum, isNode, TypeNode } from '@codama/nodes';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { TypeManifest } from '../TypeManifest';\nimport { Fragment, fragmentFromTemplate } from './common';\n\nexport function getTypeDecoderFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi'> & {\n docs?: string[];\n manifest: Pick<TypeManifest, 'decoder'>;\n name: string;\n node: TypeNode;\n size: number | null;\n },\n): Fragment {\n const { name, node, manifest, nameApi, docs = [] } = scope;\n const decoderType = typeof scope.size === 'number' ? 'FixedSizeDecoder' : 'Decoder';\n const useTypeCast = isNode(node, 'enumTypeNode') && isDataEnum(node) && typeof scope.size === 'number';\n\n return fragmentFromTemplate('typeDecoder.njk', {\n decoderFunction: nameApi.decoderFunction(name),\n decoderType,\n docs,\n looseName: nameApi.dataArgsType(name),\n manifest,\n strictName: nameApi.dataType(name),\n useTypeCast,\n })\n .mergeImportsWith(manifest.decoder)\n .addImports('solanaCodecsCore', `type ${decoderType}`);\n}\n","import { isDataEnum, isNode, TypeNode } from '@codama/nodes';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { TypeManifest } from '../TypeManifest';\nimport { Fragment, fragmentFromTemplate } from './common';\n\nexport function getTypeEncoderFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi'> & {\n docs?: string[];\n manifest: Pick<TypeManifest, 'encoder'>;\n name: string;\n node: TypeNode;\n size: number | null;\n },\n): Fragment {\n const { name, node, manifest, nameApi, docs = [] } = scope;\n const encoderType = typeof scope.size === 'number' ? 'FixedSizeEncoder' : 'Encoder';\n const useTypeCast = isNode(node, 'enumTypeNode') && isDataEnum(node) && typeof scope.size === 'number';\n\n return fragmentFromTemplate('typeEncoder.njk', {\n docs,\n encoderFunction: nameApi.encoderFunction(name),\n encoderType,\n looseName: nameApi.dataArgsType(name),\n manifest,\n strictName: nameApi.dataType(name),\n useTypeCast,\n })\n .mergeImportsWith(manifest.encoder)\n .addImports('solanaCodecsCore', `type ${encoderType}`);\n}\n","import type { TypeNode } from '@codama/nodes';\n\nimport { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { TypeManifest } from '../TypeManifest';\nimport { Fragment, fragmentFromTemplate, mergeFragments } from './common';\nimport { getTypeDecoderFragment } from './typeDecoder';\nimport { getTypeEncoderFragment } from './typeEncoder';\n\nexport function getTypeCodecFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi'> & {\n codecDocs?: string[];\n decoderDocs?: string[];\n encoderDocs?: string[];\n manifest: Pick<TypeManifest, 'decoder' | 'encoder'>;\n name: string;\n node: TypeNode;\n size: number | null;\n },\n): Fragment {\n const { name, manifest, nameApi } = scope;\n const codecType = typeof scope.size === 'number' ? 'FixedSizeCodec' : 'Codec';\n return mergeFragments(\n [\n getTypeEncoderFragment({ ...scope, docs: scope.encoderDocs }),\n getTypeDecoderFragment({ ...scope, docs: scope.decoderDocs }),\n fragmentFromTemplate('typeCodec.njk', {\n codecFunction: nameApi.codecFunction(name),\n codecType,\n decoderFunction: nameApi.decoderFunction(name),\n docs: scope.codecDocs,\n encoderFunction: nameApi.encoderFunction(name),\n looseName: nameApi.dataArgsType(name),\n manifest,\n strictName: nameApi.dataType(name),\n }).addImports('solanaCodecsCore', [`type ${codecType}`, 'combineCodec']),\n ],\n renders => renders.join('\\n\\n'),\n );\n}\n","import type { TypeNode } from '@codama/nodes';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { TypeManifest } from '../TypeManifest';\nimport { Fragment, mergeFragments } from './common';\nimport { getTypeFragment } from './type';\nimport { getTypeCodecFragment } from './typeCodec';\n\nexport function getTypeWithCodecFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi'> & {\n codecDocs?: string[];\n decoderDocs?: string[];\n encoderDocs?: string[];\n manifest: TypeManifest;\n name: string;\n node: TypeNode;\n size: number | null;\n typeDocs?: string[];\n },\n): Fragment {\n return mergeFragments([getTypeFragment({ ...scope, docs: scope.typeDocs }), getTypeCodecFragment(scope)], renders =>\n renders.join('\\n\\n'),\n );\n}\n","import {\n type ConstantDiscriminatorNode,\n constantDiscriminatorNode,\n constantValueNode,\n constantValueNodeFromBytes,\n type DiscriminatorNode,\n type FieldDiscriminatorNode,\n isNode,\n isNodeFilter,\n type ProgramNode,\n type SizeDiscriminatorNode,\n type StructTypeNode,\n} from '@codama/nodes';\nimport { visit } from '@codama/visitors-core';\nimport { getBase64Decoder } from '@solana/codecs-strings';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { Fragment, fragment, mergeFragments } from './common';\n\n/**\n * ```\n * if (data.length === 72) {\n * return splTokenAccounts.TOKEN;\n * }\n *\n * if (containsBytes(data, getU32Encoder().encode(42), offset)) {\n * return splTokenAccounts.TOKEN;\n * }\n *\n * if (containsBytes(data, new Uint8Array([1, 2, 3]), offset)) {\n * return splTokenAccounts.TOKEN;\n * }\n * ```\n */\nexport function getDiscriminatorConditionFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi' | 'typeManifestVisitor'> & {\n dataName: string;\n discriminators: DiscriminatorNode[];\n ifTrue: string;\n programNode: ProgramNode;\n struct: StructTypeNode;\n },\n): Fragment {\n return mergeFragments(\n scope.discriminators.flatMap(discriminator => {\n if (isNode(discriminator, 'sizeDiscriminatorNode')) {\n return [getSizeConditionFragment(discriminator, scope)];\n }\n if (isNode(discriminator, 'constantDiscriminatorNode')) {\n return [getByteConditionFragment(discriminator, scope)];\n }\n if (isNode(discriminator, 'fieldDiscriminatorNode')) {\n return [getFieldConditionFragment(discriminator, scope)];\n }\n return [];\n }),\n r => r.join(' && '),\n ).mapRender(r => `if (${r}) { ${scope.ifTrue}; }`);\n}\n\nfunction getSizeConditionFragment(\n discriminator: SizeDiscriminatorNode,\n scope: Pick<GlobalFragmentScope, 'typeManifestVisitor'> & {\n dataName: string;\n },\n): Fragment {\n const { dataName } = scope;\n return fragment(`${dataName}.length === ${discriminator.size}`);\n}\n\nfunction getByteConditionFragment(\n discriminator: ConstantDiscriminatorNode,\n scope: Pick<GlobalFragmentScope, 'typeManifestVisitor'> & {\n dataName: string;\n },\n): Fragment {\n const { dataName, typeManifestVisitor } = scope;\n const constant = visit(discriminator.constant, typeManifestVisitor).value;\n return constant\n .mapRender(r => `containsBytes(${dataName}, ${r}, ${discriminator.offset})`)\n .addImports('solanaCodecsCore', 'containsBytes');\n}\n\nfunction getFieldConditionFragment(\n discriminator: FieldDiscriminatorNode,\n scope: Pick<GlobalFragmentScope, 'typeManifestVisitor'> & {\n dataName: string;\n struct: StructTypeNode;\n },\n): Fragment {\n const field = scope.struct.fields.find(f => f.name === discriminator.name);\n if (!field || !field.defaultValue) {\n // TODO: Coded error.\n throw new Error(\n `Field discriminator \"${discriminator.name}\" does not have a matching argument with default value.`,\n );\n }\n\n // This handles the case where a field uses an u8 array to represent its discriminator.\n // In this case, we can simplify the generated code by delegating to a constantDiscriminatorNode.\n if (\n isNode(field.type, 'arrayTypeNode') &&\n isNode(field.type.item, 'numberTypeNode') &&\n field.type.item.format === 'u8' &&\n isNode(field.type.count, 'fixedCountNode') &&\n isNode(field.defaultValue, 'arrayValueNode') &&\n field.defaultValue.items.every(isNodeFilter('numberValueNode'))\n ) {\n const base64Bytes = getBase64Decoder().decode(\n new Uint8Array(field.defaultValue.items.map(node => node.number)),\n );\n return getByteConditionFragment(\n constantDiscriminatorNode(constantValueNodeFromBytes('base64', base64Bytes), discriminator.offset),\n scope,\n );\n }\n\n return getByteConditionFragment(\n constantDiscriminatorNode(constantValueNode(field.type, field.defaultValue), discriminator.offset),\n scope,\n );\n}\n","import { InstructionAccountNode, pascalCase } from '@codama/nodes';\n\nimport { Fragment, fragment } from './common';\n\nexport function getInstructionAccountMetaFragment(instructionAccountNode: InstructionAccountNode): Fragment {\n const typeParam = `TAccount${pascalCase(instructionAccountNode.name)}`;\n\n // Writable, signer.\n if (instructionAccountNode.isSigner === true && instructionAccountNode.isWritable) {\n return fragment(`WritableSignerAccount<${typeParam}> & AccountSignerMeta<${typeParam}>`)\n .addImports('solanaInstructions', ['type WritableSignerAccount'])\n .addImports('solanaSigners', ['type AccountSignerMeta']);\n }\n\n // Readonly, signer.\n if (instructionAccountNode.isSigner === true) {\n return fragment(`ReadonlySignerAccount<${typeParam}> & AccountSignerMeta<${typeParam}>`)\n .addImports('solanaInstructions', ['type ReadonlySignerAccount'])\n .addImports('solanaSigners', ['type AccountSignerMeta']);\n }\n\n // Writable, non-signer or optional signer.\n if (instructionAccountNode.isWritable) {\n return fragment(`WritableAccount<${typeParam}>`).addImports('solanaInstructions', 'type WritableAccount');\n }\n\n // Readonly, non-signer or optional signer.\n return fragment(`ReadonlyAccount<${typeParam}>`).addImports('solanaInstructions', 'type ReadonlyAccount');\n}\n","import { InstructionAccountNode, InstructionInputValueNode, pascalCase } from '@codama/nodes';\nimport {\n findInstructionNodeFromPath,\n findProgramNodeFromPath,\n getLastNodeFromPath,\n LinkableDictionary,\n NodePath,\n} from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { ImportMap } from '../ImportMap';\nimport { Fragment, fragment } from './common';\n\nexport function getInstructionAccountTypeParamFragment(\n scope: Pick<GlobalFragmentScope, 'linkables'> & {\n allowAccountMeta: boolean;\n instructionAccountPath: NodePath<InstructionAccountNode>;\n },\n): Fragment {\n const { instructionAccountPath, allowAccountMeta, linkables } = scope;\n const instructionAccountNode = getLastNodeFromPath(instructionAccountPath);\n const instructionNode = findInstructionNodeFromPath(instructionAccountPath)!;\n const programNode = findProgramNodeFromPath(instructionAccountPath)!;\n const typeParam = `TAccount${pascalCase(instructionAccountNode.name)}`;\n const accountMeta = allowAccountMeta ? ' | AccountMeta<string>' : '';\n const imports = new ImportMap();\n if (allowAccountMeta) {\n imports.add('solanaInstructions', 'type AccountMeta');\n }\n\n if (instructionNode.optionalAccountStrategy === 'omitted' && instructionAccountNode.isOptional) {\n return fragment(`${typeParam} extends string${accountMeta} | undefined = undefined`, imports);\n }\n\n const defaultAddress = getDefaultAddress(instructionAccountNode.defaultValue, programNode.publicKey, linkables);\n\n return fragment(`${typeParam} extends string${accountMeta} = ${defaultAddress}`, imports);\n}\n\nfunction getDefaultAddress(\n defaultValue: InstructionInputValueNode | undefined,\n programId: string,\n linkables: LinkableDictionary,\n): string {\n switch (defaultValue?.kind) {\n case 'publicKeyValueNode':\n return `\"${defaultValue.publicKey}\"`;\n case 'programLinkNode':\n // eslint-disable-next-line no-case-declarations\n const programNode = linkables.get([defaultValue]);\n return programNode ? `\"${programNode.publicKey}\"` : 'string';\n case 'programIdValueNode':\n return `\"${programId}\"`;\n default:\n return 'string';\n }\n}\n","import { assertIsNode, camelCase, InstructionByteDeltaNode, InstructionNode, isNode } from '@codama/nodes';\nimport { getLastNodeFromPath, NodePath } from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { Fragment, fragment, mergeFragments } from './common';\n\nexport function getInstructionByteDeltaFragment(\n scope: Pick<GlobalFragmentScope, 'asyncResolvers' | 'getImportFrom' | 'nameApi'> & {\n instructionPath: NodePath<InstructionNode>;\n useAsync: boolean;\n },\n): Fragment {\n const { byteDeltas } = getLastNodeFromPath(scope.instructionPath);\n const fragments = (byteDeltas ?? []).flatMap(r => getByteDeltaFragment(r, scope));\n if (fragments.length === 0) return fragment('');\n return mergeFragments(\n fragments,\n r =>\n `// Bytes created or reallocated by the instruction.\\n` +\n `const byteDelta: number = [${r.join(',')}].reduce((a, b) => a + b, 0);`,\n );\n}\n\nfunction getByteDeltaFragment(\n byteDelta: InstructionByteDeltaNode,\n scope: Pick<GlobalFragmentScope, 'asyncResolvers' | 'getImportFrom' | 'nameApi'> & {\n useAsync: boolean;\n },\n): Fragment[] {\n const bytesFragment = ((): Fragment | null => {\n if (isNode(byteDelta.value, 'numberValueNode')) {\n return getNumberValueNodeFragment(byteDelta);\n }\n if (isNode(byteDelta.value, 'argumentValueNode')) {\n return getArgumentValueNodeFragment(byteDelta);\n }\n if (isNode(byteDelta.value, 'accountLinkNode')) {\n return getAccountLinkNodeFragment(byteDelta, scope);\n }\n if (isNode(byteDelta.value, 'resolverValueNode')) {\n return getResolverValueNodeFragment(byteDelta, scope);\n }\n return null;\n })();\n\n if (bytesFragment === null) return [];\n\n if (byteDelta.withHeader) {\n bytesFragment.mapRender(r => `${r} + BASE_ACCOUNT_SIZE`).addImports('solanaAccounts', 'BASE_ACCOUNT_SIZE');\n }\n\n if (byteDelta.subtract) {\n bytesFragment.mapRender(r => `- (${r})`);\n }\n\n return [bytesFragment];\n}\n\nfunction getNumberValueNodeFragment(byteDelta: InstructionByteDeltaNode): Fragment {\n assertIsNode(byteDelta.value, 'numberValueNode');\n return fragment(byteDelta.value.number.toString());\n}\n\nfunction getArgumentValueNodeFragment(byteDelta: InstructionByteDeltaNode): Fragment {\n assertIsNode(byteDelta.value, 'argumentValueNode');\n const argumentName = camelCase(byteDelta.value.name);\n return fragment(`Number(args.${argumentName})`);\n}\n\nfunction getAccountLinkNodeFragment(\n byteDelta: InstructionByteDeltaNode,\n scope: Pick<GlobalFragmentScope, 'getImportFrom' | 'nameApi'>,\n): Fragment {\n assertIsNode(byteDelta.value, 'accountLinkNode');\n const functionName = scope.nameApi.accountGetSizeFunction(byteDelta.value.name);\n return fragment(`${functionName}()`).addImports(scope.getImportFrom(byteDelta.value), functionName);\n}\n\nfunction getResolverValueNodeFragment(\n byteDelta: InstructionByteDeltaNode,\n scope: Pick<GlobalFragmentScope, 'asyncResolvers' | 'getImportFrom' | 'nameApi'> & {\n useAsync: boolean;\n },\n): Fragment | null {\n assertIsNode(byteDelta.value, 'resolverValueNode');\n const isAsync = scope.asyncResolvers.includes(byteDelta.value.name);\n if (!scope.useAsync && isAsync) return null;\n\n const awaitKeyword = scope.useAsync && isAsync ? 'await ' : '';\n const functionName = scope.nameApi.resolverFunction(byteDelta.value.name);\n return fragment(`${awaitKeyword}${functionName}(resolverScope)`)\n .addImports(scope.getImportFrom(byteDelta.value), functionName)\n .addFeatures(['instruction:resolverScopeVariable']);\n}\n","import { InstructionNode, structTypeNodeFromInstructionArgumentNodes } from '@codama/nodes';\nimport { getLastNodeFromPath, NodePath } from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { TypeManifest } from '../TypeManifest';\nimport { Fragment, fragment } from './common';\nimport { getTypeWithCodecFragment } from './typeWithCodec';\n\nexport function getInstructionDataFragment(\n scope: Pick<GlobalFragmentScope, 'customInstructionData' | 'nameApi'> & {\n dataArgsManifest: TypeManifest;\n instructionPath: NodePath<InstructionNode>;\n size: number | null;\n },\n): Fragment {\n const { instructionPath, dataArgsManifest, nameApi, customInstructionData } = scope;\n const instructionNode = getLastNodeFromPath(instructionPath);\n if (instructionNode.arguments.length === 0 || customInstructionData.has(instructionNode.name)) {\n return fragment('');\n }\n\n const instructionDataName = nameApi.instructionDataType(instructionNode.name);\n return getTypeWithCodecFragment({\n manifest: dataArgsManifest,\n name: instructionDataName,\n nameApi,\n node: structTypeNodeFromInstructionArgumentNodes(instructionNode.arguments),\n size: scope.size,\n });\n}\n","import {\n camelCase,\n ConstantDiscriminatorNode,\n DiscriminatorNode,\n FieldDiscriminatorNode,\n InstructionArgumentNode,\n isNode,\n isNodeFilter,\n StructFieldTypeNode,\n VALUE_NODES,\n} from '@codama/nodes';\nimport { visit } from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { Fragment, mergeFragments } from './common';\n\nexport function getDiscriminatorConstantsFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi' | 'typeManifestVisitor'> & {\n discriminatorNodes: DiscriminatorNode[];\n fields: InstructionArgumentNode[] | StructFieldTypeNode[];\n prefix: string;\n },\n): Fragment {\n const fragments = scope.discriminatorNodes\n .map(node => getDiscriminatorConstantFragment(node, scope))\n .filter(Boolean) as Fragment[];\n\n return mergeFragments(fragments, r => r.join('\\n\\n'));\n}\n\nexport function getDiscriminatorConstantFragment(\n discriminatorNode: DiscriminatorNode,\n scope: Pick<GlobalFragmentScope, 'nameApi' | 'typeManifestVisitor'> & {\n discriminatorNodes: DiscriminatorNode[];\n fields: InstructionArgumentNode[] | StructFieldTypeNode[];\n prefix: string;\n },\n): Fragment | null {\n switch (discriminatorNode.kind) {\n case 'constantDiscriminatorNode':\n return getConstantDiscriminatorConstantFragment(discriminatorNode, scope);\n case 'fieldDiscriminatorNode':\n return getFieldDiscriminatorConstantFragment(discriminatorNode, scope);\n default:\n return null;\n }\n}\n\nexport function getConstantDiscriminatorConstantFragment(\n discriminatorNode: ConstantDiscriminatorNode,\n scope: Pick<GlobalFragmentScope, 'nameApi' | 'typeManifestVisitor'> & {\n discriminatorNodes: DiscriminatorNode[];\n prefix: string;\n },\n): Fragment | null {\n const { discriminatorNodes, typeManifestVisitor, prefix } = 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 encoder = visit(discriminatorNode.constant.type, typeManifestVisitor).encoder;\n const value = visit(discriminatorNode.constant.value, typeManifestVisitor).value;\n return getConstantFragment({ ...scope, encoder, name, value });\n}\n\nexport function getFieldDiscriminatorConstantFragment(\n discriminatorNode: FieldDiscriminatorNode,\n scope: Pick<GlobalFragmentScope, 'nameApi' | 'typeManifestVisitor'> & {\n fields: InstructionArgumentNode[] | StructFieldTypeNode[];\n prefix: string;\n },\n): Fragment | null {\n const { fields, prefix, 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 encoder = visit(field.type, typeManifestVisitor).encoder;\n const value = visit(field.defaultValue, typeManifestVisitor).value;\n return getConstantFragment({ ...scope, encoder, name, value });\n}\n\nfunction getConstantFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi'> & {\n encoder: Fragment;\n name: string;\n value: Fragment;\n },\n): Fragment {\n const { encoder, name, nameApi, value } = scope;\n const constantName = nameApi.constant(name);\n const constantFunction = nameApi.constantFunction(name);\n\n return mergeFragments(\n [\n value.mapRender(r => `export const ${constantName} = ${r};`),\n encoder.mapRender(r => `export function ${constantFunction}() { return ${r}.encode(${constantName}); }`),\n ],\n r => r.join('\\n\\n'),\n );\n}\n","import { InstructionNode } from '@codama/nodes';\nimport { getLastNodeFromPath, NodePath } from '@codama/visitors-core';\n\nimport { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { TypeManifest } from '../TypeManifest';\nimport { Fragment, fragment, fragmentFromTemplate } from './common';\n\nexport function getInstructionExtraArgsFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi'> & {\n extraArgsManifest: TypeManifest;\n instructionPath: NodePath<InstructionNode>;\n },\n): Fragment {\n const { instructionPath, extraArgsManifest, nameApi } = scope;\n const instructionNode = getLastNodeFromPath(instructionPath);\n if ((instructionNode.extraArguments ?? []).length === 0) {\n return fragment('');\n }\n\n const instructionExtraName = nameApi.instructionExtraType(instructionNode.name);\n return fragmentFromTemplate('instructionExtraArgs.njk', {\n looseName: nameApi.dataArgsType(instructionExtraName),\n manifest: extraArgsManifest,\n strictName: nameApi.dataType(instructionExtraName),\n }).mergeImportsWith(extraArgsManifest.looseType);\n}\n","import { camelCase, InstructionArgumentNode, InstructionNode, isNode, isNodeFilter, pascalCase } from '@codama/nodes';\nimport {\n findProgramNodeFromPath,\n getLastNodeFromPath,\n NodePath,\n ResolvedInstructionInput,\n} from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { NameApi } from '../nameTransformers';\nimport { TypeManifest } from '../TypeManifest';\nimport { getInstructionDependencies, hasAsyncFunction, isAsyncDefaultValue } from '../utils';\nimport { Fragment, fragment, fragmentFromTemplate, mergeFragments } from './common';\nimport { getInstructionByteDeltaFragment } from './instructionByteDelta';\nimport { getInstructionInputResolvedFragment } from './instructionInputResolved';\nimport { getInstructionInputTypeFragment } from './instructionInputType';\nimport { getInstructionRemainingAccountsFragment } from './instructionRemainingAccounts';\n\nexport function getInstructionFunctionFragment(\n scope: Pick<\n GlobalFragmentScope,\n 'asyncResolvers' | 'customInstructionData' | 'getImportFrom' | 'nameApi' | 'typeManifestVisitor'\n > & {\n dataArgsManifest: TypeManifest;\n extraArgsManifest: TypeManifest;\n instructionPath: NodePath<InstructionNode>;\n renamedArgs: Map<string, string>;\n resolvedInputs: ResolvedInstructionInput[];\n useAsync: boolean;\n },\n): Fragment {\n const {\n useAsync,\n instructionPath,\n resolvedInputs,\n renamedArgs,\n dataArgsManifest,\n asyncResolvers,\n nameApi,\n customInstructionData,\n } = scope;\n const instructionNode = getLastNodeFromPath(instructionPath);\n const programNode = findProgramNodeFromPath(instructionPath)!;\n if (useAsync && !hasAsyncFunction(instructionNode, resolvedInputs, asyncResolvers)) {\n return fragment('');\n }\n\n const customData = customInstructionData.get(instructionNode.name);\n const hasAccounts = instructionNode.accounts.length > 0;\n const hasLegacyOptionalAccounts =\n instructionNode.optionalAccountStrategy === 'omitted' &&\n instructionNode.accounts.some(account => account.isOptional);\n const instructionDependencies = getInstructionDependencies(instructionNode, asyncResolvers, useAsync);\n const argDependencies = instructionDependencies.filter(isNodeFilter('argumentValueNode')).map(node => node.name);\n const hasData = !!customData || instructionNode.arguments.length > 0;\n const argIsNotOmitted = (arg: InstructionArgumentNode) =>\n !(arg.defaultValue && arg.defaultValueStrategy === 'omitted');\n const argIsDependent = (arg: InstructionArgumentNode) => argDependencies.includes(arg.name);\n const argHasDefaultValue = (arg: InstructionArgumentNode) => {\n if (!arg.defaultValue) return false;\n if (useAsync) return true;\n return !isAsyncDefaultValue(arg.defaultValue, asyncResolvers);\n };\n const hasDataArgs = !!customData || instructionNode.arguments.filter(argIsNotOmitted).length > 0;\n const hasExtraArgs =\n (instructionNode.extraArguments ?? []).filter(\n field => argIsNotOmitted(field) && (argIsDependent(field) || argHasDefaultValue(field)),\n ).length > 0;\n const hasRemainingAccountArgs =\n (instructionNode.remainingAccounts ?? []).filter(({ value }) => isNode(value, 'argumentValueNode')).length > 0;\n const hasAnyArgs = hasDataArgs || hasExtraArgs || hasRemainingAccountArgs;\n const hasInput = hasAccounts || hasAnyArgs;\n const instructionDataName = nameApi.instructionDataType(instructionNode.name);\n const programAddressConstant = nameApi.programAddressConstant(programNode.name);\n const encoderFunction = customData\n ? dataArgsManifest.encoder.render\n : `${nameApi.encoderFunction(instructionDataName)}()`;\n const argsTypeFragment = fragment(\n customData ? dataArgsManifest.looseType.render : nameApi.dataArgsType(instructionDataName),\n );\n if (customData) {\n argsTypeFragment.mergeImportsWith(dataArgsManifest.looseType, dataArgsManifest.encoder);\n }\n\n const functionName = useAsync\n ? nameApi.instructionAsyncFunction(instructionNode.name)\n : nameApi.instructionSyncFunction(instructionNode.name);\n\n const typeParamsFragment = getTypeParams(instructionNode, programAddressConstant);\n const instructionTypeFragment = getInstructionType(scope);\n\n // Input.\n const inputTypeFragment = getInstructionInputTypeFragment(scope);\n const inputTypeCallFragment = getInputTypeCall(scope);\n const renamedArgsText = [...renamedArgs.entries()].map(([k, v]) => `${k}: input.${v}`).join(', ');\n\n const resolvedInputsFragment = getInstructionInputResolvedFragment(scope);\n const remainingAccountsFragment = getInstructionRemainingAccountsFragment(scope);\n const byteDeltaFragment = getInstructionByteDeltaFragment(scope);\n const resolvedFragment = mergeFragments(\n [resolvedInputsFragment, remainingAccountsFragment, byteDeltaFragment],\n renders => renders.join('\\n\\n'),\n );\n const hasRemainingAccounts = remainingAccountsFragment.render !== '';\n const hasByteDeltas = byteDeltaFragment.render !== '';\n const hasResolver = resolvedFragment.hasFeatures('instruction:resolverScopeVariable');\n const getReturnType = (instructionType: string) => {\n let returnType = instructionType;\n if (hasByteDeltas) {\n returnType = `${returnType} & InstructionWithByteDelta`;\n }\n return useAsync ? `Promise<${returnType}>` : returnType;\n };\n\n const functionFragment = fragmentFromTemplate('instructionFunction.njk', {\n argsTypeFragment,\n encoderFunction,\n functionName,\n getReturnType,\n hasAccounts,\n hasAnyArgs,\n hasByteDeltas,\n hasData,\n hasDataArgs,\n hasExtraArgs,\n hasInput,\n hasLegacyOptionalAccounts,\n hasRemainingAccounts,\n hasResolver,\n inputTypeCallFragment,\n inputTypeFragment,\n instruction: instructionNode,\n instructionTypeFragment,\n programAddressConstant,\n renamedArgs: renamedArgsText,\n resolvedFragment,\n typeParamsFragment,\n useAsync,\n })\n .mergeImportsWith(\n typeParamsFragment,\n instructionTypeFragment,\n inputTypeFragment,\n inputTypeCallFragment,\n resolvedFragment,\n argsTypeFragment,\n )\n .addImports('generatedPrograms', [programAddressConstant])\n .addImports('solanaAddresses', ['type Address']);\n\n if (hasAccounts) {\n functionFragment\n .addImports('solanaInstructions', ['type AccountMeta'])\n .addImports('shared', ['getAccountMetaFactory', 'type ResolvedAccount']);\n }\n\n if (hasByteDeltas) {\n functionFragment.addImports('shared', ['type InstructionWithByteDelta']);\n }\n\n return functionFragment;\n}\n\nfunction getTypeParams(instructionNode: InstructionNode, programAddressConstant: string): Fragment {\n const typeParams = instructionNode.accounts.map(account => `TAccount${pascalCase(account.name)} extends string`);\n // after all accounts, add an optional type for program address\n typeParams.push(`TProgramAddress extends Address = typeof ${programAddressConstant}`);\n return fragment(typeParams.filter(x => !!x).join(', '))\n .mapRender(r => `<${r}>`)\n .addImports('generatedPrograms', [programAddressConstant]);\n}\n\nfunction getInstructionType(scope: { instructionPath: NodePath<InstructionNode>; nameApi: NameApi }): Fragment {\n const { instructionPath, nameApi } = scope;\n const instructionNode = getLastNodeFromPath(instructionPath);\n const instructionTypeName = nameApi.instructionType(instructionNode.name);\n const programAddressFragment = fragment('TProgramAddress');\n const accountTypeParamsFragments = instructionNode.accounts.map(account => {\n const typeParam = `TAccount${pascalCase(account.name)}`;\n const camelName = camelCase(account.name);\n\n if (account.isSigner === 'either') {\n const signerRole = account.isWritable ? 'WritableSignerAccount' : 'ReadonlySignerAccount';\n return fragment(\n `typeof input[\"${camelName}\"] extends TransactionSigner<${typeParam}> ` +\n `? ${signerRole}<${typeParam}> & AccountSignerMeta<${typeParam}> ` +\n `: ${typeParam}`,\n )\n .addImports('solanaInstructions', [`type ${signerRole}`])\n .addImports('solanaSigners', ['type AccountSignerMeta']);\n }\n\n return fragment(typeParam);\n });\n\n return mergeFragments([programAddressFragment, ...accountTypeParamsFragments], renders =>\n renders.join(', '),\n ).mapRender(r => `${instructionTypeName}<${r}>`);\n}\n\nfunction getInputTypeCall(scope: {\n instructionPath: NodePath<InstructionNode>;\n nameApi: NameApi;\n useAsync: boolean;\n}): Fragment {\n const { instructionPath, useAsync, nameApi } = scope;\n const instructionNode = getLastNodeFromPath(instructionPath);\n const inputTypeName = useAsync\n ? nameApi.instructionAsyncInputType(instructionNode.name)\n : nameApi.instructionSyncInputType(instructionNode.name);\n if (instructionNode.accounts.length === 0) return fragment(inputTypeName);\n const accountTypeParams = instructionNode.accounts.map(account => `TAccount${pascalCase(account.name)}`).join(', ');\n\n return fragment(`${inputTypeName}<${accountTypeParams}>`);\n}\n","import { camelCase, InstructionNode, isNode, parseOptionalAccountStrategy } from '@codama/nodes';\nimport { getLastNodeFromPath, NodePath, ResolvedInstructionInput } from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { Fragment, fragment, mergeFragments } from './common';\nimport { getInstructionInputDefaultFragment } from './instructionInputDefault';\n\nexport function getInstructionInputResolvedFragment(\n scope: Pick<GlobalFragmentScope, 'asyncResolvers' | 'getImportFrom' | 'nameApi' | 'typeManifestVisitor'> & {\n instructionPath: NodePath<InstructionNode>;\n resolvedInputs: ResolvedInstructionInput[];\n useAsync: boolean;\n },\n): Fragment {\n const instructionNode = getLastNodeFromPath(scope.instructionPath);\n const resolvedInputFragments = scope.resolvedInputs.flatMap((input: ResolvedInstructionInput): Fragment[] => {\n const inputFragment = getInstructionInputDefaultFragment({\n ...scope,\n input,\n optionalAccountStrategy: parseOptionalAccountStrategy(instructionNode.optionalAccountStrategy),\n });\n if (!inputFragment.render) return [];\n const camelName = camelCase(input.name);\n return [\n inputFragment.mapRender(r =>\n isNode(input, 'instructionArgumentNode')\n ? `if (!args.${camelName}) {\\n${r}\\n}`\n : `if (!accounts.${camelName}.value) {\\n${r}\\n}`,\n ),\n ];\n });\n\n if (resolvedInputFragments.length === 0) {\n return fragment('');\n }\n\n return mergeFragments([fragment('// Resolve default values.'), ...resolvedInputFragments], renders =>\n renders.join('\\n'),\n );\n}\n","/* eslint-disable no-case-declarations */\nimport { camelCase, InstructionInputValueNode, isNode, OptionalAccountStrategy } from '@codama/nodes';\nimport { ResolvedInstructionInput, visit } from '@codama/visitors-core';\n\nimport { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { isAsyncDefaultValue } from '../utils';\nimport { Fragment, fragment, mergeFragments } from './common';\n\nexport function getInstructionInputDefaultFragment(\n scope: Pick<GlobalFragmentScope, 'asyncResolvers' | 'getImportFrom' | 'nameApi' | 'typeManifestVisitor'> & {\n input: ResolvedInstructionInput;\n optionalAccountStrategy: OptionalAccountStrategy;\n useAsync: boolean;\n },\n): Fragment {\n const { input, optionalAccountStrategy, asyncResolvers, useAsync, nameApi, typeManifestVisitor, getImportFrom } =\n scope;\n if (!input.defaultValue) {\n return fragment('');\n }\n\n if (!useAsync && isAsyncDefaultValue(input.defaultValue, asyncResolvers)) {\n return fragment('');\n }\n\n const { defaultValue } = input;\n const defaultFragment = (renderedValue: string, isWritable?: boolean): Fragment => {\n const inputName = camelCase(input.name);\n if (input.kind === 'instructionAccountNode' && isNode(defaultValue, 'resolverValueNode')) {\n return fragment(`accounts.${inputName} = { ...accounts.${inputName}, ...${renderedValue} };`);\n }\n if (input.kind === 'instructionAccountNode' && isWritable === undefined) {\n return fragment(`accounts.${inputName}.value = ${renderedValue};`);\n }\n if (input.kind === 'instructionAccountNode') {\n return fragment(\n `accounts.${inputName}.value = ${renderedValue};\\n` +\n `accounts.${inputName}.isWritable = ${isWritable ? 'true' : 'false'}`,\n );\n }\n return fragment(`args.${inputName} = ${renderedValue};`);\n };\n\n switch (defaultValue.kind) {\n case 'accountValueNode':\n const name = camelCase(defaultValue.name);\n if (input.kind === 'instructionAccountNode' && input.resolvedIsSigner && !input.isSigner) {\n return defaultFragment(`expectTransactionSigner(accounts.${name}.value).address`).addImports(\n 'shared',\n 'expectTransactionSigner',\n );\n }\n if (input.kind === 'instructionAccountNode') {\n return defaultFragment(`expectSome(accounts.${name}.value)`).addImports('shared', 'expectSome');\n }\n return defaultFragment(`expectAddress(accounts.${name}.value)`).addImports('shared', 'expectAddress');\n\n case 'pdaValueNode':\n // Inlined PDA value.\n if (isNode(defaultValue.pda, 'pdaNode')) {\n const pdaProgram = defaultValue.pda.programId\n ? fragment(\n `'${defaultValue.pda.programId}' as Address<'${defaultValue.pda.programId}'>`,\n ).addImports('solanaAddresses', 'type Address')\n : fragment('programAddress');\n const pdaSeeds = defaultValue.pda.seeds.flatMap((seed): Fragment[] => {\n if (isNode(seed, 'constantPdaSeedNode') && isNode(seed.value, 'programIdValueNode')) {\n return [\n fragment(`getAddressEncoder().encode(${pdaProgram.render})`)\n .mergeImportsWith(pdaProgram)\n .addImports('solanaAddresses', 'getAddressEncoder'),\n ];\n }\n if (isNode(seed, 'constantPdaSeedNode') && !isNode(seed.value, 'programIdValueNode')) {\n const typeManifest = visit(seed.type, typeManifestVisitor);\n const valueManifest = visit(seed.value, typeManifestVisitor);\n return [\n fragment(\n `${typeManifest.encoder.render}.encode(${valueManifest.value.render})`,\n ).mergeImportsWith(typeManifest.encoder, valueManifest.value),\n ];\n }\n if (isNode(seed, 'variablePdaSeedNode')) {\n const typeManifest = visit(seed.type, typeManifestVisitor);\n const valueSeed = defaultValue.seeds.find(s => s.name === seed.name)?.value;\n if (!valueSeed) return [];\n if (isNode(valueSeed, 'accountValueNode')) {\n return [\n fragment(\n `${typeManifest.encoder.render}.encode(expectAddress(accounts.${camelCase(valueSeed.name)}.value))`,\n )\n .mergeImportsWith(typeManifest.encoder)\n .addImports('shared', 'expectAddress'),\n ];\n }\n if (isNode(valueSeed, 'argumentValueNode')) {\n return [\n fragment(\n `${typeManifest.encoder.render}.encode(expectSome(args.${camelCase(valueSeed.name)}))`,\n )\n .mergeImportsWith(typeManifest.encoder)\n .addImports('shared', 'expectSome'),\n ];\n }\n const valueManifest = visit(valueSeed, typeManifestVisitor);\n return [\n fragment(\n `${typeManifest.encoder.render}.encode(${valueManifest.value.render})`,\n ).mergeImportsWith(typeManifest.encoder, valueManifest.value),\n ];\n }\n return [];\n });\n const pdaStatement = mergeFragments([pdaProgram, ...pdaSeeds], ([p, ...s]) => {\n const programAddress = p === 'programAddress' ? p : `programAddress: ${p}`;\n return `await getProgramDerivedAddress({ ${programAddress}, seeds: [${s.join(', ')}] })`;\n }).addImports('solanaAddresses', 'getProgramDerivedAddress');\n return defaultFragment(pdaStatement.render).mergeImportsWith(pdaStatement);\n }\n\n // Linked PDA value.\n const pdaFunction = nameApi.pdaFindFunction(defaultValue.pda.name);\n const pdaArgs = [];\n const pdaSeeds = defaultValue.seeds.map((seed): Fragment => {\n if (isNode(seed.value, 'accountValueNode')) {\n return fragment(\n `${seed.name}: expectAddress(accounts.${camelCase(seed.value.name)}.value)`,\n ).addImports('shared', 'expectAddress');\n }\n if (isNode(seed.value, 'argumentValueNode')) {\n return fragment(`${seed.name}: expectSome(args.${camelCase(seed.value.name)})`).addImports(\n 'shared',\n 'expectSome',\n );\n }\n return visit(seed.value, typeManifestVisitor).value.mapRender(r => `${seed.name}: ${r}`);\n });\n const pdaSeedsFragment = mergeFragments(pdaSeeds, renders => renders.join(', ')).mapRender(r => `{ ${r} }`);\n if (pdaSeeds.length > 0) {\n pdaArgs.push(pdaSeedsFragment.render);\n }\n return defaultFragment(`await ${pdaFunction}(${pdaArgs.join(', ')})`)\n .mergeImportsWith(pdaSeedsFragment)\n .addImports(getImportFrom(defaultValue.pda), pdaFunction);\n\n case 'publicKeyValueNode':\n return defaultFragment(`'${defaultValue.publicKey}' as Address<'${defaultValue.publicKey}'>`).addImports(\n 'solanaAddresses',\n 'type Address',\n );\n\n case 'programLinkNode':\n const programAddress = nameApi.programAddressConstant(defaultValue.name);\n return defaultFragment(programAddress, false).addImports(getImportFrom(defaultValue), programAddress);\n\n case 'programIdValueNode':\n if (\n optionalAccountStrategy === 'programId' &&\n input.kind === 'instructionAccountNode' &&\n input.isOptional\n ) {\n return fragment('');\n }\n return defaultFragment('programAddress', false);\n\n case 'identityValueNode':\n case 'payerValueNode':\n return fragment('');\n\n case 'accountBumpValueNode':\n return defaultFragment(\n `expectProgramDerivedAddress(accounts.${camelCase(defaultValue.name)}.value)[1]`,\n ).addImports('shared', 'expectProgramDerivedAddress');\n\n case 'argumentValueNode':\n return defaultFragment(`expectSome(args.${camelCase(defaultValue.name)})`).addImports(\n 'shared',\n 'expectSome',\n );\n\n case 'resolverValueNode':\n const resolverFunction = nameApi.resolverFunction(defaultValue.name);\n const resolverAwait = useAsync && asyncResolvers.includes(defaultValue.name) ? 'await ' : '';\n return defaultFragment(`${resolverAwait}${resolverFunction}(resolverScope)`)\n .addImports(getImportFrom(defaultValue), resolverFunction)\n .addFeatures(['instruction:resolverScopeVariable']);\n\n case 'conditionalValueNode':\n const ifTrueRenderer = renderNestedInstructionDefault({\n ...scope,\n defaultValue: defaultValue.ifTrue,\n });\n const ifFalseRenderer = renderNestedInstructionDefault({\n ...scope,\n defaultValue: defaultValue.ifFalse,\n });\n if (!ifTrueRenderer && !ifFalseRenderer) {\n return fragment('');\n }\n const conditionalFragment = fragment('');\n if (ifTrueRenderer) {\n conditionalFragment.mergeImportsWith(ifTrueRenderer).mergeFeaturesWith(ifTrueRenderer);\n }\n if (ifFalseRenderer) {\n conditionalFragment.mergeImportsWith(ifFalseRenderer).mergeFeaturesWith(ifFalseRenderer);\n }\n const negatedCondition = !ifTrueRenderer;\n let condition = 'true';\n\n if (isNode(defaultValue.condition, 'resolverValueNode')) {\n const conditionalResolverFunction = nameApi.resolverFunction(defaultValue.condition.name);\n conditionalFragment\n .addImports(getImportFrom(defaultValue.condition), conditionalResolverFunction)\n .addFeatures(['instruction:resolverScopeVariable']);\n const conditionalResolverAwait =\n useAsync && asyncResolvers.includes(defaultValue.condition.name) ? 'await ' : '';\n condition = `${conditionalResolverAwait}${conditionalResolverFunction}(resolverScope)`;\n condition = negatedCondition ? `!${condition}` : condition;\n } else {\n const comparedInputName = isNode(defaultValue.condition, 'accountValueNode')\n ? `accounts.${camelCase(defaultValue.condition.name)}.value`\n : `args.${camelCase(defaultValue.condition.name)}`;\n if (defaultValue.value) {\n const comparedValue = visit(defaultValue.value, typeManifestVisitor).value;\n conditionalFragment.mergeImportsWith(comparedValue).mergeFeaturesWith(comparedValue);\n const operator = negatedCondition ? '!==' : '===';\n condition = `${comparedInputName} ${operator} ${comparedValue.render}`;\n } else {\n condition = negatedCondition ? `!${comparedInputName}` : comparedInputName;\n }\n }\n\n if (ifTrueRenderer && ifFalseRenderer) {\n return conditionalFragment.setRender(\n `if (${condition}) {\\n${ifTrueRenderer.render}\\n} else {\\n${ifFalseRenderer.render}\\n}`,\n );\n }\n\n return conditionalFragment.setRender(\n `if (${condition}) {\\n${ifTrueRenderer ? ifTrueRenderer.render : ifFalseRenderer?.render}\\n}`,\n );\n\n default:\n const valueManifest = visit(defaultValue, typeManifestVisitor).value;\n return defaultFragment(valueManifest.render).mergeImportsWith(valueManifest);\n }\n}\n\nfunction renderNestedInstructionDefault(\n scope: Parameters<typeof getInstructionInputDefaultFragment>[0] & {\n defaultValue: InstructionInputValueNode | undefined;\n },\n): Fragment | undefined {\n const { input, defaultValue } = scope;\n if (!defaultValue) return undefined;\n return getInstructionInputDefaultFragment({\n ...scope,\n input: { ...input, defaultValue },\n });\n}\n","import {\n camelCase,\n getAllInstructionArguments,\n InstructionArgumentNode,\n InstructionNode,\n isNode,\n parseDocs,\n pascalCase,\n} from '@codama/nodes';\nimport {\n getLastNodeFromPath,\n NodePath,\n ResolvedInstructionAccount,\n ResolvedInstructionArgument,\n ResolvedInstructionInput,\n} from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { TypeManifest } from '../TypeManifest';\nimport { isAsyncDefaultValue, jsDocblock } from '../utils';\nimport { Fragment, fragment, fragmentFromTemplate, mergeFragments } from './common';\n\nexport function getInstructionInputTypeFragment(\n scope: Pick<GlobalFragmentScope, 'asyncResolvers' | 'customInstructionData' | 'nameApi'> & {\n dataArgsManifest: TypeManifest;\n instructionPath: NodePath<InstructionNode>;\n renamedArgs: Map<string, string>;\n resolvedInputs: ResolvedInstructionInput[];\n useAsync: boolean;\n },\n): Fragment {\n const { instructionPath, useAsync, nameApi } = scope;\n const instructionNode = getLastNodeFromPath(instructionPath);\n\n const instructionInputType = useAsync\n ? nameApi.instructionAsyncInputType(instructionNode.name)\n : nameApi.instructionSyncInputType(instructionNode.name);\n const accountsFragment = getAccountsFragment(scope);\n const [dataArgumentsFragment, customDataArgumentsFragment] = getDataArgumentsFragments(scope);\n const extraArgumentsFragment = getExtraArgumentsFragment(scope);\n const remainingAccountsFragment = getRemainingAccountsFragment(instructionNode);\n\n return fragmentFromTemplate('instructionInputType.njk', {\n accountsFragment,\n customDataArgumentsFragment,\n dataArgumentsFragment,\n extraArgumentsFragment,\n instruction: instructionNode,\n instructionInputType,\n remainingAccountsFragment,\n })\n .mergeImportsWith(\n accountsFragment,\n dataArgumentsFragment,\n customDataArgumentsFragment,\n extraArgumentsFragment,\n remainingAccountsFragment,\n )\n .addImports('solanaAddresses', ['type Address']);\n}\n\nfunction getAccountsFragment(\n scope: Pick<GlobalFragmentScope, 'asyncResolvers' | 'customInstructionData' | 'nameApi'> & {\n instructionPath: NodePath<InstructionNode>;\n resolvedInputs: ResolvedInstructionInput[];\n useAsync: boolean;\n },\n): Fragment {\n const { instructionPath, resolvedInputs, useAsync, asyncResolvers } = scope;\n const instructionNode = getLastNodeFromPath(instructionPath);\n\n const fragments = instructionNode.accounts.map(account => {\n const resolvedAccount = resolvedInputs.find(\n input => input.kind === 'instructionAccountNode' && input.name === account.name,\n ) as ResolvedInstructionAccount;\n const hasDefaultValue =\n !!resolvedAccount.defaultValue &&\n !isNode(resolvedAccount.defaultValue, ['identityValueNode', 'payerValueNode']) &&\n (useAsync || !isAsyncDefaultValue(resolvedAccount.defaultValue, asyncResolvers));\n const accountDocs = parseDocs(account.docs);\n const docblock = accountDocs.length > 0 ? jsDocblock(accountDocs) : '';\n const optionalSign = hasDefaultValue || resolvedAccount.isOptional ? '?' : '';\n return getAccountTypeFragment(resolvedAccount).mapRender(\n r => `${docblock}${camelCase(account.name)}${optionalSign}: ${r};`,\n );\n });\n\n return mergeFragments(fragments, r => r.join('\\n'));\n}\n\nfunction getAccountTypeFragment(account: Pick<ResolvedInstructionAccount, 'isPda' | 'isSigner' | 'name'>): Fragment {\n const typeParam = `TAccount${pascalCase(account.name)}`;\n\n if (account.isPda && account.isSigner === false) {\n return fragment(`ProgramDerivedAddress<${typeParam}>`).addImports('solanaAddresses', [\n 'type ProgramDerivedAddress',\n ]);\n }\n\n if (account.isPda && account.isSigner === 'either') {\n return fragment(`ProgramDerivedAddress<${typeParam}> | TransactionSigner<${typeParam}>`)\n .addImports('solanaAddresses', ['type ProgramDerivedAddress'])\n .addImports('solanaSigners', ['type TransactionSigner']);\n }\n\n if (account.isSigner === 'either') {\n return fragment(`Address<${typeParam}> | TransactionSigner<${typeParam}>`)\n .addImports('solanaAddresses', ['type Address'])\n .addImports('solanaSigners', ['type TransactionSigner']);\n }\n\n if (account.isSigner) {\n return fragment(`TransactionSigner<${typeParam}>`).addImports('solanaSigners', ['type TransactionSigner']);\n }\n\n return fragment(`Address<${typeParam}>`).addImports('solanaAddresses', ['type Address']);\n}\n\nfunction getDataArgumentsFragments(\n scope: Pick<GlobalFragmentScope, 'customInstructionData' | 'nameApi'> & {\n dataArgsManifest: TypeManifest;\n instructionPath: NodePath<InstructionNode>;\n renamedArgs: Map<string, string>;\n resolvedInputs: ResolvedInstructionInput[];\n },\n): [Fragment, Fragment] {\n const { instructionPath, nameApi } = scope;\n const instructionNode = getLastNodeFromPath(instructionPath);\n\n const customData = scope.customInstructionData.get(instructionNode.name);\n if (customData) {\n return [\n fragment(''),\n fragment(nameApi.dataArgsType(customData.importAs))\n .mergeImportsWith(scope.dataArgsManifest.looseType)\n .mapRender(r => `${r} & `),\n ];\n }\n\n const instructionDataName = nameApi.instructionDataType(instructionNode.name);\n const dataArgsType = nameApi.dataArgsType(instructionDataName);\n\n const fragments = instructionNode.arguments.flatMap(arg => {\n const argFragment = getArgumentFragment(arg, fragment(dataArgsType), scope.resolvedInputs, scope.renamedArgs);\n return argFragment ? [argFragment] : [];\n });\n\n return [mergeFragments(fragments, r => r.join('\\n')), fragment('')];\n}\n\nfunction getExtraArgumentsFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi'> & {\n instructionPath: NodePath<InstructionNode>;\n renamedArgs: Map<string, string>;\n resolvedInputs: ResolvedInstructionInput[];\n },\n): Fragment {\n const { instructionPath, nameApi } = scope;\n const instructionNode = getLastNodeFromPath(instructionPath);\n const instructionExtraName = nameApi.instructionExtraType(instructionNode.name);\n const extraArgsType = nameApi.dataArgsType(instructionExtraName);\n\n const fragments = (instructionNode.extraArguments ?? []).flatMap(arg => {\n const argFragment = getArgumentFragment(arg, fragment(extraArgsType), scope.resolvedInputs, scope.renamedArgs);\n return argFragment ? [argFragment] : [];\n });\n\n return mergeFragments(fragments, r => r.join('\\n'));\n}\n\nfunction getArgumentFragment(\n arg: InstructionArgumentNode,\n argsType: Fragment,\n resolvedInputs: ResolvedInstructionInput[],\n renamedArgs: Map<string, string>,\n): Fragment | null {\n const resolvedArg = resolvedInputs.find(\n input => isNode(input, 'instructionArgumentNode') && input.name === arg.name,\n ) as ResolvedInstructionArgument | undefined;\n if (arg.defaultValue && arg.defaultValueStrategy === 'omitted') return null;\n const renamedName = renamedArgs.get(arg.name) ?? arg.name;\n const optionalSign = arg.defaultValue || resolvedArg?.defaultValue ? '?' : '';\n return argsType.mapRender(r => `${camelCase(renamedName)}${optionalSign}: ${r}[\"${camelCase(arg.name)}\"];`);\n}\n\nfunction getRemainingAccountsFragment(instructionNode: InstructionNode): Fragment {\n const fragments = (instructionNode.remainingAccounts ?? []).flatMap(remainingAccountsNode => {\n if (isNode(remainingAccountsNode.value, 'resolverValueNode')) return [];\n\n const { name } = remainingAccountsNode.value;\n const allArguments = getAllInstructionArguments(instructionNode);\n const argumentExists = allArguments.some(arg => arg.name === name);\n if (argumentExists) return [];\n\n const isSigner = remainingAccountsNode.isSigner ?? false;\n const optionalSign = (remainingAccountsNode.isOptional ?? false) ? '?' : '';\n const signerFragment = fragment(`TransactionSigner`).addImports('solanaSigners', ['type TransactionSigner']);\n const addressFragment = fragment(`Address`).addImports('solanaAddresses', ['type Address']);\n return (() => {\n if (isSigner === 'either') {\n return mergeFragments([signerFragment, addressFragment], r => r.join(' | '));\n }\n return isSigner ? signerFragment : addressFragment;\n })().mapRender(r => `${camelCase(name)}${optionalSign}: Array<${r}>;`);\n });\n\n return mergeFragments(fragments, r => r.join('\\n'));\n}\n","import {\n assertIsNode,\n camelCase,\n getAllInstructionArguments,\n InstructionNode,\n InstructionRemainingAccountsNode,\n isNode,\n} from '@codama/nodes';\nimport { getLastNodeFromPath, NodePath } from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { Fragment, fragment, mergeFragments } from './common';\n\nexport function getInstructionRemainingAccountsFragment(\n scope: Pick<GlobalFragmentScope, 'asyncResolvers' | 'getImportFrom' | 'nameApi'> & {\n instructionPath: NodePath<InstructionNode>;\n useAsync: boolean;\n },\n): Fragment {\n const { remainingAccounts } = getLastNodeFromPath(scope.instructionPath);\n const fragments = (remainingAccounts ?? []).flatMap(r => getRemainingAccountsFragment(r, scope));\n if (fragments.length === 0) return fragment('');\n return mergeFragments(\n fragments,\n r =>\n `// Remaining accounts.\\n` +\n `const remainingAccounts: AccountMeta[] = ${r.length === 1 ? r[0] : `[...${r.join(', ...')}]`}`,\n ).addImports('solanaInstructions', ['type AccountMeta']);\n}\n\nfunction getRemainingAccountsFragment(\n remainingAccounts: InstructionRemainingAccountsNode,\n scope: Pick<GlobalFragmentScope, 'asyncResolvers' | 'getImportFrom' | 'nameApi'> & {\n instructionPath: NodePath<InstructionNode>;\n useAsync: boolean;\n },\n): Fragment[] {\n const remainingAccountsFragment = ((): Fragment | null => {\n if (isNode(remainingAccounts.value, 'argumentValueNode')) {\n return getArgumentValueNodeFragment(remainingAccounts, scope);\n }\n if (isNode(remainingAccounts.value, 'resolverValueNode')) {\n return getResolverValueNodeFragment(remainingAccounts, scope);\n }\n return null;\n })();\n\n if (remainingAccountsFragment === null) return [];\n return [remainingAccountsFragment];\n}\n\nfunction getArgumentValueNodeFragment(\n remainingAccounts: InstructionRemainingAccountsNode,\n scope: { instructionPath: NodePath<InstructionNode> },\n): Fragment {\n const instructionNode = getLastNodeFromPath(scope.instructionPath);\n assertIsNode(remainingAccounts.value, 'argumentValueNode');\n const argumentName = camelCase(remainingAccounts.value.name);\n const isOptional = remainingAccounts.isOptional ?? false;\n const isSigner = remainingAccounts.isSigner ?? false;\n const isWritable = remainingAccounts.isWritable ?? false;\n const nonSignerRole = isWritable ? 'AccountRole.WRITABLE' : 'AccountRole.READONLY';\n const signerRole = isWritable ? 'AccountRole.WRITABLE_SIGNER' : 'AccountRole.READONLY_SIGNER';\n const role = isSigner === true ? signerRole : nonSignerRole;\n const argumentArray = isOptional ? `(args.${argumentName} ?? [])` : `args.${argumentName}`;\n\n // The argument already exists or was added as `Array<Address>`.\n const allArguments = getAllInstructionArguments(instructionNode);\n const argumentExists = allArguments.some(arg => arg.name === remainingAccounts.value.name);\n if (argumentExists || isSigner === false) {\n return fragment(`${argumentArray}.map((address) => ({ address, role: ${role} }))`).addImports(\n 'solanaInstructions',\n ['AccountRole'],\n );\n }\n\n // The argument was added as `Array<TransactionSigner | Address>`.\n if (isSigner === 'either') {\n return fragment(\n `${argumentArray}.map((addressOrSigner) => (` +\n `isTransactionSigner(addressOrSigner)\\n` +\n `? { address: addressOrSigner.address, role: ${role}, signer: addressOrSigner }\\n` +\n `: { address: addressOrSigner, role: ${role} }\\n` +\n `))`,\n )\n .addImports('solanaInstructions', ['AccountRole'])\n .addImports('shared', ['isTransactionSigner']);\n }\n\n // The argument was added as `Array<TransactionSigner>`.\n return fragment(\n `${argumentArray}.map((signer) => ({ address: signer.address, role: ${signerRole}, signer }))`,\n ).addImports('solanaInstructions', ['AccountRole']);\n}\n\nfunction getResolverValueNodeFragment(\n remainingAccounts: InstructionRemainingAccountsNode,\n scope: Pick<GlobalFragmentScope, 'asyncResolvers' | 'getImportFrom' | 'nameApi'> & {\n useAsync: boolean;\n },\n): Fragment | null {\n assertIsNode(remainingAccounts.value, 'resolverValueNode');\n const isAsync = scope.asyncResolvers.includes(remainingAccounts.value.name);\n if (!scope.useAsync && isAsync) return null;\n\n const awaitKeyword = scope.useAsync && isAsync ? 'await ' : '';\n const functionName = scope.nameApi.resolverFunction(remainingAccounts.value.name);\n return fragment(`${awaitKeyword}${functionName}(resolverScope)`)\n .addImports(scope.getImportFrom(remainingAccounts.value), functionName)\n .addFeatures(['instruction:resolverScopeVariable']);\n}\n","import { InstructionNode } from '@codama/nodes';\nimport { findProgramNodeFromPath, getLastNodeFromPath, NodePath } from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { TypeManifest } from '../TypeManifest';\nimport { Fragment, fragment, fragmentFromTemplate } from './common';\n\nexport function getInstructionParseFunctionFragment(\n scope: Pick<GlobalFragmentScope, 'customInstructionData' | 'nameApi'> & {\n dataArgsManifest: TypeManifest;\n instructionPath: NodePath<InstructionNode>;\n },\n): Fragment {\n const { instructionPath, dataArgsManifest, nameApi, customInstructionData } = scope;\n const instructionNode = getLastNodeFromPath(instructionPath);\n const programNode = findProgramNodeFromPath(instructionPath)!;\n const customData = customInstructionData.get(instructionNode.name);\n const hasAccounts = instructionNode.accounts.length > 0;\n const hasOptionalAccounts = instructionNode.accounts.some(account => account.isOptional);\n const minimumNumberOfAccounts =\n instructionNode.optionalAccountStrategy === 'omitted'\n ? instructionNode.accounts.filter(account => !account.isOptional).length\n : instructionNode.accounts.length;\n const hasData = !!customData || instructionNode.arguments.length > 0;\n\n const instructionDataName = nameApi.instructionDataType(instructionNode.name);\n const programAddressConstant = nameApi.programAddressConstant(programNode.name);\n const dataTypeFragment = fragment(\n customData ? dataArgsManifest.strictType.render : nameApi.dataType(instructionDataName),\n );\n const decoderFunction = customData\n ? dataArgsManifest.decoder.render\n : `${nameApi.decoderFunction(instructionDataName)}()`;\n if (customData) {\n dataTypeFragment.mergeImportsWith(dataArgsManifest.strictType, dataArgsManifest.decoder);\n }\n\n return fragmentFromTemplate('instructionParseFunction.njk', {\n dataTypeFragment,\n decoderFunction,\n hasAccounts,\n hasData,\n hasOptionalAccounts,\n instruction: instructionNode,\n instructionParseFunction: nameApi.instructionParseFunction(instructionNode.name),\n instructionParsedType: nameApi.instructionParsedType(instructionNode.name),\n minimumNumberOfAccounts,\n programAddressConstant,\n })\n .mergeImportsWith(dataTypeFragment)\n .addImports('generatedPrograms', [programAddressConstant])\n .addImports('solanaInstructions', ['type Instruction'])\n .addImports('solanaInstructions', hasAccounts ? ['type InstructionWithAccounts', 'type AccountMeta'] : [])\n .addImports('solanaInstructions', hasData ? ['type InstructionWithData'] : [])\n .addImports('solanaCodecsCore', hasData ? ['type ReadonlyUint8Array'] : []);\n}\n","import { InstructionNode, pascalCase } from '@codama/nodes';\nimport { findProgramNodeFromPath, getLastNodeFromPath, NodePath } from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { Fragment, fragmentFromTemplate, mergeFragments } from './common';\nimport { getInstructionAccountMetaFragment } from './instructionAccountMeta';\nimport { getInstructionAccountTypeParamFragment } from './instructionAccountTypeParam';\n\nexport function getInstructionTypeFragment(\n scope: Pick<GlobalFragmentScope, 'customInstructionData' | 'linkables' | 'nameApi'> & {\n instructionPath: NodePath<InstructionNode>;\n },\n): Fragment {\n const { instructionPath, nameApi, customInstructionData } = scope;\n const instructionNode = getLastNodeFromPath(instructionPath);\n const programNode = findProgramNodeFromPath(instructionPath)!;\n const hasAccounts = instructionNode.accounts.length > 0;\n const customData = customInstructionData.get(instructionNode.name);\n const hasData = !!customData || instructionNode.arguments.length > 0;\n const instructionDataName = nameApi.instructionDataType(instructionNode.name);\n const programAddressConstant = nameApi.programAddressConstant(programNode.name);\n const dataType = customData ? pascalCase(customData.importAs) : pascalCase(instructionDataName);\n const accountTypeParamsFragment = mergeFragments(\n instructionNode.accounts.map(account =>\n getInstructionAccountTypeParamFragment({\n ...scope,\n allowAccountMeta: true,\n instructionAccountPath: [...instructionPath, account],\n }),\n ),\n renders => renders.join(', '),\n );\n const usesLegacyOptionalAccounts = instructionNode.optionalAccountStrategy === 'omitted';\n const accountMetasFragment = mergeFragments(\n instructionNode.accounts.map(account =>\n getInstructionAccountMetaFragment(account).mapRender(r => {\n const typeParam = `TAccount${pascalCase(account.name)}`;\n const isLegacyOptional = account.isOptional && usesLegacyOptionalAccounts;\n const type = `${typeParam} extends string ? ${r} : ${typeParam}`;\n if (!isLegacyOptional) return type;\n return `...(${typeParam} extends undefined ? [] : [${type}])`;\n }),\n ),\n renders => renders.join(', '),\n );\n\n const fragment = fragmentFromTemplate('instructionType.njk', {\n accountMetas: accountMetasFragment.render,\n accountTypeParams: accountTypeParamsFragment.render,\n dataType,\n hasAccounts,\n hasData,\n instruction: instructionNode,\n instructionType: nameApi.instructionType(instructionNode.name),\n programAddressConstant,\n })\n .mergeImportsWith(accountTypeParamsFragment, accountMetasFragment)\n .addImports('generatedPrograms', [programAddressConstant])\n .addImports('solanaCodecsCore', hasData ? ['type ReadonlyUint8Array'] : [])\n .addImports('solanaInstructions', [\n 'type AccountMeta',\n 'type Instruction',\n 'type InstructionWithAccounts',\n ...(hasData ? ['type InstructionWithData'] : []),\n ]);\n\n // TODO: if link, add import for data type. Unless we don't need to inject the data type in InstructionWithData.\n\n return fragment;\n}\n","import { isNode, isNodeFilter, PdaNode } from '@codama/nodes';\nimport { findProgramNodeFromPath, getLastNodeFromPath, NodePath, visit } from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { ImportMap } from '../ImportMap';\nimport { Fragment, fragmentFromTemplate } from './common';\n\nexport function getPdaFunctionFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi' | 'typeManifestVisitor'> & {\n pdaPath: NodePath<PdaNode>;\n },\n): Fragment {\n const { pdaPath, typeManifestVisitor, nameApi } = scope;\n const pdaNode = getLastNodeFromPath(pdaPath);\n const programNode = findProgramNodeFromPath(pdaPath)!;\n\n // Seeds.\n const imports = new ImportMap();\n const seeds = pdaNode.seeds.map(seed => {\n if (isNode(seed, 'variablePdaSeedNode')) {\n const seedManifest = visit(seed.type, typeManifestVisitor);\n imports.mergeWith(seedManifest.looseType, seedManifest.encoder);\n return { ...seed, typeManifest: seedManifest };\n }\n if (isNode(seed.value, 'programIdValueNode')) {\n imports.add('solanaAddresses', 'getAddressEncoder');\n return seed;\n }\n const seedManifest = visit(seed.type, typeManifestVisitor);\n imports.mergeWith(seedManifest.encoder);\n const valueManifest = visit(seed.value, typeManifestVisitor).value;\n imports.mergeWith(valueManifest.imports);\n return { ...seed, typeManifest: seedManifest, valueManifest };\n });\n const hasVariableSeeds = pdaNode.seeds.filter(isNodeFilter('variablePdaSeedNode')).length > 0;\n\n return fragmentFromTemplate('pdaFunction.njk', {\n findPdaFunction: nameApi.pdaFindFunction(pdaNode.name),\n hasVariableSeeds,\n pdaDocs: pdaNode.docs,\n pdaSeedsType: nameApi.pdaSeedsType(pdaNode.name),\n programAddress: pdaNode.programId ?? programNode.publicKey,\n seeds,\n })\n .mergeImportsWith(imports)\n .addImports('solanaAddresses', ['type Address', 'getProgramDerivedAddress', 'type ProgramDerivedAddress']);\n}\n","import { ProgramNode } from '@codama/nodes';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { Fragment, fragmentFromTemplate } from './common';\n\nexport function getProgramFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi'> & {\n programNode: ProgramNode;\n },\n): Fragment {\n const { programNode, nameApi } = scope;\n\n return fragmentFromTemplate('program.njk', {\n program: programNode,\n programAddressConstant: nameApi.programAddressConstant(programNode.name),\n }).addImports('solanaAddresses', ['type Address']);\n}\n","import { ProgramNode, resolveNestedTypeNode } from '@codama/nodes';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { Fragment, fragment, mergeFragments } from './common';\nimport { getDiscriminatorConditionFragment } from './discriminatorCondition';\n\nexport function getProgramAccountsFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi' | 'typeManifestVisitor'> & {\n programNode: ProgramNode;\n },\n): Fragment {\n if (scope.programNode.accounts.length === 0) return fragment('');\n return mergeFragments(\n [getProgramAccountsEnumFragment(scope), getProgramAccountsIdentifierFunctionFragment(scope)],\n r => `${r.join('\\n\\n')}\\n`,\n );\n}\n\nfunction getProgramAccountsEnumFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi'> & {\n programNode: ProgramNode;\n },\n): Fragment {\n const { programNode, nameApi } = scope;\n const programAccountsEnum = nameApi.programAccountsEnum(programNode.name);\n const programAccountsEnumVariants = programNode.accounts.map(account =>\n nameApi.programAccountsEnumVariant(account.name),\n );\n return fragment(`export enum ${programAccountsEnum} { ` + `${programAccountsEnumVariants.join(', ')}` + ` }`);\n}\n\nfunction getProgramAccountsIdentifierFunctionFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi' | 'typeManifestVisitor'> & {\n programNode: ProgramNode;\n },\n): Fragment {\n const { programNode, nameApi } = scope;\n const accountsWithDiscriminators = programNode.accounts.filter(\n account => (account.discriminators ?? []).length > 0,\n );\n const hasAccountDiscriminators = accountsWithDiscriminators.length > 0;\n if (!hasAccountDiscriminators) return fragment('');\n\n const programAccountsEnum = nameApi.programAccountsEnum(programNode.name);\n const programAccountsIdentifierFunction = nameApi.programAccountsIdentifierFunction(programNode.name);\n const discriminatorsFragment = mergeFragments(\n accountsWithDiscriminators.map((account): Fragment => {\n const variant = nameApi.programAccountsEnumVariant(account.name);\n return getDiscriminatorConditionFragment({\n ...scope,\n dataName: 'data',\n discriminators: account.discriminators ?? [],\n ifTrue: `return ${programAccountsEnum}.${variant};`,\n struct: resolveNestedTypeNode(account.data),\n });\n }),\n r => r.join('\\n'),\n );\n\n return discriminatorsFragment\n .mapRender(\n discriminators =>\n `export function ${programAccountsIdentifierFunction}(` +\n `account: { data: ReadonlyUint8Array } | ReadonlyUint8Array` +\n `): ${programAccountsEnum} {\\n` +\n `const data = 'data' in account ? account.data : account;\\n` +\n `${discriminators}\\n` +\n `throw new Error(\"The provided account could not be identified as a ${programNode.name} account.\")\\n` +\n `}`,\n )\n .addImports('solanaCodecsCore', 'type ReadonlyUint8Array');\n}\n","import { ProgramNode } from '@codama/nodes';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { Fragment, fragmentFromTemplate } from './common';\n\nexport function getProgramErrorsFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi'> & {\n programNode: ProgramNode;\n },\n): Fragment {\n const { programNode, nameApi } = scope;\n const programAddressConstant = nameApi.programAddressConstant(programNode.name);\n return fragmentFromTemplate('programErrors.njk', {\n errors: programNode.errors,\n escapeProgramErrorMessage: (message: string) => message.replace(/`/g, '\\\\`'),\n getProgramErrorConstant: (name: string) =>\n nameApi.programErrorConstantPrefix(programNode.name) + nameApi.programErrorConstant(name),\n programAddressConstant,\n programErrorMessagesMap: nameApi.programErrorMessagesMap(programNode.name),\n programErrorUnion: nameApi.programErrorUnion(programNode.name),\n programGetErrorMessageFunction: nameApi.programGetErrorMessageFunction(programNode.name),\n programIsErrorFunction: nameApi.programIsErrorFunction(programNode.name),\n })\n .addImports('generatedPrograms', [programAddressConstant])\n .addImports('solanaPrograms', ['isProgramError'])\n .addImports('solanaErrors', ['type SolanaError', 'type SOLANA_ERROR__INSTRUCTION_ERROR__CUSTOM'])\n .addImports('solanaAddresses', ['type Address']);\n}\n","import {\n getAllInstructionsWithSubs,\n InstructionNode,\n ProgramNode,\n structTypeNodeFromInstructionArgumentNodes,\n} from '@codama/nodes';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { Fragment, fragment, mergeFragments } from './common';\nimport { getDiscriminatorConditionFragment } from './discriminatorCondition';\n\nexport function getProgramInstructionsFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi' | 'renderParentInstructions' | 'typeManifestVisitor'> & {\n programNode: ProgramNode;\n },\n): Fragment {\n if (scope.programNode.instructions.length === 0) return fragment('');\n const allInstructions = getAllInstructionsWithSubs(scope.programNode, {\n leavesOnly: !scope.renderParentInstructions,\n subInstructionsFirst: true,\n });\n const scopeWithInstructions = { ...scope, allInstructions };\n return mergeFragments(\n [\n getProgramInstructionsEnumFragment(scopeWithInstructions),\n getProgramInstructionsIdentifierFunctionFragment(scopeWithInstructions),\n getProgramInstructionsParsedUnionTypeFragment(scopeWithInstructions),\n ],\n r => `${r.join('\\n\\n')}\\n`,\n );\n}\n\nfunction getProgramInstructionsEnumFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi'> & {\n allInstructions: InstructionNode[];\n programNode: ProgramNode;\n },\n): Fragment {\n const { programNode, allInstructions, nameApi } = scope;\n const programInstructionsEnum = nameApi.programInstructionsEnum(programNode.name);\n const programInstructionsEnumVariants = allInstructions.map(instruction =>\n nameApi.programInstructionsEnumVariant(instruction.name),\n );\n return fragment(\n `export enum ${programInstructionsEnum} { ` + `${programInstructionsEnumVariants.join(', ')}` + ` }`,\n );\n}\n\nfunction getProgramInstructionsIdentifierFunctionFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi' | 'typeManifestVisitor'> & {\n allInstructions: InstructionNode[];\n programNode: ProgramNode;\n },\n): Fragment {\n const { programNode, nameApi, allInstructions } = scope;\n const instructionsWithDiscriminators = allInstructions.filter(\n instruction => (instruction.discriminators ?? []).length > 0,\n );\n const hasInstructionDiscriminators = instructionsWithDiscriminators.length > 0;\n if (!hasInstructionDiscriminators) return fragment('');\n\n const programInstructionsEnum = nameApi.programInstructionsEnum(programNode.name);\n const programInstructionsIdentifierFunction = nameApi.programInstructionsIdentifierFunction(programNode.name);\n const discriminatorsFragment = mergeFragments(\n instructionsWithDiscriminators.map((instruction): Fragment => {\n const variant = nameApi.programInstructionsEnumVariant(instruction.name);\n return getDiscriminatorConditionFragment({\n ...scope,\n dataName: 'data',\n discriminators: instruction.discriminators ?? [],\n ifTrue: `return ${programInstructionsEnum}.${variant};`,\n struct: structTypeNodeFromInstructionArgumentNodes(instruction.arguments),\n });\n }),\n r => r.join('\\n'),\n );\n\n return discriminatorsFragment\n .mapRender(\n discriminators =>\n `export function ${programInstructionsIdentifierFunction}(` +\n `instruction: { data: ReadonlyUint8Array } | ReadonlyUint8Array` +\n `): ${programInstructionsEnum} {\\n` +\n `const data = 'data' in instruction ? instruction.data : instruction;\\n` +\n `${discriminators}\\n` +\n `throw new Error(\"The provided instruction could not be identified as a ${programNode.name} instruction.\")\\n` +\n `}`,\n )\n .addImports('solanaCodecsCore', 'type ReadonlyUint8Array');\n}\n\nfunction getProgramInstructionsParsedUnionTypeFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi'> & {\n allInstructions: InstructionNode[];\n programNode: ProgramNode;\n },\n): Fragment {\n const { programNode, allInstructions, nameApi } = scope;\n\n const programAddress = programNode.publicKey;\n\n const programInstructionsType = nameApi.programInstructionsParsedUnionType(programNode.name);\n\n const programInstructionsEnum = nameApi.programInstructionsEnum(programNode.name);\n\n const typeVariants = allInstructions.map((instruction): Fragment => {\n const instructionEnumVariant = nameApi.programInstructionsEnumVariant(instruction.name);\n\n const parsedInstructionType = nameApi.instructionParsedType(instruction.name);\n\n return fragment(\n `| { instructionType: ${programInstructionsEnum}.${instructionEnumVariant} } & ${parsedInstructionType}<TProgram>`,\n ).addImports('generatedInstructions', `type ${parsedInstructionType}`);\n });\n\n return mergeFragments(\n [\n fragment(`export type ${programInstructionsType}<TProgram extends string = '${programAddress}'> =`),\n ...typeVariants,\n ],\n r => r.join('\\n'),\n );\n}\n","import { isDataEnum, isNode, TypeNode } from '@codama/nodes';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { Fragment, fragment, fragmentFromTemplate } from './common';\n\nexport function getTypeDiscriminatedUnionHelpersFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi'> & {\n name: string;\n typeNode: TypeNode;\n },\n): Fragment {\n const { name, typeNode, nameApi } = scope;\n const isDiscriminatedUnion = isNode(typeNode, 'enumTypeNode') && isDataEnum(typeNode);\n\n if (!isDiscriminatedUnion) {\n return fragment('');\n }\n\n return fragmentFromTemplate('typeDiscriminatedUnionHelpers.njk', {\n discriminatedUnionDiscriminator: nameApi.discriminatedUnionDiscriminator(name),\n discriminatedUnionFunction: nameApi.discriminatedUnionFunction(name),\n getVariant: (variant: string) => nameApi.discriminatedUnionVariant(variant),\n isDiscriminatedUnionFunction: nameApi.isDiscriminatedUnionFunction(name),\n looseName: nameApi.dataArgsType(name),\n strictName: nameApi.dataType(name),\n typeNode,\n }).addImports('solanaCodecsDataStructures', [\n 'type GetDiscriminatedUnionVariantContent',\n 'type GetDiscriminatedUnionVariant',\n ]);\n}\n","import { Fragment, fragment, mergeFragments } from './fragments';\n\nexport type TypeManifest = {\n decoder: Fragment;\n encoder: Fragment;\n isEnum: boolean;\n looseType: Fragment;\n strictType: Fragment;\n value: Fragment;\n};\n\nexport function typeManifest(): TypeManifest {\n return {\n decoder: fragment(''),\n encoder: fragment(''),\n isEnum: false,\n looseType: fragment(''),\n strictType: fragment(''),\n value: fragment(''),\n };\n}\n\nexport function mergeManifests(\n manifests: TypeManifest[],\n options: {\n mergeCodecs?: (renders: string[]) => string;\n mergeTypes?: (renders: string[]) => string;\n mergeValues?: (renders: string[]) => string;\n } = {},\n): TypeManifest {\n const { mergeTypes, mergeCodecs, mergeValues } = options;\n const merge = (fragmentFn: (m: TypeManifest) => Fragment, mergeFn?: (r: string[]) => string) =>\n mergeFn ? mergeFragments(manifests.map(fragmentFn), mergeFn) : fragment('');\n return {\n decoder: merge(m => m.decoder, mergeCodecs),\n encoder: merge(m => m.encoder, mergeCodecs),\n isEnum: false,\n looseType: merge(m => m.looseType, mergeTypes),\n strictType: merge(m => m.strictType, mergeTypes),\n value: merge(m => m.value, mergeValues),\n };\n}\n","import { join } from 'node:path';\n\nimport { logWarn } from '@codama/errors';\nimport {\n camelCase,\n CamelCaseString,\n definedTypeNode,\n getAllAccounts,\n getAllDefinedTypes,\n getAllInstructionsWithSubs,\n getAllPdas,\n getAllPrograms,\n InstructionNode,\n resolveNestedTypeNode,\n structTypeNodeFromInstructionArgumentNodes,\n} from '@codama/nodes';\nimport { RenderMap } from '@codama/renderers-core';\nimport {\n extendVisitor,\n findProgramNodeFromPath,\n getByteSizeVisitor,\n getResolvedInstructionInputsVisitor,\n LinkableDictionary,\n NodeStack,\n pipe,\n recordLinkablesOnFirstVisitVisitor,\n recordNodeStackVisitor,\n staticVisitor,\n visit,\n} from '@codama/visitors-core';\nimport type { ConfigureOptions } from 'nunjucks';\n\nimport {\n getAccountFetchHelpersFragment,\n getAccountPdaHelpersFragment,\n getAccountSizeHelpersFragment,\n getAccountTypeFragment,\n getDiscriminatorConstantsFragment,\n getInstructionDataFragment,\n getInstructionExtraArgsFragment,\n getInstructionFunctionFragment,\n getInstructionParseFunctionFragment,\n getInstructionTypeFragment,\n getPdaFunctionFragment,\n getProgramAccountsFragment,\n getProgramErrorsFragment,\n getProgramFragment,\n getProgramInstructionsFragment,\n getTypeDiscriminatedUnionHelpersFragment,\n getTypeWithCodecFragment,\n} from './fragments';\nimport { getTypeManifestVisitor, TypeManifestVisitor } from './getTypeManifestVisitor';\nimport { ImportMap } from './ImportMap';\nimport { DEFAULT_NAME_TRANSFORMERS, getNameApi, NameApi, NameTransformers } from './nameTransformers';\nimport {\n CustomDataOptions,\n getDefinedTypeNodesToExtract,\n getImportFromFactory,\n GetImportFromFunction,\n LinkOverrides,\n parseCustomDataOptions,\n ParsedCustomDataOptions,\n render as baseRender,\n} from './utils';\n\nexport type GetRenderMapOptions = {\n asyncResolvers?: string[];\n customAccountData?: CustomDataOptions[];\n customInstructionData?: CustomDataOptions[];\n dependencyMap?: Record<string, string>;\n internalNodes?: string[];\n linkOverrides?: LinkOverrides;\n nameTransformers?: Partial<NameTransformers>;\n nonScalarEnums?: string[];\n renderParentInstructions?: boolean;\n useGranularImports?: boolean;\n};\n\nexport type GlobalFragmentScope = {\n asyncResolvers: CamelCaseString[];\n customAccountData: ParsedCustomDataOptions;\n customInstructionData: ParsedCustomDataOptions;\n getImportFrom: GetImportFromFunction;\n linkables: LinkableDictionary;\n nameApi: NameApi;\n nonScalarEnums: CamelCaseString[];\n renderParentInstructions: boolean;\n typeManifestVisitor: TypeManifestVisitor;\n};\n\nexport function getRenderMapVisitor(options: GetRenderMapOptions = {}) {\n const linkables = new LinkableDictionary();\n const stack = new NodeStack();\n\n const nameTransformers = {\n ...DEFAULT_NAME_TRANSFORMERS,\n ...options.nameTransformers,\n };\n const nameApi = getNameApi(nameTransformers);\n const renderParentInstructions = options.renderParentInstructions ?? false;\n const dependencyMap = options.dependencyMap ?? {};\n const useGranularImports = options.useGranularImports ?? false;\n const asyncResolvers = (options.asyncResolvers ?? []).map(camelCase);\n const nonScalarEnums = (options.nonScalarEnums ?? []).map(camelCase);\n const internalNodes = (options.internalNodes ?? []).map(camelCase);\n const customAccountData = parseCustomDataOptions(options.customAccountData ?? [], 'AccountData');\n const customInstructionData = parseCustomDataOptions(options.customInstructionData ?? [], 'InstructionData');\n const getImportFrom = getImportFromFactory(options.linkOverrides ?? {}, customAccountData, customInstructionData);\n\n const typeManifestVisitor = getTypeManifestVisitor({\n customAccountData,\n customInstructionData,\n getImportFrom,\n linkables,\n nameApi,\n nonScalarEnums,\n stack,\n });\n const resolvedInstructionInputVisitor = getResolvedInstructionInputsVisitor();\n const byteSizeVisitor = getByteSizeVisitor(linkables, { stack });\n\n const globalScope: GlobalFragmentScope = {\n asyncResolvers,\n customAccountData,\n customInstructionData,\n getImportFrom,\n linkables,\n nameApi,\n nonScalarEnums,\n renderParentInstructions,\n typeManifestVisitor,\n };\n\n const render = (template: string, context?: object, renderOptions?: ConfigureOptions): string => {\n return baseRender(join('pages', template), context, renderOptions);\n };\n\n return pipe(\n staticVisitor(() => new RenderMap(), {\n keys: ['rootNode', 'programNode', 'pdaNode', 'accountNode', 'definedTypeNode', 'instructionNode'],\n }),\n v =>\n extendVisitor(v, {\n visitAccount(node) {\n const accountPath = stack.getPath('accountNode');\n if (!findProgramNodeFromPath(accountPath)) {\n throw new Error('Account must be visited inside a program.');\n }\n\n const scope = {\n ...globalScope,\n accountPath,\n size: visit(node, byteSizeVisitor),\n typeManifest: visit(node, typeManifestVisitor),\n };\n\n const fields = resolveNestedTypeNode(node.data).fields;\n const accountDiscriminatorConstantsFragment = getDiscriminatorConstantsFragment({\n ...scope,\n discriminatorNodes: node.discriminators ?? [],\n fields,\n prefix: node.name,\n });\n const accountTypeFragment = getAccountTypeFragment(scope);\n const accountFetchHelpersFragment = getAccountFetchHelpersFragment(scope);\n const accountSizeHelpersFragment = getAccountSizeHelpersFragment(scope);\n const accountPdaHelpersFragment = getAccountPdaHelpersFragment(scope);\n const imports = new ImportMap().mergeWith(\n accountDiscriminatorConstantsFragment,\n accountTypeFragment,\n accountFetchHelpersFragment,\n accountSizeHelpersFragment,\n accountPdaHelpersFragment,\n );\n\n return new RenderMap().add(\n `accounts/${camelCase(node.name)}.ts`,\n render('accountsPage.njk', {\n accountDiscriminatorConstantsFragment,\n accountFetchHelpersFragment,\n accountPdaHelpersFragment,\n accountSizeHelpersFragment,\n accountTypeFragment,\n imports: imports.toString(dependencyMap, useGranularImports),\n }),\n );\n },\n\n visitDefinedType(node) {\n const scope = {\n ...globalScope,\n codecDocs: [],\n decoderDocs: [],\n encoderDocs: [],\n manifest: visit(node, typeManifestVisitor),\n name: node.name,\n node: node.type,\n size: visit(node, byteSizeVisitor),\n typeDocs: node.docs,\n typeNode: node.type,\n };\n\n const typeWithCodecFragment = getTypeWithCodecFragment(scope);\n const typeDiscriminatedUnionHelpersFragment = getTypeDiscriminatedUnionHelpersFragment(scope);\n const imports = new ImportMap()\n .mergeWith(typeWithCodecFragment, typeDiscriminatedUnionHelpersFragment)\n .remove('generatedTypes', [\n nameApi.dataType(node.name),\n nameApi.dataArgsType(node.name),\n nameApi.encoderFunction(node.name),\n nameApi.decoderFunction(node.name),\n nameApi.codecFunction(node.name),\n ]);\n\n return new RenderMap().add(\n `types/${camelCase(node.name)}.ts`,\n render('definedTypesPage.njk', {\n imports: imports.toString({\n ...dependencyMap,\n generatedTypes: '.',\n }),\n typeDiscriminatedUnionHelpersFragment,\n typeWithCodecFragment,\n }),\n );\n },\n\n visitInstruction(node) {\n const instructionPath = stack.getPath('instructionNode');\n if (!findProgramNodeFromPath(instructionPath)) {\n throw new Error('Instruction must be visited inside a program.');\n }\n\n const instructionExtraName = nameApi.instructionExtraType(node.name);\n const scope = {\n ...globalScope,\n dataArgsManifest: visit(node, typeManifestVisitor),\n extraArgsManifest: visit(\n definedTypeNode({\n name: instructionExtraName,\n type: structTypeNodeFromInstructionArgumentNodes(node.extraArguments ?? []),\n }),\n typeManifestVisitor,\n ),\n instructionPath,\n renamedArgs: getRenamedArgsMap(node),\n resolvedInputs: visit(node, resolvedInstructionInputVisitor),\n size: visit(node, byteSizeVisitor),\n };\n\n // Fragments.\n const instructionDiscriminatorConstantsFragment = getDiscriminatorConstantsFragment({\n ...scope,\n discriminatorNodes: node.discriminators ?? [],\n fields: node.arguments,\n prefix: node.name,\n });\n const instructionTypeFragment = getInstructionTypeFragment(scope);\n const instructionDataFragment = getInstructionDataFragment(scope);\n const instructionExtraArgsFragment = getInstructionExtraArgsFragment(scope);\n const instructionFunctionAsyncFragment = getInstructionFunctionFragment({\n ...scope,\n useAsync: true,\n });\n const instructionFunctionSyncFragment = getInstructionFunctionFragment({\n ...scope,\n useAsync: false,\n });\n const instructionParseFunctionFragment = getInstructionParseFunctionFragment(scope);\n\n // Imports and interfaces.\n const imports = new ImportMap().mergeWith(\n instructionDiscriminatorConstantsFragment,\n instructionTypeFragment,\n instructionDataFragment,\n instructionExtraArgsFragment,\n instructionFunctionAsyncFragment,\n instructionFunctionSyncFragment,\n instructionParseFunctionFragment,\n );\n\n return new RenderMap().add(\n `instructions/${camelCase(node.name)}.ts`,\n render('instructionsPage.njk', {\n imports: imports.toString(dependencyMap, useGranularImports),\n instruction: node,\n instructionDataFragment,\n instructionDiscriminatorConstantsFragment,\n instructionExtraArgsFragment,\n instructionFunctionAsyncFragment,\n instructionFunctionSyncFragment,\n instructionParseFunctionFragment,\n instructionTypeFragment,\n }),\n );\n },\n\n visitPda(node) {\n const pdaPath = stack.getPath('pdaNode');\n if (!findProgramNodeFromPath(pdaPath)) {\n throw new Error('Account must be visited inside a program.');\n }\n\n const scope = { ...globalScope, pdaPath };\n const pdaFunctionFragment = getPdaFunctionFragment(scope);\n const imports = new ImportMap().mergeWith(pdaFunctionFragment);\n\n return new RenderMap().add(\n `pdas/${camelCase(node.name)}.ts`,\n render('pdasPage.njk', {\n imports: imports.toString(dependencyMap, useGranularImports),\n pdaFunctionFragment,\n }),\n );\n },\n\n visitProgram(node, { self }) {\n const customDataDefinedType = [\n ...getDefinedTypeNodesToExtract(node.accounts, customAccountData),\n ...getDefinedTypeNodesToExtract(node.instructions, customInstructionData),\n ];\n const scope = { ...globalScope, programNode: node };\n const renderMap = new RenderMap()\n .mergeWith(...node.pdas.map(p => visit(p, self)))\n .mergeWith(...node.accounts.map(a => visit(a, self)))\n .mergeWith(...node.definedTypes.map(t => visit(t, self)))\n .mergeWith(...customDataDefinedType.map(t => visit(t, self)));\n\n if (node.errors.length > 0) {\n const programErrorsFragment = getProgramErrorsFragment(scope);\n renderMap.add(\n `errors/${camelCase(node.name)}.ts`,\n render('errorsPage.njk', {\n imports: new ImportMap()\n .mergeWith(programErrorsFragment)\n .toString(dependencyMap, useGranularImports),\n programErrorsFragment,\n }),\n );\n }\n\n const programFragment = getProgramFragment(scope);\n const programAccountsFragment = getProgramAccountsFragment(scope);\n const programInstructionsFragment = getProgramInstructionsFragment(scope);\n renderMap.add(\n `programs/${camelCase(node.name)}.ts`,\n render('programsPage.njk', {\n imports: new ImportMap()\n .mergeWith(programFragment, programAccountsFragment, programInstructionsFragment)\n .toString(dependencyMap, useGranularImports),\n programAccountsFragment,\n programFragment,\n programInstructionsFragment,\n }),\n );\n\n renderMap.mergeWith(\n ...getAllInstructionsWithSubs(node, {\n leavesOnly: !renderParentInstructions,\n }).map(ix => visit(ix, self)),\n );\n return renderMap;\n },\n\n visitRoot(node, { self }) {\n const isNotInternal = (n: { name: CamelCaseString }) => !internalNodes.includes(n.name);\n const programsToExport = getAllPrograms(node).filter(isNotInternal);\n const programsWithErrorsToExport = programsToExport.filter(p => p.errors.length > 0);\n const pdasToExport = getAllPdas(node);\n const accountsToExport = getAllAccounts(node).filter(isNotInternal);\n const instructionsToExport = getAllInstructionsWithSubs(node, {\n leavesOnly: !renderParentInstructions,\n }).filter(isNotInternal);\n const definedTypesToExport = getAllDefinedTypes(node).filter(isNotInternal);\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 pdasToExport,\n programsToExport,\n programsWithErrorsToExport,\n root: node,\n };\n\n const map = new RenderMap();\n if (hasAnythingToExport) {\n map.add(\n 'shared/index.ts',\n render('sharedPage.njk', {\n ...ctx,\n imports: new ImportMap()\n .add('solanaAddresses', [\n 'type Address',\n 'isProgramDerivedAddress',\n 'type ProgramDerivedAddress',\n ])\n .add('solanaInstructions', [\n 'AccountRole',\n 'type AccountMeta',\n 'upgradeRoleToSigner',\n ])\n .add('solanaSigners', [\n 'type AccountSignerMeta',\n 'isTransactionSigner',\n 'type TransactionSigner',\n ])\n .addAlias('solanaSigners', 'isTransactionSigner', 'kitIsTransactionSigner')\n .toString(dependencyMap, useGranularImports),\n }),\n );\n }\n if (programsToExport.length > 0) {\n map.add('programs/index.ts', render('programsIndex.njk', ctx));\n }\n if (programsWithErrorsToExport.length > 0) {\n map.add('errors/index.ts', render('errorsIndex.njk', ctx));\n }\n if (accountsToExport.length > 0) {\n map.add('accounts/index.ts', render('accountsIndex.njk', ctx));\n }\n if (pdasToExport.length > 0) {\n map.add('pdas/index.ts', render('pdasIndex.njk', ctx));\n }\n if (instructionsToExport.length > 0) {\n map.add('instructions/index.ts', render('instructionsIndex.njk', ctx));\n }\n if (definedTypesToExport.length > 0) {\n map.add('types/index.ts', render('definedTypesIndex.njk', ctx));\n }\n\n return map\n .add('index.ts', render('rootIndex.njk', ctx))\n .mergeWith(...getAllPrograms(node).map(p => visit(p, self)));\n },\n }),\n v => recordNodeStackVisitor(v, stack),\n v => recordLinkablesOnFirstVisitVisitor(v, linkables),\n );\n}\n\nfunction getRenamedArgsMap(instruction: InstructionNode): Map<string, string> {\n const argNames = [\n ...instruction.arguments.map(a => a.name),\n ...(instruction.extraArguments ?? []).map(a => a.name),\n ];\n const duplicateArgs = argNames.filter((e, i, a) => a.indexOf(e) !== i);\n if (duplicateArgs.length > 0) {\n throw new Error(`Duplicate args found: [${duplicateArgs.join(', ')}] in instruction [${instruction.name}].`);\n }\n\n const allNames = [...instruction.accounts.map(account => account.name), ...argNames];\n const duplicates = allNames.filter((e, i, a) => a.indexOf(e) !== i);\n if (duplicates.length === 0) return new Map();\n\n logWarn(\n `[JavaScript] Accounts and args of instruction [${instruction.name}] have the following ` +\n `conflicting attributes [${duplicates.join(', ')}]. ` +\n `Thus, the arguments have been renamed to avoid conflicts in the input type.`,\n );\n\n return new Map(duplicates.map(name => [camelCase(name), camelCase(`${name}Arg`)]));\n}\n","import {\n camelCase,\n CamelCaseString,\n CountNode,\n isNode,\n isNodeFilter,\n isScalarEnum,\n parseDocs,\n REGISTERED_TYPE_NODE_KINDS,\n REGISTERED_VALUE_NODE_KINDS,\n resolveNestedTypeNode,\n structFieldTypeNode,\n structTypeNode,\n structTypeNodeFromInstructionArgumentNodes,\n TypeNode,\n} from '@codama/nodes';\nimport {\n extendVisitor,\n findLastNodeFromPath,\n LinkableDictionary,\n NodeStack,\n pipe,\n recordNodeStackVisitor,\n staticVisitor,\n visit,\n Visitor,\n} from '@codama/visitors-core';\n\nimport { Fragment, fragment, mergeFragments } from './fragments';\nimport { ImportMap } from './ImportMap';\nimport { NameApi } from './nameTransformers';\nimport { mergeManifests, TypeManifest, typeManifest } from './TypeManifest';\nimport { getBytesFromBytesValueNode, GetImportFromFunction, jsDocblock, ParsedCustomDataOptions } from './utils';\n\nexport type TypeManifestVisitor = ReturnType<typeof getTypeManifestVisitor>;\n\nexport function getTypeManifestVisitor(input: {\n customAccountData: ParsedCustomDataOptions;\n customInstructionData: ParsedCustomDataOptions;\n getImportFrom: GetImportFromFunction;\n linkables: LinkableDictionary;\n nameApi: NameApi;\n nonScalarEnums: CamelCaseString[];\n stack?: NodeStack;\n}) {\n const { nameApi, linkables, nonScalarEnums, customAccountData, customInstructionData, getImportFrom } = input;\n const stack = input.stack ?? new NodeStack();\n let parentName: { loose: string; strict: string } | null = null;\n\n return pipe(\n staticVisitor(\n () =>\n ({\n decoder: fragment(''),\n encoder: fragment(''),\n isEnum: false,\n looseType: fragment(''),\n strictType: fragment(''),\n value: fragment(''),\n }) as TypeManifest,\n {\n keys: [\n ...REGISTERED_TYPE_NODE_KINDS,\n ...REGISTERED_VALUE_NODE_KINDS,\n 'definedTypeLinkNode',\n 'definedTypeNode',\n 'accountNode',\n 'instructionNode',\n ],\n },\n ),\n visitor =>\n extendVisitor(visitor, {\n visitAccount(account, { self }) {\n parentName = {\n loose: nameApi.dataArgsType(account.name),\n strict: nameApi.dataType(account.name),\n };\n const link = customAccountData.get(account.name)?.linkNode;\n const manifest = link ? visit(link, self) : visit(account.data, self);\n parentName = null;\n return manifest;\n },\n\n visitAmountType(amountType, { self }) {\n return visit(amountType.number, self);\n },\n\n visitArrayType(arrayType, { self }) {\n const childManifest = visit(arrayType.item, self);\n childManifest.looseType.mapRender(r => `Array<${r}>`);\n childManifest.strictType.mapRender(r => `Array<${r}>`);\n const sizeManifest = getArrayLikeSizeOption(arrayType.count, self);\n const encoderOptions = sizeManifest.encoder.render ? `, { ${sizeManifest.encoder.render} }` : '';\n const decoderOptions = sizeManifest.decoder.render ? `, { ${sizeManifest.decoder.render} }` : '';\n childManifest.encoder\n .mapRender(r => `getArrayEncoder(${r + encoderOptions})`)\n .mergeImportsWith(sizeManifest.encoder)\n .addImports('solanaCodecsDataStructures', 'getArrayEncoder');\n childManifest.decoder\n .mapRender(r => `getArrayDecoder(${r + decoderOptions})`)\n .mergeImportsWith(sizeManifest.decoder)\n .addImports('solanaCodecsDataStructures', 'getArrayDecoder');\n return childManifest;\n },\n\n visitArrayValue(node, { self }) {\n return mergeManifests(\n node.items.map(v => visit(v, self)),\n { mergeValues: renders => `[${renders.join(', ')}]` },\n );\n },\n\n visitBooleanType(booleanType, { self }) {\n const encoderImports = new ImportMap().add('solanaCodecsDataStructures', 'getBooleanEncoder');\n const decoderImports = new ImportMap().add('solanaCodecsDataStructures', 'getBooleanDecoder');\n\n let sizeEncoder = '';\n let sizeDecoder = '';\n const resolvedSize = resolveNestedTypeNode(booleanType.size);\n if (resolvedSize.format !== 'u8' || resolvedSize.endian !== 'le') {\n const size = visit(booleanType.size, self);\n encoderImports.mergeWith(size.encoder);\n decoderImports.mergeWith(size.decoder);\n sizeEncoder = `{ size: ${size.encoder.render} }`;\n sizeDecoder = `{ size: ${size.decoder.render} }`;\n }\n\n return {\n decoder: fragment(`getBooleanDecoder(${sizeDecoder})`, decoderImports),\n encoder: fragment(`getBooleanEncoder(${sizeEncoder})`, encoderImports),\n isEnum: false,\n looseType: fragment('boolean'),\n strictType: fragment('boolean'),\n value: fragment(''),\n };\n },\n\n visitBooleanValue(node) {\n const manifest = typeManifest();\n manifest.value.setRender(JSON.stringify(node.boolean));\n return manifest;\n },\n\n visitBytesType() {\n return {\n decoder: fragment(`getBytesDecoder()`).addImports(\n 'solanaCodecsDataStructures',\n 'getBytesDecoder',\n ),\n encoder: fragment(`getBytesEncoder()`).addImports(\n 'solanaCodecsDataStructures',\n 'getBytesEncoder',\n ),\n isEnum: false,\n looseType: fragment('ReadonlyUint8Array').addImports(\n 'solanaCodecsCore',\n 'type ReadonlyUint8Array',\n ),\n strictType: fragment('ReadonlyUint8Array').addImports(\n 'solanaCodecsCore',\n 'type ReadonlyUint8Array',\n ),\n value: fragment(''),\n };\n },\n\n visitBytesValue(node) {\n const manifest = typeManifest();\n const bytes = getBytesFromBytesValueNode(node);\n manifest.value.setRender(`new Uint8Array([${Array.from(bytes).join(', ')}])`);\n return manifest;\n },\n\n visitConstantValue(node, { self }) {\n if (isNode(node.type, 'bytesTypeNode') && isNode(node.value, 'bytesValueNode')) {\n return visit(node.value, self);\n }\n return {\n ...typeManifest(),\n value: mergeFragments(\n [visit(node.type, self).encoder, visit(node.value, self).value],\n ([encoderFunction, value]) => `${encoderFunction}.encode(${value})`,\n ),\n };\n },\n\n visitDateTimeType(dateTimeType, { self }) {\n return visit(dateTimeType.number, self);\n },\n\n visitDefinedType(definedType, { self }) {\n parentName = {\n loose: nameApi.dataArgsType(definedType.name),\n strict: nameApi.dataType(definedType.name),\n };\n const manifest = visit(definedType.type, self);\n parentName = null;\n return manifest;\n },\n\n visitDefinedTypeLink(node) {\n const strictName = nameApi.dataType(node.name);\n const looseName = nameApi.dataArgsType(node.name);\n const encoderFunction = nameApi.encoderFunction(node.name);\n const decoderFunction = nameApi.decoderFunction(node.name);\n const importFrom = getImportFrom(node);\n\n return {\n decoder: fragment(`${decoderFunction}()`).addImports(importFrom, decoderFunction),\n encoder: fragment(`${encoderFunction}()`).addImports(importFrom, encoderFunction),\n isEnum: false,\n looseType: fragment(looseName).addImports(importFrom, `type ${looseName}`),\n strictType: fragment(strictName).addImports(importFrom, `type ${strictName}`),\n value: fragment(''),\n };\n },\n\n visitEnumEmptyVariantType(enumEmptyVariantType) {\n const discriminator = nameApi.discriminatedUnionDiscriminator(camelCase(parentName?.strict ?? ''));\n const name = nameApi.discriminatedUnionVariant(enumEmptyVariantType.name);\n const kindAttribute = `${discriminator}: \"${name}\"`;\n return {\n decoder: fragment(`['${name}', getUnitDecoder()]`).addImports(\n 'solanaCodecsDataStructures',\n 'getUnitDecoder',\n ),\n encoder: fragment(`['${name}', getUnitEncoder()]`).addImports(\n 'solanaCodecsDataStructures',\n 'getUnitEncoder',\n ),\n isEnum: false,\n looseType: fragment(`{ ${kindAttribute} }`),\n strictType: fragment(`{ ${kindAttribute} }`),\n value: fragment(''),\n };\n },\n\n visitEnumStructVariantType(enumStructVariantType, { self }) {\n const currentParentName = parentName;\n const discriminator = nameApi.discriminatedUnionDiscriminator(\n camelCase(currentParentName?.strict ?? ''),\n );\n const name = nameApi.discriminatedUnionVariant(enumStructVariantType.name);\n const kindAttribute = `${discriminator}: \"${name}\"`;\n\n parentName = null;\n const structManifest = visit(enumStructVariantType.struct, self);\n parentName = currentParentName;\n\n structManifest.strictType.mapRender(r => `{ ${kindAttribute},${r.slice(1, -1)}}`);\n structManifest.looseType.mapRender(r => `{ ${kindAttribute},${r.slice(1, -1)}}`);\n structManifest.encoder.mapRender(r => `['${name}', ${r}]`);\n structManifest.decoder.mapRender(r => `['${name}', ${r}]`);\n return structManifest;\n },\n\n visitEnumTupleVariantType(enumTupleVariantType, { self }) {\n const currentParentName = parentName;\n const discriminator = nameApi.discriminatedUnionDiscriminator(\n camelCase(currentParentName?.strict ?? ''),\n );\n const name = nameApi.discriminatedUnionVariant(enumTupleVariantType.name);\n const kindAttribute = `${discriminator}: \"${name}\"`;\n const struct = structTypeNode([\n structFieldTypeNode({\n name: 'fields',\n type: enumTupleVariantType.tuple,\n }),\n ]);\n\n parentName = null;\n const structManifest = visit(struct, self);\n parentName = currentParentName;\n\n structManifest.strictType.mapRender(r => `{ ${kindAttribute},${r.slice(1, -1)}}`);\n structManifest.looseType.mapRender(r => `{ ${kindAttribute},${r.slice(1, -1)}}`);\n structManifest.encoder.mapRender(r => `['${name}', ${r}]`);\n structManifest.decoder.mapRender(r => `['${name}', ${r}]`);\n return structManifest;\n },\n\n visitEnumType(enumType, { self }) {\n const currentParentName = parentName;\n const encoderImports = new ImportMap();\n const decoderImports = new ImportMap();\n const encoderOptions: string[] = [];\n const decoderOptions: string[] = [];\n\n const enumSize = resolveNestedTypeNode(enumType.size);\n if (enumSize.format !== 'u8' || enumSize.endian !== 'le') {\n const sizeManifest = visit(enumType.size, self);\n encoderImports.mergeWith(sizeManifest.encoder);\n decoderImports.mergeWith(sizeManifest.decoder);\n encoderOptions.push(`size: ${sizeManifest.encoder.render}`);\n decoderOptions.push(`size: ${sizeManifest.decoder.render}`);\n }\n\n const discriminator = nameApi.discriminatedUnionDiscriminator(\n camelCase(currentParentName?.strict ?? ''),\n );\n if (!isScalarEnum(enumType) && discriminator !== '__kind') {\n encoderOptions.push(`discriminator: '${discriminator}'`);\n decoderOptions.push(`discriminator: '${discriminator}'`);\n }\n\n const encoderOptionsAsString =\n encoderOptions.length > 0 ? `, { ${encoderOptions.join(', ')} }` : '';\n const decoderOptionsAsString =\n decoderOptions.length > 0 ? `, { ${decoderOptions.join(', ')} }` : '';\n\n if (isScalarEnum(enumType)) {\n if (currentParentName === null) {\n throw new Error(\n 'Scalar enums cannot be inlined and must be introduced ' +\n 'via a defined type. Ensure you are not inlining a ' +\n 'defined type that is a scalar enum through a visitor.',\n );\n }\n const variantNames = enumType.variants.map(({ name }) => nameApi.enumVariant(name));\n return {\n decoder: fragment(\n `getEnumDecoder(${currentParentName.strict + decoderOptionsAsString})`,\n decoderImports.add('solanaCodecsDataStructures', 'getEnumDecoder'),\n ),\n encoder: fragment(\n `getEnumEncoder(${currentParentName.strict + encoderOptionsAsString})`,\n encoderImports.add('solanaCodecsDataStructures', 'getEnumEncoder'),\n ),\n isEnum: true,\n looseType: fragment(`{ ${variantNames.join(', ')} }`),\n strictType: fragment(`{ ${variantNames.join(', ')} }`),\n value: fragment(''),\n };\n }\n\n const mergedManifest = mergeManifests(\n enumType.variants.map(variant => visit(variant, self)),\n {\n mergeCodecs: renders => renders.join(', '),\n mergeTypes: renders => renders.join(' | '),\n },\n );\n mergedManifest.encoder\n .mapRender(r => `getDiscriminatedUnionEncoder([${r}]${encoderOptionsAsString})`)\n .mergeImportsWith(encoderImports)\n .addImports('solanaCodecsDataStructures', ['getDiscriminatedUnionEncoder']);\n mergedManifest.decoder\n .mapRender(r => `getDiscriminatedUnionDecoder([${r}]${decoderOptionsAsString})`)\n .mergeImportsWith(decoderImports)\n .addImports('solanaCodecsDataStructures', ['getDiscriminatedUnionDecoder']);\n return mergedManifest;\n },\n\n visitEnumValue(node, { self }) {\n const manifest = typeManifest();\n const enumName = nameApi.dataType(node.enum.name);\n const enumFunction = nameApi.discriminatedUnionFunction(node.enum.name);\n const importFrom = getImportFrom(node.enum);\n\n const enumNode = linkables.get([...stack.getPath(), node.enum])?.type;\n const isScalar =\n enumNode && isNode(enumNode, 'enumTypeNode')\n ? isScalarEnum(enumNode)\n : !nonScalarEnums.includes(node.enum.name);\n\n if (!node.value && isScalar) {\n const variantName = nameApi.enumVariant(node.variant);\n manifest.value.setRender(`${enumName}.${variantName}`).addImports(importFrom, enumName);\n return manifest;\n }\n\n const variantName = nameApi.discriminatedUnionVariant(node.variant);\n if (!node.value) {\n manifest.value\n .setRender(`${enumFunction}('${variantName}')`)\n .addImports(importFrom, enumFunction);\n return manifest;\n }\n\n manifest.value = visit(node.value, self)\n .value.mapRender(r => `${enumFunction}('${variantName}', ${r})`)\n .addImports(importFrom, enumFunction);\n return manifest;\n },\n\n visitFixedSizeType(node, { self }) {\n const manifest = visit(node.type, self);\n manifest.encoder\n .mapRender(r => `fixEncoderSize(${r}, ${node.size})`)\n .addImports('solanaCodecsCore', 'fixEncoderSize');\n manifest.decoder\n .mapRender(r => `fixDecoderSize(${r}, ${node.size})`)\n .addImports('solanaCodecsCore', 'fixDecoderSize');\n return manifest;\n },\n\n visitHiddenPrefixType(node, { self }) {\n const manifest = visit(node.type, self);\n const prefixes = node.prefix.map(c => visit(c, self).value);\n const prefixEncoders = fragment(prefixes.map(c => `getConstantEncoder(${c.render})`).join(', '))\n .addImports('solanaCodecsCore', 'getConstantEncoder')\n .mergeImportsWith(...prefixes);\n const prefixDecoders = fragment(prefixes.map(c => `getConstantDecoder(${c.render})`).join(', '))\n .addImports('solanaCodecsCore', 'getConstantDecoder')\n .mergeImportsWith(...prefixes);\n manifest.encoder\n .mapRender(r => `getHiddenPrefixEncoder(${r}, [${prefixEncoders.render}])`)\n .mergeImportsWith(prefixEncoders)\n .addImports('solanaCodecsDataStructures', 'getHiddenPrefixEncoder');\n manifest.decoder\n .mapRender(r => `getHiddenPrefixDecoder(${r}, [${prefixDecoders.render}])`)\n .mergeImportsWith(prefixDecoders)\n .addImports('solanaCodecsDataStructures', 'getHiddenPrefixDecoder');\n return manifest;\n },\n\n visitHiddenSuffixType(node, { self }) {\n const manifest = visit(node.type, self);\n const suffixes = node.suffix.map(c => visit(c, self).value);\n const suffixEncoders = fragment(suffixes.map(c => `getConstantEncoder(${c.render})`).join(', '))\n .addImports('solanaCodecsCore', 'getConstantEncoder')\n .mergeImportsWith(...suffixes);\n const suffixDecoders = fragment(suffixes.map(c => `getConstantDecoder(${c.render})`).join(', '))\n .addImports('solanaCodecsCore', 'getConstantDecoder')\n .mergeImportsWith(...suffixes);\n manifest.encoder\n .mapRender(r => `getHiddenSuffixEncoder(${r}, [${suffixEncoders.render}])`)\n .mergeImportsWith(suffixEncoders)\n .addImports('solanaCodecsDataStructures', 'getHiddenSuffixEncoder');\n manifest.decoder\n .mapRender(r => `getHiddenSuffixDecoder(${r}, [${suffixDecoders.render}])`)\n .mergeImportsWith(suffixDecoders)\n .addImports('solanaCodecsDataStructures', 'getHiddenSuffixDecoder');\n return manifest;\n },\n\n visitInstruction(instruction, { self }) {\n const instructionDataName = nameApi.instructionDataType(instruction.name);\n parentName = {\n loose: nameApi.dataArgsType(instructionDataName),\n strict: nameApi.dataType(instructionDataName),\n };\n const link = customInstructionData.get(instruction.name)?.linkNode;\n const struct = structTypeNodeFromInstructionArgumentNodes(instruction.arguments);\n const manifest = link ? visit(link, self) : visit(struct, self);\n parentName = null;\n return manifest;\n },\n\n visitMapEntryValue(node, { self }) {\n return mergeManifests([visit(node.key, self), visit(node.value, self)], {\n mergeValues: renders => `[${renders.join(', ')}]`,\n });\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 mergeCodecs: ([k, v]) => `${k}, ${v}`,\n mergeTypes: ([k, v]) => `Map<${k}, ${v}>`,\n });\n const sizeManifest = getArrayLikeSizeOption(mapType.count, self);\n const encoderOptions = sizeManifest.encoder.render ? `, { ${sizeManifest.encoder.render} }` : '';\n const decoderOptions = sizeManifest.decoder.render ? `, { ${sizeManifest.decoder.render} }` : '';\n mergedManifest.encoder\n .mapRender(r => `getMapEncoder(${r}${encoderOptions})`)\n .addImports('solanaCodecsDataStructures', 'getMapEncoder');\n mergedManifest.decoder\n .mapRender(r => `getMapDecoder(${r}${decoderOptions})`)\n .addImports('solanaCodecsDataStructures', 'getMapDecoder');\n return mergedManifest;\n },\n\n visitMapValue(node, { self }) {\n const entryFragments = node.entries.map(entry => visit(entry, self));\n return mergeManifests(entryFragments, {\n mergeValues: renders => `new Map([${renders.join(', ')}])`,\n });\n },\n\n visitNoneValue() {\n const manifest = typeManifest();\n manifest.value.setRender('none()').addImports('solanaOptions', 'none');\n return manifest;\n },\n\n visitNumberType(numberType) {\n const encoderFunction = nameApi.encoderFunction(numberType.format);\n const decoderFunction = nameApi.decoderFunction(numberType.format);\n const isBigNumber = ['u64', 'u128', 'i64', 'i128'].includes(numberType.format);\n const encoderImports = new ImportMap().add('solanaCodecsNumbers', encoderFunction);\n const decoderImports = new ImportMap().add('solanaCodecsNumbers', decoderFunction);\n let endianness = '';\n if (numberType.endian === 'be') {\n encoderImports.add('solanaCodecsNumbers', 'Endian');\n decoderImports.add('solanaCodecsNumbers', 'Endian');\n endianness = '{ endian: Endian.Big }';\n }\n return {\n decoder: fragment(`${decoderFunction}(${endianness})`, decoderImports),\n encoder: fragment(`${encoderFunction}(${endianness})`, encoderImports),\n isEnum: false,\n looseType: fragment(isBigNumber ? 'number | bigint' : 'number'),\n strictType: fragment(isBigNumber ? 'bigint' : 'number'),\n value: fragment(''),\n };\n },\n\n visitNumberValue(node) {\n const manifest = typeManifest();\n manifest.value.setRender(JSON.stringify(node.number));\n return manifest;\n },\n\n visitOptionType(optionType, { self }) {\n const childManifest = visit(optionType.item, self);\n childManifest.strictType.mapRender(r => `Option<${r}>`).addImports('solanaOptions', 'type Option');\n childManifest.looseType\n .mapRender(r => `OptionOrNullable<${r}>`)\n .addImports('solanaOptions', 'type OptionOrNullable');\n const encoderOptions: string[] = [];\n const decoderOptions: string[] = [];\n\n // Prefix option.\n const optionPrefix = resolveNestedTypeNode(optionType.prefix);\n if (optionPrefix.format !== 'u8' || optionPrefix.endian !== 'le') {\n const prefixManifest = visit(optionType.prefix, self);\n childManifest.encoder.mergeImportsWith(prefixManifest.encoder);\n childManifest.decoder.mergeImportsWith(prefixManifest.decoder);\n encoderOptions.push(`prefix: ${prefixManifest.encoder.render}`);\n decoderOptions.push(`prefix: ${prefixManifest.decoder.render}`);\n }\n\n // Fixed option.\n if (optionType.fixed) {\n encoderOptions.push(`noneValue: \"zeroes\"`);\n decoderOptions.push(`noneValue: \"zeroes\"`);\n }\n\n const encoderOptionsAsString =\n encoderOptions.length > 0 ? `, { ${encoderOptions.join(', ')} }` : '';\n const decoderOptionsAsString =\n decoderOptions.length > 0 ? `, { ${decoderOptions.join(', ')} }` : '';\n childManifest.encoder\n .mapRender(r => `getOptionEncoder(${r + encoderOptionsAsString})`)\n .addImports('solanaOptions', 'getOptionEncoder');\n childManifest.decoder\n .mapRender(r => `getOptionDecoder(${r + decoderOptionsAsString})`)\n .addImports('solanaOptions', 'getOptionDecoder');\n return childManifest;\n },\n\n visitPostOffsetType(node, { self }) {\n const manifest = visit(node.type, self);\n if (node.strategy === 'padded') {\n manifest.encoder\n .mapRender(r => `padRightEncoder(${r}, ${node.offset})`)\n .addImports('solanaCodecsCore', 'padRightEncoder');\n manifest.decoder\n .mapRender(r => `padRightDecoder(${r}, ${node.offset})`)\n .addImports('solanaCodecsCore', 'padRightDecoder');\n return manifest;\n }\n const fn = (() => {\n switch (node.strategy) {\n case 'absolute':\n return node.offset < 0\n ? `({ wrapBytes }) => wrapBytes(${node.offset})`\n : `() => ${node.offset}`;\n case 'preOffset':\n return node.offset < 0\n ? `({ preOffset }) => preOffset ${node.offset}`\n : `({ preOffset }) => preOffset + ${node.offset}`;\n case 'relative':\n default:\n return node.offset < 0\n ? `({ postOffset }) => postOffset ${node.offset}`\n : `({ postOffset }) => postOffset + ${node.offset}`;\n }\n })();\n manifest.encoder\n .mapRender(r => `offsetEncoder(${r}, { postOffset: ${fn} })`)\n .addImports('solanaCodecsCore', 'offsetEncoder');\n manifest.decoder\n .mapRender(r => `offsetDecoder(${r}, { postOffset: ${fn} })`)\n .addImports('solanaCodecsCore', 'offsetDecoder');\n return manifest;\n },\n\n visitPreOffsetType(node, { self }) {\n const manifest = visit(node.type, self);\n if (node.strategy === 'padded') {\n manifest.encoder\n .mapRender(r => `padLeftEncoder(${r}, ${node.offset})`)\n .addImports('solanaCodecsCore', 'padLeftEncoder');\n manifest.decoder\n .mapRender(r => `padLeftDecoder(${r}, ${node.offset})`)\n .addImports('solanaCodecsCore', 'padLeftDecoder');\n return manifest;\n }\n const fn = (() => {\n switch (node.strategy) {\n case 'absolute':\n return node.offset < 0\n ? `({ wrapBytes }) => wrapBytes(${node.offset})`\n : `() => ${node.offset}`;\n case 'relative':\n default:\n return node.offset < 0\n ? `({ preOffset }) => preOffset ${node.offset}`\n : `({ preOffset }) => preOffset + ${node.offset}`;\n }\n })();\n manifest.encoder\n .mapRender(r => `offsetEncoder(${r}, { preOffset: ${fn} })`)\n .addImports('solanaCodecsCore', 'offsetEncoder');\n manifest.decoder\n .mapRender(r => `offsetDecoder(${r}, { preOffset: ${fn} })`)\n .addImports('solanaCodecsCore', 'offsetDecoder');\n return manifest;\n },\n\n visitPublicKeyType() {\n const imports = new ImportMap().add('solanaAddresses', 'type Address');\n return {\n decoder: fragment('getAddressDecoder()').addImports('solanaAddresses', 'getAddressDecoder'),\n encoder: fragment('getAddressEncoder()').addImports('solanaAddresses', 'getAddressEncoder'),\n isEnum: false,\n looseType: fragment('Address', imports),\n strictType: fragment('Address', imports),\n value: fragment(''),\n };\n },\n\n visitPublicKeyValue(node) {\n const manifest = typeManifest();\n manifest.value.setRender(`address(\"${node.publicKey}\")`).addImports('solanaAddresses', 'address');\n return manifest;\n },\n\n visitRemainderOptionType(node, { self }) {\n const childManifest = visit(node.item, self);\n childManifest.strictType.mapRender(r => `Option<${r}>`).addImports('solanaOptions', 'type Option');\n childManifest.looseType\n .mapRender(r => `OptionOrNullable<${r}>`)\n .addImports('solanaOptions', 'type OptionOrNullable');\n const encoderOptions: string[] = ['prefix: null'];\n const decoderOptions: string[] = ['prefix: null'];\n\n const encoderOptionsAsString =\n encoderOptions.length > 0 ? `, { ${encoderOptions.join(', ')} }` : '';\n const decoderOptionsAsString =\n decoderOptions.length > 0 ? `, { ${decoderOptions.join(', ')} }` : '';\n childManifest.encoder\n .mapRender(r => `getOptionEncoder(${r + encoderOptionsAsString})`)\n .addImports('solanaOptions', 'getOptionEncoder');\n childManifest.decoder\n .mapRender(r => `getOptionDecoder(${r + decoderOptionsAsString})`)\n .addImports('solanaOptions', 'getOptionDecoder');\n return childManifest;\n },\n\n visitSentinelType(node, { self }) {\n const manifest = visit(node.type, self);\n const sentinel = visit(node.sentinel, self).value;\n manifest.encoder\n .mapRender(r => `addEncoderSentinel(${r}, ${sentinel.render})`)\n .mergeImportsWith(sentinel)\n .addImports('solanaCodecsCore', 'addEncoderSentinel');\n manifest.decoder\n .mapRender(r => `addDecoderSentinel(${r}, ${sentinel.render})`)\n .mergeImportsWith(sentinel)\n .addImports('solanaCodecsCore', 'addDecoderSentinel');\n return manifest;\n },\n\n visitSetType(setType, { self }) {\n const childManifest = visit(setType.item, self);\n childManifest.strictType.mapRender(r => `Set<${r}>`);\n childManifest.looseType.mapRender(r => `Set<${r}>`);\n\n const sizeManifest = getArrayLikeSizeOption(setType.count, self);\n const encoderOptions = sizeManifest.encoder.render ? `, { ${sizeManifest.encoder.render} }` : '';\n const decoderOptions = sizeManifest.decoder.render ? `, { ${sizeManifest.decoder.render} }` : '';\n childManifest.encoder\n .mergeImportsWith(sizeManifest.encoder)\n .mapRender(r => `getSetEncoder(${r + encoderOptions})`)\n .addImports('solanaCodecsDataStructures', 'getSetEncoder');\n childManifest.decoder\n .mergeImportsWith(sizeManifest.decoder)\n .mapRender(r => `getSetDecoder(${r + decoderOptions})`)\n .addImports('solanaCodecsDataStructures', 'getSetDecoder');\n\n return childManifest;\n },\n\n visitSetValue(node, { self }) {\n return mergeManifests(\n node.items.map(v => visit(v, self)),\n { mergeValues: renders => `new Set([${renders.join(', ')}])` },\n );\n },\n\n visitSizePrefixType(node, { self }) {\n const manifest = visit(node.type, self);\n const prefix = visit(node.prefix, self);\n manifest.encoder\n .mapRender(r => `addEncoderSizePrefix(${r}, ${prefix.encoder.render})`)\n .mergeImportsWith(prefix.encoder)\n .addImports('solanaCodecsCore', 'addEncoderSizePrefix');\n manifest.decoder\n .mapRender(r => `addDecoderSizePrefix(${r}, ${prefix.decoder.render})`)\n .mergeImportsWith(prefix.decoder)\n .addImports('solanaCodecsCore', 'addDecoderSizePrefix');\n return manifest;\n },\n\n visitSolAmountType({ number }, { self }) {\n const numberManifest = visit(number, self);\n\n const lamportsType = 'Lamports';\n const lamportsImport = new ImportMap().add('solanaRpcTypes', 'type Lamports');\n\n return {\n ...numberManifest,\n decoder: numberManifest.decoder\n .mapRender(r => `getLamportsDecoder(${r})`)\n .addImports('solanaRpcTypes', 'getLamportsDecoder'),\n encoder: numberManifest.encoder\n .mapRender(r => `getLamportsEncoder(${r})`)\n .addImports('solanaRpcTypes', 'getLamportsEncoder'),\n looseType: fragment(lamportsType, lamportsImport),\n strictType: fragment(lamportsType, lamportsImport),\n };\n },\n\n visitSomeValue(node, { self }) {\n const manifest = typeManifest();\n manifest.value = visit(node.value, self)\n .value.mapRender(r => `some(${r})`)\n .addImports('solanaOptions', 'some');\n return manifest;\n },\n\n visitStringType(stringType) {\n const [encoder, decoder] = (() => {\n switch (stringType.encoding) {\n case 'base16':\n return ['getBase16Encoder', 'getBase16Decoder'];\n case 'base58':\n return ['getBase58Encoder', 'getBase58Decoder'];\n case 'base64':\n return ['getBase64Encoder', 'getBase64Decoder'];\n case 'utf8':\n return ['getUtf8Encoder', 'getUtf8Decoder'];\n default:\n throw new Error(`Unsupported string encoding: ${stringType.encoding as string}`);\n }\n })();\n return {\n decoder: fragment(`${decoder}()`).addImports('solanaCodecsStrings', decoder),\n encoder: fragment(`${encoder}()`).addImports('solanaCodecsStrings', encoder),\n isEnum: false,\n looseType: fragment('string'),\n strictType: fragment('string'),\n value: fragment(''),\n };\n },\n\n visitStringValue(node) {\n const manifest = typeManifest();\n manifest.value.setRender(JSON.stringify(node.string));\n return manifest;\n },\n\n visitStructFieldType(structFieldType, { self }) {\n const name = camelCase(structFieldType.name);\n const childManifest = visit(structFieldType.type, self);\n const structFieldDocs = parseDocs(structFieldType.docs);\n const docblock = structFieldDocs.length > 0 ? `\\n${jsDocblock(structFieldDocs)}` : '';\n const originalLooseType = childManifest.looseType.render;\n childManifest.strictType.mapRender(r => `${docblock}${name}: ${r}; `);\n childManifest.looseType.mapRender(r => `${docblock}${name}: ${r}; `);\n childManifest.encoder.mapRender(r => `['${name}', ${r}]`);\n childManifest.decoder.mapRender(r => `['${name}', ${r}]`);\n\n // No default value.\n if (!structFieldType.defaultValue) {\n return childManifest;\n }\n\n // Optional default value.\n if (structFieldType.defaultValueStrategy !== 'omitted') {\n childManifest.looseType.setRender(`${docblock}${name}?: ${originalLooseType}; `);\n return childManifest;\n }\n\n // Omitted default value.\n childManifest.looseType = fragment('');\n return childManifest;\n },\n\n visitStructFieldValue(node, { self }) {\n const manifest = typeManifest();\n manifest.value = visit(node.value, self).value.mapRender(r => `${node.name}: ${r}`);\n return manifest;\n },\n\n visitStructType(structType, { self }) {\n const optionalFields = structType.fields.filter(f => !!f.defaultValue);\n\n const mergedManifest = mergeManifests(\n structType.fields.map(field => visit(field, self)),\n {\n mergeCodecs: renders => `([${renders.join(', ')}])`,\n mergeTypes: renders => `{ ${renders.join('')} }`,\n },\n );\n\n mergedManifest.encoder\n .mapRender(r => `getStructEncoder${r}`)\n .addImports('solanaCodecsDataStructures', 'getStructEncoder');\n mergedManifest.decoder\n .mapRender(r => `getStructDecoder${r}`)\n .addImports('solanaCodecsDataStructures', 'getStructDecoder');\n\n if (optionalFields.length === 0) {\n return mergedManifest;\n }\n\n // Check if we are inside an instruction or account to use discriminator constants when available.\n const parentPath = stack.getPath();\n const instructionNode = findLastNodeFromPath(parentPath, 'instructionNode');\n const accountNode = findLastNodeFromPath(parentPath, 'accountNode');\n const discriminatorPrefix = instructionNode ? instructionNode.name : accountNode?.name;\n const discriminators =\n (instructionNode ? instructionNode.discriminators : accountNode?.discriminators) ?? [];\n const fieldDiscriminators = discriminators.filter(isNodeFilter('fieldDiscriminatorNode'));\n\n const defaultValues = optionalFields\n .map(f => {\n const key = camelCase(f.name);\n\n // If the field has an associated discriminator node, use the constant value instead.\n if (fieldDiscriminators.some(d => d.name === f.name)) {\n const constantName = nameApi.constant(camelCase(`${discriminatorPrefix}_${f.name}`));\n return f.defaultValueStrategy === 'omitted'\n ? `${key}: ${constantName}`\n : `${key}: value.${key} ?? ${constantName}`;\n }\n\n const defaultValue = f.defaultValue as NonNullable<typeof f.defaultValue>;\n const { render: renderedValue, imports } = visit(defaultValue, self).value;\n mergedManifest.encoder.mergeImportsWith(imports);\n return f.defaultValueStrategy === 'omitted'\n ? `${key}: ${renderedValue}`\n : `${key}: value.${key} ?? ${renderedValue}`;\n })\n .join(', ');\n mergedManifest.encoder\n .mapRender(r => `transformEncoder(${r}, (value) => ({ ...value, ${defaultValues} }))`)\n .addImports('solanaCodecsCore', 'transformEncoder');\n return mergedManifest;\n },\n\n visitStructValue(node, { self }) {\n return mergeManifests(\n node.fields.map(field => visit(field, self)),\n { mergeValues: renders => `{ ${renders.join(', ')} }` },\n );\n },\n\n visitTupleType(tupleType, { self }) {\n const items = tupleType.items.map(item => visit(item, self));\n const mergedManifest = mergeManifests(items, {\n mergeCodecs: codecs => `[${codecs.join(', ')}]`,\n mergeTypes: types => `readonly [${types.join(', ')}]`,\n });\n mergedManifest.encoder\n .mapRender(render => `getTupleEncoder(${render})`)\n .addImports('solanaCodecsDataStructures', 'getTupleEncoder');\n mergedManifest.decoder\n .mapRender(render => `getTupleDecoder(${render})`)\n .addImports('solanaCodecsDataStructures', 'getTupleDecoder');\n return mergedManifest;\n },\n\n visitTupleValue(node, { self }) {\n return mergeManifests(\n node.items.map(v => visit(v, self)),\n { mergeValues: renders => `[${renders.join(', ')}]` },\n );\n },\n\n visitZeroableOptionType(node, { self }) {\n const childManifest = visit(node.item, self);\n childManifest.strictType.mapRender(r => `Option<${r}>`).addImports('solanaOptions', 'type Option');\n childManifest.looseType\n .mapRender(r => `OptionOrNullable<${r}>`)\n .addImports('solanaOptions', 'type OptionOrNullable');\n const encoderOptions: string[] = ['prefix: null'];\n const decoderOptions: string[] = ['prefix: null'];\n\n // Zero-value option.\n if (node.zeroValue) {\n const zeroValueManifest = visit(node.zeroValue, self);\n childManifest.encoder.mergeImportsWith(zeroValueManifest.value);\n childManifest.decoder.mergeImportsWith(zeroValueManifest.value);\n encoderOptions.push(`noneValue: ${zeroValueManifest.value.render}`);\n decoderOptions.push(`noneValue: ${zeroValueManifest.value.render}`);\n } else {\n encoderOptions.push(`noneValue: \"zeroes\"`);\n decoderOptions.push(`noneValue: \"zeroes\"`);\n }\n\n const encoderOptionsAsString =\n encoderOptions.length > 0 ? `, { ${encoderOptions.join(', ')} }` : '';\n const decoderOptionsAsString =\n decoderOptions.length > 0 ? `, { ${decoderOptions.join(', ')} }` : '';\n childManifest.encoder\n .mapRender(r => `getOptionEncoder(${r + encoderOptionsAsString})`)\n .addImports('solanaOptions', 'getOptionEncoder');\n childManifest.decoder\n .mapRender(r => `getOptionDecoder(${r + decoderOptionsAsString})`)\n .addImports('solanaOptions', 'getOptionDecoder');\n return childManifest;\n },\n }),\n visitor => recordNodeStackVisitor(visitor, stack),\n );\n}\n\nfunction getArrayLikeSizeOption(\n count: CountNode,\n visitor: Visitor<TypeManifest, TypeNode['kind']>,\n): {\n decoder: Fragment;\n encoder: Fragment;\n} {\n if (isNode(count, 'fixedCountNode')) {\n return {\n decoder: fragment(`size: ${count.value}`),\n encoder: fragment(`size: ${count.value}`),\n };\n }\n if (isNode(count, 'remainderCountNode')) {\n return {\n decoder: fragment(`size: 'remainder'`),\n encoder: fragment(`size: 'remainder'`),\n };\n }\n const prefix = resolveNestedTypeNode(count.prefix);\n if (prefix.format === 'u32' && prefix.endian === 'le') {\n return { decoder: fragment(''), encoder: fragment('') };\n }\n const prefixManifest = visit(count.prefix, visitor);\n prefixManifest.encoder.mapRender(r => `size: ${r}`);\n prefixManifest.decoder.mapRender(r => `size: ${r}`);\n return prefixManifest;\n}\n","import { camelCase, capitalize, kebabCase, pascalCase, snakeCase, titleCase } from '@codama/nodes';\n\nexport type NameTransformerHelpers = {\n camelCase: (name: string) => string;\n capitalize: (name: string) => string;\n kebabCase: (name: string) => string;\n pascalCase: (name: string) => string;\n snakeCase: (name: string) => string;\n titleCase: (name: string) => string;\n};\n\nexport type NameTransformer = (name: string, helpers: NameTransformerHelpers) => string;\n\nexport type NameTransformerKey =\n | 'accountDecodeFunction'\n | 'accountFetchAllFunction'\n | 'accountFetchAllMaybeFunction'\n | 'accountFetchFromSeedsFunction'\n | 'accountFetchFunction'\n | 'accountFetchMaybeFromSeedsFunction'\n | 'accountFetchMaybeFunction'\n | 'accountGetSizeFunction'\n | 'codecFunction'\n | 'constant'\n | 'constantFunction'\n | 'dataArgsType'\n | 'dataType'\n | 'decoderFunction'\n | 'discriminatedUnionDiscriminator'\n | 'discriminatedUnionFunction'\n | 'discriminatedUnionVariant'\n | 'encoderFunction'\n | 'enumVariant'\n | 'instructionAsyncFunction'\n | 'instructionAsyncInputType'\n | 'instructionDataType'\n | 'instructionExtraType'\n | 'instructionParsedType'\n | 'instructionParseFunction'\n | 'instructionSyncFunction'\n | 'instructionSyncInputType'\n | 'instructionType'\n | 'isDiscriminatedUnionFunction'\n | 'pdaFindFunction'\n | 'pdaSeedsType'\n | 'programAccountsEnum'\n | 'programAccountsEnumVariant'\n | 'programAccountsIdentifierFunction'\n | 'programAddressConstant'\n | 'programErrorConstant'\n | 'programErrorConstantPrefix'\n | 'programErrorMessagesMap'\n | 'programErrorUnion'\n | 'programGetErrorMessageFunction'\n | 'programInstructionsEnum'\n | 'programInstructionsEnumVariant'\n | 'programInstructionsIdentifierFunction'\n | 'programInstructionsParsedUnionType'\n | 'programIsErrorFunction'\n | 'resolverFunction';\n\nexport type NameTransformers = Record<NameTransformerKey, NameTransformer>;\n\nexport type NameApi = Record<NameTransformerKey, (name: string) => string>;\n\nexport function getNameApi(transformers: NameTransformers): NameApi {\n const helpers = {\n camelCase,\n capitalize,\n kebabCase,\n pascalCase,\n snakeCase,\n titleCase,\n };\n return Object.fromEntries(\n Object.entries(transformers).map(([key, transformer]) => [key, (name: string) => transformer(name, helpers)]),\n ) as NameApi;\n}\n\nexport const DEFAULT_NAME_TRANSFORMERS: NameTransformers = {\n accountDecodeFunction: name => `decode${pascalCase(name)}`,\n accountFetchAllFunction: name => `fetchAll${pascalCase(name)}`,\n accountFetchAllMaybeFunction: name => `fetchAllMaybe${pascalCase(name)}`,\n accountFetchFromSeedsFunction: name => `fetch${pascalCase(name)}FromSeeds`,\n accountFetchFunction: name => `fetch${pascalCase(name)}`,\n accountFetchMaybeFromSeedsFunction: name => `fetchMaybe${pascalCase(name)}FromSeeds`,\n accountFetchMaybeFunction: name => `fetchMaybe${pascalCase(name)}`,\n accountGetSizeFunction: name => `get${pascalCase(name)}Size`,\n codecFunction: name => `get${pascalCase(name)}Codec`,\n constant: name => snakeCase(name).toUpperCase(),\n constantFunction: name => `get${pascalCase(name)}Bytes`,\n dataArgsType: name => `${pascalCase(name)}Args`,\n dataType: name => `${pascalCase(name)}`,\n decoderFunction: name => `get${pascalCase(name)}Decoder`,\n discriminatedUnionDiscriminator: () => '__kind',\n discriminatedUnionFunction: name => `${camelCase(name)}`,\n discriminatedUnionVariant: name => `${pascalCase(name)}`,\n encoderFunction: name => `get${pascalCase(name)}Encoder`,\n enumVariant: name => `${pascalCase(name)}`,\n instructionAsyncFunction: name => `get${pascalCase(name)}InstructionAsync`,\n instructionAsyncInputType: name => `${pascalCase(name)}AsyncInput`,\n instructionDataType: name => `${pascalCase(name)}InstructionData`,\n instructionExtraType: name => `${pascalCase(name)}InstructionExtra`,\n instructionParseFunction: name => `parse${pascalCase(name)}Instruction`,\n instructionParsedType: name => `Parsed${pascalCase(name)}Instruction`,\n instructionSyncFunction: name => `get${pascalCase(name)}Instruction`,\n instructionSyncInputType: name => `${pascalCase(name)}Input`,\n instructionType: name => `${pascalCase(name)}Instruction`,\n isDiscriminatedUnionFunction: name => `is${pascalCase(name)}`,\n pdaFindFunction: name => `find${pascalCase(name)}Pda`,\n pdaSeedsType: name => `${pascalCase(name)}Seeds`,\n programAccountsEnum: name => `${pascalCase(name)}Account`,\n programAccountsEnumVariant: name => `${pascalCase(name)}`,\n programAccountsIdentifierFunction: name => `identify${pascalCase(name)}Account`,\n programAddressConstant: name => `${snakeCase(name).toUpperCase()}_PROGRAM_ADDRESS`,\n programErrorConstant: name => snakeCase(name).toUpperCase(),\n programErrorConstantPrefix: name => `${snakeCase(name).toUpperCase()}_ERROR__`,\n programErrorMessagesMap: name => `${camelCase(name)}ErrorMessages`,\n programErrorUnion: name => `${pascalCase(name)}Error`,\n programGetErrorMessageFunction: name => `get${pascalCase(name)}ErrorMessage`,\n programInstructionsEnum: name => `${pascalCase(name)}Instruction`,\n programInstructionsEnumVariant: name => `${pascalCase(name)}`,\n programInstructionsIdentifierFunction: name => `identify${pascalCase(name)}Instruction`,\n programInstructionsParsedUnionType: name => `Parsed${pascalCase(name)}Instruction`,\n programIsErrorFunction: name => `is${pascalCase(name)}Error`,\n resolverFunction: name => `${camelCase(name)}`,\n};\n","import { deleteDirectory } from '@codama/renderers-core';\nimport { rootNodeVisitor, visit } from '@codama/visitors-core';\nimport { Plugin } from 'prettier';\nimport * as estreePlugin from 'prettier/plugins/estree';\nimport * as typeScriptPlugin from 'prettier/plugins/typescript';\nimport { format } from 'prettier/standalone';\n\nimport { GetRenderMapOptions, getRenderMapVisitor } from './getRenderMapVisitor';\n\ntype PrettierOptions = Parameters<typeof format>[1];\n\nexport type RenderOptions = GetRenderMapOptions & {\n deleteFolderBeforeRendering?: boolean;\n formatCode?: boolean;\n prettierOptions?: PrettierOptions;\n};\n\nconst DEFAULT_PRETTIER_OPTIONS: PrettierOptions = {\n arrowParens: 'always',\n parser: 'typescript',\n plugins: [estreePlugin as Plugin<unknown>, typeScriptPlugin],\n printWidth: 80,\n semi: true,\n singleQuote: true,\n tabWidth: 2,\n trailingComma: 'es5',\n useTabs: false,\n};\n\nexport function renderVisitor(path: string, options: RenderOptions = {}) {\n return rootNodeVisitor(async root => {\n // Delete existing generated folder.\n if (options.deleteFolderBeforeRendering ?? true) {\n deleteDirectory(path);\n }\n\n // Render the new files.\n const renderMap = visit(root, getRenderMapVisitor(options));\n\n // Format the code.\n if (options.formatCode ?? true) {\n const prettierOptions = { ...DEFAULT_PRETTIER_OPTIONS, ...options.prettierOptions };\n await renderMap.mapContentAsync(code => format(code, prettierOptions));\n }\n\n renderMap.write(path);\n });\n}\n"],"mappings":"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","names":["module","import_visitors_core","import_node_path","import_nodes","import_nodes","nunjucks","render","module","typeManifest","import_nodes","import_visitors_core","typeManifest","import_visitors_core","import_nodes","import_visitors_core","import_nodes","import_nodes","typeManifest","import_nodes","import_visitors_core","import_codecs_strings","import_nodes","import_nodes","import_visitors_core","import_nodes","import_visitors_core","import_nodes","import_visitors_core","import_nodes","import_visitors_core","import_visitors_core","import_nodes","import_visitors_core","import_nodes","import_visitors_core","import_nodes","import_visitors_core","pdaSeeds","typeManifest","valueManifest","programAddress","import_nodes","import_visitors_core","getAccountTypeFragment","import_nodes","import_visitors_core","getRemainingAccountsFragment","getArgumentValueNodeFragment","getResolverValueNodeFragment","import_visitors_core","import_nodes","import_visitors_core","fragment","import_nodes","import_visitors_core","seedManifest","import_nodes","import_nodes","import_nodes","import_node_path","import_errors","import_nodes","import_visitors_core","import_nodes","import_visitors_core","variantName","render","import_nodes","render","import_renderers_core","import_visitors_core"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/ImportMap.ts","../src/utils/async.ts","../src/utils/codecs.ts","../src/utils/customData.ts","../src/utils/fragment.ts","../src/utils/render.ts","../src/utils/linkOverrides.ts","../src/TypeManifest.ts","../src/getRenderMapVisitor.ts","../src/fragments/accountFetchHelpers.ts","../src/fragments/accountPdaHelpers.ts","../src/fragments/accountSizeHelpers.ts","../src/fragments/accountType.ts","../src/fragments/type.ts","../src/fragments/typeCodec.ts","../src/fragments/typeDecoder.ts","../src/fragments/typeEncoder.ts","../src/fragments/typeWithCodec.ts","../src/fragments/discriminatorCondition.ts","../src/fragments/instructionAccountMeta.ts","../src/fragments/instructionAccountTypeParam.ts","../src/fragments/instructionByteDelta.ts","../src/fragments/instructionData.ts","../src/fragments/discriminatorConstants.ts","../src/fragments/instructionExtraArgs.ts","../src/fragments/instructionFunction.ts","../src/fragments/instructionInputResolved.ts","../src/fragments/instructionInputDefault.ts","../src/fragments/instructionInputType.ts","../src/fragments/instructionRemainingAccounts.ts","../src/fragments/instructionParseFunction.ts","../src/fragments/instructionType.ts","../src/fragments/pdaFunction.ts","../src/fragments/program.ts","../src/fragments/programAccounts.ts","../src/fragments/programErrors.ts","../src/fragments/programInstructions.ts","../src/fragments/typeDiscriminatedUnionHelpers.ts","../src/getTypeManifestVisitor.ts","../src/nameTransformers.ts","../src/renderVisitor.ts"],"sourcesContent":["export * from './ImportMap';\nexport * from './TypeManifest';\nexport * from './getRenderMapVisitor';\nexport * from './getTypeManifestVisitor';\nexport * from './nameTransformers';\nexport * from './renderVisitor';\n\nexport { renderVisitor as default } from './renderVisitor';\n","import { TypeManifest } from './TypeManifest';\nimport { Fragment } from './utils';\n\nconst DEFAULT_EXTERNAL_MODULE_MAP: Record<string, string> = {\n solanaAccounts: '@solana/kit',\n solanaAddresses: '@solana/kit',\n solanaCodecsCore: '@solana/kit',\n solanaCodecsDataStructures: '@solana/kit',\n solanaCodecsNumbers: '@solana/kit',\n solanaCodecsStrings: '@solana/kit',\n solanaErrors: '@solana/kit',\n solanaInstructions: '@solana/kit',\n solanaOptions: '@solana/kit',\n solanaPrograms: '@solana/kit',\n solanaRpcTypes: '@solana/kit',\n solanaSigners: '@solana/kit',\n};\n\nconst DEFAULT_GRANULAR_EXTERNAL_MODULE_MAP: Record<string, string> = {\n solanaAccounts: '@solana/accounts',\n solanaAddresses: '@solana/addresses',\n solanaCodecsCore: '@solana/codecs',\n solanaCodecsDataStructures: '@solana/codecs',\n solanaCodecsNumbers: '@solana/codecs',\n solanaCodecsStrings: '@solana/codecs',\n solanaErrors: '@solana/errors',\n solanaInstructions: '@solana/instructions',\n solanaOptions: '@solana/codecs',\n solanaPrograms: '@solana/programs',\n solanaRpcTypes: '@solana/rpc-types',\n solanaSigners: '@solana/signers',\n};\n\nconst DEFAULT_INTERNAL_MODULE_MAP: Record<string, string> = {\n errors: '../errors',\n generated: '..',\n generatedAccounts: '../accounts',\n generatedErrors: '../errors',\n generatedInstructions: '../instructions',\n generatedPdas: '../pdas',\n generatedPrograms: '../programs',\n generatedTypes: '../types',\n hooked: '../../hooked',\n shared: '../shared',\n types: '../types',\n};\n\nexport class ImportMap {\n protected readonly _imports: Map<string, Set<string>> = new Map();\n\n protected readonly _aliases: Map<string, Record<string, string>> = new Map();\n\n add(module: string, imports: Set<string> | string[] | string): ImportMap {\n const newImports = new Set(typeof imports === 'string' ? [imports] : imports);\n if (newImports.size === 0) return this;\n const currentImports = this._imports.get(module) ?? new Set();\n newImports.forEach(i => currentImports.add(i));\n this._imports.set(module, currentImports);\n return this;\n }\n\n remove(module: string, imports: Set<string> | string[] | string): ImportMap {\n const importsToRemove = new Set(typeof imports === 'string' ? [imports] : imports);\n if (importsToRemove.size === 0) return this;\n const currentImports = this._imports.get(module) ?? new Set();\n importsToRemove.forEach(i => currentImports.delete(i));\n if (currentImports.size === 0) {\n this._imports.delete(module);\n } else {\n this._imports.set(module, currentImports);\n }\n return this;\n }\n\n mergeWith(...others: (Fragment | ImportMap)[]): ImportMap {\n others.forEach(rawOther => {\n const other = 'imports' in rawOther ? rawOther.imports : rawOther;\n other._imports.forEach((imports, module) => {\n this.add(module, imports);\n });\n other._aliases.forEach((aliases, module) => {\n Object.entries(aliases).forEach(([name, alias]) => {\n this.addAlias(module, name, alias);\n });\n });\n });\n return this;\n }\n\n mergeWithManifest(manifest: TypeManifest): ImportMap {\n return this.mergeWith(manifest.strictType, manifest.looseType, manifest.encoder, manifest.decoder);\n }\n\n addAlias(module: string, name: string, alias: string): ImportMap {\n const currentAliases = this._aliases.get(module) ?? {};\n currentAliases[name] = alias;\n this._aliases.set(module, currentAliases);\n return this;\n }\n\n isEmpty(): boolean {\n return this._imports.size === 0;\n }\n\n resolve(dependencies: Record<string, string> = {}, useGranularImports = false): Map<string, Set<string>> {\n // Resolve aliases.\n const aliasedMap = new Map<string, Set<string>>(\n [...this._imports.entries()].map(([module, imports]) => {\n const aliasMap = this._aliases.get(module) ?? {};\n const joinedImports = [...imports].map(i => (aliasMap[i] ? `${i} as ${aliasMap[i]}` : i));\n return [module, new Set(joinedImports)];\n }),\n );\n\n // Resolve dependency mappings.\n const dependencyMap = {\n ...(useGranularImports ? DEFAULT_GRANULAR_EXTERNAL_MODULE_MAP : DEFAULT_EXTERNAL_MODULE_MAP),\n ...DEFAULT_INTERNAL_MODULE_MAP,\n ...dependencies,\n };\n const resolvedMap = new Map<string, Set<string>>();\n aliasedMap.forEach((imports, module) => {\n const resolvedModule: string = dependencyMap[module] ?? module;\n const currentImports = resolvedMap.get(resolvedModule) ?? new Set();\n imports.forEach(i => currentImports.add(i));\n resolvedMap.set(resolvedModule, currentImports);\n });\n\n return resolvedMap;\n }\n\n toString(dependencies: Record<string, string> = {}, useGranularImports = false): string {\n return [...this.resolve(dependencies, useGranularImports).entries()]\n .sort(([a], [b]) => {\n const aIsRelative = a.startsWith('.');\n const bIsRelative = b.startsWith('.');\n if (aIsRelative && !bIsRelative) return 1;\n if (!aIsRelative && bIsRelative) return -1;\n return a.localeCompare(b);\n })\n .map(([module, imports]) => {\n const joinedImports = [...imports]\n .sort()\n .filter(i => {\n // import of a type can either be '<Type>' or 'type <Type>', so\n // we filter out 'type <Type>' variation if there is a '<Type>'\n const name = i.split(' ');\n if (name.length > 1) {\n return !imports.has(name[1]);\n }\n return true;\n })\n .join(', ');\n return `import { ${joinedImports} } from '${module}';`;\n })\n .join('\\n');\n }\n}\n","import {\n AccountValueNode,\n accountValueNode,\n ArgumentValueNode,\n argumentValueNode,\n CamelCaseString,\n InstructionAccountNode,\n InstructionArgumentNode,\n InstructionInputValueNode,\n InstructionNode,\n isNode,\n} from '@codama/nodes';\nimport { deduplicateInstructionDependencies, ResolvedInstructionInput } from '@codama/visitors-core';\n\nexport function hasAsyncFunction(\n instructionNode: InstructionNode,\n resolvedInputs: ResolvedInstructionInput[],\n asyncResolvers: string[],\n): boolean {\n const hasByteDeltasAsync = (instructionNode.byteDeltas ?? []).some(\n ({ value }) => isNode(value, 'resolverValueNode') && asyncResolvers.includes(value.name),\n );\n const hasRemainingAccountsAsync = (instructionNode.remainingAccounts ?? []).some(\n ({ value }) => isNode(value, 'resolverValueNode') && asyncResolvers.includes(value.name),\n );\n\n return hasAsyncDefaultValues(resolvedInputs, asyncResolvers) || hasByteDeltasAsync || hasRemainingAccountsAsync;\n}\n\nexport function hasAsyncDefaultValues(resolvedInputs: ResolvedInstructionInput[], asyncResolvers: string[]): boolean {\n return resolvedInputs.some(\n input => !!input.defaultValue && isAsyncDefaultValue(input.defaultValue, asyncResolvers),\n );\n}\n\nexport function isAsyncDefaultValue(defaultValue: InstructionInputValueNode, asyncResolvers: string[]): boolean {\n switch (defaultValue.kind) {\n case 'pdaValueNode':\n return true;\n case 'resolverValueNode':\n return asyncResolvers.includes(defaultValue.name);\n case 'conditionalValueNode':\n return (\n isAsyncDefaultValue(defaultValue.condition, asyncResolvers) ||\n (defaultValue.ifFalse == null ? false : isAsyncDefaultValue(defaultValue.ifFalse, asyncResolvers)) ||\n (defaultValue.ifTrue == null ? false : isAsyncDefaultValue(defaultValue.ifTrue, asyncResolvers))\n );\n default:\n return false;\n }\n}\n\nexport function getInstructionDependencies(\n input: InstructionAccountNode | InstructionArgumentNode | InstructionNode,\n asyncResolvers: string[],\n useAsync: boolean,\n): (AccountValueNode | ArgumentValueNode)[] {\n if (isNode(input, 'instructionNode')) {\n return deduplicateInstructionDependencies([\n ...input.accounts.flatMap(x => getInstructionDependencies(x, asyncResolvers, useAsync)),\n ...input.arguments.flatMap(x => getInstructionDependencies(x, asyncResolvers, useAsync)),\n ...(input.extraArguments ?? []).flatMap(x => getInstructionDependencies(x, asyncResolvers, useAsync)),\n ]);\n }\n\n if (!input.defaultValue) return [];\n\n const getNestedDependencies = (\n defaultValue: InstructionInputValueNode | undefined,\n ): (AccountValueNode | ArgumentValueNode)[] => {\n if (!defaultValue) return [];\n return getInstructionDependencies({ ...input, defaultValue }, asyncResolvers, useAsync);\n };\n\n if (isNode(input.defaultValue, ['accountValueNode', 'accountBumpValueNode'])) {\n return [accountValueNode(input.defaultValue.name)];\n }\n\n if (isNode(input.defaultValue, ['argumentValueNode'])) {\n return [argumentValueNode(input.defaultValue.name)];\n }\n\n if (isNode(input.defaultValue, 'pdaValueNode')) {\n const dependencies = new Map<CamelCaseString, AccountValueNode | ArgumentValueNode>();\n input.defaultValue.seeds.forEach(seed => {\n if (isNode(seed.value, ['accountValueNode', 'argumentValueNode'])) {\n dependencies.set(seed.value.name, { ...seed.value });\n }\n });\n return [...dependencies.values()];\n }\n\n if (isNode(input.defaultValue, 'resolverValueNode')) {\n const isSynchronousResolver = !asyncResolvers.includes(input.defaultValue.name);\n if (useAsync || isSynchronousResolver) {\n return input.defaultValue.dependsOn ?? [];\n }\n }\n\n if (isNode(input.defaultValue, 'conditionalValueNode')) {\n return deduplicateInstructionDependencies([\n ...getNestedDependencies(input.defaultValue.condition),\n ...getNestedDependencies(input.defaultValue.ifTrue),\n ...getNestedDependencies(input.defaultValue.ifFalse),\n ]);\n }\n\n return [];\n}\n","import { 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 AccountNode,\n camelCase,\n CamelCaseString,\n DefinedTypeLinkNode,\n definedTypeLinkNode,\n DefinedTypeNode,\n definedTypeNode,\n InstructionNode,\n isNode,\n structTypeNodeFromInstructionArgumentNodes,\n} from '@codama/nodes';\n\nexport type CustomDataOptions =\n | string\n | {\n extract?: boolean;\n extractAs?: string;\n importAs?: string;\n importFrom?: string;\n name: string;\n };\n\nexport type ParsedCustomDataOptions = Map<\n CamelCaseString,\n {\n extract: boolean;\n extractAs: CamelCaseString;\n importAs: CamelCaseString;\n importFrom: string;\n linkNode: DefinedTypeLinkNode;\n }\n>;\n\nexport const parseCustomDataOptions = (\n customDataOptions: CustomDataOptions[],\n defaultSuffix: string,\n): ParsedCustomDataOptions =>\n new Map(\n customDataOptions.map(o => {\n const options = typeof o === 'string' ? { name: o } : o;\n const importAs = camelCase(options.importAs ?? `${options.name}${defaultSuffix}`);\n const importFrom = options.importFrom ?? 'hooked';\n return [\n camelCase(options.name),\n {\n extract: options.extract ?? false,\n extractAs: options.extractAs ? camelCase(options.extractAs) : importAs,\n importAs,\n importFrom,\n linkNode: definedTypeLinkNode(importAs),\n },\n ];\n }),\n );\n\nexport const getDefinedTypeNodesToExtract = (\n nodes: AccountNode[] | InstructionNode[],\n parsedCustomDataOptions: ParsedCustomDataOptions,\n): DefinedTypeNode[] =>\n nodes.flatMap(node => {\n const options = parsedCustomDataOptions.get(node.name);\n if (!options || !options.extract) return [];\n\n if (isNode(node, 'accountNode')) {\n return [definedTypeNode({ name: options.extractAs, type: { ...node.data } })];\n }\n\n return [\n definedTypeNode({\n name: options.extractAs,\n type: structTypeNodeFromInstructionArgumentNodes(node.arguments),\n }),\n ];\n });\n","import { BaseFragment, joinPath, Path } from '@codama/renderers-core';\nimport { ConfigureOptions } from 'nunjucks';\n\nimport { ImportMap } from '../ImportMap';\nimport { render } from './render';\n\nexport type FragmentFeature = 'instruction:resolverScopeVariable';\n\nexport type Fragment = BaseFragment &\n Readonly<{\n features: ReadonlySet<FragmentFeature>;\n imports: ImportMap;\n }>;\n\nexport function fragment(content: string): Fragment {\n return Object.freeze({\n content,\n features: new Set<FragmentFeature>(),\n imports: new ImportMap(),\n });\n}\n\nexport function fragmentFromTemplate(fragmentFile: Path, context?: object, options?: ConfigureOptions): Fragment {\n return fragment(render(joinPath('fragments', fragmentFile), context, options));\n}\n\nexport function mergeFragments(fragments: Fragment[], mergeContent: (contents: string[]) => string) {\n return Object.freeze({\n content: mergeContent(fragments.map(fragment => fragment.content)),\n features: new Set(fragments.flatMap(f => [...f.features])),\n imports: new ImportMap().mergeWith(...fragments.map(f => f.imports)),\n });\n}\n\nexport function mergeFragmentImports(fragment: Fragment, importMaps: ImportMap[]): Fragment {\n return Object.freeze({\n ...fragment,\n imports: new ImportMap().mergeWith(fragment.imports, ...importMaps),\n });\n}\n\nexport function addFragmentImports(fragment: Fragment, module: string, imports: string[]): Fragment {\n return Object.freeze({\n ...fragment,\n imports: new ImportMap().mergeWith(fragment.imports).add(module, imports),\n });\n}\n\nexport function addFragmentImportAlias(fragment: Fragment, module: string, name: string, alias: string): Fragment {\n return Object.freeze({\n ...fragment,\n imports: new ImportMap().mergeWith(fragment.imports).addAlias(module, name, alias),\n });\n}\n\nexport function addFragmentFeatures(fragment: Fragment, features: FragmentFeature[]): Fragment {\n return Object.freeze({\n ...fragment,\n features: new Set([...fragment.features, ...features]),\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 jsDocblock(docs: string[]): string {\n if (docs.length <= 0) return '';\n if (docs.length === 1) return `/** ${docs[0]} */\\n`;\n const lines = docs.map(doc => ` * ${doc}`);\n return `/**\\n${lines.join('\\n')}\\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('jsDocblock', jsDocblock);\n return env.render(template, context);\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\nimport { ParsedCustomDataOptions } from './customData';\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(\n overrides: LinkOverrides,\n customAccountData: ParsedCustomDataOptions,\n customInstructionData: ParsedCustomDataOptions,\n): GetImportFromFunction {\n const customDataOverrides = Object.fromEntries(\n [...customAccountData.values(), ...customInstructionData.values()].map(({ importFrom, importAs }) => [\n importAs,\n importFrom,\n ]),\n );\n const linkOverrides = {\n accounts: overrides.accounts ?? {},\n definedTypes: { ...customDataOverrides, ...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] ?? 'generatedPdas';\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 { Fragment, fragment, mergeFragments } from './utils';\n\nexport type TypeManifest = Readonly<{\n decoder: Fragment;\n encoder: Fragment;\n isEnum: boolean;\n looseType: Fragment;\n strictType: Fragment;\n value: Fragment;\n}>;\n\nexport function typeManifest(input: Partial<TypeManifest> = {}): TypeManifest {\n return Object.freeze({\n decoder: fragment(''),\n encoder: fragment(''),\n isEnum: false,\n looseType: fragment(''),\n strictType: fragment(''),\n value: fragment(''),\n ...input,\n });\n}\n\nexport function mergeTypeManifests(\n manifests: TypeManifest[],\n options: {\n mergeCodecs?: (renders: string[]) => string;\n mergeTypes?: (renders: string[]) => string;\n mergeValues?: (renders: string[]) => string;\n } = {},\n): TypeManifest {\n const { mergeTypes, mergeCodecs, mergeValues } = options;\n const merge = (fragmentFn: (m: TypeManifest) => Fragment, mergeFn?: (r: string[]) => string) =>\n mergeFn ? mergeFragments(manifests.map(fragmentFn), mergeFn) : fragment('');\n return Object.freeze({\n decoder: merge(m => m.decoder, mergeCodecs),\n encoder: merge(m => m.encoder, mergeCodecs),\n isEnum: false,\n looseType: merge(m => m.looseType, mergeTypes),\n strictType: merge(m => m.strictType, mergeTypes),\n value: merge(m => m.value, mergeValues),\n });\n}\n","import { join } from 'node:path';\n\nimport { logWarn } from '@codama/errors';\nimport {\n camelCase,\n CamelCaseString,\n definedTypeNode,\n getAllAccounts,\n getAllDefinedTypes,\n getAllInstructionsWithSubs,\n getAllPdas,\n getAllPrograms,\n InstructionNode,\n resolveNestedTypeNode,\n structTypeNodeFromInstructionArgumentNodes,\n} from '@codama/nodes';\nimport { addToRenderMap, mergeRenderMaps, renderMap } from '@codama/renderers-core';\nimport {\n extendVisitor,\n findProgramNodeFromPath,\n getByteSizeVisitor,\n getResolvedInstructionInputsVisitor,\n LinkableDictionary,\n NodeStack,\n pipe,\n recordLinkablesOnFirstVisitVisitor,\n recordNodeStackVisitor,\n staticVisitor,\n visit,\n} from '@codama/visitors-core';\nimport type { ConfigureOptions } from 'nunjucks';\n\nimport {\n getAccountFetchHelpersFragment,\n getAccountPdaHelpersFragment,\n getAccountSizeHelpersFragment,\n getAccountTypeFragment,\n getDiscriminatorConstantsFragment,\n getInstructionDataFragment,\n getInstructionExtraArgsFragment,\n getInstructionFunctionFragment,\n getInstructionParseFunctionFragment,\n getInstructionTypeFragment,\n getPdaFunctionFragment,\n getProgramAccountsFragment,\n getProgramErrorsFragment,\n getProgramFragment,\n getProgramInstructionsFragment,\n getTypeDiscriminatedUnionHelpersFragment,\n getTypeWithCodecFragment,\n} from './fragments';\nimport { getTypeManifestVisitor, TypeManifestVisitor } from './getTypeManifestVisitor';\nimport { ImportMap } from './ImportMap';\nimport { DEFAULT_NAME_TRANSFORMERS, getNameApi, NameApi, NameTransformers } from './nameTransformers';\nimport {\n CustomDataOptions,\n getDefinedTypeNodesToExtract,\n getImportFromFactory,\n GetImportFromFunction,\n LinkOverrides,\n parseCustomDataOptions,\n ParsedCustomDataOptions,\n render as baseRender,\n} from './utils';\n\nexport type GetRenderMapOptions = {\n asyncResolvers?: string[];\n customAccountData?: CustomDataOptions[];\n customInstructionData?: CustomDataOptions[];\n dependencyMap?: Record<string, string>;\n internalNodes?: string[];\n linkOverrides?: LinkOverrides;\n nameTransformers?: Partial<NameTransformers>;\n nonScalarEnums?: string[];\n renderParentInstructions?: boolean;\n useGranularImports?: boolean;\n};\n\nexport type GlobalFragmentScope = {\n asyncResolvers: CamelCaseString[];\n customAccountData: ParsedCustomDataOptions;\n customInstructionData: ParsedCustomDataOptions;\n getImportFrom: GetImportFromFunction;\n linkables: LinkableDictionary;\n nameApi: NameApi;\n nonScalarEnums: CamelCaseString[];\n renderParentInstructions: boolean;\n typeManifestVisitor: TypeManifestVisitor;\n};\n\nexport function getRenderMapVisitor(options: GetRenderMapOptions = {}) {\n const linkables = new LinkableDictionary();\n const stack = new NodeStack();\n\n const nameTransformers = {\n ...DEFAULT_NAME_TRANSFORMERS,\n ...options.nameTransformers,\n };\n const nameApi = getNameApi(nameTransformers);\n const renderParentInstructions = options.renderParentInstructions ?? false;\n const dependencyMap = options.dependencyMap ?? {};\n const useGranularImports = options.useGranularImports ?? false;\n const asyncResolvers = (options.asyncResolvers ?? []).map(camelCase);\n const nonScalarEnums = (options.nonScalarEnums ?? []).map(camelCase);\n const internalNodes = (options.internalNodes ?? []).map(camelCase);\n const customAccountData = parseCustomDataOptions(options.customAccountData ?? [], 'AccountData');\n const customInstructionData = parseCustomDataOptions(options.customInstructionData ?? [], 'InstructionData');\n const getImportFrom = getImportFromFactory(options.linkOverrides ?? {}, customAccountData, customInstructionData);\n\n const typeManifestVisitor = getTypeManifestVisitor({\n customAccountData,\n customInstructionData,\n getImportFrom,\n linkables,\n nameApi,\n nonScalarEnums,\n stack,\n });\n const resolvedInstructionInputVisitor = getResolvedInstructionInputsVisitor();\n const byteSizeVisitor = getByteSizeVisitor(linkables, { stack });\n\n const globalScope: GlobalFragmentScope = {\n asyncResolvers,\n customAccountData,\n customInstructionData,\n getImportFrom,\n linkables,\n nameApi,\n nonScalarEnums,\n renderParentInstructions,\n typeManifestVisitor,\n };\n\n const render = (template: string, context?: object, renderOptions?: ConfigureOptions): string => {\n return baseRender(join('pages', template), context, renderOptions);\n };\n\n return pipe(\n staticVisitor(() => renderMap(), {\n keys: ['rootNode', 'programNode', 'pdaNode', 'accountNode', 'definedTypeNode', 'instructionNode'],\n }),\n v =>\n extendVisitor(v, {\n visitAccount(node) {\n const accountPath = stack.getPath('accountNode');\n if (!findProgramNodeFromPath(accountPath)) {\n throw new Error('Account must be visited inside a program.');\n }\n\n const scope = {\n ...globalScope,\n accountPath,\n size: visit(node, byteSizeVisitor),\n typeManifest: visit(node, typeManifestVisitor),\n };\n\n const fields = resolveNestedTypeNode(node.data).fields;\n const accountDiscriminatorConstantsFragment = getDiscriminatorConstantsFragment({\n ...scope,\n discriminatorNodes: node.discriminators ?? [],\n fields,\n prefix: node.name,\n });\n const accountTypeFragment = getAccountTypeFragment(scope);\n const accountFetchHelpersFragment = getAccountFetchHelpersFragment(scope);\n const accountSizeHelpersFragment = getAccountSizeHelpersFragment(scope);\n const accountPdaHelpersFragment = getAccountPdaHelpersFragment(scope);\n const imports = new ImportMap().mergeWith(\n accountDiscriminatorConstantsFragment,\n accountTypeFragment,\n accountFetchHelpersFragment,\n accountSizeHelpersFragment,\n accountPdaHelpersFragment,\n );\n\n return addToRenderMap(\n renderMap(),\n `accounts/${camelCase(node.name)}.ts`,\n render('accountsPage.njk', {\n accountDiscriminatorConstantsFragment: accountDiscriminatorConstantsFragment.content,\n accountFetchHelpersFragment: accountFetchHelpersFragment.content,\n accountPdaHelpersFragment: accountPdaHelpersFragment.content,\n accountSizeHelpersFragment: accountSizeHelpersFragment.content,\n accountTypeFragment: accountTypeFragment.content,\n imports: imports.toString(dependencyMap, useGranularImports),\n }),\n );\n },\n\n visitDefinedType(node) {\n const scope = {\n ...globalScope,\n codecDocs: [],\n decoderDocs: [],\n encoderDocs: [],\n manifest: visit(node, typeManifestVisitor),\n name: node.name,\n node: node.type,\n size: visit(node, byteSizeVisitor),\n typeDocs: node.docs,\n typeNode: node.type,\n };\n\n const typeWithCodecFragment = getTypeWithCodecFragment(scope);\n const typeDiscriminatedUnionHelpersFragment = getTypeDiscriminatedUnionHelpersFragment(scope);\n const imports = new ImportMap()\n .mergeWith(typeWithCodecFragment, typeDiscriminatedUnionHelpersFragment)\n .remove('generatedTypes', [\n nameApi.dataType(node.name),\n nameApi.dataArgsType(node.name),\n nameApi.encoderFunction(node.name),\n nameApi.decoderFunction(node.name),\n nameApi.codecFunction(node.name),\n ]);\n\n return addToRenderMap(\n renderMap(),\n `types/${camelCase(node.name)}.ts`,\n render('definedTypesPage.njk', {\n imports: imports.toString({ ...dependencyMap, generatedTypes: '.' }),\n typeDiscriminatedUnionHelpersFragment: typeDiscriminatedUnionHelpersFragment.content,\n typeWithCodecFragment: typeWithCodecFragment.content,\n }),\n );\n },\n\n visitInstruction(node) {\n const instructionPath = stack.getPath('instructionNode');\n if (!findProgramNodeFromPath(instructionPath)) {\n throw new Error('Instruction must be visited inside a program.');\n }\n\n const instructionExtraName = nameApi.instructionExtraType(node.name);\n const scope = {\n ...globalScope,\n dataArgsManifest: visit(node, typeManifestVisitor),\n extraArgsManifest: visit(\n definedTypeNode({\n name: instructionExtraName,\n type: structTypeNodeFromInstructionArgumentNodes(node.extraArguments ?? []),\n }),\n typeManifestVisitor,\n ),\n instructionPath,\n renamedArgs: getRenamedArgsMap(node),\n resolvedInputs: visit(node, resolvedInstructionInputVisitor),\n size: visit(node, byteSizeVisitor),\n };\n\n // Fragments.\n const instructionDiscriminatorConstantsFragment = getDiscriminatorConstantsFragment({\n ...scope,\n discriminatorNodes: node.discriminators ?? [],\n fields: node.arguments,\n prefix: node.name,\n });\n const instructionTypeFragment = getInstructionTypeFragment(scope);\n const instructionDataFragment = getInstructionDataFragment(scope);\n const instructionExtraArgsFragment = getInstructionExtraArgsFragment(scope);\n const instructionFunctionAsyncFragment = getInstructionFunctionFragment({\n ...scope,\n useAsync: true,\n });\n const instructionFunctionSyncFragment = getInstructionFunctionFragment({\n ...scope,\n useAsync: false,\n });\n const instructionParseFunctionFragment = getInstructionParseFunctionFragment(scope);\n\n // Imports and interfaces.\n const imports = new ImportMap().mergeWith(\n instructionDiscriminatorConstantsFragment,\n instructionTypeFragment,\n instructionDataFragment,\n instructionExtraArgsFragment,\n instructionFunctionAsyncFragment,\n instructionFunctionSyncFragment,\n instructionParseFunctionFragment,\n );\n\n return addToRenderMap(\n renderMap(),\n `instructions/${camelCase(node.name)}.ts`,\n render('instructionsPage.njk', {\n imports: imports.toString(dependencyMap, useGranularImports),\n instruction: node,\n instructionDataFragment: instructionDataFragment.content,\n instructionDiscriminatorConstantsFragment:\n instructionDiscriminatorConstantsFragment.content,\n instructionExtraArgsFragment: instructionExtraArgsFragment.content,\n instructionFunctionAsyncFragment: instructionFunctionAsyncFragment.content,\n instructionFunctionSyncFragment: instructionFunctionSyncFragment.content,\n instructionParseFunctionFragment: instructionParseFunctionFragment.content,\n instructionTypeFragment: instructionTypeFragment.content,\n }),\n );\n },\n\n visitPda(node) {\n const pdaPath = stack.getPath('pdaNode');\n if (!findProgramNodeFromPath(pdaPath)) {\n throw new Error('PDA must be visited inside a program.');\n }\n\n const scope = { ...globalScope, pdaPath };\n const pdaFunctionFragment = getPdaFunctionFragment(scope);\n const imports = new ImportMap().mergeWith(pdaFunctionFragment);\n\n return addToRenderMap(\n renderMap(),\n `pdas/${camelCase(node.name)}.ts`,\n render('pdasPage.njk', {\n imports: imports.toString(dependencyMap, useGranularImports),\n pdaFunctionFragment: pdaFunctionFragment.content,\n }),\n );\n },\n\n visitProgram(node, { self }) {\n const customDataDefinedType = [\n ...getDefinedTypeNodesToExtract(node.accounts, customAccountData),\n ...getDefinedTypeNodesToExtract(node.instructions, customInstructionData),\n ];\n const scope = { ...globalScope, programNode: node };\n let renders = mergeRenderMaps([\n ...node.pdas.map(p => visit(p, self)),\n ...node.accounts.map(a => visit(a, self)),\n ...node.definedTypes.map(t => visit(t, self)),\n ...customDataDefinedType.map(t => visit(t, self)),\n ]);\n\n if (node.errors.length > 0) {\n const programErrorsFragment = getProgramErrorsFragment(scope);\n renders = addToRenderMap(\n renders,\n `errors/${camelCase(node.name)}.ts`,\n render('errorsPage.njk', {\n imports: new ImportMap()\n .mergeWith(programErrorsFragment)\n .toString(dependencyMap, useGranularImports),\n programErrorsFragment: programErrorsFragment.content,\n }),\n );\n }\n\n const programFragment = getProgramFragment(scope);\n const programAccountsFragment = getProgramAccountsFragment(scope);\n const programInstructionsFragment = getProgramInstructionsFragment(scope);\n renders = addToRenderMap(\n renders,\n `programs/${camelCase(node.name)}.ts`,\n render('programsPage.njk', {\n imports: new ImportMap()\n .mergeWith(programFragment, programAccountsFragment, programInstructionsFragment)\n .toString(dependencyMap, useGranularImports),\n programAccountsFragment: programAccountsFragment.content,\n programFragment: programFragment.content,\n programInstructionsFragment: programInstructionsFragment.content,\n }),\n );\n\n return mergeRenderMaps([\n renders,\n ...getAllInstructionsWithSubs(node, {\n leavesOnly: !renderParentInstructions,\n }).map(ix => visit(ix, self)),\n ]);\n },\n\n visitRoot(node, { self }) {\n const isNotInternal = (n: { name: CamelCaseString }) => !internalNodes.includes(n.name);\n const programsToExport = getAllPrograms(node).filter(isNotInternal);\n const programsWithErrorsToExport = programsToExport.filter(p => p.errors.length > 0);\n const pdasToExport = getAllPdas(node);\n const accountsToExport = getAllAccounts(node).filter(isNotInternal);\n const instructionsToExport = getAllInstructionsWithSubs(node, {\n leavesOnly: !renderParentInstructions,\n }).filter(isNotInternal);\n const definedTypesToExport = getAllDefinedTypes(node).filter(isNotInternal);\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 pdasToExport,\n programsToExport,\n programsWithErrorsToExport,\n root: node,\n };\n\n let renders = renderMap();\n if (hasAnythingToExport) {\n renders = addToRenderMap(\n renders,\n 'shared/index.ts',\n render('sharedPage.njk', {\n ...ctx,\n imports: new ImportMap()\n .add('solanaAddresses', [\n 'type Address',\n 'isProgramDerivedAddress',\n 'type ProgramDerivedAddress',\n ])\n .add('solanaInstructions', [\n 'AccountRole',\n 'type AccountMeta',\n 'upgradeRoleToSigner',\n ])\n .add('solanaSigners', [\n 'type AccountSignerMeta',\n 'isTransactionSigner',\n 'type TransactionSigner',\n ])\n .addAlias('solanaSigners', 'isTransactionSigner', 'kitIsTransactionSigner')\n .toString(dependencyMap, useGranularImports),\n }),\n );\n }\n if (programsToExport.length > 0) {\n renders = addToRenderMap(renders, 'programs/index.ts', render('programsIndex.njk', ctx));\n }\n if (programsWithErrorsToExport.length > 0) {\n renders = addToRenderMap(renders, 'errors/index.ts', render('errorsIndex.njk', ctx));\n }\n if (accountsToExport.length > 0) {\n renders = addToRenderMap(renders, 'accounts/index.ts', render('accountsIndex.njk', ctx));\n }\n if (pdasToExport.length > 0) {\n renders = addToRenderMap(renders, 'pdas/index.ts', render('pdasIndex.njk', ctx));\n }\n if (instructionsToExport.length > 0) {\n renders = addToRenderMap(\n renders,\n 'instructions/index.ts',\n render('instructionsIndex.njk', ctx),\n );\n }\n if (definedTypesToExport.length > 0) {\n renders = addToRenderMap(renders, 'types/index.ts', render('definedTypesIndex.njk', ctx));\n }\n\n return pipe(\n renders,\n r => addToRenderMap(r, 'index.ts', render('rootIndex.njk', ctx)),\n r => mergeRenderMaps([r, ...getAllPrograms(node).map(p => visit(p, self))]),\n );\n },\n }),\n v => recordNodeStackVisitor(v, stack),\n v => recordLinkablesOnFirstVisitVisitor(v, linkables),\n );\n}\n\nfunction getRenamedArgsMap(instruction: InstructionNode): Map<string, string> {\n const argNames = [\n ...instruction.arguments.map(a => a.name),\n ...(instruction.extraArguments ?? []).map(a => a.name),\n ];\n const duplicateArgs = argNames.filter((e, i, a) => a.indexOf(e) !== i);\n if (duplicateArgs.length > 0) {\n throw new Error(`Duplicate args found: [${duplicateArgs.join(', ')}] in instruction [${instruction.name}].`);\n }\n\n const allNames = [...instruction.accounts.map(account => account.name), ...argNames];\n const duplicates = allNames.filter((e, i, a) => a.indexOf(e) !== i);\n if (duplicates.length === 0) return new Map();\n\n logWarn(\n `[JavaScript] Accounts and args of instruction [${instruction.name}] have the following ` +\n `conflicting attributes [${duplicates.join(', ')}]. ` +\n `Thus, the arguments have been renamed to avoid conflicts in the input type.`,\n );\n\n return new Map(duplicates.map(name => [camelCase(name), camelCase(`${name}Arg`)]));\n}\n","import { AccountNode } from '@codama/nodes';\nimport { getLastNodeFromPath, NodePath, pipe } from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { TypeManifest } from '../TypeManifest';\nimport { addFragmentImports, Fragment, fragment, fragmentFromTemplate, mergeFragmentImports } from '../utils';\n\nexport function getAccountFetchHelpersFragment(\n scope: Pick<GlobalFragmentScope, 'customAccountData' | 'nameApi'> & {\n accountPath: NodePath<AccountNode>;\n typeManifest: TypeManifest;\n },\n): Fragment {\n const { accountPath, typeManifest, nameApi, customAccountData } = scope;\n const accountNode = getLastNodeFromPath(accountPath);\n const hasCustomData = customAccountData.has(accountNode.name);\n const accountTypeFragment = hasCustomData ? typeManifest.strictType : fragment(nameApi.dataType(accountNode.name));\n const decoderFunctionFragment = hasCustomData\n ? typeManifest.decoder\n : fragment(`${nameApi.decoderFunction(accountNode.name)}()`);\n\n return pipe(\n fragmentFromTemplate('accountFetchHelpers.njk', {\n accountType: accountTypeFragment.content,\n decodeFunction: nameApi.accountDecodeFunction(accountNode.name),\n decoderFunction: decoderFunctionFragment.content,\n fetchAllFunction: nameApi.accountFetchAllFunction(accountNode.name),\n fetchAllMaybeFunction: nameApi.accountFetchAllMaybeFunction(accountNode.name),\n fetchFunction: nameApi.accountFetchFunction(accountNode.name),\n fetchMaybeFunction: nameApi.accountFetchMaybeFunction(accountNode.name),\n }),\n f => mergeFragmentImports(f, [accountTypeFragment.imports, decoderFunctionFragment.imports]),\n f => addFragmentImports(f, 'solanaAddresses', ['type Address']),\n f =>\n addFragmentImports(f, 'solanaAccounts', [\n 'type Account',\n 'assertAccountExists',\n 'assertAccountsExist',\n 'decodeAccount',\n 'type EncodedAccount',\n 'fetchEncodedAccount',\n 'fetchEncodedAccounts',\n 'type FetchAccountConfig',\n 'type FetchAccountsConfig',\n 'type MaybeAccount',\n 'type MaybeEncodedAccount',\n ]),\n );\n}\n","import { AccountNode, isNodeFilter } from '@codama/nodes';\nimport { findProgramNodeFromPath, getLastNodeFromPath, NodePath, pipe } from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport type { TypeManifest } from '../TypeManifest';\nimport { addFragmentImports, Fragment, fragment, fragmentFromTemplate, mergeFragmentImports } from '../utils';\n\nexport function getAccountPdaHelpersFragment(\n scope: Pick<GlobalFragmentScope, 'customAccountData' | 'linkables' | 'nameApi'> & {\n accountPath: NodePath<AccountNode>;\n typeManifest: TypeManifest;\n },\n): Fragment {\n const { accountPath, nameApi, linkables, customAccountData, typeManifest } = scope;\n const accountNode = getLastNodeFromPath(accountPath);\n const programNode = findProgramNodeFromPath(accountPath)!;\n const pdaNode = accountNode.pda ? linkables.get([...accountPath, accountNode.pda]) : undefined;\n if (!pdaNode) {\n return fragment('');\n }\n\n const accountTypeFragment = customAccountData.has(accountNode.name)\n ? typeManifest.strictType\n : fragment(nameApi.dataType(accountNode.name));\n\n // Here we cannot use the `getImportFrom` function because\n // we need to know the seeds of the PDA in order to know\n // if we need to render a `seeds` argument or not.\n const importFrom = 'generatedPdas';\n const pdaSeedsType = nameApi.pdaSeedsType(pdaNode.name);\n const findPdaFunction = nameApi.pdaFindFunction(pdaNode.name);\n const hasVariableSeeds = pdaNode.seeds.filter(isNodeFilter('variablePdaSeedNode')).length > 0;\n\n return pipe(\n fragmentFromTemplate('accountPdaHelpers.njk', {\n accountType: accountTypeFragment.content,\n fetchFromSeedsFunction: nameApi.accountFetchFromSeedsFunction(accountNode.name),\n fetchFunction: nameApi.accountFetchFunction(accountNode.name),\n fetchMaybeFromSeedsFunction: nameApi.accountFetchMaybeFromSeedsFunction(accountNode.name),\n fetchMaybeFunction: nameApi.accountFetchMaybeFunction(accountNode.name),\n findPdaFunction,\n hasVariableSeeds,\n pdaSeedsType,\n program: programNode,\n }),\n f => mergeFragmentImports(f, [accountTypeFragment.imports]),\n f => addFragmentImports(f, importFrom, hasVariableSeeds ? [pdaSeedsType, findPdaFunction] : [findPdaFunction]),\n f => addFragmentImports(f, 'solanaAddresses', ['type Address']),\n f =>\n addFragmentImports(f, 'solanaAccounts', [\n 'type Account',\n 'assertAccountExists',\n 'type FetchAccountConfig',\n 'type MaybeAccount',\n ]),\n );\n}\n","import { AccountNode } from '@codama/nodes';\nimport { getLastNodeFromPath, NodePath } from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { Fragment, fragment, fragmentFromTemplate } from '../utils';\n\nexport function getAccountSizeHelpersFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi'> & { accountPath: NodePath<AccountNode> },\n): Fragment {\n const { accountPath, nameApi } = scope;\n const accountNode = getLastNodeFromPath(accountPath);\n if (accountNode.size == null) {\n return fragment('');\n }\n\n return fragmentFromTemplate('accountSizeHelpers.njk', {\n account: accountNode,\n getSizeFunction: nameApi.accountGetSizeFunction(accountNode.name),\n });\n}\n","import { AccountNode, resolveNestedTypeNode } from '@codama/nodes';\nimport { getLastNodeFromPath, NodePath } from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { TypeManifest } from '../TypeManifest';\nimport { Fragment, fragment } from '../utils';\nimport { getTypeWithCodecFragment } from './typeWithCodec';\n\nexport function getAccountTypeFragment(\n scope: Pick<GlobalFragmentScope, 'customAccountData' | 'nameApi'> & {\n accountPath: NodePath<AccountNode>;\n size: number | null;\n typeManifest: TypeManifest;\n },\n): Fragment {\n const { accountPath, typeManifest, nameApi, customAccountData } = scope;\n const accountNode = getLastNodeFromPath(accountPath);\n\n if (customAccountData.has(accountNode.name)) {\n return fragment('');\n }\n\n return getTypeWithCodecFragment({\n manifest: typeManifest,\n name: accountNode.name,\n nameApi,\n node: resolveNestedTypeNode(accountNode.data),\n size: scope.size,\n });\n}\n","import { pipe } from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { TypeManifest } from '../TypeManifest';\nimport { Fragment, fragmentFromTemplate, mergeFragmentImports } from '../utils';\n\nexport function getTypeFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi'> & {\n docs?: string[];\n manifest: TypeManifest;\n name: string;\n },\n): Fragment {\n const { name, manifest, nameApi, docs = [] } = scope;\n return pipe(\n fragmentFromTemplate('type.njk', {\n docs,\n looseName: nameApi.dataArgsType(name),\n manifest,\n strictName: nameApi.dataType(name),\n }),\n f =>\n !manifest.isEnum ? mergeFragmentImports(f, [manifest.strictType.imports, manifest.looseType.imports]) : f,\n );\n}\n","import type { TypeNode } from '@codama/nodes';\nimport { pipe } from '@codama/visitors-core';\n\nimport { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { TypeManifest } from '../TypeManifest';\nimport { addFragmentImports, Fragment, fragmentFromTemplate, mergeFragments } from '../utils';\nimport { getTypeDecoderFragment } from './typeDecoder';\nimport { getTypeEncoderFragment } from './typeEncoder';\n\nexport function getTypeCodecFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi'> & {\n codecDocs?: string[];\n decoderDocs?: string[];\n encoderDocs?: string[];\n manifest: Pick<TypeManifest, 'decoder' | 'encoder'>;\n name: string;\n node: TypeNode;\n size: number | null;\n },\n): Fragment {\n const { name, manifest, nameApi } = scope;\n const codecType = typeof scope.size === 'number' ? 'FixedSizeCodec' : 'Codec';\n return mergeFragments(\n [\n getTypeEncoderFragment({ ...scope, docs: scope.encoderDocs }),\n getTypeDecoderFragment({ ...scope, docs: scope.decoderDocs }),\n pipe(\n fragmentFromTemplate('typeCodec.njk', {\n codecFunction: nameApi.codecFunction(name),\n codecType,\n decoderFunction: nameApi.decoderFunction(name),\n docs: scope.codecDocs,\n encoderFunction: nameApi.encoderFunction(name),\n looseName: nameApi.dataArgsType(name),\n manifest,\n strictName: nameApi.dataType(name),\n }),\n f => addFragmentImports(f, 'solanaCodecsCore', [`type ${codecType}`, 'combineCodec']),\n ),\n ],\n renders => renders.join('\\n\\n'),\n );\n}\n","import { isDataEnum, isNode, TypeNode } from '@codama/nodes';\nimport { pipe } from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { TypeManifest } from '../TypeManifest';\nimport { addFragmentImports, Fragment, fragmentFromTemplate, mergeFragmentImports } from '../utils';\n\nexport function getTypeDecoderFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi'> & {\n docs?: string[];\n manifest: Pick<TypeManifest, 'decoder'>;\n name: string;\n node: TypeNode;\n size: number | null;\n },\n): Fragment {\n const { name, node, manifest, nameApi, docs = [] } = scope;\n const decoderType = typeof scope.size === 'number' ? 'FixedSizeDecoder' : 'Decoder';\n const useTypeCast = isNode(node, 'enumTypeNode') && isDataEnum(node) && typeof scope.size === 'number';\n\n return pipe(\n fragmentFromTemplate('typeDecoder.njk', {\n decoderFunction: nameApi.decoderFunction(name),\n decoderType,\n docs,\n looseName: nameApi.dataArgsType(name),\n manifest,\n strictName: nameApi.dataType(name),\n useTypeCast,\n }),\n f => mergeFragmentImports(f, [manifest.decoder.imports]),\n f => addFragmentImports(f, 'solanaCodecsCore', [`type ${decoderType}`]),\n );\n}\n","import { isDataEnum, isNode, TypeNode } from '@codama/nodes';\nimport { pipe } from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { TypeManifest } from '../TypeManifest';\nimport { addFragmentImports, Fragment, fragmentFromTemplate, mergeFragmentImports } from '../utils';\n\nexport function getTypeEncoderFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi'> & {\n docs?: string[];\n manifest: Pick<TypeManifest, 'encoder'>;\n name: string;\n node: TypeNode;\n size: number | null;\n },\n): Fragment {\n const { name, node, manifest, nameApi, docs = [] } = scope;\n const encoderType = typeof scope.size === 'number' ? 'FixedSizeEncoder' : 'Encoder';\n const useTypeCast = isNode(node, 'enumTypeNode') && isDataEnum(node) && typeof scope.size === 'number';\n\n return pipe(\n fragmentFromTemplate('typeEncoder.njk', {\n docs,\n encoderFunction: nameApi.encoderFunction(name),\n encoderType,\n looseName: nameApi.dataArgsType(name),\n manifest,\n strictName: nameApi.dataType(name),\n useTypeCast,\n }),\n f => mergeFragmentImports(f, [manifest.encoder.imports]),\n f => addFragmentImports(f, 'solanaCodecsCore', [`type ${encoderType}`]),\n );\n}\n","import type { TypeNode } from '@codama/nodes';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { TypeManifest } from '../TypeManifest';\nimport { Fragment, mergeFragments } from '../utils';\nimport { getTypeFragment } from './type';\nimport { getTypeCodecFragment } from './typeCodec';\n\nexport function getTypeWithCodecFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi'> & {\n codecDocs?: string[];\n decoderDocs?: string[];\n encoderDocs?: string[];\n manifest: TypeManifest;\n name: string;\n node: TypeNode;\n size: number | null;\n typeDocs?: string[];\n },\n): Fragment {\n return mergeFragments([getTypeFragment({ ...scope, docs: scope.typeDocs }), getTypeCodecFragment(scope)], renders =>\n renders.join('\\n\\n'),\n );\n}\n","import {\n type ConstantDiscriminatorNode,\n constantDiscriminatorNode,\n constantValueNode,\n constantValueNodeFromBytes,\n type DiscriminatorNode,\n type FieldDiscriminatorNode,\n isNode,\n isNodeFilter,\n type ProgramNode,\n type SizeDiscriminatorNode,\n type StructTypeNode,\n} from '@codama/nodes';\nimport { mapFragmentContent } from '@codama/renderers-core';\nimport { pipe, visit } from '@codama/visitors-core';\nimport { getBase64Decoder } from '@solana/codecs-strings';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { addFragmentImports, Fragment, fragment, mergeFragments } from '../utils';\n\n/**\n * ```\n * if (data.length === 72) {\n * return splTokenAccounts.TOKEN;\n * }\n *\n * if (containsBytes(data, getU32Encoder().encode(42), offset)) {\n * return splTokenAccounts.TOKEN;\n * }\n *\n * if (containsBytes(data, new Uint8Array([1, 2, 3]), offset)) {\n * return splTokenAccounts.TOKEN;\n * }\n * ```\n */\nexport function getDiscriminatorConditionFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi' | 'typeManifestVisitor'> & {\n dataName: string;\n discriminators: DiscriminatorNode[];\n ifTrue: string;\n programNode: ProgramNode;\n struct: StructTypeNode;\n },\n): Fragment {\n return pipe(\n mergeFragments(\n scope.discriminators.flatMap(discriminator => {\n if (isNode(discriminator, 'sizeDiscriminatorNode')) {\n return [getSizeConditionFragment(discriminator, scope)];\n }\n if (isNode(discriminator, 'constantDiscriminatorNode')) {\n return [getByteConditionFragment(discriminator, scope)];\n }\n if (isNode(discriminator, 'fieldDiscriminatorNode')) {\n return [getFieldConditionFragment(discriminator, scope)];\n }\n return [];\n }),\n c => c.join(' && '),\n ),\n f => mapFragmentContent(f, c => `if (${c}) { ${scope.ifTrue}; }`),\n );\n}\n\nfunction getSizeConditionFragment(\n discriminator: SizeDiscriminatorNode,\n scope: Pick<GlobalFragmentScope, 'typeManifestVisitor'> & {\n dataName: string;\n },\n): Fragment {\n const { dataName } = scope;\n return fragment(`${dataName}.length === ${discriminator.size}`);\n}\n\nfunction getByteConditionFragment(\n discriminator: ConstantDiscriminatorNode,\n scope: Pick<GlobalFragmentScope, 'typeManifestVisitor'> & {\n dataName: string;\n },\n): Fragment {\n const { dataName, typeManifestVisitor } = scope;\n const constant = visit(discriminator.constant, typeManifestVisitor).value;\n\n return pipe(\n constant,\n f => mapFragmentContent(f, c => `containsBytes(${dataName}, ${c}, ${discriminator.offset})`),\n f => addFragmentImports(f, 'solanaCodecsCore', ['containsBytes']),\n );\n}\n\nfunction getFieldConditionFragment(\n discriminator: FieldDiscriminatorNode,\n scope: Pick<GlobalFragmentScope, 'typeManifestVisitor'> & {\n dataName: string;\n struct: StructTypeNode;\n },\n): Fragment {\n const field = scope.struct.fields.find(f => f.name === discriminator.name);\n if (!field || !field.defaultValue) {\n // TODO: Coded error.\n throw new Error(\n `Field discriminator \"${discriminator.name}\" does not have a matching argument with default value.`,\n );\n }\n\n // This handles the case where a field uses an u8 array to represent its discriminator.\n // In this case, we can simplify the generated code by delegating to a constantDiscriminatorNode.\n if (\n isNode(field.type, 'arrayTypeNode') &&\n isNode(field.type.item, 'numberTypeNode') &&\n field.type.item.format === 'u8' &&\n isNode(field.type.count, 'fixedCountNode') &&\n isNode(field.defaultValue, 'arrayValueNode') &&\n field.defaultValue.items.every(isNodeFilter('numberValueNode'))\n ) {\n const base64Bytes = getBase64Decoder().decode(\n new Uint8Array(field.defaultValue.items.map(node => node.number)),\n );\n return getByteConditionFragment(\n constantDiscriminatorNode(constantValueNodeFromBytes('base64', base64Bytes), discriminator.offset),\n scope,\n );\n }\n\n return getByteConditionFragment(\n constantDiscriminatorNode(constantValueNode(field.type, field.defaultValue), discriminator.offset),\n scope,\n );\n}\n","import { InstructionAccountNode, pascalCase } from '@codama/nodes';\nimport { pipe } from '@codama/visitors-core';\n\nimport { addFragmentImports, Fragment, fragment } from '../utils';\n\nexport function getInstructionAccountMetaFragment(instructionAccountNode: InstructionAccountNode): Fragment {\n const typeParam = `TAccount${pascalCase(instructionAccountNode.name)}`;\n\n // Writable, signer.\n if (instructionAccountNode.isSigner === true && instructionAccountNode.isWritable) {\n return pipe(\n fragment(`WritableSignerAccount<${typeParam}> & AccountSignerMeta<${typeParam}>`),\n f => addFragmentImports(f, 'solanaInstructions', ['type WritableSignerAccount']),\n f => addFragmentImports(f, 'solanaSigners', ['type AccountSignerMeta']),\n );\n }\n\n // Readonly, signer.\n if (instructionAccountNode.isSigner === true) {\n return pipe(\n fragment(`ReadonlySignerAccount<${typeParam}> & AccountSignerMeta<${typeParam}>`),\n f => addFragmentImports(f, 'solanaInstructions', ['type ReadonlySignerAccount']),\n f => addFragmentImports(f, 'solanaSigners', ['type AccountSignerMeta']),\n );\n }\n\n // Writable, non-signer or optional signer.\n if (instructionAccountNode.isWritable) {\n return pipe(fragment(`WritableAccount<${typeParam}>`), f =>\n addFragmentImports(f, 'solanaInstructions', ['type WritableAccount']),\n );\n }\n\n // Readonly, non-signer or optional signer.\n return pipe(fragment(`ReadonlyAccount<${typeParam}>`), f =>\n addFragmentImports(f, 'solanaInstructions', ['type ReadonlyAccount']),\n );\n}\n","import { InstructionAccountNode, InstructionInputValueNode, pascalCase } from '@codama/nodes';\nimport {\n findInstructionNodeFromPath,\n findProgramNodeFromPath,\n getLastNodeFromPath,\n LinkableDictionary,\n NodePath,\n pipe,\n} from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { ImportMap } from '../ImportMap';\nimport { Fragment, fragment, mergeFragmentImports } from '../utils';\n\nexport function getInstructionAccountTypeParamFragment(\n scope: Pick<GlobalFragmentScope, 'linkables'> & {\n allowAccountMeta: boolean;\n instructionAccountPath: NodePath<InstructionAccountNode>;\n },\n): Fragment {\n const { instructionAccountPath, allowAccountMeta, linkables } = scope;\n const instructionAccountNode = getLastNodeFromPath(instructionAccountPath);\n const instructionNode = findInstructionNodeFromPath(instructionAccountPath)!;\n const programNode = findProgramNodeFromPath(instructionAccountPath)!;\n const typeParam = `TAccount${pascalCase(instructionAccountNode.name)}`;\n const accountMeta = allowAccountMeta ? ' | AccountMeta<string>' : '';\n const imports = new ImportMap();\n if (allowAccountMeta) {\n imports.add('solanaInstructions', 'type AccountMeta');\n }\n\n if (instructionNode.optionalAccountStrategy === 'omitted' && instructionAccountNode.isOptional) {\n return pipe(fragment(`${typeParam} extends string${accountMeta} | undefined = undefined`), f =>\n mergeFragmentImports(f, [imports]),\n );\n }\n\n const defaultAddress = getDefaultAddress(instructionAccountNode.defaultValue, programNode.publicKey, linkables);\n\n return pipe(fragment(`${typeParam} extends string${accountMeta} = ${defaultAddress}`), f =>\n mergeFragmentImports(f, [imports]),\n );\n}\n\nfunction getDefaultAddress(\n defaultValue: InstructionInputValueNode | undefined,\n programId: string,\n linkables: LinkableDictionary,\n): string {\n switch (defaultValue?.kind) {\n case 'publicKeyValueNode':\n return `\"${defaultValue.publicKey}\"`;\n case 'programLinkNode':\n // eslint-disable-next-line no-case-declarations\n const programNode = linkables.get([defaultValue]);\n return programNode ? `\"${programNode.publicKey}\"` : 'string';\n case 'programIdValueNode':\n return `\"${programId}\"`;\n default:\n return 'string';\n }\n}\n","import { assertIsNode, camelCase, InstructionByteDeltaNode, InstructionNode, isNode } from '@codama/nodes';\nimport { mapFragmentContent } from '@codama/renderers-core';\nimport { getLastNodeFromPath, NodePath, pipe } from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { addFragmentFeatures, addFragmentImports, Fragment, fragment, mergeFragments } from '../utils';\n\nexport function getInstructionByteDeltaFragment(\n scope: Pick<GlobalFragmentScope, 'asyncResolvers' | 'getImportFrom' | 'nameApi'> & {\n instructionPath: NodePath<InstructionNode>;\n useAsync: boolean;\n },\n): Fragment {\n const { byteDeltas } = getLastNodeFromPath(scope.instructionPath);\n const fragments = (byteDeltas ?? []).flatMap(c => getByteDeltaFragment(c, scope));\n if (fragments.length === 0) return fragment('');\n return mergeFragments(\n fragments,\n c =>\n `// Bytes created or reallocated by the instruction.\\n` +\n `const byteDelta: number = [${c.join(',')}].reduce((a, b) => a + b, 0);`,\n );\n}\n\nfunction getByteDeltaFragment(\n byteDelta: InstructionByteDeltaNode,\n scope: Pick<GlobalFragmentScope, 'asyncResolvers' | 'getImportFrom' | 'nameApi'> & {\n useAsync: boolean;\n },\n): Fragment[] {\n let bytesFragment = ((): Fragment | null => {\n if (isNode(byteDelta.value, 'numberValueNode')) {\n return getNumberValueNodeFragment(byteDelta);\n }\n if (isNode(byteDelta.value, 'argumentValueNode')) {\n return getArgumentValueNodeFragment(byteDelta);\n }\n if (isNode(byteDelta.value, 'accountLinkNode')) {\n return getAccountLinkNodeFragment(byteDelta, scope);\n }\n if (isNode(byteDelta.value, 'resolverValueNode')) {\n return getResolverValueNodeFragment(byteDelta, scope);\n }\n return null;\n })();\n\n if (bytesFragment === null) return [];\n\n if (byteDelta.withHeader) {\n bytesFragment = pipe(\n bytesFragment,\n f => mapFragmentContent(f, c => `${c} + BASE_ACCOUNT_SIZE`),\n f => addFragmentImports(f, 'solanaAccounts', ['BASE_ACCOUNT_SIZE']),\n );\n }\n\n if (byteDelta.subtract) {\n bytesFragment = pipe(bytesFragment, f => mapFragmentContent(f, c => `- (${c})`));\n }\n\n return [bytesFragment];\n}\n\nfunction getNumberValueNodeFragment(byteDelta: InstructionByteDeltaNode): Fragment {\n assertIsNode(byteDelta.value, 'numberValueNode');\n return fragment(byteDelta.value.number.toString());\n}\n\nfunction getArgumentValueNodeFragment(byteDelta: InstructionByteDeltaNode): Fragment {\n assertIsNode(byteDelta.value, 'argumentValueNode');\n const argumentName = camelCase(byteDelta.value.name);\n return fragment(`Number(args.${argumentName})`);\n}\n\nfunction getAccountLinkNodeFragment(\n byteDelta: InstructionByteDeltaNode,\n scope: Pick<GlobalFragmentScope, 'getImportFrom' | 'nameApi'>,\n): Fragment {\n assertIsNode(byteDelta.value, 'accountLinkNode');\n const functionName = scope.nameApi.accountGetSizeFunction(byteDelta.value.name);\n const module = scope.getImportFrom(byteDelta.value);\n return pipe(fragment(`${functionName}()`), f => addFragmentImports(f, module, [functionName]));\n}\n\nfunction getResolverValueNodeFragment(\n byteDelta: InstructionByteDeltaNode,\n scope: Pick<GlobalFragmentScope, 'asyncResolvers' | 'getImportFrom' | 'nameApi'> & {\n useAsync: boolean;\n },\n): Fragment | null {\n assertIsNode(byteDelta.value, 'resolverValueNode');\n const isAsync = scope.asyncResolvers.includes(byteDelta.value.name);\n if (!scope.useAsync && isAsync) return null;\n\n const awaitKeyword = scope.useAsync && isAsync ? 'await ' : '';\n const functionName = scope.nameApi.resolverFunction(byteDelta.value.name);\n const module = scope.getImportFrom(byteDelta.value);\n return pipe(\n fragment(`${awaitKeyword}${functionName}(resolverScope)`),\n f => addFragmentImports(f, module, [functionName]),\n f => addFragmentFeatures(f, ['instruction:resolverScopeVariable']),\n );\n}\n","import { InstructionNode, structTypeNodeFromInstructionArgumentNodes } from '@codama/nodes';\nimport { getLastNodeFromPath, NodePath } from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { TypeManifest } from '../TypeManifest';\nimport { Fragment, fragment } from '../utils';\nimport { getTypeWithCodecFragment } from './typeWithCodec';\n\nexport function getInstructionDataFragment(\n scope: Pick<GlobalFragmentScope, 'customInstructionData' | 'nameApi'> & {\n dataArgsManifest: TypeManifest;\n instructionPath: NodePath<InstructionNode>;\n size: number | null;\n },\n): Fragment {\n const { instructionPath, dataArgsManifest, nameApi, customInstructionData } = scope;\n const instructionNode = getLastNodeFromPath(instructionPath);\n if (instructionNode.arguments.length === 0 || customInstructionData.has(instructionNode.name)) {\n return fragment('');\n }\n\n const instructionDataName = nameApi.instructionDataType(instructionNode.name);\n return getTypeWithCodecFragment({\n manifest: dataArgsManifest,\n name: instructionDataName,\n nameApi,\n node: structTypeNodeFromInstructionArgumentNodes(instructionNode.arguments),\n size: scope.size,\n });\n}\n","import {\n camelCase,\n ConstantDiscriminatorNode,\n DiscriminatorNode,\n FieldDiscriminatorNode,\n InstructionArgumentNode,\n isNode,\n isNodeFilter,\n StructFieldTypeNode,\n VALUE_NODES,\n} from '@codama/nodes';\nimport { mapFragmentContent } from '@codama/renderers-core';\nimport { visit } from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { Fragment, mergeFragments } from '../utils';\n\nexport function getDiscriminatorConstantsFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi' | 'typeManifestVisitor'> & {\n discriminatorNodes: DiscriminatorNode[];\n fields: InstructionArgumentNode[] | StructFieldTypeNode[];\n prefix: string;\n },\n): Fragment {\n const fragments = scope.discriminatorNodes\n .map(node => getDiscriminatorConstantFragment(node, scope))\n .filter(Boolean) as Fragment[];\n\n return mergeFragments(fragments, c => c.join('\\n\\n'));\n}\n\nexport function getDiscriminatorConstantFragment(\n discriminatorNode: DiscriminatorNode,\n scope: Pick<GlobalFragmentScope, 'nameApi' | 'typeManifestVisitor'> & {\n discriminatorNodes: DiscriminatorNode[];\n fields: InstructionArgumentNode[] | StructFieldTypeNode[];\n prefix: string;\n },\n): Fragment | null {\n switch (discriminatorNode.kind) {\n case 'constantDiscriminatorNode':\n return getConstantDiscriminatorConstantFragment(discriminatorNode, scope);\n case 'fieldDiscriminatorNode':\n return getFieldDiscriminatorConstantFragment(discriminatorNode, scope);\n default:\n return null;\n }\n}\n\nexport function getConstantDiscriminatorConstantFragment(\n discriminatorNode: ConstantDiscriminatorNode,\n scope: Pick<GlobalFragmentScope, 'nameApi' | 'typeManifestVisitor'> & {\n discriminatorNodes: DiscriminatorNode[];\n prefix: string;\n },\n): Fragment | null {\n const { discriminatorNodes, typeManifestVisitor, prefix } = 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 encoder = visit(discriminatorNode.constant.type, typeManifestVisitor).encoder;\n const value = visit(discriminatorNode.constant.value, typeManifestVisitor).value;\n return getConstantFragment({ ...scope, encoder, name, value });\n}\n\nexport function getFieldDiscriminatorConstantFragment(\n discriminatorNode: FieldDiscriminatorNode,\n scope: Pick<GlobalFragmentScope, 'nameApi' | 'typeManifestVisitor'> & {\n fields: InstructionArgumentNode[] | StructFieldTypeNode[];\n prefix: string;\n },\n): Fragment | null {\n const { fields, prefix, 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 encoder = visit(field.type, typeManifestVisitor).encoder;\n const value = visit(field.defaultValue, typeManifestVisitor).value;\n return getConstantFragment({ ...scope, encoder, name, value });\n}\n\nfunction getConstantFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi'> & {\n encoder: Fragment;\n name: string;\n value: Fragment;\n },\n): Fragment {\n const { encoder, name, nameApi, value } = scope;\n const constantName = nameApi.constant(name);\n const constantFunction = nameApi.constantFunction(name);\n\n return mergeFragments(\n [\n mapFragmentContent(value, c => `export const ${constantName} = ${c};`),\n mapFragmentContent(\n encoder,\n c => `export function ${constantFunction}() { return ${c}.encode(${constantName}); }`,\n ),\n ],\n c => c.join('\\n\\n'),\n );\n}\n","import { InstructionNode } from '@codama/nodes';\nimport { getLastNodeFromPath, NodePath, pipe } from '@codama/visitors-core';\n\nimport { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { TypeManifest } from '../TypeManifest';\nimport { Fragment, fragment, fragmentFromTemplate, mergeFragmentImports } from '../utils';\n\nexport function getInstructionExtraArgsFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi'> & {\n extraArgsManifest: TypeManifest;\n instructionPath: NodePath<InstructionNode>;\n },\n): Fragment {\n const { instructionPath, extraArgsManifest, nameApi } = scope;\n const instructionNode = getLastNodeFromPath(instructionPath);\n if ((instructionNode.extraArguments ?? []).length === 0) {\n return fragment('');\n }\n\n const instructionExtraName = nameApi.instructionExtraType(instructionNode.name);\n return pipe(\n fragmentFromTemplate('instructionExtraArgs.njk', {\n looseName: nameApi.dataArgsType(instructionExtraName),\n manifest: extraArgsManifest,\n strictName: nameApi.dataType(instructionExtraName),\n }),\n f => mergeFragmentImports(f, [extraArgsManifest.looseType.imports]),\n );\n}\n","import { camelCase, InstructionArgumentNode, InstructionNode, isNode, isNodeFilter, pascalCase } from '@codama/nodes';\nimport { mapFragmentContent } from '@codama/renderers-core';\nimport {\n findProgramNodeFromPath,\n getLastNodeFromPath,\n NodePath,\n pipe,\n ResolvedInstructionInput,\n} from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { NameApi } from '../nameTransformers';\nimport { TypeManifest } from '../TypeManifest';\nimport {\n addFragmentImports,\n Fragment,\n fragment,\n fragmentFromTemplate,\n getInstructionDependencies,\n hasAsyncFunction,\n isAsyncDefaultValue,\n mergeFragmentImports,\n mergeFragments,\n} from '../utils';\nimport { getInstructionByteDeltaFragment } from './instructionByteDelta';\nimport { getInstructionInputResolvedFragment } from './instructionInputResolved';\nimport { getInstructionInputTypeFragment } from './instructionInputType';\nimport { getInstructionRemainingAccountsFragment } from './instructionRemainingAccounts';\n\nexport function getInstructionFunctionFragment(\n scope: Pick<\n GlobalFragmentScope,\n 'asyncResolvers' | 'customInstructionData' | 'getImportFrom' | 'nameApi' | 'typeManifestVisitor'\n > & {\n dataArgsManifest: TypeManifest;\n extraArgsManifest: TypeManifest;\n instructionPath: NodePath<InstructionNode>;\n renamedArgs: Map<string, string>;\n resolvedInputs: ResolvedInstructionInput[];\n useAsync: boolean;\n },\n): Fragment {\n const {\n useAsync,\n instructionPath,\n resolvedInputs,\n renamedArgs,\n dataArgsManifest,\n asyncResolvers,\n nameApi,\n customInstructionData,\n } = scope;\n const instructionNode = getLastNodeFromPath(instructionPath);\n const programNode = findProgramNodeFromPath(instructionPath)!;\n if (useAsync && !hasAsyncFunction(instructionNode, resolvedInputs, asyncResolvers)) {\n return fragment('');\n }\n\n const customData = customInstructionData.get(instructionNode.name);\n const hasAccounts = instructionNode.accounts.length > 0;\n const hasLegacyOptionalAccounts =\n instructionNode.optionalAccountStrategy === 'omitted' &&\n instructionNode.accounts.some(account => account.isOptional);\n const instructionDependencies = getInstructionDependencies(instructionNode, asyncResolvers, useAsync);\n const argDependencies = instructionDependencies.filter(isNodeFilter('argumentValueNode')).map(node => node.name);\n const hasData = !!customData || instructionNode.arguments.length > 0;\n const argIsNotOmitted = (arg: InstructionArgumentNode) =>\n !(arg.defaultValue && arg.defaultValueStrategy === 'omitted');\n const argIsDependent = (arg: InstructionArgumentNode) => argDependencies.includes(arg.name);\n const argHasDefaultValue = (arg: InstructionArgumentNode) => {\n if (!arg.defaultValue) return false;\n if (useAsync) return true;\n return !isAsyncDefaultValue(arg.defaultValue, asyncResolvers);\n };\n const hasDataArgs = !!customData || instructionNode.arguments.filter(argIsNotOmitted).length > 0;\n const hasExtraArgs =\n (instructionNode.extraArguments ?? []).filter(\n field => argIsNotOmitted(field) && (argIsDependent(field) || argHasDefaultValue(field)),\n ).length > 0;\n const hasRemainingAccountArgs =\n (instructionNode.remainingAccounts ?? []).filter(({ value }) => isNode(value, 'argumentValueNode')).length > 0;\n const hasAnyArgs = hasDataArgs || hasExtraArgs || hasRemainingAccountArgs;\n const hasInput = hasAccounts || hasAnyArgs;\n const instructionDataName = nameApi.instructionDataType(instructionNode.name);\n const programAddressConstant = nameApi.programAddressConstant(programNode.name);\n const encoderFunction = customData\n ? dataArgsManifest.encoder.content\n : `${nameApi.encoderFunction(instructionDataName)}()`;\n const argsTypeFragment = pipe(\n fragment(customData ? dataArgsManifest.looseType.content : nameApi.dataArgsType(instructionDataName)),\n customData\n ? f => mergeFragmentImports(f, [dataArgsManifest.looseType.imports, dataArgsManifest.encoder.imports])\n : f => f,\n );\n\n const functionName = useAsync\n ? nameApi.instructionAsyncFunction(instructionNode.name)\n : nameApi.instructionSyncFunction(instructionNode.name);\n\n const typeParamsFragment = getTypeParams(instructionNode, programAddressConstant);\n const instructionTypeFragment = getInstructionType(scope);\n\n // Input.\n const inputTypeFragment = getInstructionInputTypeFragment(scope);\n const inputTypeCallFragment = getInputTypeCall(scope);\n const renamedArgsText = [...renamedArgs.entries()].map(([k, v]) => `${k}: input.${v}`).join(', ');\n\n const resolvedInputsFragment = getInstructionInputResolvedFragment(scope);\n const remainingAccountsFragment = getInstructionRemainingAccountsFragment(scope);\n const byteDeltaFragment = getInstructionByteDeltaFragment(scope);\n const resolvedFragment = mergeFragments(\n [resolvedInputsFragment, remainingAccountsFragment, byteDeltaFragment],\n content => content.join('\\n\\n'),\n );\n const hasRemainingAccounts = remainingAccountsFragment.content !== '';\n const hasByteDeltas = byteDeltaFragment.content !== '';\n const hasResolver = resolvedFragment.features.has('instruction:resolverScopeVariable');\n const getReturnType = (instructionType: string) => {\n let returnType = instructionType;\n if (hasByteDeltas) {\n returnType = `${returnType} & InstructionWithByteDelta`;\n }\n return useAsync ? `Promise<${returnType}>` : returnType;\n };\n\n return pipe(\n fragmentFromTemplate('instructionFunction.njk', {\n argsTypeFragment: argsTypeFragment.content,\n encoderFunction,\n functionName,\n getReturnType,\n hasAccounts,\n hasAnyArgs,\n hasByteDeltas,\n hasData,\n hasDataArgs,\n hasExtraArgs,\n hasInput,\n hasLegacyOptionalAccounts,\n hasRemainingAccounts,\n hasResolver,\n inputTypeCallFragment: inputTypeCallFragment.content,\n inputTypeFragment: inputTypeFragment.content,\n instruction: instructionNode,\n instructionTypeFragment: instructionTypeFragment.content,\n programAddressConstant,\n renamedArgs: renamedArgsText,\n resolvedFragment: resolvedFragment.content,\n typeParamsFragment: typeParamsFragment.content,\n useAsync,\n }),\n f =>\n mergeFragmentImports(f, [\n typeParamsFragment.imports,\n instructionTypeFragment.imports,\n inputTypeFragment.imports,\n inputTypeCallFragment.imports,\n resolvedFragment.imports,\n argsTypeFragment.imports,\n ]),\n f => addFragmentImports(f, 'generatedPrograms', [programAddressConstant]),\n f => addFragmentImports(f, 'solanaAddresses', ['type Address']),\n f => (hasAccounts ? addFragmentImports(f, 'solanaInstructions', ['type AccountMeta']) : f),\n f => (hasAccounts ? addFragmentImports(f, 'shared', ['getAccountMetaFactory', 'type ResolvedAccount']) : f),\n f => (hasByteDeltas ? addFragmentImports(f, 'shared', ['type InstructionWithByteDelta']) : f),\n );\n}\n\nfunction getTypeParams(instructionNode: InstructionNode, programAddressConstant: string): Fragment {\n const typeParams = instructionNode.accounts.map(account => `TAccount${pascalCase(account.name)} extends string`);\n // after all accounts, add an optional type for program address\n typeParams.push(`TProgramAddress extends Address = typeof ${programAddressConstant}`);\n return pipe(\n fragment(typeParams.filter(x => !!x).join(', ')),\n f => mapFragmentContent(f, c => `<${c}>`),\n f => addFragmentImports(f, 'generatedPrograms', [programAddressConstant]),\n );\n}\n\nfunction getInstructionType(scope: { instructionPath: NodePath<InstructionNode>; nameApi: NameApi }): Fragment {\n const { instructionPath, nameApi } = scope;\n const instructionNode = getLastNodeFromPath(instructionPath);\n const instructionTypeName = nameApi.instructionType(instructionNode.name);\n const programAddressFragment = fragment('TProgramAddress');\n const accountTypeParamsFragments = instructionNode.accounts.map(account => {\n const typeParam = `TAccount${pascalCase(account.name)}`;\n const camelName = camelCase(account.name);\n\n if (account.isSigner === 'either') {\n const signerRole = account.isWritable ? 'WritableSignerAccount' : 'ReadonlySignerAccount';\n return pipe(\n fragment(\n `typeof input[\"${camelName}\"] extends TransactionSigner<${typeParam}> ` +\n `? ${signerRole}<${typeParam}> & AccountSignerMeta<${typeParam}> ` +\n `: ${typeParam}`,\n ),\n f => addFragmentImports(f, 'solanaInstructions', [`type ${signerRole}`]),\n f => addFragmentImports(f, 'solanaSigners', ['type AccountSignerMeta']),\n );\n }\n\n return fragment(typeParam);\n });\n\n return pipe(\n mergeFragments([programAddressFragment, ...accountTypeParamsFragments], c => c.join(', ')),\n f => mapFragmentContent(f, c => `${instructionTypeName}<${c}>`),\n );\n}\n\nfunction getInputTypeCall(scope: {\n instructionPath: NodePath<InstructionNode>;\n nameApi: NameApi;\n useAsync: boolean;\n}): Fragment {\n const { instructionPath, useAsync, nameApi } = scope;\n const instructionNode = getLastNodeFromPath(instructionPath);\n const inputTypeName = useAsync\n ? nameApi.instructionAsyncInputType(instructionNode.name)\n : nameApi.instructionSyncInputType(instructionNode.name);\n if (instructionNode.accounts.length === 0) return fragment(inputTypeName);\n const accountTypeParams = instructionNode.accounts.map(account => `TAccount${pascalCase(account.name)}`).join(', ');\n\n return fragment(`${inputTypeName}<${accountTypeParams}>`);\n}\n","import { camelCase, InstructionNode, isNode, parseOptionalAccountStrategy } from '@codama/nodes';\nimport { mapFragmentContent } from '@codama/renderers-core';\nimport { getLastNodeFromPath, NodePath, ResolvedInstructionInput } from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { Fragment, fragment, mergeFragments } from '../utils';\nimport { getInstructionInputDefaultFragment } from './instructionInputDefault';\n\nexport function getInstructionInputResolvedFragment(\n scope: Pick<GlobalFragmentScope, 'asyncResolvers' | 'getImportFrom' | 'nameApi' | 'typeManifestVisitor'> & {\n instructionPath: NodePath<InstructionNode>;\n resolvedInputs: ResolvedInstructionInput[];\n useAsync: boolean;\n },\n): Fragment {\n const instructionNode = getLastNodeFromPath(scope.instructionPath);\n const resolvedInputFragments = scope.resolvedInputs.flatMap((input: ResolvedInstructionInput): Fragment[] => {\n const inputFragment = getInstructionInputDefaultFragment({\n ...scope,\n input,\n optionalAccountStrategy: parseOptionalAccountStrategy(instructionNode.optionalAccountStrategy),\n });\n if (!inputFragment.content) return [];\n const camelName = camelCase(input.name);\n return [\n mapFragmentContent(inputFragment, c =>\n isNode(input, 'instructionArgumentNode')\n ? `if (!args.${camelName}) {\\n${c}\\n}`\n : `if (!accounts.${camelName}.value) {\\n${c}\\n}`,\n ),\n ];\n });\n\n if (resolvedInputFragments.length === 0) {\n return fragment('');\n }\n\n return mergeFragments([fragment('// Resolve default values.'), ...resolvedInputFragments], c => c.join('\\n'));\n}\n","/* eslint-disable no-case-declarations */\nimport { camelCase, InstructionInputValueNode, isNode, OptionalAccountStrategy } from '@codama/nodes';\nimport { mapFragmentContent, setFragmentContent } from '@codama/renderers-core';\nimport { pipe, ResolvedInstructionInput, visit } from '@codama/visitors-core';\n\nimport { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport {\n addFragmentFeatures,\n addFragmentImports,\n Fragment,\n fragment,\n isAsyncDefaultValue,\n mergeFragmentImports,\n mergeFragments,\n} from '../utils';\n\nexport function getInstructionInputDefaultFragment(\n scope: Pick<GlobalFragmentScope, 'asyncResolvers' | 'getImportFrom' | 'nameApi' | 'typeManifestVisitor'> & {\n input: ResolvedInstructionInput;\n optionalAccountStrategy: OptionalAccountStrategy;\n useAsync: boolean;\n },\n): Fragment {\n const { input, optionalAccountStrategy, asyncResolvers, useAsync, nameApi, typeManifestVisitor, getImportFrom } =\n scope;\n if (!input.defaultValue) {\n return fragment('');\n }\n\n if (!useAsync && isAsyncDefaultValue(input.defaultValue, asyncResolvers)) {\n return fragment('');\n }\n\n const { defaultValue } = input;\n const defaultFragment = (renderedValue: string, isWritable?: boolean): Fragment => {\n const inputName = camelCase(input.name);\n if (input.kind === 'instructionAccountNode' && isNode(defaultValue, 'resolverValueNode')) {\n return fragment(`accounts.${inputName} = { ...accounts.${inputName}, ...${renderedValue} };`);\n }\n if (input.kind === 'instructionAccountNode' && isWritable === undefined) {\n return fragment(`accounts.${inputName}.value = ${renderedValue};`);\n }\n if (input.kind === 'instructionAccountNode') {\n return fragment(\n `accounts.${inputName}.value = ${renderedValue};\\n` +\n `accounts.${inputName}.isWritable = ${isWritable ? 'true' : 'false'}`,\n );\n }\n return fragment(`args.${inputName} = ${renderedValue};`);\n };\n\n switch (defaultValue.kind) {\n case 'accountValueNode':\n const name = camelCase(defaultValue.name);\n if (input.kind === 'instructionAccountNode' && input.resolvedIsSigner && !input.isSigner) {\n return pipe(defaultFragment(`expectTransactionSigner(accounts.${name}.value).address`), f =>\n addFragmentImports(f, 'shared', ['expectTransactionSigner']),\n );\n }\n if (input.kind === 'instructionAccountNode') {\n return pipe(defaultFragment(`expectSome(accounts.${name}.value)`), f =>\n addFragmentImports(f, 'shared', ['expectSome']),\n );\n }\n return pipe(defaultFragment(`expectAddress(accounts.${name}.value)`), f =>\n addFragmentImports(f, 'shared', ['expectAddress']),\n );\n\n case 'pdaValueNode':\n // Inlined PDA value.\n if (isNode(defaultValue.pda, 'pdaNode')) {\n const pdaProgram = defaultValue.pda.programId\n ? pipe(fragment(`'${defaultValue.pda.programId}' as Address<'${defaultValue.pda.programId}'>`), f =>\n addFragmentImports(f, 'solanaAddresses', ['type Address']),\n )\n : fragment('programAddress');\n const pdaSeeds = defaultValue.pda.seeds.flatMap((seed): Fragment[] => {\n if (isNode(seed, 'constantPdaSeedNode') && isNode(seed.value, 'programIdValueNode')) {\n return [\n pipe(\n fragment(`getAddressEncoder().encode(${pdaProgram.content})`),\n f => mergeFragmentImports(f, [pdaProgram.imports]),\n f => addFragmentImports(f, 'solanaAddresses', ['getAddressEncoder']),\n ),\n ];\n }\n if (isNode(seed, 'constantPdaSeedNode') && !isNode(seed.value, 'programIdValueNode')) {\n const typeManifest = visit(seed.type, typeManifestVisitor);\n const valueManifest = visit(seed.value, typeManifestVisitor);\n return [\n pipe(\n fragment(`${typeManifest.encoder.content}.encode(${valueManifest.value.content})`),\n f =>\n mergeFragmentImports(f, [\n typeManifest.encoder.imports,\n valueManifest.value.imports,\n ]),\n ),\n ];\n }\n if (isNode(seed, 'variablePdaSeedNode')) {\n const typeManifest = visit(seed.type, typeManifestVisitor);\n const valueSeed = defaultValue.seeds.find(s => s.name === seed.name)?.value;\n if (!valueSeed) return [];\n if (isNode(valueSeed, 'accountValueNode')) {\n return [\n pipe(\n fragment(\n `${typeManifest.encoder.content}.encode(expectAddress(accounts.${camelCase(valueSeed.name)}.value))`,\n ),\n f => mergeFragmentImports(f, [typeManifest.encoder.imports]),\n f => addFragmentImports(f, 'shared', ['expectAddress']),\n ),\n ];\n }\n if (isNode(valueSeed, 'argumentValueNode')) {\n return [\n pipe(\n fragment(\n `${typeManifest.encoder.content}.encode(expectSome(args.${camelCase(valueSeed.name)}))`,\n ),\n f => mergeFragmentImports(f, [typeManifest.encoder.imports]),\n f => addFragmentImports(f, 'shared', ['expectSome']),\n ),\n ];\n }\n const valueManifest = visit(valueSeed, typeManifestVisitor);\n return [\n pipe(\n fragment(`${typeManifest.encoder.content}.encode(${valueManifest.value.content})`),\n f =>\n mergeFragmentImports(f, [\n typeManifest.encoder.imports,\n valueManifest.value.imports,\n ]),\n ),\n ];\n }\n return [];\n });\n return pipe(\n mergeFragments([pdaProgram, ...pdaSeeds], ([p, ...s]) => {\n const programAddress = p === 'programAddress' ? p : `programAddress: ${p}`;\n return `await getProgramDerivedAddress({ ${programAddress}, seeds: [${s.join(', ')}] })`;\n }),\n f => addFragmentImports(f, 'solanaAddresses', ['getProgramDerivedAddress']),\n f => mapFragmentContent(f, c => defaultFragment(c).content),\n );\n }\n\n // Linked PDA value.\n const pdaFunction = nameApi.pdaFindFunction(defaultValue.pda.name);\n const pdaArgs = [];\n const pdaSeeds = defaultValue.seeds.map((seed): Fragment => {\n if (isNode(seed.value, 'accountValueNode')) {\n return pipe(\n fragment(`${seed.name}: expectAddress(accounts.${camelCase(seed.value.name)}.value)`),\n f => addFragmentImports(f, 'shared', ['expectAddress']),\n );\n }\n if (isNode(seed.value, 'argumentValueNode')) {\n return pipe(fragment(`${seed.name}: expectSome(args.${camelCase(seed.value.name)})`), f =>\n addFragmentImports(f, 'shared', ['expectSome']),\n );\n }\n return pipe(visit(seed.value, typeManifestVisitor).value, f =>\n mapFragmentContent(f, c => `${seed.name}: ${c}`),\n );\n });\n const pdaSeedsFragment = pipe(\n mergeFragments(pdaSeeds, renders => renders.join(', ')),\n f => mapFragmentContent(f, c => `{ ${c} }`),\n );\n if (pdaSeeds.length > 0) {\n pdaArgs.push(pdaSeedsFragment.content);\n }\n const module = getImportFrom(defaultValue.pda);\n return pipe(\n defaultFragment(`await ${pdaFunction}(${pdaArgs.join(', ')})`),\n f => mergeFragmentImports(f, [pdaSeedsFragment.imports]),\n f => addFragmentImports(f, module, [pdaFunction]),\n );\n\n case 'publicKeyValueNode':\n return pipe(defaultFragment(`'${defaultValue.publicKey}' as Address<'${defaultValue.publicKey}'>`), f =>\n addFragmentImports(f, 'solanaAddresses', ['type Address']),\n );\n\n case 'programLinkNode':\n const programAddress = nameApi.programAddressConstant(defaultValue.name);\n return pipe(defaultFragment(programAddress, false), f =>\n addFragmentImports(f, getImportFrom(defaultValue), [programAddress]),\n );\n\n case 'programIdValueNode':\n if (\n optionalAccountStrategy === 'programId' &&\n input.kind === 'instructionAccountNode' &&\n input.isOptional\n ) {\n return fragment('');\n }\n return defaultFragment('programAddress', false);\n\n case 'identityValueNode':\n case 'payerValueNode':\n return fragment('');\n\n case 'accountBumpValueNode':\n return pipe(\n defaultFragment(`expectProgramDerivedAddress(accounts.${camelCase(defaultValue.name)}.value)[1]`),\n f => addFragmentImports(f, 'shared', ['expectProgramDerivedAddress']),\n );\n\n case 'argumentValueNode':\n return pipe(defaultFragment(`expectSome(args.${camelCase(defaultValue.name)})`), f =>\n addFragmentImports(f, 'shared', ['expectSome']),\n );\n\n case 'resolverValueNode':\n const resolverFunction = nameApi.resolverFunction(defaultValue.name);\n const resolverAwait = useAsync && asyncResolvers.includes(defaultValue.name) ? 'await ' : '';\n return pipe(\n defaultFragment(`${resolverAwait}${resolverFunction}(resolverScope)`),\n f => addFragmentImports(f, getImportFrom(defaultValue), [resolverFunction]),\n f => addFragmentFeatures(f, ['instruction:resolverScopeVariable']),\n );\n\n case 'conditionalValueNode':\n const ifTrueRenderer = renderNestedInstructionDefault({\n ...scope,\n defaultValue: defaultValue.ifTrue,\n });\n const ifFalseRenderer = renderNestedInstructionDefault({\n ...scope,\n defaultValue: defaultValue.ifFalse,\n });\n if (!ifTrueRenderer && !ifFalseRenderer) {\n return fragment('');\n }\n let conditionalFragment = fragment('');\n if (ifTrueRenderer) {\n conditionalFragment = mergeFragments([conditionalFragment, ifTrueRenderer], c => c[0]);\n }\n if (ifFalseRenderer) {\n conditionalFragment = mergeFragments([conditionalFragment, ifFalseRenderer], c => c[0]);\n }\n const negatedCondition = !ifTrueRenderer;\n let condition = 'true';\n\n if (isNode(defaultValue.condition, 'resolverValueNode')) {\n const conditionalResolverFunction = nameApi.resolverFunction(defaultValue.condition.name);\n const module = getImportFrom(defaultValue.condition);\n conditionalFragment = pipe(\n conditionalFragment,\n f => addFragmentImports(f, module, [conditionalResolverFunction]),\n f => addFragmentFeatures(f, ['instruction:resolverScopeVariable']),\n );\n const conditionalResolverAwait =\n useAsync && asyncResolvers.includes(defaultValue.condition.name) ? 'await ' : '';\n condition = `${conditionalResolverAwait}${conditionalResolverFunction}(resolverScope)`;\n condition = negatedCondition ? `!${condition}` : condition;\n } else {\n const comparedInputName = isNode(defaultValue.condition, 'accountValueNode')\n ? `accounts.${camelCase(defaultValue.condition.name)}.value`\n : `args.${camelCase(defaultValue.condition.name)}`;\n if (defaultValue.value) {\n const comparedValue = visit(defaultValue.value, typeManifestVisitor).value;\n conditionalFragment = mergeFragments([conditionalFragment, comparedValue], c => c[0]);\n const operator = negatedCondition ? '!==' : '===';\n condition = `${comparedInputName} ${operator} ${comparedValue.content}`;\n } else {\n condition = negatedCondition ? `!${comparedInputName}` : comparedInputName;\n }\n }\n\n if (ifTrueRenderer && ifFalseRenderer) {\n return setFragmentContent(\n conditionalFragment,\n `if (${condition}) {\\n${ifTrueRenderer.content}\\n} else {\\n${ifFalseRenderer.content}\\n}`,\n );\n }\n\n return setFragmentContent(\n conditionalFragment,\n `if (${condition}) {\\n${ifTrueRenderer ? ifTrueRenderer.content : ifFalseRenderer?.content}\\n}`,\n );\n\n default:\n const valueManifest = visit(defaultValue, typeManifestVisitor).value;\n return pipe(valueManifest, f => mapFragmentContent(f, c => defaultFragment(c).content));\n }\n}\n\nfunction renderNestedInstructionDefault(\n scope: Parameters<typeof getInstructionInputDefaultFragment>[0] & {\n defaultValue: InstructionInputValueNode | undefined;\n },\n): Fragment | undefined {\n const { input, defaultValue } = scope;\n if (!defaultValue) return undefined;\n return getInstructionInputDefaultFragment({\n ...scope,\n input: { ...input, defaultValue },\n });\n}\n","import {\n camelCase,\n getAllInstructionArguments,\n InstructionArgumentNode,\n InstructionNode,\n isNode,\n parseDocs,\n pascalCase,\n} from '@codama/nodes';\nimport { mapFragmentContent } from '@codama/renderers-core';\nimport {\n getLastNodeFromPath,\n NodePath,\n pipe,\n ResolvedInstructionAccount,\n ResolvedInstructionArgument,\n ResolvedInstructionInput,\n} from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { TypeManifest } from '../TypeManifest';\nimport {\n addFragmentImports,\n Fragment,\n fragment,\n fragmentFromTemplate,\n isAsyncDefaultValue,\n jsDocblock,\n mergeFragmentImports,\n mergeFragments,\n} from '../utils';\n\nexport function getInstructionInputTypeFragment(\n scope: Pick<GlobalFragmentScope, 'asyncResolvers' | 'customInstructionData' | 'nameApi'> & {\n dataArgsManifest: TypeManifest;\n instructionPath: NodePath<InstructionNode>;\n renamedArgs: Map<string, string>;\n resolvedInputs: ResolvedInstructionInput[];\n useAsync: boolean;\n },\n): Fragment {\n const { instructionPath, useAsync, nameApi } = scope;\n const instructionNode = getLastNodeFromPath(instructionPath);\n\n const instructionInputType = useAsync\n ? nameApi.instructionAsyncInputType(instructionNode.name)\n : nameApi.instructionSyncInputType(instructionNode.name);\n const accountsFragment = getAccountsFragment(scope);\n const [dataArgumentsFragment, customDataArgumentsFragment] = getDataArgumentsFragments(scope);\n const extraArgumentsFragment = getExtraArgumentsFragment(scope);\n const remainingAccountsFragment = getRemainingAccountsFragment(instructionNode);\n\n return pipe(\n fragmentFromTemplate('instructionInputType.njk', {\n accountsFragment: accountsFragment.content,\n customDataArgumentsFragment: customDataArgumentsFragment.content,\n dataArgumentsFragment: dataArgumentsFragment.content,\n extraArgumentsFragment: extraArgumentsFragment.content,\n instruction: instructionNode,\n instructionInputType,\n remainingAccountsFragment: remainingAccountsFragment.content,\n }),\n f =>\n mergeFragmentImports(f, [\n accountsFragment.imports,\n dataArgumentsFragment.imports,\n customDataArgumentsFragment.imports,\n extraArgumentsFragment.imports,\n remainingAccountsFragment.imports,\n ]),\n f => addFragmentImports(f, 'solanaAddresses', ['type Address']),\n );\n}\n\nfunction getAccountsFragment(\n scope: Pick<GlobalFragmentScope, 'asyncResolvers' | 'customInstructionData' | 'nameApi'> & {\n instructionPath: NodePath<InstructionNode>;\n resolvedInputs: ResolvedInstructionInput[];\n useAsync: boolean;\n },\n): Fragment {\n const { instructionPath, resolvedInputs, useAsync, asyncResolvers } = scope;\n const instructionNode = getLastNodeFromPath(instructionPath);\n\n const fragments = instructionNode.accounts.map(account => {\n const resolvedAccount = resolvedInputs.find(\n input => input.kind === 'instructionAccountNode' && input.name === account.name,\n ) as ResolvedInstructionAccount;\n const hasDefaultValue =\n !!resolvedAccount.defaultValue &&\n !isNode(resolvedAccount.defaultValue, ['identityValueNode', 'payerValueNode']) &&\n (useAsync || !isAsyncDefaultValue(resolvedAccount.defaultValue, asyncResolvers));\n const accountDocs = parseDocs(account.docs);\n const docblock = accountDocs.length > 0 ? jsDocblock(accountDocs) : '';\n const optionalSign = hasDefaultValue || resolvedAccount.isOptional ? '?' : '';\n return mapFragmentContent(\n getAccountTypeFragment(resolvedAccount),\n c => `${docblock}${camelCase(account.name)}${optionalSign}: ${c};`,\n );\n });\n\n return mergeFragments(fragments, c => c.join('\\n'));\n}\n\nfunction getAccountTypeFragment(account: Pick<ResolvedInstructionAccount, 'isPda' | 'isSigner' | 'name'>): Fragment {\n const typeParam = `TAccount${pascalCase(account.name)}`;\n\n if (account.isPda && account.isSigner === false) {\n return pipe(fragment(`ProgramDerivedAddress<${typeParam}>`), f =>\n addFragmentImports(f, 'solanaAddresses', ['type ProgramDerivedAddress']),\n );\n }\n\n if (account.isPda && account.isSigner === 'either') {\n return pipe(\n fragment(`ProgramDerivedAddress<${typeParam}> | TransactionSigner<${typeParam}>`),\n f => addFragmentImports(f, 'solanaAddresses', ['type ProgramDerivedAddress']),\n f => addFragmentImports(f, 'solanaSigners', ['type TransactionSigner']),\n );\n }\n\n if (account.isSigner === 'either') {\n return pipe(\n fragment(`Address<${typeParam}> | TransactionSigner<${typeParam}>`),\n f => addFragmentImports(f, 'solanaAddresses', ['type Address']),\n f => addFragmentImports(f, 'solanaSigners', ['type TransactionSigner']),\n );\n }\n\n if (account.isSigner) {\n return pipe(fragment(`TransactionSigner<${typeParam}>`), f =>\n addFragmentImports(f, 'solanaSigners', ['type TransactionSigner']),\n );\n }\n\n return pipe(fragment(`Address<${typeParam}>`), f => addFragmentImports(f, 'solanaAddresses', ['type Address']));\n}\n\nfunction getDataArgumentsFragments(\n scope: Pick<GlobalFragmentScope, 'customInstructionData' | 'nameApi'> & {\n dataArgsManifest: TypeManifest;\n instructionPath: NodePath<InstructionNode>;\n renamedArgs: Map<string, string>;\n resolvedInputs: ResolvedInstructionInput[];\n },\n): [Fragment, Fragment] {\n const { instructionPath, nameApi } = scope;\n const instructionNode = getLastNodeFromPath(instructionPath);\n\n const customData = scope.customInstructionData.get(instructionNode.name);\n if (customData) {\n return [\n fragment(''),\n pipe(\n fragment(nameApi.dataArgsType(customData.importAs)),\n f => mergeFragmentImports(f, [scope.dataArgsManifest.looseType.imports]),\n f => mapFragmentContent(f, c => `${c} & `),\n ),\n ];\n }\n\n const instructionDataName = nameApi.instructionDataType(instructionNode.name);\n const dataArgsType = nameApi.dataArgsType(instructionDataName);\n\n const fragments = instructionNode.arguments.flatMap(arg => {\n const argFragment = getArgumentFragment(arg, fragment(dataArgsType), scope.resolvedInputs, scope.renamedArgs);\n return argFragment ? [argFragment] : [];\n });\n\n return [mergeFragments(fragments, c => c.join('\\n')), fragment('')];\n}\n\nfunction getExtraArgumentsFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi'> & {\n instructionPath: NodePath<InstructionNode>;\n renamedArgs: Map<string, string>;\n resolvedInputs: ResolvedInstructionInput[];\n },\n): Fragment {\n const { instructionPath, nameApi } = scope;\n const instructionNode = getLastNodeFromPath(instructionPath);\n const instructionExtraName = nameApi.instructionExtraType(instructionNode.name);\n const extraArgsType = nameApi.dataArgsType(instructionExtraName);\n\n const fragments = (instructionNode.extraArguments ?? []).flatMap(arg => {\n const argFragment = getArgumentFragment(arg, fragment(extraArgsType), scope.resolvedInputs, scope.renamedArgs);\n return argFragment ? [argFragment] : [];\n });\n\n return mergeFragments(fragments, c => c.join('\\n'));\n}\n\nfunction getArgumentFragment(\n arg: InstructionArgumentNode,\n argsType: Fragment,\n resolvedInputs: ResolvedInstructionInput[],\n renamedArgs: Map<string, string>,\n): Fragment | null {\n const resolvedArg = resolvedInputs.find(\n input => isNode(input, 'instructionArgumentNode') && input.name === arg.name,\n ) as ResolvedInstructionArgument | undefined;\n if (arg.defaultValue && arg.defaultValueStrategy === 'omitted') return null;\n const renamedName = renamedArgs.get(arg.name) ?? arg.name;\n const optionalSign = arg.defaultValue || resolvedArg?.defaultValue ? '?' : '';\n return mapFragmentContent(\n argsType,\n c => `${camelCase(renamedName)}${optionalSign}: ${c}[\"${camelCase(arg.name)}\"];`,\n );\n}\n\nfunction getRemainingAccountsFragment(instructionNode: InstructionNode): Fragment {\n const fragments = (instructionNode.remainingAccounts ?? []).flatMap(remainingAccountsNode => {\n if (isNode(remainingAccountsNode.value, 'resolverValueNode')) return [];\n\n const { name } = remainingAccountsNode.value;\n const allArguments = getAllInstructionArguments(instructionNode);\n const argumentExists = allArguments.some(arg => arg.name === name);\n if (argumentExists) return [];\n\n const isSigner = remainingAccountsNode.isSigner ?? false;\n const optionalSign = (remainingAccountsNode.isOptional ?? false) ? '?' : '';\n const signerFragment = pipe(fragment(`TransactionSigner`), f =>\n addFragmentImports(f, 'solanaSigners', ['type TransactionSigner']),\n );\n const addressFragment = pipe(fragment(`Address`), f =>\n addFragmentImports(f, 'solanaAddresses', ['type Address']),\n );\n return mapFragmentContent(\n (() => {\n if (isSigner === 'either') {\n return mergeFragments([signerFragment, addressFragment], c => c.join(' | '));\n }\n return isSigner ? signerFragment : addressFragment;\n })(),\n c => `${camelCase(name)}${optionalSign}: Array<${c}>;`,\n );\n });\n\n return mergeFragments(fragments, c => c.join('\\n'));\n}\n","import {\n assertIsNode,\n camelCase,\n getAllInstructionArguments,\n InstructionNode,\n InstructionRemainingAccountsNode,\n isNode,\n} from '@codama/nodes';\nimport { getLastNodeFromPath, NodePath, pipe } from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { addFragmentFeatures, addFragmentImports, Fragment, fragment, mergeFragments } from '../utils';\n\nexport function getInstructionRemainingAccountsFragment(\n scope: Pick<GlobalFragmentScope, 'asyncResolvers' | 'getImportFrom' | 'nameApi'> & {\n instructionPath: NodePath<InstructionNode>;\n useAsync: boolean;\n },\n): Fragment {\n const { remainingAccounts } = getLastNodeFromPath(scope.instructionPath);\n const fragments = (remainingAccounts ?? []).flatMap(a => getRemainingAccountsFragment(a, scope));\n if (fragments.length === 0) return fragment('');\n return pipe(\n mergeFragments(\n fragments,\n c =>\n `// Remaining accounts.\\n` +\n `const remainingAccounts: AccountMeta[] = ${c.length === 1 ? c[0] : `[...${c.join(', ...')}]`}`,\n ),\n f => addFragmentImports(f, 'solanaInstructions', ['type AccountMeta']),\n );\n}\n\nfunction getRemainingAccountsFragment(\n remainingAccounts: InstructionRemainingAccountsNode,\n scope: Pick<GlobalFragmentScope, 'asyncResolvers' | 'getImportFrom' | 'nameApi'> & {\n instructionPath: NodePath<InstructionNode>;\n useAsync: boolean;\n },\n): Fragment[] {\n const remainingAccountsFragment = ((): Fragment | null => {\n if (isNode(remainingAccounts.value, 'argumentValueNode')) {\n return getArgumentValueNodeFragment(remainingAccounts, scope);\n }\n if (isNode(remainingAccounts.value, 'resolverValueNode')) {\n return getResolverValueNodeFragment(remainingAccounts, scope);\n }\n return null;\n })();\n\n if (remainingAccountsFragment === null) return [];\n return [remainingAccountsFragment];\n}\n\nfunction getArgumentValueNodeFragment(\n remainingAccounts: InstructionRemainingAccountsNode,\n scope: { instructionPath: NodePath<InstructionNode> },\n): Fragment {\n const instructionNode = getLastNodeFromPath(scope.instructionPath);\n assertIsNode(remainingAccounts.value, 'argumentValueNode');\n const argumentName = camelCase(remainingAccounts.value.name);\n const isOptional = remainingAccounts.isOptional ?? false;\n const isSigner = remainingAccounts.isSigner ?? false;\n const isWritable = remainingAccounts.isWritable ?? false;\n const nonSignerRole = isWritable ? 'AccountRole.WRITABLE' : 'AccountRole.READONLY';\n const signerRole = isWritable ? 'AccountRole.WRITABLE_SIGNER' : 'AccountRole.READONLY_SIGNER';\n const role = isSigner === true ? signerRole : nonSignerRole;\n const argumentArray = isOptional ? `(args.${argumentName} ?? [])` : `args.${argumentName}`;\n\n // The argument already exists or was added as `Array<Address>`.\n const allArguments = getAllInstructionArguments(instructionNode);\n const argumentExists = allArguments.some(arg => arg.name === remainingAccounts.value.name);\n if (argumentExists || isSigner === false) {\n return pipe(fragment(`${argumentArray}.map((address) => ({ address, role: ${role} }))`), f =>\n addFragmentImports(f, 'solanaInstructions', ['AccountRole']),\n );\n }\n\n // The argument was added as `Array<TransactionSigner | Address>`.\n if (isSigner === 'either') {\n return pipe(\n fragment(\n `${argumentArray}.map((addressOrSigner) => (` +\n `isTransactionSigner(addressOrSigner)\\n` +\n `? { address: addressOrSigner.address, role: ${role}, signer: addressOrSigner }\\n` +\n `: { address: addressOrSigner, role: ${role} }\\n` +\n `))`,\n ),\n f => addFragmentImports(f, 'solanaInstructions', ['AccountRole']),\n f => addFragmentImports(f, 'shared', ['isTransactionSigner']),\n );\n }\n\n // The argument was added as `Array<TransactionSigner>`.\n return pipe(\n fragment(`${argumentArray}.map((signer) => ({ address: signer.address, role: ${signerRole}, signer }))`),\n f => addFragmentImports(f, 'solanaInstructions', ['AccountRole']),\n );\n}\n\nfunction getResolverValueNodeFragment(\n remainingAccounts: InstructionRemainingAccountsNode,\n scope: Pick<GlobalFragmentScope, 'asyncResolvers' | 'getImportFrom' | 'nameApi'> & {\n useAsync: boolean;\n },\n): Fragment | null {\n assertIsNode(remainingAccounts.value, 'resolverValueNode');\n const isAsync = scope.asyncResolvers.includes(remainingAccounts.value.name);\n if (!scope.useAsync && isAsync) return null;\n\n const awaitKeyword = scope.useAsync && isAsync ? 'await ' : '';\n const functionName = scope.nameApi.resolverFunction(remainingAccounts.value.name);\n const module = scope.getImportFrom(remainingAccounts.value);\n return pipe(\n fragment(`${awaitKeyword}${functionName}(resolverScope)`),\n f => addFragmentImports(f, module, [functionName]),\n f => addFragmentFeatures(f, ['instruction:resolverScopeVariable']),\n );\n}\n","import { InstructionNode } from '@codama/nodes';\nimport { findProgramNodeFromPath, getLastNodeFromPath, NodePath, pipe } from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { TypeManifest } from '../TypeManifest';\nimport { addFragmentImports, Fragment, fragment, fragmentFromTemplate, mergeFragmentImports } from '../utils';\n\nexport function getInstructionParseFunctionFragment(\n scope: Pick<GlobalFragmentScope, 'customInstructionData' | 'nameApi'> & {\n dataArgsManifest: TypeManifest;\n instructionPath: NodePath<InstructionNode>;\n },\n): Fragment {\n const { instructionPath, dataArgsManifest, nameApi, customInstructionData } = scope;\n const instructionNode = getLastNodeFromPath(instructionPath);\n const programNode = findProgramNodeFromPath(instructionPath)!;\n const customData = customInstructionData.get(instructionNode.name);\n const hasAccounts = instructionNode.accounts.length > 0;\n const hasOptionalAccounts = instructionNode.accounts.some(account => account.isOptional);\n const minimumNumberOfAccounts =\n instructionNode.optionalAccountStrategy === 'omitted'\n ? instructionNode.accounts.filter(account => !account.isOptional).length\n : instructionNode.accounts.length;\n const hasData = !!customData || instructionNode.arguments.length > 0;\n\n const instructionDataName = nameApi.instructionDataType(instructionNode.name);\n const programAddressConstant = nameApi.programAddressConstant(programNode.name);\n const dataTypeFragment = customData\n ? pipe(fragment(dataArgsManifest.strictType.content), f =>\n mergeFragmentImports(f, [dataArgsManifest.strictType.imports, dataArgsManifest.decoder.imports]),\n )\n : fragment(nameApi.dataType(instructionDataName));\n const decoderFunction = customData\n ? dataArgsManifest.decoder.content\n : `${nameApi.decoderFunction(instructionDataName)}()`;\n\n return pipe(\n fragmentFromTemplate('instructionParseFunction.njk', {\n dataTypeFragment: dataTypeFragment.content,\n decoderFunction,\n hasAccounts,\n hasData,\n hasOptionalAccounts,\n instruction: instructionNode,\n instructionParseFunction: nameApi.instructionParseFunction(instructionNode.name),\n instructionParsedType: nameApi.instructionParsedType(instructionNode.name),\n minimumNumberOfAccounts,\n programAddressConstant,\n }),\n f => mergeFragmentImports(f, [dataTypeFragment.imports]),\n f => addFragmentImports(f, 'generatedPrograms', [programAddressConstant]),\n f => addFragmentImports(f, 'solanaInstructions', ['type Instruction']),\n hasAccounts\n ? f => addFragmentImports(f, 'solanaInstructions', ['type InstructionWithAccounts', 'type AccountMeta'])\n : f => f,\n hasData\n ? f =>\n addFragmentImports(\n addFragmentImports(f, 'solanaInstructions', ['type InstructionWithData']),\n 'solanaCodecsCore',\n ['type ReadonlyUint8Array'],\n )\n : f => f,\n );\n}\n","import { InstructionNode, pascalCase } from '@codama/nodes';\nimport { mapFragmentContent } from '@codama/renderers-core';\nimport { findProgramNodeFromPath, getLastNodeFromPath, NodePath, pipe } from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { addFragmentImports, Fragment, fragmentFromTemplate, mergeFragmentImports, mergeFragments } from '../utils';\nimport { getInstructionAccountMetaFragment } from './instructionAccountMeta';\nimport { getInstructionAccountTypeParamFragment } from './instructionAccountTypeParam';\n\nexport function getInstructionTypeFragment(\n scope: Pick<GlobalFragmentScope, 'customInstructionData' | 'linkables' | 'nameApi'> & {\n instructionPath: NodePath<InstructionNode>;\n },\n): Fragment {\n const { instructionPath, nameApi, customInstructionData } = scope;\n const instructionNode = getLastNodeFromPath(instructionPath);\n const programNode = findProgramNodeFromPath(instructionPath)!;\n const hasAccounts = instructionNode.accounts.length > 0;\n const customData = customInstructionData.get(instructionNode.name);\n const hasData = !!customData || instructionNode.arguments.length > 0;\n const instructionDataName = nameApi.instructionDataType(instructionNode.name);\n const programAddressConstant = nameApi.programAddressConstant(programNode.name);\n const dataType = customData ? pascalCase(customData.importAs) : pascalCase(instructionDataName);\n const accountTypeParamsFragment = mergeFragments(\n instructionNode.accounts.map(account =>\n getInstructionAccountTypeParamFragment({\n ...scope,\n allowAccountMeta: true,\n instructionAccountPath: [...instructionPath, account],\n }),\n ),\n renders => renders.join(', '),\n );\n const usesLegacyOptionalAccounts = instructionNode.optionalAccountStrategy === 'omitted';\n const accountMetasFragment = mergeFragments(\n instructionNode.accounts.map(account =>\n mapFragmentContent(getInstructionAccountMetaFragment(account), c => {\n const typeParam = `TAccount${pascalCase(account.name)}`;\n const isLegacyOptional = account.isOptional && usesLegacyOptionalAccounts;\n const type = `${typeParam} extends string ? ${c} : ${typeParam}`;\n if (!isLegacyOptional) return type;\n return `...(${typeParam} extends undefined ? [] : [${type}])`;\n }),\n ),\n c => c.join(', '),\n );\n\n const fragment = pipe(\n fragmentFromTemplate('instructionType.njk', {\n accountMetas: accountMetasFragment.content,\n accountTypeParams: accountTypeParamsFragment.content,\n dataType,\n hasAccounts,\n hasData,\n instruction: instructionNode,\n instructionType: nameApi.instructionType(instructionNode.name),\n programAddressConstant,\n }),\n f => mergeFragmentImports(f, [accountTypeParamsFragment.imports, accountMetasFragment.imports]),\n f => addFragmentImports(f, 'generatedPrograms', [programAddressConstant]),\n f =>\n addFragmentImports(f, 'solanaInstructions', [\n 'type AccountMeta',\n 'type Instruction',\n 'type InstructionWithAccounts',\n ...(hasData ? ['type InstructionWithData'] : []),\n ]),\n );\n\n // TODO: if link, add import for data type. Unless we don't need to inject the data type in InstructionWithData.\n\n return fragment;\n}\n","import { isNode, isNodeFilter, PdaNode } from '@codama/nodes';\nimport { findProgramNodeFromPath, getLastNodeFromPath, NodePath, pipe, visit } from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { ImportMap } from '../ImportMap';\nimport { addFragmentImports, Fragment, fragmentFromTemplate, mergeFragmentImports } from '../utils';\n\nexport function getPdaFunctionFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi' | 'typeManifestVisitor'> & {\n pdaPath: NodePath<PdaNode>;\n },\n): Fragment {\n const { pdaPath, typeManifestVisitor, nameApi } = scope;\n const pdaNode = getLastNodeFromPath(pdaPath);\n const programNode = findProgramNodeFromPath(pdaPath)!;\n\n // Seeds.\n const imports = new ImportMap();\n const seeds = pdaNode.seeds.map(seed => {\n if (isNode(seed, 'variablePdaSeedNode')) {\n const seedManifest = visit(seed.type, typeManifestVisitor);\n imports.mergeWith(seedManifest.looseType, seedManifest.encoder);\n return { ...seed, typeManifest: seedManifest };\n }\n if (isNode(seed.value, 'programIdValueNode')) {\n imports.add('solanaAddresses', 'getAddressEncoder');\n return seed;\n }\n const seedManifest = visit(seed.type, typeManifestVisitor);\n imports.mergeWith(seedManifest.encoder);\n const valueManifest = visit(seed.value, typeManifestVisitor).value;\n imports.mergeWith(valueManifest.imports);\n return { ...seed, typeManifest: seedManifest, valueManifest };\n });\n const hasVariableSeeds = pdaNode.seeds.filter(isNodeFilter('variablePdaSeedNode')).length > 0;\n\n return pipe(\n fragmentFromTemplate('pdaFunction.njk', {\n findPdaFunction: nameApi.pdaFindFunction(pdaNode.name),\n hasVariableSeeds,\n pdaDocs: pdaNode.docs,\n pdaSeedsType: nameApi.pdaSeedsType(pdaNode.name),\n programAddress: pdaNode.programId ?? programNode.publicKey,\n seeds,\n }),\n f => mergeFragmentImports(f, [imports]),\n f =>\n addFragmentImports(f, 'solanaAddresses', [\n 'type Address',\n 'getProgramDerivedAddress',\n 'type ProgramDerivedAddress',\n ]),\n );\n}\n","import { ProgramNode } from '@codama/nodes';\nimport { pipe } from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { addFragmentImports, Fragment, fragmentFromTemplate } from '../utils';\n\nexport function getProgramFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi'> & {\n programNode: ProgramNode;\n },\n): Fragment {\n const { programNode, nameApi } = scope;\n\n return pipe(\n fragmentFromTemplate('program.njk', {\n program: programNode,\n programAddressConstant: nameApi.programAddressConstant(programNode.name),\n }),\n f => addFragmentImports(f, 'solanaAddresses', ['type Address']),\n );\n}\n","import { ProgramNode, resolveNestedTypeNode } from '@codama/nodes';\nimport { mapFragmentContent } from '@codama/renderers-core';\nimport { pipe } from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { addFragmentImports, Fragment, fragment, mergeFragments } from '../utils';\nimport { getDiscriminatorConditionFragment } from './discriminatorCondition';\n\nexport function getProgramAccountsFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi' | 'typeManifestVisitor'> & {\n programNode: ProgramNode;\n },\n): Fragment {\n if (scope.programNode.accounts.length === 0) return fragment('');\n return mergeFragments(\n [getProgramAccountsEnumFragment(scope), getProgramAccountsIdentifierFunctionFragment(scope)],\n c => `${c.join('\\n\\n')}\\n`,\n );\n}\n\nfunction getProgramAccountsEnumFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi'> & {\n programNode: ProgramNode;\n },\n): Fragment {\n const { programNode, nameApi } = scope;\n const programAccountsEnum = nameApi.programAccountsEnum(programNode.name);\n const programAccountsEnumVariants = programNode.accounts.map(account =>\n nameApi.programAccountsEnumVariant(account.name),\n );\n return fragment(`export enum ${programAccountsEnum} { ` + `${programAccountsEnumVariants.join(', ')}` + ` }`);\n}\n\nfunction getProgramAccountsIdentifierFunctionFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi' | 'typeManifestVisitor'> & {\n programNode: ProgramNode;\n },\n): Fragment {\n const { programNode, nameApi } = scope;\n const accountsWithDiscriminators = programNode.accounts.filter(\n account => (account.discriminators ?? []).length > 0,\n );\n const hasAccountDiscriminators = accountsWithDiscriminators.length > 0;\n if (!hasAccountDiscriminators) return fragment('');\n\n const programAccountsEnum = nameApi.programAccountsEnum(programNode.name);\n const programAccountsIdentifierFunction = nameApi.programAccountsIdentifierFunction(programNode.name);\n\n return pipe(\n mergeFragments(\n accountsWithDiscriminators.map((account): Fragment => {\n const variant = nameApi.programAccountsEnumVariant(account.name);\n return getDiscriminatorConditionFragment({\n ...scope,\n dataName: 'data',\n discriminators: account.discriminators ?? [],\n ifTrue: `return ${programAccountsEnum}.${variant};`,\n struct: resolveNestedTypeNode(account.data),\n });\n }),\n c => c.join('\\n'),\n ),\n f =>\n mapFragmentContent(\n f,\n discriminators =>\n `export function ${programAccountsIdentifierFunction}(` +\n `account: { data: ReadonlyUint8Array } | ReadonlyUint8Array` +\n `): ${programAccountsEnum} {\\n` +\n `const data = 'data' in account ? account.data : account;\\n` +\n `${discriminators}\\n` +\n `throw new Error(\"The provided account could not be identified as a ${programNode.name} account.\")\\n` +\n `}`,\n ),\n f => addFragmentImports(f, 'solanaCodecsCore', ['type ReadonlyUint8Array']),\n );\n}\n","import { ProgramNode } from '@codama/nodes';\nimport { pipe } from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { addFragmentImports, Fragment, fragmentFromTemplate } from '../utils';\n\nexport function getProgramErrorsFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi'> & {\n programNode: ProgramNode;\n },\n): Fragment {\n const { programNode, nameApi } = scope;\n const programAddressConstant = nameApi.programAddressConstant(programNode.name);\n return pipe(\n fragmentFromTemplate('programErrors.njk', {\n errors: programNode.errors,\n escapeProgramErrorMessage: (message: string) => message.replace(/`/g, '\\\\`'),\n getProgramErrorConstant: (name: string) =>\n nameApi.programErrorConstantPrefix(programNode.name) + nameApi.programErrorConstant(name),\n programAddressConstant,\n programErrorMessagesMap: nameApi.programErrorMessagesMap(programNode.name),\n programErrorUnion: nameApi.programErrorUnion(programNode.name),\n programGetErrorMessageFunction: nameApi.programGetErrorMessageFunction(programNode.name),\n programIsErrorFunction: nameApi.programIsErrorFunction(programNode.name),\n }),\n f => addFragmentImports(f, 'generatedPrograms', [programAddressConstant]),\n f => addFragmentImports(f, 'solanaPrograms', ['isProgramError']),\n f =>\n addFragmentImports(f, 'solanaErrors', ['type SolanaError', 'type SOLANA_ERROR__INSTRUCTION_ERROR__CUSTOM']),\n f => addFragmentImports(f, 'solanaAddresses', ['type Address']),\n );\n}\n","import {\n getAllInstructionsWithSubs,\n InstructionNode,\n ProgramNode,\n structTypeNodeFromInstructionArgumentNodes,\n} from '@codama/nodes';\nimport { mapFragmentContent } from '@codama/renderers-core';\nimport { pipe } from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { addFragmentImports, Fragment, fragment, mergeFragments } from '../utils';\nimport { getDiscriminatorConditionFragment } from './discriminatorCondition';\n\nexport function getProgramInstructionsFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi' | 'renderParentInstructions' | 'typeManifestVisitor'> & {\n programNode: ProgramNode;\n },\n): Fragment {\n if (scope.programNode.instructions.length === 0) return fragment('');\n const allInstructions = getAllInstructionsWithSubs(scope.programNode, {\n leavesOnly: !scope.renderParentInstructions,\n subInstructionsFirst: true,\n });\n const scopeWithInstructions = { ...scope, allInstructions };\n return mergeFragments(\n [\n getProgramInstructionsEnumFragment(scopeWithInstructions),\n getProgramInstructionsIdentifierFunctionFragment(scopeWithInstructions),\n getProgramInstructionsParsedUnionTypeFragment(scopeWithInstructions),\n ],\n c => `${c.join('\\n\\n')}\\n`,\n );\n}\n\nfunction getProgramInstructionsEnumFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi'> & {\n allInstructions: InstructionNode[];\n programNode: ProgramNode;\n },\n): Fragment {\n const { programNode, allInstructions, nameApi } = scope;\n const programInstructionsEnum = nameApi.programInstructionsEnum(programNode.name);\n const programInstructionsEnumVariants = allInstructions.map(instruction =>\n nameApi.programInstructionsEnumVariant(instruction.name),\n );\n return fragment(\n `export enum ${programInstructionsEnum} { ` + `${programInstructionsEnumVariants.join(', ')}` + ` }`,\n );\n}\n\nfunction getProgramInstructionsIdentifierFunctionFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi' | 'typeManifestVisitor'> & {\n allInstructions: InstructionNode[];\n programNode: ProgramNode;\n },\n): Fragment {\n const { programNode, nameApi, allInstructions } = scope;\n const instructionsWithDiscriminators = allInstructions.filter(\n instruction => (instruction.discriminators ?? []).length > 0,\n );\n const hasInstructionDiscriminators = instructionsWithDiscriminators.length > 0;\n if (!hasInstructionDiscriminators) return fragment('');\n\n const programInstructionsEnum = nameApi.programInstructionsEnum(programNode.name);\n const programInstructionsIdentifierFunction = nameApi.programInstructionsIdentifierFunction(programNode.name);\n const discriminatorsFragment = mergeFragments(\n instructionsWithDiscriminators.map((instruction): Fragment => {\n const variant = nameApi.programInstructionsEnumVariant(instruction.name);\n return getDiscriminatorConditionFragment({\n ...scope,\n dataName: 'data',\n discriminators: instruction.discriminators ?? [],\n ifTrue: `return ${programInstructionsEnum}.${variant};`,\n struct: structTypeNodeFromInstructionArgumentNodes(instruction.arguments),\n });\n }),\n c => c.join('\\n'),\n );\n\n return pipe(\n discriminatorsFragment,\n f =>\n mapFragmentContent(\n f,\n discriminators =>\n `export function ${programInstructionsIdentifierFunction}(` +\n `instruction: { data: ReadonlyUint8Array } | ReadonlyUint8Array` +\n `): ${programInstructionsEnum} {\\n` +\n `const data = 'data' in instruction ? instruction.data : instruction;\\n` +\n `${discriminators}\\n` +\n `throw new Error(\"The provided instruction could not be identified as a ${programNode.name} instruction.\")\\n` +\n `}`,\n ),\n f => addFragmentImports(f, 'solanaCodecsCore', ['type ReadonlyUint8Array']),\n );\n}\n\nfunction getProgramInstructionsParsedUnionTypeFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi'> & {\n allInstructions: InstructionNode[];\n programNode: ProgramNode;\n },\n): Fragment {\n const { programNode, allInstructions, nameApi } = scope;\n\n const programAddress = programNode.publicKey;\n\n const programInstructionsType = nameApi.programInstructionsParsedUnionType(programNode.name);\n const programInstructionsEnum = nameApi.programInstructionsEnum(programNode.name);\n\n const typeVariants = allInstructions.map((instruction): Fragment => {\n const instructionEnumVariant = nameApi.programInstructionsEnumVariant(instruction.name);\n const parsedInstructionType = nameApi.instructionParsedType(instruction.name);\n\n return pipe(\n fragment(\n `| { instructionType: ${programInstructionsEnum}.${instructionEnumVariant} } & ${parsedInstructionType}<TProgram>`,\n ),\n f => addFragmentImports(f, 'generatedInstructions', [`type ${parsedInstructionType}`]),\n );\n });\n\n return mergeFragments(\n [\n fragment(`export type ${programInstructionsType}<TProgram extends string = '${programAddress}'> =`),\n ...typeVariants,\n ],\n c => c.join('\\n'),\n );\n}\n","import { isDataEnum, isNode, TypeNode } from '@codama/nodes';\nimport { pipe } from '@codama/visitors-core';\n\nimport type { GlobalFragmentScope } from '../getRenderMapVisitor';\nimport { addFragmentImports, Fragment, fragment, fragmentFromTemplate } from '../utils';\n\nexport function getTypeDiscriminatedUnionHelpersFragment(\n scope: Pick<GlobalFragmentScope, 'nameApi'> & {\n name: string;\n typeNode: TypeNode;\n },\n): Fragment {\n const { name, typeNode, nameApi } = scope;\n const isDiscriminatedUnion = isNode(typeNode, 'enumTypeNode') && isDataEnum(typeNode);\n\n if (!isDiscriminatedUnion) {\n return fragment('');\n }\n\n return pipe(\n fragmentFromTemplate('typeDiscriminatedUnionHelpers.njk', {\n discriminatedUnionDiscriminator: nameApi.discriminatedUnionDiscriminator(name),\n discriminatedUnionFunction: nameApi.discriminatedUnionFunction(name),\n getVariant: (variant: string) => nameApi.discriminatedUnionVariant(variant),\n isDiscriminatedUnionFunction: nameApi.isDiscriminatedUnionFunction(name),\n looseName: nameApi.dataArgsType(name),\n strictName: nameApi.dataType(name),\n typeNode,\n }),\n f =>\n addFragmentImports(f, 'solanaCodecsDataStructures', [\n 'type GetDiscriminatedUnionVariantContent',\n 'type GetDiscriminatedUnionVariant',\n ]),\n );\n}\n","import {\n camelCase,\n CamelCaseString,\n CountNode,\n isNode,\n isNodeFilter,\n isScalarEnum,\n parseDocs,\n REGISTERED_TYPE_NODE_KINDS,\n REGISTERED_VALUE_NODE_KINDS,\n resolveNestedTypeNode,\n structFieldTypeNode,\n structTypeNode,\n structTypeNodeFromInstructionArgumentNodes,\n TypeNode,\n} from '@codama/nodes';\nimport { mapFragmentContent, setFragmentContent } from '@codama/renderers-core';\nimport {\n extendVisitor,\n findLastNodeFromPath,\n LinkableDictionary,\n NodeStack,\n pipe,\n recordNodeStackVisitor,\n staticVisitor,\n visit,\n Visitor,\n} from '@codama/visitors-core';\n\nimport { ImportMap } from './ImportMap';\nimport { NameApi } from './nameTransformers';\nimport { mergeTypeManifests, TypeManifest, typeManifest } from './TypeManifest';\nimport {\n addFragmentImports,\n Fragment,\n fragment,\n getBytesFromBytesValueNode,\n GetImportFromFunction,\n jsDocblock,\n mergeFragmentImports,\n mergeFragments,\n ParsedCustomDataOptions,\n} from './utils';\n\nexport type TypeManifestVisitor = ReturnType<typeof getTypeManifestVisitor>;\n\nexport function getTypeManifestVisitor(input: {\n customAccountData: ParsedCustomDataOptions;\n customInstructionData: ParsedCustomDataOptions;\n getImportFrom: GetImportFromFunction;\n linkables: LinkableDictionary;\n nameApi: NameApi;\n nonScalarEnums: CamelCaseString[];\n stack?: NodeStack;\n}) {\n const { nameApi, linkables, nonScalarEnums, customAccountData, customInstructionData, getImportFrom } = input;\n const stack = input.stack ?? new NodeStack();\n let parentName: { loose: string; strict: string } | null = null;\n\n return pipe(\n staticVisitor(() => typeManifest(), {\n keys: [\n ...REGISTERED_TYPE_NODE_KINDS,\n ...REGISTERED_VALUE_NODE_KINDS,\n 'definedTypeLinkNode',\n 'definedTypeNode',\n 'accountNode',\n 'instructionNode',\n ],\n }),\n visitor =>\n extendVisitor(visitor, {\n visitAccount(account, { self }) {\n parentName = {\n loose: nameApi.dataArgsType(account.name),\n strict: nameApi.dataType(account.name),\n };\n const link = customAccountData.get(account.name)?.linkNode;\n const manifest = link ? visit(link, self) : visit(account.data, self);\n parentName = null;\n return manifest;\n },\n\n visitAmountType(amountType, { self }) {\n return visit(amountType.number, self);\n },\n\n visitArrayType(arrayType, { self }) {\n const childManifest = visit(arrayType.item, self);\n const sizeManifest = getArrayLikeSizeOption(arrayType.count, self);\n const encoderOptions = sizeManifest.encoder.content ? `, { ${sizeManifest.encoder.content} }` : '';\n const decoderOptions = sizeManifest.decoder.content ? `, { ${sizeManifest.decoder.content} }` : '';\n\n return typeManifest({\n ...childManifest,\n decoder: pipe(\n childManifest.decoder,\n f => mapFragmentContent(f, c => `getArrayDecoder(${c + decoderOptions})`),\n f => mergeFragmentImports(f, [sizeManifest.decoder.imports]),\n f => addFragmentImports(f, 'solanaCodecsDataStructures', ['getArrayDecoder']),\n ),\n encoder: pipe(\n childManifest.encoder,\n f => mapFragmentContent(f, c => `getArrayEncoder(${c + encoderOptions})`),\n f => mergeFragmentImports(f, [sizeManifest.encoder.imports]),\n f => addFragmentImports(f, 'solanaCodecsDataStructures', ['getArrayEncoder']),\n ),\n looseType: mapFragmentContent(childManifest.looseType, c => `Array<${c}>`),\n strictType: mapFragmentContent(childManifest.strictType, c => `Array<${c}>`),\n });\n },\n\n visitArrayValue(node, { self }) {\n return mergeTypeManifests(\n node.items.map(v => visit(v, self)),\n { mergeValues: renders => `[${renders.join(', ')}]` },\n );\n },\n\n visitBooleanType(booleanType, { self }) {\n const encoderImports = new ImportMap().add('solanaCodecsDataStructures', 'getBooleanEncoder');\n const decoderImports = new ImportMap().add('solanaCodecsDataStructures', 'getBooleanDecoder');\n\n let sizeEncoder = '';\n let sizeDecoder = '';\n const resolvedSize = resolveNestedTypeNode(booleanType.size);\n if (resolvedSize.format !== 'u8' || resolvedSize.endian !== 'le') {\n const size = visit(booleanType.size, self);\n encoderImports.mergeWith(size.encoder);\n decoderImports.mergeWith(size.decoder);\n sizeEncoder = `{ size: ${size.encoder.content} }`;\n sizeDecoder = `{ size: ${size.decoder.content} }`;\n }\n\n return typeManifest({\n decoder: pipe(fragment(`getBooleanDecoder(${sizeDecoder})`), f =>\n mergeFragmentImports(f, [decoderImports]),\n ),\n encoder: pipe(fragment(`getBooleanEncoder(${sizeEncoder})`), f =>\n mergeFragmentImports(f, [encoderImports]),\n ),\n looseType: fragment('boolean'),\n strictType: fragment('boolean'),\n });\n },\n\n visitBooleanValue(node) {\n return typeManifest({\n value: fragment(JSON.stringify(node.boolean)),\n });\n },\n\n visitBytesType() {\n const readonlyUint8Array = pipe(fragment('ReadonlyUint8Array'), f =>\n addFragmentImports(f, 'solanaCodecsCore', ['type ReadonlyUint8Array']),\n );\n return typeManifest({\n decoder: pipe(fragment(`getBytesDecoder()`), f =>\n addFragmentImports(f, 'solanaCodecsDataStructures', ['getBytesDecoder']),\n ),\n encoder: pipe(fragment(`getBytesEncoder()`), f =>\n addFragmentImports(f, 'solanaCodecsDataStructures', ['getBytesEncoder']),\n ),\n looseType: readonlyUint8Array,\n strictType: readonlyUint8Array,\n });\n },\n\n visitBytesValue(node) {\n const bytes = getBytesFromBytesValueNode(node);\n return typeManifest({\n value: fragment(`new Uint8Array([${Array.from(bytes).join(', ')}])`),\n });\n },\n\n visitConstantValue(node, { self }) {\n if (isNode(node.type, 'bytesTypeNode') && isNode(node.value, 'bytesValueNode')) {\n return visit(node.value, self);\n }\n return typeManifest({\n value: mergeFragments(\n [visit(node.type, self).encoder, visit(node.value, self).value],\n ([encoderFunction, value]) => `${encoderFunction}.encode(${value})`,\n ),\n });\n },\n\n visitDateTimeType(dateTimeType, { self }) {\n return visit(dateTimeType.number, self);\n },\n\n visitDefinedType(definedType, { self }) {\n parentName = {\n loose: nameApi.dataArgsType(definedType.name),\n strict: nameApi.dataType(definedType.name),\n };\n const manifest = visit(definedType.type, self);\n parentName = null;\n return manifest;\n },\n\n visitDefinedTypeLink(node) {\n const strictName = nameApi.dataType(node.name);\n const looseName = nameApi.dataArgsType(node.name);\n const encoderFunction = nameApi.encoderFunction(node.name);\n const decoderFunction = nameApi.decoderFunction(node.name);\n const importFrom = getImportFrom(node);\n\n return typeManifest({\n decoder: pipe(fragment(`${decoderFunction}()`), f =>\n addFragmentImports(f, importFrom, [decoderFunction]),\n ),\n encoder: pipe(fragment(`${encoderFunction}()`), f =>\n addFragmentImports(f, importFrom, [encoderFunction]),\n ),\n looseType: pipe(fragment(looseName), f =>\n addFragmentImports(f, importFrom, [`type ${looseName}`]),\n ),\n strictType: pipe(fragment(strictName), f =>\n addFragmentImports(f, importFrom, [`type ${strictName}`]),\n ),\n });\n },\n\n visitEnumEmptyVariantType(enumEmptyVariantType) {\n const discriminator = nameApi.discriminatedUnionDiscriminator(camelCase(parentName?.strict ?? ''));\n const name = nameApi.discriminatedUnionVariant(enumEmptyVariantType.name);\n const kindAttribute = `${discriminator}: \"${name}\"`;\n return typeManifest({\n decoder: pipe(fragment(`['${name}', getUnitDecoder()]`), f =>\n addFragmentImports(f, 'solanaCodecsDataStructures', ['getUnitDecoder']),\n ),\n encoder: pipe(fragment(`['${name}', getUnitEncoder()]`), f =>\n addFragmentImports(f, 'solanaCodecsDataStructures', ['getUnitEncoder']),\n ),\n looseType: fragment(`{ ${kindAttribute} }`),\n strictType: fragment(`{ ${kindAttribute} }`),\n });\n },\n\n visitEnumStructVariantType(enumStructVariantType, { self }) {\n const currentParentName = parentName;\n const discriminator = nameApi.discriminatedUnionDiscriminator(\n camelCase(currentParentName?.strict ?? ''),\n );\n const name = nameApi.discriminatedUnionVariant(enumStructVariantType.name);\n const kindAttribute = `${discriminator}: \"${name}\"`;\n\n parentName = null;\n const structManifest = visit(enumStructVariantType.struct, self);\n parentName = currentParentName;\n\n return typeManifest({\n ...structManifest,\n decoder: pipe(structManifest.decoder, f => mapFragmentContent(f, c => `['${name}', ${c}]`)),\n encoder: pipe(structManifest.encoder, f => mapFragmentContent(f, c => `['${name}', ${c}]`)),\n looseType: pipe(structManifest.looseType, f =>\n mapFragmentContent(f, c => `{ ${kindAttribute},${c.slice(1, -1)}}`),\n ),\n strictType: pipe(structManifest.strictType, f =>\n mapFragmentContent(f, c => `{ ${kindAttribute},${c.slice(1, -1)}}`),\n ),\n });\n },\n\n visitEnumTupleVariantType(enumTupleVariantType, { self }) {\n const currentParentName = parentName;\n const discriminator = nameApi.discriminatedUnionDiscriminator(\n camelCase(currentParentName?.strict ?? ''),\n );\n const name = nameApi.discriminatedUnionVariant(enumTupleVariantType.name);\n const kindAttribute = `${discriminator}: \"${name}\"`;\n const struct = structTypeNode([\n structFieldTypeNode({\n name: 'fields',\n type: enumTupleVariantType.tuple,\n }),\n ]);\n\n parentName = null;\n const structManifest = visit(struct, self);\n parentName = currentParentName;\n\n return typeManifest({\n ...structManifest,\n decoder: pipe(structManifest.decoder, f => mapFragmentContent(f, c => `['${name}', ${c}]`)),\n encoder: pipe(structManifest.encoder, f => mapFragmentContent(f, c => `['${name}', ${c}]`)),\n looseType: pipe(structManifest.looseType, f =>\n mapFragmentContent(f, c => `{ ${kindAttribute},${c.slice(1, -1)}}`),\n ),\n strictType: pipe(structManifest.strictType, f =>\n mapFragmentContent(f, c => `{ ${kindAttribute},${c.slice(1, -1)}}`),\n ),\n });\n },\n\n visitEnumType(enumType, { self }) {\n const currentParentName = parentName;\n const encoderImports = new ImportMap();\n const decoderImports = new ImportMap();\n const encoderOptions: string[] = [];\n const decoderOptions: string[] = [];\n\n const enumSize = resolveNestedTypeNode(enumType.size);\n if (enumSize.format !== 'u8' || enumSize.endian !== 'le') {\n const sizeManifest = visit(enumType.size, self);\n encoderImports.mergeWith(sizeManifest.encoder);\n decoderImports.mergeWith(sizeManifest.decoder);\n encoderOptions.push(`size: ${sizeManifest.encoder.content}`);\n decoderOptions.push(`size: ${sizeManifest.decoder.content}`);\n }\n\n const discriminator = nameApi.discriminatedUnionDiscriminator(\n camelCase(currentParentName?.strict ?? ''),\n );\n if (!isScalarEnum(enumType) && discriminator !== '__kind') {\n encoderOptions.push(`discriminator: '${discriminator}'`);\n decoderOptions.push(`discriminator: '${discriminator}'`);\n }\n\n const encoderOptionsAsString =\n encoderOptions.length > 0 ? `, { ${encoderOptions.join(', ')} }` : '';\n const decoderOptionsAsString =\n decoderOptions.length > 0 ? `, { ${decoderOptions.join(', ')} }` : '';\n\n if (isScalarEnum(enumType)) {\n if (currentParentName === null) {\n throw new Error(\n 'Scalar enums cannot be inlined and must be introduced ' +\n 'via a defined type. Ensure you are not inlining a ' +\n 'defined type that is a scalar enum through a visitor.',\n );\n }\n const variantNames = enumType.variants.map(({ name }) => nameApi.enumVariant(name));\n return typeManifest({\n decoder: pipe(\n fragment(`getEnumDecoder(${currentParentName.strict + decoderOptionsAsString})`),\n f => mergeFragmentImports(f, [decoderImports]),\n f => addFragmentImports(f, 'solanaCodecsDataStructures', ['getEnumDecoder']),\n ),\n encoder: pipe(\n fragment(`getEnumEncoder(${currentParentName.strict + encoderOptionsAsString})`),\n f => mergeFragmentImports(f, [encoderImports]),\n f => addFragmentImports(f, 'solanaCodecsDataStructures', ['getEnumEncoder']),\n ),\n isEnum: true,\n looseType: fragment(`{ ${variantNames.join(', ')} }`),\n strictType: fragment(`{ ${variantNames.join(', ')} }`),\n });\n }\n\n const mergedManifest = mergeTypeManifests(\n enumType.variants.map(variant => visit(variant, self)),\n {\n mergeCodecs: renders => renders.join(', '),\n mergeTypes: renders => renders.join(' | '),\n },\n );\n\n return typeManifest({\n ...mergedManifest,\n decoder: pipe(\n mergedManifest.decoder,\n f =>\n mapFragmentContent(\n f,\n c => `getDiscriminatedUnionDecoder([${c}]${decoderOptionsAsString})`,\n ),\n f => mergeFragmentImports(f, [decoderImports]),\n f => addFragmentImports(f, 'solanaCodecsDataStructures', ['getDiscriminatedUnionDecoder']),\n ),\n encoder: pipe(\n mergedManifest.encoder,\n f =>\n mapFragmentContent(\n f,\n c => `getDiscriminatedUnionEncoder([${c}]${encoderOptionsAsString})`,\n ),\n f => mergeFragmentImports(f, [encoderImports]),\n f => addFragmentImports(f, 'solanaCodecsDataStructures', ['getDiscriminatedUnionEncoder']),\n ),\n });\n },\n\n visitEnumValue(node, { self }) {\n const manifest = typeManifest();\n const enumName = nameApi.dataType(node.enum.name);\n const enumFunction = nameApi.discriminatedUnionFunction(node.enum.name);\n const importFrom = getImportFrom(node.enum);\n\n const enumNode = linkables.get([...stack.getPath(), node.enum])?.type;\n const isScalar =\n enumNode && isNode(enumNode, 'enumTypeNode')\n ? isScalarEnum(enumNode)\n : !nonScalarEnums.includes(node.enum.name);\n\n if (!node.value && isScalar) {\n const variantName = nameApi.enumVariant(node.variant);\n return typeManifest({\n ...manifest,\n value: pipe(\n manifest.value,\n f => setFragmentContent(f, `${enumName}.${variantName}`),\n f => addFragmentImports(f, importFrom, [enumName]),\n ),\n });\n }\n\n const variantName = nameApi.discriminatedUnionVariant(node.variant);\n if (!node.value) {\n return typeManifest({\n ...manifest,\n value: pipe(\n manifest.value,\n f => setFragmentContent(f, `${enumFunction}('${variantName}')`),\n f => addFragmentImports(f, importFrom, [enumFunction]),\n ),\n });\n }\n\n return typeManifest({\n ...manifest,\n value: pipe(\n visit(node.value, self).value,\n f => mapFragmentContent(f, c => `${enumFunction}('${variantName}', ${c})`),\n f => addFragmentImports(f, importFrom, [enumFunction]),\n ),\n });\n },\n\n visitFixedSizeType(node, { self }) {\n const manifest = visit(node.type, self);\n return typeManifest({\n ...manifest,\n decoder: pipe(\n manifest.decoder,\n f => mapFragmentContent(f, c => `fixDecoderSize(${c}, ${node.size})`),\n f => addFragmentImports(f, 'solanaCodecsCore', ['fixDecoderSize']),\n ),\n encoder: pipe(\n manifest.encoder,\n f => mapFragmentContent(f, c => `fixEncoderSize(${c}, ${node.size})`),\n f => addFragmentImports(f, 'solanaCodecsCore', ['fixEncoderSize']),\n ),\n });\n },\n\n visitHiddenPrefixType(node, { self }) {\n const manifest = visit(node.type, self);\n const prefixes = node.prefix.map(c => visit(c, self).value);\n const prefixEncoders = pipe(\n mergeFragments(prefixes, contents => contents.map(c => `getConstantEncoder(${c})`).join(', ')),\n f => addFragmentImports(f, 'solanaCodecsCore', ['getConstantEncoder']),\n );\n const prefixDecoders = pipe(\n mergeFragments(prefixes, contents => contents.map(c => `getConstantDecoder(${c})`).join(', ')),\n f => addFragmentImports(f, 'solanaCodecsCore', ['getConstantDecoder']),\n );\n\n return typeManifest({\n ...manifest,\n decoder: pipe(\n mergeFragments(\n [manifest.decoder, prefixDecoders],\n ([child, prefixes]) => `getHiddenPrefixDecoder(${child}, [${prefixes}])`,\n ),\n f => addFragmentImports(f, 'solanaCodecsDataStructures', ['getHiddenPrefixDecoder']),\n ),\n encoder: pipe(\n mergeFragments(\n [manifest.encoder, prefixEncoders],\n ([child, prefixes]) => `getHiddenPrefixEncoder(${child}, [${prefixes}])`,\n ),\n f => addFragmentImports(f, 'solanaCodecsDataStructures', ['getHiddenPrefixEncoder']),\n ),\n });\n },\n\n visitHiddenSuffixType(node, { self }) {\n const manifest = visit(node.type, self);\n const suffixes = node.suffix.map(c => visit(c, self).value);\n const suffixEncoders = pipe(\n mergeFragments(suffixes, contents => contents.map(c => `getConstantEncoder(${c})`).join(', ')),\n f => addFragmentImports(f, 'solanaCodecsCore', ['getConstantEncoder']),\n );\n const suffixDecoders = pipe(\n mergeFragments(suffixes, contents => contents.map(c => `getConstantDecoder(${c})`).join(', ')),\n f => addFragmentImports(f, 'solanaCodecsCore', ['getConstantDecoder']),\n );\n\n return typeManifest({\n ...manifest,\n decoder: pipe(\n mergeFragments(\n [manifest.decoder, suffixDecoders],\n ([child, suffixes]) => `getHiddenSuffixDecoder(${child}, [${suffixes}])`,\n ),\n f => addFragmentImports(f, 'solanaCodecsDataStructures', ['getHiddenSuffixDecoder']),\n ),\n encoder: pipe(\n mergeFragments(\n [manifest.encoder, suffixEncoders],\n ([child, suffixes]) => `getHiddenSuffixEncoder(${child}, [${suffixes}])`,\n ),\n f => addFragmentImports(f, 'solanaCodecsDataStructures', ['getHiddenSuffixEncoder']),\n ),\n });\n },\n\n visitInstruction(instruction, { self }) {\n const instructionDataName = nameApi.instructionDataType(instruction.name);\n parentName = {\n loose: nameApi.dataArgsType(instructionDataName),\n strict: nameApi.dataType(instructionDataName),\n };\n const link = customInstructionData.get(instruction.name)?.linkNode;\n const struct = structTypeNodeFromInstructionArgumentNodes(instruction.arguments);\n const manifest = link ? visit(link, self) : visit(struct, self);\n parentName = null;\n return manifest;\n },\n\n visitMapEntryValue(node, { self }) {\n return mergeTypeManifests([visit(node.key, self), visit(node.value, self)], {\n mergeValues: renders => `[${renders.join(', ')}]`,\n });\n },\n\n visitMapType(mapType, { self }) {\n const key = visit(mapType.key, self);\n const value = visit(mapType.value, self);\n const mergedManifest = mergeTypeManifests([key, value], {\n mergeCodecs: ([k, v]) => `${k}, ${v}`,\n mergeTypes: ([k, v]) => `Map<${k}, ${v}>`,\n });\n const sizeManifest = getArrayLikeSizeOption(mapType.count, self);\n const encoderOptions = sizeManifest.encoder.content ? `, { ${sizeManifest.encoder.content} }` : '';\n const decoderOptions = sizeManifest.decoder.content ? `, { ${sizeManifest.decoder.content} }` : '';\n\n return typeManifest({\n ...mergedManifest,\n decoder: pipe(\n mergedManifest.decoder,\n f => mapFragmentContent(f, c => `getMapDecoder(${c}${decoderOptions})`),\n f => addFragmentImports(f, 'solanaCodecsDataStructures', ['getMapDecoder']),\n ),\n encoder: pipe(\n mergedManifest.encoder,\n f => mapFragmentContent(f, c => `getMapEncoder(${c}${encoderOptions})`),\n f => addFragmentImports(f, 'solanaCodecsDataStructures', ['getMapEncoder']),\n ),\n });\n },\n\n visitMapValue(node, { self }) {\n const entryFragments = node.entries.map(entry => visit(entry, self));\n return mergeTypeManifests(entryFragments, {\n mergeValues: renders => `new Map([${renders.join(', ')}])`,\n });\n },\n\n visitNoneValue() {\n return typeManifest({\n value: pipe(fragment('none()'), f => addFragmentImports(f, 'solanaOptions', ['none'])),\n });\n },\n\n visitNumberType(numberType) {\n const encoderFunction = nameApi.encoderFunction(numberType.format);\n const decoderFunction = nameApi.decoderFunction(numberType.format);\n const isBigNumber = ['u64', 'u128', 'i64', 'i128'].includes(numberType.format);\n const encoderImports = new ImportMap().add('solanaCodecsNumbers', encoderFunction);\n const decoderImports = new ImportMap().add('solanaCodecsNumbers', decoderFunction);\n let endianness = '';\n if (numberType.endian === 'be') {\n encoderImports.add('solanaCodecsNumbers', 'Endian');\n decoderImports.add('solanaCodecsNumbers', 'Endian');\n endianness = '{ endian: Endian.Big }';\n }\n return typeManifest({\n decoder: pipe(fragment(`${decoderFunction}(${endianness})`), f =>\n mergeFragmentImports(f, [decoderImports]),\n ),\n encoder: pipe(fragment(`${encoderFunction}(${endianness})`), f =>\n mergeFragmentImports(f, [encoderImports]),\n ),\n looseType: fragment(isBigNumber ? 'number | bigint' : 'number'),\n strictType: fragment(isBigNumber ? 'bigint' : 'number'),\n });\n },\n\n visitNumberValue(node) {\n return typeManifest({\n value: fragment(JSON.stringify(node.number)),\n });\n },\n\n visitOptionType(optionType, { self }) {\n const childManifest = visit(optionType.item, self);\n const encoderOptions: string[] = [];\n const decoderOptions: string[] = [];\n const encoderImports = new ImportMap();\n const decoderImports = new ImportMap();\n\n // Prefix option.\n const optionPrefix = resolveNestedTypeNode(optionType.prefix);\n if (optionPrefix.format !== 'u8' || optionPrefix.endian !== 'le') {\n const prefixManifest = visit(optionType.prefix, self);\n encoderImports.mergeWith(prefixManifest.encoder);\n decoderImports.mergeWith(prefixManifest.decoder);\n encoderOptions.push(`prefix: ${prefixManifest.encoder.content}`);\n decoderOptions.push(`prefix: ${prefixManifest.decoder.content}`);\n }\n\n // Fixed option.\n if (optionType.fixed) {\n encoderOptions.push(`noneValue: \"zeroes\"`);\n decoderOptions.push(`noneValue: \"zeroes\"`);\n }\n\n const encoderOptionsAsString =\n encoderOptions.length > 0 ? `, { ${encoderOptions.join(', ')} }` : '';\n const decoderOptionsAsString =\n decoderOptions.length > 0 ? `, { ${decoderOptions.join(', ')} }` : '';\n\n return typeManifest({\n ...childManifest,\n decoder: pipe(\n childManifest.decoder,\n f => mapFragmentContent(f, c => `getOptionDecoder(${c + decoderOptionsAsString})`),\n f => addFragmentImports(f, 'solanaOptions', ['getOptionDecoder']),\n f => mergeFragmentImports(f, [decoderImports]),\n ),\n encoder: pipe(\n childManifest.encoder,\n f => mapFragmentContent(f, c => `getOptionEncoder(${c + encoderOptionsAsString})`),\n f => addFragmentImports(f, 'solanaOptions', ['getOptionEncoder']),\n f => mergeFragmentImports(f, [encoderImports]),\n ),\n looseType: pipe(\n childManifest.looseType,\n f => mapFragmentContent(f, c => `OptionOrNullable<${c}>`),\n f => addFragmentImports(f, 'solanaOptions', ['type OptionOrNullable']),\n ),\n strictType: pipe(\n childManifest.strictType,\n f => mapFragmentContent(f, c => `Option<${c}>`),\n f => addFragmentImports(f, 'solanaOptions', ['type Option']),\n ),\n });\n },\n\n visitPostOffsetType(node, { self }) {\n const manifest = visit(node.type, self);\n if (node.strategy === 'padded') {\n return typeManifest({\n ...manifest,\n decoder: pipe(\n manifest.decoder,\n f => mapFragmentContent(f, c => `padRightDecoder(${c}, ${node.offset})`),\n f => addFragmentImports(f, 'solanaCodecsCore', ['padRightDecoder']),\n ),\n encoder: pipe(\n manifest.encoder,\n f => mapFragmentContent(f, c => `padRightEncoder(${c}, ${node.offset})`),\n f => addFragmentImports(f, 'solanaCodecsCore', ['padRightEncoder']),\n ),\n });\n }\n\n const fn = (() => {\n switch (node.strategy) {\n case 'absolute':\n return node.offset < 0\n ? `({ wrapBytes }) => wrapBytes(${node.offset})`\n : `() => ${node.offset}`;\n case 'preOffset':\n return node.offset < 0\n ? `({ preOffset }) => preOffset ${node.offset}`\n : `({ preOffset }) => preOffset + ${node.offset}`;\n case 'relative':\n default:\n return node.offset < 0\n ? `({ postOffset }) => postOffset ${node.offset}`\n : `({ postOffset }) => postOffset + ${node.offset}`;\n }\n })();\n\n return typeManifest({\n ...manifest,\n decoder: pipe(\n manifest.decoder,\n f => mapFragmentContent(f, c => `offsetDecoder(${c}, { postOffset: ${fn} })`),\n f => addFragmentImports(f, 'solanaCodecsCore', ['offsetDecoder']),\n ),\n encoder: pipe(\n manifest.encoder,\n f => mapFragmentContent(f, c => `offsetEncoder(${c}, { postOffset: ${fn} })`),\n f => addFragmentImports(f, 'solanaCodecsCore', ['offsetEncoder']),\n ),\n });\n },\n\n visitPreOffsetType(node, { self }) {\n const manifest = visit(node.type, self);\n if (node.strategy === 'padded') {\n return typeManifest({\n ...manifest,\n decoder: pipe(\n manifest.decoder,\n f => mapFragmentContent(f, c => `padLeftDecoder(${c}, ${node.offset})`),\n f => addFragmentImports(f, 'solanaCodecsCore', ['padLeftDecoder']),\n ),\n encoder: pipe(\n manifest.encoder,\n f => mapFragmentContent(f, c => `padLeftEncoder(${c}, ${node.offset})`),\n f => addFragmentImports(f, 'solanaCodecsCore', ['padLeftEncoder']),\n ),\n });\n }\n\n const fn = (() => {\n switch (node.strategy) {\n case 'absolute':\n return node.offset < 0\n ? `({ wrapBytes }) => wrapBytes(${node.offset})`\n : `() => ${node.offset}`;\n case 'relative':\n default:\n return node.offset < 0\n ? `({ preOffset }) => preOffset ${node.offset}`\n : `({ preOffset }) => preOffset + ${node.offset}`;\n }\n })();\n\n return typeManifest({\n ...manifest,\n decoder: pipe(\n manifest.decoder,\n f => mapFragmentContent(f, c => `offsetDecoder(${c}, { preOffset: ${fn} })`),\n f => addFragmentImports(f, 'solanaCodecsCore', ['offsetDecoder']),\n ),\n encoder: pipe(\n manifest.encoder,\n f => mapFragmentContent(f, c => `offsetEncoder(${c}, { preOffset: ${fn} })`),\n f => addFragmentImports(f, 'solanaCodecsCore', ['offsetEncoder']),\n ),\n });\n },\n\n visitPublicKeyType() {\n const addressFragment = pipe(fragment('Address'), f =>\n addFragmentImports(f, 'solanaAddresses', ['type Address']),\n );\n return typeManifest({\n decoder: pipe(fragment('getAddressDecoder()'), f =>\n addFragmentImports(f, 'solanaAddresses', ['getAddressDecoder']),\n ),\n encoder: pipe(fragment('getAddressEncoder()'), f =>\n addFragmentImports(f, 'solanaAddresses', ['getAddressEncoder']),\n ),\n looseType: addressFragment,\n strictType: addressFragment,\n });\n },\n\n visitPublicKeyValue(node) {\n return typeManifest({\n value: pipe(fragment(`address(\"${node.publicKey}\")`), f =>\n addFragmentImports(f, 'solanaAddresses', ['address']),\n ),\n });\n },\n\n visitRemainderOptionType(node, { self }) {\n const childManifest = visit(node.item, self);\n const encoderOptions: string[] = ['prefix: null'];\n const decoderOptions: string[] = ['prefix: null'];\n\n const encoderOptionsAsString =\n encoderOptions.length > 0 ? `, { ${encoderOptions.join(', ')} }` : '';\n const decoderOptionsAsString =\n decoderOptions.length > 0 ? `, { ${decoderOptions.join(', ')} }` : '';\n\n return typeManifest({\n ...childManifest,\n decoder: pipe(\n childManifest.decoder,\n f => mapFragmentContent(f, c => `getOptionDecoder(${c + decoderOptionsAsString})`),\n f => addFragmentImports(f, 'solanaOptions', ['getOptionDecoder']),\n ),\n encoder: pipe(\n childManifest.encoder,\n f => mapFragmentContent(f, c => `getOptionEncoder(${c + encoderOptionsAsString})`),\n f => addFragmentImports(f, 'solanaOptions', ['getOptionEncoder']),\n ),\n looseType: pipe(\n childManifest.looseType,\n f => mapFragmentContent(f, c => `OptionOrNullable<${c}>`),\n f => addFragmentImports(f, 'solanaOptions', ['type OptionOrNullable']),\n ),\n strictType: pipe(\n childManifest.strictType,\n f => mapFragmentContent(f, c => `Option<${c}>`),\n f => addFragmentImports(f, 'solanaOptions', ['type Option']),\n ),\n });\n },\n\n visitSentinelType(node, { self }) {\n const manifest = visit(node.type, self);\n const sentinel = visit(node.sentinel, self).value;\n return typeManifest({\n ...manifest,\n decoder: pipe(\n mergeFragments(\n [manifest.decoder, sentinel],\n ([child, sentinel]) => `addDecoderSentinel(${child}, ${sentinel})`,\n ),\n f => addFragmentImports(f, 'solanaCodecsCore', ['addDecoderSentinel']),\n ),\n encoder: pipe(\n mergeFragments(\n [manifest.encoder, sentinel],\n ([child, sentinel]) => `addEncoderSentinel(${child}, ${sentinel})`,\n ),\n f => addFragmentImports(f, 'solanaCodecsCore', ['addEncoderSentinel']),\n ),\n });\n },\n\n visitSetType(setType, { self }) {\n const childManifest = visit(setType.item, self);\n const sizeManifest = getArrayLikeSizeOption(setType.count, self);\n const encoderOptions = sizeManifest.encoder.content ? `, { ${sizeManifest.encoder.content} }` : '';\n const decoderOptions = sizeManifest.decoder.content ? `, { ${sizeManifest.decoder.content} }` : '';\n\n return typeManifest({\n ...childManifest,\n decoder: pipe(\n childManifest.decoder,\n f => mapFragmentContent(f, c => `getSetDecoder(${c + decoderOptions})`),\n f => mergeFragmentImports(f, [sizeManifest.decoder.imports]),\n f => addFragmentImports(f, 'solanaCodecsDataStructures', ['getSetDecoder']),\n ),\n encoder: pipe(\n childManifest.encoder,\n f => mapFragmentContent(f, c => `getSetEncoder(${c + encoderOptions})`),\n f => mergeFragmentImports(f, [sizeManifest.encoder.imports]),\n f => addFragmentImports(f, 'solanaCodecsDataStructures', ['getSetEncoder']),\n ),\n looseType: pipe(childManifest.looseType, f => mapFragmentContent(f, c => `Set<${c}>`)),\n strictType: pipe(childManifest.strictType, f => mapFragmentContent(f, c => `Set<${c}>`)),\n });\n },\n\n visitSetValue(node, { self }) {\n return mergeTypeManifests(\n node.items.map(v => visit(v, self)),\n { mergeValues: renders => `new Set([${renders.join(', ')}])` },\n );\n },\n\n visitSizePrefixType(node, { self }) {\n const manifest = visit(node.type, self);\n const prefix = visit(node.prefix, self);\n\n return typeManifest({\n ...manifest,\n decoder: pipe(\n mergeFragments(\n [manifest.decoder, prefix.decoder],\n ([decoder, prefix]) => `addDecoderSizePrefix(${decoder}, ${prefix})`,\n ),\n f => addFragmentImports(f, 'solanaCodecsCore', ['addDecoderSizePrefix']),\n ),\n encoder: pipe(\n mergeFragments(\n [manifest.encoder, prefix.encoder],\n ([encoder, prefix]) => `addEncoderSizePrefix(${encoder}, ${prefix})`,\n ),\n f => addFragmentImports(f, 'solanaCodecsCore', ['addEncoderSizePrefix']),\n ),\n });\n },\n\n visitSolAmountType({ number }, { self }) {\n const numberManifest = visit(number, self);\n const lamportFragment = pipe(fragment('Lamports'), f =>\n addFragmentImports(f, 'solanaRpcTypes', ['type Lamports']),\n );\n\n return typeManifest({\n ...numberManifest,\n decoder: pipe(\n numberManifest.decoder,\n f => mapFragmentContent(f, c => `getLamportsDecoder(${c})`),\n f => addFragmentImports(f, 'solanaRpcTypes', ['getLamportsDecoder']),\n ),\n encoder: pipe(\n numberManifest.encoder,\n f => mapFragmentContent(f, c => `getLamportsEncoder(${c})`),\n f => addFragmentImports(f, 'solanaRpcTypes', ['getLamportsEncoder']),\n ),\n looseType: lamportFragment,\n strictType: lamportFragment,\n });\n },\n\n visitSomeValue(node, { self }) {\n return typeManifest({\n value: pipe(\n visit(node.value, self).value,\n f => mapFragmentContent(f, c => `some(${c})`),\n f => addFragmentImports(f, 'solanaOptions', ['some']),\n ),\n });\n },\n\n visitStringType(stringType) {\n const [encoder, decoder] = (() => {\n switch (stringType.encoding) {\n case 'base16':\n return ['getBase16Encoder', 'getBase16Decoder'];\n case 'base58':\n return ['getBase58Encoder', 'getBase58Decoder'];\n case 'base64':\n return ['getBase64Encoder', 'getBase64Decoder'];\n case 'utf8':\n return ['getUtf8Encoder', 'getUtf8Decoder'];\n default:\n throw new Error(`Unsupported string encoding: ${stringType.encoding as string}`);\n }\n })();\n\n return typeManifest({\n decoder: pipe(fragment(`${decoder}()`), f =>\n addFragmentImports(f, 'solanaCodecsStrings', [decoder]),\n ),\n encoder: pipe(fragment(`${encoder}()`), f =>\n addFragmentImports(f, 'solanaCodecsStrings', [encoder]),\n ),\n looseType: fragment('string'),\n strictType: fragment('string'),\n });\n },\n\n visitStringValue(node) {\n return typeManifest({\n value: fragment(JSON.stringify(node.string)),\n });\n },\n\n visitStructFieldType(structFieldType, { self }) {\n const name = camelCase(structFieldType.name);\n const originalChildManifest = visit(structFieldType.type, self);\n const structFieldDocs = parseDocs(structFieldType.docs);\n const docblock = structFieldDocs.length > 0 ? `\\n${jsDocblock(structFieldDocs)}` : '';\n const originalLooseType = originalChildManifest.looseType.content;\n const childManifest = typeManifest({\n ...originalChildManifest,\n decoder: pipe(originalChildManifest.decoder, f =>\n mapFragmentContent(f, c => `['${name}', ${c}]`),\n ),\n encoder: pipe(originalChildManifest.encoder, f =>\n mapFragmentContent(f, c => `['${name}', ${c}]`),\n ),\n looseType: pipe(originalChildManifest.looseType, f =>\n mapFragmentContent(f, c => `${docblock}${name}: ${c}; `),\n ),\n strictType: pipe(originalChildManifest.strictType, f =>\n mapFragmentContent(f, c => `${docblock}${name}: ${c}; `),\n ),\n });\n\n // No default value.\n if (!structFieldType.defaultValue) {\n return childManifest;\n }\n\n // Optional default value.\n if (structFieldType.defaultValueStrategy !== 'omitted') {\n return typeManifest({\n ...childManifest,\n looseType: pipe(childManifest.looseType, f =>\n setFragmentContent(f, `${docblock}${name}?: ${originalLooseType}; `),\n ),\n });\n }\n\n // Omitted default value.\n return typeManifest({\n ...childManifest,\n looseType: fragment(''),\n });\n },\n\n visitStructFieldValue(node, { self }) {\n return typeManifest({\n value: pipe(visit(node.value, self).value, f =>\n mapFragmentContent(f, c => `${node.name}: ${c}`),\n ),\n });\n },\n\n visitStructType(structType, { self }) {\n const optionalFields = structType.fields.filter(f => !!f.defaultValue);\n\n const mergedManifest = pipe(\n mergeTypeManifests(\n structType.fields.map(field => visit(field, self)),\n {\n mergeCodecs: renders => `([${renders.join(', ')}])`,\n mergeTypes: renders => `{ ${renders.join('')} }`,\n },\n ),\n manifest =>\n typeManifest({\n ...manifest,\n decoder: pipe(\n manifest.decoder,\n f => mapFragmentContent(f, c => `getStructDecoder${c}`),\n f => addFragmentImports(f, 'solanaCodecsDataStructures', ['getStructDecoder']),\n ),\n encoder: pipe(\n manifest.encoder,\n f => mapFragmentContent(f, c => `getStructEncoder${c}`),\n f => addFragmentImports(f, 'solanaCodecsDataStructures', ['getStructEncoder']),\n ),\n }),\n );\n\n if (optionalFields.length === 0) {\n return mergedManifest;\n }\n\n // Check if we are inside an instruction or account to use discriminator constants when available.\n const parentPath = stack.getPath();\n const instructionNode = findLastNodeFromPath(parentPath, 'instructionNode');\n const accountNode = findLastNodeFromPath(parentPath, 'accountNode');\n const discriminatorPrefix = instructionNode ? instructionNode.name : accountNode?.name;\n const discriminators =\n (instructionNode ? instructionNode.discriminators : accountNode?.discriminators) ?? [];\n const fieldDiscriminators = discriminators.filter(isNodeFilter('fieldDiscriminatorNode'));\n const encoderImports = new ImportMap();\n\n const defaultValues = optionalFields\n .map(f => {\n const key = camelCase(f.name);\n\n // If the field has an associated discriminator node, use the constant value instead.\n if (fieldDiscriminators.some(d => d.name === f.name)) {\n const constantName = nameApi.constant(camelCase(`${discriminatorPrefix}_${f.name}`));\n return f.defaultValueStrategy === 'omitted'\n ? `${key}: ${constantName}`\n : `${key}: value.${key} ?? ${constantName}`;\n }\n\n const defaultValue = f.defaultValue as NonNullable<typeof f.defaultValue>;\n const { content: renderedValue, imports } = visit(defaultValue, self).value;\n encoderImports.mergeWith(imports);\n return f.defaultValueStrategy === 'omitted'\n ? `${key}: ${renderedValue}`\n : `${key}: value.${key} ?? ${renderedValue}`;\n })\n .join(', ');\n\n return typeManifest({\n ...mergedManifest,\n encoder: pipe(\n mergedManifest.encoder,\n f =>\n mapFragmentContent(\n f,\n c => `transformEncoder(${c}, (value) => ({ ...value, ${defaultValues} }))`,\n ),\n f => addFragmentImports(f, 'solanaCodecsCore', ['transformEncoder']),\n f => mergeFragmentImports(f, [encoderImports]),\n ),\n });\n },\n\n visitStructValue(node, { self }) {\n return mergeTypeManifests(\n node.fields.map(field => visit(field, self)),\n { mergeValues: renders => `{ ${renders.join(', ')} }` },\n );\n },\n\n visitTupleType(tupleType, { self }) {\n const items = tupleType.items.map(item => visit(item, self));\n const mergedManifest = mergeTypeManifests(items, {\n mergeCodecs: codecs => `[${codecs.join(', ')}]`,\n mergeTypes: types => `readonly [${types.join(', ')}]`,\n });\n\n return typeManifest({\n ...mergedManifest,\n decoder: pipe(\n mergedManifest.decoder,\n f => mapFragmentContent(f, c => `getTupleDecoder(${c})`),\n f => addFragmentImports(f, 'solanaCodecsDataStructures', ['getTupleDecoder']),\n ),\n encoder: pipe(\n mergedManifest.encoder,\n f => mapFragmentContent(f, c => `getTupleEncoder(${c})`),\n f => addFragmentImports(f, 'solanaCodecsDataStructures', ['getTupleEncoder']),\n ),\n });\n },\n\n visitTupleValue(node, { self }) {\n return mergeTypeManifests(\n node.items.map(v => visit(v, self)),\n { mergeValues: renders => `[${renders.join(', ')}]` },\n );\n },\n\n visitZeroableOptionType(node, { self }) {\n const childManifest = visit(node.item, self);\n const encoderOptions: string[] = ['prefix: null'];\n const decoderOptions: string[] = ['prefix: null'];\n const encoderImports = new ImportMap();\n const decoderImports = new ImportMap();\n\n // Zero-value option.\n if (node.zeroValue) {\n const zeroValueManifest = visit(node.zeroValue, self);\n encoderImports.mergeWith(zeroValueManifest.value);\n decoderImports.mergeWith(zeroValueManifest.value);\n encoderOptions.push(`noneValue: ${zeroValueManifest.value.content}`);\n decoderOptions.push(`noneValue: ${zeroValueManifest.value.content}`);\n } else {\n encoderOptions.push(`noneValue: \"zeroes\"`);\n decoderOptions.push(`noneValue: \"zeroes\"`);\n }\n\n const encoderOptionsAsString =\n encoderOptions.length > 0 ? `, { ${encoderOptions.join(', ')} }` : '';\n const decoderOptionsAsString =\n decoderOptions.length > 0 ? `, { ${decoderOptions.join(', ')} }` : '';\n\n return typeManifest({\n ...childManifest,\n decoder: pipe(\n childManifest.decoder,\n f => mapFragmentContent(f, c => `getOptionDecoder(${c + decoderOptionsAsString})`),\n f => addFragmentImports(f, 'solanaOptions', ['getOptionDecoder']),\n f => mergeFragmentImports(f, [decoderImports]),\n ),\n encoder: pipe(\n childManifest.encoder,\n f => mapFragmentContent(f, c => `getOptionEncoder(${c + encoderOptionsAsString})`),\n f => addFragmentImports(f, 'solanaOptions', ['getOptionEncoder']),\n f => mergeFragmentImports(f, [encoderImports]),\n ),\n looseType: pipe(\n childManifest.looseType,\n f => mapFragmentContent(f, c => `OptionOrNullable<${c}>`),\n f => addFragmentImports(f, 'solanaOptions', ['type OptionOrNullable']),\n ),\n strictType: pipe(\n childManifest.strictType,\n f => mapFragmentContent(f, c => `Option<${c}>`),\n f => addFragmentImports(f, 'solanaOptions', ['type Option']),\n ),\n });\n },\n }),\n visitor => recordNodeStackVisitor(visitor, stack),\n );\n}\n\nfunction getArrayLikeSizeOption(\n count: CountNode,\n visitor: Visitor<TypeManifest, TypeNode['kind']>,\n): {\n decoder: Fragment;\n encoder: Fragment;\n} {\n if (isNode(count, 'fixedCountNode')) {\n return {\n decoder: fragment(`size: ${count.value}`),\n encoder: fragment(`size: ${count.value}`),\n };\n }\n if (isNode(count, 'remainderCountNode')) {\n return {\n decoder: fragment(`size: 'remainder'`),\n encoder: fragment(`size: 'remainder'`),\n };\n }\n const prefix = resolveNestedTypeNode(count.prefix);\n if (prefix.format === 'u32' && prefix.endian === 'le') {\n return { decoder: fragment(''), encoder: fragment('') };\n }\n const prefixManifest = visit(count.prefix, visitor);\n return {\n decoder: pipe(prefixManifest.decoder, f => mapFragmentContent(f, c => `size: ${c}`)),\n encoder: pipe(prefixManifest.encoder, f => mapFragmentContent(f, c => `size: ${c}`)),\n };\n}\n","import { camelCase, capitalize, kebabCase, pascalCase, snakeCase, titleCase } from '@codama/nodes';\n\nexport type NameTransformerHelpers = {\n camelCase: (name: string) => string;\n capitalize: (name: string) => string;\n kebabCase: (name: string) => string;\n pascalCase: (name: string) => string;\n snakeCase: (name: string) => string;\n titleCase: (name: string) => string;\n};\n\nexport type NameTransformer = (name: string, helpers: NameTransformerHelpers) => string;\n\nexport type NameTransformerKey =\n | 'accountDecodeFunction'\n | 'accountFetchAllFunction'\n | 'accountFetchAllMaybeFunction'\n | 'accountFetchFromSeedsFunction'\n | 'accountFetchFunction'\n | 'accountFetchMaybeFromSeedsFunction'\n | 'accountFetchMaybeFunction'\n | 'accountGetSizeFunction'\n | 'codecFunction'\n | 'constant'\n | 'constantFunction'\n | 'dataArgsType'\n | 'dataType'\n | 'decoderFunction'\n | 'discriminatedUnionDiscriminator'\n | 'discriminatedUnionFunction'\n | 'discriminatedUnionVariant'\n | 'encoderFunction'\n | 'enumVariant'\n | 'instructionAsyncFunction'\n | 'instructionAsyncInputType'\n | 'instructionDataType'\n | 'instructionExtraType'\n | 'instructionParsedType'\n | 'instructionParseFunction'\n | 'instructionSyncFunction'\n | 'instructionSyncInputType'\n | 'instructionType'\n | 'isDiscriminatedUnionFunction'\n | 'pdaFindFunction'\n | 'pdaSeedsType'\n | 'programAccountsEnum'\n | 'programAccountsEnumVariant'\n | 'programAccountsIdentifierFunction'\n | 'programAddressConstant'\n | 'programErrorConstant'\n | 'programErrorConstantPrefix'\n | 'programErrorMessagesMap'\n | 'programErrorUnion'\n | 'programGetErrorMessageFunction'\n | 'programInstructionsEnum'\n | 'programInstructionsEnumVariant'\n | 'programInstructionsIdentifierFunction'\n | 'programInstructionsParsedUnionType'\n | 'programIsErrorFunction'\n | 'resolverFunction';\n\nexport type NameTransformers = Record<NameTransformerKey, NameTransformer>;\n\nexport type NameApi = Record<NameTransformerKey, (name: string) => string>;\n\nexport function getNameApi(transformers: NameTransformers): NameApi {\n const helpers = {\n camelCase,\n capitalize,\n kebabCase,\n pascalCase,\n snakeCase,\n titleCase,\n };\n return Object.fromEntries(\n Object.entries(transformers).map(([key, transformer]) => [key, (name: string) => transformer(name, helpers)]),\n ) as NameApi;\n}\n\nexport const DEFAULT_NAME_TRANSFORMERS: NameTransformers = {\n accountDecodeFunction: name => `decode${pascalCase(name)}`,\n accountFetchAllFunction: name => `fetchAll${pascalCase(name)}`,\n accountFetchAllMaybeFunction: name => `fetchAllMaybe${pascalCase(name)}`,\n accountFetchFromSeedsFunction: name => `fetch${pascalCase(name)}FromSeeds`,\n accountFetchFunction: name => `fetch${pascalCase(name)}`,\n accountFetchMaybeFromSeedsFunction: name => `fetchMaybe${pascalCase(name)}FromSeeds`,\n accountFetchMaybeFunction: name => `fetchMaybe${pascalCase(name)}`,\n accountGetSizeFunction: name => `get${pascalCase(name)}Size`,\n codecFunction: name => `get${pascalCase(name)}Codec`,\n constant: name => snakeCase(name).toUpperCase(),\n constantFunction: name => `get${pascalCase(name)}Bytes`,\n dataArgsType: name => `${pascalCase(name)}Args`,\n dataType: name => `${pascalCase(name)}`,\n decoderFunction: name => `get${pascalCase(name)}Decoder`,\n discriminatedUnionDiscriminator: () => '__kind',\n discriminatedUnionFunction: name => `${camelCase(name)}`,\n discriminatedUnionVariant: name => `${pascalCase(name)}`,\n encoderFunction: name => `get${pascalCase(name)}Encoder`,\n enumVariant: name => `${pascalCase(name)}`,\n instructionAsyncFunction: name => `get${pascalCase(name)}InstructionAsync`,\n instructionAsyncInputType: name => `${pascalCase(name)}AsyncInput`,\n instructionDataType: name => `${pascalCase(name)}InstructionData`,\n instructionExtraType: name => `${pascalCase(name)}InstructionExtra`,\n instructionParseFunction: name => `parse${pascalCase(name)}Instruction`,\n instructionParsedType: name => `Parsed${pascalCase(name)}Instruction`,\n instructionSyncFunction: name => `get${pascalCase(name)}Instruction`,\n instructionSyncInputType: name => `${pascalCase(name)}Input`,\n instructionType: name => `${pascalCase(name)}Instruction`,\n isDiscriminatedUnionFunction: name => `is${pascalCase(name)}`,\n pdaFindFunction: name => `find${pascalCase(name)}Pda`,\n pdaSeedsType: name => `${pascalCase(name)}Seeds`,\n programAccountsEnum: name => `${pascalCase(name)}Account`,\n programAccountsEnumVariant: name => `${pascalCase(name)}`,\n programAccountsIdentifierFunction: name => `identify${pascalCase(name)}Account`,\n programAddressConstant: name => `${snakeCase(name).toUpperCase()}_PROGRAM_ADDRESS`,\n programErrorConstant: name => snakeCase(name).toUpperCase(),\n programErrorConstantPrefix: name => `${snakeCase(name).toUpperCase()}_ERROR__`,\n programErrorMessagesMap: name => `${camelCase(name)}ErrorMessages`,\n programErrorUnion: name => `${pascalCase(name)}Error`,\n programGetErrorMessageFunction: name => `get${pascalCase(name)}ErrorMessage`,\n programInstructionsEnum: name => `${pascalCase(name)}Instruction`,\n programInstructionsEnumVariant: name => `${pascalCase(name)}`,\n programInstructionsIdentifierFunction: name => `identify${pascalCase(name)}Instruction`,\n programInstructionsParsedUnionType: name => `Parsed${pascalCase(name)}Instruction`,\n programIsErrorFunction: name => `is${pascalCase(name)}Error`,\n resolverFunction: name => `${camelCase(name)}`,\n};\n","import { deleteDirectory, mapRenderMapContentAsync, writeRenderMap } from '@codama/renderers-core';\nimport { rootNodeVisitor, visit } from '@codama/visitors-core';\nimport { Plugin } from 'prettier';\nimport * as estreePlugin from 'prettier/plugins/estree';\nimport * as typeScriptPlugin from 'prettier/plugins/typescript';\nimport { format } from 'prettier/standalone';\n\nimport { GetRenderMapOptions, getRenderMapVisitor } from './getRenderMapVisitor';\n\ntype PrettierOptions = Parameters<typeof format>[1];\n\nexport type RenderOptions = GetRenderMapOptions & {\n deleteFolderBeforeRendering?: boolean;\n formatCode?: boolean;\n prettierOptions?: PrettierOptions;\n};\n\nconst DEFAULT_PRETTIER_OPTIONS: PrettierOptions = {\n arrowParens: 'always',\n parser: 'typescript',\n plugins: [estreePlugin as Plugin<unknown>, typeScriptPlugin],\n printWidth: 80,\n semi: true,\n singleQuote: true,\n tabWidth: 2,\n trailingComma: 'es5',\n useTabs: false,\n};\n\nexport function renderVisitor(path: string, options: RenderOptions = {}) {\n return rootNodeVisitor(async root => {\n // Delete existing generated folder.\n if (options.deleteFolderBeforeRendering ?? true) {\n deleteDirectory(path);\n }\n\n // Render the new files.\n let renderMap = visit(root, getRenderMapVisitor(options));\n\n // Format the code.\n if (options.formatCode ?? true) {\n const prettierOptions = { ...DEFAULT_PRETTIER_OPTIONS, ...options.prettierOptions };\n renderMap = await mapRenderMapContentAsync(renderMap, code => format(code, prettierOptions));\n }\n\n writeRenderMap(renderMap, path);\n });\n}\n"],"mappings":"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","names":["module","import_nodes","import_nodes","nunjucks","fragment","module","fragment","import_node_path","import_errors","import_nodes","import_renderers_core","import_visitors_core","import_visitors_core","typeManifest","import_nodes","import_visitors_core","typeManifest","import_visitors_core","import_nodes","import_visitors_core","import_visitors_core","import_visitors_core","import_nodes","import_visitors_core","import_nodes","import_visitors_core","typeManifest","import_nodes","import_renderers_core","import_visitors_core","import_codecs_strings","import_nodes","import_visitors_core","import_nodes","import_visitors_core","import_nodes","import_renderers_core","import_visitors_core","module","import_nodes","import_visitors_core","import_nodes","import_renderers_core","import_visitors_core","import_visitors_core","import_nodes","import_renderers_core","import_visitors_core","import_nodes","import_renderers_core","import_visitors_core","import_nodes","import_renderers_core","import_visitors_core","pdaSeeds","typeManifest","valueManifest","programAddress","module","import_nodes","import_renderers_core","import_visitors_core","getAccountTypeFragment","import_nodes","import_visitors_core","getRemainingAccountsFragment","getArgumentValueNodeFragment","getResolverValueNodeFragment","module","import_visitors_core","import_nodes","import_renderers_core","import_visitors_core","fragment","import_nodes","import_visitors_core","seedManifest","import_visitors_core","import_nodes","import_renderers_core","import_visitors_core","import_visitors_core","import_nodes","import_renderers_core","import_visitors_core","import_nodes","import_visitors_core","import_nodes","import_renderers_core","import_visitors_core","variantName","prefixes","suffixes","sentinel","prefix","import_nodes","render","import_renderers_core","import_visitors_core","renderMap"]}