@nitra/cursor 1.8.105 → 1.8.108
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/bin/auto-rules.md +2 -2
- package/bin/n-cursor.js +5 -15
- package/mdc/js-pino.mdc +2 -2
- package/mdc/k8s.mdc +22 -12
- package/mdc/text.mdc +3 -3
- package/package.json +1 -1
- package/scripts/check-abie.mjs +515 -528
- package/scripts/check-bun.mjs +106 -78
- package/scripts/check-ga.mjs +151 -119
- package/scripts/check-js-lint.mjs +256 -179
- package/scripts/check-js-pino.mjs +48 -3
- package/scripts/check-k8s.mjs +403 -34
- package/scripts/check-nginx-default-tpl.mjs +109 -91
- package/scripts/check-npm-module.mjs +163 -116
- package/scripts/check-style-lint.mjs +74 -61
- package/scripts/check-text.mjs +289 -209
- package/scripts/check-vue.mjs +108 -67
- package/scripts/utils/bunyan-imports.mjs +182 -0
- package/scripts/utils/gha-workflow.mjs +3 -1
package/bin/auto-rules.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
## Правила, які автоматично додається до .n-cursor.json
|
|
6
6
|
|
|
7
|
-
abie - якщо в кореневому package.json в секції "repository" присутній текст "https://github.com/abinbevefes
|
|
7
|
+
abie - якщо в кореневому package.json в секції "repository" присутній текст "<https://github.com/abinbevefes/**/>"
|
|
8
8
|
|
|
9
9
|
bun - якщо в корені проекту є package.json
|
|
10
10
|
|
|
@@ -32,7 +32,7 @@ vue - якщо присутній хоч один vue файл
|
|
|
32
32
|
|
|
33
33
|
## Скіли, які автоматично додається до .n-cursor.json
|
|
34
34
|
|
|
35
|
-
abie-kustomize - якщо в кореневому package.json в секції "repository" присутній текст "https://github.com/abinbevefes
|
|
35
|
+
abie-kustomize - якщо в кореневому package.json в секції "repository" присутній текст "<https://github.com/abinbevefes/**/>"
|
|
36
36
|
|
|
37
37
|
fix - завжди
|
|
38
38
|
|
package/bin/n-cursor.js
CHANGED
|
@@ -75,12 +75,7 @@ const NEWLINE_RE = /\r?\n/
|
|
|
75
75
|
const LEADING_SPACES_RE = /^\s+/
|
|
76
76
|
|
|
77
77
|
/** Ключі `.n-cursor.json`, де значення — масиви id; після запуску CLI сортуються за алфавітом */
|
|
78
|
-
const CONFIG_SORTED_ARRAY_KEYS = /** @type {const} */ ([
|
|
79
|
-
'rules',
|
|
80
|
-
'skills',
|
|
81
|
-
'disable-rules',
|
|
82
|
-
'disable-skills'
|
|
83
|
-
])
|
|
78
|
+
const CONFIG_SORTED_ARRAY_KEYS = /** @type {const} */ (['rules', 'skills', 'disable-rules', 'disable-skills'])
|
|
84
79
|
|
|
85
80
|
/**
|
|
86
81
|
* Сортує масиви id у конфігу за алфавітом (`localeCompare`), щоб порядок у файлі був стабільним після синку.
|
|
@@ -90,14 +85,10 @@ const CONFIG_SORTED_ARRAY_KEYS = /** @type {const} */ ([
|
|
|
90
85
|
function sortConfigIdArrays(config) {
|
|
91
86
|
const out = { ...config }
|
|
92
87
|
for (const key of CONFIG_SORTED_ARRAY_KEYS) {
|
|
93
|
-
if (!(key in out)) {
|
|
94
|
-
continue
|
|
95
|
-
}
|
|
96
88
|
const v = out[key]
|
|
97
|
-
if (
|
|
98
|
-
|
|
89
|
+
if (key in out && Array.isArray(v)) {
|
|
90
|
+
out[key] = v.map(String).toSorted((a, b) => a.localeCompare(b))
|
|
99
91
|
}
|
|
100
|
-
out[key] = v.map(x => String(x)).toSorted((a, b) => a.localeCompare(b))
|
|
101
92
|
}
|
|
102
93
|
return out
|
|
103
94
|
}
|
|
@@ -970,9 +961,8 @@ async function runSync() {
|
|
|
970
961
|
console.log(`\n🔧 ${PACKAGE_NAME} — завантаження cursor-правил\n`)
|
|
971
962
|
|
|
972
963
|
const projectRoot = cwd()
|
|
973
|
-
const effectivePackageRoot = await runSyncStep(
|
|
974
|
-
|
|
975
|
-
() => upgradeNitraCursorToLatestAndBunInstall(projectRoot, BUNDLED_PACKAGE_ROOT)
|
|
964
|
+
const effectivePackageRoot = await runSyncStep(`❌ Не вдалося оновити ${PACKAGE_NAME} або виконати bun i: `, () =>
|
|
965
|
+
upgradeNitraCursorToLatestAndBunInstall(projectRoot, BUNDLED_PACKAGE_ROOT)
|
|
976
966
|
)
|
|
977
967
|
|
|
978
968
|
const bundledMdcDir = join(effectivePackageRoot, 'mdc')
|
package/mdc/js-pino.mdc
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Використання @nitra/pino
|
|
3
3
|
alwaysApply: true
|
|
4
|
-
version: '1.
|
|
4
|
+
version: '1.1'
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
Проект використовує @nitra/pino для логування.
|
|
8
|
-
Якщо в проекті присутній @nitra/bunyan, то він повинен бути замінений на @nitra/pino.
|
|
8
|
+
Якщо в проекті присутній @nitra/bunyan, то він повинен бути замінений на @nitra/pino — як у `package.json`, так і в коді: усі `import` / `require` / динамічні `import()` з `@nitra/bunyan` (і застарілого `bunyan`) треба замінити на `@nitra/pino` і за потреби адаптувати виклики під його API.
|
|
9
9
|
|
|
10
10
|
В **/k8s/base/configmap.yaml повинен бути заданий OTEL_RESOURCE_ATTRIBUTES: 'service.name=<project_name>,service.namespace=<project_namespace>'
|
|
11
11
|
а в директоріях з kustomize повинні бути перевизначені значення OTEL_RESOURCE_ATTRIBUTES і в них service.namespace повинен відповідати namespace, в якому знаходиться дана директорія.
|
package/mdc/k8s.mdc
CHANGED
|
@@ -110,7 +110,16 @@ resources: {}
|
|
|
110
110
|
|
|
111
111
|
### HTTPRoute для Deployment з `hasura/graphql-engine`
|
|
112
112
|
|
|
113
|
-
|
|
113
|
+
**Прив'язка:** **check k8s** вважає **HTTPRoute** Hasura-маршрутом, якщо в **тому самому каталозі** є **`Deployment`** з образом **`hasura/graphql-engine`**, а його **`metadata.name`** збігається з **`metadata.name`** цього **`HTTPRoute`**. Саме за цією конвенцією скрипт шукає пари для звірки канону.
|
|
114
|
+
|
|
115
|
+
**Префікс параметризовано:** **`<prefix>`** — рядок перед **`/ql`** у першому Hasura-правилі (**`Exact <prefix>/ql`**). Може бути порожнім (**`<prefix>`** = **``**, шлях **`/ql`**) або непорожнім (наприклад **`<prefix>`** = **`/notify`**, шлях **`/notify/ql`**). Усі інші Hasura-правила цього **HTTPRoute** мають містити той самий **`<prefix>`**.
|
|
116
|
+
|
|
117
|
+
**Канон — 4 правила у цьому порядку** (додаткові правила поверх канону дозволені — вони просто ігноруються під час зіставлення):
|
|
118
|
+
|
|
119
|
+
1. **`Exact <prefix>/ql`** → **`RequestRedirect`** **`ReplaceFullPath <prefix>/ql/console`** **`statusCode: 302`**.
|
|
120
|
+
2. **`Exact <prefix>/ql/`** → те саме (редирект на **`<prefix>/ql/console`** 302).
|
|
121
|
+
3. **`PathPrefix <prefix>/ql`** → **`URLRewrite`** **`ReplacePrefixMatch /`**, один **`backendRef`** на headless **Service** (**`-hl`**).
|
|
122
|
+
4. **WebSocket:** **`PathPrefix <prefix>/ql`** + header **`Upgrade: websocket`** → **`URLRewrite`** **`ReplacePrefixMatch /`** + **`RequestHeaderModifier`** **`remove: [Authorization]`** (авторизація для WebSocket іде всередині messages). Той самий **`backendRef`**.
|
|
114
123
|
|
|
115
124
|
**`parentRefs`**, **`hostnames`**, **`metadata.namespace`** / **`name`** підлаштуй під середовище. У **`backendRefs.name`** вказуй **headless** **Service** з суфіксом **`-hl`** (див. розділ **«Service: `svc.yaml` і `svc-hl.yaml`»**); у прикладі **`db-h-hl`** заміни на фактичне ім’я.
|
|
116
125
|
|
|
@@ -123,7 +132,9 @@ metadata:
|
|
|
123
132
|
namespace: dev
|
|
124
133
|
spec:
|
|
125
134
|
parentRefs:
|
|
126
|
-
-
|
|
135
|
+
- group: gateway.networking.k8s.io
|
|
136
|
+
kind: Gateway
|
|
137
|
+
name: gw
|
|
127
138
|
namespace: dev
|
|
128
139
|
sectionName: https
|
|
129
140
|
hostnames:
|
|
@@ -164,16 +175,22 @@ spec:
|
|
|
164
175
|
backendRefs:
|
|
165
176
|
- name: db-h-hl
|
|
166
177
|
port: 8080
|
|
167
|
-
#
|
|
178
|
+
# у websocket авторизація йде всередині messages
|
|
179
|
+
# Той самий URLRewrite, що й для HTTP: інакше бекенд бачить /ql/v1/graphql замість /v1/graphql
|
|
168
180
|
- matches:
|
|
169
181
|
- path:
|
|
170
182
|
type: PathPrefix
|
|
171
|
-
value: /
|
|
183
|
+
value: /ql
|
|
172
184
|
headers:
|
|
173
185
|
- type: Exact
|
|
174
186
|
name: Upgrade
|
|
175
187
|
value: websocket
|
|
176
188
|
filters:
|
|
189
|
+
- type: URLRewrite
|
|
190
|
+
urlRewrite:
|
|
191
|
+
path:
|
|
192
|
+
type: ReplacePrefixMatch
|
|
193
|
+
replacePrefixMatch: /
|
|
177
194
|
- type: RequestHeaderModifier
|
|
178
195
|
requestHeaderModifier:
|
|
179
196
|
remove:
|
|
@@ -181,13 +198,6 @@ spec:
|
|
|
181
198
|
backendRefs:
|
|
182
199
|
- name: db-h-hl
|
|
183
200
|
port: 8080
|
|
184
|
-
- matches:
|
|
185
|
-
- path:
|
|
186
|
-
type: PathPrefix
|
|
187
|
-
value: /
|
|
188
|
-
backendRefs:
|
|
189
|
-
- name: db-h-hl
|
|
190
|
-
port: 8080
|
|
191
201
|
```
|
|
192
202
|
|
|
193
203
|
## Service: заборонені анотації GKE
|
|
@@ -277,7 +287,7 @@ patches:
|
|
|
277
287
|
|
|
278
288
|
**`npx @nitra/cursor check k8s`** — програмні критерії в **JSDoc на початку** **`npm/scripts/check-k8s.mjs`**. Якщо під **`k8s`** немає **`*.yaml`** — крок пропущено. Канон **`$schema`** для редактора — розділ **«Визначення схеми YAML`** нижче.
|
|
279
289
|
|
|
280
|
-
**Не входить у check k8s:**
|
|
290
|
+
**Не входить у check k8s:** **kubeconform** / **kubescape** — це **`bun run lint-k8s`**.
|
|
281
291
|
|
|
282
292
|
## Коли застосовувати (агентам)
|
|
283
293
|
|
package/mdc/text.mdc
CHANGED
|
@@ -120,7 +120,7 @@ version: '1.25'
|
|
|
120
120
|
"lint-text": "npx cspell . && bunx markdownlint-cli2 --fix \"**/*.md\" \"**/*.mdc\" && bun ./npm/scripts/run-v8r.mjs"
|
|
121
121
|
},
|
|
122
122
|
"devDependencies": {
|
|
123
|
-
"@nitra/cspell-dict": "^2.
|
|
123
|
+
"@nitra/cspell-dict": "^2.1.0"
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
126
|
```
|
|
@@ -235,7 +235,7 @@ jobs:
|
|
|
235
235
|
"lint-text": "npx cspell . && bunx markdownlint-cli2 --fix \"**/*.md\" \"**/*.mdc\" && bun ./npm/scripts/run-v8r.mjs"
|
|
236
236
|
},
|
|
237
237
|
"devDependencies": {
|
|
238
|
-
"@nitra/cspell-dict": "^2.
|
|
238
|
+
"@nitra/cspell-dict": "^2.1.0"
|
|
239
239
|
}
|
|
240
240
|
}
|
|
241
241
|
```
|
|
@@ -252,7 +252,7 @@ jobs:
|
|
|
252
252
|
"lint-text": "npx cspell . && bunx markdownlint-cli2 --fix \"**/*.md\" \"**/*.mdc\" && bun ./npm/scripts/run-v8r.mjs"
|
|
253
253
|
},
|
|
254
254
|
"devDependencies": {
|
|
255
|
-
"@nitra/cspell-dict": "^2.
|
|
255
|
+
"@nitra/cspell-dict": "^2.1.0"
|
|
256
256
|
}
|
|
257
257
|
}
|
|
258
258
|
```
|