better-result-migrate-v2
Migrate better-result TaggedError usage from the v1 class-based API to the v2 factory-based API. Use when upgrading a codebase that still extends TaggedError directly or calls the old static helpers.
How do I install this agent skill?
npx skills add https://github.com/dmmulroy/better-result --skill better-result-migrate-v2Is this agent skill safe to install?
- Gen Agent Trust Hubpass
This skill provides technical instructions and code patterns for migrating the 'better-result' TypeScript library from version 1 to version 2. It contains no security risks and focuses entirely on legitimate code refactoring.
- Socketpass
No alerts
- Snykpass
Risk: LOW · No issues
What does this agent skill do?
better-result Migrate v2
Upgrade better-result error definitions from the v1 TaggedError API to the v2 factory-based API.
When to Use
Use this skill when the user:
- is upgrading
better-resultfrom v1 to v2 - has classes that
extend TaggedErrordirectly - still uses
TaggedError.match,TaggedError.matchPartial, orTaggedError.isTaggedError - needs help rewriting constructor calls to the new object-based form
Reading Order
| Task | Files to Read |
|---|---|
| Plan and execute the migration | This file |
| See concrete before/after transforms | references/migration-patterns.md |
| Verify current library behavior | opensrc/ if present |
Quick API Diff
| v1 | v2 |
|---|---|
class FooError extends TaggedError | class FooError extends TaggedError("FooError")<Props>() {} |
readonly _tag = "FooError" as const | _tag generated by the factory |
new FooError("123") | new FooError({ id: "123", message: "..." }) |
TaggedError.match(...) | matchError(...) |
TaggedError.matchPartial(...) | matchErrorPartial(...) |
TaggedError.isTaggedError(...) | isTaggedError(...) or TaggedError.is(...) |
Migration Workflow
- Search for
extends TaggedErroracross the codebase. - For each class, extract:
- the
_tagliteral - constructor parameters and runtime properties
- any computed message or validation logic
- the
- Rewrite the class to
TaggedError("Tag")<Props>(). - If constructor logic exists, keep a custom constructor that accepts an object and calls
super({...}). - Update call sites from positional arguments to object arguments.
- Replace static helper usage with the new standalone helpers.
- Update imports.
- Run tests and search again for old API remnants.
Transformation Rules
- Simple class: remove
_tag, replace base class, move fields into the generic props object. - Computed message: keep a custom constructor and derive
messagebeforesuper(...). - Validation logic: preserve validation inside the custom constructor.
- Extra runtime fields: include them in the props object passed to
super(...). - Usages: migrate
new FooError(a, b)tonew FooError({ a, b, message })or an equivalent derived-message constructor.
Read references/migration-patterns.md before editing if the target classes are non-trivial.
Search Checklist
Search for all of these before and after the migration:
extends TaggedErrorreadonly _tag =TaggedError.matchTaggedError.matchPartialTaggedError.isTaggedErrornewcall sites for migrated error classes
Completion Criteria
A migration is complete when:
- no classes directly extend the old v1
TaggedErrorbase class - migrated classes use
TaggedError("...")<...>() - call sites use the new constructor shape
- static helper calls are replaced with
matchError,matchErrorPartial, orisTaggedError - imports reflect the new helper functions
- tests pass with the upgraded package version
Common Pitfalls
- Dropping custom validation logic during the rewrite
- Forgetting to include
messagein the props shape - Updating class declarations but not constructor call sites
- Replacing
TaggedError.matchbut missingmatchPartialorisTaggedError - Migrating the type but not preserving extra runtime fields like timestamps or codes
In This Reference
| File | Purpose |
|---|---|
references/migration-patterns.md | Detailed v1 → v2 before/after examples and import helper changes |
If opensrc/ exists, use it to confirm the exact v2 API exposed by the installed package.
How can the creator link this skill?
Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.
<a href="https://skillzs.dev/skills/dmmulroy/better-result/better-result-migrate-v2">View better-result-migrate-v2 on skillZs</a>