@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.
- package/CHANGELOG.md +12 -0
- package/bin/n-cursor.js +25 -13
- package/docs/flow.MD +1364 -0
- package/docs/stryker.config.md +37 -0
- package/docs/vitest.config.md +23 -0
- package/lib/models.mjs +1 -2
- package/package.json +2 -1
- package/rules/abie/fix.mjs +1 -1
- package/rules/bun/docs/fix.md +3 -0
- package/rules/bun/fix.mjs +1 -1
- package/rules/capacitor/fix.mjs +1 -1
- package/rules/changelog/docs/fix.md +3 -0
- package/rules/changelog/fix.mjs +1 -1
- package/rules/ci4/fix.mjs +1 -1
- package/rules/ci4/js/docs/marksman_config.md +1 -0
- package/rules/docker/docs/fix.md +1 -1
- package/rules/docker/fix.mjs +1 -1
- package/rules/docker/lint/docs/lint.md +1 -0
- package/rules/efes/docs/fix.md +2 -1
- package/rules/efes/fix.mjs +1 -1
- package/rules/feedback/fix.mjs +1 -1
- package/rules/ga/fix.mjs +1 -1
- package/rules/ga/js/lint.mjs +1 -1
- package/rules/graphql/docs/fix.md +4 -1
- package/rules/graphql/fix.mjs +1 -1
- package/rules/graphql/lib/docs/graphql-gql-scan.md +3 -0
- package/rules/hasura/fix.mjs +1 -1
- package/rules/image-avif/docs/fix.md +4 -1
- package/rules/image-avif/fix.mjs +1 -1
- package/rules/image-avif/js/docs/avif_generation.md +1 -0
- package/rules/image-compress/fix.mjs +1 -1
- package/rules/js-bun-db/fix.mjs +1 -1
- package/rules/js-bun-db/lib/docs/bun-sql-scan.md +6 -0
- package/rules/js-bun-redis/fix.mjs +1 -1
- package/rules/js-lint/fix.mjs +1 -1
- package/rules/js-lint/js/docs/utils_imports.md +1 -0
- package/rules/js-lint-ci/docs/fix.md +4 -1
- package/rules/js-lint-ci/fix.mjs +1 -1
- package/rules/js-mssql/docs/fix.md +3 -0
- package/rules/js-mssql/fix.mjs +1 -1
- package/rules/js-mssql/lib/docs/mssql-pool-scan.md +9 -0
- package/rules/js-run/docs/fix.md +3 -0
- package/rules/js-run/fix.mjs +1 -1
- package/rules/js-run/lib/docs/check-env-scan.md +2 -1
- package/rules/js-run/lib/docs/promise-settimeout-scan.md +4 -0
- package/rules/k8s/docs/fix.md +3 -0
- package/rules/k8s/fix.mjs +1 -1
- package/rules/nginx-default-tpl/docs/fix.md +3 -0
- package/rules/nginx-default-tpl/fix.mjs +1 -1
- package/rules/npm-module/fix.mjs +1 -1
- package/rules/npm-module/js/header_doc_pointer.mjs +14 -3
- package/rules/php/docs/fix.md +2 -1
- package/rules/php/fix.mjs +1 -1
- package/rules/python/docs/fix.md +4 -1
- package/rules/python/fix.mjs +1 -1
- package/rules/rego/fix.mjs +1 -1
- package/rules/rego/js/lint.mjs +1 -1
- package/rules/release/docs/fix.md +4 -1
- package/rules/release/fix.mjs +1 -1
- package/rules/rust/fix.mjs +1 -1
- package/rules/security/docs/fix.md +1 -1
- package/rules/security/fix.mjs +1 -1
- package/rules/style-lint/docs/fix.md +3 -0
- package/rules/style-lint/fix.mjs +1 -1
- package/rules/tauri/docs/fix.md +4 -1
- package/rules/tauri/fix.mjs +1 -1
- package/rules/test/docs/fix.md +3 -0
- package/rules/test/fix.mjs +1 -1
- package/rules/test/js/no-relative-fs-path.mjs +2 -1
- package/rules/text/docs/fix.md +3 -0
- package/rules/text/fix.mjs +1 -1
- package/rules/text/js/lint.mjs +1 -1
- package/rules/vue/fix.mjs +1 -1
- package/rules/worktree/fix.mjs +1 -1
- package/scripts/auto-rules.mjs +1 -1
- package/scripts/coverage-classify/index.mjs +10 -10
- package/scripts/coverage-fix.mjs +2 -2
- package/scripts/dispatcher/graph/lib/cmd-init.mjs +112 -0
- package/scripts/dispatcher/graph/lib/cmd-invalidate.mjs +96 -0
- package/scripts/dispatcher/graph/lib/cmd-kill.mjs +141 -0
- package/scripts/dispatcher/graph/lib/cmd-plan.mjs +142 -0
- package/scripts/dispatcher/graph/lib/cmd-run.mjs +328 -0
- package/scripts/dispatcher/graph/lib/cmd-scan.mjs +115 -0
- package/scripts/dispatcher/graph/lib/cmd-setup.mjs +111 -0
- package/scripts/dispatcher/graph/lib/cmd-signals.mjs +328 -0
- package/scripts/dispatcher/graph/lib/cmd-status.mjs +131 -0
- package/scripts/dispatcher/graph/lib/cmd-verify.mjs +100 -0
- package/scripts/dispatcher/graph/lib/cmd-watch.mjs +128 -0
- package/scripts/dispatcher/graph/lib/config.mjs +103 -0
- package/scripts/dispatcher/graph/lib/frontmatter.mjs +224 -0
- package/scripts/dispatcher/graph/lib/nnn.mjs +127 -0
- package/scripts/dispatcher/graph/lib/node-state.mjs +157 -0
- package/scripts/dispatcher/graph/lib/scanner.mjs +235 -0
- package/scripts/dispatcher/graph/lib/worktree-ops.mjs +193 -0
- package/scripts/dispatcher/graph-tasks.mjs +92 -0
- package/scripts/dispatcher/index.mjs +3 -3
- package/scripts/dispatcher/lib/docs/events.md +1 -0
- package/scripts/dispatcher/lib/executor.mjs +1 -1
- package/scripts/dispatcher/lib/subagent-runner.mjs +9 -9
- package/scripts/dispatcher/trace.mjs +6 -2
- package/scripts/docs/build-agents-commands.md +1 -0
- package/scripts/docs/cli-entry.md +6 -0
- package/scripts/graph/index.mjs +115 -0
- package/scripts/graph/lib/config.mjs +62 -0
- package/scripts/graph/lib/dag.mjs +161 -0
- package/scripts/graph/lib/frontmatter.mjs +70 -0
- package/scripts/graph/lib/nnn.mjs +77 -0
- package/scripts/graph/lib/state.mjs +110 -0
- package/scripts/graph/scan.mjs +64 -0
- package/scripts/graph/status.mjs +86 -0
- package/scripts/lib/docs/load-cursor-config.md +3 -0
- package/scripts/lib/root-notice.mjs +4 -2
- package/scripts/lib/rule-predicates.mjs +1 -1
- package/scripts/lib/worktree-notice.mjs +14 -7
- package/scripts/lib/worktree.mjs +3 -2
- package/scripts/utils/resolve-js-root.mjs +2 -1
- package/scripts/utils/with-lock.mjs +1 -1
- package/skills/docgen/js/docgen-batch.mjs +7 -7
- package/skills/docgen/js/docgen-extract.mjs +80 -37
- package/skills/docgen/js/docgen-ignore.mjs +1 -1
- package/skills/docgen/js/docgen-prompts.mjs +21 -5
- package/skills/fix/js/llm-worker.mjs +19 -22
- package/skills/fix/js/orchestrator.mjs +6 -7
- package/skills/fix/js/t0.mjs +14 -13
- package/types/bin/n-cursor.d.ts +1 -1
- package/rules/flow/docs/fix.md +0 -152
- package/rules/flow/fix.mjs +0 -18
- package/rules/flow/flow.mdc +0 -127
- package/rules/flow/meta.json +0 -1
- package/scripts/dispatcher/lib/docs/flow-lock.md +0 -161
- package/scripts/dispatcher/lib/docs/flow-resolve.md +0 -267
- package/scripts/dispatcher/lib/flow-plan.mjs +0 -153
- package/scripts/dispatcher/lib/flow-resolve.mjs +0 -156
- package/scripts/dispatcher/lib/flow-signals.mjs +0 -235
- 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.
|
|
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",
|
package/rules/abie/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
|
|
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/bun/docs/fix.md
CHANGED
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
|
|
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/capacitor/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
|
|
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/changelog/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
|
|
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
|
|
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
|
```
|
package/rules/docker/docs/fix.md
CHANGED
|
@@ -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
|
|
166
|
+
// eslint-disable-next-line n/no-process-exit
|
|
167
167
|
process.exit(await runRuleCli(import.meta.dirname))
|
|
168
168
|
}
|
|
169
169
|
```
|
package/rules/docker/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
|
|
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
|
- **Тести/допоміжний код:**
|
package/rules/efes/docs/fix.md
CHANGED
|
@@ -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
|
|
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
|
|
package/rules/efes/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
|
|
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/feedback/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
|
|
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
|
|
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/js/lint.mjs
CHANGED
|
@@ -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
|
|
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
|
|
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
|
```
|
package/rules/graphql/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
|
|
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) {
|
package/rules/hasura/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
|
|
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
|
|
55
|
+
// eslint-disable-next-line n/no-process-exit
|
|
53
56
|
process.exit(await runRuleCli(import.meta.dirname))
|
|
54
57
|
}
|
|
55
58
|
```
|
package/rules/image-avif/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
|
|
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
|
|
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/js-bun-db/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
|
|
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
|
|
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/js-lint/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
|
|
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
|
}
|
|
@@ -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
|
-
|
|
85
|
+
|
|
83
86
|
```
|
|
84
87
|
|
|
85
88
|
## Залежності
|
package/rules/js-lint-ci/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
|
|
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/js-mssql/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
|
|
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})`
|
package/rules/js-run/docs/fix.md
CHANGED
package/rules/js-run/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
|
|
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
|
-
/**
|
|
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) {
|
package/rules/k8s/docs/fix.md
CHANGED
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
|
|
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
|
|
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/npm-module/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
|
|
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
|
}
|