Skip to content

feat(experiment): named tuples#281

Merged
tmm merged 9 commits into
mainfrom
tmm/named-tuples
Nov 21, 2025
Merged

feat(experiment): named tuples#281
tmm merged 9 commits into
mainfrom
tmm/named-tuples

Conversation

@tmm

@tmm tmm commented Nov 1, 2025

Copy link
Copy Markdown
Member

Since TypeScript can't dynamically generate tuple labels and labels would drastically improve the developer experience of positional arguments, this PR explores a strategy for adding tuple labels for common ABI parameter names.

Before After
003554_Ghostty_2025-11-19-16 46 15@2x 003552_Ghostty_2025-11-19-16 45 55@2x

Performance is a bit worse, since we have to use tail recursion instead of a mapped type, but it's not so bad that this isn't a viable approach.

@changeset-bot

changeset-bot Bot commented Nov 1, 2025

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: d186346

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

This PR includes changesets to release 1 package
Name Type
abitype 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

@vercel

vercel Bot commented Nov 1, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Preview Comments Updated (UTC)
abitype Ready Ready Preview Comment Nov 21, 2025 0:37am

@codecov

codecov Bot commented Nov 1, 2025

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 99.90%. Comparing base (e2c7e84) to head (d186346).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #281   +/-   ##
=======================================
  Coverage   99.90%   99.90%           
=======================================
  Files          26       26           
  Lines        6166     6166           
  Branches      195      195           
=======================================
  Hits         6160     6160           
  Misses          5        5           
  Partials        1        1           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@tmm

tmm commented Nov 3, 2025

Copy link
Copy Markdown
Member Author

@tmm

tmm commented Nov 19, 2025

Copy link
Copy Markdown
Member Author

spreading individual named tuples might be a better strategy

it is!

@github-actions

github-actions Bot commented Nov 19, 2025

Copy link
Copy Markdown
Contributor

Size Change: +1.4 kB (+1.2%)

Total Size: 118 kB

Filename Size Change
packages/abitype/dist/cjs/register.js 14.3 kB -3 B (-0.02%)
packages/abitype/dist/esm/register.js 15.5 kB -3 B (-0.02%)
packages/abitype/dist/types 2.84 kB +1 kB (+54.55%) 🆘
packages/abitype/dist/types/regex.d.ts 1.14 kB +94 B (+9.01%) 🔍
packages/abitype/dist/types/types.d.ts 2.72 kB +318 B (+13.23%) ⚠️
packages/abitype/dist/types/version.d.ts 2.13 kB -5 B (-0.23%)
ℹ️ View Unchanged
Filename Size Change
packages/abitype/dist 0 B 0 B 🆕
packages/abitype/dist/cjs 123 B 0 B
packages/abitype/dist/cjs/abi.js 0 B 0 B 🆕
packages/abitype/dist/cjs/abis 3.59 kB 0 B
packages/abitype/dist/cjs/abis/human-readable.js 5.91 kB 0 B
packages/abitype/dist/cjs/abis/json.js 575 B 0 B
packages/abitype/dist/cjs/errors.js 0 B 0 B 🆕
packages/abitype/dist/cjs/exports 588 B 0 B
packages/abitype/dist/cjs/exports/abis.js 744 B 0 B
packages/abitype/dist/cjs/exports/index.js 567 B 0 B
packages/abitype/dist/cjs/exports/zod.js 0 B 0 B 🆕
packages/abitype/dist/cjs/human-readable 0 B 0 B 🆕
packages/abitype/dist/cjs/human-readable/errors 531 B 0 B
packages/abitype/dist/cjs/human-readable/errors/abiItem.js 801 B 0 B
packages/abitype/dist/cjs/human-readable/errors/abiParameter.js 425 B 0 B
packages/abitype/dist/cjs/human-readable/errors/signature.js 403 B 0 B
packages/abitype/dist/cjs/human-readable/errors/splitParameters.js 336 B 0 B
packages/abitype/dist/cjs/human-readable/errors/struct.js 286 B 0 B
packages/abitype/dist/cjs/human-readable/formatAbi.js 410 B 0 B
packages/abitype/dist/cjs/human-readable/formatAbiItem.js 477 B 0 B
packages/abitype/dist/cjs/human-readable/formatAbiParameter.js 300 B 0 B
packages/abitype/dist/cjs/human-readable/formatAbiParameters.js 339 B 0 B
packages/abitype/dist/cjs/human-readable/parseAbi.js 429 B 0 B
packages/abitype/dist/cjs/human-readable/parseAbiItem.js 460 B 0 B
packages/abitype/dist/cjs/human-readable/parseAbiParameter.js 519 B 0 B
packages/abitype/dist/cjs/human-readable/parseAbiParameters.js 0 B 0 B 🆕
packages/abitype/dist/cjs/human-readable/runtime 749 B 0 B
packages/abitype/dist/cjs/human-readable/runtime/cache.js 759 B 0 B
packages/abitype/dist/cjs/human-readable/runtime/signatures.js 1.02 kB 0 B
packages/abitype/dist/cjs/human-readable/runtime/structs.js 2.23 kB 0 B
packages/abitype/dist/cjs/human-readable/runtime/utils.js 0 B 0 B 🆕
packages/abitype/dist/cjs/human-readable/types 127 B 0 B
packages/abitype/dist/cjs/human-readable/types/signatures.js 125 B 0 B
packages/abitype/dist/cjs/human-readable/types/structs.js 124 B 0 B
packages/abitype/dist/cjs/human-readable/types/utils.js 160 B 0 B
packages/abitype/dist/cjs/narrow.js 40 B 0 B
packages/abitype/dist/cjs/package.json 369 B 0 B
packages/abitype/dist/cjs/regex.js 125 B 0 B
packages/abitype/dist/cjs/tsconfig.build.tsbuildinfo 124 B 0 B
packages/abitype/dist/cjs/types.js 124 B 0 B
packages/abitype/dist/cjs/utils.js 149 B 0 B
packages/abitype/dist/cjs/version.js 2.13 kB 0 B
packages/abitype/dist/cjs/zod.js 0 B 0 B 🆕
packages/abitype/dist/esm 62 B 0 B
packages/abitype/dist/esm/abi.js 0 B 0 B 🆕
packages/abitype/dist/esm/abis 3.95 kB 0 B
packages/abitype/dist/esm/abis/human-readable.js 6.26 kB 0 B
packages/abitype/dist/esm/abis/json.js 522 B 0 B
packages/abitype/dist/esm/errors.js 0 B 0 B 🆕
packages/abitype/dist/esm/exports 297 B 0 B
packages/abitype/dist/esm/exports/abis.js 403 B 0 B
packages/abitype/dist/esm/exports/index.js 279 B 0 B
packages/abitype/dist/esm/exports/zod.js 0 B 0 B 🆕
packages/abitype/dist/esm/human-readable 0 B 0 B 🆕
packages/abitype/dist/esm/human-readable/errors 448 B 0 B
packages/abitype/dist/esm/human-readable/errors/abiItem.js 670 B 0 B
packages/abitype/dist/esm/human-readable/errors/abiParameter.js 338 B 0 B
packages/abitype/dist/esm/human-readable/errors/signature.js 343 B 0 B
packages/abitype/dist/esm/human-readable/errors/splitParameters.js 280 B 0 B
packages/abitype/dist/esm/human-readable/errors/struct.js 271 B 0 B
packages/abitype/dist/esm/human-readable/formatAbi.js 404 B 0 B
packages/abitype/dist/esm/human-readable/formatAbiItem.js 568 B 0 B
packages/abitype/dist/esm/human-readable/formatAbiParameter.js 377 B 0 B
packages/abitype/dist/esm/human-readable/formatAbiParameters.js 479 B 0 B
packages/abitype/dist/esm/human-readable/parseAbi.js 593 B 0 B
packages/abitype/dist/esm/human-readable/parseAbiItem.js 560 B 0 B
packages/abitype/dist/esm/human-readable/parseAbiParameter.js 636 B 0 B
packages/abitype/dist/esm/human-readable/parseAbiParameters.js 0 B 0 B 🆕
packages/abitype/dist/esm/human-readable/runtime 1.06 kB 0 B
packages/abitype/dist/esm/human-readable/runtime/cache.js 629 B 0 B
packages/abitype/dist/esm/human-readable/runtime/signatures.js 1.01 kB 0 B
packages/abitype/dist/esm/human-readable/runtime/structs.js 2.33 kB 0 B
packages/abitype/dist/esm/human-readable/runtime/utils.js 0 B 0 B 🆕
packages/abitype/dist/esm/human-readable/types 69 B 0 B
packages/abitype/dist/esm/human-readable/types/signatures.js 66 B 0 B
packages/abitype/dist/esm/human-readable/types/structs.js 64 B 0 B
packages/abitype/dist/esm/human-readable/types/utils.js 264 B 0 B
packages/abitype/dist/esm/narrow.js 58 B 0 B
packages/abitype/dist/esm/package.json 504 B 0 B
packages/abitype/dist/esm/regex.js 67 B 0 B
packages/abitype/dist/esm/tsconfig.build.tsbuildinfo 64 B 0 B
packages/abitype/dist/esm/types.js 64 B 0 B
packages/abitype/dist/esm/utils.js 82 B 0 B
packages/abitype/dist/esm/version.js 2.5 kB 0 B
packages/abitype/dist/esm/zod.js 0 B 0 B 🆕
packages/abitype/dist/types/abi.d.ts 0 B 0 B 🆕
packages/abitype/dist/types/abis 3.88 kB 0 B
packages/abitype/dist/types/abis/human-readable.d.ts 5.96 kB 0 B
packages/abitype/dist/types/abis/json.d.ts 273 B 0 B
packages/abitype/dist/types/errors.d.ts 0 B 0 B 🆕
packages/abitype/dist/types/exports 260 B 0 B
packages/abitype/dist/types/exports/abis.d.ts 655 B 0 B
packages/abitype/dist/types/exports/index.d.ts 244 B 0 B
packages/abitype/dist/types/exports/zod.d.ts 0 B 0 B 🆕
packages/abitype/dist/types/human-readable 0 B 0 B 🆕
packages/abitype/dist/types/human-readable/errors 227 B 0 B
packages/abitype/dist/types/human-readable/errors/abiItem.d.ts 376 B 0 B
packages/abitype/dist/types/human-readable/errors/abiParameter.d.ts 245 B 0 B
packages/abitype/dist/types/human-readable/errors/signature.d.ts 203 B 0 B
packages/abitype/dist/types/human-readable/errors/splitParameters.d.ts 174 B 0 B
packages/abitype/dist/types/human-readable/errors/struct.d.ts 314 B 0 B
packages/abitype/dist/types/human-readable/formatAbi.d.ts 640 B 0 B
packages/abitype/dist/types/human-readable/formatAbiItem.d.ts 663 B 0 B
packages/abitype/dist/types/human-readable/formatAbiParameter.d.ts 452 B 0 B
packages/abitype/dist/types/human-readable/formatAbiParameters.d.ts 641 B 0 B
packages/abitype/dist/types/human-readable/parseAbi.d.ts 756 B 0 B
packages/abitype/dist/types/human-readable/parseAbiItem.d.ts 735 B 0 B
packages/abitype/dist/types/human-readable/parseAbiParameter.d.ts 990 B 0 B
packages/abitype/dist/types/human-readable/parseAbiParameters.d.ts 0 B 0 B 🆕
packages/abitype/dist/types/human-readable/runtime 575 B 0 B
packages/abitype/dist/types/human-readable/runtime/cache.d.ts 379 B 0 B
packages/abitype/dist/types/human-readable/runtime/signatures.d.ts 155 B 0 B
packages/abitype/dist/types/human-readable/runtime/structs.d.ts 710 B 0 B
packages/abitype/dist/types/human-readable/runtime/utils.d.ts 0 B 0 B 🆕
packages/abitype/dist/types/human-readable/types 1.83 kB 0 B
packages/abitype/dist/types/human-readable/types/signatures.d.ts 725 B 0 B
packages/abitype/dist/types/human-readable/types/structs.d.ts 2.11 kB 0 B
packages/abitype/dist/types/human-readable/types/utils.d.ts 422 B 0 B
packages/abitype/dist/types/narrow.d.ts 161 B 0 B
packages/abitype/dist/types/register.d.ts 1.9 kB 0 B
packages/abitype/dist/types/utils.d.ts 92 B 0 B
packages/abitype/dist/types/zod.d.ts 0 B 0 B 🆕

compressed-size-action

@pkg-pr-new

pkg-pr-new Bot commented Nov 19, 2025

Copy link
Copy Markdown

Open in StackBlitz

npm i https://pkg.pr.new/abitype@281

commit: d186346

@tmm tmm force-pushed the tmm/named-tuples branch from ed96f39 to d104da1 Compare November 19, 2025 22:48
@tmm tmm force-pushed the tmm/named-tuples branch from 325a2f4 to 351d927 Compare November 20, 2025 01:56
@tmm tmm force-pushed the tmm/named-tuples branch from e56c1fa to d186346 Compare November 21, 2025 00:36
@tmm tmm merged commit 1a5121b into main Nov 21, 2025
24 checks passed
@tmm tmm deleted the tmm/named-tuples branch November 21, 2025 00:39
@github-actions github-actions Bot mentioned this pull request Nov 21, 2025
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.

1 participant