| name | typescript-write |
| description | Write TypeScript and JavaScript code following Metabase coding standards and best practices. Use when developing or refactoring TypeScript/JavaScript code. |
TypeScript Write (Metabase Standards)
Use this skill when implementing or refactoring TypeScript/JavaScript in a Metabase codebase (or a codebase that follows Metabase conventions).
Autonomous Development Workflow
- Do not attempt to read or edit files outside the project folder.
- Add failing tests first, then fix them.
- Work autonomously in small, testable increments.
- Run targeted tests, and lint continuously during development.
- Prioritize understanding existing patterns before implementing.
- Don't commit changes; leave it for the user to review and make commits.
Implementation Principles
- Prefer using existing Metabase patterns and utilities over inventing new abstractions.
- Keep changes small, focused, and easy to review; avoid drive-by refactors.
- Treat type boundaries explicitly (API responses,
localStorage, query params, event payloads).- Prefer
unknownat the boundary, then validate/narrow with runtime checks.
- Prefer
Type Rules
- Avoid
any. If you must temporarily unblock work, useunknown+ narrowing and/or a dedicated parsing layer. - Prefer defining
interfaces over type aliases for object shapes. - Prefer explicit return types on exported functions and public APIs.
- Avoid widening: keep unions narrow and use discriminated unions when modeling variants.
Testing
- Prefer the project’s existing test runner and conventions; default to Jest + ts-jest when appropriate.
- Add a failing test that demonstrates the bug/desired behavior before implementing the fix.
- Prefer focused unit tests; add integration/e2e coverage only when the change requires it.
Linting and Formatting
- Lint:
npm run lint --fix- Run ESLint on the codebase and fix issues.
- Format:
npm run prettier --write .- Format code using Prettier.
- Type Check:
npm run type-check-pure- Run TypeScript type checking.
Suggested Workflow (Checklist)
- Identify the closest existing implementation pattern in the codebase (similar module/component/test).
- Write a failing test (or update an existing one) proving the intended behavior.
- Implement the smallest fix that makes the test pass while matching existing style.
- Tighten types (remove broad types, model invariants, validate at boundaries).
- Run targeted tests, then
npm run lint --fix,npm run prettier --write ., andnpm run type-check-pure.