@nitra/cursor 12.8.2 → 12.8.4

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 (136) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/bin/n-cursor.js +1 -1
  3. package/package.json +1 -1
  4. package/rules/js/docs/index.md +3 -3
  5. package/rules/js/docs/main.md +6 -6
  6. package/rules/js/js/docs/check.md +12 -17
  7. package/rules/js/js/docs/index.md +4 -4
  8. package/rules/js/js/docs/tooling.md +8 -8
  9. package/rules/js/js/docs/utils_imports.md +21 -200
  10. package/rules/npm-module/js/docs/index.md +5 -5
  11. package/rules/npm-module/js/docs/rule_meta.md +13 -13
  12. package/rules/npm-module/js/docs/skill_meta.md +19 -9
  13. package/rules/npm-module/js/rule_meta.mjs +9 -9
  14. package/rules/npm-module/js/skill_meta.mjs +6 -6
  15. package/rules/{style-lint → style}/docs/fix.md +1 -1
  16. package/rules/{style-lint → style}/docs/index.md +3 -3
  17. package/rules/{style-lint → style}/docs/main.md +1 -1
  18. package/rules/{style-lint → style}/js/docs/index.md +3 -3
  19. package/rules/{style-lint → style}/js/docs/tooling.md +3 -3
  20. package/rules/{style-lint → style}/js/tooling.mjs +1 -1
  21. package/rules/{style-lint/style-lint.mdc → style/main.mdc} +3 -3
  22. package/rules/{style-lint → style}/policy/lint_style_yml/lint_style_yml.rego +2 -2
  23. package/rules/{style-lint → style}/policy/lint_style_yml/template/lint-style.yml.snippet.yml +1 -1
  24. package/rules/{style-lint → style}/policy/package_json/package_json.rego +3 -3
  25. package/rules/{style-lint → style}/policy/vscode_extensions/vscode_extensions.rego +2 -2
  26. package/rules/{style-lint → style}/policy/vscode_settings/vscode_settings.rego +2 -2
  27. package/rules/test/js/docs/index.md +7 -7
  28. package/rules/test/js/docs/stryker_config.md +18 -35
  29. package/rules/test/js/docs/vitest-config-pool-forks.md +14 -12
  30. package/schemas/v8r-catalog.json +4 -4
  31. package/scripts/docs/index.md +16 -16
  32. package/scripts/docs/sync-setup-bun-deps-action.md +13 -14
  33. package/scripts/lib/check-mdc-template-refs.mjs +2 -2
  34. package/scripts/lib/docs/check-mdc-template-refs.md +12 -214
  35. package/scripts/lib/docs/gha-workflow.md +1 -1
  36. package/scripts/lib/docs/index.md +36 -36
  37. package/scripts/lib/docs/mirror-parity.md +18 -157
  38. package/scripts/lib/docs/rule-meta.md +19 -22
  39. package/scripts/lib/docs/run-rule.md +11 -11
  40. package/scripts/lib/docs/skill-meta.md +17 -19
  41. package/scripts/lib/docs/timing-summary.md +6 -6
  42. package/scripts/lib/gha-workflow.mjs +1 -1
  43. package/scripts/lib/mirror-parity.mjs +1 -1
  44. package/scripts/lib/rule-meta.mjs +1 -1
  45. package/scripts/lib/run-rule.mjs +4 -4
  46. package/scripts/lib/skill-meta.mjs +1 -1
  47. package/scripts/utils/docs/index.md +14 -14
  48. package/scripts/utils/docs/resolve-js-root.md +12 -13
  49. /package/rules/abie/{meta.json → main.json} +0 -0
  50. /package/rules/abie/{abie.mdc → main.mdc} +0 -0
  51. /package/rules/adr/{meta.json → main.json} +0 -0
  52. /package/rules/adr/{adr.mdc → main.mdc} +0 -0
  53. /package/rules/bun/{meta.json → main.json} +0 -0
  54. /package/rules/bun/{bun.mdc → main.mdc} +0 -0
  55. /package/rules/capacitor/{meta.json → main.json} +0 -0
  56. /package/rules/capacitor/{capacitor.mdc → main.mdc} +0 -0
  57. /package/rules/changelog/{meta.json → main.json} +0 -0
  58. /package/rules/changelog/{changelog.mdc → main.mdc} +0 -0
  59. /package/rules/ci4/{meta.json → main.json} +0 -0
  60. /package/rules/ci4/{ci4.mdc → main.mdc} +0 -0
  61. /package/rules/doc-files/{meta.json → main.json} +0 -0
  62. /package/rules/doc-files/{doc-files.mdc → main.mdc} +0 -0
  63. /package/rules/docker/{meta.json → main.json} +0 -0
  64. /package/rules/docker/{docker.mdc → main.mdc} +0 -0
  65. /package/rules/efes/{meta.json → main.json} +0 -0
  66. /package/rules/efes/{efes.mdc → main.mdc} +0 -0
  67. /package/rules/feedback/{meta.json → main.json} +0 -0
  68. /package/rules/feedback/{feedback.mdc → main.mdc} +0 -0
  69. /package/rules/ga/{meta.json → main.json} +0 -0
  70. /package/rules/ga/{ga.mdc → main.mdc} +0 -0
  71. /package/rules/graphql/{meta.json → main.json} +0 -0
  72. /package/rules/graphql/{graphql.mdc → main.mdc} +0 -0
  73. /package/rules/hasura/{meta.json → main.json} +0 -0
  74. /package/rules/hasura/{hasura.mdc → main.mdc} +0 -0
  75. /package/rules/image-avif/{meta.json → main.json} +0 -0
  76. /package/rules/image-avif/{image-avif.mdc → main.mdc} +0 -0
  77. /package/rules/image-compress/{meta.json → main.json} +0 -0
  78. /package/rules/image-compress/{image-compress.mdc → main.mdc} +0 -0
  79. /package/rules/js/{meta.json → main.json} +0 -0
  80. /package/rules/js/{js.mdc → main.mdc} +0 -0
  81. /package/rules/js-bun-db/{meta.json → main.json} +0 -0
  82. /package/rules/js-bun-db/{js-bun-db.mdc → main.mdc} +0 -0
  83. /package/rules/js-bun-redis/{meta.json → main.json} +0 -0
  84. /package/rules/js-bun-redis/{js-bun-redis.mdc → main.mdc} +0 -0
  85. /package/rules/js-mssql/{meta.json → main.json} +0 -0
  86. /package/rules/js-mssql/{js-mssql.mdc → main.mdc} +0 -0
  87. /package/rules/js-run/{meta.json → main.json} +0 -0
  88. /package/rules/js-run/{js-run.mdc → main.mdc} +0 -0
  89. /package/rules/k8s/{meta.json → main.json} +0 -0
  90. /package/rules/k8s/{k8s.mdc → main.mdc} +0 -0
  91. /package/rules/nginx-default-tpl/{meta.json → main.json} +0 -0
  92. /package/rules/nginx-default-tpl/{nginx-default-tpl.mdc → main.mdc} +0 -0
  93. /package/rules/npm-module/{meta.json → main.json} +0 -0
  94. /package/rules/npm-module/{npm-module.mdc → main.mdc} +0 -0
  95. /package/rules/php/{meta.json → main.json} +0 -0
  96. /package/rules/php/{php.mdc → main.mdc} +0 -0
  97. /package/rules/python/{meta.json → main.json} +0 -0
  98. /package/rules/python/{python.mdc → main.mdc} +0 -0
  99. /package/rules/rego/{meta.json → main.json} +0 -0
  100. /package/rules/rego/{rego.mdc → main.mdc} +0 -0
  101. /package/rules/release/{meta.json → main.json} +0 -0
  102. /package/rules/release/{release.mdc → main.mdc} +0 -0
  103. /package/rules/rust/{meta.json → main.json} +0 -0
  104. /package/rules/rust/{rust.mdc → main.mdc} +0 -0
  105. /package/rules/security/{meta.json → main.json} +0 -0
  106. /package/rules/security/{security.mdc → main.mdc} +0 -0
  107. /package/rules/{style-lint/meta.json → style/main.json} +0 -0
  108. /package/rules/{style-lint → style}/main.mjs +0 -0
  109. /package/rules/{style-lint → style}/policy/lint_style_yml/target.json +0 -0
  110. /package/rules/{style-lint → style}/policy/package_json/target.json +0 -0
  111. /package/rules/{style-lint → style}/policy/package_json/template/package.json.snippet.json +0 -0
  112. /package/rules/{style-lint → style}/policy/vscode_extensions/target.json +0 -0
  113. /package/rules/{style-lint → style}/policy/vscode_extensions/template/extensions.json.snippet.json +0 -0
  114. /package/rules/{style-lint → style}/policy/vscode_settings/target.json +0 -0
  115. /package/rules/{style-lint → style}/policy/vscode_settings/template/settings.json.snippet.json +0 -0
  116. /package/rules/tauri/{meta.json → main.json} +0 -0
  117. /package/rules/tauri/{tauri.mdc → main.mdc} +0 -0
  118. /package/rules/test/{meta.json → main.json} +0 -0
  119. /package/rules/test/{test.mdc → main.mdc} +0 -0
  120. /package/rules/text/{meta.json → main.json} +0 -0
  121. /package/rules/text/{text.mdc → main.mdc} +0 -0
  122. /package/rules/tool-surface/{meta.json → main.json} +0 -0
  123. /package/rules/tool-surface/{tool-surface.mdc → main.mdc} +0 -0
  124. /package/rules/vue/{meta.json → main.json} +0 -0
  125. /package/rules/vue/{vue.mdc → main.mdc} +0 -0
  126. /package/rules/worktree/{meta.json → main.json} +0 -0
  127. /package/rules/worktree/{worktree.mdc → main.mdc} +0 -0
  128. /package/skills/adr-normalize/{meta.json → main.json} +0 -0
  129. /package/skills/coverage-fix/{meta.json → main.json} +0 -0
  130. /package/skills/doc-aggregate/{meta.json → main.json} +0 -0
  131. /package/skills/doc-files/{meta.json → main.json} +0 -0
  132. /package/skills/lint/{meta.json → main.json} +0 -0
  133. /package/skills/llm-patch/{meta.json → main.json} +0 -0
  134. /package/skills/publish-telegram/{meta.json → main.json} +0 -0
  135. /package/skills/start-check/{meta.json → main.json} +0 -0
  136. /package/skills/taze/{meta.json → main.json} +0 -0
@@ -3,27 +3,27 @@ type: JS Module
3
3
  title: run-rule.mjs
4
4
  resource: npm/scripts/lib/run-rule.mjs
5
5
  docgen:
6
- crc: 27060842
7
- score: 95
6
+ crc: 7d0585e1
7
+ model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
+ score: 90
8
9
  ---
9
10
 
10
- Файл слугує оркестратором правила. Він координує виконання перевірок, включаючи перевірку гейту, JS-концернів та policy-концернів.
11
+ ## Огляд
12
+
13
+ Файл оркеструє виконання одного правила під CLI `fix`. Він послідовно застосовує гейт `applies` з `js/applies.mjs` для визначення придатності правила. Якщо гейт повертає `false`, правило не застосовується. Далі виконуються JS-концерни та Policy-концерни в алфавітному порядку. Резолвер `resolveTargetFiles` ділить кеш між концернами. Кожен concern створює власний репортер, а їхні exit-коди OR-уються в єдиний контракт, що забезпечує 0/1 результат для правила. Оркестратор спирається на конфігурації `target.json` та `.n-cursor.json`.
11
14
 
12
15
  ## Поведінка
13
16
 
14
- runTemplateSubsetConcern
15
- Перевіряє відповідність фактичного файлу канонічному шаблону.
17
+ runTemplateSubsetConcern виконує перевірку концерну, де канон визначається сніпетом у `target.json`, звіряючи його з актуальними файлами-таргетами.
16
18
 
17
- runRule
18
- Оркеструє виконання правила, включаючи перевірку гейту, JS-концернів та policy-концернів.
19
+ runRule оркеструє виконання одного правила, послідовно застосовуючи applies-гейт, виконуючи JS-концерни та запускаючи policy-концерни, а також перевіряючи відсутність markdown-посилань.
19
20
 
20
21
  ## Публічний API
21
22
 
22
- - runTemplateSubsetConcern — Snippet-driven перевірка концерну (`target.json:"check":"template"`): звіряє канон з фактичним файлом за допомогою глибокого підмножинного перевірки. Усі канонічні поля/елементи обов'язкові, зайві дозволені. Масиви співпадають за наявністю (незалежно від порядку). Зміна сніпета негайно впливає на примусовість.
23
- - runRule — Запускає одне правило: applies-гейт JS-концерни policy-концерни.
23
+ runTemplateSubsetConcern — Порівнює фактичний файл із канонічним шаблоном (з `target.json`) для перевірки, чи всі обов'язкові елементи присутні, дозволяючи додаткові.
24
+ runRule — Виконує окреме правило, яке проходить через перевірки застосовності, JavaScript-концерни та політики.
24
25
 
25
26
  ## Гарантії поведінки
26
27
 
27
- - Read-only: файл не виконує операцій запису у файлову систему.
28
+ - Read-only: не виконує операцій запису (ФС/БД).
28
29
  - Кешує результати в межах одного прогону.
29
- - Не звертається до мережі.
@@ -3,33 +3,31 @@ type: JS Module
3
3
  title: skill-meta.mjs
4
4
  resource: npm/scripts/lib/skill-meta.mjs
5
5
  docgen:
6
- crc: 0c638d18
6
+ crc: c0918db5
7
+ model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
+ score: 100
7
9
  ---
8
10
 
9
- Цей файл парсить метадані скілу з файлу `meta.json` та надає інформацію про його конфігурацію. Він служить єдиним джерелом правди про скіл, замінюючи старий `auto.md`, і використовується для визначення, чи потрібно запускати скіл в окремому worktree, чи з кореня репозиторію. Це забезпечує узгодженість даних про скіли та полегшує їх використання в інших частинах системи.
11
+ ## Огляд
12
+
13
+ Спільний парсер метаданих скіла, що зчитує дані з `npm/skills/<id>/meta.json`. Він є єдиним джерелом правди для конфігурації скілів, визначаючи умови автоактивації (через поле `auto`, де `SKILL_ALWAYS` означає "завжди"), чи виконувати скіл в окремому git-worktree (`worktree`), та чи вимагає скіл запуску з кореня репозиторію (`requireRoot`). Модуль надає механізми для парсингу цих метаданих, перевірки вимог до кореня та читання сирих даних. Він працює в режимі fail-safe, перехоплюючи помилки та повертаючи порожнє значення замість винятків.
10
14
 
11
15
  ## Поведінка
12
16
 
13
- SKILL_ALWAYS: визначає літерал для безумовної автоактивації.
14
- parseSkillAutoSpec: перетворює значення `auto` з `meta.json` у об’єкт `SkillAutoSpec`.
15
- skillRequiresRoot: визначає, чи вимагає скіл запуску з кореня репо.
16
- readSkillMetaRaw: читає та парсить `meta.json` одного скіла, повертаючи розпарсений об’єкт або `null`.
17
+ SKILL_ALWAYS надає літерал для безумовної автоактивації скіла.
18
+ parseSkillAutoSpec перетворює значення поля `auto` з метаданих скіла у специфікацію автоактивації.
19
+ skillRequiresRoot визначає, чи вимагає скіл запуску з кореня репозиторію, виходячи з метаданих.
20
+ readSkillMetaRaw читає та парсить файл `main.json` у каталозі скіла, повертаючи його вміст або `null` у разі помилки.
17
21
 
18
22
  ## Публічний API
19
23
 
20
- - SKILL_ALWAYS — Активує скіл завжди.
21
- - parseSkillAutoSpec — Перетворює специфікацію авто-скілу з JSON.
22
- - skillRequiresRoot — Перевіряє, чи потрібен скілу доступ до кореневої директорії.
23
- - readSkillMetaRaw — Зчитує та аналізує метадані скілу з файлу JSON.
24
+ SKILL_ALWAYS — маркер, що вказує на безумовну активацію
25
+ parseSkillAutoSpec — витягує налаштування автоматичного запуску з `meta.json`
26
+ skillRequiresRoot — визначає, чи потрібен запуск скіла з кореня репозиторію
27
+ readSkillMetaRaw — зчитує та обробляє метадані окремого скіла з `meta.json`
24
28
 
25
29
  ## Гарантії поведінки
26
30
 
27
- - Повертає `false` якщо не вдається розібрати `meta.json`.
28
- - Повертає `null` якщо не вдається визначити `auto.spec`.
29
- - `auto.spec` завжди є масивом id правил, якщо `auto.spec` визначено.
30
- - `worktree` має значення `true` лише для скілів, які потребують окремого git-worktree.
31
- - `requireRoot` має значення `true` лише для скілів, які мутують в CWD без worktree-ізоляції.
32
- - Якщо `worktree` має значення `true`, поле `requireRoot` не використовується.
33
- - Не використовує кеш.
34
- - Не кидає винятків.
35
- - Гарантує, що `meta.json` є єдиним джерелом правди для скілу.
31
+ - Read-only: не виконує операцій запису (ФС/БД).
32
+ - Перехоплює помилки і не пропускає винятків назовні (fail-safe).
33
+ - За певних помилок повертає порожнє значення (напр. `null`) замість винятку.
@@ -3,24 +3,24 @@ type: JS Module
3
3
  title: timing-summary.mjs
4
4
  resource: npm/scripts/lib/timing-summary.mjs
5
5
  docgen:
6
- crc: ee74c1cd
6
+ crc: 47660e16
7
7
  model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
8
  score: 100
9
9
  ---
10
10
 
11
11
  ## Огляд
12
12
 
13
- Формує таблицю-резюме часу виконання для оркестратора `fix` або `lint`. Таблиця використовується після прогону всіх правил перевірки (`runFixCommand` у `bin/n-cursor.js`) або після прогону скриптів лінтингу (`runLintCli` у `scripts/lib/run-lint-cli.mjs`), які визначаються у `package.json`. Звіт містить деталі часу виконання для кожного елемента у форматі `<ціла>.<десята>s`, а маркер `❌` на рядку вказує на невдачу (`ok === false`).
13
+ Формує рядок, що відображає тривалість у форматі `<ціла>.<десята>s`, забезпечуючи стабільну одиницю вимірювання для всіх інтервалів. Генерує звіт про час виконання для orchestrator `fix` / `lint`, який включає деталі кожного вимірювання та загальний час. Звіт містить маркер `❌` на рядку, якщо відповідний вимірник не пройшов успішно. Дані для звітів отримуються з `package.json` та використовуються у точках виклику `runFixCommand` у `bin/n-cursor.js` та `runLintCli` у `scripts/lib/run-lint-cli.mjs`. Функція є чистою, не виконує I/O, і повертає готовий рядок з фінальним `\n`, друк якого здійснюється на стороні виклику.
14
14
 
15
15
  ## Поведінка
16
16
 
17
- formatDurationMs перетворює тривалість у мілісекундах у рядок формату `<ціла>.<десята>s`.
18
- formatTimingSummary генерує багаторядковий текст таблиці-резюме часу виконання на основі наданого заголовка та списку записів про час.
17
+ formatDurationMs форматує тривалість у мілісекундах як рядок у форматі `<ціла>.<десята>s`.
18
+ formatTimingSummary генерує багаторядковий текстовий звіт про час виконання, включаючи деталі кожного запису та загальний час.
19
19
 
20
20
  ## Публічний API
21
21
 
22
- ⏱ formatDurationMs: Перетворює мілісекунди на формат `<sec>.<десята>s`, використовуючи округлення вниз.
23
- ⏱ formatTimingSummary: Генерує багаторядковий вивід у форматі таблиці-резюме для стандартного виводу.
22
+ ⏱ formatDurationMs: Перетворює мілісекунди у формат `<sec>.<десята>s`, використовуючи округлення вниз.
23
+ ⏱ formatTimingSummary: Генерує багаторядковий вивід таблиці-резюме часу виконання.
24
24
 
25
25
  ## Гарантії поведінки
26
26
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Допоміжні функції для аналізу GitHub Actions workflow (`.yml`) після структурного розбору YAML.
3
3
  *
4
- * Використовується в check-ga, check-js, check-text, check-style-lint, check-npm-module замість
4
+ * Використовується в check-ga, check-js, check-text, check-style, check-npm-module замість
5
5
  * пошуку підрядків у сирому тексті там, де важливі лише значення `uses:` та `run:` кроків.
6
6
  *
7
7
  * Для `run:` також виявляється shell-продовження рядка через `\\` перед переносом (антипатерн у ga.mdc).
@@ -30,7 +30,7 @@ export function listManagedMirrors(repoRoot) {
30
30
  return {
31
31
  id,
32
32
  mirrorPath: join(rulesDir, f),
33
- canonicalPath: join(repoRoot, 'npm/rules', id, `${id}${MDC_EXT}`)
33
+ canonicalPath: join(repoRoot, 'npm/rules', id, `main${MDC_EXT}`)
34
34
  }
35
35
  })
36
36
  .filter(m => existsSync(m.canonicalPath))
@@ -70,7 +70,7 @@ export function parseRuleLintSpec(value) {
70
70
  * @returns {Record<string, unknown> | null} обʼєкт або `null` (немає файлу / невалідний JSON / не-обʼєкт)
71
71
  */
72
72
  export function readRuleMetaRaw(ruleDir) {
73
- const metaPath = join(ruleDir, 'meta.json')
73
+ const metaPath = join(ruleDir, 'main.json')
74
74
  if (!existsSync(metaPath)) return null
75
75
  try {
76
76
  const parsed = JSON.parse(readFileSync(metaPath, 'utf8'))
@@ -81,7 +81,7 @@ export async function runTemplateSubsetConcern(concernAbsDir, target, files, rul
81
81
  for (const file of files) {
82
82
  const rel = relative(process.cwd(), file) || file
83
83
  const actual = await parseByExt(file)
84
- const opts = { targetPath: rel, source: `${ruleId}.mdc` }
84
+ const opts = { targetPath: rel, source: 'main.mdc' }
85
85
  const violations = [
86
86
  ...(typeof data.snippet === 'string'
87
87
  ? checkTextSubset(actual, data.snippet, opts)
@@ -118,7 +118,7 @@ async function runPolicyConcern(bundledRulesDir, ruleId, concernName, walkCache)
118
118
  if (target.files.required && target.files.single) {
119
119
  const msg =
120
120
  target.missingMessage ??
121
- `${target.files.single} не існує — створи згідно ${ruleId}.mdc (${ruleId}.${concernName})`
121
+ `${target.files.single} не існує — створи згідно main.mdc (${ruleId}.${concernName})`
122
122
  reporter.fail(msg)
123
123
  }
124
124
  return reporter.getExitCode()
@@ -182,11 +182,11 @@ export async function runRule(rule, bundledRulesDir, walkCache) {
182
182
  }
183
183
 
184
184
  const ruleDir = join(bundledRulesDir, rule.id)
185
- const missing = await findMissingMdcRefs(ruleDir, rule.id)
185
+ const missing = await findMissingMdcRefs(ruleDir)
186
186
  if (missing.length > 0) {
187
187
  const reporter = createCheckReporter()
188
188
  for (const rel of missing) {
189
- reporter.fail(`${rule.id}.mdc: відсутнє markdown-посилання на template-файл ${rel}`)
189
+ reporter.fail(`main.mdc: відсутнє markdown-посилання на template-файл ${rel}`)
190
190
  }
191
191
  if (reporter.getExitCode() !== 0) totalCode = 1
192
192
  }
@@ -56,7 +56,7 @@ export function skillRequiresRoot(meta) {
56
56
  * @returns {Record<string, unknown> | null} розпарсений обʼєкт або `null` (немає файлу / невалідний JSON / не-обʼєкт)
57
57
  */
58
58
  export function readSkillMetaRaw(skillDir) {
59
- const metaPath = join(skillDir, 'meta.json')
59
+ const metaPath = join(skillDir, 'main.json')
60
60
  if (!existsSync(metaPath)) return null
61
61
  try {
62
62
  const parsed = JSON.parse(readFileSync(metaPath, 'utf8'))
@@ -6,18 +6,18 @@ resource: npm/scripts/utils/
6
6
 
7
7
  # npm/scripts/utils
8
8
 
9
- | Файл | Тип |
10
- | ----------------------------------------------------------- | --------- |
11
- | [ast-scan-utils.mjs](ast-scan-utils.md) | JS Module |
9
+ | Файл | Тип |
10
+ |---|---|
11
+ | [ast-scan-utils.mjs](ast-scan-utils.md) | JS Module |
12
12
  | [ensure-gitignore-entries.mjs](ensure-gitignore-entries.md) | JS Module |
13
- | [find-package-json-paths.mjs](find-package-json-paths.md) | JS Module |
14
- | [lock-cache-dir.mjs](lock-cache-dir.md) | JS Module |
15
- | [pass.mjs](pass.md) | JS Module |
16
- | [resolve-cargo-manifest.mjs](resolve-cargo-manifest.md) | JS Module |
17
- | [resolve-cmd.mjs](resolve-cmd.md) | JS Module |
18
- | [resolve-js-root.mjs](resolve-js-root.md) | JS Module |
19
- | [test-helpers.mjs](test-helpers.md) | JS Module |
20
- | [walk-cache.mjs](walk-cache.md) | JS Module |
21
- | [walkDir.mjs](walkDir.md) | JS Module |
22
- | [with-lock.mjs](with-lock.md) | JS Module |
23
- | [worktree-fingerprint.mjs](worktree-fingerprint.md) | JS Module |
13
+ | [find-package-json-paths.mjs](find-package-json-paths.md) | JS Module |
14
+ | [lock-cache-dir.mjs](lock-cache-dir.md) | JS Module |
15
+ | [pass.mjs](pass.md) | JS Module |
16
+ | [resolve-cargo-manifest.mjs](resolve-cargo-manifest.md) | JS Module |
17
+ | [resolve-cmd.mjs](resolve-cmd.md) | JS Module |
18
+ | [resolve-js-root.mjs](resolve-js-root.md) | JS Module |
19
+ | [test-helpers.mjs](test-helpers.md) | JS Module |
20
+ | [walk-cache.mjs](walk-cache.md) | JS Module |
21
+ | [walkDir.mjs](walkDir.md) | JS Module |
22
+ | [with-lock.mjs](with-lock.md) | JS Module |
23
+ | [worktree-fingerprint.mjs](worktree-fingerprint.md) | JS Module |
@@ -3,27 +3,26 @@ type: JS Module
3
3
  title: resolve-js-root.mjs
4
4
  resource: npm/scripts/utils/resolve-js-root.mjs
5
5
  docgen:
6
- crc: 2c2b9f11
6
+ crc: 99e5a8a4
7
+ model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
+ score: 100
7
9
  ---
8
10
 
9
- Цей файл визначає кореневий JavaScript-файл проєкту, необхідний для запуску інструментів аналізу коду. Він використовується як у великих проєктах з декількома workspace-ами, так і в окремих пакетах, забезпечуючи єдине місце для визначення кореневого розташування. Це спрощує інтеграцію з інструментами coverage та тестування.
11
+ ## Огляд
12
+
13
+ Визначає корінь JS-коду для проєктів, використовуючи `package.json` та `.n-cursor.json` як конфігураційні файли. Функція `resolveJsRoot` знаходить перший workspace (з підтримкою glob-патернів типу `cf/*`) для workspace-проєктів або корінь поточної директорії для single-package. Функція `resolveAllJsRoots` знаходить усі відповідні шляхи. Код свідомо ігнорує шляхи `.git` та `node_modules`. Ця утиліта є спільною для coverage-провайдера JS та test-концерну stryker_config (DRY).
10
14
 
11
15
  ## Поведінка
12
16
 
13
- resolveJsRoot: повертає абсолютний шлях до першого JS-кореня проєкту.
14
- resolveAllJsRoots: повертає масив абсолютних шляхів до всіх JS-коренів проєкту, враховуючи glob-патерни з `workspaces` у кореневому `package.json`. Якщо JS-коренів немає, повертає абсолютний шлях до кореневого каталогу.
17
+ resolveJsRoot повертає абсолютний шлях до першого JS-кореня проєкту, якщо він існує, або null, якщо кореневий package.json відсутній.
18
+ resolveAllJsRoots повертає масив абсолютних шляхів до всіх JS-коренів проєкту, враховуючи визначення `workspaces` у кореневому package.json, ігноруючи каталоги `.git` та `node_modules`.
15
19
 
16
20
  ## Публічний API
17
21
 
18
- - resolveJsRoot — Знаходить кореневий JS-файл проєкту.
19
- - resolveAllJsRoots — Знаходить всі кореневі JS-файли проєкту. Включає всі workspace-файли та їхні `package.json`, використовуючи glob-патерни. Для single-package повертає поточну директорію.
22
+ resolveJsRoot — знаходить кореневий каталог JavaScript-проєкту.
23
+ resolveAllJsRoots — повертає шляхи до коренів усіх JavaScript-проєктів у робочому просторі.
20
24
 
21
25
  ## Гарантії поведінки
22
26
 
23
- - Повертає `true`, якщо кореневий JS-файл знайдено.
24
- - Повертає `false`, якщо кореневий JS-файл не знайдено.
25
- - Повертає `null`, якщо не вдалося визначити кореневий JS-файл.
26
- - Не обробляє помилки, а повертає `false` або `null`.
27
- - Ігнорує директорії `.git` та `node_modules`.
28
- - Не використовує кешування.
29
- - Не здійснює мережевих запитів.
27
+ - Read-only: не виконує операцій запису (ФС/БД).
28
+ - Свідомо пропускає шляхи: `.git`, `node_modules`.
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes