@nitra/cursor 1.18.0 → 1.18.2
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 +16 -0
- package/bin/rename-yaml-extensions.mjs +1 -1
- package/package.json +1 -1
- package/rules/abie/fix.mjs +1 -1
- package/rules/adr/fix.mjs +1 -1
- package/rules/bun/fix.mjs +1 -1
- package/rules/capacitor/fix.mjs +1 -1
- package/rules/changelog/fix.mjs +1 -1
- package/rules/ci4/fix.mjs +1 -1
- package/rules/docker/fix.mjs +1 -1
- package/rules/docker/lint/lint.mjs +1 -1
- package/rules/efes/fix.mjs +1 -1
- package/rules/feedback/fix.mjs +1 -1
- package/rules/ga/fix.mjs +1 -1
- package/rules/graphql/fix.mjs +1 -1
- package/rules/hasura/fix.mjs +1 -1
- package/rules/image-avif/fix.mjs +1 -1
- package/rules/image-compress/fix.mjs +1 -1
- package/rules/js-bun-db/fix.mjs +1 -1
- package/rules/js-bun-redis/fix.mjs +1 -1
- package/rules/js-lint/fix.mjs +1 -1
- package/rules/js-mssql/fix.mjs +1 -1
- package/rules/js-run/fix.mjs +1 -1
- package/rules/k8s/fix.mjs +1 -1
- package/rules/k8s/lint/lint.mjs +1 -1
- package/rules/nginx-default-tpl/fix.mjs +1 -1
- package/rules/npm-module/fix.mjs +1 -1
- package/rules/php/fix.mjs +1 -1
- package/rules/php/lint/lint.mjs +1 -1
- package/rules/rego/fix.mjs +1 -1
- package/rules/rego/lint/lint.mjs +1 -1
- package/rules/rust/fix.mjs +1 -1
- package/rules/security/fix.mjs +1 -1
- package/rules/style-lint/fix.mjs +1 -1
- package/rules/tauri/fix.mjs +1 -1
- package/rules/test/fix.mjs +1 -1
- package/rules/text/fix.mjs +1 -1
- package/rules/text/lint/run-dotenv-linter.mjs +1 -1
- package/rules/text/lint/run-shellcheck.mjs +1 -1
- package/rules/text/lint/run-v8r.mjs +1 -1
- package/rules/vue/fix.mjs +1 -1
- package/scripts/cli-entry.mjs +19 -9
- package/scripts/lib/run-rule-cli.mjs +5 -11
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,22 @@
|
|
|
4
4
|
|
|
5
5
|
Формат — [Keep a Changelog](https://keepachangelog.com/uk/1.1.0/), нумерація — [SemVer](https://semver.org/lang/uk/).
|
|
6
6
|
|
|
7
|
+
## [1.18.2] - 2026-05-25
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- `rules/adr/js/tests/capture-decisions-tooling-only.test.mjs`, `rules/adr/js/tests/normalize-decisions-tooling-only.test.mjs` — `process.env.HOME` → `env.HOME` із `'node:process'` (js-run.mdc: `process.env` deprecated, треба `env` з `node:process` або `@nitra/check-env`).
|
|
12
|
+
|
|
13
|
+
## [1.18.1] - 2026-05-25
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- **`scripts/cli-entry.mjs::isRunAsCli`** + **`scripts/lib/run-rule-cli.mjs::isRunAsCli`** — функція приймала `()` без аргументів і всередині дивилася на власний `import.meta.url`, а не на caller'а. Через те, що `import.meta` лексично прив'язаний до файлу, де записаний, helper-функція ВСІГДА бачила свій файл — `cli-entry.mjs` / `run-rule-cli.mjs` — і ніколи не дорівнювала `process.argv[1]`. Результат: усі ~40 `if (isRunAsCli())` у `rules/<id>/fix.mjs` / `lint/*.mjs` / `bin/rename-yaml-extensions.mjs` ВСІГДА йшли в else-гілку, і `bun rules/<id>/fix.mjs` мовчки виходив `0` без жодного output'у. `npx @nitra/cursor fix <rule>` → `runFixCommand` → `spawnSync('bun', [fix.mjs])` → exit 0 без жодного reporter-звіту.
|
|
18
|
+
- **Fix:** функція тепер приймає `metaUrl` параметром: `isRunAsCli(import.meta.url)`. Реалізація через `realpathSync(fileURLToPath(metaUrl)) === realpathSync(resolve(process.argv[1]))` — `realpath` знімає різницю «symlink vs canonical» (macOS `/tmp` ↔ `/private/tmp`, pnpm content-addressable links, `node_modules/.bin/*` shim).
|
|
19
|
+
- **Консолідація:** `run-rule-cli.mjs::isRunAsCli` тепер `export { isRunAsCli } from '../cli-entry.mjs'` — одне джерело правди. Existing import paths у callers лишилися без змін.
|
|
20
|
+
- **Callsites:** всі ~40 викликів `isRunAsCli()` оновлено на `isRunAsCli(import.meta.url)`.
|
|
21
|
+
- **Tests:** додано три нові кейси у `scripts/tests/cli-entry.test.mjs` (entry-detection через spawn-fixture, symlink-нормалізація через `/tmp` → `/private/tmp`, no-arg fallback). Fixture — `scripts/tests/fixtures/cli-entry-as-cli.mjs`.
|
|
22
|
+
|
|
7
23
|
## [1.18.0] - 2026-05-25
|
|
8
24
|
|
|
9
25
|
### Added
|
|
@@ -34,7 +34,7 @@ export async function runRenameYamlExtensionsCli(argv) {
|
|
|
34
34
|
return errors.length > 0 ? 1 : 0
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
if (isRunAsCli()) {
|
|
37
|
+
if (isRunAsCli(import.meta.url)) {
|
|
38
38
|
const code = await runRenameYamlExtensionsCli(process.argv.slice(2))
|
|
39
39
|
if (code !== 0) {
|
|
40
40
|
process.exitCode = 1
|
package/package.json
CHANGED
package/rules/abie/fix.mjs
CHANGED
|
@@ -11,7 +11,7 @@ export function run(ctx) {
|
|
|
11
11
|
return runStandardRule(import.meta.dirname, ctx)
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
if (isRunAsCli()) {
|
|
14
|
+
if (isRunAsCli(import.meta.url)) {
|
|
15
15
|
// Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
|
|
16
16
|
// (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
|
|
17
17
|
// eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
|
package/rules/adr/fix.mjs
CHANGED
|
@@ -11,7 +11,7 @@ export function run(ctx) {
|
|
|
11
11
|
return runStandardRule(import.meta.dirname, ctx)
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
if (isRunAsCli()) {
|
|
14
|
+
if (isRunAsCli(import.meta.url)) {
|
|
15
15
|
// Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
|
|
16
16
|
// (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
|
|
17
17
|
// eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
|
package/rules/bun/fix.mjs
CHANGED
|
@@ -11,7 +11,7 @@ export function run(ctx) {
|
|
|
11
11
|
return runStandardRule(import.meta.dirname, ctx)
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
if (isRunAsCli()) {
|
|
14
|
+
if (isRunAsCli(import.meta.url)) {
|
|
15
15
|
// Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
|
|
16
16
|
// (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
|
|
17
17
|
// eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
|
package/rules/capacitor/fix.mjs
CHANGED
|
@@ -11,7 +11,7 @@ export function run(ctx) {
|
|
|
11
11
|
return runStandardRule(import.meta.dirname, ctx)
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
if (isRunAsCli()) {
|
|
14
|
+
if (isRunAsCli(import.meta.url)) {
|
|
15
15
|
// Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
|
|
16
16
|
// (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
|
|
17
17
|
// eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
|
package/rules/changelog/fix.mjs
CHANGED
|
@@ -11,7 +11,7 @@ export function run(ctx) {
|
|
|
11
11
|
return runStandardRule(import.meta.dirname, ctx)
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
if (isRunAsCli()) {
|
|
14
|
+
if (isRunAsCli(import.meta.url)) {
|
|
15
15
|
// Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
|
|
16
16
|
// (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
|
|
17
17
|
// eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
|
package/rules/ci4/fix.mjs
CHANGED
|
@@ -11,7 +11,7 @@ export function run(ctx) {
|
|
|
11
11
|
return runStandardRule(import.meta.dirname, ctx)
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
if (isRunAsCli()) {
|
|
14
|
+
if (isRunAsCli(import.meta.url)) {
|
|
15
15
|
// Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
|
|
16
16
|
// (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
|
|
17
17
|
// eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
|
package/rules/docker/fix.mjs
CHANGED
|
@@ -11,7 +11,7 @@ export function run(ctx) {
|
|
|
11
11
|
return runStandardRule(import.meta.dirname, ctx)
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
if (isRunAsCli()) {
|
|
14
|
+
if (isRunAsCli(import.meta.url)) {
|
|
15
15
|
// Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
|
|
16
16
|
// (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
|
|
17
17
|
// eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
|
package/rules/efes/fix.mjs
CHANGED
|
@@ -11,7 +11,7 @@ export function run(ctx) {
|
|
|
11
11
|
return runStandardRule(import.meta.dirname, ctx)
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
if (isRunAsCli()) {
|
|
14
|
+
if (isRunAsCli(import.meta.url)) {
|
|
15
15
|
// Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
|
|
16
16
|
// (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
|
|
17
17
|
// eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
|
package/rules/feedback/fix.mjs
CHANGED
|
@@ -11,7 +11,7 @@ export function run(ctx) {
|
|
|
11
11
|
return runStandardRule(import.meta.dirname, ctx)
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
if (isRunAsCli()) {
|
|
14
|
+
if (isRunAsCli(import.meta.url)) {
|
|
15
15
|
// Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
|
|
16
16
|
// (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
|
|
17
17
|
// eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
|
package/rules/ga/fix.mjs
CHANGED
|
@@ -11,7 +11,7 @@ export function run(ctx) {
|
|
|
11
11
|
return runStandardRule(import.meta.dirname, ctx)
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
if (isRunAsCli()) {
|
|
14
|
+
if (isRunAsCli(import.meta.url)) {
|
|
15
15
|
// Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
|
|
16
16
|
// (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
|
|
17
17
|
// eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
|
package/rules/graphql/fix.mjs
CHANGED
|
@@ -11,7 +11,7 @@ export function run(ctx) {
|
|
|
11
11
|
return runStandardRule(import.meta.dirname, ctx)
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
if (isRunAsCli()) {
|
|
14
|
+
if (isRunAsCli(import.meta.url)) {
|
|
15
15
|
// Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
|
|
16
16
|
// (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
|
|
17
17
|
// eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
|
package/rules/hasura/fix.mjs
CHANGED
|
@@ -11,7 +11,7 @@ export function run(ctx) {
|
|
|
11
11
|
return runStandardRule(import.meta.dirname, ctx)
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
if (isRunAsCli()) {
|
|
14
|
+
if (isRunAsCli(import.meta.url)) {
|
|
15
15
|
// Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
|
|
16
16
|
// (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
|
|
17
17
|
// eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
|
package/rules/image-avif/fix.mjs
CHANGED
|
@@ -11,7 +11,7 @@ export function run(ctx) {
|
|
|
11
11
|
return runStandardRule(import.meta.dirname, ctx)
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
if (isRunAsCli()) {
|
|
14
|
+
if (isRunAsCli(import.meta.url)) {
|
|
15
15
|
// Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
|
|
16
16
|
// (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
|
|
17
17
|
// eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
|
|
@@ -11,7 +11,7 @@ export function run(ctx) {
|
|
|
11
11
|
return runStandardRule(import.meta.dirname, ctx)
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
if (isRunAsCli()) {
|
|
14
|
+
if (isRunAsCli(import.meta.url)) {
|
|
15
15
|
// Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
|
|
16
16
|
// (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
|
|
17
17
|
// eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
|
package/rules/js-bun-db/fix.mjs
CHANGED
|
@@ -11,7 +11,7 @@ export function run(ctx) {
|
|
|
11
11
|
return runStandardRule(import.meta.dirname, ctx)
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
if (isRunAsCli()) {
|
|
14
|
+
if (isRunAsCli(import.meta.url)) {
|
|
15
15
|
// Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
|
|
16
16
|
// (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
|
|
17
17
|
// eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
|
|
@@ -11,7 +11,7 @@ export function run(ctx) {
|
|
|
11
11
|
return runStandardRule(import.meta.dirname, ctx)
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
if (isRunAsCli()) {
|
|
14
|
+
if (isRunAsCli(import.meta.url)) {
|
|
15
15
|
// Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
|
|
16
16
|
// (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
|
|
17
17
|
// eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
|
package/rules/js-lint/fix.mjs
CHANGED
|
@@ -11,7 +11,7 @@ export function run(ctx) {
|
|
|
11
11
|
return runStandardRule(import.meta.dirname, ctx)
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
if (isRunAsCli()) {
|
|
14
|
+
if (isRunAsCli(import.meta.url)) {
|
|
15
15
|
// Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
|
|
16
16
|
// (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
|
|
17
17
|
// eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
|
package/rules/js-mssql/fix.mjs
CHANGED
|
@@ -11,7 +11,7 @@ export function run(ctx) {
|
|
|
11
11
|
return runStandardRule(import.meta.dirname, ctx)
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
if (isRunAsCli()) {
|
|
14
|
+
if (isRunAsCli(import.meta.url)) {
|
|
15
15
|
// Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
|
|
16
16
|
// (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
|
|
17
17
|
// eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
|
package/rules/js-run/fix.mjs
CHANGED
|
@@ -11,7 +11,7 @@ export function run(ctx) {
|
|
|
11
11
|
return runStandardRule(import.meta.dirname, ctx)
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
if (isRunAsCli()) {
|
|
14
|
+
if (isRunAsCli(import.meta.url)) {
|
|
15
15
|
// Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
|
|
16
16
|
// (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
|
|
17
17
|
// eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
|
package/rules/k8s/fix.mjs
CHANGED
|
@@ -11,7 +11,7 @@ export function run(ctx) {
|
|
|
11
11
|
return runStandardRule(import.meta.dirname, ctx)
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
if (isRunAsCli()) {
|
|
14
|
+
if (isRunAsCli(import.meta.url)) {
|
|
15
15
|
// Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
|
|
16
16
|
// (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
|
|
17
17
|
// eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
|
package/rules/k8s/lint/lint.mjs
CHANGED
|
@@ -11,7 +11,7 @@ export function run(ctx) {
|
|
|
11
11
|
return runStandardRule(import.meta.dirname, ctx)
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
if (isRunAsCli()) {
|
|
14
|
+
if (isRunAsCli(import.meta.url)) {
|
|
15
15
|
// Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
|
|
16
16
|
// (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
|
|
17
17
|
// eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
|
package/rules/npm-module/fix.mjs
CHANGED
|
@@ -11,7 +11,7 @@ export function run(ctx) {
|
|
|
11
11
|
return runStandardRule(import.meta.dirname, ctx)
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
if (isRunAsCli()) {
|
|
14
|
+
if (isRunAsCli(import.meta.url)) {
|
|
15
15
|
// Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
|
|
16
16
|
// (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
|
|
17
17
|
// eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
|
package/rules/php/fix.mjs
CHANGED
|
@@ -11,7 +11,7 @@ export function run(ctx) {
|
|
|
11
11
|
return runStandardRule(import.meta.dirname, ctx)
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
if (isRunAsCli()) {
|
|
14
|
+
if (isRunAsCli(import.meta.url)) {
|
|
15
15
|
// Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
|
|
16
16
|
// (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
|
|
17
17
|
// eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
|
package/rules/php/lint/lint.mjs
CHANGED
package/rules/rego/fix.mjs
CHANGED
|
@@ -11,7 +11,7 @@ export function run(ctx) {
|
|
|
11
11
|
return runStandardRule(import.meta.dirname, ctx)
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
if (isRunAsCli()) {
|
|
14
|
+
if (isRunAsCli(import.meta.url)) {
|
|
15
15
|
// Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
|
|
16
16
|
// (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
|
|
17
17
|
// eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
|
package/rules/rego/lint/lint.mjs
CHANGED
|
@@ -143,6 +143,6 @@ export function runLintRegoSteps(cwd = process.cwd()) {
|
|
|
143
143
|
*/
|
|
144
144
|
export const runLintRego = () => runStandardLint(import.meta.dirname, () => runLintRegoSteps())
|
|
145
145
|
|
|
146
|
-
if (isRunAsCli()) {
|
|
146
|
+
if (isRunAsCli(import.meta.url)) {
|
|
147
147
|
process.exitCode = await runLintRego()
|
|
148
148
|
}
|
package/rules/rust/fix.mjs
CHANGED
|
@@ -11,7 +11,7 @@ export function run(ctx) {
|
|
|
11
11
|
return runStandardRule(import.meta.dirname, ctx)
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
if (isRunAsCli()) {
|
|
14
|
+
if (isRunAsCli(import.meta.url)) {
|
|
15
15
|
// Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
|
|
16
16
|
// (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
|
|
17
17
|
// eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
|
package/rules/security/fix.mjs
CHANGED
|
@@ -11,7 +11,7 @@ export function run(ctx) {
|
|
|
11
11
|
return runStandardRule(import.meta.dirname, ctx)
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
if (isRunAsCli()) {
|
|
14
|
+
if (isRunAsCli(import.meta.url)) {
|
|
15
15
|
// Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
|
|
16
16
|
// (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
|
|
17
17
|
// eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
|
package/rules/style-lint/fix.mjs
CHANGED
|
@@ -11,7 +11,7 @@ export function run(ctx) {
|
|
|
11
11
|
return runStandardRule(import.meta.dirname, ctx)
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
if (isRunAsCli()) {
|
|
14
|
+
if (isRunAsCli(import.meta.url)) {
|
|
15
15
|
// Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
|
|
16
16
|
// (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
|
|
17
17
|
// eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
|
package/rules/tauri/fix.mjs
CHANGED
|
@@ -11,7 +11,7 @@ export function run(ctx) {
|
|
|
11
11
|
return runStandardRule(import.meta.dirname, ctx)
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
if (isRunAsCli()) {
|
|
14
|
+
if (isRunAsCli(import.meta.url)) {
|
|
15
15
|
// Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
|
|
16
16
|
// (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
|
|
17
17
|
// eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
|
package/rules/test/fix.mjs
CHANGED
|
@@ -11,7 +11,7 @@ export function run(ctx) {
|
|
|
11
11
|
return runStandardRule(import.meta.dirname, ctx)
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
if (isRunAsCli()) {
|
|
14
|
+
if (isRunAsCli(import.meta.url)) {
|
|
15
15
|
// Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
|
|
16
16
|
// (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
|
|
17
17
|
// eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
|
package/rules/text/fix.mjs
CHANGED
|
@@ -11,7 +11,7 @@ export function run(ctx) {
|
|
|
11
11
|
return runStandardRule(import.meta.dirname, ctx)
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
if (isRunAsCli()) {
|
|
14
|
+
if (isRunAsCli(import.meta.url)) {
|
|
15
15
|
// Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
|
|
16
16
|
// (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
|
|
17
17
|
// eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
|
|
@@ -76,7 +76,7 @@ export function runV8rWithGlobs(globs = DEFAULT_V8R_GLOBS) {
|
|
|
76
76
|
return 0
|
|
77
77
|
}
|
|
78
78
|
|
|
79
|
-
if (isRunAsCli()) {
|
|
79
|
+
if (isRunAsCli(import.meta.url)) {
|
|
80
80
|
const globs = process.argv.length > 2 ? process.argv.slice(2) : DEFAULT_V8R_GLOBS
|
|
81
81
|
process.exitCode = runV8rWithGlobs(globs)
|
|
82
82
|
}
|
package/rules/vue/fix.mjs
CHANGED
|
@@ -11,7 +11,7 @@ export function run(ctx) {
|
|
|
11
11
|
return runStandardRule(import.meta.dirname, ctx)
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
if (isRunAsCli()) {
|
|
14
|
+
if (isRunAsCli(import.meta.url)) {
|
|
15
15
|
// Standalone: bun rules/<id>/fix.mjs — повний еквівалент `npx @nitra/cursor fix <id>`
|
|
16
16
|
// (config-loading + whitelist + summary). Дві ролі fix.mjs: library (run) + standalone (main).
|
|
17
17
|
// eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit -- standalone entry-point має повертати exit-code для CI/IDE
|
package/scripts/cli-entry.mjs
CHANGED
|
@@ -1,23 +1,33 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Визначення, чи виконується поточний ESM-модуль як точка входу CLI, а не як import у тестах чи інших модулях.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Прийом: модуль, що хоче знати свій статус, передає `import.meta.url` —
|
|
5
|
+
* `import.meta` лексично прив'язаний до файлу, де він записаний, тому helper-функція
|
|
6
|
+
* без аргументу неминуче дивилася б на свій файл, а не на caller. `realpathSync` на обох
|
|
7
|
+
* сторонах знімає різницю «symlink vs canonical» (macOS `/tmp` ↔ `/private/tmp`,
|
|
8
|
+
* `node_modules/.bin/*` shim, pnpm-style content-addressable links).
|
|
6
9
|
*/
|
|
10
|
+
import { realpathSync } from 'node:fs'
|
|
7
11
|
import { resolve } from 'node:path'
|
|
8
12
|
import { fileURLToPath } from 'node:url'
|
|
9
13
|
|
|
10
14
|
/**
|
|
11
15
|
* Чи виконується модуль як точка входу CLI (прямий запуск), а не через import.
|
|
12
|
-
* @
|
|
16
|
+
* @param {string | URL} [metaUrl] `import.meta.url` модуля-caller'а. Без нього — завжди `false`.
|
|
17
|
+
* @returns {boolean} `true`, якщо файл, з якого передано `metaUrl`, є `process.argv[1]`.
|
|
13
18
|
*/
|
|
14
|
-
export function isRunAsCli() {
|
|
19
|
+
export function isRunAsCli(metaUrl) {
|
|
20
|
+
if (!metaUrl) {
|
|
21
|
+
return false
|
|
22
|
+
}
|
|
23
|
+
const entry = process.argv[1]
|
|
24
|
+
if (!entry) {
|
|
25
|
+
return false
|
|
26
|
+
}
|
|
15
27
|
try {
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
return fileURLToPath(import.meta.url) === resolve(entry)
|
|
28
|
+
const callerPath = realpathSync(fileURLToPath(metaUrl))
|
|
29
|
+
const entryPath = realpathSync(resolve(entry))
|
|
30
|
+
return callerPath === entryPath
|
|
21
31
|
} catch {
|
|
22
32
|
return false
|
|
23
33
|
}
|
|
@@ -7,23 +7,17 @@
|
|
|
7
7
|
* Library-mode виклик з CLI orchestration — інше: див. `runStandardRule` + `fix.mjs::run(ctx)`.
|
|
8
8
|
*/
|
|
9
9
|
import { basename } from 'node:path'
|
|
10
|
-
import { pathToFileURL } from 'node:url'
|
|
11
10
|
|
|
12
11
|
import { isRuleEnabled, readNCursorConfigLite } from './read-n-cursor-config-lite.mjs'
|
|
13
12
|
import { runStandardRule } from './run-standard-rule.mjs'
|
|
14
13
|
import { getOrCreateWalkCache } from '../utils/walk-cache.mjs'
|
|
15
14
|
|
|
16
|
-
|
|
15
|
+
// Re-export для зворотної сумісності: уся `rules/<id>/fix.mjs` уже імпортує `isRunAsCli`
|
|
16
|
+
// саме звідси. Канонічна реалізація — у `scripts/cli-entry.mjs`. Caller передає
|
|
17
|
+
// `import.meta.url`: `if (isRunAsCli(import.meta.url)) …`.
|
|
18
|
+
export { isRunAsCli } from '../cli-entry.mjs'
|
|
17
19
|
|
|
18
|
-
|
|
19
|
-
* Чи поточний модуль запущено як CLI entry-point (`bun rules/<id>/fix.mjs`).
|
|
20
|
-
* @returns {boolean} true, коли `import.meta.url` збігається з `process.argv[1]`
|
|
21
|
-
*/
|
|
22
|
-
export function isRunAsCli() {
|
|
23
|
-
const entry = process.argv[1]
|
|
24
|
-
if (!entry) return false
|
|
25
|
-
return import.meta.url === pathToFileURL(entry).href
|
|
26
|
-
}
|
|
20
|
+
const PACKAGE_NAME = '@nitra/cursor'
|
|
27
21
|
|
|
28
22
|
/**
|
|
29
23
|
* @param {string} ruleDir абсолютний шлях до `rules/<id>/`
|