svelte-storybook-mock — команда для Claude Code: моки SvelteKit
Готовит моки модулей SvelteKit для историй Storybook, чтобы компонент рендерился в изоляции без запущенного приложения.
npx claude-code-templates@latest --command svelte/svelte-storybook-mockЧто делает svelte-storybook-mock
Команда /svelte:storybook-mock включает режим специалиста по мокам SvelteKit в Storybook. Агент смотрит, от каких модулей зависит ваш компонент, и собирает параметры sveltekit_experimental для истории: стор page с url, params, route и data, стор navigating с переходом «откуда — куда», флаг updated.
Дальше по списку: подмена функций навигации (goto, pushState, replaceState, invalidate, invalidateAll), мок enhance для форм и перехват ссылок через hrefs — по точному пути или регуляркой, например /api/.*. Модули $app/environment, $app/paths, $lib и @sveltejs/kit/* поддерживаются напрямую. А вот $app/stores, $app/navigation и $app/forms помечены как экспериментальные: без моков они в Storybook не заработают. $env/dynamic/private, $env/static/private и $service-worker не поддерживаются вообще — это серверный контекст и воркер, в браузерной истории их не подменить.
Агент умеет собирать и составные сценарии: авторизованный пользователь с токеном и ролью в page.data, состояние загрузки через navigating, несколько вариантов истории под разные состояния. Полезно, когда компонент завязан на роутинг и данные страницы, а поднимать весь SvelteKit ради одной истории не хочется.
Какие задачи решает
- отрендерить компонент, который читает данные из стора
page - подменить
gotoиpushState, чтобы клики по ссылкам не уводили из Storybook - показать состояние загрузки через стор
navigating - сделать историю с авторизованным пользователем и токеном в
page.data - перехватить вызовы к
/api/.*и не ходить на сервер
Примеры запросов агенту
- Замись SvelteKit-сторы для компонента ProductDetail
- Сделай мок
pageс товаром id 123 и навигацию черезgoto - Добавь в историю перехват ссылок
/api/.*и состояние загрузки
Как установить svelte-storybook-mock
1Через claude-code-templates
npx claude-code-templates@latest --command svelte/svelte-storybook-mock2Вручную: положить файлы
.claude/commands/svelte-storybook-mock.mdВызов — /svelte-storybook-mock. Для всех проектов — ~/.claude/commands/
Вручную: положить файлы
~/.codex/prompts/svelte-storybook-mock.mdВызов — /prompts:svelte-storybook-mock. В Codex этот формат помечен устаревшим, замена — скиллы
Вручную: положить файлы
.github/prompts/svelte-storybook-mock.prompt.mdВручную: положить файлы
.gemini/commands/svelte-storybook-mock.tomlGemini хранит команды в TOML: текст запроса — в поле prompt
Вопросы о svelte-storybook-mock
Как установить svelte-storybook-mock в Claude?
Выполните npx claude-code-templates@latest --command svelte/svelte-storybook-mock. Команда появится в .claude/commands/svelte-storybook-mock.md.
Что делает svelte-storybook-mock?
Настраивает моки модулей SvelteKit в историях Storybook: сторы page, navigating, updated, функции навигации, enhance для форм и перехват ссылок. Нужна для изолированной разработки компонентов.
Какие модули SvelteKit не поддерживаются?
$env/dynamic/private, $env/static/private и $service-worker. Это серверный контекст и контекст service worker, в браузерной истории их не подменить. $app/stores, $app/navigation и $app/forms работают только через моки.
Исходный текст
svelte-storybook-mock.md · MIT
---
description: "Mock SvelteKit modules and functionality in Storybook stories for isolated component development."
---
# /svelte:storybook-mock
Mock SvelteKit modules and functionality in Storybook stories for isolated component development.
## Instructions
You are acting as the Svelte Storybook Specialist Agent focused on mocking SvelteKit modules. When setting up mocks:
1. **Module Mocking Overview**:
**Fully Supported**:
- `$app/environment` - Browser and version info
- `$app/paths` - Base paths configuration
- `$lib` - Library imports
- `@sveltejs/kit/*` - Kit utilities
**Experimental (Requires Mocking)**:
- `$app/stores` - Page, navigating, updated stores
- `$app/navigation` - Navigation functions
- `$app/forms` - Form enhancement
**Not Supported**:
- `$env/dynamic/private` - Server-only
- `$env/static/private` - Server-only
- `$service-worker` - Service worker context
2. **Store Mocking**:
```javascript
export const Default = {
parameters: {
sveltekit_experimental: {
stores: {
// Page store
page: {
url: new URL('https://example.com/products/123'),
params: { id: '123' },
route: {
id: '/products/[id]'
},
status: 200,
error: null,
data: {
product: {
id: '123',
name: 'Sample Product',
price: 99.99
}
},
form: null
},
// Navigating store
navigating: {
from: {
params: { id: '122' },
route: { id: '/products/[id]' },
url: new URL('https://example.com/products/122')
},
to: {
params: { id: '123' },
route: { id: '/products/[id]' },
url: new URL('https://example.com/products/123')
},
type: 'link',
delta: 1
},
// Updated store
updated: true
}
}
}
};
```
3. **Navigation Mocking**:
```javascript
parameters: {
sveltekit_experimental: {
navigation: {
goto: (url, options) => {
console.log('Navigating to:', url);
action('goto')(url, options);
},
pushState: (url, state) => {
console.log('Push state:', url, state);
action('pushState')(url, state);
},
replaceState: (url, state) => {
console.log('Replace state:', url, state);
action('replaceState')(url, state);
},
invalidate: (url) => {
console.log('Invalidate:', url);
action('invalidate')(url);
},
invalidateAll: () => {
console.log('Invalidate all');
action('invalidateAll')();
},
afterNavigate: {
from: null,
to: { url: new URL('https://example.com') },
type: 'enter'
}
}
}
}
```
4. **Form Enhancement Mocking**:
```javascript
parameters: {
sveltekit_experimental: {
forms: {
enhance: (form) => {
console.log('Form enhanced:', form);
// Return cleanup function
return {
destroy() {
console.log('Form enhancement cleaned up');
}
};
}
}
}
}
```
5. **Link Handling**:
```javascript
parameters: {
sveltekit_experimental: {
hrefs: {
// Exact match
'/products': (to, event) => {
console.log('Products link clicked');
event.preventDefault();
},
// Regex pattern
'/product/.*': {
callback: (to, event) => {
console.log('Product detail:', to);
},
asRegex: true
},
// API routes
'/api/.*': {
callback: (to, event) => {
event.preventDefault();
console.log('API call intercepted:', to);
},
asRegex: true
}
}
}
}
```
6. **Complex Mocking Scenarios**:
**Auth State**:
```javascript
const mockAuthenticatedUser = {
parameters: {
sveltekit_experimental: {
stores: {
page: {
data: {
user: {
id: '123',
email: '[email protected]',
role: 'admin'
},
session: {
token: 'mock-jwt-token',
expiresAt: '2024-12-31'
}
}
}
}
}
}
};
```
**Loading States**:
```javascript
const mockLoadingState = {
parameters: {
sveltekit_experimental: {
stores: {
navigating: {
from: { url: new URL('https://example.com') },
to: { url: new URL('https://example.com/products') }
}
}
}
}
};
```
## Example Usage
User: "Mock SvelteKit stores for my ProductDetail component"
Assistant will:
- Analyze component's store dependencies
- Create comprehensive store mocks
- Mock page data with product info
- Set up navigation mocks
- Configure link handling
- Add form enhancement if needed
- Create multiple story variants
- Test different states (loading, error, success)
© davila7 · MIT · davila7/claude-code-templates