-
Notifications
You must be signed in to change notification settings - Fork 2
Description
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/@[email protected][email protected][email protected]/node_modules/@codama/renderers-vixen-parser/dist/index.node.cjs:631:17)
at getTransform (/Users/paulyu/Project/yellowstone-vixen/parser-generator/node_modules/.pnpm/@[email protected][email protected][email protected]/node_modules/@codama/renderers-vixen-parser/dist/index.node.cjs:673:14)
at /Users/paulyu/Project/yellowstone-vixen/parser-generator/node_modules/.pnpm/@[email protected][email protected][email protected]/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/@[email protected][email protected][email protected]/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/@[email protected][email protected][email protected]/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/@[email protected]/node_modules/@codama/visitors-core/dist/index.node.cjs:927:47)
at /Users/paulyu/Project/yellowstone-vixen/parser-generator/node_modules/.pnpm/@[email protected]/node_modules/@codama/visitors-core/dist/index.node.cjs:820:21
at Object.interceptedVisitNode (/Users/paulyu/Project/yellowstone-vixen/parser-generator/node_modules/.pnpm/@[email protected]/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.