@nitra/cursor 1.8.80 → 1.8.81

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/mdc/abie.mdc CHANGED
@@ -36,7 +36,7 @@ spec:
36
36
 
37
37
  ## k8s: overlay **HTTPRoute** (**ua** / **ru**)
38
38
 
39
- За наявності **Deployment** під **k8s** і наявності **Vite** (**`vite.config.js`**, **`vite.config.mjs`** або **`vite.config.ts`** у каталозі пакета) у **`ua/kustomization.yaml`** та **`ru/kustomization.yaml`** цього пакета потрібні **inline JSON6902** у **`patches`**: **target** **`kind: HTTPRoute`**, **непорожній `name`** (як у маніфесті маршруту). Мають бути зміни **`/spec/hostnames`** (домени abie — у скрипті) та **`/spec/parentRefs/0/namespace`** (**`ua`** / **`ru`**). Для **ru** — анотація **`gwin.yandex.cloud/rules.http.upgradeTypes: websocket`**. Як обирати **`op`** (**add** / **replace** тощо) у patch — **k8s.mdc** (розділ про JSON patch у kustomization).
39
+ За наявності **Deployment** під **k8s** і наявності **Vite** (**`vite.config.js`**, **`vite.config.mjs`** або **`vite.config.ts`** у каталозі пакета) у **`ua/kustomization.yaml`** та **`ru/kustomization.yaml`** цього пакета потрібні **inline JSON6902** у **`patches`**: **target** **`kind: HTTPRoute`**, **непорожній `name`** (як у маніфесті маршруту). Мають бути зміни **`/spec/hostnames`** (домени abie — у скрипті) та **`/spec/parentRefs/0/namespace`** (**`ua`** / **`ru`**). Для **ru** — анотація **`gwin.yandex.cloud/rules.http.upgradeTypes: websocket`** лише якщо в **тому ж** **`ru/kustomization.yaml`** є згадка **`HASURA_GRAPHQL_JWT_SECRET`** (типово patch на **ConfigMap** Hasura). Як обирати **`op`** (**add** / **replace** тощо) у patch — **k8s.mdc** (розділ про JSON patch у kustomization).
40
40
 
41
41
  ```yaml title="…/ua/kustomization.yaml (фрагмент)"
42
42
  - target:
@@ -66,7 +66,9 @@ spec:
66
66
  value: ru
67
67
  ```
68
68
 
69
- ```yaml title="…/ru/kustomization.yaml (фрагмент)"
69
+ Якщо в цьому ж файлі є **`HASURA_GRAPHQL_JWT_SECRET`** (Hasura з JWT), додай окремий patch на **HTTPRoute** з анотацією для WebSocket:
70
+
71
+ ```yaml title="…/ru/kustomization.yaml (фрагмент, після patch на ConfigMap з HASURA_GRAPHQL_JWT_SECRET)"
70
72
  - target:
71
73
  kind: HTTPRoute
72
74
  name: my-httproute
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nitra/cursor",
3
- "version": "1.8.80",
3
+ "version": "1.8.81",
4
4
  "description": "CLI для завантаження cursor-правил (префікс n-) у локальний репозиторій",
5
5
  "keywords": [
6
6
  "cli",
@@ -23,7 +23,8 @@
23
23
  *
24
24
  * **HTTPRoute (overlay):** лише якщо в каталозі пакета (батько **`k8s`**) є **`vite.config.js`**, **`vite.config.mjs`** або **`vite.config.ts`**
25
25
  * — тоді в **`ua`/`ru` kustomization** потрібен patch на **`kind: HTTPRoute`**, **непорожній `target.name`**: **`/spec/hostnames`**
26
- * (домени abie.mdc), **`/spec/parentRefs/0/namespace`** (**ua** / **ru**); для **ru** — **`gwin.yandex.cloud/rules.http.upgradeTypes: websocket`**.
26
+ * (домени abie.mdc), **`/spec/parentRefs/0/namespace`** (**ua** / **ru**); для **ru** — **`gwin.yandex.cloud/rules.http.upgradeTypes: websocket`**,
27
+ * якщо в тому ж **`kustomization.yaml`** згадується **`HASURA_GRAPHQL_JWT_SECRET`** (Hasura + JWT).
27
28
  * Вибір **`op`** — **k8s.mdc**.
28
29
  */
29
30
  import { existsSync } from 'node:fs'
@@ -39,6 +40,9 @@ import { walkDir } from './utils/walkDir.mjs'
39
40
 
40
41
  const CONFIG_FILE = '.n-cursor.json'
41
42
 
43
+ /** Маркер у kustomization.yaml: якщо зустрічається у файлі — для overlay ru у patch HTTPRoute потрібна анотація gwin…websocket. */
44
+ const HASURA_JWT_SECRET_IN_KUSTOMIZATION = 'HASURA_GRAPHQL_JWT_SECRET'
45
+
42
46
  /** Очікуваний URL **`$schema`** для **hc.yaml** (abie.mdc). */
43
47
  export const ABIE_HC_SCHEMA_URL = 'https://datreeio.github.io/CRDs-catalog/networking.gke.io/healthcheckpolicy_v1.json'
44
48
 
@@ -602,11 +606,12 @@ export function getCombinedNginxRunPatchTextFromKustomization(raw) {
602
606
  * Перевіряє сукупний текст patch(ів) **HTTPRoute** (будь-яке **target.name**) на відповідність abie.mdc.
603
607
  * @param {string} combined текст одного або кількох inline **patch**, розділених символом нового рядка
604
608
  * @param {'ua' | 'ru'} mode **ua** або **ru**
609
+ * @param {string} [fullKustomizationRaw] повний текст **kustomization.yaml** — для **ru** визначає, чи потрібна анотація **gwin…websocket** (лише якщо є **`HASURA_GRAPHQL_JWT_SECRET`**)
605
610
  * @returns {string | null} повідомлення про помилку або **null**
606
611
  */
607
- export function validateAbieNginxRunHttpRoutePatches(combined, mode) {
612
+ export function validateAbieNginxRunHttpRoutePatches(combined, mode, fullKustomizationRaw) {
608
613
  if (typeof combined !== 'string' || combined.trim() === '') {
609
- return `очікується patch target kind HTTPRoute з непорожнім target.name (hostnames, parentRefs namespace ${mode}; для ru — також gwin… websocket) — abie.mdc`
614
+ return `очікується patch target kind HTTPRoute з непорожнім target.name (hostnames, parentRefs namespace ${mode}; для ru — gwin… websocket лише за наявності HASURA_GRAPHQL_JWT_SECRET у файлі) — abie.mdc`
610
615
  }
611
616
  if (!/path:\s*\/spec\/hostnames\b/m.test(combined)) {
612
617
  return 'HTTPRoute: потрібен path /spec/hostnames у patch (abie.mdc)'
@@ -622,8 +627,12 @@ export function validateAbieNginxRunHttpRoutePatches(combined, mode) {
622
627
  if (!namespaceOk) {
623
628
  return `HTTPRoute: потрібен path /spec/parentRefs/0/namespace з value ${mode} (abie.mdc)`
624
629
  }
625
- if (mode === 'ru' && !/gwin\.yandex\.cloud\/rules\.http\.upgradeTypes:\s*['"]?websocket['"]?/m.test(combined)) {
626
- return 'HTTPRoute (ru): потрібна анотація gwin.yandex.cloud/rules.http.upgradeTypes: websocket (abie.mdc)'
630
+ const ruNeedsWebsocket =
631
+ mode === 'ru' &&
632
+ typeof fullKustomizationRaw === 'string' &&
633
+ fullKustomizationRaw.includes(HASURA_JWT_SECRET_IN_KUSTOMIZATION)
634
+ if (ruNeedsWebsocket && !/gwin\.yandex\.cloud\/rules\.http\.upgradeTypes:\s*['"]?websocket['"]?/m.test(combined)) {
635
+ return 'HTTPRoute (ru): за наявності HASURA_GRAPHQL_JWT_SECRET у kustomization потрібна анотація gwin.yandex.cloud/rules.http.upgradeTypes: websocket (abie.mdc)'
627
636
  }
628
637
  return null
629
638
  }
@@ -636,7 +645,7 @@ export function validateAbieNginxRunHttpRoutePatches(combined, mode) {
636
645
  */
637
646
  export function kustomizationHasAbieNginxRunHttpRoutePatch(raw, mode) {
638
647
  const combined = getCombinedNginxRunPatchTextFromKustomization(raw)
639
- return validateAbieNginxRunHttpRoutePatches(combined, mode) === null
648
+ return validateAbieNginxRunHttpRoutePatches(combined, mode, raw) === null
640
649
  }
641
650
 
642
651
  /**
@@ -947,7 +956,7 @@ async function ensureUaRuAbieHttpRoutePatches(root, yamlFilesAbs, fail, passFn)
947
956
  return
948
957
  }
949
958
  const combined = getCombinedNginxRunPatchTextFromKustomization(raw)
950
- const v = validateAbieNginxRunHttpRoutePatches(combined, 'ru')
959
+ const v = validateAbieNginxRunHttpRoutePatches(combined, 'ru', raw)
951
960
  if (v !== null) {
952
961
  fail(`${rel}: ${v}`)
953
962
  return