Use when creating, auditing, or validating MetaSaver contracts packages. Includes Zod validation schemas, TypeScript types, barrel exports, and database type re-exports. File types: .ts, package.json, tsconfig.json.
Limited to specific tools
Additional assets for this skill
This skill is limited to using the following tools:
TEMPLATES.mdtemplates/entity-index.ts.templatetemplates/eslint.config.js.templatetemplates/package.json.templatetemplates/root-index.ts.templatetemplates/shared-index.ts.templatetemplates/tsconfig.json.templatetemplates/types.ts.templatetemplates/validation.ts.templateThis skill documents the complete structure for MetaSaver contracts packages. Contracts packages provide:
Use when:
packages/contracts/{domain}-contracts/
├── src/
│ ├── index.ts # Root barrel export
│ ├── shared/ # (optional) Shared enums/types used by multiple entities
│ │ └── index.ts # Exports all shared types
│ └── {entity}/ # One folder per entity
│ ├── index.ts # Entity barrel export
│ ├── types.ts # TypeScript types and interfaces
│ └── validation.ts # Zod schemas and inferred types
├── eslint.config.js # ESLint flat config (required)
├── package.json
└── tsconfig.json
IMPORTANT - Files NOT to create at package level:
.gitignore - handled by monorepo root.eslintrc.cjs - use eslint.config.js (flat config) onlySee TEMPLATES.md for all available templates. Key templates:
| Template | Purpose | Location |
|---|---|---|
types.ts.template | Entity type definitions | src/{entity}/types.ts |
validation.ts.template | Zod validation schemas | src/{entity}/validation.ts |
entity-index.ts.template | Entity barrel export | src/{entity}/index.ts |
root-index.ts.template | Root barrel export | src/index.ts |
shared-index.ts.template | Shared enums | src/shared/index.ts |
package.json.template | Package configuration | package.json |
tsconfig.json.template | TypeScript config | tsconfig.json |
eslint.config.js.template | ESLint flat config | eslint.config.js |
type imports for Prisma types.partial() for optional fieldsz.infer<>.js extension in all imports (ESM)index.ts, not individual files| Scenario | Location |
|---|---|
| Enum used by one entity only | Colocate in {entity}/types.ts |
| Enum used by 2+ entities | Place in /shared/index.ts |
All enums should have a corresponding Labels object for UI display.
@metasaver/core-typescript-config/baserootDir and outDir in compilerOptionscomposite, declarationMap, sourceMap are inherited)metasaver.projectType: "contracts"test:unit NOT testmkdir -p src/{entity}types.ts.template → src/{entity}/types.ts, replace variablesvalidation.ts.template → src/{entity}/validation.ts, replace variablesentity-index.ts.template → src/{entity}/index.tssrc/index.ts to export new entity/shared/ if doesn't existsrc/shared/index.tssrc/index.ts (if not already)packages/contracts/{domain}-contracts/src/index.ts exists with barrel exportssrc/index.ts, types.ts, validation.ts.gitignore at package level (handled by root).eslintrc.cjs (old format - use eslint.config.js)eslint.config.js (flat config)type imports for Prisma types.partial()z.infer<>index.ts exports all entitiesindex.ts exports types and validation.js extension in all imports/shared/ folder@metasaver/{domain}-contracts patternmetasaver.projectType: "contracts"test:unit NOT test@metasaver/core-typescript-config/baserootDir and outDir in compilerOptionscomposite, declarationMap, sourceMap)| Violation | Fix |
|---|---|
| Duplicating Prisma model fields | Re-export from database package |
Using test instead of test:unit | Change to test:unit |
Missing .js extension | Add .js to all imports |
| Duplicate tsconfig settings | Remove settings inherited from base |
Package-level .gitignore or .eslintrc.cjs | Delete these files |
Entity-specific enum in /shared/ | Move to entity folder |