@7n/rules 1.26.0 → 1.28.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 (292) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/package.json +2 -5
  3. package/rules/doc-files/docgen-crc/docs/main.md +1 -1
  4. package/rules/doc-files/docgen-crc/main.mjs +5 -12
  5. package/rules/doc-files/docgen-gen/docs/main.md +1 -1
  6. package/rules/doc-files/docgen-gen/main.mjs +12 -4
  7. package/rules/doc-files/docgen-scan/docs/main.md +2 -2
  8. package/rules/doc-files/docgen-scan/main.mjs +6 -13
  9. package/schemas/concern.json +4 -0
  10. package/scripts/auto-rules.mjs +2 -3
  11. package/scripts/docs/auto-rules.md +1 -1
  12. package/scripts/lib/concern-meta.mjs +14 -1
  13. package/scripts/lib/docs/concern-meta.md +3 -6
  14. package/scripts/lib/docs/glob-to-regex.md +31 -0
  15. package/scripts/lib/docs/index.md +2 -0
  16. package/scripts/lib/docs/js-source-signals.md +32 -0
  17. package/scripts/lib/glob-to-regex.mjs +79 -0
  18. package/scripts/lib/js-source-signals.mjs +50 -0
  19. package/scripts/lib/lint-surface/docs/ladder.md +3 -5
  20. package/scripts/lib/lint-surface/docs/run-fix.md +3 -2
  21. package/scripts/lib/lint-surface/ladder.mjs +18 -9
  22. package/scripts/lib/lint-surface/run-fix.mjs +15 -2
  23. package/scripts/utils/ast-scan-utils.mjs +2 -2
  24. package/scripts/utils/docs/ast-scan-utils.md +1 -1
  25. package/scripts/utils/docs/test-helpers.md +2 -1
  26. package/skills/doc-files/SKILL.md +1 -1
  27. package/skills/taze/js/docs/orchestrate.md +1 -1
  28. package/rules/bun/bunfig/bunfig.mdc +0 -17
  29. package/rules/bun/bunfig/bunfig.rego +0 -29
  30. package/rules/bun/bunfig/concern.json +0 -9
  31. package/rules/bun/bunfig/template/bunfig.toml.snippet.toml +0 -2
  32. package/rules/bun/docs/index.md +0 -11
  33. package/rules/bun/layout/concern.json +0 -16
  34. package/rules/bun/layout/docs/fix-layout.md +0 -29
  35. package/rules/bun/layout/docs/main.md +0 -34
  36. package/rules/bun/layout/fix-layout.mjs +0 -63
  37. package/rules/bun/layout/layout.mdc +0 -60
  38. package/rules/bun/layout/main.mjs +0 -53
  39. package/rules/bun/licensee/concern.json +0 -7
  40. package/rules/bun/licensee/docs/fix-licensee.md +0 -27
  41. package/rules/bun/licensee/docs/index.md +0 -12
  42. package/rules/bun/licensee/docs/main.md +0 -30
  43. package/rules/bun/licensee/fix-licensee.mjs +0 -31
  44. package/rules/bun/licensee/main.mjs +0 -68
  45. package/rules/bun/lint-surface/concern.json +0 -3
  46. package/rules/bun/lint-surface/lint-surface.mdc +0 -13
  47. package/rules/bun/main.json +0 -1
  48. package/rules/bun/main.mdc +0 -11
  49. package/rules/bun/package_json/concern.json +0 -9
  50. package/rules/bun/package_json/docs/fix-package_json.md +0 -28
  51. package/rules/bun/package_json/docs/index.md +0 -9
  52. package/rules/bun/package_json/fix-package_json.mjs +0 -311
  53. package/rules/bun/package_json/package_json.mdc +0 -14
  54. package/rules/bun/package_json/package_json.rego +0 -64
  55. package/rules/bun/package_json/template/package.json.deny.json +0 -4
  56. package/rules/doc-files/docgen-extract/concern.json +0 -3
  57. package/rules/doc-files/docgen-extract/docs/main.md +0 -38
  58. package/rules/doc-files/docgen-extract/main.mjs +0 -275
  59. package/rules/doc-files/units/concern.json +0 -3
  60. package/rules/doc-files/units/docs/main.md +0 -31
  61. package/rules/doc-files/units/main.mjs +0 -19
  62. package/rules/doc-files/units-js/concern.json +0 -3
  63. package/rules/doc-files/units-js/docs/main.md +0 -32
  64. package/rules/doc-files/units-js/main.mjs +0 -141
  65. package/rules/js/check/check.mdc +0 -26
  66. package/rules/js/check/concern.json +0 -19
  67. package/rules/js/check/docs/eslint-config.md +0 -56
  68. package/rules/js/check/docs/fix-check.md +0 -48
  69. package/rules/js/check/docs/index.md +0 -13
  70. package/rules/js/check/docs/main.md +0 -48
  71. package/rules/js/check/eslint-config.mjs +0 -262
  72. package/rules/js/check/fix-check.mjs +0 -82
  73. package/rules/js/check/main.mjs +0 -310
  74. package/rules/js/dep-policy/concern.json +0 -4
  75. package/rules/js/dep-policy/dep-policy.mdc +0 -36
  76. package/rules/js/dep-policy/docs/main.md +0 -35
  77. package/rules/js/dep-policy/main.mjs +0 -99
  78. package/rules/js/docs/index.md +0 -11
  79. package/rules/js/eslint/concern.json +0 -7
  80. package/rules/js/eslint/docs/fix-eslint.md +0 -50
  81. package/rules/js/eslint/docs/fix-worker.md +0 -31
  82. package/rules/js/eslint/docs/index.md +0 -11
  83. package/rules/js/eslint/docs/main.md +0 -35
  84. package/rules/js/eslint/fix-eslint.mjs +0 -160
  85. package/rules/js/eslint/fix-worker.mjs +0 -139
  86. package/rules/js/eslint/main.mjs +0 -115
  87. package/rules/js/file-extensions/concern.json +0 -3
  88. package/rules/js/file-extensions/file-extensions.mdc +0 -12
  89. package/rules/js/jscpd_config/concern.json +0 -11
  90. package/rules/js/jscpd_config/docs/fix-jscpd_config.md +0 -26
  91. package/rules/js/jscpd_config/docs/index.md +0 -9
  92. package/rules/js/jscpd_config/fix-jscpd_config.mjs +0 -3
  93. package/rules/js/jscpd_config/jscpd_config.mdc +0 -42
  94. package/rules/js/jscpd_config/jscpd_config.rego +0 -44
  95. package/rules/js/jscpd_config/template/.jscpd.json.snippet.json +0 -7
  96. package/rules/js/jscpd_duplicates/concern.json +0 -7
  97. package/rules/js/jscpd_duplicates/docs/main.md +0 -29
  98. package/rules/js/jscpd_duplicates/main.mjs +0 -69
  99. package/rules/js/knip/concern.json +0 -7
  100. package/rules/js/knip/docs/main.md +0 -32
  101. package/rules/js/knip/knip.mdc +0 -15
  102. package/rules/js/knip/main.mjs +0 -68
  103. package/rules/js/lint-findings/concern.json +0 -3
  104. package/rules/js/lint-findings/docs/main.md +0 -41
  105. package/rules/js/lint-findings/main.mjs +0 -125
  106. package/rules/js/main.json +0 -1
  107. package/rules/js/main.mdc +0 -18
  108. package/rules/js/package_json/concern.json +0 -9
  109. package/rules/js/package_json/docs/fix-package_json.md +0 -26
  110. package/rules/js/package_json/docs/index.md +0 -9
  111. package/rules/js/package_json/fix-package_json.mjs +0 -3
  112. package/rules/js/package_json/package_json.mdc +0 -15
  113. package/rules/js/package_json/package_json.rego +0 -142
  114. package/rules/js/package_json/template/package.json.snippet.json +0 -6
  115. package/rules/js/tooling/concern.json +0 -3
  116. package/rules/js/tooling/data/tooling/knip-canonical.json +0 -30
  117. package/rules/js/tooling/data/tooling/oxlint-canonical.json +0 -400
  118. package/rules/js/tooling/docs/main.md +0 -53
  119. package/rules/js/tooling/main.mjs +0 -183
  120. package/rules/js/utils_imports/concern.json +0 -4
  121. package/rules/js/utils_imports/docs/main.md +0 -50
  122. package/rules/js/utils_imports/main.mjs +0 -185
  123. package/rules/js/utils_imports/utils_imports.mdc +0 -15
  124. package/rules/js/vscode_extensions/concern.json +0 -11
  125. package/rules/js/vscode_extensions/docs/fix-vscode_extensions.md +0 -25
  126. package/rules/js/vscode_extensions/docs/index.md +0 -11
  127. package/rules/js/vscode_extensions/fix-vscode_extensions.mjs +0 -1
  128. package/rules/js/vscode_extensions/template/extensions.json.snippet.json +0 -6
  129. package/rules/js/vscode_extensions/vscode_extensions.mdc +0 -11
  130. package/rules/js/vscode_extensions/vscode_extensions.rego +0 -12
  131. package/rules/js-bun-db/connection/concern.json +0 -3
  132. package/rules/js-bun-db/connection/connection.mdc +0 -42
  133. package/rules/js-bun-db/docs/index.md +0 -11
  134. package/rules/js-bun-db/lib/bun-sql-scan.mjs +0 -1055
  135. package/rules/js-bun-db/lib/docs/bun-sql-scan.md +0 -63
  136. package/rules/js-bun-db/lib/docs/index.md +0 -11
  137. package/rules/js-bun-db/main.json +0 -1
  138. package/rules/js-bun-db/main.mdc +0 -8
  139. package/rules/js-bun-db/package_json/concern.json +0 -9
  140. package/rules/js-bun-db/package_json/package_json.mdc +0 -31
  141. package/rules/js-bun-db/package_json/package_json.rego +0 -15
  142. package/rules/js-bun-db/package_json/template/package.json.deny.json +0 -6
  143. package/rules/js-bun-db/pg_format_identifiers/concern.json +0 -3
  144. package/rules/js-bun-db/pg_format_identifiers/pg_format_identifiers.mdc +0 -104
  145. package/rules/js-bun-db/safety/concern.json +0 -4
  146. package/rules/js-bun-db/safety/docs/main.md +0 -34
  147. package/rules/js-bun-db/safety/main.mjs +0 -430
  148. package/rules/js-bun-db/safety/safety.mdc +0 -458
  149. package/rules/js-bun-redis/docs/index.md +0 -11
  150. package/rules/js-bun-redis/imports/concern.json +0 -4
  151. package/rules/js-bun-redis/imports/docs/main.md +0 -36
  152. package/rules/js-bun-redis/imports/imports.mdc +0 -47
  153. package/rules/js-bun-redis/imports/main.mjs +0 -88
  154. package/rules/js-bun-redis/lib/docs/index.md +0 -11
  155. package/rules/js-bun-redis/lib/docs/redis-imports.md +0 -227
  156. package/rules/js-bun-redis/lib/redis-imports.mjs +0 -130
  157. package/rules/js-bun-redis/main.json +0 -1
  158. package/rules/js-bun-redis/main.mdc +0 -8
  159. package/rules/js-bun-redis/package_json/concern.json +0 -9
  160. package/rules/js-bun-redis/package_json/package_json.mdc +0 -11
  161. package/rules/js-bun-redis/package_json/package_json.rego +0 -15
  162. package/rules/js-bun-redis/package_json/template/package.json.deny.json +0 -12
  163. package/rules/js-mssql/deps/concern.json +0 -4
  164. package/rules/js-mssql/deps/docs/main.md +0 -33
  165. package/rules/js-mssql/deps/main.mjs +0 -297
  166. package/rules/js-mssql/docs/index.md +0 -11
  167. package/rules/js-mssql/lib/docs/index.md +0 -11
  168. package/rules/js-mssql/lib/docs/mssql-pool-scan.md +0 -380
  169. package/rules/js-mssql/lib/mssql-pool-scan.mjs +0 -610
  170. package/rules/js-mssql/main.json +0 -1
  171. package/rules/js-mssql/main.mdc +0 -144
  172. package/rules/js-mssql/mssql-tvp/concern.json +0 -3
  173. package/rules/js-mssql/mssql-tvp/mssql-tvp.mdc +0 -77
  174. package/rules/js-mssql/package_json/concern.json +0 -9
  175. package/rules/js-mssql/package_json/package_json.mdc +0 -9
  176. package/rules/js-mssql/package_json/package_json.rego +0 -57
  177. package/rules/js-run/configmap/concern.json +0 -9
  178. package/rules/js-run/configmap/configmap.mdc +0 -37
  179. package/rules/js-run/configmap/configmap.rego +0 -21
  180. package/rules/js-run/configmap/template/configmap.yaml.contains.yml +0 -4
  181. package/rules/js-run/docs/index.md +0 -11
  182. package/rules/js-run/jsconfig/concern.json +0 -9
  183. package/rules/js-run/jsconfig/docs/fix-jsconfig.md +0 -29
  184. package/rules/js-run/jsconfig/docs/index.md +0 -9
  185. package/rules/js-run/jsconfig/fix-jsconfig.mjs +0 -119
  186. package/rules/js-run/jsconfig/jsconfig.mdc +0 -48
  187. package/rules/js-run/jsconfig/jsconfig.rego +0 -59
  188. package/rules/js-run/jsconfig/template/jsconfig.json.snippet.json +0 -10
  189. package/rules/js-run/lib/bunyan-imports.mjs +0 -98
  190. package/rules/js-run/lib/check-env-scan.mjs +0 -338
  191. package/rules/js-run/lib/conn-file-rules.mjs +0 -214
  192. package/rules/js-run/lib/conn-imports-scan.mjs +0 -154
  193. package/rules/js-run/lib/docs/bunyan-imports.md +0 -121
  194. package/rules/js-run/lib/docs/check-env-scan.md +0 -438
  195. package/rules/js-run/lib/docs/conn-file-rules.md +0 -304
  196. package/rules/js-run/lib/docs/conn-imports-scan.md +0 -208
  197. package/rules/js-run/lib/docs/index.md +0 -16
  198. package/rules/js-run/lib/docs/promise-settimeout-scan.md +0 -334
  199. package/rules/js-run/lib/docs/temporal-scan.md +0 -29
  200. package/rules/js-run/lib/promise-settimeout-scan.mjs +0 -128
  201. package/rules/js-run/lib/temporal-scan.mjs +0 -52
  202. package/rules/js-run/main.json +0 -1
  203. package/rules/js-run/main.mdc +0 -16
  204. package/rules/js-run/package_json/concern.json +0 -9
  205. package/rules/js-run/package_json/package_json.mdc +0 -44
  206. package/rules/js-run/package_json/package_json.rego +0 -37
  207. package/rules/js-run/package_json/template/package.json.deny.json +0 -22
  208. package/rules/js-run/project-structure/concern.json +0 -3
  209. package/rules/js-run/project-structure/project-structure.mdc +0 -11
  210. package/rules/js-run/runtime/concern.json +0 -12
  211. package/rules/js-run/runtime/docs/fix-runtime.md +0 -27
  212. package/rules/js-run/runtime/docs/main.md +0 -35
  213. package/rules/js-run/runtime/fix-runtime.mjs +0 -46
  214. package/rules/js-run/runtime/main.mjs +0 -494
  215. package/rules/js-run/runtime/runtime.mdc +0 -184
  216. package/rules/js-run/scope/concern.json +0 -3
  217. package/rules/js-run/scope/scope.mdc +0 -11
  218. package/rules/npm-module/docs/index.md +0 -11
  219. package/rules/npm-module/emit_types_config/concern.json +0 -9
  220. package/rules/npm-module/emit_types_config/docs/fix-emit_types_config.md +0 -25
  221. package/rules/npm-module/emit_types_config/docs/index.md +0 -9
  222. package/rules/npm-module/emit_types_config/emit_types_config.mdc +0 -43
  223. package/rules/npm-module/emit_types_config/emit_types_config.rego +0 -28
  224. package/rules/npm-module/emit_types_config/fix-emit_types_config.mjs +0 -5
  225. package/rules/npm-module/emit_types_config/template/tsconfig.emit-types.json.snippet.json +0 -9
  226. package/rules/npm-module/header_doc_pointer/concern.json +0 -5
  227. package/rules/npm-module/header_doc_pointer/docs/main.md +0 -40
  228. package/rules/npm-module/header_doc_pointer/header_doc_pointer.mdc +0 -18
  229. package/rules/npm-module/header_doc_pointer/main.mjs +0 -131
  230. package/rules/npm-module/main.json +0 -1
  231. package/rules/npm-module/main.mdc +0 -36
  232. package/rules/npm-module/npm_package_json/concern.json +0 -9
  233. package/rules/npm-module/npm_package_json/docs/fix-npm_package_json.md +0 -27
  234. package/rules/npm-module/npm_package_json/docs/index.md +0 -9
  235. package/rules/npm-module/npm_package_json/fix-npm_package_json.mjs +0 -5
  236. package/rules/npm-module/npm_package_json/npm_package_json.mdc +0 -57
  237. package/rules/npm-module/npm_package_json/npm_package_json.rego +0 -73
  238. package/rules/npm-module/npm_package_json/template/package.json.snippet.json +0 -1
  239. package/rules/npm-module/package_structure/concern.json +0 -5
  240. package/rules/npm-module/package_structure/docs/main.md +0 -37
  241. package/rules/npm-module/package_structure/main.mjs +0 -515
  242. package/rules/npm-module/package_structure/package_structure.mdc +0 -63
  243. package/rules/npm-module/root_package_json/concern.json +0 -9
  244. package/rules/npm-module/root_package_json/docs/fix-root_package_json.md +0 -26
  245. package/rules/npm-module/root_package_json/docs/index.md +0 -9
  246. package/rules/npm-module/root_package_json/fix-root_package_json.mjs +0 -5
  247. package/rules/npm-module/root_package_json/root_package_json.mdc +0 -41
  248. package/rules/npm-module/root_package_json/root_package_json.rego +0 -28
  249. package/rules/npm-module/root_package_json/template/package.json.snippet.json +0 -1
  250. package/rules/npm-module/rule_meta/concern.json +0 -8
  251. package/rules/npm-module/rule_meta/docs/main.md +0 -35
  252. package/rules/npm-module/rule_meta/main.mjs +0 -119
  253. package/rules/npm-module/rule_meta/rule_meta.mdc +0 -11
  254. package/rules/npm-module/skill_meta/concern.json +0 -5
  255. package/rules/npm-module/skill_meta/docs/main.md +0 -149
  256. package/rules/npm-module/skill_meta/main.mjs +0 -91
  257. package/rules/npm-module/skill_meta/skill_meta.mdc +0 -11
  258. package/rules/tool-surface/docs/index.md +0 -11
  259. package/rules/tool-surface/main.json +0 -6
  260. package/rules/tool-surface/main.mdc +0 -72
  261. package/rules/vue/composition-api/composition-api.mdc +0 -82
  262. package/rules/vue/composition-api/concern.json +0 -3
  263. package/rules/vue/docs/index.md +0 -11
  264. package/rules/vue/lib/docs/index.md +0 -11
  265. package/rules/vue/lib/docs/vue-forbidden-imports.md +0 -265
  266. package/rules/vue/lib/vue-forbidden-imports.mjs +0 -264
  267. package/rules/vue/main.json +0 -1
  268. package/rules/vue/main.mdc +0 -18
  269. package/rules/vue/nheader-layout/concern.json +0 -3
  270. package/rules/vue/nheader-layout/nheader-layout.mdc +0 -171
  271. package/rules/vue/package_json/concern.json +0 -9
  272. package/rules/vue/package_json/package_json.mdc +0 -30
  273. package/rules/vue/package_json/package_json.rego +0 -140
  274. package/rules/vue/packages/concern.json +0 -6
  275. package/rules/vue/packages/docs/index.md +0 -11
  276. package/rules/vue/packages/docs/main.md +0 -35
  277. package/rules/vue/packages/main.mjs +0 -575
  278. package/rules/vue/packages/packages.mdc +0 -56
  279. package/rules/vue/quasar-ui/concern.json +0 -3
  280. package/rules/vue/quasar-ui/quasar-ui.mdc +0 -32
  281. package/rules/vue/structure/concern.json +0 -3
  282. package/rules/vue/structure/structure.mdc +0 -101
  283. package/rules/vue/testing/concern.json +0 -3
  284. package/rules/vue/testing/testing.mdc +0 -40
  285. package/rules/vue/tfm-translations/concern.json +0 -7
  286. package/rules/vue/tfm-translations/docs/main.md +0 -29
  287. package/rules/vue/tfm-translations/main.mjs +0 -55
  288. package/rules/vue/tfm-translations/tfm-translations.mdc +0 -32
  289. package/rules/vue/vite-config/concern.json +0 -3
  290. package/rules/vue/vite-config/vite-config.mdc +0 -153
  291. package/rules/vue/vite-env/concern.json +0 -3
  292. 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`.