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

migrate-to-shoehorn — скилл для Claude Code: миграция тестов

Переводит type assertions с as в тестах на функции из @total-typescript/shoehorn. Нужен для частичных объектов и намеренно неверных данных в проверках.

Установить в Claude Code · Через маркетплейс плагинов Все способы и платформы ↓
/plugin marketplace add mattpocock/skills
/plugin install mattpocock-skills@mattpocock
Открыть на GitHub

Что делает migrate-to-shoehorn

Скилл ищет в тестовых файлах утверждения типов через as и меняет их на вызовы Shoehorn. Конструкцию as Type он заменяет на fromPartial(), чтобы передавать только нужные поля объекта.

Для данных с ошибочным типом в тесте применяется fromAny(). Скилл добавляет импорты из @total-typescript/shoehorn и предлагает проверить типы после миграции. Для полного объекта предусмотрен fromExact(), который позднее можно заменить на fromPartial().

Shoehorn предназначен только для тестового кода. Его стоит ставить командам, у которых тесты переполнены заглушками больших объектов или двойными приведениями as unknown as Type.

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

  • заменить as Type на fromPartial() в тестах
  • передать часть полей большого объекта
  • проверить обработку намеренно неверных данных через fromAny()
  • найти assertions в файлах *.test.ts и *.spec.ts
  • добавить импорты @total-typescript/shoehorn

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

  • «Найди в тестах `as Request` и перенеси их на shoehorn.»
  • «Замени `as unknown as Type` в `*.spec.ts` на `fromAny()`.»
  • «Нужно передать частичный Request в тесте без заполнения всех полей.»

Как установить migrate-to-shoehorn

1Через маркетплейс плагинов

/plugin marketplace add mattpocock/skills
/plugin install mattpocock-skills@mattpocock

Команда ставит плагин mattpocock-skills целиком, со всеми его скиллами

2Через Skills CLI (Vercel)

npx skills add mattpocock/skills --skill migrate-to-shoehorn -a claude-code

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

~/.claude/skills/migrate-to-shoehorn/SKILL.md

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

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

Весь набор →
grill-me Matt Pocock Скилл проводит жёсткое интервью по плану или дизайну, чтобы найти пробелы и уточнить решения. Подойдёт перед началом разработки. Claude Code 1 424 476установок grill-with-docs Matt Pocock Скилл проводит жёсткое интервью по плану или дизайну и по ходу создаёт ADR и глоссарий. Подойдёт перед началом сложной разработки. Claude Code 1 219 756установок improve-codebase-architecture Matt Pocock Скилл ищет архитектурные узкие места в кодовой базе и показывает варианты углубления модулей в HTML-отчёте. Подойдёт для ревью перед рефакторингом. Claude Code 1 163 035установок tdd Matt Pocock Скилл управляет циклом красный-зелёный в TDD: проверяет, что тесты пишутся до кода, держит их на уровне публичных интерфейсов и не завязывает на внутреннюю структуру. Claude Code 1 141 062установок setup-matt-pocock-skills Matt Pocock Скилл настраивает репозиторий для инженерных скиллов Matt Pocock: задаёт трекер задач, метки триажа и расположение доменной документации. Запустите его перед первым использованием остальных скиллов. Claude Code 1 052 851установок handoff Matt Pocock Собирает текущий диалог в документ передачи, чтобы другой агент продолжил работу с нужным контекстом. Нужен при смене сессии или исполнителя. Claude Code 1 038 491установок triage Matt Pocock Скилл проводит issue и внешние PR через роли триажа, проверку и подготовку брифа для агента. Подойдёт мейнтейнеру, который разбирает очередь задач. Claude Code 990 453установок prototype Matt Pocock Создаёт временный прототип, чтобы проверить логику, модель состояния или вид интерфейса до работы над основным кодом. Claude Code 986 201установок

Похожие

webapp-testing официальный anthropics Скилл запускает проверки локальных веб-приложений через Playwright: помогает отлаживать UI, делать скриншоты и смотреть логи браузера. Claude Code Claude.ai 186 758установок systematic-debugging Jesse Vincent Ведёт агента от симптома к причине сбоя, прежде чем предлагать правку. Нужен при падении тестов, ошибках сборки и странном поведении кода. Claude Code CX Codex 306 118установок requesting-code-review Jesse Vincent Запрашивает ревью у субагента после задачи, крупной функции или перед слиянием в main. Помогает проверить изменения по требованиям, не перегружая основной контекст. Claude Code CX Codex 262 135установок test-driven-development Jesse Vincent Скилл задаёт цикл TDD: сначала тест, затем проверка его падения, минимальный код и рефакторинг. Пригодится для новых функций, исправлений и изменений поведения. Claude Code CX Codex 259 292установок design-taste-frontend Leonxlnx Скилл задаёт арт-дирекцию для публичных страниц и рабочих экранов, а затем проверяет результат в браузере по скриншотам. Нужен, когда интерфейс выглядит шаблонным или недоработанным. Claude Code CX Codex Cursor +1 673 100установок skill-creator официальный anthropics Помогает создать новый скилл, доработать существующий и проверить результат через тестовые промпты и оценки. Claude Code Claude.ai 414 180установок agent-browser vercel-labs Скилл управляет браузером через CLI: открывает страницы, заполняет формы, нажимает кнопки и проверяет веб-приложения. Подходит для задач, где агенту нужно действовать в интерфейсе. Claude Code CX Codex Cursor +1 1 200 000установок

Вопросы о migrate-to-shoehorn

Как установить migrate-to-shoehorn в Claude Code?

Добавьте скилл командой npx skills add mattpocock/skills --skill migrate-to-shoehorn -a claude-code.

Что делает migrate-to-shoehorn?

Скилл переносит тесты с type assertions через as на функции пакета @total-typescript/shoehorn. Он различает частичные данные и намеренно неверные значения.

Когда использовать fromPartial(), fromAny() и fromExact()?

fromPartial() подходит для неполных данных, которые проходят проверку типов. fromAny() используют для неверных данных в тестах, а fromExact() требует полный объект.

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

SKILL.md · MIT
---
name: migrate-to-shoehorn
description: Migrate test files from `as` type assertions to @total-typescript/shoehorn. Use when user mentions shoehorn, wants to replace `as` in tests, or needs partial test data.
---

# Migrate to Shoehorn

## Why shoehorn?

`shoehorn` lets you pass partial data in tests while keeping TypeScript happy. It replaces `as` assertions with type-safe alternatives.

**Test code only.** Never use shoehorn in production code.

Problems with `as` in tests:

- Trained not to use it
- Must manually specify target type
- Double-as (`as unknown as Type`) for intentionally wrong data

## Install

```bash
npm i @total-typescript/shoehorn
```

## Migration patterns

### Large objects with few needed properties

Before:

```ts
type Request = {
  body: { id: string };
  headers: Record<string, string>;
  cookies: Record<string, string>;
  // ...20 more properties
};

it("gets user by id", () => {
  // Only care about body.id but must fake entire Request
  getUser({
    body: { id: "123" },
    headers: {},
    cookies: {},
    // ...fake all 20 properties
  });
});
```

After:

```ts
import { fromPartial } from "@total-typescript/shoehorn";

it("gets user by id", () => {
  getUser(
    fromPartial({
      body: { id: "123" },
    }),
  );
});
```

### `as Type` → `fromPartial()`

Before:

```ts
getUser({ body: { id: "123" } } as Request);
```

After:

```ts
import { fromPartial } from "@total-typescript/shoehorn";

getUser(fromPartial({ body: { id: "123" } }));
```

### `as unknown as Type` → `fromAny()`

Before:

```ts
getUser({ body: { id: 123 } } as unknown as Request); // wrong type on purpose
```

After:

```ts
import { fromAny } from "@total-typescript/shoehorn";

getUser(fromAny({ body: { id: 123 } }));
```

## When to use each

| Function        | Use case                                           |
| --------------- | -------------------------------------------------- |
| `fromPartial()` | Pass partial data that still type-checks           |
| `fromAny()`     | Pass intentionally wrong data (keeps autocomplete) |
| `fromExact()`   | Force full object (swap with fromPartial later)    |

## Workflow

1. **Gather requirements** - ask user:
   - What test files have `as` assertions causing problems?
   - Are they dealing with large objects where only some properties matter?
   - Do they need to pass intentionally wrong data for error testing?

2. **Install and migrate**:
   - [ ] Install: `npm i @total-typescript/shoehorn`
   - [ ] Find test files with `as` assertions: `grep -r " as [A-Z]" --include="*.test.ts" --include="*.spec.ts"`
   - [ ] Replace `as Type` with `fromPartial()`
   - [ ] Replace `as unknown as Type` with `fromAny()`
   - [ ] Add imports from `@total-typescript/shoehorn`
   - [ ] Run type check to verify

© Matt Pocock · MIT · mattpocock/skills

Смотрите также

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

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