@7n/rules 1.27.0 → 1.28.1

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 (268) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/package.json +1 -5
  3. package/schemas/v8r-catalog.json +10 -1
  4. package/scripts/auto-rules.mjs +2 -3
  5. package/scripts/docs/auto-rules.md +1 -1
  6. package/scripts/lib/docs/glob-to-regex.md +31 -0
  7. package/scripts/lib/docs/index.md +2 -0
  8. package/scripts/lib/docs/js-source-signals.md +32 -0
  9. package/scripts/lib/glob-to-regex.mjs +79 -0
  10. package/scripts/lib/js-source-signals.mjs +50 -0
  11. package/scripts/utils/ast-scan-utils.mjs +2 -2
  12. package/scripts/utils/docs/ast-scan-utils.md +1 -1
  13. package/rules/bun/bunfig/bunfig.mdc +0 -17
  14. package/rules/bun/bunfig/bunfig.rego +0 -29
  15. package/rules/bun/bunfig/concern.json +0 -9
  16. package/rules/bun/bunfig/template/bunfig.toml.snippet.toml +0 -2
  17. package/rules/bun/docs/index.md +0 -11
  18. package/rules/bun/layout/concern.json +0 -16
  19. package/rules/bun/layout/docs/fix-layout.md +0 -29
  20. package/rules/bun/layout/docs/main.md +0 -34
  21. package/rules/bun/layout/fix-layout.mjs +0 -63
  22. package/rules/bun/layout/layout.mdc +0 -60
  23. package/rules/bun/layout/main.mjs +0 -53
  24. package/rules/bun/licensee/concern.json +0 -7
  25. package/rules/bun/licensee/docs/fix-licensee.md +0 -27
  26. package/rules/bun/licensee/docs/index.md +0 -12
  27. package/rules/bun/licensee/docs/main.md +0 -30
  28. package/rules/bun/licensee/fix-licensee.mjs +0 -31
  29. package/rules/bun/licensee/main.mjs +0 -68
  30. package/rules/bun/lint-surface/concern.json +0 -3
  31. package/rules/bun/lint-surface/lint-surface.mdc +0 -13
  32. package/rules/bun/main.json +0 -1
  33. package/rules/bun/main.mdc +0 -11
  34. package/rules/bun/package_json/concern.json +0 -9
  35. package/rules/bun/package_json/docs/fix-package_json.md +0 -28
  36. package/rules/bun/package_json/docs/index.md +0 -9
  37. package/rules/bun/package_json/fix-package_json.mjs +0 -311
  38. package/rules/bun/package_json/package_json.mdc +0 -14
  39. package/rules/bun/package_json/package_json.rego +0 -64
  40. package/rules/bun/package_json/template/package.json.deny.json +0 -4
  41. package/rules/js/check/check.mdc +0 -26
  42. package/rules/js/check/concern.json +0 -19
  43. package/rules/js/check/docs/eslint-config.md +0 -56
  44. package/rules/js/check/docs/fix-check.md +0 -48
  45. package/rules/js/check/docs/index.md +0 -13
  46. package/rules/js/check/docs/main.md +0 -48
  47. package/rules/js/check/eslint-config.mjs +0 -262
  48. package/rules/js/check/fix-check.mjs +0 -82
  49. package/rules/js/check/main.mjs +0 -310
  50. package/rules/js/dep-policy/concern.json +0 -4
  51. package/rules/js/dep-policy/dep-policy.mdc +0 -36
  52. package/rules/js/dep-policy/docs/main.md +0 -35
  53. package/rules/js/dep-policy/main.mjs +0 -99
  54. package/rules/js/docs/index.md +0 -11
  55. package/rules/js/eslint/concern.json +0 -8
  56. package/rules/js/eslint/docs/fix-eslint.md +0 -50
  57. package/rules/js/eslint/docs/fix-worker.md +0 -31
  58. package/rules/js/eslint/docs/index.md +0 -11
  59. package/rules/js/eslint/docs/main.md +0 -35
  60. package/rules/js/eslint/fix-eslint.mjs +0 -160
  61. package/rules/js/eslint/fix-worker.mjs +0 -139
  62. package/rules/js/eslint/main.mjs +0 -115
  63. package/rules/js/file-extensions/concern.json +0 -3
  64. package/rules/js/file-extensions/file-extensions.mdc +0 -12
  65. package/rules/js/jscpd_config/concern.json +0 -11
  66. package/rules/js/jscpd_config/docs/fix-jscpd_config.md +0 -26
  67. package/rules/js/jscpd_config/docs/index.md +0 -9
  68. package/rules/js/jscpd_config/fix-jscpd_config.mjs +0 -3
  69. package/rules/js/jscpd_config/jscpd_config.mdc +0 -42
  70. package/rules/js/jscpd_config/jscpd_config.rego +0 -44
  71. package/rules/js/jscpd_config/template/.jscpd.json.snippet.json +0 -7
  72. package/rules/js/jscpd_duplicates/concern.json +0 -7
  73. package/rules/js/jscpd_duplicates/docs/main.md +0 -29
  74. package/rules/js/jscpd_duplicates/main.mjs +0 -69
  75. package/rules/js/knip/concern.json +0 -7
  76. package/rules/js/knip/docs/main.md +0 -32
  77. package/rules/js/knip/knip.mdc +0 -15
  78. package/rules/js/knip/main.mjs +0 -68
  79. package/rules/js/lint-findings/concern.json +0 -3
  80. package/rules/js/lint-findings/docs/main.md +0 -41
  81. package/rules/js/lint-findings/main.mjs +0 -125
  82. package/rules/js/main.json +0 -1
  83. package/rules/js/main.mdc +0 -18
  84. package/rules/js/package_json/concern.json +0 -9
  85. package/rules/js/package_json/docs/fix-package_json.md +0 -26
  86. package/rules/js/package_json/docs/index.md +0 -9
  87. package/rules/js/package_json/fix-package_json.mjs +0 -3
  88. package/rules/js/package_json/package_json.mdc +0 -15
  89. package/rules/js/package_json/package_json.rego +0 -142
  90. package/rules/js/package_json/template/package.json.snippet.json +0 -6
  91. package/rules/js/tooling/concern.json +0 -3
  92. package/rules/js/tooling/data/tooling/knip-canonical.json +0 -30
  93. package/rules/js/tooling/data/tooling/oxlint-canonical.json +0 -400
  94. package/rules/js/tooling/docs/main.md +0 -53
  95. package/rules/js/tooling/main.mjs +0 -183
  96. package/rules/js/utils_imports/concern.json +0 -4
  97. package/rules/js/utils_imports/docs/main.md +0 -50
  98. package/rules/js/utils_imports/main.mjs +0 -185
  99. package/rules/js/utils_imports/utils_imports.mdc +0 -15
  100. package/rules/js/vscode_extensions/concern.json +0 -11
  101. package/rules/js/vscode_extensions/docs/fix-vscode_extensions.md +0 -25
  102. package/rules/js/vscode_extensions/docs/index.md +0 -11
  103. package/rules/js/vscode_extensions/fix-vscode_extensions.mjs +0 -1
  104. package/rules/js/vscode_extensions/template/extensions.json.snippet.json +0 -6
  105. package/rules/js/vscode_extensions/vscode_extensions.mdc +0 -11
  106. package/rules/js/vscode_extensions/vscode_extensions.rego +0 -12
  107. package/rules/js-bun-db/connection/concern.json +0 -3
  108. package/rules/js-bun-db/connection/connection.mdc +0 -42
  109. package/rules/js-bun-db/docs/index.md +0 -11
  110. package/rules/js-bun-db/lib/bun-sql-scan.mjs +0 -1055
  111. package/rules/js-bun-db/lib/docs/bun-sql-scan.md +0 -63
  112. package/rules/js-bun-db/lib/docs/index.md +0 -11
  113. package/rules/js-bun-db/main.json +0 -1
  114. package/rules/js-bun-db/main.mdc +0 -8
  115. package/rules/js-bun-db/package_json/concern.json +0 -9
  116. package/rules/js-bun-db/package_json/package_json.mdc +0 -31
  117. package/rules/js-bun-db/package_json/package_json.rego +0 -15
  118. package/rules/js-bun-db/package_json/template/package.json.deny.json +0 -6
  119. package/rules/js-bun-db/pg_format_identifiers/concern.json +0 -3
  120. package/rules/js-bun-db/pg_format_identifiers/pg_format_identifiers.mdc +0 -104
  121. package/rules/js-bun-db/safety/concern.json +0 -4
  122. package/rules/js-bun-db/safety/docs/main.md +0 -34
  123. package/rules/js-bun-db/safety/main.mjs +0 -430
  124. package/rules/js-bun-db/safety/safety.mdc +0 -458
  125. package/rules/js-bun-redis/docs/index.md +0 -11
  126. package/rules/js-bun-redis/imports/concern.json +0 -4
  127. package/rules/js-bun-redis/imports/docs/main.md +0 -36
  128. package/rules/js-bun-redis/imports/imports.mdc +0 -47
  129. package/rules/js-bun-redis/imports/main.mjs +0 -88
  130. package/rules/js-bun-redis/lib/docs/index.md +0 -11
  131. package/rules/js-bun-redis/lib/docs/redis-imports.md +0 -227
  132. package/rules/js-bun-redis/lib/redis-imports.mjs +0 -130
  133. package/rules/js-bun-redis/main.json +0 -1
  134. package/rules/js-bun-redis/main.mdc +0 -8
  135. package/rules/js-bun-redis/package_json/concern.json +0 -9
  136. package/rules/js-bun-redis/package_json/package_json.mdc +0 -11
  137. package/rules/js-bun-redis/package_json/package_json.rego +0 -15
  138. package/rules/js-bun-redis/package_json/template/package.json.deny.json +0 -12
  139. package/rules/js-mssql/deps/concern.json +0 -4
  140. package/rules/js-mssql/deps/docs/main.md +0 -33
  141. package/rules/js-mssql/deps/main.mjs +0 -297
  142. package/rules/js-mssql/docs/index.md +0 -11
  143. package/rules/js-mssql/lib/docs/index.md +0 -11
  144. package/rules/js-mssql/lib/docs/mssql-pool-scan.md +0 -380
  145. package/rules/js-mssql/lib/mssql-pool-scan.mjs +0 -610
  146. package/rules/js-mssql/main.json +0 -1
  147. package/rules/js-mssql/main.mdc +0 -144
  148. package/rules/js-mssql/mssql-tvp/concern.json +0 -3
  149. package/rules/js-mssql/mssql-tvp/mssql-tvp.mdc +0 -77
  150. package/rules/js-mssql/package_json/concern.json +0 -9
  151. package/rules/js-mssql/package_json/package_json.mdc +0 -9
  152. package/rules/js-mssql/package_json/package_json.rego +0 -57
  153. package/rules/js-run/configmap/concern.json +0 -9
  154. package/rules/js-run/configmap/configmap.mdc +0 -37
  155. package/rules/js-run/configmap/configmap.rego +0 -21
  156. package/rules/js-run/configmap/template/configmap.yaml.contains.yml +0 -4
  157. package/rules/js-run/docs/index.md +0 -11
  158. package/rules/js-run/jsconfig/concern.json +0 -9
  159. package/rules/js-run/jsconfig/docs/fix-jsconfig.md +0 -29
  160. package/rules/js-run/jsconfig/docs/index.md +0 -9
  161. package/rules/js-run/jsconfig/fix-jsconfig.mjs +0 -119
  162. package/rules/js-run/jsconfig/jsconfig.mdc +0 -48
  163. package/rules/js-run/jsconfig/jsconfig.rego +0 -59
  164. package/rules/js-run/jsconfig/template/jsconfig.json.snippet.json +0 -10
  165. package/rules/js-run/lib/bunyan-imports.mjs +0 -98
  166. package/rules/js-run/lib/check-env-scan.mjs +0 -338
  167. package/rules/js-run/lib/conn-file-rules.mjs +0 -214
  168. package/rules/js-run/lib/conn-imports-scan.mjs +0 -154
  169. package/rules/js-run/lib/docs/bunyan-imports.md +0 -121
  170. package/rules/js-run/lib/docs/check-env-scan.md +0 -438
  171. package/rules/js-run/lib/docs/conn-file-rules.md +0 -304
  172. package/rules/js-run/lib/docs/conn-imports-scan.md +0 -208
  173. package/rules/js-run/lib/docs/index.md +0 -16
  174. package/rules/js-run/lib/docs/promise-settimeout-scan.md +0 -334
  175. package/rules/js-run/lib/docs/temporal-scan.md +0 -29
  176. package/rules/js-run/lib/promise-settimeout-scan.mjs +0 -128
  177. package/rules/js-run/lib/temporal-scan.mjs +0 -52
  178. package/rules/js-run/main.json +0 -1
  179. package/rules/js-run/main.mdc +0 -16
  180. package/rules/js-run/package_json/concern.json +0 -9
  181. package/rules/js-run/package_json/package_json.mdc +0 -44
  182. package/rules/js-run/package_json/package_json.rego +0 -37
  183. package/rules/js-run/package_json/template/package.json.deny.json +0 -22
  184. package/rules/js-run/project-structure/concern.json +0 -3
  185. package/rules/js-run/project-structure/project-structure.mdc +0 -11
  186. package/rules/js-run/runtime/concern.json +0 -12
  187. package/rules/js-run/runtime/docs/fix-runtime.md +0 -27
  188. package/rules/js-run/runtime/docs/main.md +0 -35
  189. package/rules/js-run/runtime/fix-runtime.mjs +0 -46
  190. package/rules/js-run/runtime/main.mjs +0 -494
  191. package/rules/js-run/runtime/runtime.mdc +0 -184
  192. package/rules/js-run/scope/concern.json +0 -3
  193. package/rules/js-run/scope/scope.mdc +0 -11
  194. package/rules/npm-module/docs/index.md +0 -11
  195. package/rules/npm-module/emit_types_config/concern.json +0 -9
  196. package/rules/npm-module/emit_types_config/docs/fix-emit_types_config.md +0 -25
  197. package/rules/npm-module/emit_types_config/docs/index.md +0 -9
  198. package/rules/npm-module/emit_types_config/emit_types_config.mdc +0 -43
  199. package/rules/npm-module/emit_types_config/emit_types_config.rego +0 -28
  200. package/rules/npm-module/emit_types_config/fix-emit_types_config.mjs +0 -5
  201. package/rules/npm-module/emit_types_config/template/tsconfig.emit-types.json.snippet.json +0 -9
  202. package/rules/npm-module/header_doc_pointer/concern.json +0 -5
  203. package/rules/npm-module/header_doc_pointer/docs/main.md +0 -40
  204. package/rules/npm-module/header_doc_pointer/header_doc_pointer.mdc +0 -18
  205. package/rules/npm-module/header_doc_pointer/main.mjs +0 -131
  206. package/rules/npm-module/main.json +0 -1
  207. package/rules/npm-module/main.mdc +0 -36
  208. package/rules/npm-module/npm_package_json/concern.json +0 -9
  209. package/rules/npm-module/npm_package_json/docs/fix-npm_package_json.md +0 -27
  210. package/rules/npm-module/npm_package_json/docs/index.md +0 -9
  211. package/rules/npm-module/npm_package_json/fix-npm_package_json.mjs +0 -5
  212. package/rules/npm-module/npm_package_json/npm_package_json.mdc +0 -57
  213. package/rules/npm-module/npm_package_json/npm_package_json.rego +0 -73
  214. package/rules/npm-module/npm_package_json/template/package.json.snippet.json +0 -1
  215. package/rules/npm-module/package_structure/concern.json +0 -5
  216. package/rules/npm-module/package_structure/docs/main.md +0 -37
  217. package/rules/npm-module/package_structure/main.mjs +0 -515
  218. package/rules/npm-module/package_structure/package_structure.mdc +0 -63
  219. package/rules/npm-module/root_package_json/concern.json +0 -9
  220. package/rules/npm-module/root_package_json/docs/fix-root_package_json.md +0 -26
  221. package/rules/npm-module/root_package_json/docs/index.md +0 -9
  222. package/rules/npm-module/root_package_json/fix-root_package_json.mjs +0 -5
  223. package/rules/npm-module/root_package_json/root_package_json.mdc +0 -41
  224. package/rules/npm-module/root_package_json/root_package_json.rego +0 -28
  225. package/rules/npm-module/root_package_json/template/package.json.snippet.json +0 -1
  226. package/rules/npm-module/rule_meta/concern.json +0 -8
  227. package/rules/npm-module/rule_meta/docs/main.md +0 -35
  228. package/rules/npm-module/rule_meta/main.mjs +0 -119
  229. package/rules/npm-module/rule_meta/rule_meta.mdc +0 -11
  230. package/rules/npm-module/skill_meta/concern.json +0 -5
  231. package/rules/npm-module/skill_meta/docs/main.md +0 -149
  232. package/rules/npm-module/skill_meta/main.mjs +0 -91
  233. package/rules/npm-module/skill_meta/skill_meta.mdc +0 -11
  234. package/rules/tool-surface/docs/index.md +0 -11
  235. package/rules/tool-surface/main.json +0 -6
  236. package/rules/tool-surface/main.mdc +0 -72
  237. package/rules/vue/composition-api/composition-api.mdc +0 -82
  238. package/rules/vue/composition-api/concern.json +0 -3
  239. package/rules/vue/docs/index.md +0 -11
  240. package/rules/vue/lib/docs/index.md +0 -11
  241. package/rules/vue/lib/docs/vue-forbidden-imports.md +0 -265
  242. package/rules/vue/lib/vue-forbidden-imports.mjs +0 -264
  243. package/rules/vue/main.json +0 -1
  244. package/rules/vue/main.mdc +0 -18
  245. package/rules/vue/nheader-layout/concern.json +0 -3
  246. package/rules/vue/nheader-layout/nheader-layout.mdc +0 -171
  247. package/rules/vue/package_json/concern.json +0 -9
  248. package/rules/vue/package_json/package_json.mdc +0 -30
  249. package/rules/vue/package_json/package_json.rego +0 -140
  250. package/rules/vue/packages/concern.json +0 -6
  251. package/rules/vue/packages/docs/index.md +0 -11
  252. package/rules/vue/packages/docs/main.md +0 -35
  253. package/rules/vue/packages/main.mjs +0 -575
  254. package/rules/vue/packages/packages.mdc +0 -56
  255. package/rules/vue/quasar-ui/concern.json +0 -3
  256. package/rules/vue/quasar-ui/quasar-ui.mdc +0 -32
  257. package/rules/vue/structure/concern.json +0 -3
  258. package/rules/vue/structure/structure.mdc +0 -101
  259. package/rules/vue/testing/concern.json +0 -3
  260. package/rules/vue/testing/testing.mdc +0 -40
  261. package/rules/vue/tfm-translations/concern.json +0 -7
  262. package/rules/vue/tfm-translations/docs/main.md +0 -29
  263. package/rules/vue/tfm-translations/main.mjs +0 -55
  264. package/rules/vue/tfm-translations/tfm-translations.mdc +0 -32
  265. package/rules/vue/vite-config/concern.json +0 -3
  266. package/rules/vue/vite-config/vite-config.mdc +0 -153
  267. package/rules/vue/vite-env/concern.json +0 -3
  268. package/rules/vue/vite-env/vite-env.mdc +0 -61
@@ -1,18 +0,0 @@
1
- ---
2
- description: Vue
3
- version: '2.3'
4
- globs: "**/*.vue"
5
- alwaysApply: false
6
- ---
7
-
8
- # Vue 3 Composition API — правила для .cursorrules
9
-
10
- Правило охоплює стандарти написання Vue 3 SFC з Composition API, конфігурацію Vite-проєкту, UI-бібліотеки, заборонені патерни та вимоги до тестування.
11
-
12
- ## Швидкий gate через conftest
13
-
14
- Rego-перевірки (запускаються через `npx @7n/rules fix vue`):
15
-
16
- ## Перевірка
17
-
18
- `npx @7n/rules fix vue` — перевіряє залежності, `vite.config`, наявність **`src/vite-env.d.ts`** з `/// <reference types="vite/client" />` та **`jsconfig.json`** у корені Vue-пакета; обходить джерела Vue-пакета (`.vue`, `.ts`, `.js` тощо) на заборонені value-імпорти з модуля `vue` (дозволені лише type-only та side-effect `import 'vue'`) і додатково сканує `.vue` SFC на імпорти Node-нативних модулів (`node:*` префікс або bare-ім'я вбудованого модуля Node — `fs`, `path`, `timers/promises` тощо). Імпорти аналізуються через **oxc-parser** (`module.staticImports`); для `.vue` вміст `<script>` витягується з SFC, далі той самий парсер (логіка в `npm/rules/vue/lib/vue-forbidden-imports.mjs`).
@@ -1,3 +0,0 @@
1
- {
2
- "$schema": "https://unpkg.com/@7n/rules/schemas/concern.json"
3
- }
@@ -1,171 +0,0 @@
1
- ## NHeader — телепорт-слоти на сторінках
2
-
3
- У проектах з `NHeader` використовуй `<teleport>` для вбудовування контенту сторінки в шапку:
4
-
5
- | Слот | Призначення |
6
- | --- | --- |
7
- | `#header-subtitle` | Заголовок сторінки (якщо потрібно перевизначити subtitle) |
8
- | `#header-center` | Важливі повідомлення та елементи управління |
9
- | `#header-filters` | Фільтри, кнопки та інші елементи управління сторінки |
10
-
11
- Оскільки `NHeader` за замовчуванням темний, додавай до полів і селектів у телепортах: `dark`, `standout="bg-white text-primary"`, `:options-dark="false"`.
12
-
13
- Завжди обгортай `<teleport>` в `v-if="mounted"` (де `mounted` — `$ref(false)`, що встановлюється в `onMounted`), щоб уникнути помилки відсутності target-елемента при SSR / першому рендері.
14
-
15
- ```vue
16
- <template>
17
- <q-page>
18
- <!-- ФІЛЬТРИ В ШАПЦІ -->
19
- <teleport v-if="mounted" to="#header-filters">
20
- <div class="col row items-center n-gap-sm q-pa-sm">
21
- <q-input
22
- v-model="pageStore.filterName"
23
- :label="t`Поиск по названию`"
24
- debounce="200"
25
- standout="bg-white text-primary"
26
- clearable
27
- dense
28
- dark
29
- class="col"
30
- style="min-width: 120px">
31
- <template #prepend>
32
- <q-icon name="search" />
33
- </template>
34
- </q-input>
35
-
36
- <n-select-multi
37
- v-model="pageStore.filterRequestTypes"
38
- :options="requestTypeOptions"
39
- :label="t`Тип запроса`"
40
- dark
41
- standout="bg-white text-primary"
42
- :options-dark="false"
43
- style="min-width: 180px; max-width: 400px"
44
- dense
45
- emit-value
46
- map-options
47
- clearable
48
- searchable
49
- :stack-label="false" />
50
-
51
- <q-btn
52
- @click="addItem"
53
- icon="add"
54
- :label="t`Добавить`"
55
- color="primary"
56
- no-caps
57
- padding="8px 12px"
58
- unelevated />
59
- </div>
60
- </teleport>
61
-
62
- <!-- ОСНОВНИЙ КОНТЕНТ -->
63
- ...
64
- </q-page>
65
- </template>
66
- <script setup>
67
- const mounted = $ref(false)
68
- onMounted(() => { mounted = true })
69
- </script>
70
- ```
71
-
72
- ## Layout з NHeader
73
-
74
- Для нових layout-ів використовуй `NHeader` з вбудованими `NLang` і `NMenu`.
75
-
76
- ```vue
77
- <template>
78
- <q-layout view="hHh Lpr lFf">
79
- <n-header
80
- v-model="leftSideOpened"
81
- :logo="baseUrl + 'logo.png'"
82
- :logo-url="homeUrl"
83
- title="My App"
84
- :subtitle="subtitle"
85
- :username="userName"
86
- toolbar-dark>
87
- <template #top-toolbar>
88
- <div class="platform-ios-only q-py-lg" />
89
- </template>
90
- <div>default slot content</div>
91
- </n-header>
92
-
93
- <!-- ЛЕВАЯ КОЛОНКА -->
94
- <q-drawer v-model="leftSideOpened" :breakpoint="700" :width="300" overlay class="col column shadow-5 bg-grey-1">
95
- <div class="platform-ios-only q-py-lg" />
96
- <div v-if="!$q.screen.gt.xs" class="q-pa-sm row items-center">
97
- <q-icon name="account_circle" color="primary" size="32px" class="q-mr-sm" />
98
- <div class="text-subtitle1">{{ user.name }}</div>
99
- </div>
100
- <n-menu v-model="activeMenu" :menu="menu" />
101
- <q-space />
102
- <n-menu :menu="homeMenu" />
103
- <div class="platform-ios-only q-py-md" />
104
- </q-drawer>
105
-
106
- <q-page-container>
107
- <router-view />
108
- </q-page-container>
109
- </q-layout>
110
- </template>
111
- <script setup>
112
- import { lang, tf as tfm } from '@nitra/tfm'
113
- const t = tfm.bind({ tr: getTr() })
114
-
115
- const baseUrl = import.meta.env.BASE_URL
116
- const homeUrl = String.raw`https:\\` + import.meta.env.VITE_DOMAIN
117
-
118
- // Ліва колонка
119
- const leftSideOpened = $ref(false)
120
- const activeMenu = $ref(null)
121
-
122
- // Заголовок у шапці з поточного пункту меню
123
- const subtitle = computed(() => (activeMenu ? getTr()[activeMenu.labelKey]?.[lang.value] || activeMenu?.labelKey : ''))
124
-
125
- // Меню
126
- const menu = computed(() =>
127
- [
128
- {
129
- icon: 'sym_o_store',
130
- label: t`Клиенты`,
131
- labelKey: t`Клиенты`,
132
- routeName: 'customer'
133
- },
134
- {
135
- icon: 'sym_o_route',
136
- label: t`Маршруты и визиты`,
137
- items: [
138
- {
139
- icon: 'sym_o_route',
140
- label: t`Маршруты`,
141
- labelKey: t`Маршруты`,
142
- routeName: 'route'
143
- },
144
- {
145
- icon: 'sym_o_event_upcoming',
146
- label: t`Переносы маршрутов`,
147
- labelKey: t`Переносы маршрутов`,
148
- routeName: 'route_postpone'
149
- }
150
- ]
151
- }
152
- ].filter(item => {
153
- if (item.items?.length) {
154
- item.items = item.items.filter(i => can[i.permissionRoute || i.routeName])
155
- return item.items.length > 0
156
- }
157
- return can[item.routeName]
158
- })
159
- )
160
-
161
- /**
162
- * LOCALIZATION
163
- * @returns {object} translations
164
- */
165
- function getTr() {
166
- return {
167
- Клиенты: { en: 'Customers', ro: 'Clienți', tr: 'Müşteriler' }
168
- }
169
- }
170
- </script>
171
- ```
@@ -1,9 +0,0 @@
1
- {
2
- "$schema": "https://unpkg.com/@7n/rules/schemas/concern.json",
3
- "fixability": "config",
4
- "policy": {
5
- "files": {
6
- "walkGlob": "**/package.json"
7
- }
8
- }
9
- }
@@ -1,30 +0,0 @@
1
- ## Залежності Vue+Vite пакета — канонічний набір і заборони
2
-
3
- Rego-пакет: `vue.package_json`
4
-
5
- Цільові файли: `**/package.json`
6
-
7
- Перевірка активна лише якщо у `dependencies` присутній `vue`.
8
-
9
- **Обов'язкові залежності:**
10
-
11
- - `devDependencies.vite` — мажорна версія ≥ 8
12
- - `devDependencies.@vitejs/plugin-vue`
13
- - `vue-macros` (dependencies або devDependencies)
14
- - `unplugin-auto-import` (dependencies або devDependencies)
15
- - `vite-plugin-vue-layouts-next` (dependencies або devDependencies)
16
-
17
- **Заборонені залежності (у будь-якій групі):**
18
-
19
- - `esbuild` — замінено на rolldown
20
- - `vitest` — замінено на Bun Test Runner (`bun test`)
21
- - `jsdom` — замінено на happy-dom
22
-
23
- Приклади:
24
-
25
- ```
26
- ✓ "devDependencies": { "vite": "^8.0.0", "@vitejs/plugin-vue": "^6.0.0", "vue-macros": "^3.0.0", "unplugin-auto-import": "^20.0.0", "vite-plugin-vue-layouts-next": "^1.0.0" }
27
- ✗ "devDependencies": { "vite": "^7.0.0", "esbuild": "^0.25.0", "vitest": "^3.0.0", "jsdom": "^25.0.0" }
28
- ```
29
-
30
- Пакети без `vue` у `dependencies` — ігноруються повністю.
@@ -1,140 +0,0 @@
1
- # Порт перевірки версій з `package.json` для Vue+Vite пакетів з
2
- # `npm/scripts/rules/vue/fix.mjs` (vue.mdc).
3
- #
4
- # Запуск (локально, у Vue+Vite-пакеті):
5
- # conftest test path/to/package.json -p npm/policy/vue \
6
- # --namespace vue.package_json
7
- #
8
- # Перевіряє: якщо в `dependencies` є `vue`, то потрібні канонічні Vue/Vite
9
- # залежності, `devDependencies.vite` має бути мажорної версії ≥ 8, а `esbuild`
10
- # (міграція на rolldown), `vitest` (заміна на Bun Test Runner) і `jsdom`
11
- # (заміна на happy-dom) у dependencies/devDependencies заборонені.
12
- #
13
- # AST-сканування коду (заборона явних value-імпортів `from 'vue'`, заборона
14
- # Node-нативних модулів у `.vue` SFC, перевірка `vite.config` на
15
- # `process.env.npm_lifecycle_event`, vue-macros, auto-import тощо), а також
16
- # FS-перевірки (`src/vite-env.d.ts`, `jsconfig.json` у корені пакета) — у JS.
17
- #
18
- # Структура каталогу збігається зі шляхом пакету (regal: directory-package-mismatch).
19
- # Конвенція проєкту — `import rego.v1` + multi-value `deny contains msg if { … }`
20
- # (.cursor/rules/conftest.mdc). Лінт — `bun run lint-rego` (regal).
21
- package vue.package_json
22
-
23
- import rego.v1
24
-
25
- deny contains msg if {
26
- uses_vue
27
- not vite_in_dev_dependencies
28
- msg := "Vue-пакет: відсутня залежність `vite` у devDependencies (vue.mdc)"
29
- }
30
-
31
- deny contains msg if {
32
- uses_vue
33
- vite_in_dev_dependencies
34
- not vite_major_at_least_8
35
- vite_range := input.devDependencies.vite
36
- msg := sprintf("Vue-пакет: vite має бути >= 8 (зараз %q) (vue.mdc)", [vite_range])
37
- }
38
-
39
- deny contains msg if {
40
- uses_vue
41
- vite_in_dev_dependencies
42
- vite_major_at_least_8
43
- not vite_at_least_8_1
44
- vite_range := input.devDependencies.vite
45
- msg := sprintf("Vue-пакет: vite має бути >= 8.1 (зараз %q) (vue.mdc)", [vite_range])
46
- }
47
-
48
- deny contains msg if {
49
- uses_vue
50
- not "@vitejs/plugin-vue" in dev_dependency_names
51
- msg := "Vue-пакет: @vitejs/plugin-vue відсутній у devDependencies (vue.mdc)"
52
- }
53
-
54
- deny contains msg if {
55
- uses_vue
56
- not "vue-macros" in all_dependency_names
57
- msg := "Vue-пакет: vue-macros відсутній (vue.mdc)"
58
- }
59
-
60
- deny contains msg if {
61
- uses_vue
62
- not "unplugin-auto-import" in all_dependency_names
63
- msg := "Vue-пакет: unplugin-auto-import відсутній (vue.mdc)"
64
- }
65
-
66
- deny contains msg if {
67
- uses_vue
68
- not "vite-plugin-vue-layouts-next" in all_dependency_names
69
- msg := "Vue-пакет: vite-plugin-vue-layouts-next відсутній (vue.mdc)"
70
- }
71
-
72
- deny contains msg if {
73
- uses_vue
74
- "esbuild" in all_dependency_names
75
- msg := "Vue-пакет: esbuild заборонено — заміни на rolldown і прибери залежність (vue.mdc)"
76
- }
77
-
78
- deny contains msg if {
79
- uses_vue
80
- "vitest" in all_dependency_names
81
- msg := "Vue-пакет: vitest заборонено — використовуй Bun Test Runner (`bun test`) і прибери залежність (vue.mdc)"
82
- }
83
-
84
- deny contains msg if {
85
- uses_vue
86
- "jsdom" in all_dependency_names
87
- msg := "Vue-пакет: jsdom заборонено — використовуй happy-dom і прибери залежність (vue.mdc)"
88
- }
89
-
90
- # ── helpers ────────────────────────────────────────────────────────────────
91
-
92
- uses_vue if {
93
- "vue" in object.keys(object.get(input, "dependencies", {}))
94
- }
95
-
96
- dependency_names := {n | some n in object.keys(object.get(input, "dependencies", {}))}
97
-
98
- dev_dependency_names := {n | some n in object.keys(object.get(input, "devDependencies", {}))}
99
-
100
- all_dependency_names contains n if {
101
- some n in dependency_names
102
- }
103
-
104
- all_dependency_names contains n if {
105
- some n in dev_dependency_names
106
- }
107
-
108
- vite_in_dev_dependencies if {
109
- "vite" in object.keys(object.get(input, "devDependencies", {}))
110
- }
111
-
112
- vite_major_at_least_8 if {
113
- range := input.devDependencies.vite
114
-
115
- # Перша мажорна цифра з рядка: `^8`, `>=8.0.0`, `8.x` → 8.
116
- match := regex.find_n(`\d+`, range, 1)
117
- count(match) > 0
118
- to_number(match[0]) >= 8
119
- }
120
-
121
- vite_at_least_8_1 if {
122
- range := input.devDependencies.vite
123
-
124
- # Витягуємо першу пару цифр (мажор.мінор) із semver-рядка.
125
- # Якщо мажор > 8 — завжди true; якщо мажор = 8 — мінор має бути >= 1.
126
- parts := regex.find_n(`\d+`, range, 2)
127
- count(parts) >= 1
128
- major := to_number(parts[0])
129
- major > 8
130
- }
131
-
132
- vite_at_least_8_1 if {
133
- range := input.devDependencies.vite
134
-
135
- parts := regex.find_n(`\d+`, range, 2)
136
- count(parts) >= 2
137
- major := to_number(parts[0])
138
- major == 8
139
- to_number(parts[1]) >= 1
140
- }
@@ -1,6 +0,0 @@
1
- {
2
- "$schema": "https://unpkg.com/@7n/rules/schemas/concern.json",
3
- "lint": {
4
- "scope": "full"
5
- }
6
- }
@@ -1,11 +0,0 @@
1
- ---
2
- type: Directory Index
3
- title: npm/rules/vue/packages
4
- resource: npm/rules/vue/packages/
5
- ---
6
-
7
- # npm/rules/vue/packages
8
-
9
- | Файл | Тип |
10
- | ------------------- | --------- |
11
- | [main.mjs](main.md) | JS Module |
@@ -1,35 +0,0 @@
1
- ---
2
- type: JS Module
3
- title: main.mjs
4
- resource: npm/rules/vue/packages/main.mjs
5
- docgen:
6
- crc: 65e272f3
7
- model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
- score: 100
9
- issues: judge:inaccurate:0.98
10
- judgeModel: openai-codex/gpt-5.4-mini
11
- ---
12
-
13
- ## Огляд
14
-
15
- Модуль визначає, чи є поточний пакет бібліотекою компонентів Vue, та проводить валідацію проєкту на відповідність стандартам, визначеним у `vue.mdc`, враховуючи конфігураційні файли `package-lock.json`, `jsconfig.json`, `package.json`, `extensions.json`.
16
-
17
- isVueComponentLibraryPkg визначає, чи є пакет бібліотекою компонентів Vue, аналізуючи його залежності.
18
- main перевіряє відповідність проєкту правилам vue.mdc для пакетів з Vue, включаючи перевірки конфігурації Vite, імпортів, `esbuild` та рекомендації IDE. Логіка роботи не викликає винятків назовні (fail-safe), ігноруючи каталоги `.git` та `node_modules`. (vue.mdc)
19
-
20
- ## Поведінка
21
-
22
- Поведінка
23
- isVueComponentLibraryPkg визначає, чи є пакет бібліотекою компонентів Vue, аналізуючи його залежності.
24
- main перевіряє відповідність проєкту правилам vue.mdc для пакетів з Vue, включаючи перевірки конфігурації Vite, імпортів, `esbuild` та рекомендації IDE. При цьому ігноруються каталоги `.git` та `node_modules`, а також файли локів `package-lock.json`, `bun.lock` тощо.
25
-
26
- ## Публічний API
27
-
28
- isVueComponentLibraryPkg — визначає, чи повинен проект розглядатися як бібліотека компонентів Vue, що впливає на правила імпорту в IDE.
29
- main — гарантує, що всі компоненти у робочому просторі коректно декларують залежність від Vue відповідно до стандартів.
30
-
31
- ## Гарантії поведінки
32
-
33
- - Read-only: не виконує операцій запису (ФС/БД).
34
- - Перехоплює помилки і не пропускає винятків назовні (fail-safe).
35
- - Свідомо пропускає шляхи: `.git`, `node_modules`.