К основному содержанию
скилл CX Codex

fastify-typescript — скилл для Claude Code: правила API на Fastify

Задаёт агенту соглашения по Fastify и TypeScript: схемы валидации, плагины, Prisma и тесты через Jest. Пригодится, когда пишете типизированный REST API.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add Mindrally/skills --skill fastify-typescript -a claude-code
Открыть на GitHub

Что делает fastify-typescript

Скилл подкладывает агенту набор правил по коду: типы объявлять всегда, any не использовать, вместо enum — const-объекты, для объектных форм — интерфейсы, для импорта типов — import type. Именование тоже прописано: PascalCase для типов, camelCase для функций, kebab-case для файлов, UPPERCASE для переменных окружения.

Дальше идёт структура проекта: src/routes/{resource}/ с index.ts, handlers.ts и schemas.ts, отдельные папки под plugins, services, repositories, types, config. Валидация строится на JSON Schema и @sinclair/typebox, общие вещи выносятся в плагины через fastify-plugin, доступ к базе — через Prisma с репозиториями и транзакциями. Ошибки обрабатываются своим классом с statusCode и общим setErrorHandler, тесты пишутся на Jest через app.inject().

Скилл рассчитан на проект, где Prisma уже выбран как ORM: примеры плагина базы и репозиториев завязаны на PrismaClient, и на другом слое доступа к данным их придётся переписывать. По безопасности в правилах есть @fastify/helmet, @fastify/rate-limit, @fastify/cors и JWT через @fastify/jwt — это повод проверить, что у вас они уже подключены, а не заведены вручную.

Какие задачи решает

  • разложить роуты Fastify по ресурсам и папкам
  • описать схемы запроса и ответа через TypeBox
  • вынести подключение Prisma в плагин с хуком onClose
  • сделать единый обработчик ошибок со статусами
  • написать интеграционный тест роута через app.inject()

Примеры запросов агенту

  • добавь новый ресурс orders по структуре из скилла: роут, схемы, хендлеры
  • перепиши этот роут на TypeBox-схемы вместо ручной проверки тела
  • вынеси Prisma в плагин с декоратором и отключением на onClose

Как установить fastify-typescript

1Через Skills CLI (Vercel)

npx skills add Mindrally/skills --skill fastify-typescript -a claude-code

2Вручную: положить файлы

~/.claude/skills/fastify-typescript/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/fastify-typescript/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о fastify-typescript

Как установить fastify-typescript в Claude?

Через установщик скиллов: npx skills add Mindrally/skills --skill fastify-typescript -a claude-code. После этого файл скилла лежит в ~/.claude/skills/fastify-typescript/SKILL.md.

Что делает fastify-typescript?

Даёт агенту правила написания API на Fastify с TypeScript: типизация, именование, структура папок, схемы валидации, плагины, работа с Prisma и тесты на Jest.

Нужна ли Prisma для этого скилла?

Примеры доступа к данным построены на PrismaClient и репозиториях. Если база подключена иначе, эти фрагменты придётся адаптировать под свой слой.

Исходный текст

SKILL.md · Apache-2.0
---
name: fastify-typescript
description: Guidelines for building high-performance APIs with Fastify and TypeScript, covering validation, Prisma integration, and testing best practices
metadata:
  maintainer: Mindrally
  source: https://github.com/Mindrally/skills
---

# Fastify TypeScript Development

You are an expert in Fastify and TypeScript development with deep knowledge of building high-performance, type-safe APIs.

## TypeScript General Guidelines

### Basic Principles

- Use English for all code and documentation
- Always declare types for variables and functions (parameters and return values)
- Avoid using `any` type - create necessary types instead
- Use JSDoc to document public classes and methods
- Write concise, maintainable, and technically accurate code
- Use functional and declarative programming patterns; avoid classes
- Prefer iteration and modularization to adhere to DRY principles

### Nomenclature

- Use PascalCase for types and interfaces
- Use camelCase for variables, functions, and methods
- Use kebab-case for file and directory names
- Use UPPERCASE for environment variables
- Use descriptive variable names with auxiliary verbs: `isLoading`, `hasError`, `canDelete`
- Start each function with a verb

### Functions

- Write short functions with a single purpose
- Use arrow functions for simple operations
- Use async/await consistently throughout the codebase
- Use the RO-RO pattern (Receive an Object, Return an Object) for multiple parameters

### Types and Interfaces

- Prefer interfaces over types for object shapes
- Avoid enums; use maps or const objects instead
- Use Zod for runtime validation with inferred types
- Use `readonly` for immutable properties
- Use `import type` for type-only imports

## Fastify-Specific Guidelines

### Project Structure

```
src/
  routes/
    {resource}/
      index.ts
      handlers.ts
      schemas.ts
  plugins/
    auth.ts
    database.ts
    cors.ts
  services/
    {domain}Service.ts
  repositories/
    {entity}Repository.ts
  types/
    index.ts
  utils/
  config/
  app.ts
  server.ts
```

### Route Organization

- Organize routes by resource/domain
- Use route plugins for modular registration
- Define schemas alongside route handlers
- Use route prefixes for API versioning

```typescript
import { FastifyPluginAsync } from 'fastify';

const usersRoutes: FastifyPluginAsync = async (fastify) => {
  fastify.get('/', { schema: listUsersSchema }, listUsersHandler);
  fastify.get('/:id', { schema: getUserSchema }, getUserHandler);
  fastify.post('/', { schema: createUserSchema }, createUserHandler);
  fastify.put('/:id', { schema: updateUserSchema }, updateUserHandler);
  fastify.delete('/:id', { schema: deleteUserSchema }, deleteUserHandler);
};

export default usersRoutes;
```

### Schema Validation with JSON Schema / Ajv

- Define JSON schemas for all request/response validation
- Use @sinclair/typebox for type-safe schema definitions
- Leverage Fastify's built-in Ajv integration

```typescript
import { Type, Static } from '@sinclair/typebox';

const UserSchema = Type.Object({
  id: Type.String({ format: 'uuid' }),
  name: Type.String({ minLength: 1 }),
  email: Type.String({ format: 'email' }),
  createdAt: Type.String({ format: 'date-time' }),
});

type User = Static<typeof UserSchema>;

const createUserSchema = {
  body: Type.Object({
    name: Type.String({ minLength: 1 }),
    email: Type.String({ format: 'email' }),
  }),
  response: {
    201: UserSchema,
    400: ErrorSchema,
  },
};
```

### Plugins and Decorators

- Use plugins for shared functionality
- Decorate Fastify instance with services and utilities
- Register plugins with proper encapsulation

```typescript
import fp from 'fastify-plugin';

const databasePlugin = fp(async (fastify) => {
  const prisma = new PrismaClient();

  await prisma.$connect();

  fastify.decorate('prisma', prisma);

  fastify.addHook('onClose', async () => {
    await prisma.$disconnect();
  });
});

export default databasePlugin;
```

### Prisma Integration

- Use Prisma as the ORM for database operations
- Create repository classes for data access
- Use transactions for complex operations

```typescript
class UserRepository {
  constructor(private prisma: PrismaClient) {}

  async findById(id: string): Promise<User | null> {
    return this.prisma.user.findUnique({ where: { id } });
  }

  async create(data: CreateUserInput): Promise<User> {
    return this.prisma.user.create({ data });
  }
}
```

### Error Handling

- Use Fastify's built-in error handling
- Create custom error classes for domain errors
- Return consistent error responses

```typescript
import { FastifyError } from 'fastify';

class NotFoundError extends Error implements FastifyError {
  code = 'NOT_FOUND';
  statusCode = 404;

  constructor(resource: string, id: string) {
    super(`${resource} with id ${id} not found`);
    this.name = 'NotFoundError';
  }
}

// Global error handler
fastify.setErrorHandler((error, request, reply) => {
  const statusCode = error.statusCode || 500;

  reply.status(statusCode).send({
    error: error.name,
    message: error.message,
    statusCode,
  });
});
```

### Testing with Jest

- Write unit tests for services and handlers
- Use integration tests for routes
- Mock external dependencies

```typescript
import { build } from '../app';

describe('Users API', () => {
  let app: FastifyInstance;

  beforeAll(async () => {
    app = await build();
  });

  afterAll(async () => {
    await app.close();
  });

  it('should list users', async () => {
    const response = await app.inject({
      method: 'GET',
      url: '/api/users',
    });

    expect(response.statusCode).toBe(200);
    expect(JSON.parse(response.payload)).toBeInstanceOf(Array);
  });
});
```

### Performance

- Fastify is one of the fastest Node.js frameworks
- Use schema validation for automatic serialization optimization
- Enable logging only when needed in production
- Use connection pooling for database connections

### Security

- Use @fastify/helmet for security headers
- Implement rate limiting with @fastify/rate-limit
- Use @fastify/cors for CORS configuration
- Validate all inputs with JSON Schema
- Use JWT for authentication with @fastify/jwt

© Mindrally · Apache-2.0 · Mindrally/skills

Похожие скиллы

Всё по теме «Бэкенд и API» →
fastify Claude MPM Team Скилл для ИИ-агентов с готовыми паттернами Fastify на TypeScript: схемы, плагины, обработка ошибок, тесты через inject. CX Codex +1 571установок fastify-best-practices mcollina Скилл обучает ассистента архитектуре серверов на Fastify для Node.js. Он помогает настраивать маршруты, плагины, валидацию схем и логирование через Pino. CX Codex +1 81 400установок typescript-core bobmatnyc Скилл с современными паттернами TypeScript: строгий tsconfig, валидация данных во время выполнения, продвинутые типы. Пригодится, когда проект на TS растёт и типы перестают спасать. CX Codex +1 475установок typescript alinaqi Задаёт агенту правила работы с TypeScript: строгий tsconfig, линт, тесты на Jest и структура проекта. Пригодится, когда в репозитории уже есть .ts и .tsx файлы. CX Codex +1 313установок typescript-e2e-testing bmad-labs Помогает настраивать, писать и отлаживать сквозные тесты для TypeScript и NestJS с Jest, Supertest и Docker. Подходит для сервисов с Kafka, PostgreSQL, MongoDB и Redis. CX Codex +1 2 300установок typescript-unit-testing bmad-labs Скилл для юнит-тестов TypeScript и NestJS: Jest, моки через @golevelup/ts-jest и структура AAA. Пригодится, когда пишете или чините .spec.ts. CX Codex +1 496установок

Из того же набора168

openai-api-development Скилл для разработки на OpenAI API: подсказывает, как писать вызовы GPT, function calling, эмбеддинги и Assistants API на Python. CX Codex +1 864установок jest Скилл задаёт агенту правила написания тестов на Jest: структура, моки, ассерты, асинхронность. Пригодится, когда тесты в проекте пишет ИИ. CX Codex +1 864установок ruby-rails Скилл задаёт агенту правила разработки на Ruby on Rails: генераторы, ActiveRecord, Hotwire, фоновые задачи и тесты. Пригодится, когда проект уже на Rails или только заводится. CX Codex +1 862установок seo-best-practices Задаёт правила поисковой оптимизации для веб-приложений. Помогает настроить метатеги, разметку JSON-LD, рендеринг и показатели Core Web Vitals. CX Codex +1 858установок performance-optimization Набор правил для веб-производительности: серверный рендеринг, CSS, JavaScript, ассеты и кэш. Полезен, когда агент пишет фронтенд и вы хотите задать ему планку. CX Codex +1 848установок sass-best-practices Скилл задаёт агенту правила письма на Sass с отступами: структура файлов, переменные, миксины, BEM. Пригодится, если стили в проекте пишут на .sass, а не на SCSS. CX Codex +1 845установок elixir Скилл задаёт агенту стиль работы с Elixir и Phoenix: функциональные паттерны, Ecto, LiveView, OTP. Пригодится, когда проект на BEAM, а не на чём-то ещё. CX Codex +1 836установок spring-boot Скилл задаёт агенту стиль кода на Spring Boot: REST-контроллеры, тесты, безопасность, сборка и деплой. Пригодится, когда проект на Java и хочется единообразия. CX Codex +1 832установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой