@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.
Files changed (214) hide show
  1. package/.claude-template/settings.template.json +22 -0
  2. package/.pi-template/extensions/n-cursor-adr/docs/index.md +15 -9
  3. package/CHANGELOG.md +18 -1
  4. package/bin/n-cursor.js +73 -16
  5. package/docs/stryker.config.md +6 -0
  6. package/docs/vitest.config.md +6 -0
  7. package/lib/docs/llm.md +29 -0
  8. package/lib/docs/models.md +24 -17
  9. package/lib/docs/omlx.md +32 -0
  10. package/lib/llm.mjs +137 -0
  11. package/lib/omlx.mjs +49 -4
  12. package/package.json +1 -1
  13. package/rules/abie/docs/fix.md +6 -0
  14. package/rules/abie/js/docs/applies.md +6 -0
  15. package/rules/abie/js/docs/env_dns.md +25 -22
  16. package/rules/abie/js/docs/firebase_hosting.md +6 -0
  17. package/rules/abie/js/docs/hc_pairing.md +21 -25
  18. package/rules/abie/js/docs/ua_http_route.md +27 -19
  19. package/rules/abie/js/docs/ua_node_selector.md +24 -19
  20. package/rules/abie/lib/docs/enabled.md +13 -7
  21. package/rules/abie/lib/docs/env-dns.md +9 -3
  22. package/rules/abie/lib/docs/hc-yaml.md +6 -0
  23. package/rules/abie/lib/docs/http-route.md +6 -0
  24. package/rules/abie/lib/docs/k8s-tree.md +6 -0
  25. package/rules/abie/lib/docs/kustomization-patches.md +6 -0
  26. package/rules/abie/lib/docs/overlay-paths.md +6 -0
  27. package/rules/abie/lib/docs/yaml.md +6 -0
  28. package/rules/adr/docs/fix.md +6 -0
  29. package/rules/adr/js/docs/hooks.md +29 -244
  30. package/rules/bun/docs/fix.md +6 -0
  31. package/rules/bun/js/docs/layout.md +37 -375
  32. package/rules/capacitor/docs/fix.md +22 -108
  33. package/rules/capacitor/js/docs/platforms.md +62 -268
  34. package/rules/changelog/docs/fix.md +6 -0
  35. package/rules/changelog/js/docs/consistency.md +36 -383
  36. package/rules/changelog/lib/docs/package-manifest.md +6 -0
  37. package/rules/ci4/docs/fix.md +23 -165
  38. package/rules/ci4/js/docs/marksman_config.md +9 -1
  39. package/rules/docker/docs/fix.md +6 -0
  40. package/rules/docker/js/docs/lint.md +55 -239
  41. package/rules/docker/lib/docs/docker-hadolint.md +6 -0
  42. package/rules/docker/lib/docs/docker-mirror.md +6 -0
  43. package/rules/docker/lib/docs/docker-native-addon.md +6 -0
  44. package/rules/docker/lib/docs/docker-nginx-user.md +6 -0
  45. package/rules/docker/lint/docs/lint.md +9 -1
  46. package/rules/efes/docs/fix.md +6 -0
  47. package/rules/feedback/docs/fix.md +21 -131
  48. package/rules/ga/docs/fix.md +14 -12
  49. package/rules/ga/js/docs/lint.md +12 -9
  50. package/rules/ga/js/docs/workflows.md +20 -19
  51. package/rules/ga/lint/docs/lint.md +6 -0
  52. package/rules/graphql/docs/fix.md +6 -0
  53. package/rules/graphql/js/docs/tooling.md +18 -253
  54. package/rules/graphql/lib/docs/graphql-gql-scan.md +6 -0
  55. package/rules/hasura/docs/fix.md +18 -111
  56. package/rules/image-avif/docs/fix.md +6 -0
  57. package/rules/image-avif/js/docs/avif_generation.md +6 -0
  58. package/rules/js-bun-db/lib/docs/bun-sql-scan.md +9 -3
  59. package/rules/js-bun-redis/lib/docs/redis-imports.md +6 -0
  60. package/rules/js-lint/js/docs/utils_imports.md +6 -0
  61. package/rules/js-lint-ci/docs/fix.md +7 -1
  62. package/rules/js-mssql/docs/fix.md +6 -0
  63. package/rules/js-mssql/lib/docs/mssql-pool-scan.md +6 -0
  64. package/rules/js-run/docs/fix.md +6 -0
  65. package/rules/js-run/lib/docs/bunyan-imports.md +6 -0
  66. package/rules/js-run/lib/docs/check-env-scan.md +6 -0
  67. package/rules/js-run/lib/docs/conn-file-rules.md +6 -0
  68. package/rules/js-run/lib/docs/conn-imports-scan.md +6 -0
  69. package/rules/js-run/lib/docs/promise-settimeout-scan.md +6 -0
  70. package/rules/js-run/lib/docs/temporal-scan.md +6 -0
  71. package/rules/k8s/docs/fix.md +6 -0
  72. package/rules/k8s/lint/docs/lint.md +6 -0
  73. package/rules/nginx-default-tpl/docs/fix.md +6 -0
  74. package/rules/npm-module/js/docs/header_doc_pointer.md +7 -0
  75. package/rules/npm-module/js/header_doc_pointer.mjs +2 -8
  76. package/rules/php/docs/fix.md +6 -0
  77. package/rules/php/lint/docs/lint.md +6 -0
  78. package/rules/python/docs/fix.md +6 -0
  79. package/rules/python/lint/docs/lint.md +6 -0
  80. package/rules/rego/lint/docs/lint.md +6 -0
  81. package/rules/release/docs/change.md +6 -0
  82. package/rules/release/docs/fix.md +6 -0
  83. package/rules/release/docs/release.md +6 -0
  84. package/rules/release/lib/docs/aggregate.md +6 -0
  85. package/rules/release/lib/docs/change-file.md +6 -0
  86. package/rules/release/lib/docs/fallback.md +6 -0
  87. package/rules/rust/lib/docs/has-cargo-toml.md +6 -0
  88. package/rules/security/docs/fix.md +7 -1
  89. package/rules/security/js/docs/lint.md +6 -0
  90. package/rules/style-lint/docs/fix.md +6 -0
  91. package/rules/tauri/docs/fix.md +6 -0
  92. package/rules/test/docs/fix.md +6 -0
  93. package/rules/test/js/data/stryker_config/docs/stryker-vue-macros-ignorer.md +6 -0
  94. package/rules/test/js/data/stryker_config/docs/stryker.config.baseline.md +6 -0
  95. package/rules/test/js/data/stryker_config/docs/stryker.config.vue.baseline.md +6 -0
  96. package/rules/test/js/data/vitest_config/docs/vitest.config.baseline.md +6 -0
  97. package/rules/text/docs/fix.md +6 -0
  98. package/rules/text/lint/docs/lint.md +6 -0
  99. package/rules/text/lint/docs/run-dotenv-linter.md +6 -0
  100. package/rules/text/lint/docs/run-shellcheck.md +6 -0
  101. package/rules/text/lint/docs/run-v8r.md +6 -0
  102. package/rules/vue/lib/docs/vue-forbidden-imports.md +6 -0
  103. package/scripts/coverage-classify/cache.mjs +1 -1
  104. package/scripts/coverage-classify/docs/apply.md +6 -0
  105. package/scripts/coverage-classify/docs/cache.md +6 -0
  106. package/scripts/coverage-classify/docs/prompt.md +6 -0
  107. package/scripts/coverage-classify/docs/verdict-schema.md +6 -0
  108. package/scripts/coverage-classify/prompt.mjs +1 -1
  109. package/scripts/coverage-fix-extract.mjs +1 -1
  110. package/scripts/coverage-fix.mjs +2 -1
  111. package/scripts/docs/auto-skills.md +6 -0
  112. package/scripts/docs/build-agents-commands.md +7 -1
  113. package/scripts/docs/cli-entry.md +6 -0
  114. package/scripts/docs/coverage-fix-extract.md +6 -0
  115. package/scripts/docs/coverage-fix.md +6 -0
  116. package/scripts/docs/ensure-nitra-cursor-dev-dependencies.md +6 -0
  117. package/scripts/docs/lint-cli.md +6 -0
  118. package/scripts/docs/post-tool-use-fix.md +6 -0
  119. package/scripts/docs/rename-yaml-extensions.md +6 -0
  120. package/scripts/docs/skills-cli.md +6 -0
  121. package/scripts/docs/sync-setup-bun-deps-action.md +6 -0
  122. package/scripts/docs/upgrade-nitra-cursor-and-install.md +6 -0
  123. package/scripts/docs/worktree-cli.md +6 -0
  124. package/scripts/lib/docs/assert-project-root.md +6 -0
  125. package/scripts/lib/docs/check-mdc-template-refs.md +6 -0
  126. package/scripts/lib/docs/check-reporter.md +6 -0
  127. package/scripts/lib/docs/diff-added-lines.md +6 -0
  128. package/scripts/lib/docs/discover-check-rules-from-cursor.md +6 -0
  129. package/scripts/lib/docs/discover-checkable-rules.md +6 -0
  130. package/scripts/lib/docs/ensure-tool.md +6 -0
  131. package/scripts/lib/docs/generated-markdown.md +6 -0
  132. package/scripts/lib/docs/gha-workflow.md +6 -0
  133. package/scripts/lib/docs/inline-template-links.md +6 -0
  134. package/scripts/lib/docs/list-rule-ids.md +6 -0
  135. package/scripts/lib/docs/load-cursor-config.md +6 -0
  136. package/scripts/lib/docs/mirror-parity.md +6 -0
  137. package/scripts/lib/docs/read-n-cursor-config-lite.md +6 -0
  138. package/scripts/lib/docs/resolve-target-files.md +6 -0
  139. package/scripts/lib/docs/root-notice.md +6 -0
  140. package/scripts/lib/docs/rule-meta-helpers.md +6 -0
  141. package/scripts/lib/docs/rule-meta.md +6 -0
  142. package/scripts/lib/docs/run-conftest-batch.md +6 -0
  143. package/scripts/lib/docs/run-lint-step.md +6 -0
  144. package/scripts/lib/docs/run-rule-cli.md +6 -0
  145. package/scripts/lib/docs/run-rule.md +6 -0
  146. package/scripts/lib/docs/run-standard-lint.md +6 -0
  147. package/scripts/lib/docs/run-standard-rule.md +6 -0
  148. package/scripts/lib/docs/skill-meta.md +6 -0
  149. package/scripts/lib/docs/template.md +6 -0
  150. package/scripts/lib/docs/timing-summary.md +6 -0
  151. package/scripts/lib/docs/workspaces.md +6 -0
  152. package/scripts/lib/docs/worktree-notice.md +6 -0
  153. package/scripts/lib/docs/worktree.md +6 -0
  154. package/scripts/lib/mirror-parity.mjs +1 -1
  155. package/scripts/lib/root-notice.mjs +1 -1
  156. package/scripts/lib/worktree-notice.mjs +5 -5
  157. package/scripts/lib/worktree.mjs +1 -1
  158. package/scripts/sync-claude-config.mjs +3 -0
  159. package/scripts/utils/docs/ast-scan-utils.md +6 -0
  160. package/scripts/utils/docs/ensure-gitignore-entries.md +6 -0
  161. package/scripts/utils/docs/find-package-json-paths.md +6 -0
  162. package/scripts/utils/docs/lock-cache-dir.md +6 -0
  163. package/scripts/utils/docs/pass.md +6 -0
  164. package/scripts/utils/docs/resolve-cargo-manifest.md +6 -0
  165. package/scripts/utils/docs/resolve-cmd.md +6 -0
  166. package/scripts/utils/docs/resolve-js-root.md +6 -0
  167. package/scripts/utils/docs/test-helpers.md +6 -0
  168. package/scripts/utils/docs/walk-cache.md +6 -0
  169. package/scripts/utils/docs/walkDir.md +6 -0
  170. package/scripts/utils/docs/worktree-fingerprint.md +6 -0
  171. package/scripts/utils/resolve-js-root.mjs +1 -1
  172. package/skills/doc-aggregate/SKILL.md +129 -0
  173. package/skills/doc-aggregate/js/docgen-ignore.mjs +9 -0
  174. package/skills/{docgen → doc-aggregate}/js/docgen-scan.mjs +22 -67
  175. package/skills/doc-aggregate/js/docs/docgen-ignore.md +21 -0
  176. package/skills/doc-files/SKILL.md +100 -0
  177. package/skills/doc-files/js/docgen-crc.mjs +164 -0
  178. package/skills/{docgen → doc-files}/js/docgen-extract-anchors.mjs +48 -13
  179. package/skills/{docgen → doc-files}/js/docgen-extract.mjs +39 -10
  180. package/skills/doc-files/js/docgen-files-batch.mjs +181 -0
  181. package/skills/doc-files/js/docgen-gen.mjs +336 -0
  182. package/skills/{docgen → doc-files}/js/docgen-prompts.mjs +65 -50
  183. package/skills/doc-files/js/docgen-scan.mjs +298 -0
  184. package/skills/doc-files/js/docs/docgen-crc.md +32 -0
  185. package/skills/doc-files/js/docs/docgen-extract-anchors.md +27 -0
  186. package/skills/doc-files/js/docs/docgen-extract.md +29 -0
  187. package/skills/doc-files/js/docs/docgen-files-batch.md +25 -0
  188. package/skills/doc-files/js/docs/docgen-gen.md +30 -0
  189. package/skills/doc-files/js/docs/docgen-prompts.md +32 -0
  190. package/skills/doc-files/js/docs/docgen-scan.md +25 -0
  191. package/skills/doc-files/js/units-js.mjs +139 -0
  192. package/skills/doc-files/js/units.mjs +19 -0
  193. package/skills/doc-files/meta.json +1 -0
  194. package/skills/fix/js/docs/llm-worker.md +6 -0
  195. package/skills/fix/js/docs/orchestrator.md +6 -0
  196. package/skills/fix/js/llm-worker.mjs +3 -3
  197. package/skills/fix/js/orchestrator.mjs +1 -1
  198. package/skills/start-check/js/check.mjs +5 -3
  199. package/skills/start-check/js/docs/check.md +6 -0
  200. package/skills/docgen/SKILL.md +0 -224
  201. package/skills/docgen/bench/etalon/firebase_hosting.md +0 -19
  202. package/skills/docgen/bench/etalon/k8s-tree.md +0 -24
  203. package/skills/docgen/bench/etalon/overlay-paths.md +0 -24
  204. package/skills/docgen/js/docgen-batch-omlx.mjs +0 -82
  205. package/skills/docgen/js/docgen-batch.mjs +0 -95
  206. package/skills/docgen/js/docgen-compare-pi-vs-direct.mjs +0 -95
  207. package/skills/docgen/js/docgen-gen.mjs +0 -306
  208. package/skills/docgen/js/docs/docgen-extract.md +0 -28
  209. package/skills/docgen/js/docs/docgen-gen.md +0 -41
  210. package/skills/docgen/js/docs/docgen-ignore.md +0 -24
  211. package/skills/docgen/js/docs/docgen-prompts.md +0 -24
  212. package/skills/docgen/js/docs/docgen-scan.md +0 -48
  213. /package/skills/{docgen → doc-aggregate}/meta.json +0 -0
  214. /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
- ### `collectGqlHits(root, candidates)`
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
- ### `checkExtensionsRecommendation(pass, fail, cwd)`
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
- ### Послідовність дій усередині `check`
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
- - `pass` інформативне повідомлення про успішну перевірку (логнеться як OK, не впливає на exit code).
252
- - `fail` повідомлення про порушення; навіть одне `fail` робить `getExitCode()` рівним `1`.
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
- `graphql.mdc` вимагає `.graphqlrc.yml` і VS Code-розширення `graphql.vscode-graphql` **лише** для проєктів, де реально використовуються `gql` tagged template literals. У монорепо це дозволяє не «спамити» правилом workspace-и, що не торкаються GraphQL check спочатку доводить релевантність (`hits.length > 0`), і лише потім вимагає інфраструктуру.
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
- - Шляхи в `hits` та в попередженнях завжди **відносні** до `root`, з POSIX-роздільниками `/` (навіть на Windows).
261
- - Перші 5 файлів-збігів показуються у повідомленні `pass`; решта приховується за суфіксом `…`.
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
+ - Не звертається до мережі.
@@ -1,3 +1,9 @@
1
+ ---
2
+ docgen:
3
+ source: npm/rules/graphql/lib/graphql-gql-scan.mjs
4
+ crc: e110f9dd
5
+ ---
6
+
1
7
  # graphql-gql-scan.mjs
2
8
 
3
9
  ## Огляд
@@ -1,120 +1,27 @@
1
- # fix.mjs — entry-point правила `hasura`
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
- ```js
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
- 1. Оркестратор (`n-cursor` CLI, агрегатор скілів, тести) робить `import { run } from '<path>/npm/rules/hasura/fix.mjs'`.
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
- ### Сценарій B — Standalone CLI
14
+ ## Поведінка
97
15
 
98
- 1. Користувач/CI виконує `bun npm/rules/hasura/fix.mjs [args...]`.
99
- 2. На завантаженні модуля Node/Bun обчислює `isRunAsCli(import.meta.url)` для прямого запуску результат `true`.
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
- - **CI:** `bun npm/rules/hasura/fix.mjs` як standalone-крок у пайплайні; ненульовий exit-code зриває build.
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
- - `import.meta.dirname` (Node 20.11 / Bun) повертає абсолютний шлях до директорії модуля без потреби в `fileURLToPath(import.meta.url)`. Це поточний рекомендований спосіб локалізації власної директорії в ESM-модулях.
118
- - Прапор `await` у `process.exit(await runRuleCli(...))` працює завдяки top-level await у ESM — додаткової `main()`-обгортки не потрібно.
119
- - Свідомо обираний `process.exit` (а не «м'який» вихід через `process.exitCode = ...`) гарантує детермінований код повернення для CI/IDE навіть якщо хтось у фоновому таску щось «недописав».
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/image-avif/fix.mjs
4
+ crc: 12fc1644
5
+ ---
6
+
1
7
  # `fix.mjs` — entry-point правила `image-avif`
2
8
 
3
9
  ## Огляд
@@ -1,3 +1,9 @@
1
+ ---
2
+ docgen:
3
+ source: npm/rules/image-avif/js/avif_generation.mjs
4
+ crc: 101bb0dd
5
+ ---
6
+
1
7
  # avif_generation.mjs
2
8
 
3
9
  ## Огляд
@@ -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-bun-redis/lib/redis-imports.mjs
4
+ crc: 887fc929
5
+ ---
6
+
1
7
  # redis-imports.mjs
2
8
 
3
9
  ## Огляд
@@ -1,3 +1,9 @@
1
+ ---
2
+ docgen:
3
+ source: npm/rules/js-lint/js/utils_imports.mjs
4
+ crc: 7eaeaf96
5
+ ---
6
+
1
7
  # utils_imports.mjs — перевірка кордону `utils/`-каталогів
2
8
 
3
9
  ## Огляд
@@ -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
  ## Залежності
@@ -1,3 +1,9 @@
1
+ ---
2
+ docgen:
3
+ source: npm/rules/js-mssql/fix.mjs
4
+ crc: 12fc1644
5
+ ---
6
+
1
7
  # `npm/rules/js-mssql/fix.mjs`
2
8
 
3
9
  ## Огляд
@@ -1,3 +1,9 @@
1
+ ---
2
+ docgen:
3
+ source: npm/rules/js-mssql/lib/mssql-pool-scan.mjs
4
+ crc: 7490294a
5
+ ---
6
+
1
7
  # mssql-pool-scan.mjs
2
8
 
3
9
  ## Огляд
@@ -1,3 +1,9 @@
1
+ ---
2
+ docgen:
3
+ source: npm/rules/js-run/fix.mjs
4
+ crc: 12fc1644
5
+ ---
6
+
1
7
  # fix.mjs — точка входу правила `js-run`
2
8
 
3
9
  ## Огляд
@@ -1,3 +1,9 @@
1
+ ---
2
+ docgen:
3
+ source: npm/rules/js-run/lib/bunyan-imports.mjs
4
+ crc: 5f403a53
5
+ ---
6
+
1
7
  # `bunyan-imports.mjs`
2
8
 
3
9
  ## Огляд
@@ -1,3 +1,9 @@
1
+ ---
2
+ docgen:
3
+ source: npm/rules/js-run/lib/check-env-scan.mjs
4
+ crc: 56c971d4
5
+ ---
6
+
1
7
  # `check-env-scan.mjs` — AST-сканер правила «process.env / CheckEnv»
2
8
 
3
9
  ## Огляд
@@ -1,3 +1,9 @@
1
+ ---
2
+ docgen:
3
+ source: npm/rules/js-run/lib/conn-file-rules.mjs
4
+ crc: 4bebf12c
5
+ ---
6
+
1
7
  # conn-file-rules.mjs
2
8
 
3
9
  ## Огляд
@@ -1,3 +1,9 @@
1
+ ---
2
+ docgen:
3
+ source: npm/rules/js-run/lib/conn-imports-scan.mjs
4
+ crc: 5234d8ba
5
+ ---
6
+
1
7
  # conn-imports-scan.mjs
2
8
 
3
9
  ## Огляд
@@ -1,3 +1,9 @@
1
+ ---
2
+ docgen:
3
+ source: npm/rules/js-run/lib/promise-settimeout-scan.mjs
4
+ crc: a7cea379
5
+ ---
6
+
1
7
  # promise-settimeout-scan.mjs
2
8
 
3
9
  ## Огляд
@@ -1,3 +1,9 @@
1
+ ---
2
+ docgen:
3
+ source: npm/rules/js-run/lib/temporal-scan.mjs
4
+ crc: 5b15b070
5
+ ---
6
+
1
7
  # temporal-scan.mjs
2
8
 
3
9
  ## Огляд