@nitra/cursor 1.8.157 → 1.8.158

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
@@ -4,6 +4,13 @@
4
4
 
5
5
  Формат — [Keep a Changelog](https://keepachangelog.com/uk/1.1.0/), нумерація — [SemVer](https://semver.org/lang/uk/).
6
6
 
7
+ ## [1.8.158] - 2026-05-01
8
+
9
+ ### Changed
10
+
11
+ - `check-hasura.mjs`: файл `.env` без імені (локальний файл розробника) виключено з перевірки `HASURA_GRAPHQL_ENDPOINT` — скануються лише `*.env` із префіксом (`dev.env`, `production.env` тощо).
12
+ - `hasura.mdc`: явно зафіксовано виключення для `.env` без імені.
13
+
7
14
  ## [1.8.157] - 2026-04-30
8
15
 
9
16
  ### Added
package/mdc/hasura.mdc CHANGED
@@ -24,6 +24,8 @@ HASURA_GRAPHQL_ENDPOINT=http://contract-h.ua-contract.svc.abie-ua.internal:8080
24
24
 
25
25
  Правило застосовується для проєктів **nitra** (у кореневому `package.json` `"repository": "https://github.com/nitra/*"`) і **abie** (`"repository": "https://github.com/abinbevefes/*"`); для інших репозиторіїв перевірка пропускається.
26
26
 
27
+ Файл .env це (без імені) це виключення з цього правила, його змінювати не потрібно
28
+
27
29
  ## Перевірка
28
30
 
29
31
  `npx @nitra/cursor check hasura`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nitra/cursor",
3
- "version": "1.8.157",
3
+ "version": "1.8.158",
4
4
  "description": "CLI для завантаження cursor-правил (префікс n-) у локальний репозиторій",
5
5
  "keywords": [
6
6
  "cli",
@@ -44,6 +44,7 @@
44
44
  "yaml": "^2.8.3"
45
45
  },
46
46
  "engines": {
47
+ "bun": ">=1.3",
47
48
  "node": ">=25"
48
49
  }
49
50
  }
@@ -18,8 +18,9 @@
18
18
  * звіряються конкретні `<service>` і `<namespace>` з ними.
19
19
  *
20
20
  * Скануються всі файли `*.env` (наприклад `dev.env`, `production.env`); файл
21
- * `.env` без префікса також враховується. Пропускаються `node_modules`,
22
- * `.git`, `dist`, `coverage`, `.turbo`, `.next` (як у `walkDir`).
21
+ * `.env` без імені виключення з правила (локальний файл розробника), його
22
+ * не перевіряємо. Пропускаються `node_modules`, `.git`, `dist`, `coverage`,
23
+ * `.turbo`, `.next` (як у `walkDir`).
23
24
  */
24
25
  import { existsSync } from 'node:fs'
25
26
  import { readFile } from 'node:fs/promises'
@@ -40,6 +41,7 @@ const HASURA_NAMESPACE_FILE = `${HASURA_BASE_DIR}/namespace.yaml`
40
41
 
41
42
  const ENV_FILE_RE = /\.env$/u
42
43
  const HASURA_ENDPOINT_LINE_RE = /^[ \t]*(?:export[ \t]+)?HASURA_GRAPHQL_ENDPOINT[ \t]*=[ \t]*['"]?([^'"\r\n#]+)/mu
44
+ const INTERNAL_HASURA_URL_RE = /^http:\/\/([^./]+)\.([^./]+)\.svc\.([^./]+)\.internal:(\d+)\/?$/u
43
45
 
44
46
  /**
45
47
  * Розбір значення `HASURA_GRAPHQL_ENDPOINT` як внутрішнього кластерного URL.
@@ -47,11 +49,10 @@ const HASURA_ENDPOINT_LINE_RE = /^[ \t]*(?:export[ \t]+)?HASURA_GRAPHQL_ENDPOINT
47
49
  * `<service>.<namespace>.svc.<cluster>.internal` та явного порту.
48
50
  * @param {string} url значення з `.env` (без огорнутих лапок)
49
51
  * @returns {{ ok: true, service: string, namespace: string, cluster: string, port: string } | { ok: false }}
50
- * деталі URL або фейл, якщо формат не відповідає внутрішньому кластерному URL
52
+ * розібрані сегменти або `{ ok: false }`, якщо формат не відповідає внутрішньому кластерному URL
51
53
  */
52
54
  export function parseInternalHasuraEndpoint(url) {
53
- const trimmed = url.trim()
54
- const m = trimmed.match(/^http:\/\/([^./]+)\.([^./]+)\.svc\.([^./]+)\.internal:(\d+)\/?$/u)
55
+ const m = url.trim().match(INTERNAL_HASURA_URL_RE)
55
56
  if (!m) {
56
57
  return { ok: false }
57
58
  }
@@ -84,12 +85,17 @@ async function readYamlMetadataName(absPath, kind) {
84
85
  }
85
86
 
86
87
  /**
87
- * Чи відносний шлях вказує на `*.env` (включно з `.env`).
88
+ * Чи відносний шлях вказує на `*.env`, який треба перевіряти hasura.mdc.
89
+ * Файл рівно `.env` (без імені) — виключення з правила (локальний файл
90
+ * розробника, hasura.mdc його не зачіпає), тому повертає false.
88
91
  * @param {string} relPath posix-шлях відносно кореня
89
- * @returns {boolean} true для файлів виду `.env`, `dev.env`, `nitra.env`
92
+ * @returns {boolean} true для `dev.env`, `nitra.env`; false для `.env`
90
93
  */
91
94
  export function isEnvFile(relPath) {
92
- return ENV_FILE_RE.test(relPath)
95
+ if (!ENV_FILE_RE.test(relPath)) {
96
+ return false
97
+ }
98
+ return basename(relPath) !== '.env'
93
99
  }
94
100
 
95
101
  /**
@@ -127,9 +133,10 @@ async function checkEnvFile(relPath, expected, reporter) {
127
133
  const value = m[1].trim()
128
134
  const parsed = parseInternalHasuraEndpoint(value)
129
135
  if (!parsed.ok) {
136
+ // eslint-disable-next-line @microsoft/sdl/no-insecure-url, sonarjs/no-clear-text-protocols -- hasura.mdc вимагає саме http:// для кластерного URL (TLS не використовується)
137
+ const example = 'http://<service>.<namespace>.svc.<cluster>.internal:<port>'
130
138
  fail(
131
- `${relPath}: HASURA_GRAPHQL_ENDPOINT="${value}" — потрібен внутрішній кластерний URL виду ` +
132
- `https://<service>.<namespace>.svc.<cluster>.internal:<port> (hasura.mdc)`
139
+ `${relPath}: HASURA_GRAPHQL_ENDPOINT="${value}" — потрібен внутрішній кластерний URL виду ${example} (hasura.mdc)`
133
140
  )
134
141
  return
135
142
  }