codama-renderers-dart 0.2.0 → 0.2.1
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.
- package/dist/index.browser.cjs +2102 -0
- package/dist/index.browser.cjs.map +1 -0
- package/dist/index.browser.js +2092 -0
- package/dist/index.browser.js.map +1 -0
- package/dist/index.node.cjs +2102 -0
- package/dist/index.node.cjs.map +1 -0
- package/dist/index.node.js +2092 -0
- package/dist/index.node.js.map +1 -0
- package/dist/index.react-native.js +2092 -0
- package/dist/index.react-native.js.map +1 -0
- package/dist/types/fragments/accountPage.d.ts +8 -0
- package/dist/types/fragments/accountPage.d.ts.map +1 -0
- package/dist/types/fragments/discriminatorConstants.d.ts +8 -0
- package/dist/types/fragments/discriminatorConstants.d.ts.map +1 -0
- package/dist/types/fragments/errorPage.d.ts +8 -0
- package/dist/types/fragments/errorPage.d.ts.map +1 -0
- package/dist/types/fragments/index.d.ts +9 -0
- package/dist/types/fragments/index.d.ts.map +1 -0
- package/dist/types/fragments/indexPage.d.ts +10 -0
- package/dist/types/fragments/indexPage.d.ts.map +1 -0
- package/dist/types/fragments/instructionPage.d.ts +8 -0
- package/dist/types/fragments/instructionPage.d.ts.map +1 -0
- package/dist/types/fragments/pdaPage.d.ts +8 -0
- package/dist/types/fragments/pdaPage.d.ts.map +1 -0
- package/dist/types/fragments/programPage.d.ts +8 -0
- package/dist/types/fragments/programPage.d.ts.map +1 -0
- package/dist/types/fragments/typePage.d.ts +8 -0
- package/dist/types/fragments/typePage.d.ts.map +1 -0
- package/dist/types/index.d.ts +12 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/utils/codecs.d.ts +10 -0
- package/dist/types/utils/codecs.d.ts.map +1 -0
- package/dist/types/utils/formatCode.d.ts +10 -0
- package/dist/types/utils/formatCode.d.ts.map +1 -0
- package/dist/types/utils/fragment.d.ts +31 -0
- package/dist/types/utils/fragment.d.ts.map +1 -0
- package/dist/types/utils/importMap.d.ts +40 -0
- package/dist/types/utils/importMap.d.ts.map +1 -0
- package/dist/types/utils/index.d.ts +8 -0
- package/dist/types/utils/index.d.ts.map +1 -0
- package/dist/types/utils/nameTransformers.d.ts +64 -0
- package/dist/types/utils/nameTransformers.d.ts.map +1 -0
- package/dist/types/utils/options.d.ts +41 -0
- package/dist/types/utils/options.d.ts.map +1 -0
- package/dist/types/utils/typeManifest.d.ts +21 -0
- package/dist/types/utils/typeManifest.d.ts.map +1 -0
- package/dist/types/visitors/getRenderMapVisitor.d.ts +9 -0
- package/dist/types/visitors/getRenderMapVisitor.d.ts.map +1 -0
- package/dist/types/visitors/getTypeManifestVisitor.d.ts +19 -0
- package/dist/types/visitors/getTypeManifestVisitor.d.ts.map +1 -0
- package/dist/types/visitors/index.d.ts +4 -0
- package/dist/types/visitors/index.d.ts.map +1 -0
- package/dist/types/visitors/renderVisitor.d.ts +9 -0
- package/dist/types/visitors/renderVisitor.d.ts.map +1 -0
- package/package.json +6 -11
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/formatCode.ts","../src/utils/nameTransformers.ts","../src/utils/codecs.ts","../src/utils/importMap.ts","../src/utils/fragment.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","staticVisitor","CodamaError","CODAMA_ERROR__UNEXPECTED_NODE_KIND","extendVisitor","visit","resolveNestedTypeNode","exports","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 --fix -\", {\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 try {\n execSync(`dart format --fix \"${dir}\"`, {\n encoding: \"utf-8\",\n timeout: 60_000,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n } catch {\n // Silently ignore if dart format is not available\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/** Convert a string to camelCase */\nexport function camelCase(str: string): string {\n const pascal = pascalCase(str);\n return pascal.charAt(0).toLowerCase() + pascal.slice(1);\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): `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) => 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 uris.add(internalMap[module]);\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 // Assume it's already a raw URI (e.g., \"package:...\" or relative path)\n else {\n uris.add(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","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","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 type: dartType === \"BigInt\"\n ? use(\"BigInt\", \"dartTypedData\")\n : 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 sizeExpr = getArraySizeExpression(node);\n\n return {\n type: fragment`List<${itemManifest.type}>`,\n encoder: fragment`${use(\n \"getArrayEncoder\",\n \"solanaCodecsDataStructures\",\n )}(${itemManifest.encoder}${sizeExpr})`,\n decoder: fragment`${use(\n \"getArrayDecoder\",\n \"solanaCodecsDataStructures\",\n )}(${itemManifest.decoder}${sizeExpr})`,\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 sizeExpr = getMapSizeExpression(node);\n\n return {\n type: fragment`Map<${keyManifest.type}, ${valueManifest.type}>`,\n encoder: fragment`${use(\n \"getMapEncoder\",\n \"solanaCodecsDataStructures\",\n )}(${keyManifest.encoder}, ${valueManifest.encoder}${sizeExpr})`,\n decoder: fragment`${use(\n \"getMapDecoder\",\n \"solanaCodecsDataStructures\",\n )}(${keyManifest.decoder}, ${valueManifest.decoder}${sizeExpr})`,\n value: emptyTypeManifest().value,\n isEnum: false,\n };\n },\n\n visitSetType(node: SetTypeNode, { self }) {\n const itemManifest = visit(node.item, self);\n const sizeExpr = getSetSizeExpression(node);\n\n return {\n type: fragment`Set<${itemManifest.type}>`,\n encoder: fragment`${use(\n \"getSetEncoder\",\n \"solanaCodecsDataStructures\",\n )}(${itemManifest.encoder}${sizeExpr})`,\n decoder: fragment`${use(\n \"getSetDecoder\",\n \"solanaCodecsDataStructures\",\n )}(${itemManifest.decoder}${sizeExpr})`,\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 encoderFrag = fragment`${use(\n \"getTupleEncoder\",\n \"solanaCodecsDataStructures\",\n )}([${fragmentFromString(encoderListStr)}])`;\n for (const e of encoderList) {\n encoderFrag.imports.mergeWith(e.imports);\n }\n\n const decoderListStr = decoderList.map((d) => d.content).join(\", \");\n const decoderFrag = fragment`${use(\n \"getTupleDecoder\",\n \"solanaCodecsDataStructures\",\n )}([${fragmentFromString(decoderListStr)}])`;\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 fields = node.fields.map((f) => visit(f, self));\n const fieldNames = node.fields.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 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\n return {\n type: fragment`${itemManifest.type}?`,\n encoder: fragment`${use(\n \"getNullableEncoder\",\n \"solanaCodecsDataStructures\",\n )}(${itemManifest.encoder}${fragmentFromString(prefixExpr)})`,\n decoder: fragment`${use(\n \"getNullableDecoder\",\n \"solanaCodecsDataStructures\",\n )}(${itemManifest.decoder}${fragmentFromString(prefixDecoderExpr)})`,\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\n return {\n type: fragment`${itemManifest.type}?`,\n encoder: fragment`${use(\n \"getNullableEncoder\",\n \"solanaCodecsDataStructures\",\n )}(${itemManifest.encoder}, hasPrefix: false)`,\n decoder: fragment`${use(\n \"getNullableDecoder\",\n \"solanaCodecsDataStructures\",\n )}(${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\n return {\n type: fragment`${itemManifest.type}?`,\n encoder: fragment`${use(\n \"getNullableEncoder\",\n \"solanaCodecsDataStructures\",\n )}(${itemManifest.encoder}, hasPrefix: false, noneValue: const ZeroesNoneValue())`,\n decoder: fragment`${use(\n \"getNullableDecoder\",\n \"solanaCodecsDataStructures\",\n )}(${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))})`,\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 const prefixManifest = visit(node.prefix, self);\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) => visit(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) => visit(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(node: ArrayTypeNode): 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(get${getNumberCodecName(resolvedPrefix.format)}Encoder())`;\n }\n default:\n return \"\";\n }\n}\n\nfunction getMapSizeExpression(node: MapTypeNode): 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(get${getNumberCodecName(resolvedPrefix.format)}Encoder())`;\n }\n default:\n return \"\";\n }\n}\n\nfunction getSetSizeExpression(node: SetTypeNode): 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(get${getNumberCodecName(resolvedPrefix.format)}Encoder())`;\n }\n default:\n return \"\";\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 { 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 const dataNode = resolveNestedTypeNode(node.data);\n\n // Fields from the struct data\n const fields = dataNode.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 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\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 hashFields = fields\n .map((f: StructFieldTypeNode) => camelCase(f.name as string))\n .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(\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 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\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 const ${fragmentFromString(typeName)}({\n${fragmentFromString(ctorParams)}\n });\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 => Object.hash(${fragmentFromString(hashFields)});\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 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\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\n return result;\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 type {\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 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 { 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 args = (node.arguments ?? []).filter(\n (arg) => !isDiscriminatorArg(arg, node),\n );\n const allArgs = node.arguments ?? [];\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 = allArgs.map((arg) => ({\n arg,\n manifest: visit(arg.type, scope.typeManifestVisitor),\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 }) => {\n const fieldName = camelCase(arg.name as string);\n if (isDiscriminatorArg(arg, node)) {\n return ` this.${fieldName} = ${getDiscriminatorDefault(arg, node)},`;\n }\n return ` required this.${fieldName},`;\n })\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(\n (arg) =>\n ` '${arg.name as string}': value.${camelCase(arg.name as string)},`,\n )\n .join(\"\\n\");\n\n const fromMapFields = allArgManifests\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 dataEncoderName = `get${typeName}InstructionDataEncoder`;\n const dataDecoderName = `get${typeName}InstructionDataDecoder`;\n const dataCodecName = `get${typeName}InstructionDataCodec`;\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 hasDefault = arg.defaultValue != null;\n if (hasDefault) {\n return ` ${manifest.type.content}? ${fieldName},`;\n }\n return ` required ${manifest.type.content} ${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 return ` if (${fieldName} != null) AccountMeta(address: ${fieldName}, role: ${role}),`;\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 (isDiscriminatorArg(arg, node)) {\n return \"\"; // Use default\n }\n return ` ${fieldName}: ${fieldName}${arg.defaultValue != null ? ` ?? ${getDefaultValue(arg)}` : \"\"},`;\n })\n .filter(Boolean)\n .join(\"\\n\");\n\n // Discriminator\n const discFragment = getDiscriminatorConstantsFragment(node, scope);\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 const ${fragmentFromString(dataClassName)}({\n${fragmentFromString(dataCtorParams)}\n });\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 return transformDecoder(\n structDecoder,\n (Map<String, Object?> map, Uint8List bytes, int offset) => ${fragmentFromString(dataClassName)}(\n${fragmentFromString(fromMapFields)}\n ),\n );\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 programAddress,\n${fragmentFromString(accountParams)}\n${fragmentFromString(argParams)}\n}) {\n final data = ${fragmentFromString(dataClassName)}(\n${fragmentFromString(dataConstruction)}\n );\n\n return Instruction(\n programAddress: programAddress,\n accounts: [\n${fragmentFromString(accountMetas)}\n ],\n data: ${fragmentFromString(dataEncoderName)}().encode(data),\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\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 getDiscriminatorDefault(\n arg: InstructionArgumentNode,\n _node: InstructionNode,\n): string {\n if (arg.defaultValue) {\n if (arg.defaultValue.kind === \"numberValueNode\") {\n return String(arg.defaultValue.number);\n }\n }\n return \"0\";\n}\n\nfunction getDefaultValue(arg: InstructionArgumentNode): string {\n if (!arg.defaultValue) return \"null\";\n const dv = arg.defaultValue;\n switch (dv.kind) {\n case \"numberValueNode\":\n return String(dv.number);\n case \"booleanValueNode\":\n return String(dv.boolean);\n case \"stringValueNode\":\n return `'${dv.string}'`;\n case \"publicKeyValueNode\":\n return `Address('${dv.publicKey}')`;\n case \"noneValueNode\":\n return \"null\";\n default:\n return \"null\";\n }\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\";\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\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 const seedFieldDecls = variableSeeds\n .map((s) => {\n if (s.kind !== \"variablePdaSeedNode\") return \"\";\n const manifest = visit(s.type, scope.typeManifestVisitor);\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 seed bytes list\n const seedBytesList: string[] = [];\n for (const seed of seeds) {\n if (seed.kind === \"constantPdaSeedNode\") {\n if (seed.value.kind === \"bytesValueNode\") {\n seedBytesList.push(` ...${bytesValueToDart(seed.value.data)},`);\n } else if (seed.value.kind === \"stringValueNode\") {\n seedBytesList.push(` ...utf8.encode('${seed.value.string}'),`);\n } else if (seed.value.kind === \"publicKeyValueNode\") {\n seedBytesList.push(` ...getAddressEncoder().encode(Address('${seed.value.publicKey}')),`);\n } else if (seed.value.kind === \"numberValueNode\") {\n const manifest = visit(seed.type, scope.typeManifestVisitor);\n seedBytesList.push(` ...${manifest.encoder.content}.encode(${seed.value.number}),`);\n }\n } else if (seed.kind === \"variablePdaSeedNode\") {\n const manifest = visit(seed.type, scope.typeManifestVisitor);\n seedBytesList.push(\n ` ...${manifest.encoder.content}.encode(seeds.${camelCase(seed.name as string)}),`,\n );\n }\n }\n\n // Program address parameter\n const programIdParam = node.programId\n ? `Address programAddress = const Address('${node.programId}')`\n : \"required Address programAddress\";\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(\"Address\", \"solanaAddresses\")}\n${use(\"getAddressEncoder\", \"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 seedBytes = <int>[\n${fragmentFromString(seedBytesList.join(\"\\n\"))}\n ];\n\n // TODO: Call getProgramDerivedAddress with seedBytes and programAddress\n throw UnimplementedError('PDA derivation not yet implemented');\n}`);\n\n return mergeFragments(parts, (cs) => cs.join(\"\\n\"));\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 type { 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 } from \"../utils/nameTransformers.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 parts: Fragment[] = [\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\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 identifier enum\n const instructions = node.instructions ?? [];\n if (instructions.length > 0) {\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(pascalCase(name))} program.\nenum ${fragmentFromString(pascalCase(name))}Instruction {\n${fragmentFromString(instrVariants)}\n}`);\n }\n\n return mergeFragments(parts, (cs) => cs.join(\"\\n\"));\n}\n","import type { DefinedTypeNode, StructFieldTypeNode, TypeNode } 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 isScalar = typeNode.variants.every(\n (v) => v.kind === \"enumEmptyVariantTypeNode\",\n );\n if (isScalar) {\n return getScalarEnumPageFragment(node, scope);\n }\n return getDataEnumPageFragment(node, 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 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 = enumNode.variants.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\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) => value.index,\n );\n}\n\nDecoder<${fragmentFromString(typeName)}> ${fragmentFromString(decoderName)}() {\n return transformDecoder(\n get${fragmentFromString(sizeCodecName)}Decoder(),\n (int value, Uint8List bytes, int offset) => ${fragmentFromString(typeName)}.values[value],\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 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 // 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 < enumNode.variants.length; i++) {\n const variant = enumNode.variants[i];\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}.${variantClassName}()';\n}`);\n\n encoderVariants.push(\n `(${i}, getStructEncoder(<(String, Encoder<Object?>)>[]))`,\n );\n decoderVariants.push(\n `(${i}, getStructDecoder(<(String, Decoder<Object?>)>[]).map((_) => const ${variantClassName}()))`,\n );\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\n const eqChecks = fields\n .map((f: StructFieldTypeNode) => `${camelCase(f.name as string)} == other.${camelCase(f.name as string)}`)\n .join(\" &&\\n \");\n\n const hashFields = fields\n .map((f: StructFieldTypeNode) => camelCase(f.name as string))\n .join(\", \");\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 const ${variantClassName}({\n${ctorParams}\n });\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 => Object.hash(${hashFields});\n\n @override\n String toString() => '${typeName}.${variantClassName}(${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}, transformEncoder(getStructEncoder([${encFields}]), (${variantClassName} value) => <String, Object?>{${toMapFields}}))`,\n );\n decoderVariants.push(\n `(${i}, transformDecoder(getStructDecoder([${decFields}]), (Map<String, Object?> map, Uint8List bytes, int offset) => ${variantClassName}(${fromMapFields})))`,\n );\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}.${variantClassName}(\\$value)';\n}`);\n encoderVariants.push(\n `(${i}, transformEncoder(${manifest.encoder.content}, (${variantClassName} value) => value.value))`,\n );\n decoderVariants.push(\n `(${i}, transformDecoder(${manifest.decoder.content}, (${manifest.type.content} value, Uint8List bytes, int offset) => ${variantClassName}(value)))`,\n );\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(\"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(\"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\"))}\n\nEncoder<${fragmentFromString(typeName)}> ${fragmentFromString(encoderName)}() {\n return getDiscriminatedUnionEncoder([\n ${fragmentFromString(encoderVariants.join(\",\\n \"))},\n ], size: get${fragmentFromString(sizeCodecName)}Encoder());\n}\n\nDecoder<${fragmentFromString(typeName)}> ${fragmentFromString(decoderName)}() {\n return getDiscriminatedUnionDecoder([\n ${fragmentFromString(decoderVariants.join(\",\\n \"))},\n ], size: get${fragmentFromString(sizeCodecName)}Decoder());\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\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\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 hashFields = fields\n .map((f: StructFieldTypeNode) => camelCase(f.name as string))\n .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 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 const ${fragmentFromString(typeName)}({\n${fragmentFromString(ctorParams)}\n });\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 => Object.hash(${fragmentFromString(hashFields)});\n\n @override\n String toString() => '${fragmentFromString(typeName)}(${fragmentFromString(toStringFields)})';\n}\n\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\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 return mergeRenderMaps(programMaps);\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 // Barrel exports\n const categories: string[] = [];\n\n if (accountFiles.length > 0) {\n categories.push(\"accounts\");\n let indexMap = createRenderMap<Fragment>();\n indexMap = addToRenderMap(\n indexMap,\n \"accounts/accounts.dart\",\n getIndexPageFragment(accountFiles),\n );\n maps.push(indexMap);\n }\n\n if (instructionFiles.length > 0) {\n categories.push(\"instructions\");\n let indexMap = createRenderMap<Fragment>();\n indexMap = addToRenderMap(\n indexMap,\n \"instructions/instructions.dart\",\n getIndexPageFragment(instructionFiles),\n );\n maps.push(indexMap);\n }\n\n if (typeFiles.length > 0) {\n categories.push(\"types\");\n let indexMap = createRenderMap<Fragment>();\n indexMap = addToRenderMap(\n indexMap,\n \"types/types.dart\",\n getIndexPageFragment(typeFiles),\n );\n maps.push(indexMap);\n }\n\n if (pdaFiles.length > 0) {\n categories.push(\"pdas\");\n let indexMap = createRenderMap<Fragment>();\n indexMap = addToRenderMap(\n indexMap,\n \"pdas/pdas.dart\",\n getIndexPageFragment(pdaFiles),\n );\n maps.push(indexMap);\n }\n\n if (errorFiles.length > 0) {\n categories.push(\"errors\");\n let indexMap = createRenderMap<Fragment>();\n indexMap = addToRenderMap(\n indexMap,\n \"errors/errors.dart\",\n getIndexPageFragment(errorFiles),\n );\n maps.push(indexMap);\n }\n\n if (programFiles.length > 0) {\n categories.push(\"programs\");\n let indexMap = createRenderMap<Fragment>();\n indexMap = addToRenderMap(\n indexMap,\n \"programs/programs.dart\",\n getIndexPageFragment(programFiles),\n );\n maps.push(indexMap);\n }\n\n // Root barrel\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","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 { 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 // 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 root,\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-z_]+)\\.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 // Don't import yourself\n if (typePath === filePath) continue;\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 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"]}
|