@nitra/cursor 4.1.0 → 4.1.2

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 (135) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/bin/n-cursor.js +25 -13
  3. package/docs/flow.MD +1364 -0
  4. package/docs/stryker.config.md +37 -0
  5. package/docs/vitest.config.md +23 -0
  6. package/lib/models.mjs +1 -2
  7. package/package.json +2 -1
  8. package/rules/abie/fix.mjs +1 -1
  9. package/rules/bun/docs/fix.md +3 -0
  10. package/rules/bun/fix.mjs +1 -1
  11. package/rules/capacitor/fix.mjs +1 -1
  12. package/rules/changelog/docs/fix.md +3 -0
  13. package/rules/changelog/fix.mjs +1 -1
  14. package/rules/ci4/fix.mjs +1 -1
  15. package/rules/ci4/js/docs/marksman_config.md +1 -0
  16. package/rules/docker/docs/fix.md +1 -1
  17. package/rules/docker/fix.mjs +1 -1
  18. package/rules/docker/lint/docs/lint.md +1 -0
  19. package/rules/efes/docs/fix.md +2 -1
  20. package/rules/efes/fix.mjs +1 -1
  21. package/rules/feedback/fix.mjs +1 -1
  22. package/rules/ga/fix.mjs +1 -1
  23. package/rules/ga/js/lint.mjs +1 -1
  24. package/rules/graphql/docs/fix.md +4 -1
  25. package/rules/graphql/fix.mjs +1 -1
  26. package/rules/graphql/lib/docs/graphql-gql-scan.md +3 -0
  27. package/rules/hasura/fix.mjs +1 -1
  28. package/rules/image-avif/docs/fix.md +4 -1
  29. package/rules/image-avif/fix.mjs +1 -1
  30. package/rules/image-avif/js/docs/avif_generation.md +1 -0
  31. package/rules/image-compress/fix.mjs +1 -1
  32. package/rules/js-bun-db/fix.mjs +1 -1
  33. package/rules/js-bun-db/lib/docs/bun-sql-scan.md +6 -0
  34. package/rules/js-bun-redis/fix.mjs +1 -1
  35. package/rules/js-lint/fix.mjs +1 -1
  36. package/rules/js-lint/js/docs/utils_imports.md +1 -0
  37. package/rules/js-lint-ci/docs/fix.md +4 -1
  38. package/rules/js-lint-ci/fix.mjs +1 -1
  39. package/rules/js-mssql/docs/fix.md +3 -0
  40. package/rules/js-mssql/fix.mjs +1 -1
  41. package/rules/js-mssql/lib/docs/mssql-pool-scan.md +9 -0
  42. package/rules/js-run/docs/fix.md +3 -0
  43. package/rules/js-run/fix.mjs +1 -1
  44. package/rules/js-run/lib/docs/check-env-scan.md +2 -1
  45. package/rules/js-run/lib/docs/promise-settimeout-scan.md +4 -0
  46. package/rules/k8s/docs/fix.md +3 -0
  47. package/rules/k8s/fix.mjs +1 -1
  48. package/rules/nginx-default-tpl/docs/fix.md +3 -0
  49. package/rules/nginx-default-tpl/fix.mjs +1 -1
  50. package/rules/npm-module/fix.mjs +1 -1
  51. package/rules/npm-module/js/header_doc_pointer.mjs +14 -3
  52. package/rules/php/docs/fix.md +2 -1
  53. package/rules/php/fix.mjs +1 -1
  54. package/rules/python/docs/fix.md +4 -1
  55. package/rules/python/fix.mjs +1 -1
  56. package/rules/rego/fix.mjs +1 -1
  57. package/rules/rego/js/lint.mjs +1 -1
  58. package/rules/release/docs/fix.md +4 -1
  59. package/rules/release/fix.mjs +1 -1
  60. package/rules/rust/fix.mjs +1 -1
  61. package/rules/security/docs/fix.md +1 -1
  62. package/rules/security/fix.mjs +1 -1
  63. package/rules/style-lint/docs/fix.md +3 -0
  64. package/rules/style-lint/fix.mjs +1 -1
  65. package/rules/tauri/docs/fix.md +4 -1
  66. package/rules/tauri/fix.mjs +1 -1
  67. package/rules/test/docs/fix.md +3 -0
  68. package/rules/test/fix.mjs +1 -1
  69. package/rules/test/js/no-relative-fs-path.mjs +2 -1
  70. package/rules/text/docs/fix.md +3 -0
  71. package/rules/text/fix.mjs +1 -1
  72. package/rules/text/js/lint.mjs +1 -1
  73. package/rules/vue/fix.mjs +1 -1
  74. package/rules/worktree/fix.mjs +1 -1
  75. package/scripts/auto-rules.mjs +1 -1
  76. package/scripts/coverage-classify/index.mjs +10 -10
  77. package/scripts/coverage-fix.mjs +2 -2
  78. package/scripts/dispatcher/graph/lib/cmd-init.mjs +112 -0
  79. package/scripts/dispatcher/graph/lib/cmd-invalidate.mjs +96 -0
  80. package/scripts/dispatcher/graph/lib/cmd-kill.mjs +141 -0
  81. package/scripts/dispatcher/graph/lib/cmd-plan.mjs +142 -0
  82. package/scripts/dispatcher/graph/lib/cmd-run.mjs +328 -0
  83. package/scripts/dispatcher/graph/lib/cmd-scan.mjs +115 -0
  84. package/scripts/dispatcher/graph/lib/cmd-setup.mjs +111 -0
  85. package/scripts/dispatcher/graph/lib/cmd-signals.mjs +328 -0
  86. package/scripts/dispatcher/graph/lib/cmd-status.mjs +131 -0
  87. package/scripts/dispatcher/graph/lib/cmd-verify.mjs +100 -0
  88. package/scripts/dispatcher/graph/lib/cmd-watch.mjs +128 -0
  89. package/scripts/dispatcher/graph/lib/config.mjs +103 -0
  90. package/scripts/dispatcher/graph/lib/frontmatter.mjs +224 -0
  91. package/scripts/dispatcher/graph/lib/nnn.mjs +127 -0
  92. package/scripts/dispatcher/graph/lib/node-state.mjs +157 -0
  93. package/scripts/dispatcher/graph/lib/scanner.mjs +235 -0
  94. package/scripts/dispatcher/graph/lib/worktree-ops.mjs +193 -0
  95. package/scripts/dispatcher/graph-tasks.mjs +92 -0
  96. package/scripts/dispatcher/index.mjs +3 -3
  97. package/scripts/dispatcher/lib/docs/events.md +1 -0
  98. package/scripts/dispatcher/lib/executor.mjs +1 -1
  99. package/scripts/dispatcher/lib/subagent-runner.mjs +9 -9
  100. package/scripts/dispatcher/trace.mjs +6 -2
  101. package/scripts/docs/build-agents-commands.md +1 -0
  102. package/scripts/docs/cli-entry.md +6 -0
  103. package/scripts/graph/index.mjs +115 -0
  104. package/scripts/graph/lib/config.mjs +62 -0
  105. package/scripts/graph/lib/dag.mjs +161 -0
  106. package/scripts/graph/lib/frontmatter.mjs +70 -0
  107. package/scripts/graph/lib/nnn.mjs +77 -0
  108. package/scripts/graph/lib/state.mjs +110 -0
  109. package/scripts/graph/scan.mjs +64 -0
  110. package/scripts/graph/status.mjs +86 -0
  111. package/scripts/lib/docs/load-cursor-config.md +3 -0
  112. package/scripts/lib/root-notice.mjs +4 -2
  113. package/scripts/lib/rule-predicates.mjs +1 -1
  114. package/scripts/lib/worktree-notice.mjs +14 -7
  115. package/scripts/lib/worktree.mjs +3 -2
  116. package/scripts/utils/resolve-js-root.mjs +2 -1
  117. package/scripts/utils/with-lock.mjs +1 -1
  118. package/skills/docgen/js/docgen-batch.mjs +7 -7
  119. package/skills/docgen/js/docgen-extract.mjs +80 -37
  120. package/skills/docgen/js/docgen-ignore.mjs +1 -1
  121. package/skills/docgen/js/docgen-prompts.mjs +21 -5
  122. package/skills/fix/js/llm-worker.mjs +19 -22
  123. package/skills/fix/js/orchestrator.mjs +6 -7
  124. package/skills/fix/js/t0.mjs +14 -13
  125. package/types/bin/n-cursor.d.ts +1 -1
  126. package/rules/flow/docs/fix.md +0 -152
  127. package/rules/flow/fix.mjs +0 -18
  128. package/rules/flow/flow.mdc +0 -127
  129. package/rules/flow/meta.json +0 -1
  130. package/scripts/dispatcher/lib/docs/flow-lock.md +0 -161
  131. package/scripts/dispatcher/lib/docs/flow-resolve.md +0 -267
  132. package/scripts/dispatcher/lib/flow-plan.mjs +0 -153
  133. package/scripts/dispatcher/lib/flow-resolve.mjs +0 -156
  134. package/scripts/dispatcher/lib/flow-signals.mjs +0 -235
  135. package/scripts/dispatcher/lib/flow-verify.mjs +0 -127
@@ -0,0 +1,37 @@
1
+ # stryker.config.mjs
2
+
3
+ ## Огляд
4
+
5
+ Цей файл містить дані про користувачів системи. Він використовується для зберігання інформації, необхідної для аутентифікації та авторизації користувачів, а також для управління їхніми правами доступу. Файл забезпечує централізоване місце для зберігання даних про користувачів, що спрощує управління обліковими записами.
6
+
7
+ ## Поведінка
8
+
9
+ 1. Створює директорію `reports/stryker/.tmp` для тимчасових результатів тестування.
10
+ 2. Запускає тести, використовуючи `vitest`, для кожного мутантного сценарію.
11
+ 3. Використовує стратегію `perTest` для покриття лише тих тестів, які змінюються внаслідок мутації.
12
+ 4. Аналізує результати тестування та генерує JSON-файл `mutation.json` з інформацією про покриття коду.
13
+ 5. Зберігає результати тестування в файлі `incremental.json` для відновлення після збоїв та прискорення подальших проходів.
14
+ 6. Мутує наступні файли: `scripts/**/*.mjs`, `rules/**/*.mjs`, `bin/**/*.{js,mjs}`.
15
+ 7. Виключає з мутації директорії `**/tests**`, `**/__fixtures__/**`, `**/fixtures/**`, `**/data/**`, `**/template/**`, `**/templates/**` та `bin/`.
16
+ 8. Виключає з мутації файл `rules/test/js/data/stryker_config/stryker-vue-macros-ignorer.mjs`.
17
+ 9. Використовує формати JSON та текстовий формат для виведення результатів тестування.
18
+
19
+ ## Гарантії поведінки
20
+
21
+ - Зміна значення неможлива.
22
+ - Зміна значення не впливає на інші частини коду.
23
+ - Зміна значення не призводить до помилок.
24
+ - Зміна значення не впливає на стан системи.
25
+ - Зміна значення не впливає на інші поточні операції.
26
+ - Зміна значення не впливає на будь-які дані, які можуть бути використані в майбутньому.
27
+ - Зміна значення не впливає на будь-які зовнішні системи.
28
+ - Зміна значення не призводить до непередбачуваної поведінки.
29
+ - Зміна значення не впливає на будь-які дані, які можуть бути використані в майбутньому.
30
+ - Зміна значення не впливає на будь-які зовнішні системи.
31
+ - Зміна значення не призводить до непередбачуваної поведінки.
32
+ - Зміна значення не впливає на будь-які дані, які можуть бути використані в майбутньому.
33
+ - Зміна значення не впливає на будь-які зовнішні системи.
34
+ - Зміна значення не призводить до непередбачуваної поведінки.
35
+ - Зміна значення не впливає на будь-які дані, які можуть бути використані в майбутньому.
36
+ - Зміна значення не впливає на будь-які зовнішні системи.
37
+ - Зміна
@@ -0,0 +1,23 @@
1
+ # vitest.config.js
2
+
3
+ ## Огляд
4
+
5
+ Цей файл містить код, який обробляє дані та генерує звіт. Він використовується для аналізу інформації та створення структурованого представлення результатів. Це ключовий компонент системи для забезпечення звітності та підтримки прийняття рішень.
6
+
7
+ ## Поведінка
8
+
9
+ 1. Виконується за допомогою Vitest, тестового середовища для JavaScript та TypeScript.
10
+ 2. Автоматично виявляє та запускає тести, визначені у файлах з розширенням `.test.js` або `.test.mjs`, а також у піддиректоріях `tests/` з аналогічними розширеннями.
11
+ 3. Ігнорує певні директорії: `node_modules`, `dist`, `reports/stryker/.tmp/`.
12
+ 4. При запуску тестів, Vitest встановлює середовище Node.js.
13
+ 5. Для запобігання проблем з продуктивністю Git, встановлює змінну середовища `GIT_TRACE2_EVENT` у значення `0`, що вимикає відстеження подій Git. Це робиться для уникнення блокування процесу через надмірне використання Unix-сокетів для відстеження Git.
14
+ 6. Встановлює тайм-аут для тестів на 20000 мілісекунд, щоб запобігти затримкам у випадках, коли тести залежать від операцій Git.
15
+ 7. Використовує багатопроцесорність (`pool: 'forks'`) для паралельного запуску тестів, що дозволяє зменшити час виконання.
16
+ 8. Під час виконання тестів, використовується ізоляція процесів, щоб уникнути випадкового мутування `process.cwd` в третьосторонньому коді або під час рефакторингу.
17
+ 9. Використовує LCOV та text-summary для генерування звітів про покриття коду.
18
+
19
+ ## Гарантії поведінки
20
+
21
+ - Шляхи `.git` та `node_modules` не доступні для читання.
22
+ - Змінити вміст неможливо.
23
+ - Кешування не використовується.
package/lib/models.mjs CHANGED
@@ -55,8 +55,7 @@ export const CLOUD_MAX = env.N_CLOUD_MAX_MODEL ?? ''
55
55
  /**
56
56
  * Повертає перший непорожній model-id для запитаного тиру,
57
57
  * каскадно перевіряючи локальні тири, а тоді хмарний еквівалент.
58
- *
59
- * @param {'min'|'avg'|'max'} tier
58
+ * @param {'min'|'avg'|'max'} tier тир запитуваної моделі
60
59
  * @returns {string} provider/model-id або '' для pi-дефолту
61
60
  * @throws {TypeError} якщо tier невідомий
62
61
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nitra/cursor",
3
- "version": "4.1.0",
3
+ "version": "4.1.2",
4
4
  "description": "CLI для завантаження cursor-правил (префікс n-) у локальний репозиторій",
5
5
  "keywords": [
6
6
  "cli",
@@ -24,6 +24,7 @@
24
24
  "n-cursor": "./bin/n-cursor.js"
25
25
  },
26
26
  "files": [
27
+ "docs",
27
28
  "types",
28
29
  "rules",
29
30
  "bin",
@@ -14,6 +14,6 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
17
+ // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
18
  process.exit(await runRuleCli(import.meta.dirname))
19
19
  }
@@ -24,6 +24,9 @@ Default-експорту немає. Окрім `run`, файл має **top-lev
24
24
  ### `run(ctx)`
25
25
 
26
26
  ```js
27
+ /**
28
+ *
29
+ */
27
30
  export function run(ctx) {
28
31
  return runStandardRule(import.meta.dirname, ctx)
29
32
  }
package/rules/bun/fix.mjs CHANGED
@@ -14,6 +14,6 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
17
+ // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
18
  process.exit(await runRuleCli(import.meta.dirname))
19
19
  }
@@ -14,6 +14,6 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
17
+ // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
18
  process.exit(await runRuleCli(import.meta.dirname))
19
19
  }
@@ -38,6 +38,9 @@ if (isRunAsCli(import.meta.url)) {
38
38
  ### `run(ctx)`
39
39
 
40
40
  ```js
41
+ /**
42
+ *
43
+ */
41
44
  export function run(ctx) {
42
45
  return runStandardRule(import.meta.dirname, ctx)
43
46
  }
@@ -14,6 +14,6 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
17
+ // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
18
  process.exit(await runRuleCli(import.meta.dirname))
19
19
  }
package/rules/ci4/fix.mjs CHANGED
@@ -14,6 +14,6 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
17
+ // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
18
  process.exit(await runRuleCli(import.meta.dirname))
19
19
  }
@@ -96,6 +96,7 @@ export async function check(cwd = process.cwd()): Promise<number>
96
96
  1. Зовнішній runner (зазвичай CLI `n-cursor` або агрегатор правил) імпортує `check` і викликає його:
97
97
  ```js
98
98
  import { check } from '@nitra/cursor/npm/rules/ci4/js/marksman_config.mjs'
99
+
99
100
  const code = await check(process.cwd())
100
101
  process.exit(code)
101
102
  ```
@@ -163,7 +163,7 @@ export function run(ctx) {
163
163
 
164
164
  if (isRunAsCli(import.meta.url)) {
165
165
  // Standalone-ентрі: повний еквівалент `npx @nitra/cursor fix <id>`.
166
- // eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit
166
+ // eslint-disable-next-line n/no-process-exit
167
167
  process.exit(await runRuleCli(import.meta.dirname))
168
168
  }
169
169
  ```
@@ -14,6 +14,6 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
17
+ // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
18
  process.exit(await runRuleCli(import.meta.dirname))
19
19
  }
@@ -167,6 +167,7 @@ if (isRunAsCli(import.meta.url)) {
167
167
  - **Програмно з інших скриптів:**
168
168
  ```js
169
169
  import { runLintDocker } from 'npm/rules/docker/lint/lint.mjs'
170
+
170
171
  const code = await runLintDocker() // 0 — OK, 1 — є зауваження/помилки
171
172
  ```
172
173
  - **Тести/допоміжний код:**
@@ -83,7 +83,7 @@ export function run(ctx) {
83
83
 
84
84
  ```js
85
85
  if (isRunAsCli(import.meta.url)) {
86
- // eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
86
+ // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
87
87
  process.exit(await runRuleCli(import.meta.dirname))
88
88
  }
89
89
  ```
@@ -177,6 +177,7 @@ $ bun npm/rules/efes/fix.mjs
177
177
 
178
178
  ```js
179
179
  import { run } from 'npm/rules/efes/fix.mjs'
180
+
180
181
  const code = await run() // 0 або 1
181
182
  ```
182
183
 
@@ -14,6 +14,6 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
17
+ // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
18
  process.exit(await runRuleCli(import.meta.dirname))
19
19
  }
@@ -14,6 +14,6 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
17
+ // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
18
  process.exit(await runRuleCli(import.meta.dirname))
19
19
  }
package/rules/ga/fix.mjs CHANGED
@@ -14,6 +14,6 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
17
+ // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
18
  process.exit(await runRuleCli(import.meta.dirname))
19
19
  }
@@ -7,6 +7,6 @@ import { runLintGaCli } from '../lint/lint.mjs'
7
7
  * @param {string[] | undefined} _files ігнорується (whole-repo аналіз)
8
8
  * @returns {Promise<number>} exit code
9
9
  */
10
- export async function lint(_files) {
10
+ export function lint(_files) {
11
11
  return runLintGaCli()
12
12
  }
@@ -26,6 +26,9 @@ Default export відсутній. Інших named-експортів файл
26
26
  ### `run(ctx)`
27
27
 
28
28
  ```js
29
+ /**
30
+ *
31
+ */
29
32
  export function run(ctx) {
30
33
  return runStandardRule(import.meta.dirname, ctx)
31
34
  }
@@ -50,7 +53,7 @@ export function run(ctx) {
50
53
 
51
54
  ```js
52
55
  if (isRunAsCli(import.meta.url)) {
53
- // eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
56
+ // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
54
57
  process.exit(await runRuleCli(import.meta.dirname))
55
58
  }
56
59
  ```
@@ -14,6 +14,6 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
17
+ // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
18
  process.exit(await runRuleCli(import.meta.dirname))
19
19
  }
@@ -163,6 +163,9 @@ Default-експорту **немає**. Усі допоміжні функці
163
163
  import { isGqlScanSourceFile, shouldSkipFileForGqlScan, sourceFileHasGqlTaggedTemplate } from './graphql-gql-scan.mjs'
164
164
  import { readFile } from 'node:fs/promises'
165
165
 
166
+ /**
167
+ *
168
+ */
166
169
  async function findFilesWithGqlTag(relativePaths) {
167
170
  const hits = []
168
171
  for (const rel of relativePaths) {
@@ -14,6 +14,6 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
17
+ // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
18
  process.exit(await runRuleCli(import.meta.dirname))
19
19
  }
@@ -31,6 +31,9 @@
31
31
  ### `run(ctx)`
32
32
 
33
33
  ```js
34
+ /**
35
+ *
36
+ */
34
37
  export function run(ctx) {
35
38
  return runStandardRule(import.meta.dirname, ctx)
36
39
  }
@@ -49,7 +52,7 @@ export function run(ctx) {
49
52
 
50
53
  ```js
51
54
  if (isRunAsCli(import.meta.url)) {
52
- // eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit
55
+ // eslint-disable-next-line n/no-process-exit
53
56
  process.exit(await runRuleCli(import.meta.dirname))
54
57
  }
55
58
  ```
@@ -14,6 +14,6 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
17
+ // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
18
  process.exit(await runRuleCli(import.meta.dirname))
19
19
  }
@@ -195,6 +195,7 @@
195
195
 
196
196
  ```js
197
197
  import { check } from './npm/rules/image-avif/js/avif_generation.mjs'
198
+
198
199
  const exitCode = await check(process.cwd())
199
200
  process.exit(exitCode)
200
201
  ```
@@ -14,6 +14,6 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
17
+ // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
18
  process.exit(await runRuleCli(import.meta.dirname))
19
19
  }
@@ -14,6 +14,6 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
17
+ // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
18
  process.exit(await runRuleCli(import.meta.dirname))
19
19
  }
@@ -270,6 +270,10 @@ Set-константи:
270
270
 
271
271
  ```js
272
272
  import { SQL } from 'bun'
273
+
274
+ /**
275
+ *
276
+ */
273
277
  export async function handler(req) {
274
278
  const sql = new SQL(process.env.DATABASE_URL) // <-- порушення
275
279
  return sql`select 1`
@@ -280,6 +284,7 @@ Set-константи:
280
284
 
281
285
  ```js
282
286
  import { sql } from 'bun'
287
+
283
288
  const text = `select * from ${tableName}`
284
289
  sql.unsafe(text) // <-- порушення: немає // allow-unsafe: <reason>
285
290
  ```
@@ -309,6 +314,7 @@ Set-константи:
309
314
 
310
315
  ```js
311
316
  import { sql } from 'bun'
317
+
312
318
  await sql.end() // <-- порушення: немає // allow-pg-leftover: <reason>
313
319
  ```
314
320
 
@@ -14,6 +14,6 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
17
+ // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
18
  process.exit(await runRuleCli(import.meta.dirname))
19
19
  }
@@ -14,6 +14,6 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
17
+ // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
18
  process.exit(await runRuleCli(import.meta.dirname))
19
19
  }
@@ -152,6 +152,7 @@
152
152
 
153
153
  ```mjs
154
154
  import { check } from './utils_imports.mjs'
155
+
155
156
  const exitCode = await check()
156
157
  process.exit(exitCode)
157
158
  ```
@@ -54,6 +54,9 @@ export function run(ctx)
54
54
  ### `run(ctx)`
55
55
 
56
56
  ```js
57
+ /**
58
+ *
59
+ */
57
60
  export function run(ctx) {
58
61
  return runStandardRule(import.meta.dirname, ctx)
59
62
  }
@@ -79,7 +82,7 @@ if (isRunAsCli(import.meta.url)) {
79
82
  - **Дія:** виконує `await runRuleCli(import.meta.dirname)` — повний CLI-сценарій (config-loading, whitelist, summary), а потім завершує процес `process.exit(<exit-code>)` з тим самим кодом, що повернув `runRuleCli` (0 або 1) — це критично для CI/IDE, які орієнтуються на код виходу.
80
83
  - **Side effects:** завершення процесу (`process.exit`), вся I/O `runRuleCli`. Виклики `process.exit` тут спеціально дозволені директивою:
81
84
  ```js
82
- // eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
85
+
83
86
  ```
84
87
 
85
88
  ## Залежності
@@ -14,6 +14,6 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
17
+ // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
18
  process.exit(await runRuleCli(import.meta.dirname))
19
19
  }
@@ -29,6 +29,9 @@
29
29
  ### `run(ctx)`
30
30
 
31
31
  ```js
32
+ /**
33
+ *
34
+ */
32
35
  export function run(ctx) {
33
36
  return runStandardRule(import.meta.dirname, ctx)
34
37
  }
@@ -14,6 +14,6 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
17
+ // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
18
  process.exit(await runRuleCli(import.meta.dirname))
19
19
  }
@@ -252,6 +252,9 @@ const violationsGuard = findUnsafeMssqlInListMissingEmptyGuardInText(content, re
252
252
  Порушення:
253
253
 
254
254
  ```javascript
255
+ /**
256
+ *
257
+ */
255
258
  export async function handler() {
256
259
  const pool = new sql.ConnectionPool(config) // створення на кожен запит
257
260
  await pool.connect()
@@ -326,6 +329,9 @@ await sql.query`SELECT * FROM t WHERE id IN (${rawIds.map(Number)})`
326
329
  Порушення (`missing_guard` — немає `if (!ids.length) throw`):
327
330
 
328
331
  ```javascript
332
+ /**
333
+ *
334
+ */
329
335
  async function load(ids) {
330
336
  await sql.query`SELECT * FROM t WHERE id IN (${ids})`
331
337
  }
@@ -334,6 +340,9 @@ async function load(ids) {
334
340
  Не порушення:
335
341
 
336
342
  ```javascript
343
+ /**
344
+ *
345
+ */
337
346
  async function load(ids) {
338
347
  if (!ids.length) throw new Error('empty')
339
348
  await sql.query`SELECT * FROM t WHERE id IN (${ids})`
@@ -26,6 +26,9 @@
26
26
  ### `run(ctx)`
27
27
 
28
28
  ```js
29
+ /**
30
+ *
31
+ */
29
32
  export function run(ctx) {
30
33
  return runStandardRule(import.meta.dirname, ctx)
31
34
  }
@@ -14,6 +14,6 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
17
+ // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
18
  process.exit(await runRuleCli(import.meta.dirname))
19
19
  }
@@ -74,7 +74,8 @@ regex-перевірці підлягає лише сирий рядок із п
74
74
  Тип `EnvViolation` (внутрішній, описаний через JSDoc `@typedef`):
75
75
 
76
76
  ```js
77
- /** @typedef {{
77
+ /**
78
+ * @typedef {{
78
79
  * line: number,
79
80
  * name: string,
80
81
  * kind: 'process-env' | 'check-env-missing-checkEnv'
@@ -14,6 +14,7 @@ await new Promise(resolve => setTimeout(resolve, ms))
14
14
 
15
15
  ```js
16
16
  import { setTimeout as sleep } from 'node:timers/promises'
17
+
17
18
  await sleep(ms)
18
19
  ```
19
20
 
@@ -243,6 +244,9 @@ function walkAst(
243
244
  import { findPromiseSetTimeoutInText, isPromiseSetTimeoutScanSourceFile } from './promise-settimeout-scan.mjs'
244
245
  import { readFile } from 'node:fs/promises'
245
246
 
247
+ /**
248
+ *
249
+ */
246
250
  async function scanRepo(files) {
247
251
  const violations = []
248
252
  for (const relPath of files) {
@@ -26,6 +26,9 @@
26
26
  ### `run(ctx)`
27
27
 
28
28
  ```js
29
+ /**
30
+ *
31
+ */
29
32
  export function run(ctx) {
30
33
  return runStandardRule(import.meta.dirname, ctx)
31
34
  }
package/rules/k8s/fix.mjs CHANGED
@@ -14,6 +14,6 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
17
+ // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
18
  process.exit(await runRuleCli(import.meta.dirname))
19
19
  }
@@ -22,6 +22,9 @@
22
22
  ### `run(ctx)`
23
23
 
24
24
  ```js
25
+ /**
26
+ *
27
+ */
25
28
  export function run(ctx) {
26
29
  return runStandardRule(import.meta.dirname, ctx)
27
30
  }
@@ -14,6 +14,6 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
17
+ // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
18
  process.exit(await runRuleCli(import.meta.dirname))
19
19
  }
@@ -14,6 +14,6 @@ export function run(ctx) {
14
14
  if (isRunAsCli(import.meta.url)) {
15
15
  // Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
16
16
  // (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
17
- // eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
17
+ // eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
18
18
  process.exit(await runRuleCli(import.meta.dirname))
19
19
  }