Skip to content

feat: add event support to dynamic parsers and codecs#989

Open
daog1 wants to merge 5 commits intocodama-idl:mainfrom
daog1:dynamic-parsers-event-support
Open

feat: add event support to dynamic parsers and codecs#989
daog1 wants to merge 5 commits intocodama-idl:mainfrom
daog1:dynamic-parsers-event-support

Conversation

@daog1
Copy link
Copy Markdown
Contributor

@daog1 daog1 commented Mar 26, 2026

Summary

This PR adds event support to @codama/dynamic-parsers and the required codec support in @codama/dynamic-codecs.

Specifically, it:

  • adds EventNode support to getNodeCodec
  • adds identifyEventData and parseEventData
  • extends generic identifyData / parseData to support eventNode
  • adds parseDataByName to decode accounts, events, or instructions by name
  • documents the new dynamic-parsers APIs
  • adds tests for struct-based and tuple-based event payloads

Details

@codama/dynamic-codecs

Added EventNode to EncodableNodes and taught getNodeCodecVisitor to delegate event decoding to event.data, matching the existing account/instruction behavior.

@codama/dynamic-parsers

Added:

  • identifyEventData
  • parseEventData
  • parseDataByName

Also updated event identification so it no longer assumes event payloads are struct-only. This is important because EventNode.data is a general TypeNode, and Anchor event payloads may be tuple-based with hidden discriminator prefixes.

To support that, discriminator matching was relaxed so:

  • constant discriminators work with any event payload type
  • size discriminators work with any event payload type
  • field discriminators still require struct payloads

Tests

Added and updated tests to cover:

  • event codec delegation in dynamic-codecs
  • event identification in dynamic-parsers
  • event parsing in dynamic-parsers
  • tuple event payloads with constant discriminators
  • parsing by name for accounts, events, and instructions

Validation

Ran:

  • pnpm --filter @codama/dynamic-codecs test:types
  • pnpm --filter @codama/dynamic-codecs build
  • pnpm --filter @codama/dynamic-codecs test:unit
  • pnpm --filter @codama/dynamic-parsers test:types
  • pnpm --filter @codama/dynamic-parsers build
  • pnpm --filter @codama/dynamic-parsers test:unit

@changeset-bot
Copy link
Copy Markdown

changeset-bot bot commented Mar 26, 2026

🦋 Changeset detected

Latest commit: 6ac4e23

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 2 packages
Name Type
@codama/dynamic-codecs Minor
@codama/dynamic-parsers Minor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Copy link
Copy Markdown
Member

@lorisleiva lorisleiva left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd just like to challenge the usefulness of parseDataByName but the rest is good. Don't forget to add a changeset as well.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants