@nitra/cursor 1.0.9 → 1.0.11

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 (2) hide show
  1. package/mdc/vue.mdc +191 -0
  2. package/package.json +1 -1
package/mdc/vue.mdc ADDED
@@ -0,0 +1,191 @@
1
+ ---
2
+ description: Vue
3
+ alwaysApply: true
4
+ version: '1.1'
5
+ ---
6
+
7
+ # Vue 3 (Composition API)
8
+
9
+ # Vue 3 Composition API — правила для .cursorrules
10
+
11
+ ## Найкращі практики Vue 3 Composition API
12
+
13
+ ```javascript
14
+ const vue3CompositionApiBestPractices = [
15
+ 'Використовуй функцію setup() для логіки компонента',
16
+ 'Реалізуй computed properties через computed()',
17
+ 'Використовуй watch і watchEffect для side effects',
18
+ 'Підключай lifecycle hooks: onMounted, onUpdated тощо',
19
+ 'Використовуй provide/inject для dependency injection'
20
+ ]
21
+ ```
22
+
23
+ ## Структура папок
24
+
25
+ ```javascript
26
+ const folderStructure = `
27
+ src/
28
+ components/
29
+ composables/
30
+ views/
31
+ router/
32
+ store/
33
+ assets/
34
+ App.vue
35
+ main.js
36
+ `
37
+ ```
38
+
39
+ ### Найменування файлів
40
+
41
+ - **SFC:** імена файлів компонентів у **PascalCase** (`MyWidget.vue`).
42
+ - **Інші JS-модулі:** узгоджено **kebab-case** (`date-utils.js`).
43
+
44
+ ### Модулі та архітектура
45
+
46
+ - **ES modules** (`import`/`export`), один модуль — одна відповідальність, уникай **circular dependencies**.
47
+ - **Composition** замість успадкування; логіку для повторного використання винось у **composables** (замість зайвих HOC, де це доречно).
48
+ - **SFC** для template + script + style; за потреби розділяй presentational і container-компоненти (UI vs дані/оркестрація).
49
+
50
+ ### Code splitting
51
+
52
+ - **Route-based:** lazy-імпорти в маршрутах (`() => import('...')`) і async components.
53
+
54
+ ## Додаткові вказівки
55
+
56
+ ```javascript
57
+ const additionalInstructions = `
58
+ 1. Використовуй JavaScript
59
+ 2. Коректно оголошуй props і emits
60
+ 3. За потреби використовуй компонент Teleport у Vue 3
61
+ 4. Застосовуй Suspense для async components
62
+ 5. Реалізуй належний error handling
63
+ 6. Дотримуйся Vue 3 style guide і naming conventions
64
+ 7. Використовуй Vite для швидкої розробки та збірки
65
+ `
66
+ ```
67
+
68
+ ### Детальні вказівки
69
+
70
+ 1. **Vue router**: Завжди використовуй Vue router для маршрутизації в проекті версії 5 та його file-based routing.
71
+ 2. **Компонент Teleport**: Використовуй Teleport у Vue 3, коли потрібно рендерити поза поточною ієрархією DOM.
72
+ 3. **Suspense для async components**: Застосовуй Suspense для асинхронних компонентів і кращого UX.
73
+ 4. **Error handling**: Реалізуй глобальний error handling механізмами Vue 3, щоб коректно перехоплювати та обробляти помилки.
74
+ 5. **Style guide і naming**: Дотримуйся офіційного Vue 3 style guide і naming conventions для узгодженості кодової бази.
75
+ 6. **Vue macros**: Використовуй Vue macros для більш ефективного розробки компонентів.
76
+ 7. **Vue Reactivity Transform**: Використовуй Vue Reactivity Transform для змінних в компонентах.
77
+
78
+ ### Патерни та антипатерни
79
+
80
+ - **provide/inject** — для глибоко вкладених залежностей; **renderless**-компоненти / **slots** — коли логіку відділяєш від розмітки.
81
+ - **HTTP:** окремі модулі **services** або **composables** для API; **async/await**.
82
+ - **Події:** батько–дитина через **emits**; для не пов’язаних гілок — **store** / **provide-inject**, уникай глобального **event bus** у новому коді.
83
+ - Не мутуй **props** напряму — оновлення через подію вгору або v-model.
84
+ - Обмежуй зайве в глобальному стані; локальний стан у компоненті — за замовчуванням.
85
+ - Уникай прямої роботи з **DOM**, якщо достатньо реактивного шаблону та ref.
86
+ - **Magic numbers/strings** винось у константи; **computed** тримай простими, важкі обчислення — у функції або утиліти.
87
+
88
+ ### State management
89
+
90
+ - **Single source of truth** для спільних даних: у нових проєктах на Vue 3 **Pinia** (модульні stores, actions)
91
+ - Похідний стан — через обчислення в store або **computed** у компонентах, без «тихих» побічних ефектів у getters.
92
+
93
+ ### Обробка помилок (додатково)
94
+
95
+ - **try/catch** навколо async-операцій; зрозумілі повідомлення для користувача; логування на сервіс моніторингу за потреби.
96
+ - **Error boundary**-підхід у Vue — через окремі компоненти-обгортки та `onErrorCaptured` / глобальні хендлери залежно від архітектури.
97
+
98
+ ### Продуктивність
99
+
100
+ - **v-for** — стабільні унікальні **`:key`**; не плутай **v-if** (умовний mount) і **v-show** (перемикання visibility).
101
+ - Важкі **computed** / **watch** — не робити зайвої роботи; **debounce/throttle** для частих подій.
102
+ - **v-once** для статичного вмісту; уникай глибоко вкладених дерев без потреби.
103
+ - Після ручних **addEventListener** / підписок — прибирай у **onUnmounted**.
104
+
105
+ ### Безпека
106
+
107
+ - Не довіряй **v-html** без санітизації; для форм/API — **CSRF**-захист за потреби; валідація **на сервері** обов’язкова.
108
+
109
+ ### Тестування
110
+
111
+ - **Unit / component:** **Vue Test Utils**; з **Vite** зручно **Vitest**.
112
+ - **E2E:** **Playwright** змістовні сценарії користувацьких потоків.
113
+
114
+ ### Інструменти (узгоджено з Vite і цим правилом)
115
+
116
+ - Якість коду: **ESLint** + **eslint-plugin-vue**; форматування — **oxfmt**, див. `js-format.mdc`.
117
+ - Збірка та dev-сервер — **Vite**
118
+ - **Vue Devtools** для дебагу; продакшен-збірка — **`vite build`**, оптимізація асетів і кешування на рівні деплою / CDN.
119
+
120
+ ### CI/CD
121
+
122
+ - У pipeline: **install**, **lint**, **test**, **vite build**; артефакти з продакшен-режиму.
123
+
124
+ ### Приклад
125
+
126
+ ```javascript
127
+ // Приклад Vue 3 компонента з Composition API
128
+ import { computed, onMounted } from 'vue'
129
+
130
+ export default {
131
+ setup() {
132
+ const count = $ref(0)
133
+ const doubleCount = computed(() => count * 2)
134
+
135
+ onMounted(() => {
136
+ console.log('Компонент змонтовано')
137
+ })
138
+
139
+ return {
140
+ count,
141
+ doubleCount
142
+ }
143
+ }
144
+ }
145
+ ```
146
+
147
+ в файлі .vscode/extensions.json є налаштування для Vue:
148
+
149
+ ```json title=".vscode/extensions.json"
150
+ {
151
+ "recommendations": ["Vue.volar"]
152
+ }
153
+ ```
154
+
155
+ мінімальний повний `package.json` для Vite + Vue + `vue-macros` (версії підлаштуй під проєкт):
156
+
157
+ ```json title="package.json"
158
+ {
159
+ "name": "my-vue-app",
160
+ "private": true,
161
+ "type": "module",
162
+ "dependencies": {
163
+ "vue": "^3.5.0"
164
+ },
165
+ "devDependencies": {
166
+ "vite": "^8.0.0",
167
+ "@vitejs/plugin-vue": "^6.0.0",
168
+ "vue-macros": "^3.1.2"
169
+ }
170
+ }
171
+ ```
172
+
173
+ ```javascript title="vite.config.js"
174
+ import Vue from '@vitejs/plugin-vue'
175
+ import VueMacros from 'vue-macros/vite'
176
+ import { defineConfig } from 'vite'
177
+
178
+ export default defineConfig({
179
+ plugins: [
180
+ VueMacros({
181
+ plugins: {
182
+ vue: Vue()
183
+ }
184
+ })
185
+ ]
186
+ })
187
+ ```
188
+
189
+ ### Висновок
190
+
191
+ Дотримуючись цих практик і правил, можна будувати масштабовані, підтримувані та ефективні застосунки на Vue 3 з Composition API. Завжди звіряйся з офіційною документацією Vue 3 щодо оновлень і нових можливостей.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nitra/cursor",
3
- "version": "1.0.9",
3
+ "version": "1.0.11",
4
4
  "description": "CLI для завантаження cursor-правил Nitra у локальний репозиторій",
5
5
  "keywords": [
6
6
  "cli",