@7n/rules 1.20.0 → 1.20.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/package.json +1 -1
- package/rules/bun/licensee/docs/fix-licensee.md +1 -2
- package/rules/bun/licensee/docs/main.md +1 -1
- package/rules/bun/licensee/fix-licensee.mjs +3 -4
- package/rules/bun/licensee/main.mjs +7 -7
- package/rules/docker/lib/docker-hadolint.mjs +6 -8
- package/rules/docker/lib/docs/docker-hadolint.md +1 -1
- package/rules/docker/lint/docs/main.md +1 -1
- package/rules/docker/lint/main.mjs +1 -1
- package/rules/image-compress/check/docs/fix-check.md +1 -2
- package/rules/image-compress/check/docs/main.md +1 -1
- package/rules/image-compress/check/fix-check.mjs +27 -22
- package/rules/image-compress/check/main.mjs +14 -14
- package/rules/js/jscpd_duplicates/docs/main.md +1 -1
- package/rules/js/jscpd_duplicates/main.mjs +7 -8
- package/rules/k8s/kubeconform/docs/main.md +1 -1
- package/rules/k8s/kubeconform/main.mjs +1 -1
- package/rules/k8s/manifests/main.mjs +52 -39
- package/rules/php/cs_fixer/docs/main.md +1 -2
- package/rules/php/cs_fixer/main.mjs +8 -7
- package/rules/php/phpcs/docs/main.md +1 -2
- package/rules/php/phpcs/main.mjs +12 -11
- package/rules/php/project/docs/main.md +1 -2
- package/rules/php/project/main.mjs +19 -16
- package/rules/python/lib/docs/uv-run.md +1 -2
- package/rules/python/lib/uv-run.mjs +12 -8
- package/rules/python/mypy/docs/main.md +1 -1
- package/rules/python/mypy/main.mjs +9 -8
- package/rules/python/project/docs/main.md +1 -2
- package/rules/python/project/main.mjs +33 -23
- package/rules/python/ruff/docs/fix-ruff.md +1 -2
- package/rules/python/ruff/docs/main.md +1 -1
- package/rules/python/ruff/fix-ruff.mjs +12 -10
- package/rules/python/ruff/main.mjs +13 -12
- package/rules/rego/conftest_verify/docs/main.md +1 -2
- package/rules/rego/conftest_verify/main.mjs +12 -10
- package/rules/rego/lib/docs/run-external-tool.md +1 -1
- package/rules/rego/lib/run-external-tool.mjs +10 -7
- package/rules/rego/opa_check/docs/main.md +1 -1
- package/rules/rego/opa_check/main.mjs +3 -3
- package/rules/rego/regal/docs/main.md +1 -1
- package/rules/rego/regal/main.mjs +3 -3
- package/rules/rust/check/docs/fix-check.md +1 -1
- package/rules/rust/check/docs/main.md +1 -1
- package/rules/rust/check/fix-check.mjs +13 -12
- package/rules/rust/check/main.mjs +19 -13
- package/rules/security/scan/docs/main.md +1 -1
- package/rules/security/scan/main.mjs +9 -9
- package/rules/style/lint/docs/fix-lint.md +1 -1
- package/rules/style/lint/docs/main.md +1 -1
- package/rules/style/lint/fix-lint.mjs +8 -8
- package/rules/style/lint/main.mjs +6 -6
- package/rules/text/cspell-fix/docs/fix-worker.md +1 -1
- package/rules/text/cspell-fix/docs/main.md +1 -1
- package/rules/text/cspell-fix/fix-worker.mjs +1 -1
- package/rules/text/cspell-fix/main.mjs +14 -15
- package/rules/text/oxfmt/docs/fix-oxfmt.md +1 -1
- package/rules/text/oxfmt/docs/main.md +1 -1
- package/rules/text/oxfmt/fix-oxfmt.mjs +3 -3
- package/rules/text/oxfmt/main.mjs +6 -5
- package/rules/text/run-dotenv-linter/docs/fix-run-dotenv-linter.md +1 -2
- package/rules/text/run-dotenv-linter/docs/main.md +1 -1
- package/rules/text/run-dotenv-linter/fix-run-dotenv-linter.mjs +2 -2
- package/rules/text/run-dotenv-linter/main.mjs +19 -24
- package/rules/text/run-shellcheck/docs/fix-run-shellcheck.md +1 -2
- package/rules/text/run-shellcheck/docs/main.md +1 -1
- package/rules/text/run-shellcheck/fix-run-shellcheck.mjs +3 -3
- package/rules/text/run-shellcheck/main.mjs +46 -57
- package/rules/text/run-v8r/docs/main.md +1 -1
- package/rules/text/run-v8r/main.mjs +31 -26
- package/scripts/lib/lint-surface/blocking-inventory.mjs +12 -40
- package/scripts/lib/lint-surface/docs/blocking-inventory.md +1 -2
- package/scripts/utils/docs/spawn-async.md +1 -2
- package/scripts/utils/spawn-async.mjs +4 -1
|
@@ -6,47 +6,18 @@
|
|
|
6
6
|
* `execSync` (прямо або через спільний helper), бо це блокує event loop цілком і
|
|
7
7
|
* зробило б паралельний пул ілюзорним.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
* `
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
|
|
19
|
-
const DIRECT_SPAWN_CONCERNS = [
|
|
20
|
-
'text/run-dotenv-linter',
|
|
21
|
-
'text/oxfmt',
|
|
22
|
-
'text/cspell-fix',
|
|
23
|
-
'text/run-v8r',
|
|
24
|
-
'text/run-shellcheck',
|
|
25
|
-
'image-compress/check',
|
|
26
|
-
'php/phpcs',
|
|
27
|
-
'php/project',
|
|
28
|
-
'php/cs_fixer',
|
|
29
|
-
'js/jscpd_duplicates',
|
|
30
|
-
'k8s/manifests',
|
|
31
|
-
'style/lint',
|
|
32
|
-
'bun/licensee',
|
|
33
|
-
'python/ruff',
|
|
34
|
-
'python/project',
|
|
35
|
-
'python/mypy',
|
|
36
|
-
'security/scan',
|
|
37
|
-
'rust/check',
|
|
38
|
-
'rego/conftest_verify'
|
|
39
|
-
]
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Concern-и, чий detector сам не викликає `spawnSync`/`execSync`, але делегує спільному
|
|
43
|
-
* helper-у, який його викликає: `docker/lib/docker-hadolint.mjs` (hadolint) і
|
|
44
|
-
* `rego/lib/run-external-tool.mjs` (regal/opa).
|
|
9
|
+
* Список зараз порожній: усі 22 concern-и, що на момент ADR мали прямий чи
|
|
10
|
+
* shared-helper `spawnSync`/`execSync`, мігровано на `spawnAsync`
|
|
11
|
+
* (`npm/scripts/utils/spawn-async.mjs`). Інвентар лишається як живий guard —
|
|
12
|
+
* `tests/blocking-inventory.test.mjs` сканує активні concern-и репо і провалиться,
|
|
13
|
+
* щойно новий (чи regressed) concern звернеться до `spawnSync`/`execSync` без
|
|
14
|
+
* відповідного запису тут.
|
|
15
|
+
*
|
|
16
|
+
* Протокол для нового blocking concern-а: перевести на `spawnAsync` → оновити
|
|
17
|
+
* caller-и (`await`) → якщо міграція ще не завершена, додати запис сюди на час
|
|
18
|
+
* переходу; guard-тест сам підтвердить, коли можна прибрати.
|
|
45
19
|
*/
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
/** Повний serial-lane список: `${ruleId}/${concernId}` — 19 прямих + 3 через shared helper = 22. */
|
|
49
|
-
export const SERIAL_LANE_CONCERNS = new Set([...DIRECT_SPAWN_CONCERNS, ...SHARED_HELPER_CONCERNS])
|
|
20
|
+
export const SERIAL_LANE_CONCERNS = new Set()
|
|
50
21
|
|
|
51
22
|
/**
|
|
52
23
|
* Чи concern лишається у serial lane `detectAll()` (недоведений non-blocking).
|
|
@@ -55,5 +26,6 @@ export const SERIAL_LANE_CONCERNS = new Set([...DIRECT_SPAWN_CONCERNS, ...SHARED
|
|
|
55
26
|
* @returns {boolean} true — serial lane; false — parallel-safe
|
|
56
27
|
*/
|
|
57
28
|
export function isSerialLane(ruleId, concernId) {
|
|
29
|
+
// eslint-disable-next-line sonarjs/no-empty-collection -- навмисно порожній зараз (протокол вище); живий registry, не dead code
|
|
58
30
|
return SERIAL_LANE_CONCERNS.has(`${ruleId}/${concernId}`)
|
|
59
31
|
}
|
|
@@ -3,9 +3,8 @@ type: JS Module
|
|
|
3
3
|
title: blocking-inventory.mjs
|
|
4
4
|
resource: npm/scripts/lib/lint-surface/blocking-inventory.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
6
|
+
crc: dce1fafd
|
|
7
7
|
model: openai-codex/gpt-5.4-mini
|
|
8
|
-
tier: cloud-min
|
|
9
8
|
score: 100
|
|
10
9
|
issues: judge:inaccurate:0.98
|
|
11
10
|
judgeModel: openai-codex/gpt-5.4-mini
|
|
@@ -3,9 +3,8 @@ type: JS Module
|
|
|
3
3
|
title: spawn-async.mjs
|
|
4
4
|
resource: npm/scripts/utils/spawn-async.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
6
|
+
crc: 0e8ce2ef
|
|
7
7
|
model: openai-codex/gpt-5.4-mini
|
|
8
|
-
tier: cloud-min
|
|
9
8
|
score: 100
|
|
10
9
|
issues: judge:inaccurate:0.98
|
|
11
10
|
judgeModel: openai-codex/gpt-5.4-mini
|
|
@@ -43,15 +43,18 @@ class AbortError extends Error {
|
|
|
43
43
|
* @param {number} [opts.killGraceMs] пауза між `SIGTERM` і ескалацією до `SIGKILL` (дефолт 5000)
|
|
44
44
|
* @param {string} [opts.cwd] робочий каталог дочірнього процесу
|
|
45
45
|
* @param {Record<string, string>} [opts.env] оточення дочірнього процесу
|
|
46
|
+
* @param {string} [opts.input] дані для запису в stdin дочірнього процесу (`utf8`, аналог
|
|
47
|
+
* `spawnSync`-опції `input`); stdin закривається (`end`) одразу після запису
|
|
46
48
|
* @returns {Promise<SpawnAsyncResult>} нормалізований результат виконання
|
|
47
49
|
*/
|
|
48
50
|
export async function spawnAsync(cmd, args, opts = {}) {
|
|
49
|
-
const { signal, timeoutMs, killGraceMs = 5000, ...spawnOpts } = opts
|
|
51
|
+
const { signal, timeoutMs, killGraceMs = 5000, input, ...spawnOpts } = opts
|
|
50
52
|
if (signal?.aborted) throw new AbortError()
|
|
51
53
|
|
|
52
54
|
const child = spawn(cmd, args, spawnOpts)
|
|
53
55
|
child.stdout?.setEncoding('utf8')
|
|
54
56
|
child.stderr?.setEncoding('utf8')
|
|
57
|
+
if (input !== undefined) child.stdin?.end(input, 'utf8')
|
|
55
58
|
|
|
56
59
|
let stdout = ''
|
|
57
60
|
let stderr = ''
|