Description
The Vixen parser renderer fails when encountering nested vectors containing custom defined types (vec<vec<DefinedType>>), throwing the error: Unsupported matrix item kind: definedTypeLinkNode.
Error Details
Error Message:
Error: Unsupported matrix item kind: definedTypeLinkNode
at getArrayTypeTransform (/node_modules/@codama/renderers-vixen-parser/dist/index.node.cjs:631:17)
Stack Trace:
Error: Unsupported matrix item kind: definedTypeLinkNode
at getArrayTypeTransform (/Users/paulyu/Project/yellowstone-vixen/parser-generator/node_modules/.pnpm/@codama+renderers-vixen-parser@1.2.6_fastestsmallesttextencoderdecoder@1.0.22_typescript@5.8.3/node_modules/@codama/renderers-vixen-parser/dist/index.node.cjs:631:17)
at getTransform (/Users/paulyu/Project/yellowstone-vixen/parser-generator/node_modules/.pnpm/@codama+renderers-vixen-parser@1.2.6_fastestsmallesttextencoderdecoder@1.0.22_typescript@5.8.3/node_modules/@codama/renderers-vixen-parser/dist/index.node.cjs:673:14)
at /Users/paulyu/Project/yellowstone-vixen/parser-generator/node_modules/.pnpm/@codama+renderers-vixen-parser@1.2.6_fastestsmallesttextencoderdecoder@1.0.22_typescript@5.8.3/node_modules/@codama/renderers-vixen-parser/dist/index.node.cjs:950:30
at Array.map (<anonymous>)
at /Users/paulyu/Project/yellowstone-vixen/parser-generator/node_modules/.pnpm/@codama+renderers-vixen-parser@1.2.6_fastestsmallesttextencoderdecoder@1.0.22_typescript@5.8.3/node_modules/@codama/renderers-vixen-parser/dist/index.node.cjs:947:47
at Array.map (<anonymous>)
at Object.visitRoot (/Users/paulyu/Project/yellowstone-vixen/parser-generator/node_modules/.pnpm/@codama+renderers-vixen-parser@1.2.6_fastestsmallesttextencoderdecoder@1.0.22_typescript@5.8.3/node_modules/@codama/renderers-vixen-parser/dist/index.node.cjs:941:36)
at Object.extendedVisitNode (/Users/paulyu/Project/yellowstone-vixen/parser-generator/node_modules/.pnpm/@codama+visitors-core@1.3.7/node_modules/@codama/visitors-core/dist/index.node.cjs:927:47)
at /Users/paulyu/Project/yellowstone-vixen/parser-generator/node_modules/.pnpm/@codama+visitors-core@1.3.7/node_modules/@codama/visitors-core/dist/index.node.cjs:820:21
at Object.interceptedVisitNode (/Users/paulyu/Project/yellowstone-vixen/parser-generator/node_modules/.pnpm/@codama+visitors-core@1.3.7/node_modules/@codama/visitors-core/dist/index.node.cjs:653:20)
Environment
- @codama/renderers-vixen-parser:
1.2.6
- @codama/visitors-core:
1.3.7
- @codama/nodes:
1.3.7
- @codama/nodes-from-anchor:
1.2.9
- Node.js:
v24.1.0
Reproduction Case
IDL Structure that Causes the Error:
I get it from OKX dex idl. It's accessible in https://solscan.io/account/6m2CDdhRgxpH4WjvdzxAYbGxwdGUz5MziiL5jek2kBma
{
"name": "routes",
"type": {
"vec": {
"vec": {
"defined": {
"name": "Route"
}
}
}
}
}
Minimal Reproduction Script:
const path = require("node:path");
const { rootNodeFromAnchor } = require("@codama/nodes-from-anchor");
const { readJson } = require("@codama/renderers-core");
const { visit } = require("@codama/visitors-core");
const { renderVisitor } = require("@codama/renderers-vixen-parser");
const idl = {
"address": "6m2CDdhRgxpH4WjvdzxAYbGxwdGUz5MziiL5jek2kBma",
"metadata": {
"name": "test_program",
"version": "0.1.0",
"spec": "0.1.0"
},
"types": [
{
"name": "Route",
"type": {
"kind": "struct",
"fields": [
{ "name": "id", "type": "u64" }
]
}
},
{
"name": "TestStruct",
"type": {
"kind": "struct",
"fields": [
{
"name": "routes",
"type": {
"vec": {
"vec": {
"defined": { "name": "Route" }
}
}
}
}
]
}
}
],
"instructions": [],
"accounts": [],
"events": [],
"errors": []
};
const node = rootNodeFromAnchor(idl);
visit(node, renderVisitor({
projectFolder: __dirname,
projectName: "test-parser",
}));
Root Cause Analysis
The issue is in the getArrayTypeTransform function at line ~631. When processing nested arrays (matrix case), the function only handles numberTypeNode but throws an error for definedTypeLinkNode:
// Matrix case
case "arrayTypeNode": {
const matrixItemKind = item.item.kind;
switch (matrixItemKind) {
case "numberTypeNode": {
// Supported - handles numeric matrices
const protoTypeName = numberTypeToProtoHelper(item.item);
const helperTypeName = `Repeated${titleCase(protoTypeName)}Row`;
return `self.${outerTypeName}.into_iter().map(|x| proto_def::${helperTypeName} { rows: x.to_vec() }).collect()`;
}
default: {
// This is where definedTypeLinkNode fails
throw new Error(`Unsupported matrix item kind: ${matrixItemKind}`);
}
}
}
Additional Context
This limitation prevents parsing of IDLs from programs that use nested vector structures with custom types, which is a valid and useful pattern in Solana programs. The error occurs specifically in the Vixen renderer's array transformation logic, while the core Codama system properly supports definedTypeLinkNode in all other contexts.
Description
The Vixen parser renderer fails when encountering nested vectors containing custom defined types (
vec<vec<DefinedType>>), throwing the error:Unsupported matrix item kind: definedTypeLinkNode.Error Details
Error Message:
Stack Trace:
Environment
1.2.61.3.71.3.71.2.9v24.1.0Reproduction Case
IDL Structure that Causes the Error:
I get it from OKX dex idl. It's accessible in https://solscan.io/account/6m2CDdhRgxpH4WjvdzxAYbGxwdGUz5MziiL5jek2kBma
{ "name": "routes", "type": { "vec": { "vec": { "defined": { "name": "Route" } } } } }Minimal Reproduction Script:
Root Cause Analysis
The issue is in the
getArrayTypeTransformfunction at line ~631. When processing nested arrays (matrix case), the function only handlesnumberTypeNodebut throws an error fordefinedTypeLinkNode:Additional Context
This limitation prevents parsing of IDLs from programs that use nested vector structures with custom types, which is a valid and useful pattern in Solana programs. The error occurs specifically in the Vixen renderer's array transformation logic, while the core Codama system properly supports
definedTypeLinkNodein all other contexts.