@vira-ui/cli 1.1.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/README.md +454 -1029
  2. package/dist/go/appYaml.js +30 -30
  3. package/dist/go/backendEnvExample.js +17 -17
  4. package/dist/go/backendReadme.js +14 -14
  5. package/dist/go/channelHelpers.js +25 -25
  6. package/dist/go/configGo.js +258 -258
  7. package/dist/go/dbGo.js +43 -43
  8. package/dist/go/dbYaml.js +7 -7
  9. package/dist/go/dockerCompose.js +48 -48
  10. package/dist/go/dockerComposeProd.js +78 -78
  11. package/dist/go/dockerfile.js +15 -15
  12. package/dist/go/eventHandlerTemplate.js +22 -22
  13. package/dist/go/eventsAPI.js +411 -411
  14. package/dist/go/goMod.js +16 -16
  15. package/dist/go/kafkaGo.js +67 -67
  16. package/dist/go/kafkaYaml.js +6 -6
  17. package/dist/go/kanbanHandlers.js +216 -216
  18. package/dist/go/mainGo.js +558 -558
  19. package/dist/go/readme.js +27 -27
  20. package/dist/go/redisGo.js +31 -31
  21. package/dist/go/redisYaml.js +4 -4
  22. package/dist/go/registryGo.js +38 -38
  23. package/dist/go/sqlcYaml.js +13 -13
  24. package/dist/go/stateStore.js +115 -115
  25. package/dist/go/typesGo.js +11 -11
  26. package/dist/index.js +472 -24
  27. package/dist/react/envExample.js +3 -3
  28. package/dist/react/envLocal.js +1 -1
  29. package/dist/react/indexCss.js +17 -17
  30. package/dist/react/indexHtml.js +12 -12
  31. package/dist/react/kanbanAppTsx.js +29 -29
  32. package/dist/react/kanbanBoard.js +58 -58
  33. package/dist/react/kanbanCard.js +60 -60
  34. package/dist/react/kanbanColumn.js +62 -62
  35. package/dist/react/kanbanModels.js +32 -32
  36. package/dist/react/mainTsx.js +12 -12
  37. package/dist/react/viteConfig.js +27 -27
  38. package/package.json +47 -45
  39. package/dist/go/useViraState.js +0 -160
  40. package/dist/go/useViraStream.js +0 -167
package/README.md CHANGED
@@ -1,1029 +1,454 @@
1
- # @vira-ui/cli
2
-
3
- <div align="center">
4
-
5
- **Vira CLI - Генератор проектов и кода для Vira Framework**
6
-
7
- [![Version](https://img.shields.io/npm/v/@vira-ui/cli.svg)](https://www.npmjs.com/package/@vira-ui/cli)
8
- [![License](https://img.shields.io/npm/l/@vira-ui/cli.svg)](LICENSE)
9
- [![TypeScript](https://img.shields.io/badge/TypeScript-5.3+-blue.svg)](https://www.typescriptlang.org/)
10
-
11
- **Создавайте проекты, генерируйте компоненты, сервисы и backend-код одной командой.**
12
-
13
- [📖 Quickstart: Создаём CRM за 10 минут](QUICKSTART.md) • [🚀 Production-Ready](PRODUCTION.md) • [Установка](#-установка) • [Быстрый старт](#-быстрый-старт) • [Команды](#-команды) • [Примеры](#-примеры)
14
-
15
- </div>
16
-
17
- ---
18
-
19
- ## 🎯 Что это?
20
-
21
- **Vira CLI** — это мощный инструмент командной строки для быстрого создания проектов и генерации кода в экосистеме Vira Framework. Он автоматизирует рутинные задачи и помогает начать разработку за секунды.
22
-
23
- ### Основные возможности
24
-
25
- - **Создание проектов** — Frontend, Fullstack, Kanban reference app
26
- - **Генерация компонентов** — React компоненты, сервисы, страницы, модели
27
- - **Backend scaffolding** — Go handlers, models, migrations, event handlers
28
- - **Синхронизация типов** — Автоматическая синхронизация TypeScript типов из Go структур
29
- - ✅ **VRP Protocol** — Валидация и генерация документации протокола
30
- - ✅ **Docker & DevOps** — Готовая инфраструктура для разработки и продакшена
31
-
32
- > **Примечание:** Некоторые функции находятся в экспериментальной стадии в альфа-версиях.
33
-
34
- ---
35
-
36
- ## 📦 Установка
37
-
38
- ### Глобальная установка
39
-
40
- ```bash
41
- # Глобальная установка
42
- npm install -g @vira-ui/cli
43
- ```
44
-
45
- ### Использование через npx (рекомендуется)
46
-
47
- ```bash
48
- npx @vira-ui/cli create my-app
49
- ```
50
-
51
- ---
52
-
53
- ## 🚀 Быстрый старт
54
-
55
- > 💡 **Новый?** Начните с [📖 Quickstart гайда](QUICKSTART.md) — создайте полноценную CRM страницу за 10 минут!
56
-
57
- ### 1. Создание проекта
58
-
59
- ```bash
60
- # Интерактивный выбор шаблона
61
- npx vira create my-app
62
-
63
- # Или с указанием шаблона
64
- npx vira create my-app --template frontend
65
- npx vira create my-app --template fullstack
66
- npx vira create my-app --template kanban
67
- ```
68
-
69
- ### 2. Генерация компонента
70
-
71
- ```bash
72
- cd my-app
73
- npx vira generate component Button
74
- npx vira generate service User
75
- npx vira generate page Dashboard
76
- ```
77
-
78
- ### 3. Запуск проекта
79
-
80
- ```bash
81
- cd my-app
82
- npm install
83
- npm run dev
84
- ```
85
-
86
- **Готово!** Ваш проект запущен и готов к разработке.
87
-
88
- ---
89
-
90
- ## 📚 Команды
91
-
92
- ### `vira create <name>` Создание проекта
93
-
94
- Создаёт новый проект Vira с выбранным шаблоном.
95
-
96
- **Опции:**
97
- - `-t, --template <template>` Тип шаблона: `frontend`, `fullstack`, `kanban`
98
-
99
- **Примеры:**
100
- ```bash
101
- # Интерактивный выбор
102
- vira create my-app
103
-
104
- # Frontend проект (React + Vite + Vira UI)
105
- vira create my-app --template frontend
106
-
107
- # Fullstack проект (Frontend + Go Backend + Docker)
108
- vira create my-app --template fullstack
109
-
110
- # Kanban reference app (демонстрация VRP)
111
- vira create my-app --template kanban
112
- ```
113
-
114
- ### `vira init` — Инициализация проекта
115
-
116
- Инициализирует проект Vira в текущей директории. Полезно для инициализации существующего проекта.
117
-
118
- **Опции:**
119
- - `-t, --template <template>` — Тип шаблона: `frontend`, `fullstack`, `kanban`
120
-
121
- **Примеры:**
122
- ```bash
123
- # Интерактивный выбор шаблона
124
- cd my-existing-project
125
- vira init
126
-
127
- # С указанием шаблона
128
- vira init --template frontend
129
- ```
130
-
131
- **Что создаётся:**
132
-
133
- #### Frontend Template
134
- ```
135
- my-app/
136
- ├── src/
137
- │ ├── components/ # React компоненты
138
- │ ├── services/ # Сервисы (DI)
139
- │ ├── pages/ # Страницы
140
- │ ├── models/ # Модели с валидацией
141
- │ ├── hooks/ # Custom hooks
142
- │ ├── utils/ # Утилиты
143
- │ ├── App.tsx # Главный компонент
144
- │ └── main.tsx # Точка входа
145
- ├── package.json # Зависимости
146
- ├── tsconfig.json # TypeScript конфигурация
147
- ├── vite.config.ts # Vite конфигурация
148
- └── index.html # HTML шаблон
149
- ```
150
-
151
- #### Fullstack Template
152
- ```
153
- my-app/
154
- ├── frontend/ # React приложение
155
- ├── ui/ # Vira UI пакет/шоукейсы
156
- ├── backend/ # Go API
157
- │ ├── cmd/api/ # Точка входа
158
- │ ├── internal/
159
- │ │ ├── handlers/ # HTTP handlers
160
- │ │ ├── models/ # Go модели
161
- │ │ ├── events/ # Event handlers
162
- │ │ ├── db/ # Database
163
- │ │ ├── cache/ # Redis
164
- │ │ └── config/ # Конфигурация
165
- │ ├── migrations/ # SQL миграции
166
- │ └── queries/ # SQLC queries
167
- ├── deploy/ # Docker & DevOps
168
- │ ├── docker-compose.dev.yml
169
- │ └── docker-compose.prod.yml
170
- └── migrations/ # Общие миграции
171
- ```
172
-
173
- #### Kanban Template
174
- ```
175
- my-app/
176
- ├── src/
177
- │ ├── components/
178
- │ │ ├── KanbanBoard.tsx
179
- │ │ ├── KanbanColumn.tsx
180
- │ │ └── KanbanCard.tsx
181
- │ ├── services/
182
- │ │ └── kanban.ts # VRP сервис
183
- │ └── models/
184
- │ └── kanban.ts # Типы
185
- └── ...
186
- ```
187
-
188
- ---
189
-
190
- ### `vira generate <type> <name>` — Генерация кода
191
-
192
- Генерирует файлы для компонентов, сервисов, страниц, моделей и роутов.
193
-
194
- **Алиас:** `vira g`
195
-
196
- **Типы:**
197
- - `component` / `comp` — React компонент
198
- - `service` — Сервис (DI)
199
- - `page` — Страница
200
- - `model` Модель с валидацией
201
- - `route` Роут
202
- - `test` — Тест для компонента, сервиса или страницы
203
-
204
- **Опции:**
205
- - `-d, --dir <directory>` — Директория для вывода (по умолчанию: `src`)
206
- - `-i, --interactive` — Интерактивный режим (для компонентов и сервисов - выбор props, VRP, UI)
207
- - `--vrp` — Явно использовать Vira Reactive Protocol (VRP)
208
- - `--no-vrp` — Явно не использовать VRP
209
-
210
- **Примеры:**
211
- ```bash
212
- vira generate component Button
213
- vira g comp UserCard
214
-
215
- # Интерактивная генерация компонента с выбором props
216
- vira generate component Button --interactive
217
-
218
- # Явное использование VRP (без интерактивного режима)
219
- vira generate component Button --vrp
220
-
221
- # Явное указание не использовать VRP
222
- vira generate component Button --no-vrp
223
-
224
- # Комбинация: интерактивный режим с принудительным VRP
225
- vira generate component Button --interactive --vrp
226
-
227
- # Генерация сервиса
228
- vira generate service User
229
- vira g service Product
230
-
231
- # Генерация страницы
232
- vira generate page Dashboard
233
- vira g page Profile
234
-
235
- # Генерация модели
236
- vira generate model User
237
- vira g model Product
238
-
239
- # Генерация роута
240
- vira generate route users
241
- vira g route products
242
-
243
- # Генерация теста
244
- vira generate test Button
245
- vira g test UserService
246
-
247
- # С указанием директории
248
- vira generate component Button --dir src/components
249
- ```
250
-
251
- **Сгенерированные файлы:**
252
-
253
- #### Component
254
- ```tsx
255
- // src/components/Button.tsx
256
- import { createElement } from '@vira-ui/core';
257
- import type { ViraComponentProps } from '@vira-ui/core';
258
-
259
- export interface ButtonProps extends ViraComponentProps {
260
- // Add your props here
261
- // При использовании --interactive здесь будут автоматически добавлены props
262
- }
263
-
264
- export function Button(props: ButtonProps) {
265
- return createElement('div', { className: 'button' },
266
- // Add your content here
267
- );
268
- }
269
- ```
270
-
271
- **Интерактивная генерация компонента:**
272
- ```bash
273
- vira generate component Button --interactive
274
- ```
275
-
276
- Интерактивный режим позволяет:
277
- - ✅ Выбрать использование **Vira Reactive Protocol (VRP)** для state management
278
- - ✅ Настроить VRP channel и state type
279
- - Интерактивно добавить props с выбором типов
280
- - ✅ Выбрать использование **Vira UI** компонентов (@vira-ui/ui)
281
- - Автоматически сгенерировать правильную структуру компонента
282
-
283
- **Пример интерактивной генерации с VRP:**
284
- ```bash
285
- vira generate component TaskCard --interactive
286
- # → Использовать VRP? Yes
287
- # → Channel: task:123
288
- # → State type: TaskState
289
- # → Использовать Vira UI? Yes
290
- ```
291
-
292
- Результат будет включать:
293
- - `useViraState` hook для синхронизации состояния
294
- - Интерфейс состояния (`TaskState`)
295
- - Интеграцию с Vira UI компонентами
296
- - Готовую структуру для работы с VRP
297
-
298
- > **Примечание:** `createElement` и некоторые экспериментальные функции могут изменяться в будущих версиях.
299
-
300
- #### Service
301
- ```tsx
302
- // src/services/UserService.ts
303
- import { createViraService, signal } from '@vira-ui/core';
304
-
305
- export const UserService = createViraService('user', () => {
306
- const data = signal([]);
307
- const loading = signal(false);
308
- const error = signal<string | null>(null);
309
-
310
- const fetch = async () => {
311
- loading.set(true);
312
- try {
313
- // Add your logic here
314
- // const result = await api.get('/user');
315
- // data.set(result);
316
- } catch (e) {
317
- error.set(e instanceof Error ? e.message : 'Unknown error');
318
- } finally {
319
- loading.set(false);
320
- }
321
- };
322
-
323
- return {
324
- data,
325
- loading,
326
- error,
327
- fetch,
328
- };
329
- });
330
- ```
331
-
332
- **VRP-based Service (при интерактивной генерации с выбором VRP):**
333
- ```tsx
334
- // src/services/UserService.ts
335
- import { createService, useService } from '@vira-ui/core';
336
- import { useViraState } from '@vira-ui/react';
337
-
338
- export interface UserState {
339
- id?: string;
340
- // Add your state fields here
341
- }
342
-
343
- // Business logic service
344
- createService('user', () => ({
345
- processData(data: UserState | null): any {
346
- // Add processing logic
347
- return data;
348
- },
349
- }));
350
-
351
- // VRP hook
352
- export function useUser(id?: string) {
353
- const channel = id ? `user:${id}` : 'user';
354
- const { data, sendEvent, sendUpdate, sendDiff } = useViraState<UserState>(channel, null);
355
- const userService = useService('user');
356
-
357
- return {
358
- data,
359
- update(updates: Partial<UserState>) {
360
- sendDiff(updates);
361
- },
362
- sendEvent(eventName: string, payload: any) {
363
- sendEvent(eventName, payload);
364
- },
365
- };
366
- }
367
- ```
368
-
369
- #### Page
370
- ```tsx
371
- // src/pages/DashboardPage.tsx
372
- import { createElement } from '@vira-ui/core';
373
-
374
- export function DashboardPage() {
375
- return createElement('div', { className: 'dashboard-page' },
376
- createElement('h1', null, 'Dashboard'),
377
- // Add your content here
378
- );
379
- }
380
- ```
381
-
382
- #### Model
383
- ```tsx
384
- // src/models/User.ts
385
- import { defineModel } from '@vira-ui/core';
386
-
387
- export const UserModel = defineModel({
388
- // Add your fields here
389
- id: {
390
- type: 'string',
391
- required: true,
392
- },
393
- });
394
- ```
395
-
396
- #### Route
397
- ```tsx
398
- // src/routes/users.ts
399
- import { reactiveRoute } from '@vira-ui/core';
400
- import { UsersPage } from '../pages/UsersPage';
401
-
402
- export const usersRoute = reactiveRoute({
403
- path: '/users',
404
- component: UsersPage,
405
- });
406
- ```
407
-
408
- #### Test
409
- ```tsx
410
- // src/components/Button.test.tsx
411
- import React from 'react';
412
- import { render } from '@testing-library/react';
413
- import { Button } from './Button';
414
- import type { ButtonProps } from './Button';
415
-
416
- describe('Button', () => {
417
- it('renders correctly', () => {
418
- const props: ButtonProps = {
419
- // Add test props here
420
- };
421
- const { container } = render(React.createElement(Button, props));
422
- expect(container).toBeTruthy();
423
- });
424
- });
425
- ```
426
-
427
- ---
428
-
429
- ### `vira make <type> <name>` — Backend scaffolding (Go)
430
-
431
- Генерирует Go-код для backend разработки.
432
-
433
- **Типы:**
434
- - `handler` HTTP handler
435
- - `model` Go модель (struct)
436
- - `migration` — SQL миграция (up/down)
437
- - `event` Event handler
438
- - `crud` — CRUD handlers (List, Get, Create, Update, Delete)
439
-
440
- **Опции:**
441
- - `-d, --dir <directory>` Целевая директория
442
- - `-m, --model <model>` Имя модели (для crud)
443
-
444
- **Примеры:**
445
-
446
- ```bash
447
- # Генерация HTTP handler
448
- vira make handler user
449
- # Создаёт: backend/internal/handlers/user.go
450
-
451
- # Генерация модели
452
- vira make model User
453
- # Создаёт: backend/internal/models/User.go
454
-
455
- # Генерация миграции
456
- vira make migration create-users
457
- # Создаёт: migrations/20240101120000_create-users.up.sql
458
- # migrations/20240101120000_create-users.down.sql
459
-
460
- # Выполнение миграций
461
- vira db migrate # Применить все миграции
462
- vira db up # Алиас для migrate
463
- vira db rollback # Откатить последнюю миграцию
464
- vira db down # Алиас для rollback
465
- vira db status # Показать статус миграций
466
-
467
- # С указанием URL базы данных
468
- vira db migrate --db-url "postgres://user:pass@localhost/dbname?sslmode=disable"
469
- # Или через переменную окружения
470
- DATABASE_URL="postgres://user:pass@localhost/dbname?sslmode=disable" vira db migrate
471
-
472
- # Генерация event handler
473
- vira make event user.created
474
- # Создаёт: backend/internal/events/user_created.go
475
- # backend/internal/events/registry_user_created.go
476
-
477
- # Генерация CRUD handlers
478
- vira make crud user
479
- # Создаёт: backend/internal/handlers/user_crud.go
480
- # (ListUser, GetUser, CreateUser, UpdateUser, DeleteUser)
481
-
482
- vira make crud product --model Product
483
- # Создаёт CRUD handlers с указанной моделью
484
- ```
485
-
486
- **Сгенерированные файлы:**
487
-
488
- #### Handler
489
- ```go
490
- // backend/internal/handlers/user.go
491
- package handlers
492
-
493
- import (
494
- "encoding/json"
495
- "net/http"
496
- )
497
-
498
- type UserResponse struct {
499
- Message string `json:"message"`
500
- }
501
-
502
- // User handles GET /user
503
- func User(w http.ResponseWriter, r *http.Request) {
504
- w.Header().Set("Content-Type", "application/json")
505
- _ = json.NewEncoder(w).Encode(UserResponse{
506
- Message: "User handler ok",
507
- })
508
- }
509
- ```
510
-
511
- #### Model
512
- ```go
513
- // backend/internal/models/User.go
514
- package models
515
-
516
- import "time"
517
-
518
- type User struct {
519
- ID string `db:"id"`
520
- CreatedAt time.Time `db:"created_at"`
521
- UpdatedAt time.Time `db:"updated_at"`
522
- }
523
- ```
524
-
525
- #### Migration
526
- ```sql
527
- -- migrations/20240101120000_create-users.up.sql
528
- -- +goose Up
529
- -- TODO: add migration SQL here
530
-
531
- -- migrations/20240101120000_create-users.down.sql
532
- -- +goose Down
533
- -- TODO: rollback SQL here
534
- ```
535
-
536
- #### Event Handler
537
- ```go
538
- // backend/internal/events/user_created.go
539
- package events
540
-
541
- import (
542
- "context"
543
- "encoding/json"
544
- "github.com/gorilla/websocket"
545
- )
546
-
547
- // UserCreated handles event: user.created
548
- func UserCreated(ctx context.Context, hub EventEmitter, conn *websocket.Conn, msg WSMessage) {
549
- var payload map[string]any
550
- if len(msg.Data) > 0 {
551
- _ = json.Unmarshal(msg.Data, &payload)
552
- }
553
-
554
- // TODO: implement domain logic here
555
- // Example: hub.Emit(ChannelCustom("demo", "echo"), payload)
556
- }
557
-
558
- func init() {
559
- Register("user.created", UserCreated)
560
- }
561
-
562
- // backend/internal/events/registry_user_created.go
563
- package events
564
-
565
- func init() {
566
- Register("user.created", UserCreated)
567
- }
568
- ```
569
-
570
- #### CRUD Handler
571
- ```go
572
- // backend/internal/handlers/user_crud.go
573
- package handlers
574
-
575
- import (
576
- "encoding/json"
577
- "net/http"
578
- "github.com/gorilla/mux"
579
- )
580
-
581
- // ListUser handles GET /user
582
- func ListUser(w http.ResponseWriter, r *http.Request) {
583
- // Implementation
584
- }
585
-
586
- // GetUser handles GET /user/{id}
587
- func GetUser(w http.ResponseWriter, r *http.Request) {
588
- // Implementation
589
- }
590
-
591
- // CreateUser handles POST /user
592
- func CreateUser(w http.ResponseWriter, r *http.Request) {
593
- // Implementation
594
- }
595
-
596
- // UpdateUser handles PUT /user/{id}
597
- func UpdateUser(w http.ResponseWriter, r *http.Request) {
598
- // Implementation
599
- }
600
-
601
- // DeleteUser handles DELETE /user/{id}
602
- func DeleteUser(w http.ResponseWriter, r *http.Request) {
603
- // Implementation
604
- }
605
- ```
606
-
607
- ---
608
-
609
- ### `vira db` — Команды для работы с базой данных
610
-
611
- Управление миграциями базы данных через goose.
612
-
613
- **Подкоманды:**
614
-
615
- #### `vira db migrate` (или `vira db up`)
616
- Применить все неприменённые миграции.
617
-
618
- **Опции:**
619
- - `-d, --dir <directory>` — Директория с миграциями (по умолчанию: `migrations`)
620
- - `--db-url <url>` — URL подключения к базе данных (или используйте переменную `DATABASE_URL`)
621
- - `--driver <driver>` — Драйвер БД: `postgres`, `mysql`, `sqlite3` (по умолчанию: `postgres`)
622
-
623
- **Примеры:**
624
- ```bash
625
- # Использование переменной окружения
626
- export DATABASE_URL="postgres://user:pass@localhost/mydb?sslmode=disable"
627
- vira db migrate
628
-
629
- # Или напрямую в команде
630
- vira db migrate --db-url "postgres://user:pass@localhost/mydb?sslmode=disable"
631
-
632
- # С указанием директории миграций
633
- vira db migrate --dir migrations --db-url "postgres://..."
634
- ```
635
-
636
- #### `vira db rollback` (или `vira db down`)
637
- Откатить последнюю применённую миграцию.
638
-
639
- **Опции:** те же, что у `migrate`
640
-
641
- **Пример:**
642
- ```bash
643
- vira db rollback
644
- vira db rollback --db-url "postgres://user:pass@localhost/mydb?sslmode=disable"
645
- ```
646
-
647
- #### `vira db status`
648
- Показать статус всех миграций (какие применены, какие нет).
649
-
650
- **Опции:** те же, что у `migrate`
651
-
652
- **Пример:**
653
- ```bash
654
- vira db status
655
- ```
656
-
657
- **Примечание:** Для работы команд требуется установленный `goose`. CLI автоматически попытается установить его при первом использовании, если он не найден.
658
-
659
- ---
660
-
661
- ### `vira sync` — Синхронизация типов
662
-
663
- Синхронизирует TypeScript типы из Go структур.
664
-
665
- **Опции:**
666
- - `--types` — Синхронизировать TypeScript типы (по умолчанию: `true`)
667
- - `--backend <path>` — Путь к Go файлу (по умолчанию: `backend/internal/types/types.go`)
668
- - `--frontend <path>` — Путь для TypeScript типов (по умолчанию: `frontend/src/vira-types.ts`)
669
- - `--ui <path>` — Путь для TypeScript типов UI (по умолчанию: `ui/src/vira-types.ts`)
670
- - `-w, --watch` — Watch mode: автоматическая синхронизация при изменениях (в разработке)
671
-
672
- **Пример:**
673
- ```bash
674
- vira sync --types
675
-
676
- # С указанием путей
677
- vira sync --backend backend/internal/types/types.go \
678
- --frontend frontend/src/types/vira.ts \
679
- --ui ui/src/types/vira.ts
680
- ```
681
-
682
- **Что делает:**
683
- 1. Парсит Go структуры
684
- 2. Конвертирует Go типы в TypeScript
685
- 3. Генерирует TypeScript файлы с типами
686
- 4. Создаёт helper функции для каналов VRP
687
-
688
- **Пример Go структуры:**
689
-
690
- ```go
691
- // backend/internal/types/types.go
692
- package types
693
-
694
- type User struct {
695
- ID string `json:"id"`
696
- Name string `json:"name"`
697
- Email string `json:"email"`
698
- }
699
-
700
- type Task struct {
701
- ID string `json:"id"`
702
- Title string `json:"title"`
703
- Completed bool `json:"completed"`
704
- }
705
- ```
706
-
707
- **Сгенерированный TypeScript:**
708
-
709
- ```typescript
710
- // frontend/src/vira-types.ts
711
- // Auto-generated by vira sync --types. Do not edit manually.
712
-
713
- export type ViraMessageType =
714
- | 'handshake' | 'ack' | 'sub' | 'sub_ack' | 'unsub' | 'unsub_ack'
715
- | 'update' | 'event' | 'diff' | 'ping' | 'pong' | 'error';
716
-
717
- export enum ViraChannelEnum {
718
- User = 'user',
719
- Task = 'task',
720
- Notifications = 'notifications',
721
- Demo = 'demo',
722
- }
723
-
724
- export type ViraChannel =
725
- | `${ViraChannelEnum.User}:${string}`
726
- | `${ViraChannelEnum.Task}:${string}`
727
- | `${ViraChannelEnum.Notifications}:${string}`
728
- | ViraChannelEnum.Demo
729
- | string;
730
-
731
- export interface ViraDataMap {
732
- User: User;
733
- Task: Task;
734
- }
735
-
736
- export type ViraAnyData = ViraDataMap[keyof ViraDataMap];
737
-
738
- export interface User {
739
- id: string;
740
- name: string;
741
- email: string;
742
- }
743
-
744
- export interface Task {
745
- id: string;
746
- title: string;
747
- completed: boolean;
748
- }
749
-
750
- // ... helper functions для каналов
751
- ```
752
-
753
- ---
754
-
755
- ### `vira proto` — VRP Protocol утилиты
756
-
757
- Работа с Vira Reactive Protocol (VRP).
758
-
759
- > **Примечание:** Некоторые функции VRP находятся в экспериментальной стадии в альфа-версиях.
760
-
761
- **Подкоманды:**
762
-
763
- #### `vira proto validate`
764
-
765
- Валидирует схему VRP протокола и проверяет типы.
766
-
767
- **Опции:**
768
- - `--file <path>` — Путь к Go файлу с типами (по умолчанию: `backend/internal/types/types.go`)
769
-
770
- **Примеры:**
771
- ```bash
772
- # Валидация с файлом по умолчанию
773
- vira proto validate
774
-
775
- # Валидация с указанным файлом
776
- vira proto validate --file backend/internal/types/models.go
777
- ```
778
-
779
- **Что проверяется:**
780
- - Наличие и корректность Go структур
781
- - Соответствие структур требованиям VRP
782
- - Наличие необходимых полей для каналов
783
-
784
- #### `vira proto generate`
785
-
786
- Генерирует документацию по каналам VRP и схемы протокола.
787
-
788
- **Опции:**
789
- - `--file <path>` — Путь к Go файлу с типами (по умолчанию: `backend/internal/types/types.go`)
790
- - `--output <path>` — Директория для вывода (по умолчанию: `docs`)
791
-
792
- **Примеры:**
793
- ```bash
794
- # Генерация документации
795
- vira proto generate
796
-
797
- # С указанием путей
798
- vira proto generate --file backend/internal/types/types.go --output docs/vrp
799
- ```
800
-
801
- **Что генерируется:**
802
- - `VRP_CHANNELS.md` — Документация по всем доступным каналам
803
- - Описание типов данных для каждого канала
804
- - Примеры использования с `useViraState`
805
-
806
- ---
807
-
808
- ### `vira doc` — Генерация документации
809
-
810
- Генерирует документацию CLI команд в `docs/cli.md`.
811
-
812
- ```bash
813
- vira doc
814
- ```
815
-
816
- ### `vira validate` — Валидация проекта
817
-
818
- Проверяет структуру проекта и наличие необходимых файлов.
819
-
820
- ```bash
821
- vira validate
822
- ```
823
-
824
- **Что проверяется:**
825
- - Наличие обязательных файлов (`package.json`, `vite.config.ts`, и т.д.)
826
- - Структура директорий
827
- - Конфигурационные файлы
828
-
829
- ---
830
-
831
- ## 🎨 Примеры
832
-
833
- ### Создание Fullstack проекта
834
-
835
- ```bash
836
- # Создание проекта
837
- vira create my-crm --template fullstack
838
-
839
- cd my-crm
840
-
841
- # Frontend: генерация компонентов
842
- cd frontend
843
- vira generate component ClientCard
844
- vira generate service Client
845
- vira generate page Clients
846
-
847
- # Backend: генерация handlers
848
- cd ../backend
849
- vira make handler client
850
- vira make model Client
851
- vira make migration create-clients
852
-
853
- # Синхронизация типов
854
- cd ..
855
- vira sync --types
856
-
857
- # Запуск
858
- cd frontend && npm install && npm run dev
859
- cd ../backend && go mod tidy && go run ./cmd/api
860
- ```
861
-
862
- ### Синхронизация типов
863
-
864
- ```bash
865
- # Создание Kanban reference app
866
- vira create kanban-app --template kanban
867
-
868
- cd kanban-app
869
-
870
- # Генерация дополнительных компонентов
871
- vira generate component TaskCard
872
- vira generate service Task
873
-
874
- # Backend: генерация event handlers
875
- cd ../backend
876
- vira make event kanban.card.create
877
- vira make event kanban.card.move
878
- vira make event kanban.card.delete
879
-
880
- # Запуск
881
- cd .. && npm install && npm run dev
882
- ```
883
-
884
- ### Пример 3: Работа с миграциями
885
-
886
- ```bash
887
- # Создание миграции
888
- vira make migration create-users
889
-
890
- # Редактирование миграции
891
- # migrations/20240101120000_create-users.up.sql
892
- CREATE TABLE users (
893
- id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
894
- name VARCHAR(255) NOT NULL,
895
- email VARCHAR(255) UNIQUE NOT NULL,
896
- created_at TIMESTAMP DEFAULT NOW()
897
- );
898
-
899
- # migrations/20240101120000_create-users.down.sql
900
- DROP TABLE IF EXISTS users;
901
- ```
902
-
903
- ### Пример 4: Синхронизация типов
904
-
905
- ```bash
906
- # 1. Определяем Go структуры
907
- # backend/internal/types/types.go
908
- type Product struct {
909
- ID string `json:"id"`
910
- Name string `json:"name"`
911
- Price int64 `json:"price"`
912
- }
913
- ```
914
-
915
- # 2. Синхронизируем типы
916
- vira sync --types
917
- ```
918
-
919
- # 3. Используем в TypeScript
920
- # frontend/src/components/ProductCard.tsx
921
- import type { Product } from '../vira-types';
922
-
923
- export function ProductCard({ product }: { product: Product }) {
924
- return <div>{product.name} - ${product.price}</div>;
925
- }
926
- ```
927
-
928
- ---
929
-
930
- ## ❓ FAQ
931
-
932
- **Q: Можно ли использовать CLI без глобальной установки?**
933
- A: Да! Используйте `npx @vira-ui/cli`.
934
-
935
- **Q: Можно ли использовать CLI в существующем проекте?**
936
- A: Да! Команды `generate` и `make` работают в любом проекте.
937
-
938
- **Q: Как синхронизировать типы из нескольких Go файлов?**
939
- A: Объедините структуры в один файл или используйте несколько вызовов `vira sync` с разными путями.
940
-
941
- **Q: Как работает синхронизация типов?**
942
- A: CLI парсит Go структуры, конвертирует типы в TypeScript и генерирует файлы с типами и helper функциями.
943
-
944
- **Q: Поддерживаются ли другие языки backend?**
945
- A: Сейчас поддерживается только Go. Поддержка других языков планируется в будущих версиях.
946
-
947
- ---
948
-
949
- ## 🔧 Разработка CLI
950
-
951
- ```bash
952
- # Клонирование и установка
953
- git clone https://github.com/skrolikov/vira-cli.git
954
- cd vira-cli
955
- npm install
956
-
957
- # Сборка
958
- npm run build
959
-
960
- # Локальное использование
961
- npm link
962
- vira create test-app
963
- ```
964
-
965
- ## ✨ Что нового в v1.0.1
966
-
967
- ### Улучшенная генерация компонентов
968
- - ✅ **Интерактивный режим** с опцией использования VRP
969
- - ✅ **Интеграция с Vira UI** компонентами
970
- - ✅ **Автоматическая генерация** VRP-enabled компонентов
971
- - ✅ **Умный выбор props** с интерактивным добавлением типов
972
-
973
- ### Улучшенная генерация сервисов
974
- - ✅ **Поддержка VRP** для сервисов
975
- - ✅ **Генерация hooks** с `useViraState`
976
- - ✅ **Интеграция с DI container**
977
-
978
- ### VRP Protocol утилиты
979
- - ✅ **Реальная валидация** Go структур
980
- - ✅ **Генерация документации** по каналам
981
- - ✅ **Автоматическое определение** доступных каналов
982
-
983
- ### Новые команды
984
- - ✅ `vira init` — инициализация проекта в существующей директории
985
- - ✅ `vira generate test` — генерация тестов
986
- - ✅ `vira make crud` — генерация CRUD handlers
987
- - ✅ `vira validate` — валидация структуры проекта
988
-
989
- ## 🛣️ Roadmap
990
-
991
- ### v1.1 (В разработке)
992
- - [ ] Watch mode для `vira sync`
993
- - [ ] Поддержка других шаблонов (Vue, Svelte)
994
- - [ ] Генерация Storybook историй
995
- - [ ] Плагины для расширения функциональности
996
-
997
- ### v1.2 (Планируется)
998
- - [ ] Шаблоны для микросервисов
999
- - [ ] Интеграция с CI/CD
1000
- - [ ] Генерация OpenAPI спецификаций
1001
- - [ ] Автоматическая генерация событий из схем
1002
- ---
1003
-
1004
- ## 📄 License
1005
-
1006
- MIT
1007
-
1008
- ---
1009
-
1010
- ## 🤝 Contributing
1011
-
1012
- Мы приветствуем вклад! Пожалуйста, прочитайте [CONTRIBUTING.md](../../CONTRIBUTING.md) для деталей.
1013
-
1014
- ---
1015
-
1016
- ## 📞 Support
1017
-
1018
- - **GitHub Issues**: [Создать issue](https://github.com/skrolikov/vira-cli/issues)
1019
- - **Discussions**: [Обсуждения](https://github.com/skrolikov/vira-cli/discussions)
1020
-
1021
- ---
1022
-
1023
- <div align="center">
1024
-
1025
- **Сделано с ❤️ командой Vira**
1026
-
1027
- [GitHub](https://github.com/skrolikov/vira-cli) • [Документация](https://vira.dev/cli) • [Примеры](https://vira.dev/examples)
1028
-
1029
- </div>
1
+ # @vira-ui/cli
2
+
3
+ CLI инструмент для генерации проектов и кода на основе Vira Framework.
4
+
5
+ ## 📦 Установка
6
+
7
+ ```bash
8
+ npm install -g @vira-ui/cli
9
+ ```
10
+
11
+ Или используйте через `npx`:
12
+
13
+ ```bash
14
+ npx @vira-ui/cli create my-project
15
+ ```
16
+
17
+ ## 🚀 Быстрый старт
18
+
19
+ ### Создание нового проекта
20
+
21
+ ```bash
22
+ # Интерактивный режим
23
+ vira create my-project
24
+
25
+ # С указанием шаблона
26
+ vira create my-project --template frontend
27
+ vira create my-project --template fullstack
28
+ vira create my-project --template kanban
29
+ ```
30
+
31
+ ### Инициализация в текущей директории
32
+
33
+ ```bash
34
+ vira init
35
+ vira init --template frontend
36
+ ```
37
+
38
+ ## 📚 Команды
39
+
40
+ ### Создание проектов
41
+
42
+ #### `vira create <name>`
43
+
44
+ Создает новый проект в указанной директории.
45
+
46
+ **Опции:**
47
+ - `-t, --template <template>` - Шаблон проекта (`frontend`, `fullstack`, `kanban`)
48
+
49
+ **Примеры:**
50
+ ```bash
51
+ vira create my-app
52
+ vira create my-app --template fullstack
53
+ ```
54
+
55
+ #### `vira init`
56
+
57
+ Инициализирует проект в текущей директории.
58
+
59
+ **Опции:**
60
+ - `-t, --template <template>` - Шаблон проекта
61
+
62
+ **Примеры:**
63
+ ```bash
64
+ vira init
65
+ vira init --template frontend
66
+ ```
67
+
68
+ ### Генерация кода
69
+
70
+ #### `vira generate <type> <name>`
71
+
72
+ Генерирует компоненты, сервисы, страницы и другие артефакты.
73
+
74
+ **Типы:**
75
+ - `component` / `comp` - React компонент
76
+ - `service` - Сервис с DI
77
+ - `page` - Страница
78
+ - `model` - Модель данных
79
+ - `route` - Роут
80
+ - `test` - Тест
81
+
82
+ **Опции:**
83
+ - `-d, --dir <directory>` - Директория для вывода (по умолчанию: `src`)
84
+ - `-i, --interactive` - Интерактивный режим
85
+ - `--vrp` - Использовать Vira Reactive Protocol
86
+ - `--no-vrp` - Не использовать VRP
87
+
88
+ **Примеры:**
89
+ ```bash
90
+ # Компонент
91
+ vira generate component Button
92
+ vira generate component UserCard --interactive
93
+ vira generate component TaskList --vrp
94
+
95
+ # Сервис
96
+ vira generate service user
97
+ vira generate service task --vrp --interactive
98
+
99
+ # Страница
100
+ vira generate page Dashboard
101
+ vira generate page Users --dir src/pages
102
+
103
+ # Модель
104
+ vira generate model User
105
+ vira generate model Product --dir src/models
106
+
107
+ # Роут
108
+ vira generate route users
109
+ vira generate route dashboard --dir src/routes
110
+
111
+ # Тест
112
+ vira generate test Button
113
+ vira generate test UserService
114
+ ```
115
+
116
+ ### Backend scaffolding (Go)
117
+
118
+ #### `vira make handler <name>`
119
+
120
+ Создает Go HTTP handler.
121
+
122
+ **Опции:**
123
+ - `-d, --dir <directory>` - Целевая директория
124
+
125
+ **Пример:**
126
+ ```bash
127
+ vira make handler user
128
+ vira make handler product --dir backend/internal/handlers
129
+ ```
130
+
131
+ #### `vira make migration <name>`
132
+
133
+ Создает SQL миграцию (up/down).
134
+
135
+ **Опции:**
136
+ - `-d, --dir <directory>` - Директория миграций (по умолчанию: `migrations`)
137
+
138
+ **Пример:**
139
+ ```bash
140
+ vira make migration create-users
141
+ vira make migration add-email-to-users --dir backend/migrations
142
+ ```
143
+
144
+ #### `vira make event <name>`
145
+
146
+ Создает Go event handler stub.
147
+
148
+ **Опции:**
149
+ - `-d, --dir <directory>` - Целевая директория
150
+
151
+ **Пример:**
152
+ ```bash
153
+ vira make event user.created
154
+ vira make event task.updated --dir backend/internal/events
155
+ ```
156
+
157
+ #### `vira make model <name>`
158
+
159
+ Создает Go model struct.
160
+
161
+ **Опции:**
162
+ - `-d, --dir <directory>` - Целевая директория
163
+ - `-f, --fields <fields>` - Поля через запятую (например: `name:string,email:string`)
164
+
165
+ **Примеры:**
166
+ ```bash
167
+ vira make model User
168
+ vira make model Product --fields "name:string,price:number,description:string"
169
+ vira make model Client --dir backend/internal/models
170
+ ```
171
+
172
+ #### `vira make crud <name>`
173
+
174
+ Создает CRUD handlers для ресурса.
175
+
176
+ **Опции:**
177
+ - `-d, --dir <directory>` - Целевая директория
178
+ - `-m, --model <model>` - Имя модели (по умолчанию: капитализированное имя ресурса)
179
+
180
+ **Пример:**
181
+ ```bash
182
+ vira make crud user
183
+ vira make crud product --model Product
184
+ ```
185
+
186
+ ### Работа с базой данных
187
+
188
+ #### `vira db migrate`
189
+
190
+ Выполняет миграции базы данных.
191
+
192
+ **Опции:**
193
+ - `-d, --dir <directory>` - Директория миграций
194
+ - `--db-url <url>` - URL подключения к БД
195
+ - `--driver <driver>` - Драйвер БД (`postgres`, `mysql`, `sqlite3`)
196
+
197
+ **Пример:**
198
+ ```bash
199
+ vira db migrate
200
+ vira db migrate --db-url postgres://user:pass@localhost/dbname
201
+ vira db migrate --driver mysql
202
+ ```
203
+
204
+ #### `vira db rollback`
205
+
206
+ Откатывает последнюю миграцию.
207
+
208
+ **Пример:**
209
+ ```bash
210
+ vira db rollback
211
+ vira db rollback --db-url postgres://user:pass@localhost/dbname
212
+ ```
213
+
214
+ #### `vira db status`
215
+
216
+ Показывает статус миграций.
217
+
218
+ **Пример:**
219
+ ```bash
220
+ vira db status
221
+ ```
222
+
223
+ ### VRP (Vira Reactive Protocol)
224
+
225
+ #### `vira proto validate`
226
+
227
+ Валидирует схему VRP протокола.
228
+
229
+ **Опции:**
230
+ - `--file <path>` - Путь к файлу типов
231
+
232
+ **Пример:**
233
+ ```bash
234
+ vira proto validate
235
+ vira proto validate --file backend/internal/types/types.go
236
+ ```
237
+
238
+ #### `vira proto generate`
239
+
240
+ Генерирует документацию по VRP каналам.
241
+
242
+ **Опции:**
243
+ - `--file <path>` - Путь к файлу типов
244
+ - `--output <path>` - Директория для вывода
245
+
246
+ **Пример:**
247
+ ```bash
248
+ vira proto generate
249
+ vira proto generate --output docs
250
+ ```
251
+
252
+ ### Синхронизация типов
253
+
254
+ #### `vira sync`
255
+
256
+ Синхронизирует TypeScript типы из Go structs.
257
+
258
+ **Опции:**
259
+ - `--types` - Синхронизировать типы (по умолчанию: true)
260
+ - `--backend <path>` - Путь к Go файлу типов
261
+ - `--from-models` - Генерировать из директории моделей
262
+ - `--models <path>` - Путь к директории моделей
263
+ - `--frontend <path>` - Путь для вывода TS типов (frontend)
264
+ - `--ui <path>` - Путь для вывода TS типов (ui)
265
+ - `-w, --watch` - Watch режим (автоматическая синхронизация)
266
+
267
+ **Примеры:**
268
+ ```bash
269
+ # Синхронизация из types.go
270
+ vira sync --types
271
+
272
+ # Синхронизация из директории моделей
273
+ vira sync --types --from-models
274
+
275
+ # Watch режим
276
+ vira sync --types --watch
277
+ ```
278
+
279
+ ### Валидация проекта
280
+
281
+ #### `vira validate`
282
+
283
+ Валидирует структуру проекта и конфигурацию.
284
+
285
+ **Пример:**
286
+ ```bash
287
+ vira validate
288
+ ```
289
+
290
+ ### Генерация документации
291
+
292
+ #### `vira doc`
293
+
294
+ Генерирует документацию CLI команд.
295
+
296
+ **Пример:**
297
+ ```bash
298
+ vira doc
299
+ ```
300
+
301
+ ## 📋 Шаблоны проектов
302
+
303
+ ### Frontend
304
+
305
+ React + Vite + Vira UI проект:
306
+
307
+ ```bash
308
+ vira create my-app --template frontend
309
+ ```
310
+
311
+ **Структура:**
312
+ ```
313
+ my-app/
314
+ ├── src/
315
+ │ ├── components/
316
+ │ ├── services/
317
+ │ ├── pages/
318
+ │ ├── models/
319
+ │ └── main.tsx
320
+ ├── package.json
321
+ ├── vite.config.ts
322
+ └── tsconfig.json
323
+ ```
324
+
325
+ ### Fullstack
326
+
327
+ Frontend + Go Backend + Docker:
328
+
329
+ ```bash
330
+ vira create my-app --template fullstack
331
+ ```
332
+
333
+ **Структура:**
334
+ ```
335
+ my-app/
336
+ ├── frontend/ # React приложение
337
+ ├── backend/ # Go backend
338
+ ├── ui/ # UI пакет
339
+ ├── migrations/ # SQL миграции
340
+ └── deploy/ # Docker compose файлы
341
+ ```
342
+
343
+ ### Kanban
344
+
345
+ Reference приложение с VRP:
346
+
347
+ ```bash
348
+ vira create kanban-app --template kanban
349
+ ```
350
+
351
+ Демонстрирует использование Vira Reactive Protocol для real-time синхронизации.
352
+
353
+ ## 🎯 Примеры использования
354
+
355
+ ### Создание компонента с VRP
356
+
357
+ ```bash
358
+ vira generate component TaskCard --vrp --interactive
359
+ ```
360
+
361
+ Интерактивно создаст компонент с интеграцией VRP.
362
+
363
+ ### Создание сервиса
364
+
365
+ ```bash
366
+ vira generate service user --vrp
367
+ ```
368
+
369
+ Создаст сервис с поддержкой VRP для синхронизации состояния.
370
+
371
+ ### Создание CRUD API
372
+
373
+ ```bash
374
+ # Backend: Go handlers
375
+ vira make crud user
376
+
377
+ # Frontend: Service
378
+ vira generate service user --vrp
379
+
380
+ # Frontend: Page
381
+ vira generate page Users
382
+ ```
383
+
384
+ ### Синхронизация типов
385
+
386
+ ```bash
387
+ # После изменения Go моделей
388
+ vira sync --types --from-models
389
+
390
+ # TypeScript типы автоматически обновятся в frontend/src/vira-types.ts
391
+ ```
392
+
393
+ ## 🔧 Конфигурация
394
+
395
+ CLI автоматически определяет структуру проекта. Для кастомизации можно использовать:
396
+
397
+ - `.vira.json` - Конфигурационный файл (планируется)
398
+ - Переменные окружения для путей
399
+ - Опции командной строки
400
+
401
+ ## 📖 Примеры генерации
402
+
403
+ ### Компонент с props
404
+
405
+ ```bash
406
+ vira generate component Button --interactive
407
+ ```
408
+
409
+ Интерактивно спросит:
410
+ - Нужны ли props?
411
+ - Какие props?
412
+ - Использовать VRP?
413
+ - Использовать Vira UI?
414
+
415
+ ### Сервис с VRP
416
+
417
+ ```bash
418
+ vira generate service task --vrp
419
+ ```
420
+
421
+ Создаст сервис с:
422
+ - VRP интеграцией
423
+ - CRUD методами
424
+ - Bulk операциями
425
+ - Автоматической синхронизацией
426
+
427
+ ## 🐛 Troubleshooting
428
+
429
+ ### Проблемы с миграциями
430
+
431
+ Если миграции не выполняются:
432
+
433
+ 1. Проверьте `DATABASE_URL` в `.env`
434
+ 2. Убедитесь, что `goose` установлен: `go install github.com/pressly/goose/v3/cmd/goose@latest`
435
+ 3. Проверьте права доступа к БД
436
+
437
+ ### Проблемы с синхронизацией типов
438
+
439
+ Если типы не синхронизируются:
440
+
441
+ 1. Проверьте путь к Go файлам: `vira sync --backend backend/internal/types/types.go`
442
+ 2. Используйте `--from-models` для генерации из директории моделей
443
+ 3. Проверьте формат Go structs
444
+
445
+ ## 📄 License
446
+
447
+ MIT
448
+
449
+ ## 🔗 Связанные пакеты
450
+
451
+ - [`@vira-ui/core`](../core/README.md) - Базовый фреймворк
452
+ - [`@vira-ui/ui`](../ui/README.md) - UI компоненты
453
+ - [`@vira-ui/react`](../react/README.md) - React хуки для VRP
454
+