@codama/renderers-rust 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -47,6 +47,7 @@ The `renderVisitor` accepts the following options.
47
47
  | `dependencyMap` | `Record<string, string>` | `{}` | A mapping between import aliases and their actual crate name or path in Rust. |
48
48
  | `renderParentInstructions` | `boolean` | `false` | When using nested instructions, whether the parent instructions should also be rendered. When set to `false` (default), only the instruction leaves are being rendered. |
49
49
  | `traitOptions` | [`TraitOptions`](#trait-options) | `DEFAULT_TRAIT_OPTIONS` | A set of options that can be used to configure how traits are rendered for every Rust types. See [documentation below](#trait-options) for more information. |
50
+ | `anchorTraits` | `boolean` | `true` | Whether to generate Anchor traits `impl` for account types. |
50
51
 
51
52
  ## Trait Options
52
53
 
@@ -269,7 +269,7 @@ function getTypeManifestVisitor(options) {
269
269
  ...mergeManifests(values),
270
270
  type: values.map((v) => v.type).join("\n")
271
271
  }),
272
- [...nodes.REGISTERED_TYPE_NODE_KINDS, "definedTypeLinkNode", "definedTypeNode", "accountNode"]
272
+ { keys: [...nodes.REGISTERED_TYPE_NODE_KINDS, "definedTypeLinkNode", "definedTypeNode", "accountNode"] }
273
273
  ),
274
274
  (v) => visitorsCore.extendVisitor(v, {
275
275
  visitAccount(account, { self }) {
@@ -757,22 +757,23 @@ function renderValueNodeVisitor(getImportFrom, useStr = false) {
757
757
  // src/getRenderMapVisitor.ts
758
758
  function getRenderMapVisitor(options = {}) {
759
759
  const linkables = new visitorsCore.LinkableDictionary();
760
+ const stack = new visitorsCore.NodeStack();
760
761
  let program = null;
761
762
  const renderParentInstructions = options.renderParentInstructions ?? false;
762
763
  const dependencyMap = options.dependencyMap ?? {};
763
764
  const getImportFrom = getImportFromFactory(options.linkOverrides ?? {});
764
765
  const getTraitsFromNode2 = getTraitsFromNodeFactory(options.traitOptions);
765
766
  const typeManifestVisitor = getTypeManifestVisitor({ getImportFrom, getTraitsFromNode: getTraitsFromNode2 });
767
+ const anchorTraits = options.anchorTraits ?? true;
766
768
  return visitorsCore.pipe(
767
- visitorsCore.staticVisitor(
768
- () => new renderersCore.RenderMap(),
769
- ["rootNode", "programNode", "instructionNode", "accountNode", "definedTypeNode"]
770
- ),
769
+ visitorsCore.staticVisitor(() => new renderersCore.RenderMap(), {
770
+ keys: ["rootNode", "programNode", "instructionNode", "accountNode", "definedTypeNode"]
771
+ }),
771
772
  (v) => visitorsCore.extendVisitor(v, {
772
773
  visitAccount(node) {
773
774
  const typeManifest = visitorsCore.visit(node, typeManifestVisitor);
774
775
  const seedsImports = new ImportMap();
775
- const pda = node.pda ? linkables.get(node.pda) : void 0;
776
+ const pda = node.pda ? linkables.get([...stack.getPath(), node.pda]) : void 0;
776
777
  const pdaSeeds = pda?.seeds ?? [];
777
778
  const seeds = pdaSeeds.map((seed) => {
778
779
  if (nodes.isNode(seed, "variablePdaSeedNode")) {
@@ -800,6 +801,7 @@ function getRenderMapVisitor(options = {}) {
800
801
  `accounts/${nodes.snakeCase(node.name)}.rs`,
801
802
  render("accountsPage.njk", {
802
803
  account: node,
804
+ anchorTraits,
803
805
  constantSeeds,
804
806
  hasVariableSeeds,
805
807
  imports: imports.remove(`generatedAccounts::${nodes.pascalCase(node.name)}`).toString(dependencyMap),
@@ -941,7 +943,8 @@ function getRenderMapVisitor(options = {}) {
941
943
  return map.add("mod.rs", render("rootMod.njk", ctx)).mergeWith(...nodes.getAllPrograms(node).map((p) => visitorsCore.visit(p, self)));
942
944
  }
943
945
  }),
944
- (v) => visitorsCore.recordLinkablesVisitor(v, linkables)
946
+ (v) => visitorsCore.recordNodeStackVisitor(v, stack),
947
+ (v) => visitorsCore.recordLinkablesOnFirstVisitVisitor(v, linkables)
945
948
  );
946
949
  }
947
950
  function getConflictsForInstructionAccountsAndArgs(instruction) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ImportMap.ts","../src/utils/codecs.ts","../src/utils/linkOverrides.ts","../src/utils/render.ts","../src/utils/traitOptions.ts","../src/getTypeManifestVisitor.ts","../src/renderValueNodeVisitor.ts","../src/getRenderMapVisitor.ts","../src/renderVisitor.ts"],"names":["getUtf8Encoder","getBase16Encoder","getBase58Encoder","getBase64Encoder","CodamaError","CODAMA_ERROR__UNEXPECTED_NODE_KIND","join","nunjucks","pascalCase","camelCase","snakeCase","kebabCase","titleCase","assertIsNode","isNode","isScalarEnum","traits","getTraitsFromNode","pipe","mergeVisitor","REGISTERED_TYPE_NODE_KINDS","extendVisitor","visit","resolveNestedTypeNode","remainderCountNode","fixedCountNode","prefixedCountNode","arrayTypeNode","numberTypeNode","CODAMA_ERROR__RENDERERS__UNSUPPORTED_NODE","definedTypeNode","numberValueNode","arrayValueNode","bytesValueNode","LinkableDictionary","staticVisitor","RenderMap","seedManifest","resolvedType","isNodeFilter","logWarn","VALUE_NODES","structTypeNodeFromInstructionArgumentNodes","getAllInstructionsWithSubs","getAllPrograms","getAllAccounts","getAllDefinedTypes","recordLinkablesVisitor","rootNodeVisitor","deleteDirectory","writeRenderMapVisitor","spawnSync","logError"],"mappings":"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","file":"index.node.cjs","sourcesContent":["import { TypeManifest } from './getTypeManifestVisitor';\n\nconst DEFAULT_MODULE_MAP: Record<string, string> = {\n generated: 'crate::generated',\n generatedAccounts: 'crate::generated::accounts',\n generatedErrors: 'crate::generated::errors',\n generatedInstructions: 'crate::generated::instructions',\n generatedTypes: 'crate::generated::types',\n hooked: 'crate::hooked',\n mplEssentials: 'mpl_toolbox',\n mplToolbox: 'mpl_toolbox',\n};\n\nexport class ImportMap {\n protected readonly _imports: Set<string> = new Set();\n\n protected readonly _aliases: Map<string, string> = new Map();\n\n get imports(): Set<string> {\n return this._imports;\n }\n\n get aliases(): Map<string, string> {\n return this._aliases;\n }\n\n add(imports: Set<string> | string[] | string): ImportMap {\n const newImports = typeof imports === 'string' ? [imports] : imports;\n newImports.forEach(i => this._imports.add(i));\n return this;\n }\n\n remove(imports: Set<string> | string[] | string): ImportMap {\n const importsToRemove = typeof imports === 'string' ? [imports] : imports;\n importsToRemove.forEach(i => this._imports.delete(i));\n return this;\n }\n\n mergeWith(...others: ImportMap[]): ImportMap {\n others.forEach(other => {\n this.add(other._imports);\n other._aliases.forEach((alias, importName) => this.addAlias(importName, alias));\n });\n return this;\n }\n\n mergeWithManifest(manifest: TypeManifest): ImportMap {\n return this.mergeWith(manifest.imports);\n }\n\n addAlias(importName: string, alias: string): ImportMap {\n this._aliases.set(importName, alias);\n return this;\n }\n\n isEmpty(): boolean {\n return this._imports.size === 0;\n }\n\n resolveDependencyMap(dependencies: Record<string, string>): ImportMap {\n const dependencyMap = { ...DEFAULT_MODULE_MAP, ...dependencies };\n const newImportMap = new ImportMap();\n const resolveDependency = (i: string): string => {\n const dependencyKey = Object.keys(dependencyMap).find(key => i.startsWith(`${key}::`));\n if (!dependencyKey) return i;\n const dependencyValue = dependencyMap[dependencyKey];\n return dependencyValue + i.slice(dependencyKey.length);\n };\n this._imports.forEach(i => newImportMap.add(resolveDependency(i)));\n this._aliases.forEach((alias, i) => newImportMap.addAlias(resolveDependency(i), alias));\n return newImportMap;\n }\n\n toString(dependencies: Record<string, string>): string {\n const resolvedMap = this.resolveDependencyMap(dependencies);\n const importStatements = [...resolvedMap.imports].map(i => {\n const alias = resolvedMap.aliases.get(i);\n if (alias) return `use ${i} as ${alias};`;\n return `use ${i};`;\n });\n return importStatements.join('\\n');\n }\n}\n","import { BytesValueNode } from '@codama/nodes';\nimport { getBase16Encoder, getBase58Encoder, getBase64Encoder, getUtf8Encoder } from '@solana/codecs-strings';\n\nexport function getBytesFromBytesValueNode(node: BytesValueNode): Uint8Array {\n switch (node.encoding) {\n case 'utf8':\n return getUtf8Encoder().encode(node.data) as Uint8Array;\n case 'base16':\n return getBase16Encoder().encode(node.data) as Uint8Array;\n case 'base58':\n return getBase58Encoder().encode(node.data) as Uint8Array;\n case 'base64':\n default:\n return getBase64Encoder().encode(node.data) as Uint8Array;\n }\n}\n","import { CODAMA_ERROR__UNEXPECTED_NODE_KIND, CodamaError } from '@codama/errors';\nimport {\n AccountLinkNode,\n DefinedTypeLinkNode,\n InstructionLinkNode,\n PdaLinkNode,\n ProgramLinkNode,\n ResolverValueNode,\n} from '@codama/nodes';\n\nexport type LinkOverrides = {\n accounts?: Record<string, string>;\n definedTypes?: Record<string, string>;\n instructions?: Record<string, string>;\n pdas?: Record<string, string>;\n programs?: Record<string, string>;\n resolvers?: Record<string, string>;\n};\n\ntype OverridableNodes =\n | AccountLinkNode\n | DefinedTypeLinkNode\n | InstructionLinkNode\n | PdaLinkNode\n | ProgramLinkNode\n | ResolverValueNode;\n\nexport type GetImportFromFunction = (node: OverridableNodes, fallback?: string) => string;\n\nexport function getImportFromFactory(overrides: LinkOverrides): GetImportFromFunction {\n const linkOverrides = {\n accounts: overrides.accounts ?? {},\n definedTypes: overrides.definedTypes ?? {},\n instructions: overrides.instructions ?? {},\n pdas: overrides.pdas ?? {},\n programs: overrides.programs ?? {},\n resolvers: overrides.resolvers ?? {},\n };\n\n return (node: OverridableNodes) => {\n const kind = node.kind;\n switch (kind) {\n case 'accountLinkNode':\n return linkOverrides.accounts[node.name] ?? 'generatedAccounts';\n case 'definedTypeLinkNode':\n return linkOverrides.definedTypes[node.name] ?? 'generatedTypes';\n case 'instructionLinkNode':\n return linkOverrides.instructions[node.name] ?? 'generatedInstructions';\n case 'pdaLinkNode':\n return linkOverrides.pdas[node.name] ?? 'generatedAccounts';\n case 'programLinkNode':\n return linkOverrides.programs[node.name] ?? 'generatedPrograms';\n case 'resolverValueNode':\n return linkOverrides.resolvers[node.name] ?? 'hooked';\n default:\n throw new CodamaError(CODAMA_ERROR__UNEXPECTED_NODE_KIND, {\n expectedKinds: [\n 'AccountLinkNode',\n 'DefinedTypeLinkNode',\n 'InstructionLinkNode',\n 'PdaLinkNode',\n 'ProgramLinkNode',\n 'resolverValueNode',\n ],\n kind: kind satisfies never,\n node,\n });\n }\n };\n}\n","import { dirname as pathDirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport { camelCase, kebabCase, pascalCase, snakeCase, titleCase } from '@codama/nodes';\nimport nunjucks, { ConfigureOptions as NunJucksOptions } from 'nunjucks';\n\nexport function rustDocblock(docs: string[]): string {\n if (docs.length <= 0) return '';\n const lines = docs.map(doc => `/// ${doc}`);\n return `${lines.join('\\n')}\\n`;\n}\n\nexport const render = (template: string, context?: object, options?: NunJucksOptions): string => {\n // @ts-expect-error import.meta will be used in the right environment.\n const dirname = __ESM__ ? pathDirname(fileURLToPath(import.meta.url)) : __dirname;\n const templates = __TEST__ ? join(dirname, '..', '..', 'public', 'templates') : join(dirname, 'templates'); // Path to templates from bundled output file.\n const env = nunjucks.configure(templates, { autoescape: false, trimBlocks: true, ...options });\n env.addFilter('pascalCase', pascalCase);\n env.addFilter('camelCase', camelCase);\n env.addFilter('snakeCase', snakeCase);\n env.addFilter('kebabCase', kebabCase);\n env.addFilter('titleCase', titleCase);\n env.addFilter('rustDocblock', rustDocblock);\n return env.render(template, context);\n};\n","import { AccountNode, assertIsNode, camelCase, DefinedTypeNode, isNode, isScalarEnum } from '@codama/nodes';\n\nimport { ImportMap } from '../ImportMap';\n\nexport type TraitOptions = {\n /** The default traits to implement for all types. */\n baseDefaults?: string[];\n /**\n * The default traits to implement for data enums only — on top of the base defaults.\n * Data enums are enums with at least one non-unit variant.\n */\n dataEnumDefaults?: string[];\n /**\n * The mapping of feature flags to traits.\n * For each entry, the traits will be rendered within a\n * `#[cfg_attr(feature = \"feature_name\", derive(Traits))]` attribute.\n */\n featureFlags?: Record<string, string[]>;\n /** The complete trait overrides of specific types. */\n overrides?: Record<string, string[]>;\n /**\n * The default traits to implement for scalar enums only — on top of the base defaults.\n * Scalar enums are enums with no variants or only unit variants.\n */\n scalarEnumDefaults?: string[];\n /** The default traits to implement for structs only — on top of the base defaults. */\n structDefaults?: string[];\n /** Whether or not to use the fully qualified name for traits, instead of importing them. */\n useFullyQualifiedName?: boolean;\n};\n\nexport const DEFAULT_TRAIT_OPTIONS: Required<TraitOptions> = {\n baseDefaults: [\n 'borsh::BorshSerialize',\n 'borsh::BorshDeserialize',\n 'serde::Serialize',\n 'serde::Deserialize',\n 'Clone',\n 'Debug',\n 'Eq',\n 'PartialEq',\n ],\n dataEnumDefaults: [],\n featureFlags: { serde: ['serde::Serialize', 'serde::Deserialize'] },\n overrides: {},\n scalarEnumDefaults: ['Copy', 'PartialOrd', 'Hash', 'num_derive::FromPrimitive'],\n structDefaults: [],\n useFullyQualifiedName: false,\n};\n\nexport type GetTraitsFromNodeFunction = (node: AccountNode | DefinedTypeNode) => { imports: ImportMap; render: string };\n\nexport function getTraitsFromNodeFactory(options: TraitOptions = {}): GetTraitsFromNodeFunction {\n return node => getTraitsFromNode(node, options);\n}\n\nexport function getTraitsFromNode(\n node: AccountNode | DefinedTypeNode,\n userOptions: TraitOptions = {},\n): { imports: ImportMap; render: string } {\n assertIsNode(node, ['accountNode', 'definedTypeNode']);\n const options: Required<TraitOptions> = { ...DEFAULT_TRAIT_OPTIONS, ...userOptions };\n\n // Get the node type and return early if it's a type alias.\n const nodeType = getNodeType(node);\n if (nodeType === 'alias') {\n return { imports: new ImportMap(), render: '' };\n }\n\n // Find all the FQN traits for the node.\n const sanitizedOverrides = Object.fromEntries(\n Object.entries(options.overrides).map(([key, value]) => [camelCase(key), value]),\n );\n const nodeOverrides: string[] | undefined = sanitizedOverrides[node.name];\n const allTraits = nodeOverrides === undefined ? getDefaultTraits(nodeType, options) : nodeOverrides;\n\n // Wrap the traits in feature flags if necessary.\n const partitionedTraits = partitionTraitsInFeatures(allTraits, options.featureFlags);\n let unfeaturedTraits = partitionedTraits[0];\n const featuredTraits = partitionedTraits[1];\n\n // Import the traits if necessary.\n const imports = new ImportMap();\n if (!options.useFullyQualifiedName) {\n unfeaturedTraits = extractFullyQualifiedNames(unfeaturedTraits, imports);\n }\n\n // Render the trait lines.\n const traitLines: string[] = [\n ...(unfeaturedTraits.length > 0 ? [`#[derive(${unfeaturedTraits.join(', ')})]\\n`] : []),\n ...Object.entries(featuredTraits).map(([feature, traits]) => {\n return `#[cfg_attr(feature = \"${feature}\", derive(${traits.join(', ')}))]\\n`;\n }),\n ];\n\n return { imports, render: traitLines.join('') };\n}\n\nfunction getNodeType(node: AccountNode | DefinedTypeNode): 'alias' | 'dataEnum' | 'scalarEnum' | 'struct' {\n if (isNode(node, 'accountNode')) return 'struct';\n if (isNode(node.type, 'structTypeNode')) return 'struct';\n if (isNode(node.type, 'enumTypeNode')) {\n return isScalarEnum(node.type) ? 'scalarEnum' : 'dataEnum';\n }\n return 'alias';\n}\n\nfunction getDefaultTraits(\n nodeType: 'dataEnum' | 'scalarEnum' | 'struct',\n options: Pick<\n Required<TraitOptions>,\n 'baseDefaults' | 'dataEnumDefaults' | 'scalarEnumDefaults' | 'structDefaults'\n >,\n): string[] {\n switch (nodeType) {\n case 'dataEnum':\n return [...options.baseDefaults, ...options.dataEnumDefaults];\n case 'scalarEnum':\n return [...options.baseDefaults, ...options.scalarEnumDefaults];\n case 'struct':\n return [...options.baseDefaults, ...options.structDefaults];\n }\n}\n\nfunction partitionTraitsInFeatures(\n traits: string[],\n featureFlags: Record<string, string[]>,\n): [string[], Record<string, string[]>] {\n // Reverse the feature flags option for quick lookup.\n // If there are any duplicate traits, the first one encountered will be used.\n const reverseFeatureFlags = Object.entries(featureFlags).reduce(\n (acc, [feature, traits]) => {\n for (const trait of traits) {\n if (!acc[trait]) acc[trait] = feature;\n }\n return acc;\n },\n {} as Record<string, string>,\n );\n\n const unfeaturedTraits: string[] = [];\n const featuredTraits: Record<string, string[]> = {};\n for (const trait of traits) {\n const feature: string | undefined = reverseFeatureFlags[trait];\n if (feature === undefined) {\n unfeaturedTraits.push(trait);\n } else {\n if (!featuredTraits[feature]) featuredTraits[feature] = [];\n featuredTraits[feature].push(trait);\n }\n }\n\n return [unfeaturedTraits, featuredTraits];\n}\n\nfunction extractFullyQualifiedNames(traits: string[], imports: ImportMap): string[] {\n return traits.map(trait => {\n const index = trait.lastIndexOf('::');\n if (index === -1) return trait;\n imports.add(trait);\n return trait.slice(index + 2);\n });\n}\n","import { CODAMA_ERROR__RENDERERS__UNSUPPORTED_NODE, CodamaError } from '@codama/errors';\nimport {\n arrayTypeNode,\n CountNode,\n definedTypeNode,\n fixedCountNode,\n isNode,\n NumberTypeNode,\n numberTypeNode,\n pascalCase,\n prefixedCountNode,\n REGISTERED_TYPE_NODE_KINDS,\n remainderCountNode,\n resolveNestedTypeNode,\n snakeCase,\n} from '@codama/nodes';\nimport { extendVisitor, mergeVisitor, pipe, visit } from '@codama/visitors-core';\n\nimport { ImportMap } from './ImportMap';\nimport { GetImportFromFunction, GetTraitsFromNodeFunction, rustDocblock } from './utils';\n\nexport type TypeManifest = {\n imports: ImportMap;\n nestedStructs: string[];\n type: string;\n};\n\nexport function getTypeManifestVisitor(options: {\n getImportFrom: GetImportFromFunction;\n getTraitsFromNode: GetTraitsFromNodeFunction;\n nestedStruct?: boolean;\n parentName?: string | null;\n}) {\n const { getImportFrom, getTraitsFromNode } = options;\n let parentName: string | null = options.parentName ?? null;\n let nestedStruct: boolean = options.nestedStruct ?? false;\n let inlineStruct: boolean = false;\n let parentSize: NumberTypeNode | number | null = null;\n\n return pipe(\n mergeVisitor(\n (): TypeManifest => ({ imports: new ImportMap(), nestedStructs: [], type: '' }),\n (_, values) => ({\n ...mergeManifests(values),\n type: values.map(v => v.type).join('\\n'),\n }),\n [...REGISTERED_TYPE_NODE_KINDS, 'definedTypeLinkNode', 'definedTypeNode', 'accountNode'],\n ),\n v =>\n extendVisitor(v, {\n visitAccount(account, { self }) {\n parentName = pascalCase(account.name);\n const manifest = visit(account.data, self);\n const traits = getTraitsFromNode(account);\n manifest.imports.mergeWith(traits.imports);\n parentName = null;\n return {\n ...manifest,\n type: traits.render + manifest.type,\n };\n },\n\n visitArrayType(arrayType, { self }) {\n const childManifest = visit(arrayType.item, self);\n\n if (isNode(arrayType.count, 'fixedCountNode')) {\n return {\n ...childManifest,\n type: `[${childManifest.type}; ${arrayType.count.value}]`,\n };\n }\n\n if (isNode(arrayType.count, 'remainderCountNode')) {\n childManifest.imports.add('kaigan::types::RemainderVec');\n return {\n ...childManifest,\n type: `RemainderVec<${childManifest.type}>`,\n };\n }\n\n const prefix = resolveNestedTypeNode(arrayType.count.prefix);\n if (prefix.endian === 'le') {\n switch (prefix.format) {\n case 'u32':\n return {\n ...childManifest,\n type: `Vec<${childManifest.type}>`,\n };\n case 'u8':\n case 'u16':\n case 'u64': {\n const prefixFormat = prefix.format.toUpperCase();\n childManifest.imports.add(`kaigan::types::${prefixFormat}PrefixVec`);\n return {\n ...childManifest,\n type: `${prefixFormat}PrefixVec<${childManifest.type}>`,\n };\n }\n case 'shortU16': {\n childManifest.imports.add('solana_program::short_vec::ShortVec');\n return {\n ...childManifest,\n type: `ShortVec<${childManifest.type}>`,\n };\n }\n default:\n throw new Error(`Array prefix not supported: ${prefix.format}`);\n }\n }\n\n // TODO: Add to the Rust validator.\n throw new Error('Array size not supported by Borsh');\n },\n\n visitBooleanType(booleanType) {\n const resolvedSize = resolveNestedTypeNode(booleanType.size);\n if (resolvedSize.format === 'u8' && resolvedSize.endian === 'le') {\n return {\n imports: new ImportMap(),\n nestedStructs: [],\n type: 'bool',\n };\n }\n\n // TODO: Add to the Rust validator.\n throw new Error('Bool size not supported by Borsh');\n },\n\n visitBytesType(_bytesType, { self }) {\n let arraySize: CountNode = remainderCountNode();\n if (typeof parentSize === 'number') {\n arraySize = fixedCountNode(parentSize);\n } else if (parentSize && typeof parentSize === 'object') {\n arraySize = prefixedCountNode(parentSize);\n }\n const arrayType = arrayTypeNode(numberTypeNode('u8'), arraySize);\n return visit(arrayType, self);\n },\n\n visitDefinedType(definedType, { self }) {\n parentName = pascalCase(definedType.name);\n const manifest = visit(definedType.type, self);\n const traits = getTraitsFromNode(definedType);\n manifest.imports.mergeWith(traits.imports);\n parentName = null;\n\n const renderedType = isNode(definedType.type, ['enumTypeNode', 'structTypeNode'])\n ? manifest.type\n : `pub type ${pascalCase(definedType.name)} = ${manifest.type};`;\n\n return { ...manifest, type: `${traits.render}${renderedType}` };\n },\n\n visitDefinedTypeLink(node) {\n const pascalCaseDefinedType = pascalCase(node.name);\n const importFrom = getImportFrom(node);\n return {\n imports: new ImportMap().add(`${importFrom}::${pascalCaseDefinedType}`),\n nestedStructs: [],\n type: pascalCaseDefinedType,\n };\n },\n\n visitEnumEmptyVariantType(enumEmptyVariantType) {\n const name = pascalCase(enumEmptyVariantType.name);\n return {\n imports: new ImportMap(),\n nestedStructs: [],\n type: `${name},`,\n };\n },\n\n visitEnumStructVariantType(enumStructVariantType, { self }) {\n const name = pascalCase(enumStructVariantType.name);\n const originalParentName = parentName;\n\n if (!originalParentName) {\n throw new Error('Enum struct variant type must have a parent name.');\n }\n\n inlineStruct = true;\n parentName = pascalCase(originalParentName) + name;\n const typeManifest = visit(enumStructVariantType.struct, self);\n inlineStruct = false;\n parentName = originalParentName;\n\n return {\n ...typeManifest,\n type: `${name} ${typeManifest.type},`,\n };\n },\n\n visitEnumTupleVariantType(enumTupleVariantType, { self }) {\n const name = pascalCase(enumTupleVariantType.name);\n const originalParentName = parentName;\n\n if (!originalParentName) {\n throw new Error('Enum struct variant type must have a parent name.');\n }\n\n parentName = pascalCase(originalParentName) + name;\n const childManifest = visit(enumTupleVariantType.tuple, self);\n parentName = originalParentName;\n\n let derive = '';\n if (childManifest.type === '(Pubkey)') {\n derive =\n '#[cfg_attr(feature = \"serde\", serde(with = \"serde_with::As::<serde_with::DisplayFromStr>\"))]\\n';\n } else if (childManifest.type === '(Vec<Pubkey>)') {\n derive =\n '#[cfg_attr(feature = \"serde\", serde(with = \"serde_with::As::<Vec<serde_with::DisplayFromStr>>\"))]\\n';\n }\n\n return {\n ...childManifest,\n type: `${derive}${name}${childManifest.type},`,\n };\n },\n\n visitEnumType(enumType, { self }) {\n const originalParentName = parentName;\n if (!originalParentName) {\n // TODO: Add to the Rust validator.\n throw new Error('Enum type must have a parent name.');\n }\n\n const variants = enumType.variants.map(variant => visit(variant, self));\n const variantNames = variants.map(variant => variant.type).join('\\n');\n const mergedManifest = mergeManifests(variants);\n\n return {\n ...mergedManifest,\n type: `pub enum ${pascalCase(originalParentName)} {\\n${variantNames}\\n}`,\n };\n },\n\n visitFixedSizeType(fixedSizeType, { self }) {\n parentSize = fixedSizeType.size;\n const manifest = visit(fixedSizeType.type, self);\n parentSize = null;\n return manifest;\n },\n\n visitMapType(mapType, { self }) {\n const key = visit(mapType.key, self);\n const value = visit(mapType.value, self);\n const mergedManifest = mergeManifests([key, value]);\n mergedManifest.imports.add('std::collections::HashMap');\n return {\n ...mergedManifest,\n type: `HashMap<${key.type}, ${value.type}>`,\n };\n },\n\n visitNumberType(numberType) {\n if (numberType.endian !== 'le') {\n // TODO: Add to the Rust validator.\n throw new Error('Number endianness not supported by Borsh');\n }\n\n if (numberType.format === 'shortU16') {\n return {\n imports: new ImportMap().add('solana_program::short_vec::ShortU16'),\n nestedStructs: [],\n type: 'ShortU16',\n };\n }\n\n return {\n imports: new ImportMap(),\n nestedStructs: [],\n type: numberType.format,\n };\n },\n\n visitOptionType(optionType, { self }) {\n const childManifest = visit(optionType.item, self);\n\n const optionPrefix = resolveNestedTypeNode(optionType.prefix);\n if (optionPrefix.format === 'u8' && optionPrefix.endian === 'le') {\n return {\n ...childManifest,\n type: `Option<${childManifest.type}>`,\n };\n }\n\n // TODO: Add to the Rust validator.\n throw new Error('Option size not supported by Borsh');\n },\n\n visitPublicKeyType() {\n return {\n imports: new ImportMap().add('solana_program::pubkey::Pubkey'),\n nestedStructs: [],\n type: 'Pubkey',\n };\n },\n\n visitRemainderOptionType(node) {\n throw new CodamaError(CODAMA_ERROR__RENDERERS__UNSUPPORTED_NODE, { kind: node.kind, node });\n },\n\n visitSetType(setType, { self }) {\n const childManifest = visit(setType.item, self);\n childManifest.imports.add('std::collections::HashSet');\n return {\n ...childManifest,\n type: `HashSet<${childManifest.type}>`,\n };\n },\n\n visitSizePrefixType(sizePrefixType, { self }) {\n parentSize = resolveNestedTypeNode(sizePrefixType.prefix);\n const manifest = visit(sizePrefixType.type, self);\n parentSize = null;\n return manifest;\n },\n\n visitStringType() {\n if (!parentSize) {\n return {\n imports: new ImportMap().add(`kaigan::types::RemainderStr`),\n nestedStructs: [],\n type: `RemainderStr`,\n };\n }\n\n if (typeof parentSize === 'number') {\n return {\n imports: new ImportMap(),\n nestedStructs: [],\n type: `[u8; ${parentSize}]`,\n };\n }\n\n if (isNode(parentSize, 'numberTypeNode') && parentSize.endian === 'le') {\n switch (parentSize.format) {\n case 'u32':\n return {\n imports: new ImportMap(),\n nestedStructs: [],\n type: 'String',\n };\n case 'u8':\n case 'u16':\n case 'u64': {\n const prefix = parentSize.format.toUpperCase();\n return {\n imports: new ImportMap().add(`kaigan::types::${prefix}PrefixString`),\n nestedStructs: [],\n type: `${prefix}PrefixString`,\n };\n }\n default:\n throw new Error(`'String size not supported: ${parentSize.format}`);\n }\n }\n\n // TODO: Add to the Rust validator.\n throw new Error('String size not supported by Borsh');\n },\n\n visitStructFieldType(structFieldType, { self }) {\n const originalParentName = parentName;\n const originalInlineStruct = inlineStruct;\n const originalNestedStruct = nestedStruct;\n\n if (!originalParentName) {\n throw new Error('Struct field type must have a parent name.');\n }\n\n parentName = pascalCase(originalParentName) + pascalCase(structFieldType.name);\n nestedStruct = true;\n inlineStruct = false;\n\n const fieldManifest = visit(structFieldType.type, self);\n\n parentName = originalParentName;\n inlineStruct = originalInlineStruct;\n nestedStruct = originalNestedStruct;\n\n const fieldName = snakeCase(structFieldType.name);\n const docblock = rustDocblock(structFieldType.docs);\n const resolvedNestedType = resolveNestedTypeNode(structFieldType.type);\n\n let derive = '';\n if (fieldManifest.type === 'Pubkey') {\n derive =\n '#[cfg_attr(feature = \"serde\", serde(with = \"serde_with::As::<serde_with::DisplayFromStr>\"))]\\n';\n } else if (fieldManifest.type === 'Vec<Pubkey>') {\n derive =\n '#[cfg_attr(feature = \"serde\", serde(with = \"serde_with::As::<Vec<serde_with::DisplayFromStr>>\"))]\\n';\n } else if (\n (isNode(resolvedNestedType, 'arrayTypeNode') &&\n isNode(resolvedNestedType.count, 'fixedCountNode') &&\n resolvedNestedType.count.value > 32) ||\n (isNode(resolvedNestedType, ['bytesTypeNode', 'stringTypeNode']) &&\n isNode(structFieldType.type, 'fixedSizeTypeNode') &&\n structFieldType.type.size > 32)\n ) {\n derive =\n '#[cfg_attr(feature = \"serde\", serde(with = \"serde_with::As::<serde_with::Bytes>\"))]\\n';\n }\n\n return {\n ...fieldManifest,\n type: inlineStruct\n ? `${docblock}${derive}${fieldName}: ${fieldManifest.type},`\n : `${docblock}${derive}pub ${fieldName}: ${fieldManifest.type},`,\n };\n },\n\n visitStructType(structType, { self }) {\n const originalParentName = parentName;\n\n if (!originalParentName) {\n // TODO: Add to the Rust validator.\n throw new Error('Struct type must have a parent name.');\n }\n\n const fields = structType.fields.map(field => visit(field, self));\n const fieldTypes = fields.map(field => field.type).join('\\n');\n const mergedManifest = mergeManifests(fields);\n\n if (nestedStruct) {\n const nestedTraits = getTraitsFromNode(\n definedTypeNode({ name: originalParentName, type: structType }),\n );\n mergedManifest.imports.mergeWith(nestedTraits.imports);\n return {\n ...mergedManifest,\n nestedStructs: [\n ...mergedManifest.nestedStructs,\n `${nestedTraits.render}pub struct ${pascalCase(originalParentName)} {\\n${fieldTypes}\\n}`,\n ],\n type: pascalCase(originalParentName),\n };\n }\n\n if (inlineStruct) {\n return { ...mergedManifest, type: `{\\n${fieldTypes}\\n}` };\n }\n\n return {\n ...mergedManifest,\n type: `pub struct ${pascalCase(originalParentName)} {\\n${fieldTypes}\\n}`,\n };\n },\n\n visitTupleType(tupleType, { self }) {\n const items = tupleType.items.map(item => visit(item, self));\n const mergedManifest = mergeManifests(items);\n\n return {\n ...mergedManifest,\n type: `(${items.map(item => item.type).join(', ')})`,\n };\n },\n\n visitZeroableOptionType(node) {\n throw new CodamaError(CODAMA_ERROR__RENDERERS__UNSUPPORTED_NODE, { kind: node.kind, node });\n },\n }),\n );\n}\n\nfunction mergeManifests(manifests: TypeManifest[]): Pick<TypeManifest, 'imports' | 'nestedStructs'> {\n return {\n imports: new ImportMap().mergeWith(...manifests.map(td => td.imports)),\n nestedStructs: manifests.flatMap(m => m.nestedStructs),\n };\n}\n","import {\n arrayValueNode,\n bytesValueNode,\n isNode,\n numberValueNode,\n pascalCase,\n RegisteredValueNode,\n ValueNode,\n} from '@codama/nodes';\nimport { visit, Visitor } from '@codama/visitors-core';\n\nimport { ImportMap } from './ImportMap';\nimport { getBytesFromBytesValueNode, GetImportFromFunction } from './utils';\n\nexport function renderValueNode(\n value: ValueNode,\n getImportFrom: GetImportFromFunction,\n useStr: boolean = false,\n): {\n imports: ImportMap;\n render: string;\n} {\n return visit(value, renderValueNodeVisitor(getImportFrom, useStr));\n}\n\nexport function renderValueNodeVisitor(\n getImportFrom: GetImportFromFunction,\n useStr: boolean = false,\n): Visitor<\n {\n imports: ImportMap;\n render: string;\n },\n RegisteredValueNode['kind']\n> {\n return {\n visitArrayValue(node) {\n const list = node.items.map(v => visit(v, this));\n return {\n imports: new ImportMap().mergeWith(...list.map(c => c.imports)),\n render: `[${list.map(c => c.render).join(', ')}]`,\n };\n },\n visitBooleanValue(node) {\n return {\n imports: new ImportMap(),\n render: JSON.stringify(node.boolean),\n };\n },\n visitBytesValue(node) {\n const bytes = getBytesFromBytesValueNode(node);\n const numbers = Array.from(bytes).map(numberValueNode);\n return visit(arrayValueNode(numbers), this);\n },\n visitConstantValue(node) {\n if (isNode(node.value, 'bytesValueNode')) {\n return visit(node.value, this);\n }\n if (isNode(node.type, 'stringTypeNode') && isNode(node.value, 'stringValueNode')) {\n return visit(bytesValueNode(node.type.encoding, node.value.string), this);\n }\n if (isNode(node.type, 'numberTypeNode') && isNode(node.value, 'numberValueNode')) {\n const numberManifest = visit(node.value, this);\n const { format, endian } = node.type;\n const byteFunction = endian === 'le' ? 'to_le_bytes' : 'to_be_bytes';\n numberManifest.render = `${numberManifest.render}${format}.${byteFunction}()`;\n return numberManifest;\n }\n throw new Error('Unsupported constant value type.');\n },\n visitEnumValue(node) {\n const imports = new ImportMap();\n const enumName = pascalCase(node.enum.name);\n const variantName = pascalCase(node.variant);\n const importFrom = getImportFrom(node.enum);\n imports.add(`${importFrom}::${enumName}`);\n if (!node.value) {\n return { imports, render: `${enumName}::${variantName}` };\n }\n const enumValue = visit(node.value, this);\n const fields = enumValue.render;\n return {\n imports: imports.mergeWith(enumValue.imports),\n render: `${enumName}::${variantName} ${fields}`,\n };\n },\n visitMapEntryValue(node) {\n const mapKey = visit(node.key, this);\n const mapValue = visit(node.value, this);\n return {\n imports: mapKey.imports.mergeWith(mapValue.imports),\n render: `[${mapKey.render}, ${mapValue.render}]`,\n };\n },\n visitMapValue(node) {\n const map = node.entries.map(entry => visit(entry, this));\n const imports = new ImportMap().add('std::collection::HashMap');\n return {\n imports: imports.mergeWith(...map.map(c => c.imports)),\n render: `HashMap::from([${map.map(c => c.render).join(', ')}])`,\n };\n },\n visitNoneValue() {\n return {\n imports: new ImportMap(),\n render: 'None',\n };\n },\n visitNumberValue(node) {\n return {\n imports: new ImportMap(),\n render: node.number.toString(),\n };\n },\n visitPublicKeyValue(node) {\n return {\n imports: new ImportMap().add('solana_program::pubkey'),\n render: `pubkey!(\"${node.publicKey}\")`,\n };\n },\n visitSetValue(node) {\n const set = node.items.map(v => visit(v, this));\n const imports = new ImportMap().add('std::collection::HashSet');\n return {\n imports: imports.mergeWith(...set.map(c => c.imports)),\n render: `HashSet::from([${set.map(c => c.render).join(', ')}])`,\n };\n },\n visitSomeValue(node) {\n const child = visit(node.value, this);\n return {\n ...child,\n render: `Some(${child.render})`,\n };\n },\n visitStringValue(node) {\n return {\n imports: new ImportMap(),\n render: useStr ? `${JSON.stringify(node.string)}` : `String::from(${JSON.stringify(node.string)})`,\n };\n },\n visitStructFieldValue(node) {\n const structValue = visit(node.value, this);\n return {\n imports: structValue.imports,\n render: `${node.name}: ${structValue.render}`,\n };\n },\n visitStructValue(node) {\n const struct = node.fields.map(field => visit(field, this));\n return {\n imports: new ImportMap().mergeWith(...struct.map(c => c.imports)),\n render: `{ ${struct.map(c => c.render).join(', ')} }`,\n };\n },\n visitTupleValue(node) {\n const tuple = node.items.map(v => visit(v, this));\n return {\n imports: new ImportMap().mergeWith(...tuple.map(c => c.imports)),\n render: `(${tuple.map(c => c.render).join(', ')})`,\n };\n },\n };\n}\n","import { logWarn } from '@codama/errors';\nimport {\n getAllAccounts,\n getAllDefinedTypes,\n getAllInstructionsWithSubs,\n getAllPrograms,\n InstructionNode,\n isNode,\n isNodeFilter,\n pascalCase,\n ProgramNode,\n resolveNestedTypeNode,\n snakeCase,\n structTypeNodeFromInstructionArgumentNodes,\n VALUE_NODES,\n} from '@codama/nodes';\nimport { RenderMap } from '@codama/renderers-core';\nimport {\n extendVisitor,\n LinkableDictionary,\n pipe,\n recordLinkablesVisitor,\n staticVisitor,\n visit,\n} from '@codama/visitors-core';\n\nimport { getTypeManifestVisitor } from './getTypeManifestVisitor';\nimport { ImportMap } from './ImportMap';\nimport { renderValueNode } from './renderValueNodeVisitor';\nimport { getImportFromFactory, getTraitsFromNodeFactory, LinkOverrides, render, TraitOptions } from './utils';\n\nexport type GetRenderMapOptions = {\n defaultTraitOverrides?: string[];\n dependencyMap?: Record<string, string>;\n linkOverrides?: LinkOverrides;\n renderParentInstructions?: boolean;\n traitOptions?: TraitOptions;\n};\n\nexport function getRenderMapVisitor(options: GetRenderMapOptions = {}) {\n const linkables = new LinkableDictionary();\n let program: ProgramNode | null = null;\n\n const renderParentInstructions = options.renderParentInstructions ?? false;\n const dependencyMap = options.dependencyMap ?? {};\n const getImportFrom = getImportFromFactory(options.linkOverrides ?? {});\n const getTraitsFromNode = getTraitsFromNodeFactory(options.traitOptions);\n const typeManifestVisitor = getTypeManifestVisitor({ getImportFrom, getTraitsFromNode });\n\n return pipe(\n staticVisitor(\n () => new RenderMap(),\n ['rootNode', 'programNode', 'instructionNode', 'accountNode', 'definedTypeNode'],\n ),\n v =>\n extendVisitor(v, {\n visitAccount(node) {\n const typeManifest = visit(node, typeManifestVisitor);\n\n // Seeds.\n const seedsImports = new ImportMap();\n const pda = node.pda ? linkables.get(node.pda) : undefined;\n const pdaSeeds = pda?.seeds ?? [];\n const seeds = pdaSeeds.map(seed => {\n if (isNode(seed, 'variablePdaSeedNode')) {\n const seedManifest = visit(seed.type, typeManifestVisitor);\n seedsImports.mergeWith(seedManifest.imports);\n const resolvedType = resolveNestedTypeNode(seed.type);\n return { ...seed, resolvedType, typeManifest: seedManifest };\n }\n if (isNode(seed.value, 'programIdValueNode')) {\n return seed;\n }\n const seedManifest = visit(seed.type, typeManifestVisitor);\n const valueManifest = renderValueNode(seed.value, getImportFrom, true);\n seedsImports.mergeWith(valueManifest.imports);\n const resolvedType = resolveNestedTypeNode(seed.type);\n return { ...seed, resolvedType, typeManifest: seedManifest, valueManifest };\n });\n const hasVariableSeeds = pdaSeeds.filter(isNodeFilter('variablePdaSeedNode')).length > 0;\n const constantSeeds = seeds\n .filter(isNodeFilter('constantPdaSeedNode'))\n .filter(seed => !isNode(seed.value, 'programIdValueNode'));\n\n const { imports } = typeManifest;\n\n if (hasVariableSeeds) {\n imports.mergeWith(seedsImports);\n }\n\n return new RenderMap().add(\n `accounts/${snakeCase(node.name)}.rs`,\n render('accountsPage.njk', {\n account: node,\n constantSeeds,\n hasVariableSeeds,\n imports: imports\n .remove(`generatedAccounts::${pascalCase(node.name)}`)\n .toString(dependencyMap),\n pda,\n program,\n seeds,\n typeManifest,\n }),\n );\n },\n\n visitDefinedType(node) {\n const typeManifest = visit(node, typeManifestVisitor);\n const imports = new ImportMap().mergeWithManifest(typeManifest);\n\n return new RenderMap().add(\n `types/${snakeCase(node.name)}.rs`,\n render('definedTypesPage.njk', {\n definedType: node,\n imports: imports.remove(`generatedTypes::${pascalCase(node.name)}`).toString(dependencyMap),\n typeManifest,\n }),\n );\n },\n\n visitInstruction(node) {\n // Imports.\n const imports = new ImportMap();\n imports.add(['borsh::BorshDeserialize', 'borsh::BorshSerialize']);\n\n // canMergeAccountsAndArgs\n const accountsAndArgsConflicts = getConflictsForInstructionAccountsAndArgs(node);\n if (accountsAndArgsConflicts.length > 0) {\n logWarn(\n `[Rust] Accounts and args of instruction [${node.name}] have the following ` +\n `conflicting attributes [${accountsAndArgsConflicts.join(', ')}]. ` +\n `Thus, the conflicting arguments will be suffixed with \"_arg\". ` +\n 'You may want to rename the conflicting attributes.',\n );\n }\n\n // Instruction args.\n const instructionArgs: {\n default: boolean;\n innerOptionType: string | null;\n name: string;\n optional: boolean;\n type: string;\n value: string | null;\n }[] = [];\n let hasArgs = false;\n let hasOptional = false;\n\n node.arguments.forEach(argument => {\n const argumentVisitor = getTypeManifestVisitor({\n getImportFrom,\n getTraitsFromNode,\n nestedStruct: true,\n parentName: `${pascalCase(node.name)}InstructionData`,\n });\n const manifest = visit(argument.type, argumentVisitor);\n imports.mergeWith(manifest.imports);\n const innerOptionType = isNode(argument.type, 'optionTypeNode')\n ? manifest.type.slice('Option<'.length, -1)\n : null;\n\n const hasDefaultValue = !!argument.defaultValue && isNode(argument.defaultValue, VALUE_NODES);\n let renderValue: string | null = null;\n if (hasDefaultValue) {\n const { imports: argImports, render: value } = renderValueNode(\n argument.defaultValue,\n getImportFrom,\n );\n imports.mergeWith(argImports);\n renderValue = value;\n }\n\n hasArgs = hasArgs || argument.defaultValueStrategy !== 'omitted';\n hasOptional = hasOptional || (hasDefaultValue && argument.defaultValueStrategy !== 'omitted');\n\n const name = accountsAndArgsConflicts.includes(argument.name)\n ? `${argument.name}_arg`\n : argument.name;\n\n instructionArgs.push({\n default: hasDefaultValue && argument.defaultValueStrategy === 'omitted',\n innerOptionType,\n name,\n optional: hasDefaultValue && argument.defaultValueStrategy !== 'omitted',\n type: manifest.type,\n value: renderValue,\n });\n });\n\n const struct = structTypeNodeFromInstructionArgumentNodes(node.arguments);\n const structVisitor = getTypeManifestVisitor({\n getImportFrom,\n getTraitsFromNode,\n parentName: `${pascalCase(node.name)}InstructionData`,\n });\n const typeManifest = visit(struct, structVisitor);\n\n return new RenderMap().add(\n `instructions/${snakeCase(node.name)}.rs`,\n render('instructionsPage.njk', {\n hasArgs,\n hasOptional,\n imports: imports\n .remove(`generatedInstructions::${pascalCase(node.name)}`)\n .toString(dependencyMap),\n instruction: node,\n instructionArgs,\n program,\n typeManifest,\n }),\n );\n },\n\n visitProgram(node, { self }) {\n program = node;\n const renderMap = new RenderMap()\n .mergeWith(...node.accounts.map(account => visit(account, self)))\n .mergeWith(...node.definedTypes.map(type => visit(type, self)))\n .mergeWith(\n ...getAllInstructionsWithSubs(node, {\n leavesOnly: !renderParentInstructions,\n }).map(ix => visit(ix, self)),\n );\n\n // Errors.\n if (node.errors.length > 0) {\n renderMap.add(\n `errors/${snakeCase(node.name)}.rs`,\n render('errorsPage.njk', {\n errors: node.errors,\n imports: new ImportMap().toString(dependencyMap),\n program: node,\n }),\n );\n }\n\n program = null;\n return renderMap;\n },\n\n visitRoot(node, { self }) {\n const programsToExport = getAllPrograms(node);\n const accountsToExport = getAllAccounts(node);\n const instructionsToExport = getAllInstructionsWithSubs(node, {\n leavesOnly: !renderParentInstructions,\n });\n const definedTypesToExport = getAllDefinedTypes(node);\n const hasAnythingToExport =\n programsToExport.length > 0 ||\n accountsToExport.length > 0 ||\n instructionsToExport.length > 0 ||\n definedTypesToExport.length > 0;\n\n const ctx = {\n accountsToExport,\n definedTypesToExport,\n hasAnythingToExport,\n instructionsToExport,\n programsToExport,\n root: node,\n };\n\n const map = new RenderMap();\n if (programsToExport.length > 0) {\n map.add('programs.rs', render('programsMod.njk', ctx)).add(\n 'errors/mod.rs',\n render('errorsMod.njk', ctx),\n );\n }\n if (accountsToExport.length > 0) {\n map.add('accounts/mod.rs', render('accountsMod.njk', ctx));\n }\n if (instructionsToExport.length > 0) {\n map.add('instructions/mod.rs', render('instructionsMod.njk', ctx));\n }\n if (definedTypesToExport.length > 0) {\n map.add('types/mod.rs', render('definedTypesMod.njk', ctx));\n }\n\n return map\n .add('mod.rs', render('rootMod.njk', ctx))\n .mergeWith(...getAllPrograms(node).map(p => visit(p, self)));\n },\n }),\n v => recordLinkablesVisitor(v, linkables),\n );\n}\n\nfunction getConflictsForInstructionAccountsAndArgs(instruction: InstructionNode): string[] {\n const allNames = [\n ...instruction.accounts.map(account => account.name),\n ...instruction.arguments.map(argument => argument.name),\n ];\n const duplicates = allNames.filter((e, i, a) => a.indexOf(e) !== i);\n return [...new Set(duplicates)];\n}\n","import { logError, logWarn } from '@codama/errors';\nimport { deleteDirectory, writeRenderMapVisitor } from '@codama/renderers-core';\nimport { rootNodeVisitor, visit } from '@codama/visitors-core';\nimport { spawnSync } from 'child_process';\n\nimport { GetRenderMapOptions, getRenderMapVisitor } from './getRenderMapVisitor';\n\nexport type RenderOptions = GetRenderMapOptions & {\n crateFolder?: string;\n deleteFolderBeforeRendering?: boolean;\n formatCode?: boolean;\n toolchain?: string;\n};\n\nexport function renderVisitor(path: string, options: RenderOptions = {}) {\n return rootNodeVisitor(root => {\n // Delete existing generated folder.\n if (options.deleteFolderBeforeRendering ?? true) {\n deleteDirectory(path);\n }\n\n // Render the new files.\n visit(root, writeRenderMapVisitor(getRenderMapVisitor(options), path));\n\n // format the code\n if (options.formatCode) {\n if (options.crateFolder) {\n const toolchain = options.toolchain ?? '+stable';\n runFormatter('cargo', [toolchain, 'fmt', '--manifest-path', `${options.crateFolder}/Cargo.toml`]);\n } else {\n logWarn('No crate folder specified, skipping formatting.');\n }\n }\n });\n}\n\nfunction runFormatter(cmd: string, args: string[]) {\n const { stdout, stderr, error } = spawnSync(cmd, args);\n if (error?.message?.includes('ENOENT')) {\n logWarn(`Could not find ${cmd}, skipping formatting.`);\n return;\n }\n if (stdout.length > 0) {\n logWarn(`(cargo-fmt) ${stdout || error}`);\n }\n if (stderr.length > 0) {\n logError(`(cargo-fmt) ${stderr || error}`);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/ImportMap.ts","../src/utils/codecs.ts","../src/utils/linkOverrides.ts","../src/utils/render.ts","../src/utils/traitOptions.ts","../src/getTypeManifestVisitor.ts","../src/renderValueNodeVisitor.ts","../src/getRenderMapVisitor.ts","../src/renderVisitor.ts"],"names":["getUtf8Encoder","getBase16Encoder","getBase58Encoder","getBase64Encoder","CodamaError","CODAMA_ERROR__UNEXPECTED_NODE_KIND","join","nunjucks","pascalCase","camelCase","snakeCase","kebabCase","titleCase","assertIsNode","isNode","isScalarEnum","traits","getTraitsFromNode","pipe","mergeVisitor","REGISTERED_TYPE_NODE_KINDS","extendVisitor","visit","resolveNestedTypeNode","remainderCountNode","fixedCountNode","prefixedCountNode","arrayTypeNode","numberTypeNode","CODAMA_ERROR__RENDERERS__UNSUPPORTED_NODE","definedTypeNode","numberValueNode","arrayValueNode","bytesValueNode","LinkableDictionary","NodeStack","staticVisitor","RenderMap","seedManifest","resolvedType","isNodeFilter","logWarn","VALUE_NODES","structTypeNodeFromInstructionArgumentNodes","getAllInstructionsWithSubs","getAllPrograms","getAllAccounts","getAllDefinedTypes","recordNodeStackVisitor","recordLinkablesOnFirstVisitVisitor","rootNodeVisitor","deleteDirectory","writeRenderMapVisitor","spawnSync","logError"],"mappings":"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","file":"index.node.cjs","sourcesContent":["import { TypeManifest } from './getTypeManifestVisitor';\n\nconst DEFAULT_MODULE_MAP: Record<string, string> = {\n generated: 'crate::generated',\n generatedAccounts: 'crate::generated::accounts',\n generatedErrors: 'crate::generated::errors',\n generatedInstructions: 'crate::generated::instructions',\n generatedTypes: 'crate::generated::types',\n hooked: 'crate::hooked',\n mplEssentials: 'mpl_toolbox',\n mplToolbox: 'mpl_toolbox',\n};\n\nexport class ImportMap {\n protected readonly _imports: Set<string> = new Set();\n\n protected readonly _aliases: Map<string, string> = new Map();\n\n get imports(): Set<string> {\n return this._imports;\n }\n\n get aliases(): Map<string, string> {\n return this._aliases;\n }\n\n add(imports: Set<string> | string[] | string): ImportMap {\n const newImports = typeof imports === 'string' ? [imports] : imports;\n newImports.forEach(i => this._imports.add(i));\n return this;\n }\n\n remove(imports: Set<string> | string[] | string): ImportMap {\n const importsToRemove = typeof imports === 'string' ? [imports] : imports;\n importsToRemove.forEach(i => this._imports.delete(i));\n return this;\n }\n\n mergeWith(...others: ImportMap[]): ImportMap {\n others.forEach(other => {\n this.add(other._imports);\n other._aliases.forEach((alias, importName) => this.addAlias(importName, alias));\n });\n return this;\n }\n\n mergeWithManifest(manifest: TypeManifest): ImportMap {\n return this.mergeWith(manifest.imports);\n }\n\n addAlias(importName: string, alias: string): ImportMap {\n this._aliases.set(importName, alias);\n return this;\n }\n\n isEmpty(): boolean {\n return this._imports.size === 0;\n }\n\n resolveDependencyMap(dependencies: Record<string, string>): ImportMap {\n const dependencyMap = { ...DEFAULT_MODULE_MAP, ...dependencies };\n const newImportMap = new ImportMap();\n const resolveDependency = (i: string): string => {\n const dependencyKey = Object.keys(dependencyMap).find(key => i.startsWith(`${key}::`));\n if (!dependencyKey) return i;\n const dependencyValue = dependencyMap[dependencyKey];\n return dependencyValue + i.slice(dependencyKey.length);\n };\n this._imports.forEach(i => newImportMap.add(resolveDependency(i)));\n this._aliases.forEach((alias, i) => newImportMap.addAlias(resolveDependency(i), alias));\n return newImportMap;\n }\n\n toString(dependencies: Record<string, string>): string {\n const resolvedMap = this.resolveDependencyMap(dependencies);\n const importStatements = [...resolvedMap.imports].map(i => {\n const alias = resolvedMap.aliases.get(i);\n if (alias) return `use ${i} as ${alias};`;\n return `use ${i};`;\n });\n return importStatements.join('\\n');\n }\n}\n","import { BytesValueNode } from '@codama/nodes';\nimport { getBase16Encoder, getBase58Encoder, getBase64Encoder, getUtf8Encoder } from '@solana/codecs-strings';\n\nexport function getBytesFromBytesValueNode(node: BytesValueNode): Uint8Array {\n switch (node.encoding) {\n case 'utf8':\n return getUtf8Encoder().encode(node.data) as Uint8Array;\n case 'base16':\n return getBase16Encoder().encode(node.data) as Uint8Array;\n case 'base58':\n return getBase58Encoder().encode(node.data) as Uint8Array;\n case 'base64':\n default:\n return getBase64Encoder().encode(node.data) as Uint8Array;\n }\n}\n","import { CODAMA_ERROR__UNEXPECTED_NODE_KIND, CodamaError } from '@codama/errors';\nimport {\n AccountLinkNode,\n DefinedTypeLinkNode,\n InstructionLinkNode,\n PdaLinkNode,\n ProgramLinkNode,\n ResolverValueNode,\n} from '@codama/nodes';\n\nexport type LinkOverrides = {\n accounts?: Record<string, string>;\n definedTypes?: Record<string, string>;\n instructions?: Record<string, string>;\n pdas?: Record<string, string>;\n programs?: Record<string, string>;\n resolvers?: Record<string, string>;\n};\n\ntype OverridableNodes =\n | AccountLinkNode\n | DefinedTypeLinkNode\n | InstructionLinkNode\n | PdaLinkNode\n | ProgramLinkNode\n | ResolverValueNode;\n\nexport type GetImportFromFunction = (node: OverridableNodes, fallback?: string) => string;\n\nexport function getImportFromFactory(overrides: LinkOverrides): GetImportFromFunction {\n const linkOverrides = {\n accounts: overrides.accounts ?? {},\n definedTypes: overrides.definedTypes ?? {},\n instructions: overrides.instructions ?? {},\n pdas: overrides.pdas ?? {},\n programs: overrides.programs ?? {},\n resolvers: overrides.resolvers ?? {},\n };\n\n return (node: OverridableNodes) => {\n const kind = node.kind;\n switch (kind) {\n case 'accountLinkNode':\n return linkOverrides.accounts[node.name] ?? 'generatedAccounts';\n case 'definedTypeLinkNode':\n return linkOverrides.definedTypes[node.name] ?? 'generatedTypes';\n case 'instructionLinkNode':\n return linkOverrides.instructions[node.name] ?? 'generatedInstructions';\n case 'pdaLinkNode':\n return linkOverrides.pdas[node.name] ?? 'generatedAccounts';\n case 'programLinkNode':\n return linkOverrides.programs[node.name] ?? 'generatedPrograms';\n case 'resolverValueNode':\n return linkOverrides.resolvers[node.name] ?? 'hooked';\n default:\n throw new CodamaError(CODAMA_ERROR__UNEXPECTED_NODE_KIND, {\n expectedKinds: [\n 'AccountLinkNode',\n 'DefinedTypeLinkNode',\n 'InstructionLinkNode',\n 'PdaLinkNode',\n 'ProgramLinkNode',\n 'resolverValueNode',\n ],\n kind: kind satisfies never,\n node,\n });\n }\n };\n}\n","import { dirname as pathDirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport { camelCase, kebabCase, pascalCase, snakeCase, titleCase } from '@codama/nodes';\nimport nunjucks, { ConfigureOptions as NunJucksOptions } from 'nunjucks';\n\nexport function rustDocblock(docs: string[]): string {\n if (docs.length <= 0) return '';\n const lines = docs.map(doc => `/// ${doc}`);\n return `${lines.join('\\n')}\\n`;\n}\n\nexport const render = (template: string, context?: object, options?: NunJucksOptions): string => {\n // @ts-expect-error import.meta will be used in the right environment.\n const dirname = __ESM__ ? pathDirname(fileURLToPath(import.meta.url)) : __dirname;\n const templates = __TEST__ ? join(dirname, '..', '..', 'public', 'templates') : join(dirname, 'templates'); // Path to templates from bundled output file.\n const env = nunjucks.configure(templates, { autoescape: false, trimBlocks: true, ...options });\n env.addFilter('pascalCase', pascalCase);\n env.addFilter('camelCase', camelCase);\n env.addFilter('snakeCase', snakeCase);\n env.addFilter('kebabCase', kebabCase);\n env.addFilter('titleCase', titleCase);\n env.addFilter('rustDocblock', rustDocblock);\n return env.render(template, context);\n};\n","import { AccountNode, assertIsNode, camelCase, DefinedTypeNode, isNode, isScalarEnum } from '@codama/nodes';\n\nimport { ImportMap } from '../ImportMap';\n\nexport type TraitOptions = {\n /** The default traits to implement for all types. */\n baseDefaults?: string[];\n /**\n * The default traits to implement for data enums only — on top of the base defaults.\n * Data enums are enums with at least one non-unit variant.\n */\n dataEnumDefaults?: string[];\n /**\n * The mapping of feature flags to traits.\n * For each entry, the traits will be rendered within a\n * `#[cfg_attr(feature = \"feature_name\", derive(Traits))]` attribute.\n */\n featureFlags?: Record<string, string[]>;\n /** The complete trait overrides of specific types. */\n overrides?: Record<string, string[]>;\n /**\n * The default traits to implement for scalar enums only — on top of the base defaults.\n * Scalar enums are enums with no variants or only unit variants.\n */\n scalarEnumDefaults?: string[];\n /** The default traits to implement for structs only — on top of the base defaults. */\n structDefaults?: string[];\n /** Whether or not to use the fully qualified name for traits, instead of importing them. */\n useFullyQualifiedName?: boolean;\n};\n\nexport const DEFAULT_TRAIT_OPTIONS: Required<TraitOptions> = {\n baseDefaults: [\n 'borsh::BorshSerialize',\n 'borsh::BorshDeserialize',\n 'serde::Serialize',\n 'serde::Deserialize',\n 'Clone',\n 'Debug',\n 'Eq',\n 'PartialEq',\n ],\n dataEnumDefaults: [],\n featureFlags: { serde: ['serde::Serialize', 'serde::Deserialize'] },\n overrides: {},\n scalarEnumDefaults: ['Copy', 'PartialOrd', 'Hash', 'num_derive::FromPrimitive'],\n structDefaults: [],\n useFullyQualifiedName: false,\n};\n\nexport type GetTraitsFromNodeFunction = (node: AccountNode | DefinedTypeNode) => { imports: ImportMap; render: string };\n\nexport function getTraitsFromNodeFactory(options: TraitOptions = {}): GetTraitsFromNodeFunction {\n return node => getTraitsFromNode(node, options);\n}\n\nexport function getTraitsFromNode(\n node: AccountNode | DefinedTypeNode,\n userOptions: TraitOptions = {},\n): { imports: ImportMap; render: string } {\n assertIsNode(node, ['accountNode', 'definedTypeNode']);\n const options: Required<TraitOptions> = { ...DEFAULT_TRAIT_OPTIONS, ...userOptions };\n\n // Get the node type and return early if it's a type alias.\n const nodeType = getNodeType(node);\n if (nodeType === 'alias') {\n return { imports: new ImportMap(), render: '' };\n }\n\n // Find all the FQN traits for the node.\n const sanitizedOverrides = Object.fromEntries(\n Object.entries(options.overrides).map(([key, value]) => [camelCase(key), value]),\n );\n const nodeOverrides: string[] | undefined = sanitizedOverrides[node.name];\n const allTraits = nodeOverrides === undefined ? getDefaultTraits(nodeType, options) : nodeOverrides;\n\n // Wrap the traits in feature flags if necessary.\n const partitionedTraits = partitionTraitsInFeatures(allTraits, options.featureFlags);\n let unfeaturedTraits = partitionedTraits[0];\n const featuredTraits = partitionedTraits[1];\n\n // Import the traits if necessary.\n const imports = new ImportMap();\n if (!options.useFullyQualifiedName) {\n unfeaturedTraits = extractFullyQualifiedNames(unfeaturedTraits, imports);\n }\n\n // Render the trait lines.\n const traitLines: string[] = [\n ...(unfeaturedTraits.length > 0 ? [`#[derive(${unfeaturedTraits.join(', ')})]\\n`] : []),\n ...Object.entries(featuredTraits).map(([feature, traits]) => {\n return `#[cfg_attr(feature = \"${feature}\", derive(${traits.join(', ')}))]\\n`;\n }),\n ];\n\n return { imports, render: traitLines.join('') };\n}\n\nfunction getNodeType(node: AccountNode | DefinedTypeNode): 'alias' | 'dataEnum' | 'scalarEnum' | 'struct' {\n if (isNode(node, 'accountNode')) return 'struct';\n if (isNode(node.type, 'structTypeNode')) return 'struct';\n if (isNode(node.type, 'enumTypeNode')) {\n return isScalarEnum(node.type) ? 'scalarEnum' : 'dataEnum';\n }\n return 'alias';\n}\n\nfunction getDefaultTraits(\n nodeType: 'dataEnum' | 'scalarEnum' | 'struct',\n options: Pick<\n Required<TraitOptions>,\n 'baseDefaults' | 'dataEnumDefaults' | 'scalarEnumDefaults' | 'structDefaults'\n >,\n): string[] {\n switch (nodeType) {\n case 'dataEnum':\n return [...options.baseDefaults, ...options.dataEnumDefaults];\n case 'scalarEnum':\n return [...options.baseDefaults, ...options.scalarEnumDefaults];\n case 'struct':\n return [...options.baseDefaults, ...options.structDefaults];\n }\n}\n\nfunction partitionTraitsInFeatures(\n traits: string[],\n featureFlags: Record<string, string[]>,\n): [string[], Record<string, string[]>] {\n // Reverse the feature flags option for quick lookup.\n // If there are any duplicate traits, the first one encountered will be used.\n const reverseFeatureFlags = Object.entries(featureFlags).reduce(\n (acc, [feature, traits]) => {\n for (const trait of traits) {\n if (!acc[trait]) acc[trait] = feature;\n }\n return acc;\n },\n {} as Record<string, string>,\n );\n\n const unfeaturedTraits: string[] = [];\n const featuredTraits: Record<string, string[]> = {};\n for (const trait of traits) {\n const feature: string | undefined = reverseFeatureFlags[trait];\n if (feature === undefined) {\n unfeaturedTraits.push(trait);\n } else {\n if (!featuredTraits[feature]) featuredTraits[feature] = [];\n featuredTraits[feature].push(trait);\n }\n }\n\n return [unfeaturedTraits, featuredTraits];\n}\n\nfunction extractFullyQualifiedNames(traits: string[], imports: ImportMap): string[] {\n return traits.map(trait => {\n const index = trait.lastIndexOf('::');\n if (index === -1) return trait;\n imports.add(trait);\n return trait.slice(index + 2);\n });\n}\n","import { CODAMA_ERROR__RENDERERS__UNSUPPORTED_NODE, CodamaError } from '@codama/errors';\nimport {\n arrayTypeNode,\n CountNode,\n definedTypeNode,\n fixedCountNode,\n isNode,\n NumberTypeNode,\n numberTypeNode,\n pascalCase,\n prefixedCountNode,\n REGISTERED_TYPE_NODE_KINDS,\n remainderCountNode,\n resolveNestedTypeNode,\n snakeCase,\n} from '@codama/nodes';\nimport { extendVisitor, mergeVisitor, pipe, visit } from '@codama/visitors-core';\n\nimport { ImportMap } from './ImportMap';\nimport { GetImportFromFunction, GetTraitsFromNodeFunction, rustDocblock } from './utils';\n\nexport type TypeManifest = {\n imports: ImportMap;\n nestedStructs: string[];\n type: string;\n};\n\nexport function getTypeManifestVisitor(options: {\n getImportFrom: GetImportFromFunction;\n getTraitsFromNode: GetTraitsFromNodeFunction;\n nestedStruct?: boolean;\n parentName?: string | null;\n}) {\n const { getImportFrom, getTraitsFromNode } = options;\n let parentName: string | null = options.parentName ?? null;\n let nestedStruct: boolean = options.nestedStruct ?? false;\n let inlineStruct: boolean = false;\n let parentSize: NumberTypeNode | number | null = null;\n\n return pipe(\n mergeVisitor(\n (): TypeManifest => ({ imports: new ImportMap(), nestedStructs: [], type: '' }),\n (_, values) => ({\n ...mergeManifests(values),\n type: values.map(v => v.type).join('\\n'),\n }),\n { keys: [...REGISTERED_TYPE_NODE_KINDS, 'definedTypeLinkNode', 'definedTypeNode', 'accountNode'] },\n ),\n v =>\n extendVisitor(v, {\n visitAccount(account, { self }) {\n parentName = pascalCase(account.name);\n const manifest = visit(account.data, self);\n const traits = getTraitsFromNode(account);\n manifest.imports.mergeWith(traits.imports);\n parentName = null;\n return {\n ...manifest,\n type: traits.render + manifest.type,\n };\n },\n\n visitArrayType(arrayType, { self }) {\n const childManifest = visit(arrayType.item, self);\n\n if (isNode(arrayType.count, 'fixedCountNode')) {\n return {\n ...childManifest,\n type: `[${childManifest.type}; ${arrayType.count.value}]`,\n };\n }\n\n if (isNode(arrayType.count, 'remainderCountNode')) {\n childManifest.imports.add('kaigan::types::RemainderVec');\n return {\n ...childManifest,\n type: `RemainderVec<${childManifest.type}>`,\n };\n }\n\n const prefix = resolveNestedTypeNode(arrayType.count.prefix);\n if (prefix.endian === 'le') {\n switch (prefix.format) {\n case 'u32':\n return {\n ...childManifest,\n type: `Vec<${childManifest.type}>`,\n };\n case 'u8':\n case 'u16':\n case 'u64': {\n const prefixFormat = prefix.format.toUpperCase();\n childManifest.imports.add(`kaigan::types::${prefixFormat}PrefixVec`);\n return {\n ...childManifest,\n type: `${prefixFormat}PrefixVec<${childManifest.type}>`,\n };\n }\n case 'shortU16': {\n childManifest.imports.add('solana_program::short_vec::ShortVec');\n return {\n ...childManifest,\n type: `ShortVec<${childManifest.type}>`,\n };\n }\n default:\n throw new Error(`Array prefix not supported: ${prefix.format}`);\n }\n }\n\n // TODO: Add to the Rust validator.\n throw new Error('Array size not supported by Borsh');\n },\n\n visitBooleanType(booleanType) {\n const resolvedSize = resolveNestedTypeNode(booleanType.size);\n if (resolvedSize.format === 'u8' && resolvedSize.endian === 'le') {\n return {\n imports: new ImportMap(),\n nestedStructs: [],\n type: 'bool',\n };\n }\n\n // TODO: Add to the Rust validator.\n throw new Error('Bool size not supported by Borsh');\n },\n\n visitBytesType(_bytesType, { self }) {\n let arraySize: CountNode = remainderCountNode();\n if (typeof parentSize === 'number') {\n arraySize = fixedCountNode(parentSize);\n } else if (parentSize && typeof parentSize === 'object') {\n arraySize = prefixedCountNode(parentSize);\n }\n const arrayType = arrayTypeNode(numberTypeNode('u8'), arraySize);\n return visit(arrayType, self);\n },\n\n visitDefinedType(definedType, { self }) {\n parentName = pascalCase(definedType.name);\n const manifest = visit(definedType.type, self);\n const traits = getTraitsFromNode(definedType);\n manifest.imports.mergeWith(traits.imports);\n parentName = null;\n\n const renderedType = isNode(definedType.type, ['enumTypeNode', 'structTypeNode'])\n ? manifest.type\n : `pub type ${pascalCase(definedType.name)} = ${manifest.type};`;\n\n return { ...manifest, type: `${traits.render}${renderedType}` };\n },\n\n visitDefinedTypeLink(node) {\n const pascalCaseDefinedType = pascalCase(node.name);\n const importFrom = getImportFrom(node);\n return {\n imports: new ImportMap().add(`${importFrom}::${pascalCaseDefinedType}`),\n nestedStructs: [],\n type: pascalCaseDefinedType,\n };\n },\n\n visitEnumEmptyVariantType(enumEmptyVariantType) {\n const name = pascalCase(enumEmptyVariantType.name);\n return {\n imports: new ImportMap(),\n nestedStructs: [],\n type: `${name},`,\n };\n },\n\n visitEnumStructVariantType(enumStructVariantType, { self }) {\n const name = pascalCase(enumStructVariantType.name);\n const originalParentName = parentName;\n\n if (!originalParentName) {\n throw new Error('Enum struct variant type must have a parent name.');\n }\n\n inlineStruct = true;\n parentName = pascalCase(originalParentName) + name;\n const typeManifest = visit(enumStructVariantType.struct, self);\n inlineStruct = false;\n parentName = originalParentName;\n\n return {\n ...typeManifest,\n type: `${name} ${typeManifest.type},`,\n };\n },\n\n visitEnumTupleVariantType(enumTupleVariantType, { self }) {\n const name = pascalCase(enumTupleVariantType.name);\n const originalParentName = parentName;\n\n if (!originalParentName) {\n throw new Error('Enum struct variant type must have a parent name.');\n }\n\n parentName = pascalCase(originalParentName) + name;\n const childManifest = visit(enumTupleVariantType.tuple, self);\n parentName = originalParentName;\n\n let derive = '';\n if (childManifest.type === '(Pubkey)') {\n derive =\n '#[cfg_attr(feature = \"serde\", serde(with = \"serde_with::As::<serde_with::DisplayFromStr>\"))]\\n';\n } else if (childManifest.type === '(Vec<Pubkey>)') {\n derive =\n '#[cfg_attr(feature = \"serde\", serde(with = \"serde_with::As::<Vec<serde_with::DisplayFromStr>>\"))]\\n';\n }\n\n return {\n ...childManifest,\n type: `${derive}${name}${childManifest.type},`,\n };\n },\n\n visitEnumType(enumType, { self }) {\n const originalParentName = parentName;\n if (!originalParentName) {\n // TODO: Add to the Rust validator.\n throw new Error('Enum type must have a parent name.');\n }\n\n const variants = enumType.variants.map(variant => visit(variant, self));\n const variantNames = variants.map(variant => variant.type).join('\\n');\n const mergedManifest = mergeManifests(variants);\n\n return {\n ...mergedManifest,\n type: `pub enum ${pascalCase(originalParentName)} {\\n${variantNames}\\n}`,\n };\n },\n\n visitFixedSizeType(fixedSizeType, { self }) {\n parentSize = fixedSizeType.size;\n const manifest = visit(fixedSizeType.type, self);\n parentSize = null;\n return manifest;\n },\n\n visitMapType(mapType, { self }) {\n const key = visit(mapType.key, self);\n const value = visit(mapType.value, self);\n const mergedManifest = mergeManifests([key, value]);\n mergedManifest.imports.add('std::collections::HashMap');\n return {\n ...mergedManifest,\n type: `HashMap<${key.type}, ${value.type}>`,\n };\n },\n\n visitNumberType(numberType) {\n if (numberType.endian !== 'le') {\n // TODO: Add to the Rust validator.\n throw new Error('Number endianness not supported by Borsh');\n }\n\n if (numberType.format === 'shortU16') {\n return {\n imports: new ImportMap().add('solana_program::short_vec::ShortU16'),\n nestedStructs: [],\n type: 'ShortU16',\n };\n }\n\n return {\n imports: new ImportMap(),\n nestedStructs: [],\n type: numberType.format,\n };\n },\n\n visitOptionType(optionType, { self }) {\n const childManifest = visit(optionType.item, self);\n\n const optionPrefix = resolveNestedTypeNode(optionType.prefix);\n if (optionPrefix.format === 'u8' && optionPrefix.endian === 'le') {\n return {\n ...childManifest,\n type: `Option<${childManifest.type}>`,\n };\n }\n\n // TODO: Add to the Rust validator.\n throw new Error('Option size not supported by Borsh');\n },\n\n visitPublicKeyType() {\n return {\n imports: new ImportMap().add('solana_program::pubkey::Pubkey'),\n nestedStructs: [],\n type: 'Pubkey',\n };\n },\n\n visitRemainderOptionType(node) {\n throw new CodamaError(CODAMA_ERROR__RENDERERS__UNSUPPORTED_NODE, { kind: node.kind, node });\n },\n\n visitSetType(setType, { self }) {\n const childManifest = visit(setType.item, self);\n childManifest.imports.add('std::collections::HashSet');\n return {\n ...childManifest,\n type: `HashSet<${childManifest.type}>`,\n };\n },\n\n visitSizePrefixType(sizePrefixType, { self }) {\n parentSize = resolveNestedTypeNode(sizePrefixType.prefix);\n const manifest = visit(sizePrefixType.type, self);\n parentSize = null;\n return manifest;\n },\n\n visitStringType() {\n if (!parentSize) {\n return {\n imports: new ImportMap().add(`kaigan::types::RemainderStr`),\n nestedStructs: [],\n type: `RemainderStr`,\n };\n }\n\n if (typeof parentSize === 'number') {\n return {\n imports: new ImportMap(),\n nestedStructs: [],\n type: `[u8; ${parentSize}]`,\n };\n }\n\n if (isNode(parentSize, 'numberTypeNode') && parentSize.endian === 'le') {\n switch (parentSize.format) {\n case 'u32':\n return {\n imports: new ImportMap(),\n nestedStructs: [],\n type: 'String',\n };\n case 'u8':\n case 'u16':\n case 'u64': {\n const prefix = parentSize.format.toUpperCase();\n return {\n imports: new ImportMap().add(`kaigan::types::${prefix}PrefixString`),\n nestedStructs: [],\n type: `${prefix}PrefixString`,\n };\n }\n default:\n throw new Error(`'String size not supported: ${parentSize.format}`);\n }\n }\n\n // TODO: Add to the Rust validator.\n throw new Error('String size not supported by Borsh');\n },\n\n visitStructFieldType(structFieldType, { self }) {\n const originalParentName = parentName;\n const originalInlineStruct = inlineStruct;\n const originalNestedStruct = nestedStruct;\n\n if (!originalParentName) {\n throw new Error('Struct field type must have a parent name.');\n }\n\n parentName = pascalCase(originalParentName) + pascalCase(structFieldType.name);\n nestedStruct = true;\n inlineStruct = false;\n\n const fieldManifest = visit(structFieldType.type, self);\n\n parentName = originalParentName;\n inlineStruct = originalInlineStruct;\n nestedStruct = originalNestedStruct;\n\n const fieldName = snakeCase(structFieldType.name);\n const docblock = rustDocblock(structFieldType.docs);\n const resolvedNestedType = resolveNestedTypeNode(structFieldType.type);\n\n let derive = '';\n if (fieldManifest.type === 'Pubkey') {\n derive =\n '#[cfg_attr(feature = \"serde\", serde(with = \"serde_with::As::<serde_with::DisplayFromStr>\"))]\\n';\n } else if (fieldManifest.type === 'Vec<Pubkey>') {\n derive =\n '#[cfg_attr(feature = \"serde\", serde(with = \"serde_with::As::<Vec<serde_with::DisplayFromStr>>\"))]\\n';\n } else if (\n (isNode(resolvedNestedType, 'arrayTypeNode') &&\n isNode(resolvedNestedType.count, 'fixedCountNode') &&\n resolvedNestedType.count.value > 32) ||\n (isNode(resolvedNestedType, ['bytesTypeNode', 'stringTypeNode']) &&\n isNode(structFieldType.type, 'fixedSizeTypeNode') &&\n structFieldType.type.size > 32)\n ) {\n derive =\n '#[cfg_attr(feature = \"serde\", serde(with = \"serde_with::As::<serde_with::Bytes>\"))]\\n';\n }\n\n return {\n ...fieldManifest,\n type: inlineStruct\n ? `${docblock}${derive}${fieldName}: ${fieldManifest.type},`\n : `${docblock}${derive}pub ${fieldName}: ${fieldManifest.type},`,\n };\n },\n\n visitStructType(structType, { self }) {\n const originalParentName = parentName;\n\n if (!originalParentName) {\n // TODO: Add to the Rust validator.\n throw new Error('Struct type must have a parent name.');\n }\n\n const fields = structType.fields.map(field => visit(field, self));\n const fieldTypes = fields.map(field => field.type).join('\\n');\n const mergedManifest = mergeManifests(fields);\n\n if (nestedStruct) {\n const nestedTraits = getTraitsFromNode(\n definedTypeNode({ name: originalParentName, type: structType }),\n );\n mergedManifest.imports.mergeWith(nestedTraits.imports);\n return {\n ...mergedManifest,\n nestedStructs: [\n ...mergedManifest.nestedStructs,\n `${nestedTraits.render}pub struct ${pascalCase(originalParentName)} {\\n${fieldTypes}\\n}`,\n ],\n type: pascalCase(originalParentName),\n };\n }\n\n if (inlineStruct) {\n return { ...mergedManifest, type: `{\\n${fieldTypes}\\n}` };\n }\n\n return {\n ...mergedManifest,\n type: `pub struct ${pascalCase(originalParentName)} {\\n${fieldTypes}\\n}`,\n };\n },\n\n visitTupleType(tupleType, { self }) {\n const items = tupleType.items.map(item => visit(item, self));\n const mergedManifest = mergeManifests(items);\n\n return {\n ...mergedManifest,\n type: `(${items.map(item => item.type).join(', ')})`,\n };\n },\n\n visitZeroableOptionType(node) {\n throw new CodamaError(CODAMA_ERROR__RENDERERS__UNSUPPORTED_NODE, { kind: node.kind, node });\n },\n }),\n );\n}\n\nfunction mergeManifests(manifests: TypeManifest[]): Pick<TypeManifest, 'imports' | 'nestedStructs'> {\n return {\n imports: new ImportMap().mergeWith(...manifests.map(td => td.imports)),\n nestedStructs: manifests.flatMap(m => m.nestedStructs),\n };\n}\n","import {\n arrayValueNode,\n bytesValueNode,\n isNode,\n numberValueNode,\n pascalCase,\n RegisteredValueNode,\n ValueNode,\n} from '@codama/nodes';\nimport { visit, Visitor } from '@codama/visitors-core';\n\nimport { ImportMap } from './ImportMap';\nimport { getBytesFromBytesValueNode, GetImportFromFunction } from './utils';\n\nexport function renderValueNode(\n value: ValueNode,\n getImportFrom: GetImportFromFunction,\n useStr: boolean = false,\n): {\n imports: ImportMap;\n render: string;\n} {\n return visit(value, renderValueNodeVisitor(getImportFrom, useStr));\n}\n\nexport function renderValueNodeVisitor(\n getImportFrom: GetImportFromFunction,\n useStr: boolean = false,\n): Visitor<\n {\n imports: ImportMap;\n render: string;\n },\n RegisteredValueNode['kind']\n> {\n return {\n visitArrayValue(node) {\n const list = node.items.map(v => visit(v, this));\n return {\n imports: new ImportMap().mergeWith(...list.map(c => c.imports)),\n render: `[${list.map(c => c.render).join(', ')}]`,\n };\n },\n visitBooleanValue(node) {\n return {\n imports: new ImportMap(),\n render: JSON.stringify(node.boolean),\n };\n },\n visitBytesValue(node) {\n const bytes = getBytesFromBytesValueNode(node);\n const numbers = Array.from(bytes).map(numberValueNode);\n return visit(arrayValueNode(numbers), this);\n },\n visitConstantValue(node) {\n if (isNode(node.value, 'bytesValueNode')) {\n return visit(node.value, this);\n }\n if (isNode(node.type, 'stringTypeNode') && isNode(node.value, 'stringValueNode')) {\n return visit(bytesValueNode(node.type.encoding, node.value.string), this);\n }\n if (isNode(node.type, 'numberTypeNode') && isNode(node.value, 'numberValueNode')) {\n const numberManifest = visit(node.value, this);\n const { format, endian } = node.type;\n const byteFunction = endian === 'le' ? 'to_le_bytes' : 'to_be_bytes';\n numberManifest.render = `${numberManifest.render}${format}.${byteFunction}()`;\n return numberManifest;\n }\n throw new Error('Unsupported constant value type.');\n },\n visitEnumValue(node) {\n const imports = new ImportMap();\n const enumName = pascalCase(node.enum.name);\n const variantName = pascalCase(node.variant);\n const importFrom = getImportFrom(node.enum);\n imports.add(`${importFrom}::${enumName}`);\n if (!node.value) {\n return { imports, render: `${enumName}::${variantName}` };\n }\n const enumValue = visit(node.value, this);\n const fields = enumValue.render;\n return {\n imports: imports.mergeWith(enumValue.imports),\n render: `${enumName}::${variantName} ${fields}`,\n };\n },\n visitMapEntryValue(node) {\n const mapKey = visit(node.key, this);\n const mapValue = visit(node.value, this);\n return {\n imports: mapKey.imports.mergeWith(mapValue.imports),\n render: `[${mapKey.render}, ${mapValue.render}]`,\n };\n },\n visitMapValue(node) {\n const map = node.entries.map(entry => visit(entry, this));\n const imports = new ImportMap().add('std::collection::HashMap');\n return {\n imports: imports.mergeWith(...map.map(c => c.imports)),\n render: `HashMap::from([${map.map(c => c.render).join(', ')}])`,\n };\n },\n visitNoneValue() {\n return {\n imports: new ImportMap(),\n render: 'None',\n };\n },\n visitNumberValue(node) {\n return {\n imports: new ImportMap(),\n render: node.number.toString(),\n };\n },\n visitPublicKeyValue(node) {\n return {\n imports: new ImportMap().add('solana_program::pubkey'),\n render: `pubkey!(\"${node.publicKey}\")`,\n };\n },\n visitSetValue(node) {\n const set = node.items.map(v => visit(v, this));\n const imports = new ImportMap().add('std::collection::HashSet');\n return {\n imports: imports.mergeWith(...set.map(c => c.imports)),\n render: `HashSet::from([${set.map(c => c.render).join(', ')}])`,\n };\n },\n visitSomeValue(node) {\n const child = visit(node.value, this);\n return {\n ...child,\n render: `Some(${child.render})`,\n };\n },\n visitStringValue(node) {\n return {\n imports: new ImportMap(),\n render: useStr ? `${JSON.stringify(node.string)}` : `String::from(${JSON.stringify(node.string)})`,\n };\n },\n visitStructFieldValue(node) {\n const structValue = visit(node.value, this);\n return {\n imports: structValue.imports,\n render: `${node.name}: ${structValue.render}`,\n };\n },\n visitStructValue(node) {\n const struct = node.fields.map(field => visit(field, this));\n return {\n imports: new ImportMap().mergeWith(...struct.map(c => c.imports)),\n render: `{ ${struct.map(c => c.render).join(', ')} }`,\n };\n },\n visitTupleValue(node) {\n const tuple = node.items.map(v => visit(v, this));\n return {\n imports: new ImportMap().mergeWith(...tuple.map(c => c.imports)),\n render: `(${tuple.map(c => c.render).join(', ')})`,\n };\n },\n };\n}\n","import { logWarn } from '@codama/errors';\nimport {\n getAllAccounts,\n getAllDefinedTypes,\n getAllInstructionsWithSubs,\n getAllPrograms,\n InstructionNode,\n isNode,\n isNodeFilter,\n pascalCase,\n ProgramNode,\n resolveNestedTypeNode,\n snakeCase,\n structTypeNodeFromInstructionArgumentNodes,\n VALUE_NODES,\n} from '@codama/nodes';\nimport { RenderMap } from '@codama/renderers-core';\nimport {\n extendVisitor,\n LinkableDictionary,\n NodeStack,\n pipe,\n recordLinkablesOnFirstVisitVisitor,\n recordNodeStackVisitor,\n staticVisitor,\n visit,\n} from '@codama/visitors-core';\n\nimport { getTypeManifestVisitor } from './getTypeManifestVisitor';\nimport { ImportMap } from './ImportMap';\nimport { renderValueNode } from './renderValueNodeVisitor';\nimport { getImportFromFactory, getTraitsFromNodeFactory, LinkOverrides, render, TraitOptions } from './utils';\n\nexport type GetRenderMapOptions = {\n anchorTraits?: boolean;\n defaultTraitOverrides?: string[];\n dependencyMap?: Record<string, string>;\n linkOverrides?: LinkOverrides;\n renderParentInstructions?: boolean;\n traitOptions?: TraitOptions;\n};\n\nexport function getRenderMapVisitor(options: GetRenderMapOptions = {}) {\n const linkables = new LinkableDictionary();\n const stack = new NodeStack();\n let program: ProgramNode | null = null;\n\n const renderParentInstructions = options.renderParentInstructions ?? false;\n const dependencyMap = options.dependencyMap ?? {};\n const getImportFrom = getImportFromFactory(options.linkOverrides ?? {});\n const getTraitsFromNode = getTraitsFromNodeFactory(options.traitOptions);\n const typeManifestVisitor = getTypeManifestVisitor({ getImportFrom, getTraitsFromNode });\n const anchorTraits = options.anchorTraits ?? true;\n\n return pipe(\n staticVisitor(() => new RenderMap(), {\n keys: ['rootNode', 'programNode', 'instructionNode', 'accountNode', 'definedTypeNode'],\n }),\n v =>\n extendVisitor(v, {\n visitAccount(node) {\n const typeManifest = visit(node, typeManifestVisitor);\n\n // Seeds.\n const seedsImports = new ImportMap();\n const pda = node.pda ? linkables.get([...stack.getPath(), node.pda]) : undefined;\n const pdaSeeds = pda?.seeds ?? [];\n const seeds = pdaSeeds.map(seed => {\n if (isNode(seed, 'variablePdaSeedNode')) {\n const seedManifest = visit(seed.type, typeManifestVisitor);\n seedsImports.mergeWith(seedManifest.imports);\n const resolvedType = resolveNestedTypeNode(seed.type);\n return { ...seed, resolvedType, typeManifest: seedManifest };\n }\n if (isNode(seed.value, 'programIdValueNode')) {\n return seed;\n }\n const seedManifest = visit(seed.type, typeManifestVisitor);\n const valueManifest = renderValueNode(seed.value, getImportFrom, true);\n seedsImports.mergeWith(valueManifest.imports);\n const resolvedType = resolveNestedTypeNode(seed.type);\n return { ...seed, resolvedType, typeManifest: seedManifest, valueManifest };\n });\n const hasVariableSeeds = pdaSeeds.filter(isNodeFilter('variablePdaSeedNode')).length > 0;\n const constantSeeds = seeds\n .filter(isNodeFilter('constantPdaSeedNode'))\n .filter(seed => !isNode(seed.value, 'programIdValueNode'));\n\n const { imports } = typeManifest;\n\n if (hasVariableSeeds) {\n imports.mergeWith(seedsImports);\n }\n\n return new RenderMap().add(\n `accounts/${snakeCase(node.name)}.rs`,\n render('accountsPage.njk', {\n account: node,\n anchorTraits,\n constantSeeds,\n hasVariableSeeds,\n imports: imports\n .remove(`generatedAccounts::${pascalCase(node.name)}`)\n .toString(dependencyMap),\n pda,\n program,\n seeds,\n typeManifest,\n }),\n );\n },\n\n visitDefinedType(node) {\n const typeManifest = visit(node, typeManifestVisitor);\n const imports = new ImportMap().mergeWithManifest(typeManifest);\n\n return new RenderMap().add(\n `types/${snakeCase(node.name)}.rs`,\n render('definedTypesPage.njk', {\n definedType: node,\n imports: imports.remove(`generatedTypes::${pascalCase(node.name)}`).toString(dependencyMap),\n typeManifest,\n }),\n );\n },\n\n visitInstruction(node) {\n // Imports.\n const imports = new ImportMap();\n imports.add(['borsh::BorshDeserialize', 'borsh::BorshSerialize']);\n\n // canMergeAccountsAndArgs\n const accountsAndArgsConflicts = getConflictsForInstructionAccountsAndArgs(node);\n if (accountsAndArgsConflicts.length > 0) {\n logWarn(\n `[Rust] Accounts and args of instruction [${node.name}] have the following ` +\n `conflicting attributes [${accountsAndArgsConflicts.join(', ')}]. ` +\n `Thus, the conflicting arguments will be suffixed with \"_arg\". ` +\n 'You may want to rename the conflicting attributes.',\n );\n }\n\n // Instruction args.\n const instructionArgs: {\n default: boolean;\n innerOptionType: string | null;\n name: string;\n optional: boolean;\n type: string;\n value: string | null;\n }[] = [];\n let hasArgs = false;\n let hasOptional = false;\n\n node.arguments.forEach(argument => {\n const argumentVisitor = getTypeManifestVisitor({\n getImportFrom,\n getTraitsFromNode,\n nestedStruct: true,\n parentName: `${pascalCase(node.name)}InstructionData`,\n });\n const manifest = visit(argument.type, argumentVisitor);\n imports.mergeWith(manifest.imports);\n const innerOptionType = isNode(argument.type, 'optionTypeNode')\n ? manifest.type.slice('Option<'.length, -1)\n : null;\n\n const hasDefaultValue = !!argument.defaultValue && isNode(argument.defaultValue, VALUE_NODES);\n let renderValue: string | null = null;\n if (hasDefaultValue) {\n const { imports: argImports, render: value } = renderValueNode(\n argument.defaultValue,\n getImportFrom,\n );\n imports.mergeWith(argImports);\n renderValue = value;\n }\n\n hasArgs = hasArgs || argument.defaultValueStrategy !== 'omitted';\n hasOptional = hasOptional || (hasDefaultValue && argument.defaultValueStrategy !== 'omitted');\n\n const name = accountsAndArgsConflicts.includes(argument.name)\n ? `${argument.name}_arg`\n : argument.name;\n\n instructionArgs.push({\n default: hasDefaultValue && argument.defaultValueStrategy === 'omitted',\n innerOptionType,\n name,\n optional: hasDefaultValue && argument.defaultValueStrategy !== 'omitted',\n type: manifest.type,\n value: renderValue,\n });\n });\n\n const struct = structTypeNodeFromInstructionArgumentNodes(node.arguments);\n const structVisitor = getTypeManifestVisitor({\n getImportFrom,\n getTraitsFromNode,\n parentName: `${pascalCase(node.name)}InstructionData`,\n });\n const typeManifest = visit(struct, structVisitor);\n\n return new RenderMap().add(\n `instructions/${snakeCase(node.name)}.rs`,\n render('instructionsPage.njk', {\n hasArgs,\n hasOptional,\n imports: imports\n .remove(`generatedInstructions::${pascalCase(node.name)}`)\n .toString(dependencyMap),\n instruction: node,\n instructionArgs,\n program,\n typeManifest,\n }),\n );\n },\n\n visitProgram(node, { self }) {\n program = node;\n const renderMap = new RenderMap()\n .mergeWith(...node.accounts.map(account => visit(account, self)))\n .mergeWith(...node.definedTypes.map(type => visit(type, self)))\n .mergeWith(\n ...getAllInstructionsWithSubs(node, {\n leavesOnly: !renderParentInstructions,\n }).map(ix => visit(ix, self)),\n );\n\n // Errors.\n if (node.errors.length > 0) {\n renderMap.add(\n `errors/${snakeCase(node.name)}.rs`,\n render('errorsPage.njk', {\n errors: node.errors,\n imports: new ImportMap().toString(dependencyMap),\n program: node,\n }),\n );\n }\n\n program = null;\n return renderMap;\n },\n\n visitRoot(node, { self }) {\n const programsToExport = getAllPrograms(node);\n const accountsToExport = getAllAccounts(node);\n const instructionsToExport = getAllInstructionsWithSubs(node, {\n leavesOnly: !renderParentInstructions,\n });\n const definedTypesToExport = getAllDefinedTypes(node);\n const hasAnythingToExport =\n programsToExport.length > 0 ||\n accountsToExport.length > 0 ||\n instructionsToExport.length > 0 ||\n definedTypesToExport.length > 0;\n\n const ctx = {\n accountsToExport,\n definedTypesToExport,\n hasAnythingToExport,\n instructionsToExport,\n programsToExport,\n root: node,\n };\n\n const map = new RenderMap();\n if (programsToExport.length > 0) {\n map.add('programs.rs', render('programsMod.njk', ctx)).add(\n 'errors/mod.rs',\n render('errorsMod.njk', ctx),\n );\n }\n if (accountsToExport.length > 0) {\n map.add('accounts/mod.rs', render('accountsMod.njk', ctx));\n }\n if (instructionsToExport.length > 0) {\n map.add('instructions/mod.rs', render('instructionsMod.njk', ctx));\n }\n if (definedTypesToExport.length > 0) {\n map.add('types/mod.rs', render('definedTypesMod.njk', ctx));\n }\n\n return map\n .add('mod.rs', render('rootMod.njk', ctx))\n .mergeWith(...getAllPrograms(node).map(p => visit(p, self)));\n },\n }),\n v => recordNodeStackVisitor(v, stack),\n v => recordLinkablesOnFirstVisitVisitor(v, linkables),\n );\n}\n\nfunction getConflictsForInstructionAccountsAndArgs(instruction: InstructionNode): string[] {\n const allNames = [\n ...instruction.accounts.map(account => account.name),\n ...instruction.arguments.map(argument => argument.name),\n ];\n const duplicates = allNames.filter((e, i, a) => a.indexOf(e) !== i);\n return [...new Set(duplicates)];\n}\n","import { logError, logWarn } from '@codama/errors';\nimport { deleteDirectory, writeRenderMapVisitor } from '@codama/renderers-core';\nimport { rootNodeVisitor, visit } from '@codama/visitors-core';\nimport { spawnSync } from 'child_process';\n\nimport { GetRenderMapOptions, getRenderMapVisitor } from './getRenderMapVisitor';\n\nexport type RenderOptions = GetRenderMapOptions & {\n crateFolder?: string;\n deleteFolderBeforeRendering?: boolean;\n formatCode?: boolean;\n toolchain?: string;\n};\n\nexport function renderVisitor(path: string, options: RenderOptions = {}) {\n return rootNodeVisitor(root => {\n // Delete existing generated folder.\n if (options.deleteFolderBeforeRendering ?? true) {\n deleteDirectory(path);\n }\n\n // Render the new files.\n visit(root, writeRenderMapVisitor(getRenderMapVisitor(options), path));\n\n // format the code\n if (options.formatCode) {\n if (options.crateFolder) {\n const toolchain = options.toolchain ?? '+stable';\n runFormatter('cargo', [toolchain, 'fmt', '--manifest-path', `${options.crateFolder}/Cargo.toml`]);\n } else {\n logWarn('No crate folder specified, skipping formatting.');\n }\n }\n });\n}\n\nfunction runFormatter(cmd: string, args: string[]) {\n const { stdout, stderr, error } = spawnSync(cmd, args);\n if (error?.message?.includes('ENOENT')) {\n logWarn(`Could not find ${cmd}, skipping formatting.`);\n return;\n }\n if (stdout.length > 0) {\n logWarn(`(cargo-fmt) ${stdout || error}`);\n }\n if (stderr.length > 0) {\n logError(`(cargo-fmt) ${stderr || error}`);\n }\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import { CodamaError, CODAMA_ERROR__RENDERERS__UNSUPPORTED_NODE, logWarn, logError, CODAMA_ERROR__UNEXPECTED_NODE_KIND } from '@codama/errors';
2
2
  import { REGISTERED_TYPE_NODE_KINDS, pascalCase, isNode, resolveNestedTypeNode, remainderCountNode, arrayTypeNode, numberTypeNode, snakeCase, definedTypeNode, isNodeFilter, VALUE_NODES, structTypeNodeFromInstructionArgumentNodes, getAllInstructionsWithSubs, getAllPrograms, getAllAccounts, getAllDefinedTypes, camelCase, kebabCase, titleCase, assertIsNode, isScalarEnum, fixedCountNode, prefixedCountNode, numberValueNode, arrayValueNode, bytesValueNode } from '@codama/nodes';
3
3
  import { RenderMap, deleteDirectory, writeRenderMapVisitor } from '@codama/renderers-core';
4
- import { pipe, mergeVisitor, extendVisitor, visit, LinkableDictionary, staticVisitor, recordLinkablesVisitor, rootNodeVisitor } from '@codama/visitors-core';
4
+ import { pipe, mergeVisitor, extendVisitor, visit, LinkableDictionary, NodeStack, staticVisitor, recordNodeStackVisitor, recordLinkablesOnFirstVisitVisitor, rootNodeVisitor } from '@codama/visitors-core';
5
5
  import { getBase64Encoder, getBase58Encoder, getBase16Encoder, getUtf8Encoder } from '@solana/codecs-strings';
6
6
  import { dirname, join } from 'node:path';
7
7
  import { fileURLToPath } from 'node:url';
@@ -263,7 +263,7 @@ function getTypeManifestVisitor(options) {
263
263
  ...mergeManifests(values),
264
264
  type: values.map((v) => v.type).join("\n")
265
265
  }),
266
- [...REGISTERED_TYPE_NODE_KINDS, "definedTypeLinkNode", "definedTypeNode", "accountNode"]
266
+ { keys: [...REGISTERED_TYPE_NODE_KINDS, "definedTypeLinkNode", "definedTypeNode", "accountNode"] }
267
267
  ),
268
268
  (v) => extendVisitor(v, {
269
269
  visitAccount(account, { self }) {
@@ -751,22 +751,23 @@ function renderValueNodeVisitor(getImportFrom, useStr = false) {
751
751
  // src/getRenderMapVisitor.ts
752
752
  function getRenderMapVisitor(options = {}) {
753
753
  const linkables = new LinkableDictionary();
754
+ const stack = new NodeStack();
754
755
  let program = null;
755
756
  const renderParentInstructions = options.renderParentInstructions ?? false;
756
757
  const dependencyMap = options.dependencyMap ?? {};
757
758
  const getImportFrom = getImportFromFactory(options.linkOverrides ?? {});
758
759
  const getTraitsFromNode2 = getTraitsFromNodeFactory(options.traitOptions);
759
760
  const typeManifestVisitor = getTypeManifestVisitor({ getImportFrom, getTraitsFromNode: getTraitsFromNode2 });
761
+ const anchorTraits = options.anchorTraits ?? true;
760
762
  return pipe(
761
- staticVisitor(
762
- () => new RenderMap(),
763
- ["rootNode", "programNode", "instructionNode", "accountNode", "definedTypeNode"]
764
- ),
763
+ staticVisitor(() => new RenderMap(), {
764
+ keys: ["rootNode", "programNode", "instructionNode", "accountNode", "definedTypeNode"]
765
+ }),
765
766
  (v) => extendVisitor(v, {
766
767
  visitAccount(node) {
767
768
  const typeManifest = visit(node, typeManifestVisitor);
768
769
  const seedsImports = new ImportMap();
769
- const pda = node.pda ? linkables.get(node.pda) : void 0;
770
+ const pda = node.pda ? linkables.get([...stack.getPath(), node.pda]) : void 0;
770
771
  const pdaSeeds = pda?.seeds ?? [];
771
772
  const seeds = pdaSeeds.map((seed) => {
772
773
  if (isNode(seed, "variablePdaSeedNode")) {
@@ -794,6 +795,7 @@ function getRenderMapVisitor(options = {}) {
794
795
  `accounts/${snakeCase(node.name)}.rs`,
795
796
  render("accountsPage.njk", {
796
797
  account: node,
798
+ anchorTraits,
797
799
  constantSeeds,
798
800
  hasVariableSeeds,
799
801
  imports: imports.remove(`generatedAccounts::${pascalCase(node.name)}`).toString(dependencyMap),
@@ -935,7 +937,8 @@ function getRenderMapVisitor(options = {}) {
935
937
  return map.add("mod.rs", render("rootMod.njk", ctx)).mergeWith(...getAllPrograms(node).map((p) => visit(p, self)));
936
938
  }
937
939
  }),
938
- (v) => recordLinkablesVisitor(v, linkables)
940
+ (v) => recordNodeStackVisitor(v, stack),
941
+ (v) => recordLinkablesOnFirstVisitVisitor(v, linkables)
939
942
  );
940
943
  }
941
944
  function getConflictsForInstructionAccountsAndArgs(instruction) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ImportMap.ts","../src/utils/codecs.ts","../src/utils/linkOverrides.ts","../src/utils/render.ts","../src/utils/traitOptions.ts","../src/getTypeManifestVisitor.ts","../src/renderValueNodeVisitor.ts","../src/getRenderMapVisitor.ts","../src/renderVisitor.ts"],"names":["dirname","pathDirname","camelCase","traits","getTraitsFromNode","pascalCase","isNode","CodamaError","snakeCase","visit","pipe","extendVisitor","seedManifest","resolvedType","resolveNestedTypeNode","logWarn"],"mappings":"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","file":"index.node.mjs","sourcesContent":["import { TypeManifest } from './getTypeManifestVisitor';\n\nconst DEFAULT_MODULE_MAP: Record<string, string> = {\n generated: 'crate::generated',\n generatedAccounts: 'crate::generated::accounts',\n generatedErrors: 'crate::generated::errors',\n generatedInstructions: 'crate::generated::instructions',\n generatedTypes: 'crate::generated::types',\n hooked: 'crate::hooked',\n mplEssentials: 'mpl_toolbox',\n mplToolbox: 'mpl_toolbox',\n};\n\nexport class ImportMap {\n protected readonly _imports: Set<string> = new Set();\n\n protected readonly _aliases: Map<string, string> = new Map();\n\n get imports(): Set<string> {\n return this._imports;\n }\n\n get aliases(): Map<string, string> {\n return this._aliases;\n }\n\n add(imports: Set<string> | string[] | string): ImportMap {\n const newImports = typeof imports === 'string' ? [imports] : imports;\n newImports.forEach(i => this._imports.add(i));\n return this;\n }\n\n remove(imports: Set<string> | string[] | string): ImportMap {\n const importsToRemove = typeof imports === 'string' ? [imports] : imports;\n importsToRemove.forEach(i => this._imports.delete(i));\n return this;\n }\n\n mergeWith(...others: ImportMap[]): ImportMap {\n others.forEach(other => {\n this.add(other._imports);\n other._aliases.forEach((alias, importName) => this.addAlias(importName, alias));\n });\n return this;\n }\n\n mergeWithManifest(manifest: TypeManifest): ImportMap {\n return this.mergeWith(manifest.imports);\n }\n\n addAlias(importName: string, alias: string): ImportMap {\n this._aliases.set(importName, alias);\n return this;\n }\n\n isEmpty(): boolean {\n return this._imports.size === 0;\n }\n\n resolveDependencyMap(dependencies: Record<string, string>): ImportMap {\n const dependencyMap = { ...DEFAULT_MODULE_MAP, ...dependencies };\n const newImportMap = new ImportMap();\n const resolveDependency = (i: string): string => {\n const dependencyKey = Object.keys(dependencyMap).find(key => i.startsWith(`${key}::`));\n if (!dependencyKey) return i;\n const dependencyValue = dependencyMap[dependencyKey];\n return dependencyValue + i.slice(dependencyKey.length);\n };\n this._imports.forEach(i => newImportMap.add(resolveDependency(i)));\n this._aliases.forEach((alias, i) => newImportMap.addAlias(resolveDependency(i), alias));\n return newImportMap;\n }\n\n toString(dependencies: Record<string, string>): string {\n const resolvedMap = this.resolveDependencyMap(dependencies);\n const importStatements = [...resolvedMap.imports].map(i => {\n const alias = resolvedMap.aliases.get(i);\n if (alias) return `use ${i} as ${alias};`;\n return `use ${i};`;\n });\n return importStatements.join('\\n');\n }\n}\n","import { BytesValueNode } from '@codama/nodes';\nimport { getBase16Encoder, getBase58Encoder, getBase64Encoder, getUtf8Encoder } from '@solana/codecs-strings';\n\nexport function getBytesFromBytesValueNode(node: BytesValueNode): Uint8Array {\n switch (node.encoding) {\n case 'utf8':\n return getUtf8Encoder().encode(node.data) as Uint8Array;\n case 'base16':\n return getBase16Encoder().encode(node.data) as Uint8Array;\n case 'base58':\n return getBase58Encoder().encode(node.data) as Uint8Array;\n case 'base64':\n default:\n return getBase64Encoder().encode(node.data) as Uint8Array;\n }\n}\n","import { CODAMA_ERROR__UNEXPECTED_NODE_KIND, CodamaError } from '@codama/errors';\nimport {\n AccountLinkNode,\n DefinedTypeLinkNode,\n InstructionLinkNode,\n PdaLinkNode,\n ProgramLinkNode,\n ResolverValueNode,\n} from '@codama/nodes';\n\nexport type LinkOverrides = {\n accounts?: Record<string, string>;\n definedTypes?: Record<string, string>;\n instructions?: Record<string, string>;\n pdas?: Record<string, string>;\n programs?: Record<string, string>;\n resolvers?: Record<string, string>;\n};\n\ntype OverridableNodes =\n | AccountLinkNode\n | DefinedTypeLinkNode\n | InstructionLinkNode\n | PdaLinkNode\n | ProgramLinkNode\n | ResolverValueNode;\n\nexport type GetImportFromFunction = (node: OverridableNodes, fallback?: string) => string;\n\nexport function getImportFromFactory(overrides: LinkOverrides): GetImportFromFunction {\n const linkOverrides = {\n accounts: overrides.accounts ?? {},\n definedTypes: overrides.definedTypes ?? {},\n instructions: overrides.instructions ?? {},\n pdas: overrides.pdas ?? {},\n programs: overrides.programs ?? {},\n resolvers: overrides.resolvers ?? {},\n };\n\n return (node: OverridableNodes) => {\n const kind = node.kind;\n switch (kind) {\n case 'accountLinkNode':\n return linkOverrides.accounts[node.name] ?? 'generatedAccounts';\n case 'definedTypeLinkNode':\n return linkOverrides.definedTypes[node.name] ?? 'generatedTypes';\n case 'instructionLinkNode':\n return linkOverrides.instructions[node.name] ?? 'generatedInstructions';\n case 'pdaLinkNode':\n return linkOverrides.pdas[node.name] ?? 'generatedAccounts';\n case 'programLinkNode':\n return linkOverrides.programs[node.name] ?? 'generatedPrograms';\n case 'resolverValueNode':\n return linkOverrides.resolvers[node.name] ?? 'hooked';\n default:\n throw new CodamaError(CODAMA_ERROR__UNEXPECTED_NODE_KIND, {\n expectedKinds: [\n 'AccountLinkNode',\n 'DefinedTypeLinkNode',\n 'InstructionLinkNode',\n 'PdaLinkNode',\n 'ProgramLinkNode',\n 'resolverValueNode',\n ],\n kind: kind satisfies never,\n node,\n });\n }\n };\n}\n","import { dirname as pathDirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport { camelCase, kebabCase, pascalCase, snakeCase, titleCase } from '@codama/nodes';\nimport nunjucks, { ConfigureOptions as NunJucksOptions } from 'nunjucks';\n\nexport function rustDocblock(docs: string[]): string {\n if (docs.length <= 0) return '';\n const lines = docs.map(doc => `/// ${doc}`);\n return `${lines.join('\\n')}\\n`;\n}\n\nexport const render = (template: string, context?: object, options?: NunJucksOptions): string => {\n // @ts-expect-error import.meta will be used in the right environment.\n const dirname = __ESM__ ? pathDirname(fileURLToPath(import.meta.url)) : __dirname;\n const templates = __TEST__ ? join(dirname, '..', '..', 'public', 'templates') : join(dirname, 'templates'); // Path to templates from bundled output file.\n const env = nunjucks.configure(templates, { autoescape: false, trimBlocks: true, ...options });\n env.addFilter('pascalCase', pascalCase);\n env.addFilter('camelCase', camelCase);\n env.addFilter('snakeCase', snakeCase);\n env.addFilter('kebabCase', kebabCase);\n env.addFilter('titleCase', titleCase);\n env.addFilter('rustDocblock', rustDocblock);\n return env.render(template, context);\n};\n","import { AccountNode, assertIsNode, camelCase, DefinedTypeNode, isNode, isScalarEnum } from '@codama/nodes';\n\nimport { ImportMap } from '../ImportMap';\n\nexport type TraitOptions = {\n /** The default traits to implement for all types. */\n baseDefaults?: string[];\n /**\n * The default traits to implement for data enums only — on top of the base defaults.\n * Data enums are enums with at least one non-unit variant.\n */\n dataEnumDefaults?: string[];\n /**\n * The mapping of feature flags to traits.\n * For each entry, the traits will be rendered within a\n * `#[cfg_attr(feature = \"feature_name\", derive(Traits))]` attribute.\n */\n featureFlags?: Record<string, string[]>;\n /** The complete trait overrides of specific types. */\n overrides?: Record<string, string[]>;\n /**\n * The default traits to implement for scalar enums only — on top of the base defaults.\n * Scalar enums are enums with no variants or only unit variants.\n */\n scalarEnumDefaults?: string[];\n /** The default traits to implement for structs only — on top of the base defaults. */\n structDefaults?: string[];\n /** Whether or not to use the fully qualified name for traits, instead of importing them. */\n useFullyQualifiedName?: boolean;\n};\n\nexport const DEFAULT_TRAIT_OPTIONS: Required<TraitOptions> = {\n baseDefaults: [\n 'borsh::BorshSerialize',\n 'borsh::BorshDeserialize',\n 'serde::Serialize',\n 'serde::Deserialize',\n 'Clone',\n 'Debug',\n 'Eq',\n 'PartialEq',\n ],\n dataEnumDefaults: [],\n featureFlags: { serde: ['serde::Serialize', 'serde::Deserialize'] },\n overrides: {},\n scalarEnumDefaults: ['Copy', 'PartialOrd', 'Hash', 'num_derive::FromPrimitive'],\n structDefaults: [],\n useFullyQualifiedName: false,\n};\n\nexport type GetTraitsFromNodeFunction = (node: AccountNode | DefinedTypeNode) => { imports: ImportMap; render: string };\n\nexport function getTraitsFromNodeFactory(options: TraitOptions = {}): GetTraitsFromNodeFunction {\n return node => getTraitsFromNode(node, options);\n}\n\nexport function getTraitsFromNode(\n node: AccountNode | DefinedTypeNode,\n userOptions: TraitOptions = {},\n): { imports: ImportMap; render: string } {\n assertIsNode(node, ['accountNode', 'definedTypeNode']);\n const options: Required<TraitOptions> = { ...DEFAULT_TRAIT_OPTIONS, ...userOptions };\n\n // Get the node type and return early if it's a type alias.\n const nodeType = getNodeType(node);\n if (nodeType === 'alias') {\n return { imports: new ImportMap(), render: '' };\n }\n\n // Find all the FQN traits for the node.\n const sanitizedOverrides = Object.fromEntries(\n Object.entries(options.overrides).map(([key, value]) => [camelCase(key), value]),\n );\n const nodeOverrides: string[] | undefined = sanitizedOverrides[node.name];\n const allTraits = nodeOverrides === undefined ? getDefaultTraits(nodeType, options) : nodeOverrides;\n\n // Wrap the traits in feature flags if necessary.\n const partitionedTraits = partitionTraitsInFeatures(allTraits, options.featureFlags);\n let unfeaturedTraits = partitionedTraits[0];\n const featuredTraits = partitionedTraits[1];\n\n // Import the traits if necessary.\n const imports = new ImportMap();\n if (!options.useFullyQualifiedName) {\n unfeaturedTraits = extractFullyQualifiedNames(unfeaturedTraits, imports);\n }\n\n // Render the trait lines.\n const traitLines: string[] = [\n ...(unfeaturedTraits.length > 0 ? [`#[derive(${unfeaturedTraits.join(', ')})]\\n`] : []),\n ...Object.entries(featuredTraits).map(([feature, traits]) => {\n return `#[cfg_attr(feature = \"${feature}\", derive(${traits.join(', ')}))]\\n`;\n }),\n ];\n\n return { imports, render: traitLines.join('') };\n}\n\nfunction getNodeType(node: AccountNode | DefinedTypeNode): 'alias' | 'dataEnum' | 'scalarEnum' | 'struct' {\n if (isNode(node, 'accountNode')) return 'struct';\n if (isNode(node.type, 'structTypeNode')) return 'struct';\n if (isNode(node.type, 'enumTypeNode')) {\n return isScalarEnum(node.type) ? 'scalarEnum' : 'dataEnum';\n }\n return 'alias';\n}\n\nfunction getDefaultTraits(\n nodeType: 'dataEnum' | 'scalarEnum' | 'struct',\n options: Pick<\n Required<TraitOptions>,\n 'baseDefaults' | 'dataEnumDefaults' | 'scalarEnumDefaults' | 'structDefaults'\n >,\n): string[] {\n switch (nodeType) {\n case 'dataEnum':\n return [...options.baseDefaults, ...options.dataEnumDefaults];\n case 'scalarEnum':\n return [...options.baseDefaults, ...options.scalarEnumDefaults];\n case 'struct':\n return [...options.baseDefaults, ...options.structDefaults];\n }\n}\n\nfunction partitionTraitsInFeatures(\n traits: string[],\n featureFlags: Record<string, string[]>,\n): [string[], Record<string, string[]>] {\n // Reverse the feature flags option for quick lookup.\n // If there are any duplicate traits, the first one encountered will be used.\n const reverseFeatureFlags = Object.entries(featureFlags).reduce(\n (acc, [feature, traits]) => {\n for (const trait of traits) {\n if (!acc[trait]) acc[trait] = feature;\n }\n return acc;\n },\n {} as Record<string, string>,\n );\n\n const unfeaturedTraits: string[] = [];\n const featuredTraits: Record<string, string[]> = {};\n for (const trait of traits) {\n const feature: string | undefined = reverseFeatureFlags[trait];\n if (feature === undefined) {\n unfeaturedTraits.push(trait);\n } else {\n if (!featuredTraits[feature]) featuredTraits[feature] = [];\n featuredTraits[feature].push(trait);\n }\n }\n\n return [unfeaturedTraits, featuredTraits];\n}\n\nfunction extractFullyQualifiedNames(traits: string[], imports: ImportMap): string[] {\n return traits.map(trait => {\n const index = trait.lastIndexOf('::');\n if (index === -1) return trait;\n imports.add(trait);\n return trait.slice(index + 2);\n });\n}\n","import { CODAMA_ERROR__RENDERERS__UNSUPPORTED_NODE, CodamaError } from '@codama/errors';\nimport {\n arrayTypeNode,\n CountNode,\n definedTypeNode,\n fixedCountNode,\n isNode,\n NumberTypeNode,\n numberTypeNode,\n pascalCase,\n prefixedCountNode,\n REGISTERED_TYPE_NODE_KINDS,\n remainderCountNode,\n resolveNestedTypeNode,\n snakeCase,\n} from '@codama/nodes';\nimport { extendVisitor, mergeVisitor, pipe, visit } from '@codama/visitors-core';\n\nimport { ImportMap } from './ImportMap';\nimport { GetImportFromFunction, GetTraitsFromNodeFunction, rustDocblock } from './utils';\n\nexport type TypeManifest = {\n imports: ImportMap;\n nestedStructs: string[];\n type: string;\n};\n\nexport function getTypeManifestVisitor(options: {\n getImportFrom: GetImportFromFunction;\n getTraitsFromNode: GetTraitsFromNodeFunction;\n nestedStruct?: boolean;\n parentName?: string | null;\n}) {\n const { getImportFrom, getTraitsFromNode } = options;\n let parentName: string | null = options.parentName ?? null;\n let nestedStruct: boolean = options.nestedStruct ?? false;\n let inlineStruct: boolean = false;\n let parentSize: NumberTypeNode | number | null = null;\n\n return pipe(\n mergeVisitor(\n (): TypeManifest => ({ imports: new ImportMap(), nestedStructs: [], type: '' }),\n (_, values) => ({\n ...mergeManifests(values),\n type: values.map(v => v.type).join('\\n'),\n }),\n [...REGISTERED_TYPE_NODE_KINDS, 'definedTypeLinkNode', 'definedTypeNode', 'accountNode'],\n ),\n v =>\n extendVisitor(v, {\n visitAccount(account, { self }) {\n parentName = pascalCase(account.name);\n const manifest = visit(account.data, self);\n const traits = getTraitsFromNode(account);\n manifest.imports.mergeWith(traits.imports);\n parentName = null;\n return {\n ...manifest,\n type: traits.render + manifest.type,\n };\n },\n\n visitArrayType(arrayType, { self }) {\n const childManifest = visit(arrayType.item, self);\n\n if (isNode(arrayType.count, 'fixedCountNode')) {\n return {\n ...childManifest,\n type: `[${childManifest.type}; ${arrayType.count.value}]`,\n };\n }\n\n if (isNode(arrayType.count, 'remainderCountNode')) {\n childManifest.imports.add('kaigan::types::RemainderVec');\n return {\n ...childManifest,\n type: `RemainderVec<${childManifest.type}>`,\n };\n }\n\n const prefix = resolveNestedTypeNode(arrayType.count.prefix);\n if (prefix.endian === 'le') {\n switch (prefix.format) {\n case 'u32':\n return {\n ...childManifest,\n type: `Vec<${childManifest.type}>`,\n };\n case 'u8':\n case 'u16':\n case 'u64': {\n const prefixFormat = prefix.format.toUpperCase();\n childManifest.imports.add(`kaigan::types::${prefixFormat}PrefixVec`);\n return {\n ...childManifest,\n type: `${prefixFormat}PrefixVec<${childManifest.type}>`,\n };\n }\n case 'shortU16': {\n childManifest.imports.add('solana_program::short_vec::ShortVec');\n return {\n ...childManifest,\n type: `ShortVec<${childManifest.type}>`,\n };\n }\n default:\n throw new Error(`Array prefix not supported: ${prefix.format}`);\n }\n }\n\n // TODO: Add to the Rust validator.\n throw new Error('Array size not supported by Borsh');\n },\n\n visitBooleanType(booleanType) {\n const resolvedSize = resolveNestedTypeNode(booleanType.size);\n if (resolvedSize.format === 'u8' && resolvedSize.endian === 'le') {\n return {\n imports: new ImportMap(),\n nestedStructs: [],\n type: 'bool',\n };\n }\n\n // TODO: Add to the Rust validator.\n throw new Error('Bool size not supported by Borsh');\n },\n\n visitBytesType(_bytesType, { self }) {\n let arraySize: CountNode = remainderCountNode();\n if (typeof parentSize === 'number') {\n arraySize = fixedCountNode(parentSize);\n } else if (parentSize && typeof parentSize === 'object') {\n arraySize = prefixedCountNode(parentSize);\n }\n const arrayType = arrayTypeNode(numberTypeNode('u8'), arraySize);\n return visit(arrayType, self);\n },\n\n visitDefinedType(definedType, { self }) {\n parentName = pascalCase(definedType.name);\n const manifest = visit(definedType.type, self);\n const traits = getTraitsFromNode(definedType);\n manifest.imports.mergeWith(traits.imports);\n parentName = null;\n\n const renderedType = isNode(definedType.type, ['enumTypeNode', 'structTypeNode'])\n ? manifest.type\n : `pub type ${pascalCase(definedType.name)} = ${manifest.type};`;\n\n return { ...manifest, type: `${traits.render}${renderedType}` };\n },\n\n visitDefinedTypeLink(node) {\n const pascalCaseDefinedType = pascalCase(node.name);\n const importFrom = getImportFrom(node);\n return {\n imports: new ImportMap().add(`${importFrom}::${pascalCaseDefinedType}`),\n nestedStructs: [],\n type: pascalCaseDefinedType,\n };\n },\n\n visitEnumEmptyVariantType(enumEmptyVariantType) {\n const name = pascalCase(enumEmptyVariantType.name);\n return {\n imports: new ImportMap(),\n nestedStructs: [],\n type: `${name},`,\n };\n },\n\n visitEnumStructVariantType(enumStructVariantType, { self }) {\n const name = pascalCase(enumStructVariantType.name);\n const originalParentName = parentName;\n\n if (!originalParentName) {\n throw new Error('Enum struct variant type must have a parent name.');\n }\n\n inlineStruct = true;\n parentName = pascalCase(originalParentName) + name;\n const typeManifest = visit(enumStructVariantType.struct, self);\n inlineStruct = false;\n parentName = originalParentName;\n\n return {\n ...typeManifest,\n type: `${name} ${typeManifest.type},`,\n };\n },\n\n visitEnumTupleVariantType(enumTupleVariantType, { self }) {\n const name = pascalCase(enumTupleVariantType.name);\n const originalParentName = parentName;\n\n if (!originalParentName) {\n throw new Error('Enum struct variant type must have a parent name.');\n }\n\n parentName = pascalCase(originalParentName) + name;\n const childManifest = visit(enumTupleVariantType.tuple, self);\n parentName = originalParentName;\n\n let derive = '';\n if (childManifest.type === '(Pubkey)') {\n derive =\n '#[cfg_attr(feature = \"serde\", serde(with = \"serde_with::As::<serde_with::DisplayFromStr>\"))]\\n';\n } else if (childManifest.type === '(Vec<Pubkey>)') {\n derive =\n '#[cfg_attr(feature = \"serde\", serde(with = \"serde_with::As::<Vec<serde_with::DisplayFromStr>>\"))]\\n';\n }\n\n return {\n ...childManifest,\n type: `${derive}${name}${childManifest.type},`,\n };\n },\n\n visitEnumType(enumType, { self }) {\n const originalParentName = parentName;\n if (!originalParentName) {\n // TODO: Add to the Rust validator.\n throw new Error('Enum type must have a parent name.');\n }\n\n const variants = enumType.variants.map(variant => visit(variant, self));\n const variantNames = variants.map(variant => variant.type).join('\\n');\n const mergedManifest = mergeManifests(variants);\n\n return {\n ...mergedManifest,\n type: `pub enum ${pascalCase(originalParentName)} {\\n${variantNames}\\n}`,\n };\n },\n\n visitFixedSizeType(fixedSizeType, { self }) {\n parentSize = fixedSizeType.size;\n const manifest = visit(fixedSizeType.type, self);\n parentSize = null;\n return manifest;\n },\n\n visitMapType(mapType, { self }) {\n const key = visit(mapType.key, self);\n const value = visit(mapType.value, self);\n const mergedManifest = mergeManifests([key, value]);\n mergedManifest.imports.add('std::collections::HashMap');\n return {\n ...mergedManifest,\n type: `HashMap<${key.type}, ${value.type}>`,\n };\n },\n\n visitNumberType(numberType) {\n if (numberType.endian !== 'le') {\n // TODO: Add to the Rust validator.\n throw new Error('Number endianness not supported by Borsh');\n }\n\n if (numberType.format === 'shortU16') {\n return {\n imports: new ImportMap().add('solana_program::short_vec::ShortU16'),\n nestedStructs: [],\n type: 'ShortU16',\n };\n }\n\n return {\n imports: new ImportMap(),\n nestedStructs: [],\n type: numberType.format,\n };\n },\n\n visitOptionType(optionType, { self }) {\n const childManifest = visit(optionType.item, self);\n\n const optionPrefix = resolveNestedTypeNode(optionType.prefix);\n if (optionPrefix.format === 'u8' && optionPrefix.endian === 'le') {\n return {\n ...childManifest,\n type: `Option<${childManifest.type}>`,\n };\n }\n\n // TODO: Add to the Rust validator.\n throw new Error('Option size not supported by Borsh');\n },\n\n visitPublicKeyType() {\n return {\n imports: new ImportMap().add('solana_program::pubkey::Pubkey'),\n nestedStructs: [],\n type: 'Pubkey',\n };\n },\n\n visitRemainderOptionType(node) {\n throw new CodamaError(CODAMA_ERROR__RENDERERS__UNSUPPORTED_NODE, { kind: node.kind, node });\n },\n\n visitSetType(setType, { self }) {\n const childManifest = visit(setType.item, self);\n childManifest.imports.add('std::collections::HashSet');\n return {\n ...childManifest,\n type: `HashSet<${childManifest.type}>`,\n };\n },\n\n visitSizePrefixType(sizePrefixType, { self }) {\n parentSize = resolveNestedTypeNode(sizePrefixType.prefix);\n const manifest = visit(sizePrefixType.type, self);\n parentSize = null;\n return manifest;\n },\n\n visitStringType() {\n if (!parentSize) {\n return {\n imports: new ImportMap().add(`kaigan::types::RemainderStr`),\n nestedStructs: [],\n type: `RemainderStr`,\n };\n }\n\n if (typeof parentSize === 'number') {\n return {\n imports: new ImportMap(),\n nestedStructs: [],\n type: `[u8; ${parentSize}]`,\n };\n }\n\n if (isNode(parentSize, 'numberTypeNode') && parentSize.endian === 'le') {\n switch (parentSize.format) {\n case 'u32':\n return {\n imports: new ImportMap(),\n nestedStructs: [],\n type: 'String',\n };\n case 'u8':\n case 'u16':\n case 'u64': {\n const prefix = parentSize.format.toUpperCase();\n return {\n imports: new ImportMap().add(`kaigan::types::${prefix}PrefixString`),\n nestedStructs: [],\n type: `${prefix}PrefixString`,\n };\n }\n default:\n throw new Error(`'String size not supported: ${parentSize.format}`);\n }\n }\n\n // TODO: Add to the Rust validator.\n throw new Error('String size not supported by Borsh');\n },\n\n visitStructFieldType(structFieldType, { self }) {\n const originalParentName = parentName;\n const originalInlineStruct = inlineStruct;\n const originalNestedStruct = nestedStruct;\n\n if (!originalParentName) {\n throw new Error('Struct field type must have a parent name.');\n }\n\n parentName = pascalCase(originalParentName) + pascalCase(structFieldType.name);\n nestedStruct = true;\n inlineStruct = false;\n\n const fieldManifest = visit(structFieldType.type, self);\n\n parentName = originalParentName;\n inlineStruct = originalInlineStruct;\n nestedStruct = originalNestedStruct;\n\n const fieldName = snakeCase(structFieldType.name);\n const docblock = rustDocblock(structFieldType.docs);\n const resolvedNestedType = resolveNestedTypeNode(structFieldType.type);\n\n let derive = '';\n if (fieldManifest.type === 'Pubkey') {\n derive =\n '#[cfg_attr(feature = \"serde\", serde(with = \"serde_with::As::<serde_with::DisplayFromStr>\"))]\\n';\n } else if (fieldManifest.type === 'Vec<Pubkey>') {\n derive =\n '#[cfg_attr(feature = \"serde\", serde(with = \"serde_with::As::<Vec<serde_with::DisplayFromStr>>\"))]\\n';\n } else if (\n (isNode(resolvedNestedType, 'arrayTypeNode') &&\n isNode(resolvedNestedType.count, 'fixedCountNode') &&\n resolvedNestedType.count.value > 32) ||\n (isNode(resolvedNestedType, ['bytesTypeNode', 'stringTypeNode']) &&\n isNode(structFieldType.type, 'fixedSizeTypeNode') &&\n structFieldType.type.size > 32)\n ) {\n derive =\n '#[cfg_attr(feature = \"serde\", serde(with = \"serde_with::As::<serde_with::Bytes>\"))]\\n';\n }\n\n return {\n ...fieldManifest,\n type: inlineStruct\n ? `${docblock}${derive}${fieldName}: ${fieldManifest.type},`\n : `${docblock}${derive}pub ${fieldName}: ${fieldManifest.type},`,\n };\n },\n\n visitStructType(structType, { self }) {\n const originalParentName = parentName;\n\n if (!originalParentName) {\n // TODO: Add to the Rust validator.\n throw new Error('Struct type must have a parent name.');\n }\n\n const fields = structType.fields.map(field => visit(field, self));\n const fieldTypes = fields.map(field => field.type).join('\\n');\n const mergedManifest = mergeManifests(fields);\n\n if (nestedStruct) {\n const nestedTraits = getTraitsFromNode(\n definedTypeNode({ name: originalParentName, type: structType }),\n );\n mergedManifest.imports.mergeWith(nestedTraits.imports);\n return {\n ...mergedManifest,\n nestedStructs: [\n ...mergedManifest.nestedStructs,\n `${nestedTraits.render}pub struct ${pascalCase(originalParentName)} {\\n${fieldTypes}\\n}`,\n ],\n type: pascalCase(originalParentName),\n };\n }\n\n if (inlineStruct) {\n return { ...mergedManifest, type: `{\\n${fieldTypes}\\n}` };\n }\n\n return {\n ...mergedManifest,\n type: `pub struct ${pascalCase(originalParentName)} {\\n${fieldTypes}\\n}`,\n };\n },\n\n visitTupleType(tupleType, { self }) {\n const items = tupleType.items.map(item => visit(item, self));\n const mergedManifest = mergeManifests(items);\n\n return {\n ...mergedManifest,\n type: `(${items.map(item => item.type).join(', ')})`,\n };\n },\n\n visitZeroableOptionType(node) {\n throw new CodamaError(CODAMA_ERROR__RENDERERS__UNSUPPORTED_NODE, { kind: node.kind, node });\n },\n }),\n );\n}\n\nfunction mergeManifests(manifests: TypeManifest[]): Pick<TypeManifest, 'imports' | 'nestedStructs'> {\n return {\n imports: new ImportMap().mergeWith(...manifests.map(td => td.imports)),\n nestedStructs: manifests.flatMap(m => m.nestedStructs),\n };\n}\n","import {\n arrayValueNode,\n bytesValueNode,\n isNode,\n numberValueNode,\n pascalCase,\n RegisteredValueNode,\n ValueNode,\n} from '@codama/nodes';\nimport { visit, Visitor } from '@codama/visitors-core';\n\nimport { ImportMap } from './ImportMap';\nimport { getBytesFromBytesValueNode, GetImportFromFunction } from './utils';\n\nexport function renderValueNode(\n value: ValueNode,\n getImportFrom: GetImportFromFunction,\n useStr: boolean = false,\n): {\n imports: ImportMap;\n render: string;\n} {\n return visit(value, renderValueNodeVisitor(getImportFrom, useStr));\n}\n\nexport function renderValueNodeVisitor(\n getImportFrom: GetImportFromFunction,\n useStr: boolean = false,\n): Visitor<\n {\n imports: ImportMap;\n render: string;\n },\n RegisteredValueNode['kind']\n> {\n return {\n visitArrayValue(node) {\n const list = node.items.map(v => visit(v, this));\n return {\n imports: new ImportMap().mergeWith(...list.map(c => c.imports)),\n render: `[${list.map(c => c.render).join(', ')}]`,\n };\n },\n visitBooleanValue(node) {\n return {\n imports: new ImportMap(),\n render: JSON.stringify(node.boolean),\n };\n },\n visitBytesValue(node) {\n const bytes = getBytesFromBytesValueNode(node);\n const numbers = Array.from(bytes).map(numberValueNode);\n return visit(arrayValueNode(numbers), this);\n },\n visitConstantValue(node) {\n if (isNode(node.value, 'bytesValueNode')) {\n return visit(node.value, this);\n }\n if (isNode(node.type, 'stringTypeNode') && isNode(node.value, 'stringValueNode')) {\n return visit(bytesValueNode(node.type.encoding, node.value.string), this);\n }\n if (isNode(node.type, 'numberTypeNode') && isNode(node.value, 'numberValueNode')) {\n const numberManifest = visit(node.value, this);\n const { format, endian } = node.type;\n const byteFunction = endian === 'le' ? 'to_le_bytes' : 'to_be_bytes';\n numberManifest.render = `${numberManifest.render}${format}.${byteFunction}()`;\n return numberManifest;\n }\n throw new Error('Unsupported constant value type.');\n },\n visitEnumValue(node) {\n const imports = new ImportMap();\n const enumName = pascalCase(node.enum.name);\n const variantName = pascalCase(node.variant);\n const importFrom = getImportFrom(node.enum);\n imports.add(`${importFrom}::${enumName}`);\n if (!node.value) {\n return { imports, render: `${enumName}::${variantName}` };\n }\n const enumValue = visit(node.value, this);\n const fields = enumValue.render;\n return {\n imports: imports.mergeWith(enumValue.imports),\n render: `${enumName}::${variantName} ${fields}`,\n };\n },\n visitMapEntryValue(node) {\n const mapKey = visit(node.key, this);\n const mapValue = visit(node.value, this);\n return {\n imports: mapKey.imports.mergeWith(mapValue.imports),\n render: `[${mapKey.render}, ${mapValue.render}]`,\n };\n },\n visitMapValue(node) {\n const map = node.entries.map(entry => visit(entry, this));\n const imports = new ImportMap().add('std::collection::HashMap');\n return {\n imports: imports.mergeWith(...map.map(c => c.imports)),\n render: `HashMap::from([${map.map(c => c.render).join(', ')}])`,\n };\n },\n visitNoneValue() {\n return {\n imports: new ImportMap(),\n render: 'None',\n };\n },\n visitNumberValue(node) {\n return {\n imports: new ImportMap(),\n render: node.number.toString(),\n };\n },\n visitPublicKeyValue(node) {\n return {\n imports: new ImportMap().add('solana_program::pubkey'),\n render: `pubkey!(\"${node.publicKey}\")`,\n };\n },\n visitSetValue(node) {\n const set = node.items.map(v => visit(v, this));\n const imports = new ImportMap().add('std::collection::HashSet');\n return {\n imports: imports.mergeWith(...set.map(c => c.imports)),\n render: `HashSet::from([${set.map(c => c.render).join(', ')}])`,\n };\n },\n visitSomeValue(node) {\n const child = visit(node.value, this);\n return {\n ...child,\n render: `Some(${child.render})`,\n };\n },\n visitStringValue(node) {\n return {\n imports: new ImportMap(),\n render: useStr ? `${JSON.stringify(node.string)}` : `String::from(${JSON.stringify(node.string)})`,\n };\n },\n visitStructFieldValue(node) {\n const structValue = visit(node.value, this);\n return {\n imports: structValue.imports,\n render: `${node.name}: ${structValue.render}`,\n };\n },\n visitStructValue(node) {\n const struct = node.fields.map(field => visit(field, this));\n return {\n imports: new ImportMap().mergeWith(...struct.map(c => c.imports)),\n render: `{ ${struct.map(c => c.render).join(', ')} }`,\n };\n },\n visitTupleValue(node) {\n const tuple = node.items.map(v => visit(v, this));\n return {\n imports: new ImportMap().mergeWith(...tuple.map(c => c.imports)),\n render: `(${tuple.map(c => c.render).join(', ')})`,\n };\n },\n };\n}\n","import { logWarn } from '@codama/errors';\nimport {\n getAllAccounts,\n getAllDefinedTypes,\n getAllInstructionsWithSubs,\n getAllPrograms,\n InstructionNode,\n isNode,\n isNodeFilter,\n pascalCase,\n ProgramNode,\n resolveNestedTypeNode,\n snakeCase,\n structTypeNodeFromInstructionArgumentNodes,\n VALUE_NODES,\n} from '@codama/nodes';\nimport { RenderMap } from '@codama/renderers-core';\nimport {\n extendVisitor,\n LinkableDictionary,\n pipe,\n recordLinkablesVisitor,\n staticVisitor,\n visit,\n} from '@codama/visitors-core';\n\nimport { getTypeManifestVisitor } from './getTypeManifestVisitor';\nimport { ImportMap } from './ImportMap';\nimport { renderValueNode } from './renderValueNodeVisitor';\nimport { getImportFromFactory, getTraitsFromNodeFactory, LinkOverrides, render, TraitOptions } from './utils';\n\nexport type GetRenderMapOptions = {\n defaultTraitOverrides?: string[];\n dependencyMap?: Record<string, string>;\n linkOverrides?: LinkOverrides;\n renderParentInstructions?: boolean;\n traitOptions?: TraitOptions;\n};\n\nexport function getRenderMapVisitor(options: GetRenderMapOptions = {}) {\n const linkables = new LinkableDictionary();\n let program: ProgramNode | null = null;\n\n const renderParentInstructions = options.renderParentInstructions ?? false;\n const dependencyMap = options.dependencyMap ?? {};\n const getImportFrom = getImportFromFactory(options.linkOverrides ?? {});\n const getTraitsFromNode = getTraitsFromNodeFactory(options.traitOptions);\n const typeManifestVisitor = getTypeManifestVisitor({ getImportFrom, getTraitsFromNode });\n\n return pipe(\n staticVisitor(\n () => new RenderMap(),\n ['rootNode', 'programNode', 'instructionNode', 'accountNode', 'definedTypeNode'],\n ),\n v =>\n extendVisitor(v, {\n visitAccount(node) {\n const typeManifest = visit(node, typeManifestVisitor);\n\n // Seeds.\n const seedsImports = new ImportMap();\n const pda = node.pda ? linkables.get(node.pda) : undefined;\n const pdaSeeds = pda?.seeds ?? [];\n const seeds = pdaSeeds.map(seed => {\n if (isNode(seed, 'variablePdaSeedNode')) {\n const seedManifest = visit(seed.type, typeManifestVisitor);\n seedsImports.mergeWith(seedManifest.imports);\n const resolvedType = resolveNestedTypeNode(seed.type);\n return { ...seed, resolvedType, typeManifest: seedManifest };\n }\n if (isNode(seed.value, 'programIdValueNode')) {\n return seed;\n }\n const seedManifest = visit(seed.type, typeManifestVisitor);\n const valueManifest = renderValueNode(seed.value, getImportFrom, true);\n seedsImports.mergeWith(valueManifest.imports);\n const resolvedType = resolveNestedTypeNode(seed.type);\n return { ...seed, resolvedType, typeManifest: seedManifest, valueManifest };\n });\n const hasVariableSeeds = pdaSeeds.filter(isNodeFilter('variablePdaSeedNode')).length > 0;\n const constantSeeds = seeds\n .filter(isNodeFilter('constantPdaSeedNode'))\n .filter(seed => !isNode(seed.value, 'programIdValueNode'));\n\n const { imports } = typeManifest;\n\n if (hasVariableSeeds) {\n imports.mergeWith(seedsImports);\n }\n\n return new RenderMap().add(\n `accounts/${snakeCase(node.name)}.rs`,\n render('accountsPage.njk', {\n account: node,\n constantSeeds,\n hasVariableSeeds,\n imports: imports\n .remove(`generatedAccounts::${pascalCase(node.name)}`)\n .toString(dependencyMap),\n pda,\n program,\n seeds,\n typeManifest,\n }),\n );\n },\n\n visitDefinedType(node) {\n const typeManifest = visit(node, typeManifestVisitor);\n const imports = new ImportMap().mergeWithManifest(typeManifest);\n\n return new RenderMap().add(\n `types/${snakeCase(node.name)}.rs`,\n render('definedTypesPage.njk', {\n definedType: node,\n imports: imports.remove(`generatedTypes::${pascalCase(node.name)}`).toString(dependencyMap),\n typeManifest,\n }),\n );\n },\n\n visitInstruction(node) {\n // Imports.\n const imports = new ImportMap();\n imports.add(['borsh::BorshDeserialize', 'borsh::BorshSerialize']);\n\n // canMergeAccountsAndArgs\n const accountsAndArgsConflicts = getConflictsForInstructionAccountsAndArgs(node);\n if (accountsAndArgsConflicts.length > 0) {\n logWarn(\n `[Rust] Accounts and args of instruction [${node.name}] have the following ` +\n `conflicting attributes [${accountsAndArgsConflicts.join(', ')}]. ` +\n `Thus, the conflicting arguments will be suffixed with \"_arg\". ` +\n 'You may want to rename the conflicting attributes.',\n );\n }\n\n // Instruction args.\n const instructionArgs: {\n default: boolean;\n innerOptionType: string | null;\n name: string;\n optional: boolean;\n type: string;\n value: string | null;\n }[] = [];\n let hasArgs = false;\n let hasOptional = false;\n\n node.arguments.forEach(argument => {\n const argumentVisitor = getTypeManifestVisitor({\n getImportFrom,\n getTraitsFromNode,\n nestedStruct: true,\n parentName: `${pascalCase(node.name)}InstructionData`,\n });\n const manifest = visit(argument.type, argumentVisitor);\n imports.mergeWith(manifest.imports);\n const innerOptionType = isNode(argument.type, 'optionTypeNode')\n ? manifest.type.slice('Option<'.length, -1)\n : null;\n\n const hasDefaultValue = !!argument.defaultValue && isNode(argument.defaultValue, VALUE_NODES);\n let renderValue: string | null = null;\n if (hasDefaultValue) {\n const { imports: argImports, render: value } = renderValueNode(\n argument.defaultValue,\n getImportFrom,\n );\n imports.mergeWith(argImports);\n renderValue = value;\n }\n\n hasArgs = hasArgs || argument.defaultValueStrategy !== 'omitted';\n hasOptional = hasOptional || (hasDefaultValue && argument.defaultValueStrategy !== 'omitted');\n\n const name = accountsAndArgsConflicts.includes(argument.name)\n ? `${argument.name}_arg`\n : argument.name;\n\n instructionArgs.push({\n default: hasDefaultValue && argument.defaultValueStrategy === 'omitted',\n innerOptionType,\n name,\n optional: hasDefaultValue && argument.defaultValueStrategy !== 'omitted',\n type: manifest.type,\n value: renderValue,\n });\n });\n\n const struct = structTypeNodeFromInstructionArgumentNodes(node.arguments);\n const structVisitor = getTypeManifestVisitor({\n getImportFrom,\n getTraitsFromNode,\n parentName: `${pascalCase(node.name)}InstructionData`,\n });\n const typeManifest = visit(struct, structVisitor);\n\n return new RenderMap().add(\n `instructions/${snakeCase(node.name)}.rs`,\n render('instructionsPage.njk', {\n hasArgs,\n hasOptional,\n imports: imports\n .remove(`generatedInstructions::${pascalCase(node.name)}`)\n .toString(dependencyMap),\n instruction: node,\n instructionArgs,\n program,\n typeManifest,\n }),\n );\n },\n\n visitProgram(node, { self }) {\n program = node;\n const renderMap = new RenderMap()\n .mergeWith(...node.accounts.map(account => visit(account, self)))\n .mergeWith(...node.definedTypes.map(type => visit(type, self)))\n .mergeWith(\n ...getAllInstructionsWithSubs(node, {\n leavesOnly: !renderParentInstructions,\n }).map(ix => visit(ix, self)),\n );\n\n // Errors.\n if (node.errors.length > 0) {\n renderMap.add(\n `errors/${snakeCase(node.name)}.rs`,\n render('errorsPage.njk', {\n errors: node.errors,\n imports: new ImportMap().toString(dependencyMap),\n program: node,\n }),\n );\n }\n\n program = null;\n return renderMap;\n },\n\n visitRoot(node, { self }) {\n const programsToExport = getAllPrograms(node);\n const accountsToExport = getAllAccounts(node);\n const instructionsToExport = getAllInstructionsWithSubs(node, {\n leavesOnly: !renderParentInstructions,\n });\n const definedTypesToExport = getAllDefinedTypes(node);\n const hasAnythingToExport =\n programsToExport.length > 0 ||\n accountsToExport.length > 0 ||\n instructionsToExport.length > 0 ||\n definedTypesToExport.length > 0;\n\n const ctx = {\n accountsToExport,\n definedTypesToExport,\n hasAnythingToExport,\n instructionsToExport,\n programsToExport,\n root: node,\n };\n\n const map = new RenderMap();\n if (programsToExport.length > 0) {\n map.add('programs.rs', render('programsMod.njk', ctx)).add(\n 'errors/mod.rs',\n render('errorsMod.njk', ctx),\n );\n }\n if (accountsToExport.length > 0) {\n map.add('accounts/mod.rs', render('accountsMod.njk', ctx));\n }\n if (instructionsToExport.length > 0) {\n map.add('instructions/mod.rs', render('instructionsMod.njk', ctx));\n }\n if (definedTypesToExport.length > 0) {\n map.add('types/mod.rs', render('definedTypesMod.njk', ctx));\n }\n\n return map\n .add('mod.rs', render('rootMod.njk', ctx))\n .mergeWith(...getAllPrograms(node).map(p => visit(p, self)));\n },\n }),\n v => recordLinkablesVisitor(v, linkables),\n );\n}\n\nfunction getConflictsForInstructionAccountsAndArgs(instruction: InstructionNode): string[] {\n const allNames = [\n ...instruction.accounts.map(account => account.name),\n ...instruction.arguments.map(argument => argument.name),\n ];\n const duplicates = allNames.filter((e, i, a) => a.indexOf(e) !== i);\n return [...new Set(duplicates)];\n}\n","import { logError, logWarn } from '@codama/errors';\nimport { deleteDirectory, writeRenderMapVisitor } from '@codama/renderers-core';\nimport { rootNodeVisitor, visit } from '@codama/visitors-core';\nimport { spawnSync } from 'child_process';\n\nimport { GetRenderMapOptions, getRenderMapVisitor } from './getRenderMapVisitor';\n\nexport type RenderOptions = GetRenderMapOptions & {\n crateFolder?: string;\n deleteFolderBeforeRendering?: boolean;\n formatCode?: boolean;\n toolchain?: string;\n};\n\nexport function renderVisitor(path: string, options: RenderOptions = {}) {\n return rootNodeVisitor(root => {\n // Delete existing generated folder.\n if (options.deleteFolderBeforeRendering ?? true) {\n deleteDirectory(path);\n }\n\n // Render the new files.\n visit(root, writeRenderMapVisitor(getRenderMapVisitor(options), path));\n\n // format the code\n if (options.formatCode) {\n if (options.crateFolder) {\n const toolchain = options.toolchain ?? '+stable';\n runFormatter('cargo', [toolchain, 'fmt', '--manifest-path', `${options.crateFolder}/Cargo.toml`]);\n } else {\n logWarn('No crate folder specified, skipping formatting.');\n }\n }\n });\n}\n\nfunction runFormatter(cmd: string, args: string[]) {\n const { stdout, stderr, error } = spawnSync(cmd, args);\n if (error?.message?.includes('ENOENT')) {\n logWarn(`Could not find ${cmd}, skipping formatting.`);\n return;\n }\n if (stdout.length > 0) {\n logWarn(`(cargo-fmt) ${stdout || error}`);\n }\n if (stderr.length > 0) {\n logError(`(cargo-fmt) ${stderr || error}`);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/ImportMap.ts","../src/utils/codecs.ts","../src/utils/linkOverrides.ts","../src/utils/render.ts","../src/utils/traitOptions.ts","../src/getTypeManifestVisitor.ts","../src/renderValueNodeVisitor.ts","../src/getRenderMapVisitor.ts","../src/renderVisitor.ts"],"names":["dirname","pathDirname","camelCase","traits","getTraitsFromNode","pascalCase","isNode","CodamaError","snakeCase","visit","pipe","extendVisitor","seedManifest","resolvedType","resolveNestedTypeNode","logWarn"],"mappings":"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","file":"index.node.mjs","sourcesContent":["import { TypeManifest } from './getTypeManifestVisitor';\n\nconst DEFAULT_MODULE_MAP: Record<string, string> = {\n generated: 'crate::generated',\n generatedAccounts: 'crate::generated::accounts',\n generatedErrors: 'crate::generated::errors',\n generatedInstructions: 'crate::generated::instructions',\n generatedTypes: 'crate::generated::types',\n hooked: 'crate::hooked',\n mplEssentials: 'mpl_toolbox',\n mplToolbox: 'mpl_toolbox',\n};\n\nexport class ImportMap {\n protected readonly _imports: Set<string> = new Set();\n\n protected readonly _aliases: Map<string, string> = new Map();\n\n get imports(): Set<string> {\n return this._imports;\n }\n\n get aliases(): Map<string, string> {\n return this._aliases;\n }\n\n add(imports: Set<string> | string[] | string): ImportMap {\n const newImports = typeof imports === 'string' ? [imports] : imports;\n newImports.forEach(i => this._imports.add(i));\n return this;\n }\n\n remove(imports: Set<string> | string[] | string): ImportMap {\n const importsToRemove = typeof imports === 'string' ? [imports] : imports;\n importsToRemove.forEach(i => this._imports.delete(i));\n return this;\n }\n\n mergeWith(...others: ImportMap[]): ImportMap {\n others.forEach(other => {\n this.add(other._imports);\n other._aliases.forEach((alias, importName) => this.addAlias(importName, alias));\n });\n return this;\n }\n\n mergeWithManifest(manifest: TypeManifest): ImportMap {\n return this.mergeWith(manifest.imports);\n }\n\n addAlias(importName: string, alias: string): ImportMap {\n this._aliases.set(importName, alias);\n return this;\n }\n\n isEmpty(): boolean {\n return this._imports.size === 0;\n }\n\n resolveDependencyMap(dependencies: Record<string, string>): ImportMap {\n const dependencyMap = { ...DEFAULT_MODULE_MAP, ...dependencies };\n const newImportMap = new ImportMap();\n const resolveDependency = (i: string): string => {\n const dependencyKey = Object.keys(dependencyMap).find(key => i.startsWith(`${key}::`));\n if (!dependencyKey) return i;\n const dependencyValue = dependencyMap[dependencyKey];\n return dependencyValue + i.slice(dependencyKey.length);\n };\n this._imports.forEach(i => newImportMap.add(resolveDependency(i)));\n this._aliases.forEach((alias, i) => newImportMap.addAlias(resolveDependency(i), alias));\n return newImportMap;\n }\n\n toString(dependencies: Record<string, string>): string {\n const resolvedMap = this.resolveDependencyMap(dependencies);\n const importStatements = [...resolvedMap.imports].map(i => {\n const alias = resolvedMap.aliases.get(i);\n if (alias) return `use ${i} as ${alias};`;\n return `use ${i};`;\n });\n return importStatements.join('\\n');\n }\n}\n","import { BytesValueNode } from '@codama/nodes';\nimport { getBase16Encoder, getBase58Encoder, getBase64Encoder, getUtf8Encoder } from '@solana/codecs-strings';\n\nexport function getBytesFromBytesValueNode(node: BytesValueNode): Uint8Array {\n switch (node.encoding) {\n case 'utf8':\n return getUtf8Encoder().encode(node.data) as Uint8Array;\n case 'base16':\n return getBase16Encoder().encode(node.data) as Uint8Array;\n case 'base58':\n return getBase58Encoder().encode(node.data) as Uint8Array;\n case 'base64':\n default:\n return getBase64Encoder().encode(node.data) as Uint8Array;\n }\n}\n","import { CODAMA_ERROR__UNEXPECTED_NODE_KIND, CodamaError } from '@codama/errors';\nimport {\n AccountLinkNode,\n DefinedTypeLinkNode,\n InstructionLinkNode,\n PdaLinkNode,\n ProgramLinkNode,\n ResolverValueNode,\n} from '@codama/nodes';\n\nexport type LinkOverrides = {\n accounts?: Record<string, string>;\n definedTypes?: Record<string, string>;\n instructions?: Record<string, string>;\n pdas?: Record<string, string>;\n programs?: Record<string, string>;\n resolvers?: Record<string, string>;\n};\n\ntype OverridableNodes =\n | AccountLinkNode\n | DefinedTypeLinkNode\n | InstructionLinkNode\n | PdaLinkNode\n | ProgramLinkNode\n | ResolverValueNode;\n\nexport type GetImportFromFunction = (node: OverridableNodes, fallback?: string) => string;\n\nexport function getImportFromFactory(overrides: LinkOverrides): GetImportFromFunction {\n const linkOverrides = {\n accounts: overrides.accounts ?? {},\n definedTypes: overrides.definedTypes ?? {},\n instructions: overrides.instructions ?? {},\n pdas: overrides.pdas ?? {},\n programs: overrides.programs ?? {},\n resolvers: overrides.resolvers ?? {},\n };\n\n return (node: OverridableNodes) => {\n const kind = node.kind;\n switch (kind) {\n case 'accountLinkNode':\n return linkOverrides.accounts[node.name] ?? 'generatedAccounts';\n case 'definedTypeLinkNode':\n return linkOverrides.definedTypes[node.name] ?? 'generatedTypes';\n case 'instructionLinkNode':\n return linkOverrides.instructions[node.name] ?? 'generatedInstructions';\n case 'pdaLinkNode':\n return linkOverrides.pdas[node.name] ?? 'generatedAccounts';\n case 'programLinkNode':\n return linkOverrides.programs[node.name] ?? 'generatedPrograms';\n case 'resolverValueNode':\n return linkOverrides.resolvers[node.name] ?? 'hooked';\n default:\n throw new CodamaError(CODAMA_ERROR__UNEXPECTED_NODE_KIND, {\n expectedKinds: [\n 'AccountLinkNode',\n 'DefinedTypeLinkNode',\n 'InstructionLinkNode',\n 'PdaLinkNode',\n 'ProgramLinkNode',\n 'resolverValueNode',\n ],\n kind: kind satisfies never,\n node,\n });\n }\n };\n}\n","import { dirname as pathDirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport { camelCase, kebabCase, pascalCase, snakeCase, titleCase } from '@codama/nodes';\nimport nunjucks, { ConfigureOptions as NunJucksOptions } from 'nunjucks';\n\nexport function rustDocblock(docs: string[]): string {\n if (docs.length <= 0) return '';\n const lines = docs.map(doc => `/// ${doc}`);\n return `${lines.join('\\n')}\\n`;\n}\n\nexport const render = (template: string, context?: object, options?: NunJucksOptions): string => {\n // @ts-expect-error import.meta will be used in the right environment.\n const dirname = __ESM__ ? pathDirname(fileURLToPath(import.meta.url)) : __dirname;\n const templates = __TEST__ ? join(dirname, '..', '..', 'public', 'templates') : join(dirname, 'templates'); // Path to templates from bundled output file.\n const env = nunjucks.configure(templates, { autoescape: false, trimBlocks: true, ...options });\n env.addFilter('pascalCase', pascalCase);\n env.addFilter('camelCase', camelCase);\n env.addFilter('snakeCase', snakeCase);\n env.addFilter('kebabCase', kebabCase);\n env.addFilter('titleCase', titleCase);\n env.addFilter('rustDocblock', rustDocblock);\n return env.render(template, context);\n};\n","import { AccountNode, assertIsNode, camelCase, DefinedTypeNode, isNode, isScalarEnum } from '@codama/nodes';\n\nimport { ImportMap } from '../ImportMap';\n\nexport type TraitOptions = {\n /** The default traits to implement for all types. */\n baseDefaults?: string[];\n /**\n * The default traits to implement for data enums only — on top of the base defaults.\n * Data enums are enums with at least one non-unit variant.\n */\n dataEnumDefaults?: string[];\n /**\n * The mapping of feature flags to traits.\n * For each entry, the traits will be rendered within a\n * `#[cfg_attr(feature = \"feature_name\", derive(Traits))]` attribute.\n */\n featureFlags?: Record<string, string[]>;\n /** The complete trait overrides of specific types. */\n overrides?: Record<string, string[]>;\n /**\n * The default traits to implement for scalar enums only — on top of the base defaults.\n * Scalar enums are enums with no variants or only unit variants.\n */\n scalarEnumDefaults?: string[];\n /** The default traits to implement for structs only — on top of the base defaults. */\n structDefaults?: string[];\n /** Whether or not to use the fully qualified name for traits, instead of importing them. */\n useFullyQualifiedName?: boolean;\n};\n\nexport const DEFAULT_TRAIT_OPTIONS: Required<TraitOptions> = {\n baseDefaults: [\n 'borsh::BorshSerialize',\n 'borsh::BorshDeserialize',\n 'serde::Serialize',\n 'serde::Deserialize',\n 'Clone',\n 'Debug',\n 'Eq',\n 'PartialEq',\n ],\n dataEnumDefaults: [],\n featureFlags: { serde: ['serde::Serialize', 'serde::Deserialize'] },\n overrides: {},\n scalarEnumDefaults: ['Copy', 'PartialOrd', 'Hash', 'num_derive::FromPrimitive'],\n structDefaults: [],\n useFullyQualifiedName: false,\n};\n\nexport type GetTraitsFromNodeFunction = (node: AccountNode | DefinedTypeNode) => { imports: ImportMap; render: string };\n\nexport function getTraitsFromNodeFactory(options: TraitOptions = {}): GetTraitsFromNodeFunction {\n return node => getTraitsFromNode(node, options);\n}\n\nexport function getTraitsFromNode(\n node: AccountNode | DefinedTypeNode,\n userOptions: TraitOptions = {},\n): { imports: ImportMap; render: string } {\n assertIsNode(node, ['accountNode', 'definedTypeNode']);\n const options: Required<TraitOptions> = { ...DEFAULT_TRAIT_OPTIONS, ...userOptions };\n\n // Get the node type and return early if it's a type alias.\n const nodeType = getNodeType(node);\n if (nodeType === 'alias') {\n return { imports: new ImportMap(), render: '' };\n }\n\n // Find all the FQN traits for the node.\n const sanitizedOverrides = Object.fromEntries(\n Object.entries(options.overrides).map(([key, value]) => [camelCase(key), value]),\n );\n const nodeOverrides: string[] | undefined = sanitizedOverrides[node.name];\n const allTraits = nodeOverrides === undefined ? getDefaultTraits(nodeType, options) : nodeOverrides;\n\n // Wrap the traits in feature flags if necessary.\n const partitionedTraits = partitionTraitsInFeatures(allTraits, options.featureFlags);\n let unfeaturedTraits = partitionedTraits[0];\n const featuredTraits = partitionedTraits[1];\n\n // Import the traits if necessary.\n const imports = new ImportMap();\n if (!options.useFullyQualifiedName) {\n unfeaturedTraits = extractFullyQualifiedNames(unfeaturedTraits, imports);\n }\n\n // Render the trait lines.\n const traitLines: string[] = [\n ...(unfeaturedTraits.length > 0 ? [`#[derive(${unfeaturedTraits.join(', ')})]\\n`] : []),\n ...Object.entries(featuredTraits).map(([feature, traits]) => {\n return `#[cfg_attr(feature = \"${feature}\", derive(${traits.join(', ')}))]\\n`;\n }),\n ];\n\n return { imports, render: traitLines.join('') };\n}\n\nfunction getNodeType(node: AccountNode | DefinedTypeNode): 'alias' | 'dataEnum' | 'scalarEnum' | 'struct' {\n if (isNode(node, 'accountNode')) return 'struct';\n if (isNode(node.type, 'structTypeNode')) return 'struct';\n if (isNode(node.type, 'enumTypeNode')) {\n return isScalarEnum(node.type) ? 'scalarEnum' : 'dataEnum';\n }\n return 'alias';\n}\n\nfunction getDefaultTraits(\n nodeType: 'dataEnum' | 'scalarEnum' | 'struct',\n options: Pick<\n Required<TraitOptions>,\n 'baseDefaults' | 'dataEnumDefaults' | 'scalarEnumDefaults' | 'structDefaults'\n >,\n): string[] {\n switch (nodeType) {\n case 'dataEnum':\n return [...options.baseDefaults, ...options.dataEnumDefaults];\n case 'scalarEnum':\n return [...options.baseDefaults, ...options.scalarEnumDefaults];\n case 'struct':\n return [...options.baseDefaults, ...options.structDefaults];\n }\n}\n\nfunction partitionTraitsInFeatures(\n traits: string[],\n featureFlags: Record<string, string[]>,\n): [string[], Record<string, string[]>] {\n // Reverse the feature flags option for quick lookup.\n // If there are any duplicate traits, the first one encountered will be used.\n const reverseFeatureFlags = Object.entries(featureFlags).reduce(\n (acc, [feature, traits]) => {\n for (const trait of traits) {\n if (!acc[trait]) acc[trait] = feature;\n }\n return acc;\n },\n {} as Record<string, string>,\n );\n\n const unfeaturedTraits: string[] = [];\n const featuredTraits: Record<string, string[]> = {};\n for (const trait of traits) {\n const feature: string | undefined = reverseFeatureFlags[trait];\n if (feature === undefined) {\n unfeaturedTraits.push(trait);\n } else {\n if (!featuredTraits[feature]) featuredTraits[feature] = [];\n featuredTraits[feature].push(trait);\n }\n }\n\n return [unfeaturedTraits, featuredTraits];\n}\n\nfunction extractFullyQualifiedNames(traits: string[], imports: ImportMap): string[] {\n return traits.map(trait => {\n const index = trait.lastIndexOf('::');\n if (index === -1) return trait;\n imports.add(trait);\n return trait.slice(index + 2);\n });\n}\n","import { CODAMA_ERROR__RENDERERS__UNSUPPORTED_NODE, CodamaError } from '@codama/errors';\nimport {\n arrayTypeNode,\n CountNode,\n definedTypeNode,\n fixedCountNode,\n isNode,\n NumberTypeNode,\n numberTypeNode,\n pascalCase,\n prefixedCountNode,\n REGISTERED_TYPE_NODE_KINDS,\n remainderCountNode,\n resolveNestedTypeNode,\n snakeCase,\n} from '@codama/nodes';\nimport { extendVisitor, mergeVisitor, pipe, visit } from '@codama/visitors-core';\n\nimport { ImportMap } from './ImportMap';\nimport { GetImportFromFunction, GetTraitsFromNodeFunction, rustDocblock } from './utils';\n\nexport type TypeManifest = {\n imports: ImportMap;\n nestedStructs: string[];\n type: string;\n};\n\nexport function getTypeManifestVisitor(options: {\n getImportFrom: GetImportFromFunction;\n getTraitsFromNode: GetTraitsFromNodeFunction;\n nestedStruct?: boolean;\n parentName?: string | null;\n}) {\n const { getImportFrom, getTraitsFromNode } = options;\n let parentName: string | null = options.parentName ?? null;\n let nestedStruct: boolean = options.nestedStruct ?? false;\n let inlineStruct: boolean = false;\n let parentSize: NumberTypeNode | number | null = null;\n\n return pipe(\n mergeVisitor(\n (): TypeManifest => ({ imports: new ImportMap(), nestedStructs: [], type: '' }),\n (_, values) => ({\n ...mergeManifests(values),\n type: values.map(v => v.type).join('\\n'),\n }),\n { keys: [...REGISTERED_TYPE_NODE_KINDS, 'definedTypeLinkNode', 'definedTypeNode', 'accountNode'] },\n ),\n v =>\n extendVisitor(v, {\n visitAccount(account, { self }) {\n parentName = pascalCase(account.name);\n const manifest = visit(account.data, self);\n const traits = getTraitsFromNode(account);\n manifest.imports.mergeWith(traits.imports);\n parentName = null;\n return {\n ...manifest,\n type: traits.render + manifest.type,\n };\n },\n\n visitArrayType(arrayType, { self }) {\n const childManifest = visit(arrayType.item, self);\n\n if (isNode(arrayType.count, 'fixedCountNode')) {\n return {\n ...childManifest,\n type: `[${childManifest.type}; ${arrayType.count.value}]`,\n };\n }\n\n if (isNode(arrayType.count, 'remainderCountNode')) {\n childManifest.imports.add('kaigan::types::RemainderVec');\n return {\n ...childManifest,\n type: `RemainderVec<${childManifest.type}>`,\n };\n }\n\n const prefix = resolveNestedTypeNode(arrayType.count.prefix);\n if (prefix.endian === 'le') {\n switch (prefix.format) {\n case 'u32':\n return {\n ...childManifest,\n type: `Vec<${childManifest.type}>`,\n };\n case 'u8':\n case 'u16':\n case 'u64': {\n const prefixFormat = prefix.format.toUpperCase();\n childManifest.imports.add(`kaigan::types::${prefixFormat}PrefixVec`);\n return {\n ...childManifest,\n type: `${prefixFormat}PrefixVec<${childManifest.type}>`,\n };\n }\n case 'shortU16': {\n childManifest.imports.add('solana_program::short_vec::ShortVec');\n return {\n ...childManifest,\n type: `ShortVec<${childManifest.type}>`,\n };\n }\n default:\n throw new Error(`Array prefix not supported: ${prefix.format}`);\n }\n }\n\n // TODO: Add to the Rust validator.\n throw new Error('Array size not supported by Borsh');\n },\n\n visitBooleanType(booleanType) {\n const resolvedSize = resolveNestedTypeNode(booleanType.size);\n if (resolvedSize.format === 'u8' && resolvedSize.endian === 'le') {\n return {\n imports: new ImportMap(),\n nestedStructs: [],\n type: 'bool',\n };\n }\n\n // TODO: Add to the Rust validator.\n throw new Error('Bool size not supported by Borsh');\n },\n\n visitBytesType(_bytesType, { self }) {\n let arraySize: CountNode = remainderCountNode();\n if (typeof parentSize === 'number') {\n arraySize = fixedCountNode(parentSize);\n } else if (parentSize && typeof parentSize === 'object') {\n arraySize = prefixedCountNode(parentSize);\n }\n const arrayType = arrayTypeNode(numberTypeNode('u8'), arraySize);\n return visit(arrayType, self);\n },\n\n visitDefinedType(definedType, { self }) {\n parentName = pascalCase(definedType.name);\n const manifest = visit(definedType.type, self);\n const traits = getTraitsFromNode(definedType);\n manifest.imports.mergeWith(traits.imports);\n parentName = null;\n\n const renderedType = isNode(definedType.type, ['enumTypeNode', 'structTypeNode'])\n ? manifest.type\n : `pub type ${pascalCase(definedType.name)} = ${manifest.type};`;\n\n return { ...manifest, type: `${traits.render}${renderedType}` };\n },\n\n visitDefinedTypeLink(node) {\n const pascalCaseDefinedType = pascalCase(node.name);\n const importFrom = getImportFrom(node);\n return {\n imports: new ImportMap().add(`${importFrom}::${pascalCaseDefinedType}`),\n nestedStructs: [],\n type: pascalCaseDefinedType,\n };\n },\n\n visitEnumEmptyVariantType(enumEmptyVariantType) {\n const name = pascalCase(enumEmptyVariantType.name);\n return {\n imports: new ImportMap(),\n nestedStructs: [],\n type: `${name},`,\n };\n },\n\n visitEnumStructVariantType(enumStructVariantType, { self }) {\n const name = pascalCase(enumStructVariantType.name);\n const originalParentName = parentName;\n\n if (!originalParentName) {\n throw new Error('Enum struct variant type must have a parent name.');\n }\n\n inlineStruct = true;\n parentName = pascalCase(originalParentName) + name;\n const typeManifest = visit(enumStructVariantType.struct, self);\n inlineStruct = false;\n parentName = originalParentName;\n\n return {\n ...typeManifest,\n type: `${name} ${typeManifest.type},`,\n };\n },\n\n visitEnumTupleVariantType(enumTupleVariantType, { self }) {\n const name = pascalCase(enumTupleVariantType.name);\n const originalParentName = parentName;\n\n if (!originalParentName) {\n throw new Error('Enum struct variant type must have a parent name.');\n }\n\n parentName = pascalCase(originalParentName) + name;\n const childManifest = visit(enumTupleVariantType.tuple, self);\n parentName = originalParentName;\n\n let derive = '';\n if (childManifest.type === '(Pubkey)') {\n derive =\n '#[cfg_attr(feature = \"serde\", serde(with = \"serde_with::As::<serde_with::DisplayFromStr>\"))]\\n';\n } else if (childManifest.type === '(Vec<Pubkey>)') {\n derive =\n '#[cfg_attr(feature = \"serde\", serde(with = \"serde_with::As::<Vec<serde_with::DisplayFromStr>>\"))]\\n';\n }\n\n return {\n ...childManifest,\n type: `${derive}${name}${childManifest.type},`,\n };\n },\n\n visitEnumType(enumType, { self }) {\n const originalParentName = parentName;\n if (!originalParentName) {\n // TODO: Add to the Rust validator.\n throw new Error('Enum type must have a parent name.');\n }\n\n const variants = enumType.variants.map(variant => visit(variant, self));\n const variantNames = variants.map(variant => variant.type).join('\\n');\n const mergedManifest = mergeManifests(variants);\n\n return {\n ...mergedManifest,\n type: `pub enum ${pascalCase(originalParentName)} {\\n${variantNames}\\n}`,\n };\n },\n\n visitFixedSizeType(fixedSizeType, { self }) {\n parentSize = fixedSizeType.size;\n const manifest = visit(fixedSizeType.type, self);\n parentSize = null;\n return manifest;\n },\n\n visitMapType(mapType, { self }) {\n const key = visit(mapType.key, self);\n const value = visit(mapType.value, self);\n const mergedManifest = mergeManifests([key, value]);\n mergedManifest.imports.add('std::collections::HashMap');\n return {\n ...mergedManifest,\n type: `HashMap<${key.type}, ${value.type}>`,\n };\n },\n\n visitNumberType(numberType) {\n if (numberType.endian !== 'le') {\n // TODO: Add to the Rust validator.\n throw new Error('Number endianness not supported by Borsh');\n }\n\n if (numberType.format === 'shortU16') {\n return {\n imports: new ImportMap().add('solana_program::short_vec::ShortU16'),\n nestedStructs: [],\n type: 'ShortU16',\n };\n }\n\n return {\n imports: new ImportMap(),\n nestedStructs: [],\n type: numberType.format,\n };\n },\n\n visitOptionType(optionType, { self }) {\n const childManifest = visit(optionType.item, self);\n\n const optionPrefix = resolveNestedTypeNode(optionType.prefix);\n if (optionPrefix.format === 'u8' && optionPrefix.endian === 'le') {\n return {\n ...childManifest,\n type: `Option<${childManifest.type}>`,\n };\n }\n\n // TODO: Add to the Rust validator.\n throw new Error('Option size not supported by Borsh');\n },\n\n visitPublicKeyType() {\n return {\n imports: new ImportMap().add('solana_program::pubkey::Pubkey'),\n nestedStructs: [],\n type: 'Pubkey',\n };\n },\n\n visitRemainderOptionType(node) {\n throw new CodamaError(CODAMA_ERROR__RENDERERS__UNSUPPORTED_NODE, { kind: node.kind, node });\n },\n\n visitSetType(setType, { self }) {\n const childManifest = visit(setType.item, self);\n childManifest.imports.add('std::collections::HashSet');\n return {\n ...childManifest,\n type: `HashSet<${childManifest.type}>`,\n };\n },\n\n visitSizePrefixType(sizePrefixType, { self }) {\n parentSize = resolveNestedTypeNode(sizePrefixType.prefix);\n const manifest = visit(sizePrefixType.type, self);\n parentSize = null;\n return manifest;\n },\n\n visitStringType() {\n if (!parentSize) {\n return {\n imports: new ImportMap().add(`kaigan::types::RemainderStr`),\n nestedStructs: [],\n type: `RemainderStr`,\n };\n }\n\n if (typeof parentSize === 'number') {\n return {\n imports: new ImportMap(),\n nestedStructs: [],\n type: `[u8; ${parentSize}]`,\n };\n }\n\n if (isNode(parentSize, 'numberTypeNode') && parentSize.endian === 'le') {\n switch (parentSize.format) {\n case 'u32':\n return {\n imports: new ImportMap(),\n nestedStructs: [],\n type: 'String',\n };\n case 'u8':\n case 'u16':\n case 'u64': {\n const prefix = parentSize.format.toUpperCase();\n return {\n imports: new ImportMap().add(`kaigan::types::${prefix}PrefixString`),\n nestedStructs: [],\n type: `${prefix}PrefixString`,\n };\n }\n default:\n throw new Error(`'String size not supported: ${parentSize.format}`);\n }\n }\n\n // TODO: Add to the Rust validator.\n throw new Error('String size not supported by Borsh');\n },\n\n visitStructFieldType(structFieldType, { self }) {\n const originalParentName = parentName;\n const originalInlineStruct = inlineStruct;\n const originalNestedStruct = nestedStruct;\n\n if (!originalParentName) {\n throw new Error('Struct field type must have a parent name.');\n }\n\n parentName = pascalCase(originalParentName) + pascalCase(structFieldType.name);\n nestedStruct = true;\n inlineStruct = false;\n\n const fieldManifest = visit(structFieldType.type, self);\n\n parentName = originalParentName;\n inlineStruct = originalInlineStruct;\n nestedStruct = originalNestedStruct;\n\n const fieldName = snakeCase(structFieldType.name);\n const docblock = rustDocblock(structFieldType.docs);\n const resolvedNestedType = resolveNestedTypeNode(structFieldType.type);\n\n let derive = '';\n if (fieldManifest.type === 'Pubkey') {\n derive =\n '#[cfg_attr(feature = \"serde\", serde(with = \"serde_with::As::<serde_with::DisplayFromStr>\"))]\\n';\n } else if (fieldManifest.type === 'Vec<Pubkey>') {\n derive =\n '#[cfg_attr(feature = \"serde\", serde(with = \"serde_with::As::<Vec<serde_with::DisplayFromStr>>\"))]\\n';\n } else if (\n (isNode(resolvedNestedType, 'arrayTypeNode') &&\n isNode(resolvedNestedType.count, 'fixedCountNode') &&\n resolvedNestedType.count.value > 32) ||\n (isNode(resolvedNestedType, ['bytesTypeNode', 'stringTypeNode']) &&\n isNode(structFieldType.type, 'fixedSizeTypeNode') &&\n structFieldType.type.size > 32)\n ) {\n derive =\n '#[cfg_attr(feature = \"serde\", serde(with = \"serde_with::As::<serde_with::Bytes>\"))]\\n';\n }\n\n return {\n ...fieldManifest,\n type: inlineStruct\n ? `${docblock}${derive}${fieldName}: ${fieldManifest.type},`\n : `${docblock}${derive}pub ${fieldName}: ${fieldManifest.type},`,\n };\n },\n\n visitStructType(structType, { self }) {\n const originalParentName = parentName;\n\n if (!originalParentName) {\n // TODO: Add to the Rust validator.\n throw new Error('Struct type must have a parent name.');\n }\n\n const fields = structType.fields.map(field => visit(field, self));\n const fieldTypes = fields.map(field => field.type).join('\\n');\n const mergedManifest = mergeManifests(fields);\n\n if (nestedStruct) {\n const nestedTraits = getTraitsFromNode(\n definedTypeNode({ name: originalParentName, type: structType }),\n );\n mergedManifest.imports.mergeWith(nestedTraits.imports);\n return {\n ...mergedManifest,\n nestedStructs: [\n ...mergedManifest.nestedStructs,\n `${nestedTraits.render}pub struct ${pascalCase(originalParentName)} {\\n${fieldTypes}\\n}`,\n ],\n type: pascalCase(originalParentName),\n };\n }\n\n if (inlineStruct) {\n return { ...mergedManifest, type: `{\\n${fieldTypes}\\n}` };\n }\n\n return {\n ...mergedManifest,\n type: `pub struct ${pascalCase(originalParentName)} {\\n${fieldTypes}\\n}`,\n };\n },\n\n visitTupleType(tupleType, { self }) {\n const items = tupleType.items.map(item => visit(item, self));\n const mergedManifest = mergeManifests(items);\n\n return {\n ...mergedManifest,\n type: `(${items.map(item => item.type).join(', ')})`,\n };\n },\n\n visitZeroableOptionType(node) {\n throw new CodamaError(CODAMA_ERROR__RENDERERS__UNSUPPORTED_NODE, { kind: node.kind, node });\n },\n }),\n );\n}\n\nfunction mergeManifests(manifests: TypeManifest[]): Pick<TypeManifest, 'imports' | 'nestedStructs'> {\n return {\n imports: new ImportMap().mergeWith(...manifests.map(td => td.imports)),\n nestedStructs: manifests.flatMap(m => m.nestedStructs),\n };\n}\n","import {\n arrayValueNode,\n bytesValueNode,\n isNode,\n numberValueNode,\n pascalCase,\n RegisteredValueNode,\n ValueNode,\n} from '@codama/nodes';\nimport { visit, Visitor } from '@codama/visitors-core';\n\nimport { ImportMap } from './ImportMap';\nimport { getBytesFromBytesValueNode, GetImportFromFunction } from './utils';\n\nexport function renderValueNode(\n value: ValueNode,\n getImportFrom: GetImportFromFunction,\n useStr: boolean = false,\n): {\n imports: ImportMap;\n render: string;\n} {\n return visit(value, renderValueNodeVisitor(getImportFrom, useStr));\n}\n\nexport function renderValueNodeVisitor(\n getImportFrom: GetImportFromFunction,\n useStr: boolean = false,\n): Visitor<\n {\n imports: ImportMap;\n render: string;\n },\n RegisteredValueNode['kind']\n> {\n return {\n visitArrayValue(node) {\n const list = node.items.map(v => visit(v, this));\n return {\n imports: new ImportMap().mergeWith(...list.map(c => c.imports)),\n render: `[${list.map(c => c.render).join(', ')}]`,\n };\n },\n visitBooleanValue(node) {\n return {\n imports: new ImportMap(),\n render: JSON.stringify(node.boolean),\n };\n },\n visitBytesValue(node) {\n const bytes = getBytesFromBytesValueNode(node);\n const numbers = Array.from(bytes).map(numberValueNode);\n return visit(arrayValueNode(numbers), this);\n },\n visitConstantValue(node) {\n if (isNode(node.value, 'bytesValueNode')) {\n return visit(node.value, this);\n }\n if (isNode(node.type, 'stringTypeNode') && isNode(node.value, 'stringValueNode')) {\n return visit(bytesValueNode(node.type.encoding, node.value.string), this);\n }\n if (isNode(node.type, 'numberTypeNode') && isNode(node.value, 'numberValueNode')) {\n const numberManifest = visit(node.value, this);\n const { format, endian } = node.type;\n const byteFunction = endian === 'le' ? 'to_le_bytes' : 'to_be_bytes';\n numberManifest.render = `${numberManifest.render}${format}.${byteFunction}()`;\n return numberManifest;\n }\n throw new Error('Unsupported constant value type.');\n },\n visitEnumValue(node) {\n const imports = new ImportMap();\n const enumName = pascalCase(node.enum.name);\n const variantName = pascalCase(node.variant);\n const importFrom = getImportFrom(node.enum);\n imports.add(`${importFrom}::${enumName}`);\n if (!node.value) {\n return { imports, render: `${enumName}::${variantName}` };\n }\n const enumValue = visit(node.value, this);\n const fields = enumValue.render;\n return {\n imports: imports.mergeWith(enumValue.imports),\n render: `${enumName}::${variantName} ${fields}`,\n };\n },\n visitMapEntryValue(node) {\n const mapKey = visit(node.key, this);\n const mapValue = visit(node.value, this);\n return {\n imports: mapKey.imports.mergeWith(mapValue.imports),\n render: `[${mapKey.render}, ${mapValue.render}]`,\n };\n },\n visitMapValue(node) {\n const map = node.entries.map(entry => visit(entry, this));\n const imports = new ImportMap().add('std::collection::HashMap');\n return {\n imports: imports.mergeWith(...map.map(c => c.imports)),\n render: `HashMap::from([${map.map(c => c.render).join(', ')}])`,\n };\n },\n visitNoneValue() {\n return {\n imports: new ImportMap(),\n render: 'None',\n };\n },\n visitNumberValue(node) {\n return {\n imports: new ImportMap(),\n render: node.number.toString(),\n };\n },\n visitPublicKeyValue(node) {\n return {\n imports: new ImportMap().add('solana_program::pubkey'),\n render: `pubkey!(\"${node.publicKey}\")`,\n };\n },\n visitSetValue(node) {\n const set = node.items.map(v => visit(v, this));\n const imports = new ImportMap().add('std::collection::HashSet');\n return {\n imports: imports.mergeWith(...set.map(c => c.imports)),\n render: `HashSet::from([${set.map(c => c.render).join(', ')}])`,\n };\n },\n visitSomeValue(node) {\n const child = visit(node.value, this);\n return {\n ...child,\n render: `Some(${child.render})`,\n };\n },\n visitStringValue(node) {\n return {\n imports: new ImportMap(),\n render: useStr ? `${JSON.stringify(node.string)}` : `String::from(${JSON.stringify(node.string)})`,\n };\n },\n visitStructFieldValue(node) {\n const structValue = visit(node.value, this);\n return {\n imports: structValue.imports,\n render: `${node.name}: ${structValue.render}`,\n };\n },\n visitStructValue(node) {\n const struct = node.fields.map(field => visit(field, this));\n return {\n imports: new ImportMap().mergeWith(...struct.map(c => c.imports)),\n render: `{ ${struct.map(c => c.render).join(', ')} }`,\n };\n },\n visitTupleValue(node) {\n const tuple = node.items.map(v => visit(v, this));\n return {\n imports: new ImportMap().mergeWith(...tuple.map(c => c.imports)),\n render: `(${tuple.map(c => c.render).join(', ')})`,\n };\n },\n };\n}\n","import { logWarn } from '@codama/errors';\nimport {\n getAllAccounts,\n getAllDefinedTypes,\n getAllInstructionsWithSubs,\n getAllPrograms,\n InstructionNode,\n isNode,\n isNodeFilter,\n pascalCase,\n ProgramNode,\n resolveNestedTypeNode,\n snakeCase,\n structTypeNodeFromInstructionArgumentNodes,\n VALUE_NODES,\n} from '@codama/nodes';\nimport { RenderMap } from '@codama/renderers-core';\nimport {\n extendVisitor,\n LinkableDictionary,\n NodeStack,\n pipe,\n recordLinkablesOnFirstVisitVisitor,\n recordNodeStackVisitor,\n staticVisitor,\n visit,\n} from '@codama/visitors-core';\n\nimport { getTypeManifestVisitor } from './getTypeManifestVisitor';\nimport { ImportMap } from './ImportMap';\nimport { renderValueNode } from './renderValueNodeVisitor';\nimport { getImportFromFactory, getTraitsFromNodeFactory, LinkOverrides, render, TraitOptions } from './utils';\n\nexport type GetRenderMapOptions = {\n anchorTraits?: boolean;\n defaultTraitOverrides?: string[];\n dependencyMap?: Record<string, string>;\n linkOverrides?: LinkOverrides;\n renderParentInstructions?: boolean;\n traitOptions?: TraitOptions;\n};\n\nexport function getRenderMapVisitor(options: GetRenderMapOptions = {}) {\n const linkables = new LinkableDictionary();\n const stack = new NodeStack();\n let program: ProgramNode | null = null;\n\n const renderParentInstructions = options.renderParentInstructions ?? false;\n const dependencyMap = options.dependencyMap ?? {};\n const getImportFrom = getImportFromFactory(options.linkOverrides ?? {});\n const getTraitsFromNode = getTraitsFromNodeFactory(options.traitOptions);\n const typeManifestVisitor = getTypeManifestVisitor({ getImportFrom, getTraitsFromNode });\n const anchorTraits = options.anchorTraits ?? true;\n\n return pipe(\n staticVisitor(() => new RenderMap(), {\n keys: ['rootNode', 'programNode', 'instructionNode', 'accountNode', 'definedTypeNode'],\n }),\n v =>\n extendVisitor(v, {\n visitAccount(node) {\n const typeManifest = visit(node, typeManifestVisitor);\n\n // Seeds.\n const seedsImports = new ImportMap();\n const pda = node.pda ? linkables.get([...stack.getPath(), node.pda]) : undefined;\n const pdaSeeds = pda?.seeds ?? [];\n const seeds = pdaSeeds.map(seed => {\n if (isNode(seed, 'variablePdaSeedNode')) {\n const seedManifest = visit(seed.type, typeManifestVisitor);\n seedsImports.mergeWith(seedManifest.imports);\n const resolvedType = resolveNestedTypeNode(seed.type);\n return { ...seed, resolvedType, typeManifest: seedManifest };\n }\n if (isNode(seed.value, 'programIdValueNode')) {\n return seed;\n }\n const seedManifest = visit(seed.type, typeManifestVisitor);\n const valueManifest = renderValueNode(seed.value, getImportFrom, true);\n seedsImports.mergeWith(valueManifest.imports);\n const resolvedType = resolveNestedTypeNode(seed.type);\n return { ...seed, resolvedType, typeManifest: seedManifest, valueManifest };\n });\n const hasVariableSeeds = pdaSeeds.filter(isNodeFilter('variablePdaSeedNode')).length > 0;\n const constantSeeds = seeds\n .filter(isNodeFilter('constantPdaSeedNode'))\n .filter(seed => !isNode(seed.value, 'programIdValueNode'));\n\n const { imports } = typeManifest;\n\n if (hasVariableSeeds) {\n imports.mergeWith(seedsImports);\n }\n\n return new RenderMap().add(\n `accounts/${snakeCase(node.name)}.rs`,\n render('accountsPage.njk', {\n account: node,\n anchorTraits,\n constantSeeds,\n hasVariableSeeds,\n imports: imports\n .remove(`generatedAccounts::${pascalCase(node.name)}`)\n .toString(dependencyMap),\n pda,\n program,\n seeds,\n typeManifest,\n }),\n );\n },\n\n visitDefinedType(node) {\n const typeManifest = visit(node, typeManifestVisitor);\n const imports = new ImportMap().mergeWithManifest(typeManifest);\n\n return new RenderMap().add(\n `types/${snakeCase(node.name)}.rs`,\n render('definedTypesPage.njk', {\n definedType: node,\n imports: imports.remove(`generatedTypes::${pascalCase(node.name)}`).toString(dependencyMap),\n typeManifest,\n }),\n );\n },\n\n visitInstruction(node) {\n // Imports.\n const imports = new ImportMap();\n imports.add(['borsh::BorshDeserialize', 'borsh::BorshSerialize']);\n\n // canMergeAccountsAndArgs\n const accountsAndArgsConflicts = getConflictsForInstructionAccountsAndArgs(node);\n if (accountsAndArgsConflicts.length > 0) {\n logWarn(\n `[Rust] Accounts and args of instruction [${node.name}] have the following ` +\n `conflicting attributes [${accountsAndArgsConflicts.join(', ')}]. ` +\n `Thus, the conflicting arguments will be suffixed with \"_arg\". ` +\n 'You may want to rename the conflicting attributes.',\n );\n }\n\n // Instruction args.\n const instructionArgs: {\n default: boolean;\n innerOptionType: string | null;\n name: string;\n optional: boolean;\n type: string;\n value: string | null;\n }[] = [];\n let hasArgs = false;\n let hasOptional = false;\n\n node.arguments.forEach(argument => {\n const argumentVisitor = getTypeManifestVisitor({\n getImportFrom,\n getTraitsFromNode,\n nestedStruct: true,\n parentName: `${pascalCase(node.name)}InstructionData`,\n });\n const manifest = visit(argument.type, argumentVisitor);\n imports.mergeWith(manifest.imports);\n const innerOptionType = isNode(argument.type, 'optionTypeNode')\n ? manifest.type.slice('Option<'.length, -1)\n : null;\n\n const hasDefaultValue = !!argument.defaultValue && isNode(argument.defaultValue, VALUE_NODES);\n let renderValue: string | null = null;\n if (hasDefaultValue) {\n const { imports: argImports, render: value } = renderValueNode(\n argument.defaultValue,\n getImportFrom,\n );\n imports.mergeWith(argImports);\n renderValue = value;\n }\n\n hasArgs = hasArgs || argument.defaultValueStrategy !== 'omitted';\n hasOptional = hasOptional || (hasDefaultValue && argument.defaultValueStrategy !== 'omitted');\n\n const name = accountsAndArgsConflicts.includes(argument.name)\n ? `${argument.name}_arg`\n : argument.name;\n\n instructionArgs.push({\n default: hasDefaultValue && argument.defaultValueStrategy === 'omitted',\n innerOptionType,\n name,\n optional: hasDefaultValue && argument.defaultValueStrategy !== 'omitted',\n type: manifest.type,\n value: renderValue,\n });\n });\n\n const struct = structTypeNodeFromInstructionArgumentNodes(node.arguments);\n const structVisitor = getTypeManifestVisitor({\n getImportFrom,\n getTraitsFromNode,\n parentName: `${pascalCase(node.name)}InstructionData`,\n });\n const typeManifest = visit(struct, structVisitor);\n\n return new RenderMap().add(\n `instructions/${snakeCase(node.name)}.rs`,\n render('instructionsPage.njk', {\n hasArgs,\n hasOptional,\n imports: imports\n .remove(`generatedInstructions::${pascalCase(node.name)}`)\n .toString(dependencyMap),\n instruction: node,\n instructionArgs,\n program,\n typeManifest,\n }),\n );\n },\n\n visitProgram(node, { self }) {\n program = node;\n const renderMap = new RenderMap()\n .mergeWith(...node.accounts.map(account => visit(account, self)))\n .mergeWith(...node.definedTypes.map(type => visit(type, self)))\n .mergeWith(\n ...getAllInstructionsWithSubs(node, {\n leavesOnly: !renderParentInstructions,\n }).map(ix => visit(ix, self)),\n );\n\n // Errors.\n if (node.errors.length > 0) {\n renderMap.add(\n `errors/${snakeCase(node.name)}.rs`,\n render('errorsPage.njk', {\n errors: node.errors,\n imports: new ImportMap().toString(dependencyMap),\n program: node,\n }),\n );\n }\n\n program = null;\n return renderMap;\n },\n\n visitRoot(node, { self }) {\n const programsToExport = getAllPrograms(node);\n const accountsToExport = getAllAccounts(node);\n const instructionsToExport = getAllInstructionsWithSubs(node, {\n leavesOnly: !renderParentInstructions,\n });\n const definedTypesToExport = getAllDefinedTypes(node);\n const hasAnythingToExport =\n programsToExport.length > 0 ||\n accountsToExport.length > 0 ||\n instructionsToExport.length > 0 ||\n definedTypesToExport.length > 0;\n\n const ctx = {\n accountsToExport,\n definedTypesToExport,\n hasAnythingToExport,\n instructionsToExport,\n programsToExport,\n root: node,\n };\n\n const map = new RenderMap();\n if (programsToExport.length > 0) {\n map.add('programs.rs', render('programsMod.njk', ctx)).add(\n 'errors/mod.rs',\n render('errorsMod.njk', ctx),\n );\n }\n if (accountsToExport.length > 0) {\n map.add('accounts/mod.rs', render('accountsMod.njk', ctx));\n }\n if (instructionsToExport.length > 0) {\n map.add('instructions/mod.rs', render('instructionsMod.njk', ctx));\n }\n if (definedTypesToExport.length > 0) {\n map.add('types/mod.rs', render('definedTypesMod.njk', ctx));\n }\n\n return map\n .add('mod.rs', render('rootMod.njk', ctx))\n .mergeWith(...getAllPrograms(node).map(p => visit(p, self)));\n },\n }),\n v => recordNodeStackVisitor(v, stack),\n v => recordLinkablesOnFirstVisitVisitor(v, linkables),\n );\n}\n\nfunction getConflictsForInstructionAccountsAndArgs(instruction: InstructionNode): string[] {\n const allNames = [\n ...instruction.accounts.map(account => account.name),\n ...instruction.arguments.map(argument => argument.name),\n ];\n const duplicates = allNames.filter((e, i, a) => a.indexOf(e) !== i);\n return [...new Set(duplicates)];\n}\n","import { logError, logWarn } from '@codama/errors';\nimport { deleteDirectory, writeRenderMapVisitor } from '@codama/renderers-core';\nimport { rootNodeVisitor, visit } from '@codama/visitors-core';\nimport { spawnSync } from 'child_process';\n\nimport { GetRenderMapOptions, getRenderMapVisitor } from './getRenderMapVisitor';\n\nexport type RenderOptions = GetRenderMapOptions & {\n crateFolder?: string;\n deleteFolderBeforeRendering?: boolean;\n formatCode?: boolean;\n toolchain?: string;\n};\n\nexport function renderVisitor(path: string, options: RenderOptions = {}) {\n return rootNodeVisitor(root => {\n // Delete existing generated folder.\n if (options.deleteFolderBeforeRendering ?? true) {\n deleteDirectory(path);\n }\n\n // Render the new files.\n visit(root, writeRenderMapVisitor(getRenderMapVisitor(options), path));\n\n // format the code\n if (options.formatCode) {\n if (options.crateFolder) {\n const toolchain = options.toolchain ?? '+stable';\n runFormatter('cargo', [toolchain, 'fmt', '--manifest-path', `${options.crateFolder}/Cargo.toml`]);\n } else {\n logWarn('No crate folder specified, skipping formatting.');\n }\n }\n });\n}\n\nfunction runFormatter(cmd: string, args: string[]) {\n const { stdout, stderr, error } = spawnSync(cmd, args);\n if (error?.message?.includes('ENOENT')) {\n logWarn(`Could not find ${cmd}, skipping formatting.`);\n return;\n }\n if (stdout.length > 0) {\n logWarn(`(cargo-fmt) ${stdout || error}`);\n }\n if (stderr.length > 0) {\n logError(`(cargo-fmt) ${stderr || error}`);\n }\n}\n"]}
@@ -128,33 +128,35 @@ impl<'a> TryFrom<&solana_program::account_info::AccountInfo<'a>> for {{ account.
128
128
  }
129
129
  }
130
130
 
131
- #[cfg(feature = "anchor")]
132
- impl anchor_lang::AccountDeserialize for {{ account.name | pascalCase }} {
133
- fn try_deserialize_unchecked(buf: &mut &[u8]) -> anchor_lang::Result<Self> {
134
- Ok(Self::deserialize(buf)?)
135
- }
136
- }
131
+ {% if anchorTraits %}
132
+ #[cfg(feature = "anchor")]
133
+ impl anchor_lang::AccountDeserialize for {{ account.name | pascalCase }} {
134
+ fn try_deserialize_unchecked(buf: &mut &[u8]) -> anchor_lang::Result<Self> {
135
+ Ok(Self::deserialize(buf)?)
136
+ }
137
+ }
137
138
 
138
- #[cfg(feature = "anchor")]
139
- impl anchor_lang::AccountSerialize for {{ account.name | pascalCase }} {}
139
+ #[cfg(feature = "anchor")]
140
+ impl anchor_lang::AccountSerialize for {{ account.name | pascalCase }} {}
140
141
 
141
- #[cfg(feature = "anchor")]
142
- impl anchor_lang::Owner for {{ account.name | pascalCase }} {
143
- fn owner() -> Pubkey {
144
- crate::{{ program.name | snakeCase | upper }}_ID
145
- }
146
- }
142
+ #[cfg(feature = "anchor")]
143
+ impl anchor_lang::Owner for {{ account.name | pascalCase }} {
144
+ fn owner() -> Pubkey {
145
+ crate::{{ program.name | snakeCase | upper }}_ID
146
+ }
147
+ }
147
148
 
148
- #[cfg(feature = "anchor-idl-build")]
149
- impl anchor_lang::IdlBuild for {{ account.name | pascalCase }} {}
149
+ #[cfg(feature = "anchor-idl-build")]
150
+ impl anchor_lang::IdlBuild for {{ account.name | pascalCase }} {}
150
151
 
151
- {#
152
- This is not used for the IDL generation since default `IdlBuild` impl doesn't include
153
- the type in the IDL but it stil needs to be added in order to make compilation work.
154
- #}
155
- #[cfg(feature = "anchor-idl-build")]
156
- impl anchor_lang::Discriminator for {{ account.name | pascalCase }} {
157
- const DISCRIMINATOR: [u8; 8] = [0; 8];
158
- }
152
+ {#
153
+ This is not used for the IDL generation since default `IdlBuild` impl doesn't include
154
+ the type in the IDL but it stil needs to be added in order to make compilation work.
155
+ #}
156
+ #[cfg(feature = "anchor-idl-build")]
157
+ impl anchor_lang::Discriminator for {{ account.name | pascalCase }} {
158
+ const DISCRIMINATOR: [u8; 8] = [0; 8];
159
+ }
160
+ {% endif %}
159
161
 
160
162
  {% endblock %}
@@ -1,6 +1,7 @@
1
1
  import { RenderMap } from '@codama/renderers-core';
2
2
  import { LinkOverrides, TraitOptions } from './utils';
3
3
  export type GetRenderMapOptions = {
4
+ anchorTraits?: boolean;
4
5
  defaultTraitOverrides?: string[];
5
6
  dependencyMap?: Record<string, string>;
6
7
  linkOverrides?: LinkOverrides;
@@ -1 +1 @@
1
- {"version":3,"file":"getRenderMapVisitor.d.ts","sourceRoot":"","sources":["../../src/getRenderMapVisitor.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAanD,OAAO,EAAkD,aAAa,EAAU,YAAY,EAAE,MAAM,SAAS,CAAC;AAE9G,MAAM,MAAM,mBAAmB,GAAG;IAC9B,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,YAAY,CAAC,EAAE,YAAY,CAAC;CAC/B,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,mBAAwB,0IAwPpE"}
1
+ {"version":3,"file":"getRenderMapVisitor.d.ts","sourceRoot":"","sources":["../../src/getRenderMapVisitor.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAenD,OAAO,EAAkD,aAAa,EAAU,YAAY,EAAE,MAAM,SAAS,CAAC;AAE9G,MAAM,MAAM,mBAAmB,GAAG;IAC9B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,YAAY,CAAC,EAAE,YAAY,CAAC;CAC/B,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,mBAAwB,0IA2PpE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codama/renderers-rust",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "description": "Renders Rust clients for your programs",
5
5
  "exports": {
6
6
  "types": "./dist/types/index.d.ts",
@@ -30,10 +30,10 @@
30
30
  "dependencies": {
31
31
  "@solana/codecs-strings": "rc",
32
32
  "nunjucks": "^3.2.4",
33
- "@codama/errors": "1.0.0",
34
- "@codama/nodes": "1.0.0",
35
- "@codama/renderers-core": "1.0.0",
36
- "@codama/visitors-core": "1.0.0"
33
+ "@codama/errors": "1.1.0",
34
+ "@codama/nodes": "1.1.0",
35
+ "@codama/renderers-core": "1.0.1",
36
+ "@codama/visitors-core": "1.1.0"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@types/nunjucks": "^3.2.6"