@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.
- package/CHANGELOG.md +12 -0
- package/bin/n-cursor.js +1 -1
- package/package.json +1 -1
- package/rules/js/docs/index.md +3 -3
- package/rules/js/docs/main.md +6 -6
- package/rules/js/js/docs/check.md +12 -17
- package/rules/js/js/docs/index.md +4 -4
- package/rules/js/js/docs/tooling.md +8 -8
- package/rules/js/js/docs/utils_imports.md +21 -200
- package/rules/npm-module/js/docs/index.md +5 -5
- package/rules/npm-module/js/docs/rule_meta.md +13 -13
- package/rules/npm-module/js/docs/skill_meta.md +19 -9
- package/rules/npm-module/js/rule_meta.mjs +9 -9
- package/rules/npm-module/js/skill_meta.mjs +6 -6
- package/rules/{style-lint → style}/docs/fix.md +1 -1
- package/rules/{style-lint → style}/docs/index.md +3 -3
- package/rules/{style-lint → style}/docs/main.md +1 -1
- package/rules/{style-lint → style}/js/docs/index.md +3 -3
- package/rules/{style-lint → style}/js/docs/tooling.md +3 -3
- package/rules/{style-lint → style}/js/tooling.mjs +1 -1
- package/rules/{style-lint/style-lint.mdc → style/main.mdc} +3 -3
- package/rules/{style-lint → style}/policy/lint_style_yml/lint_style_yml.rego +2 -2
- package/rules/{style-lint → style}/policy/lint_style_yml/template/lint-style.yml.snippet.yml +1 -1
- package/rules/{style-lint → style}/policy/package_json/package_json.rego +3 -3
- package/rules/{style-lint → style}/policy/vscode_extensions/vscode_extensions.rego +2 -2
- package/rules/{style-lint → style}/policy/vscode_settings/vscode_settings.rego +2 -2
- package/rules/test/js/docs/index.md +7 -7
- package/rules/test/js/docs/stryker_config.md +18 -35
- package/rules/test/js/docs/vitest-config-pool-forks.md +14 -12
- package/schemas/v8r-catalog.json +4 -4
- package/scripts/docs/index.md +16 -16
- package/scripts/docs/sync-setup-bun-deps-action.md +13 -14
- package/scripts/lib/check-mdc-template-refs.mjs +2 -2
- package/scripts/lib/docs/check-mdc-template-refs.md +12 -214
- package/scripts/lib/docs/gha-workflow.md +1 -1
- package/scripts/lib/docs/index.md +36 -36
- package/scripts/lib/docs/mirror-parity.md +18 -157
- package/scripts/lib/docs/rule-meta.md +19 -22
- package/scripts/lib/docs/run-rule.md +11 -11
- package/scripts/lib/docs/skill-meta.md +17 -19
- package/scripts/lib/docs/timing-summary.md +6 -6
- package/scripts/lib/gha-workflow.mjs +1 -1
- package/scripts/lib/mirror-parity.mjs +1 -1
- package/scripts/lib/rule-meta.mjs +1 -1
- package/scripts/lib/run-rule.mjs +4 -4
- package/scripts/lib/skill-meta.mjs +1 -1
- package/scripts/utils/docs/index.md +14 -14
- package/scripts/utils/docs/resolve-js-root.md +12 -13
- /package/rules/abie/{meta.json → main.json} +0 -0
- /package/rules/abie/{abie.mdc → main.mdc} +0 -0
- /package/rules/adr/{meta.json → main.json} +0 -0
- /package/rules/adr/{adr.mdc → main.mdc} +0 -0
- /package/rules/bun/{meta.json → main.json} +0 -0
- /package/rules/bun/{bun.mdc → main.mdc} +0 -0
- /package/rules/capacitor/{meta.json → main.json} +0 -0
- /package/rules/capacitor/{capacitor.mdc → main.mdc} +0 -0
- /package/rules/changelog/{meta.json → main.json} +0 -0
- /package/rules/changelog/{changelog.mdc → main.mdc} +0 -0
- /package/rules/ci4/{meta.json → main.json} +0 -0
- /package/rules/ci4/{ci4.mdc → main.mdc} +0 -0
- /package/rules/doc-files/{meta.json → main.json} +0 -0
- /package/rules/doc-files/{doc-files.mdc → main.mdc} +0 -0
- /package/rules/docker/{meta.json → main.json} +0 -0
- /package/rules/docker/{docker.mdc → main.mdc} +0 -0
- /package/rules/efes/{meta.json → main.json} +0 -0
- /package/rules/efes/{efes.mdc → main.mdc} +0 -0
- /package/rules/feedback/{meta.json → main.json} +0 -0
- /package/rules/feedback/{feedback.mdc → main.mdc} +0 -0
- /package/rules/ga/{meta.json → main.json} +0 -0
- /package/rules/ga/{ga.mdc → main.mdc} +0 -0
- /package/rules/graphql/{meta.json → main.json} +0 -0
- /package/rules/graphql/{graphql.mdc → main.mdc} +0 -0
- /package/rules/hasura/{meta.json → main.json} +0 -0
- /package/rules/hasura/{hasura.mdc → main.mdc} +0 -0
- /package/rules/image-avif/{meta.json → main.json} +0 -0
- /package/rules/image-avif/{image-avif.mdc → main.mdc} +0 -0
- /package/rules/image-compress/{meta.json → main.json} +0 -0
- /package/rules/image-compress/{image-compress.mdc → main.mdc} +0 -0
- /package/rules/js/{meta.json → main.json} +0 -0
- /package/rules/js/{js.mdc → main.mdc} +0 -0
- /package/rules/js-bun-db/{meta.json → main.json} +0 -0
- /package/rules/js-bun-db/{js-bun-db.mdc → main.mdc} +0 -0
- /package/rules/js-bun-redis/{meta.json → main.json} +0 -0
- /package/rules/js-bun-redis/{js-bun-redis.mdc → main.mdc} +0 -0
- /package/rules/js-mssql/{meta.json → main.json} +0 -0
- /package/rules/js-mssql/{js-mssql.mdc → main.mdc} +0 -0
- /package/rules/js-run/{meta.json → main.json} +0 -0
- /package/rules/js-run/{js-run.mdc → main.mdc} +0 -0
- /package/rules/k8s/{meta.json → main.json} +0 -0
- /package/rules/k8s/{k8s.mdc → main.mdc} +0 -0
- /package/rules/nginx-default-tpl/{meta.json → main.json} +0 -0
- /package/rules/nginx-default-tpl/{nginx-default-tpl.mdc → main.mdc} +0 -0
- /package/rules/npm-module/{meta.json → main.json} +0 -0
- /package/rules/npm-module/{npm-module.mdc → main.mdc} +0 -0
- /package/rules/php/{meta.json → main.json} +0 -0
- /package/rules/php/{php.mdc → main.mdc} +0 -0
- /package/rules/python/{meta.json → main.json} +0 -0
- /package/rules/python/{python.mdc → main.mdc} +0 -0
- /package/rules/rego/{meta.json → main.json} +0 -0
- /package/rules/rego/{rego.mdc → main.mdc} +0 -0
- /package/rules/release/{meta.json → main.json} +0 -0
- /package/rules/release/{release.mdc → main.mdc} +0 -0
- /package/rules/rust/{meta.json → main.json} +0 -0
- /package/rules/rust/{rust.mdc → main.mdc} +0 -0
- /package/rules/security/{meta.json → main.json} +0 -0
- /package/rules/security/{security.mdc → main.mdc} +0 -0
- /package/rules/{style-lint/meta.json → style/main.json} +0 -0
- /package/rules/{style-lint → style}/main.mjs +0 -0
- /package/rules/{style-lint → style}/policy/lint_style_yml/target.json +0 -0
- /package/rules/{style-lint → style}/policy/package_json/target.json +0 -0
- /package/rules/{style-lint → style}/policy/package_json/template/package.json.snippet.json +0 -0
- /package/rules/{style-lint → style}/policy/vscode_extensions/target.json +0 -0
- /package/rules/{style-lint → style}/policy/vscode_extensions/template/extensions.json.snippet.json +0 -0
- /package/rules/{style-lint → style}/policy/vscode_settings/target.json +0 -0
- /package/rules/{style-lint → style}/policy/vscode_settings/template/settings.json.snippet.json +0 -0
- /package/rules/tauri/{meta.json → main.json} +0 -0
- /package/rules/tauri/{tauri.mdc → main.mdc} +0 -0
- /package/rules/test/{meta.json → main.json} +0 -0
- /package/rules/test/{test.mdc → main.mdc} +0 -0
- /package/rules/text/{meta.json → main.json} +0 -0
- /package/rules/text/{text.mdc → main.mdc} +0 -0
- /package/rules/tool-surface/{meta.json → main.json} +0 -0
- /package/rules/tool-surface/{tool-surface.mdc → main.mdc} +0 -0
- /package/rules/vue/{meta.json → main.json} +0 -0
- /package/rules/vue/{vue.mdc → main.mdc} +0 -0
- /package/rules/worktree/{meta.json → main.json} +0 -0
- /package/rules/worktree/{worktree.mdc → main.mdc} +0 -0
- /package/skills/adr-normalize/{meta.json → main.json} +0 -0
- /package/skills/coverage-fix/{meta.json → main.json} +0 -0
- /package/skills/doc-aggregate/{meta.json → main.json} +0 -0
- /package/skills/doc-files/{meta.json → main.json} +0 -0
- /package/skills/lint/{meta.json → main.json} +0 -0
- /package/skills/llm-patch/{meta.json → main.json} +0 -0
- /package/skills/publish-telegram/{meta.json → main.json} +0 -0
- /package/skills/start-check/{meta.json → main.json} +0 -0
- /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:
|
|
7
|
-
|
|
6
|
+
crc: 7d0585e1
|
|
7
|
+
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
|
+
score: 90
|
|
8
9
|
---
|
|
9
10
|
|
|
10
|
-
|
|
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
|
-
|
|
23
|
-
|
|
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:
|
|
6
|
+
crc: c0918db5
|
|
7
|
+
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
|
+
score: 100
|
|
7
9
|
---
|
|
8
10
|
|
|
9
|
-
|
|
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
|
|
15
|
-
skillRequiresRoot
|
|
16
|
-
readSkillMetaRaw
|
|
17
|
+
SKILL_ALWAYS — надає літерал для безумовної автоактивації скіла.
|
|
18
|
+
parseSkillAutoSpec — перетворює значення поля `auto` з метаданих скіла у специфікацію автоактивації.
|
|
19
|
+
skillRequiresRoot — визначає, чи вимагає скіл запуску з кореня репозиторію, виходячи з метаданих.
|
|
20
|
+
readSkillMetaRaw — читає та парсить файл `main.json` у каталозі скіла, повертаючи його вміст або `null` у разі помилки.
|
|
17
21
|
|
|
18
22
|
## Публічний API
|
|
19
23
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
+
SKILL_ALWAYS — маркер, що вказує на безумовну активацію
|
|
25
|
+
parseSkillAutoSpec — витягує налаштування автоматичного запуску з `meta.json`
|
|
26
|
+
skillRequiresRoot — визначає, чи потрібен запуск скіла з кореня репозиторію
|
|
27
|
+
readSkillMetaRaw — зчитує та обробляє метадані окремого скіла з `meta.json`
|
|
24
28
|
|
|
25
29
|
## Гарантії поведінки
|
|
26
30
|
|
|
27
|
-
-
|
|
28
|
-
-
|
|
29
|
-
-
|
|
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:
|
|
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
|
-
Формує
|
|
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
|
|
18
|
-
formatTimingSummary генерує багаторядковий
|
|
17
|
+
formatDurationMs форматує тривалість у мілісекундах як рядок у форматі `<ціла>.<десята>s`.
|
|
18
|
+
formatTimingSummary генерує багаторядковий текстовий звіт про час виконання, включаючи деталі кожного запису та загальний час.
|
|
19
19
|
|
|
20
20
|
## Публічний API
|
|
21
21
|
|
|
22
|
-
⏱ formatDurationMs: Перетворює мілісекунди
|
|
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
|
|
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,
|
|
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, '
|
|
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'))
|
package/scripts/lib/run-rule.mjs
CHANGED
|
@@ -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:
|
|
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} не існує — створи згідно
|
|
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
|
|
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(
|
|
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, '
|
|
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)
|
|
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)
|
|
14
|
-
| [lock-cache-dir.mjs](lock-cache-dir.md)
|
|
15
|
-
| [pass.mjs](pass.md)
|
|
16
|
-
| [resolve-cargo-manifest.mjs](resolve-cargo-manifest.md)
|
|
17
|
-
| [resolve-cmd.mjs](resolve-cmd.md)
|
|
18
|
-
| [resolve-js-root.mjs](resolve-js-root.md)
|
|
19
|
-
| [test-helpers.mjs](test-helpers.md)
|
|
20
|
-
| [walk-cache.mjs](walk-cache.md)
|
|
21
|
-
| [walkDir.mjs](walkDir.md)
|
|
22
|
-
| [with-lock.mjs](with-lock.md)
|
|
23
|
-
| [worktree-fingerprint.mjs](worktree-fingerprint.md)
|
|
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:
|
|
6
|
+
crc: 99e5a8a4
|
|
7
|
+
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
|
+
score: 100
|
|
7
9
|
---
|
|
8
10
|
|
|
9
|
-
|
|
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
|
|
14
|
-
resolveAllJsRoots
|
|
17
|
+
resolveJsRoot повертає абсолютний шлях до першого JS-кореня проєкту, якщо він існує, або null, якщо кореневий package.json відсутній.
|
|
18
|
+
resolveAllJsRoots повертає масив абсолютних шляхів до всіх JS-коренів проєкту, враховуючи визначення `workspaces` у кореневому package.json, ігноруючи каталоги `.git` та `node_modules`.
|
|
15
19
|
|
|
16
20
|
## Публічний API
|
|
17
21
|
|
|
18
|
-
|
|
19
|
-
|
|
22
|
+
resolveJsRoot — знаходить кореневий каталог JavaScript-проєкту.
|
|
23
|
+
resolveAllJsRoots — повертає шляхи до коренів усіх JavaScript-проєктів у робочому просторі.
|
|
20
24
|
|
|
21
25
|
## Гарантії поведінки
|
|
22
26
|
|
|
23
|
-
-
|
|
24
|
-
-
|
|
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
|
/package/rules/{style-lint → style}/policy/vscode_extensions/template/extensions.json.snippet.json
RENAMED
|
File without changes
|
|
File without changes
|
/package/rules/{style-lint → style}/policy/vscode_settings/template/settings.json.snippet.json
RENAMED
|
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
|