Skip to content

Unsupported matrix item kind: definedTypeLinkNode #11

@nooma-42

Description

@nooma-42

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions