@nitra/cursor 5.1.0 → 5.2.1
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 +22 -0
- package/.pi-template/extensions/n-cursor-adr/docs/index.md +15 -9
- package/CHANGELOG.md +18 -1
- package/bin/n-cursor.js +73 -16
- package/docs/stryker.config.md +6 -0
- package/docs/vitest.config.md +6 -0
- package/lib/docs/llm.md +29 -0
- package/lib/docs/models.md +24 -17
- package/lib/docs/omlx.md +32 -0
- package/lib/llm.mjs +137 -0
- package/lib/omlx.mjs +49 -4
- package/package.json +1 -1
- package/rules/abie/docs/fix.md +6 -0
- package/rules/abie/js/docs/applies.md +6 -0
- package/rules/abie/js/docs/env_dns.md +25 -22
- package/rules/abie/js/docs/firebase_hosting.md +6 -0
- package/rules/abie/js/docs/hc_pairing.md +21 -25
- package/rules/abie/js/docs/ua_http_route.md +27 -19
- package/rules/abie/js/docs/ua_node_selector.md +24 -19
- package/rules/abie/lib/docs/enabled.md +13 -7
- package/rules/abie/lib/docs/env-dns.md +9 -3
- package/rules/abie/lib/docs/hc-yaml.md +6 -0
- package/rules/abie/lib/docs/http-route.md +6 -0
- package/rules/abie/lib/docs/k8s-tree.md +6 -0
- package/rules/abie/lib/docs/kustomization-patches.md +6 -0
- package/rules/abie/lib/docs/overlay-paths.md +6 -0
- package/rules/abie/lib/docs/yaml.md +6 -0
- package/rules/adr/docs/fix.md +6 -0
- package/rules/adr/js/docs/hooks.md +29 -244
- package/rules/bun/docs/fix.md +6 -0
- package/rules/bun/js/docs/layout.md +37 -375
- package/rules/capacitor/docs/fix.md +22 -108
- package/rules/capacitor/js/docs/platforms.md +62 -268
- package/rules/changelog/docs/fix.md +6 -0
- package/rules/changelog/js/docs/consistency.md +36 -383
- package/rules/changelog/lib/docs/package-manifest.md +6 -0
- package/rules/ci4/docs/fix.md +23 -165
- package/rules/ci4/js/docs/marksman_config.md +9 -1
- package/rules/docker/docs/fix.md +6 -0
- package/rules/docker/js/docs/lint.md +55 -239
- package/rules/docker/lib/docs/docker-hadolint.md +6 -0
- package/rules/docker/lib/docs/docker-mirror.md +6 -0
- package/rules/docker/lib/docs/docker-native-addon.md +6 -0
- package/rules/docker/lib/docs/docker-nginx-user.md +6 -0
- package/rules/docker/lint/docs/lint.md +9 -1
- package/rules/efes/docs/fix.md +6 -0
- package/rules/feedback/docs/fix.md +21 -131
- package/rules/ga/docs/fix.md +14 -12
- package/rules/ga/js/docs/lint.md +12 -9
- package/rules/ga/js/docs/workflows.md +20 -19
- package/rules/ga/lint/docs/lint.md +6 -0
- package/rules/graphql/docs/fix.md +6 -0
- package/rules/graphql/js/docs/tooling.md +18 -253
- package/rules/graphql/lib/docs/graphql-gql-scan.md +6 -0
- package/rules/hasura/docs/fix.md +18 -111
- package/rules/image-avif/docs/fix.md +6 -0
- package/rules/image-avif/js/docs/avif_generation.md +6 -0
- package/rules/js-bun-db/lib/docs/bun-sql-scan.md +9 -3
- package/rules/js-bun-redis/lib/docs/redis-imports.md +6 -0
- package/rules/js-lint/js/docs/utils_imports.md +6 -0
- package/rules/js-lint-ci/docs/fix.md +7 -1
- package/rules/js-mssql/docs/fix.md +6 -0
- package/rules/js-mssql/lib/docs/mssql-pool-scan.md +6 -0
- package/rules/js-run/docs/fix.md +6 -0
- package/rules/js-run/lib/docs/bunyan-imports.md +6 -0
- package/rules/js-run/lib/docs/check-env-scan.md +6 -0
- package/rules/js-run/lib/docs/conn-file-rules.md +6 -0
- package/rules/js-run/lib/docs/conn-imports-scan.md +6 -0
- package/rules/js-run/lib/docs/promise-settimeout-scan.md +6 -0
- package/rules/js-run/lib/docs/temporal-scan.md +6 -0
- package/rules/k8s/docs/fix.md +6 -0
- package/rules/k8s/lint/docs/lint.md +6 -0
- package/rules/nginx-default-tpl/docs/fix.md +6 -0
- package/rules/npm-module/js/docs/header_doc_pointer.md +7 -0
- package/rules/npm-module/js/header_doc_pointer.mjs +2 -8
- package/rules/php/docs/fix.md +6 -0
- package/rules/php/lint/docs/lint.md +6 -0
- package/rules/python/docs/fix.md +6 -0
- package/rules/python/lint/docs/lint.md +6 -0
- package/rules/rego/lint/docs/lint.md +6 -0
- package/rules/release/docs/change.md +6 -0
- package/rules/release/docs/fix.md +6 -0
- package/rules/release/docs/release.md +6 -0
- package/rules/release/lib/docs/aggregate.md +6 -0
- package/rules/release/lib/docs/change-file.md +6 -0
- package/rules/release/lib/docs/fallback.md +6 -0
- package/rules/rust/lib/docs/has-cargo-toml.md +6 -0
- package/rules/security/docs/fix.md +7 -1
- package/rules/security/js/docs/lint.md +6 -0
- package/rules/style-lint/docs/fix.md +6 -0
- package/rules/tauri/docs/fix.md +6 -0
- package/rules/test/docs/fix.md +6 -0
- package/rules/test/js/data/stryker_config/docs/stryker-vue-macros-ignorer.md +6 -0
- package/rules/test/js/data/stryker_config/docs/stryker.config.baseline.md +6 -0
- package/rules/test/js/data/stryker_config/docs/stryker.config.vue.baseline.md +6 -0
- package/rules/test/js/data/vitest_config/docs/vitest.config.baseline.md +6 -0
- package/rules/text/docs/fix.md +6 -0
- package/rules/text/lint/docs/lint.md +6 -0
- package/rules/text/lint/docs/run-dotenv-linter.md +6 -0
- package/rules/text/lint/docs/run-shellcheck.md +6 -0
- package/rules/text/lint/docs/run-v8r.md +6 -0
- package/rules/vue/lib/docs/vue-forbidden-imports.md +6 -0
- package/scripts/coverage-classify/cache.mjs +1 -1
- package/scripts/coverage-classify/docs/apply.md +6 -0
- package/scripts/coverage-classify/docs/cache.md +6 -0
- package/scripts/coverage-classify/docs/prompt.md +6 -0
- package/scripts/coverage-classify/docs/verdict-schema.md +6 -0
- package/scripts/coverage-classify/prompt.mjs +1 -1
- package/scripts/coverage-fix-extract.mjs +1 -1
- package/scripts/coverage-fix.mjs +2 -1
- package/scripts/docs/auto-skills.md +6 -0
- package/scripts/docs/build-agents-commands.md +7 -1
- package/scripts/docs/cli-entry.md +6 -0
- package/scripts/docs/coverage-fix-extract.md +6 -0
- package/scripts/docs/coverage-fix.md +6 -0
- package/scripts/docs/ensure-nitra-cursor-dev-dependencies.md +6 -0
- package/scripts/docs/lint-cli.md +6 -0
- package/scripts/docs/post-tool-use-fix.md +6 -0
- package/scripts/docs/rename-yaml-extensions.md +6 -0
- package/scripts/docs/skills-cli.md +6 -0
- package/scripts/docs/sync-setup-bun-deps-action.md +6 -0
- package/scripts/docs/upgrade-nitra-cursor-and-install.md +6 -0
- package/scripts/docs/worktree-cli.md +6 -0
- package/scripts/lib/docs/assert-project-root.md +6 -0
- package/scripts/lib/docs/check-mdc-template-refs.md +6 -0
- package/scripts/lib/docs/check-reporter.md +6 -0
- package/scripts/lib/docs/diff-added-lines.md +6 -0
- package/scripts/lib/docs/discover-check-rules-from-cursor.md +6 -0
- package/scripts/lib/docs/discover-checkable-rules.md +6 -0
- package/scripts/lib/docs/ensure-tool.md +6 -0
- package/scripts/lib/docs/generated-markdown.md +6 -0
- package/scripts/lib/docs/gha-workflow.md +6 -0
- package/scripts/lib/docs/inline-template-links.md +6 -0
- package/scripts/lib/docs/list-rule-ids.md +6 -0
- package/scripts/lib/docs/load-cursor-config.md +6 -0
- package/scripts/lib/docs/mirror-parity.md +6 -0
- package/scripts/lib/docs/read-n-cursor-config-lite.md +6 -0
- package/scripts/lib/docs/resolve-target-files.md +6 -0
- package/scripts/lib/docs/root-notice.md +6 -0
- package/scripts/lib/docs/rule-meta-helpers.md +6 -0
- package/scripts/lib/docs/rule-meta.md +6 -0
- package/scripts/lib/docs/run-conftest-batch.md +6 -0
- package/scripts/lib/docs/run-lint-step.md +6 -0
- package/scripts/lib/docs/run-rule-cli.md +6 -0
- package/scripts/lib/docs/run-rule.md +6 -0
- package/scripts/lib/docs/run-standard-lint.md +6 -0
- package/scripts/lib/docs/run-standard-rule.md +6 -0
- package/scripts/lib/docs/skill-meta.md +6 -0
- package/scripts/lib/docs/template.md +6 -0
- package/scripts/lib/docs/timing-summary.md +6 -0
- package/scripts/lib/docs/workspaces.md +6 -0
- package/scripts/lib/docs/worktree-notice.md +6 -0
- package/scripts/lib/docs/worktree.md +6 -0
- package/scripts/lib/mirror-parity.mjs +1 -1
- package/scripts/lib/root-notice.mjs +1 -1
- package/scripts/lib/worktree-notice.mjs +5 -5
- package/scripts/lib/worktree.mjs +1 -1
- package/scripts/sync-claude-config.mjs +3 -0
- package/scripts/utils/docs/ast-scan-utils.md +6 -0
- package/scripts/utils/docs/ensure-gitignore-entries.md +6 -0
- package/scripts/utils/docs/find-package-json-paths.md +6 -0
- package/scripts/utils/docs/lock-cache-dir.md +6 -0
- package/scripts/utils/docs/pass.md +6 -0
- package/scripts/utils/docs/resolve-cargo-manifest.md +6 -0
- package/scripts/utils/docs/resolve-cmd.md +6 -0
- package/scripts/utils/docs/resolve-js-root.md +6 -0
- package/scripts/utils/docs/test-helpers.md +6 -0
- package/scripts/utils/docs/walk-cache.md +6 -0
- package/scripts/utils/docs/walkDir.md +6 -0
- package/scripts/utils/docs/worktree-fingerprint.md +6 -0
- package/scripts/utils/resolve-js-root.mjs +1 -1
- package/skills/doc-aggregate/SKILL.md +129 -0
- package/skills/doc-aggregate/js/docgen-ignore.mjs +9 -0
- package/skills/{docgen → doc-aggregate}/js/docgen-scan.mjs +22 -67
- package/skills/doc-aggregate/js/docs/docgen-ignore.md +21 -0
- package/skills/doc-files/SKILL.md +100 -0
- package/skills/doc-files/js/docgen-crc.mjs +164 -0
- package/skills/{docgen → doc-files}/js/docgen-extract-anchors.mjs +48 -13
- package/skills/{docgen → doc-files}/js/docgen-extract.mjs +39 -10
- package/skills/doc-files/js/docgen-files-batch.mjs +181 -0
- package/skills/doc-files/js/docgen-gen.mjs +336 -0
- package/skills/{docgen → doc-files}/js/docgen-prompts.mjs +65 -50
- package/skills/doc-files/js/docgen-scan.mjs +298 -0
- package/skills/doc-files/js/docs/docgen-crc.md +32 -0
- package/skills/doc-files/js/docs/docgen-extract-anchors.md +27 -0
- package/skills/doc-files/js/docs/docgen-extract.md +29 -0
- package/skills/doc-files/js/docs/docgen-files-batch.md +25 -0
- package/skills/doc-files/js/docs/docgen-gen.md +30 -0
- package/skills/doc-files/js/docs/docgen-prompts.md +32 -0
- package/skills/doc-files/js/docs/docgen-scan.md +25 -0
- package/skills/doc-files/js/units-js.mjs +139 -0
- package/skills/doc-files/js/units.mjs +19 -0
- package/skills/doc-files/meta.json +1 -0
- package/skills/fix/js/docs/llm-worker.md +6 -0
- package/skills/fix/js/docs/orchestrator.md +6 -0
- package/skills/fix/js/llm-worker.mjs +3 -3
- package/skills/fix/js/orchestrator.mjs +1 -1
- package/skills/start-check/js/check.mjs +5 -3
- package/skills/start-check/js/docs/check.md +6 -0
- package/skills/docgen/SKILL.md +0 -224
- package/skills/docgen/bench/etalon/firebase_hosting.md +0 -19
- package/skills/docgen/bench/etalon/k8s-tree.md +0 -24
- package/skills/docgen/bench/etalon/overlay-paths.md +0 -24
- package/skills/docgen/js/docgen-batch-omlx.mjs +0 -82
- package/skills/docgen/js/docgen-batch.mjs +0 -95
- package/skills/docgen/js/docgen-compare-pi-vs-direct.mjs +0 -95
- package/skills/docgen/js/docgen-gen.mjs +0 -306
- package/skills/docgen/js/docs/docgen-extract.md +0 -28
- package/skills/docgen/js/docs/docgen-gen.md +0 -41
- package/skills/docgen/js/docs/docgen-ignore.md +0 -24
- package/skills/docgen/js/docs/docgen-prompts.md +0 -24
- package/skills/docgen/js/docs/docgen-scan.md +0 -48
- /package/skills/{docgen → doc-aggregate}/meta.json +0 -0
- /package/skills/{docgen → doc-files}/js/docgen-ignore.mjs +0 -0
|
@@ -1,264 +1,29 @@
|
|
|
1
|
-
# tooling.mjs
|
|
2
|
-
|
|
3
|
-
## Огляд
|
|
4
|
-
|
|
5
|
-
Модуль `npm/rules/graphql/js/tooling.mjs` — це **check-скрипт правила `graphql.mdc`**, який перевіряє, що репозиторій налаштований для роботи з GraphQL за наявності у коді tagged template literals `gql\`...\``.
|
|
6
|
-
|
|
7
|
-
Логіка перевірки **умовна**:
|
|
8
|
-
|
|
9
|
-
1. Скрипт рекурсивно обходить дерево проєкту з кореня (`process.cwd()` за замовчуванням) і збирає файли-кандидати (`.vue`, `.js`, `.ts`, `.jsx`, `.tsx` тощо) — пропускаючи службові артефакти типу `.d.ts`, `auto-imports.d.ts` тощо.
|
|
10
|
-
2. Для кожного кандидата виконує AST-сканування (oxc-parser; для `.vue` — після витягування блоку `<script>`) у пошуках `gql` tagged template literal.
|
|
11
|
-
3. Якщо **жодного збігу не знайдено** — перевірка завершується успішно й нічого більше не вимагає.
|
|
12
|
-
4. Якщо `gql\`…\`` **знайдено хоча б в одному файлі** — модуль вимагає:
|
|
13
|
-
- наявність файлу `.graphqlrc.yml` у корені репозиторію (GraphQL Config);
|
|
14
|
-
- відповідність `.vscode/extensions.json` rego-пакету `graphql.vscode_extensions` (тобто рекомендацію розширення VS Code `graphql.vscode-graphql`).
|
|
15
|
-
|
|
16
|
-
Модуль є частиною інфраструктури `n-cursor` для перевірок правил `.mdc` і дотримується контракту check-скрипта: повертає exit code `0` при успіху й `1` при порушенні.
|
|
17
|
-
|
|
18
|
-
## Експорти / API
|
|
19
|
-
|
|
20
|
-
| Експорт | Тип | Призначення |
|
|
21
|
-
| ----------------------------------- | ------------------------------------------ | --------------------------------------------------------------------------------------- |
|
|
22
|
-
| `GRAPHQL_RC_FILENAME` | `string` (const, `.graphqlrc.yml`) | Очікувана назва файлу GraphQL Config у корені проєкту (з `graphql.mdc`). |
|
|
23
|
-
| `REQUIRED_GRAPHQL_VSCODE_EXTENSION` | `string` (const, `graphql.vscode-graphql`) | Ідентифікатор обов'язкового розширення VS Code, яке має бути в `recommendations`. |
|
|
24
|
-
| `check(cwd?)` | `async function` | Основна точка входу — виконує всю перевірку правила `graphql.mdc` і повертає exit code. |
|
|
25
|
-
|
|
26
|
-
Внутрішні (не експортовані) хелпери:
|
|
27
|
-
|
|
28
|
-
- `collectScanCandidates(root, ignorePaths)` — збір абсолютних шляхів файлів для сканування.
|
|
29
|
-
- `collectGqlHits(root, candidates)` — фільтрація кандидатів за наявністю `gql` tagged template.
|
|
30
|
-
- `checkExtensionsRecommendation(pass, fail, cwd)` — делегування перевірки `.vscode/extensions.json` rego-пакету `graphql.vscode_extensions` через `conftest`.
|
|
31
|
-
|
|
32
|
-
## Функції
|
|
33
|
-
|
|
34
|
-
### `collectScanCandidates(root, ignorePaths)`
|
|
35
|
-
|
|
36
|
-
**Сигнатура:**
|
|
37
|
-
|
|
38
|
-
```js
|
|
39
|
-
async function collectScanCandidates(root: string, ignorePaths: string[]): Promise<string[]>
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
**Параметри:**
|
|
43
|
-
|
|
44
|
-
- `root` — абсолютний шлях до кореня репозиторію, з якого починається обхід.
|
|
45
|
-
- `ignorePaths` — масив абсолютних шляхів каталогів, які повністю виключаються з обходу (формується через `loadCursorIgnorePaths`).
|
|
46
|
-
|
|
47
|
-
**Що робить:**
|
|
48
|
-
|
|
49
|
-
- Викликає `walkDir(root, visitor, ignorePaths)` (рекурсивний обхід файлової системи).
|
|
50
|
-
- Для кожного відвіданого файлу обчислює відносний шлях від `root`, нормалізує роздільники (Windows `\` → POSIX `/`).
|
|
51
|
-
- Застосовує два фільтри:
|
|
52
|
-
- `shouldSkipFileForGqlScan(rel)` — пропуск службових файлів (`.d.ts`, `auto-imports.d.ts` тощо).
|
|
53
|
-
- `isGqlScanSourceFile(rel)` — допуск лише відповідних розширень (Vue/JS/TS-сімейство).
|
|
54
|
-
- Накопичує **абсолютні** шляхи прийнятих файлів у масив `candidates`.
|
|
55
|
-
|
|
56
|
-
**Повертає:** `Promise<string[]>` — список абсолютних шляхів файлів-кандидатів.
|
|
57
|
-
|
|
58
|
-
**Side effects:** читає метадані файлової системи (через `walkDir`); записів не робить.
|
|
59
|
-
|
|
60
1
|
---
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
```js
|
|
67
|
-
async function collectGqlHits(root: string, candidates: string[]): Promise<string[]>
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
**Параметри:**
|
|
71
|
-
|
|
72
|
-
- `root` — абсолютний шлях до кореня (для обчислення відносних шляхів у результаті).
|
|
73
|
-
- `candidates` — список абсолютних шляхів файлів, отриманих від `collectScanCandidates`.
|
|
74
|
-
|
|
75
|
-
**Що робить:**
|
|
76
|
-
|
|
77
|
-
- Послідовно (`for-of` + `await`) для кожного абсолютного шляху:
|
|
78
|
-
- обчислює відносний шлях і нормалізує роздільники до `/`;
|
|
79
|
-
- читає вміст файлу через `readFile(absPath, 'utf8')`;
|
|
80
|
-
- викликає `sourceFileHasGqlTaggedTemplate(content, rel)` — парсер AST oxc, що враховує особливості `.vue` (витягування `<script>`);
|
|
81
|
-
- якщо результат `true` — додає **відносний** шлях до результуючого масиву `hits`.
|
|
82
|
-
|
|
83
|
-
**Повертає:** `Promise<string[]>` — відносні шляхи файлів, у яких знайдено хоча б одне `gql` tagged template.
|
|
84
|
-
|
|
85
|
-
**Side effects:** читання вмісту файлів з диска. Запис відсутній.
|
|
86
|
-
|
|
2
|
+
docgen:
|
|
3
|
+
source: npm/rules/graphql/js/tooling.mjs
|
|
4
|
+
crc: eb6b4713
|
|
5
|
+
score: 100
|
|
87
6
|
---
|
|
88
7
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
**Сигнатура:**
|
|
92
|
-
|
|
93
|
-
```js
|
|
94
|
-
function checkExtensionsRecommendation(
|
|
95
|
-
pass: (msg: string) => void,
|
|
96
|
-
fail: (msg: string) => void,
|
|
97
|
-
cwd: string
|
|
98
|
-
): void
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
**Параметри:**
|
|
102
|
-
|
|
103
|
-
- `pass` — функція-репортер «успішно» (отримана з `createCheckReporter()`).
|
|
104
|
-
- `fail` — функція-репортер «порушення».
|
|
105
|
-
- `cwd` — абсолютний корінь репозиторію.
|
|
106
|
-
|
|
107
|
-
**Що робить:**
|
|
108
|
-
|
|
109
|
-
1. Формує відносний (`.vscode/extensions.json`) і абсолютний шляхи до файлу VS Code-конфігу.
|
|
110
|
-
2. Якщо файл **не існує** (`existsSync`) — викликає `fail(...)` з повідомленням про те, що треба створити файл і додати `graphql.vscode-graphql` у `recommendations`, посилаючись на `graphql.mdc`. Виходить.
|
|
111
|
-
3. Інакше викликає `runConftestBatch({ policyDirRel: 'graphql/vscode_extensions', namespace: 'graphql.vscode_extensions', files: [pathAbs] })` — делегує перевірку rego-пакету conftest-у.
|
|
112
|
-
4. Якщо `violations.length === 0` — викликає `pass(...)` з повідомленням про відповідність. Інакше — для кожного порушення `v` викликає `fail(v.message)`.
|
|
113
|
-
|
|
114
|
-
**Повертає:** нічого (`void`). Результати фіксуються через `pass` / `fail`.
|
|
115
|
-
|
|
116
|
-
**Side effects:**
|
|
117
|
-
|
|
118
|
-
- читання `.vscode/extensions.json` через зовнішній conftest-процес;
|
|
119
|
-
- виклик `conftest` (binary) усередині `runConftestBatch`;
|
|
120
|
-
- зміна стану внутрішнього reporter-у (накопичення успіхів/порушень).
|
|
121
|
-
|
|
122
|
-
**Виклик умовний:** виконується лише після того, як основна функція `check` виявила `gql` у дереві.
|
|
123
|
-
|
|
124
|
-
---
|
|
125
|
-
|
|
126
|
-
### `check(cwd = process.cwd())`
|
|
127
|
-
|
|
128
|
-
**Сигнатура:**
|
|
129
|
-
|
|
130
|
-
```js
|
|
131
|
-
export async function check(cwd?: string): Promise<number>
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
**Параметри:**
|
|
135
|
-
|
|
136
|
-
- `cwd` — _необов'язковий_ абсолютний шлях до кореня репозиторію. За замовчуванням `process.cwd()`.
|
|
137
|
-
|
|
138
|
-
**Що робить (потік):**
|
|
139
|
-
|
|
140
|
-
1. Створює репортер `createCheckReporter()` і деструктурує з нього `pass`, `fail`.
|
|
141
|
-
2. Завантажує список ігнорованих шляхів через `loadCursorIgnorePaths(root)`.
|
|
142
|
-
3. Викликає `collectScanCandidates(root, ignorePaths)` — отримує список файлів-кандидатів.
|
|
143
|
-
4. Викликає `collectGqlHits(root, candidates)` — отримує файли з `gql`.
|
|
144
|
-
5. **Розгалуження:**
|
|
145
|
-
- Якщо `hits.length === 0` — викликає `pass(...)` з повідомленням «немає `gql\`…\``у джерелах, переглянуто N файлів —`.graphqlrc.yml`не вимагається» і **повертає**`reporter.getExitCode()`(зазвичай`0`).
|
|
146
|
-
- Інакше викликає `pass(...)` зі звітом про N файлів (з перших 5 з суфіксом `…` якщо більше).
|
|
147
|
-
6. Перевіряє наявність `GRAPHQL_RC_FILENAME` (`.graphqlrc.yml`) у корені через `existsSync`:
|
|
148
|
-
- Існує → `pass('.graphqlrc.yml існує')`.
|
|
149
|
-
- Не існує → `fail(...)` з вимогою додати GraphQL Config (з посиланням на `graphql.mdc`).
|
|
150
|
-
7. Викликає `checkExtensionsRecommendation(pass, fail, root)` для перевірки `.vscode/extensions.json`.
|
|
151
|
-
8. Повертає `reporter.getExitCode()`: `0` — усі перевірки пройдені, `1` — є хоча б одне порушення.
|
|
152
|
-
|
|
153
|
-
**Повертає:** `Promise<number>` — exit code (`0` — OK, `1` — порушення).
|
|
154
|
-
|
|
155
|
-
**Side effects:**
|
|
156
|
-
|
|
157
|
-
- читання файлової системи (метадані + вміст файлів кандидатів);
|
|
158
|
-
- читання `.cursor/...` ignore-конфігу;
|
|
159
|
-
- читання `.vscode/extensions.json` (опосередковано через conftest);
|
|
160
|
-
- запуск процесу `conftest` через `runConftestBatch`;
|
|
161
|
-
- мутація стану внутрішнього reporter-у (накопичення pass/fail-повідомлень).
|
|
162
|
-
|
|
163
|
-
## Залежності
|
|
164
|
-
|
|
165
|
-
### Node.js builtins
|
|
166
|
-
|
|
167
|
-
| Модуль | Що використовується | Призначення |
|
|
168
|
-
| ------------------ | ------------------- | ---------------------------------------------------------------------------- |
|
|
169
|
-
| `node:fs` | `existsSync` | Синхронна перевірка наявності `.graphqlrc.yml` та `.vscode/extensions.json`. |
|
|
170
|
-
| `node:fs/promises` | `readFile` | Асинхронне читання вмісту файлів-кандидатів. |
|
|
171
|
-
| `node:path` | `join`, `relative` | Збирання абсолютних шляхів і обчислення відносних шляхів від кореня. |
|
|
172
|
-
|
|
173
|
-
### Внутрішні модулі репозиторію
|
|
174
|
-
|
|
175
|
-
- `../../../scripts/lib/check-reporter.mjs` — `createCheckReporter`: фабрика репортера зі стандартним інтерфейсом `pass` / `fail` / `getExitCode()`.
|
|
176
|
-
- `../lib/graphql-gql-scan.mjs`:
|
|
177
|
-
- `isGqlScanSourceFile(rel)` — предикат «це source-файл, який потенційно містить `gql`» (за розширенням);
|
|
178
|
-
- `shouldSkipFileForGqlScan(rel)` — предикат «цей файл слід ігнорувати при скануванні» (`.d.ts`, `auto-imports.d.ts` тощо);
|
|
179
|
-
- `sourceFileHasGqlTaggedTemplate(content, rel)` — AST-перевірка на наявність `gql\`...\``(через oxc-parser; для`.vue`— після витягування`<script>`).
|
|
180
|
-
- `../../../scripts/lib/load-cursor-config.mjs` — `loadCursorIgnorePaths(root)`: повертає абсолютні шляхи каталогів, повністю виключених з обходу (узгоджено з іншими check-скриптами).
|
|
181
|
-
- `../../../scripts/lib/run-conftest-batch.mjs` — `runConftestBatch({ policyDirRel, namespace, files })`: запускає `conftest` з rego-пакетом і повертає масив `violations` (об'єкти з `.message`).
|
|
182
|
-
- `../../../scripts/utils/walkDir.mjs` — `walkDir(root, visitor, ignorePaths)`: рекурсивний обхід файлової системи з підтримкою списку ігнорування.
|
|
183
|
-
|
|
184
|
-
### Зовнішні артефакти (не імпортуються, але потрібні в runtime)
|
|
185
|
-
|
|
186
|
-
- **`conftest`** як CLI-binary (запускається з `runConftestBatch`).
|
|
187
|
-
- **Rego-політика** в `graphql/vscode_extensions` з namespace `graphql.vscode_extensions` (перевіряє `.vscode/extensions.json`).
|
|
188
|
-
- **`.cursor/ignore`-конфіг** у корені (читається `loadCursorIgnorePaths`).
|
|
189
|
-
- **`graphql.mdc`** — правило, яке цей check реалізує.
|
|
190
|
-
|
|
191
|
-
## Потік виконання / Використання
|
|
192
|
-
|
|
193
|
-
### Запуск як check
|
|
194
|
-
|
|
195
|
-
Модуль використовується з єдиною експортованою функцією `check`:
|
|
196
|
-
|
|
197
|
-
```js
|
|
198
|
-
import { check } from 'npm/rules/graphql/js/tooling.mjs'
|
|
199
|
-
|
|
200
|
-
const exitCode = await check() // або await check('/absolute/path/to/repo')
|
|
201
|
-
process.exit(exitCode)
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
Типово викликається диспетчером check-скриптів інфраструктури `n-cursor` (наприклад, із `npm/scripts/...`), який отримує exit code й агрегує результати по всіх правилах `.mdc`.
|
|
8
|
+
# tooling.mjs
|
|
205
9
|
|
|
206
|
-
|
|
10
|
+
## Огляд
|
|
207
11
|
|
|
208
|
-
|
|
209
|
-
process.cwd() (або переданий cwd)
|
|
210
|
-
│
|
|
211
|
-
▼
|
|
212
|
-
createCheckReporter() ──► { pass, fail, getExitCode }
|
|
213
|
-
│
|
|
214
|
-
▼
|
|
215
|
-
loadCursorIgnorePaths(root) ──► ignorePaths
|
|
216
|
-
│
|
|
217
|
-
▼
|
|
218
|
-
collectScanCandidates(root, ignorePaths)
|
|
219
|
-
│ walkDir(root, visitor, ignorePaths)
|
|
220
|
-
│ filter: !shouldSkipFileForGqlScan && isGqlScanSourceFile
|
|
221
|
-
▼
|
|
222
|
-
candidates: string[]
|
|
223
|
-
│
|
|
224
|
-
▼
|
|
225
|
-
collectGqlHits(root, candidates)
|
|
226
|
-
│ for each: readFile + sourceFileHasGqlTaggedTemplate (oxc-parser AST)
|
|
227
|
-
▼
|
|
228
|
-
hits: string[]
|
|
229
|
-
│
|
|
230
|
-
├── hits.length === 0 ──► pass("немає gql у джерелах") ──► return 0
|
|
231
|
-
│
|
|
232
|
-
└── hits.length > 0
|
|
233
|
-
│
|
|
234
|
-
├── pass("Знайдено gql у N файлі(ах): ...")
|
|
235
|
-
│
|
|
236
|
-
├── existsSync(.graphqlrc.yml)
|
|
237
|
-
│ ├── true ──► pass(".graphqlrc.yml існує")
|
|
238
|
-
│ └── false ──► fail("Відсутній .graphqlrc.yml ...")
|
|
239
|
-
│
|
|
240
|
-
├── checkExtensionsRecommendation(pass, fail, root)
|
|
241
|
-
│ ├── !existsSync(.vscode/extensions.json) ──► fail(...)
|
|
242
|
-
│ └── runConftestBatch(graphql/vscode_extensions)
|
|
243
|
-
│ ├── violations.length === 0 ──► pass(...)
|
|
244
|
-
│ └── for v of violations: fail(v.message)
|
|
245
|
-
│
|
|
246
|
-
└── return reporter.getExitCode() (0 або 1)
|
|
247
|
-
```
|
|
12
|
+
Визначає ім'я файлу конфігурації (`GRAPHQL_RC_FILENAME` = ".graphqlrc.yml") та обов'язкове розширення VS Code (`REQUIRED_GRAPHQL_VSCODE_EXTENSION` = "graphql.vscode-graphql"). Перевіряє наявність конфігурації в `extensions.json` (конфігурація, на яку спирається код) та підтверджує необхідність розширення для роботи з GraphQL (graphql.mdc).
|
|
248
13
|
|
|
249
|
-
|
|
14
|
+
## Поведінка
|
|
250
15
|
|
|
251
|
-
|
|
252
|
-
|
|
16
|
+
GRAPHQL_RC_FILENAME: Повертає ім'я файлу конфігурації GraphQL.
|
|
17
|
+
REQUIRED_GRAPHQL_VSCODE_EXTENSION: Повертає ім'я розширення VS Code, необхідне для GraphQL.
|
|
18
|
+
check: Перевіряє наявність `gql` tagged template у джерелах. Якщо знайдено, вимагає наявності `.graphqlrc.yml` та валідує `.vscode/extensions.json` щодо `graphql.vscode-graphql` (graphql.mdc).
|
|
253
19
|
|
|
254
|
-
|
|
20
|
+
## Публічний API
|
|
255
21
|
|
|
256
|
-
|
|
22
|
+
GRAPHQL_RC_FILENAME — вказує на файл конфігурації GraphQL у корені проєкту (graphql.mdc).
|
|
23
|
+
REQUIRED_GRAPHQL_VSCODE_EXTENSION — вимагає встановлення розширення `graphql.vscode-graphql` для роботи з graphql.mdc.
|
|
24
|
+
check — перевіряє наявність файлу `.graphqlrc.yml` та розширення `graphql.vscode-graphql` при використанні тегів GraphQL.
|
|
257
25
|
|
|
258
|
-
|
|
26
|
+
## Гарантії поведінки
|
|
259
27
|
|
|
260
|
-
-
|
|
261
|
-
-
|
|
262
|
-
- Якщо `gql` знайдено, але `.vscode/extensions.json` відсутній — це порушення, незалежне від rego-перевірки (тобто `fail` без виклику conftest).
|
|
263
|
-
- `collectGqlHits` читає файли **послідовно** (без `Promise.all`) — це навмисно, щоб не перевантажувати I/O при великих репозиторіях.
|
|
264
|
-
- Виявлення `gql` — на рівні AST (oxc-parser), а не регулярних виразів; рядкові збіги типу `// gql\`...\`` у коментарі не дають false-positive.
|
|
28
|
+
- Read-only: файл не виконує операцій запису у файлову систему.
|
|
29
|
+
- Не звертається до мережі.
|
package/rules/hasura/docs/fix.md
CHANGED
|
@@ -1,120 +1,27 @@
|
|
|
1
|
-
|
|
1
|
+
---
|
|
2
|
+
docgen:
|
|
3
|
+
source: npm/rules/hasura/fix.mjs
|
|
4
|
+
crc: 12fc1644
|
|
5
|
+
score: 100
|
|
6
|
+
---
|
|
2
7
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
Файл `npm/rules/hasura/fix.mjs` — тонкий entry-point для правила з ідентифікатором `hasura` у складі CLI-пакета `@nitra/cursor`. Виконує дві ролі одночасно:
|
|
6
|
-
|
|
7
|
-
1. **Library mode** — експортує функцію `run(ctx)`, яка викликається з оркестратора CLI (наприклад, з `runRuleCli` або з агрегаторів типу `n-fix`), що дозволяє запускати правило в межах загального прогону всіх правил без породження окремого процесу.
|
|
8
|
-
2. **Standalone mode** — якщо файл виконується безпосередньо (через `bun rules/<id>/fix.mjs` або `node rules/<id>/fix.mjs`), він виступає самостійним CLI-входом, повністю еквівалентним `npx @nitra/cursor fix hasura`: підвантажує config, застосовує whitelist, друкує summary та повертає процесний exit-code.
|
|
9
|
-
|
|
10
|
-
Уся фактична логіка правила (послідовність кроків `applies → JS-concerns → policy → mdc-refs`) винесена в спільну реалізацію `runStandardRule` із бібліотечного шару `scripts/lib/`. Файл-обгортка несе лише прив'язку правила до власної директорії (через `import.meta.dirname`) та dispatch між двома режимами запуску.
|
|
11
|
-
|
|
12
|
-
Відповідає конвенції дворольового `fix.mjs`, ухваленій для всіх «стандартних» правил у `npm/rules/*/`, тож має мінімальну поверхню коду й не містить специфіки `hasura`: тип правила, скоупи, перевірки та поліcі описуються деінде (`meta.json`, `hasura.mdc`, `js/`, `policy/`).
|
|
13
|
-
|
|
14
|
-
## Експорти / API
|
|
15
|
-
|
|
16
|
-
| Експорт | Тип | Призначення |
|
|
17
|
-
| ------- | ---------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
|
|
18
|
-
| `run` | `(ctx?: RuleContext) => Promise<number>` | Library-mode прогін правила в спільному CLI orchestration. Повертає `0` при відсутності порушень або `1` при наявності порушень. |
|
|
19
|
-
|
|
20
|
-
Файл не має `default`-експорту й не експортує жодних інших символів.
|
|
21
|
-
|
|
22
|
-
Поведінка при безпосередньому запуску файлу як скрипта — побічний ефект (top-level `await runRuleCli(...)` + `process.exit(...)`) і не є частиною програмного API.
|
|
23
|
-
|
|
24
|
-
## Функції
|
|
25
|
-
|
|
26
|
-
### `run(ctx)`
|
|
27
|
-
|
|
28
|
-
Сигнатура: `export function run(ctx)`.
|
|
29
|
-
|
|
30
|
-
- **Параметри:**
|
|
31
|
-
- `ctx` (`RuleContext`, опційний) — контекст прогону, що передається з оркестратора. Тип імпортовано (через JSDoc-tag `@param`) з `../../scripts/lib/run-standard-rule.mjs`. Очікувані поля контексту (за конвенцією `runStandardRule`) — спільні для всіх правил, серед них зокрема `walkCache` (кеш обходу файлової системи, щоб не повторювати walk між кількома правилами в одному прогоні). Якщо `ctx` не передано (`undefined`), `runStandardRule` сам ініціалізує мінімально необхідний контекст.
|
|
32
|
-
- **Повертає:** `Promise<number>` — exit-code правила:
|
|
33
|
-
- `0` — застосовні файли пройшли всі етапи (`applies → JS-concerns → policy → mdc-refs`) без виявлених порушень.
|
|
34
|
-
- `1` — знайдено принаймні одне порушення (або зафіксована помилка валідації, що інтерпретується як failure).
|
|
35
|
-
- **Side effects:**
|
|
36
|
-
- Делегує всю роботу `runStandardRule(import.meta.dirname, ctx)`, який, своєю чергою, читає файли правила (`meta.json`, `*.mdc`, `js/*.mjs`, `policy/*.rego`) із директорії, обходить цільові файли проєкту, друкує діагностичні повідомлення у stdout/stderr та повертає підсумкове число порушень. Сам `run` стану не модифікує.
|
|
37
|
-
- Прив'язує правило до своєї директорії саме через `import.meta.dirname`, тож при переміщенні файлу `fix.mjs` правило автоматично «переїде» разом із його артефактами (без хардкоду шляхів).
|
|
38
|
-
|
|
39
|
-
### Безіменна процедура top-level (standalone-блок)
|
|
8
|
+
# fix.mjs
|
|
40
9
|
|
|
41
|
-
|
|
42
|
-
if (isRunAsCli(import.meta.url)) {
|
|
43
|
-
process.exit(await runRuleCli(import.meta.dirname))
|
|
44
|
-
}
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
- **Тип:** виконується один раз під час завантаження модуля.
|
|
48
|
-
- **Параметри:** немає (CLI-аргументи зчитуються всередині `runRuleCli` через `process.argv`).
|
|
49
|
-
- **Повертає:** нічого (виконує `process.exit`).
|
|
50
|
-
- **Side effects:**
|
|
51
|
-
- `isRunAsCli(import.meta.url)` визначає, чи модуль завантажено як прямий entry-point (а не як `import`).
|
|
52
|
-
- У випадку прямого запуску викликає `runRuleCli(import.meta.dirname)`, який повертає числовий exit-code, і негайно завершує процес із цим кодом через `process.exit`.
|
|
53
|
-
- Через `process.exit` подальші асинхронні задачі (мікротаски, відкриті ресурси) можуть бути обірвані — це свідомо: standalone entry-point повинен повертати чіткий код для CI/IDE-інтеграцій.
|
|
54
|
-
- **Локальні правила лінту:**
|
|
55
|
-
- Поряд із викликом стоїть прагма `// eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE`, оскільки за загальним правилом `process.exit` заборонений, але для CLI-входів дозволений.
|
|
56
|
-
|
|
57
|
-
## Залежності
|
|
58
|
-
|
|
59
|
-
### Внутрішні (відносні імпорти)
|
|
60
|
-
|
|
61
|
-
- `../../scripts/lib/run-rule-cli.mjs`
|
|
62
|
-
- `isRunAsCli(metaUrl: string): boolean` — детектор «чи запущено модуль як скрипт». Зазвичай порівнює `import.meta.url` із URL виконуваного скрипта (`process.argv[1]`), щоб розрізнити `import` та прямий запуск.
|
|
63
|
-
- `runRuleCli(ruleDir: string): Promise<number>` — повноцінний CLI-runner: парсить аргументи, читає глобальний config (whitelist, severity, опції), запускає правило з директорії `ruleDir` і друкує summary. Повертає exit-code.
|
|
64
|
-
- `../../scripts/lib/run-standard-rule.mjs`
|
|
65
|
-
- `runStandardRule(ruleDir: string, ctx?: RuleContext): Promise<number>` — стандартна послідовність кроків для «звичайного» правила: `applies → JS-concerns → policy → mdc-refs`. Це публічне ядро правил-обгорток на кшталт `fix.mjs`.
|
|
66
|
-
- `RuleContext` (тип) — імпортовано лише в JSDoc для типізації параметра `run`.
|
|
67
|
-
|
|
68
|
-
### Зовнішні
|
|
69
|
-
|
|
70
|
-
Прямих залежностей від npm-пакетів файл не має. Усі сторонні бібліотеки, які можуть знадобитися (наприклад, walker, парсер `.mdc`, OPA-обгортки тощо), використовуються транзитивно через `run-standard-rule.mjs` та `run-rule-cli.mjs`.
|
|
71
|
-
|
|
72
|
-
### Залежність від файлів-побратимів у директорії правила
|
|
73
|
-
|
|
74
|
-
Хоча `fix.mjs` сам нічого з них не читає, `runStandardRule(import.meta.dirname)` спирається на сусідні артефакти у тій же директорії правила `hasura/`:
|
|
75
|
-
|
|
76
|
-
- `meta.json` — метадані правила (id, scope, опції тощо);
|
|
77
|
-
- `hasura.mdc` — людинозрозумілий опис правила у форматі Cursor `.mdc`;
|
|
78
|
-
- `js/` — JS-перевірки правила (`check-*.mjs`, fix-helpers);
|
|
79
|
-
- `policy/` — Rego-полісі для OPA-кроку.
|
|
80
|
-
|
|
81
|
-
Тож структурно файл `fix.mjs` має сенс лише як частина повної папки правила.
|
|
82
|
-
|
|
83
|
-
## Потік виконання / Використання
|
|
84
|
-
|
|
85
|
-
### Сценарій A — Library mode (з оркестратора)
|
|
10
|
+
## Огляд
|
|
86
11
|
|
|
87
|
-
|
|
88
|
-
2. Викликає `await run(ctx)`, передаючи контекст із попередньо побудованим `walkCache` та іншими опціями.
|
|
89
|
-
3. `run` синхронно повертає результат виклику `runStandardRule(import.meta.dirname, ctx)`.
|
|
90
|
-
4. `runStandardRule`:
|
|
91
|
-
- читає `meta.json` із директорії правила;
|
|
92
|
-
- проганяє послідовність `applies` (фільтр цільових файлів) → JS-concerns (динамічно підвантажені `js/check-*.mjs`) → policy (OPA з `policy/*.rego`) → mdc-refs (валідація `.mdc`-посилань);
|
|
93
|
-
- агрегує знахідки й повертає кількість порушень як exit-code (`0`/`1`).
|
|
94
|
-
5. Оркестратор підсумовує exit-коди всіх правил.
|
|
12
|
+
Цей файл ініціює застосування правил. Він запускає процес, що включає перевірку JS-занепокоєнь та політик. При самостійному запуску скрипт завантажує конфігурацію та вайтлістинг, а також надає звіт про виконання.
|
|
95
13
|
|
|
96
|
-
|
|
14
|
+
## Поведінка
|
|
97
15
|
|
|
98
|
-
1.
|
|
99
|
-
2.
|
|
100
|
-
3. Виконується `await runRuleCli(import.meta.dirname)`:
|
|
101
|
-
- парсинг CLI-аргументів (`--whitelist`, `--severity`, прапори `-q`/`-v` тощо — деталі в `run-rule-cli.mjs`);
|
|
102
|
-
- підвантаження конфіг-файлу пакета;
|
|
103
|
-
- застосування whitelist;
|
|
104
|
-
- виклик внутрішнього еквівалента `runStandardRule` для цієї ж директорії;
|
|
105
|
-
- друк summary-таблиці результатів.
|
|
106
|
-
4. `process.exit(<exit-code>)` миттєво завершує процес зі значенням, яке повернув `runRuleCli`.
|
|
16
|
+
1. Викликати функцію `run` для виконання правила. Це ініціює процес застосування правил, включаючи перевірку JS-занепокоєнь, політик та посилань MDC.
|
|
17
|
+
2. Якщо скрипт виконується як окрема утиліта (standalone), викликати механізм оркестрації для виконання правила. Це забезпечує повну функціональність, включаючи завантаження конфігурації, вайтлістинг та підсумок.
|
|
107
18
|
|
|
108
|
-
|
|
19
|
+
## Публічний API
|
|
109
20
|
|
|
110
|
-
|
|
111
|
-
- **Локально:** `npx @nitra/cursor fix hasura` запускає той самий entry-point через диспетчер CLI пакета (а не напряму).
|
|
112
|
-
- **Інтеграція в IDE:** редактор може імпортувати `run` і викликати його в окремому процесі для отримання структурованого результату по правилу `hasura` (наприклад, через виклик `bun -e "import('...fix.mjs').then(m => m.run())"`).
|
|
113
|
-
- **Агрегатори скілів** (наприклад, `n-fix`): паралельно або послідовно імпортують `run` із усіх правил `npm/rules/*/fix.mjs`, передають спільний `ctx` із `walkCache`, щоб уникнути повторного обходу файлової системи.
|
|
21
|
+
run — виконує послідовність дій: застосовує правила, обробляє JavaScript-занепокоєння, перевіряє політику та посилання MDC.
|
|
114
22
|
|
|
115
|
-
|
|
23
|
+
## Гарантії поведінки
|
|
116
24
|
|
|
117
|
-
-
|
|
118
|
-
-
|
|
119
|
-
-
|
|
120
|
-
- Файл нейтральний щодо помилок: `runStandardRule` та `runRuleCli` самі вирішують, чи виносити exception у консоль і конвертувати її в exit-code; `fix.mjs` не обгортає виклики в `try/catch`.
|
|
25
|
+
- Read-only: файл не виконує операцій запису у файлову систему.
|
|
26
|
+
- Кешує результати в межах одного прогону.
|
|
27
|
+
- Не звертається до мережі.
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
docgen:
|
|
3
|
+
source: npm/rules/js-bun-db/lib/bun-sql-scan.mjs
|
|
4
|
+
crc: 990f04d7
|
|
5
|
+
---
|
|
6
|
+
|
|
1
7
|
# bun-sql-scan.mjs
|
|
2
8
|
|
|
3
9
|
## Огляд
|
|
@@ -270,7 +276,7 @@ Set-константи:
|
|
|
270
276
|
|
|
271
277
|
```js
|
|
272
278
|
import { SQL } from 'bun'
|
|
273
|
-
|
|
279
|
+
|
|
274
280
|
/**
|
|
275
281
|
*
|
|
276
282
|
*/
|
|
@@ -284,7 +290,7 @@ Set-константи:
|
|
|
284
290
|
|
|
285
291
|
```js
|
|
286
292
|
import { sql } from 'bun'
|
|
287
|
-
|
|
293
|
+
|
|
288
294
|
const text = `select * from ${tableName}`
|
|
289
295
|
sql.unsafe(text) // <-- порушення: немає // allow-unsafe: <reason>
|
|
290
296
|
```
|
|
@@ -314,7 +320,7 @@ Set-константи:
|
|
|
314
320
|
|
|
315
321
|
```js
|
|
316
322
|
import { sql } from 'bun'
|
|
317
|
-
|
|
323
|
+
|
|
318
324
|
await sql.end() // <-- порушення: немає // allow-pg-leftover: <reason>
|
|
319
325
|
```
|
|
320
326
|
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
docgen:
|
|
3
|
+
source: npm/rules/js-lint-ci/fix.mjs
|
|
4
|
+
crc: 12fc1644
|
|
5
|
+
---
|
|
6
|
+
|
|
1
7
|
# fix.mjs — точка входу правила `js-lint-ci`
|
|
2
8
|
|
|
3
9
|
## Огляд
|
|
@@ -82,7 +88,7 @@ if (isRunAsCli(import.meta.url)) {
|
|
|
82
88
|
- **Дія:** виконує `await runRuleCli(import.meta.dirname)` — повний CLI-сценарій (config-loading, whitelist, summary), а потім завершує процес `process.exit(<exit-code>)` з тим самим кодом, що повернув `runRuleCli` (0 або 1) — це критично для CI/IDE, які орієнтуються на код виходу.
|
|
83
89
|
- **Side effects:** завершення процесу (`process.exit`), вся I/O `runRuleCli`. Виклики `process.exit` тут спеціально дозволені директивою:
|
|
84
90
|
```js
|
|
85
|
-
|
|
91
|
+
|
|
86
92
|
```
|
|
87
93
|
|
|
88
94
|
## Залежності
|
package/rules/js-run/docs/fix.md
CHANGED