@nitra/cursor 1.0.11 → 1.0.12

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.
package/mdc/vue.mdc CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  description: Vue
3
3
  alwaysApply: true
4
- version: '1.1'
4
+ version: '1.2'
5
5
  ---
6
6
 
7
7
  # Vue 3 (Composition API)
@@ -13,10 +13,10 @@ version: '1.1'
13
13
  ```javascript
14
14
  const vue3CompositionApiBestPractices = [
15
15
  'Використовуй функцію setup() для логіки компонента',
16
- 'Реалізуй computed properties через computed()',
16
+ 'Реалізуй computed properties через $computed()',
17
17
  'Використовуй watch і watchEffect для side effects',
18
18
  'Підключай lifecycle hooks: onMounted, onUpdated тощо',
19
- 'Використовуй provide/inject для dependency injection'
19
+ 'не використовуй provide/inject для dependency injection'
20
20
  ]
21
21
  ```
22
22
 
@@ -31,6 +31,7 @@ src/
31
31
  router/
32
32
  store/
33
33
  assets/
34
+ public/
34
35
  App.vue
35
36
  main.js
36
37
  `
@@ -38,14 +39,13 @@ src/
38
39
 
39
40
  ### Найменування файлів
40
41
 
41
- - **SFC:** імена файлів компонентів у **PascalCase** (`MyWidget.vue`).
42
+ - **SFC:** імена файлів компонентів у **PascalCase** починаючи з букви N(`NMyWidget.vue`).
42
43
  - **Інші JS-модулі:** узгоджено **kebab-case** (`date-utils.js`).
43
44
 
44
45
  ### Модулі та архітектура
45
46
 
46
47
  - **ES modules** (`import`/`export`), один модуль — одна відповідальність, уникай **circular dependencies**.
47
48
  - **Composition** замість успадкування; логіку для повторного використання винось у **composables** (замість зайвих HOC, де це доречно).
48
- - **SFC** для template + script + style; за потреби розділяй presentational і container-компоненти (UI vs дані/оркестрація).
49
49
 
50
50
  ### Code splitting
51
51
 
@@ -56,7 +56,7 @@ src/
56
56
  ```javascript
57
57
  const additionalInstructions = `
58
58
  1. Використовуй JavaScript
59
- 2. Коректно оголошуй props і emits
59
+ 2. Коректно оголошуй props, emits, defineModel
60
60
  3. За потреби використовуй компонент Teleport у Vue 3
61
61
  4. Застосовуй Suspense для async components
62
62
  5. Реалізуй належний error handling
@@ -79,11 +79,10 @@ const additionalInstructions = `
79
79
 
80
80
  - **provide/inject** — для глибоко вкладених залежностей; **renderless**-компоненти / **slots** — коли логіку відділяєш від розмітки.
81
81
  - **HTTP:** окремі модулі **services** або **composables** для API; **async/await**.
82
- - **Події:** батько–дитина через **emits**; для не пов’язаних гілок — **store** / **provide-inject**, уникай глобального **event bus** у новому коді.
82
+ - **Події:** батько–дитина через **emits**; для не пов’язаних гілок — **store**.
83
83
  - Не мутуй **props** напряму — оновлення через подію вгору або v-model.
84
84
  - Обмежуй зайве в глобальному стані; локальний стан у компоненті — за замовчуванням.
85
85
  - Уникай прямої роботи з **DOM**, якщо достатньо реактивного шаблону та ref.
86
- - **Magic numbers/strings** винось у константи; **computed** тримай простими, важкі обчислення — у функції або утиліти.
87
86
 
88
87
  ### State management
89
88
 
@@ -92,14 +91,12 @@ const additionalInstructions = `
92
91
 
93
92
  ### Обробка помилок (додатково)
94
93
 
95
- - **try/catch** навколо async-операцій; зрозумілі повідомлення для користувача; логування на сервіс моніторингу за потреби.
96
- - **Error boundary**-підхід у Vue — через окремі компоненти-обгортки та `onErrorCaptured` / глобальні хендлери залежно від архітектури.
94
+ - **try/catch** навколо async-операцій; зрозумілі повідомлення для користувача через notifySuccess, notifyError; логування на сервіс моніторингу за потреби.
97
95
 
98
96
  ### Продуктивність
99
97
 
100
98
  - **v-for** — стабільні унікальні **`:key`**; не плутай **v-if** (умовний mount) і **v-show** (перемикання visibility).
101
- - Важкі **computed** / **watch** — не робити зайвої роботи; **debounce/throttle** для частих подій.
102
- - **v-once** для статичного вмісту; уникай глибоко вкладених дерев без потреби.
99
+ - **debounce/throttle** для частих подій.
103
100
  - Після ручних **addEventListener** / підписок — прибирай у **onUnmounted**.
104
101
 
105
102
  ### Безпека
@@ -130,7 +127,7 @@ import { computed, onMounted } from 'vue'
130
127
  export default {
131
128
  setup() {
132
129
  const count = $ref(0)
133
- const doubleCount = computed(() => count * 2)
130
+ const doubleCount = $computed(() => count * 2)
134
131
 
135
132
  onMounted(() => {
136
133
  console.log('Компонент змонтовано')
@@ -174,14 +171,40 @@ export default {
174
171
  import Vue from '@vitejs/plugin-vue'
175
172
  import VueMacros from 'vue-macros/vite'
176
173
  import { defineConfig } from 'vite'
174
+ import AutoImport from 'unplugin-auto-import/vite'
175
+ import Layouts from 'vite-plugin-vue-layouts-next'
177
176
 
178
177
  export default defineConfig({
179
178
  plugins: [
179
+ AutoImport({
180
+ imports: [
181
+ // presets
182
+ 'vue',
183
+ 'vue-router',
184
+ 'quasar',
185
+ 'pinia',
186
+ // custom
187
+ {
188
+ '@nitra/vite-boot/apollo': [
189
+ // named imports
190
+ 'gql',
191
+ 'useQuery',
192
+ 'useMutation',
193
+ 'useSubscription'
194
+ ],
195
+ '@nitra/consola': [
196
+ // named imports
197
+ 'createLogger' // import { createLogger } from '@nitra/consola'
198
+ ]
199
+ }
200
+ ]
201
+ }),
180
202
  VueMacros({
181
203
  plugins: {
182
204
  vue: Vue()
183
205
  }
184
- })
206
+ }),
207
+ Layouts()
185
208
  ]
186
209
  })
187
210
  ```
@@ -189,3 +212,9 @@ export default defineConfig({
189
212
  ### Висновок
190
213
 
191
214
  Дотримуючись цих практик і правил, можна будувати масштабовані, підтримувані та ефективні застосунки на Vue 3 з Composition API. Завжди звіряйся з офіційною документацією Vue 3 щодо оновлень і нових можливостей.
215
+
216
+ Потрібно використовувати Vite версії 8 та вище для frontend проекту на Vue.
217
+
218
+ Потрібно використовувати unplugin-auto-import для автоматичного імпортування компонентів, composables, utils та інших функцій і прибирати з Vue sfc імпорти які їх дублюють.
219
+
220
+ Потрібно використовувати vite-plugin-vue-layouts-next для автоматичного імпортування layout компонентів.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nitra/cursor",
3
- "version": "1.0.11",
3
+ "version": "1.0.12",
4
4
  "description": "CLI для завантаження cursor-правил Nitra у локальний репозиторій",
5
5
  "keywords": [
6
6
  "cli",
package/mdc/vite.mdc DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- description: Vite
3
- alwaysApply: true
4
- version: '1.0'
5
- ---
6
- Потрібно використовувати Vite для frontend проекту версії 8 та вище.
7
-