@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/adr/docs/fix.md
CHANGED
|
@@ -1,154 +1,39 @@
|
|
|
1
1
|
---
|
|
2
2
|
docgen:
|
|
3
3
|
source: npm/rules/adr/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 (самостійний запуск).** Якщо файл запущено напряму як CLI (наприклад, `bun npm/rules/adr/fix.mjs`), він повністю емулює виклик `npx @nitra/cursor fix adr`: завантажує конфіг, застосовує whitelist, виводить summary і повертає процесу exit-code 0/1 для CI/IDE.
|
|
14
|
+
## Поведінка
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
1. Запуск правила.
|
|
17
|
+
* Приймає контекст прогону.
|
|
18
|
+
* Виконує застосування JS-занепокоєних.
|
|
19
|
+
* Застосовує політику.
|
|
20
|
+
* Генерує посилання MDC.
|
|
21
|
+
* Повертає результат прогону.
|
|
22
|
+
2. Виконання у режимі CLI.
|
|
23
|
+
* Виконується як автономний скрипт.
|
|
24
|
+
* Виконує повний еквівалент команди `npx @nitra/cursor fix <id>`.
|
|
25
|
+
* Виконує завантаження конфігурації.
|
|
26
|
+
* Виконує перевірку дозволених елементів.
|
|
27
|
+
* Генерує зведену інформацію.
|
|
28
|
+
* Визначає код виходу процесу.
|
|
17
29
|
|
|
18
|
-
##
|
|
30
|
+
## Публічний API
|
|
19
31
|
|
|
20
|
-
|
|
32
|
+
run — запускає правило: applies → JS-concerns → policy → mdc-refs (через runStandardRule).
|
|
33
|
+
Library mode — викликається CLI orchestration через `import + run`.
|
|
21
34
|
|
|
22
|
-
|
|
23
|
-
| --- | --- | --- |
|
|
24
|
-
| `run` | `(ctx?: RuleContext) => Promise<number>` | Запуск правила `adr` у library-режимі через `runStandardRule`. Повертає 0 (OK) або 1 (порушення). |
|
|
35
|
+
## Гарантії поведінки
|
|
25
36
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
## Функції
|
|
31
|
-
|
|
32
|
-
### `run(ctx)`
|
|
33
|
-
|
|
34
|
-
```js
|
|
35
|
-
export function run(ctx) {
|
|
36
|
-
return runStandardRule(import.meta.dirname, ctx)
|
|
37
|
-
}
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
- **Призначення.** Виконати стандартний конвеєр правила `adr`: `applies → JS-concerns → policy → mdc-refs`. Уся механіка делегується бібліотечній функції `runStandardRule`; локальної логіки немає, окрім прокидання директорії правила й контексту.
|
|
41
|
-
- **Параметри.**
|
|
42
|
-
- `ctx` (необов'язковий) — `RuleContext` із `../../scripts/lib/run-standard-rule.mjs`. Контекст переноситься між викликами різних правил у межах одного запуску оркестратора й може містити, наприклад, кешований обхід файлової системи (`walkCache`), що дозволяє не повторювати дорогі операції для кожного правила. Якщо `ctx` не передано, `runStandardRule` створює власний контекст за замовчуванням.
|
|
43
|
-
- **Повертає.** `Promise<number>` — `0`, якщо порушень правила немає; `1`, якщо знайдено хоча б одне порушення. Це **exit-code-сумісний** код, який далі використовується CLI-обгорткою для `process.exit`.
|
|
44
|
-
- **Side effects.** У межах самого `run` побічних ефектів **не вводить**; усі ефекти (читання файлів, друк звіту, кешування) виконуються всередині `runStandardRule`. Identифікатор правила визначається неявно через `import.meta.dirname` — тобто директорія, у якій лежить цей `fix.mjs` (`npm/rules/adr`), стає каноном для пошуку всіх supplementary-файлів правила (checks, mdc, конфіг).
|
|
45
|
-
- **Помилки.** Власних `try/catch` немає. Якщо `runStandardRule` кидає виняток, він проростає до викликача незмінно. У standalone-режимі винятки обробляються вже не `run`, а `runRuleCli`.
|
|
46
|
-
|
|
47
|
-
### Top-level CLI-блок (не функція, але виконуваний код модуля)
|
|
48
|
-
|
|
49
|
-
```js
|
|
50
|
-
if (isRunAsCli(import.meta.url)) {
|
|
51
|
-
process.exit(await runRuleCli(import.meta.dirname))
|
|
52
|
-
}
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
- **Призначення.** Якщо файл запущено як головний модуль (тобто `import.meta.url` відповідає `argv[1]`), активується standalone-режим — еквівалент `npx @nitra/cursor fix adr`.
|
|
56
|
-
- **Логіка.**
|
|
57
|
-
1. `isRunAsCli(import.meta.url)` визначає, чи модуль є entry-point процесу (а не імпортовано бібліотечно).
|
|
58
|
-
2. `runRuleCli(import.meta.dirname)` виконує повний CLI-pipeline для правила в цій директорії: завантаження конфігу, застосування whitelist, виклик внутрішнього `run`, друк summary, повернення numeric exit-code.
|
|
59
|
-
3. `process.exit(...)` завершує процес із цим exit-кодом — це потрібно, аби CI/IDE могли інтерпретувати успіх/невдачу.
|
|
60
|
-
- **Top-level `await`.** Виклик `await runRuleCli(...)` працює завдяки ESM top-level await (`.mjs`).
|
|
61
|
-
- **Pragma-коментар.** Над `process.exit` стоїть `eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit` із поясненням: standalone entry-point **повинен** повертати exit-code, тому загальна заборона `process.exit` тут свідомо відключена.
|
|
62
|
-
- **Чому два режими в одному файлі.** В коментарі прямо зазначено: "Дві ролі fix.mjs: library (run) + standalone (main)". Це конвенція пакета `@nitra/cursor` — кожне правило має один `fix.mjs`, який можна і `import`-ити, і запускати безпосередньо.
|
|
63
|
-
|
|
64
|
-
## Залежності
|
|
65
|
-
|
|
66
|
-
### Внутрішні (workspace `@nitra/cursor`)
|
|
67
|
-
|
|
68
|
-
| Шлях | Імпортовані символи | Роль |
|
|
69
|
-
| --- | --- | --- |
|
|
70
|
-
| `../../scripts/lib/run-rule-cli.mjs` | `isRunAsCli`, `runRuleCli` | `isRunAsCli` — перевірка, чи модуль є CLI entry-point. `runRuleCli` — повний CLI-pipeline (config + whitelist + summary + exit-code). |
|
|
71
|
-
| `../../scripts/lib/run-standard-rule.mjs` | `runStandardRule` | Реалізація стандартного конвеєра правила: `applies → JS-concerns → policy → mdc-refs`. Також звідси походить JSDoc-тип `RuleContext`. |
|
|
72
|
-
|
|
73
|
-
Шляхи відносні: з `npm/rules/adr/` два рівні вгору ведуть у `npm/`, далі — `scripts/lib/`.
|
|
74
|
-
|
|
75
|
-
### Зовнішні (npm-пакети)
|
|
76
|
-
|
|
77
|
-
Прямих імпортів зовнішніх пакетів файл **не** має. Опосередковано, через бібліотечні модулі, можуть бути задіяні стандартні утиліти Node (`node:fs`, `node:path` тощо) — але це деталь реалізації `runStandardRule` / `runRuleCli`, а не цього файла.
|
|
78
|
-
|
|
79
|
-
### Платформенні вимоги
|
|
80
|
-
|
|
81
|
-
- **ESM**. Розширення `.mjs` + використання `import.meta.dirname` і `import.meta.url`.
|
|
82
|
-
- **`import.meta.dirname`** — доступне в Node.js ≥ 20.11 та Bun. Без цієї властивості модуль не запрацює.
|
|
83
|
-
- **Top-level `await`** — для standalone-блоку.
|
|
84
|
-
|
|
85
|
-
## Потік виконання / Використання
|
|
86
|
-
|
|
87
|
-
### Сценарій 1. Library-режим (виклик із оркестратора)
|
|
88
|
-
|
|
89
|
-
```js
|
|
90
|
-
import { run } from '@nitra/cursor/rules/adr/fix.mjs'
|
|
91
|
-
|
|
92
|
-
const code = await run({ walkCache /*, … */ })
|
|
93
|
-
if (code !== 0) {
|
|
94
|
-
// знайдені порушення правила adr
|
|
95
|
-
}
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
Послідовність кроків усередині `run`:
|
|
99
|
-
|
|
100
|
-
1. `runStandardRule` отримує абсолютний шлях директорії правила (`import.meta.dirname` → `…/npm/rules/adr`).
|
|
101
|
-
2. За конвенціями цієї директорії бібліотека сама знаходить:
|
|
102
|
-
- `applies`-фільтр (які файли підпадають під правило),
|
|
103
|
-
- JS-concerns-перевірки,
|
|
104
|
-
- policy-частину (rego/правила політики, якщо є),
|
|
105
|
-
- `mdc-refs` (перевірка посилань на `.mdc`-файли).
|
|
106
|
-
3. Кожен крок виконується послідовно; якщо хоч один знаходить порушення — фінальний exit-code = `1`.
|
|
107
|
-
4. Promise резолвиться числом `0` або `1`.
|
|
108
|
-
|
|
109
|
-
Сам файл `fix.mjs` у цьому потоці — **тонка обгортка**: він не приймає рішень і не друкує нічого власноруч.
|
|
110
|
-
|
|
111
|
-
### Сценарій 2. Standalone-режим (запуск напряму)
|
|
112
|
-
|
|
113
|
-
```bash
|
|
114
|
-
bun npm/rules/adr/fix.mjs
|
|
115
|
-
# або
|
|
116
|
-
node npm/rules/adr/fix.mjs
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
Послідовність:
|
|
120
|
-
|
|
121
|
-
1. Модуль завантажується, `run` стає експортованим.
|
|
122
|
-
2. Виконується top-level умова `isRunAsCli(import.meta.url)` → `true`.
|
|
123
|
-
3. `runRuleCli(import.meta.dirname)` бере на себе:
|
|
124
|
-
- читання конфігу (наприклад, `.cursor`-конфіг або CLI-параметри),
|
|
125
|
-
- застосування whitelist (обмеження файлів, які проходять перевірку),
|
|
126
|
-
- виклик внутрішньої функції `run` цього ж правила,
|
|
127
|
-
- друк підсумкового summary (скільки файлів, скільки порушень),
|
|
128
|
-
- повернення exit-code (`0` або `1`).
|
|
129
|
-
4. `process.exit(...)` зупиняє процес із цим кодом — CI/IDE отримують стандартний сигнал успіху/невдачі.
|
|
130
|
-
|
|
131
|
-
Цей режим — еквівалент `npx @nitra/cursor fix adr`, але без потреби у глобально встановленому CLI: достатньо мати checkout репозиторію.
|
|
132
|
-
|
|
133
|
-
### Сценарій 3. Імпорт без виконання (рідкісний)
|
|
134
|
-
|
|
135
|
-
Якщо файл імпортується умовами, де `import.meta.url !== argv[1]`, спрацьовує лише експорт `run`; CLI-блок мовчазно пропускається. Це і є основою «двох ролей»: ESM-модуль безпечно імпортувати з будь-якого місця без сайд-ефекту запуску процесу.
|
|
136
|
-
|
|
137
|
-
### Контекст у системі правил
|
|
138
|
-
|
|
139
|
-
Файл вписується у плаский набір правил `npm/rules/<id>/fix.mjs`. Кожне правило має такий самий каркас, відрізняючись лише іменем директорії (а отже — `import.meta.dirname`) та допоміжними файлами поруч (`check-*.mjs`, `*.mdc` тощо). Логіка спільного pipeline винесена у `scripts/lib/run-standard-rule.mjs` і `scripts/lib/run-rule-cli.mjs`, що робить `fix.mjs` максимально декларативним: він — «адаптер» між директорією правила та оркестратором.
|
|
140
|
-
|
|
141
|
-
## Rebuild Test
|
|
142
|
-
|
|
143
|
-
Якщо знищити цей файл і реконструювати з документації вище, відновлювана версія повинна:
|
|
144
|
-
|
|
145
|
-
1. Бути ESM-модулем (`.mjs`).
|
|
146
|
-
2. Імпортувати з `../../scripts/lib/run-rule-cli.mjs` дві іменовані функції: `isRunAsCli` та `runRuleCli`.
|
|
147
|
-
3. Імпортувати з `../../scripts/lib/run-standard-rule.mjs` іменовану функцію `runStandardRule`.
|
|
148
|
-
4. Експортувати функцію `run(ctx)`, яка повертає результат виклику `runStandardRule(import.meta.dirname, ctx)` (без `await`, бо promise повертається як є).
|
|
149
|
-
5. Мати JSDoc-блок до `run` з посиланням на тип `RuleContext` з `run-standard-rule.mjs` та описом `@returns {Promise<number>}` із семантикою `0 — OK, 1 — порушення`.
|
|
150
|
-
6. Містити top-level умову `if (isRunAsCli(import.meta.url))`, всередині якої виконується `process.exit(await runRuleCli(import.meta.dirname))`.
|
|
151
|
-
7. Над `process.exit` мати ESLint-disable-коментар для `n/no-process-exit` та `unicorn/no-process-exit` із поясненням, що standalone entry-point повинен повертати exit-code для CI/IDE.
|
|
152
|
-
8. **Не** містити жодної додаткової логіки правила `adr` всередині — уся механіка делегована бібліотечним функціям.
|
|
153
|
-
|
|
154
|
-
Реконструйована версія за цими інваріантами буде функціонально еквівалентною оригіналу.
|
|
37
|
+
- Read-only: файл не виконує операцій запису у файлову систему.
|
|
38
|
+
- Кешує результати в межах одного прогону.
|
|
39
|
+
- Не звертається до мережі.
|
package/rules/bun/docs/fix.md
CHANGED
|
@@ -1,165 +1,32 @@
|
|
|
1
1
|
---
|
|
2
2
|
docgen:
|
|
3
3
|
source: npm/rules/bun/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 rules/bun/fix.mjs`, він повністю емулює виклик `npx @nitra/cursor fix bun` (з конфіг-завантаженням, whitelist-фільтрацією та фінальним summary) і завершує процес кодом виходу, придатним для CI/IDE.
|
|
14
|
+
## Поведінка
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
1. Запуск правила.
|
|
17
|
+
* Приймає контекст прогону.
|
|
18
|
+
* Виконує застосування JS-занепокоєних.
|
|
19
|
+
* Застосовує політику.
|
|
20
|
+
* Генерує посилання MDC.
|
|
21
|
+
* Повертає результат прогону.
|
|
17
22
|
|
|
18
|
-
|
|
23
|
+
## Публічний API
|
|
19
24
|
|
|
20
|
-
|
|
25
|
+
run — запускає правило: applies → JS-concerns → policy → mdc-refs (через runStandardRule).
|
|
26
|
+
Library mode — викликається CLI orchestration через `import + run`.
|
|
21
27
|
|
|
22
|
-
|
|
23
|
-
| ------- | ---------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
24
|
-
| `run` | `function(ctx?: RuleContext): Promise<number>` | Іменований експорт. Точка входу в library-режимі: викликається оркестратором CLI через ESM `import` після динамічного резолву шляху до файлу правила. |
|
|
28
|
+
## Гарантії поведінки
|
|
25
29
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
### `run(ctx)`
|
|
31
|
-
|
|
32
|
-
```js
|
|
33
|
-
/**
|
|
34
|
-
*
|
|
35
|
-
*/
|
|
36
|
-
export function run(ctx) {
|
|
37
|
-
return runStandardRule(import.meta.dirname, ctx)
|
|
38
|
-
}
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
- **Сигнатура:** `run(ctx?: RuleContext): Promise<number>`
|
|
42
|
-
- **Параметри:**
|
|
43
|
-
- `ctx` — необов’язковий об’єкт контексту прогону, тип `RuleContext` із модуля `../../scripts/lib/run-standard-rule.mjs`. Передається оркестратором, коли кілька правил виконуються в одному батчі та потребують спільного стану (наприклад, `walkCache` — кеш обходу файлової системи, щоб не повторювати `fs.readdir` для тих самих директорій). Якщо `undefined`, `runStandardRule` створює власний контекст за замовчуванням.
|
|
44
|
-
- **Повертає:** `Promise<number>` з кодом виходу:
|
|
45
|
-
- `0` — правило не знайшло порушень (OK);
|
|
46
|
-
- `1` — знайдено порушення (правило завершилося з помилками).
|
|
47
|
-
- **Алгоритм:** єдине виконуване твердження — `return runStandardRule(import.meta.dirname, ctx)`. Тут `import.meta.dirname` — абсолютний шлях до теки правила (`npm/rules/bun/`); саме на основі цього шляху `runStandardRule` визначає ідентифікатор правила (остання сегментна назва — `bun`) та підвантажує сусідні артефакти (`meta.json`, `bun.mdc`, скрипти з `js/` та `policy/`).
|
|
48
|
-
- **Side effects:**
|
|
49
|
-
- Делеговані до `runStandardRule`: читання конфіг-файлу, обхід дерева проєкту згідно з applies-фільтрами, можливі модифікації цільових файлів у фазі JS-concerns / policy, запис лог-повідомлень у stdout.
|
|
50
|
-
- Сам `run` не звертається до `process.exit`, не змінює `process.env` і не змінює глобальний стан — повертає чистий `Promise`, який повністю керується викликачем.
|
|
51
|
-
|
|
52
|
-
### Standalone-блок (top-level)
|
|
53
|
-
|
|
54
|
-
```js
|
|
55
|
-
if (isRunAsCli(import.meta.url)) {
|
|
56
|
-
process.exit(await runRuleCli(import.meta.dirname))
|
|
57
|
-
}
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
- **Що це:** не функція, а IIFE-подібний top-level guard. Виконується один раз на завантаженні модуля.
|
|
61
|
-
- **Умова:** `isRunAsCli(import.meta.url)` повертає `true`, лише коли цей файл стартовано напряму як entry-point (а не імпортовано як модуль із оркестратора). Перевірка зазвичай зводиться до порівняння `import.meta.url` з `pathToFileURL(process.argv[1])`.
|
|
62
|
-
- **Дія:** викликає `runRuleCli(import.meta.dirname)`, дочікується резолву та передає результат у `process.exit(...)`. На відміну від `run`, тут запускається повний CLI-pipeline (а не лише стандартне правило): завантаження користувацького конфігу, фільтр whitelist, фінальний summary та форматування виводу.
|
|
63
|
-
- **Side effects:**
|
|
64
|
-
- Завершує процес Node/Bun із кодом виходу `0` або `1`.
|
|
65
|
-
- У файлі присутні директиви `eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit` — це свідомий виняток для standalone-точок входу, які повинні повертати exit-code для CI та IDE.
|
|
66
|
-
- Використано top-level `await`, тому модуль працює лише в ESM-середовищі з підтримкою TLA (Bun, Node.js 14.8+ у ESM-режимі).
|
|
67
|
-
|
|
68
|
-
## Залежності
|
|
69
|
-
|
|
70
|
-
### Внутрішні (relative imports)
|
|
71
|
-
|
|
72
|
-
| Модуль | Імпорти | Призначення |
|
|
73
|
-
| ----------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
74
|
-
| `../../scripts/lib/run-rule-cli.mjs` | `isRunAsCli`, `runRuleCli` | Утиліти для standalone-режиму: визначити, чи файл запущено як CLI, та виконати повноцінний CLI-pipeline для одного правила. |
|
|
75
|
-
| `../../scripts/lib/run-standard-rule.mjs` | `runStandardRule` | Стандартний рантайм правила: послідовність фаз `applies → JS-concerns → policy → mdc-refs`. Також експортує тип `RuleContext`, на який посилається JSDoc-анотація `run`. |
|
|
76
|
-
|
|
77
|
-
### Зовнішні (npm-пакети, runtime)
|
|
78
|
-
|
|
79
|
-
- Зовнішніх npm-залежностей файл не імпортує напряму.
|
|
80
|
-
- Опосередковано через `runStandardRule` / `runRuleCli` залучається інфраструктура `@nitra/cursor` (logger, конфіг-парсер, walker файлової системи тощо).
|
|
81
|
-
|
|
82
|
-
### Платформенні залежності
|
|
83
|
-
|
|
84
|
-
- ESM (`import`, `import.meta.url`, `import.meta.dirname`).
|
|
85
|
-
- Top-level `await` — потрібна Node.js ≥ 14.8 в ESM або Bun.
|
|
86
|
-
- `process.exit` — Node/Bun-середовище.
|
|
87
|
-
|
|
88
|
-
### Сусідні артефакти правила (читаються через `import.meta.dirname`)
|
|
89
|
-
|
|
90
|
-
Файл сам не імпортує їх явно, але `runStandardRule` / `runRuleCli` підхоплюють з тієї ж теки:
|
|
91
|
-
|
|
92
|
-
- `meta.json` — метадані правила (id, applies-патерни, опис тощо).
|
|
93
|
-
- `bun.mdc` — людинозрозумілий опис правила у форматі MDC.
|
|
94
|
-
- `js/` — JS-concerns (check-/fix-скрипти, що працюють із JS/AST).
|
|
95
|
-
- `policy/` — policy-фаза (rego/інші policy-чеки).
|
|
96
|
-
|
|
97
|
-
## Потік виконання / Використання
|
|
98
|
-
|
|
99
|
-
### Сценарій 1: виклик з оркестратора (library mode)
|
|
100
|
-
|
|
101
|
-
```js
|
|
102
|
-
import { run } from '@nitra/cursor/rules/bun/fix.mjs'
|
|
103
|
-
|
|
104
|
-
const exitCode = await run({ walkCache })
|
|
105
|
-
if (exitCode !== 0) {
|
|
106
|
-
// правило знайшло порушення
|
|
107
|
-
}
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
Послідовність:
|
|
111
|
-
|
|
112
|
-
1. Оркестратор резолвить шлях до `fix.mjs` (наприклад, у циклі по `npm/rules/*/fix.mjs`).
|
|
113
|
-
2. Виконує `import(...)` — модуль завантажується, `isRunAsCli(...)` повертає `false`, тому standalone-блок не спрацьовує, `process.exit` не викликається.
|
|
114
|
-
3. Оркестратор отримує іменований експорт `run` і викликає його з підготованим `ctx`.
|
|
115
|
-
4. `run` делегує до `runStandardRule(import.meta.dirname, ctx)`, який:
|
|
116
|
-
- читає `meta.json` сусідньої теки;
|
|
117
|
-
- проходить фази `applies → JS-concerns → policy → mdc-refs`;
|
|
118
|
-
- повертає `0` або `1`.
|
|
119
|
-
5. Оркестратор агрегує коди повернення всіх правил та формує підсумковий exit-code.
|
|
120
|
-
|
|
121
|
-
### Сценарій 2: прямий запуск файлу (standalone mode)
|
|
122
|
-
|
|
123
|
-
```bash
|
|
124
|
-
bun npm/rules/bun/fix.mjs
|
|
125
|
-
# або
|
|
126
|
-
node npm/rules/bun/fix.mjs
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
Послідовність:
|
|
130
|
-
|
|
131
|
-
1. Bun/Node стартує модуль як entry-point.
|
|
132
|
-
2. Модуль виконує імпорти `run-rule-cli.mjs` та `run-standard-rule.mjs`.
|
|
133
|
-
3. Створюється експорт `run` (просто зв’язується з функцією).
|
|
134
|
-
4. Перевірка `isRunAsCli(import.meta.url)` повертає `true`.
|
|
135
|
-
5. Виконується `await runRuleCli(import.meta.dirname)` — це **повний** еквівалент `npx @nitra/cursor fix bun`: завантаження конфігу, whitelist-фільтрація, прогон правила, фінальний summary.
|
|
136
|
-
6. Результат (число — exit-code) передається у `process.exit(...)`, процес завершується одразу.
|
|
137
|
-
|
|
138
|
-
### Еквівалентність CLI-команд
|
|
139
|
-
|
|
140
|
-
| Спосіб запуску | Внутрішній шлях | Поведінка |
|
|
141
|
-
| --------------------------- | --------------------------------------------------------------- | -------------------------------------------------------- |
|
|
142
|
-
| `npx @nitra/cursor fix bun` | CLI знаходить правило `bun`, імпортує `run` → `runStandardRule` | Library mode |
|
|
143
|
-
| `bun npm/rules/bun/fix.mjs` | Standalone-блок → `runRuleCli` | Standalone mode (повний CLI-pipeline для одного правила) |
|
|
144
|
-
|
|
145
|
-
### Чому дві ролі в одному файлі
|
|
146
|
-
|
|
147
|
-
- **Library mode** потрібен для батч-прогону: оркестратор не повинен форкати процес під кожне правило і не повинен дублювати конфіг-завантаження.
|
|
148
|
-
- **Standalone mode** потрібен для зручного дебагу одного правила в IDE/CI: достатньо вказати шлях до файлу як entry-point, не запускаючи всю CLI-обгортку.
|
|
149
|
-
|
|
150
|
-
Обидві ролі узгоджуються через стандартний `import.meta.dirname` — точку прив’язки до сусідніх артефактів правила.
|
|
151
|
-
|
|
152
|
-
## Rebuild Test
|
|
153
|
-
|
|
154
|
-
Якщо файл видалити і відтворити з нуля за цією документацією, мають виконуватись усі наступні твердження:
|
|
155
|
-
|
|
156
|
-
1. Файл містить рівно два імпорти з відносних шляхів: `../../scripts/lib/run-rule-cli.mjs` (іменовані `isRunAsCli`, `runRuleCli`) та `../../scripts/lib/run-standard-rule.mjs` (іменований `runStandardRule`).
|
|
157
|
-
2. Експортується іменована функція `run(ctx)`, яка повертає результат виклику `runStandardRule(import.meta.dirname, ctx)`. `ctx` — необов’язковий параметр.
|
|
158
|
-
3. JSDoc над `run` описує: фази правила (`applies → JS-concerns → policy → mdc-refs`), library-режим (`import + run(ctx)`), тип параметра `RuleContext`, повертає `Promise<number>` з кодами `0`/`1`.
|
|
159
|
-
4. Після експорту функції є top-level guard `if (isRunAsCli(import.meta.url)) { ... }`.
|
|
160
|
-
5. Усередині guard — `process.exit(await runRuleCli(import.meta.dirname))`.
|
|
161
|
-
6. Рядок із `process.exit` має eslint-disable-коментар, що вимикає правила `n/no-process-exit` та `unicorn/no-process-exit` з поясненням, що це standalone entry-point для CI/IDE.
|
|
162
|
-
7. Стандартний коментар поряд із guard пояснює подвійну роль файлу (`library (run) + standalone (main)`) та еквівалентність до `npx @nitra/cursor fix <id>`.
|
|
163
|
-
8. У файлі немає інших експортів, default-експорту, побічних викликів `process.exit` поза guard-блоком та жодних звернень до `process.env`, файлової системи чи мережі — все делеговано в `runStandardRule` / `runRuleCli`.
|
|
164
|
-
9. Файл коректно виконується в Bun і Node.js ≥ 14.8 у ESM-режимі завдяки top-level `await`.
|
|
165
|
-
10. При імпорті як модуль (`import { run } from '.../fix.mjs'`) `process.exit` не викликається — guard повертає `false`.
|
|
30
|
+
- Read-only: файл не виконує операцій запису у файлову систему.
|
|
31
|
+
- Кешує результати в межах одного прогону.
|
|
32
|
+
- Не звертається до мережі.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
docgen:
|
|
3
3
|
source: npm/rules/capacitor/fix.mjs
|
|
4
|
-
crc:
|
|
4
|
+
crc: 38cf876b
|
|
5
5
|
score: 100
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -9,24 +9,27 @@ docgen:
|
|
|
9
9
|
|
|
10
10
|
## Огляд
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
Виконує застосування JS-занепокоєних на вхідний контекст прогону, застосовує визначену політику, генерує посилання MDC та повертає результат
|
|
13
13
|
|
|
14
14
|
## Поведінка
|
|
15
15
|
|
|
16
|
-
1. Запуск
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
16
|
+
1. Запуск правила.
|
|
17
|
+
* Приймає контекст прогону.
|
|
18
|
+
* Виконує застосування JS-занепокоєних.
|
|
19
|
+
* Застосовує політику.
|
|
20
|
+
* Генерує посилання MDC.
|
|
21
|
+
* Повертає результат.
|
|
22
|
+
2. Запуск у режимі CLI.
|
|
23
|
+
* Виконується як повний еквівалент команди `npx @nitra/cursor fix <id>`.
|
|
24
|
+
* Виконує завантаження конфігурації.
|
|
25
|
+
* Виконує перевірку дозволених записів.
|
|
26
|
+
* Генерує зведену інформацію.
|
|
27
|
+
* Використовує `process.exitCode` для визначення виходу.
|
|
25
28
|
|
|
26
29
|
## Публічний API
|
|
27
30
|
|
|
28
|
-
run —
|
|
29
|
-
Library mode —
|
|
31
|
+
run — запускає правило: applies → JS-concerns → policy → mdc-refs (через runStandardRule).
|
|
32
|
+
Library mode — викликається CLI orchestration через `import + run`.
|
|
30
33
|
|
|
31
34
|
## Гарантії поведінки
|
|
32
35
|
|
|
@@ -1,89 +1,77 @@
|
|
|
1
1
|
---
|
|
2
2
|
docgen:
|
|
3
3
|
source: npm/rules/capacitor/js/platforms.mjs
|
|
4
|
-
crc:
|
|
5
|
-
score:
|
|
4
|
+
crc: d102129c
|
|
5
|
+
score: 85
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# platforms.mjs
|
|
9
9
|
|
|
10
10
|
## Огляд
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
Огляд
|
|
13
|
+
|
|
14
|
+
Цей файл містить інструменти для витягування та перевірки версій Capacitor з залежностей та конфігурацій. Використовується для визначення сумісності версій Capacitor з конфігураціями, а також для збору даних про версії з різних файлів.
|
|
13
15
|
|
|
14
16
|
## Поведінка
|
|
15
17
|
|
|
16
18
|
capacitorSegmentMinMajor
|
|
17
|
-
Витягує
|
|
19
|
+
Витягує мінімальну мажорну версію з частини діапазону npm версії
|
|
18
20
|
|
|
19
21
|
capacitorVersionRangeMinMajor
|
|
20
|
-
|
|
22
|
+
Витягує мінімальну мажорну версію з повного діапазону npm версії
|
|
21
23
|
|
|
22
24
|
isCapacitorCoreVersionAtLeast8
|
|
23
|
-
Перевіряє, чи нижня межа версії Capacitor
|
|
25
|
+
Перевіряє, чи нижня межа версії Capacitor ≥ мінімальної версії
|
|
24
26
|
|
|
25
27
|
recordCapacitorFromOnePackageJson
|
|
26
|
-
Записує
|
|
28
|
+
Записує дані Capacitor з об'єкта з залежностей у накопичувач
|
|
27
29
|
|
|
28
30
|
collectCapacitorDataFromAllPackageJson
|
|
29
|
-
|
|
31
|
+
Зчитує дані Capacitor з усіх package.json у дереві
|
|
30
32
|
|
|
31
33
|
hasCapacitorConfigInRoot
|
|
32
|
-
Перевіряє наявність
|
|
34
|
+
Перевіряє наявність конфігурації Capacitor у корені
|
|
33
35
|
|
|
34
36
|
isCapacitorRelevantForCheck
|
|
35
|
-
Визначає, чи потрібно застосовувати перевірку Capacitor
|
|
37
|
+
Визначає, чи потрібно застосовувати перевірку Capacitor
|
|
36
38
|
|
|
37
39
|
walkIosForPodfileSkipPods
|
|
38
|
-
Рекурсивно шукає
|
|
40
|
+
Рекурсивно шукає Podfile у каталозі ios, ігноруючи Pods та build
|
|
39
41
|
|
|
40
42
|
findFirstPodfileUnderIosExcludingPods
|
|
41
|
-
|
|
43
|
+
Знаходить перший Podfile у каталозі ios, усуваючи Pods
|
|
42
44
|
|
|
43
45
|
nitrAObjectAllowsIosCocoaPods
|
|
44
|
-
Перевіряє, чи дозволяє об'єкт
|
|
45
|
-
|
|
46
|
-
extractNitraObjectBodySource
|
|
47
|
-
Витягує текст тіла об'єкта `{...}` після маркера `nitra:` у конфігураційному файлі
|
|
48
|
-
|
|
49
|
-
nitraObjectBodyStringAllowsCocoaPodsExempt
|
|
50
|
-
Перевіряє, чи містить витягнутий текст виняток, який дозволяє пропуск аналізу SPM
|
|
51
|
-
|
|
52
|
-
pathJsonShowsNitraCocoapodsExempt
|
|
53
|
-
Перевіряє, чи містить об'єкт `nitra` у JSON-файлі виняток, який дозволяє пропуск аналізу SPM
|
|
54
|
-
|
|
55
|
-
capacitorConfigTsMjsNitraCocoapodsExempt
|
|
56
|
-
Перевіряє, чи містить конфігураційні файли `.ts` або `.mjs` виняток, який дозволяє пропуск аналізу SPM
|
|
57
|
-
|
|
58
|
-
isIosCocoaPodsExemptByNitraConfig
|
|
59
|
-
Перевіряє, чи дозволяє конфігурація `nitra` використання `Podfile` на iOS
|
|
46
|
+
Перевіряє, чи дозволяє об'єкт nitra використання Podfile
|
|
60
47
|
|
|
61
48
|
check
|
|
62
|
-
|
|
49
|
+
Запускає перевірку відповідності версій Capacitor та конфігурації
|
|
63
50
|
|
|
64
|
-
|
|
51
|
+
reportOneCapacitorCoreRange
|
|
52
|
+
Друкує повідомлення про сумісність версії Capacitor з (capacitor.mdc)
|
|
65
53
|
|
|
66
|
-
|
|
54
|
+
recordCapacitorFromDependencyObject
|
|
55
|
+
Записує дані Capacitor з об'єкта з залежностей у накопичувач
|
|
67
56
|
|
|
68
57
|
## Публічний API
|
|
69
58
|
|
|
70
|
-
capacitorSegmentMinMajor — визначає
|
|
71
|
-
capacitorVersionRangeMinMajor — визначає
|
|
72
|
-
isCapacitorCoreVersionAtLeast8 — перевіряє, чи
|
|
73
|
-
recordCapacitorFromOnePackageJson — записує дані Capacitor з одного файлу
|
|
74
|
-
collectCapacitorDataFromAllPackageJson —
|
|
59
|
+
capacitorSegmentMinMajor — визначає найнижчу межу для однієї частини діапазону npm.
|
|
60
|
+
capacitorVersionRangeMinMajor — визначає найнижчу можливу версію major для повного діапазону npm, включаючи `||`.
|
|
61
|
+
isCapacitorCoreVersionAtLeast8 — перевіряє, чи версія Capacitor Core становить мінімум 8.
|
|
62
|
+
recordCapacitorFromOnePackageJson — записує дані Capacitor з одного файлу package.json.
|
|
63
|
+
collectCapacitorDataFromAllPackageJson — зчитує всі package.json з дерева, збирає byPath та anyCapacitor.
|
|
75
64
|
hasCapacitorConfigInRoot — перевіряє наявність конфігурації Capacitor у кореневому файлі.
|
|
76
|
-
isCapacitorRelevantForCheck — визначає, чи слід
|
|
77
|
-
walkIosForPodfileSkipPods — рекурсивно шукає
|
|
78
|
-
findFirstPodfileUnderIosExcludingPods — знаходить перший
|
|
79
|
-
nitrAObjectAllowsIosCocoaPods — перевіряє, чи дозволяє
|
|
80
|
-
check — виконує
|
|
65
|
+
isCapacitorRelevantForCheck — визначає, чи слід використовувати правила, залежно від конфігу або `@capacitor/` у залежностях.
|
|
66
|
+
walkIosForPodfileSkipPods — рекурсивно шукає Podfile у ios/, ігноруючи Pods та типові build-каталоги.
|
|
67
|
+
findFirstPodfileUnderIosExcludingPods — знаходить перший Podfile у ios/, виключаючи Pods.
|
|
68
|
+
nitrAObjectAllowsIosCocoaPods — перевіряє, чи дозволяє об'єкт nitra використовувати Podfile на iOS (див. capacitor.mdc та @nitra/).
|
|
69
|
+
check — виконує перевірку.
|
|
81
70
|
|
|
82
71
|
## Гарантії поведінки
|
|
83
72
|
|
|
84
73
|
- Read-only: файл не виконує операцій запису у файлову систему.
|
|
85
74
|
- Перехоплює помилки і не пропускає винятків назовні (fail-safe).
|
|
86
|
-
- За
|
|
87
|
-
- Кешує результати в межах одного прогону.
|
|
75
|
+
- За невдачі повертає значення помилки (`false`/`null`/`Err`) замість генерування винятку чи паніки.
|
|
88
76
|
- Свідомо пропускає шляхи: `.git`, `node_modules`.
|
|
89
77
|
- Не звертається до мережі.
|