@nitra/cursor 5.3.4 → 5.4.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.
- package/.claude-template/settings.template.json +2 -2
- package/.pi-template/extensions/n-cursor-adr/docs/index.md +13 -24
- package/CHANGELOG.md +11 -0
- package/bin/n-cursor.js +43 -22
- package/lib/docs/models.md +29 -18
- package/lib/docs/omlx-trace.md +51 -0
- package/lib/docs/omlx.md +31 -15
- package/lib/omlx.mjs +2 -5
- package/package.json +1 -1
- package/rules/abie/docs/fix.md +17 -11
- package/rules/adr/docs/fix.md +25 -140
- package/rules/bun/docs/fix.md +18 -151
- package/rules/capacitor/docs/fix.md +16 -13
- package/rules/capacitor/js/docs/platforms.md +31 -43
- package/rules/changelog/docs/fix.md +25 -169
- package/rules/ci4/docs/fix.md +11 -14
- package/rules/doc-files/doc-files.mdc +60 -0
- package/rules/doc-files/docs/fix.md +31 -0
- package/rules/doc-files/fix.mjs +19 -0
- package/{skills → rules}/doc-files/js/docgen-extract.mjs +42 -19
- package/{skills → rules}/doc-files/js/docgen-ignore.mjs +2 -1
- package/{skills → rules}/doc-files/js/docgen-scan.mjs +9 -1
- package/{skills → rules}/doc-files/js/docs/docgen-crc.md +1 -1
- package/{skills → rules}/doc-files/js/docs/docgen-extract-anchors.md +1 -1
- package/{skills → rules}/doc-files/js/docs/docgen-extract.md +2 -2
- package/{skills → rules}/doc-files/js/docs/docgen-files-batch.md +1 -1
- package/{skills → rules}/doc-files/js/docs/docgen-gen.md +1 -1
- package/{skills → rules}/doc-files/js/docs/docgen-ignore.md +4 -4
- package/rules/doc-files/js/docs/docgen-prompts.md +39 -0
- package/rules/doc-files/js/docs/docgen-scan.md +54 -0
- package/rules/doc-files/js/docs/lint.md +36 -0
- package/rules/doc-files/js/docs/units-js.md +31 -0
- package/rules/doc-files/js/docs/units-rs.md +35 -0
- package/rules/doc-files/js/docs/units.md +30 -0
- package/rules/doc-files/js/lint.mjs +96 -0
- package/{skills → rules}/doc-files/js/units-rs.mjs +37 -17
- package/rules/doc-files/lint/docs/lint.md +37 -0
- package/rules/doc-files/lint/lint.mjs +105 -0
- package/rules/doc-files/meta.json +1 -0
- package/rules/docker/docs/fix.md +21 -161
- package/rules/efes/docs/fix.md +23 -194
- package/rules/feedback/docs/fix.md +10 -8
- package/rules/ga/docs/fix.md +10 -5
- package/rules/graphql/docs/fix.md +23 -119
- package/rules/hasura/docs/fix.md +19 -5
- package/rules/hasura/js/docs/internal_urls.md +34 -307
- package/rules/image-avif/docs/fix.md +16 -127
- package/rules/image-compress/docs/fix.md +20 -141
- package/rules/image-compress/js/docs/package_setup.md +22 -182
- package/rules/js-bun-db/docs/fix.md +23 -139
- package/rules/js-bun-db/js/docs/safety.md +33 -221
- package/rules/js-bun-redis/docs/fix.md +25 -114
- package/rules/js-bun-redis/js/docs/imports.md +18 -166
- package/rules/js-lint/docs/fix.md +30 -108
- package/rules/js-lint/js/docs/lint-findings.md +37 -17
- package/rules/js-lint/js/docs/lint.md +22 -238
- package/rules/js-lint/js/docs/tooling.md +34 -331
- package/rules/js-lint-ci/docs/fix.md +16 -149
- package/rules/js-lint-ci/js/docs/lint.md +16 -136
- package/rules/js-mssql/docs/fix.md +18 -123
- package/rules/js-mssql/js/docs/deps.md +28 -251
- package/rules/js-run/docs/fix.md +23 -138
- package/rules/js-run/js/docs/runtime.md +24 -378
- package/rules/k8s/docs/fix.md +18 -123
- package/rules/nginx-default-tpl/docs/fix.md +22 -118
- package/rules/nginx-default-tpl/js/docs/template.md +38 -360
- package/rules/npm-module/docs/fix.md +27 -89
- package/rules/npm-module/js/docs/header_doc_pointer.md +15 -15
- package/rules/npm-module/js/docs/package_structure.md +36 -258
- package/rules/npm-module/js/docs/rule_meta.md +25 -127
- package/rules/npm-module/js/docs/skill_meta.md +18 -180
- package/rules/php/docs/fix.md +21 -98
- package/rules/php/js/docs/tooling.md +20 -143
- package/rules/python/docs/fix.md +25 -157
- package/rules/python/js/docs/applies.md +20 -98
- package/rules/python/js/docs/tooling.md +27 -144
- package/rules/rego/docs/fix.md +24 -112
- package/rules/rego/js/docs/applies.md +20 -164
- package/rules/rego/js/docs/lint.md +15 -110
- package/rules/release/docs/fix.md +16 -114
- package/rules/rust/docs/fix.md +24 -119
- package/rules/rust/js/docs/applies.md +20 -129
- package/rules/security/docs/fix.md +21 -78
- package/rules/security/js/docs/sample_secret.md +23 -182
- package/rules/security/js/docs/trufflehog.md +19 -128
- package/rules/style-lint/docs/fix.md +16 -150
- package/rules/style-lint/js/docs/lint.md +21 -172
- package/rules/style-lint/js/docs/tooling.md +19 -184
- package/rules/tauri/docs/fix.md +26 -152
- package/rules/tauri/js/docs/cargo_mutants_config.md +21 -159
- package/rules/tauri/js/docs/tooling.md +20 -217
- package/rules/test/docs/fix.md +19 -127
- package/rules/test/js/data/stryker_config/docs/stryker.config.baseline.md +15 -127
- package/rules/test/js/data/stryker_config/docs/stryker.config.vue.baseline.md +17 -153
- package/rules/test/js/docs/cargo_mutants_config.md +24 -164
- package/rules/test/js/docs/location.md +24 -126
- package/rules/test/js/docs/no-process-chdir.md +20 -151
- package/rules/test/js/docs/no-relative-fs-path.md +24 -261
- package/rules/test/js/docs/stryker_config.md +48 -148
- package/rules/test/js/docs/vitest-config-pool-forks.md +21 -164
- package/rules/text/docs/fix.md +25 -113
- package/rules/text/js/docs/forbidden-prettier.md +21 -132
- package/rules/text/js/docs/formatting.md +60 -251
- package/rules/text/js/docs/lint.md +17 -114
- package/rules/vue/docs/fix.md +25 -118
- package/rules/vue/js/docs/packages.md +25 -323
- package/rules/worktree/docs/fix.md +31 -150
- package/scripts/coverage-classify/docs/index.md +23 -209
- package/scripts/coverage-classify/docs/verdict-schema.md +14 -159
- package/scripts/dispatcher/docs/trace.md +35 -0
- package/scripts/docs/auto-rules.md +37 -361
- package/scripts/docs/lint-cli.md +12 -13
- package/scripts/docs/post-tool-use-fix.md +16 -15
- package/scripts/docs/skills-cli.md +26 -23
- package/scripts/docs/sync-claude-config.md +94 -34
- package/scripts/docs/worktree-cli.md +11 -34
- package/scripts/lib/docs/assert-project-root.md +14 -16
- package/scripts/lib/docs/changed-files.md +24 -139
- package/scripts/lib/docs/discover-check-rules-from-cursor.md +14 -146
- package/scripts/lib/docs/rule-predicates.md +20 -17
- package/scripts/lib/docs/run-rule-cli.md +14 -18
- package/scripts/lib/docs/run-rule.md +13 -20
- package/scripts/lib/docs/run-standard-rule.md +12 -15
- package/scripts/lib/docs/sync-gitignore-worktree.md +15 -18
- package/scripts/lib/rule-predicates.mjs +1 -1
- package/scripts/sync-claude-config.mjs +4 -1
- package/scripts/utils/docs/with-lock.md +19 -12
- package/scripts/utils/with-lock.mjs +4 -2
- package/skills/doc-aggregate/SKILL.md +2 -2
- package/skills/doc-aggregate/js/docgen-ignore.mjs +6 -6
- package/skills/doc-aggregate/js/docs/docgen-ignore.md +1 -1
- package/skills/doc-aggregate/js/docs/docgen-scan.md +78 -0
- package/skills/doc-files/.changes/260612-0031.md +5 -0
- package/skills/doc-files/.changes/260612-0036.md +5 -0
- package/skills/doc-files/.changes/260612-0114.md +5 -0
- package/skills/doc-files/SKILL.md +6 -6
- package/skills/fix/js/docs/llm-worker.md +17 -15
- package/skills/fix/js/docs/orchestrator.md +30 -23
- package/skills/fix/js/docs/t0.md +26 -16
- package/skills/start-check/js/docs/check.md +26 -22
- package/skills/taze/js/docs/diff.md +44 -20
- package/skills/doc-files/js/docs/docgen-prompts.md +0 -32
- package/skills/doc-files/js/docs/docgen-scan.md +0 -25
- package/skills/doc-files/js/docs/units-rs.md +0 -35
- /package/{skills → rules}/doc-files/js/docgen-crc.mjs +0 -0
- /package/{skills → rules}/doc-files/js/docgen-extract-anchors.mjs +0 -0
- /package/{skills → rules}/doc-files/js/docgen-files-batch.mjs +0 -0
- /package/{skills → rules}/doc-files/js/docgen-gen.mjs +0 -0
- /package/{skills → rules}/doc-files/js/docgen-prompts.mjs +0 -0
- /package/{skills → rules}/doc-files/js/units-js.mjs +0 -0
- /package/{skills → rules}/doc-files/js/units.mjs +0 -0
package/rules/docker/docs/fix.md
CHANGED
|
@@ -1,177 +1,37 @@
|
|
|
1
1
|
---
|
|
2
2
|
docgen:
|
|
3
3
|
source: npm/rules/docker/fix.mjs
|
|
4
|
-
crc:
|
|
4
|
+
crc: 38cf876b
|
|
5
|
+
score: 100
|
|
5
6
|
---
|
|
6
7
|
|
|
7
|
-
# fix.mjs
|
|
8
|
+
# fix.mjs
|
|
8
9
|
|
|
9
10
|
## Огляд
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
Запуск правила приймає контекст прогону, застосовує JS-занепокоєні до політики до mdc-refs та повертає результат.
|
|
12
13
|
|
|
13
|
-
|
|
14
|
+
Виконання у режимі CLI виконує повний еквівалент команди `npx @nitra/cursor fix <id>`, включаючи завантаження конфігурації, перевірку дозволених елементів та підбиття підсумку.
|
|
14
15
|
|
|
15
|
-
|
|
16
|
-
2. **Standalone role** — якщо файл запущений напряму (`bun npm/rules/docker/fix.mjs` або через `import.meta.url` як головний модуль), він виконується як автономний CLI-ентрі: завантажує конфіг, застосовує whitelist, друкує summary та повертає exit-code, повністю еквівалентний `npx @nitra/cursor fix docker`.
|
|
16
|
+
## Поведінка
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
1. Запуск правила.
|
|
19
|
+
* Приймає контекст прогону.
|
|
20
|
+
* Виконує застосування JS-занепокоєних до політики до mdc-refs.
|
|
21
|
+
* Повертає результат.
|
|
19
22
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
23
|
+
2. Виконання у режимі CLI.
|
|
24
|
+
* Викликається через оркестрацію CLI.
|
|
25
|
+
* Виконує повний еквівалент команди `npx @nitra/cursor fix <id>`.
|
|
26
|
+
* Виконує завантаження конфігурації, перевірку дозволених елементів та підбиття підсумку.
|
|
24
27
|
|
|
25
|
-
|
|
28
|
+
## Публічний API
|
|
26
29
|
|
|
27
|
-
|
|
30
|
+
run — запускає правило: applies → JS-concerns → policy → mdc-refs (через runStandardRule).
|
|
31
|
+
Library mode — викликається CLI orchestration через `import + run`.
|
|
28
32
|
|
|
29
|
-
|
|
30
|
-
| ----------- | ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
31
|
-
| `run(ctx?)` | named export, `function` | Library-API: запустити стандартний fix-pipeline правила `docker`. Повертає `Promise<number>` з exit-кодом (`0` — OK, `1` — порушення/помилка). |
|
|
33
|
+
## Гарантії поведінки
|
|
32
34
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
### Сигнатура `run`
|
|
38
|
-
|
|
39
|
-
```js
|
|
40
|
-
export function run(ctx)
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
- **Параметри:**
|
|
44
|
-
- `ctx` _(optional)_ — об’єкт типу `RuleContext` (з `../../scripts/lib/run-standard-rule.mjs`). Передається оркестратором, коли правило запускають у складі загального прогону «всіх правил». Може містити, зокрема, спільний `walkCache` (для уникнення повторного `walk`/`glob` файлів кожним правилом), накопичений summary, прапори дебагу тощо.
|
|
45
|
-
- **Повертає:** `Promise<number>` — exit-код прогону: `0` коли правило не знайшло порушень або успішно їх виправило, `1` коли лишились незавершені порушення чи виникла помилка.
|
|
46
|
-
- **Side effects:** делегуються у `runStandardRule` — це може бути запис у файли проєкту (auto-fix), читання конфіга/файлів, запис у stdout/stderr (summary, прогрес-логи), а також модифікація переданого `ctx` (наприклад, заповнення `walkCache`).
|
|
47
|
-
|
|
48
|
-
## Функції
|
|
49
|
-
|
|
50
|
-
### `run(ctx)`
|
|
51
|
-
|
|
52
|
-
**Сигнатура:** `export function run(ctx) → Promise<number>`
|
|
53
|
-
|
|
54
|
-
**Призначення:** library-API правила `docker` для CLI-оркестратора `@nitra/cursor`. Виконує повний fix-pipeline правила: `applies → JS-concerns → policy → mdc-refs`.
|
|
55
|
-
|
|
56
|
-
**Параметри:**
|
|
57
|
-
|
|
58
|
-
- `ctx` — _(optional, об’єкт)_ контекст прогону, який передає зовнішній оркестратор. Тип описаний у JSDoc-import-посиланні `import('../../scripts/lib/run-standard-rule.mjs').RuleContext`. Може містити:
|
|
59
|
-
- `walkCache` — спільний кеш обходу/glob файлів, щоб правила не дублювали I/O;
|
|
60
|
-
- інші службові поля (summary-агрегатор, прапори, конфіг), залежно від реалізації `run-standard-rule.mjs`.
|
|
61
|
-
- Якщо викликати без аргументу, `runStandardRule` створить свій локальний контекст за замовчуванням.
|
|
62
|
-
|
|
63
|
-
**Повертає:** `Promise<number>` — exit-код. За конвенцією репозиторію: `0` — порушень не знайдено / усе виправлено, `1` — лишились порушення або сталася помилка.
|
|
64
|
-
|
|
65
|
-
**Side effects:** не виконує жодних побічних ефектів безпосередньо — лише повертає результат виклику `runStandardRule(import.meta.dirname, ctx)`. Усе I/O й auto-fix належить `runStandardRule` (читання файлів проєкту, потенційні модифікації файлів, запис у stdout, мутація `ctx.walkCache`).
|
|
66
|
-
|
|
67
|
-
**Ключова деталь:** першим аргументом у `runStandardRule` передається `import.meta.dirname` — абсолютний шлях до теки, в якій лежить цей `fix.mjs`. Звідти `runStandardRule` витягує ID правила (`docker` — остання частина шляху) і завантажує підкомпоненти з `js/`, `lint/`, `policy/`. Завдяки цьому `fix.mjs` цілком універсальний і не містить літерала `"docker"`.
|
|
68
|
-
|
|
69
|
-
## Залежності
|
|
70
|
-
|
|
71
|
-
### Внутрішні (з самого пакета `@nitra/cursor`)
|
|
72
|
-
|
|
73
|
-
| Імпорт | Звідки | Призначення |
|
|
74
|
-
| ----------------- | ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
75
|
-
| `isRunAsCli` | `../../scripts/lib/run-rule-cli.mjs` | Детектор «чи запущено цей файл як головний модуль процесу (CLI)». Зазвичай порівнює `import.meta.url` з `pathToFileURL(process.argv[1])`. |
|
|
76
|
-
| `runRuleCli` | `../../scripts/lib/run-rule-cli.mjs` | Standalone-обгортка: завантаження конфігу, застосування whitelist, друк summary, повернення exit-коду. Еквівалент `npx @nitra/cursor fix <id>`. |
|
|
77
|
-
| `runStandardRule` | `../../scripts/lib/run-standard-rule.mjs` | Універсальний fix-pipeline правила: послідовно прогоняє фази `applies → JS-concerns → policy → mdc-refs`, читаючи реалізації з підтек правила. |
|
|
78
|
-
|
|
79
|
-
Розв’язання шляхів:
|
|
80
|
-
|
|
81
|
-
- `../../scripts/lib/...` від `npm/rules/docker/fix.mjs` → `npm/scripts/lib/run-rule-cli.mjs` і `npm/scripts/lib/run-standard-rule.mjs`.
|
|
82
|
-
|
|
83
|
-
### Зовнішні
|
|
84
|
-
|
|
85
|
-
Власних `node:`/npm-залежностей файл не імпортує. Опосередковано (через `runStandardRule` і `runRuleCli`) використовуються стандартні модулі для роботи з FS/процесом, але до цього файлу це не належить.
|
|
86
|
-
|
|
87
|
-
### Структурні залежності (runtime-конвенції)
|
|
88
|
-
|
|
89
|
-
Хоч `fix.mjs` нічого з них не імпортує статично, для коректної роботи правила в директорії `npm/rules/docker/` мають існувати:
|
|
90
|
-
|
|
91
|
-
- `meta.json` — метадані правила (ID, опис, applies-умови);
|
|
92
|
-
- `docker.mdc` — Cursor rule-документ, на який звіряються mdc-refs;
|
|
93
|
-
- `js/` — JS-специфічні fix-чеки правила (фаза _JS-concerns_);
|
|
94
|
-
- `lint/` — lint-перевірки (читаються відповідним check-режимом);
|
|
95
|
-
- `policy/` — policy-перевірки (фаза _policy_).
|
|
96
|
-
|
|
97
|
-
`runStandardRule` сам шукає й підвантажує ці компоненти за `import.meta.dirname`.
|
|
98
|
-
|
|
99
|
-
## Потік виконання / Використання
|
|
100
|
-
|
|
101
|
-
### Сценарій 1 — Library mode (виклик з оркестратора)
|
|
102
|
-
|
|
103
|
-
Так правило запускає `@nitra/cursor` під час команд типу `npx @nitra/cursor fix` (усі правила) або `npx @nitra/cursor fix docker` (одне правило, але через диспетчер):
|
|
104
|
-
|
|
105
|
-
1. Оркестратор робить динамічний `import('npm/rules/docker/fix.mjs')`.
|
|
106
|
-
2. Отримує функцію `run` з експортів.
|
|
107
|
-
3. Підготовлює спільний `ctx` (наприклад, з `walkCache`) і викликає `await run(ctx)`.
|
|
108
|
-
4. `run` повертає управління у `runStandardRule(import.meta.dirname, ctx)`, який:
|
|
109
|
-
- визначає ID правила як `basename(import.meta.dirname)` = `docker`;
|
|
110
|
-
- читає `meta.json` правила;
|
|
111
|
-
- виконує фазу `applies` — пропускає правило, якщо воно нерелевантне;
|
|
112
|
-
- запускає JS-concerns → policy → mdc-refs;
|
|
113
|
-
- повертає exit-код (`0`/`1`).
|
|
114
|
-
5. Оркестратор додає результат до загального summary й переходить до наступного правила.
|
|
115
|
-
|
|
116
|
-
Гілка `if (isRunAsCli(...))` у цьому сценарії **не виконується**, бо файл імпортовано як модуль, а не запущено напряму.
|
|
117
|
-
|
|
118
|
-
### Сценарій 2 — Standalone mode (прямий запуск)
|
|
119
|
-
|
|
120
|
-
Використовується розробником або IDE/CI-кроком напряму, без проходу через головний `bin/cursor.mjs`:
|
|
121
|
-
|
|
122
|
-
```bash
|
|
123
|
-
bun npm/rules/docker/fix.mjs
|
|
124
|
-
# або
|
|
125
|
-
node npm/rules/docker/fix.mjs
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
1. Node/Bun виконує файл як модуль-точку входу.
|
|
129
|
-
2. Імпорти на верхньому рівні підтягують `isRunAsCli`, `runRuleCli`, `runStandardRule`.
|
|
130
|
-
3. Експорт `run` реєструється (на випадок, якщо хтось одночасно імпортує цей файл).
|
|
131
|
-
4. Виконується top-level блок:
|
|
132
|
-
|
|
133
|
-
```js
|
|
134
|
-
if (isRunAsCli(import.meta.url)) {
|
|
135
|
-
process.exit(await runRuleCli(import.meta.dirname))
|
|
136
|
-
}
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
- `isRunAsCli(import.meta.url)` повертає `true`, бо файл є головним модулем процесу.
|
|
140
|
-
- `await runRuleCli(import.meta.dirname)` виконує повноцінний standalone-pipeline: завантаження конфіга, whitelist, виклик внутрішнього аналогу `run` (тобто `runStandardRule`), друк summary.
|
|
141
|
-
- `process.exit(<code>)` завершує процес із отриманим exit-кодом, щоб CI / IDE могли правильно інтерпретувати успіх/помилку.
|
|
142
|
-
|
|
143
|
-
5. Коментарі в коді явно фіксують виняток ESLint: `n/no-process-exit` і `unicorn/no-process-exit` свідомо вимкнено саме для цього рядка, бо standalone-ентрі **зобов’язаний** повертати exit-код процесу.
|
|
144
|
-
|
|
145
|
-
### Інваріанти / контракти
|
|
146
|
-
|
|
147
|
-
- ID правила завжди дорівнює імені теки, де лежить `fix.mjs` (тут — `docker`). Хардкод відсутній — переміщення в іншу теку автоматично змінить ID, тому файл не можна копіювати без перейменування теки.
|
|
148
|
-
- `run` має лишатися **named export** `run` (не default) — оркестратор шукає саме це ім’я.
|
|
149
|
-
- Top-level `await runRuleCli(...)` працює завдяки тому, що файл є ES-модулем (`.mjs`) із підтримкою top-level await.
|
|
150
|
-
- Гілка `isRunAsCli` повинна лишатися **єдиним** side-effect блоком на верхньому рівні; будь-яка інша робота на модульному рівні зламає library mode.
|
|
151
|
-
|
|
152
|
-
## Rebuild Test
|
|
153
|
-
|
|
154
|
-
З цієї документації можна реконструювати файл-еквівалент:
|
|
155
|
-
|
|
156
|
-
```js
|
|
157
|
-
import { isRunAsCli, runRuleCli } from '../../scripts/lib/run-rule-cli.mjs'
|
|
158
|
-
import { runStandardRule } from '../../scripts/lib/run-standard-rule.mjs'
|
|
159
|
-
|
|
160
|
-
/**
|
|
161
|
-
* Запускає правило: applies → JS-concerns → policy → mdc-refs.
|
|
162
|
-
* Library mode: викликається CLI orchestration через `import + run(ctx)`.
|
|
163
|
-
* @param {import('../../scripts/lib/run-standard-rule.mjs').RuleContext} [ctx]
|
|
164
|
-
* @returns {Promise<number>} 0 — OK, 1 — порушення
|
|
165
|
-
*/
|
|
166
|
-
export function run(ctx) {
|
|
167
|
-
return runStandardRule(import.meta.dirname, ctx)
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
if (isRunAsCli(import.meta.url)) {
|
|
171
|
-
// Standalone-ентрі: повний еквівалент `npx @nitra/cursor fix <id>`.
|
|
172
|
-
// eslint-disable-next-line n/no-process-exit
|
|
173
|
-
process.exit(await runRuleCli(import.meta.dirname))
|
|
174
|
-
}
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
Семантично та функціонально такий код тотожний оригіналу: дві ролі модуля (library `run` + standalone main), делегування у `runStandardRule`/`runRuleCli`, ID правила визначається через `import.meta.dirname`, exit-код процесу повертається лише у standalone-режимі.
|
|
35
|
+
- Read-only: файл не виконує операцій запису у файлову систему.
|
|
36
|
+
- Кешує результати в межах одного прогону.
|
|
37
|
+
- Не звертається до мережі.
|
package/rules/efes/docs/fix.md
CHANGED
|
@@ -1,210 +1,39 @@
|
|
|
1
1
|
---
|
|
2
2
|
docgen:
|
|
3
3
|
source: npm/rules/efes/fix.mjs
|
|
4
|
-
crc:
|
|
4
|
+
crc: 38cf876b
|
|
5
|
+
score: 100
|
|
5
6
|
---
|
|
6
7
|
|
|
7
|
-
#
|
|
8
|
+
# fix.mjs
|
|
8
9
|
|
|
9
10
|
## Огляд
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
Виконує застосування політики JS-занепокоєних та політики на наданому контексті прогону, генеруючи посилання MDC та повертаючи результат.
|
|
12
13
|
|
|
13
|
-
|
|
14
|
-
2. **Standalone mode** — якщо файл запущено напряму (наприклад, `bun npm/rules/efes/fix.mjs`), він виконує повний CLI-цикл правила (завантаження конфігу, whitelist, summary), еквівалентний `npx @nitra/cursor fix efes`, і завершує процес із відповідним exit-кодом для CI/IDE.
|
|
14
|
+
Виконується при запуску через командний рядок, виконуючи повний еквівалент команди `npx @nitra/cursor fix <id>` та повертаючи код виходу.
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
## Поведінка
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
1. Запуск правила.
|
|
19
|
+
* Приймає контекст прогону.
|
|
20
|
+
* Виконує застосування JS-занепокоєних.
|
|
21
|
+
* Застосовує політику.
|
|
22
|
+
* Генерує посилання MDC.
|
|
23
|
+
* Повертає результат прогону.
|
|
19
24
|
|
|
20
|
-
|
|
25
|
+
2. Запуск у режимі CLI.
|
|
26
|
+
* Виконується при запуску через CLI.
|
|
27
|
+
* Виконує повний еквівалент команди `npx @nitra/cursor fix <id>`.
|
|
28
|
+
* Повертає код виходу.
|
|
21
29
|
|
|
22
|
-
|
|
23
|
-
| ------- | ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
|
|
24
|
-
| `run` | `(ctx?: RuleContext) => Promise<number>` | Library API — викликається CLI-оркестратором `@nitra/cursor` для запуску правила в межах одного спільного прогону над монорепо. |
|
|
30
|
+
## Публічний API
|
|
25
31
|
|
|
26
|
-
|
|
32
|
+
run — запускає правило: applies → JS-concerns → policy → mdc-refs (через runStandardRule).
|
|
33
|
+
Library mode — викликається CLI orchestration через `import + run`.
|
|
27
34
|
|
|
28
|
-
|
|
35
|
+
## Гарантії поведінки
|
|
29
36
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
- **Параметри**:
|
|
35
|
-
- `ctx` _(optional)_ — об’єкт типу `RuleContext`, імпортований із `npm/scripts/lib/run-standard-rule.mjs`. Містить розділяємий між правилами стан прогону: зокрема `walkCache` (кеш обходу файлів монорепо), а також іншу контекстну інформацію, передану CLI-оркестратором. Якщо `ctx` не передано (наприклад, при ad-hoc виклику), `runStandardRule` створює власний внутрішній контекст.
|
|
36
|
-
- **Повертає**: `Promise<number>` —
|
|
37
|
-
- `0` — правило не знайшло порушень (OK);
|
|
38
|
-
- `1` — є щонайменше одне порушення (fail).
|
|
39
|
-
- **Сторонні ефекти**:
|
|
40
|
-
- Сам `run` нічого не пише в `stdout`/`stderr` напряму, проте делегована функція `runStandardRule` веде логування прогресу, виводить summary порушень і — за потреби — модифікує файли проєкту (`autofix`).
|
|
41
|
-
- Може читати файлову систему монорепо (через walk), читати конфіг `@nitra/cursor` та `meta.json` правила.
|
|
42
|
-
- Не викликає `process.exit` у library mode — exit-код доручений викликаючій стороні.
|
|
43
|
-
|
|
44
|
-
## Функції
|
|
45
|
-
|
|
46
|
-
### `run(ctx)`
|
|
47
|
-
|
|
48
|
-
#### Сигнатура
|
|
49
|
-
|
|
50
|
-
```js
|
|
51
|
-
/**
|
|
52
|
-
* Запускає правило: applies → JS-concerns → policy → mdc-refs (через runStandardRule).
|
|
53
|
-
* Library mode: викликається CLI orchestration через `import + run(ctx)`.
|
|
54
|
-
* @param {import('../../scripts/lib/run-standard-rule.mjs').RuleContext} [ctx] контекст прогону (walkCache тощо)
|
|
55
|
-
* @returns {Promise<number>} 0 — OK, 1 — порушення
|
|
56
|
-
*/
|
|
57
|
-
export function run(ctx) {
|
|
58
|
-
return runStandardRule(import.meta.dirname, ctx)
|
|
59
|
-
}
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
#### Параметри
|
|
63
|
-
|
|
64
|
-
| Ім’я | Тип | Обов’язковий | Опис |
|
|
65
|
-
| ----- | -------------------------------------------- | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
66
|
-
| `ctx` | `RuleContext` (див. `run-standard-rule.mjs`) | ні | Спільний контекст прогону, який оркестратор `@nitra/cursor` створює один раз для всієї пачки правил. Дозволяє ділити дорогий стан (наприклад, `walkCache` — список відсканованих файлів) між правилами без повторного обходу ФС. |
|
|
67
|
-
|
|
68
|
-
#### Повертає
|
|
69
|
-
|
|
70
|
-
`Promise<number>` — `0` або `1`. Семантика — звичайна для UNIX exit codes:
|
|
71
|
-
|
|
72
|
-
- `0` — все добре, правило `efes` не зафіксувало порушень.
|
|
73
|
-
- `1` — правило знайшло хоча б одне порушення (CI має впасти).
|
|
74
|
-
|
|
75
|
-
#### Логіка
|
|
76
|
-
|
|
77
|
-
Функція складається з єдиного рядка — `return runStandardRule(import.meta.dirname, ctx)`. Тобто:
|
|
78
|
-
|
|
79
|
-
1. Беремо абсолютний шлях директорії, у якій лежить **цей** `fix.mjs` (`import.meta.dirname` дає `.../npm/rules/efes`).
|
|
80
|
-
2. Передаємо цей шлях як перший аргумент у `runStandardRule` — щоб бібліотечна функція знала, **яке саме правило** запускає (звідки читати `meta.json`, `efes.mdc`, `policy/*` тощо).
|
|
81
|
-
3. Передаємо отриманий `ctx` (або `undefined`).
|
|
82
|
-
4. Повертаємо отриману `Promise<number>` — без обгортки, без додаткової обробки.
|
|
83
|
-
|
|
84
|
-
#### Сторонні ефекти
|
|
85
|
-
|
|
86
|
-
Усі побічні ефекти зосереджені всередині `runStandardRule` (читання файлів, walk, виконання checks, можливі autofix-записи). Сам `run` лише проксує виклик.
|
|
87
|
-
|
|
88
|
-
### Top-level CLI-блок (без імені, не функція)
|
|
89
|
-
|
|
90
|
-
```js
|
|
91
|
-
if (isRunAsCli(import.meta.url)) {
|
|
92
|
-
// eslint-disable-next-line n/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
|
|
93
|
-
process.exit(await runRuleCli(import.meta.dirname))
|
|
94
|
-
}
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
#### Поведінка
|
|
98
|
-
|
|
99
|
-
- Виконується **тільки** коли модуль запущено як CLI-точку входу (`bun npm/rules/efes/fix.mjs` або `node ...`). Перевірка `isRunAsCli(import.meta.url)` порівнює URL модуля з `process.argv[1]` (стандартна ідіома для ESM).
|
|
100
|
-
- Якщо умова виконалась — асинхронно (через `await` на top-level, що дозволяє ESM) викликає `runRuleCli(import.meta.dirname)`, який реалізує **повний CLI-цикл**:
|
|
101
|
-
- завантаження конфігу `@nitra/cursor`;
|
|
102
|
-
- застосування whitelist/ignore;
|
|
103
|
-
- запуск самого правила (через ту саму `runStandardRule` або еквівалентний механізм);
|
|
104
|
-
- друк summary;
|
|
105
|
-
- повернення exit-коду.
|
|
106
|
-
- Завершує процес через `process.exit(...)` із отриманим кодом (0 або 1).
|
|
107
|
-
|
|
108
|
-
#### Чому є коментар `eslint-disable-next-line`
|
|
109
|
-
|
|
110
|
-
У проєкті заборонено `process.exit` (`n/no-process-exit`, `unicorn/no-process-exit`) — але standalone entry-point **повинен** повертати exit-код, інакше CI не зрозуміє результат. Виключення оформлене явним коментарем із поясненням («standalone entry-point має повертати exit-code для CI/IDE»), щоб лінт не падав.
|
|
111
|
-
|
|
112
|
-
#### Чому є подвійний кінець рядка / два правила в одному disable
|
|
113
|
-
|
|
114
|
-
Бо обидва правила (`n/no-process-exit` від `eslint-plugin-n` і `unicorn/no-process-exit` від `eslint-plugin-unicorn`) забороняють те саме незалежно — disable має покривати обидва.
|
|
115
|
-
|
|
116
|
-
## Залежності
|
|
117
|
-
|
|
118
|
-
### Внутрішні (з того ж монорепо)
|
|
119
|
-
|
|
120
|
-
| Шлях | Що імпортується | Призначення |
|
|
121
|
-
| ----------------------------------------- | -------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
122
|
-
| `../../scripts/lib/run-rule-cli.mjs` | `isRunAsCli`, `runRuleCli` | `isRunAsCli` — детектор «модуль виконано напряму». `runRuleCli` — повний CLI-обгортка для standalone-режиму (config loading, whitelist, summary). |
|
|
123
|
-
| `../../scripts/lib/run-standard-rule.mjs` | `runStandardRule`, тип `RuleContext` (через JSDoc) | Бібліотечна реалізація стандартного потоку правила: `applies → JS-concerns → policy → mdc-refs`. |
|
|
124
|
-
|
|
125
|
-
Шляхи з `../../` ведуть на `npm/scripts/lib/` (бо файл лежить у `npm/rules/efes/`).
|
|
126
|
-
|
|
127
|
-
### Зовнішні
|
|
128
|
-
|
|
129
|
-
Жодних `npm`-залежностей файл не імпортує напряму — усі вони транзитивно підвантажуються через `runStandardRule` / `runRuleCli`.
|
|
130
|
-
|
|
131
|
-
### Файли поруч (через `import.meta.dirname`)
|
|
132
|
-
|
|
133
|
-
Бібліотечні функції очікують у директорії правила (`npm/rules/efes/`) певні файли — їх імпортує не `fix.mjs` напряму, а саме `runStandardRule`/`runRuleCli`:
|
|
134
|
-
|
|
135
|
-
- `meta.json` — метадані правила (id, applies, policy hints, тощо);
|
|
136
|
-
- `efes.mdc` — людиночитаний опис правила (Markdown + frontmatter);
|
|
137
|
-
- `policy/` — директорія з policy-чеками правила.
|
|
138
|
-
|
|
139
|
-
## Потік виконання / Використання
|
|
140
|
-
|
|
141
|
-
### Сценарій A — виклик з CLI `@nitra/cursor` (library mode)
|
|
142
|
-
|
|
143
|
-
```text
|
|
144
|
-
$ npx @nitra/cursor fix
|
|
145
|
-
└─ CLI оркестратор будує список правил і прогонить кожне:
|
|
146
|
-
└─ import('npm/rules/efes/fix.mjs')
|
|
147
|
-
└─ run(ctx)
|
|
148
|
-
└─ runStandardRule('.../npm/rules/efes', ctx)
|
|
149
|
-
├─ читає meta.json + efes.mdc
|
|
150
|
-
├─ застосовує applies-фільтри
|
|
151
|
-
├─ запускає JS-concerns (eslint-подібні чеки)
|
|
152
|
-
├─ запускає policy/* (специфічні чеки правила)
|
|
153
|
-
└─ перевіряє mdc-refs (узгодженість документації)
|
|
154
|
-
└─ повертає 0 / 1
|
|
155
|
-
└─ оркестратор агрегує exit-коди всіх правил
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
У цьому сценарії **жодних виходів через `process.exit`** із цього файлу — exit-код повертає оркестратор уже наприкінці всього прогону.
|
|
159
|
-
|
|
160
|
-
### Сценарій B — прямий запуск файлу (standalone mode)
|
|
161
|
-
|
|
162
|
-
```text
|
|
163
|
-
$ bun npm/rules/efes/fix.mjs
|
|
164
|
-
|
|
165
|
-
1. ESM завантажує модуль.
|
|
166
|
-
2. На етапі імпорту виконуються top-level statements.
|
|
167
|
-
3. `isRunAsCli(import.meta.url)` -> true.
|
|
168
|
-
4. `await runRuleCli(import.meta.dirname)`:
|
|
169
|
-
- повністю емулює `npx @nitra/cursor fix efes`;
|
|
170
|
-
- завантажує конфіг проєкту, whitelist;
|
|
171
|
-
- запускає правило;
|
|
172
|
-
- виводить summary в stdout/stderr.
|
|
173
|
-
5. `process.exit(<code>)` — повертає exit-код shell-у / CI / IDE.
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
Це зручно для:
|
|
177
|
-
|
|
178
|
-
- швидкого ad-hoc запуску однієї конкретної перевірки під час дебагу правила;
|
|
179
|
-
- інтеграції в IDE-таски (наприклад, окремі run configurations VSCode/JetBrains);
|
|
180
|
-
- ізольованого прогону в pre-commit hook на одне правило.
|
|
181
|
-
|
|
182
|
-
### Сценарій C — імпорт із тестів
|
|
183
|
-
|
|
184
|
-
```js
|
|
185
|
-
import { run } from 'npm/rules/efes/fix.mjs'
|
|
186
|
-
|
|
187
|
-
const code = await run() // 0 або 1
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
CLI-блок **не запускається** (бо файл не є entry-point процесу), а `run` доступний як звичайна функція. Це дає змогу писати unit/e2e-тести правила без spawn-у дочірнього процесу.
|
|
191
|
-
|
|
192
|
-
### Інваріанти / нюанси
|
|
193
|
-
|
|
194
|
-
- `import.meta.dirname` доступний у Node ≥ 20.11 та Bun. Якщо середовище старіше — потрібен fallback через `path.dirname(fileURLToPath(import.meta.url))`. У монорепо `@nitra/cursor` офіційно підтримується Bun-середовище, тому це не проблема.
|
|
195
|
-
- Top-level `await` працює тільки в ESM (`.mjs`) — саме тому файл має розширення `.mjs`, а не `.js`.
|
|
196
|
-
- Дві ролі файлу (library + standalone) — це усвідомлений патерн «dual entry-point»: ESM-import не запускає CLI-блок, бо `isRunAsCli` повертає `false`.
|
|
197
|
-
- Файл навмисно ідентичний по структурі з усіма іншими `npm/rules/<id>/fix.mjs`. Уся специфіка правила `efes` живе в сусідніх файлах (`meta.json`, `efes.mdc`, `policy/`) — у самому `fix.mjs` нічого правило-специфічного немає, окрім розташування.
|
|
198
|
-
|
|
199
|
-
## Rebuild Test
|
|
200
|
-
|
|
201
|
-
Уявно «перебудувавши» файл лише за цією документацією, маємо отримати:
|
|
202
|
-
|
|
203
|
-
- ESM-модуль `.mjs` із двома імпортами зі спільної бібліотеки `npm/scripts/lib/`:
|
|
204
|
-
- `{ isRunAsCli, runRuleCli }` із `../../scripts/lib/run-rule-cli.mjs`;
|
|
205
|
-
- `{ runStandardRule }` із `../../scripts/lib/run-standard-rule.mjs`.
|
|
206
|
-
- Один іменований експорт `run(ctx)` із JSDoc, що описує параметр `ctx` як `RuleContext` (тип взято через `import('...')` JSDoc-нотацію) і повертає `Promise<number>` (`0` — OK, `1` — порушення). Тіло — один рядок `return runStandardRule(import.meta.dirname, ctx)`.
|
|
207
|
-
- Top-level guard `if (isRunAsCli(import.meta.url)) { process.exit(await runRuleCli(import.meta.dirname)) }` із коментарем-disable для двох ESLint-правил (`n/no-process-exit`, `unicorn/no-process-exit`) і поясненням «standalone entry-point має повертати exit-code для CI/IDE».
|
|
208
|
-
- Жодних інших declarations, експортів чи побічних ефектів.
|
|
209
|
-
|
|
210
|
-
Такий «реконструйований» файл функціонально й текстово збігається з оригіналом `npm/rules/efes/fix.mjs`.
|
|
37
|
+
- Read-only: файл не виконує операцій запису у файлову систему.
|
|
38
|
+
- Кешує результати в межах одного прогону.
|
|
39
|
+
- Не звертається до мережі.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
docgen:
|
|
3
3
|
source: npm/rules/feedback/fix.mjs
|
|
4
|
-
crc:
|
|
4
|
+
crc: 38cf876b
|
|
5
5
|
score: 100
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -9,19 +9,21 @@ docgen:
|
|
|
9
9
|
|
|
10
10
|
## Огляд
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
Виконує обробку JS-занепокоєних на наданому контексті прогону. Застосовує визначену політику та генерує посилання MDC. Повертає результат прогону.
|
|
13
13
|
|
|
14
14
|
## Поведінка
|
|
15
15
|
|
|
16
|
-
1.
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
1. Запуск правила.
|
|
17
|
+
* Приймає контекст прогону.
|
|
18
|
+
* Виконує застосування JS-занепокоєних.
|
|
19
|
+
* Застосовує політику.
|
|
20
|
+
* Генерує посилання MDC.
|
|
21
|
+
* Повертає результат прогону.
|
|
21
22
|
|
|
22
23
|
## Публічний API
|
|
23
24
|
|
|
24
|
-
run —
|
|
25
|
+
run — запускає правило: applies → JS-concerns → policy → mdc-refs (через runStandardRule).
|
|
26
|
+
Library mode — викликається CLI orchestration через `import + run`.
|
|
25
27
|
|
|
26
28
|
## Гарантії поведінки
|
|
27
29
|
|
package/rules/ga/docs/fix.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
docgen:
|
|
3
3
|
source: npm/rules/ga/fix.mjs
|
|
4
|
-
crc:
|
|
4
|
+
crc: 38cf876b
|
|
5
5
|
score: 100
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -9,16 +9,21 @@ docgen:
|
|
|
9
9
|
|
|
10
10
|
## Огляд
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
Виконує обробку JS-занепокоєних на наданому контексті прогону. Застосовує визначену політику та генерує посилання MDC. Повертає результат прогону.
|
|
13
13
|
|
|
14
14
|
## Поведінка
|
|
15
15
|
|
|
16
|
-
1.
|
|
17
|
-
|
|
16
|
+
1. Запуск правила.
|
|
17
|
+
* Приймає контекст прогону.
|
|
18
|
+
* Виконує застосування JS-занепокоєних.
|
|
19
|
+
* Застосовує політику.
|
|
20
|
+
* Генерує посилання MDC.
|
|
21
|
+
* Повертає результат прогону.
|
|
18
22
|
|
|
19
23
|
## Публічний API
|
|
20
24
|
|
|
21
|
-
run —
|
|
25
|
+
run — запускає правило: applies → JS-concerns → policy → mdc-refs (через runStandardRule).
|
|
26
|
+
Library mode — викликається CLI orchestration через `import + run`.
|
|
22
27
|
|
|
23
28
|
## Гарантії поведінки
|
|
24
29
|
|