@7n/rules 1.36.0 → 1.36.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 CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.36.1] - 2026-07-20
4
+
5
+ ### Changed
6
+
7
+ - test
8
+
3
9
  ## [1.36.0] - 2026-07-20
4
10
 
5
11
  ### Added
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@7n/rules",
3
- "version": "1.36.0",
3
+ "version": "1.36.1",
4
4
  "description": "CLI еталонних правил і skills (префікс n-): синк у репозиторій, дельта-lint, конформність",
5
5
  "keywords": [
6
6
  "cli",
@@ -131,20 +131,30 @@ const NOISE_LINE_RE = /^(?:ℹ .*|Resolving dependencies|Resolved, downloaded an
131
131
  */
132
132
  const AJV_SCHEMA_COMPILE_ERROR_RE = /^(?:✖ )?Invalid regular expression:.*$/mu
133
133
 
134
+ /**
135
+ * Рядок успіху v8r — `✔ <file> is valid` (v8r/src/logger.js#success додає префікс `✔ `).
136
+ * `extractFailureLines` не чіпає ці рядки (не `ℹ`-шум), тож у batch-виклику по glob-у, де v8r
137
+ * валідує кілька файлів за раз, `detail` при крайньому провалі містить і `✔`-успіхи попередніх
138
+ * файлів, і сам провал — інакше `isOnlyAjvSchemaCompileErrors` хибно трактує таку суміш як
139
+ * "мішаний випадок" і не спрацьовує.
140
+ */
141
+ const AJV_SUCCESS_LINE_RE = /^✔ .+ is valid$/u
142
+
134
143
  /**
135
144
  * Чи складається `detail` ВИКЛЮЧНО з рядків ajv-помилки компіляції схеми (без жодної genuine
136
- * validation-помилки). Навмисно консервативно: якщо серед рядків `detail` є хоч один, що НЕ
137
- * збігається з `AJV_SCHEMA_COMPILE_ERROR_RE` (напр. "file.yml is invalid" чи ajv `errors[]`-деталь
138
- * genuine порушення в тому ж batch-виклику v8r по glob-у) — не втручаємось, викликач лишає
139
- * оригінальний `code`/`detail` без змін, щоб не замаскувати реальну проблему.
140
- * @param {string} detail рядки `✖ …` з `extractFailureLines`
141
- * @returns {boolean} true усі непорожні рядки `detail` є ajv schema-compile-помилками
145
+ * validation-помилки), ігноруючи `✔`-рядки успіху інших файлів того ж batch-виклику. Навмисно
146
+ * консервативно: якщо серед НЕ-`✔` рядків `detail` є хоч один, що НЕ збігається з
147
+ * `AJV_SCHEMA_COMPILE_ERROR_RE` (напр. "file.yml is invalid" чи ajv `errors[]`-деталь genuine
148
+ * порушення) — не втручаємось, викликач лишає оригінальний `code`/`detail` без змін, щоб не
149
+ * замаскувати реальну проблему.
150
+ * @param {string} detail рядки `✖ …` / `✔ …` з `extractFailureLines`
151
+ * @returns {boolean} true — усі непорожні не-`✔` рядки `detail` є ajv schema-compile-помилками
142
152
  */
143
153
  function isOnlyAjvSchemaCompileErrors(detail) {
144
154
  const lines = detail
145
155
  .split('\n')
146
156
  .map(line => line.trim())
147
- .filter(line => line.length > 0)
157
+ .filter(line => line.length > 0 && !AJV_SUCCESS_LINE_RE.test(line))
148
158
  if (lines.length === 0) return false
149
159
  return lines.every(line => AJV_SCHEMA_COMPILE_ERROR_RE.test(line))
150
160
  }
@@ -158,7 +168,7 @@ function isOnlyAjvSchemaCompileErrors(detail) {
158
168
  function reportAjvSchemaCompileFailures(detail) {
159
169
  for (const line of detail.split('\n')) {
160
170
  const trimmed = line.trim()
161
- if (trimmed.length === 0) continue
171
+ if (trimmed.length === 0 || AJV_SUCCESS_LINE_RE.test(trimmed)) continue
162
172
  process.stdout.write(
163
173
  `⚠ run-v8r: зовнішня схема не компілюється в ajv (не файл) — ${trimmed} Ймовірно, ajv unicodeRegExp-несумісність зі старим стилем escape у чужій схемі; помилка не рахується як порушення.\n`
164
174
  )