codama-renderers-dart 0.5.3 → 0.5.4

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 (34) hide show
  1. package/README.md +6 -0
  2. package/dist/index.browser.cjs +176 -107
  3. package/dist/index.browser.cjs.map +1 -1
  4. package/dist/index.browser.js +177 -108
  5. package/dist/index.browser.js.map +1 -1
  6. package/dist/index.node.cjs +176 -107
  7. package/dist/index.node.cjs.map +1 -1
  8. package/dist/index.node.js +177 -108
  9. package/dist/index.node.js.map +1 -1
  10. package/dist/index.react-native.js +177 -108
  11. package/dist/index.react-native.js.map +1 -1
  12. package/dist/types/fragments/accountPage.d.ts.map +1 -1
  13. package/dist/types/fragments/errorPage.d.ts.map +1 -1
  14. package/dist/types/fragments/instructionPage.d.ts.map +1 -1
  15. package/dist/types/fragments/pdaPage.d.ts.map +1 -1
  16. package/dist/types/fragments/programPage.d.ts.map +1 -1
  17. package/dist/types/utils/nameTransformers.d.ts.map +1 -1
  18. package/dist/types/utils/valueNodes.d.ts +4 -0
  19. package/dist/types/utils/valueNodes.d.ts.map +1 -1
  20. package/dist/types/visitors/getRenderMapVisitor.d.ts.map +1 -1
  21. package/dist/types/visitors/getTypeManifestVisitor.d.ts.map +1 -1
  22. package/dist/types/visitors/renderVisitor.d.ts.map +1 -1
  23. package/package.json +7 -7
  24. package/src/fragments/accountPage.ts +2 -1
  25. package/src/fragments/errorPage.ts +8 -5
  26. package/src/fragments/instructionPage.ts +51 -21
  27. package/src/fragments/pdaPage.ts +7 -14
  28. package/src/fragments/programPage.ts +3 -2
  29. package/src/utils/formatCode.ts +2 -2
  30. package/src/utils/nameTransformers.ts +11 -0
  31. package/src/utils/valueNodes.ts +24 -1
  32. package/src/visitors/getRenderMapVisitor.ts +30 -5
  33. package/src/visitors/getTypeManifestVisitor.ts +100 -75
  34. package/src/visitors/renderVisitor.ts +11 -13
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/formatCode.ts","../src/utils/normalizeRootNode.ts","../src/utils/nameTransformers.ts","../src/utils/codecs.ts","../src/utils/importMap.ts","../src/utils/fragment.ts","../src/utils/wellKnownAddresses.ts","../src/utils/valueNodes.ts","../src/utils/discriminators.ts","../src/utils/exactDecoder.ts","../src/utils/typeManifest.ts","../src/visitors/getTypeManifestVisitor.ts","../src/fragments/discriminatorConstants.ts","../src/fragments/accountPage.ts","../src/fragments/errorPage.ts","../src/fragments/indexPage.ts","../src/fragments/instructionPage.ts","../src/fragments/pdaPage.ts","../src/fragments/programPage.ts","../src/fragments/typePage.ts","../src/visitors/getRenderMapVisitor.ts","../src/visitors/renderVisitor.ts","../src/index.ts"],"names":["execSync","visit","resolveNestedTypeNode","staticVisitor","CodamaError","CODAMA_ERROR__UNEXPECTED_NODE_KIND","extendVisitor","getAllInstructionsWithSubs","getNumberCodecName","NodeStack","LinkableDictionary","pipe","createRenderMap","mergeRenderMaps","addToRenderMap","recordNodeStackVisitor","recordLinkablesOnFirstVisitVisitor","rootNodeVisitor","existsSync","deleteDirectory","join","dirname","mkdirSync","posix","writeFileSync"],"mappings":"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","file":"index.browser.cjs","sourcesContent":["import { execSync } from \"node:child_process\";\n\n/**\n * Format Dart code using `dart format`.\n * Falls back to returning the unformatted code if Dart is not available.\n */\nexport function formatDartCode(code: string): string {\n try {\n const result = execSync(\"dart format --output=show\", {\n input: code,\n encoding: \"utf-8\",\n timeout: 30_000,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n return result;\n } catch {\n // If dart format is not available, return as-is\n return code;\n }\n}\n\n/**\n * Format all Dart files in a directory using `dart format`.\n */\nexport function formatDartDirectory(dir: string): void {\n execSync(`dart format \"${dir}\"`, {\n encoding: \"utf-8\",\n timeout: 60_000,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n}\n","import type { RootNode } from \"@codama/nodes\";\n\n/**\n * Normalizes a serialized Codama root before it reaches Codama's visitors.\n *\n * Codama constructors materialize empty child collections, while generated\n * JSON commonly omits them. Pina intentionally omits those empty fields, so\n * restore only the structural defaults required by Codama traversal. This is\n * a copy: callers retain their original parsed IDL unchanged.\n */\nexport function normalizeRootNode(root: RootNode): RootNode {\n return normalizeNode(root) as RootNode;\n}\n\nfunction normalizeNode(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(normalizeNode);\n }\n\n if (!isRecord(value)) {\n return value;\n }\n\n const normalized = Object.fromEntries(\n Object.entries(value).map(([key, child]) => [key, normalizeNode(child)]),\n ) as Record<string, unknown>;\n\n switch (normalized.kind) {\n case \"rootNode\":\n setEmptyCollection(normalized, \"additionalPrograms\");\n break;\n case \"programNode\":\n setEmptyCollection(normalized, \"accounts\");\n setEmptyCollection(normalized, \"constants\");\n setEmptyCollection(normalized, \"definedTypes\");\n setEmptyCollection(normalized, \"errors\");\n setEmptyCollection(normalized, \"events\");\n setEmptyCollection(normalized, \"instructions\");\n setEmptyCollection(normalized, \"pdas\");\n break;\n case \"instructionNode\":\n setEmptyCollection(normalized, \"accounts\");\n setEmptyCollection(normalized, \"arguments\");\n break;\n case \"pdaNode\":\n setEmptyCollection(normalized, \"seeds\");\n break;\n case \"structTypeNode\":\n setEmptyCollection(normalized, \"fields\");\n break;\n case \"enumTypeNode\":\n setEmptyCollection(normalized, \"variants\");\n break;\n case \"tupleTypeNode\":\n setEmptyCollection(normalized, \"items\");\n break;\n case \"hiddenPrefixTypeNode\":\n setEmptyCollection(normalized, \"prefix\");\n break;\n case \"hiddenSuffixTypeNode\":\n setEmptyCollection(normalized, \"suffix\");\n break;\n }\n\n return normalized;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction setEmptyCollection(record: Record<string, unknown>, key: string): void {\n if (record[key] === undefined) {\n record[key] = [];\n }\n}\n","import type { CamelCaseString } from \"@codama/nodes\";\n\n/**\n * Naming convention transformers for Dart code generation.\n */\n\n/** Convert a string to PascalCase */\nexport function pascalCase(str: string): string {\n return str\n .replace(/[-_\\s]+(.)?/g, (_, c) => (c ? c.toUpperCase() : \"\"))\n .replace(/^(.)/, (c) => c.toUpperCase());\n}\n\n/**\n * Dart reserved words (plus `async`/`await`/`yield` where they cannot be\n * plain identifiers). A lowercase declaration named with one of these must\n * be escaped, e.g. an account named `null` becomes a `null_` parameter.\n */\nconst DART_RESERVED_WORDS = new Set([\n \"abstract\", \"as\", \"assert\", \"async\", \"augment\", \"await\", \"base\",\n \"break\", \"case\", \"catch\", \"class\", \"const\", \"continue\", \"covariant\",\n \"default\", \"deferred\", \"do\", \"dynamic\", \"else\", \"enum\", \"export\",\n \"extends\", \"extension\", \"external\", \"factory\", \"false\", \"final\",\n \"finally\", \"for\", \"get\", \"hide\", \"if\", \"implements\", \"import\", \"in\",\n \"interface\", \"is\", \"late\", \"library\", \"mixin\", \"native\", \"new\", \"null\",\n \"of\", \"on\", \"operator\", \"part\", \"required\", \"rethrow\", \"return\",\n \"sealed\", \"set\", \"show\", \"static\", \"super\", \"switch\", \"sync\", \"this\",\n \"throw\", \"true\", \"try\", \"typedef\", \"var\", \"void\", \"when\", \"while\",\n \"with\", \"yield\",\n]);\n\n/**\n * Escape a lowercase identifier if it collides with a Dart reserved word\n * by appending `_` (e.g. an account named `null` renders as `null_`).\n */\nexport function escapeDartIdentifier(name: string): string {\n return DART_RESERVED_WORDS.has(name) ? `${name}_` : name;\n}\n\n/** Convert a string to camelCase */\nexport function camelCase(str: string): string {\n const pascal = pascalCase(str);\n const cased = pascal.charAt(0).toLowerCase() + pascal.slice(1);\n return escapeDartIdentifier(cased);\n}\n\n/** Convert a string to snake_case */\nexport function snakeCase(str: string): string {\n return str\n .replace(/([A-Z])/g, \"_$1\")\n .replace(/[-\\s]+/g, \"_\")\n .replace(/^_/, \"\")\n .replace(/_+/g, \"_\")\n .toLowerCase();\n}\n\n/** Convert a string to SCREAMING_SNAKE_CASE */\nexport function screamingSnakeCase(str: string): string {\n return snakeCase(str).toUpperCase();\n}\n\n/**\n * All name transformation functions for Dart code generation.\n */\nexport interface DartNameApi {\n /** Data class name: `PascalCase` */\n dataType(name: string): string;\n /** Encoder function name: `get{PascalCase}Encoder` */\n encoderFunction(name: string): string;\n /** Decoder function name: `get{PascalCase}Decoder` */\n decoderFunction(name: string): string;\n /** Codec function name: `get{PascalCase}Codec` */\n codecFunction(name: string): string;\n /** Account fetch function: `fetch{PascalCase}` */\n accountFetchFunction(name: string): string;\n /** Account fetch maybe function: `fetchMaybe{PascalCase}` */\n accountFetchMaybeFunction(name: string): string;\n /** Account decode function: `decode{PascalCase}` */\n accountDecodeFunction(name: string): string;\n /** Account size constant: `{camelCase}Size` */\n accountSizeConstant(name: string): string;\n /** PDA finder function: `find{PascalCase}Pda` */\n pdaFindFunction(name: string): string;\n /** Instruction builder function: `get{PascalCase}Instruction` */\n instructionFunction(name: string): string;\n /** Instruction parse function: `parse{PascalCase}Instruction` */\n instructionParseFunction(name: string): string;\n /** Program address constant: `{camelCase}ProgramAddress` */\n programAddressConstant(name: string): string;\n /** Error code constant: `{programName}Error{PascalCase}` */\n errorConstant(programName: string, errorName: string): string;\n /** Error message function: `get{PascalCase}ErrorMessage` */\n errorMessageFunction(name: string): string;\n /** Enum variant: `camelCase` */\n enumVariant(name: string): string;\n /** Sealed class variant (data enum): `{ParentName}{PascalCase}` */\n sealedClassVariant(parentName: string, variantName: string): string;\n /** File name: `snake_case.dart` */\n fileName(name: string): string;\n /** Discriminator constant: `{camelCase}Discriminator` */\n discriminatorConstant(name: string): string;\n /** isX() helper for type check: `is{PascalCase}` */\n isTypeFunction(name: string): string;\n}\n\n/**\n * Create the default Dart name API.\n */\nexport function createDartNameApi(): DartNameApi {\n return {\n dataType: (name) => pascalCase(name),\n encoderFunction: (name) => `get${pascalCase(name)}Encoder`,\n decoderFunction: (name) => `get${pascalCase(name)}Decoder`,\n codecFunction: (name) => `get${pascalCase(name)}Codec`,\n accountFetchFunction: (name) => `fetch${pascalCase(name)}`,\n accountFetchMaybeFunction: (name) => `fetchMaybe${pascalCase(name)}`,\n accountDecodeFunction: (name) => `decode${pascalCase(name)}`,\n accountSizeConstant: (name) => `${camelCase(name)}Size`,\n pdaFindFunction: (name) => `find${pascalCase(name)}Pda`,\n instructionFunction: (name) => `get${pascalCase(name)}Instruction`,\n instructionParseFunction: (name) => `parse${pascalCase(name)}Instruction`,\n programAddressConstant: (name) => `${camelCase(name)}ProgramAddress`,\n errorConstant: (programName, errorName) =>\n `${camelCase(programName)}Error${pascalCase(errorName)}`,\n errorMessageFunction: (name) => `get${pascalCase(name)}ErrorMessage`,\n enumVariant: (name) => camelCase(name),\n sealedClassVariant: (parentName, variantName) =>\n `${pascalCase(parentName)}${pascalCase(variantName)}`,\n isTypeFunction: (name) => `is${pascalCase(name)}`,\n fileName: (name) => snakeCase(name),\n discriminatorConstant: (name) => `${camelCase(name)}Discriminator`,\n };\n}\n\n/**\n * Convert a CamelCaseString to a regular string.\n */\nexport function fromCamelCaseString(str: CamelCaseString): string {\n return str as string;\n}\n","/**\n * Convert a Uint8Array to a Dart hex literal string.\n * Used for discriminator constants.\n */\nexport function bytesToDartHexList(bytes: Uint8Array): string {\n const pairs: string[] = [];\n for (let i = 0; i < bytes.length; i++) {\n pairs.push(`0x${bytes[i].toString(16).padStart(2, \"0\")}`);\n }\n return `[${pairs.join(\", \")}]`;\n}\n\n/**\n * Convert a Uint8Array to a Dart Uint8List.fromList() expression.\n */\nexport function bytesToDartUint8List(bytes: Uint8Array): string {\n const hex = bytesToDartHexList(bytes);\n return `Uint8List.fromList(${hex})`;\n}\n","/**\n * Maps logical module names to Dart package: URIs.\n */\nexport const DART_EXTERNAL_PACKAGE_MAP: Record<string, string> = {\n // Dart core\n dartTypedData: \"dart:typed_data\",\n dartConvert: \"dart:convert\",\n meta: \"package:meta/meta.dart\",\n\n // solana_kit packages\n solanaAddresses: \"package:solana_kit_addresses/solana_kit_addresses.dart\",\n solanaCodecsCore: \"package:solana_kit_codecs_core/solana_kit_codecs_core.dart\",\n solanaCodecsDataStructures:\n \"package:solana_kit_codecs_data_structures/solana_kit_codecs_data_structures.dart\",\n solanaCodecsNumbers:\n \"package:solana_kit_codecs_numbers/solana_kit_codecs_numbers.dart\",\n solanaCodecsStrings:\n \"package:solana_kit_codecs_strings/solana_kit_codecs_strings.dart\",\n solanaErrors: \"package:solana_kit_errors/solana_kit_errors.dart\",\n solanaAccounts: \"package:solana_kit_accounts/solana_kit_accounts.dart\",\n solanaInstructions:\n \"package:solana_kit_instructions/solana_kit_instructions.dart\",\n solanaPrograms: \"package:solana_kit_programs/solana_kit_programs.dart\",\n solanaRpcTypes: \"package:solana_kit_rpc_types/solana_kit_rpc_types.dart\",\n solanaSigners: \"package:solana_kit_signers/solana_kit_signers.dart\",\n};\n\n/**\n * Tracks Dart import URIs needed by generated code.\n *\n * Dart imports entire libraries (not individual symbols), so we only\n * need to track which package URIs are used, not specific symbols.\n */\nexport class DartImportMap {\n private _imports = new Set<string>();\n\n /**\n * Add a logical module name (resolved via DART_EXTERNAL_PACKAGE_MAP)\n * or a raw Dart import URI.\n */\n add(module: string): this {\n this._imports.add(module);\n return this;\n }\n\n /**\n * Merge another DartImportMap into this one.\n */\n mergeWith(other: DartImportMap): this {\n for (const imp of other._imports) {\n this._imports.add(imp);\n }\n return this;\n }\n\n /**\n * Check if this import map is empty.\n */\n get isEmpty(): boolean {\n return this._imports.size === 0;\n }\n\n /**\n * Get all raw module keys.\n */\n get modules(): Set<string> {\n return new Set(this._imports);\n }\n\n /**\n * Resolve all imports to Dart import URIs and return them sorted.\n * @param internalMap Maps logical names to relative file paths for generated code cross-references.\n */\n resolve(internalMap: Record<string, string> = {}): string[] {\n const uris = new Set<string>();\n\n for (const module of this._imports) {\n // Check internal map first (generated cross-references)\n if (module in internalMap) {\n const uri = internalMap[module];\n if (uri) {\n uris.add(uri);\n }\n }\n // Then external package map\n else if (module in DART_EXTERNAL_PACKAGE_MAP) {\n uris.add(DART_EXTERNAL_PACKAGE_MAP[module]);\n }\n // Finally, accept explicit Dart URIs and relative Dart paths.\n else if (isRawDartImportUri(module)) {\n uris.add(module);\n } else {\n throw new Error(`Unresolved Dart import module \"${module}\"`);\n }\n }\n\n // Sort: dart: first, then package:, then relative\n return [...uris].sort((a, b) => {\n const aWeight = a.startsWith(\"dart:\") ? 0 : a.startsWith(\"package:\") ? 1 : 2;\n const bWeight = b.startsWith(\"dart:\") ? 0 : b.startsWith(\"package:\") ? 1 : 2;\n if (aWeight !== bWeight) return aWeight - bWeight;\n return a.localeCompare(b);\n });\n }\n\n /**\n * Render all imports as Dart import statements.\n */\n toString(internalMap: Record<string, string> = {}): string {\n const resolved = this.resolve(internalMap);\n if (resolved.length === 0) return \"\";\n\n const lines: string[] = [];\n let lastPrefix = \"\";\n\n for (const uri of resolved) {\n const prefix = uri.startsWith(\"dart:\")\n ? \"dart\"\n : uri.startsWith(\"package:\")\n ? \"package\"\n : \"relative\";\n\n // Add blank line between groups\n if (lastPrefix && lastPrefix !== prefix) {\n lines.push(\"\");\n }\n lastPrefix = prefix;\n\n lines.push(`import '${uri}';`);\n }\n\n return lines.join(\"\\n\");\n }\n}\n\nfunction isRawDartImportUri(module: string): boolean {\n return (\n module.startsWith(\"dart:\") ||\n module.startsWith(\"package:\") ||\n (module.endsWith(\".dart\") && !module.includes(\":\"))\n );\n}\n","import type { BaseFragment } from \"@codama/renderers-core\";\n\nimport { DartImportMap } from \"./importMap.js\";\n\n/**\n * A Fragment represents a piece of generated Dart code\n * along with the imports it requires.\n */\nexport type Fragment = BaseFragment &\n Readonly<{\n imports: DartImportMap;\n }>;\n\n/**\n * Create a Fragment from a tagged template literal.\n * Embedded Fragment values have their imports merged automatically.\n */\nexport function fragment(\n strings: TemplateStringsArray,\n ...values: (Fragment | string | number | boolean | undefined | null)[]\n): Fragment {\n const imports = new DartImportMap();\n const parts: string[] = [];\n\n for (let i = 0; i < strings.length; i++) {\n parts.push(strings[i]);\n if (i < values.length) {\n const value = values[i];\n if (value != null && typeof value === \"object\" && \"imports\" in value) {\n parts.push(value.content);\n imports.mergeWith(value.imports);\n } else {\n parts.push(String(value ?? \"\"));\n }\n }\n }\n\n return {\n content: parts.join(\"\"),\n imports,\n };\n}\n\n/**\n * Create an empty fragment.\n */\nexport function emptyFragment(): Fragment {\n return { content: \"\", imports: new DartImportMap() };\n}\n\n/**\n * Create a fragment from a raw string.\n */\nexport function fragmentFromString(content: string): Fragment {\n return { content, imports: new DartImportMap() };\n}\n\n/**\n * Merge multiple fragments with a joiner function.\n */\nexport function mergeFragments(\n fragments: Fragment[],\n joiner: (contents: string[]) => string,\n): Fragment {\n const imports = new DartImportMap();\n const contents: string[] = [];\n\n for (const frag of fragments) {\n contents.push(frag.content);\n imports.mergeWith(frag.imports);\n }\n\n return { content: joiner(contents), imports };\n}\n\n/**\n * Helper to add a Dart import to a fragment and return a type name fragment.\n */\nexport function use(typeName: string, module: string): Fragment {\n const imports = new DartImportMap();\n imports.add(module);\n return { content: typeName, imports };\n}\n","/**\n * Maps well-known Solana public keys to their canonical Dart constant names\n * in `package:solana_kit_addresses`. When the renderer encounters a known\n * address, it emits a re-export from that package instead of hardcoding the\n * address string.\n *\n * The keys are the base-58 public key strings as they appear in IDL/Codama nodes.\n * The values are the Dart constant names exported by `solana_kit_addresses`.\n */\nexport const WELL_KNOWN_ADDRESSES: ReadonlyMap<string, string> = new Map([\n // Agave / Solana native programs\n ['11111111111111111111111111111111', 'systemProgramAddress'],\n ['AddressLookupTab1e1111111111111111111111111', 'addressLookupTableProgramAddress'],\n ['BPFLoader2111111111111111111111111111111111', 'bpfLoaderProgramAddress'],\n ['BPFLoader1111111111111111111111111111111111', 'bpfLoaderDeprecatedProgramAddress'],\n ['BPFLoaderUpgradeab1e11111111111111111111111', 'bpfLoaderUpgradeableProgramAddress'],\n ['ComputeBudget111111111111111111111111111111', 'computeBudgetProgramAddress'],\n ['Config1111111111111111111111111111111111111', 'configProgramAddress'],\n ['Ed25519SigVerify111111111111111111111111111', 'ed25519ProgramAddress'],\n ['Feature111111111111111111111111111111111111', 'featureProgramAddress'],\n ['1nc1nerator11111111111111111111111111111111', 'incineratorAddress'],\n ['LoaderV411111111111111111111111111111111111', 'loaderV4ProgramAddress'],\n ['NativeLoader1111111111111111111111111111', 'nativeLoaderProgramAddress'],\n ['KeccakSecp256k11111111111111111111111111111', 'secp256k1ProgramAddress'],\n ['Secp256r1SigVerify1111111111111111111111111', 'secp256r1ProgramAddress'],\n ['Stake11111111111111111111111111111111111111', 'stakeProgramAddress'],\n ['StakeConfig1111111111111111111111111111', 'stakeConfigAddress'],\n ['Vote111111111111111111111111111111111111111', 'voteProgramAddress'],\n ['ZkTokenProof1111111111111111111111111111111', 'zkTokenProofProgramAddress'],\n ['ZkE1Gama1Proof11111111111111111111111111111', 'zkElgamalProofProgramAddress'],\n\n // Sysvars\n ['SysvarC1ock11111111111111111111111111111111', 'sysvarClockAddress'],\n ['Rent11111111111111111111111111111111111111', 'sysvarRentAddress'],\n ['11111111111111111111111111111111111111111111', 'sysvarRecentBlockhashesAddress'], // note: 44 chars\n ['SysvarFees1111111111111111111111111111111111', 'sysvarFeesAddress'],\n ['Sysvar1nstruct1ons11111111111111111111111111', 'sysvarInstructionsAddress'],\n ['SysvarEpochSchedu1e111111111111111111111111', 'sysvarEpochScheduleAddress'],\n ['SysvarRewards111111111111111111111111111111', 'sysvarRewardsAddress'],\n ['SysvarStakeHistory1111111111111111111111111', 'sysvarStakeHistoryAddress'],\n ['SysvarS1otHashes111111111111111111111111111', 'sysvarSlotHashesAddress'],\n ['SysvarS1otHistory11111111111111111111111111', 'sysvarSlotHistoryAddress'],\n ['Sysvar1111111111111111111111111111111111111', 'sysvarOwnerAddress'],\n\n // SPL programs\n ['TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA', 'tokenProgramAddress'],\n ['TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb', 'token2022ProgramAddress'],\n ['ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL', 'associatedTokenProgramAddress'],\n ['MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr', 'memoProgramAddress'],\n ['Memo1UhkJRfHyvLMcVucJwxXeuD728EqVDDwQDxFMNo', 'memoLegacyProgramAddress'],\n\n // Metaplex programs\n ['metaqbxxU9qX8rZXkmUJ7haCrXXz2W1PSUq1Rn3E1od', 'tokenMetadataProgramAddress'],\n ['BGUMAp9V1mQ2KV8t34L5u3gZsXYZaYDBdKkc1xYk1qA1', 'mplBubblegumProgramAddress'],\n ['auth9SigNpDKz4s8cHr3MFBPS1phbRKLSCN3aBe9sS', 'authRulesProgramAddress'],\n ['CoREENxT6tW1Ho6BW6W5Z4N41ci5Xz2mmrR2kErmM5TR', 'metaplexCoreProgramAddress'],\n ['cmtMqR4bPM9sEV3bPnJQq5s2EnYw4N5vQ8hWhEd1xzS', 'splAccountCompressionProgramAddress'],\n ['noopb9skMVngR5Qi4sczwFr1jU4V4F7nm8xzFQK9C', 'noopProgramAddress'],\n\n // Well-known mints\n ['So11111111111111111111111111111111111111112', 'wrappedSolAddress'],\n ['EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', 'usdcAddress'],\n ['Es9vMFrzaCERm6YKXx6bqKr1Rmd9b5v3J8rM5e4rfF4', 'usdtAddress'],\n]);","import type {\n InstructionInputValueNode,\n ValueNode,\n} from \"@codama/nodes\";\n\nimport type { Fragment } from \"./fragment.js\";\nimport { fragment, fragmentFromString, use } from \"./fragment.js\";\nimport { WELL_KNOWN_ADDRESSES } from \"./wellKnownAddresses.js\";\n\ntype RenderableValueNode = InstructionInputValueNode | ValueNode;\n\n/**\n * Render a standalone Codama value as a Dart expression.\n *\n * Contextual instruction values need resolver state and are deliberately\n * rejected here. Defaults and discriminators must be deterministic at code\n * generation time so generated encoders cannot silently choose a different\n * wire value.\n */\nexport function getDartValueFragment(\n value: RenderableValueNode,\n dartType?: string,\n): Fragment {\n switch (value.kind) {\n case \"numberValueNode\":\n return fragmentFromString(\n dartType === \"BigInt\"\n ? `BigInt.from(${value.number})`\n : String(value.number),\n );\n case \"booleanValueNode\":\n return fragmentFromString(String(value.boolean));\n case \"stringValueNode\":\n return fragmentFromString(toDartStringLiteral(value.string));\n case \"noneValueNode\":\n return fragmentFromString(\"null\");\n case \"bytesValueNode\": {\n if (value.encoding !== \"base16\") {\n throw new Error(\n `Unsupported deterministic bytes encoding: ${value.encoding}`,\n );\n }\n const clean = value.data.replace(/^0x/, \"\");\n if (clean.length % 2 !== 0 || !/^[0-9a-f]*$/i.test(clean)) {\n throw new Error(`Invalid hexadecimal bytes value: ${value.data}`);\n }\n const bytes = clean.match(/.{2}/g)?.map((byte) => `0x${byte}`) ?? [];\n return fragment`${use(\"Uint8List\", \"dartTypedData\")}.fromList([${fragmentFromString(bytes.join(\", \"))}])`;\n }\n case \"publicKeyValueNode\": {\n const wellKnownName = WELL_KNOWN_ADDRESSES.get(value.publicKey);\n return wellKnownName\n ? fragment`${use(wellKnownName, \"solanaAddresses\")}`\n : fragment`${use(\"Address\", \"solanaAddresses\")}(${fragmentFromString(toDartStringLiteral(value.publicKey))})`;\n }\n default:\n throw new Error(\n `Unsupported deterministic Dart value node: ${value.kind}`,\n );\n }\n}\n\n/** Return whether a rendered standalone value is valid in a const initializer. */\nexport function isConstDartValueNode(value: RenderableValueNode): boolean {\n switch (value.kind) {\n case \"numberValueNode\":\n case \"booleanValueNode\":\n case \"stringValueNode\":\n case \"noneValueNode\":\n case \"publicKeyValueNode\":\n return true;\n default:\n return false;\n }\n}\n\nfunction toDartStringLiteral(value: string): string {\n return `'${value\n .replaceAll(\"\\\\\", \"\\\\\\\\\")\n .replaceAll(\"\\n\", \"\\\\n\")\n .replaceAll(\"\\r\", \"\\\\r\")\n .replaceAll(\"\\t\", \"\\\\t\")\n .replaceAll(\"\\b\", \"\\\\b\")\n .replaceAll(\"\\f\", \"\\\\f\")\n .replaceAll(\"$\", \"\\\\$\")\n .replaceAll(\"'\", \"\\\\'\")}'`;\n}\n","import type {\n AccountNode,\n ConstantValueNode,\n InstructionNode,\n StructFieldTypeNode,\n} from \"@codama/nodes\";\nimport { resolveNestedTypeNode } from \"@codama/nodes\";\nimport { visit } from \"@codama/visitors-core\";\n\nimport type { Fragment } from \"./fragment.js\";\nimport {\n emptyFragment,\n fragment,\n fragmentFromString,\n mergeFragments,\n use,\n} from \"./fragment.js\";\nimport type { RenderScope } from \"./options.js\";\nimport { getDartValueFragment } from \"./valueNodes.js\";\n\ntype DiscriminatedNode = AccountNode | InstructionNode;\n\n/**\n * Generate decoder guards for every discriminator declared by a Codama node.\n */\nexport function getDiscriminatorValidationFragment(\n node: DiscriminatedNode,\n scope: RenderScope,\n): Fragment {\n const discriminators = node.discriminators ?? [];\n if (discriminators.length === 0) return emptyFragment();\n\n const fields = getDiscriminatorFields(node);\n const fragments = discriminators.map((discriminator): Fragment => {\n switch (discriminator.kind) {\n case \"constantDiscriminatorNode\":\n return getConstantValidationFragment(\n discriminator.constant,\n discriminator.offset,\n scope,\n );\n case \"fieldDiscriminatorNode\": {\n const field = fields.find(\n (candidate) => candidate.name === discriminator.name,\n );\n if (field?.defaultValue == null) {\n throw new Error(\n `Field discriminator \"${discriminator.name}\" on ${node.kind} \"${node.name}\" must reference a field with a default value.`,\n );\n }\n return getConstantValidationFragment(\n {\n kind: \"constantValueNode\",\n type: field.type,\n value: field.defaultValue,\n } as ConstantValueNode,\n discriminator.offset,\n scope,\n );\n }\n case \"sizeDiscriminatorNode\": {\n if (\n !Number.isSafeInteger(discriminator.size) ||\n discriminator.size < 0\n ) {\n throw new Error(\n `Discriminator size must be a non-negative safe integer, got ${discriminator.size}.`,\n );\n }\n return fragment`if (bytes.length - offset != ${fragmentFromString(String(discriminator.size))}) {\n throw ${use(\"SolanaError\", \"solanaErrors\")}(\n ${use(\"SolanaErrorCode\", \"solanaErrors\")}.codecsInvalidByteLength,\n {\n 'codecDescription': '${fragmentFromString(node.name as string)} discriminator',\n 'expected': ${fragmentFromString(String(discriminator.size))},\n 'bytesLength': bytes.length - offset,\n },\n );\n}`;\n }\n }\n });\n\n return mergeFragments(fragments, (contents) => contents.join(\"\\n\"));\n}\n\nfunction getConstantValidationFragment(\n constant: ConstantValueNode,\n discriminatorOffset: number,\n scope: RenderScope,\n): Fragment {\n if (!Number.isSafeInteger(discriminatorOffset) || discriminatorOffset < 0) {\n throw new Error(\n `Discriminator offset must be a non-negative safe integer, got ${discriminatorOffset}.`,\n );\n }\n\n const manifest = visit(constant.type, scope.typeManifestVisitor);\n const value = getDartValueFragment(\n constant.value,\n manifest.type.content,\n );\n return fragment`${use(\"getConstantDecoder\", \"solanaCodecsDataStructures\")}(\n ${manifest.encoder}.encode(${value}),\n).read(bytes, offset + ${fragmentFromString(String(discriminatorOffset))});`;\n}\n\nfunction getDiscriminatorFields(\n node: DiscriminatedNode,\n): readonly StructFieldTypeNode[] {\n if (node.kind === \"accountNode\") {\n return resolveNestedTypeNode(node.data).fields ?? [];\n }\n return (node.arguments ?? []).map(\n (argument) =>\n ({\n ...argument,\n kind: \"structFieldTypeNode\",\n }) as StructFieldTypeNode,\n );\n}\n","import type { Fragment } from \"./fragment.js\";\nimport { fragment, fragmentFromString, use } from \"./fragment.js\";\n\nexport interface TopLevelDecoderFragmentOptions {\n readonly typeName: string;\n readonly description: string;\n readonly discriminatorValidation: Fragment;\n readonly fromMapFields: string;\n readonly requireExactConsumption: boolean;\n}\n\n/**\n * Wrap a generated top-level struct decoder with discriminator and length\n * validation.\n *\n * The wrapper preserves fixed/variable decoder metadata so it remains\n * compatible with the matching generated encoder when combined into a codec.\n */\nexport function getTopLevelDecoderFragment({\n typeName,\n description,\n discriminatorValidation,\n fromMapFields,\n requireExactConsumption,\n}: TopLevelDecoderFragmentOptions): Fragment {\n const validation = discriminatorValidation.content\n ? ` ${discriminatorValidation.content.replaceAll(\"\\n\", \"\\n \")}\\n`\n : \"\";\n\n const consumptionCheck = requireExactConsumption\n ? ` if (newOffset != bytes.length) {\n throwInvalidByteLength(newOffset - offset, bytes.length - offset);\n }\n`\n : \"\";\n const fixedSizeCheck = requireExactConsumption\n ? \"bytesLength != structDecoder.fixedSize\"\n : \"bytesLength < structDecoder.fixedSize\";\n\n const result = fragment` Never throwInvalidByteLength(int expected, int bytesLength) {\n throw ${use(\"SolanaError\", \"solanaErrors\")}(\n ${use(\"SolanaErrorCode\", \"solanaErrors\")}.codecsInvalidByteLength,\n {\n 'codecDescription': '${fragmentFromString(description)}',\n 'expected': expected,\n 'bytesLength': bytesLength,\n },\n );\n }\n\n (${fragmentFromString(typeName)}, int) readTopLevel(Uint8List bytes, int offset) {\n${fragmentFromString(validation)} final (map, newOffset) = structDecoder.read(bytes, offset);\n${fragmentFromString(consumptionCheck)}\n return (\n ${fragmentFromString(typeName)}(\n${fragmentFromString(fromMapFields)}\n ),\n newOffset,\n );\n }\n\n return switch (structDecoder) {\n ${use(\"FixedSizeDecoder\", \"solanaCodecsCore\")}<Map<String, Object?>>() =>\n ${use(\"FixedSizeDecoder\", \"solanaCodecsCore\")}<${fragmentFromString(typeName)}>(\n fixedSize: structDecoder.fixedSize,\n read: (bytes, offset) {\n final bytesLength = bytes.length - offset;\n if (${fragmentFromString(fixedSizeCheck)}) {\n throwInvalidByteLength(structDecoder.fixedSize, bytesLength);\n }\n return readTopLevel(bytes, offset);\n },\n ),\n ${use(\"VariableSizeDecoder\", \"solanaCodecsCore\")}<Map<String, Object?>>() =>\n ${use(\"VariableSizeDecoder\", \"solanaCodecsCore\")}<${fragmentFromString(typeName)}>(\n read: readTopLevel,\n maxSize: structDecoder.maxSize,\n ),\n };`;\n result.imports.mergeWith(discriminatorValidation.imports);\n return result;\n}\n","import type { Fragment } from \"./fragment.js\";\nimport { emptyFragment } from \"./fragment.js\";\n\n/**\n * Represents how a Codama type maps to Dart types and codec expressions.\n */\nexport interface TypeManifest {\n /** The Dart type name (e.g. `int`, `BigInt`, `Address`, `MyStruct`). */\n type: Fragment;\n /** The Dart encoder expression (e.g. `getU8Encoder()`). */\n encoder: Fragment;\n /** The Dart decoder expression (e.g. `getU8Decoder()`). */\n decoder: Fragment;\n /** The Dart value expression for default values. */\n value: Fragment;\n /** Whether this is a scalar enum (Dart `enum`). */\n isEnum: boolean;\n}\n\n/**\n * Create an empty TypeManifest.\n */\nexport function emptyTypeManifest(): TypeManifest {\n return {\n type: emptyFragment(),\n encoder: emptyFragment(),\n decoder: emptyFragment(),\n value: emptyFragment(),\n isEnum: false,\n };\n}\n","import {\n type AccountNode,\n type AmountTypeNode,\n type ArrayTypeNode,\n type BooleanTypeNode,\n type BytesTypeNode,\n type CamelCaseString,\n type DateTimeTypeNode,\n type DefinedTypeLinkNode,\n type DefinedTypeNode,\n type EnumEmptyVariantTypeNode,\n type EnumStructVariantTypeNode,\n type EnumTupleVariantTypeNode,\n type EnumTypeNode,\n type FixedSizeTypeNode,\n type HiddenPrefixTypeNode,\n type HiddenSuffixTypeNode,\n type InstructionNode,\n type MapTypeNode,\n type NumberTypeNode,\n type OptionTypeNode,\n type PostOffsetTypeNode,\n type PreOffsetTypeNode,\n type PublicKeyTypeNode,\n type RemainderOptionTypeNode,\n type SentinelTypeNode,\n type SetTypeNode,\n type SizePrefixTypeNode,\n type SolAmountTypeNode,\n type StringTypeNode,\n type StructFieldTypeNode,\n type StructTypeNode,\n type TupleTypeNode,\n type ZeroableOptionTypeNode,\n isNode,\n resolveNestedTypeNode,\n} from \"@codama/nodes\";\nimport {\n type LinkableDictionary,\n type NodeStack,\n type Visitor,\n extendVisitor,\n staticVisitor,\n visit,\n} from \"@codama/visitors-core\";\nimport { CODAMA_ERROR__UNEXPECTED_NODE_KIND } from \"@codama/errors\";\nimport { CodamaError } from \"@codama/errors\";\n\nimport {\n type Fragment,\n type TypeManifest,\n emptyTypeManifest,\n fragment,\n fragmentFromString,\n use,\n} from \"../utils/index.js\";\nimport { type DartNameApi, snakeCase } from \"../utils/nameTransformers.js\";\n\n/**\n * Type alias for the type manifest visitor.\n */\nexport type TypeManifestVisitor = ReturnType<typeof getTypeManifestVisitor>;\n\n/**\n * Creates a visitor that maps Codama type/value nodes to TypeManifest objects.\n * Each TypeManifest contains Dart type, encoder, decoder, and value expressions.\n */\nexport function getTypeManifestVisitor(input: {\n nameApi: DartNameApi;\n linkables: LinkableDictionary;\n stack: NodeStack;\n nonScalarEnums?: CamelCaseString[];\n}) {\n const { nameApi, linkables, nonScalarEnums = [] } = input;\n\n const baseVisitor = staticVisitor<TypeManifest>(\n (node): TypeManifest => {\n throw new CodamaError(CODAMA_ERROR__UNEXPECTED_NODE_KIND, {\n expectedKinds: [\"typeNode\"],\n kind: (node as { kind: string }).kind,\n } as never);\n },\n {\n keys: [\n // Type nodes\n \"numberTypeNode\",\n \"booleanTypeNode\",\n \"stringTypeNode\",\n \"publicKeyTypeNode\",\n \"bytesTypeNode\",\n \"arrayTypeNode\",\n \"mapTypeNode\",\n \"setTypeNode\",\n \"tupleTypeNode\",\n \"structTypeNode\",\n \"structFieldTypeNode\",\n \"enumTypeNode\",\n \"enumEmptyVariantTypeNode\",\n \"enumStructVariantTypeNode\",\n \"enumTupleVariantTypeNode\",\n \"optionTypeNode\",\n \"remainderOptionTypeNode\",\n \"zeroableOptionTypeNode\",\n \"fixedSizeTypeNode\",\n \"sizePrefixTypeNode\",\n \"hiddenPrefixTypeNode\",\n \"hiddenSuffixTypeNode\",\n \"sentinelTypeNode\",\n \"preOffsetTypeNode\",\n \"postOffsetTypeNode\",\n \"solAmountTypeNode\",\n \"amountTypeNode\",\n \"dateTimeTypeNode\",\n \"definedTypeLinkNode\",\n // Context nodes (for links)\n \"definedTypeNode\",\n \"accountNode\",\n \"instructionNode\",\n ],\n },\n );\n\n return extendVisitor(baseVisitor, {\n visitNumberType(node: NumberTypeNode, { self }) {\n const { format, endian } = node;\n const endianSuffix =\n endian === \"be\"\n ? \", NumberCodecConfig(endian: Endian.big)\"\n : \"\";\n const endianDecoderSuffix =\n endian === \"be\"\n ? \", NumberCodecConfig(endian: Endian.big)\"\n : \"\";\n\n // Map format to Dart type and codec\n const dartType = getNumberDartType(format);\n const codecName = getNumberCodecName(format);\n\n return {\n // `BigInt` and other number types live in `dart:core` and need no import.\n type: fragmentFromString(dartType),\n encoder: fragment`${use(\n `get${codecName}Encoder`,\n \"solanaCodecsNumbers\",\n )}(${endianSuffix ? fragmentFromString(endianSuffix.slice(2)) : fragmentFromString(\"\")})`,\n decoder: fragment`${use(\n `get${codecName}Decoder`,\n \"solanaCodecsNumbers\",\n )}(${endianDecoderSuffix ? fragmentFromString(endianDecoderSuffix.slice(2)) : fragmentFromString(\"\")})`,\n value: emptyTypeManifest().value,\n isEnum: false,\n };\n },\n\n visitBooleanType(_node: BooleanTypeNode, { self }) {\n return {\n type: fragmentFromString(\"bool\"),\n encoder: fragment`${use(\n \"getBooleanEncoder\",\n \"solanaCodecsDataStructures\",\n )}()`,\n decoder: fragment`${use(\n \"getBooleanDecoder\",\n \"solanaCodecsDataStructures\",\n )}()`,\n value: emptyTypeManifest().value,\n isEnum: false,\n };\n },\n\n visitStringType(node: StringTypeNode, { self }) {\n const { encoding } = node;\n const codecMap: Record<string, string> = {\n utf8: \"Utf8\",\n base58: \"Base58\",\n base64: \"Base64\",\n base16: \"Base16\",\n };\n const codecName = codecMap[encoding] ?? \"Utf8\";\n return {\n type: fragmentFromString(\"String\"),\n encoder: fragment`${use(\n `get${codecName}Encoder`,\n \"solanaCodecsStrings\",\n )}()`,\n decoder: fragment`${use(\n `get${codecName}Decoder`,\n \"solanaCodecsStrings\",\n )}()`,\n value: emptyTypeManifest().value,\n isEnum: false,\n };\n },\n\n visitPublicKeyType(_node: PublicKeyTypeNode, { self }) {\n return {\n type: fragment`${use(\"Address\", \"solanaAddresses\")}`,\n encoder: fragment`${use(\n \"getAddressEncoder\",\n \"solanaAddresses\",\n )}()`,\n decoder: fragment`${use(\n \"getAddressDecoder\",\n \"solanaAddresses\",\n )}()`,\n value: emptyTypeManifest().value,\n isEnum: false,\n };\n },\n\n visitBytesType(_node: BytesTypeNode, { self }) {\n return {\n type: fragment`${use(\"Uint8List\", \"dartTypedData\")}`,\n encoder: fragment`${use(\n \"getBytesEncoder\",\n \"solanaCodecsDataStructures\",\n )}()`,\n decoder: fragment`${use(\n \"getBytesDecoder\",\n \"solanaCodecsDataStructures\",\n )}()`,\n value: emptyTypeManifest().value,\n isEnum: false,\n };\n },\n\n visitArrayType(node: ArrayTypeNode, { self }) {\n const itemManifest = visit(node.item, self);\n const encoderSizeExpr = getArraySizeExpression(node, \"Encoder\");\n const decoderSizeExpr = getArraySizeExpression(node, \"Decoder\");\n const itemType = fragmentFromString(itemManifest.type.content);\n const itemEncoder = fragment`${use(\n \"transformEncoder\",\n \"solanaCodecsCore\",\n )}(${itemManifest.encoder}, (${itemType} value) => value)`;\n\n return {\n type: fragment`List<${itemManifest.type}>`,\n encoder: fragment`${use(\n \"getArrayEncoder\",\n \"solanaCodecsDataStructures\",\n )}(${itemEncoder}${encoderSizeExpr})`,\n decoder: fragment`${use(\n \"getArrayDecoder\",\n \"solanaCodecsDataStructures\",\n )}(${itemManifest.decoder}${decoderSizeExpr})`,\n value: emptyTypeManifest().value,\n isEnum: false,\n };\n },\n\n visitMapType(node: MapTypeNode, { self }) {\n const keyManifest = visit(node.key, self);\n const valueManifest = visit(node.value, self);\n const encoderSizeExpr = getMapSizeExpression(node, \"Encoder\");\n const decoderSizeExpr = getMapSizeExpression(node, \"Decoder\");\n\n return {\n type: fragment`Map<${keyManifest.type}, ${valueManifest.type}>`,\n encoder: fragment`${use(\n \"getMapEncoder\",\n \"solanaCodecsDataStructures\",\n )}(${keyManifest.encoder}, ${valueManifest.encoder}${encoderSizeExpr})`,\n decoder: fragment`${use(\n \"getMapDecoder\",\n \"solanaCodecsDataStructures\",\n )}(${keyManifest.decoder}, ${valueManifest.decoder}${decoderSizeExpr})`,\n value: emptyTypeManifest().value,\n isEnum: false,\n };\n },\n\n visitSetType(node: SetTypeNode, { self }) {\n const itemManifest = visit(node.item, self);\n const encoderSizeExpr = getSetSizeExpression(node, \"Encoder\");\n const decoderSizeExpr = getSetSizeExpression(node, \"Decoder\");\n\n return {\n type: fragment`Set<${itemManifest.type}>`,\n encoder: fragment`${use(\n \"getSetEncoder\",\n \"solanaCodecsDataStructures\",\n )}(${itemManifest.encoder}${encoderSizeExpr})`,\n decoder: fragment`${use(\n \"getSetDecoder\",\n \"solanaCodecsDataStructures\",\n )}(${itemManifest.decoder}${decoderSizeExpr})`,\n value: emptyTypeManifest().value,\n isEnum: false,\n };\n },\n\n visitTupleType(node: TupleTypeNode, { self }) {\n const itemManifests = (node.items ?? []).map((item) => visit(item, self));\n const typeList = itemManifests\n .map((m) => m.type.content)\n .join(\", \");\n const encoderList = itemManifests.map((m) => m.encoder);\n const decoderList = itemManifests.map((m) => m.decoder);\n\n // Merge imports from all items\n const typeFragment = fragment`(${fragmentFromString(typeList)})`;\n for (const m of itemManifests) {\n typeFragment.imports.mergeWith(m.type.imports);\n }\n\n const encoderListStr = encoderList.map((e) => e.content).join(\", \");\n const decoderListStr = decoderList.map((d) => d.content).join(\", \");\n // Two-element tuples render through the typed getTuple2 helpers so the\n // generated value type is the Dart record `(T1, T2)` rather than a\n // heterogeneous List<Object?>. Arity-2 is the only shape that currently\n // appears in supported IDLs; wider tuples stay on the untyped helpers.\n let tupleEncoderFn = \"getTupleEncoder\";\n let tupleDecoderFn = \"getTupleDecoder\";\n let tupleEncoderArgs = `[${encoderListStr}]`;\n let tupleDecoderArgs = `[${decoderListStr}]`;\n if (itemManifests.length === 2) {\n tupleEncoderFn = \"getTuple2Encoder\";\n tupleDecoderFn = \"getTuple2Decoder\";\n tupleEncoderArgs = encoderListStr;\n tupleDecoderArgs = decoderListStr;\n }\n const encoderFrag = fragment`${use(\n tupleEncoderFn,\n \"solanaCodecsDataStructures\",\n )}(${tupleEncoderArgs})`;\n for (const e of encoderList) {\n encoderFrag.imports.mergeWith(e.imports);\n }\n\n const decoderFrag = fragment`${use(\n tupleDecoderFn,\n \"solanaCodecsDataStructures\",\n )}(${tupleDecoderArgs})`;\n for (const d of decoderList) {\n decoderFrag.imports.mergeWith(d.imports);\n }\n\n return {\n type: typeFragment,\n encoder: encoderFrag,\n decoder: decoderFrag,\n value: emptyTypeManifest().value,\n isEnum: false,\n };\n },\n\n visitStructType(node: StructTypeNode, { self }) {\n const nodeFields = node.fields ?? [];\n const fields = nodeFields.map((f) => visit(f, self));\n const fieldNames = nodeFields.map((f) => f.name as string);\n\n // Type: Map<String, Object?> (for inline structs without a name)\n const typeStr = \"Map<String, Object?>\";\n\n // Build encoder fields list\n const encoderFields = fields\n .map((f, i) => `('${fieldNames[i]}', ${f.encoder.content})`)\n .join(\", \");\n const encoderFrag = fragment`${use(\n \"getStructEncoder\",\n \"solanaCodecsDataStructures\",\n )}([${fragmentFromString(encoderFields)}])`;\n for (const f of fields) {\n encoderFrag.imports.mergeWith(f.encoder.imports);\n }\n\n const decoderFields = fields\n .map((f, i) => `('${fieldNames[i]}', ${f.decoder.content})`)\n .join(\", \");\n const decoderFrag = fragment`${use(\n \"getStructDecoder\",\n \"solanaCodecsDataStructures\",\n )}([${fragmentFromString(decoderFields)}])`;\n for (const f of fields) {\n decoderFrag.imports.mergeWith(f.decoder.imports);\n }\n\n return {\n type: fragmentFromString(typeStr),\n encoder: encoderFrag,\n decoder: decoderFrag,\n value: emptyTypeManifest().value,\n isEnum: false,\n };\n },\n\n visitStructFieldType(node: StructFieldTypeNode, { self }) {\n return visit(node.type, self);\n },\n\n visitEnumType(node: EnumTypeNode, { self }) {\n // Check if this is a scalar enum (all empty variants)\n const isScalar = (node.variants ?? []).every(\n (v) => v.kind === \"enumEmptyVariantTypeNode\",\n );\n\n if (isScalar) {\n // Scalar enums use a simple int-based encoder\n return {\n type: emptyTypeManifest().type, // Will be replaced by the named type\n encoder: emptyTypeManifest().encoder,\n decoder: emptyTypeManifest().decoder,\n value: emptyTypeManifest().value,\n isEnum: true,\n };\n }\n\n // Data enum — uses discriminated union\n return {\n type: emptyTypeManifest().type,\n encoder: emptyTypeManifest().encoder,\n decoder: emptyTypeManifest().decoder,\n value: emptyTypeManifest().value,\n isEnum: false,\n };\n },\n\n visitEnumEmptyVariantType(\n _node: EnumEmptyVariantTypeNode,\n { self },\n ) {\n return emptyTypeManifest();\n },\n\n visitEnumStructVariantType(\n node: EnumStructVariantTypeNode,\n { self },\n ) {\n return visit(node.struct, self);\n },\n\n visitEnumTupleVariantType(\n node: EnumTupleVariantTypeNode,\n { self },\n ) {\n return visit(node.tuple, self);\n },\n\n visitOptionType(node: OptionTypeNode, { self }) {\n const itemManifest = visit(node.item, self);\n const itemTypeStr = itemManifest.type.content;\n const resolvedPrefix = resolveNestedTypeNode(node.prefix);\n const prefixExpr = resolvedPrefix.format !== \"u8\"\n ? `, prefix: ${getNumberCodecExpression(resolvedPrefix.format, \"Encoder\")}`\n : \"\";\n const prefixDecoderExpr = resolvedPrefix.format !== \"u8\"\n ? `, prefix: ${getNumberCodecExpression(resolvedPrefix.format, \"Decoder\")}`\n : \"\";\n const noneValueExpr = node.fixed\n ? \", noneValue: const ZeroesNoneValue()\"\n : \"\";\n\n return {\n type: fragment`${itemManifest.type}?`,\n encoder: fragment`${use(\n \"getNullableEncoder\",\n \"solanaCodecsDataStructures\",\n )}<${fragmentFromString(itemTypeStr)}>(${use(\n \"transformEncoder\",\n \"solanaCodecsCore\",\n )}(${itemManifest.encoder}, (${fragmentFromString(itemTypeStr)} value) => value)${fragmentFromString(prefixExpr)}${fragmentFromString(noneValueExpr)})`,\n decoder: fragment`${use(\n \"getNullableDecoder\",\n \"solanaCodecsDataStructures\",\n )}<${fragmentFromString(itemTypeStr)}>(${itemManifest.decoder}${fragmentFromString(prefixDecoderExpr)}${fragmentFromString(noneValueExpr)})`,\n value: emptyTypeManifest().value,\n isEnum: false,\n };\n },\n\n visitRemainderOptionType(\n node: RemainderOptionTypeNode,\n { self },\n ) {\n const itemManifest = visit(node.item, self);\n const itemTypeStr = itemManifest.type.content;\n\n return {\n type: fragment`${itemManifest.type}?`,\n encoder: fragment`${use(\n \"getNullableEncoder\",\n \"solanaCodecsDataStructures\",\n )}<${fragmentFromString(itemTypeStr)}>(${itemManifest.encoder}, hasPrefix: false)`,\n decoder: fragment`${use(\n \"getNullableDecoder\",\n \"solanaCodecsDataStructures\",\n )}<${fragmentFromString(itemTypeStr)}>(${itemManifest.decoder}, hasPrefix: false)`,\n value: emptyTypeManifest().value,\n isEnum: false,\n };\n },\n\n visitZeroableOptionType(\n node: ZeroableOptionTypeNode,\n { self },\n ) {\n const itemManifest = visit(node.item, self);\n const itemTypeStr = itemManifest.type.content;\n\n return {\n type: fragment`${itemManifest.type}?`,\n encoder: fragment`${use(\n \"getNullableEncoder\",\n \"solanaCodecsDataStructures\",\n )}<${fragmentFromString(itemTypeStr)}>(${itemManifest.encoder}, hasPrefix: false, noneValue: const ZeroesNoneValue())`,\n decoder: fragment`${use(\n \"getNullableDecoder\",\n \"solanaCodecsDataStructures\",\n )}<${fragmentFromString(itemTypeStr)}>(${itemManifest.decoder}, hasPrefix: false, noneValue: const ZeroesNoneValue())`,\n value: emptyTypeManifest().value,\n isEnum: false,\n };\n },\n\n visitFixedSizeType(node: FixedSizeTypeNode, { self }) {\n const innerManifest = visit(node.type, self);\n\n return {\n type: innerManifest.type,\n encoder: fragment`${use(\n \"fixEncoderSize\",\n \"solanaCodecsCore\",\n )}(${innerManifest.encoder}, ${fragmentFromString(String(node.size))}, allowTruncation: false)`,\n decoder: fragment`${use(\n \"fixDecoderSize\",\n \"solanaCodecsCore\",\n )}(${innerManifest.decoder}, ${fragmentFromString(String(node.size))})`,\n value: innerManifest.value,\n isEnum: innerManifest.isEnum,\n };\n },\n\n visitSizePrefixType(node: SizePrefixTypeNode, { self }) {\n const innerManifest = visit(node.type, self);\n\n // The Dart addEncoderSizePrefix / addDecoderSizePrefix APIs require\n // Encoder<num> / Decoder<num> for the prefix, but BigInt-width number\n // types (u64, u128, i64, i128) return Encoder<BigInt> which is\n // incompatible. Transform the BigInt codec to int so it satisfies the\n // num constraint while preserving the on-chain byte width (e.g. the\n // system program's bincode u64 string-length prefix).\n const bigIntFormats = new Set([\"u64\", \"u128\", \"i64\", \"i128\"]);\n let prefixManifest;\n if (\n node.prefix.kind === \"numberTypeNode\" &&\n bigIntFormats.has((node.prefix as any).format)\n ) {\n const codecName = getNumberCodecName((node.prefix as any).format);\n prefixManifest = {\n encoder: fragment`transformEncoder(${use(`get${codecName}Encoder`, \"solanaCodecsNumbers\")}(), (size) => BigInt.from(size))`,\n decoder: fragment`transformDecoder(${use(`get${codecName}Decoder`, \"solanaCodecsNumbers\")}(), (size, _, __) => size.toInt())`,\n };\n } else {\n prefixManifest = visit(node.prefix, self);\n }\n\n return {\n type: innerManifest.type,\n encoder: fragment`${use(\n \"addEncoderSizePrefix\",\n \"solanaCodecsCore\",\n )}(${innerManifest.encoder}, ${prefixManifest.encoder})`,\n decoder: fragment`${use(\n \"addDecoderSizePrefix\",\n \"solanaCodecsCore\",\n )}(${innerManifest.decoder}, ${prefixManifest.decoder})`,\n value: innerManifest.value,\n isEnum: innerManifest.isEnum,\n };\n },\n\n visitHiddenPrefixType(node: HiddenPrefixTypeNode, { self }) {\n const innerManifest = visit(node.type, self);\n const prefixes = (node.prefix ?? []).map((p) => getHiddenAffixManifest(p, self));\n const prefixEncoders = prefixes\n .map((p) => p.encoder.content)\n .join(\", \");\n const prefixDecoders = prefixes\n .map((p) => p.decoder.content)\n .join(\", \");\n\n const encoderFrag = fragment`${use(\n \"getHiddenPrefixEncoder\",\n \"solanaCodecsDataStructures\",\n )}(${innerManifest.encoder}, [${fragmentFromString(prefixEncoders)}])`;\n for (const p of prefixes) {\n encoderFrag.imports.mergeWith(p.encoder.imports);\n }\n\n const decoderFrag = fragment`${use(\n \"getHiddenPrefixDecoder\",\n \"solanaCodecsDataStructures\",\n )}(${innerManifest.decoder}, [${fragmentFromString(prefixDecoders)}])`;\n for (const p of prefixes) {\n decoderFrag.imports.mergeWith(p.decoder.imports);\n }\n\n return {\n type: innerManifest.type,\n encoder: encoderFrag,\n decoder: decoderFrag,\n value: innerManifest.value,\n isEnum: innerManifest.isEnum,\n };\n },\n\n visitHiddenSuffixType(node: HiddenSuffixTypeNode, { self }) {\n const innerManifest = visit(node.type, self);\n const suffixes = (node.suffix ?? []).map((s) => getHiddenAffixManifest(s, self));\n const suffixEncoders = suffixes\n .map((s) => s.encoder.content)\n .join(\", \");\n const suffixDecoders = suffixes\n .map((s) => s.decoder.content)\n .join(\", \");\n\n const encoderFrag = fragment`${use(\n \"getHiddenSuffixEncoder\",\n \"solanaCodecsDataStructures\",\n )}(${innerManifest.encoder}, [${fragmentFromString(suffixEncoders)}])`;\n for (const s of suffixes) {\n encoderFrag.imports.mergeWith(s.encoder.imports);\n }\n\n const decoderFrag = fragment`${use(\n \"getHiddenSuffixDecoder\",\n \"solanaCodecsDataStructures\",\n )}(${innerManifest.decoder}, [${fragmentFromString(suffixDecoders)}])`;\n for (const s of suffixes) {\n decoderFrag.imports.mergeWith(s.decoder.imports);\n }\n\n return {\n type: innerManifest.type,\n encoder: encoderFrag,\n decoder: decoderFrag,\n value: innerManifest.value,\n isEnum: innerManifest.isEnum,\n };\n },\n\n visitSentinelType(node: SentinelTypeNode, { self }) {\n const innerManifest = visit(node.type, self);\n const sentinelManifest = visit(node.sentinel, self);\n\n return {\n type: innerManifest.type,\n encoder: fragment`${use(\n \"addEncoderSentinel\",\n \"solanaCodecsCore\",\n )}(${innerManifest.encoder}, ${sentinelManifest.encoder})`,\n decoder: fragment`${use(\n \"addDecoderSentinel\",\n \"solanaCodecsCore\",\n )}(${innerManifest.decoder}, ${sentinelManifest.decoder})`,\n value: innerManifest.value,\n isEnum: innerManifest.isEnum,\n };\n },\n\n visitPreOffsetType(node: PreOffsetTypeNode, { self }) {\n // Pre-offset types pass through to inner type in Dart\n return visit(node.type, self);\n },\n\n visitPostOffsetType(node: PostOffsetTypeNode, { self }) {\n // Post-offset types pass through to inner type in Dart\n return visit(node.type, self);\n },\n\n visitSolAmountType(node: SolAmountTypeNode, { self }) {\n // SolAmount maps to BigInt (lamports)\n return visit(node.number, self);\n },\n\n visitAmountType(node: AmountTypeNode, { self }) {\n // Amount types pass through to their number type\n return visit(node.number, self);\n },\n\n visitDateTimeType(node: DateTimeTypeNode, { self }) {\n // DateTime types pass through to their number type\n return visit(node.number, self);\n },\n\n visitDefinedTypeLink(\n node: DefinedTypeLinkNode,\n { self }: { self: Visitor<TypeManifest> },\n ) {\n const name = node.name as string;\n const typeName = nameApi.dataType(name);\n const isNonScalar = nonScalarEnums.includes(node.name);\n const moduleKey = `definedType:${snakeCase(name)}`;\n\n return {\n type: fragment`${use(typeName, moduleKey)}`,\n encoder: fragment`${use(nameApi.encoderFunction(name), moduleKey)}()`,\n decoder: fragment`${use(nameApi.decoderFunction(name), moduleKey)}()`,\n value: emptyTypeManifest().value,\n isEnum: !isNonScalar,\n };\n },\n\n visitDefinedType(node: DefinedTypeNode, { self }) {\n return visit(node.type, self);\n },\n\n visitAccount(node: AccountNode, { self }) {\n return visit(node.data, self);\n },\n\n visitInstruction(node: InstructionNode, { self }) {\n return emptyTypeManifest();\n },\n });\n}\n\n// --- Helper functions ---\n\nfunction getNumberDartType(\n format: string,\n): string {\n switch (format) {\n case \"u8\":\n case \"u16\":\n case \"u32\":\n case \"i8\":\n case \"i16\":\n case \"i32\":\n case \"shortU16\":\n return \"int\";\n case \"u64\":\n case \"u128\":\n case \"i64\":\n case \"i128\":\n return \"BigInt\";\n case \"f32\":\n case \"f64\":\n return \"double\";\n default:\n return \"int\";\n }\n}\n\nfunction getNumberCodecName(format: string): string {\n switch (format) {\n case \"u8\":\n return \"U8\";\n case \"u16\":\n return \"U16\";\n case \"u32\":\n return \"U32\";\n case \"u64\":\n return \"U64\";\n case \"u128\":\n return \"U128\";\n case \"i8\":\n return \"I8\";\n case \"i16\":\n return \"I16\";\n case \"i32\":\n return \"I32\";\n case \"i64\":\n return \"I64\";\n case \"i128\":\n return \"I128\";\n case \"f32\":\n return \"F32\";\n case \"f64\":\n return \"F64\";\n case \"shortU16\":\n return \"ShortU16\";\n default:\n return \"U8\";\n }\n}\n\nfunction getNumberCodecExpression(\n format: string,\n codecType: \"Encoder\" | \"Decoder\",\n): string {\n const name = getNumberCodecName(format);\n return `get${name}${codecType}()`;\n}\n\nfunction getArraySizeExpression(\n node: ArrayTypeNode,\n codecType: \"Encoder\" | \"Decoder\",\n): string {\n if (!(\"count\" in node) || !node.count) return \"\";\n const count = node.count;\n switch (count.kind) {\n case \"fixedCountNode\":\n return `, size: FixedArraySize(${count.value})`;\n case \"remainderCountNode\":\n return \", size: RemainderArraySize()\";\n case \"prefixedCountNode\": {\n const resolvedPrefix = resolveNestedTypeNode(count.prefix);\n if (resolvedPrefix.format === \"u32\" && (!resolvedPrefix.endian || resolvedPrefix.endian === \"le\")) {\n return \"\"; // Default\n }\n return `, size: PrefixedArraySize(${getNumberCodecExpression(resolvedPrefix.format, codecType)})`;\n }\n default:\n return \"\";\n }\n}\n\nfunction getMapSizeExpression(\n node: MapTypeNode,\n codecType: \"Encoder\" | \"Decoder\",\n): string {\n if (!(\"count\" in node) || !node.count) return \"\";\n const count = node.count;\n switch (count.kind) {\n case \"fixedCountNode\":\n return `, size: FixedArraySize(${count.value})`;\n case \"remainderCountNode\":\n return \", size: RemainderArraySize()\";\n case \"prefixedCountNode\": {\n const resolvedPrefix = resolveNestedTypeNode(count.prefix);\n if (resolvedPrefix.format === \"u32\" && (!resolvedPrefix.endian || resolvedPrefix.endian === \"le\")) {\n return \"\";\n }\n return `, size: PrefixedArraySize(${getNumberCodecExpression(resolvedPrefix.format, codecType)})`;\n }\n default:\n return \"\";\n }\n}\n\nfunction getSetSizeExpression(\n node: SetTypeNode,\n codecType: \"Encoder\" | \"Decoder\",\n): string {\n if (!(\"count\" in node) || !node.count) return \"\";\n const count = node.count;\n switch (count.kind) {\n case \"fixedCountNode\":\n return `, size: FixedArraySize(${count.value})`;\n case \"remainderCountNode\":\n return \", size: RemainderArraySize()\";\n case \"prefixedCountNode\": {\n const resolvedPrefix = resolveNestedTypeNode(count.prefix);\n if (resolvedPrefix.format === \"u32\" && (!resolvedPrefix.endian || resolvedPrefix.endian === \"le\")) {\n return \"\";\n }\n return `, size: PrefixedArraySize(${getNumberCodecExpression(resolvedPrefix.format, codecType)})`;\n }\n default:\n return \"\";\n }\n}\n\ntype HiddenAffixManifest = {\n encoder: Fragment;\n decoder: Fragment;\n};\n\nfunction getHiddenAffixManifest(\n node: any,\n self: Visitor<TypeManifest>,\n): HiddenAffixManifest {\n if (node?.kind !== \"constantValueNode\") {\n const manifest = visit(node, self);\n return { encoder: manifest.encoder, decoder: manifest.decoder };\n }\n\n const constantBytes = getConstantBytesExpression(node);\n return {\n encoder: fragment`${use(\"getConstantEncoder\", \"solanaCodecsDataStructures\")}(${constantBytes})`,\n decoder: fragment`${use(\"getConstantDecoder\", \"solanaCodecsDataStructures\")}(${constantBytes})`,\n };\n}\n\nfunction getConstantBytesExpression(node: any): Fragment {\n const valueNode = node.value;\n const typeNode = node.type;\n\n if (valueNode?.kind !== \"numberValueNode\") {\n throw new Error(\n `Unsupported hidden affix constant value kind: ${valueNode?.kind}`,\n );\n }\n\n const value = Number(valueNode.number);\n\n if (typeNode?.kind === \"numberTypeNode\") {\n return fragment`${use(`get${getNumberCodecName(typeNode.format)}Encoder`, \"solanaCodecsNumbers\")}().encode(${value})`;\n }\n\n if (typeNode?.kind === \"preOffsetTypeNode\") {\n const inner = typeNode.type;\n if (inner?.kind !== \"numberTypeNode\") {\n throw new Error(\n `Unsupported hidden affix pre-offset inner type kind: ${inner?.kind}`,\n );\n }\n return fragment`${use(\"padLeftEncoder\", \"solanaCodecsCore\")}(${use(`get${getNumberCodecName(inner.format)}Encoder`, \"solanaCodecsNumbers\")}(), ${typeNode.offset}).encode(${value})`;\n }\n\n throw new Error(\n `Unsupported hidden affix constant type kind: ${typeNode?.kind}`,\n );\n}\n","import type {\n AccountNode,\n ConstantDiscriminatorNode,\n FieldDiscriminatorNode,\n InstructionNode,\n SizeDiscriminatorNode,\n} from \"@codama/nodes\";\nimport { visit } from \"@codama/visitors-core\";\n\nimport type { Fragment } from \"../utils/fragment.js\";\nimport { emptyFragment, fragment, fragmentFromString, mergeFragments, use } from \"../utils/fragment.js\";\nimport type { RenderScope } from \"../utils/options.js\";\nimport { bytesToDartHexList } from \"../utils/codecs.js\";\n\n/**\n * Generate discriminator constant declarations for an account or instruction.\n */\nexport function getDiscriminatorConstantsFragment(\n node: AccountNode | InstructionNode,\n scope: RenderScope,\n): Fragment {\n const discriminators = node.discriminators ?? [];\n if (discriminators.length === 0) return emptyFragment();\n\n const name = node.name as string;\n const constName = scope.nameApi.discriminatorConstant(name);\n\n const fragments: Fragment[] = [];\n\n for (const disc of discriminators) {\n switch (disc.kind) {\n case \"constantDiscriminatorNode\": {\n const constDisc = disc as ConstantDiscriminatorNode;\n if (constDisc.constant.value.kind === \"bytesValueNode\") {\n const bytes = hexToBytes(constDisc.constant.value.data);\n const hexList = bytesToDartHexList(bytes);\n fragments.push(\n fragment`/// The discriminator bytes for this ${node.kind === \"accountNode\" ? \"account\" : \"instruction\"}.\nfinal ${constName} = ${use(\"Uint8List\", \"dartTypedData\")}.fromList(${fragmentFromString(hexList)});`,\n );\n }\n break;\n }\n case \"fieldDiscriminatorNode\": {\n const fieldDisc = disc as FieldDiscriminatorNode;\n fragments.push(\n fragment`/// The discriminator field name: '${fragmentFromString(fieldDisc.name as string)}'.\n/// Offset: ${fragmentFromString(String(fieldDisc.offset))}.`,\n );\n break;\n }\n case \"sizeDiscriminatorNode\": {\n const sizeDisc = disc as SizeDiscriminatorNode;\n fragments.push(\n fragment`/// This ${node.kind === \"accountNode\" ? \"account\" : \"instruction\"} has a size discriminator of ${fragmentFromString(String(sizeDisc.size))} bytes.`,\n );\n break;\n }\n }\n }\n\n if (fragments.length === 0) return emptyFragment();\n\n return mergeFragments(fragments, (cs) => cs.join(\"\\n\\n\"));\n}\n\nfunction hexToBytes(hex: string): Uint8Array {\n const clean = hex.replace(/^0x/, \"\");\n const bytes = new Uint8Array(clean.length / 2);\n for (let i = 0; i < clean.length; i += 2) {\n bytes[i / 2] = parseInt(clean.slice(i, i + 2), 16);\n }\n return bytes;\n}\n","import type { AccountNode, StructFieldTypeNode } from \"@codama/nodes\";\nimport { resolveNestedTypeNode } from \"@codama/nodes\";\nimport { visit } from \"@codama/visitors-core\";\n\nimport type { Fragment } from \"../utils/fragment.js\";\nimport {\n emptyFragment,\n fragment,\n fragmentFromString,\n mergeFragments,\n use,\n} from \"../utils/fragment.js\";\nimport type { RenderScope } from \"../utils/options.js\";\nimport { camelCase } from \"../utils/nameTransformers.js\";\nimport { getDiscriminatorValidationFragment } from \"../utils/discriminators.js\";\nimport { getTopLevelDecoderFragment } from \"../utils/exactDecoder.js\";\nimport {\n getDartValueFragment,\n isConstDartValueNode,\n} from \"../utils/valueNodes.js\";\nimport { getDiscriminatorConstantsFragment } from \"./discriminatorConstants.js\";\n\n/**\n * Generate a full Dart file for an account.\n */\nexport function getAccountPageFragment(\n node: AccountNode,\n scope: RenderScope,\n): Fragment {\n const name = node.name as string;\n const typeName = scope.nameApi.dataType(name);\n // Fields from the struct data\n const fields = resolveNestedTypeNode(node.data).fields ?? [];\n\n // Visit each field type once and collect manifests for reuse\n const fieldManifests = fields.map((f: StructFieldTypeNode) => ({\n field: f,\n manifest: visit(f.type, scope.typeManifestVisitor),\n }));\n\n const omittedFields = fields.filter(isOmittedDefaultField);\n const constructorFields = fields.filter(\n (field) => !isOmittedDefaultField(field),\n );\n const forcedFields = new Set([\n ...omittedFields,\n ...fields.filter((field) => isFieldDiscriminator(field, node)),\n ]);\n const fieldDefaults = new Map(\n fieldManifests.flatMap(({ field, manifest }) => {\n if (!forcedFields.has(field) || field.defaultValue == null) return [];\n return [\n [\n field,\n getDartValueFragment(field.defaultValue, manifest.type.content),\n ] as const,\n ];\n }),\n );\n\n for (const field of forcedFields) {\n if (!fieldDefaults.has(field)) {\n throw new Error(\n `Forced field \"${field.name}\" on account \"${node.name}\" must have a deterministic default value.`,\n );\n }\n }\n\n const fieldDecls = fieldManifests\n .map(({ field: f, manifest }) => {\n return ` final ${manifest.type.content} ${camelCase(f.name as string)};`;\n })\n .join(\"\\n\");\n\n const ctorParams = constructorFields\n .map((f: StructFieldTypeNode) => ` required this.${camelCase(f.name as string)},`)\n .join(\"\\n\");\n\n const ctorInitializers = omittedFields\n .map((field) => {\n const fieldName = camelCase(field.name as string);\n return `${fieldName} = ${fieldDefaults.get(field)!.content}`;\n })\n .join(\",\\n \");\n\n // Empty structs use a no-arg constructor; `const Foo({})` is invalid Dart.\n const ctorKeyword = omittedFields.every((field) =>\n isConstDartValueNode(field.defaultValue!),\n )\n ? \"const \"\n : \"\";\n const ctorSignature = constructorFields.length === 0\n ? `${ctorKeyword}${typeName}()${ctorInitializers ? ` : ${ctorInitializers}` : \"\"};`\n : `${ctorKeyword}${typeName}({\\n${ctorParams}\\n })${ctorInitializers ? ` :\\n ${ctorInitializers}` : \"\"};`;\n\n const eqChecks =\n fields.length === 0\n ? \"true\"\n : fields\n .map(\n (f: StructFieldTypeNode) =>\n `${camelCase(f.name as string)} == other.${camelCase(f.name as string)}`,\n )\n .join(\" &&\\n \");\n\n const hashFieldNames = fields.map((f: StructFieldTypeNode) => camelCase(f.name as string));\n // `Object.hash()` requires at least two arguments, so handle 0/1 fields specially.\n const hashCodeExpr =\n hashFieldNames.length === 0\n ? \"0\"\n : hashFieldNames.length === 1\n ? `${hashFieldNames[0]}.hashCode`\n : `Object.hash(${hashFieldNames.join(\", \")})`;\n\n const toStringFields = fields\n .map(\n (f: StructFieldTypeNode) =>\n `${camelCase(f.name as string)}: \\$${camelCase(f.name as string)}`,\n )\n .join(\", \");\n\n // Encoder fields\n const encFields = fieldManifests\n .map(({ field: f, manifest }) => {\n return ` ('${f.name as string}', ${manifest.encoder.content}),`;\n })\n .join(\"\\n\");\n\n const decFields = fieldManifests\n .map(({ field: f, manifest }) => {\n return ` ('${f.name as string}', ${manifest.decoder.content}),`;\n })\n .join(\"\\n\");\n\n const toMapFields = fields\n .map((f: StructFieldTypeNode) => {\n const value = forcedFields.has(f)\n ? fieldDefaults.get(f)!.content\n : `value.${camelCase(f.name as string)}`;\n return ` '${f.name as string}': ${value},`;\n })\n .join(\"\\n\");\n\n const fromMapFields = fieldManifests\n .filter(({ field }) => !isOmittedDefaultField(field))\n .map(({ field: f, manifest }) => {\n const typeStr = manifest.type.content;\n const isNullable = typeStr.endsWith(\"?\");\n const accessor = isNullable ? `map['${f.name as string}']` : `map['${f.name as string}']!`;\n return ` ${camelCase(f.name as string)}: ${accessor} as ${typeStr},`;\n })\n .join(\"\\n\");\n\n const encoderName = scope.nameApi.encoderFunction(name);\n const decoderName = scope.nameApi.decoderFunction(name);\n const codecName = scope.nameApi.codecFunction(name);\n const decodeFnName = scope.nameApi.accountDecodeFunction(name);\n\n // Size\n const sizeFragment = node.size != null\n ? fragment`\n/// The size of the [${fragmentFromString(typeName)}] account data in bytes.\nconst int ${fragmentFromString(scope.nameApi.accountSizeConstant(name))} = ${fragmentFromString(String(node.size))};`\n : emptyFragment();\n\n // Discriminator\n const discFragment = getDiscriminatorConstantsFragment(node, scope);\n const discriminatorValidation = getDiscriminatorValidationFragment(\n node,\n scope,\n );\n const topLevelDecoder = getTopLevelDecoderFragment({\n typeName,\n description: `${name} account decoder`,\n discriminatorValidation,\n fromMapFields,\n requireExactConsumption: (node.discriminators ?? []).some(\n (discriminator) => discriminator.kind === \"sizeDiscriminatorNode\",\n ),\n });\n\n const parts: Fragment[] = [\n fragment`// Auto-generated. Do not edit.\n// ignore_for_file: type=lint\n\n${use(\"Uint8List\", \"dartTypedData\")}\n${use(\"immutable\", \"meta\")}\n${use(\"Encoder\", \"solanaCodecsCore\")}\n${use(\"Decoder\", \"solanaCodecsCore\")}\n${use(\"Codec\", \"solanaCodecsCore\")}\n${use(\"combineCodec\", \"solanaCodecsCore\")}\n${use(\"transformEncoder\", \"solanaCodecsCore\")}\n${use(\"transformDecoder\", \"solanaCodecsCore\")}\n${use(\"getStructEncoder\", \"solanaCodecsDataStructures\")}\n${use(\"getStructDecoder\", \"solanaCodecsDataStructures\")}\n${use(\"Account\", \"solanaAccounts\")}\n${use(\"EncodedAccount\", \"solanaAccounts\")}\n${use(\"decodeAccount\", \"solanaAccounts\")}\n\n@immutable\nclass ${fragmentFromString(typeName)} {\n ${fragmentFromString(ctorSignature)}\n\n${fragmentFromString(fieldDecls)}\n\n @override\n bool operator ==(Object other) =>\n identical(this, other) ||\n other is ${fragmentFromString(typeName)} &&\n runtimeType == other.runtimeType &&\n ${fragmentFromString(eqChecks)};\n\n @override\n int get hashCode => ${fragmentFromString(hashCodeExpr)};\n\n @override\n String toString() => '${fragmentFromString(typeName)}(${fragmentFromString(toStringFields)})';\n}`,\n ];\n\n if (sizeFragment.content) parts.push(sizeFragment);\n if (discFragment.content) parts.push(discFragment);\n\n parts.push(fragment`\nEncoder<${fragmentFromString(typeName)}> ${fragmentFromString(encoderName)}() {\n final structEncoder = getStructEncoder(<(String, Encoder<Object?>)>[\n${fragmentFromString(encFields)}\n ]);\n\n return transformEncoder(\n structEncoder,\n (${fragmentFromString(typeName)} value) => <String, Object?>{\n${fragmentFromString(toMapFields)}\n },\n );\n}\n\nDecoder<${fragmentFromString(typeName)}> ${fragmentFromString(decoderName)}() {\n final structDecoder = getStructDecoder(<(String, Decoder<Object?>)>[\n${fragmentFromString(decFields)}\n ]);\n\n${topLevelDecoder}\n}\n\nCodec<${fragmentFromString(typeName)}, ${fragmentFromString(typeName)}> ${fragmentFromString(codecName)}() {\n return combineCodec(${fragmentFromString(encoderName)}(), ${fragmentFromString(decoderName)}());\n}\n\nAccount<${fragmentFromString(typeName)}> ${fragmentFromString(decodeFnName)}(EncodedAccount encodedAccount) {\n return decodeAccount(encodedAccount, ${fragmentFromString(decoderName)}());\n}`);\n\n const result = mergeFragments(parts, (cs) => cs.join(\"\\n\\n\"));\n\n // Merge field type manifest imports (encoder, decoder, type) into the result\n for (const { manifest } of fieldManifests) {\n result.imports.mergeWith(manifest.encoder.imports);\n result.imports.mergeWith(manifest.decoder.imports);\n result.imports.mergeWith(manifest.type.imports);\n }\n for (const defaultValue of fieldDefaults.values()) {\n result.imports.mergeWith(defaultValue.imports);\n }\n\n return result;\n}\n\nfunction isOmittedDefaultField(field: StructFieldTypeNode): boolean {\n return field.defaultValue != null && field.defaultValueStrategy === \"omitted\";\n}\n\nfunction isFieldDiscriminator(\n field: StructFieldTypeNode,\n node: AccountNode,\n): boolean {\n return (node.discriminators ?? []).some(\n (discriminator) =>\n discriminator.kind === \"fieldDiscriminatorNode\" &&\n discriminator.name === field.name,\n );\n}\n","import type { ErrorNode, ProgramNode } from \"@codama/nodes\";\n\nimport type { Fragment } from \"../utils/fragment.js\";\nimport {\n emptyFragment,\n fragment,\n fragmentFromString,\n mergeFragments,\n use,\n} from \"../utils/fragment.js\";\nimport type { RenderScope } from \"../utils/options.js\";\nimport { camelCase, pascalCase, screamingSnakeCase } from \"../utils/nameTransformers.js\";\n\n/**\n * Generate a full Dart file for a program's errors.\n */\nexport function getErrorPageFragment(\n programNode: ProgramNode,\n scope: RenderScope,\n): Fragment {\n const errors = programNode.errors ?? [];\n if (errors.length === 0) return emptyFragment();\n\n const programName = programNode.name as string;\n\n // Error code constants\n const errorConstants = errors\n .map((err) => {\n const constName = scope.nameApi.errorConstant(\n programName,\n err.name as string,\n );\n const hexCode = `0x${err.code.toString(16)}`;\n const docs = err.docs?.length\n ? err.docs.map((d) => `/// ${d}`).join(\"\\n\") + \"\\n\"\n : \"\";\n const message = err.message ? `/// Message: \"${err.message}\"\\n` : \"\";\n return `${docs}${message}const int ${constName} = ${hexCode}; // ${err.code}`;\n })\n .join(\"\\n\\n\");\n\n // Error message map\n const messageEntries = errors\n .map((err) => {\n const constName = scope.nameApi.errorConstant(\n programName,\n err.name as string,\n );\n const message = err.message ?? err.name as string;\n return ` ${constName}: '${escapeString(message)}',`;\n })\n .join(\"\\n\");\n\n const errorMessageFnName = scope.nameApi.errorMessageFunction(programName);\n const isErrorFnName = `is${pascalCase(programName)}Error`;\n\n return fragment`// Auto-generated. Do not edit.\n// ignore_for_file: type=lint, constant_identifier_names\n\n/// Error codes for the ${fragmentFromString(pascalCase(programName))} program.\n\n${fragmentFromString(errorConstants)}\n\n/// Map of error codes to human-readable messages.\nconst Map<int, String> _${fragmentFromString(camelCase(programName))}ErrorMessages = {\n${fragmentFromString(messageEntries)}\n};\n\n/// Get the error message for a ${fragmentFromString(pascalCase(programName))} program error code.\nString? ${fragmentFromString(errorMessageFnName)}(int code) {\n return _${fragmentFromString(camelCase(programName))}ErrorMessages[code];\n}\n\n/// Check if an error code belongs to the ${fragmentFromString(pascalCase(programName))} program.\nbool ${fragmentFromString(isErrorFnName)}(int code) {\n return _${fragmentFromString(camelCase(programName))}ErrorMessages.containsKey(code);\n}`;\n}\n\nfunction escapeString(str: string): string {\n return str.replace(/'/g, \"\\\\'\").replace(/\\n/g, \"\\\\n\");\n}\n","import type { Fragment } from \"../utils/fragment.js\";\nimport { fragmentFromString } from \"../utils/fragment.js\";\n\n/**\n * Generate a barrel export Dart file that exports all files in a category.\n */\nexport function getIndexPageFragment(\n fileNames: string[],\n relativePath: string = \"\",\n): Fragment {\n if (fileNames.length === 0) {\n return fragmentFromString(\n \"// Auto-generated. Do not edit.\\n// ignore_for_file: type=lint\\n\",\n );\n }\n\n const exports = fileNames\n .sort()\n .map((f) => {\n const path = relativePath ? `${relativePath}/${f}` : f;\n return `export '${path}';`;\n })\n .join(\"\\n\");\n\n return fragmentFromString(\n `// Auto-generated. Do not edit.\\n// ignore_for_file: type=lint\\n\\n${exports}\\n`,\n );\n}\n\n/**\n * Generate the root barrel export file.\n */\nexport function getRootIndexPageFragment(\n categories: string[],\n): Fragment {\n const exports = categories\n .sort()\n .map((cat) => `export '${cat}/${cat}.dart';`)\n .join(\"\\n\");\n\n return fragmentFromString(\n `// Auto-generated. Do not edit.\\n// ignore_for_file: type=lint\\n\\n${exports}\\n`,\n );\n}\n","import {\n InstructionAccountNode,\n InstructionArgumentNode,\n InstructionNode,\n} from \"@codama/nodes\";\nimport { visit } from \"@codama/visitors-core\";\n\nimport type { Fragment } from \"../utils/fragment.js\";\nimport {\n fragment,\n fragmentFromString,\n mergeFragments,\n use,\n} from \"../utils/fragment.js\";\nimport type { RenderScope } from \"../utils/options.js\";\nimport { camelCase } from \"../utils/nameTransformers.js\";\nimport { getDiscriminatorValidationFragment } from \"../utils/discriminators.js\";\nimport { getTopLevelDecoderFragment } from \"../utils/exactDecoder.js\";\nimport {\n getDartValueFragment,\n isConstDartValueNode,\n} from \"../utils/valueNodes.js\";\nimport { getDiscriminatorConstantsFragment } from \"./discriminatorConstants.js\";\n\n/**\n * Generate a full Dart file for an instruction.\n */\nexport function getInstructionPageFragment(\n node: InstructionNode,\n scope: RenderScope,\n): Fragment {\n const name = node.name as string;\n const typeName = scope.nameApi.dataType(name);\n const instrFnName = scope.nameApi.instructionFunction(name);\n const parseFnName = scope.nameApi.instructionParseFunction(name);\n\n const accounts = node.accounts ?? [];\n const allArgs = node.arguments ?? [];\n const optionalAccountStrategy: string =\n node.optionalAccountStrategy ?? \"programId\";\n if (\n optionalAccountStrategy !== \"programId\" &&\n optionalAccountStrategy !== \"omitted\"\n ) {\n throw new Error(\n `Unsupported optional account strategy on instruction \"${node.name}\": ${optionalAccountStrategy}`,\n );\n }\n const args = allArgs.filter(\n (arg) =>\n !isDiscriminatorArg(arg, node) && !isOmittedDefaultArgument(arg),\n );\n\n // Build the instruction data class\n const dataClassName = `${typeName}InstructionData`;\n\n // Visit each arg type once and collect manifests for reuse\n const allArgManifests = (node.arguments ?? []).map((arg) => ({\n arg,\n manifest: visit(arg.type, scope.typeManifestVisitor),\n }));\n const argDefaultValues = new Map(\n allArgManifests.flatMap(({ arg, manifest }) => {\n if (arg.defaultValue == null) return [];\n const needsRenderedDefault =\n isOmittedDefaultArgument(arg) ||\n isDiscriminatorArg(arg, node) ||\n arg.defaultValue.kind !== \"accountBumpValueNode\";\n if (!needsRenderedDefault) return [];\n return [\n [\n arg,\n getDartValueFragment(arg.defaultValue, manifest.type.content),\n ] as const,\n ];\n }),\n );\n for (const arg of allArgs.filter((candidate) =>\n isDiscriminatorArg(candidate, node),\n )) {\n if (!argDefaultValues.has(arg)) {\n throw new Error(\n `Field discriminator \"${arg.name}\" on instruction \"${node.name}\" must reference a field with a default value.`,\n );\n }\n }\n\n // Data fields (non-discriminator arguments)\n const dataFieldDecls = allArgManifests\n .map(({ arg, manifest }) => {\n const fieldName = camelCase(arg.name as string);\n return ` final ${manifest.type.content} ${fieldName};`;\n })\n .join(\"\\n\");\n\n const dataCtorParams = allArgManifests\n .map(({ arg, manifest }) => {\n const fieldName = camelCase(arg.name as string);\n if (isOmittedDefaultArgument(arg)) return \"\";\n if (isDiscriminatorArg(arg, node)) {\n return isConstDefaultValue(arg.defaultValue)\n ? ` this.${fieldName} = ${argDefaultValues.get(arg)!.content},`\n : ` ${manifest.type.content}? ${fieldName},`;\n }\n return ` required this.${fieldName},`;\n })\n .filter(Boolean)\n .join(\"\\n\");\n\n const dataCtorInitializers = allArgManifests\n .map(({ arg }) => {\n const fieldName = camelCase(arg.name as string);\n if (isOmittedDefaultArgument(arg)) {\n return ` ${fieldName} = ${argDefaultValues.get(arg)!.content}`;\n }\n if (isDiscriminatorArg(arg, node) && !isConstDefaultValue(arg.defaultValue)) {\n return ` ${fieldName} = ${fieldName} ?? ${argDefaultValues.get(arg)!.content}`;\n }\n return null;\n })\n .filter((value): value is string => value !== null)\n .join(\",\\n\");\n\n // Encoder/decoder for instruction data\n const encFields = allArgManifests\n .map(({ arg, manifest }) => {\n return ` ('${arg.name as string}', ${manifest.encoder.content}),`;\n })\n .join(\"\\n\");\n\n const decFields = allArgManifests\n .map(({ arg, manifest }) => {\n return ` ('${arg.name as string}', ${manifest.decoder.content}),`;\n })\n .join(\"\\n\");\n\n const toMapFields = allArgs\n .map((arg) => {\n const value =\n isOmittedDefaultArgument(arg) || isDiscriminatorArg(arg, node)\n ? argDefaultValues.get(arg)!.content\n : `value.${camelCase(arg.name as string)}`;\n return ` '${arg.name as string}': ${value},`;\n })\n .join(\"\\n\");\n\n const fromMapFields = allArgManifests\n .filter(({ arg }) => !isOmittedDefaultArgument(arg))\n .map(({ arg, manifest }) => {\n const typeStr = manifest.type.content;\n const isNullable = typeStr.endsWith(\"?\");\n const accessor = isNullable ? `map['${arg.name as string}']` : `map['${arg.name as string}']!`;\n return ` ${camelCase(arg.name as string)}: ${accessor} as ${typeStr},`;\n })\n .join(\"\\n\");\n\n const dataCtorKeyword = allArgs.every(\n (arg) =>\n !isOmittedDefaultArgument(arg) ||\n isConstDartValueNode(arg.defaultValue!),\n ) && allArgs.every(\n (arg) =>\n !isDiscriminatorArg(arg, node) ||\n isConstDefaultValue(arg.defaultValue),\n )\n ? \"const \"\n : \"\";\n const dataCtorSignature = dataCtorParams\n ? `${dataCtorKeyword}${dataClassName}({\\n${dataCtorParams}\\n })${dataCtorInitializers ? ` :\\n${dataCtorInitializers}` : \"\"};`\n : `${dataCtorKeyword}${dataClassName}()${dataCtorInitializers ? ` :\\n${dataCtorInitializers}` : \"\"};`;\n const dataEncoderName = `get${typeName}InstructionDataEncoder`;\n const dataDecoderName = `get${typeName}InstructionDataDecoder`;\n const dataCodecName = `get${typeName}InstructionDataCodec`;\n\n // Determine whether any arg or account name collides with 'programAddress'\n const argNames = new Set(args.map((a) => camelCase(a.name as string)));\n const accountNames = new Set(accounts.map((a) => camelCase(a.name as string)));\n const hasProgramAddressCollision = argNames.has('programAddress') || accountNames.has('programAddress');\n const instrProgramParam = hasProgramAddressCollision ? 'instructionProgramAddress' : 'programAddress';\n\n // The generated local holding the constructed instruction data must not\n // collide with an account or argument parameter name.\n let instructionDataLocal = 'instructionData';\n while (argNames.has(instructionDataLocal) || accountNames.has(instructionDataLocal)) {\n instructionDataLocal = `${instructionDataLocal}_`;\n }\n\n // Build the instruction builder function\n const accountParams = accounts\n .map((acc) => {\n const fieldName = camelCase(acc.name as string);\n const isRequired = !(acc.isOptional ?? false);\n return isRequired\n ? ` required Address ${fieldName},`\n : ` Address? ${fieldName},`;\n })\n .join(\"\\n\");\n\n // Build argParams using manifests from the allArgManifests (filtered to non-discriminator args)\n const argManifestMap = new Map(allArgManifests.map(({ arg, manifest }) => [arg, manifest]));\n const argParams = args\n .map((arg) => {\n const manifest = argManifestMap.get(arg)!;\n const fieldName = camelCase(arg.name as string);\n const typeStr = manifest.type.content;\n // Account bumps require asynchronous PDA derivation, so callers must\n // provide them instead of relying on a synchronous generated default.\n const hasDefault =\n arg.defaultValue != null &&\n arg.defaultValue.kind !== \"accountBumpValueNode\";\n if (hasDefault) {\n // Don't add `?` if the type is already nullable.\n const nullableType = typeStr.endsWith(\"?\") ? typeStr : `${typeStr}?`;\n return ` ${nullableType} ${fieldName},`;\n }\n return ` required ${typeStr} ${fieldName},`;\n })\n .join(\"\\n\");\n\n // Account metas\n const accountMetas = accounts\n .map((acc) => {\n const fieldName = camelCase(acc.name as string);\n const role = getAccountRole(acc);\n const isOptional = acc.isOptional ?? false;\n if (isOptional) {\n if (optionalAccountStrategy === \"omitted\") {\n return ` if (${fieldName} != null) AccountMeta(address: ${fieldName}, role: ${role}),`;\n }\n return ` if (${fieldName} != null) AccountMeta(address: ${fieldName}, role: ${role}) else AccountMeta(address: ${instrProgramParam}, role: AccountRole.readonly),`;\n }\n return ` AccountMeta(address: ${fieldName}, role: ${role}),`;\n })\n .join(\"\\n\");\n\n // Instruction data construction\n const dataConstruction = allArgs\n .map((arg) => {\n const fieldName = camelCase(arg.name as string);\n if (\n isOmittedDefaultArgument(arg) ||\n isDiscriminatorArg(arg, node)\n ) {\n return \"\"; // Use default\n }\n const skipDefault = arg.defaultValue?.kind === \"accountBumpValueNode\";\n return ` ${fieldName}: ${fieldName}${arg.defaultValue != null && !skipDefault ? ` ?? ${argDefaultValues.get(arg)!.content}` : \"\"},`;\n })\n .filter(Boolean)\n .join(\"\\n\");\n\n // Discriminator\n const discFragment = getDiscriminatorConstantsFragment(node, scope);\n const discriminatorValidation = getDiscriminatorValidationFragment(\n node,\n scope,\n );\n const topLevelDecoder = getTopLevelDecoderFragment({\n typeName: dataClassName,\n description: `${name} instruction decoder`,\n discriminatorValidation,\n fromMapFields,\n requireExactConsumption: true,\n });\n\n const parts: Fragment[] = [\n fragment`// Auto-generated. Do not edit.\n// ignore_for_file: type=lint\n\n${use(\"Uint8List\", \"dartTypedData\")}\n${use(\"immutable\", \"meta\")}\n${use(\"Encoder\", \"solanaCodecsCore\")}\n${use(\"Decoder\", \"solanaCodecsCore\")}\n${use(\"Codec\", \"solanaCodecsCore\")}\n${use(\"combineCodec\", \"solanaCodecsCore\")}\n${use(\"transformEncoder\", \"solanaCodecsCore\")}\n${use(\"transformDecoder\", \"solanaCodecsCore\")}\n${use(\"getStructEncoder\", \"solanaCodecsDataStructures\")}\n${use(\"getStructDecoder\", \"solanaCodecsDataStructures\")}\n${use(\"Address\", \"solanaAddresses\")}\n${use(\"Instruction\", \"solanaInstructions\")}\n${use(\"AccountMeta\", \"solanaInstructions\")}\n${use(\"AccountRole\", \"solanaInstructions\")}`,\n ];\n\n if (discFragment.content) parts.push(discFragment);\n\n // Data class\n parts.push(fragment`\n@immutable\nclass ${fragmentFromString(dataClassName)} {\n ${fragmentFromString(dataCtorSignature)}\n\n${fragmentFromString(dataFieldDecls)}\n}`);\n\n // Data encoder/decoder/codec\n parts.push(fragment`\nEncoder<${fragmentFromString(dataClassName)}> ${fragmentFromString(dataEncoderName)}() {\n final structEncoder = getStructEncoder(<(String, Encoder<Object?>)>[\n${fragmentFromString(encFields)}\n ]);\n\n return transformEncoder(\n structEncoder,\n (${fragmentFromString(dataClassName)} value) => <String, Object?>{\n${fragmentFromString(toMapFields)}\n },\n );\n}\n\nDecoder<${fragmentFromString(dataClassName)}> ${fragmentFromString(dataDecoderName)}() {\n final structDecoder = getStructDecoder(<(String, Decoder<Object?>)>[\n${fragmentFromString(decFields)}\n ]);\n\n${topLevelDecoder}\n}\n\nCodec<${fragmentFromString(dataClassName)}, ${fragmentFromString(dataClassName)}> ${fragmentFromString(dataCodecName)}() {\n return combineCodec(${fragmentFromString(dataEncoderName)}(), ${fragmentFromString(dataDecoderName)}());\n}`);\n\n // Instruction builder\n parts.push(fragment`\n/// Creates a [${fragmentFromString(typeName)}] instruction.\nInstruction ${fragmentFromString(instrFnName)}({\n required Address ${fragmentFromString(instrProgramParam)},\n${fragmentFromString(accountParams)}\n${fragmentFromString(argParams)}\n}) {\n final ${instructionDataLocal} = ${fragmentFromString(dataClassName)}(\n${fragmentFromString(dataConstruction)}\n );\n\n return Instruction(\n programAddress: ${fragmentFromString(instrProgramParam)},\n accounts: [\n${fragmentFromString(accountMetas)}\n ],\n data: ${fragmentFromString(dataEncoderName)}().encode(${instructionDataLocal}),\n );\n}`);\n\n // Parse function\n parts.push(fragment`\n/// Parses a [${fragmentFromString(typeName)}] instruction from raw instruction data.\n${fragmentFromString(dataClassName)} ${fragmentFromString(parseFnName)}(Instruction instruction) {\n return ${fragmentFromString(dataDecoderName)}().decode(instruction.data!);\n}`);\n\n const result = mergeFragments(parts, (cs) => cs.join(\"\\n\"));\n\n // Merge arg type manifest imports (encoder, decoder, type) into the result\n for (const { manifest } of allArgManifests) {\n result.imports.mergeWith(manifest.encoder.imports);\n result.imports.mergeWith(manifest.decoder.imports);\n result.imports.mergeWith(manifest.type.imports);\n }\n for (const defaultValue of argDefaultValues.values()) {\n result.imports.mergeWith(defaultValue.imports);\n }\n\n return result;\n}\n\nfunction getAccountRole(acc: InstructionAccountNode): string {\n const isSigner = acc.isSigner === true || acc.isSigner === \"either\";\n const isWritable = acc.isWritable ?? false;\n\n if (isSigner && isWritable) return \"AccountRole.writableSigner\";\n if (isSigner) return \"AccountRole.readonlySigner\";\n if (isWritable) return \"AccountRole.writable\";\n return \"AccountRole.readonly\";\n}\n\nfunction isDiscriminatorArg(\n arg: InstructionArgumentNode,\n node: InstructionNode,\n): boolean {\n const discriminators = node.discriminators ?? [];\n return discriminators.some(\n (d) =>\n d.kind === \"fieldDiscriminatorNode\" && d.name === arg.name,\n );\n}\n\nfunction isConstDefaultValue(defaultValue: InstructionArgumentNode[\"defaultValue\"]): boolean {\n if (!defaultValue) return false;\n switch (defaultValue.kind) {\n case \"numberValueNode\":\n case \"booleanValueNode\":\n case \"stringValueNode\":\n case \"noneValueNode\":\n return true;\n default:\n return false;\n }\n}\n\nfunction isOmittedDefaultArgument(arg: InstructionArgumentNode): boolean {\n return arg.defaultValue != null && arg.defaultValueStrategy === \"omitted\";\n}\n","import type { PdaNode } from \"@codama/nodes\";\nimport { visit } from \"@codama/visitors-core\";\n\nimport type { Fragment } from \"../utils/fragment.js\";\nimport {\n fragment,\n fragmentFromString,\n mergeFragments,\n use,\n} from \"../utils/fragment.js\";\nimport type { RenderScope } from \"../utils/options.js\";\nimport { camelCase, pascalCase } from \"../utils/nameTransformers.js\";\nimport type { TypeManifest } from \"../utils/typeManifest.js\";\nimport { WELL_KNOWN_ADDRESSES } from \"../utils/wellKnownAddresses.js\";\n\n/**\n * Generate a full Dart file for a PDA.\n */\nexport function getPdaPageFragment(\n node: PdaNode,\n scope: RenderScope,\n): Fragment {\n const name = node.name as string;\n const findFnName = scope.nameApi.pdaFindFunction(name);\n const seedsClassName = `${pascalCase(name)}Seeds`;\n\n const seeds = node.seeds ?? [];\n const hasByteSeeds = seeds.some(\n (seed) =>\n seed.kind === \"constantPdaSeedNode\" &&\n seed.value.kind === \"bytesValueNode\",\n );\n\n // Separate variable seeds from constant seeds\n const variableSeeds = seeds.filter(\n (s) => s.kind === \"variablePdaSeedNode\",\n );\n const constantSeeds = seeds.filter(\n (s) => s.kind === \"constantPdaSeedNode\",\n );\n\n // Build seeds class if there are variable seeds\n const hasSeedsClass = variableSeeds.length > 0;\n\n // Collect type manifests so their imports can be merged into the result.\n const seedManifests: TypeManifest[] = [];\n\n const seedFieldDecls = variableSeeds\n .map((s) => {\n if (s.kind !== \"variablePdaSeedNode\") return \"\";\n const manifest = visit(s.type, scope.typeManifestVisitor);\n seedManifests.push(manifest);\n return ` final ${manifest.type.content} ${camelCase(s.name as string)};`;\n })\n .join(\"\\n\");\n\n const seedCtorParams = variableSeeds\n .map((s) => {\n if (s.kind !== \"variablePdaSeedNode\") return \"\";\n return ` required this.${camelCase(s.name as string)},`;\n })\n .join(\"\\n\");\n\n // Build the PDA seeds list.\n const seedValues: string[] = [];\n for (const seed of seeds) {\n if (seed.kind === \"constantPdaSeedNode\") {\n if (seed.value.kind === \"bytesValueNode\") {\n seedValues.push(` Uint8List.fromList(${bytesValueToDart(seed.value.data)}),`);\n } else if (seed.value.kind === \"stringValueNode\") {\n seedValues.push(` '${seed.value.string}',`);\n } else if (seed.value.kind === \"publicKeyValueNode\") {\n const wellKnownSeedName = WELL_KNOWN_ADDRESSES.get(seed.value.publicKey);\n if (wellKnownSeedName) {\n use(wellKnownSeedName, \"solanaAddresses\");\n seedValues.push(\n ` getAddressEncoder().encode(${wellKnownSeedName}),`,\n );\n } else {\n seedValues.push(\n ` getAddressEncoder().encode(Address('${seed.value.publicKey}')),`,\n );\n }\n } else if (seed.value.kind === \"numberValueNode\") {\n const manifest = visit(seed.type, scope.typeManifestVisitor);\n seedManifests.push(manifest);\n seedValues.push(` ${manifest.encoder.content}.encode(${seed.value.number}),`);\n }\n } else if (seed.kind === \"variablePdaSeedNode\") {\n const manifest = visit(seed.type, scope.typeManifestVisitor);\n seedManifests.push(manifest);\n seedValues.push(\n ` ${manifest.encoder.content}.encode(seeds.${camelCase(seed.name as string)}),`,\n );\n }\n }\n\n // Program address parameter\n const wellKnownProgramName = node.programId\n ? WELL_KNOWN_ADDRESSES.get(node.programId)\n : undefined;\n if (wellKnownProgramName) {\n use(wellKnownProgramName, \"solanaAddresses\");\n }\n const programIdParam = node.programId\n ? wellKnownProgramName\n ? `Address programAddress = ${wellKnownProgramName}`\n : `Address programAddress = const Address('${node.programId}')`\n : \"required Address programAddress\";\n\n const typedDataImport = hasByteSeeds\n ? use(\"Uint8List\", \"dartTypedData\")\n : fragmentFromString(\"\");\n\n // `@immutable` is only needed when a seeds class is emitted.\n const metaImport = hasSeedsClass ? use(\"immutable\", \"meta\") : fragmentFromString(\"\");\n\n const parts: Fragment[] = [\n fragment`// Auto-generated. Do not edit.\n// ignore_for_file: type=lint\n\n${typedDataImport}\n${metaImport}\n${use(\"Address\", \"solanaAddresses\")}\n${use(\"getAddressEncoder\", \"solanaAddresses\")}\n${use(\"getProgramDerivedAddress\", \"solanaAddresses\")}`,\n ];\n\n if (hasSeedsClass) {\n parts.push(fragment`\n@immutable\nclass ${fragmentFromString(seedsClassName)} {\n const ${fragmentFromString(seedsClassName)}({\n${fragmentFromString(seedCtorParams)}\n });\n\n${fragmentFromString(seedFieldDecls)}\n}`);\n }\n\n const seedsParam = hasSeedsClass ? ` required ${seedsClassName} seeds,` : \"\";\n\n parts.push(fragment`\n/// Finds the program derived address for [${fragmentFromString(pascalCase(name))}].\nFuture<(Address, int)> ${fragmentFromString(findFnName)}({\n${fragmentFromString(seedsParam)}\n ${fragmentFromString(programIdParam)},\n}) async {\n final seedValues = <Object>[\n${fragmentFromString(seedValues.join(\"\\n\"))}\n ];\n\n return getProgramDerivedAddress(\n programAddress: programAddress,\n seeds: seedValues,\n );\n}`);\n\n const result = mergeFragments(parts, (cs) => cs.join(\"\\n\"));\n\n // Merge seed type manifest imports (encoders/types) into the result so that\n // helpers like `getU64Encoder` are imported.\n for (const manifest of seedManifests) {\n result.imports.mergeWith(manifest.encoder.imports);\n result.imports.mergeWith(manifest.type.imports);\n }\n\n return result;\n}\n\nfunction bytesValueToDart(hex: string): string {\n const clean = hex.replace(/^0x/, \"\");\n const pairs: string[] = [];\n for (let i = 0; i < clean.length; i += 2) {\n pairs.push(`0x${clean.slice(i, i + 2)}`);\n }\n return `[${pairs.join(\", \")}]`;\n}\n","import {\n getAllInstructionsWithSubs,\n type InstructionNode,\n type ProgramNode,\n type ValueNode,\n} from \"@codama/nodes\";\nimport { visit } from \"@codama/visitors-core\";\n\nimport type { Fragment } from \"../utils/fragment.js\";\nimport {\n emptyFragment,\n fragment,\n fragmentFromString,\n mergeFragments,\n use,\n} from \"../utils/fragment.js\";\nimport type { RenderScope } from \"../utils/options.js\";\nimport { camelCase, pascalCase } from \"../utils/nameTransformers.js\";\nimport { WELL_KNOWN_ADDRESSES } from \"../utils/wellKnownAddresses.js\";\n\n/**\n * Generate a full Dart file for a program.\n */\nexport function getProgramPageFragment(\n node: ProgramNode,\n scope: RenderScope,\n): Fragment {\n const name = node.name as string;\n const addressConstName = scope.nameApi.programAddressConstant(name);\n\n const wellKnownName = WELL_KNOWN_ADDRESSES.get(node.publicKey);\n\n // For well-known addresses, export and alias the canonical constant from\n // solana_kit_addresses instead of hardcoding the address string.\n // When the generated name matches the canonical name, a simple export suffices.\n // When they differ, we also need a local const alias.\n // For unknown addresses, fall back to the original Address('...') pattern.\n const addressDeclaration: Fragment = wellKnownName\n ? addressConstName === wellKnownName\n ? fragment`// Auto-generated. Do not edit.\n// ignore_for_file: type=lint\n\n/// The address of the ${fragmentFromString(pascalCase(name))} program.\nexport 'package:solana_kit_addresses/solana_kit_addresses.dart' show ${fragmentFromString(wellKnownName)};`\n : fragment`${use(wellKnownName, \"solanaAddresses\")}\n\n// Auto-generated. Do not edit.\n// ignore_for_file: type=lint\n\n/// The address of the ${fragmentFromString(pascalCase(name))} program.\nconst ${fragmentFromString(addressConstName)} = ${fragmentFromString(wellKnownName)};`\n : fragment`// Auto-generated. Do not edit.\n// ignore_for_file: type=lint\n\n${use(\"Address\", \"solanaAddresses\")}\n\n/// The address of the ${fragmentFromString(pascalCase(name))} program.\nconst ${fragmentFromString(addressConstName)} = Address('${fragmentFromString(node.publicKey)}');`;\n\n const parts: Fragment[] = [addressDeclaration];\n\n // Account identifier enum\n const accounts = node.accounts ?? [];\n if (accounts.length > 0) {\n const accountVariants = accounts\n .map((acc) => ` ${camelCase(acc.name as string)},`)\n .join(\"\\n\");\n\n parts.push(fragment`\n/// Known accounts for the ${fragmentFromString(pascalCase(name))} program.\nenum ${fragmentFromString(pascalCase(name))}Account {\n${fragmentFromString(accountVariants)}\n}`);\n }\n\n // Instruction identification and parsing helpers.\n const instructions = getAllInstructionsWithSubs(node);\n if (instructions.length > 0) {\n const programName = pascalCase(name);\n const instructionEnum = `${programName}Instruction`;\n const instrVariants = instructions\n .map((instr) => ` ${camelCase(instr.name as string)},`)\n .join(\"\\n\");\n\n parts.push(fragment`\n/// Known instructions for the ${fragmentFromString(programName)} program.\nenum ${fragmentFromString(instructionEnum)} {\n${fragmentFromString(instrVariants)}\n}`);\n\n const identifiableInstructions = instructions\n .map((instruction) => ({\n instruction,\n condition: getInstructionDiscriminatorCondition(instruction, scope),\n }))\n .filter(({ condition }) => condition !== null) as {\n instruction: InstructionNode;\n condition: Fragment;\n }[];\n\n if (identifiableInstructions.length > 0) {\n const identifyBranches = identifiableInstructions.map(\n ({ instruction, condition }) => fragment` if (${condition}) {\n return ${fragmentFromString(instructionEnum)}.${fragmentFromString(camelCase(instruction.name as string))};\n }`,\n );\n const parsedBase = `Parsed${programName}Instruction`;\n const parsedClasses = instructions.map((instruction) => {\n const instructionName = pascalCase(instruction.name as string);\n const variant = camelCase(instruction.name as string);\n const parsedClass = `Parsed${instructionName}`;\n const dataClass = `${instructionName}InstructionData`;\n return fragment`/// A parsed ${fragmentFromString(instructionName)} instruction.\nfinal class ${fragmentFromString(parsedClass)} extends ${fragmentFromString(parsedBase)} {\n const ${fragmentFromString(parsedClass)}({required this.data})\n : super(${fragmentFromString(instructionEnum)}.${fragmentFromString(variant)});\n\n final ${use(dataClass, \"../instructions/instructions.dart\")} data;\n}`;\n });\n const parseBranches = instructions.map((instruction) => {\n const instructionName = pascalCase(instruction.name as string);\n const variant = camelCase(instruction.name as string);\n const parsedClass = `Parsed${instructionName}`;\n const parseFunction = scope.nameApi.instructionParseFunction(\n instruction.name as string,\n );\n return fragment` ${fragmentFromString(instructionEnum)}.${fragmentFromString(variant)} => ${fragmentFromString(parsedClass)}(\n data: ${use(parseFunction, \"../instructions/instructions.dart\")}(instruction),\n ),`;\n });\n\n parts.push(fragment`\n/// Identifies the type of a ${fragmentFromString(programName)} instruction.\n${fragmentFromString(instructionEnum)} identify${fragmentFromString(programName)}Instruction(\n ${use(\"Uint8List\", \"dartTypedData\")} data,\n) {\n${mergeFragments(identifyBranches, (cs) => cs.join(\"\\n\"))}\n\n throw ${use(\"SolanaError\", \"solanaErrors\")}(\n ${use(\"SolanaErrorCode\", \"solanaErrors\")}.programClientsFailedToIdentifyInstruction,\n {\n 'instructionData': data,\n 'programName': '${fragmentFromString(name)}',\n },\n );\n}\n\n/// A parsed instruction from the ${fragmentFromString(programName)} program.\nsealed class ${fragmentFromString(parsedBase)} {\n const ${fragmentFromString(parsedBase)}(this.instructionType);\n\n final ${fragmentFromString(instructionEnum)} instructionType;\n}\n\n${mergeFragments(parsedClasses, (cs) => cs.join(\"\\n\\n\"))}\n\n/// Parses a ${fragmentFromString(programName)} instruction.\n${fragmentFromString(parsedBase)} parse${fragmentFromString(programName)}Instruction(\n ${use(\"Instruction\", \"solanaInstructions\")} instruction,\n) {\n return switch (identify${fragmentFromString(programName)}Instruction(\n instruction.data ?? Uint8List(0),\n )) {\n${mergeFragments(parseBranches, (cs) => cs.join(\"\\n\"))}\n };\n}`);\n }\n }\n\n return mergeFragments(parts, (cs) => cs.join(\"\\n\"));\n}\n\nfunction getInstructionDiscriminatorCondition(\n instruction: InstructionNode,\n scope: RenderScope,\n): Fragment | null {\n const discriminators = instruction.discriminators ?? [];\n if (discriminators.length === 0) return null;\n\n const conditions = discriminators.map((discriminator): Fragment | null => {\n switch (discriminator.kind) {\n case \"sizeDiscriminatorNode\":\n return fragment`data.length == ${discriminator.size}`;\n case \"constantDiscriminatorNode\": {\n const manifest = visit(\n discriminator.constant.type,\n scope.typeManifestVisitor,\n );\n const value = getValueFragment(\n discriminator.constant.value,\n manifest.type.content,\n );\n if (value === null) return null;\n return fragment`${use(\"containsBytes\", \"solanaCodecsCore\")}(data, ${manifest.encoder}.encode(${value}), ${discriminator.offset})`;\n }\n case \"fieldDiscriminatorNode\": {\n const argument = (instruction.arguments ?? []).find(\n (candidate) => candidate.name === discriminator.name,\n );\n if (argument?.defaultValue == null) return null;\n const manifest = visit(argument.type, scope.typeManifestVisitor);\n const value = getValueFragment(\n argument.defaultValue,\n manifest.type.content,\n );\n if (value === null) return null;\n return fragment`${use(\"containsBytes\", \"solanaCodecsCore\")}(data, ${manifest.encoder}.encode(${value}), ${discriminator.offset})`;\n }\n }\n });\n\n if (conditions.some((condition) => condition === null)) return null;\n return mergeFragments(conditions as Fragment[], (cs) => cs.join(\" && \"));\n}\n\nfunction getValueFragment(\n value:\n | ValueNode\n | NonNullable<\n NonNullable<InstructionNode[\"arguments\"]>[number][\"defaultValue\"]\n >,\n dartType?: string,\n): Fragment | null {\n switch (value.kind) {\n case \"numberValueNode\":\n return fragmentFromString(\n dartType === \"BigInt\"\n ? `BigInt.from(${value.number})`\n : String(value.number),\n );\n case \"booleanValueNode\":\n return fragmentFromString(String(value.boolean));\n case \"stringValueNode\":\n return fragmentFromString(`'${value.string.replaceAll(\"'\", \"\\\\'\")}'`);\n case \"bytesValueNode\": {\n const clean = value.data.replace(/^0x/, \"\");\n const bytes = clean.match(/.{1,2}/g)?.map((byte) => parseInt(byte, 16)) ?? [];\n return fragment`${use(\"Uint8List\", \"dartTypedData\")}.fromList([${fragmentFromString(bytes.join(\", \"))}])`;\n }\n default:\n return null;\n }\n}\n","import type {\n DefinedTypeNode,\n EnumVariantTypeNode,\n StructFieldTypeNode,\n TypeNode,\n} from \"@codama/nodes\";\nimport { resolveNestedTypeNode } from \"@codama/nodes\";\nimport { visit } from \"@codama/visitors-core\";\n\nimport type { Fragment } from \"../utils/fragment.js\";\nimport {\n emptyFragment,\n fragment,\n fragmentFromString,\n mergeFragments,\n use,\n} from \"../utils/fragment.js\";\nimport type { RenderScope } from \"../utils/options.js\";\nimport {\n camelCase,\n pascalCase,\n snakeCase,\n} from \"../utils/nameTransformers.js\";\n\n/**\n * Generate a full Dart file for a defined type.\n */\nexport function getTypePageFragment(\n node: DefinedTypeNode,\n scope: RenderScope,\n): Fragment {\n const name = node.name as string;\n const typeName = scope.nameApi.dataType(name);\n const typeNode = node.type;\n\n // Check what kind of type this is\n if (typeNode.kind === \"enumTypeNode\") {\n const variants = typeNode.variants ?? [];\n const isScalar = variants.every(\n (v) => v.kind === \"enumEmptyVariantTypeNode\",\n );\n if (isScalar) {\n return getScalarEnumPageFragment(node, variants, scope);\n }\n return getDataEnumPageFragment(node, variants, scope);\n }\n\n if (typeNode.kind === \"structTypeNode\") {\n return getStructPageFragment(node, scope);\n }\n\n // Simple type alias — just create codec wrappers\n return getTypeAliasPageFragment(node, scope);\n}\n\n/**\n * Generate a Dart scalar enum (all empty variants).\n */\nfunction getScalarEnumPageFragment(\n node: DefinedTypeNode,\n enumVariants: EnumVariantTypeNode[],\n scope: RenderScope,\n): Fragment {\n const name = node.name as string;\n const typeName = scope.nameApi.dataType(name);\n const enumNode = node.type;\n if (enumNode.kind !== \"enumTypeNode\") return emptyFragment();\n\n const variants = enumVariants.map((v) => {\n const variantName = scope.nameApi.enumVariant(v.name as string);\n return variantName;\n });\n\n const variantLines = variants.map((v: string) => ` ${v},`).join(\"\\n\");\n const encoderName = scope.nameApi.encoderFunction(name);\n const decoderName = scope.nameApi.decoderFunction(name);\n const codecName = scope.nameApi.codecFunction(name);\n\n // Determine size codec from the enum node's size if available\n const resolvedSize = resolveNestedTypeNode(enumNode.size);\n const sizeType = resolvedSize.format ?? \"u8\";\n const sizeCodecName = getNumberCodecName(sizeType);\n const isU64 = sizeType === \"u64\";\n const encodedVariantIndex = isU64\n ? \"BigInt.from(value.index)\"\n : \"value.index\";\n const decodedVariant = isU64\n ? `(BigInt value, Uint8List bytes, int offset) {\n if (value.isNegative || value >= BigInt.from(${typeName}.values.length)) {\n throw RangeError('Invalid ${typeName} discriminator: ' + value.toString());\n }\n return ${typeName}.values[value.toInt()];\n }`\n : `(int value, Uint8List bytes, int offset) => ${typeName}.values[value]`;\n\n return fragment`// Auto-generated. Do not edit.\n// ignore_for_file: type=lint\n\n${use(\"Uint8List\", \"dartTypedData\")}\n${use(\"Encoder\", \"solanaCodecsCore\")}\n${use(\"Decoder\", \"solanaCodecsCore\")}\n${use(\"Codec\", \"solanaCodecsCore\")}\n${use(\"combineCodec\", \"solanaCodecsCore\")}\n${use(\"transformEncoder\", \"solanaCodecsCore\")}\n${use(\"transformDecoder\", \"solanaCodecsCore\")}\n${use(`get${sizeCodecName}Encoder`, \"solanaCodecsNumbers\")}\n${use(`get${sizeCodecName}Decoder`, \"solanaCodecsNumbers\")}\n\nenum ${fragmentFromString(typeName)} {\n${fragmentFromString(variantLines)}\n}\n\nEncoder<${fragmentFromString(typeName)}> ${fragmentFromString(encoderName)}() {\n return transformEncoder(\n get${fragmentFromString(sizeCodecName)}Encoder(),\n (${fragmentFromString(typeName)} value) => ${fragmentFromString(encodedVariantIndex)},\n );\n}\n\nDecoder<${fragmentFromString(typeName)}> ${fragmentFromString(decoderName)}() {\n return transformDecoder(\n get${fragmentFromString(sizeCodecName)}Decoder(),\n ${fragmentFromString(decodedVariant)},\n );\n}\n\nCodec<${fragmentFromString(typeName)}, ${fragmentFromString(typeName)}> ${fragmentFromString(codecName)}() {\n return combineCodec(${fragmentFromString(encoderName)}(), ${fragmentFromString(decoderName)}());\n}`;\n}\n\n/**\n * Generate a Dart data enum (sealed class with variants).\n */\nfunction getDataEnumPageFragment(\n node: DefinedTypeNode,\n variants: EnumVariantTypeNode[],\n scope: RenderScope,\n): Fragment {\n const name = node.name as string;\n const typeName = scope.nameApi.dataType(name);\n const enumNode = node.type;\n if (enumNode.kind !== \"enumTypeNode\") return emptyFragment();\n\n const variantClasses: string[] = [];\n const encoderVariants: string[] = [];\n const decoderVariants: string[] = [];\n const encodeCases: string[] = [];\n const decodeCases: string[] = [];\n let pageHasListEnums = false;\n // Collect all field type manifests from variants so we can merge their imports\n const allVariantManifests: { encoder: Fragment; decoder: Fragment; type: Fragment }[] = [];\n\n for (let i = 0; i < variants.length; i++) {\n const variant = variants[i];\n const variantName = pascalCase(variant.name as string);\n const variantClassName = scope.nameApi.sealedClassVariant(\n name,\n variant.name as string,\n );\n\n if (variant.kind === \"enumEmptyVariantTypeNode\") {\n variantClasses.push(`final class ${variantClassName} extends ${typeName} {\n const ${variantClassName}();\n\n @override\n bool operator ==(Object other) =>\n identical(this, other) || other is ${variantClassName};\n\n @override\n int get hashCode => runtimeType.hashCode;\n\n @override\n String toString() => '${typeName}.${variantName}()';\n}`);\n\n encoderVariants.push(\n `(${i}, getStructEncoder(<(String, Encoder<Object?>)>[]))`,\n );\n decoderVariants.push(\n `(${i}, transformDecoder<Map<String, Object?>, Map<String, Object?>>(getStructDecoder(<(String, Decoder<Object?>)>[]), (Map<String, Object?> map, Uint8List bytes, int offset) => <String, Object?>{}))`,\n );\n encodeCases.push(`${variantClassName}() => <String, Object?>{'__kind': ${i}},`);\n decodeCases.push(`case ${i}: return const ${variantClassName}();`);\n } else if (variant.kind === \"enumStructVariantTypeNode\") {\n const resolvedStruct = resolveNestedTypeNode(variant.struct);\n const fields = resolvedStruct.fields ?? [];\n\n // Visit each field type once and collect manifests\n const fieldManifests = fields.map((f: StructFieldTypeNode) => ({\n field: f,\n manifest: visit(f.type, scope.typeManifestVisitor),\n }));\n for (const { manifest } of fieldManifests) {\n allVariantManifests.push(manifest);\n }\n\n const fieldDecls = fieldManifests\n .map(({ field: f, manifest }) => {\n return ` final ${manifest.type.content} ${camelCase(f.name as string)};`;\n })\n .join(\"\\n\");\n\n const ctorParams = fields\n .map((f: StructFieldTypeNode) => ` required this.${camelCase(f.name as string)},`)\n .join(\"\\n\");\n const ctorSignature =\n fields.length === 0\n ? ` const ${variantClassName}();`\n : ` const ${variantClassName}({\\n${ctorParams}\\n });`;\n\n const eqChecks =\n fields.length === 0\n ? \"true\"\n : fields\n .map((f: StructFieldTypeNode, index) => {\n const fieldName = camelCase(f.name as string);\n return isListManifest(fieldManifests[index].manifest)\n ? `_listEquals(${fieldName}, other.${fieldName})`\n : `${fieldName} == other.${fieldName}`;\n })\n .join(\" &&\\n \");\n\n const hashExpression = getValueHashExpression(fields, fieldManifests);\n if (fieldManifests.some(({ manifest }) => isListManifest(manifest))) {\n pageHasListEnums = true;\n }\n\n const toStringFields = fields\n .map((f: StructFieldTypeNode) => `${camelCase(f.name as string)}: $${camelCase(f.name as string)}`)\n .join(\", \");\n\n variantClasses.push(`final class ${variantClassName} extends ${typeName} {\n${ctorSignature}\n\n${fieldDecls}\n\n @override\n bool operator ==(Object other) =>\n identical(this, other) ||\n other is ${variantClassName} &&\n ${eqChecks};\n\n @override\n int get hashCode => ${hashExpression};\n\n @override\n String toString() => '${typeName}.${variantName}(${toStringFields})';\n}`);\n\n const encFields = fieldManifests\n .map(({ field: f, manifest }) => {\n return `('${f.name as string}', ${manifest.encoder.content})`;\n })\n .join(\", \");\n\n const decFields = fieldManifests\n .map(({ field: f, manifest }) => {\n return `('${f.name as string}', ${manifest.decoder.content})`;\n })\n .join(\", \");\n\n const fromMapFields = fieldManifests\n .map(\n ({ field: f, manifest }) => {\n const typeStr = manifest.type.content;\n const isNullable = typeStr.endsWith(\"?\");\n const accessor = isNullable ? `map['${f.name as string}']` : `map['${f.name as string}']!`;\n return `${camelCase(f.name as string)}: ${accessor} as ${typeStr}`;\n },\n )\n .join(\", \");\n\n const toMapFields = fields\n .map(\n (f: StructFieldTypeNode) =>\n `'${f.name as string}': value.${camelCase(f.name as string)}`,\n )\n .join(\", \");\n\n encoderVariants.push(\n `(${i}, getStructEncoder([${encFields}]))`,\n );\n decoderVariants.push(\n `(${i}, transformDecoder<Map<String, Object?>, Map<String, Object?>>(getStructDecoder([${decFields}]), (Map<String, Object?> map, Uint8List bytes, int offset) => map))`,\n );\n const structPattern =\n fields.length === 0\n ? ''\n : fields\n .map((f: StructFieldTypeNode) => `${camelCase(f.name as string)}: final ${camelCase(f.name as string)}`)\n .join(', ');\n const structMapEntries =\n fields.length === 0\n ? ''\n : `, ${fields.map((f: StructFieldTypeNode)=>`'${f.name as string}': ${camelCase(f.name as string)}`).join(', ')}`;\n encodeCases.push(`${variantClassName}(${structPattern}) => <String, Object?>{'__kind': ${i}${structMapEntries}},`);\n decodeCases.push(`case ${i}: return ${variantClassName}(${fromMapFields.replace(/\\n/g, ' ').replace(/,$/, '')});`);\n } else if (variant.kind === \"enumTupleVariantTypeNode\") {\n const resolvedTuple = resolveNestedTypeNode(variant.tuple);\n const items = resolvedTuple.items ?? [];\n if (items.length === 1) {\n const manifest = visit(items[0], scope.typeManifestVisitor);\n allVariantManifests.push(manifest);\n variantClasses.push(`final class ${variantClassName} extends ${typeName} {\n const ${variantClassName}(this.value);\n\n final ${manifest.type.content} value;\n\n @override\n bool operator ==(Object other) =>\n identical(this, other) ||\n other is ${variantClassName} && value == other.value;\n\n @override\n int get hashCode => value.hashCode;\n\n @override\n String toString() => '${typeName}.${variantName}(\\$value)';\n}`);\n encoderVariants.push(\n `(${i}, transformEncoder<${manifest.type.content}, Map<String, Object?>>(${manifest.encoder.content}, (Map<String, Object?> map) => map['value']! as ${manifest.type.content}))`,\n );\n decoderVariants.push(\n `(${i}, transformDecoder<${manifest.type.content}, Map<String, Object?>>(${manifest.decoder.content}, (${manifest.type.content} value, Uint8List bytes, int offset) => <String, Object?>{'value': value}))`,\n );\n encodeCases.push(`${variantClassName}(value: final value) => <String, Object?>{'__kind': ${i}, 'value': value},`);\n decodeCases.push(`case ${i}: return ${variantClassName}(map['value']! as ${manifest.type.content});`);\n }\n }\n }\n\n const encoderName = scope.nameApi.encoderFunction(name);\n const decoderName = scope.nameApi.decoderFunction(name);\n const codecName = scope.nameApi.codecFunction(name);\n const resolvedSize = resolveNestedTypeNode(enumNode.size);\n const sizeType = resolvedSize.format ?? \"u8\";\n const sizeCodecName = getNumberCodecName(sizeType);\n\n const result = fragment`// Auto-generated. Do not edit.\n// ignore_for_file: type=lint\n\n${use(\"Uint8List\", \"dartTypedData\")}\n${use(\"Encoder\", \"solanaCodecsCore\")}\n${use(\"Decoder\", \"solanaCodecsCore\")}\n${use(\"Codec\", \"solanaCodecsCore\")}\n${use(\"combineCodec\", \"solanaCodecsCore\")}\n${use(\"transformEncoder\", \"solanaCodecsCore\")}\n${use(\"transformDecoder\", \"solanaCodecsCore\")}\n${use(\"getStructEncoder\", \"solanaCodecsDataStructures\")}\n${use(\"getStructDecoder\", \"solanaCodecsDataStructures\")}\n${use(\"getDiscriminatedUnionEncoder\", \"solanaCodecsDataStructures\")}\n${use(\"getDiscriminatedUnionDecoder\", \"solanaCodecsDataStructures\")}\n${use(`get${sizeCodecName}Encoder`, \"solanaCodecsNumbers\")}\n${use(`get${sizeCodecName}Decoder`, \"solanaCodecsNumbers\")}\n\nsealed class ${fragmentFromString(typeName)} {\n const ${fragmentFromString(typeName)}();\n}\n\n${fragmentFromString(variantClasses.join(\"\\n\\n\"))}${pageHasListEnums ? LIST_VALUE_HELPERS : \"\"}\n\nEncoder<${fragmentFromString(typeName)}> ${fragmentFromString(encoderName)}() {\n return transformEncoder<Map<String, Object?>, ${fragmentFromString(typeName)}>(\n getDiscriminatedUnionEncoder([\n ${fragmentFromString(encoderVariants.join(\",\\n \"))},\n ], size: get${fragmentFromString(sizeCodecName)}Encoder()),\n (${fragmentFromString(typeName)} value) => switch (value) {\n ${fragmentFromString(encodeCases.join(\"\\n \"))}\n },\n );\n}\n\nDecoder<${fragmentFromString(typeName)}> ${fragmentFromString(decoderName)}() {\n return transformDecoder<Map<String, Object?>, ${fragmentFromString(typeName)}>(\n getDiscriminatedUnionDecoder([\n ${fragmentFromString(decoderVariants.join(\",\\n \"))},\n ], size: get${fragmentFromString(sizeCodecName)}Decoder()),\n (Map<String, Object?> map, Uint8List bytes, int offset) {\n switch (map['__kind']) {\n ${fragmentFromString(decodeCases.join(\"\\n \"))}\n }\n throw StateError('Unsupported ${typeName} discriminator: \\${map['__kind']}');\n },\n );\n}\n\nCodec<${fragmentFromString(typeName)}, ${fragmentFromString(typeName)}> ${fragmentFromString(codecName)}() {\n return combineCodec(${fragmentFromString(encoderName)}(), ${fragmentFromString(decoderName)}());\n}`;\n\n // Merge variant field type manifest imports into the result\n for (const manifest of allVariantManifests) {\n result.imports.mergeWith(manifest.encoder.imports);\n result.imports.mergeWith(manifest.decoder.imports);\n result.imports.mergeWith(manifest.type.imports);\n }\n\n return result;\n}\n\n/**\n * Generate a Dart @immutable class for a struct type.\n */\nfunction getStructPageFragment(\n node: DefinedTypeNode,\n scope: RenderScope,\n): Fragment {\n const name = node.name as string;\n const typeName = scope.nameApi.dataType(name);\n const structNode = node.type;\n if (structNode.kind !== \"structTypeNode\") return emptyFragment();\n\n const fields = structNode.fields ?? [];\n let pageHasListStructs = false;\n\n // Visit each field type once and collect manifests for reuse\n const fieldManifests = fields.map((f: StructFieldTypeNode) => ({\n field: f,\n manifest: visit(f.type, scope.typeManifestVisitor),\n }));\n\n const fieldDecls = fieldManifests\n .map(({ field: f, manifest }) => {\n return ` final ${manifest.type.content} ${camelCase(f.name as string)};`;\n })\n .join(\"\\n\");\n\n const ctorParams = fields\n .map((f: StructFieldTypeNode) => ` required this.${camelCase(f.name as string)},`)\n .join(\"\\n\");\n const ctorSignature =\n fields.length === 0\n ? ` const ${typeName}();`\n : ` const ${typeName}({\\n${ctorParams}\\n });`;\n\n const eqChecks =\n fields.length === 0\n ? \"true\"\n : fieldManifests\n .map(({ field: f, manifest }, index) => {\n const fieldName = camelCase(f.name as string);\n return isListManifest(manifest)\n ? `_listEquals(${fieldName}, other.${fieldName})`\n : `${fieldName} == other.${fieldName}`;\n })\n .join(\" &&\\n \");\n if (fieldManifests.some(({ manifest }) => isListManifest(manifest))) {\n pageHasListStructs = true;\n }\n\n const toStringFields = fields\n .map(\n (f: StructFieldTypeNode) =>\n `${camelCase(f.name as string)}: \\$${camelCase(f.name as string)}`,\n )\n .join(\", \");\n\n const encoderName = scope.nameApi.encoderFunction(name);\n const decoderName = scope.nameApi.decoderFunction(name);\n const codecName = scope.nameApi.codecFunction(name);\n\n // Build encoder/decoder field lists\n const encFields = fieldManifests\n .map(({ field: f, manifest }) => {\n return ` ('${f.name as string}', ${manifest.encoder.content}),`;\n })\n .join(\"\\n\");\n\n const decFields = fieldManifests\n .map(({ field: f, manifest }) => {\n return ` ('${f.name as string}', ${manifest.decoder.content}),`;\n })\n .join(\"\\n\");\n\n const toMapFields = fields\n .map(\n (f: StructFieldTypeNode) =>\n ` '${f.name as string}': value.${camelCase(f.name as string)},`,\n )\n .join(\"\\n\");\n\n const fromMapFields = fieldManifests\n .map(({ field: f, manifest }) => {\n const typeStr = manifest.type.content;\n const isNullable = typeStr.endsWith(\"?\");\n const accessor = isNullable ? `map['${f.name as string}']` : `map['${f.name as string}']!`;\n return ` ${camelCase(f.name as string)}: ${accessor} as ${typeStr},`;\n })\n .join(\"\\n\");\n\n const result = fragment`// Auto-generated. Do not edit.\n// ignore_for_file: type=lint\n\n${use(\"Uint8List\", \"dartTypedData\")}\n${use(\"immutable\", \"meta\")}\n${use(\"Encoder\", \"solanaCodecsCore\")}\n${use(\"Decoder\", \"solanaCodecsCore\")}\n${use(\"Codec\", \"solanaCodecsCore\")}\n${use(\"combineCodec\", \"solanaCodecsCore\")}\n${use(\"transformEncoder\", \"solanaCodecsCore\")}\n${use(\"transformDecoder\", \"solanaCodecsCore\")}\n${use(\"getStructEncoder\", \"solanaCodecsDataStructures\")}\n${use(\"getStructDecoder\", \"solanaCodecsDataStructures\")}\n\n@immutable\nclass ${fragmentFromString(typeName)} {\n${fragmentFromString(ctorSignature)}\n\n${fragmentFromString(fieldDecls)}\n\n @override\n bool operator ==(Object other) =>\n identical(this, other) ||\n other is ${fragmentFromString(typeName)} &&\n runtimeType == other.runtimeType &&\n ${fragmentFromString(eqChecks)};\n\n @override\n int get hashCode => ${fragmentFromString(\n getValueHashExpression(fields, fieldManifests),\n )};\n\n @override\n String toString() => '${fragmentFromString(typeName)}(${fragmentFromString(toStringFields)})';\n}\n${pageHasListStructs ? LIST_VALUE_HELPERS : \"\"}\nEncoder<${fragmentFromString(typeName)}> ${fragmentFromString(encoderName)}() {\n final structEncoder = getStructEncoder(<(String, Encoder<Object?>)>[\n${fragmentFromString(encFields)}\n ]);\n\n return transformEncoder(\n structEncoder,\n (${fragmentFromString(typeName)} value) => <String, Object?>{\n${fragmentFromString(toMapFields)}\n },\n );\n}\n\nDecoder<${fragmentFromString(typeName)}> ${fragmentFromString(decoderName)}() {\n final structDecoder = getStructDecoder(<(String, Decoder<Object?>)>[\n${fragmentFromString(decFields)}\n ]);\n\n return transformDecoder(\n structDecoder,\n (Map<String, Object?> map, Uint8List bytes, int offset) => ${fragmentFromString(typeName)}(\n${fragmentFromString(fromMapFields)}\n ),\n );\n}\n\nCodec<${fragmentFromString(typeName)}, ${fragmentFromString(typeName)}> ${fragmentFromString(codecName)}() {\n return combineCodec(${fragmentFromString(encoderName)}(), ${fragmentFromString(decoderName)}());\n}`;\n\n // Merge field type manifest imports (encoder, decoder, type) into the result\n for (const { manifest } of fieldManifests) {\n result.imports.mergeWith(manifest.encoder.imports);\n result.imports.mergeWith(manifest.decoder.imports);\n result.imports.mergeWith(manifest.type.imports);\n }\n\n return result;\n}\n\n/**\n * Generate a simple type alias with codec wrappers.\n */\nfunction getTypeAliasPageFragment(\n node: DefinedTypeNode,\n scope: RenderScope,\n): Fragment {\n const name = node.name as string;\n const typeName = scope.nameApi.dataType(name);\n const manifest = visit(node.type, scope.typeManifestVisitor);\n\n const encoderName = scope.nameApi.encoderFunction(name);\n const decoderName = scope.nameApi.decoderFunction(name);\n const codecName = scope.nameApi.codecFunction(name);\n\n return fragment`// Auto-generated. Do not edit.\n// ignore_for_file: type=lint\n\n${use(\"Encoder\", \"solanaCodecsCore\")}\n${use(\"Decoder\", \"solanaCodecsCore\")}\n${use(\"Codec\", \"solanaCodecsCore\")}\n${use(\"combineCodec\", \"solanaCodecsCore\")}\n\ntypedef ${fragmentFromString(typeName)} = ${manifest.type};\n\nEncoder<${fragmentFromString(typeName)}> ${fragmentFromString(encoderName)}() {\n return ${manifest.encoder};\n}\n\nDecoder<${fragmentFromString(typeName)}> ${fragmentFromString(decoderName)}() {\n return ${manifest.decoder};\n}\n\nCodec<${fragmentFromString(typeName)}, ${fragmentFromString(typeName)}> ${fragmentFromString(codecName)}() {\n return combineCodec(${fragmentFromString(encoderName)}(), ${fragmentFromString(decoderName)}());\n}`;\n}\n\n/**\n * Returns true when the rendered field type is a Dart list or byte sequence,\n * whose reference equality must be replaced with a deep comparison in\n * generated value classes.\n */\nfunction isListManifest(manifest: { type: Fragment }): boolean {\n return manifest.type.content.startsWith(\"List<\") ||\n manifest.type.content === \"Uint8List\";\n}\n\n/**\n * Private Dart helpers emitted into pages whose value classes contain\n * list-typed fields, so `==` and `hashCode` match recursive structural value\n * equality instead of list reference identity. The recursive branch matters\n * for generated types such as `List<Uint8List>`.\n */\nconst LIST_VALUE_HELPERS = `\nbool _listEquals<T>(List<T>? a, List<T>? b) {\n if (identical(a, b)) return true;\n if (a == null || b == null) return a == b;\n if (a.length != b.length) return false;\n for (var i = 0; i < a.length; i++) {\n final left = a[i];\n final right = b[i];\n if (left is List<Object?> && right is List<Object?>) {\n if (!_listEquals(left, right)) return false;\n } else if (left != right) {\n return false;\n }\n }\n return true;\n}\n\nObject? _deepHash(Object? value) {\n if (value is List<Object?>) {\n return Object.hashAll(value.map(_deepHash));\n }\n return value;\n}\n\nint _listHashCode<T>(List<T>? a) {\n if (a == null) return 0;\n return Object.hashAll(a.map(_deepHash));\n}\n`;\n\n/**\n * Builds the `hashCode` expression for a class whose fields render as the\n * given lowercase names. List-typed fields compare structurally through the\n * private `_listHashCode` helper emitted alongside the class.\n */\nfunction getValueHashExpression(\n fields: StructFieldTypeNode[],\n fieldManifests: { field: StructFieldTypeNode; manifest: { type: Fragment } }[],\n): string {\n const fieldNames = fields.map((f: StructFieldTypeNode) =>\n camelCase(f.name as string),\n );\n const hasListFields = fieldManifests.some(({ manifest }) =>\n isListManifest(manifest),\n );\n if (!hasListFields) {\n return getHashExpression(fieldNames);\n }\n if (fieldNames.length === 1) {\n return `_listHashCode(${fieldNames[0]})`;\n }\n const hashArgs = fields.map((f: StructFieldTypeNode, index) =>\n isListManifest(fieldManifests[index].manifest)\n ? `_listHashCode(${camelCase(f.name as string)})`\n : camelCase(f.name as string),\n );\n return `Object.hash(${hashArgs.join(\", \")})`;\n}\n\nfunction getHashExpression(fields: string[]): string {\n if (fields.length === 0) return \"runtimeType.hashCode\";\n if (fields.length === 1) return `${fields[0]}.hashCode`;\n return `Object.hash(${fields.join(\", \")})`;\n}\n\nfunction getNumberCodecName(format: string): string {\n switch (format) {\n case \"u8\": return \"U8\";\n case \"u16\": return \"U16\";\n case \"u32\": return \"U32\";\n case \"u64\": return \"U64\";\n case \"u128\": return \"U128\";\n case \"i8\": return \"I8\";\n case \"i16\": return \"I16\";\n case \"i32\": return \"I32\";\n case \"i64\": return \"I64\";\n case \"i128\": return \"I128\";\n case \"f32\": return \"F32\";\n case \"f64\": return \"F64\";\n case \"shortU16\": return \"ShortU16\";\n default: return \"U8\";\n }\n}\n","import {\n type AccountNode,\n type DefinedTypeNode,\n type InstructionNode,\n type PdaNode,\n type ProgramNode,\n type RootNode,\n} from \"@codama/nodes\";\nimport {\n type RenderMap,\n addToRenderMap,\n createRenderMap,\n mergeRenderMaps,\n} from \"@codama/renderers-core\";\nimport {\n type Visitor,\n LinkableDictionary,\n NodeStack,\n extendVisitor,\n pipe,\n recordLinkablesOnFirstVisitVisitor,\n recordNodeStackVisitor,\n staticVisitor,\n visit,\n} from \"@codama/visitors-core\";\n\nimport type { Fragment } from \"../utils/fragment.js\";\nimport type { GetRenderMapOptions, RenderScope } from \"../utils/options.js\";\nimport { createDartNameApi } from \"../utils/nameTransformers.js\";\nimport { snakeCase } from \"../utils/nameTransformers.js\";\nimport { getTypeManifestVisitor } from \"./getTypeManifestVisitor.js\";\n\nimport { getAccountPageFragment } from \"../fragments/accountPage.js\";\nimport { getErrorPageFragment } from \"../fragments/errorPage.js\";\nimport { getIndexPageFragment, getRootIndexPageFragment } from \"../fragments/indexPage.js\";\nimport { getInstructionPageFragment } from \"../fragments/instructionPage.js\";\nimport { getPdaPageFragment } from \"../fragments/pdaPage.js\";\nimport { getProgramPageFragment } from \"../fragments/programPage.js\";\nimport { getTypePageFragment } from \"../fragments/typePage.js\";\n\n/**\n * Creates a visitor that maps Codama nodes to a RenderMap of Dart files.\n */\nexport function getRenderMapVisitor(\n options: GetRenderMapOptions = {},\n): Visitor<RenderMap<Fragment>, \"rootNode\" | \"programNode\" | \"accountNode\" | \"definedTypeNode\" | \"instructionNode\" | \"pdaNode\"> {\n const nameApi = {\n ...createDartNameApi(),\n ...options.nameApi,\n };\n const dependencyMap = options.dependencyMap ?? {};\n\n const stack = new NodeStack();\n const linkables = new LinkableDictionary();\n\n const typeManifestVisitor = getTypeManifestVisitor({\n nameApi,\n linkables,\n stack,\n });\n\n const scope: RenderScope = {\n nameApi,\n typeManifestVisitor,\n linkables,\n dependencyMap,\n internalImportMap: {},\n };\n\n return pipe(\n staticVisitor(\n () => createRenderMap<Fragment>(),\n {\n keys: [\n \"rootNode\",\n \"programNode\",\n \"accountNode\",\n \"definedTypeNode\",\n \"instructionNode\",\n \"pdaNode\",\n ],\n },\n ),\n (v) =>\n extendVisitor(v, {\n visitRoot(node: RootNode, { self }) {\n const programMaps = [\n visit(node.program, self),\n ...(node.additionalPrograms ?? []).map((p) => visit(p, self)),\n ];\n\n const mergedProgramMap = mergeRenderMaps(programMaps);\n const categoryMaps = getSharedCategoryIndexMaps(mergedProgramMap);\n\n return mergeRenderMaps([mergedProgramMap, ...categoryMaps]);\n },\n\n visitProgram(node: ProgramNode, { self }) {\n const programName = node.name as string;\n const maps: RenderMap<Fragment>[] = [];\n\n // Track file names for barrel exports\n const accountFiles: string[] = [];\n const instructionFiles: string[] = [];\n const typeFiles: string[] = [];\n const pdaFiles: string[] = [];\n const errorFiles: string[] = [];\n const programFiles: string[] = [];\n\n // Visit accounts\n for (const account of node.accounts ?? []) {\n maps.push(visit(account, self));\n accountFiles.push(`${snakeCase(account.name as string)}.dart`);\n }\n\n // Visit instructions\n for (const instruction of node.instructions ?? []) {\n maps.push(visit(instruction, self));\n instructionFiles.push(\n `${snakeCase(instruction.name as string)}.dart`,\n );\n }\n\n // Visit defined types\n for (const definedType of node.definedTypes ?? []) {\n maps.push(visit(definedType, self));\n typeFiles.push(\n `${snakeCase(definedType.name as string)}.dart`,\n );\n }\n\n // Visit PDAs\n for (const pda of node.pdas ?? []) {\n maps.push(visit(pda, self));\n pdaFiles.push(`${snakeCase(pda.name as string)}.dart`);\n }\n\n // Program page\n const programFragment = getProgramPageFragment(node, scope);\n const programFileName = `${snakeCase(programName)}.dart`;\n programFiles.push(programFileName);\n let programMap = createRenderMap<Fragment>();\n programMap = addToRenderMap(programMap, `programs/${programFileName}`, programFragment);\n maps.push(programMap);\n\n // Error page\n const errors = node.errors ?? [];\n if (errors.length > 0) {\n const errorFragment = getErrorPageFragment(node, scope);\n const errorFileName = `${snakeCase(programName)}.dart`;\n errorFiles.push(errorFileName);\n let errorMap = createRenderMap<Fragment>();\n errorMap = addToRenderMap(errorMap, `errors/${errorFileName}`, errorFragment);\n maps.push(errorMap);\n }\n\n // Root barrel\n const categories: string[] = [];\n if (accountFiles.length > 0) categories.push(\"accounts\");\n if (instructionFiles.length > 0) categories.push(\"instructions\");\n if (typeFiles.length > 0) categories.push(\"types\");\n if (pdaFiles.length > 0) categories.push(\"pdas\");\n if (errorFiles.length > 0) categories.push(\"errors\");\n if (programFiles.length > 0) categories.push(\"programs\");\n\n if (categories.length > 0) {\n let rootMap = createRenderMap<Fragment>();\n rootMap = addToRenderMap(\n rootMap,\n `${snakeCase(programName)}.dart`,\n getRootIndexPageFragment(categories),\n );\n maps.push(rootMap);\n }\n\n return mergeRenderMaps(maps);\n },\n\n visitAccount(node: AccountNode, { self }) {\n const fileName = `${snakeCase(node.name as string)}.dart`;\n const frag = getAccountPageFragment(node, scope);\n let map = createRenderMap<Fragment>();\n map = addToRenderMap(map, `accounts/${fileName}`, frag);\n return map;\n },\n\n visitDefinedType(node: DefinedTypeNode, { self }) {\n const fileName = `${snakeCase(node.name as string)}.dart`;\n const frag = getTypePageFragment(node, scope);\n let map = createRenderMap<Fragment>();\n map = addToRenderMap(map, `types/${fileName}`, frag);\n return map;\n },\n\n visitInstruction(node: InstructionNode, { self }) {\n const fileName = `${snakeCase(node.name as string)}.dart`;\n const frag = getInstructionPageFragment(node, scope);\n let map = createRenderMap<Fragment>();\n map = addToRenderMap(map, `instructions/${fileName}`, frag);\n return map;\n },\n\n visitPda(node: PdaNode, { self }) {\n const fileName = `${snakeCase(node.name as string)}.dart`;\n const frag = getPdaPageFragment(node, scope);\n let map = createRenderMap<Fragment>();\n map = addToRenderMap(map, `pdas/${fileName}`, frag);\n return map;\n },\n }),\n (v) => recordNodeStackVisitor(v, stack),\n (v) => recordLinkablesOnFirstVisitVisitor(v, linkables),\n );\n}\n\nfunction getSharedCategoryIndexMaps(\n renderMap: RenderMap<Fragment>,\n): RenderMap<Fragment>[] {\n const categories = new Map<string, Set<string>>();\n const categoryIndexNames: Record<string, string> = {\n accounts: \"accounts.dart\",\n instructions: \"instructions.dart\",\n types: \"types.dart\",\n pdas: \"pdas.dart\",\n errors: \"errors.dart\",\n programs: \"programs.dart\",\n };\n\n for (const renderPath of renderMap.keys()) {\n const match = renderPath.match(\n /^(accounts|instructions|types|pdas|errors|programs)\\/([^/]+\\.dart)$/,\n );\n if (!match) continue;\n\n const [, category, fileName] = match;\n if (fileName === categoryIndexNames[category]) continue;\n\n if (!categories.has(category)) {\n categories.set(category, new Set());\n }\n categories.get(category)!.add(fileName);\n }\n\n const maps: RenderMap<Fragment>[] = [];\n for (const [category, files] of categories.entries()) {\n const sortedFiles = [...files].sort();\n let map = createRenderMap<Fragment>();\n map = addToRenderMap(\n map,\n `${category}/${categoryIndexNames[category]}`,\n getIndexPageFragment(sortedFiles),\n );\n maps.push(map);\n }\n\n return maps;\n}\n","import { existsSync, mkdirSync, rmSync, writeFileSync } from \"node:fs\";\nimport { join, dirname, relative, posix } from \"node:path\";\n\nimport { type RootNode } from \"@codama/nodes\";\nimport { rootNodeVisitor, visit } from \"@codama/visitors-core\";\nimport { deleteDirectory, writeRenderMap } from \"@codama/renderers-core\";\n\nimport type { Fragment } from \"../utils/fragment.js\";\nimport type { RenderOptions } from \"../utils/options.js\";\nimport { DartImportMap, DART_EXTERNAL_PACKAGE_MAP } from \"../utils/importMap.js\";\nimport { formatDartDirectory } from \"../utils/formatCode.js\";\nimport { normalizeRootNode } from \"../utils/normalizeRootNode.js\";\nimport { getRenderMapVisitor } from \"./getRenderMapVisitor.js\";\n\n/**\n * Creates a visitor that renders Codama nodes as Dart files.\n *\n * @param outputDir - The directory to write generated files into (e.g., 'lib/src/generated')\n * @param options - Rendering options\n */\nexport function renderVisitor(\n outputDir: string,\n options: RenderOptions = {},\n) {\n const {\n deleteFolderBeforeRendering = true,\n formatCode = false,\n nameApi,\n dependencyMap,\n } = options;\n\n return rootNodeVisitor((root: RootNode) => {\n const normalizedRoot = normalizeRootNode(root);\n\n // 1. Optionally delete the output directory\n if (deleteFolderBeforeRendering && existsSync(outputDir)) {\n deleteDirectory(outputDir);\n }\n\n // 2. Build the render map\n const renderMap = visit(\n normalizedRoot,\n getRenderMapVisitor({ nameApi, dependencyMap }),\n );\n\n // 3. Build a map of definedType module keys to their render map paths\n const typePathMap: Record<string, string> = {};\n for (const renderPath of renderMap.keys()) {\n const match = renderPath.match(/^(?:.*\\/)?types\\/([a-z0-9_]+)\\.dart$/);\n if (match) {\n typePathMap[`definedType:${match[1]}`] = renderPath;\n }\n }\n\n // 4. Resolve imports and write files\n for (const [filePath, frag] of renderMap.entries()) {\n const fullPath = join(outputDir, filePath);\n const dir = dirname(fullPath);\n\n // Ensure directory exists\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n // Compute per-file internal import map (relative paths to defined types)\n const fileDir = dirname(filePath);\n const internalMap: Record<string, string> = {};\n for (const [key, typePath] of Object.entries(typePathMap)) {\n // Keep the key resolved without generating a self-import.\n if (typePath === filePath) {\n internalMap[key] = \"\";\n continue;\n }\n\n let rel = posix.relative(fileDir, typePath);\n if (!rel.startsWith(\".\")) {\n rel = `./${rel}`;\n }\n internalMap[key] = rel;\n }\n\n // Resolve fragment content with imports\n const content = resolveFragmentContent(frag, dependencyMap ?? {}, internalMap);\n writeFileSync(fullPath, content, \"utf-8\");\n }\n\n // 4. Optionally format\n if (formatCode) {\n formatDartDirectory(outputDir);\n }\n });\n}\n\n/**\n * Resolve a fragment into its final Dart file content,\n * prepending the resolved import statements.\n */\nfunction resolveFragmentContent(\n frag: Fragment,\n dependencyMap: Record<string, string>,\n internalMap: Record<string, string> = {},\n): string {\n const { content, imports } = frag;\n\n const importStr = imports.toString({\n ...internalMap,\n ...dependencyMap,\n });\n\n if (!importStr) {\n return content + \"\\n\";\n }\n\n // Split content into header comment and rest\n const lines = content.split(\"\\n\");\n const headerLines: string[] = [];\n let restIndex = 0;\n\n for (let i = 0; i < lines.length; i++) {\n if (\n lines[i].startsWith(\"//\") ||\n lines[i].trim() === \"\"\n ) {\n headerLines.push(lines[i]);\n restIndex = i + 1;\n } else {\n break;\n }\n }\n\n const header = headerLines.join(\"\\n\");\n const rest = lines.slice(restIndex).join(\"\\n\");\n\n // Clean up: remove the use() placeholder text from content\n const cleanContent = cleanFragmentContent(rest);\n\n return `${header}\\n\\n${importStr}\\n\\n${cleanContent}\\n`;\n}\n\n/**\n * Remove use() placeholder fragments from content.\n * The use() function produces just the type name in content,\n * but when used standalone (not in a template), it leaves\n * lines like just \"Uint8List\" that need to be removed.\n */\nfunction cleanFragmentContent(content: string): string {\n // Remove lines that are just standalone identifier names from use() calls.\n // These are artifacts of the import tracking pattern where use() is called\n // purely for its import side-effect. Matches: PascalCase, camelCase,\n // and multi-word identifiers like \"getStructEncoder\".\n const lines = content.split(\"\\n\");\n const cleanLines = lines.filter((line) => {\n const trimmed = line.trim();\n // Skip lines that are a single identifier (no spaces, no punctuation)\n if (/^[a-zA-Z][a-zA-Z0-9]*$/.test(trimmed)) {\n return false;\n }\n return true;\n });\n return cleanLines.join(\"\\n\");\n}\n","export { renderVisitor } from \"./visitors/renderVisitor.js\";\nexport { getRenderMapVisitor } from \"./visitors/getRenderMapVisitor.js\";\nexport { getTypeManifestVisitor } from \"./visitors/getTypeManifestVisitor.js\";\nexport { DartImportMap, DART_EXTERNAL_PACKAGE_MAP } from \"./utils/importMap.js\";\nexport { createDartNameApi } from \"./utils/nameTransformers.js\";\nexport { normalizeRootNode } from \"./utils/normalizeRootNode.js\";\nexport type { DartNameApi } from \"./utils/nameTransformers.js\";\nexport type { RenderOptions, GetRenderMapOptions, RenderScope } from \"./utils/options.js\";\nexport type { TypeManifest } from \"./utils/typeManifest.js\";\nexport type { Fragment } from \"./utils/fragment.js\";\n\n// Default export for Codama CLI integration\nimport { renderVisitor } from \"./visitors/renderVisitor.js\";\nexport default renderVisitor;\n"]}
1
+ {"version":3,"sources":["../src/utils/formatCode.ts","../src/utils/normalizeRootNode.ts","../src/utils/nameTransformers.ts","../src/utils/codecs.ts","../src/utils/importMap.ts","../src/utils/fragment.ts","../src/utils/wellKnownAddresses.ts","../src/utils/valueNodes.ts","../src/utils/discriminators.ts","../src/utils/exactDecoder.ts","../src/utils/typeManifest.ts","../src/visitors/getTypeManifestVisitor.ts","../src/fragments/discriminatorConstants.ts","../src/fragments/accountPage.ts","../src/fragments/errorPage.ts","../src/fragments/indexPage.ts","../src/fragments/instructionPage.ts","../src/fragments/pdaPage.ts","../src/fragments/programPage.ts","../src/fragments/typePage.ts","../src/visitors/getRenderMapVisitor.ts","../src/visitors/renderVisitor.ts","../src/index.ts"],"names":["execFileSync","visit","resolveNestedTypeNode","staticVisitor","CodamaError","CODAMA_ERROR__UNEXPECTED_NODE_KIND","extendVisitor","getAllInstructionsWithSubs","getNumberCodecName","NodeStack","LinkableDictionary","pipe","createRenderMap","addToRenderMap","recordNodeStackVisitor","recordLinkablesOnFirstVisitVisitor","mergeRenderMaps","rootNodeVisitor","join","dirname","posix","existsSync","deleteDirectory","mkdirSync","writeFileSync"],"mappings":"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","file":"index.browser.cjs","sourcesContent":["import { execFileSync, execSync } from \"node:child_process\";\n\n/**\n * Format Dart code using `dart format`.\n * Falls back to returning the unformatted code if Dart is not available.\n */\nexport function formatDartCode(code: string): string {\n try {\n const result = execSync(\"dart format --output=show\", {\n input: code,\n encoding: \"utf-8\",\n timeout: 30_000,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n return result;\n } catch {\n // If dart format is not available, return as-is\n return code;\n }\n}\n\n/**\n * Format all Dart files in a directory using `dart format`.\n */\nexport function formatDartDirectory(dir: string): void {\n execFileSync(\"dart\", [\"format\", \"--\", dir], {\n encoding: \"utf-8\",\n timeout: 60_000,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n}\n","import type { RootNode } from \"@codama/nodes\";\n\n/**\n * Normalizes a serialized Codama root before it reaches Codama's visitors.\n *\n * Codama constructors materialize empty child collections, while generated\n * JSON commonly omits them. Pina intentionally omits those empty fields, so\n * restore only the structural defaults required by Codama traversal. This is\n * a copy: callers retain their original parsed IDL unchanged.\n */\nexport function normalizeRootNode(root: RootNode): RootNode {\n return normalizeNode(root) as RootNode;\n}\n\nfunction normalizeNode(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(normalizeNode);\n }\n\n if (!isRecord(value)) {\n return value;\n }\n\n const normalized = Object.fromEntries(\n Object.entries(value).map(([key, child]) => [key, normalizeNode(child)]),\n ) as Record<string, unknown>;\n\n switch (normalized.kind) {\n case \"rootNode\":\n setEmptyCollection(normalized, \"additionalPrograms\");\n break;\n case \"programNode\":\n setEmptyCollection(normalized, \"accounts\");\n setEmptyCollection(normalized, \"constants\");\n setEmptyCollection(normalized, \"definedTypes\");\n setEmptyCollection(normalized, \"errors\");\n setEmptyCollection(normalized, \"events\");\n setEmptyCollection(normalized, \"instructions\");\n setEmptyCollection(normalized, \"pdas\");\n break;\n case \"instructionNode\":\n setEmptyCollection(normalized, \"accounts\");\n setEmptyCollection(normalized, \"arguments\");\n break;\n case \"pdaNode\":\n setEmptyCollection(normalized, \"seeds\");\n break;\n case \"structTypeNode\":\n setEmptyCollection(normalized, \"fields\");\n break;\n case \"enumTypeNode\":\n setEmptyCollection(normalized, \"variants\");\n break;\n case \"tupleTypeNode\":\n setEmptyCollection(normalized, \"items\");\n break;\n case \"hiddenPrefixTypeNode\":\n setEmptyCollection(normalized, \"prefix\");\n break;\n case \"hiddenSuffixTypeNode\":\n setEmptyCollection(normalized, \"suffix\");\n break;\n }\n\n return normalized;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction setEmptyCollection(record: Record<string, unknown>, key: string): void {\n if (record[key] === undefined) {\n record[key] = [];\n }\n}\n","import type { CamelCaseString } from \"@codama/nodes\";\n\n/**\n * Naming convention transformers for Dart code generation.\n */\n\n/** Convert a string to PascalCase */\nexport function pascalCase(str: string): string {\n assertSafeName(str);\n\n return str\n .replace(/[-_\\s]+(.)?/g, (_, c) => (c ? c.toUpperCase() : \"\"))\n .replace(/^(.)/, (c) => c.toUpperCase());\n}\n\n/**\n * Dart reserved words (plus `async`/`await`/`yield` where they cannot be\n * plain identifiers). A lowercase declaration named with one of these must\n * be escaped, e.g. an account named `null` becomes a `null_` parameter.\n */\nconst DART_RESERVED_WORDS = new Set([\n \"abstract\", \"as\", \"assert\", \"async\", \"augment\", \"await\", \"base\",\n \"break\", \"case\", \"catch\", \"class\", \"const\", \"continue\", \"covariant\",\n \"default\", \"deferred\", \"do\", \"dynamic\", \"else\", \"enum\", \"export\",\n \"extends\", \"extension\", \"external\", \"factory\", \"false\", \"final\",\n \"finally\", \"for\", \"get\", \"hide\", \"if\", \"implements\", \"import\", \"in\",\n \"interface\", \"is\", \"late\", \"library\", \"mixin\", \"native\", \"new\", \"null\",\n \"of\", \"on\", \"operator\", \"part\", \"required\", \"rethrow\", \"return\",\n \"sealed\", \"set\", \"show\", \"static\", \"super\", \"switch\", \"sync\", \"this\",\n \"throw\", \"true\", \"try\", \"typedef\", \"var\", \"void\", \"when\", \"while\",\n \"with\", \"yield\",\n]);\n\n/**\n * Escape a lowercase identifier if it collides with a Dart reserved word\n * by appending `_` (e.g. an account named `null` renders as `null_`).\n */\nexport function escapeDartIdentifier(name: string): string {\n return DART_RESERVED_WORDS.has(name) ? `${name}_` : name;\n}\n\n/** Convert a string to camelCase */\nexport function camelCase(str: string): string {\n const pascal = pascalCase(str);\n const cased = pascal.charAt(0).toLowerCase() + pascal.slice(1);\n return escapeDartIdentifier(cased);\n}\n\n/** Convert a string to snake_case */\nexport function snakeCase(str: string): string {\n assertSafeName(str);\n\n return str\n .replace(/([A-Z])/g, \"_$1\")\n .replace(/[-\\s]+/g, \"_\")\n .replace(/^_/, \"\")\n .replace(/_+/g, \"_\")\n .toLowerCase();\n}\n\n/** Convert a string to SCREAMING_SNAKE_CASE */\nexport function screamingSnakeCase(str: string): string {\n return snakeCase(str).toUpperCase();\n}\n\n/**\n * All name transformation functions for Dart code generation.\n */\nexport interface DartNameApi {\n /** Data class name: `PascalCase` */\n dataType(name: string): string;\n /** Encoder function name: `get{PascalCase}Encoder` */\n encoderFunction(name: string): string;\n /** Decoder function name: `get{PascalCase}Decoder` */\n decoderFunction(name: string): string;\n /** Codec function name: `get{PascalCase}Codec` */\n codecFunction(name: string): string;\n /** Account fetch function: `fetch{PascalCase}` */\n accountFetchFunction(name: string): string;\n /** Account fetch maybe function: `fetchMaybe{PascalCase}` */\n accountFetchMaybeFunction(name: string): string;\n /** Account decode function: `decode{PascalCase}` */\n accountDecodeFunction(name: string): string;\n /** Account size constant: `{camelCase}Size` */\n accountSizeConstant(name: string): string;\n /** PDA finder function: `find{PascalCase}Pda` */\n pdaFindFunction(name: string): string;\n /** Instruction builder function: `get{PascalCase}Instruction` */\n instructionFunction(name: string): string;\n /** Instruction parse function: `parse{PascalCase}Instruction` */\n instructionParseFunction(name: string): string;\n /** Program address constant: `{camelCase}ProgramAddress` */\n programAddressConstant(name: string): string;\n /** Error code constant: `{programName}Error{PascalCase}` */\n errorConstant(programName: string, errorName: string): string;\n /** Error message function: `get{PascalCase}ErrorMessage` */\n errorMessageFunction(name: string): string;\n /** Enum variant: `camelCase` */\n enumVariant(name: string): string;\n /** Sealed class variant (data enum): `{ParentName}{PascalCase}` */\n sealedClassVariant(parentName: string, variantName: string): string;\n /** File name: `snake_case.dart` */\n fileName(name: string): string;\n /** Discriminator constant: `{camelCase}Discriminator` */\n discriminatorConstant(name: string): string;\n /** isX() helper for type check: `is{PascalCase}` */\n isTypeFunction(name: string): string;\n}\n\n/**\n * Create the default Dart name API.\n */\nexport function createDartNameApi(): DartNameApi {\n return {\n dataType: (name) => pascalCase(name),\n encoderFunction: (name) => `get${pascalCase(name)}Encoder`,\n decoderFunction: (name) => `get${pascalCase(name)}Decoder`,\n codecFunction: (name) => `get${pascalCase(name)}Codec`,\n accountFetchFunction: (name) => `fetch${pascalCase(name)}`,\n accountFetchMaybeFunction: (name) => `fetchMaybe${pascalCase(name)}`,\n accountDecodeFunction: (name) => `decode${pascalCase(name)}`,\n accountSizeConstant: (name) => `${camelCase(name)}Size`,\n pdaFindFunction: (name) => `find${pascalCase(name)}Pda`,\n instructionFunction: (name) => `get${pascalCase(name)}Instruction`,\n instructionParseFunction: (name) => `parse${pascalCase(name)}Instruction`,\n programAddressConstant: (name) => `${camelCase(name)}ProgramAddress`,\n errorConstant: (programName, errorName) =>\n `${camelCase(programName)}Error${pascalCase(errorName)}`,\n errorMessageFunction: (name) => `get${pascalCase(name)}ErrorMessage`,\n enumVariant: (name) => camelCase(name),\n sealedClassVariant: (parentName, variantName) =>\n `${pascalCase(parentName)}${pascalCase(variantName)}`,\n isTypeFunction: (name) => `is${pascalCase(name)}`,\n fileName: (name) => snakeCase(name),\n discriminatorConstant: (name) => `${camelCase(name)}Discriminator`,\n };\n}\n\n/**\n * Convert a CamelCaseString to a regular string.\n */\nexport function fromCamelCaseString(str: CamelCaseString): string {\n return str as string;\n}\n\n/** Reject IDL names that could escape generated identifiers, strings, or paths. */\nfunction assertSafeName(name: string): void {\n if (!/^[a-zA-Z0-9_ -]*$/.test(name)) {\n throw new Error(`Invalid Dart node name: ${JSON.stringify(name)}`);\n }\n}\n","/**\n * Convert a Uint8Array to a Dart hex literal string.\n * Used for discriminator constants.\n */\nexport function bytesToDartHexList(bytes: Uint8Array): string {\n const pairs: string[] = [];\n for (let i = 0; i < bytes.length; i++) {\n pairs.push(`0x${bytes[i].toString(16).padStart(2, \"0\")}`);\n }\n return `[${pairs.join(\", \")}]`;\n}\n\n/**\n * Convert a Uint8Array to a Dart Uint8List.fromList() expression.\n */\nexport function bytesToDartUint8List(bytes: Uint8Array): string {\n const hex = bytesToDartHexList(bytes);\n return `Uint8List.fromList(${hex})`;\n}\n","/**\n * Maps logical module names to Dart package: URIs.\n */\nexport const DART_EXTERNAL_PACKAGE_MAP: Record<string, string> = {\n // Dart core\n dartTypedData: \"dart:typed_data\",\n dartConvert: \"dart:convert\",\n meta: \"package:meta/meta.dart\",\n\n // solana_kit packages\n solanaAddresses: \"package:solana_kit_addresses/solana_kit_addresses.dart\",\n solanaCodecsCore: \"package:solana_kit_codecs_core/solana_kit_codecs_core.dart\",\n solanaCodecsDataStructures:\n \"package:solana_kit_codecs_data_structures/solana_kit_codecs_data_structures.dart\",\n solanaCodecsNumbers:\n \"package:solana_kit_codecs_numbers/solana_kit_codecs_numbers.dart\",\n solanaCodecsStrings:\n \"package:solana_kit_codecs_strings/solana_kit_codecs_strings.dart\",\n solanaErrors: \"package:solana_kit_errors/solana_kit_errors.dart\",\n solanaAccounts: \"package:solana_kit_accounts/solana_kit_accounts.dart\",\n solanaInstructions:\n \"package:solana_kit_instructions/solana_kit_instructions.dart\",\n solanaPrograms: \"package:solana_kit_programs/solana_kit_programs.dart\",\n solanaRpcTypes: \"package:solana_kit_rpc_types/solana_kit_rpc_types.dart\",\n solanaSigners: \"package:solana_kit_signers/solana_kit_signers.dart\",\n};\n\n/**\n * Tracks Dart import URIs needed by generated code.\n *\n * Dart imports entire libraries (not individual symbols), so we only\n * need to track which package URIs are used, not specific symbols.\n */\nexport class DartImportMap {\n private _imports = new Set<string>();\n\n /**\n * Add a logical module name (resolved via DART_EXTERNAL_PACKAGE_MAP)\n * or a raw Dart import URI.\n */\n add(module: string): this {\n this._imports.add(module);\n return this;\n }\n\n /**\n * Merge another DartImportMap into this one.\n */\n mergeWith(other: DartImportMap): this {\n for (const imp of other._imports) {\n this._imports.add(imp);\n }\n return this;\n }\n\n /**\n * Check if this import map is empty.\n */\n get isEmpty(): boolean {\n return this._imports.size === 0;\n }\n\n /**\n * Get all raw module keys.\n */\n get modules(): Set<string> {\n return new Set(this._imports);\n }\n\n /**\n * Resolve all imports to Dart import URIs and return them sorted.\n * @param internalMap Maps logical names to relative file paths for generated code cross-references.\n */\n resolve(internalMap: Record<string, string> = {}): string[] {\n const uris = new Set<string>();\n\n for (const module of this._imports) {\n // Check internal map first (generated cross-references)\n if (module in internalMap) {\n const uri = internalMap[module];\n if (uri) {\n uris.add(uri);\n }\n }\n // Then external package map\n else if (module in DART_EXTERNAL_PACKAGE_MAP) {\n uris.add(DART_EXTERNAL_PACKAGE_MAP[module]);\n }\n // Finally, accept explicit Dart URIs and relative Dart paths.\n else if (isRawDartImportUri(module)) {\n uris.add(module);\n } else {\n throw new Error(`Unresolved Dart import module \"${module}\"`);\n }\n }\n\n // Sort: dart: first, then package:, then relative\n return [...uris].sort((a, b) => {\n const aWeight = a.startsWith(\"dart:\") ? 0 : a.startsWith(\"package:\") ? 1 : 2;\n const bWeight = b.startsWith(\"dart:\") ? 0 : b.startsWith(\"package:\") ? 1 : 2;\n if (aWeight !== bWeight) return aWeight - bWeight;\n return a.localeCompare(b);\n });\n }\n\n /**\n * Render all imports as Dart import statements.\n */\n toString(internalMap: Record<string, string> = {}): string {\n const resolved = this.resolve(internalMap);\n if (resolved.length === 0) return \"\";\n\n const lines: string[] = [];\n let lastPrefix = \"\";\n\n for (const uri of resolved) {\n const prefix = uri.startsWith(\"dart:\")\n ? \"dart\"\n : uri.startsWith(\"package:\")\n ? \"package\"\n : \"relative\";\n\n // Add blank line between groups\n if (lastPrefix && lastPrefix !== prefix) {\n lines.push(\"\");\n }\n lastPrefix = prefix;\n\n lines.push(`import '${uri}';`);\n }\n\n return lines.join(\"\\n\");\n }\n}\n\nfunction isRawDartImportUri(module: string): boolean {\n return (\n module.startsWith(\"dart:\") ||\n module.startsWith(\"package:\") ||\n (module.endsWith(\".dart\") && !module.includes(\":\"))\n );\n}\n","import type { BaseFragment } from \"@codama/renderers-core\";\n\nimport { DartImportMap } from \"./importMap.js\";\n\n/**\n * A Fragment represents a piece of generated Dart code\n * along with the imports it requires.\n */\nexport type Fragment = BaseFragment &\n Readonly<{\n imports: DartImportMap;\n }>;\n\n/**\n * Create a Fragment from a tagged template literal.\n * Embedded Fragment values have their imports merged automatically.\n */\nexport function fragment(\n strings: TemplateStringsArray,\n ...values: (Fragment | string | number | boolean | undefined | null)[]\n): Fragment {\n const imports = new DartImportMap();\n const parts: string[] = [];\n\n for (let i = 0; i < strings.length; i++) {\n parts.push(strings[i]);\n if (i < values.length) {\n const value = values[i];\n if (value != null && typeof value === \"object\" && \"imports\" in value) {\n parts.push(value.content);\n imports.mergeWith(value.imports);\n } else {\n parts.push(String(value ?? \"\"));\n }\n }\n }\n\n return {\n content: parts.join(\"\"),\n imports,\n };\n}\n\n/**\n * Create an empty fragment.\n */\nexport function emptyFragment(): Fragment {\n return { content: \"\", imports: new DartImportMap() };\n}\n\n/**\n * Create a fragment from a raw string.\n */\nexport function fragmentFromString(content: string): Fragment {\n return { content, imports: new DartImportMap() };\n}\n\n/**\n * Merge multiple fragments with a joiner function.\n */\nexport function mergeFragments(\n fragments: Fragment[],\n joiner: (contents: string[]) => string,\n): Fragment {\n const imports = new DartImportMap();\n const contents: string[] = [];\n\n for (const frag of fragments) {\n contents.push(frag.content);\n imports.mergeWith(frag.imports);\n }\n\n return { content: joiner(contents), imports };\n}\n\n/**\n * Helper to add a Dart import to a fragment and return a type name fragment.\n */\nexport function use(typeName: string, module: string): Fragment {\n const imports = new DartImportMap();\n imports.add(module);\n return { content: typeName, imports };\n}\n","/**\n * Maps well-known Solana public keys to their canonical Dart constant names\n * in `package:solana_kit_addresses`. When the renderer encounters a known\n * address, it emits a re-export from that package instead of hardcoding the\n * address string.\n *\n * The keys are the base-58 public key strings as they appear in IDL/Codama nodes.\n * The values are the Dart constant names exported by `solana_kit_addresses`.\n */\nexport const WELL_KNOWN_ADDRESSES: ReadonlyMap<string, string> = new Map([\n // Agave / Solana native programs\n ['11111111111111111111111111111111', 'systemProgramAddress'],\n ['AddressLookupTab1e1111111111111111111111111', 'addressLookupTableProgramAddress'],\n ['BPFLoader2111111111111111111111111111111111', 'bpfLoaderProgramAddress'],\n ['BPFLoader1111111111111111111111111111111111', 'bpfLoaderDeprecatedProgramAddress'],\n ['BPFLoaderUpgradeab1e11111111111111111111111', 'bpfLoaderUpgradeableProgramAddress'],\n ['ComputeBudget111111111111111111111111111111', 'computeBudgetProgramAddress'],\n ['Config1111111111111111111111111111111111111', 'configProgramAddress'],\n ['Ed25519SigVerify111111111111111111111111111', 'ed25519ProgramAddress'],\n ['Feature111111111111111111111111111111111111', 'featureProgramAddress'],\n ['1nc1nerator11111111111111111111111111111111', 'incineratorAddress'],\n ['LoaderV411111111111111111111111111111111111', 'loaderV4ProgramAddress'],\n ['NativeLoader1111111111111111111111111111', 'nativeLoaderProgramAddress'],\n ['KeccakSecp256k11111111111111111111111111111', 'secp256k1ProgramAddress'],\n ['Secp256r1SigVerify1111111111111111111111111', 'secp256r1ProgramAddress'],\n ['Stake11111111111111111111111111111111111111', 'stakeProgramAddress'],\n ['StakeConfig1111111111111111111111111111', 'stakeConfigAddress'],\n ['Vote111111111111111111111111111111111111111', 'voteProgramAddress'],\n ['ZkTokenProof1111111111111111111111111111111', 'zkTokenProofProgramAddress'],\n ['ZkE1Gama1Proof11111111111111111111111111111', 'zkElgamalProofProgramAddress'],\n\n // Sysvars\n ['SysvarC1ock11111111111111111111111111111111', 'sysvarClockAddress'],\n ['Rent11111111111111111111111111111111111111', 'sysvarRentAddress'],\n ['11111111111111111111111111111111111111111111', 'sysvarRecentBlockhashesAddress'], // note: 44 chars\n ['SysvarFees1111111111111111111111111111111111', 'sysvarFeesAddress'],\n ['Sysvar1nstruct1ons11111111111111111111111111', 'sysvarInstructionsAddress'],\n ['SysvarEpochSchedu1e111111111111111111111111', 'sysvarEpochScheduleAddress'],\n ['SysvarRewards111111111111111111111111111111', 'sysvarRewardsAddress'],\n ['SysvarStakeHistory1111111111111111111111111', 'sysvarStakeHistoryAddress'],\n ['SysvarS1otHashes111111111111111111111111111', 'sysvarSlotHashesAddress'],\n ['SysvarS1otHistory11111111111111111111111111', 'sysvarSlotHistoryAddress'],\n ['Sysvar1111111111111111111111111111111111111', 'sysvarOwnerAddress'],\n\n // SPL programs\n ['TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA', 'tokenProgramAddress'],\n ['TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb', 'token2022ProgramAddress'],\n ['ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL', 'associatedTokenProgramAddress'],\n ['MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr', 'memoProgramAddress'],\n ['Memo1UhkJRfHyvLMcVucJwxXeuD728EqVDDwQDxFMNo', 'memoLegacyProgramAddress'],\n\n // Metaplex programs\n ['metaqbxxU9qX8rZXkmUJ7haCrXXz2W1PSUq1Rn3E1od', 'tokenMetadataProgramAddress'],\n ['BGUMAp9V1mQ2KV8t34L5u3gZsXYZaYDBdKkc1xYk1qA1', 'mplBubblegumProgramAddress'],\n ['auth9SigNpDKz4s8cHr3MFBPS1phbRKLSCN3aBe9sS', 'authRulesProgramAddress'],\n ['CoREENxT6tW1Ho6BW6W5Z4N41ci5Xz2mmrR2kErmM5TR', 'metaplexCoreProgramAddress'],\n ['cmtMqR4bPM9sEV3bPnJQq5s2EnYw4N5vQ8hWhEd1xzS', 'splAccountCompressionProgramAddress'],\n ['noopb9skMVngR5Qi4sczwFr1jU4V4F7nm8xzFQK9C', 'noopProgramAddress'],\n\n // Well-known mints\n ['So11111111111111111111111111111111111111112', 'wrappedSolAddress'],\n ['EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', 'usdcAddress'],\n ['Es9vMFrzaCERm6YKXx6bqKr1Rmd9b5v3J8rM5e4rfF4', 'usdtAddress'],\n]);","import type {\n InstructionInputValueNode,\n ValueNode,\n} from \"@codama/nodes\";\n\nimport type { Fragment } from \"./fragment.js\";\nimport { fragment, fragmentFromString, use } from \"./fragment.js\";\nimport { WELL_KNOWN_ADDRESSES } from \"./wellKnownAddresses.js\";\n\ntype RenderableValueNode = InstructionInputValueNode | ValueNode;\n\n/**\n * Render a standalone Codama value as a Dart expression.\n *\n * Contextual instruction values need resolver state and are deliberately\n * rejected here. Defaults and discriminators must be deterministic at code\n * generation time so generated encoders cannot silently choose a different\n * wire value.\n */\nexport function getDartValueFragment(\n value: RenderableValueNode,\n dartType?: string,\n): Fragment {\n switch (value.kind) {\n case \"numberValueNode\":\n // Serialized IDLs bypass TypeScript types; never interpolate unvalidated data.\n if (typeof value.number !== \"number\" || !Number.isFinite(value.number)) {\n throw new Error(\"Invalid Dart number: expected a finite number\");\n }\n\n if (dartType === \"BigInt\" && !Number.isSafeInteger(value.number)) {\n throw new Error(\"Invalid Dart BigInt: expected a safe integer\");\n }\n\n return fragmentFromString(\n dartType === \"BigInt\"\n ? `BigInt.from(${value.number})`\n : String(value.number),\n );\n case \"booleanValueNode\":\n if (typeof value.boolean !== \"boolean\") {\n throw new Error(\"Invalid Dart boolean: expected a boolean\");\n }\n\n return fragmentFromString(String(value.boolean));\n case \"stringValueNode\":\n return fragmentFromString(toDartStringLiteral(value.string));\n case \"noneValueNode\":\n return fragmentFromString(\"null\");\n case \"bytesValueNode\": {\n if (value.encoding !== \"base16\") {\n throw new Error(\n `Unsupported deterministic bytes encoding: ${value.encoding}`,\n );\n }\n const clean = value.data.replace(/^0x/, \"\");\n if (clean.length % 2 !== 0 || !/^[0-9a-f]*$/i.test(clean)) {\n throw new Error(`Invalid hexadecimal bytes value: ${value.data}`);\n }\n const bytes = clean.match(/.{2}/g)?.map((byte) => `0x${byte}`) ?? [];\n return fragment`${use(\"Uint8List\", \"dartTypedData\")}.fromList([${fragmentFromString(bytes.join(\", \"))}])`;\n }\n case \"publicKeyValueNode\": {\n const wellKnownName = WELL_KNOWN_ADDRESSES.get(value.publicKey);\n return wellKnownName\n ? fragment`${use(wellKnownName, \"solanaAddresses\")}`\n : fragment`${use(\"Address\", \"solanaAddresses\")}(${fragmentFromString(toDartStringLiteral(value.publicKey))})`;\n }\n default:\n throw new Error(\n `Unsupported deterministic Dart value node: ${value.kind}`,\n );\n }\n}\n\n/** Return whether a rendered standalone value is valid in a const initializer. */\nexport function isConstDartValueNode(value: RenderableValueNode): boolean {\n switch (value.kind) {\n case \"numberValueNode\":\n case \"booleanValueNode\":\n case \"stringValueNode\":\n case \"noneValueNode\":\n case \"publicKeyValueNode\":\n return true;\n default:\n return false;\n }\n}\n\n/** Escape IDL text so it remains data inside a Dart string literal. */\nexport function toDartStringLiteral(value: string): string {\n return `'${value\n .replaceAll(\"\\\\\", \"\\\\\\\\\")\n .replaceAll(\"\\n\", \"\\\\n\")\n .replaceAll(\"\\r\", \"\\\\r\")\n .replaceAll(\"\\t\", \"\\\\t\")\n .replaceAll(\"\\b\", \"\\\\b\")\n .replaceAll(\"\\f\", \"\\\\f\")\n .replaceAll(\"$\", \"\\\\$\")\n .replaceAll(\"'\", \"\\\\'\")}'`;\n}\n\n/** Reject executable or lossy sizes from serialized IDLs before generating Dart. */\nexport function getNonNegativeInteger(value: number): string {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new Error(\"Expected a non-negative safe integer value\");\n }\n\n return String(value);\n}\n","import type {\n AccountNode,\n ConstantValueNode,\n InstructionNode,\n StructFieldTypeNode,\n} from \"@codama/nodes\";\nimport { resolveNestedTypeNode } from \"@codama/nodes\";\nimport { visit } from \"@codama/visitors-core\";\n\nimport type { Fragment } from \"./fragment.js\";\nimport {\n emptyFragment,\n fragment,\n fragmentFromString,\n mergeFragments,\n use,\n} from \"./fragment.js\";\nimport type { RenderScope } from \"./options.js\";\nimport { getDartValueFragment } from \"./valueNodes.js\";\n\ntype DiscriminatedNode = AccountNode | InstructionNode;\n\n/**\n * Generate decoder guards for every discriminator declared by a Codama node.\n */\nexport function getDiscriminatorValidationFragment(\n node: DiscriminatedNode,\n scope: RenderScope,\n): Fragment {\n const discriminators = node.discriminators ?? [];\n if (discriminators.length === 0) return emptyFragment();\n\n const fields = getDiscriminatorFields(node);\n const fragments = discriminators.map((discriminator): Fragment => {\n switch (discriminator.kind) {\n case \"constantDiscriminatorNode\":\n return getConstantValidationFragment(\n discriminator.constant,\n discriminator.offset,\n scope,\n );\n case \"fieldDiscriminatorNode\": {\n const field = fields.find(\n (candidate) => candidate.name === discriminator.name,\n );\n if (field?.defaultValue == null) {\n throw new Error(\n `Field discriminator \"${discriminator.name}\" on ${node.kind} \"${node.name}\" must reference a field with a default value.`,\n );\n }\n return getConstantValidationFragment(\n {\n kind: \"constantValueNode\",\n type: field.type,\n value: field.defaultValue,\n } as ConstantValueNode,\n discriminator.offset,\n scope,\n );\n }\n case \"sizeDiscriminatorNode\": {\n if (\n !Number.isSafeInteger(discriminator.size) ||\n discriminator.size < 0\n ) {\n throw new Error(\n `Discriminator size must be a non-negative safe integer, got ${discriminator.size}.`,\n );\n }\n return fragment`if (bytes.length - offset != ${fragmentFromString(String(discriminator.size))}) {\n throw ${use(\"SolanaError\", \"solanaErrors\")}(\n ${use(\"SolanaErrorCode\", \"solanaErrors\")}.codecsInvalidByteLength,\n {\n 'codecDescription': '${fragmentFromString(node.name as string)} discriminator',\n 'expected': ${fragmentFromString(String(discriminator.size))},\n 'bytesLength': bytes.length - offset,\n },\n );\n}`;\n }\n }\n });\n\n return mergeFragments(fragments, (contents) => contents.join(\"\\n\"));\n}\n\nfunction getConstantValidationFragment(\n constant: ConstantValueNode,\n discriminatorOffset: number,\n scope: RenderScope,\n): Fragment {\n if (!Number.isSafeInteger(discriminatorOffset) || discriminatorOffset < 0) {\n throw new Error(\n `Discriminator offset must be a non-negative safe integer, got ${discriminatorOffset}.`,\n );\n }\n\n const manifest = visit(constant.type, scope.typeManifestVisitor);\n const value = getDartValueFragment(\n constant.value,\n manifest.type.content,\n );\n return fragment`${use(\"getConstantDecoder\", \"solanaCodecsDataStructures\")}(\n ${manifest.encoder}.encode(${value}),\n).read(bytes, offset + ${fragmentFromString(String(discriminatorOffset))});`;\n}\n\nfunction getDiscriminatorFields(\n node: DiscriminatedNode,\n): readonly StructFieldTypeNode[] {\n if (node.kind === \"accountNode\") {\n return resolveNestedTypeNode(node.data).fields ?? [];\n }\n return (node.arguments ?? []).map(\n (argument) =>\n ({\n ...argument,\n kind: \"structFieldTypeNode\",\n }) as StructFieldTypeNode,\n );\n}\n","import type { Fragment } from \"./fragment.js\";\nimport { fragment, fragmentFromString, use } from \"./fragment.js\";\n\nexport interface TopLevelDecoderFragmentOptions {\n readonly typeName: string;\n readonly description: string;\n readonly discriminatorValidation: Fragment;\n readonly fromMapFields: string;\n readonly requireExactConsumption: boolean;\n}\n\n/**\n * Wrap a generated top-level struct decoder with discriminator and length\n * validation.\n *\n * The wrapper preserves fixed/variable decoder metadata so it remains\n * compatible with the matching generated encoder when combined into a codec.\n */\nexport function getTopLevelDecoderFragment({\n typeName,\n description,\n discriminatorValidation,\n fromMapFields,\n requireExactConsumption,\n}: TopLevelDecoderFragmentOptions): Fragment {\n const validation = discriminatorValidation.content\n ? ` ${discriminatorValidation.content.replaceAll(\"\\n\", \"\\n \")}\\n`\n : \"\";\n\n const consumptionCheck = requireExactConsumption\n ? ` if (newOffset != bytes.length) {\n throwInvalidByteLength(newOffset - offset, bytes.length - offset);\n }\n`\n : \"\";\n const fixedSizeCheck = requireExactConsumption\n ? \"bytesLength != structDecoder.fixedSize\"\n : \"bytesLength < structDecoder.fixedSize\";\n\n const result = fragment` Never throwInvalidByteLength(int expected, int bytesLength) {\n throw ${use(\"SolanaError\", \"solanaErrors\")}(\n ${use(\"SolanaErrorCode\", \"solanaErrors\")}.codecsInvalidByteLength,\n {\n 'codecDescription': '${fragmentFromString(description)}',\n 'expected': expected,\n 'bytesLength': bytesLength,\n },\n );\n }\n\n (${fragmentFromString(typeName)}, int) readTopLevel(Uint8List bytes, int offset) {\n${fragmentFromString(validation)} final (map, newOffset) = structDecoder.read(bytes, offset);\n${fragmentFromString(consumptionCheck)}\n return (\n ${fragmentFromString(typeName)}(\n${fragmentFromString(fromMapFields)}\n ),\n newOffset,\n );\n }\n\n return switch (structDecoder) {\n ${use(\"FixedSizeDecoder\", \"solanaCodecsCore\")}<Map<String, Object?>>() =>\n ${use(\"FixedSizeDecoder\", \"solanaCodecsCore\")}<${fragmentFromString(typeName)}>(\n fixedSize: structDecoder.fixedSize,\n read: (bytes, offset) {\n final bytesLength = bytes.length - offset;\n if (${fragmentFromString(fixedSizeCheck)}) {\n throwInvalidByteLength(structDecoder.fixedSize, bytesLength);\n }\n return readTopLevel(bytes, offset);\n },\n ),\n ${use(\"VariableSizeDecoder\", \"solanaCodecsCore\")}<Map<String, Object?>>() =>\n ${use(\"VariableSizeDecoder\", \"solanaCodecsCore\")}<${fragmentFromString(typeName)}>(\n read: readTopLevel,\n maxSize: structDecoder.maxSize,\n ),\n };`;\n result.imports.mergeWith(discriminatorValidation.imports);\n return result;\n}\n","import type { Fragment } from \"./fragment.js\";\nimport { emptyFragment } from \"./fragment.js\";\n\n/**\n * Represents how a Codama type maps to Dart types and codec expressions.\n */\nexport interface TypeManifest {\n /** The Dart type name (e.g. `int`, `BigInt`, `Address`, `MyStruct`). */\n type: Fragment;\n /** The Dart encoder expression (e.g. `getU8Encoder()`). */\n encoder: Fragment;\n /** The Dart decoder expression (e.g. `getU8Decoder()`). */\n decoder: Fragment;\n /** The Dart value expression for default values. */\n value: Fragment;\n /** Whether this is a scalar enum (Dart `enum`). */\n isEnum: boolean;\n}\n\n/**\n * Create an empty TypeManifest.\n */\nexport function emptyTypeManifest(): TypeManifest {\n return {\n type: emptyFragment(),\n encoder: emptyFragment(),\n decoder: emptyFragment(),\n value: emptyFragment(),\n isEnum: false,\n };\n}\n","import {\n type AccountNode,\n type AmountTypeNode,\n type ArrayTypeNode,\n type BooleanTypeNode,\n type BytesTypeNode,\n type CamelCaseString,\n type ConstantValueNode,\n type DateTimeTypeNode,\n type DefinedTypeLinkNode,\n type DefinedTypeNode,\n type EnumEmptyVariantTypeNode,\n type EnumStructVariantTypeNode,\n type EnumTupleVariantTypeNode,\n type EnumTypeNode,\n type FixedSizeTypeNode,\n type HiddenPrefixTypeNode,\n type HiddenSuffixTypeNode,\n type InstructionNode,\n type MapTypeNode,\n type NumberTypeNode,\n type OptionTypeNode,\n type PostOffsetTypeNode,\n type PreOffsetTypeNode,\n type PublicKeyTypeNode,\n type RemainderOptionTypeNode,\n type SentinelTypeNode,\n type SetTypeNode,\n type SizePrefixTypeNode,\n type SolAmountTypeNode,\n type StringTypeNode,\n type StructFieldTypeNode,\n type StructTypeNode,\n type TupleTypeNode,\n type TypeNode,\n type ZeroableOptionTypeNode,\n isNode,\n resolveNestedTypeNode,\n} from \"@codama/nodes\";\nimport {\n type LinkableDictionary,\n type NodeStack,\n type Visitor,\n extendVisitor,\n staticVisitor,\n visit,\n} from \"@codama/visitors-core\";\nimport { CODAMA_ERROR__UNEXPECTED_NODE_KIND } from \"@codama/errors\";\nimport { CodamaError } from \"@codama/errors\";\n\nimport {\n type Fragment,\n type TypeManifest,\n emptyTypeManifest,\n fragment,\n fragmentFromString,\n use,\n} from \"../utils/index.js\";\nimport { type DartNameApi, snakeCase } from \"../utils/nameTransformers.js\";\nimport { getDartValueFragment, getNonNegativeInteger, toDartStringLiteral } from \"../utils/valueNodes.js\";\n\n/**\n * Type alias for the type manifest visitor.\n */\nexport type TypeManifestVisitor = ReturnType<typeof getTypeManifestVisitor>;\n\n/**\n * Creates a visitor that maps Codama type/value nodes to TypeManifest objects.\n * Each TypeManifest contains Dart type, encoder, decoder, and value expressions.\n */\nexport function getTypeManifestVisitor(input: {\n nameApi: DartNameApi;\n linkables: LinkableDictionary;\n stack: NodeStack;\n nonScalarEnums?: CamelCaseString[];\n}) {\n const { nameApi, linkables, nonScalarEnums = [] } = input;\n\n const baseVisitor = staticVisitor<TypeManifest>(\n (node): TypeManifest => {\n throw new CodamaError(CODAMA_ERROR__UNEXPECTED_NODE_KIND, {\n expectedKinds: [\"typeNode\"],\n kind: (node as { kind: string }).kind,\n } as never);\n },\n {\n keys: [\n // Type nodes\n \"numberTypeNode\",\n \"booleanTypeNode\",\n \"stringTypeNode\",\n \"publicKeyTypeNode\",\n \"bytesTypeNode\",\n \"arrayTypeNode\",\n \"mapTypeNode\",\n \"setTypeNode\",\n \"tupleTypeNode\",\n \"structTypeNode\",\n \"structFieldTypeNode\",\n \"enumTypeNode\",\n \"enumEmptyVariantTypeNode\",\n \"enumStructVariantTypeNode\",\n \"enumTupleVariantTypeNode\",\n \"optionTypeNode\",\n \"remainderOptionTypeNode\",\n \"zeroableOptionTypeNode\",\n \"fixedSizeTypeNode\",\n \"sizePrefixTypeNode\",\n \"hiddenPrefixTypeNode\",\n \"hiddenSuffixTypeNode\",\n \"sentinelTypeNode\",\n \"preOffsetTypeNode\",\n \"postOffsetTypeNode\",\n \"solAmountTypeNode\",\n \"amountTypeNode\",\n \"dateTimeTypeNode\",\n \"definedTypeLinkNode\",\n // Context nodes (for links)\n \"definedTypeNode\",\n \"accountNode\",\n \"instructionNode\",\n ],\n },\n );\n\n return extendVisitor(baseVisitor, {\n visitNumberType(node: NumberTypeNode) {\n return {\n // `BigInt` and other number types live in `dart:core` and need no import.\n type: fragmentFromString(getNumberDartType(node.format)),\n encoder: getNumberCodecExpression(node, \"Encoder\"),\n decoder: getNumberCodecExpression(node, \"Decoder\"),\n value: emptyTypeManifest().value,\n isEnum: false,\n };\n },\n\n visitBooleanType(_node: BooleanTypeNode, { self }) {\n return {\n type: fragmentFromString(\"bool\"),\n encoder: fragment`${use(\n \"getBooleanEncoder\",\n \"solanaCodecsDataStructures\",\n )}()`,\n decoder: fragment`${use(\n \"getBooleanDecoder\",\n \"solanaCodecsDataStructures\",\n )}()`,\n value: emptyTypeManifest().value,\n isEnum: false,\n };\n },\n\n visitStringType(node: StringTypeNode, { self }) {\n const { encoding } = node;\n const codecMap: Record<string, string> = {\n utf8: \"Utf8\",\n base58: \"Base58\",\n base64: \"Base64\",\n base16: \"Base16\",\n };\n const codecName = codecMap[encoding] ?? \"Utf8\";\n return {\n type: fragmentFromString(\"String\"),\n encoder: fragment`${use(\n `get${codecName}Encoder`,\n \"solanaCodecsStrings\",\n )}()`,\n decoder: fragment`${use(\n `get${codecName}Decoder`,\n \"solanaCodecsStrings\",\n )}()`,\n value: emptyTypeManifest().value,\n isEnum: false,\n };\n },\n\n visitPublicKeyType(_node: PublicKeyTypeNode, { self }) {\n return {\n type: fragment`${use(\"Address\", \"solanaAddresses\")}`,\n encoder: fragment`${use(\n \"getAddressEncoder\",\n \"solanaAddresses\",\n )}()`,\n decoder: fragment`${use(\n \"getAddressDecoder\",\n \"solanaAddresses\",\n )}()`,\n value: emptyTypeManifest().value,\n isEnum: false,\n };\n },\n\n visitBytesType(_node: BytesTypeNode, { self }) {\n return {\n type: fragment`${use(\"Uint8List\", \"dartTypedData\")}`,\n encoder: fragment`${use(\n \"getBytesEncoder\",\n \"solanaCodecsDataStructures\",\n )}()`,\n decoder: fragment`${use(\n \"getBytesDecoder\",\n \"solanaCodecsDataStructures\",\n )}()`,\n value: emptyTypeManifest().value,\n isEnum: false,\n };\n },\n\n visitArrayType(node: ArrayTypeNode, { self }) {\n const itemManifest = visit(node.item, self);\n const encoderSizeExpr = getArraySizeExpression(node, \"Encoder\");\n const decoderSizeExpr = getArraySizeExpression(node, \"Decoder\");\n const itemType = fragmentFromString(itemManifest.type.content);\n const itemEncoder = fragment`${use(\n \"transformEncoder\",\n \"solanaCodecsCore\",\n )}(${itemManifest.encoder}, (${itemType} value) => value)`;\n\n return {\n type: fragment`List<${itemManifest.type}>`,\n encoder: fragment`${use(\n \"getArrayEncoder\",\n \"solanaCodecsDataStructures\",\n )}(${itemEncoder}${encoderSizeExpr})`,\n decoder: fragment`${use(\n \"getArrayDecoder\",\n \"solanaCodecsDataStructures\",\n )}(${itemManifest.decoder}${decoderSizeExpr})`,\n value: emptyTypeManifest().value,\n isEnum: false,\n };\n },\n\n visitMapType(node: MapTypeNode, { self }) {\n const keyManifest = visit(node.key, self);\n const valueManifest = visit(node.value, self);\n const encoderSizeExpr = getMapSizeExpression(node, \"Encoder\");\n const decoderSizeExpr = getMapSizeExpression(node, \"Decoder\");\n\n return {\n type: fragment`Map<${keyManifest.type}, ${valueManifest.type}>`,\n encoder: fragment`${use(\n \"getMapEncoder\",\n \"solanaCodecsDataStructures\",\n )}(${keyManifest.encoder}, ${valueManifest.encoder}${encoderSizeExpr})`,\n decoder: fragment`${use(\n \"getMapDecoder\",\n \"solanaCodecsDataStructures\",\n )}(${keyManifest.decoder}, ${valueManifest.decoder}${decoderSizeExpr})`,\n value: emptyTypeManifest().value,\n isEnum: false,\n };\n },\n\n visitSetType(node: SetTypeNode, { self }) {\n const itemManifest = visit(node.item, self);\n const encoderSizeExpr = getSetSizeExpression(node, \"Encoder\");\n const decoderSizeExpr = getSetSizeExpression(node, \"Decoder\");\n\n return {\n type: fragment`Set<${itemManifest.type}>`,\n encoder: fragment`${use(\n \"getSetEncoder\",\n \"solanaCodecsDataStructures\",\n )}(${itemManifest.encoder}${encoderSizeExpr})`,\n decoder: fragment`${use(\n \"getSetDecoder\",\n \"solanaCodecsDataStructures\",\n )}(${itemManifest.decoder}${decoderSizeExpr})`,\n value: emptyTypeManifest().value,\n isEnum: false,\n };\n },\n\n visitTupleType(node: TupleTypeNode, { self }) {\n const itemManifests = (node.items ?? []).map((item) => visit(item, self));\n const typeList = itemManifests\n .map((m) => m.type.content)\n .join(\", \");\n const encoderList = itemManifests.map((m) => m.encoder);\n const decoderList = itemManifests.map((m) => m.decoder);\n\n // Merge imports from all items\n const typeFragment = fragment`(${fragmentFromString(typeList)})`;\n for (const m of itemManifests) {\n typeFragment.imports.mergeWith(m.type.imports);\n }\n\n const encoderListStr = encoderList.map((e) => e.content).join(\", \");\n const decoderListStr = decoderList.map((d) => d.content).join(\", \");\n // Two-element tuples render through the typed getTuple2 helpers so the\n // generated value type is the Dart record `(T1, T2)` rather than a\n // heterogeneous List<Object?>. Arity-2 is the only shape that currently\n // appears in supported IDLs; wider tuples stay on the untyped helpers.\n let tupleEncoderFn = \"getTupleEncoder\";\n let tupleDecoderFn = \"getTupleDecoder\";\n let tupleEncoderArgs = `[${encoderListStr}]`;\n let tupleDecoderArgs = `[${decoderListStr}]`;\n if (itemManifests.length === 2) {\n tupleEncoderFn = \"getTuple2Encoder\";\n tupleDecoderFn = \"getTuple2Decoder\";\n tupleEncoderArgs = encoderListStr;\n tupleDecoderArgs = decoderListStr;\n }\n const encoderFrag = fragment`${use(\n tupleEncoderFn,\n \"solanaCodecsDataStructures\",\n )}(${tupleEncoderArgs})`;\n for (const e of encoderList) {\n encoderFrag.imports.mergeWith(e.imports);\n }\n\n const decoderFrag = fragment`${use(\n tupleDecoderFn,\n \"solanaCodecsDataStructures\",\n )}(${tupleDecoderArgs})`;\n for (const d of decoderList) {\n decoderFrag.imports.mergeWith(d.imports);\n }\n\n return {\n type: typeFragment,\n encoder: encoderFrag,\n decoder: decoderFrag,\n value: emptyTypeManifest().value,\n isEnum: false,\n };\n },\n\n visitStructType(node: StructTypeNode, { self }) {\n const nodeFields = node.fields ?? [];\n const fields = nodeFields.map((f) => visit(f, self));\n const fieldNames = nodeFields.map((f) => f.name as string);\n\n // Type: Map<String, Object?> (for inline structs without a name)\n const typeStr = \"Map<String, Object?>\";\n\n // Build encoder fields list\n const encoderFields = fields\n .map((f, i) => `(${toDartStringLiteral(fieldNames[i])}, ${f.encoder.content})`)\n .join(\", \");\n const encoderFrag = fragment`${use(\n \"getStructEncoder\",\n \"solanaCodecsDataStructures\",\n )}([${fragmentFromString(encoderFields)}])`;\n for (const f of fields) {\n encoderFrag.imports.mergeWith(f.encoder.imports);\n }\n\n const decoderFields = fields\n .map((f, i) => `(${toDartStringLiteral(fieldNames[i])}, ${f.decoder.content})`)\n .join(\", \");\n const decoderFrag = fragment`${use(\n \"getStructDecoder\",\n \"solanaCodecsDataStructures\",\n )}([${fragmentFromString(decoderFields)}])`;\n for (const f of fields) {\n decoderFrag.imports.mergeWith(f.decoder.imports);\n }\n\n return {\n type: fragmentFromString(typeStr),\n encoder: encoderFrag,\n decoder: decoderFrag,\n value: emptyTypeManifest().value,\n isEnum: false,\n };\n },\n\n visitStructFieldType(node: StructFieldTypeNode, { self }) {\n return visit(node.type, self);\n },\n\n visitEnumType(node: EnumTypeNode, { self }) {\n // Check if this is a scalar enum (all empty variants)\n const isScalar = (node.variants ?? []).every(\n (v) => v.kind === \"enumEmptyVariantTypeNode\",\n );\n\n if (isScalar) {\n // Scalar enums use a simple int-based encoder\n return {\n type: emptyTypeManifest().type, // Will be replaced by the named type\n encoder: emptyTypeManifest().encoder,\n decoder: emptyTypeManifest().decoder,\n value: emptyTypeManifest().value,\n isEnum: true,\n };\n }\n\n // Data enum — uses discriminated union\n return {\n type: emptyTypeManifest().type,\n encoder: emptyTypeManifest().encoder,\n decoder: emptyTypeManifest().decoder,\n value: emptyTypeManifest().value,\n isEnum: false,\n };\n },\n\n visitEnumEmptyVariantType(\n _node: EnumEmptyVariantTypeNode,\n { self },\n ) {\n return emptyTypeManifest();\n },\n\n visitEnumStructVariantType(\n node: EnumStructVariantTypeNode,\n { self },\n ) {\n return visit(node.struct, self);\n },\n\n visitEnumTupleVariantType(\n node: EnumTupleVariantTypeNode,\n { self },\n ) {\n return visit(node.tuple, self);\n },\n\n visitOptionType(node: OptionTypeNode, { self }) {\n const itemManifest = visit(node.item, self);\n const itemTypeStr = itemManifest.type.content;\n const resolvedPrefix = resolveNestedTypeNode(node.prefix);\n const prefixExpr = resolvedPrefix.format !== \"u8\"\n ? fragment`, prefix: ${getNumberCodecExpression(resolvedPrefix, \"Encoder\")}`\n : \"\";\n const prefixDecoderExpr = resolvedPrefix.format !== \"u8\"\n ? fragment`, prefix: ${getNumberCodecExpression(resolvedPrefix, \"Decoder\")}`\n : \"\";\n const noneValueExpr = node.fixed\n ? \", noneValue: const ZeroesNoneValue()\"\n : \"\";\n\n return {\n type: fragment`${itemManifest.type}?`,\n encoder: fragment`${use(\n \"getNullableEncoder\",\n \"solanaCodecsDataStructures\",\n )}<${fragmentFromString(itemTypeStr)}>(${use(\n \"transformEncoder\",\n \"solanaCodecsCore\",\n )}(${itemManifest.encoder}, (${fragmentFromString(itemTypeStr)} value) => value)${prefixExpr}${fragmentFromString(noneValueExpr)})`,\n decoder: fragment`${use(\n \"getNullableDecoder\",\n \"solanaCodecsDataStructures\",\n )}<${fragmentFromString(itemTypeStr)}>(${itemManifest.decoder}${prefixDecoderExpr}${fragmentFromString(noneValueExpr)})`,\n value: emptyTypeManifest().value,\n isEnum: false,\n };\n },\n\n visitRemainderOptionType(\n node: RemainderOptionTypeNode,\n { self },\n ) {\n const itemManifest = visit(node.item, self);\n const itemTypeStr = itemManifest.type.content;\n\n return {\n type: fragment`${itemManifest.type}?`,\n encoder: fragment`${use(\n \"getNullableEncoder\",\n \"solanaCodecsDataStructures\",\n )}<${fragmentFromString(itemTypeStr)}>(${itemManifest.encoder}, hasPrefix: false)`,\n decoder: fragment`${use(\n \"getNullableDecoder\",\n \"solanaCodecsDataStructures\",\n )}<${fragmentFromString(itemTypeStr)}>(${itemManifest.decoder}, hasPrefix: false)`,\n value: emptyTypeManifest().value,\n isEnum: false,\n };\n },\n\n visitZeroableOptionType(\n node: ZeroableOptionTypeNode,\n { self },\n ) {\n const itemManifest = visit(node.item, self);\n const itemTypeStr = itemManifest.type.content;\n\n return {\n type: fragment`${itemManifest.type}?`,\n encoder: fragment`${use(\n \"getNullableEncoder\",\n \"solanaCodecsDataStructures\",\n )}<${fragmentFromString(itemTypeStr)}>(${itemManifest.encoder}, hasPrefix: false, noneValue: const ZeroesNoneValue())`,\n decoder: fragment`${use(\n \"getNullableDecoder\",\n \"solanaCodecsDataStructures\",\n )}<${fragmentFromString(itemTypeStr)}>(${itemManifest.decoder}, hasPrefix: false, noneValue: const ZeroesNoneValue())`,\n value: emptyTypeManifest().value,\n isEnum: false,\n };\n },\n\n visitFixedSizeType(node: FixedSizeTypeNode, { self }) {\n const innerManifest = visit(node.type, self);\n\n return {\n type: innerManifest.type,\n encoder: fragment`${use(\n \"fixEncoderSize\",\n \"solanaCodecsCore\",\n )}(${innerManifest.encoder}, ${fragmentFromString(getNonNegativeInteger(node.size))}, allowTruncation: false)`,\n decoder: fragment`${use(\n \"fixDecoderSize\",\n \"solanaCodecsCore\",\n )}(${innerManifest.decoder}, ${fragmentFromString(getNonNegativeInteger(node.size))})`,\n value: innerManifest.value,\n isEnum: innerManifest.isEnum,\n };\n },\n\n visitSizePrefixType(node: SizePrefixTypeNode, { self }) {\n const innerManifest = visit(node.type, self);\n\n // The Dart addEncoderSizePrefix / addDecoderSizePrefix APIs require\n // Encoder<num> / Decoder<num> for the prefix, but BigInt-width number\n // types (u64, u128, i64, i128) return Encoder<BigInt> which is\n // incompatible. Transform the BigInt codec to int so it satisfies the\n // num constraint while preserving the on-chain byte width (e.g. the\n // system program's bincode u64 string-length prefix).\n const bigIntFormats = new Set([\"u64\", \"u128\", \"i64\", \"i128\"]);\n let prefixManifest;\n if (\n node.prefix.kind === \"numberTypeNode\" &&\n bigIntFormats.has(node.prefix.format)\n ) {\n const numberManifest = visit(node.prefix, self);\n prefixManifest = {\n encoder: fragment`${use(\"transformEncoder\", \"solanaCodecsCore\")}(${numberManifest.encoder}, (size) => BigInt.from(size))`,\n decoder: fragment`${use(\"transformDecoder\", \"solanaCodecsCore\")}(${numberManifest.decoder}, (size, _, __) => size.toInt())`,\n };\n } else {\n prefixManifest = visit(node.prefix, self);\n }\n\n return {\n type: innerManifest.type,\n encoder: fragment`${use(\n \"addEncoderSizePrefix\",\n \"solanaCodecsCore\",\n )}(${innerManifest.encoder}, ${prefixManifest.encoder})`,\n decoder: fragment`${use(\n \"addDecoderSizePrefix\",\n \"solanaCodecsCore\",\n )}(${innerManifest.decoder}, ${prefixManifest.decoder})`,\n value: innerManifest.value,\n isEnum: innerManifest.isEnum,\n };\n },\n\n visitHiddenPrefixType(node: HiddenPrefixTypeNode, { self }) {\n const innerManifest = visit(node.type, self);\n const prefixes = (node.prefix ?? []).map((p) => getHiddenAffixManifest(p, self));\n const prefixEncoders = prefixes\n .map((p) => p.encoder.content)\n .join(\", \");\n const prefixDecoders = prefixes\n .map((p) => p.decoder.content)\n .join(\", \");\n\n const encoderFrag = fragment`${use(\n \"getHiddenPrefixEncoder\",\n \"solanaCodecsDataStructures\",\n )}(${innerManifest.encoder}, [${fragmentFromString(prefixEncoders)}])`;\n for (const p of prefixes) {\n encoderFrag.imports.mergeWith(p.encoder.imports);\n }\n\n const decoderFrag = fragment`${use(\n \"getHiddenPrefixDecoder\",\n \"solanaCodecsDataStructures\",\n )}(${innerManifest.decoder}, [${fragmentFromString(prefixDecoders)}])`;\n for (const p of prefixes) {\n decoderFrag.imports.mergeWith(p.decoder.imports);\n }\n\n return {\n type: innerManifest.type,\n encoder: encoderFrag,\n decoder: decoderFrag,\n value: innerManifest.value,\n isEnum: innerManifest.isEnum,\n };\n },\n\n visitHiddenSuffixType(node: HiddenSuffixTypeNode, { self }) {\n const innerManifest = visit(node.type, self);\n const suffixes = (node.suffix ?? []).map((s) => getHiddenAffixManifest(s, self));\n const suffixEncoders = suffixes\n .map((s) => s.encoder.content)\n .join(\", \");\n const suffixDecoders = suffixes\n .map((s) => s.decoder.content)\n .join(\", \");\n\n const encoderFrag = fragment`${use(\n \"getHiddenSuffixEncoder\",\n \"solanaCodecsDataStructures\",\n )}(${innerManifest.encoder}, [${fragmentFromString(suffixEncoders)}])`;\n for (const s of suffixes) {\n encoderFrag.imports.mergeWith(s.encoder.imports);\n }\n\n const decoderFrag = fragment`${use(\n \"getHiddenSuffixDecoder\",\n \"solanaCodecsDataStructures\",\n )}(${innerManifest.decoder}, [${fragmentFromString(suffixDecoders)}])`;\n for (const s of suffixes) {\n decoderFrag.imports.mergeWith(s.decoder.imports);\n }\n\n return {\n type: innerManifest.type,\n encoder: encoderFrag,\n decoder: decoderFrag,\n value: innerManifest.value,\n isEnum: innerManifest.isEnum,\n };\n },\n\n visitSentinelType(node: SentinelTypeNode, { self }) {\n const innerManifest = visit(node.type, self);\n const sentinelManifest = visit(node.sentinel, self);\n\n return {\n type: innerManifest.type,\n encoder: fragment`${use(\n \"addEncoderSentinel\",\n \"solanaCodecsCore\",\n )}(${innerManifest.encoder}, ${sentinelManifest.encoder})`,\n decoder: fragment`${use(\n \"addDecoderSentinel\",\n \"solanaCodecsCore\",\n )}(${innerManifest.decoder}, ${sentinelManifest.decoder})`,\n value: innerManifest.value,\n isEnum: innerManifest.isEnum,\n };\n },\n\n visitPreOffsetType(node: PreOffsetTypeNode, { self }) {\n return getOffsetManifest(node, self);\n },\n\n visitPostOffsetType(node: PostOffsetTypeNode, { self }) {\n return getOffsetManifest(node, self);\n },\n\n visitSolAmountType(node: SolAmountTypeNode, { self }) {\n // SolAmount maps to BigInt (lamports)\n return visit(node.number, self);\n },\n\n visitAmountType(node: AmountTypeNode, { self }) {\n // Amount types pass through to their number type\n return visit(node.number, self);\n },\n\n visitDateTimeType(node: DateTimeTypeNode, { self }) {\n // DateTime types pass through to their number type\n return visit(node.number, self);\n },\n\n visitDefinedTypeLink(\n node: DefinedTypeLinkNode,\n { self }: { self: Visitor<TypeManifest> },\n ) {\n const name = node.name as string;\n const typeName = nameApi.dataType(name);\n const isNonScalar = nonScalarEnums.includes(node.name);\n const moduleKey = `definedType:${snakeCase(name)}`;\n\n return {\n type: fragment`${use(typeName, moduleKey)}`,\n encoder: fragment`${use(nameApi.encoderFunction(name), moduleKey)}()`,\n decoder: fragment`${use(nameApi.decoderFunction(name), moduleKey)}()`,\n value: emptyTypeManifest().value,\n isEnum: !isNonScalar,\n };\n },\n\n visitDefinedType(node: DefinedTypeNode, { self }) {\n return visit(node.type, self);\n },\n\n visitAccount(node: AccountNode, { self }) {\n return visit(node.data, self);\n },\n\n visitInstruction(node: InstructionNode, { self }) {\n return emptyTypeManifest();\n },\n });\n}\n\n// --- Helper functions ---\n\nfunction getNumberDartType(\n format: string,\n): string {\n switch (format) {\n case \"u8\":\n case \"u16\":\n case \"u32\":\n case \"i8\":\n case \"i16\":\n case \"i32\":\n case \"shortU16\":\n return \"int\";\n case \"u64\":\n case \"u128\":\n case \"i64\":\n case \"i128\":\n return \"BigInt\";\n case \"f32\":\n case \"f64\":\n return \"double\";\n default:\n return \"int\";\n }\n}\n\nfunction getNumberCodecName(format: string): string {\n switch (format) {\n case \"u8\":\n return \"U8\";\n case \"u16\":\n return \"U16\";\n case \"u32\":\n return \"U32\";\n case \"u64\":\n return \"U64\";\n case \"u128\":\n return \"U128\";\n case \"i8\":\n return \"I8\";\n case \"i16\":\n return \"I16\";\n case \"i32\":\n return \"I32\";\n case \"i64\":\n return \"I64\";\n case \"i128\":\n return \"I128\";\n case \"f32\":\n return \"F32\";\n case \"f64\":\n return \"F64\";\n case \"shortU16\":\n return \"ShortU16\";\n default:\n return \"U8\";\n }\n}\n\nfunction getNumberCodecExpression(\n node: NumberTypeNode,\n codecType: \"Encoder\" | \"Decoder\",\n): Fragment {\n const name = getNumberCodecName(node.format);\n const config = node.endian === \"be\"\n ? fragment`${use(\"NumberCodecConfig\", \"solanaCodecsNumbers\")}(endian: ${use(\"Endian\", \"dartTypedData\")}.big)`\n : \"\";\n\n return fragment`${use(`get${name}${codecType}`, \"solanaCodecsNumbers\")}(${config})`;\n}\n\nfunction getArraySizeExpression(\n node: ArrayTypeNode,\n codecType: \"Encoder\" | \"Decoder\",\n): string | Fragment {\n if (!(\"count\" in node) || !node.count) return \"\";\n const count = node.count;\n switch (count.kind) {\n case \"fixedCountNode\":\n return `, size: FixedArraySize(${getNonNegativeInteger(count.value)})`;\n case \"remainderCountNode\":\n return \", size: RemainderArraySize()\";\n case \"prefixedCountNode\": {\n const resolvedPrefix = resolveNestedTypeNode(count.prefix);\n if (resolvedPrefix.format === \"u32\" && (!resolvedPrefix.endian || resolvedPrefix.endian === \"le\")) {\n return \"\"; // Default\n }\n return fragment`, size: PrefixedArraySize(${getNumberCodecExpression(resolvedPrefix, codecType)})`;\n }\n default:\n return \"\";\n }\n}\n\nfunction getMapSizeExpression(\n node: MapTypeNode,\n codecType: \"Encoder\" | \"Decoder\",\n): string | Fragment {\n if (!(\"count\" in node) || !node.count) return \"\";\n const count = node.count;\n switch (count.kind) {\n case \"fixedCountNode\":\n return `, size: FixedArraySize(${getNonNegativeInteger(count.value)})`;\n case \"remainderCountNode\":\n return \", size: RemainderArraySize()\";\n case \"prefixedCountNode\": {\n const resolvedPrefix = resolveNestedTypeNode(count.prefix);\n if (resolvedPrefix.format === \"u32\" && (!resolvedPrefix.endian || resolvedPrefix.endian === \"le\")) {\n return \"\";\n }\n return fragment`, size: PrefixedArraySize(${getNumberCodecExpression(resolvedPrefix, codecType)})`;\n }\n default:\n return \"\";\n }\n}\n\nfunction getSetSizeExpression(\n node: SetTypeNode,\n codecType: \"Encoder\" | \"Decoder\",\n): string | Fragment {\n if (!(\"count\" in node) || !node.count) return \"\";\n const count = node.count;\n switch (count.kind) {\n case \"fixedCountNode\":\n return `, size: FixedArraySize(${getNonNegativeInteger(count.value)})`;\n case \"remainderCountNode\":\n return \", size: RemainderArraySize()\";\n case \"prefixedCountNode\": {\n const resolvedPrefix = resolveNestedTypeNode(count.prefix);\n if (resolvedPrefix.format === \"u32\" && (!resolvedPrefix.endian || resolvedPrefix.endian === \"le\")) {\n return \"\";\n }\n return fragment`, size: PrefixedArraySize(${getNumberCodecExpression(resolvedPrefix, codecType)})`;\n }\n default:\n return \"\";\n }\n}\n\ntype HiddenAffixManifest = {\n encoder: Fragment;\n decoder: Fragment;\n};\n\nfunction getHiddenAffixManifest(\n node: ConstantValueNode | TypeNode,\n self: Visitor<TypeManifest>,\n): HiddenAffixManifest {\n if (node?.kind !== \"constantValueNode\") {\n const manifest = visit(node, self);\n return { encoder: manifest.encoder, decoder: manifest.decoder };\n }\n\n const constantBytes = getConstantBytesExpression(node, self);\n return {\n encoder: fragment`${use(\"getConstantEncoder\", \"solanaCodecsDataStructures\")}(${constantBytes})`,\n decoder: fragment`${use(\"getConstantDecoder\", \"solanaCodecsDataStructures\")}(${constantBytes})`,\n };\n}\n\n/** Serialize affix constants using the same validated codec as ordinary fields. */\nfunction getConstantBytesExpression(\n node: ConstantValueNode,\n self: Visitor<TypeManifest>,\n): Fragment {\n if (node.value.kind !== \"numberValueNode\") {\n throw new Error(\n `Unsupported hidden affix constant value kind: ${node.value.kind}`,\n );\n }\n\n const manifest = visit(node.type, self);\n\n if (![\"int\", \"BigInt\", \"double\"].includes(manifest.type.content)) {\n throw new Error(`Unsupported hidden affix constant type kind: ${node.type.kind}`);\n }\n\n const value = getDartValueFragment(node.value, manifest.type.content);\n\n return fragment`${manifest.encoder}.encode(${value})`;\n}\n\n/** Preserve the IDL's cursor strategy instead of silently discarding offsets. */\nfunction getOffsetManifest(\n node: PreOffsetTypeNode | PostOffsetTypeNode,\n self: Visitor<TypeManifest>,\n): TypeManifest {\n if (!Number.isSafeInteger(node.offset)) {\n throw new Error(\"Expected a safe integer for a codec offset\");\n }\n\n const manifest = visit(node.type, self);\n const pre = node.kind === \"preOffsetTypeNode\";\n const key = pre ? \"preOffset\" : \"postOffset\";\n\n if (node.strategy === \"padded\") {\n const side = pre ? \"Left\" : \"Right\";\n const offset = getNonNegativeInteger(node.offset);\n\n return {\n ...manifest,\n encoder: fragment`${use(`pad${side}Encoder`, \"solanaCodecsCore\")}(${manifest.encoder}, ${offset})`,\n decoder: fragment`${use(`pad${side}Decoder`, \"solanaCodecsCore\")}(${manifest.decoder}, ${offset})`,\n };\n }\n\n let expression: string;\n\n switch (node.strategy) {\n case \"absolute\":\n expression = node.offset < 0 ? `scope.wrapBytes(${node.offset})` : String(node.offset);\n break;\n case \"relative\":\n expression = `scope.${key} + ${node.offset}`;\n break;\n case \"preOffset\":\n expression = `scope.preOffset + ${node.offset}`;\n break;\n default:\n throw new Error(`Unsupported offset strategy: ${node.strategy}`);\n }\n\n const config = fragment`${use(\"OffsetConfig\", \"solanaCodecsCore\")}(${key}: (scope) => ${expression})`;\n\n return {\n ...manifest,\n encoder: fragment`${use(\"offsetEncoder\", \"solanaCodecsCore\")}(${manifest.encoder}, ${config})`,\n decoder: fragment`${use(\"offsetDecoder\", \"solanaCodecsCore\")}(${manifest.decoder}, ${config})`,\n };\n}\n","import type {\n AccountNode,\n ConstantDiscriminatorNode,\n FieldDiscriminatorNode,\n InstructionNode,\n SizeDiscriminatorNode,\n} from \"@codama/nodes\";\nimport { visit } from \"@codama/visitors-core\";\n\nimport type { Fragment } from \"../utils/fragment.js\";\nimport { emptyFragment, fragment, fragmentFromString, mergeFragments, use } from \"../utils/fragment.js\";\nimport type { RenderScope } from \"../utils/options.js\";\nimport { bytesToDartHexList } from \"../utils/codecs.js\";\n\n/**\n * Generate discriminator constant declarations for an account or instruction.\n */\nexport function getDiscriminatorConstantsFragment(\n node: AccountNode | InstructionNode,\n scope: RenderScope,\n): Fragment {\n const discriminators = node.discriminators ?? [];\n if (discriminators.length === 0) return emptyFragment();\n\n const name = node.name as string;\n const constName = scope.nameApi.discriminatorConstant(name);\n\n const fragments: Fragment[] = [];\n\n for (const disc of discriminators) {\n switch (disc.kind) {\n case \"constantDiscriminatorNode\": {\n const constDisc = disc as ConstantDiscriminatorNode;\n if (constDisc.constant.value.kind === \"bytesValueNode\") {\n const bytes = hexToBytes(constDisc.constant.value.data);\n const hexList = bytesToDartHexList(bytes);\n fragments.push(\n fragment`/// The discriminator bytes for this ${node.kind === \"accountNode\" ? \"account\" : \"instruction\"}.\nfinal ${constName} = ${use(\"Uint8List\", \"dartTypedData\")}.fromList(${fragmentFromString(hexList)});`,\n );\n }\n break;\n }\n case \"fieldDiscriminatorNode\": {\n const fieldDisc = disc as FieldDiscriminatorNode;\n fragments.push(\n fragment`/// The discriminator field name: '${fragmentFromString(fieldDisc.name as string)}'.\n/// Offset: ${fragmentFromString(String(fieldDisc.offset))}.`,\n );\n break;\n }\n case \"sizeDiscriminatorNode\": {\n const sizeDisc = disc as SizeDiscriminatorNode;\n fragments.push(\n fragment`/// This ${node.kind === \"accountNode\" ? \"account\" : \"instruction\"} has a size discriminator of ${fragmentFromString(String(sizeDisc.size))} bytes.`,\n );\n break;\n }\n }\n }\n\n if (fragments.length === 0) return emptyFragment();\n\n return mergeFragments(fragments, (cs) => cs.join(\"\\n\\n\"));\n}\n\nfunction hexToBytes(hex: string): Uint8Array {\n const clean = hex.replace(/^0x/, \"\");\n const bytes = new Uint8Array(clean.length / 2);\n for (let i = 0; i < clean.length; i += 2) {\n bytes[i / 2] = parseInt(clean.slice(i, i + 2), 16);\n }\n return bytes;\n}\n","import type { AccountNode, StructFieldTypeNode } from \"@codama/nodes\";\nimport { resolveNestedTypeNode } from \"@codama/nodes\";\nimport { visit } from \"@codama/visitors-core\";\n\nimport type { Fragment } from \"../utils/fragment.js\";\nimport {\n emptyFragment,\n fragment,\n fragmentFromString,\n mergeFragments,\n use,\n} from \"../utils/fragment.js\";\nimport type { RenderScope } from \"../utils/options.js\";\nimport { camelCase } from \"../utils/nameTransformers.js\";\nimport { getDiscriminatorValidationFragment } from \"../utils/discriminators.js\";\nimport { getTopLevelDecoderFragment } from \"../utils/exactDecoder.js\";\nimport {\n getDartValueFragment,\n getNonNegativeInteger,\n isConstDartValueNode,\n} from \"../utils/valueNodes.js\";\nimport { getDiscriminatorConstantsFragment } from \"./discriminatorConstants.js\";\n\n/**\n * Generate a full Dart file for an account.\n */\nexport function getAccountPageFragment(\n node: AccountNode,\n scope: RenderScope,\n): Fragment {\n const name = node.name as string;\n const typeName = scope.nameApi.dataType(name);\n // Fields from the struct data\n const fields = resolveNestedTypeNode(node.data).fields ?? [];\n\n // Visit each field type once and collect manifests for reuse\n const fieldManifests = fields.map((f: StructFieldTypeNode) => ({\n field: f,\n manifest: visit(f.type, scope.typeManifestVisitor),\n }));\n\n const omittedFields = fields.filter(isOmittedDefaultField);\n const constructorFields = fields.filter(\n (field) => !isOmittedDefaultField(field),\n );\n const forcedFields = new Set([\n ...omittedFields,\n ...fields.filter((field) => isFieldDiscriminator(field, node)),\n ]);\n const fieldDefaults = new Map(\n fieldManifests.flatMap(({ field, manifest }) => {\n if (!forcedFields.has(field) || field.defaultValue == null) return [];\n return [\n [\n field,\n getDartValueFragment(field.defaultValue, manifest.type.content),\n ] as const,\n ];\n }),\n );\n\n for (const field of forcedFields) {\n if (!fieldDefaults.has(field)) {\n throw new Error(\n `Forced field \"${field.name}\" on account \"${node.name}\" must have a deterministic default value.`,\n );\n }\n }\n\n const fieldDecls = fieldManifests\n .map(({ field: f, manifest }) => {\n return ` final ${manifest.type.content} ${camelCase(f.name as string)};`;\n })\n .join(\"\\n\");\n\n const ctorParams = constructorFields\n .map((f: StructFieldTypeNode) => ` required this.${camelCase(f.name as string)},`)\n .join(\"\\n\");\n\n const ctorInitializers = omittedFields\n .map((field) => {\n const fieldName = camelCase(field.name as string);\n return `${fieldName} = ${fieldDefaults.get(field)!.content}`;\n })\n .join(\",\\n \");\n\n // Empty structs use a no-arg constructor; `const Foo({})` is invalid Dart.\n const ctorKeyword = omittedFields.every((field) =>\n isConstDartValueNode(field.defaultValue!),\n )\n ? \"const \"\n : \"\";\n const ctorSignature = constructorFields.length === 0\n ? `${ctorKeyword}${typeName}()${ctorInitializers ? ` : ${ctorInitializers}` : \"\"};`\n : `${ctorKeyword}${typeName}({\\n${ctorParams}\\n })${ctorInitializers ? ` :\\n ${ctorInitializers}` : \"\"};`;\n\n const eqChecks =\n fields.length === 0\n ? \"true\"\n : fields\n .map(\n (f: StructFieldTypeNode) =>\n `${camelCase(f.name as string)} == other.${camelCase(f.name as string)}`,\n )\n .join(\" &&\\n \");\n\n const hashFieldNames = fields.map((f: StructFieldTypeNode) => camelCase(f.name as string));\n // `Object.hash()` requires at least two arguments, so handle 0/1 fields specially.\n const hashCodeExpr =\n hashFieldNames.length === 0\n ? \"0\"\n : hashFieldNames.length === 1\n ? `${hashFieldNames[0]}.hashCode`\n : `Object.hash(${hashFieldNames.join(\", \")})`;\n\n const toStringFields = fields\n .map(\n (f: StructFieldTypeNode) =>\n `${camelCase(f.name as string)}: \\$${camelCase(f.name as string)}`,\n )\n .join(\", \");\n\n // Encoder fields\n const encFields = fieldManifests\n .map(({ field: f, manifest }) => {\n return ` ('${f.name as string}', ${manifest.encoder.content}),`;\n })\n .join(\"\\n\");\n\n const decFields = fieldManifests\n .map(({ field: f, manifest }) => {\n return ` ('${f.name as string}', ${manifest.decoder.content}),`;\n })\n .join(\"\\n\");\n\n const toMapFields = fields\n .map((f: StructFieldTypeNode) => {\n const value = forcedFields.has(f)\n ? fieldDefaults.get(f)!.content\n : `value.${camelCase(f.name as string)}`;\n return ` '${f.name as string}': ${value},`;\n })\n .join(\"\\n\");\n\n const fromMapFields = fieldManifests\n .filter(({ field }) => !isOmittedDefaultField(field))\n .map(({ field: f, manifest }) => {\n const typeStr = manifest.type.content;\n const isNullable = typeStr.endsWith(\"?\");\n const accessor = isNullable ? `map['${f.name as string}']` : `map['${f.name as string}']!`;\n return ` ${camelCase(f.name as string)}: ${accessor} as ${typeStr},`;\n })\n .join(\"\\n\");\n\n const encoderName = scope.nameApi.encoderFunction(name);\n const decoderName = scope.nameApi.decoderFunction(name);\n const codecName = scope.nameApi.codecFunction(name);\n const decodeFnName = scope.nameApi.accountDecodeFunction(name);\n\n // Size\n const sizeFragment = node.size != null\n ? fragment`\n/// The size of the [${fragmentFromString(typeName)}] account data in bytes.\nconst int ${fragmentFromString(scope.nameApi.accountSizeConstant(name))} = ${fragmentFromString(getNonNegativeInteger(node.size))};`\n : emptyFragment();\n\n // Discriminator\n const discFragment = getDiscriminatorConstantsFragment(node, scope);\n const discriminatorValidation = getDiscriminatorValidationFragment(\n node,\n scope,\n );\n const topLevelDecoder = getTopLevelDecoderFragment({\n typeName,\n description: `${name} account decoder`,\n discriminatorValidation,\n fromMapFields,\n requireExactConsumption: (node.discriminators ?? []).some(\n (discriminator) => discriminator.kind === \"sizeDiscriminatorNode\",\n ),\n });\n\n const parts: Fragment[] = [\n fragment`// Auto-generated. Do not edit.\n// ignore_for_file: type=lint\n\n${use(\"Uint8List\", \"dartTypedData\")}\n${use(\"immutable\", \"meta\")}\n${use(\"Encoder\", \"solanaCodecsCore\")}\n${use(\"Decoder\", \"solanaCodecsCore\")}\n${use(\"Codec\", \"solanaCodecsCore\")}\n${use(\"combineCodec\", \"solanaCodecsCore\")}\n${use(\"transformEncoder\", \"solanaCodecsCore\")}\n${use(\"transformDecoder\", \"solanaCodecsCore\")}\n${use(\"getStructEncoder\", \"solanaCodecsDataStructures\")}\n${use(\"getStructDecoder\", \"solanaCodecsDataStructures\")}\n${use(\"Account\", \"solanaAccounts\")}\n${use(\"EncodedAccount\", \"solanaAccounts\")}\n${use(\"decodeAccount\", \"solanaAccounts\")}\n\n@immutable\nclass ${fragmentFromString(typeName)} {\n ${fragmentFromString(ctorSignature)}\n\n${fragmentFromString(fieldDecls)}\n\n @override\n bool operator ==(Object other) =>\n identical(this, other) ||\n other is ${fragmentFromString(typeName)} &&\n runtimeType == other.runtimeType &&\n ${fragmentFromString(eqChecks)};\n\n @override\n int get hashCode => ${fragmentFromString(hashCodeExpr)};\n\n @override\n String toString() => '${fragmentFromString(typeName)}(${fragmentFromString(toStringFields)})';\n}`,\n ];\n\n if (sizeFragment.content) parts.push(sizeFragment);\n if (discFragment.content) parts.push(discFragment);\n\n parts.push(fragment`\nEncoder<${fragmentFromString(typeName)}> ${fragmentFromString(encoderName)}() {\n final structEncoder = getStructEncoder(<(String, Encoder<Object?>)>[\n${fragmentFromString(encFields)}\n ]);\n\n return transformEncoder(\n structEncoder,\n (${fragmentFromString(typeName)} value) => <String, Object?>{\n${fragmentFromString(toMapFields)}\n },\n );\n}\n\nDecoder<${fragmentFromString(typeName)}> ${fragmentFromString(decoderName)}() {\n final structDecoder = getStructDecoder(<(String, Decoder<Object?>)>[\n${fragmentFromString(decFields)}\n ]);\n\n${topLevelDecoder}\n}\n\nCodec<${fragmentFromString(typeName)}, ${fragmentFromString(typeName)}> ${fragmentFromString(codecName)}() {\n return combineCodec(${fragmentFromString(encoderName)}(), ${fragmentFromString(decoderName)}());\n}\n\nAccount<${fragmentFromString(typeName)}> ${fragmentFromString(decodeFnName)}(EncodedAccount encodedAccount) {\n return decodeAccount(encodedAccount, ${fragmentFromString(decoderName)}());\n}`);\n\n const result = mergeFragments(parts, (cs) => cs.join(\"\\n\\n\"));\n\n // Merge field type manifest imports (encoder, decoder, type) into the result\n for (const { manifest } of fieldManifests) {\n result.imports.mergeWith(manifest.encoder.imports);\n result.imports.mergeWith(manifest.decoder.imports);\n result.imports.mergeWith(manifest.type.imports);\n }\n for (const defaultValue of fieldDefaults.values()) {\n result.imports.mergeWith(defaultValue.imports);\n }\n\n return result;\n}\n\nfunction isOmittedDefaultField(field: StructFieldTypeNode): boolean {\n return field.defaultValue != null && field.defaultValueStrategy === \"omitted\";\n}\n\nfunction isFieldDiscriminator(\n field: StructFieldTypeNode,\n node: AccountNode,\n): boolean {\n return (node.discriminators ?? []).some(\n (discriminator) =>\n discriminator.kind === \"fieldDiscriminatorNode\" &&\n discriminator.name === field.name,\n );\n}\n","import type { ErrorNode, ProgramNode } from \"@codama/nodes\";\n\nimport type { Fragment } from \"../utils/fragment.js\";\nimport {\n emptyFragment,\n fragment,\n fragmentFromString,\n mergeFragments,\n use,\n} from \"../utils/fragment.js\";\nimport { getNonNegativeInteger, toDartStringLiteral } from \"../utils/valueNodes.js\";\nimport type { RenderScope } from \"../utils/options.js\";\nimport { camelCase, pascalCase, screamingSnakeCase } from \"../utils/nameTransformers.js\";\n\n/**\n * Generate a full Dart file for a program's errors.\n */\nexport function getErrorPageFragment(\n programNode: ProgramNode,\n scope: RenderScope,\n): Fragment {\n const errors = programNode.errors ?? [];\n if (errors.length === 0) return emptyFragment();\n\n const programName = programNode.name as string;\n\n // Error code constants\n const errorConstants = errors\n .map((err) => {\n const constName = scope.nameApi.errorConstant(\n programName,\n err.name as string,\n );\n getNonNegativeInteger(err.code);\n const hexCode = `0x${err.code.toString(16)}`;\n const docs = err.docs?.length\n ? err.docs.map(toDartDocComment).join(\"\\n\") + \"\\n\"\n : \"\";\n const message = err.message ? `${toDartDocComment(`Message: \"${err.message}\"`)}\\n` : \"\";\n return `${docs}${message}const int ${constName} = ${hexCode}; // ${err.code}`;\n })\n .join(\"\\n\\n\");\n\n // Error message map\n const messageEntries = errors\n .map((err) => {\n const constName = scope.nameApi.errorConstant(\n programName,\n err.name as string,\n );\n const message = err.message ?? err.name as string;\n return ` ${constName}: ${toDartStringLiteral(message)},`;\n })\n .join(\"\\n\");\n\n const errorMessageFnName = scope.nameApi.errorMessageFunction(programName);\n const isErrorFnName = `is${pascalCase(programName)}Error`;\n\n return fragment`// Auto-generated. Do not edit.\n// ignore_for_file: type=lint, constant_identifier_names\n\n/// Error codes for the ${fragmentFromString(pascalCase(programName))} program.\n\n${fragmentFromString(errorConstants)}\n\n/// Map of error codes to human-readable messages.\nconst Map<int, String> _${fragmentFromString(camelCase(programName))}ErrorMessages = {\n${fragmentFromString(messageEntries)}\n};\n\n/// Get the error message for a ${fragmentFromString(pascalCase(programName))} program error code.\nString? ${fragmentFromString(errorMessageFnName)}(int code) {\n return _${fragmentFromString(camelCase(programName))}ErrorMessages[code];\n}\n\n/// Check if an error code belongs to the ${fragmentFromString(pascalCase(programName))} program.\nbool ${fragmentFromString(isErrorFnName)}(int code) {\n return _${fragmentFromString(camelCase(programName))}ErrorMessages.containsKey(code);\n}`;\n}\n\n/** Prefix every physical line so IDL documentation cannot become Dart code. */\nfunction toDartDocComment(value: string): string {\n return value.split(/\\r\\n?|\\n/).map((line) => `/// ${line}`).join(\"\\n\");\n}\n","import type { Fragment } from \"../utils/fragment.js\";\nimport { fragmentFromString } from \"../utils/fragment.js\";\n\n/**\n * Generate a barrel export Dart file that exports all files in a category.\n */\nexport function getIndexPageFragment(\n fileNames: string[],\n relativePath: string = \"\",\n): Fragment {\n if (fileNames.length === 0) {\n return fragmentFromString(\n \"// Auto-generated. Do not edit.\\n// ignore_for_file: type=lint\\n\",\n );\n }\n\n const exports = fileNames\n .sort()\n .map((f) => {\n const path = relativePath ? `${relativePath}/${f}` : f;\n return `export '${path}';`;\n })\n .join(\"\\n\");\n\n return fragmentFromString(\n `// Auto-generated. Do not edit.\\n// ignore_for_file: type=lint\\n\\n${exports}\\n`,\n );\n}\n\n/**\n * Generate the root barrel export file.\n */\nexport function getRootIndexPageFragment(\n categories: string[],\n): Fragment {\n const exports = categories\n .sort()\n .map((cat) => `export '${cat}/${cat}.dart';`)\n .join(\"\\n\");\n\n return fragmentFromString(\n `// Auto-generated. Do not edit.\\n// ignore_for_file: type=lint\\n\\n${exports}\\n`,\n );\n}\n","import {\n InstructionAccountNode,\n InstructionArgumentNode,\n InstructionNode,\n} from \"@codama/nodes\";\nimport { visit } from \"@codama/visitors-core\";\n\nimport type { Fragment } from \"../utils/fragment.js\";\nimport {\n fragment,\n fragmentFromString,\n mergeFragments,\n use,\n} from \"../utils/fragment.js\";\nimport type { RenderScope } from \"../utils/options.js\";\nimport { camelCase } from \"../utils/nameTransformers.js\";\nimport { getDiscriminatorValidationFragment } from \"../utils/discriminators.js\";\nimport { getTopLevelDecoderFragment } from \"../utils/exactDecoder.js\";\nimport {\n getDartValueFragment,\n isConstDartValueNode,\n} from \"../utils/valueNodes.js\";\nimport { getDiscriminatorConstantsFragment } from \"./discriminatorConstants.js\";\n\n/**\n * Generate a full Dart file for an instruction.\n */\nexport function getInstructionPageFragment(\n node: InstructionNode,\n scope: RenderScope,\n): Fragment {\n const name = node.name as string;\n const typeName = scope.nameApi.dataType(name);\n const instrFnName = scope.nameApi.instructionFunction(name);\n const parseFnName = scope.nameApi.instructionParseFunction(name);\n\n const accounts = node.accounts ?? [];\n const allArgs = node.arguments ?? [];\n const optionalAccountStrategy: string =\n node.optionalAccountStrategy ?? \"programId\";\n if (\n optionalAccountStrategy !== \"programId\" &&\n optionalAccountStrategy !== \"omitted\"\n ) {\n throw new Error(\n `Unsupported optional account strategy on instruction \"${node.name}\": ${optionalAccountStrategy}`,\n );\n }\n const args = allArgs.filter(\n (arg) =>\n !isDiscriminatorArg(arg, node) && !isOmittedDefaultArgument(arg),\n );\n\n // Build the instruction data class\n const dataClassName = `${typeName}InstructionData`;\n\n // Visit each arg type once and collect manifests for reuse\n const allArgManifests = (node.arguments ?? []).map((arg) => ({\n arg,\n manifest: visit(arg.type, scope.typeManifestVisitor),\n }));\n const argDefaultValues = new Map(\n allArgManifests.flatMap(({ arg, manifest }) => {\n if (arg.defaultValue == null) return [];\n const needsRenderedDefault =\n isOmittedDefaultArgument(arg) ||\n isDiscriminatorArg(arg, node) ||\n arg.defaultValue.kind !== \"accountBumpValueNode\";\n if (!needsRenderedDefault) return [];\n return [\n [\n arg,\n getDartValueFragment(arg.defaultValue, manifest.type.content),\n ] as const,\n ];\n }),\n );\n for (const arg of allArgs.filter((candidate) =>\n isDiscriminatorArg(candidate, node),\n )) {\n if (!argDefaultValues.has(arg)) {\n throw new Error(\n `Field discriminator \"${arg.name}\" on instruction \"${node.name}\" must reference a field with a default value.`,\n );\n }\n }\n\n // Data fields (non-discriminator arguments)\n const dataFieldDecls = allArgManifests\n .map(({ arg, manifest }) => {\n const fieldName = camelCase(arg.name as string);\n return ` final ${manifest.type.content} ${fieldName};`;\n })\n .join(\"\\n\");\n\n const dataCtorParams = allArgManifests\n .map(({ arg, manifest }) => {\n const fieldName = camelCase(arg.name as string);\n if (isOmittedDefaultArgument(arg)) return \"\";\n if (isDiscriminatorArg(arg, node)) {\n return isConstDefaultValue(arg.defaultValue)\n ? ` this.${fieldName} = ${argDefaultValues.get(arg)!.content},`\n : ` ${manifest.type.content}? ${fieldName},`;\n }\n return ` required this.${fieldName},`;\n })\n .filter(Boolean)\n .join(\"\\n\");\n\n const dataCtorInitializers = allArgManifests\n .map(({ arg }) => {\n const fieldName = camelCase(arg.name as string);\n if (isOmittedDefaultArgument(arg)) {\n return ` ${fieldName} = ${argDefaultValues.get(arg)!.content}`;\n }\n if (isDiscriminatorArg(arg, node) && !isConstDefaultValue(arg.defaultValue)) {\n return ` ${fieldName} = ${fieldName} ?? ${argDefaultValues.get(arg)!.content}`;\n }\n return null;\n })\n .filter((value): value is string => value !== null)\n .join(\",\\n\");\n\n // Encoder/decoder for instruction data\n const encFields = allArgManifests\n .map(({ arg, manifest }) => {\n return ` ('${arg.name as string}', ${manifest.encoder.content}),`;\n })\n .join(\"\\n\");\n\n const decFields = allArgManifests\n .map(({ arg, manifest }) => {\n return ` ('${arg.name as string}', ${manifest.decoder.content}),`;\n })\n .join(\"\\n\");\n\n const toMapFields = allArgs\n .map((arg) => {\n const value =\n isOmittedDefaultArgument(arg) || isDiscriminatorArg(arg, node)\n ? argDefaultValues.get(arg)!.content\n : `value.${camelCase(arg.name as string)}`;\n return ` '${arg.name as string}': ${value},`;\n })\n .join(\"\\n\");\n\n const fromMapFields = allArgManifests\n .filter(({ arg }) => !isOmittedDefaultArgument(arg))\n .map(({ arg, manifest }) => {\n const typeStr = manifest.type.content;\n const isNullable = typeStr.endsWith(\"?\");\n const accessor = isNullable ? `map['${arg.name as string}']` : `map['${arg.name as string}']!`;\n return ` ${camelCase(arg.name as string)}: ${accessor} as ${typeStr},`;\n })\n .join(\"\\n\");\n\n const dataCtorKeyword = allArgs.every(\n (arg) =>\n !isOmittedDefaultArgument(arg) ||\n isConstDartValueNode(arg.defaultValue!),\n ) && allArgs.every(\n (arg) =>\n !isDiscriminatorArg(arg, node) ||\n isConstDefaultValue(arg.defaultValue),\n )\n ? \"const \"\n : \"\";\n const dataCtorSignature = dataCtorParams\n ? `${dataCtorKeyword}${dataClassName}({\\n${dataCtorParams}\\n })${dataCtorInitializers ? ` :\\n${dataCtorInitializers}` : \"\"};`\n : `${dataCtorKeyword}${dataClassName}()${dataCtorInitializers ? ` :\\n${dataCtorInitializers}` : \"\"};`;\n const dataEncoderName = `get${typeName}InstructionDataEncoder`;\n const dataDecoderName = `get${typeName}InstructionDataDecoder`;\n const dataCodecName = `get${typeName}InstructionDataCodec`;\n\n // Generated parameters and locals must not shadow IDL account or argument names.\n const usedNames = new Set([\n ...args.map((arg) => camelCase(arg.name as string)),\n ...accounts.map((account) => camelCase(account.name as string)),\n ]);\n const instrProgramParam = reserveName(\n usedNames.has(\"programAddress\") ? \"instructionProgramAddress\" : \"programAddress\",\n usedNames,\n );\n const instructionDataLocal = reserveName(\"instructionData\", usedNames);\n const signerParams = new Map<InstructionAccountNode, string>();\n\n for (const account of accounts) {\n if (account.isSigner === \"either\") {\n signerParams.set(\n account,\n reserveName(`${camelCase(account.name as string)}IsSigner`, usedNames),\n );\n }\n }\n\n const signerParamDeclarations = [...signerParams.values()]\n .map((parameter) => ` bool ${parameter} = true,`)\n .join(\"\\n\");\n const signerParamDocs = [...signerParams.entries()]\n .map(([account, parameter]) =>\n `/// Set [${parameter}] to false when [${camelCase(account.name as string)}] does not sign (for example, a multisig authority).`\n )\n .join(\"\\n\");\n\n // Build the instruction builder function\n const accountParams = accounts\n .map((acc) => {\n const fieldName = camelCase(acc.name as string);\n const isRequired = !(acc.isOptional ?? false);\n return isRequired\n ? ` required Address ${fieldName},`\n : ` Address? ${fieldName},`;\n })\n .join(\"\\n\");\n\n // Build argParams using manifests from the allArgManifests (filtered to non-discriminator args)\n const argManifestMap = new Map(allArgManifests.map(({ arg, manifest }) => [arg, manifest]));\n const argParams = args\n .map((arg) => {\n const manifest = argManifestMap.get(arg)!;\n const fieldName = camelCase(arg.name as string);\n const typeStr = manifest.type.content;\n // Account bumps require asynchronous PDA derivation, so callers must\n // provide them instead of relying on a synchronous generated default.\n const hasDefault =\n arg.defaultValue != null &&\n arg.defaultValue.kind !== \"accountBumpValueNode\";\n if (hasDefault) {\n // Don't add `?` if the type is already nullable.\n const nullableType = typeStr.endsWith(\"?\") ? typeStr : `${typeStr}?`;\n return ` ${nullableType} ${fieldName},`;\n }\n return ` required ${typeStr} ${fieldName},`;\n })\n .join(\"\\n\");\n\n // Account metas\n const accountMetas = accounts\n .map((acc) => {\n const fieldName = camelCase(acc.name as string);\n const role = getAccountRole(acc, signerParams.get(acc));\n const isOptional = acc.isOptional ?? false;\n if (isOptional) {\n if (optionalAccountStrategy === \"omitted\") {\n return ` if (${fieldName} != null) AccountMeta(address: ${fieldName}, role: ${role}),`;\n }\n return ` if (${fieldName} != null) AccountMeta(address: ${fieldName}, role: ${role}) else AccountMeta(address: ${instrProgramParam}, role: AccountRole.readonly),`;\n }\n return ` AccountMeta(address: ${fieldName}, role: ${role}),`;\n })\n .join(\"\\n\");\n\n // Instruction data construction\n const dataConstruction = allArgs\n .map((arg) => {\n const fieldName = camelCase(arg.name as string);\n if (\n isOmittedDefaultArgument(arg) ||\n isDiscriminatorArg(arg, node)\n ) {\n return \"\"; // Use default\n }\n const skipDefault = arg.defaultValue?.kind === \"accountBumpValueNode\";\n return ` ${fieldName}: ${fieldName}${arg.defaultValue != null && !skipDefault ? ` ?? ${argDefaultValues.get(arg)!.content}` : \"\"},`;\n })\n .filter(Boolean)\n .join(\"\\n\");\n\n // Discriminator\n const discFragment = getDiscriminatorConstantsFragment(node, scope);\n const discriminatorValidation = getDiscriminatorValidationFragment(\n node,\n scope,\n );\n const topLevelDecoder = getTopLevelDecoderFragment({\n typeName: dataClassName,\n description: `${name} instruction decoder`,\n discriminatorValidation,\n fromMapFields,\n requireExactConsumption: true,\n });\n\n const parts: Fragment[] = [\n fragment`// Auto-generated. Do not edit.\n// ignore_for_file: type=lint\n\n${use(\"Uint8List\", \"dartTypedData\")}\n${use(\"immutable\", \"meta\")}\n${use(\"Encoder\", \"solanaCodecsCore\")}\n${use(\"Decoder\", \"solanaCodecsCore\")}\n${use(\"Codec\", \"solanaCodecsCore\")}\n${use(\"combineCodec\", \"solanaCodecsCore\")}\n${use(\"transformEncoder\", \"solanaCodecsCore\")}\n${use(\"transformDecoder\", \"solanaCodecsCore\")}\n${use(\"getStructEncoder\", \"solanaCodecsDataStructures\")}\n${use(\"getStructDecoder\", \"solanaCodecsDataStructures\")}\n${use(\"Address\", \"solanaAddresses\")}\n${use(\"Instruction\", \"solanaInstructions\")}\n${use(\"AccountMeta\", \"solanaInstructions\")}\n${use(\"AccountRole\", \"solanaInstructions\")}`,\n ];\n\n if (discFragment.content) parts.push(discFragment);\n\n // Data class\n parts.push(fragment`\n@immutable\nclass ${fragmentFromString(dataClassName)} {\n ${fragmentFromString(dataCtorSignature)}\n\n${fragmentFromString(dataFieldDecls)}\n}`);\n\n // Data encoder/decoder/codec\n parts.push(fragment`\nEncoder<${fragmentFromString(dataClassName)}> ${fragmentFromString(dataEncoderName)}() {\n final structEncoder = getStructEncoder(<(String, Encoder<Object?>)>[\n${fragmentFromString(encFields)}\n ]);\n\n return transformEncoder(\n structEncoder,\n (${fragmentFromString(dataClassName)} value) => <String, Object?>{\n${fragmentFromString(toMapFields)}\n },\n );\n}\n\nDecoder<${fragmentFromString(dataClassName)}> ${fragmentFromString(dataDecoderName)}() {\n final structDecoder = getStructDecoder(<(String, Decoder<Object?>)>[\n${fragmentFromString(decFields)}\n ]);\n\n${topLevelDecoder}\n}\n\nCodec<${fragmentFromString(dataClassName)}, ${fragmentFromString(dataClassName)}> ${fragmentFromString(dataCodecName)}() {\n return combineCodec(${fragmentFromString(dataEncoderName)}(), ${fragmentFromString(dataDecoderName)}());\n}`);\n\n // Instruction builder\n parts.push(fragment`\n/// Creates a [${fragmentFromString(typeName)}] instruction.${fragmentFromString(signerParamDocs ? `\\n${signerParamDocs}` : \"\")}\nInstruction ${fragmentFromString(instrFnName)}({\n required Address ${fragmentFromString(instrProgramParam)},\n${fragmentFromString(accountParams)}\n${fragmentFromString(argParams)}${fragmentFromString(signerParamDeclarations ? `\\n${signerParamDeclarations}` : \"\")}\n}) {\n final ${instructionDataLocal} = ${fragmentFromString(dataClassName)}(\n${fragmentFromString(dataConstruction)}\n );\n\n return Instruction(\n programAddress: ${fragmentFromString(instrProgramParam)},\n accounts: [\n${fragmentFromString(accountMetas)}\n ],\n data: ${fragmentFromString(dataEncoderName)}().encode(${instructionDataLocal}),\n );\n}`);\n\n // Parse function\n parts.push(fragment`\n/// Parses a [${fragmentFromString(typeName)}] instruction from raw instruction data.\n${fragmentFromString(dataClassName)} ${fragmentFromString(parseFnName)}(Instruction instruction) {\n return ${fragmentFromString(dataDecoderName)}().decode(instruction.data!);\n}`);\n\n const result = mergeFragments(parts, (cs) => cs.join(\"\\n\"));\n\n // Merge arg type manifest imports (encoder, decoder, type) into the result\n for (const { manifest } of allArgManifests) {\n result.imports.mergeWith(manifest.encoder.imports);\n result.imports.mergeWith(manifest.decoder.imports);\n result.imports.mergeWith(manifest.type.imports);\n }\n for (const defaultValue of argDefaultValues.values()) {\n result.imports.mergeWith(defaultValue.imports);\n }\n\n return result;\n}\n\n/** Reserves an identifier without shadowing existing builder parameters or locals. */\nfunction reserveName(preferredName: string, usedNames: Set<string>): string {\n let name = preferredName;\n\n while (usedNames.has(name)) {\n name = `${name}_`;\n }\n\n usedNames.add(name);\n return name;\n}\n\n/** Preserves fixed permissions and lets either-signer accounts choose their role. */\nfunction getAccountRole(acc: InstructionAccountNode, signerParameter?: string): string {\n const role = acc.isWritable ? \"AccountRole.writable\" : \"AccountRole.readonly\";\n\n if (signerParameter) {\n return `${signerParameter} ? ${role}Signer : ${role}`;\n }\n\n return acc.isSigner === true ? `${role}Signer` : role;\n}\n\nfunction isDiscriminatorArg(\n arg: InstructionArgumentNode,\n node: InstructionNode,\n): boolean {\n const discriminators = node.discriminators ?? [];\n return discriminators.some(\n (d) =>\n d.kind === \"fieldDiscriminatorNode\" && d.name === arg.name,\n );\n}\n\nfunction isConstDefaultValue(defaultValue: InstructionArgumentNode[\"defaultValue\"]): boolean {\n if (!defaultValue) return false;\n switch (defaultValue.kind) {\n case \"numberValueNode\":\n case \"booleanValueNode\":\n case \"stringValueNode\":\n case \"noneValueNode\":\n return true;\n default:\n return false;\n }\n}\n\nfunction isOmittedDefaultArgument(arg: InstructionArgumentNode): boolean {\n return arg.defaultValue != null && arg.defaultValueStrategy === \"omitted\";\n}\n","import type { PdaNode } from \"@codama/nodes\";\nimport { visit } from \"@codama/visitors-core\";\n\nimport type { Fragment } from \"../utils/fragment.js\";\nimport {\n fragment,\n fragmentFromString,\n mergeFragments,\n use,\n} from \"../utils/fragment.js\";\nimport type { RenderScope } from \"../utils/options.js\";\nimport { camelCase, pascalCase } from \"../utils/nameTransformers.js\";\nimport { getDartValueFragment, toDartStringLiteral } from \"../utils/valueNodes.js\";\nimport type { TypeManifest } from \"../utils/typeManifest.js\";\nimport { WELL_KNOWN_ADDRESSES } from \"../utils/wellKnownAddresses.js\";\n\n/**\n * Generate a full Dart file for a PDA.\n */\nexport function getPdaPageFragment(\n node: PdaNode,\n scope: RenderScope,\n): Fragment {\n const name = node.name as string;\n const findFnName = scope.nameApi.pdaFindFunction(name);\n const seedsClassName = `${pascalCase(name)}Seeds`;\n\n const seeds = node.seeds ?? [];\n const hasByteSeeds = seeds.some(\n (seed) =>\n seed.kind === \"constantPdaSeedNode\" &&\n seed.value.kind === \"bytesValueNode\",\n );\n\n // Separate variable seeds from constant seeds\n const variableSeeds = seeds.filter(\n (s) => s.kind === \"variablePdaSeedNode\",\n );\n const constantSeeds = seeds.filter(\n (s) => s.kind === \"constantPdaSeedNode\",\n );\n\n // Build seeds class if there are variable seeds\n const hasSeedsClass = variableSeeds.length > 0;\n\n // Collect type manifests so their imports can be merged into the result.\n const seedManifests: TypeManifest[] = [];\n\n const seedFieldDecls = variableSeeds\n .map((s) => {\n if (s.kind !== \"variablePdaSeedNode\") return \"\";\n const manifest = visit(s.type, scope.typeManifestVisitor);\n seedManifests.push(manifest);\n return ` final ${manifest.type.content} ${camelCase(s.name as string)};`;\n })\n .join(\"\\n\");\n\n const seedCtorParams = variableSeeds\n .map((s) => {\n if (s.kind !== \"variablePdaSeedNode\") return \"\";\n return ` required this.${camelCase(s.name as string)},`;\n })\n .join(\"\\n\");\n\n // Build the PDA seeds list.\n const seedValues: string[] = [];\n for (const seed of seeds) {\n if (seed.kind === \"constantPdaSeedNode\") {\n if (seed.value.kind === \"bytesValueNode\") {\n seedValues.push(` ${getDartValueFragment(seed.value).content},`);\n } else if (seed.value.kind === \"stringValueNode\") {\n seedValues.push(` ${toDartStringLiteral(seed.value.string)},`);\n } else if (seed.value.kind === \"publicKeyValueNode\") {\n const wellKnownSeedName = WELL_KNOWN_ADDRESSES.get(seed.value.publicKey);\n if (wellKnownSeedName) {\n use(wellKnownSeedName, \"solanaAddresses\");\n seedValues.push(\n ` getAddressEncoder().encode(${wellKnownSeedName}),`,\n );\n } else {\n seedValues.push(\n ` getAddressEncoder().encode(Address(${toDartStringLiteral(seed.value.publicKey)})),`,\n );\n }\n } else if (seed.value.kind === \"numberValueNode\") {\n const manifest = visit(seed.type, scope.typeManifestVisitor);\n seedManifests.push(manifest);\n const value = getDartValueFragment(seed.value, manifest.type.content);\n seedValues.push(` ${manifest.encoder.content}.encode(${value.content}),`);\n }\n } else if (seed.kind === \"variablePdaSeedNode\") {\n const manifest = visit(seed.type, scope.typeManifestVisitor);\n seedManifests.push(manifest);\n seedValues.push(\n ` ${manifest.encoder.content}.encode(seeds.${camelCase(seed.name as string)}),`,\n );\n }\n }\n\n // Program address parameter\n const wellKnownProgramName = node.programId\n ? WELL_KNOWN_ADDRESSES.get(node.programId)\n : undefined;\n if (wellKnownProgramName) {\n use(wellKnownProgramName, \"solanaAddresses\");\n }\n const programIdParam = node.programId\n ? wellKnownProgramName\n ? `Address programAddress = ${wellKnownProgramName}`\n : `Address programAddress = const Address(${toDartStringLiteral(node.programId)})`\n : \"required Address programAddress\";\n\n const typedDataImport = hasByteSeeds\n ? use(\"Uint8List\", \"dartTypedData\")\n : fragmentFromString(\"\");\n\n // `@immutable` is only needed when a seeds class is emitted.\n const metaImport = hasSeedsClass ? use(\"immutable\", \"meta\") : fragmentFromString(\"\");\n\n const parts: Fragment[] = [\n fragment`// Auto-generated. Do not edit.\n// ignore_for_file: type=lint\n\n${typedDataImport}\n${metaImport}\n${use(\"Address\", \"solanaAddresses\")}\n${use(\"getAddressEncoder\", \"solanaAddresses\")}\n${use(\"getProgramDerivedAddress\", \"solanaAddresses\")}`,\n ];\n\n if (hasSeedsClass) {\n parts.push(fragment`\n@immutable\nclass ${fragmentFromString(seedsClassName)} {\n const ${fragmentFromString(seedsClassName)}({\n${fragmentFromString(seedCtorParams)}\n });\n\n${fragmentFromString(seedFieldDecls)}\n}`);\n }\n\n const seedsParam = hasSeedsClass ? ` required ${seedsClassName} seeds,` : \"\";\n\n parts.push(fragment`\n/// Finds the program derived address for [${fragmentFromString(pascalCase(name))}].\nFuture<(Address, int)> ${fragmentFromString(findFnName)}({\n${fragmentFromString(seedsParam)}\n ${fragmentFromString(programIdParam)},\n}) async {\n final seedValues = <Object>[\n${fragmentFromString(seedValues.join(\"\\n\"))}\n ];\n\n return getProgramDerivedAddress(\n programAddress: programAddress,\n seeds: seedValues,\n );\n}`);\n\n const result = mergeFragments(parts, (cs) => cs.join(\"\\n\"));\n\n // Merge seed type manifest imports (encoders/types) into the result so that\n // helpers like `getU64Encoder` are imported.\n for (const manifest of seedManifests) {\n result.imports.mergeWith(manifest.encoder.imports);\n result.imports.mergeWith(manifest.type.imports);\n }\n\n return result;\n}\n","import {\n getAllInstructionsWithSubs,\n type InstructionNode,\n type ProgramNode,\n type ValueNode,\n} from \"@codama/nodes\";\nimport { visit } from \"@codama/visitors-core\";\n\nimport type { Fragment } from \"../utils/fragment.js\";\nimport {\n emptyFragment,\n fragment,\n fragmentFromString,\n mergeFragments,\n use,\n} from \"../utils/fragment.js\";\nimport type { RenderScope } from \"../utils/options.js\";\nimport { camelCase, pascalCase } from \"../utils/nameTransformers.js\";\nimport { toDartStringLiteral } from \"../utils/valueNodes.js\";\nimport { WELL_KNOWN_ADDRESSES } from \"../utils/wellKnownAddresses.js\";\n\n/**\n * Generate a full Dart file for a program.\n */\nexport function getProgramPageFragment(\n node: ProgramNode,\n scope: RenderScope,\n): Fragment {\n const name = node.name as string;\n const addressConstName = scope.nameApi.programAddressConstant(name);\n\n const wellKnownName = WELL_KNOWN_ADDRESSES.get(node.publicKey);\n\n // For well-known addresses, export and alias the canonical constant from\n // solana_kit_addresses instead of hardcoding the address string.\n // When the generated name matches the canonical name, a simple export suffices.\n // When they differ, we also need a local const alias.\n // For unknown addresses, fall back to the original Address('...') pattern.\n const addressDeclaration: Fragment = wellKnownName\n ? addressConstName === wellKnownName\n ? fragment`// Auto-generated. Do not edit.\n// ignore_for_file: type=lint\n\n/// The address of the ${fragmentFromString(pascalCase(name))} program.\nexport 'package:solana_kit_addresses/solana_kit_addresses.dart' show ${fragmentFromString(wellKnownName)};`\n : fragment`${use(wellKnownName, \"solanaAddresses\")}\n\n// Auto-generated. Do not edit.\n// ignore_for_file: type=lint\n\n/// The address of the ${fragmentFromString(pascalCase(name))} program.\nconst ${fragmentFromString(addressConstName)} = ${fragmentFromString(wellKnownName)};`\n : fragment`// Auto-generated. Do not edit.\n// ignore_for_file: type=lint\n\n${use(\"Address\", \"solanaAddresses\")}\n\n/// The address of the ${fragmentFromString(pascalCase(name))} program.\nconst ${fragmentFromString(addressConstName)} = Address(${fragmentFromString(toDartStringLiteral(node.publicKey))});`;\n\n const parts: Fragment[] = [addressDeclaration];\n\n // Account identifier enum\n const accounts = node.accounts ?? [];\n if (accounts.length > 0) {\n const accountVariants = accounts\n .map((acc) => ` ${camelCase(acc.name as string)},`)\n .join(\"\\n\");\n\n parts.push(fragment`\n/// Known accounts for the ${fragmentFromString(pascalCase(name))} program.\nenum ${fragmentFromString(pascalCase(name))}Account {\n${fragmentFromString(accountVariants)}\n}`);\n }\n\n // Instruction identification and parsing helpers.\n const instructions = getAllInstructionsWithSubs(node);\n if (instructions.length > 0) {\n const programName = pascalCase(name);\n const instructionEnum = `${programName}Instruction`;\n const instrVariants = instructions\n .map((instr) => ` ${camelCase(instr.name as string)},`)\n .join(\"\\n\");\n\n parts.push(fragment`\n/// Known instructions for the ${fragmentFromString(programName)} program.\nenum ${fragmentFromString(instructionEnum)} {\n${fragmentFromString(instrVariants)}\n}`);\n\n const identifiableInstructions = instructions\n .map((instruction) => ({\n instruction,\n condition: getInstructionDiscriminatorCondition(instruction, scope),\n }))\n .filter(({ condition }) => condition !== null) as {\n instruction: InstructionNode;\n condition: Fragment;\n }[];\n\n if (identifiableInstructions.length > 0) {\n const identifyBranches = identifiableInstructions.map(\n ({ instruction, condition }) => fragment` if (${condition}) {\n return ${fragmentFromString(instructionEnum)}.${fragmentFromString(camelCase(instruction.name as string))};\n }`,\n );\n const parsedBase = `Parsed${programName}Instruction`;\n const parsedClasses = instructions.map((instruction) => {\n const instructionName = pascalCase(instruction.name as string);\n const variant = camelCase(instruction.name as string);\n const parsedClass = `Parsed${instructionName}`;\n const dataClass = `${instructionName}InstructionData`;\n return fragment`/// A parsed ${fragmentFromString(instructionName)} instruction.\nfinal class ${fragmentFromString(parsedClass)} extends ${fragmentFromString(parsedBase)} {\n const ${fragmentFromString(parsedClass)}({required this.data})\n : super(${fragmentFromString(instructionEnum)}.${fragmentFromString(variant)});\n\n final ${use(dataClass, \"../instructions/instructions.dart\")} data;\n}`;\n });\n const parseBranches = instructions.map((instruction) => {\n const instructionName = pascalCase(instruction.name as string);\n const variant = camelCase(instruction.name as string);\n const parsedClass = `Parsed${instructionName}`;\n const parseFunction = scope.nameApi.instructionParseFunction(\n instruction.name as string,\n );\n return fragment` ${fragmentFromString(instructionEnum)}.${fragmentFromString(variant)} => ${fragmentFromString(parsedClass)}(\n data: ${use(parseFunction, \"../instructions/instructions.dart\")}(instruction),\n ),`;\n });\n\n parts.push(fragment`\n/// Identifies the type of a ${fragmentFromString(programName)} instruction.\n${fragmentFromString(instructionEnum)} identify${fragmentFromString(programName)}Instruction(\n ${use(\"Uint8List\", \"dartTypedData\")} data,\n) {\n${mergeFragments(identifyBranches, (cs) => cs.join(\"\\n\"))}\n\n throw ${use(\"SolanaError\", \"solanaErrors\")}(\n ${use(\"SolanaErrorCode\", \"solanaErrors\")}.programClientsFailedToIdentifyInstruction,\n {\n 'instructionData': data,\n 'programName': '${fragmentFromString(name)}',\n },\n );\n}\n\n/// A parsed instruction from the ${fragmentFromString(programName)} program.\nsealed class ${fragmentFromString(parsedBase)} {\n const ${fragmentFromString(parsedBase)}(this.instructionType);\n\n final ${fragmentFromString(instructionEnum)} instructionType;\n}\n\n${mergeFragments(parsedClasses, (cs) => cs.join(\"\\n\\n\"))}\n\n/// Parses a ${fragmentFromString(programName)} instruction.\n${fragmentFromString(parsedBase)} parse${fragmentFromString(programName)}Instruction(\n ${use(\"Instruction\", \"solanaInstructions\")} instruction,\n) {\n return switch (identify${fragmentFromString(programName)}Instruction(\n instruction.data ?? Uint8List(0),\n )) {\n${mergeFragments(parseBranches, (cs) => cs.join(\"\\n\"))}\n };\n}`);\n }\n }\n\n return mergeFragments(parts, (cs) => cs.join(\"\\n\"));\n}\n\nfunction getInstructionDiscriminatorCondition(\n instruction: InstructionNode,\n scope: RenderScope,\n): Fragment | null {\n const discriminators = instruction.discriminators ?? [];\n if (discriminators.length === 0) return null;\n\n const conditions = discriminators.map((discriminator): Fragment | null => {\n switch (discriminator.kind) {\n case \"sizeDiscriminatorNode\":\n return fragment`data.length == ${discriminator.size}`;\n case \"constantDiscriminatorNode\": {\n const manifest = visit(\n discriminator.constant.type,\n scope.typeManifestVisitor,\n );\n const value = getValueFragment(\n discriminator.constant.value,\n manifest.type.content,\n );\n if (value === null) return null;\n return fragment`${use(\"containsBytes\", \"solanaCodecsCore\")}(data, ${manifest.encoder}.encode(${value}), ${discriminator.offset})`;\n }\n case \"fieldDiscriminatorNode\": {\n const argument = (instruction.arguments ?? []).find(\n (candidate) => candidate.name === discriminator.name,\n );\n if (argument?.defaultValue == null) return null;\n const manifest = visit(argument.type, scope.typeManifestVisitor);\n const value = getValueFragment(\n argument.defaultValue,\n manifest.type.content,\n );\n if (value === null) return null;\n return fragment`${use(\"containsBytes\", \"solanaCodecsCore\")}(data, ${manifest.encoder}.encode(${value}), ${discriminator.offset})`;\n }\n }\n });\n\n if (conditions.some((condition) => condition === null)) return null;\n return mergeFragments(conditions as Fragment[], (cs) => cs.join(\" && \"));\n}\n\nfunction getValueFragment(\n value:\n | ValueNode\n | NonNullable<\n NonNullable<InstructionNode[\"arguments\"]>[number][\"defaultValue\"]\n >,\n dartType?: string,\n): Fragment | null {\n switch (value.kind) {\n case \"numberValueNode\":\n return fragmentFromString(\n dartType === \"BigInt\"\n ? `BigInt.from(${value.number})`\n : String(value.number),\n );\n case \"booleanValueNode\":\n return fragmentFromString(String(value.boolean));\n case \"stringValueNode\":\n return fragmentFromString(toDartStringLiteral(value.string));\n case \"bytesValueNode\": {\n const clean = value.data.replace(/^0x/, \"\");\n const bytes = clean.match(/.{1,2}/g)?.map((byte) => parseInt(byte, 16)) ?? [];\n return fragment`${use(\"Uint8List\", \"dartTypedData\")}.fromList([${fragmentFromString(bytes.join(\", \"))}])`;\n }\n default:\n return null;\n }\n}\n","import type {\n DefinedTypeNode,\n EnumVariantTypeNode,\n StructFieldTypeNode,\n TypeNode,\n} from \"@codama/nodes\";\nimport { resolveNestedTypeNode } from \"@codama/nodes\";\nimport { visit } from \"@codama/visitors-core\";\n\nimport type { Fragment } from \"../utils/fragment.js\";\nimport {\n emptyFragment,\n fragment,\n fragmentFromString,\n mergeFragments,\n use,\n} from \"../utils/fragment.js\";\nimport type { RenderScope } from \"../utils/options.js\";\nimport {\n camelCase,\n pascalCase,\n snakeCase,\n} from \"../utils/nameTransformers.js\";\n\n/**\n * Generate a full Dart file for a defined type.\n */\nexport function getTypePageFragment(\n node: DefinedTypeNode,\n scope: RenderScope,\n): Fragment {\n const name = node.name as string;\n const typeName = scope.nameApi.dataType(name);\n const typeNode = node.type;\n\n // Check what kind of type this is\n if (typeNode.kind === \"enumTypeNode\") {\n const variants = typeNode.variants ?? [];\n const isScalar = variants.every(\n (v) => v.kind === \"enumEmptyVariantTypeNode\",\n );\n if (isScalar) {\n return getScalarEnumPageFragment(node, variants, scope);\n }\n return getDataEnumPageFragment(node, variants, scope);\n }\n\n if (typeNode.kind === \"structTypeNode\") {\n return getStructPageFragment(node, scope);\n }\n\n // Simple type alias — just create codec wrappers\n return getTypeAliasPageFragment(node, scope);\n}\n\n/**\n * Generate a Dart scalar enum (all empty variants).\n */\nfunction getScalarEnumPageFragment(\n node: DefinedTypeNode,\n enumVariants: EnumVariantTypeNode[],\n scope: RenderScope,\n): Fragment {\n const name = node.name as string;\n const typeName = scope.nameApi.dataType(name);\n const enumNode = node.type;\n if (enumNode.kind !== \"enumTypeNode\") return emptyFragment();\n\n const variants = enumVariants.map((v) => {\n const variantName = scope.nameApi.enumVariant(v.name as string);\n return variantName;\n });\n\n const variantLines = variants.map((v: string) => ` ${v},`).join(\"\\n\");\n const encoderName = scope.nameApi.encoderFunction(name);\n const decoderName = scope.nameApi.decoderFunction(name);\n const codecName = scope.nameApi.codecFunction(name);\n\n // Determine size codec from the enum node's size if available\n const resolvedSize = resolveNestedTypeNode(enumNode.size);\n const sizeType = resolvedSize.format ?? \"u8\";\n const sizeCodecName = getNumberCodecName(sizeType);\n const isU64 = sizeType === \"u64\";\n const encodedVariantIndex = isU64\n ? \"BigInt.from(value.index)\"\n : \"value.index\";\n const decodedVariant = isU64\n ? `(BigInt value, Uint8List bytes, int offset) {\n if (value.isNegative || value >= BigInt.from(${typeName}.values.length)) {\n throw RangeError('Invalid ${typeName} discriminator: ' + value.toString());\n }\n return ${typeName}.values[value.toInt()];\n }`\n : `(int value, Uint8List bytes, int offset) => ${typeName}.values[value]`;\n\n return fragment`// Auto-generated. Do not edit.\n// ignore_for_file: type=lint\n\n${use(\"Uint8List\", \"dartTypedData\")}\n${use(\"Encoder\", \"solanaCodecsCore\")}\n${use(\"Decoder\", \"solanaCodecsCore\")}\n${use(\"Codec\", \"solanaCodecsCore\")}\n${use(\"combineCodec\", \"solanaCodecsCore\")}\n${use(\"transformEncoder\", \"solanaCodecsCore\")}\n${use(\"transformDecoder\", \"solanaCodecsCore\")}\n${use(`get${sizeCodecName}Encoder`, \"solanaCodecsNumbers\")}\n${use(`get${sizeCodecName}Decoder`, \"solanaCodecsNumbers\")}\n\nenum ${fragmentFromString(typeName)} {\n${fragmentFromString(variantLines)}\n}\n\nEncoder<${fragmentFromString(typeName)}> ${fragmentFromString(encoderName)}() {\n return transformEncoder(\n get${fragmentFromString(sizeCodecName)}Encoder(),\n (${fragmentFromString(typeName)} value) => ${fragmentFromString(encodedVariantIndex)},\n );\n}\n\nDecoder<${fragmentFromString(typeName)}> ${fragmentFromString(decoderName)}() {\n return transformDecoder(\n get${fragmentFromString(sizeCodecName)}Decoder(),\n ${fragmentFromString(decodedVariant)},\n );\n}\n\nCodec<${fragmentFromString(typeName)}, ${fragmentFromString(typeName)}> ${fragmentFromString(codecName)}() {\n return combineCodec(${fragmentFromString(encoderName)}(), ${fragmentFromString(decoderName)}());\n}`;\n}\n\n/**\n * Generate a Dart data enum (sealed class with variants).\n */\nfunction getDataEnumPageFragment(\n node: DefinedTypeNode,\n variants: EnumVariantTypeNode[],\n scope: RenderScope,\n): Fragment {\n const name = node.name as string;\n const typeName = scope.nameApi.dataType(name);\n const enumNode = node.type;\n if (enumNode.kind !== \"enumTypeNode\") return emptyFragment();\n\n const variantClasses: string[] = [];\n const encoderVariants: string[] = [];\n const decoderVariants: string[] = [];\n const encodeCases: string[] = [];\n const decodeCases: string[] = [];\n let pageHasListEnums = false;\n // Collect all field type manifests from variants so we can merge their imports\n const allVariantManifests: { encoder: Fragment; decoder: Fragment; type: Fragment }[] = [];\n\n for (let i = 0; i < variants.length; i++) {\n const variant = variants[i];\n const variantName = pascalCase(variant.name as string);\n const variantClassName = scope.nameApi.sealedClassVariant(\n name,\n variant.name as string,\n );\n\n if (variant.kind === \"enumEmptyVariantTypeNode\") {\n variantClasses.push(`final class ${variantClassName} extends ${typeName} {\n const ${variantClassName}();\n\n @override\n bool operator ==(Object other) =>\n identical(this, other) || other is ${variantClassName};\n\n @override\n int get hashCode => runtimeType.hashCode;\n\n @override\n String toString() => '${typeName}.${variantName}()';\n}`);\n\n encoderVariants.push(\n `(${i}, getStructEncoder(<(String, Encoder<Object?>)>[]))`,\n );\n decoderVariants.push(\n `(${i}, transformDecoder<Map<String, Object?>, Map<String, Object?>>(getStructDecoder(<(String, Decoder<Object?>)>[]), (Map<String, Object?> map, Uint8List bytes, int offset) => <String, Object?>{}))`,\n );\n encodeCases.push(`${variantClassName}() => <String, Object?>{'__kind': ${i}},`);\n decodeCases.push(`case ${i}: return const ${variantClassName}();`);\n } else if (variant.kind === \"enumStructVariantTypeNode\") {\n const resolvedStruct = resolveNestedTypeNode(variant.struct);\n const fields = resolvedStruct.fields ?? [];\n\n // Visit each field type once and collect manifests\n const fieldManifests = fields.map((f: StructFieldTypeNode) => ({\n field: f,\n manifest: visit(f.type, scope.typeManifestVisitor),\n }));\n for (const { manifest } of fieldManifests) {\n allVariantManifests.push(manifest);\n }\n\n const fieldDecls = fieldManifests\n .map(({ field: f, manifest }) => {\n return ` final ${manifest.type.content} ${camelCase(f.name as string)};`;\n })\n .join(\"\\n\");\n\n const ctorParams = fields\n .map((f: StructFieldTypeNode) => ` required this.${camelCase(f.name as string)},`)\n .join(\"\\n\");\n const ctorSignature =\n fields.length === 0\n ? ` const ${variantClassName}();`\n : ` const ${variantClassName}({\\n${ctorParams}\\n });`;\n\n const eqChecks =\n fields.length === 0\n ? \"true\"\n : fields\n .map((f: StructFieldTypeNode, index) => {\n const fieldName = camelCase(f.name as string);\n return isListManifest(fieldManifests[index].manifest)\n ? `_listEquals(${fieldName}, other.${fieldName})`\n : `${fieldName} == other.${fieldName}`;\n })\n .join(\" &&\\n \");\n\n const hashExpression = getValueHashExpression(fields, fieldManifests);\n if (fieldManifests.some(({ manifest }) => isListManifest(manifest))) {\n pageHasListEnums = true;\n }\n\n const toStringFields = fields\n .map((f: StructFieldTypeNode) => `${camelCase(f.name as string)}: $${camelCase(f.name as string)}`)\n .join(\", \");\n\n variantClasses.push(`final class ${variantClassName} extends ${typeName} {\n${ctorSignature}\n\n${fieldDecls}\n\n @override\n bool operator ==(Object other) =>\n identical(this, other) ||\n other is ${variantClassName} &&\n ${eqChecks};\n\n @override\n int get hashCode => ${hashExpression};\n\n @override\n String toString() => '${typeName}.${variantName}(${toStringFields})';\n}`);\n\n const encFields = fieldManifests\n .map(({ field: f, manifest }) => {\n return `('${f.name as string}', ${manifest.encoder.content})`;\n })\n .join(\", \");\n\n const decFields = fieldManifests\n .map(({ field: f, manifest }) => {\n return `('${f.name as string}', ${manifest.decoder.content})`;\n })\n .join(\", \");\n\n const fromMapFields = fieldManifests\n .map(\n ({ field: f, manifest }) => {\n const typeStr = manifest.type.content;\n const isNullable = typeStr.endsWith(\"?\");\n const accessor = isNullable ? `map['${f.name as string}']` : `map['${f.name as string}']!`;\n return `${camelCase(f.name as string)}: ${accessor} as ${typeStr}`;\n },\n )\n .join(\", \");\n\n const toMapFields = fields\n .map(\n (f: StructFieldTypeNode) =>\n `'${f.name as string}': value.${camelCase(f.name as string)}`,\n )\n .join(\", \");\n\n encoderVariants.push(\n `(${i}, getStructEncoder([${encFields}]))`,\n );\n decoderVariants.push(\n `(${i}, transformDecoder<Map<String, Object?>, Map<String, Object?>>(getStructDecoder([${decFields}]), (Map<String, Object?> map, Uint8List bytes, int offset) => map))`,\n );\n const structPattern =\n fields.length === 0\n ? ''\n : fields\n .map((f: StructFieldTypeNode) => `${camelCase(f.name as string)}: final ${camelCase(f.name as string)}`)\n .join(', ');\n const structMapEntries =\n fields.length === 0\n ? ''\n : `, ${fields.map((f: StructFieldTypeNode)=>`'${f.name as string}': ${camelCase(f.name as string)}`).join(', ')}`;\n encodeCases.push(`${variantClassName}(${structPattern}) => <String, Object?>{'__kind': ${i}${structMapEntries}},`);\n decodeCases.push(`case ${i}: return ${variantClassName}(${fromMapFields.replace(/\\n/g, ' ').replace(/,$/, '')});`);\n } else if (variant.kind === \"enumTupleVariantTypeNode\") {\n const resolvedTuple = resolveNestedTypeNode(variant.tuple);\n const items = resolvedTuple.items ?? [];\n if (items.length === 1) {\n const manifest = visit(items[0], scope.typeManifestVisitor);\n allVariantManifests.push(manifest);\n variantClasses.push(`final class ${variantClassName} extends ${typeName} {\n const ${variantClassName}(this.value);\n\n final ${manifest.type.content} value;\n\n @override\n bool operator ==(Object other) =>\n identical(this, other) ||\n other is ${variantClassName} && value == other.value;\n\n @override\n int get hashCode => value.hashCode;\n\n @override\n String toString() => '${typeName}.${variantName}(\\$value)';\n}`);\n encoderVariants.push(\n `(${i}, transformEncoder<${manifest.type.content}, Map<String, Object?>>(${manifest.encoder.content}, (Map<String, Object?> map) => map['value']! as ${manifest.type.content}))`,\n );\n decoderVariants.push(\n `(${i}, transformDecoder<${manifest.type.content}, Map<String, Object?>>(${manifest.decoder.content}, (${manifest.type.content} value, Uint8List bytes, int offset) => <String, Object?>{'value': value}))`,\n );\n encodeCases.push(`${variantClassName}(value: final value) => <String, Object?>{'__kind': ${i}, 'value': value},`);\n decodeCases.push(`case ${i}: return ${variantClassName}(map['value']! as ${manifest.type.content});`);\n }\n }\n }\n\n const encoderName = scope.nameApi.encoderFunction(name);\n const decoderName = scope.nameApi.decoderFunction(name);\n const codecName = scope.nameApi.codecFunction(name);\n const resolvedSize = resolveNestedTypeNode(enumNode.size);\n const sizeType = resolvedSize.format ?? \"u8\";\n const sizeCodecName = getNumberCodecName(sizeType);\n\n const result = fragment`// Auto-generated. Do not edit.\n// ignore_for_file: type=lint\n\n${use(\"Uint8List\", \"dartTypedData\")}\n${use(\"Encoder\", \"solanaCodecsCore\")}\n${use(\"Decoder\", \"solanaCodecsCore\")}\n${use(\"Codec\", \"solanaCodecsCore\")}\n${use(\"combineCodec\", \"solanaCodecsCore\")}\n${use(\"transformEncoder\", \"solanaCodecsCore\")}\n${use(\"transformDecoder\", \"solanaCodecsCore\")}\n${use(\"getStructEncoder\", \"solanaCodecsDataStructures\")}\n${use(\"getStructDecoder\", \"solanaCodecsDataStructures\")}\n${use(\"getDiscriminatedUnionEncoder\", \"solanaCodecsDataStructures\")}\n${use(\"getDiscriminatedUnionDecoder\", \"solanaCodecsDataStructures\")}\n${use(`get${sizeCodecName}Encoder`, \"solanaCodecsNumbers\")}\n${use(`get${sizeCodecName}Decoder`, \"solanaCodecsNumbers\")}\n\nsealed class ${fragmentFromString(typeName)} {\n const ${fragmentFromString(typeName)}();\n}\n\n${fragmentFromString(variantClasses.join(\"\\n\\n\"))}${pageHasListEnums ? LIST_VALUE_HELPERS : \"\"}\n\nEncoder<${fragmentFromString(typeName)}> ${fragmentFromString(encoderName)}() {\n return transformEncoder<Map<String, Object?>, ${fragmentFromString(typeName)}>(\n getDiscriminatedUnionEncoder([\n ${fragmentFromString(encoderVariants.join(\",\\n \"))},\n ], size: get${fragmentFromString(sizeCodecName)}Encoder()),\n (${fragmentFromString(typeName)} value) => switch (value) {\n ${fragmentFromString(encodeCases.join(\"\\n \"))}\n },\n );\n}\n\nDecoder<${fragmentFromString(typeName)}> ${fragmentFromString(decoderName)}() {\n return transformDecoder<Map<String, Object?>, ${fragmentFromString(typeName)}>(\n getDiscriminatedUnionDecoder([\n ${fragmentFromString(decoderVariants.join(\",\\n \"))},\n ], size: get${fragmentFromString(sizeCodecName)}Decoder()),\n (Map<String, Object?> map, Uint8List bytes, int offset) {\n switch (map['__kind']) {\n ${fragmentFromString(decodeCases.join(\"\\n \"))}\n }\n throw StateError('Unsupported ${typeName} discriminator: \\${map['__kind']}');\n },\n );\n}\n\nCodec<${fragmentFromString(typeName)}, ${fragmentFromString(typeName)}> ${fragmentFromString(codecName)}() {\n return combineCodec(${fragmentFromString(encoderName)}(), ${fragmentFromString(decoderName)}());\n}`;\n\n // Merge variant field type manifest imports into the result\n for (const manifest of allVariantManifests) {\n result.imports.mergeWith(manifest.encoder.imports);\n result.imports.mergeWith(manifest.decoder.imports);\n result.imports.mergeWith(manifest.type.imports);\n }\n\n return result;\n}\n\n/**\n * Generate a Dart @immutable class for a struct type.\n */\nfunction getStructPageFragment(\n node: DefinedTypeNode,\n scope: RenderScope,\n): Fragment {\n const name = node.name as string;\n const typeName = scope.nameApi.dataType(name);\n const structNode = node.type;\n if (structNode.kind !== \"structTypeNode\") return emptyFragment();\n\n const fields = structNode.fields ?? [];\n let pageHasListStructs = false;\n\n // Visit each field type once and collect manifests for reuse\n const fieldManifests = fields.map((f: StructFieldTypeNode) => ({\n field: f,\n manifest: visit(f.type, scope.typeManifestVisitor),\n }));\n\n const fieldDecls = fieldManifests\n .map(({ field: f, manifest }) => {\n return ` final ${manifest.type.content} ${camelCase(f.name as string)};`;\n })\n .join(\"\\n\");\n\n const ctorParams = fields\n .map((f: StructFieldTypeNode) => ` required this.${camelCase(f.name as string)},`)\n .join(\"\\n\");\n const ctorSignature =\n fields.length === 0\n ? ` const ${typeName}();`\n : ` const ${typeName}({\\n${ctorParams}\\n });`;\n\n const eqChecks =\n fields.length === 0\n ? \"true\"\n : fieldManifests\n .map(({ field: f, manifest }, index) => {\n const fieldName = camelCase(f.name as string);\n return isListManifest(manifest)\n ? `_listEquals(${fieldName}, other.${fieldName})`\n : `${fieldName} == other.${fieldName}`;\n })\n .join(\" &&\\n \");\n if (fieldManifests.some(({ manifest }) => isListManifest(manifest))) {\n pageHasListStructs = true;\n }\n\n const toStringFields = fields\n .map(\n (f: StructFieldTypeNode) =>\n `${camelCase(f.name as string)}: \\$${camelCase(f.name as string)}`,\n )\n .join(\", \");\n\n const encoderName = scope.nameApi.encoderFunction(name);\n const decoderName = scope.nameApi.decoderFunction(name);\n const codecName = scope.nameApi.codecFunction(name);\n\n // Build encoder/decoder field lists\n const encFields = fieldManifests\n .map(({ field: f, manifest }) => {\n return ` ('${f.name as string}', ${manifest.encoder.content}),`;\n })\n .join(\"\\n\");\n\n const decFields = fieldManifests\n .map(({ field: f, manifest }) => {\n return ` ('${f.name as string}', ${manifest.decoder.content}),`;\n })\n .join(\"\\n\");\n\n const toMapFields = fields\n .map(\n (f: StructFieldTypeNode) =>\n ` '${f.name as string}': value.${camelCase(f.name as string)},`,\n )\n .join(\"\\n\");\n\n const fromMapFields = fieldManifests\n .map(({ field: f, manifest }) => {\n const typeStr = manifest.type.content;\n const isNullable = typeStr.endsWith(\"?\");\n const accessor = isNullable ? `map['${f.name as string}']` : `map['${f.name as string}']!`;\n return ` ${camelCase(f.name as string)}: ${accessor} as ${typeStr},`;\n })\n .join(\"\\n\");\n\n const result = fragment`// Auto-generated. Do not edit.\n// ignore_for_file: type=lint\n\n${use(\"Uint8List\", \"dartTypedData\")}\n${use(\"immutable\", \"meta\")}\n${use(\"Encoder\", \"solanaCodecsCore\")}\n${use(\"Decoder\", \"solanaCodecsCore\")}\n${use(\"Codec\", \"solanaCodecsCore\")}\n${use(\"combineCodec\", \"solanaCodecsCore\")}\n${use(\"transformEncoder\", \"solanaCodecsCore\")}\n${use(\"transformDecoder\", \"solanaCodecsCore\")}\n${use(\"getStructEncoder\", \"solanaCodecsDataStructures\")}\n${use(\"getStructDecoder\", \"solanaCodecsDataStructures\")}\n\n@immutable\nclass ${fragmentFromString(typeName)} {\n${fragmentFromString(ctorSignature)}\n\n${fragmentFromString(fieldDecls)}\n\n @override\n bool operator ==(Object other) =>\n identical(this, other) ||\n other is ${fragmentFromString(typeName)} &&\n runtimeType == other.runtimeType &&\n ${fragmentFromString(eqChecks)};\n\n @override\n int get hashCode => ${fragmentFromString(\n getValueHashExpression(fields, fieldManifests),\n )};\n\n @override\n String toString() => '${fragmentFromString(typeName)}(${fragmentFromString(toStringFields)})';\n}\n${pageHasListStructs ? LIST_VALUE_HELPERS : \"\"}\nEncoder<${fragmentFromString(typeName)}> ${fragmentFromString(encoderName)}() {\n final structEncoder = getStructEncoder(<(String, Encoder<Object?>)>[\n${fragmentFromString(encFields)}\n ]);\n\n return transformEncoder(\n structEncoder,\n (${fragmentFromString(typeName)} value) => <String, Object?>{\n${fragmentFromString(toMapFields)}\n },\n );\n}\n\nDecoder<${fragmentFromString(typeName)}> ${fragmentFromString(decoderName)}() {\n final structDecoder = getStructDecoder(<(String, Decoder<Object?>)>[\n${fragmentFromString(decFields)}\n ]);\n\n return transformDecoder(\n structDecoder,\n (Map<String, Object?> map, Uint8List bytes, int offset) => ${fragmentFromString(typeName)}(\n${fragmentFromString(fromMapFields)}\n ),\n );\n}\n\nCodec<${fragmentFromString(typeName)}, ${fragmentFromString(typeName)}> ${fragmentFromString(codecName)}() {\n return combineCodec(${fragmentFromString(encoderName)}(), ${fragmentFromString(decoderName)}());\n}`;\n\n // Merge field type manifest imports (encoder, decoder, type) into the result\n for (const { manifest } of fieldManifests) {\n result.imports.mergeWith(manifest.encoder.imports);\n result.imports.mergeWith(manifest.decoder.imports);\n result.imports.mergeWith(manifest.type.imports);\n }\n\n return result;\n}\n\n/**\n * Generate a simple type alias with codec wrappers.\n */\nfunction getTypeAliasPageFragment(\n node: DefinedTypeNode,\n scope: RenderScope,\n): Fragment {\n const name = node.name as string;\n const typeName = scope.nameApi.dataType(name);\n const manifest = visit(node.type, scope.typeManifestVisitor);\n\n const encoderName = scope.nameApi.encoderFunction(name);\n const decoderName = scope.nameApi.decoderFunction(name);\n const codecName = scope.nameApi.codecFunction(name);\n\n return fragment`// Auto-generated. Do not edit.\n// ignore_for_file: type=lint\n\n${use(\"Encoder\", \"solanaCodecsCore\")}\n${use(\"Decoder\", \"solanaCodecsCore\")}\n${use(\"Codec\", \"solanaCodecsCore\")}\n${use(\"combineCodec\", \"solanaCodecsCore\")}\n\ntypedef ${fragmentFromString(typeName)} = ${manifest.type};\n\nEncoder<${fragmentFromString(typeName)}> ${fragmentFromString(encoderName)}() {\n return ${manifest.encoder};\n}\n\nDecoder<${fragmentFromString(typeName)}> ${fragmentFromString(decoderName)}() {\n return ${manifest.decoder};\n}\n\nCodec<${fragmentFromString(typeName)}, ${fragmentFromString(typeName)}> ${fragmentFromString(codecName)}() {\n return combineCodec(${fragmentFromString(encoderName)}(), ${fragmentFromString(decoderName)}());\n}`;\n}\n\n/**\n * Returns true when the rendered field type is a Dart list or byte sequence,\n * whose reference equality must be replaced with a deep comparison in\n * generated value classes.\n */\nfunction isListManifest(manifest: { type: Fragment }): boolean {\n return manifest.type.content.startsWith(\"List<\") ||\n manifest.type.content === \"Uint8List\";\n}\n\n/**\n * Private Dart helpers emitted into pages whose value classes contain\n * list-typed fields, so `==` and `hashCode` match recursive structural value\n * equality instead of list reference identity. The recursive branch matters\n * for generated types such as `List<Uint8List>`.\n */\nconst LIST_VALUE_HELPERS = `\nbool _listEquals<T>(List<T>? a, List<T>? b) {\n if (identical(a, b)) return true;\n if (a == null || b == null) return a == b;\n if (a.length != b.length) return false;\n for (var i = 0; i < a.length; i++) {\n final left = a[i];\n final right = b[i];\n if (left is List<Object?> && right is List<Object?>) {\n if (!_listEquals(left, right)) return false;\n } else if (left != right) {\n return false;\n }\n }\n return true;\n}\n\nObject? _deepHash(Object? value) {\n if (value is List<Object?>) {\n return Object.hashAll(value.map(_deepHash));\n }\n return value;\n}\n\nint _listHashCode<T>(List<T>? a) {\n if (a == null) return 0;\n return Object.hashAll(a.map(_deepHash));\n}\n`;\n\n/**\n * Builds the `hashCode` expression for a class whose fields render as the\n * given lowercase names. List-typed fields compare structurally through the\n * private `_listHashCode` helper emitted alongside the class.\n */\nfunction getValueHashExpression(\n fields: StructFieldTypeNode[],\n fieldManifests: { field: StructFieldTypeNode; manifest: { type: Fragment } }[],\n): string {\n const fieldNames = fields.map((f: StructFieldTypeNode) =>\n camelCase(f.name as string),\n );\n const hasListFields = fieldManifests.some(({ manifest }) =>\n isListManifest(manifest),\n );\n if (!hasListFields) {\n return getHashExpression(fieldNames);\n }\n if (fieldNames.length === 1) {\n return `_listHashCode(${fieldNames[0]})`;\n }\n const hashArgs = fields.map((f: StructFieldTypeNode, index) =>\n isListManifest(fieldManifests[index].manifest)\n ? `_listHashCode(${camelCase(f.name as string)})`\n : camelCase(f.name as string),\n );\n return `Object.hash(${hashArgs.join(\", \")})`;\n}\n\nfunction getHashExpression(fields: string[]): string {\n if (fields.length === 0) return \"runtimeType.hashCode\";\n if (fields.length === 1) return `${fields[0]}.hashCode`;\n return `Object.hash(${fields.join(\", \")})`;\n}\n\nfunction getNumberCodecName(format: string): string {\n switch (format) {\n case \"u8\": return \"U8\";\n case \"u16\": return \"U16\";\n case \"u32\": return \"U32\";\n case \"u64\": return \"U64\";\n case \"u128\": return \"U128\";\n case \"i8\": return \"I8\";\n case \"i16\": return \"I16\";\n case \"i32\": return \"I32\";\n case \"i64\": return \"I64\";\n case \"i128\": return \"I128\";\n case \"f32\": return \"F32\";\n case \"f64\": return \"F64\";\n case \"shortU16\": return \"ShortU16\";\n default: return \"U8\";\n }\n}\n","import {\n type AccountNode,\n type DefinedTypeNode,\n type InstructionNode,\n type PdaNode,\n type ProgramNode,\n type RootNode,\n} from \"@codama/nodes\";\nimport {\n type RenderMap,\n addToRenderMap,\n createRenderMap,\n mergeRenderMaps,\n} from \"@codama/renderers-core\";\nimport {\n type Visitor,\n LinkableDictionary,\n NodeStack,\n extendVisitor,\n pipe,\n recordLinkablesOnFirstVisitVisitor,\n recordNodeStackVisitor,\n staticVisitor,\n visit,\n} from \"@codama/visitors-core\";\n\nimport type { Fragment } from \"../utils/fragment.js\";\nimport type { GetRenderMapOptions, RenderScope } from \"../utils/options.js\";\nimport { createDartNameApi } from \"../utils/nameTransformers.js\";\nimport { snakeCase } from \"../utils/nameTransformers.js\";\nimport { getTypeManifestVisitor } from \"./getTypeManifestVisitor.js\";\n\nimport { getAccountPageFragment } from \"../fragments/accountPage.js\";\nimport { getErrorPageFragment } from \"../fragments/errorPage.js\";\nimport { getIndexPageFragment, getRootIndexPageFragment } from \"../fragments/indexPage.js\";\nimport { getInstructionPageFragment } from \"../fragments/instructionPage.js\";\nimport { getPdaPageFragment } from \"../fragments/pdaPage.js\";\nimport { getProgramPageFragment } from \"../fragments/programPage.js\";\nimport { getTypePageFragment } from \"../fragments/typePage.js\";\n\n/**\n * Creates a visitor that maps Codama nodes to a RenderMap of Dart files.\n */\nexport function getRenderMapVisitor(\n options: GetRenderMapOptions = {},\n): Visitor<RenderMap<Fragment>, \"rootNode\" | \"programNode\" | \"accountNode\" | \"definedTypeNode\" | \"instructionNode\" | \"pdaNode\"> {\n const nameApi = {\n ...createDartNameApi(),\n ...options.nameApi,\n };\n const dependencyMap = options.dependencyMap ?? {};\n\n const stack = new NodeStack();\n const linkables = new LinkableDictionary();\n\n const typeManifestVisitor = getTypeManifestVisitor({\n nameApi,\n linkables,\n stack,\n });\n\n const scope: RenderScope = {\n nameApi,\n typeManifestVisitor,\n linkables,\n dependencyMap,\n internalImportMap: {},\n };\n\n return pipe(\n staticVisitor(\n () => createRenderMap<Fragment>(),\n {\n keys: [\n \"rootNode\",\n \"programNode\",\n \"accountNode\",\n \"definedTypeNode\",\n \"instructionNode\",\n \"pdaNode\",\n ],\n },\n ),\n (v) =>\n extendVisitor(v, {\n visitRoot(node: RootNode, { self }) {\n const programMaps = [\n visit(node.program, self),\n ...(node.additionalPrograms ?? []).map((p) => visit(p, self)),\n ];\n\n const mergedProgramMap = mergeRenderMapsWithoutCollisions(programMaps);\n const categoryMaps = getSharedCategoryIndexMaps(mergedProgramMap);\n\n return mergeRenderMapsWithoutCollisions([\n mergedProgramMap,\n ...categoryMaps,\n ]);\n },\n\n visitProgram(node: ProgramNode, { self }) {\n const programName = node.name as string;\n const maps: RenderMap<Fragment>[] = [];\n\n // Track file names for barrel exports\n const accountFiles: string[] = [];\n const instructionFiles: string[] = [];\n const typeFiles: string[] = [];\n const pdaFiles: string[] = [];\n const errorFiles: string[] = [];\n const programFiles: string[] = [];\n\n // Visit accounts\n for (const account of node.accounts ?? []) {\n maps.push(visit(account, self));\n accountFiles.push(`${snakeCase(account.name as string)}.dart`);\n }\n\n // Visit instructions\n for (const instruction of node.instructions ?? []) {\n maps.push(visit(instruction, self));\n instructionFiles.push(\n `${snakeCase(instruction.name as string)}.dart`,\n );\n }\n\n // Visit defined types\n for (const definedType of node.definedTypes ?? []) {\n maps.push(visit(definedType, self));\n typeFiles.push(\n `${snakeCase(definedType.name as string)}.dart`,\n );\n }\n\n // Visit PDAs\n for (const pda of node.pdas ?? []) {\n maps.push(visit(pda, self));\n pdaFiles.push(`${snakeCase(pda.name as string)}.dart`);\n }\n\n // Program page\n const programFragment = getProgramPageFragment(node, scope);\n const programFileName = `${snakeCase(programName)}.dart`;\n programFiles.push(programFileName);\n let programMap = createRenderMap<Fragment>();\n programMap = addToRenderMap(programMap, `programs/${programFileName}`, programFragment);\n maps.push(programMap);\n\n // Error page\n const errors = node.errors ?? [];\n if (errors.length > 0) {\n const errorFragment = getErrorPageFragment(node, scope);\n const errorFileName = `${snakeCase(programName)}.dart`;\n errorFiles.push(errorFileName);\n let errorMap = createRenderMap<Fragment>();\n errorMap = addToRenderMap(errorMap, `errors/${errorFileName}`, errorFragment);\n maps.push(errorMap);\n }\n\n // Root barrel\n const categories: string[] = [];\n if (accountFiles.length > 0) categories.push(\"accounts\");\n if (instructionFiles.length > 0) categories.push(\"instructions\");\n if (typeFiles.length > 0) categories.push(\"types\");\n if (pdaFiles.length > 0) categories.push(\"pdas\");\n if (errorFiles.length > 0) categories.push(\"errors\");\n if (programFiles.length > 0) categories.push(\"programs\");\n\n if (categories.length > 0) {\n let rootMap = createRenderMap<Fragment>();\n rootMap = addToRenderMap(\n rootMap,\n `${snakeCase(programName)}.dart`,\n getRootIndexPageFragment(categories),\n );\n maps.push(rootMap);\n }\n\n return mergeRenderMapsWithoutCollisions(maps);\n },\n\n visitAccount(node: AccountNode, { self }) {\n const fileName = `${snakeCase(node.name as string)}.dart`;\n const frag = getAccountPageFragment(node, scope);\n let map = createRenderMap<Fragment>();\n map = addToRenderMap(map, `accounts/${fileName}`, frag);\n return map;\n },\n\n visitDefinedType(node: DefinedTypeNode, { self }) {\n const fileName = `${snakeCase(node.name as string)}.dart`;\n const frag = getTypePageFragment(node, scope);\n let map = createRenderMap<Fragment>();\n map = addToRenderMap(map, `types/${fileName}`, frag);\n return map;\n },\n\n visitInstruction(node: InstructionNode, { self }) {\n const fileName = `${snakeCase(node.name as string)}.dart`;\n const frag = getInstructionPageFragment(node, scope);\n let map = createRenderMap<Fragment>();\n map = addToRenderMap(map, `instructions/${fileName}`, frag);\n return map;\n },\n\n visitPda(node: PdaNode, { self }) {\n const fileName = `${snakeCase(node.name as string)}.dart`;\n const frag = getPdaPageFragment(node, scope);\n let map = createRenderMap<Fragment>();\n map = addToRenderMap(map, `pdas/${fileName}`, frag);\n return map;\n },\n }),\n (v) => recordNodeStackVisitor(v, stack),\n (v) => recordLinkablesOnFirstVisitVisitor(v, linkables),\n );\n}\n\n/**\n * Merges generated files while rejecting ambiguous output paths.\n *\n * Silent overwrites could replace signer checks or data layouts when an\n * untrusted IDL contains duplicate names.\n */\nfunction mergeRenderMapsWithoutCollisions(\n maps: RenderMap<Fragment>[],\n): RenderMap<Fragment> {\n const paths = new Set<string>();\n\n for (const map of maps) {\n for (const path of map.keys()) {\n if (paths.has(path)) {\n throw new Error(`Duplicate generated path \"${path}\"`);\n }\n\n paths.add(path);\n }\n }\n\n return mergeRenderMaps(maps);\n}\n\nfunction getSharedCategoryIndexMaps(\n renderMap: RenderMap<Fragment>,\n): RenderMap<Fragment>[] {\n const categories = new Map<string, Set<string>>();\n const categoryIndexNames: Record<string, string> = {\n accounts: \"accounts.dart\",\n instructions: \"instructions.dart\",\n types: \"types.dart\",\n pdas: \"pdas.dart\",\n errors: \"errors.dart\",\n programs: \"programs.dart\",\n };\n\n for (const renderPath of renderMap.keys()) {\n const match = renderPath.match(\n /^(accounts|instructions|types|pdas|errors|programs)\\/([^/]+\\.dart)$/,\n );\n if (!match) continue;\n\n const [, category, fileName] = match;\n if (!categories.has(category)) {\n categories.set(category, new Set());\n }\n categories.get(category)!.add(fileName);\n }\n\n const maps: RenderMap<Fragment>[] = [];\n for (const [category, files] of categories.entries()) {\n const sortedFiles = [...files].sort();\n let map = createRenderMap<Fragment>();\n map = addToRenderMap(\n map,\n `${category}/${categoryIndexNames[category]}`,\n getIndexPageFragment(sortedFiles),\n );\n maps.push(map);\n }\n\n return maps;\n}\n","import { existsSync, mkdirSync, rmSync, writeFileSync } from \"node:fs\";\nimport { join, dirname, relative, posix } from \"node:path\";\n\nimport { type RootNode } from \"@codama/nodes\";\nimport { rootNodeVisitor, visit } from \"@codama/visitors-core\";\nimport { deleteDirectory, writeRenderMap } from \"@codama/renderers-core\";\n\nimport type { Fragment } from \"../utils/fragment.js\";\nimport type { RenderOptions } from \"../utils/options.js\";\nimport { DartImportMap, DART_EXTERNAL_PACKAGE_MAP } from \"../utils/importMap.js\";\nimport { formatDartDirectory } from \"../utils/formatCode.js\";\nimport { normalizeRootNode } from \"../utils/normalizeRootNode.js\";\nimport { getRenderMapVisitor } from \"./getRenderMapVisitor.js\";\n\n/**\n * Creates a visitor that renders Codama nodes as Dart files.\n *\n * @param outputDir - The directory to write generated files into (e.g., 'lib/src/generated')\n * @param options - Rendering options\n */\nexport function renderVisitor(\n outputDir: string,\n options: RenderOptions = {},\n) {\n const {\n deleteFolderBeforeRendering = true,\n formatCode = false,\n nameApi,\n dependencyMap,\n } = options;\n\n return rootNodeVisitor((root: RootNode) => {\n const normalizedRoot = normalizeRootNode(root);\n\n // 2. Build the render map\n const renderMap = visit(\n normalizedRoot,\n getRenderMapVisitor({ nameApi, dependencyMap }),\n );\n\n // 3. Build a map of definedType module keys to their render map paths\n const typePathMap: Record<string, string> = {};\n for (const renderPath of renderMap.keys()) {\n const match = renderPath.match(/^(?:.*\\/)?types\\/([a-z0-9_]+)\\.dart$/);\n if (match) {\n typePathMap[`definedType:${match[1]}`] = renderPath;\n }\n }\n\n // Resolve every file before deleting previous output, so invalid IDLs fail safely.\n const files: [string, string][] = [];\n for (const [filePath, frag] of renderMap.entries()) {\n const fullPath = join(outputDir, filePath);\n // Compute per-file internal import map (relative paths to defined types)\n const fileDir = dirname(filePath);\n const internalMap: Record<string, string> = {};\n for (const [key, typePath] of Object.entries(typePathMap)) {\n // Keep the key resolved without generating a self-import.\n if (typePath === filePath) {\n internalMap[key] = \"\";\n continue;\n }\n\n let rel = posix.relative(fileDir, typePath);\n if (!rel.startsWith(\".\")) {\n rel = `./${rel}`;\n }\n internalMap[key] = rel;\n }\n\n // Resolve fragment content with imports\n const content = resolveFragmentContent(frag, dependencyMap ?? {}, internalMap);\n files.push([fullPath, content]);\n }\n\n if (deleteFolderBeforeRendering && existsSync(outputDir)) {\n deleteDirectory(outputDir);\n }\n\n for (const [fullPath, content] of files) {\n mkdirSync(dirname(fullPath), { recursive: true });\n writeFileSync(fullPath, content, \"utf-8\");\n }\n\n // 4. Optionally format\n if (formatCode) {\n formatDartDirectory(outputDir);\n }\n });\n}\n\n/**\n * Resolve a fragment into its final Dart file content,\n * prepending the resolved import statements.\n */\nfunction resolveFragmentContent(\n frag: Fragment,\n dependencyMap: Record<string, string>,\n internalMap: Record<string, string> = {},\n): string {\n const { content, imports } = frag;\n\n const importStr = imports.toString({\n ...internalMap,\n ...dependencyMap,\n });\n\n if (!importStr) {\n return content + \"\\n\";\n }\n\n // Split content into header comment and rest\n const lines = content.split(\"\\n\");\n const headerLines: string[] = [];\n let restIndex = 0;\n\n for (let i = 0; i < lines.length; i++) {\n if (\n lines[i].startsWith(\"//\") ||\n lines[i].trim() === \"\"\n ) {\n headerLines.push(lines[i]);\n restIndex = i + 1;\n } else {\n break;\n }\n }\n\n const header = headerLines.join(\"\\n\");\n const rest = lines.slice(restIndex).join(\"\\n\");\n\n // Clean up: remove the use() placeholder text from content\n const cleanContent = cleanFragmentContent(rest);\n\n return `${header}\\n\\n${importStr}\\n\\n${cleanContent}\\n`;\n}\n\n/**\n * Remove use() placeholder fragments from content.\n * The use() function produces just the type name in content,\n * but when used standalone (not in a template), it leaves\n * lines like just \"Uint8List\" that need to be removed.\n */\nfunction cleanFragmentContent(content: string): string {\n // Remove lines that are just standalone identifier names from use() calls.\n // These are artifacts of the import tracking pattern where use() is called\n // purely for its import side-effect. Matches: PascalCase, camelCase,\n // and multi-word identifiers like \"getStructEncoder\".\n const lines = content.split(\"\\n\");\n const cleanLines = lines.filter((line) => {\n const trimmed = line.trim();\n // Skip lines that are a single identifier (no spaces, no punctuation)\n if (/^[a-zA-Z][a-zA-Z0-9]*$/.test(trimmed)) {\n return false;\n }\n return true;\n });\n return cleanLines.join(\"\\n\");\n}\n","export { renderVisitor } from \"./visitors/renderVisitor.js\";\nexport { getRenderMapVisitor } from \"./visitors/getRenderMapVisitor.js\";\nexport { getTypeManifestVisitor } from \"./visitors/getTypeManifestVisitor.js\";\nexport { DartImportMap, DART_EXTERNAL_PACKAGE_MAP } from \"./utils/importMap.js\";\nexport { createDartNameApi } from \"./utils/nameTransformers.js\";\nexport { normalizeRootNode } from \"./utils/normalizeRootNode.js\";\nexport type { DartNameApi } from \"./utils/nameTransformers.js\";\nexport type { RenderOptions, GetRenderMapOptions, RenderScope } from \"./utils/options.js\";\nexport type { TypeManifest } from \"./utils/typeManifest.js\";\nexport type { Fragment } from \"./utils/fragment.js\";\n\n// Default export for Codama CLI integration\nimport { renderVisitor } from \"./visitors/renderVisitor.js\";\nexport default renderVisitor;\n"]}