[utils] Ban enums, and replace them with alternatives
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 413
- Forks
- 308
- Avg merge
- 1d 4h
- Merged PRs (30d)
- 253
Description
Carried over from https://github.com/MetaMask/utils/pull/280, which was approved but still open when `@metamask/utils` moved into core.
TypeScript is structurally typed nearly everywhere, but enums are nominal. Two enums that look identical are not assignable to each other, so a value produced by one copy of a package fails to typecheck against a function from another copy. That bites hardest in a monorepo with duplicated versions in the tree.
`packages/utils` still exports three:
- `KnownCaipNamespace` in `src/caip-types.ts:134`
- `JsonSize` in `src/misc.ts:137`
- `Duration` in `src/time.ts:4`
The original PR replaces them with const objects plus derived union types, which keeps the call sites working while making the types structural.
Note this is a breaking change for consumers who use the enum types nominally, so it wants a major. The PR's `.eslintrc.js` rule does not port directly since core has its own shared config.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start in packages/utils at src/caip-types.ts:134, src/misc.ts:137, and src/time.ts:4 to inspect the three exported enums and their call sites. Replace them with const objects and derived union types while preserving call-site behavior, and adapt the lint rule to core's shared configuration. Done means the enum exports are structural and the breaking change is prepared for a major release.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- tooling
- Issue type
- Refactor
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 65/100